OSDN Git Service

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