]>
Commit | Line | Data |
---|---|---|
38cbfe40 RK |
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 | -- -- | |
4dfba737 | 10 | -- Copyright (C) 1993-2018, Free Software Foundation, Inc. -- |
38cbfe40 RK |
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- -- | |
748086b7 | 18 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
38cbfe40 RK |
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 -- | |
748086b7 JJ |
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/>. -- | |
38cbfe40 RK |
31 | -- -- |
32 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 33 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
38cbfe40 RK |
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 | |
342c987b | 43 | pragma Preelaborate (COBOL); |
38cbfe40 RK |
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 | ||
cfb120b5 | 58 | type Decimal_Element is mod 2**4; |
38cbfe40 RK |
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; | |
a2cb348e | 388 | Format : Display_Format) return Boolean; |
38cbfe40 RK |
389 | |
390 | function Length | |
a2cb348e | 391 | (Format : Display_Format) return Natural; |
38cbfe40 RK |
392 | |
393 | function To_Decimal | |
394 | (Item : Numeric; | |
395 | Format : Display_Format) | |
396 | return Num; | |
397 | ||
398 | function To_Display | |
399 | (Item : Num; | |
a2cb348e | 400 | Format : Display_Format) return Numeric; |
38cbfe40 RK |
401 | |
402 | -- Packed Formats: data values are represented as Packed_Decimal | |
403 | ||
404 | function Valid | |
405 | (Item : Packed_Decimal; | |
a2cb348e | 406 | Format : Packed_Format) return Boolean; |
38cbfe40 RK |
407 | |
408 | function Length | |
a2cb348e | 409 | (Format : Packed_Format) return Natural; |
38cbfe40 RK |
410 | |
411 | function To_Decimal | |
412 | (Item : Packed_Decimal; | |
a2cb348e | 413 | Format : Packed_Format) return Num; |
38cbfe40 RK |
414 | |
415 | function To_Packed | |
416 | (Item : Num; | |
a2cb348e | 417 | Format : Packed_Format) return Packed_Decimal; |
38cbfe40 RK |
418 | |
419 | -- Binary Formats: external data values are represented as Byte_Array | |
420 | ||
421 | function Valid | |
422 | (Item : Byte_Array; | |
a2cb348e | 423 | Format : Binary_Format) return Boolean; |
38cbfe40 RK |
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; | |
a2cb348e | 435 | Format : Binary_Format) return Byte_Array; |
38cbfe40 RK |
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 | ||
be035558 AC |
442 | function To_Binary (Item : Num) return Binary; |
443 | function To_Long_Binary (Item : Num) return Long_Binary; | |
38cbfe40 RK |
444 | |
445 | private | |
446 | pragma Inline (Length); | |
447 | pragma Inline (To_Binary); | |
448 | pragma Inline (To_Decimal); | |
449 | pragma Inline (To_Display); | |
38cbfe40 RK |
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 | ||
a2cb348e RD |
510 | Packed_Unsigned : constant Packed_Format := U; |
511 | Packed_Signed : constant Packed_Format := S; | |
38cbfe40 RK |
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; | |
a2cb348e | 517 | -- This version of the spec uses IBM internal format, as described above |
38cbfe40 RK |
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; |