home *** CD-ROM | disk | FTP | other *** search
- Var
- S : String;
-
- Function Wrap(Var st: String; maxlen: Byte; justify: Boolean): String;
- { returns a String of no more than maxlen Characters With the last }
- { Character being the last space beFore maxlen. On return st now has }
- { the remaining Characters left after the wrapping. }
- Const
- space = #32;
- Var
- len : Byte Absolute st;
- x,
- oldlen,
- newlen : Byte;
-
- Function JustifiedStr(s: String; max: Byte): String;
-
- { Justifies String s left and right to length max. if there is more }
- { than one trailing space, only the right most space is deleted. The}
- { remaining spaces are considered "hard". #255 is used as the Char }
- { used For padding purposes. This will enable easy removal in any }
- { editor routine. }
-
- Const
- softSpace = #255;
- Var
- jstr : String;
- len : Byte Absolute jstr;
- begin
- jstr := s;
- While (jstr[1] = space) and (len > 0) do { delete all leading spaces }
- delete(jstr,1,1);
- if jstr[len] = space then
- dec(len); { Get rid of trailing space }
- if not ((len = max) or (len = 0)) then begin
- x := pos('.',jstr); { Attempt to start padding at sentence break }
- if (x = 0) or (x =len) then { no period or period is at length }
- x := 1; { so start at beginning }
- if pos(space,jstr) <> 0 then Repeat { ensure at least 1 space }
- if jstr[x] = space then { so add a soft space }
- insert(softSpace,jstr,x+1);
- x := succ(x mod len); { if eoln is reached return and do it again }
- Until len = max; { Until the wanted String length is achieved }
- end; { if not ... }
- JustifiedStr := jstr;
- end; { JustifiedStr }
-
-
- begin { Wrap }
- if len <= maxlen then begin { no wrapping required }
- Wrap := st;
- len := 0;
- end else begin
- oldlen := len; { save the length of the original String }
- len := succ(maxlen); { set length to maximum }
- Repeat { find last space in st beFore or at maxlen }
- dec(len);
- Until (st[len] = space) or (len = 0);
- if len = 0 then { no spaces in st, so chop at maxlen }
- len := maxlen;
- if justify then
- Wrap := JustifiedStr(st,maxlen)
- else
- Wrap := st;
- newlen := len; { save the length of the newly wrapped String }
- len := oldlen; { and restore it to original length beFore }
- Delete(st,1,newlen); { getting rid of the wrapped portion }
- end;
- end; { Wrap }
-
- begin
- S :=
- 'By Far the easiest way to manage a database is to create an '+
- 'index File. An index File can take many Forms and its size will depend '+
- 'upon how many Records you want in the db. The routines that follow '+
- 'assume no more than 32760 Records.';
-
- While length(S) <> 0 do
- Writeln(Wrap(S,60,True));
- end.
-
- Whilst this is tested and known to work on the example String, no further
- testing than that has been done. I suggest you test it a great deal more
- beFore being satisfied that it is OK.
-