home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / ada_1 / Examples_demos_ada_predef < prev    next >
Encoding:
Text File  |  1992-10-01  |  40.9 KB  |  1,419 lines

  1. -- 
  2. -- 
  3. --               ********************************** 
  4. --               *                                *  
  5. --               *           T  e  x  t           * 
  6. --               *                                *  
  7. --               *     Input / Output  Package    * 
  8. --         *                  *
  9. --         *         and other          *
  10. --         *                  *
  11. --         *        Predefined Units      *
  12. --               *                                *  
  13. --               *                                *  
  14. --         *         ADA Project      *
  15. --         *      Courant Institute      *
  16. --         *     New York University      *
  17. --         *      251 Mercer Street,      *
  18. --         *      New York, NY 10012      *
  19. --               *                                *  
  20. --               ********************************** 
  21. -- 
  22. -- 
  23. --                               by 
  24. --  
  25. --                         Clinton F. Goss 
  26. --               Tracey M. Siesser
  27. --                        Bernard D. Banner
  28. --                Gerry Fisher
  29. --              Stephen C. Bryant
  30. -- 
  31. -- 
  32. -- 
  33. -- 
  34. -- 
  35. -- 
  36. --  This file contains several of the predefined Ada package spec-
  37. --  ifications.  They do not actually implement the package's
  38. --  operations, which are coded in the implementation language SETL,
  39. --  provide an interface to them through the standard procedure/
  40. --  function calling mechanism.  The predefined packages are:
  41. --
  42. --      . The SYSTEM package.
  43. --
  44. --      . The IO_EXCEPTIONS package.
  45. --
  46. --      . The generic SEQUENTIAL_IO package.
  47. --
  48. --      . The generic DIRECT_IO package.
  49. -- 
  50. --      . The TEXT_IO package.  
  51. --
  52. --    . The CALENDAR package and the predefined subprograms 
  53. --      UNCHECKED_CONVERSION and UNCHECKED_DEALLOCATION.
  54. --
  55. package SYSTEM is
  56.  
  57.    type NAME    is (ADA_ED); 
  58.    type ADDRESS is new INTEGER;
  59.  
  60.    SYSTEM_NAME  : constant NAME := ADA_ED;
  61.    STORAGE_UNIT : constant      := 32;
  62.    MEMORY_SIZE  : constant      := 2**30 - 1;
  63.  
  64.    -- System Dependent Named Numbers:
  65.  
  66.    MIN_INT      : constant      := -(2**30 - 1);
  67.    MAX_INT      : constant      := 2**30 - 1;
  68.    MAX_DIGITS   : constant      := 6;
  69.    MAX_MANTISSA : constant      := 1000;
  70.    FINE_DELTA   : constant      := 2.0 ** (-30);
  71.    TICK         : constant      := 0.01;
  72.  
  73.    -- Other System Dependent Declarations
  74.  
  75.    subtype PRIORITY is INTEGER range 0 .. 9;
  76.  
  77.    SYSTEM_ERROR : exception;
  78.  
  79. end SYSTEM;
  80.  
  81. package IO_EXCEPTIONS is
  82.  
  83.    STATUS_ERROR : exception;
  84.    MODE_ERROR   : exception;
  85.    NAME_ERROR   : exception;
  86.    USE_ERROR    : exception;
  87.    DEVICE_ERROR : exception;
  88.    END_ERROR    : exception;
  89.    DATA_ERROR   : exception;
  90.    LAYOUT_ERROR : exception;
  91. end IO_EXCEPTIONS;
  92.  
  93. with IO_EXCEPTIONS;
  94. generic
  95.     type ELEMENT_TYPE is private;
  96.  
  97. package SEQUENTIAL_IO is
  98.  
  99.     type FILE_TYPE is limited private;
  100.     
  101.     type FILE_MODE is (IN_FILE, OUT_FILE);
  102.       
  103.  
  104.     -- File management
  105.  
  106.  
  107.     procedure CREATE   (FILE : in out FILE_TYPE;
  108.                         MODE : in FILE_MODE := OUT_FILE;
  109.                         NAME : in STRING    := "";
  110.                         FORM : in STRING    := "");
  111.  
  112.     procedure OPEN     (FILE : in out FILE_TYPE;
  113.                         MODE : in FILE_MODE;
  114.                         NAME : in STRING;
  115.                         FORM : in STRING := "");
  116.  
  117.     procedure CLOSE    (FILE : in out FILE_TYPE);
  118.  
  119.     procedure DELETE   (FILE : in out FILE_TYPE);
  120.  
  121.     procedure RESET    (FILE : in out FILE_TYPE; MODE : in  FILE_MODE);
  122.     procedure RESET    (FILE : in out FILE_TYPE);
  123.  
  124.     function  MODE     (FILE : in FILE_TYPE)  return FILE_MODE;
  125.  
  126.     function  NAME     (FILE : in FILE_TYPE)  return STRING;
  127.  
  128.     function  FORM     (FILE : in FILE_TYPE)  return STRING;
  129.     
  130.     function  IS_OPEN  (FILE : in FILE_TYPE)  return BOOLEAN;
  131.  
  132.     -- Input and Output Operations:
  133.  
  134.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE);
  135.  
  136.     procedure WRITE  (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE);
  137.  
  138.     function  END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN;
  139.  
  140.     -- Exceptions:
  141.  
  142.     STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR;
  143.     MODE_ERROR   : exception renames IO_EXCEPTIONS.MODE_ERROR;
  144.     NAME_ERROR     : exception renames IO_EXCEPTIONS.NAME_ERROR;
  145.     USE_ERROR     : exception renames IO_EXCEPTIONS.USE_ERROR;
  146.     DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR;
  147.     END_ERROR     : exception renames IO_EXCEPTIONS.END_ERROR;
  148.     DATA_ERROR     : exception renames IO_EXCEPTIONS.DATA_ERROR;
  149.  
  150. private
  151.  
  152.     type  FILE_TYPE  is 
  153.       record
  154.         FILE_NUM : INTEGER := 0;
  155.       end record;
  156.  
  157. end SEQUENTIAL_IO;
  158.  
  159.  
  160. package body SEQUENTIAL_IO is
  161.  
  162.  
  163.     -- The body for each procedure and function consists of an
  164.     -- interface pragma which generates an AIS instruction of
  165.     -- the form:
  166.     --
  167.     --        ['predef_', specifier, [formal, formal, ...]]
  168.     --
  169.     -- where the specifier is the second argument to the pragma
  170.     -- in upper case, and the formals are the fully qualified
  171.     -- names of the formal parameters to the subprogram.  The
  172.     -- specifier is used by the SETL INPUT_OUTPUT routines in
  173.     -- determining which routine was called, and the formals are
  174.     -- used for accessing and setting the values of the arguments
  175.     -- to the subprogram.
  176.  
  177.  
  178.     -- File management
  179.  
  180.  
  181.     procedure CREATE (FILE : in out FILE_TYPE;
  182.                       MODE : in FILE_MODE := OUT_FILE;
  183.                       NAME : in STRING    := "";
  184.                       FORM : in STRING    := "") is
  185.     begin
  186.         pragma io_interface (PREDEF, SIO_CREATE, ELEMENT_TYPE);  null;
  187.     end CREATE;
  188.  
  189.  
  190.     procedure OPEN (FILE : in out FILE_TYPE;
  191.                     MODE : in FILE_MODE;
  192.                     NAME : in STRING;
  193.                     FORM : in STRING := "") is
  194.     begin
  195.         pragma io_interface (PREDEF, SIO_OPEN, ELEMENT_TYPE);  null;
  196.     end OPEN;
  197.  
  198.  
  199.     procedure CLOSE (FILE : in out FILE_TYPE) is
  200.     begin
  201.         pragma io_interface (PREDEF, SIO_CLOSE);  null;
  202.     end CLOSE;
  203.  
  204.  
  205.     procedure DELETE (FILE : in out FILE_TYPE) is
  206.     begin
  207.         pragma io_interface (PREDEF, SIO_DELETE);  null;
  208.     end DELETE;
  209.  
  210.     procedure RESET  (FILE : in out FILE_TYPE; MODE : in FILE_MODE) is
  211.     begin
  212.         pragma io_interface (PREDEF, SIO_RESET_MODE);  null;
  213.     end RESET;
  214.     
  215.     procedure RESET  (FILE : in out FILE_TYPE) is
  216.     begin
  217.         pragma io_interface (PREDEF, SIO_RESET);  null;
  218.     end RESET;
  219.  
  220.     function  MODE   (FILE : in FILE_TYPE) return FILE_MODE is
  221.     begin
  222.         pragma io_interface (PREDEF, SIO_MODE);  null;
  223.     end MODE;
  224.  
  225.     function  NAME   (FILE : in FILE_TYPE) return STRING is
  226.     begin
  227.         pragma io_interface (PREDEF, SIO_NAME);  null;
  228.     end NAME;
  229.  
  230.     function  FORM   (FILE : in FILE_TYPE) return STRING is
  231.     begin
  232.         pragma io_interface (PREDEF, SIO_FORM);  null;
  233.     end FORM;
  234.     
  235.     function  IS_OPEN(FILE : in FILE_TYPE) return BOOLEAN is
  236.     begin
  237.         pragma io_interface (PREDEF, SIO_IS_OPEN);  null;
  238.     end IS_OPEN;
  239.  
  240.  
  241.  
  242.     -- Input and Output Operations:
  243.  
  244.  
  245.     procedure READ (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE) is
  246.     begin
  247.         pragma io_interface (PREDEF, SIO_READ, ELEMENT_TYPE);  null;
  248.     end READ;
  249.  
  250.  
  251.     procedure WRITE (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE) is
  252.     begin
  253.         pragma io_interface (PREDEF, SIO_WRITE);  null;
  254.     end WRITE;
  255.  
  256.  
  257.     function  END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN is
  258.     begin
  259.         pragma io_interface (PREDEF, SIO_END_OF_FILE);  null;
  260.     end END_OF_FILE;
  261.  
  262.  
  263. end SEQUENTIAL_IO;
  264.  
  265. with IO_EXCEPTIONS;
  266. generic
  267.     type ELEMENT_TYPE is private;
  268.  
  269. package DIRECT_IO is
  270.  
  271.     type  FILE_TYPE  is limited private;
  272.  
  273.     type    FILE_MODE       is (IN_FILE, INOUT_FILE, OUT_FILE);
  274.     type    COUNT           is range 0 .. INTEGER'LAST;
  275.     subtype POSITIVE_COUNT  is COUNT range 1 .. COUNT'LAST;    
  276.       
  277.  
  278.     -- File management
  279.  
  280.  
  281.     procedure CREATE   (FILE : in out FILE_TYPE;
  282.                         MODE : in FILE_MODE := INOUT_FILE;
  283.                         NAME : in STRING := "";
  284.                         FORM : in STRING := "");
  285.  
  286.     procedure OPEN     (FILE : in out FILE_TYPE;
  287.                         MODE : in FILE_MODE;
  288.                         NAME : in STRING;
  289.                         FORM : in STRING := "");
  290.  
  291.     procedure CLOSE    (FILE : in out FILE_TYPE);
  292.  
  293.     procedure DELETE   (FILE : in out FILE_TYPE);
  294.  
  295.     procedure RESET    (FILE : in out FILE_TYPE; MODE : in  FILE_MODE);
  296.     procedure RESET    (FILE : in out FILE_TYPE);
  297.  
  298.     function  MODE     (FILE : in FILE_TYPE)  return FILE_MODE;
  299.  
  300.     function  NAME     (FILE : in FILE_TYPE)  return STRING;
  301.  
  302.     function  FORM     (FILE : in FILE_TYPE)  return STRING;
  303.     
  304.     function  IS_OPEN  (FILE : in FILE_TYPE)  return BOOLEAN;
  305.  
  306.     -- Input and Output Operations:
  307.  
  308.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE);
  309.     procedure READ   (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE;
  310.                                            FROM : in POSITIVE_COUNT);
  311.  
  312.     procedure WRITE  (FILE : in FILE_TYPE;  ITEM : in ELEMENT_TYPE);
  313.     procedure WRITE  (FILE : in FILE_TYPE;  ITEM : in ELEMENT_TYPE;
  314.                                             TO   : in POSITIVE_COUNT);
  315.  
  316.     procedure SET_INDEX(FILE : in FILE_TYPE; TO :in POSITIVE_COUNT);
  317.    
  318.     function  INDEX    (FILE : in FILE_TYPE)  return POSITIVE_COUNT;
  319.  
  320.     function  SIZE     (FILE : in FILE_TYPE)  return COUNT;
  321.       
  322.     function  END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN;
  323.  
  324.     -- Exceptions:
  325.  
  326.     STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR;
  327.     MODE_ERROR   : exception renames IO_EXCEPTIONS.MODE_ERROR;
  328.     NAME_ERROR     : exception renames IO_EXCEPTIONS.NAME_ERROR;
  329.     USE_ERROR     : exception renames IO_EXCEPTIONS.USE_ERROR;
  330.     DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR;
  331.     END_ERROR     : exception renames IO_EXCEPTIONS.END_ERROR;
  332.     DATA_ERROR     : exception renames IO_EXCEPTIONS.DATA_ERROR;
  333.  
  334. private
  335.  
  336.     type  FILE_TYPE  is 
  337.       record
  338.         FILE_NUM : INTEGER := 0;
  339.       end record;
  340.  
  341. end DIRECT_IO;
  342.  
  343.  
  344. package body DIRECT_IO is
  345.  
  346.  
  347.     -- The body for each procedure and function consists of an
  348.     -- interface pragma which generates an AIS instruction of
  349.     -- the form:
  350.     --
  351.     --        ['predef_', specifier, [formal, formal, ...]]
  352.     --
  353.     -- where the specifier is the second argument to the pragma
  354.     -- in upper case, and the formals are the fully qualified
  355.     -- names of the formal parameters to the subprogram.  The
  356.     -- specifier is used by the SETL INPUT_OUTPUT routines in
  357.     -- determining which routine was called, and the formals are
  358.     -- used for accessing and setting the values of the arguments
  359.     -- to the subprogram.
  360.  
  361.  
  362.  
  363.     -- File management
  364.  
  365.  
  366.     procedure CREATE (FILE : in out FILE_TYPE;
  367.                       MODE : in  FILE_MODE := INOUT_FILE;
  368.                       NAME : in  STRING := "";
  369.                       FORM : in  STRING := "") is
  370.     begin
  371.         pragma io_interface (PREDEF, DIO_CREATE, ELEMENT_TYPE);  null;
  372.     end CREATE;
  373.  
  374.  
  375.     procedure OPEN (FILE : in out FILE_TYPE;
  376.                     MODE : in FILE_MODE;
  377.                     NAME : in STRING;
  378.                     FORM : in STRING := "") is
  379.     begin
  380.         pragma io_interface (PREDEF, DIO_OPEN, ELEMENT_TYPE);  null;
  381.     end OPEN;
  382.  
  383.     procedure CLOSE (FILE : in out FILE_TYPE) is
  384.     begin
  385.         pragma io_interface (PREDEF, DIO_CLOSE);  null;
  386.     end CLOSE;
  387.  
  388.  
  389.     procedure DELETE (FILE : in out FILE_TYPE) is
  390.     begin
  391.         pragma io_interface (PREDEF, DIO_DELETE);  null;
  392.     end DELETE;
  393.  
  394.     procedure RESET  (FILE : in out FILE_TYPE;  MODE : in FILE_MODE) is
  395.     begin
  396.         pragma io_interface (PREDEF, DIO_RESET_MODE);  null;
  397.     end RESET;
  398.     
  399.     procedure RESET  (FILE : in out FILE_TYPE) is
  400.     begin
  401.         pragma io_interface (PREDEF, DIO_RESET);  null;
  402.     end RESET;
  403.  
  404.     function  MODE   (FILE : in FILE_TYPE)  return FILE_MODE is
  405.     begin
  406.         pragma io_interface (PREDEF, DIO_MODE);  null;
  407.     end MODE;
  408.  
  409.     function  NAME   (FILE : in FILE_TYPE)  return STRING is
  410.     begin
  411.         pragma io_interface (PREDEF, DIO_NAME);  null;
  412.     end NAME;
  413.  
  414.     function  FORM   (FILE : in FILE_TYPE)  return STRING is
  415.     begin
  416.         pragma io_interface (PREDEF, DIO_FORM);  null;
  417.     end FORM;
  418.     
  419.     function  IS_OPEN(FILE : in FILE_TYPE)  return BOOLEAN is
  420.     begin
  421.         pragma io_interface (PREDEF, DIO_IS_OPEN);  null;
  422.     end IS_OPEN;
  423.  
  424.  
  425.  
  426.     -- Input and Output Operations:
  427.  
  428.  
  429.     procedure READ (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE) is
  430.     begin
  431.         pragma io_interface (PREDEF, DIO_READ, ELEMENT_TYPE);  null;
  432.     end READ;
  433.  
  434.     procedure READ (FILE : in FILE_TYPE;  ITEM : out ELEMENT_TYPE; 
  435.                                             FROM : in POSITIVE_COUNT) is
  436.     begin
  437.         pragma io_interface (PREDEF, DIO_READ_FROM, ELEMENT_TYPE); null;
  438.     end  READ;
  439.  
  440.     procedure WRITE (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE) is
  441.     begin
  442.         pragma io_interface (PREDEF, DIO_WRITE);  null;
  443.     end WRITE;
  444.  
  445.     procedure WRITE (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE;
  446.                                               TO : in POSITIVE_COUNT) is
  447.     begin
  448.         pragma io_interface (PREDEF, DIO_WRITE_TO);  null;
  449.     end WRITE;
  450.  
  451.     procedure SET_INDEX(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT)
  452.     is begin
  453.         pragma io_interface (PREDEF, DIO_SET_INDEX);  null;
  454.     end SET_INDEX;
  455.  
  456.     function  INDEX       (FILE : in FILE_TYPE) return POSITIVE_COUNT is
  457.     begin
  458.         pragma io_interface (PREDEF, DIO_INDEX);  null;
  459.     end INDEX;
  460.  
  461.     function  SIZE        (FILE : in FILE_TYPE) return COUNT is
  462.     begin
  463.         pragma io_interface (PREDEF, DIO_SIZE);  null;
  464.     end SIZE;
  465.  
  466.     function  END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN is
  467.     begin
  468.         pragma io_interface (PREDEF, DIO_END_OF_FILE);  null;
  469.     end END_OF_FILE;
  470.  
  471.  
  472. end DIRECT_IO;
  473.  
  474.  
  475. with IO_EXCEPTIONS;
  476. package TEXT_IO is 
  477.      
  478.   type FILE_TYPE  is limited private;
  479.  
  480.   type FILE_MODE  is (IN_FILE, OUT_FILE);
  481.  
  482.   type COUNT is range 0 .. INTEGER'LAST;
  483.  
  484.   subtype POSITIVE_COUNT IS COUNT range 1 .. COUNT'LAST;
  485.  
  486.   UNBOUNDED : constant COUNT := 0; -- line and page length
  487.  
  488.   subtype FIELD is INTEGER range 0 .. 100 ;
  489.   subtype NUMBER_BASE is INTEGER range 2 .. 16;
  490.  
  491.   type TYPE_SET is (LOWER_CASE, UPPER_CASE);
  492.  
  493.   -- File Management
  494.  
  495.      
  496.   procedure CREATE (FILE : in out FILE_TYPE;
  497.                     MODE : in FILE_MODE := OUT_FILE;
  498.                     NAME : in STRING    := "";
  499.                     FORM : in STRING    := "");
  500.     
  501.   procedure OPEN   (FILE : in out FILE_TYPE;
  502.                     MODE : in FILE_MODE;
  503.                     NAME : in STRING;
  504.                     FORM : in STRING := "");
  505.  
  506.   procedure CLOSE  (FILE : in out FILE_TYPE);
  507.     
  508.   procedure DELETE (FILE : in out FILE_TYPE);
  509.  
  510.   procedure RESET  (FILE : in out FILE_TYPE; MODE : in FILE_MODE);
  511.   procedure RESET  (FILE : in out FILE_TYPE);
  512.  
  513.   function MODE (FILE : in FILE_TYPE)     return FILE_MODE;
  514.  
  515.   function NAME (FILE : in FILE_TYPE)     return STRING;
  516.  
  517.   function FORM (FILE : in FILE_TYPE)     return STRING;      
  518.  
  519.   function IS_OPEN (FILE : in FILE_TYPE)  return BOOLEAN;
  520.  
  521.   -- Control of default input and output files
  522.      
  523.   procedure SET_INPUT  (FILE : in FILE_TYPE);
  524.   procedure SET_OUTPUT (FILE : in FILE_TYPE);
  525.  
  526.   function STANDARD_INPUT  return FILE_TYPE;
  527.   function STANDARD_OUTPUT return FILE_TYPE;
  528.  
  529.   function CURRENT_INPUT  return FILE_TYPE;
  530.   function CURRENT_OUTPUT return FILE_TYPE;
  531.  
  532.   -- Specification of line and page lengths
  533.  
  534.   procedure SET_LINE_LENGTH (FILE : in FILE_TYPE;  TO : in COUNT);
  535.   procedure SET_LINE_LENGTH (TO : in COUNT);    -- default output file
  536.  
  537.   procedure SET_PAGE_LENGTH (FILE : in FILE_TYPE;  TO : in COUNT);
  538.   procedure SET_PAGE_LENGTH (TO : in COUNT);    -- default output file
  539.  
  540.   function LINE_LENGTH (FILE : in FILE_TYPE)  return COUNT;
  541.   function LINE_LENGTH return COUNT;  -- default output file
  542.      
  543.   
  544.   function PAGE_LENGTH (FILE : in FILE_TYPE)  return COUNT;
  545.   function PAGE_LENGTH return COUNT; -- default output file
  546.  
  547.   -- Column, Line and Page Control
  548.  
  549.   procedure NEW_LINE (FILE : in FILE_TYPE;  SPACING : in POSITIVE_COUNT := 1);
  550.   procedure NEW_LINE (SPACING : in POSITIVE_COUNT := 1); 
  551.  
  552.   procedure SKIP_LINE (FILE : in FILE_TYPE;  SPACING : in POSITIVE_COUNT := 1);
  553.   procedure SKIP_LINE (SPACING : in POSITIVE_COUNT := 1);
  554.  
  555.   function END_OF_LINE (FILE : in FILE_TYPE) return BOOLEAN;
  556.   function END_OF_LINE return BOOLEAN; -- default input file
  557.  
  558.   procedure NEW_PAGE (FILE : in FILE_TYPE);
  559.   procedure NEW_PAGE; -- default output file
  560.  
  561.   procedure SKIP_PAGE (FILE : in FILE_TYPE);
  562.   procedure SKIP_PAGE; -- default input file
  563.  
  564.   function END_OF_PAGE (FILE : in FILE_TYPE) return BOOLEAN;
  565.   function END_OF_PAGE return BOOLEAN;      
  566.  
  567.   function END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN;
  568.   function END_OF_FILE return BOOLEAN;      
  569.  
  570.   procedure SET_COL(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT);
  571.   procedure SET_COL(TO : in POSITIVE_COUNT); -- default output file
  572.  
  573.   procedure SET_LINE(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT);
  574.   procedure SET_LINE(TO : in POSITIVE_COUNT); -- default output file
  575.   
  576.   function COL(FILE : in FILE_TYPE) return POSITIVE_COUNT;
  577.   function COL return POSITIVE_COUNT; -- default output file
  578.  
  579.   function LINE(FILE : in FILE_TYPE) return POSITIVE_COUNT;
  580.   function LINE return POSITIVE_COUNT; -- default output file
  581.  
  582.   function PAGE(FILE : in FILE_TYPE) return POSITIVE_COUNT;
  583.   function PAGE return POSITIVE_COUNT; -- default output file
  584.  
  585.  
  586.   -- Character Input-Output
  587.  
  588.   procedure GET (FILE : in  FILE_TYPE;  ITEM : out CHARACTER);
  589.   procedure GET (ITEM : out CHARACTER);
  590.   procedure PUT (FILE : in  FILE_TYPE;  ITEM : in CHARACTER);
  591.   procedure PUT (ITEM : in  CHARACTER);
  592.  
  593.     
  594.   -- String Input-Output
  595.     
  596.   procedure GET (FILE : in  FILE_TYPE;  ITEM : out STRING);
  597.   procedure GET (ITEM : out STRING);    
  598.   procedure PUT (FILE : in  FILE_TYPE;  ITEM : in STRING);
  599.   procedure PUT (ITEM : in  STRING);
  600.  
  601.   procedure GET_LINE (FILE : in FILE_TYPE; ITEM : out STRING;
  602.                                            LAST : out NATURAL);
  603.   procedure GET_LINE (ITEM : out  STRING; LAST : out NATURAL);
  604.  
  605.   procedure PUT_LINE (FILE : in FILE_TYPE; ITEM : in STRING);
  606.   procedure PUT_LINE (ITEM : in STRING);
  607.     
  608.   -- Generic package for Input-Output of Integer Types
  609.  
  610.   generic
  611.     type NUM is range <>;
  612.   package INTEGER_IO is
  613.  
  614.     DEFAULT_WIDTH : FIELD := NUM'WIDTH;
  615.     DEFAULT_BASE  : NUMBER_BASE := 10;
  616.  
  617.     procedure GET (FILE  : in FILE_TYPE;  ITEM : out NUM; 
  618.                                           WIDTH : in FIELD := 0);
  619.     procedure GET (ITEM  : out NUM; WIDTH : in FIELD := 0);
  620.  
  621.     procedure PUT (FILE  : in FILE_TYPE;
  622.                ITEM  : in NUM;
  623.                WIDTH : in FIELD := DEFAULT_WIDTH;
  624.                BASE  : in NUMBER_BASE := DEFAULT_BASE);
  625.     procedure PUT (ITEM  : in NUM;
  626.                WIDTH : in FIELD := DEFAULT_WIDTH;
  627.                BASE  : in NUMBER_BASE := DEFAULT_BASE);
  628.     
  629.     procedure GET (FROM : in STRING; ITEM: out NUM; LAST: out POSITIVE);
  630.     procedure PUT (TO   : out STRING;
  631.                    ITEM : in  NUM;
  632.                    BASE : in  NUMBER_BASE := DEFAULT_BASE);
  633.  
  634.   end INTEGER_IO;
  635.  
  636.  
  637.   -- Generic packages for Input-Output of Real Types
  638.  
  639.   generic
  640.     type NUM is digits <>;
  641.   package FLOAT_IO is
  642.  
  643.     DEFAULT_FORE : FIELD := 2;
  644.     DEFAULT_AFT  : FIELD := NUM'DIGITS-1;
  645.     DEFAULT_EXP  : FIELD := 3;
  646.  
  647.     procedure GET (FILE : in FILE_TYPE; ITEM : out NUM;
  648.                                         WIDTH : in FIELD := 0);
  649.     procedure GET (ITEM : out NUM; WIDTH : in FIELD := 0);
  650.  
  651.     procedure PUT (FILE        : in FILE_TYPE;
  652.            ITEM        : in NUM;
  653.            FORE            : in FIELD := DEFAULT_FORE;
  654.            AFT      : in FIELD := DEFAULT_AFT;
  655.            EXP       : in FIELD := DEFAULT_EXP);
  656.  
  657.     procedure PUT (ITEM        : in NUM;
  658.            FORE       : in FIELD := DEFAULT_FORE;
  659.            AFT      : in FIELD := DEFAULT_AFT;
  660.            EXP      : in FIELD := DEFAULT_EXP);
  661.     
  662.     procedure GET (FROM : in STRING; ITEM: out NUM; LAST: out POSITIVE);
  663.     procedure PUT (TO   : out STRING;
  664.                    ITEM : in NUM;
  665.                    AFT  : in FIELD := DEFAULT_AFT;
  666.                    EXP  : in FIELD := DEFAULT_EXP);
  667.  
  668.   end FLOAT_IO;
  669.  
  670.  
  671.   generic
  672.     type NUM is delta <>;
  673.   package FIXED_IO is
  674.  
  675.     DEFAULT_FORE : FIELD := NUM'FORE;
  676.     DEFAULT_AFT  : FIELD := NUM'AFT;
  677.     DEFAULT_EXP  : FIELD := 0;
  678.  
  679.     procedure GET (FILE : in FILE_TYPE; ITEM : out NUM;
  680.                                         WIDTH : in FIELD := 0);
  681.     procedure GET (ITEM : out NUM; WIDTH : in FIELD := 0);
  682.  
  683.     procedure PUT (FILE        : in FILE_TYPE;
  684.            ITEM        : in NUM;
  685.            FORE     : in FIELD := DEFAULT_FORE;
  686.            AFT      : in FIELD := DEFAULT_AFT;
  687.                    EXP          : in FIELD := DEFAULT_EXP);
  688.  
  689.     procedure PUT (ITEM        : in NUM;
  690.            FORE     : in FIELD := DEFAULT_FORE;
  691.            AFT      : in FIELD := DEFAULT_AFT;
  692.                    EXP          : in FIELD := DEFAULT_EXP);
  693.  
  694.     procedure GET (FROM : in STRING; ITEM: out NUM; LAST: out POSITIVE);
  695.     procedure PUT (TO   : out STRING;
  696.                    ITEM : in  NUM;
  697.                    AFT  : in  FIELD := DEFAULT_AFT;
  698.                    EXP  : in  FIELD := DEFAULT_EXP);
  699.  
  700.   end FIXED_IO;
  701.  
  702.       
  703.   -- Generic package for Input-Output of Enumeration Types
  704.  
  705.   generic
  706.     type ENUM is (<>);
  707.   package ENUMERATION_IO is
  708.  
  709.     DEFAULT_WIDTH   : FIELD := 0;
  710.     DEFAULT_SETTING : TYPE_SET := UPPER_CASE;
  711.  
  712.     procedure GET (FILE : in FILE_TYPE; ITEM : out ENUM);
  713.     procedure GET (ITEM : out ENUM);
  714.  
  715.     procedure PUT (FILE       :    in FILE_TYPE;
  716.            ITEM       :    in ENUM;
  717.            WIDTH      :    in FIELD    := DEFAULT_WIDTH;
  718.            SET        : in TYPE_SET := DEFAULT_SETTING);
  719.  
  720.     procedure PUT (ITEM       :    in ENUM;
  721.            WIDTH      :    in FIELD    := DEFAULT_WIDTH;
  722.            SET        :    in TYPE_SET := DEFAULT_SETTING);
  723.  
  724.     procedure GET(FROM : in STRING; ITEM: out ENUM; LAST: out POSITIVE);
  725.     procedure PUT (TO   : out STRING;
  726.                    ITEM : in  ENUM;
  727.                    SET  : in  TYPE_SET := DEFAULT_SETTING);
  728.  
  729.   end ENUMERATION_IO;
  730.  
  731.  
  732.   -- Exceptions:
  733.   --  
  734.   -- These are the exceptions whose names are visible to the   
  735.   -- calling environment.   
  736.      
  737.   STATUS_ERROR    : exception renames IO_EXCEPTIONS.STATUS_ERROR;
  738.   MODE_ERROR    : exception renames IO_EXCEPTIONS.MODE_ERROR;
  739.   NAME_ERROR    : exception renames IO_EXCEPTIONS.NAME_ERROR;
  740.   USE_ERROR    : exception renames IO_EXCEPTIONS.USE_ERROR;
  741.   DEVICE_ERROR    : exception renames IO_EXCEPTIONS.DEVICE_ERROR;
  742.   END_ERROR    : exception renames IO_EXCEPTIONS.END_ERROR;
  743.   DATA_ERROR    : exception renames IO_EXCEPTIONS.DATA_ERROR;
  744.   LAYOUT_ERROR    : exception renames IO_EXCEPTIONS.LAYOUT_ERROR;
  745.  
  746.  
  747.     
  748. private
  749.  
  750.     type  FILE_TYPE  is 
  751.       record
  752.         FILE_NUM : INTEGER := 0;
  753.       end record;
  754.  
  755. end TEXT_IO; 
  756.  
  757.  
  758. package body TEXT_IO is
  759.  
  760. -- The bodies for all the procedure and functions consist of an 
  761. -- interface pragma which generates an AIS instruction of the form:
  762. --
  763. --    [ 'predef_', specifier, [formal, formal, ...] ]
  764. --
  765. -- where the specifier is the second argument to the pragma in 
  766. -- upper case, and the formals are the fully qualified names of the 
  767. -- formal parameters to the procedure. The specifier is used by the 
  768. -- SETL TEXT_IO routines in determining which routine was called and 
  769. -- the formal names are used for accessing and setting the values of 
  770. -- the arguments to the procedure or function call. 
  771.  
  772.  
  773. -- Global operations for file manipulation:
  774.   
  775.   procedure CREATE (FILE : in out FILE_TYPE;
  776.                     MODE : in FILE_MODE := OUT_FILE;
  777.                     NAME : in STRING    := "";
  778.                     FORM : in STRING    := "") is
  779.   begin
  780.       pragma io_interface (PREDEF, TIO_CREATE);  null;
  781.   end CREATE;
  782.    
  783.   procedure OPEN   (FILE : in out FILE_TYPE;
  784.                     MODE : in FILE_MODE;
  785.                     NAME : in STRING;
  786.                     FORM : in STRING := "") is
  787.   begin
  788.       pragma io_interface (PREDEF, TIO_OPEN);  null;
  789.   end OPEN;
  790.  
  791.   procedure CLOSE  (FILE : in out FILE_TYPE) is
  792.   begin
  793.       pragma io_interface (PREDEF, TIO_CLOSE);  null;
  794.   end CLOSE;
  795.  
  796.   procedure DELETE (FILE : in out FILE_TYPE) is
  797.   begin
  798.       pragma io_interface (PREDEF, TIO_DELETE);  null;
  799.   end DELETE;
  800.     
  801.   procedure RESET  (FILE : in out FILE_TYPE; MODE : in FILE_MODE) is
  802.   begin
  803.       pragma io_interface (PREDEF, TIO_RESET_MODE);  null;
  804.   end RESET;
  805.   procedure RESET  (FILE : in out FILE_TYPE) is
  806.   begin
  807.       pragma io_interface (PREDEF, TIO_RESET);  null;
  808.   end RESET;
  809.  
  810.   function MODE (FILE : in FILE_TYPE)     return FILE_MODE is
  811.   begin
  812.       pragma io_interface (PREDEF, TIO_MODE);  null;
  813.   end MODE;
  814.  
  815.   
  816.   function NAME (FILE : in FILE_TYPE)     return STRING is
  817.   begin
  818.       pragma io_interface (PREDEF, TIO_NAME);  null;
  819.   end NAME;
  820.  
  821.   function FORM (FILE : in FILE_TYPE)     return STRING is
  822.   begin
  823.       pragma io_interface (PREDEF, TIO_FORM);  null;
  824.   end FORM;      
  825.  
  826.   function IS_OPEN (FILE : in FILE_TYPE)  return BOOLEAN is
  827.   begin
  828.       pragma io_interface (PREDEF, TIO_IS_OPEN);  null;
  829.   end IS_OPEN;
  830.     
  831.   -- Control of default input and output files
  832.      
  833.   procedure SET_INPUT  (FILE : in FILE_TYPE) is
  834.   begin
  835.       pragma io_interface (PREDEF, SET_INPUT);  null;
  836.   end SET_INPUT;
  837.   procedure SET_OUTPUT (FILE : in FILE_TYPE) is
  838.   begin
  839.       pragma io_interface (PREDEF, SET_OUTPUT);  null;
  840.   end SET_OUTPUT;
  841.  
  842.   function STANDARD_INPUT  return FILE_TYPE is
  843.   begin
  844.       pragma io_interface (PREDEF, STANDARD_INPUT);  null;
  845.   end STANDARD_INPUT;
  846.   function STANDARD_OUTPUT return FILE_TYPE is
  847.   begin
  848.       pragma io_interface (PREDEF, STANDARD_OUTPUT);  null;
  849.   end STANDARD_OUTPUT;
  850.  
  851.   function CURRENT_INPUT  return FILE_TYPE is
  852.   begin
  853.       pragma io_interface (PREDEF, CURRENT_INPUT);  null;
  854.   end CURRENT_INPUT;
  855.   function CURRENT_OUTPUT return FILE_TYPE is
  856.   begin
  857.       pragma io_interface (PREDEF, CURRENT_OUTPUT);  null;
  858.   end CURRENT_OUTPUT;
  859.  
  860.   -- Specification of line and page lengths
  861.  
  862.   procedure SET_LINE_LENGTH (FILE : in FILE_TYPE;  TO : in COUNT) is
  863.   begin
  864.       pragma io_interface (PREDEF, SET_LINE_LENGTH_FILE);  null;
  865.   end SET_LINE_LENGTH;
  866.   procedure SET_LINE_LENGTH (TO : in COUNT) is
  867.   begin
  868.       pragma io_interface (PREDEF, SET_LINE_LENGTH);  null;
  869.   end SET_LINE_LENGTH;    
  870.  
  871.   procedure SET_PAGE_LENGTH (FILE : in FILE_TYPE;  TO : in COUNT) is
  872.   begin
  873.       pragma io_interface (PREDEF, SET_PAGE_LENGTH_FILE);  null;
  874.   end SET_PAGE_LENGTH;
  875.   procedure SET_PAGE_LENGTH (TO : in COUNT) is
  876.   begin
  877.       pragma io_interface (PREDEF, SET_PAGE_LENGTH);  null;
  878.   end SET_PAGE_LENGTH;    
  879.  
  880.   function LINE_LENGTH (FILE : in FILE_TYPE)  return COUNT is
  881.   begin
  882.       pragma io_interface (PREDEF, LINE_LENGTH_FILE);  null;
  883.   end LINE_LENGTH;
  884.   function LINE_LENGTH return COUNT is
  885.   begin
  886.       pragma io_interface (PREDEF, LINE_LENGTH);  null;
  887.   end LINE_LENGTH;  
  888.      
  889.   
  890.   function PAGE_LENGTH (FILE : in FILE_TYPE)  return COUNT is
  891.   begin
  892.       pragma io_interface (PREDEF, PAGE_LENGTH_FILE);  null;
  893.   end PAGE_LENGTH;
  894.   function PAGE_LENGTH return COUNT is
  895.   begin
  896.       pragma io_interface (PREDEF, PAGE_LENGTH);  null;
  897.   end PAGE_LENGTH; 
  898.  
  899.   -- Column, Line and Page Control
  900.  
  901.   procedure NEW_LINE (FILE : in FILE_TYPE;  SPACING : in POSITIVE_COUNT := 1)
  902.   is begin
  903.       pragma io_interface (PREDEF, NEW_LINE_FILE);  null;
  904.   end NEW_LINE;
  905.   procedure NEW_LINE (SPACING : in POSITIVE_COUNT := 1) is
  906.   begin
  907.       pragma io_interface (PREDEF, NEW_LINE);  null;
  908.   end NEW_LINE; 
  909.  
  910.   procedure SKIP_LINE (FILE : in FILE_TYPE;  SPACING : in POSITIVE_COUNT := 1) 
  911.   is begin
  912.       pragma io_interface (PREDEF, SKIP_LINE_FILE);  null;
  913.   end SKIP_LINE;
  914.   procedure SKIP_LINE (SPACING : in POSITIVE_COUNT := 1) is
  915.   begin
  916.       pragma io_interface (PREDEF, SKIP_LINE);  null;
  917.   end SKIP_LINE;
  918.  
  919.   function END_OF_LINE (FILE : in FILE_TYPE) return BOOLEAN is
  920.   begin
  921.       pragma io_interface (PREDEF, END_OF_LINE_FILE);  null;
  922.   end END_OF_LINE;
  923.   function END_OF_LINE return BOOLEAN is
  924.   begin
  925.       pragma io_interface (PREDEF, END_OF_LINE);  null;
  926.   end END_OF_LINE; 
  927.  
  928.   procedure NEW_PAGE(FILE : in FILE_TYPE) is
  929.   begin
  930.       pragma io_interface (PREDEF, NEW_PAGE_FILE);  null;
  931.   end NEW_PAGE;
  932.   procedure NEW_PAGE is
  933.   begin
  934.       pragma io_interface (PREDEF, NEW_PAGE);  null;
  935.   end NEW_PAGE;
  936.  
  937.   procedure SKIP_PAGE(FILE : in FILE_TYPE) is
  938.   begin
  939.       pragma io_interface (PREDEF, SKIP_PAGE_FILE);  null;
  940.   end SKIP_PAGE;
  941.   procedure SKIP_PAGE is
  942.   begin
  943.       pragma io_interface (PREDEF, SKIP_PAGE);  null;
  944.   end SKIP_PAGE; 
  945.  
  946.   function END_OF_PAGE(FILE : in FILE_TYPE) return BOOLEAN is
  947.   begin
  948.       pragma io_interface (PREDEF, END_OF_PAGE_FILE);  null;
  949.   end END_OF_PAGE;
  950.   function END_OF_PAGE return BOOLEAN is
  951.   begin
  952.       pragma io_interface (PREDEF, END_OF_PAGE);  null;
  953.   end END_OF_PAGE;      
  954.  
  955.   function END_OF_FILE (FILE : in FILE_TYPE) return BOOLEAN is
  956.   begin
  957.       pragma io_interface (PREDEF, TIO_END_OF_FILE_FILE);  null;
  958.   end END_OF_FILE;
  959.   function END_OF_FILE return BOOLEAN is
  960.   begin
  961.       pragma io_interface (PREDEF, TIO_END_OF_FILE);  null;
  962.   end END_OF_FILE;
  963.  
  964.   procedure SET_COL(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT) is
  965.   begin
  966.       pragma io_interface (PREDEF, SET_COL_FILE);  null;
  967.   end SET_COL;
  968.   procedure SET_COL(TO : in POSITIVE_COUNT) is
  969.   begin
  970.       pragma io_interface (PREDEF, SET_COL);  null;
  971.   end SET_COL;
  972.  
  973.   procedure SET_LINE(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT) is
  974.   begin
  975.       pragma io_interface (PREDEF, SET_LINE_FILE);  null;
  976.   end SET_LINE;
  977.   procedure SET_LINE(TO : in POSITIVE_COUNT) is
  978.   begin
  979.       pragma io_interface (PREDEF, SET_LINE);  null;
  980.   end SET_LINE; 
  981.   
  982.   function COL(FILE : in FILE_TYPE) return POSITIVE_COUNT is
  983.   begin
  984.       pragma io_interface (PREDEF, COL_FILE);  null;
  985.   end COL;
  986.   function COL return POSITIVE_COUNT is
  987.   begin
  988.       pragma io_interface (PREDEF, COL);  null;
  989.   end COL; 
  990.  
  991.   function LINE(FILE : in FILE_TYPE) return POSITIVE_COUNT is
  992.   begin
  993.       pragma io_interface (PREDEF, LINE_FILE);  null;
  994.   end LINE;
  995.   function LINE return POSITIVE_COUNT is
  996.   begin
  997.       pragma io_interface (PREDEF, LINE);  null;
  998.   end LINE; 
  999.  
  1000.   function PAGE(FILE : in FILE_TYPE) return POSITIVE_COUNT is
  1001.   begin
  1002.       pragma io_interface (PREDEF, PAGE_FILE);  null;
  1003.   end PAGE;
  1004.   function PAGE return POSITIVE_COUNT is
  1005.   begin
  1006.       pragma io_interface (PREDEF, PAGE);  null;
  1007.   end PAGE; 
  1008.  
  1009.  
  1010.   -- Character Input-Output
  1011.  
  1012.   procedure GET (FILE : in FILE_TYPE;  ITEM : out CHARACTER) is
  1013.   begin
  1014.       pragma io_interface (PREDEF, GET_CHAR_FILE_ITEM);  null;
  1015.   end GET;
  1016.   procedure GET (ITEM : out CHARACTER) is
  1017.   begin
  1018.       pragma io_interface (PREDEF, GET_CHAR_ITEM);  null;
  1019.   end GET;
  1020.     
  1021.   procedure PUT (FILE : in FILE_TYPE;  ITEM : in CHARACTER) is
  1022.   begin
  1023.       pragma io_interface (PREDEF, PUT_CHAR_FILE_ITEM);  null;
  1024.   end PUT;
  1025.   procedure PUT (ITEM : in CHARACTER) is
  1026.   begin
  1027.       pragma io_interface (PREDEF, PUT_CHAR_ITEM);  null;
  1028.   end PUT;
  1029.  
  1030.     
  1031.   -- String Input-Output
  1032.     
  1033.   procedure GET (FILE : in FILE_TYPE;  ITEM : out STRING) is
  1034.   begin
  1035.       pragma io_interface (PREDEF, GET_STRING_FILE_ITEM);  null;
  1036.   end GET;
  1037.   procedure GET (ITEM : out STRING) is
  1038.   begin
  1039.       pragma io_interface (PREDEF, GET_STRING_ITEM);  null;
  1040.   end GET;    
  1041.     
  1042.   procedure PUT (FILE : in FILE_TYPE;  ITEM : in STRING) is
  1043.   begin
  1044.       pragma io_interface (PREDEF, PUT_STRING_FILE_ITEM);  null;
  1045.   end PUT;
  1046.   procedure PUT (ITEM : in STRING) is
  1047.   begin
  1048.       pragma io_interface (PREDEF, PUT_STRING_ITEM);  null;
  1049.   end PUT;
  1050.  
  1051.   procedure GET_LINE (FILE : in FILE_TYPE; ITEM : out STRING;
  1052.                                            LAST : out NATURAL) is
  1053.   begin
  1054.       pragma io_interface (PREDEF, GET_LINE_FILE);  null;
  1055.   end GET_LINE;
  1056.   procedure GET_LINE (ITEM  : out  STRING; LAST : out NATURAL) is
  1057.   begin
  1058.       pragma io_interface (PREDEF, GET_LINE);  null;
  1059.   end GET_LINE; 
  1060.  
  1061.   procedure PUT_LINE (FILE  : in FILE_TYPE; ITEM : in STRING) is
  1062.   begin
  1063.       pragma io_interface (PREDEF, PUT_LINE_FILE);  null;
  1064.   end PUT_LINE;
  1065.   procedure PUT_LINE (ITEM  : in STRING) is
  1066.   begin
  1067.       pragma io_interface (PREDEF, PUT_LINE);  null;
  1068.   end PUT_LINE;
  1069.     
  1070.   -- Generic package for Input-Output of Integer Types
  1071.  
  1072.   package body INTEGER_IO is
  1073.  
  1074.     procedure GET (FILE  : in FILE_TYPE;  ITEM : out NUM;
  1075.                                           WIDTH : in FIELD := 0) is
  1076.     begin
  1077.         pragma io_interface (PREDEF, GET_INTEGER_FILE_ITEM, NUM);  null;
  1078.     end GET;
  1079.     procedure GET (ITEM  : out NUM; WIDTH : in FIELD := 0) is
  1080.     begin
  1081.         pragma io_interface (PREDEF, GET_INTEGER_ITEM, NUM);  null;
  1082.     end GET;
  1083.  
  1084.     procedure PUT (FILE  : in FILE_TYPE;
  1085.                ITEM  : in NUM;
  1086.                WIDTH : in FIELD := DEFAULT_WIDTH;
  1087.                BASE  : in NUMBER_BASE := DEFAULT_BASE) is
  1088.     begin
  1089.         pragma io_interface (PREDEF, PUT_INTEGER_FILE_ITEM);  null;
  1090.     end PUT;
  1091.  
  1092.     procedure PUT (ITEM  : in NUM;
  1093.                WIDTH : in FIELD := DEFAULT_WIDTH;
  1094.                BASE  : in NUMBER_BASE := DEFAULT_BASE) is
  1095.     begin
  1096.         pragma io_interface (PREDEF, PUT_INTEGER_ITEM);  null;
  1097.     end PUT;
  1098.     
  1099.     procedure GET (FROM : in STRING; ITEM : out NUM; LAST: out POSITIVE)
  1100.     is begin
  1101.         pragma io_interface (PREDEF, GET_INTEGER_STRING, NUM);  null;
  1102.     end GET;
  1103.     procedure PUT (TO   : out STRING;
  1104.                    ITEM : in NUM;
  1105.                    BASE : in NUMBER_BASE := DEFAULT_BASE) is
  1106.     begin
  1107.         pragma io_interface (PREDEF, PUT_INTEGER_STRING);  null;
  1108.     end PUT;
  1109.  
  1110.   end INTEGER_IO;
  1111.  
  1112.  
  1113.   -- Generic packages for Input-Output of Real Types
  1114.  
  1115.   package body FLOAT_IO is
  1116.  
  1117.     procedure GET (FILE : in FILE_TYPE; ITEM : out NUM;
  1118.                                         WIDTH : in FIELD := 0) is
  1119.     begin
  1120.         pragma io_interface (PREDEF, GET_FLOAT_FILE_ITEM, NUM);  null;
  1121.     end GET;
  1122.     procedure GET (ITEM : out NUM; WIDTH : in FIELD := 0) is
  1123.     begin
  1124.         pragma io_interface (PREDEF, GET_FLOAT_ITEM, NUM);  null;
  1125.     end GET;
  1126.  
  1127.     procedure PUT (FILE        : in FILE_TYPE;
  1128.            ITEM        : in NUM;
  1129.            FORE            : in FIELD := DEFAULT_FORE;
  1130.            AFT      : in FIELD := DEFAULT_AFT;
  1131.            EXP       : in FIELD := DEFAULT_EXP) is
  1132.     begin
  1133.         pragma io_interface (PREDEF, PUT_FLOAT_FILE_ITEM);  null;
  1134.     end PUT;
  1135.  
  1136.     procedure PUT (ITEM        : in NUM;
  1137.            FORE       : in FIELD := DEFAULT_FORE;
  1138.            AFT      : in FIELD := DEFAULT_AFT;
  1139.            EXP      : in FIELD := DEFAULT_EXP) is
  1140.     begin
  1141.         pragma io_interface (PREDEF, PUT_FLOAT_ITEM);  null;
  1142.     end PUT;
  1143.     
  1144.     procedure GET (FROM : in STRING; ITEM : out NUM; LAST: out POSITIVE)
  1145.     is begin
  1146.         pragma io_interface (PREDEF, GET_FLOAT_STRING, NUM);  null;
  1147.     end GET;
  1148.     procedure PUT (TO   : out STRING;
  1149.                    ITEM : in NUM;
  1150.                    AFT  : in FIELD := DEFAULT_AFT;
  1151.                    EXP  : in FIELD := DEFAULT_EXP) is
  1152.     begin
  1153.         pragma io_interface (PREDEF, PUT_FLOAT_STRING);  null;
  1154.     end PUT;
  1155.  
  1156.   end FLOAT_IO;
  1157.  
  1158.  
  1159.   package body FIXED_IO is
  1160.  
  1161.     procedure GET (FILE : in FILE_TYPE; ITEM : out NUM;
  1162.                                         WIDTH : in FIELD := 0) is
  1163.     begin
  1164.         pragma io_interface (PREDEF, GET_FIXED_FILE_ITEM, NUM);  null;
  1165.     end GET;
  1166.     procedure GET (ITEM : out NUM; WIDTH : in FIELD := 0) is
  1167.     begin
  1168.         pragma io_interface (PREDEF, GET_FIXED_ITEM, NUM);  null;
  1169.     end GET;
  1170.  
  1171.     procedure PUT (FILE        : in FILE_TYPE;
  1172.            ITEM        : in NUM;
  1173.            FORE     : in FIELD := DEFAULT_FORE;
  1174.            AFT      : in FIELD := DEFAULT_AFT;
  1175.                    EXP          : in FIELD := DEFAULT_EXP) is
  1176.     begin
  1177.         pragma io_interface (PREDEF, PUT_FIXED_FILE_ITEM);  null;
  1178.     end PUT;
  1179.  
  1180.     procedure PUT (ITEM        : in NUM;
  1181.            FORE     : in FIELD := DEFAULT_FORE;
  1182.            AFT      : in FIELD := DEFAULT_AFT;
  1183.                    EXP          : in FIELD := DEFAULT_EXP) is
  1184.     begin
  1185.         pragma io_interface (PREDEF, PUT_FIXED_ITEM);  null;
  1186.     end PUT;
  1187.  
  1188.     procedure GET (FROM : in STRING; ITEM : out NUM; LAST: out POSITIVE)
  1189.     is begin
  1190.         pragma io_interface (PREDEF, GET_FIXED_STRING, NUM);  null;
  1191.     end GET;
  1192.     procedure PUT (TO   : out STRING;
  1193.                    ITEM : in  NUM;
  1194.                    AFT  : in  FIELD := DEFAULT_AFT;
  1195.                    EXP  : in  FIELD := DEFAULT_EXP) is
  1196.     begin
  1197.         pragma io_interface (PREDEF, PUT_FIXED_STRING);  null;
  1198.     end PUT;
  1199.  
  1200.   end FIXED_IO;
  1201.  
  1202.       
  1203.   -- Generic package for Input-Output of Enumeration Types
  1204.  
  1205.   package body ENUMERATION_IO is
  1206.  
  1207.     procedure GET (FILE : in FILE_TYPE; ITEM : out ENUM) is
  1208.     begin
  1209.         pragma io_interface (PREDEF, GET_ENUM_FILE_ITEM, ENUM);  null;
  1210.     end GET;
  1211.     procedure GET (ITEM : out ENUM) is
  1212.     begin
  1213.         pragma io_interface (PREDEF, GET_ENUM_ITEM, ENUM);  null;
  1214.     end GET;
  1215.  
  1216.     procedure PUT (FILE       :    in FILE_TYPE;
  1217.            ITEM       :    in ENUM;
  1218.            WIDTH      :    in FIELD    := DEFAULT_WIDTH;
  1219.            SET        : in TYPE_SET := DEFAULT_SETTING) is
  1220.     begin
  1221.         pragma io_interface (PREDEF, PUT_ENUM_FILE_ITEM, ENUM);  null;
  1222.     end PUT;
  1223.  
  1224.     procedure PUT (ITEM       :    in ENUM;
  1225.            WIDTH      :    in FIELD    := DEFAULT_WIDTH;
  1226.            SET        :    in TYPE_SET := DEFAULT_SETTING) is
  1227.     begin
  1228.         pragma io_interface (PREDEF, PUT_ENUM_ITEM, ENUM);  null;
  1229.     end PUT;
  1230.  
  1231.     procedure GET (FROM : in STRING; ITEM: out ENUM; LAST: out POSITIVE)
  1232.     is begin
  1233.         pragma io_interface (PREDEF, GET_ENUM_STRING, ENUM);  null;
  1234.     end GET;
  1235.     procedure PUT (TO   : out STRING;
  1236.                    ITEM : in  ENUM;
  1237.                    SET  : in  TYPE_SET := DEFAULT_SETTING) is
  1238.     begin
  1239.         pragma io_interface (PREDEF, PUT_ENUM_STRING, ENUM);  null;
  1240.     end PUT;
  1241.  
  1242.   end ENUMERATION_IO;
  1243.  
  1244.  
  1245. end TEXT_IO;
  1246.  
  1247. -- Predefined library units:  calendar & generic subprograms
  1248.  
  1249. package CALENDAR is
  1250.    type TIME is private;
  1251.  
  1252.    subtype YEAR_NUMBER  is INTEGER range 1901 .. 2099;
  1253.    subtype MONTH_NUMBER is INTEGER range 1 .. 12;
  1254.    subtype DAY_NUMBER   is INTEGER range 1 .. 31;
  1255.  
  1256.    function CLOCK return TIME;
  1257.  
  1258.    function YEAR   (DATE    : TIME) return YEAR_NUMBER;
  1259.    function MONTH  (DATE    : TIME) return MONTH_NUMBER;
  1260.    function DAY    (DATE    : TIME) return DAY_NUMBER;
  1261.    function SECONDS(DATE    : TIME) return DURATION;
  1262.  
  1263.    procedure SPLIT (DATE    : in  TIME;
  1264.                     YEAR    : out YEAR_NUMBER;
  1265.                     MONTH   : out MONTH_NUMBER;
  1266.                     DAY     : out DAY_NUMBER;
  1267.                     SECONDS : out DURATION);
  1268.  
  1269.    function TIME_OF(YEAR    : YEAR_NUMBER;
  1270.                     MONTH   : MONTH_NUMBER;
  1271.                     DAY     : DAY_NUMBER;
  1272.                     SECONDS : DURATION := 0.0) return TIME;
  1273.  
  1274.    TIME_ERROR : exception;   --   can be raised by TIME_OF
  1275.  
  1276.    function "+"  (LEFT : TIME;     RIGHT : DURATION) return TIME;
  1277.    function "+"  (LEFT : DURATION; RIGHT : TIME)     return TIME;
  1278.    function "-"  (LEFT : TIME;     RIGHT : DURATION) return TIME;
  1279.    function "-"  (LEFT : TIME;     RIGHT : TIME)     return DURATION;
  1280.  
  1281.    function "<"  (LEFT, RIGHT : TIME) return BOOLEAN;
  1282.    function "<=" (LEFT, RIGHT : TIME) return BOOLEAN;
  1283.    function ">"  (LEFT, RIGHT : TIME) return BOOLEAN;
  1284.    function ">=" (LEFT, RIGHT : TIME) return BOOLEAN;
  1285.  
  1286. private 
  1287.  
  1288.    type TIME is
  1289.        record 
  1290.           YEAR    :   YEAR_NUMBER;
  1291.           MONTH   :   MONTH_NUMBER;
  1292.           DAY     :   DAY_NUMBER;
  1293.           SECONDS :   DURATION;
  1294.        end record;
  1295.  
  1296. end CALENDAR;
  1297.  
  1298. package body CALENDAR is
  1299.  
  1300.   function CLOCK return TIME is
  1301.   begin
  1302.     pragma io_interface(PREDEF, CLOCK);
  1303.     null;
  1304.   end CLOCK;
  1305.  
  1306.   function YEAR   (DATE    : TIME) return YEAR_NUMBER is
  1307.   begin
  1308.     pragma io_interface(PREDEF, YEAR);
  1309.     null;
  1310.   end YEAR;
  1311.  
  1312.   function MONTH  (DATE    : TIME) return MONTH_NUMBER is
  1313.   begin
  1314.     pragma io_interface(PREDEF, MONTH);
  1315.     null;
  1316.   end MONTH;
  1317.  
  1318.   function DAY    (DATE    : TIME) return DAY_NUMBER is
  1319.   begin
  1320.     pragma io_interface(PREDEF, DAY);
  1321.     null;
  1322.   end DAY;
  1323.  
  1324.   function SECONDS(DATE    : TIME) return DURATION is
  1325.   begin
  1326.     pragma io_interface(PREDEF, SECONDS);
  1327.     null;
  1328.   end SECONDS;
  1329.  
  1330.   procedure SPLIT (DATE    : in  TIME;
  1331.                    YEAR    : out YEAR_NUMBER;
  1332.                    MONTH   : out MONTH_NUMBER;
  1333.                    DAY     : out DAY_NUMBER;
  1334.                    SECONDS : out DURATION) is
  1335.   begin
  1336.     pragma io_interface(PREDEF, SPLIT);
  1337.     null;
  1338.   end SPLIT;
  1339.  
  1340.   function TIME_OF(YEAR    : YEAR_NUMBER;
  1341.                    MONTH   : MONTH_NUMBER;
  1342.                    DAY     : DAY_NUMBER;
  1343.                    SECONDS : DURATION := 0.0) return TIME is
  1344.   begin
  1345.     pragma io_interface(PREDEF, TIME_OF);
  1346.     null;
  1347.   end TIME_OF;
  1348.  
  1349.   function "+" (LEFT : TIME;     RIGHT : DURATION) return TIME is
  1350.   begin
  1351.     pragma io_interface(PREDEF, ADD_TIME_DUR);
  1352.     null;
  1353.   end "+";
  1354.  
  1355.   function "+" (LEFT : DURATION; RIGHT : TIME)     return TIME is
  1356.   begin
  1357.     pragma io_interface(PREDEF, ADD_DUR_TIME);
  1358.     null;
  1359.   end "+";
  1360.  
  1361.   function "-" (LEFT : TIME;     RIGHT : DURATION) return TIME is
  1362.   begin
  1363.     pragma io_interface(PREDEF, SUB_TIME_DUR);
  1364.     null;
  1365.   end "-";
  1366.  
  1367.   function "-" (LEFT : TIME;     RIGHT : TIME)     return DURATION is
  1368.   begin
  1369.     pragma io_interface(PREDEF, SUB_TIME_TIME);
  1370.     null;
  1371.   end "-";
  1372.  
  1373.   function "<"  (LEFT, RIGHT : TIME) return BOOLEAN is
  1374.   begin
  1375.     pragma io_interface(PREDEF, LT_TIME);
  1376.     null;
  1377.   end "<";
  1378.  
  1379.   function "<=" (LEFT, RIGHT : TIME) return BOOLEAN is
  1380.   begin
  1381.     pragma io_interface(PREDEF, LE_TIME);
  1382.     null;
  1383.   end "<=";
  1384.  
  1385.   function ">"  (LEFT, RIGHT : TIME) return BOOLEAN is
  1386.   begin
  1387.     pragma io_interface(PREDEF, GT_TIME);
  1388.     null;
  1389.   end ">";
  1390.  
  1391.   function ">=" (LEFT, RIGHT : TIME) return BOOLEAN is
  1392.   begin
  1393.     pragma io_interface(PREDEF, GE_TIME);
  1394.     null;
  1395.   end ">=";
  1396.  
  1397. end CALENDAR;
  1398.  
  1399. generic
  1400.   type OBJECT is limited private;
  1401.   type NAME   is access OBJECT;
  1402. procedure UNCHECKED_DEALLOCATION(X : in out NAME);
  1403.  
  1404. generic
  1405.   type SOURCE is limited private;
  1406.   type TARGET is limited private;
  1407. function UNCHECKED_CONVERSION(S : SOURCE) return TARGET;
  1408.  
  1409. procedure UNCHECKED_DEALLOCATION(X : in out NAME) is
  1410. begin
  1411.   if x /= null then x := null; end if;
  1412. end UNCHECKED_DEALLOCATION;
  1413.  
  1414. function UNCHECKED_CONVERSION(S : SOURCE) return TARGET is
  1415. begin
  1416.   raise PROGRAM_ERROR;
  1417. end UNCHECKED_CONVERSION;
  1418.  
  1419.