>'UTIL5
>N1
>f
 
 
                            pfind - utility
                                 - # -
>X
pfind
=====
 
 
tHE pfind uTILITY IS A COMPREHENSIVE sTRING sEARCH AND rEPLACE uTILITY.  iT ALLOWS THE USER TO LOCATE AND REPLACE STRINGS IN MEMORY, IN A FILE, OR THE DISK ON A SECTOR BY SECTOR BASIS.  aLL ldos SUPPORTED DISK DEVICES MAY BE OPERATED ON, INCLUDING sINGLE/dOUBLE dENSITY, sINGLE/dOUBLE sIDED, 5" AND 8" FLOPPIES AND FIXED/REMOVABLE RIGID DISK SYSTEMS.  tHIS PROGRAM WILL LOCATE STRINGS IN SEVERAL DIFFERENT FORMATS, AND UPPER/LOWER CASE INDEPENDENT SEARCHES MAY BE SPECIFIED.  tHE SYNTAX OF THE pfind COMMAND IS:
 
          =====================================================
          !  pfind,*,@,:A,B,C,D,S,>T                          !
          !  pfind,*,@,FILESPEC,E,S,>T                        !
          !  pfind,*,@,FFFF,GGGG,S,>T                         !
          !                                                   !
          !        *  = OUTPUT TO PRINTER                     !
          !        @  = DISPLAY MATCH LOCATIONS               !
          !        :A = DRIVE NUMBER (0-7, COLON OPTIONAL)    !
          !        B  = STARTING CYLINDER (DEFAULT 0)         !
          !        C  = STARTING SECTOR (DEFAULT 0)           !
          !        D  = SECTOR COUNT (DEFAULT TO DISK END)    !
          !        FILESPEC = ANY VALID ldos FILESPEC         !
          !        E        = STARTING RELATIVE SECTOR (DEF 0)!
          !        FFFF     = MEMORY START ADDRESS            !
          !        GGGG     = ENDING ADDRESS (DEF TOPMEM)     !
          !        S  = STRING TO LOCATE                      !
          !        >T = REPLACEMENT STRING (OPTIONAL)         !
          !  STRING   = "ABCDE????FGH"                        !
          !             (LITERAL STRING, CASE DEPENDENT)      !
          !           = 'ABCDE????FGH'                        !
          !             (LITERAL STRING, CASE INDEPENDENT)    !
          !           = ABCDE????FGH                          !
          !             (? MATCHES ANYTHING, CASE INDEPENDENT)!
          !           = #,A,B,C     (BYTE LIST)               !
          !           = ##,A,B,C    (WORD LIST)               !
          !                                                   !
          !  ABBR: none                                       !
          =====================================================
 
     aFTER SELECTING THE DESIRED PARAMETERS, THE SEARCH WILL BEGIN AT THE SPECIFIED STARTING LOCATION.  iF A DISK OR FILE SEARCH IS SPECIFIED, THE ENTIRE STRING MUST BE CONTAINED WHOLLY WITHIN A SECTOR, NO SPANNING IS DONE.  iF ANY MATCHES ARE FOUND, AND THE @ OPTION IS SPECIFIED, THEIR LOCATIONS WILL BE RETURNED TO THE VIDEO, OR THE PRINTER IF THE * OPTION IS GIVEN.  iF THE @ WAS NOT ISSUED, THE LOCATION WILL BE COUNTED, BUT NOT DISPLAYED.  iF A REPLACEMENT STRING WAS GIVEN, IT WILL BE WRITTEN BACK TO THE SOURCE DATA.  iF ANY ERRORS OCCUR DURING EITHER THE READ OR WRITE CYCLE, YOU WILL BE ISSUED AN ERROR MESSAGE, AND GIVEN THE OPTION TO r>ETRY, s>KIP, OR a>BORT.  iF A REPLACEMENT STRING WAS SPECIFIED THAT IS LONGER THAN THE SOURCE STRING, IT WILL BE TRUNCATED TO THE LENGTH OF THE SOURCE STRING.
 
     tHE FOLLOWING TYPES OF STRINGS WILL BE ACCEPTED BY THE SYSTEM:
 
     lITERAL STRING, CASE DEPENDENT:   "STRING"
