home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / dbdebug.zip / DEBUG.SRC < prev   
Text File  |  1986-04-05  |  5KB  |  148 lines

  1. *=*=> DEBUG.PRG <=*=*
  2.  
  3. ** Test command files unmatched "clauses"
  4. ** and set up correct identations
  5. SET TALK OFF
  6. SET EXACT OFF
  7. SET SAFETY OFF
  8. CLEAR
  9. FILENAME = SPACE(12)
  10. @5,5 SAY 'Enter name of command file ' GET FILENAME
  11. READ
  12. CLEAR
  13. ? 'Working....'
  14. *** Add .PRG extension if necessary
  15. IF .NOT. '.' $(FILENAME)
  16.    FILENAME = TRIM(FILENAME) + '.PRG'
  17. ENDIF
  18. *** Isolate Filename w/o extension to FName
  19. FILENAME = UPPER(FILENAME)
  20. FNAME = SUBSTR(FILENAME,1,AT('.',FILENAME)-1)
  21. *** Pull a copy of the program into DEBUG.DBF database
  22. USE DEBUG
  23. ZAP
  24. APPEND FROM &FILENAME SDF
  25. GO TOP
  26. *** Start counters for 'clause' commands at zero
  27. STORE 0 TO INDENT,AMT,DOWHILE,IF,DOCASE,ENDDO,ENDIF,ENDCASE
  28. *** Loop through each line of the command file
  29. DO WHILE .NOT. EOF()
  30.    MEMVAR = TRIM(LINE)
  31.    *** First, peel off original leading blanks
  32.    DO WHILE SUBSTR(MEMVAR,1,1) = ' '
  33.       MEMVAR = SUBSTR(MEMVAR,2,LEN(MEMVAR)-1)
  34.    ENDDO
  35.    *** If line is a comment, or contains a literal
  36.    *** or parentheses, capitalize first word
  37.    IF MEMVAR = '*' .OR. "'" $MEMVAR .OR. '(' $MEMVAR
  38.       SPOT = AT(' ',MEMVAR)
  39.       MEMVAR = UPPER(SUBSTR(MEMVAR,1,SPOT))+;
  40.       SUBSTR(MEMVAR,SPOT+1,LEN(MEMVAR)-SPOT+1)
  41.       *** Otherwise, capitalize the whole line
  42.    ELSE
  43.    STORE UPPER(MEMVAR) TO MEMVAR
  44. ENDIF (MEMVAR NOT A COMMENT OR LITERAL)
  45. *** set flags to false
  46. STORE .F. TO INCREASE,DECREASE,NEWELSE,NEWCASE,TEXT
  47. *** Check for 'clause' commands and handle counters and indentations
  48. DO CASE
  49.    CASE MEMVAR = 'DO WHIL'
  50.         STORE DOWHILE+1 TO DOWHILE
  51.         AMT=3
  52.         INCREASE=.T.
  53.    CASE MEMVAR='IF'
  54.         STORE IF+1 TO IF
  55.         AMT=3
  56.         INCREASE=.T.
  57.    CASE MEMVAR='DO CASE'
  58.         STORE DOCASE +1 TO DOCASE
  59.         AMT=8
  60.         INCREASE=.T.
  61.    CASE MEMVAR='CASE' .OR. MEMVAR='OTHE'
  62.         STORE .T. TO NEWCASE
  63.    CASE MEMVAR='ENDD'
  64.         STORE ENDDO+1 TO ENDDO
  65.         INDENT=INDENT-3
  66.    CASE MEMVAR='ENDI'
  67.         STORE ENDIF+1 TO ENDIF
  68.         INDENT=INDENT-3
  69.    CASE MEMVAR='ENDC'
  70.         STORE ENDCASE+1 TO ENDCASE
  71.         INDENT=INDENT-8
  72.    CASE MEMVAR='ELSE'
  73.         NEWELSE=.T.
  74.    CASE MEMVAR='TEXT'
  75.         STORE .T. TO TEXT
  76. ENDCASE
  77. ***  Add new indentation to the line
  78. REPLACE LINE WITH SPACE(INDENT)+MEMVAR
  79. *** IF COMMAND WAS 'ELSE', UNINDENT THE ONE LINE
  80. IF NEWELSE
  81.    INDENT=INDENT-AMT
  82.    REPLACE LINE WITH SPACE(INDENT)+MEMVAR
  83.    INDENT=INDENT+AMT
  84. ENDIF
  85. *** IF COMMAND WAS A CASE OR OTHERWISE, UNINDENT
  86. IF NEWCASE
  87.    INDENT=INDENT-5
  88.    REPLACE LINE WITH SPACE(INDENT)+MEMVAR
  89.    INDENT=INDENT+5
  90. ENDIF
  91. *** IF REMAINING LINES TO BE INDENTED, INCREASE AMOUNT OF INDENTATION
  92. IF INCREASE
  93.    INDENT=INDENT+AMT
  94. ENDIF
  95. REPLACE LINE WITH TRIM(LINE)
  96. ? TRIM(LINE)
  97. *** DON'T MODIFY ANYTHING IN TEXT...ENDTEXT BLOCK
  98. IF TEXT
  99.    SKIP
  100.    DO WHILE .NOT. 'ENDT' $(UPPER(LINE))
  101.       ? TRIM(LINE)
  102.       SKIP
  103.    ENDDO (MEMVAR # ENDTEXT)
  104.    *** OTHERWISE, JUST SKIP TO NEXT LINE
  105. ELSE
  106. SKIP
  107. ENDIF (MEMVAR=TEXT)
  108. ENDDO (WHILE NOT EOF)
  109. *** STORE ORIGINAL COMMAND FILE TO SAME NAME WITH .OLD AS EXTENSION
  110. OLDNAME=FNAME+'.OLD'
  111. IF FILE(OLDNAME)
  112. ERASE &OLDNAME
  113. ENDIF (OLDNAME)
  114. RENAME &FILENAME TO &OLDNAME
  115. *** COPY NEW VERSION OF PROGRAM TO ORIGINAL FILENAME
  116. COPY TO &FILENAME DELIM WITH BLANK
  117. CLOSE DATABASES
  118. *** DISPLAY COMMAND FILE STATS
  119. CLEAR
  120. ? 'Command File statistics: '
  121. ?
  122. *** PRINT DO WHILE...ENDDO STATS
  123. ? 'DO WHILE STATEMENTS    :',DOWHILE
  124. ? 'ENDDO STATEMENTS       :',ENDDO
  125. IF DOWHILE # ENDDO
  126. ?? '  <--- WHOOPS!  UNMATCHED PAIR'
  127. ENDIF (DO WHILE)
  128. ?
  129. *** PRINT IF...ENDIF STATS
  130. ? 'IF STATEMENTS          :',IF
  131. ? 'ENDIF STATEMENTS       :',ENDIF
  132. IF IF # ENDIF
  133. ?? ' <--- WHOOPS!  UNMATCHED PAIR'
  134. ENDIF (IF)
  135. *** PRINT DO CASE...ENDCASE STATS
  136. ? 'DO CASE STATEMENTS     :',DOCASE
  137. ? 'ENDCASE STATEMENTS     :',ENDCASE
  138. IF DOCASE # ENDCASE
  139. ?? '  <--- WHOOPS!  UNMATCHED PAIR'
  140. ENDIF (DOCASE)
  141. ?
  142. ?
  143. *** PRINT CLOSING STATEMENTS
  144. ? '            The original command file is now stored under &oldname'
  145. ?
  146. ?'             The modified, indented version is stored under &filename'
  147. ?
  148. **** end of program