These files contain all known fixes as of 11/29/93. As prepared by CHUCK TODD 70531.1475 This zip contains the following files: FCTL.ASM ; runtime FILE access Routines. TCTL.ASM ; runtime TEXT access routines. Os2F01.txt ; this file. OS216.pas ; Sample Unit to access OS2 16bit dll calls. You will need then "c'T" patch available from CIS:GERNET LIB 7 L11_1.zip. You will also need then BP 7.0 system (with TASM). Optionally you can download from CIS:OS2DF1 LIB1 PRCP.ZIP (411k) this is an .INF file that contains a reference for the OS2 1.3 compatible 16bit calls. Also you will want download CIS:OS2DF1 LIB 7 IMPLIS.zip (44k) this is a program to generate a listing of the INDEXes for the DOSCALLS.LIB file. Using the DOSCALLS.LIB, you cannot import the functions By NAME, only by INDEX. These are a patch to the BORLAND PASCAL 7.0 Runtime, These patches are to be installed ontop of the patches created by 'c'T' magazine. 1: Replace these FCTL,TCTL files with the ones in the 'c'T' patch. 2: Then install the fixes to the System.Pas, Dos.pas. 3: run cd os2rtl, run MAKE -B -fmakefile { this will recreate the OS2.TPL 4: copy the OS2.TPL file to you \bp\bin directory. 5: Recompile the DOS.pas and all Pascal files. Both of these ASM files have been modifed to allow FILEREC,TEXTREC variables to be on the HEAP. Also, I have change the DEFAULT value of FILEMODE to OPEN_ACCESS_DENYREADWRITE | READWRITE. {$0012} it was OPEN_ACCESS_DENYNONE | READONLY. {$0040} The problem with opening a read only file resulted because the FILE open procedures always specified READWRITE access during the attempt to open the file. This resulted in either a 12 invalid mode or a TRAP 'D' error. THIS is a list of the changes to SYSTEM.PAS. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FileMode : Word = $0012;{ OPEN_SHARE_DENYREADWRITE, OPEN_ACCESS_READWRITE} These Changes are to DOS.PAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% After Implementation directive. OS2DateTime = Record Hours, Minutes, Seconds, Hundredths, Day, Month : Byte; Year : Word; >>>>>> TimeZone : Integer; { Was Short Int} WeekDay : Byte; End; **************************************** Procedure FindFirst(Path : PathStr;Attr : Word;Var S : SearchRec); Var FF : OS2FileFindBuf; N : String; Count : Word; Type PWord = ^Word; Begin N := Path + #0; Count := 1; PWord(@S)^ := $FFFF; { HDIR_CREATE } DosError := DosFindFirst(@N[1],PWord(@S)^,Attr,FF,SizeOf(FF),Count,0); If DosError = 0 then Begin S.Attr := FF.AttrFile; S.Time := (LongInt(FF.fDateLastWrite) Shl 16) + FF.fTimeLastWrite; >>>> S.Size := FF.cbFile; Move(FF.cchName,S.Name,SizeOf(S.Name)) End; End; Procedure FindNext(Var S : SearchRec); Var FF : OS2FileFindBuf; Count : Word; Type PWord = ^Word; Begin Count := 1; DosError := DosFindNext(PWord(@S)^,FF,SizeOf(FF),Count); If DosError = 0 then Begin S.Attr := FF.AttrFile; S.Time := (LongInt(FF.fDateLastWrite) Shl 16) + FF.fTimeLastWrite; >>>> S.Size := FF.cbFile; Move(FF.cchName,S.Name,SizeOf(S.Name)) End else DosFindClose(PWord(@S)^); End; ******************* Procedure Exec(Path : PathStr;ComLine : ComStr); Var b : Array[0..255] of Char; >> c : string; Begin >> if (length(comline)>0)and(comline[1] <> ' ') then >> c := path + #0 +' '+comline+#0+#0 >> else c := path + #0+comline +#0+#0; { Path := Path + #0; ComLine := ComLine + #0#0; DosError := DosExecPgm(b,256,ExecFlags,@ComLine[1],Ptr(EnvironmentSeg,0),ExecResult,@Path[1]); } >> DosError := DosExecPgm(b,256,ExecFlags,@c[1],Ptr(EnvironmentSeg,0),ExecResult,@c[1]); End;