Unit MiscFunc; { MiscFunc version 1.0 Scott D. Ramsay } { This is my misc. Function Unit. Some of the Functions have } { nothing to do With games design but, my Units use it so ... } { MiscFunc.pas is free. Go crazy. } { I've been writing comments to these Units all night. Since you } { have the source to this, I'll let you figure out what each one } { does. } Interface Function strint(s:String):LongInt; Function intstr(l:LongInt):String; Function ups(s:String):String; Function st(h:LongInt):String; Function Compare(s1,s2:String):Boolean; Function dtcmp(Var s1,s2;size:Word):Boolean; Function lz(i,w:LongInt):String; Function vl(h:String):LongInt; Function spaces(h:Integer):String; Function repstr(h:Integer;ch:Char):String; Function anything(s:String):Boolean; Function exist(f:String):Boolean; Function errmsg(n:Integer):String; Function turboerror(errorcode:Integer) : String; Procedure funpad(Var s:String); Procedure unpad(Var s:String); Procedure munpad(Var s:String;b:Byte); Function fpad(s:String;h:Integer):String; Procedure pad(Var s:String;h:Integer); Procedure fix(Var s:String;h:String); Procedure fixh(Var s:String); Function range(x,y,x1,y1,x2,y2:Integer) : Boolean; Function between(x,x1,x2:Integer):Boolean; Implementation Function range(x,y,x1,y1,x2,y2:Integer) : Boolean; { returns True if (x,y) is in the rectangular region (x1,y1,x2,y2) } begin range := ((x>=x1) and (x<=x2) and (y>=y1) and (y<=y2)); end; Procedure fix(Var s:String;h:String); begin if pos('.',s)=0 then s := s+h; end; Procedure fixh(Var s:String); Var d : Integer; begin For d := 1 to length(s) do if s[d]<#32 then s[d] := ' '; For d := length(s)+1 to 255 do s[d] := ' '; end; Function strint(s:String):LongInt; Var l : LongInt; begin move(s[1],l,sizeof(l)); strint := l; end; Function intstr(l:LongInt):String; Var s : String; begin move(l,s[1],sizeof(l)); s[0] := #4; intstr := s; end; Function ups(s:String):String; Var d : Integer; begin For d := 1 to length(s) do s[d] := upCase(s[d]); ups := s; end; Function st(h:LongInt):String; Var s : String; begin str(h,s); st := s; end; Function Compare(s1,s2:String):Boolean; Var d : Byte; e : Boolean; begin e := True; For d := 1 to length(s1) do if upCase(s1[d])<>upCase(s2[d]) then e := False; Compare := e; end; Function dtcmp(Var s1,s2;size:Word):Boolean; Var d : Word; e : Boolean; begin e := True; d := size; While (d>0) and e do begin dec(d); e := (mem[seg(s1):ofs(s1)+d]=mem[seg(s2):ofs(s2)+d]); end; dtcmp := e; end; Function lz(i,w:LongInt):String; Var d : LongInt; s : String; begin str(i,s); For d := length(s) to w-1 do s := concat('0',s); lz := s; end; Function vl(h:String):LongInt; Var d : LongInt; e : Integer; begin val(h,d,e); vl := d; end; Function spaces(h:Integer):String; Var s : String; begin s := ''; While h>0 do begin dec(h); s := concat(s,' '); end; spaces := s; end; Function repstr(h:Integer;ch:Char):String; Var s : String; begin s := ''; While h>0 do begin dec(h); s := s+ch; end; repstr := s; end; Function anything(s:String):Boolean; Var d : Integer; h : Boolean; begin if length(s)=0 then begin anything := False; Exit; end; h := False; For d := 1 to length(s) do if s[d]>#32 then h := True; anything := h; end; Function exist(f:String):Boolean; Var fil : File; begin if f='' then begin exist := False; Exit; end; assign(fil,f); {$i- } reset(fil); close(fil); {$i+ } exist := (ioresult=0); end; Function errmsg(n:Integer):String; begin Case n of -1 : errmsg := ''; -2 : errmsg := 'Error reading data File'; -3 : errmsg := ''; -4 : errmsg := 'equal current data File name'; 150 : errmsg := 'Disk is Write protected'; 152 : errmsg := 'Drive is not ready'; 156 : errmsg := 'Disk seek error'; 158 : errmsg := 'Sector not found'; 159 : errmsg := 'Out of Paper'; 160 : errmsg := 'Error writing to Printer'; 1000 : errmsg := 'Record too large'; 1001 : errmsg := 'Record too small'; 1002 : errmsg := 'Key too large'; 1003 : errmsg := 'Record size mismatch'; 1004 : errmsg := 'Key size mismatch'; 1005 : errmsg := 'Memory overflow'; else errmsg := 'Error result #'+st(n); end; end; Function turboerror(errorcode:Integer) : String; begin Case errorcode of 1: turboerror := 'Invalid Dos Function code'; 2: turboerror := 'File not found'; 3: turboerror := 'Path not found'; 4: turboerror := 'too many open Files'; 5: turboerror := 'File access denied'; 6: turboerror := 'Invalid File handle'; 8: turboerror := 'not enough memory'; 12: turboerror := 'Invalid File access code'; 15: turboerror := 'Invalid drive number'; 16: turboerror := 'Cannot remove current directory'; 17: turboerror := 'Cannot rename across drives'; 100: turboerror := 'Disk read error'; 101: turboerror := 'Disk Write error'; 102: turboerror := 'File not assigned'; 103: turboerror := 'File not open'; 104: turboerror := 'File not open For input'; 105: turboerror := 'File not open For output'; 106: turboerror := 'Invalid numeric Format'; 200: turboerror := 'division by zero'; 201: turboerror := 'Range check error'; 202: turboerror := 'Stack overflow error'; 203: turboerror := 'Heap overflow error'; 204: turboerror := 'Invalid Pointer operation'; else turboerror := errmsg(errorcode); end; end; Procedure funpad(Var s:String); begin While s[1]=' ' do delete(s,1,1); end; Procedure unpad(Var s:String); begin While (length(s)>0) and (s[length(s)]<=' ') do delete(s,length(s),1); end; Procedure munpad(Var s:String;b:Byte); begin s[0] := Char(b); While (length(s)>0) and (s[length(s)]<=' ') do delete(s,length(s),1); end; Function fpad(s:String;h:Integer):String; begin While length(s)=x1) and (x<=x2)); end; end.