home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / dbase / text / neatness.prg
Text File  |  1985-12-11  |  7KB  |  262 lines

  1.  
  2. * Program ID - NEATNESS.PRG
  3. * Author     - Randy Braa
  4. *              Data Image Corporation
  5. *              3736 Eubank NE
  6. *              Albuquerque, NM 87111
  7. *              (505) 294-4094
  8. * Rev No.    - 850118 0.0
  9. * (c) Copyright 1985, Data Image Corporation - All rights reserved.
  10. * Comments   - This program cleans up dBASE-III code. It will also
  11. *              produce a line-numbered listing.
  12. *
  13. *                   DATABASE TEXTWORK.dbf
  14. *  This database contains a single character-type element with
  15. *  a name of 'TEXT' and a size of 255 characters.
  16.  
  17. *                      - CHANGE HISTORY -
  18. *=======================================================================
  19. *   Revision                         Modification
  20. * ------------  --------------------------------------------------------
  21. *
  22. *=======================================================================
  23. SET TALK OFF
  24. SET SAFETY OFF
  25. SET INTENSITY ON
  26.  
  27. STORE 0 TO IF_COUNT
  28. STORE 0 TO DOW_COUNT
  29. STORE 0 TO DOC_COUNT
  30. STORE 0 TO INDENT
  31. STORE 3 TO INDENTAMT
  32. STORE 1 TO LINE
  33. STORE SPACE(12) TO PROGNAME
  34. STORE .F. TO MOLESTE
  35.  
  36. * intialize the textwork database.
  37. CLEAR
  38. USE TEXTWORK
  39. ZAP
  40.  
  41. * now we find out what the user wants us to do.
  42. @ 2,26 SAY "dBASE-III .PRG File Cleanup"
  43. @ 3,26 SAY "==========================="
  44. @ 6,20 SAY "What is the program name?"
  45. DO WHILE PROGNAME = " "
  46.    @ 6,47 GET PROGNAME
  47.    READ
  48.    @ 23,0
  49.    IF AT('.',PROGNAME)=0
  50.       STORE TRIM(PROGNAME)+".PRG" TO PROGNAME
  51.    ENDIF
  52.    IF .NOT. FILE(PROGNAME)
  53.       @ 23,20 SAY "Unable to locate program " + PROGNAME
  54.       STORE SPACE(12) TO PROGNAME
  55.    ENDIF
  56. ENDDO
  57.  
  58. *set up file to receive clean code.
  59. CLEAR
  60. ? "Now cleaning file"
  61. ?
  62. STORE SUBSTR(PROGNAME,1,AT('.',PROGNAME)-1) TO BASENAME
  63. STORE BASENAME+".PRC" TO NEATNAME
  64. STORE BASENAME+".PRP" TO PRIORNAME
  65. SET ALTERNATE TO &NEATNAME
  66. SET ALTERNATE ON
  67.  
  68. *append program to textwork dbf
  69. APPEND FROM &PROGNAME SDF
  70.  
  71. *main process loop
  72. GOTO TOP
  73. DO WHILE .NOT. EOF()
  74.    IF LEN(TRIM(TEXT)) > 0
  75.       STORE TRIM(TEXT) TO STRING
  76.       STORE LEN(TRIM(STRING)) TO STRLEN
  77.       * left-justify the string
  78.       STORE 1 TO CHARPOS
  79.       DO WHILE SUBSTR(STRING,CHARPOS,1)=" "
  80.          CHARPOS=CHARPOS+1
  81.       ENDDO
  82.       STORE SUBSTR(STRING,CHARPOS) TO STRING
  83.       * get first word of line
  84.       STORE 1 TO CHARPOS
  85.       DO WHILE SUBSTR(STRING,CHARPOS,1)<> " " .AND. CHARPOS < 8
  86.          CHARPOS=CHARPOS+1
  87.       ENDDO
  88.       STORE UPPER(SUBSTR(STRING,1,CHARPOS))+" " TO WS
  89.  
  90.       DO CASE
  91.          * make all comments lower case
  92.          CASE WS = "*"
  93.          * the moleste sw keeps comments of the front from being chnged
  94.          IF MOLESTE
  95.             STORE LOWER(STRING) TO STRING
  96.          ENDIF
  97.          * lines with quotes
  98.          CASE '"' $ STRING
  99.          STORE .T. TO MOLESTE
  100.          * locate the quotes
  101.          STORE AT('"',STRING) TO QUOTE1
  102.          STORE AT('"',SUBSTR(STRING,QUOTE1+1)) + QUOTE1 TO QUOTE2
  103.          * decide if comment comes at front, back or in the middle
  104.          IF QUOTE1 > 1 .AND. LEN(TRIM(STRING)) > QUOTE2
  105.             STORE UPPER(SUBSTR(STRING,1,QUOTE1-1)) +;
  106.             SUBSTR(STRING,QUOTE1,QUOTE2-QUOTE1+1) +;
  107.             UPPER(SUBSTR(STRING,QUOTE2+1)) TO STRING
  108.          ELSE
  109.             IF QUOTE1 = 1 .AND. QUOTE2 < LEN(TRIM(STRING))
  110.                STORE SUBSTR(STRING,1,QUOTE2) +;
  111.                UPPER(SUBSTR(STRING,QUOTE2+1)) TO STRING
  112.             ELSE
  113.                IF QUOTE1 > 1
  114.                   STORE UPPER(SUBSTR(STRING,1,QUOTE1-1)) +;
  115.                   SUBSTR(STRING,QUOTE1) TO STRING
  116.                ENDIF
  117.             ENDIF
  118.          ENDIF
  119.          OTHERWISE
  120.          STORE .T. TO MOLESTE
  121.          STORE UPPER(STRING) TO STRING
  122.       ENDCASE
  123.  
  124.       * now do indentation
  125.       DO CASE
  126.          CASE WS = "DO "
  127.  
  128.          ? SPACE(INDENT) + STRING
  129.  
  130.          STORE 4 TO CHARPOS
  131.          * skip leading blanks
  132.          DO WHILE SUBSTR(STRING,CHARPOS,1) = " " .AND. CHARPOS < STRLEN
  133.             CHARPOS = CHARPOS + 1
  134.          ENDDO
  135.          STORE CHARPOS TO BEGPOS
  136.          * now pick up second word of line
  137.          DO WHILE SUBSTR(STRING,CHARPOS,1) <> " " .AND. CHARPOS < STRLEN
  138.             CHARPOS=CHARPOS+1
  139.          ENDDO
  140.          STORE SUBSTR(STRING,BEGPOS,CHARPOS-BEGPOS+1)+" " TO WS
  141.  
  142.          IF WS = "WHILE " .OR. WS = "CASE "
  143.             STORE INDENT + INDENTAMT TO INDENT
  144.             IF WS = "WHILE "
  145.                DOW_COUNT = DOW_COUNT + 1
  146.             ELSE
  147.                DOC_COUNT = DOC_COUNT + 1
  148.             ENDIF
  149.  
  150.          ENDIF
  151.          * enddo, endif, endcase decrement
  152.          CASE WS="ENDCASE " .OR. WS="ENDDO " .OR. WS="ENDIF "
  153.          STORE INDENT - INDENTAMT TO INDENT
  154.          IF WS = "ENDCASE "
  155.             DOC_COUNT = DOC_COUNT - 1
  156.          ELSE
  157.             IF WS="ENDIF "
  158.                IF_COUNT=IF_COUNT-1
  159.             ELSE
  160.                DOW_COUNT=DOW_COUNT-1
  161.             ENDIF
  162.          ENDIF
  163.          ? SPACE(INDENT) + STRING
  164.  
  165.          CASE WS = "ELSE "
  166.          STORE INDENT-INDENTAMT TO INDENT
  167.          ? SPACE(INDENT) + STRING
  168.          STORE INDENT+INDENTAMT TO INDENT
  169.  
  170.          CASE WS = "IF "
  171.          ? SPACE(INDENT) + STRING
  172.          STORE INDENT+INDENTAMT TO INDENT
  173.          IF_COUNT=IF_COUNT+1
  174.  
  175.          OTHERWISE
  176.          ? SPACE(INDENT) + STRING
  177.  
  178.       ENDCASE
  179.  
  180.    ELSE
  181.  
  182.       ?
  183.  
  184.    ENDIF
  185.  
  186.    SKIP
  187.  
  188. ENDDO
  189.  
  190. SET CONSOLE ON
  191. SET ALTERNATE OFF
  192. CLOSE ALTERNATE
  193. IF FILE(PRIORNAME)
  194.    ERASE &PRIORNAME
  195. ENDIF
  196. RENAME &PROGNAME TO &PRIORNAME
  197. RENAME &NEATNAME TO &PROGNAME
  198.  
  199. CLEAR
  200. @ 5,0
  201. IF IF_COUNT > 0
  202.    @ $+1,14 SAY STR(IF_COUNT,3) + " More IFs encountered than ENDIFs"
  203. ELSE
  204.    IF IF_COUNT < 0
  205.       @ $+1,14 SAY STR(IF_COUNT*-1,3) + " More ENDIFs encountered than IFs"
  206.    ENDIF
  207. ENDIF
  208. IF DOW_COUNT > 0
  209.    @ $+1,14 SAY STR(DOW_COUNT,3) + " More DO WHILEs encountered than ENDDOs"
  210. ELSE
  211.    IF DOW_COUNT < 0
  212.       @ $+1,14 SAY STR(DOW_COUNT*-1,3) + " More ENDDOs encountered than DO WHILEs"
  213.    ENDIF
  214. ENDIF
  215. IF DOC_COUNT > 0
  216.    @ $+1,14 SAY STR(DOC_COUNT,3) + " More DO CASEs encountered than ENDCASEs"
  217. ELSE
  218.    IF DOC_COUNT < 0
  219.       @ $+1,14 SAY STR(DOC_COUNT*-1,3) + " More ENDCASEs encountered than DO CASEs"
  220.    ENDIF
  221. ENDIF
  222.  
  223. STORE " " TO RESP
  224. @ $+3,15 SAY "Would you like a hardcopy listing?"
  225. @ $,$+2 GET RESP PICT "!"
  226. READ
  227. IF RESP <> "Y"
  228.    CLEAR ALL
  229.    RETURN
  230. ENDIF
  231.  
  232. GOTO TOP
  233. ZAP
  234.  
  235. APPEND FROM &PROGNAME SDF
  236. STORE 001 TO LINE_NO
  237. STORE 01 TO PAGE_NO
  238. STORE 99 TO LINE_CNT
  239. GOTO TOP
  240. SET PRINT ON
  241. DO WHILE .NOT. EOF()
  242.    IF LINE_CNT > 55
  243.       EJECT
  244.       ?
  245.       ?
  246.       ? "Program-ID: "+PROGNAME+SPACE(60-LEN(PROGNAME))+"PAGE "+STR(PAGE_NO,2)
  247.       ?
  248.       LINE_CNT=1
  249.       PAGE_NO=PAGE_NO+1
  250.    ENDIF
  251.    ? TRIM(STR(LINE_NO,3)+" "+ TEXT)
  252.    LINE_NO=LINE_NO+1
  253.    LINE_CNT=LINE_CNT+1
  254.    SKIP
  255. ENDDO
  256. EJECT
  257. SET PRINT OFF
  258.  
  259. SET TALK ON
  260. CLEAR ALL
  261. RETURN
  262.