VAX Ada sequential IO and Direct IO - (nf) 
Author Message
 VAX Ada sequential IO and Direct IO - (nf)

If you have problems with Ada Sequential IO and Direct IO
you may use our validated Ada Compiler version 1.6A for VAX/VMS.

As the following example shows it has no problems with these Ada features.

For obvious reasons a use_error would be raised if you would try to create
a "real" direct file of type dir_io.file_type.
But if you use an index-sequential file to implement this direct file then
no problem arises. You can get an index-sequential file when using a form
parameter in the create operation.

We also played with Tony Alden's "even if I restrict the range of 'a' ..."
remark for the Direct IO case (cf. cdir_f).

My address:

   Dr. Peter Dencker
   SYSTEAM KG Dr. Winterstein
   Am Rueppurer Schloss 7
   D 7500 Karlsruhe 51
   West Germany


Ada Example:
------------

WITH text_io; USE  text_io;
WITH sequential_io;
WITH direct_io;

PROCEDURE unconstr_io IS

   TYPE foo(a : integer) IS
      RECORD
         f1 : string (1..a);
      END RECORD;

   item3 : foo (3) := (a => 3, f1 => "abc");
   item4 : foo (4) := (a => 4, f1 => "1234");

   SUBTYPE int IS integer RANGE 1 .. 150;

   TYPE cfoo(a : int) IS  -- discriminant with restricted subtype
      RECORD
         f1 : string (1..a);
      END RECORD;

   citem3 : cfoo (3) := (a => 3, f1 => "abc");
   citem4 : cfoo (4) := (a => 4, f1 => "1234");

   PACKAGE seq_io IS NEW sequential_io (foo);
   seq_f : seq_io.file_type;

   PACKAGE dir_io IS NEW direct_io (foo);
   dir_f : dir_io.file_type;

   PACKAGE cdir_io IS NEW direct_io (cfoo);
   cdir_f : cdir_io.file_type;
