111
|
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-2017, 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
|
|
42 package 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
|
|
462 private
|
|
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
|
|
553 end Interfaces.COBOL;
|