/* nolock * dps 09/21/05 * original from D Deasy 11/22/97 * finds FIND statements without an accompanying NO-LOCK or EXCLUSIVE-LOCK */ DEF VAR InText AS CHAR NO-UNDO. DEF VAR OutText AS CHAR NO-UNDO. DEF VAR AscText AS CHAR FORMAT "x(255)"NO-UNDO. DEF VAR NumRec AS INTEGER FORMAT ">>>,>>z" NO-UNDO. DEF VAR MaxLength AS INTEGER NO-UNDO. DEF VAR Loop AS INTEGER NO-UNDO. DEF VAR IsComment AS LOGICAL NO-UNDO. DEF VAR IsQuote AS LOGICAL NO-UNDO. DEF VAR FileName AS CHAR FORMAT "x(64)" NO-UNDO. DEF FRAME pframe NumRec FORMAT "Line >>,>>9:" AscText WITH NO-LABELS CENTERED WIDTH 512. DEF STREAM InStream. DEF STREAM OutStream. PAUSE 0 BEFORE-HIDE. UPDATE FileName LABEL "File Name" WITH SIDE-LABELS CENTERED. INPUT FROM VALUE(FileName). /* name of .p to check */ OUTPUT STREAM OutStream TO VALUE(FileName + ".txt"). REPEAT: NumRec = NumRec + 1. IF NumRec MOD 25 = 0 THEN DISPLAY "Records:" NumRec WITH 1 DOWN NO-LABELS CENTERED. IMPORT UNFORMATTED InText. ASSIGN OutText = OutText + TRIM(InText) + " " OutText = REPLACE(OutText," "," ") OutText = REPLACE(OutText," "," "). /* end of line is defined as [period][space] or [colon][space] */ IF R-INDEX(OutText,".") = LENGTH(TRIM(OutText)) OR R-INDEX(OutText,":") = LENGTH(TRIM(OutText)) THEN DO: MaxLength = LENGTH(TRIM(OutText)). DO loop = 1 TO MaxLength: /* ignore anything in quotes */ IF SUBSTRING(OutText,loop,1) = '"' THEN IsQuote = NOT IsQuote. IF IsQuote THEN NEXT. /* ignore comments */ IF SUBSTRING(OutText,loop,2) = "/*" THEN IsComment = YES. IF NOT IsComment THEN DO: /* ignore any high or low ASCII - probably not needed? */ IF ASC(SUBSTRING(OutText,loop,1)) > 31 AND ASC(SUBSTRING(OutText,Loop,1)) < 122 THEN AscText = AscText + SUBSTRING(OutText,loop,1). END. IF SUBSTRING(OutText,loop,2) = "*/" THEN ASSIGN loop = loop + 1 IsComment = NO. END. /* look for FIND, not -FIND or ON FIND */ IF INDEX(AscText,"FIND ") > 0 AND INDEX(AscText,"-FIND") = 0 AND INDEX(AscText,"ON FIND ") = 0 THEN /* look for NO-LOCK or EXCLUSIVE */ IF (INDEX(AscText,"NO-LOCK") = 0 AND INDEX(AscText,"EXCLUSIVE") = 0) THEN DISPLAY STREAM OutStream NumRec TRIM(AscText) @ AscText WITH FRAME pframe. IF INDEX(AscText, "EACH ") > 0 THEN /* look for NO-LOCK or EXCLUSIVE */ IF (INDEX(AscText,"NO-LOCK") = 0 AND INDEX(AscText,"EXCLUSIVE") = 0) THEN DISPLAY STREAM OutStream NumRec TRIM(AscText) @ AscText WITH FRAME pframe. /* reset the stuff and repeat */ ASSIGN OutText = "" AscText = "". END. /* found the end of the line */ END. /* repeat */ OUTPUT STREAM OutStream CLOSE. /* end of program */