Contributor: HOLGER DAEHRE            

{
> In a program I am writing I need to create a very large array to store
> infomation in I need an array[1..4096] of string and turbo pascal will

Try my unit. My unit uses a TEMSStream to store the information.
Look at the demo how to store your 4096 strings.
}

(* Unit LongArray - large arrays in EMS
   PUBLIC DOMAIN  1993 by Holger Daehre 2:248/317.88
   Running: TP 6.0 or above. *)

Unit LongArr;

Interface

Uses  Objects;

Var
   Lo_element,ElementSize:LongInt;

(* Create_Array creates  Array[Low..High] of Size *)
Procedure Create_Array(Var ps:pStream;Low,High,Size:LongInt);

(* Read_Array loads one element from INDEX into Buf *)
Procedure Read_Array(Var ps:pStream;Index:LongInt;Var Buf);

(* Write_Array stores the information of Buf in Index *)
Procedure Write_Array(Var ps:pStream;Index:LongInt;Var Buf);

(* Dispose_Array releases the allocated EMS memory *)
Procedure Dispose_Array(Var ps:pStream);

Implementation

Procedure Create_Array(Var ps:pStream;Low,High,Size:LongInt);
Var
   Elements,ArraySize:LongInt;
Begin
   Lo_element:=Low;
   Elements:=High-Low+1;
   ArraySize:=Elements * Size;
   ElementSize:=Size;
   ps := New(pEMSStream, Init(ArraySize,ArraySize));
   If ps^.status <> stOk Then
    Begin
      Dispose(ps, Done);
      ps := NIL;
    End;
End;

Procedure Read_Array(Var ps:pStream;Index:LongInt;Var Buf);
Begin
 If ps<>nil Then
 Begin
  ps^.Seek((Index-Lo_element)*ElementSize);
  ps^.Read(Buf,ElementSize);
 End;
End;

Procedure Write_Array(Var ps:pStream;Index:LongInt;Var Buf);
Begin
 If ps<>nil Then
 Begin
  ps^.Seek((Index-Lo_element)*ElementSize);
  ps^.Write(Buf,ElementSize);
 End;
End;

procedure Dispose_Array(Var ps:pStream);
Begin
 Dispose(ps,Done);
 ps:=NIL;
End;

End.




Program LongArrayDemo;
Uses Objects,LongArr;
Var MyArr:PStream;
    S:String;
    I:Word;
Begin
  Create_Array(MyArr,0,4096,SizeOf(String));
  If MyArr=nil Then
  Begin
   WriteLn('Couldn''t create array in EMS');
   Halt;
  End;
  S:='This is a TEST !';
  For I:=0 To 4096 Do  Write_Array(MyArr,I,S);
  s:='';
  Randomize;
  Read_Array(MyArr,Random(4096),S);
  WriteLn(S);
  Dispose_Array(MyArr);
End.