OSDN Git Service

Delete all lines containing "$Revision:".
[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 --                                                                          --
11 --          Copyright (C) 1993-2000 Free Software Foundation, Inc.          --
12 --                                                                          --
13 -- This specification is derived from the Ada Reference Manual for use with --
14 -- GNAT. The copyright notice above, and the license provisions that follow --
15 -- apply solely to the  contents of the part following the private keyword. --
16 --                                                                          --
17 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
18 -- terms of the  GNU General Public License as published  by the Free Soft- --
19 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
20 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
21 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
22 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
23 -- for  more details.  You should have  received  a copy of the GNU General --
24 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
25 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
26 -- MA 02111-1307, USA.                                                      --
27 --                                                                          --
28 -- As a special exception,  if other files  instantiate  generics from this --
29 -- unit, or you link  this unit with other files  to produce an executable, --
30 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
31 -- covered  by the  GNU  General  Public  License.  This exception does not --
32 -- however invalidate  any other reasons why  the executable file  might be --
33 -- covered by the  GNU Public License.                                      --
34 --                                                                          --
35 -- GNAT was originally developed  by the GNAT team at  New York University. --
36 -- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
37 --                                                                          --
38 ------------------------------------------------------------------------------
39
40 --  This version of the COBOL interfaces package assumes that the COBOL
41 --  compiler uses ASCII as its internal representation of characters, i.e.
42 --  that the type COBOL_Character has the same representation as the Ada
43 --  type Standard.Character.
44
45 package Interfaces.COBOL is
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)
391          return   Boolean;
392
393       function Length
394         (Format : Display_Format)
395          return   Natural;
396
397       function To_Decimal
398         (Item   : Numeric;
399          Format : Display_Format)
400          return   Num;
401
402       function To_Display
403         (Item   : Num;
404          Format : Display_Format)
405          return   Numeric;
406
407       --  Packed Formats: data values are represented as Packed_Decimal
408
409       function Valid
410         (Item   : Packed_Decimal;
411          Format : Packed_Format)
412          return   Boolean;
413
414       function Length
415         (Format : Packed_Format)
416          return   Natural;
417
418       function To_Decimal
419         (Item   : Packed_Decimal;
420          Format : Packed_Format)
421          return   Num;
422
423       function To_Packed
424         (Item   : Num;
425          Format : Packed_Format)
426          return   Packed_Decimal;
427
428       --  Binary Formats: external data values are represented as Byte_Array
429
430       function Valid
431         (Item   : Byte_Array;
432          Format : Binary_Format)
433          return   Boolean;
434
435       function Length
436         (Format : Binary_Format)
437          return   Natural;
438
439       function To_Decimal
440         (Item   : Byte_Array;
441          Format : Binary_Format) return Num;
442
443       function To_Binary
444         (Item   : Num;
445          Format : Binary_Format)
446          return   Byte_Array;
447
448       --  Internal Binary formats: data values are of type Binary/Long_Binary
449
450       function To_Decimal (Item : Binary)      return Num;
451       function To_Decimal (Item : Long_Binary) return Num;
452
453       function To_Binary      (Item : Num)  return Binary;
454       function To_Long_Binary (Item : Num)  return Long_Binary;
455
456    private
457       pragma Inline (Length);
458       pragma Inline (To_Binary);
459       pragma Inline (To_Decimal);
460       pragma Inline (To_Display);
461       pragma Inline (To_Decimal);
462       pragma Inline (To_Long_Binary);
463       pragma Inline (Valid);
464
465    end Decimal_Conversions;
466
467    ------------------------------------------
468    -- Implementation Dependent Definitions --
469    ------------------------------------------
470
471    --  The implementation dependent definitions are wholly contained in the
472    --  private part of this spec (the body is implementation independent)
473
474 private
475    -------------------
476    -- Binary Format --
477    -------------------
478
479    type Binary_Format is (H, L, N, HU, LU, NU);
480
481    subtype Binary_Unsigned_Format is Binary_Format range HU .. NU;
482
483    High_Order_First          : constant Binary_Format := H;
484    Low_Order_First           : constant Binary_Format := L;
485    Native_Binary             : constant Binary_Format := N;
486    High_Order_First_Unsigned : constant Binary_Format := HU;
487    Low_Order_First_Unsigned  : constant Binary_Format := LU;
488    Native_Binary_Unsigned    : constant Binary_Format := NU;
489
490    ---------------------------
491    -- Packed Decimal Format --
492    ---------------------------
493
494    --  Packed decimal numbers use the IBM mainframe format:
495
496    --     dd dd ... dd dd ds
497
498    --  where d are the Digits, in natural left to right order, and s is
499    --  the sign digit. If the number of Digits os even, then the high
500    --  order (leftmost) Digits is always a 0. For example, a six digit
501    --  number has the format:
502
503    --     0d dd dd ds
504
505    --  The sign digit has the possible values
506
507    --     16#0A#     non-standard plus sign
508    --     16#0B#     non-standard minus sign
509    --     16#0C#     standard plus sign
510    --     16#0D#     standard minus sign
511    --     16#0E#     non-standard plus sign
512    --     16#0F#     standard unsigned sign
513
514    --  The non-standard signs are recognized on input, but never generated
515    --  for output numbers. The 16#0F# distinguishes unsigned numbers from
516    --  signed positive numbers, but is treated as positive for computational
517    --  purposes. This format provides distinguished positive and negative
518    --  zero values, which behave the same in all operations.
519
520    type Packed_Format is (U, S);
521
522    Packed_Unsigned   : constant Packed_Format := U;
523    Packed_Signed     : constant Packed_Format := S;
524
525    type Packed_Representation_Type is (IBM);
526    --  Indicator for format used for packed decimal
527
528    Packed_Representation : constant Packed_Representation_Type := IBM;
529    --  This version of the spec uses IBM internal format, as described above.
530
531    -----------------------------
532    -- Display Decimal Formats --
533    -----------------------------
534
535    --  Display numbers are stored in standard ASCII format, as ASCII strings.
536    --  For the embedded signs, the following codes are used:
537
538    --     0-9 positive:  16#30# .. 16#39# (i.e. natural ASCII digit code)
539    --     0-9 negative:  16#20# .. 16#29# (ASCII digit code - 16#10#)
540
541    type Display_Format is (U, LS, TS, LN, TN);
542
543    Unsigned             : constant Display_Format := U;
544    Leading_Separate     : constant Display_Format := LS;
545    Trailing_Separate    : constant Display_Format := TS;
546    Leading_Nonseparate  : constant Display_Format := LN;
547    Trailing_Nonseparate : constant Display_Format := TN;
548
549    subtype COBOL_Digits is COBOL_Character range '0' .. '9';
550    --  Digit values in display decimal
551
552    COBOL_Space : constant COBOL_Character := ' ';
553    COBOL_Plus  : constant COBOL_Character := '+';
554    COBOL_Minus : constant COBOL_Character := '-';
555    --  Sign values for Leading_Separate and Trailing_Separate formats
556
557    subtype COBOL_Plus_Digits is COBOL_Character
558      range COBOL_Character'Val (16#30#) .. COBOL_Character'Val (16#39#);
559    --  Values used for embedded plus signs in nonseparate formats
560
561    subtype COBOL_Minus_Digits is COBOL_Character
562      range COBOL_Character'Val (16#20#) .. COBOL_Character'Val (16#29#);
563    --  Values used for embedded minus signs in nonseparate formats
564
565 end Interfaces.COBOL;