OSDN Git Service

* config/vax/vax.h (target_flags, MASK_UNIX_ASM, MASK_VAXC_ALIGNMENT)
[pf3gnuchains/gcc-fork.git] / gcc / ada / i-cobol.ads
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                      I N T E R F A C E S . C O B O L                     --
6 --                                                                          --
7 --                                 S p e c                                  --
8 --                             (ASCII Version)                              --
9 --                                                                          --
10 --          Copyright (C) 1993-2004 Free Software Foundation, Inc.          --
11 --                                                                          --
12 -- This specification is derived from the Ada Reference Manual for use with --
13 -- GNAT. The copyright notice above, and the license provisions that follow --
14 -- apply solely to the  contents of the part following the private keyword. --
15 --                                                                          --
16 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
17 -- terms of the  GNU General Public License as published  by the Free Soft- --
18 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
19 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
20 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
21 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
22 -- for  more details.  You should have  received  a copy of the GNU General --
23 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
24 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
25 -- MA 02111-1307, USA.                                                      --
26 --                                                                          --
27 -- As a special exception,  if other files  instantiate  generics from this --
28 -- unit, or you link  this unit with other files  to produce an executable, --
29 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
30 -- covered  by the  GNU  General  Public  License.  This exception does not --
31 -- however invalidate  any other reasons why  the executable file  might be --
32 -- covered by the  GNU Public License.                                      --
33 --                                                                          --
34 -- GNAT was originally developed  by the GNAT team at  New York University. --
35 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
36 --                                                                          --
37 ------------------------------------------------------------------------------
38
39 --  This version of the COBOL interfaces package assumes that the COBOL
40 --  compiler uses ASCII as its internal representation of characters, i.e.
41 --  that the type COBOL_Character has the same representation as the Ada
42 --  type Standard.Character.
43
44 package Interfaces.COBOL is
45
46    ------------------------------------------------------------
47    -- Types And Operations For Internal Data Representations --
48    ------------------------------------------------------------
49
50    type Floating      is new Float;
51    type Long_Floating is new Long_Float;
52
53    type Binary        is new Integer;
54    type Long_Binary   is new Long_Long_Integer;
55
56    Max_Digits_Binary      : constant := 9;
57    Max_Digits_Long_Binary : constant := 18;
58
59    type Decimal_Element is mod 16;
60    type Packed_Decimal is array (Positive range <>) of Decimal_Element;
61    pragma Pack (Packed_Decimal);
62
63    type COBOL_Character is new Character;
64
65    Ada_To_COBOL : array (Standard.Character) of COBOL_Character := (
66      COBOL_Character'Val (000), COBOL_Character'Val (001),
67      COBOL_Character'Val (002), COBOL_Character'Val (003),
68      COBOL_Character'Val (004), COBOL_Character'Val (005),
69      COBOL_Character'Val (006), COBOL_Character'Val (007),
70      COBOL_Character'Val (008), COBOL_Character'Val (009),
71      COBOL_Character'Val (010), COBOL_Character'Val (011),
72      COBOL_Character'Val (012), COBOL_Character'Val (013),
73      COBOL_Character'Val (014), COBOL_Character'Val (015),
74      COBOL_Character'Val (016), COBOL_Character'Val (017),
75      COBOL_Character'Val (018), COBOL_Character'Val (019),
76      COBOL_Character'Val (020), COBOL_Character'Val (021),
77      COBOL_Character'Val (022), COBOL_Character'Val (023),
78      COBOL_Character'Val (024), COBOL_Character'Val (025),
79      COBOL_Character'Val (026), COBOL_Character'Val (027),
80      COBOL_Character'Val (028), COBOL_Character'Val (029),
81      COBOL_Character'Val (030), COBOL_Character'Val (031),
82      COBOL_Character'Val (032), COBOL_Character'Val (033),
83      COBOL_Character'Val (034), COBOL_Character'Val (035),
84      COBOL_Character'Val (036), COBOL_Character'Val (037),
85      COBOL_Character'Val (038), COBOL_Character'Val (039),
86      COBOL_Character'Val (040), COBOL_Character'Val (041),
87      COBOL_Character'Val (042), COBOL_Character'Val (043),
88      COBOL_Character'Val (044), COBOL_Character'Val (045),
89      COBOL_Character'Val (046), COBOL_Character'Val (047),
90      COBOL_Character'Val (048), COBOL_Character'Val (049),
91      COBOL_Character'Val (050), COBOL_Character'Val (051),
92      COBOL_Character'Val (052), COBOL_Character'Val (053),
93      COBOL_Character'Val (054), COBOL_Character'Val (055),
94      COBOL_Character'Val (056), COBOL_Character'Val (057),
95      COBOL_Character'Val (058), COBOL_Character'Val (059),
96      COBOL_Character'Val (060), COBOL_Character'Val (061),
97      COBOL_Character'Val (062), COBOL_Character'Val (063),
98      COBOL_Character'Val (064), COBOL_Character'Val (065),
99      COBOL_Character'Val (066), COBOL_Character'Val (067),
100      COBOL_Character'Val (068), COBOL_Character'Val (069),
101      COBOL_Character'Val (070), COBOL_Character'Val (071),
102      COBOL_Character'Val (072), COBOL_Character'Val (073),
103      COBOL_Character'Val (074), COBOL_Character'Val (075),
104      COBOL_Character'Val (076), COBOL_Character'Val (077),
105      COBOL_Character'Val (078), COBOL_Character'Val (079),
106      COBOL_Character'Val (080), COBOL_Character'Val (081),
107      COBOL_Character'Val (082), COBOL_Character'Val (083),
108      COBOL_Character'Val (084), COBOL_Character'Val (085),
109      COBOL_Character'Val (086), COBOL_Character'Val (087),
110      COBOL_Character'Val (088), COBOL_Character'Val (089),
111      COBOL_Character'Val (090), COBOL_Character'Val (091),
112      COBOL_Character'Val (092), COBOL_Character'Val (093),
113      COBOL_Character'Val (094), COBOL_Character'Val (095),
114      COBOL_Character'Val (096), COBOL_Character'Val (097),
115      COBOL_Character'Val (098), COBOL_Character'Val (099),
116      COBOL_Character'Val (100), COBOL_Character'Val (101),
117      COBOL_Character'Val (102), COBOL_Character'Val (103),
118      COBOL_Character'Val (104), COBOL_Character'Val (105),
119      COBOL_Character'Val (106), COBOL_Character'Val (107),
120      COBOL_Character'Val (108), COBOL_Character'Val (109),
121      COBOL_Character'Val (110), COBOL_Character'Val (111),
122      COBOL_Character'Val (112), COBOL_Character'Val (113),
123      COBOL_Character'Val (114), COBOL_Character'Val (115),
124      COBOL_Character'Val (116), COBOL_Character'Val (117),
125      COBOL_Character'Val (118), COBOL_Character'Val (119),
126      COBOL_Character'Val (120), COBOL_Character'Val (121),
127      COBOL_Character'Val (122), COBOL_Character'Val (123),
128      COBOL_Character'Val (124), COBOL_Character'Val (125),
129      COBOL_Character'Val (126), COBOL_Character'Val (127),
130      COBOL_Character'Val (128), COBOL_Character'Val (129),
131      COBOL_Character'Val (130), COBOL_Character'Val (131),
132      COBOL_Character'Val (132), COBOL_Character'Val (133),
133      COBOL_Character'Val (134), COBOL_Character'Val (135),
134      COBOL_Character'Val (136), COBOL_Character'Val (137),
135      COBOL_Character'Val (138), COBOL_Character'Val (139),
136      COBOL_Character'Val (140), COBOL_Character'Val (141),
137      COBOL_Character'Val (142), COBOL_Character'Val (143),
138      COBOL_Character'Val (144), COBOL_Character'Val (145),
139      COBOL_Character'Val (146), COBOL_Character'Val (147),
140      COBOL_Character'Val (148), COBOL_Character'Val (149),
141      COBOL_Character'Val (150), COBOL_Character'Val (151),
142      COBOL_Character'Val (152), COBOL_Character'Val (153),
143      COBOL_Character'Val (154), COBOL_Character'Val (155),
144      COBOL_Character'Val (156), COBOL_Character'Val (157),
145      COBOL_Character'Val (158), COBOL_Character'Val (159),
146      COBOL_Character'Val (160), COBOL_Character'Val (161),
147      COBOL_Character'Val (162), COBOL_Character'Val (163),
148      COBOL_Character'Val (164), COBOL_Character'Val (165),
149      COBOL_Character'Val (166), COBOL_Character'Val (167),
150      COBOL_Character'Val (168), COBOL_Character'Val (169),
151      COBOL_Character'Val (170), COBOL_Character'Val (171),
152      COBOL_Character'Val (172), COBOL_Character'Val (173),
153      COBOL_Character'Val (174), COBOL_Character'Val (175),
154      COBOL_Character'Val (176), COBOL_Character'Val (177),
155      COBOL_Character'Val (178), COBOL_Character'Val (179),
156      COBOL_Character'Val (180), COBOL_Character'Val (181),
157      COBOL_Character'Val (182), COBOL_Character'Val (183),
158      COBOL_Character'Val (184), COBOL_Character'Val (185),
159      COBOL_Character'Val (186), COBOL_Character'Val (187),
160      COBOL_Character'Val (188), COBOL_Character'Val (189),
161      COBOL_Character'Val (190), COBOL_Character'Val (191),
162      COBOL_Character'Val (192), COBOL_Character'Val (193),
163      COBOL_Character'Val (194), COBOL_Character'Val (195),
164      COBOL_Character'Val (196), COBOL_Character'Val (197),
165      COBOL_Character'Val (198), COBOL_Character'Val (199),
166      COBOL_Character'Val (200), COBOL_Character'Val (201),
167      COBOL_Character'Val (202), COBOL_Character'Val (203),
168      COBOL_Character'Val (204), COBOL_Character'Val (205),
169      COBOL_Character'Val (206), COBOL_Character'Val (207),
170      COBOL_Character'Val (208), COBOL_Character'Val (209),
171      COBOL_Character'Val (210), COBOL_Character'Val (211),
172      COBOL_Character'Val (212), COBOL_Character'Val (213),
173      COBOL_Character'Val (214), COBOL_Character'Val (215),
174      COBOL_Character'Val (216), COBOL_Character'Val (217),
175      COBOL_Character'Val (218), COBOL_Character'Val (219),
176      COBOL_Character'Val (220), COBOL_Character'Val (221),
177      COBOL_Character'Val (222), COBOL_Character'Val (223),
178      COBOL_Character'Val (224), COBOL_Character'Val (225),
179      COBOL_Character'Val (226), COBOL_Character'Val (227),
180      COBOL_Character'Val (228), COBOL_Character'Val (229),
181      COBOL_Character'Val (230), COBOL_Character'Val (231),
182      COBOL_Character'Val (232), COBOL_Character'Val (233),
183      COBOL_Character'Val (234), COBOL_Character'Val (235),
184      COBOL_Character'Val (236), COBOL_Character'Val (237),
185      COBOL_Character'Val (238), COBOL_Character'Val (239),
186      COBOL_Character'Val (240), COBOL_Character'Val (241),
187      COBOL_Character'Val (242), COBOL_Character'Val (243),
188      COBOL_Character'Val (244), COBOL_Character'Val (245),
189      COBOL_Character'Val (246), COBOL_Character'Val (247),
190      COBOL_Character'Val (248), COBOL_Character'Val (249),
191      COBOL_Character'Val (250), COBOL_Character'Val (251),
192      COBOL_Character'Val (252), COBOL_Character'Val (253),
193      COBOL_Character'Val (254), COBOL_Character'Val (255));
194
195    COBOL_To_Ada : array (COBOL_Character) of Standard.Character := (
196      Standard.Character'Val (000), Standard.Character'Val (001),
197      Standard.Character'Val (002), Standard.Character'Val (003),
198      Standard.Character'Val (004), Standard.Character'Val (005),
199      Standard.Character'Val (006), Standard.Character'Val (007),
200      Standard.Character'Val (008), Standard.Character'Val (009),
201      Standard.Character'Val (010), Standard.Character'Val (011),
202      Standard.Character'Val (012), Standard.Character'Val (013),
203      Standard.Character'Val (014), Standard.Character'Val (015),
204      Standard.Character'Val (016), Standard.Character'Val (017),
205      Standard.Character'Val (018), Standard.Character'Val (019),
206      Standard.Character'Val (020), Standard.Character'Val (021),
207      Standard.Character'Val (022), Standard.Character'Val (023),
208      Standard.Character'Val (024), Standard.Character'Val (025),
209      Standard.Character'Val (026), Standard.Character'Val (027),
210      Standard.Character'Val (028), Standard.Character'Val (029),
211      Standard.Character'Val (030), Standard.Character'Val (031),
212      Standard.Character'Val (032), Standard.Character'Val (033),
213      Standard.Character'Val (034), Standard.Character'Val (035),
214      Standard.Character'Val (036), Standard.Character'Val (037),
215      Standard.Character'Val (038), Standard.Character'Val (039),
216      Standard.Character'Val (040), Standard.Character'Val (041),
217      Standard.Character'Val (042), Standard.Character'Val (043),
218      Standard.Character'Val (044), Standard.Character'Val (045),
219      Standard.Character'Val (046), Standard.Character'Val (047),
220      Standard.Character'Val (048), Standard.Character'Val (049),
221      Standard.Character'Val (050), Standard.Character'Val (051),
222      Standard.Character'Val (052), Standard.Character'Val (053),
223      Standard.Character'Val (054), Standard.Character'Val (055),
224      Standard.Character'Val (056), Standard.Character'Val (057),
225      Standard.Character'Val (058), Standard.Character'Val (059),
226      Standard.Character'Val (060), Standard.Character'Val (061),
227      Standard.Character'Val (062), Standard.Character'Val (063),
228      Standard.Character'Val (064), Standard.Character'Val (065),
229      Standard.Character'Val (066), Standard.Character'Val (067),
230      Standard.Character'Val (068), Standard.Character'Val (069),
231      Standard.Character'Val (070), Standard.Character'Val (071),
232      Standard.Character'Val (072), Standard.Character'Val (073),
233      Standard.Character'Val (074), Standard.Character'Val (075),
234      Standard.Character'Val (076), Standard.Character'Val (077),
235      Standard.Character'Val (078), Standard.Character'Val (079),
236      Standard.Character'Val (080), Standard.Character'Val (081),
237      Standard.Character'Val (082), Standard.Character'Val (083),
238      Standard.Character'Val (084), Standard.Character'Val (085),
239      Standard.Character'Val (086), Standard.Character'Val (087),
240      Standard.Character'Val (088), Standard.Character'Val (089),
241      Standard.Character'Val (090), Standard.Character'Val (091),
242      Standard.Character'Val (092), Standard.Character'Val (093),
243      Standard.Character'Val (094), Standard.Character'Val (095),
244      Standard.Character'Val (096), Standard.Character'Val (097),
245      Standard.Character'Val (098), Standard.Character'Val (099),
246      Standard.Character'Val (100), Standard.Character'Val (101),
247      Standard.Character'Val (102), Standard.Character'Val (103),
248      Standard.Character'Val (104), Standard.Character'Val (105),
249      Standard.Character'Val (106), Standard.Character'Val (107),
250      Standard.Character'Val (108), Standard.Character'Val (109),
251      Standard.Character'Val (110), Standard.Character'Val (111),
252      Standard.Character'Val (112), Standard.Character'Val (113),
253      Standard.Character'Val (114), Standard.Character'Val (115),
254      Standard.Character'Val (116), Standard.Character'Val (117),
255      Standard.Character'Val (118), Standard.Character'Val (119),
256      Standard.Character'Val (120), Standard.Character'Val (121),
257      Standard.Character'Val (122), Standard.Character'Val (123),
258      Standard.Character'Val (124), Standard.Character'Val (125),
259      Standard.Character'Val (126), Standard.Character'Val (127),
260      Standard.Character'Val (128), Standard.Character'Val (129),
261      Standard.Character'Val (130), Standard.Character'Val (131),
262      Standard.Character'Val (132), Standard.Character'Val (133),
263      Standard.Character'Val (134), Standard.Character'Val (135),
264      Standard.Character'Val (136), Standard.Character'Val (137),
265      Standard.Character'Val (138), Standard.Character'Val (139),
266      Standard.Character'Val (140), Standard.Character'Val (141),
267      Standard.Character'Val (142), Standard.Character'Val (143),
268      Standard.Character'Val (144), Standard.Character'Val (145),
269      Standard.Character'Val (146), Standard.Character'Val (147),
270      Standard.Character'Val (148), Standard.Character'Val (149),
271      Standard.Character'Val (150), Standard.Character'Val (151),
272      Standard.Character'Val (152), Standard.Character'Val (153),
273      Standard.Character'Val (154), Standard.Character'Val (155),
274      Standard.Character'Val (156), Standard.Character'Val (157),
275      Standard.Character'Val (158), Standard.Character'Val (159),
276      Standard.Character'Val (160), Standard.Character'Val (161),
277      Standard.Character'Val (162), Standard.Character'Val (163),
278      Standard.Character'Val (164), Standard.Character'Val (165),
279      Standard.Character'Val (166), Standard.Character'Val (167),
280      Standard.Character'Val (168), Standard.Character'Val (169),
281      Standard.Character'Val (170), Standard.Character'Val (171),
282      Standard.Character'Val (172), Standard.Character'Val (173),
283      Standard.Character'Val (174), Standard.Character'Val (175),
284      Standard.Character'Val (176), Standard.Character'Val (177),
285      Standard.Character'Val (178), Standard.Character'Val (179),
286      Standard.Character'Val (180), Standard.Character'Val (181),
287      Standard.Character'Val (182), Standard.Character'Val (183),
288      Standard.Character'Val (184), Standard.Character'Val (185),
289      Standard.Character'Val (186), Standard.Character'Val (187),
290      Standard.Character'Val (188), Standard.Character'Val (189),
291      Standard.Character'Val (190), Standard.Character'Val (191),
292      Standard.Character'Val (192), Standard.Character'Val (193),
293      Standard.Character'Val (194), Standard.Character'Val (195),
294      Standard.Character'Val (196), Standard.Character'Val (197),
295      Standard.Character'Val (198), Standard.Character'Val (199),
296      Standard.Character'Val (200), Standard.Character'Val (201),
297      Standard.Character'Val (202), Standard.Character'Val (203),
298      Standard.Character'Val (204), Standard.Character'Val (205),
299      Standard.Character'Val (206), Standard.Character'Val (207),
300      Standard.Character'Val (208), Standard.Character'Val (209),
301      Standard.Character'Val (210), Standard.Character'Val (211),
302      Standard.Character'Val (212), Standard.Character'Val (213),
303      Standard.Character'Val (214), Standard.Character'Val (215),
304      Standard.Character'Val (216), Standard.Character'Val (217),
305      Standard.Character'Val (218), Standard.Character'Val (219),
306      Standard.Character'Val (220), Standard.Character'Val (221),
307      Standard.Character'Val (222), Standard.Character'Val (223),
308      Standard.Character'Val (224), Standard.Character'Val (225),
309      Standard.Character'Val (226), Standard.Character'Val (227),
310      Standard.Character'Val (228), Standard.Character'Val (229),
311      Standard.Character'Val (230), Standard.Character'Val (231),
312      Standard.Character'Val (232), Standard.Character'Val (233),
313      Standard.Character'Val (234), Standard.Character'Val (235),
314      Standard.Character'Val (236), Standard.Character'Val (237),
315      Standard.Character'Val (238), Standard.Character'Val (239),
316      Standard.Character'Val (240), Standard.Character'Val (241),
317      Standard.Character'Val (242), Standard.Character'Val (243),
318      Standard.Character'Val (244), Standard.Character'Val (245),
319      Standard.Character'Val (246), Standard.Character'Val (247),
320      Standard.Character'Val (248), Standard.Character'Val (249),
321      Standard.Character'Val (250), Standard.Character'Val (251),
322      Standard.Character'Val (252), Standard.Character'Val (253),
323      Standard.Character'Val (254), Standard.Character'Val (255));
324
325    type Alphanumeric is array (Positive range <>) of COBOL_Character;
326    --  pragma Pack (Alphanumeric);
327
328    function To_COBOL (Item : String) return Alphanumeric;
329    function To_Ada   (Item : Alphanumeric) return String;
330
331    procedure To_COBOL
332      (Item   : String;
333       Target : out Alphanumeric;
334       Last   : out Natural);
335
336    procedure To_Ada
337      (Item   : Alphanumeric;
338       Target : out String;
339       Last   : out Natural);
340
341    type Numeric is array (Positive range <>) of COBOL_Character;
342    --  pragma Pack (Numeric);
343
344    --------------------------------------------
345    -- Formats For COBOL Data Representations --
346    --------------------------------------------
347
348    type Display_Format is private;
349
350    Unsigned             : constant Display_Format;
351    Leading_Separate     : constant Display_Format;
352    Trailing_Separate    : constant Display_Format;
353    Leading_Nonseparate  : constant Display_Format;
354    Trailing_Nonseparate : constant Display_Format;
355
356    type Binary_Format is private;
357
358    High_Order_First          : constant Binary_Format;
359    Low_Order_First           : constant Binary_Format;
360    Native_Binary             : constant Binary_Format;
361    High_Order_First_Unsigned : constant Binary_Format;
362    Low_Order_First_Unsigned  : constant Binary_Format;
363    Native_Binary_Unsigned    : constant Binary_Format;
364
365    type Packed_Format is private;
366
367    Packed_Unsigned   : constant Packed_Format;
368    Packed_Signed     : constant Packed_Format;
369
370    ------------------------------------------------------------
371    -- Types For External Representation Of COBOL Binary Data --
372    ------------------------------------------------------------
373
374    type Byte is mod 2 ** COBOL_Character'Size;
375    type Byte_Array is array (Positive range <>) of Byte;
376    --  pragma Pack (Byte_Array);
377
378    Conversion_Error : exception;
379
380    generic
381       type Num is delta <> digits <>;
382
383    package Decimal_Conversions is
384
385       --  Display Formats: data values are represented as Numeric
386
387       function Valid
388         (Item   : Numeric;
389          Format : Display_Format)
390          return   Boolean;
391
392       function Length
393         (Format : Display_Format)
394          return   Natural;
395
396       function To_Decimal
397         (Item   : Numeric;
398          Format : Display_Format)
399          return   Num;
400
401       function To_Display
402         (Item   : Num;
403          Format : Display_Format)
404          return   Numeric;
405
406       --  Packed Formats: data values are represented as Packed_Decimal
407
408       function Valid
409         (Item   : Packed_Decimal;
410          Format : Packed_Format)
411          return   Boolean;
412
413       function Length
414         (Format : Packed_Format)
415          return   Natural;
416
417       function To_Decimal
418         (Item   : Packed_Decimal;
419          Format : Packed_Format)
420          return   Num;
421
422       function To_Packed
423         (Item   : Num;
424          Format : Packed_Format)
425          return   Packed_Decimal;
426
427       --  Binary Formats: external data values are represented as Byte_Array
428
429       function Valid
430         (Item   : Byte_Array;
431          Format : Binary_Format)
432          return   Boolean;
433
434       function Length
435         (Format : Binary_Format)
436          return   Natural;
437
438       function To_Decimal
439         (Item   : Byte_Array;
440          Format : Binary_Format) return Num;
441
442       function To_Binary
443         (Item   : Num;
444          Format : Binary_Format)
445          return   Byte_Array;
446
447       --  Internal Binary formats: data values are of type Binary/Long_Binary
448
449       function To_Decimal (Item : Binary)      return Num;
450       function To_Decimal (Item : Long_Binary) return Num;
451
452       function To_Binary      (Item : Num)  return Binary;
453       function To_Long_Binary (Item : Num)  return Long_Binary;
454
455    private
456       pragma Inline (Length);
457       pragma Inline (To_Binary);
458       pragma Inline (To_Decimal);
459       pragma Inline (To_Display);
460       pragma Inline (To_Long_Binary);
461       pragma Inline (Valid);
462
463    end Decimal_Conversions;
464
465    ------------------------------------------
466    -- Implementation Dependent Definitions --
467    ------------------------------------------
468
469    --  The implementation dependent definitions are wholly contained in the
470    --  private part of this spec (the body is implementation independent)
471
472 private
473    -------------------
474    -- Binary Format --
475    -------------------
476
477    type Binary_Format is (H, L, N, HU, LU, NU);
478
479    subtype Binary_Unsigned_Format is Binary_Format range HU .. NU;
480
481    High_Order_First          : constant Binary_Format := H;
482    Low_Order_First           : constant Binary_Format := L;
483    Native_Binary             : constant Binary_Format := N;
484    High_Order_First_Unsigned : constant Binary_Format := HU;
485    Low_Order_First_Unsigned  : constant Binary_Format := LU;
486    Native_Binary_Unsigned    : constant Binary_Format := NU;
487
488    ---------------------------
489    -- Packed Decimal Format --
490    ---------------------------
491
492    --  Packed decimal numbers use the IBM mainframe format:
493
494    --     dd dd ... dd dd ds
495
496    --  where d are the Digits, in natural left to right order, and s is
497    --  the sign digit. If the number of Digits os even, then the high
498    --  order (leftmost) Digits is always a 0. For example, a six digit
499    --  number has the format:
500
501    --     0d dd dd ds
502
503    --  The sign digit has the possible values
504
505    --     16#0A#     non-standard plus sign
506    --     16#0B#     non-standard minus sign
507    --     16#0C#     standard plus sign
508    --     16#0D#     standard minus sign
509    --     16#0E#     non-standard plus sign
510    --     16#0F#     standard unsigned sign
511
512    --  The non-standard signs are recognized on input, but never generated
513    --  for output numbers. The 16#0F# distinguishes unsigned numbers from
514    --  signed positive numbers, but is treated as positive for computational
515    --  purposes. This format provides distinguished positive and negative
516    --  zero values, which behave the same in all operations.
517
518    type Packed_Format is (U, S);
519
520    Packed_Unsigned   : constant Packed_Format := U;
521    Packed_Signed     : constant Packed_Format := S;
522
523    type Packed_Representation_Type is (IBM);
524    --  Indicator for format used for packed decimal
525
526    Packed_Representation : constant Packed_Representation_Type := IBM;
527    --  This version of the spec uses IBM internal format, as described above.
528
529    -----------------------------
530    -- Display Decimal Formats --
531    -----------------------------
532
533    --  Display numbers are stored in standard ASCII format, as ASCII strings.
534    --  For the embedded signs, the following codes are used:
535
536    --     0-9 positive:  16#30# .. 16#39# (i.e. natural ASCII digit code)
537    --     0-9 negative:  16#20# .. 16#29# (ASCII digit code - 16#10#)
538
539    type Display_Format is (U, LS, TS, LN, TN);
540
541    Unsigned             : constant Display_Format := U;
542    Leading_Separate     : constant Display_Format := LS;
543    Trailing_Separate    : constant Display_Format := TS;
544    Leading_Nonseparate  : constant Display_Format := LN;
545    Trailing_Nonseparate : constant Display_Format := TN;
546
547    subtype COBOL_Digits is COBOL_Character range '0' .. '9';
548    --  Digit values in display decimal
549
550    COBOL_Space : constant COBOL_Character := ' ';
551    COBOL_Plus  : constant COBOL_Character := '+';
552    COBOL_Minus : constant COBOL_Character := '-';
553    --  Sign values for Leading_Separate and Trailing_Separate formats
554
555    subtype COBOL_Plus_Digits is COBOL_Character
556      range COBOL_Character'Val (16#30#) .. COBOL_Character'Val (16#39#);
557    --  Values used for embedded plus signs in nonseparate formats
558
559    subtype COBOL_Minus_Digits is COBOL_Character
560      range COBOL_Character'Val (16#20#) .. COBOL_Character'Val (16#29#);
561    --  Values used for embedded minus signs in nonseparate formats
562
563 end Interfaces.COBOL;