home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
dbdebug.zip
/
DEBUG.SRC
< prev
Wrap
Text File
|
1986-04-05
|
5KB
|
148 lines
*=*=> DEBUG.PRG <=*=*
** Test command files unmatched "clauses"
** and set up correct identations
SET TALK OFF
SET EXACT OFF
SET SAFETY OFF
CLEAR
FILENAME = SPACE(12)
@5,5 SAY 'Enter name of command file ' GET FILENAME
READ
CLEAR
? 'Working....'
*** Add .PRG extension if necessary
IF .NOT. '.' $(FILENAME)
FILENAME = TRIM(FILENAME) + '.PRG'
ENDIF
*** Isolate Filename w/o extension to FName
FILENAME = UPPER(FILENAME)
FNAME = SUBSTR(FILENAME,1,AT('.',FILENAME)-1)
*** Pull a copy of the program into DEBUG.DBF database
USE DEBUG
ZAP
APPEND FROM &FILENAME SDF
GO TOP
*** Start counters for 'clause' commands at zero
STORE 0 TO INDENT,AMT,DOWHILE,IF,DOCASE,ENDDO,ENDIF,ENDCASE
*** Loop through each line of the command file
DO WHILE .NOT. EOF()
MEMVAR = TRIM(LINE)
*** First, peel off original leading blanks
DO WHILE SUBSTR(MEMVAR,1,1) = ' '
MEMVAR = SUBSTR(MEMVAR,2,LEN(MEMVAR)-1)
ENDDO
*** If line is a comment, or contains a literal
*** or parentheses, capitalize first word
IF MEMVAR = '*' .OR. "'" $MEMVAR .OR. '(' $MEMVAR
SPOT = AT(' ',MEMVAR)
MEMVAR = UPPER(SUBSTR(MEMVAR,1,SPOT))+;
SUBSTR(MEMVAR,SPOT+1,LEN(MEMVAR)-SPOT+1)
*** Otherwise, capitalize the whole line
ELSE
STORE UPPER(MEMVAR) TO MEMVAR
ENDIF (MEMVAR NOT A COMMENT OR LITERAL)
*** set flags to false
STORE .F. TO INCREASE,DECREASE,NEWELSE,NEWCASE,TEXT
*** Check for 'clause' commands and handle counters and indentations
DO CASE
CASE MEMVAR = 'DO WHIL'
STORE DOWHILE+1 TO DOWHILE
AMT=3
INCREASE=.T.
CASE MEMVAR='IF'
STORE IF+1 TO IF
AMT=3
INCREASE=.T.
CASE MEMVAR='DO CASE'
STORE DOCASE +1 TO DOCASE
AMT=8
INCREASE=.T.
CASE MEMVAR='CASE' .OR. MEMVAR='OTHE'
STORE .T. TO NEWCASE
CASE MEMVAR='ENDD'
STORE ENDDO+1 TO ENDDO
INDENT=INDENT-3
CASE MEMVAR='ENDI'
STORE ENDIF+1 TO ENDIF
INDENT=INDENT-3
CASE MEMVAR='ENDC'
STORE ENDCASE+1 TO ENDCASE
INDENT=INDENT-8
CASE MEMVAR='ELSE'
NEWELSE=.T.
CASE MEMVAR='TEXT'
STORE .T. TO TEXT
ENDCASE
*** Add new indentation to the line
REPLACE LINE WITH SPACE(INDENT)+MEMVAR
*** IF COMMAND WAS 'ELSE', UNINDENT THE ONE LINE
IF NEWELSE
INDENT=INDENT-AMT
REPLACE LINE WITH SPACE(INDENT)+MEMVAR
INDENT=INDENT+AMT
ENDIF
*** IF COMMAND WAS A CASE OR OTHERWISE, UNINDENT
IF NEWCASE
INDENT=INDENT-5
REPLACE LINE WITH SPACE(INDENT)+MEMVAR
INDENT=INDENT+5
ENDIF
*** IF REMAINING LINES TO BE INDENTED, INCREASE AMOUNT OF INDENTATION
IF INCREASE
INDENT=INDENT+AMT
ENDIF
REPLACE LINE WITH TRIM(LINE)
? TRIM(LINE)
*** DON'T MODIFY ANYTHING IN TEXT...ENDTEXT BLOCK
IF TEXT
SKIP
DO WHILE .NOT. 'ENDT' $(UPPER(LINE))
? TRIM(LINE)
SKIP
ENDDO (MEMVAR # ENDTEXT)
*** OTHERWISE, JUST SKIP TO NEXT LINE
ELSE
SKIP
ENDIF (MEMVAR=TEXT)
ENDDO (WHILE NOT EOF)
*** STORE ORIGINAL COMMAND FILE TO SAME NAME WITH .OLD AS EXTENSION
OLDNAME=FNAME+'.OLD'
IF FILE(OLDNAME)
ERASE &OLDNAME
ENDIF (OLDNAME)
RENAME &FILENAME TO &OLDNAME
*** COPY NEW VERSION OF PROGRAM TO ORIGINAL FILENAME
COPY TO &FILENAME DELIM WITH BLANK
CLOSE DATABASES
*** DISPLAY COMMAND FILE STATS
CLEAR
? 'Command File statistics: '
?
*** PRINT DO WHILE...ENDDO STATS
? 'DO WHILE STATEMENTS :',DOWHILE
? 'ENDDO STATEMENTS :',ENDDO
IF DOWHILE # ENDDO
?? ' <--- WHOOPS! UNMATCHED PAIR'
ENDIF (DO WHILE)
?
*** PRINT IF...ENDIF STATS
? 'IF STATEMENTS :',IF
? 'ENDIF STATEMENTS :',ENDIF
IF IF # ENDIF
?? ' <--- WHOOPS! UNMATCHED PAIR'
ENDIF (IF)
*** PRINT DO CASE...ENDCASE STATS
? 'DO CASE STATEMENTS :',DOCASE
? 'ENDCASE STATEMENTS :',ENDCASE
IF DOCASE # ENDCASE
?? ' <--- WHOOPS! UNMATCHED PAIR'
ENDIF (DOCASE)
?
?
*** PRINT CLOSING STATEMENTS
? ' The original command file is now stored under &oldname'
?
?' The modified, indented version is stored under &filename'
?
**** end of program