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

    {
    GUY MCLOUGHLIN

    >How would I load a file straight into memory, and access it directly
    >using pointers?

    Load file data onto the HEAP memory-pool.
    }

    program LoadFileOnHEAP;

    type
      { Array type used to define the data buffer. }
      arby_60K   = array[1..61440] of byte;
      { Pointer type used to allocate the data buffer on the HEAP memory pool. }
      po_60KBuff = ^arby_60K;

    const
      { Buffer size in bytes constant. }
      co_BuffSize = sizeof(arby_60K);

    { Check for IO errors, close data file if necessary. }
    procedure CheckForErrors(var fi_Temp : file; bo_CloseFile : boolean);
    var
      by_Temp : byte;
    begin
      by_Temp := ioresult;
      if (by_Temp <> 0) then
      begin
        writeln('FILE ERROR = ', by_Temp);
        if bo_CloseFile then
          close(fi_Temp);
        halt(1)
      end
    end;

    var
      wo_BuffIndex,
      wo_BytesRead : word;
      po_Buffer    : po_60KBuff;
      fi_Temp      : file;

    BEGIN
      assign(fi_Temp, 'EE.PAS');
      {$I-}
      reset(fi_Temp, 1);
      {$I+}
      CheckForErrors(fi_Temp, false);

      { Check if there is enough free memory on the HEAP. }
      { If there is, then allocate buffer on the HEAP. }
      if (maxavail > co_BuffSize) then
        new(po_Buffer)
      else
      begin
        close(fi_Temp);
        writeln('ERROR: Insufficient HEAP memory!')
      end;

      { Load file-data into buffer. }
      blockread(fi_Temp, po_Buffer^, co_BuffSize, wo_BytesRead);
      CheckForErrors(fi_Temp, true);

      { Display each byte that was read-in. }
      for wo_BuffIndex := 1 to wo_BytesRead do
        write(chr(po_Buffer^[wo_BuffIndex]));

      close(fi_Temp)
    END.

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