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