[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]

    {
    > I'm trying to read a record from a file of byte. One of the variables in
    > read is the record is a 4 byte unsigned integer (DWORD). Since the
    > filetype doesn't allow me to read a dword at once I have to construct it
    > myself.
    > Could somebody please tell me how to construct my dword?

    Type
      DWORD = record
        case byte of
          0 : (Full : longint);
          1 : (HiWord, LoWord : word);
          2 : (Hw_HiByte, Hw_LoByte, Lw_HiByte, Lw_LoByte : byte);
          3 : (FourBytes : array[0..3] of byte);
        end;

    Here is an example:
    }

    {$A+,B-,D+,E-,F+,G+,I+,L+,N+,O+,P+,Q+,R+,S+,T+,V-,X+,Y+}
    {$M 1024,0,655360}
    uses
      crt;

    Type
      DWord = record
        case byte of
          0 : (Full : longint);
          1 : (HiWord, LoWord : word);
          2 : (Hw_HiByte, Hw_LoByte, Lw_HiByte, Lw_LoByte : byte);
          3 : (FourBytes : array[0..3] of byte);
          4 : (TwoWords : array[0..1] of word);
        end;

    var
            F       : file of longint;
      B       : file of byte;
      MyDword : Dword;
      MyLong  : longint;
      MyWord  : word;
      MyByte,
      Index   : byte;

    begin
            clrscr;
            assign(F, 'MyLong.dat');
      rewrite(F);
      MyLong := $12345678;
      write(F, MyLong);
      MyLong := 0;
      Close(F);
      assign(B, 'MyLong.dat');
      reset(B);
      Seek(B, 0);  { Go back to first record in file}
      for Index := 0 to 3 do
                    read(B, MyDword.Fourbytes[Index]);
      writeln($12345678);
            writeln(MyDword.Full);
      writeln;
      writeln(MyDword.HiWord);
      writeln(MyDword.LoWord);
            writeln;
      writeln(MyDword.Hw_HiByte);
      writeln(MyDword.Hw_LoByte);
      writeln(MyDword.Lw_HiByte);
      writeln(MyDword.Lw_LoByte);
            writeln;
      for Index := 0 to 3 do
              writeln(MyDword.FourBytes[Index]);
      writeln;
      for Index := 0 to 1 do
              writeln(MyDword.TwoWords[Index]);

      Close(B);
      reset(F);
      while keypressed do readkey;
            readkey;
      Seek(F, 0);  { Go back to first record in file}
            read(F, MyDword.Full);
      ClrScr;
      writeln($12345678);
            writeln(MyDword.Full);
      writeln;
      writeln(MyDword.HiWord);
      writeln(MyDword.LoWord);
            writeln;
      writeln(MyDword.Hw_HiByte);
      writeln(MyDword.Hw_LoByte);
      writeln(MyDword.Lw_HiByte);
      writeln(MyDword.Lw_LoByte);
            writeln;
      for Index := 0 to 3 do
              writeln(MyDword.FourBytes[Index]);
      writeln;
      for Index := 0 to 1 do
              writeln(MyDword.TwoWords[Index]);
      close(F);
      while keypressed do readkey;
            readkey;
    end.

    {
    Compiled and Tested with BP 7.x

    It will, write a file of Longint, write 12345678 Hex to it, read it as a
    file of byte, display most representation of it, then close it and
    reopen it as a file of LongInt again read one longint and again display
    the representations of it.

    PS. There is a pause after the first display (Read as a file of bytes),
    any key presents the second display (Read as a file of bytes), and
    another pause to allow you to see that it does display the same thing.
    Any key then terminates the program.
    }

[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]