[Back to FILES SWAG index]  [Back to Main SWAG index]  [Original]


PROGRAM HI_There;
(*   Syntax:  there  textfile  number  /quotedstring
   where textfile is filename, number is a line offset, & quotedstring is a
   group of characters without embedded control codes.  Purpose is to go to a
   given line offset in the text file, search that line for the string, and
   report via DOS error 1=True or 0=False depending upon if it was there.

Example:  there.exe  there.pas  0  /'program'
   would return error level 1 (True) since 'program' is on the first line.

Author:  John Howard                                   Date:  January 5, 1994
Copyright 1994  Howard International,  P.O. Box 34633, NKC, MO 64116

Restrictions:  You are free to use this program but I retain commercial
               ownership.  You may not charge someone to use this program.
Note:          Case sensitive.  Front or Back quote is removed.  No trailing
               whitespace is removed from the string.  Zero-based line offset.
               Returns DOS error level values: 0 thru 4 ******* *)
{$DEFINE debug}
VAR
   F: text;          (* CHAIN.TXT dropfile used by WWIV BBS *)
   LineNo: word;     (* Line Number from 0..65535 *)
   S: string;        (* Substring of 1..255 characters *)
   CmdLine: string;  (* string[127] command-line string *)

   Test: string;     (* temporary search line *)
   Code: integer;    (* temporary result of VAL conversion *)
   I: word;          (* temporary index of current line *)
   B: byte;          (* temporary index of command-line string *)
BEGIN { MAIN }
      {$I-}  (* Turn OFF input/output checking to prevent run-time error *)
      (* Open an existing text file *)
      Assign(F, ParamStr(1));
      Reset(F);
      {$I+}  (* Turn ON I/O *)
      if (IOResult <> 0) then Halt(2); {writeln('File not found');}
      (* Get text from command line and convert into a number *)
      Val(ParamStr(2), LineNo, Code);
      if Code <> 0 then Halt(3); {writeln('Bad number at position: ', Code);}
      (* Get quoted string or un-broken string. NO end whitespace removed! *)
      Move(Mem[PrefixSeg:$80], CmdLine, Mem[PrefixSeg:$80] + 1);
      S := CmdLine;
{$IFDEF debug}                  writeln(S);  {$ENDIF}
      B := Pos( '/', S);
{$IFDEF debug}                  writeln('CmdLine pos ', B);  {$ENDIF}
      Delete(S, 1, B);
      if S[1] = #39 then Delete(S, 1, 1);                   (* start quote *)
      if S[Length(S)] = #39 then Delete(S, Length(S), 1);   (* end quote *)
      if S = '' then Halt(4); {writeln('Empty string not allowed');}
{$IFDEF debug}                  writeln('Line: ', LineNo);  {$ENDIF}
{$IFDEF debug}                  writeln(S);  {$ENDIF}
      (* Go to specified line within text file *)
      I := 0;
      while not Eof(F) do
          begin
          Readln(F, Test);
{$IFDEF debug}                  writeln(Test);  {$ENDIF}
          if (I = LineNo) then
             begin
             if Pos(S, Test) > 0 then
             (* String S matched substr Test at position *)
                begin
                Close(F);
{$IFDEF debug}                  writeln('True ', I);  {$ENDIF}
                Halt(1);   (* Return True *)
                end
             else
             (* Search string not found *)
                begin
                Close(F);
{$IFDEF debug}                  writeln('False ', I);  {$ENDIF}
                Halt(0);   (* Return False *)
                end;
             end;
          (* Move to the next line *)
          if (I < 65535) then
             INC(I)               {I := I + 1}
          else
             begin
             Close(F);
             Halt(0);
             end;
          end;  {while}
      (* Close the existing text file *)
      Close(F);
      Halt(0);     (* Return False *)
END.  { MAIN }


[Back to FILES SWAG index]  [Back to Main SWAG index]  [Original]