home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / ZINDENT5.LBR / STRING.IQC / STRING.INC
Text File  |  2000-06-30  |  11KB  |  503 lines

  1.  
  2. (******************************************************************)
  3. (*  the   STRING.INC   Library of common string  PROCEDURES       *)
  4. (******************************************************************)
  5.  
  6. (*  v. 0930am, sat, 20.Sep.86, Glen Ellis
  7.  
  8. pAllCaps (line) upper case full line
  9. pUpCaseFirst (line) upper case first word
  10.  
  11. pTrim* (line) simple trim spaces
  12. pTrim*Cnt (line,x) trim with counter
  13.  
  14. pPad* (line,len) simple pad spaces
  15. pPad*Cnt (line,cnt) pad with counter
  16.  
  17. pExpand* (line,chx,max) complex pad
  18. pShrink* (line,chx,max) complex trim
  19. pJust* (line,len)
  20.  
  21. pIndent complex required by KEYWORD
  22. pLineCount prefixes linecount str
  23.  
  24. pSayLineCJ (line);
  25. pSayLineLJ (line);
  26. pSayLineRJ (line);
  27.  
  28. *)
  29.  
  30.  
  31. (********************************************************************)
  32.  
  33. procedure    pALLCAPS( var LINE : thestr );
  34.  
  35. var i : integer;
  36.  
  37. begin
  38.    FOR i := 1 to length(line)
  39.       do  Line[i] := upcase(Line[i]);
  40. end;
  41.  
  42.  
  43. (********************************************************************)
  44.  
  45. procedure    pUpCaseFirst( var LINE : thestr );
  46.  
  47. var i, max : integer;
  48.  
  49. begin
  50.    
  51.    IF pos(' ',line) > 1 then max := pos(' ',line)
  52.    ELSE max := length(line);
  53.    
  54.    FOR i := 1 to max
  55.       do  Line[i] := upcase(Line[i]);
  56.    
  57. end;
  58.  
  59. (********************************************************************)
  60.  
  61. procedure pTrimL( var line : thestr);
  62.  
  63. (* line length is shortened *)
  64.  
  65. var
  66. byte : string1;
  67. len  : integer;
  68.  
  69. begin (* proc *)
  70.    IF length(line) > 1
  71.    then
  72.    begin
  73.       (* fetch byte on extreme left end *)
  74.       byte := Line[1];
  75.       (* trim left end <space> character, if len > 1 *)
  76.       while byte = ' ' do
  77.       begin
  78.          IF length(line) > 0
  79.          then
  80.          begin
  81.             delete(Line,1,1);
  82.             byte := Line[1];      (* next delete char *)
  83.          end
  84.          ELSE   (* force while loop to exit *)
  85.          byte := '.';
  86.       end; (* while *)
  87.    end; (* if *)
  88. end; (* proc *)
  89.  
  90.  
  91. (********************************************************************)
  92.  
  93. procedure pTrimR(var line : THEstr );
  94.  
  95. (* line length is shortened *)
  96.  
  97. var
  98. byte : string1;
  99. len  : integer;
  100.  
  101. begin (* proc *)
  102.    IF length(line) > 1
  103.    then
  104.    begin
  105.       (* fetch byte on extreme right end *)
  106.       len := length(Line);
  107.       byte := LINE[Len];
  108.       (* trim right end <space> character *)
  109.       WHILE (Byte = ' ') do
  110.       begin
  111.          IF length(line) > 0
  112.          then
  113.          begin
  114.             delete(Line,Len,1);
  115.             Len := length(Line);
  116.             Byte := Line[Len];
  117.          end
  118.          ELSE   (* force while loop to exit *)
  119.          byte := '.';
  120.       end; (* while *)
  121.    end; (* if *)
  122. end; (* proc *)
  123.  
  124.  
  125. (********************************************************************)
  126.  
  127. procedure pTrimLCnt( var Line : thestr ; var Cnt : nbr );
  128.  
  129. (* line length is shortened *)
  130.  
  131. var
  132. byte : string1;
  133. len  : integer;
  134.  
  135. begin (* proc *)
  136.    IF length(line) > 1
  137.    then
  138.    begin
  139.       (* fetch byte on extreme left end *)
  140.       byte := Line[1];
  141.       Cnt := 0;
  142.       (* trim left end <space> character, if len > 1 *)
  143.       WHILE byte = ' '
  144.       do
  145.       begin
  146.          IF length(line) > 0
  147.          then
  148.          begin
  149.             delete(Line,1,1);
  150.             byte := Line[1];      (* next delete char *)
  151.             Cnt := Cnt+1;
  152.          end
  153.          ELSE   (* force while loop to exit *)
  154.          byte := '.';
  155.       end; (* while *)
  156.    end; (* if *)
  157. end; (* proc *)
  158.  
  159.  
  160. (********************************************************************)
  161.  
  162. procedure pTrimRCnt(var Line : THEstr; var Cnt : nbr );
  163.  
  164. (* line length is shortened *)
  165.  
  166. var
  167. byte : string1;
  168. len  : integer;
  169.  
  170. begin (* proc *)
  171.    IF length(line) > 1
  172.    then
  173.    begin
  174.       (* fetch byte on extreme right end *)
  175.       len := length(Line);
  176.       byte := line[Len];
  177.       Cnt := 0;
  178.       (* trim right end <space> character *)
  179.       WHILE (Byte = ' ')
  180.       do
  181.       begin
  182.          IF length(line) > 0
  183.          then
  184.          begin
  185.             delete(Line,Len,1);
  186.             Len := length(Line);
  187.             Byte := Line[Len];
  188.             Cnt := Cnt+1;
  189.          end
  190.          ELSE   (* force while loop to exit *)
  191.          byte := '.';
  192.       end; (* while *)
  193.    end; (* if *)
  194. end; (* proc *)
  195.  
  196.  
  197.  
  198. (********************************************************************)
  199.  
  200. procedure pPADL(var LINE : THEstr ; LEN : integer);
  201.  
  202. (* LINE  = incoming string to be altered
  203. (* LEN   = left margin length
  204. *)
  205.  
  206. var
  207. y : integer;
  208. mark : string1;
  209.  
  210. begin (* proc *)
  211.    mark   := ' ';
  212.    FOR y := 1 to len
  213.       do line := mark + line;
  214. end; (* proc *)
  215.  
  216.  
  217. (********************************************************************)
  218.  
  219. procedure pPADR(var LINE : THEstr ; LEN : integer);
  220.  
  221. (* LINE  := incoming string to be altered
  222. (* LEN   := right margin length
  223. *)
  224.  
  225. var
  226. y : integer;
  227. mark : string1;
  228.  
  229. begin (* proc *)
  230.    mark   := ' ';
  231.    FOR y := 1 to len
  232.       do line := line + mark;
  233. end; (* proc *)
  234.  
  235.  
  236. (***************************************************************************)
  237.  
  238. procedure pEXPANDL(var LINE :THEstr; CHX :string1; MAX :integer);
  239.  
  240. (* LINE   = incoming string to be altered
  241. (* CHX   = character to use
  242. (* MAX   = max length of expanded line
  243. *)
  244.  
  245. var
  246. y : integer;
  247.  
  248. begin (* proc *)
  249.    WHILE length(line) < max
  250.       do line := chx + line;
  251. end; (* proc *)
  252.  
  253.  
  254. (***************************************************************************)
  255.  
  256. procedure pEXPANDR(var LINE :THEstr; CHX :string1; MAX :integer);
  257.  
  258. (* LINE   = incoming string to be altered
  259. (* CHX   = character to use
  260. (* MAX   = max length of expanded line
  261. *)
  262.  
  263. var
  264. y : integer;
  265.  
  266. begin (* proc *)
  267.    WHILE length(line) < max
  268.       do line := line + chx;
  269. end; (* proc *)
  270.  
  271.  
  272. (********************************************************************)
  273.  
  274. procedure pSHRINKL(var LINE :THEstr; CHX :string1; MIN :integer);
  275.  
  276. (* shrink the line, not less than minimum length
  277. (* LINE   = incoming string to be altered
  278. (* CHX   = character to use
  279. (* MIN   = min length of shrinked line
  280. *)
  281.  
  282. begin (* proc *)
  283.    pTRIML(LINE);
  284.    pEXPANDL(LINE,CHX,min);
  285. end; (* proc *)
  286.  
  287.  
  288. (********************************************************************)
  289.  
  290. procedure pSHRINKR(var LINE :THEstr; CHX :string1; MIN :integer);
  291.  
  292. (* purpose : shrink line, not less than minimum length
  293. (* LINE   = incoming string to be altered
  294. (* CHX   = character to use
  295. (* MIN   = min length of shrinked line
  296. *)
  297.  
  298. begin (* proc *)
  299.    pTRIMR(LINE);
  300.    pEXPANDR(LINE,CHX,min);
  301. end; (* proc *)
  302.  
  303.  
  304. (********************************************************************)
  305.  
  306. procedure pJUSTL(var LINE :THEstr; LEN :integer);
  307.  
  308. begin (* proc *)
  309.    pTRIML(LINE);
  310.    pEXPANDR(LINE,' ',len);
  311. end; (* proc *)
  312.  
  313.  
  314. (********************************************************************)
  315.  
  316. procedure pJUSTR(var LINE :THEstr; LEN :integer);
  317.  
  318. begin (* proc *)
  319.    pTRIMR(LINE);
  320.    pEXPANDL(LINE,' ',len);
  321. end; (* proc *)
  322.  
  323.  
  324. (********************************************************************)
  325.  
  326. procedure pJUSTC(var LINE :THEstr; LEN :integer);
  327.  
  328. var
  329. x : integer;
  330.  
  331. begin (* proc *)
  332.    (* scalp the line *)
  333.    pTRIML(line);
  334.    pTRIMR(line);
  335.    (* calc left/right offset *)
  336.    x := ( ( len - length(line)  ) - 1 ) div 2 ;
  337.    (* half pad left, half pad right *)
  338.    pPADL(line,x);
  339.    pPADR(line,x);
  340. end; (* proc *)
  341.  
  342.  
  343. (* procedure ***************************************************************)
  344. (* v. 0200pm, wed, 17.Sep.86, Glen Ellis   *)
  345.  
  346. procedure pSaylineCJ( Line : THEstr; Len : integer );
  347.  
  348. begin
  349.    pJustC(Line,Len);
  350.    writeln(line);
  351. end;
  352.  
  353.  
  354. (* procedure ***************************************************************)
  355. (* v. 0200pm, wed, 17.Sep.86, Glen Ellis   *)
  356.  
  357. procedure pSayLineLJ( Line : THEstr; Len : integer );
  358.  
  359. begin
  360.    pJustL(Line,Len);
  361.    writeln(line);
  362. end;
  363.  
  364.  
  365. (* procedure ***************************************************************)
  366. (* v. 0200pm, wed, 17.Sep.86, Glen Ellis   *)
  367.  
  368. procedure pSayLineRJ( Line : THEstr; Len : integer );
  369.  
  370. begin
  371.    pJustR(Line,Len);
  372.    writeln(line);
  373. end;
  374.  
  375.  
  376. (* procedure ***************************************************************)
  377. (* v. 0700am, fri, 12.Sep.86, Glen Ellis   *)
  378.  
  379. procedure pINDENT( var iLine : THEstr; iPos : integer; iMax : integer);
  380.  
  381. (* similar to EXPANDL() with control for limit of IlenMAX length.
  382. (* so dBASE2 command Lines do not scroll off screen.
  383. (*
  384. (*  Calling format from KEYWORD
  385. (*  pINDENT( ILINE, IPOS, ILenMax );
  386. *)
  387.  
  388. (*  as called from KEYDB2 :
  389. (*  Iline  = keyline = line string to altered
  390. (*  Ipos  = keyIpos = position of left margin , currently.
  391. (*  MAX  = lineMAX = max length of line
  392. *)
  393.  
  394. var
  395. y : integer;
  396.  
  397. begin (* proc *)
  398.    (* reset begin/end errors *)
  399.    IF IPOS < 0 then
  400.    begin
  401.       iPos := 0;
  402.       writeln('------->   Begin / End Error  <-------',chr(7));
  403.    end;
  404.    FOR y := 1 to iPos do
  405.    begin
  406.       (* if SysIndTrace then write(':',y); *)
  407.       IF (length(iLine) < iMax) then
  408.       iLine := ' ' + iLine;
  409.    end;
  410. end; (* proc *)
  411.  
  412. (********************************************************************)
  413.  
  414. procedure pLineCount(var LINE : THEstr; var NUM : integer);
  415.  
  416. (* purpose : prefix line number count
  417. (*
  418. (* as called by SYSTEM.PAS :
  419. (*
  420. (* LINE  = SysOutStr
  421. (* NUM  = SysLineNum
  422. *)
  423.  
  424. var
  425. Cnt3 : string3;
  426.  
  427. begin (* proc *)
  428.    Num := Num + 1;
  429.    str(Num,Cnt3);
  430.    Line := Cnt3 + ': ' + Line
  431. end; (* proc *)
  432.  
  433.  
  434. (********************************************************************)
  435.  
  436. procedure P_NOHIBIT(var HIBITline:string255);
  437.  
  438. (* not tested, replace hibit *)
  439. (* line length maintained *)
  440.  
  441. var
  442. I : integer;
  443. WLine : THEstr;
  444. WLineLen : nbr;
  445.  
  446. begin (* procedure *)
  447.    Wline    := HIBITline ;
  448.    Wlinelen := length(Wline);
  449.    FOR I := 1 to Wlinelen do
  450.    begin
  451.       IF ord(Wline[I]) > 127 then
  452.       begin
  453.          Wline[I] := chr(ord(Wline[I])-128);
  454.       end;
  455.    end;
  456.    (* return this parameter *)
  457.    HIBITline := Wline ;
  458. end; (* procedure *)
  459.  
  460.  
  461. (********************************************************************)
  462.  
  463. procedure P_NOCTRL(var Cline:string255);
  464.  
  465. (* not tested , needs development *)
  466.  
  467. (* delete control characters *)
  468. (* line length mainted *)
  469.  
  470. var
  471. I           : integer;
  472. str1, str2  : string255;
  473. Clinelen    : integer;
  474. Wline       : string255;
  475.  
  476. begin (* proc *)
  477.    Wline    := Cline ;
  478.    Clinelen := length(Cline);
  479.    FOR I := 1 to Clinelen do
  480.    begin
  481.       (* trap control character *)
  482.       IF ord(Wline[I]) < ord(' ') then
  483.       begin
  484.          (* delete control character *)
  485.          str1 := copy(Cline,1,I-1);
  486.          str2 := copy(Cline,I+1,Clinelen-I);
  487.          (* generate revised workline *)
  488.          Wline := str1 + str2 ;
  489.          i := i-1;
  490.       end;
  491.    end;
  492.    (* return this parameter *)
  493.    Cline := Wline ;
  494. end; (* proc *)
  495.  
  496. (********************************************************************)
  497.  
  498. (*:B:0*)
  499. (*:B:0*)
  500. e := Wline ;
  501. end; (* proc *)
  502.  
  503. (*************************************************