BEGIN
-----------------------------------------------------------------
   put_line ("Sequential_io test:");
   seq_io.create (seq_f, name => "unconstr_io.seq");
   seq_io.write (seq_f, item3);
   seq_io.write (seq_f, item4);
   seq_io.close (seq_f);

   item3 := (3, "   ");
   item4 := (4, "    ");

   seq_io.open (seq_f, seq_io.in_file, "unconstr_io.seq");
   seq_io.read (seq_f, item3);
   seq_io.read (seq_f, item4);
   seq_io.close (seq_f);

   put_line (integer'image(item3.a) & ", " & item3.f1);
   put_line (integer'image(item4.a) & ", " & item4.f1);
-----------------------------------------------------------------
   put_line ("Direct_io test:");
   dir_io.create
      (dir_f, name => "unconstr_io.drc",
              form => "ORGANIZATION => INDEXED, RECORD_FORMAT => VARIABLE");
   FOR i IN 1 .. 10
   LOOP dir_io.write (dir_f, item4);
        dir_io.write (dir_f, item3);
   END LOOP;
   put_line ("current size of " & dir_io.name (dir_f) & " is "
             & dir_io.count'image (dir_io.size (dir_f)));
   dir_io.close (dir_f);

   item3 := (3, "   ");
   item4 := (4, "    ");

   dir_io.open (dir_f, dir_io.in_file, "unconstr_io.drc");
   put_line ("current index is " & dir_io.count'image (dir_io.index(dir_f)));
   dir_io.read (dir_f, item4);
   put_line ("current index is " & dir_io.count'image (dir_io.index(dir_f)));
   put_line (integer'image(item4.a) & ", " & item4.f1);
   dir_io.read (dir_f, item3);
   put_line ("current index is " & dir_io.count'image (dir_io.index(dir_f)));
   put_line (integer'image(item3.a) & ", " & item3.f1);

   item3 := (3, "   ");
   item4 := (4, "    ");

   dir_io.read (dir_f, item3, from => 18);
   put_line ("current index is " & dir_io.count'image (dir_io.index(dir_f)));
   put_line (integer'image(item3.a) & ", " & item3.f1);
   dir_io.read (dir_f, item4, from => 15);
   put_line ("current index is " & dir_io.count'image (dir_io.index(dir_f)));
   put_line (integer'image(item4.a) & ", " & item4.f1);
   dir_io.close (dir_f);
-----------------------------------------------------------------
   put_line ("Restricted direct_io test:");
   cdir_io.create (cdir_f, name => "unconstr_io.cdr");
   FOR i IN 1 .. 10
   LOOP cdir_io.write (cdir_f, citem4);
        cdir_io.write (cdir_f, citem3);
   END LOOP;
   put_line ("current size of " & cdir_io.name (cdir_f) & " is "
             & cdir_io.count'image (cdir_io.size (cdir_f)));
   cdir_io.close (cdir_f);

   citem3 := (3, "   ");
   citem4 := (4, "    ");

   cdir_io.open (cdir_f, cdir_io.in_file, "unconstr_io.cdr");
   put_line ("current index is " & cdir_io.count'image (cdir_io.index(cdir_f)));
   cdir_io.read (cdir_f, citem4);
   put_line ("current index is " & cdir_io.count'image (cdir_io.index(cdir_f)));
   put_line (int'image(citem4.a) & ", " & citem4.f1);
   cdir_io.read (cdir_f, citem3);
   put_line ("current index is " & cdir_io.count'image (cdir_io.index(cdir_f)));
   put_line (int'image(citem3.a) & ", " & citem3.f1);

   citem3 := (3, "   ");
   citem4 := (4, "    ");

   cdir_io.read (cdir_f, citem3, from => 18);
   put_line ("current index is " & cdir_io.count'image (cdir_io.index(cdir_f)));
   put_line (int'image(citem3.a) & ", " & citem3.f1);
   cdir_io.read (cdir_f, citem4, from => 15);
   put_line ("current index is " & cdir_io.count'image (cdir_io.index(cdir_f)));
   put_line (int'image(citem4.a) & ", " & citem4.f1);
   cdir_io.close (cdir_f);
END;

Compilation Log:
----------------

KARLSRUHE ADA SYSTEM  -  VAX/VMS version by    S Y S T E A M
          Installation Date:  2-MAR-1987
compiling  BIG0:[PD.ADATEST.SRC]UNCONSTR_IO.ADA;14
in library BIG0:[PD.ADATEST.ADALIB]
KARLSRUHE ADA SYSTEM  -  COMPILER              VERSION  1.6A
KARLSRUHE ADA COMPILER - SYNTAX
KARLSRUHE ADA COMPILER - LIBREAD
KARLSRUHE ADA COMPILER - SEMANTIC
KARLSRUHE ADA COMPILER - EXPAND
KARLSRUHE ADA COMPILER - TRANSFORM
KARLSRUHE ADA COMPILER - OPTIMIZE
KARLSRUHE ADA COMPILER - CODEGEN
KARLSRUHE ADA COMPILER - LIBWRITE
KARLSRUHE ADA COMPILER - LISTING
PROCEDURE  UNCONSTR_IO,   Library Index   46
*** No Errors during Compilation ***
CPU Time used :    30.6  Seconds

Execution Log:
--------------

Sequential_io test:
 3, abc
 4, 1234
Direct_io test:
current size of BIG0:[PD.ADATEST]UNCONSTR_IO.DRC;9 is  20
current index is  1
current index is  2
 4, 1234
current index is  3
 3, abc
current index is  19
 3, abc
current index is  16
 4, 1234
Restricted direct_io test:
current size of BIG0:[PD.ADATEST]UNCONSTR_IO.CDR;2 is  20
current index is  1
current index is  2
 4, 1234
current index is  3
 3, abc
current index is  19
 3, abc
current index is  16
 4, 1234



Thu, 17 Sep 1992 06:15:00 GMT  
 
 [ 1 post ] 

 Relevant Pages 

1. VAX Ada sequential IO and Direct IO

2. VAX Ada sequential IO and Direct IO

3. Not DOS interrupts, I want direct IO (memory mapped IO)

4. sequential io and variant records

5. sequential io with multiple types

6. g77/F77 Unformatted Sequential IO Question

7. mixing IO#read and IO#syswrite

8. Perl IO to Ruby IO help needed

9. IMPORT IO, FROM IO IMPORT ?

10. IMPORT IO, FROM IO IMPORT ?

11. IMPORT IO, FROM IO IMPORT ?

12. BUG?: HP-UX 10.20 and IO#gets followed by IO#puts

 

 
Powered by phpBB® Forum Software