bY SURROUNDING THE STRING WITH QUOTATION MARKS ("), IT WILL BE INTERPRETED BY pfind AS A LITERAL STRING, NO CONVERSION OF CASE WILL BE MADE.  eACH LETTER SPECIFIED MUST MATCH exactly.  tHIS MEANS THAT UPPER CASE AND LOWER CASE ARE TREATED AS SEPARATE CHARACTERS.  iF THE SOURCE STRING IS "kIM" FOR EXAMPLE, THEN kim WILL not MATCH BECAUSE THE I AND M ARE CONSIDERED DIFFERENT CHARACTERS.
 
     lITERAL STRING, CASE INDEPENDENT:   'STRING'
bY SURROUNDING THE STRING WITH APOSTROPHES ('), IT WILL BE INTERPRETED BY pfind AS A LITERAL STRING, BUT ALL CHARACTERS WILL BE CONVERTED TO UPPER CASE.  wHEN SCANNING FOR MATCHES, EACH CHARACTER OF DATA IS CONVERTED TO UPPER CASE before THE COMPARE IS MADE.  tHIS WILL ALLOW YOU TO LOCATE MATCHES EVEN IF THE UPPER/LOWER CASE CHARACTERS DO NOT MATCH EXACTLY.  iF THE SOURCE STRING IS 'kIM' FOR EXAMPLE, THEN kim, Kim, KIM, ETC. WILL all MATCH.  tHE UPPER AND LOWER CASE CHARACTERS ARE CONSIDERED EQUAL IN THIS TYPE OF SEARCH.
 
     ? MATCHES ANYTHING, CASE INDEPENDENT:   STRING
tHIS TYPE OF SEARCH IS IDENTICAL TO THE ABOVE MENTIONED EXAMPLE, EXCEPT THAT ANY QUESTION MARK CHARACTERS (?) WILL MATCH WITH any CHARACTERS IN THE DATA SEARCHED.  iF THERE ARE NO ? CHARACTERS IN THE STRING, THEN THIS AND THE ABOVE WOULD BE IDENTICAL IN ALL RESPECTS.  iF THE SOURCE STRING IS k?M FOR EXAMPLE, THEN kim, Kim, KIM, KAM, KXM, ETC. WILL all MATCH.  tHE UPPER AND LOWER CASE CHARACTERS ARE CONSIDERED EQUAL.
 
     bYTE LIST:   #,A,B,C
tHIS TYPE OF SEARCH WILL ALLOW YOU TO SPECIFY ANY STRING OF BYTES.  tHE SINGLE POUND SIGN (#) TELLS pfind THAT A LIST OF ONE BYTE NUMERICAL VALUES WILL BE FOLLOWING.  tHE VALUES MAY BE MADE IN bINARY, dECIMAL, hEX, OR oCTAL BY preceeding THE NUMBER WITH b, d, h OR o RESPECTIVELY (DEFAULT DECIMAL).  aLL NUMBERS INDICATED MUST BE IN THE RANGE OF 0-255 (0-ffh).
 
     wORD LIST:   ##,A,B,C
tHIS SEARCH ALLOWS A STRING OF 2 BYTE WORDS.  tHE DOUBLE POUND SIGN (##) TELLS pfind THAT A LIST OF 2 BYTE NUMERICAL VALUES WILL FOLLOW.  tHE VALUES MAY BE IN ANY NUMBER BASE FOLLOWING THE RULES IN BYTE LIST.  aLL NUMBERS MUST BE IN THE RANGE OF 0-65535 (0-ffffh).  tHE NUMBERS ARE PLACED INTO THE STRING IN lsb, msb ORDER.
 
sAMPLE sTRINGS:
"kIM wATT"      BECOMES      4bh,69h,6dh,20h,57h,61h,74h,74h
'kIM wATT'      BECOMES      4bh,49h,4dh,20h,57h,41h,54h,54h
kIM wATT        BECOMES      4bh,49h,4dh,20h,57h,41h,54h,54h
#,1,2,3         BECOMES      01h,02h,03h
##,1,2,3        BECOMES      01h,00h,02h,00h,03h,00h
>F
     iF YOU ARE SEARCHING MEMORY, THE LOCATIONS WILL BE REPORTED AS FOLLOWS:
mEMORY mATCH AT XXXXh
     sEARCHING dISK sECTORS:
dISK mATCH, dRIVE X, cYLINDER XXX, sECTOR XXX, rELATIVE bYTE XXh.
     sEARCHING fILE sECTORS:
fILE mATCH AT rELATIVE sECTOR XXXXX, rELATIVE bYTE XXh.
 
     tHE FOLLOWING ARE SAMPLE COMMAND LINES:
pfind,*@:0,'KIM WATT',>"kIM wATT"
     sEARCHES DRIVE 0 FROM START TO END.  iF THE STRING 'kIM wATT' APPEARS IN any CASE, REPLACE WITH THE STRING "kIM wATT" IN UPPER/LOWER CASE.  iF ANY MATCHES ARE FOUND, THEY WILL BE DISPLAYED TO THE VIDEO AND PRINTER.
pfind,:0,'KIM WATT'
     sEARCHES DRIVE 0 FROM START TO END.  rEPORT THE TOTAL NUMBER OF OCCURANCES OF THE STRING 'kIM wATT'.  dO NOT DISPLAY THE LOCATIONS, JUST THE TOTAL.
pfind,@PFIND/CMD,KIM WATT
     sEARCHES THE FILE pfind/cmd FOR ALL OCCURANCES OF THE STRING 'kIM wATT' IN EITHER UPPER OR LOWER CASE, AND REPORTS THEIR LOCATIONS TO THE VIDEO.
pfind,@SYS0/SYS,##,H4411
     sEARCHES THE FILE sys0/sys FOR ALL OCCURANCES OF THE BINARY WORD 4411h (TOPMEM mOD iii), AND REPORTS THEIR LOCATIONS TO THE VIDEO.
pfind,@H4000,##,H4411
     sEARCHES MEMORY FROM 4000h TO topmem FOR THE BINARY WORD 4411h, AND REPORTS ALL LOCATIONS TO THE VIDEO.

