home *** CD-ROM | disk | FTP | other *** search
- UNIT WEString;
- { -- This is the Low Level Strings unit of WWIVEdit 2.2
- -- Last Updated : 8/14/91
- -- Written By:
- -- Adam Caldwell
- --
- -- This code is Public Domain
- --
- -- Purpose : Provide Low level string manipulation routines
- --
- -- Know Errors: None
- --
- -- Planned Enhancements : Improvement of Go_Left and Go_Right
- --
- -- }
- {$R-,V-,S-,B-,E-,N-} { These Optomize things as much as possible }
-
- INTERFACE
-
- FUNCTION cstr(i:longint):string; { Converts a number to a string }
- FUNCTION ZExpand(i:LongInt; { Converts an integer into a string and }
- len : byte):string;{ and adds enough zeros at the beginning }
- { to make is LEN characters long }
- FUNCTION Dup(c:char; n:integer) { Returns a string of length "n" full of }
- : string; { character "c" }
- FUNCTION value(I : string) : integer;
- FUNCTION TransformString(s:string):string;
- PROCEDURE StripEndString(VAR s:string);
- FUNCTION GoLeft(s:string; i:byte):byte;
- FUNCTION GoRight(s:string; i:byte):byte;
- FUNCTION LengthW(s:string):integer;
- FUNCTION LeftS(s:string; n:integer):string; {Returns the Left N characters }
- FUNCTION RightS(s:string; n:integer):string;{Returns the Right N characters }
- FUNCTION CmpLeft(source, Target:string):boolean;
- FUNCTION CmpLeftI(source,target:string):boolean;
-
- IMPLEMENTATION
-
- FUNCTION CmpLeft(source,target:string):boolean;
- BEGIN
- CmpLeft:=LeftS(source,Length(target))=target;
- END;
-
- FUNCTION CmpLeftI(source,target:string):boolean;
- BEGIN
- CmpLeftI:=CmpLeft(TransformString(source),TransformString(target));
- END;
-
- FUNCTION LeftS(s:string; n:integer):string;
- BEGIN
- LeftS:=copy(s,1,n);
- END;
-
- FUNCTION RightS(s:string; n:integer):string;
- BEGIN
- RightS:=copy(s,length(s)-n+1,n);
- END;
-
- FUNCTION value(I : string) : integer;
- VAR n,n1 : integer;
- BEGIN
- val(i,n,n1);
- IF n1 <> 0 THEN BEGIN
- i := copy(i,1,n1-1);
- val(i,n,n1)
- END;
- value := n;
- END;
-
-
- FUNCTION TransformString(s:string):string;
- VAR x:integer;
- BEGIN
- StripEndString(s);
- FOR x:=1 TO Length(s) DO
- s[x]:=upcase(s[x]);
- TransformString:=s;
- END;
-
- PROCEDURE StripEndString(VAR s:string);
- { Strips off the end of a string }
- BEGIN
- WHILE (length(s)>0) AND (s[length(s)]=' ') DO
- delete(s,length(s),1);
- END;
-
- FUNCTION cstr(i : longint) : string;
- VAR c : string;
- BEGIN
- str(i,c);
- cstr := c;
- END;
-
-
- FUNCTION ZExpand(i:LongInt; len:byte):string;
- VAR
- negative:boolean;
- result:string;
- x:byte;
-
- BEGIN
- Negative:=i<0;
- IF negative then i:=-i;
- result:=cstr(i);
- FOR x:=length(result) TO len-1 DO
- result:='0'+result;
- IF negative THEN result[1]:='-';
- ZExpand:=Result
- END;
-
- FUNCTION Dup(c:char; n:integer):string;
- VAR
- s:string;
- BEGIN
- IF n IN [1..255] THEN
- BEGIN
- FillChar(s[1],n,c);
- s[0]:=chr(n);
- Dup:=s;
- END ELSE dup:='';
- END;
-
- FUNCTION GoLeft(s:string; i:byte):byte;
- { A simple word left function... needs improvement }
- BEGIN
- IF i>length(s) THEN i:=length(s);
- IF i>2 THEN
- REPEAT
- dec(i);
- UNTIL (i=1) OR (s[i-1] = ' ')
- ELSE i:=1;
- GoLeft:=i;
- END;
-
-
-
- FUNCTION GoRight(s:string; i:byte):byte;
- { A very simple Word Right function... Could be improved }
- BEGIN
- IF i<=length(s) THEN
- REPEAT
- inc(i)
- UNTIL (i=length(s)) OR (s[i] =' ');
- GoRight:=i+1
- END;
-
- FUNCTION LengthW(s:string):integer;
- VAR l,i:integer;
- BEGIN
- l:=0;
- FOR i:=1 TO Length(s) DO
- BEGIN
- l:=l+1;
- IF s[i]=^C THEN l:=l-2
- ELSE IF s[i]=^H THEN l:=l-2
- END;
- Lengthw:=l;
- END;
-
-
- END.