{ Here's a piece of code I wrote last year which does what wasn't uploaded. It allows text files converted to obj format to be linked in and being accessed as 'normal' turbo pascal text files. The 'object' text files support reset, read, readln eof, eoln and close file commands. What you need to write in your program is a obj_find function which translates filenames into pointers or returns NIL to indicate an external file. Use Assign_text procedure instead. A sample of how to use it is supplied in the second program/unit. Only the two linked in files will be fetched from memory, any other name supplied will be fetched from disk as usual. The first unit can be the same for all projects, the second one is project depended, because one will be using different files. Question about this, ask them! } {---------------------------------------------------------} { Project : Object linked textfiles } { By : Ir.G.W. van der Vegt } {---------------------------------------------------------} { Datum .tijd Revisie } { 930914.2200 Creatie. } { 930915.2200 Support for Settextbuffer. Bufptr used } { again for addressing & pointer advancing } { adjusted. } {---------------------------------------------------------} { Usage : Convert textfile to obj with turbo's BINOBJ } { Add them to a unit as show in this sample } { Create a custom filename to func address } { converter as show in My_getp. This function } { should return NIL if the requested file isn't } { linked in. Use Obj_assign to get assign the } { filevar. Reset, Read, Readln & Close are } { allowed. If a file isn't found it's searched on} { disk. Pathnames are stripped when searching for} { linked-in files. } {---------------------------------------------------------} Unit Obj_01; INTERFACE Type Obj_find = Function(fn : String) : Pointer; Var Obj_getp : Obj_find; Procedure Obj_Assign(VAR tpl : Text;fn : String;decoder : Obj_find); IMPLEMENTATION Uses Dos; {---------------------------------------------------------} {----To simplyfy addressing inside the buffer, the segment} { of the pointer to the text in memmory is incremented } { instead of using the old Longint typecast trick } {---------------------------------------------------------} Const para = 16; Type obj_user = Record base, curr : Pointer; dummy : ARRAY[1..8] OF Byte; End; {---------------------------------------------------------} {----Ignore handler } {---------------------------------------------------------} {$F+} Function Obj_ignore(VAR f : textrec) : Integer; Begin Obj_ignore:=0; End; {of Obj_ignore} {$F-} {---------------------------------------------------------} {----Inoutfunc handler } {---------------------------------------------------------} {$F+} FUNCTION Obj_input(VAR f : textrec) : INTEGER; VAR p : Pointer; BEGIN WITH Textrec(f) DO BEGIN {----Advance Pointer obj_size paragraphs} p:=Ptr(Seg(obj_user(userdata).curr^)+(bufsize DIV para), Ofs(obj_user(userdata).curr^)); obj_user(userdata).curr:=p; Move(obj_user(userdata).curr^,bufptr^,(bufsize DIV para)*para); bufpos :=0; bufend :=(bufsize DIV para)*para; END; obj_input:=0; END; {of obj_input} {$F-} {---------------------------------------------------------} {----Open func handler } {---------------------------------------------------------} {$F+} FUNCTION obj_open(VAR f : textrec) : INTEGER; BEGIN WITH Textrec(f) DO BEGIN obj_user(userdata).curr:=obj_user(userdata).base; Move(obj_user(userdata).base^,bufptr^,(bufsize DIV para)*para); bufpos :=0; bufend :=(bufsize DIV para)*para; END; obj_open:=0; END; {of obj_open} {$F-} {---------------------------------------------------------} {----Assign a link-in file or disk file } {---------------------------------------------------------} Procedure Obj_Assign(VAR tpl : Text;fn : String;decoder : Obj_find); VAR tplp : POINTER; i : Byte; BEGIN If (Addr(decoder)=NIL) THEN tplp:=NIL ELSE tplp:=Decoder(fn); IF (tplp<>NIL) THEN WITH Textrec(tpl) DO BEGIN handle :=$ffff; mode :=fmclosed; {fminput} bufsize :=SIZEOF(textbuf); bufpos :=0; bufptr :=@buffer; obj_user(userdata).base:=tplp; obj_user(userdata).curr:=tplp; openfunc :=@obj_open; inoutfunc:=@obj_input; flushfunc:=@obj_ignore; closefunc:=@obj_ignore; i:=0; While (i