home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv062.ark / PRETTY.DOC < prev    next >
Text File  |  1984-04-29  |  10KB  |  225 lines

  1. (*
  2.  
  3.   PROGRAM TITLE: PASCAL PRETTYPRINTING PROGRAM                      
  4.  
  5.   AUTHORS: JON F. HUERAS AND HENRY F. LEDGARD                       
  6.            COMPUTER AND INFORMATION SCIENCE DEPARTMENT              
  7.            UNIVERSITY OF MASSACHUSETTS, AMHERST                     
  8.            (EARLIER VERSIONS AND CONTRIBUTIONS BY RANDY CHOW        
  9.             AND JOHN GORMAN.)                                       
  10.  
  11.   BUGS CORRECTED BY : CHARLES FISCHER                               
  12.                       DEPARTMENT OF COMPUTER SCIENCE                
  13.                       UNIVERSITY OF WISCONSIN, MADISON              
  14.                       1977                                          
  15.  
  16. MODIFICATIONS : ( FOR GEORGIA TECH CYBER 70 (1979))                    
  17.                   PETER N. WAN                                      
  18.                   INFORMATION AND COMPUTER SCIENCE                  
  19.                   GEORGIA INSTITUTE OF TECHNOLOGY                   
  20.                   ATLANTA, GEORGIA  30332
  21.  
  22.  
  23.  ( FOR UCSD PASCAL V1.5 (1979) )
  24.  FRANCIS J. MONACO
  25.  2679 LOWELL DRIVE
  26.  MARIETTA, GEORGIA 30060
  27.  404-424-1460
  28.  
  29.  
  30.  SPECIAL NOTE ON CURRENT VERSION:  THE PROGRAM CURRENTLY RUNS UNDER UCSD
  31.  PASCAL; THE MODIFICATIONS TO THE BELOW PROGRAM SUMMARY INCLUDE:
  32.  1)  PROGRAM PROMPTS FOR DISK FILE IN LOGICAL UNIT #5; USER SHOULD
  33.  RESPOND WITH FIRST PART OF FILE NAME ( TO BE PRETTYPRINTED )
  34.  AS --> MYPROG----- NOT #5:MYPROG.TEXT !!!
  35.  2)  PROGRAM PROMPTS FOR DISK FILE FOR PRETTYPRINTED PGM; AGAIN, 
  36.  USER SHOULD RESPOND WITH FIRST PART OF FILE NAME ONLY.
  37.  3)  PROGRAM NOW ACCEPTS UPPER/LOWER CASE INPUT AND TRANSLITERATES
  38.  ALL TO UPPER CASE ( TO EASE PORTABILITY CONSIDERATIONS ).
  39.          NOTE: QUOTED STRINGS ARE NOT TRANSLITERATED;  ALSO,
  40.  PROGRAM CONVERTS '{' TO '(*' AND '}' TO '*)' FOR COMMENTS.
  41.  4)  PROGRAM BUILDS PRETTYPRINTED DISK FILE WHILE SIMULTANEOUSLY 
  42.  ECHOING OUTPUT TO CRT ( IN REAL TIME ).
  43.  5)  PROGRAM WILL LEAVE UCSD SPECIAL RESERVED WORDS LIKE "SEGMENT",
  44.  "UNIT", ETC. ALONE.
  45.  6)  PRETTYPRINTED OUTPUT IS 79 CHARACTERS PER LINE (SEE MAXLINESIZE)
  46.  
  47.  
  48.  
  49.   PROGRAM SUMMARY:                                                  
  50.  
  51.      THIS PROGRAM TAKES AS INPUT A PASCAL PROGRAM AND               
  52.      REFORMATS THE PROGRAM ACCORDING TO A STANDARD SET OF           
  53.      PRETTYPRINTING RULES. THE PRETTYPRINTED PROGRAM IS GIVEN       
  54.      AS OUTPUT.  THE PRETTYPRINTING RULES ARE GIVEN BELOW.          
  55.  
  56.  
  57. AN IMPORTANT FEATURE IS THE PROVISION FOR THE USE OF EXTRA     
  58.      SPACES AND EXTRA BLANK LINES.  THEY MAY BE FREELY INSERTED BY  
  59.      THE USER IN ADDITION TO THE SPACES AND BLANK LINES INSERTED    
  60.      BY THE PRETTYPRINTER.                                          
  61.  
  62.      NO ATTEMPT IS MADE TO DETECT OR CORRECT SYNTACTIC ERRORS IN    
  63.      THE USER'S PROGRAM.  HOWEVER, SYNTACTIC ERRORS MAY RESULT IN   
  64.      ERRONEOUS PRETTYPRINTING.                                      
  65.  
  66.  
  67.   INPUT FILE:    (PROMPTED)  - A FILE OF CHARACTERS, PRESUMABLY A     
  68.                              PASCAL PROGRAM OR PROGRAM FRAGMENT.    
  69.  
  70.   OUTPUT FILES:   (PROMPTED) - THE PRETTYPRINTED PROGRAM.       
  71.  
  72.  
  73. PASCAL PRETTYPRINTING RULES.
  74.  
  75.  
  76.  .[ GENERAL PRETTYPRINTING RULES ]                                  
  77.  
  78.    1.   ANY SPACES OR BLANK LINES BEYOND THOSE GENERATED BY THE     
  79.      PRETTYPRINTER ARE LEFT ALONE.  THE USER IS ENCOURAGED, FOR THE 
  80.      SAKE OF READABILITY, TO MAKE USE OF THIS FACILITY.             
  81.          IN ADDITION, COMMENTS ARE LEFT WHERE THEY ARE FOUND, UNLESS 
  82.      THEY ARE SHIFTED RIGHT BY PRECEEDING TEXT ON A LINE.           
  83.  
  84.    2.   ALL STATEMENTS AND DECLARATIONS BEGIN ON SEPARATE LINES.    
  85.  
  86.    3.   NO LINE MAY BE GREATER THAN 72 CHARACTERS LONG.  ANY LINE   
  87.      LONGER THAN THIS IS CONTINUED ON A SEPARATE LINE.              
  88.  
  89.  
  90.    4.   THE KEYWORDS "BEGIN", "END", "REPEAT", AND "RECORD" ARE     
  91.      FORCED TO STAND ON LINES BY THEMSELVES (OR POSSIBLY FOLLWED BY 
  92.      SUPPORTING COMMENTS).                                          
  93.         IN  ADDITION, THE "UNTIL" CLAUSE OF A "REPEAT-UNTIL" STATE- 
  94.      MENT IS FORCED TO START ON A NEW LINE.                         
  95.  
  96.    5.   A BLANK LINE IS FORCED BEFORE THE KEYWORDS "PROGRAM",       
  97.      "PROCEDURE", "FUNCTION", "LABEL", "CONST", "TYPE", AND "VAR".  
  98.  
  99.    6.   A SPACE IS FORCED BEFORE AND AFTER THE SYMBOLS ":" AND     
  100.      "".  ADDITIONALLY, A SPACE IS FORCED AFTER THE SYMBOL ":".    
  101.      NOTE THAT ONLY ""S IN DECLARATIONS ARE FORMATTED. ""S        
  102.      IN EXPRESSIONS ARE IGNORED.                                    
  103.  
  104.  
  105.  
  106.  [ INDENTATION RULES ]                                             
  107.  
  108.    1.   THE BODIES OF "LABEL", "CONST", "TYPE", AND "VAR" DECLARA-  
  109.      TIONS ARE INDENTED FROM THEIR CORRESPONDING DECLARATION HEADER 
  110.      KEYWORDS.                                                      
  111.  
  112.    2.   THE BODIES OF "BEGIN-END", "REPEAT-UNTIL", "FOR", "WHILE",  
  113.      "WITH", AND "CASE" STATEMENTS, AS WELL AS "RECORD-END" STRUC-  
  114.      TURES AND "CASE" VARIANTS (TO ONE LEVEL) ARE INDENTED FROM     
  115.      THEIR HEADER KEYWORDS.                                         
  116.  
  117.    3.   AN "IF-THEN-ELSE" STATEMENT IS INDENTED AS FOLLOWS:         
  118.  
  119.  
  120.     IF <EXPRESSION>
  121.                 THEN
  122.                    <STATEMENT>
  123.                 ELSE
  124.                    <STATEMENT>
  125.  
  126.  
  127.                       GENERAL ALGORITHM                             
  128.  
  129.  
  130.       THE STRATEGY OF THE PRETTYPRINTER IS TO SCAN SYMBOLS FROM     
  131.    THE INPUT PROGRAM AND MAP EACH SYMBOL INTO A PRETTYPRINTING      
  132.    ACTION, INDEPENDENTLY OF THE CONTEXT IN WHICH THE SYMBOL         
  133.    APPEARS.  THIS IS ACCOMPLISHED BY A TABLE OF PRETTYPRINTING      
  134.    OPTIONS.                                                         
  135.  
  136.       FOR EACH DISTINGUISHED SYMBOL IN THE TABLE, THERE IS AN       
  137.    ASSOCIATED SET OF OPTIONS.  IF THE OPTION HAS BEEN SELECTED FOR  
  138.    THE SYMBOL BEING SCANNED, THEN THE ACTION CORRESPONDING WITH     
  139.    EACH OPTION IS PERFORMED.                                        
  140.  
  141.       THE BASIC ACTIONS INVOLVED IN PRETTYPRINTING ARE THE INDENT-  
  142.    ATION AND DE-INDENTATION OF THE MARGIN.  EACH TIME THE MARGIN IS 
  143.    INDENTED, THE PREVIOUS VALUE OF THE MARGIN IS PUSHED ONTO A      
  144.    STACK, ALONG WITH THE NAME OF THE SYMBOL THAT CAUSED IT TO BE    
  145.    INDENTED.  EACH TIME THE MARGIN IS DE-INDENTED, THE STACK IS     
  146.    POPPED OFF TO OBTAIN THE PREVIOUS VALUE OF THE MARGIN.           
  147.  
  148.       THE PRETTYPRINTING OPTIONS ARE PROCESSED IN THE FOLLOWING     
  149.    ORDER, AND INVOKE THE FOLLOWING ACTIONS:                         
  150.  
  151.  
  152.      CRSUPPRESS      - IF A CARRIAGE RETURN HAS BEEN INSERTED       
  153.                        FOLLOWING THE PREVIOUS SYMBOL, THEN IT IS    
  154.                        INHIBITED UNTIL THE NEXT SYMBOL IS PRINTED.  
  155.  
  156.      CRBEFORE        - A CARRIAGE RETURN IS INSERTED BEFORE THE     
  157.                        CURRENT SYMBOL (UNLESS ONE IS ALREADY THERE) 
  158.  
  159.      BLANKLINEBEFORE - A BLANK LINE IS INSERTED BEFORE THE CURRENT  
  160.                        SYMBOL (UNLESS ALREADY THERE).               
  161.  
  162.      DINDENTONKEYS   - IF ANY OF THE SPECIFIED KEYS ARE ON TOP OF   
  163.                        OF THE STACK, THE STACK IS POPPED, DE-INDEN- 
  164.                        TING THE MARGIN.  THE PROCESS IS REPEATED
  165.                        UNTIL THE TOP OF THE STACK IS NOT ONE OF THE
  166.                        SPECIFIED KEYS.
  167.  
  168.      DINDENT         - THE STACK IS UNCONDITIONALLY POPPED AND THE  
  169.                        MARGIN IS DE-INDENTED.                       
  170.  
  171.      SPACEBEFORE     - A SPACE IS INSERTED BEFORE THE SYMBOL BEING  
  172.                        SCANNED (UNLESS ALREADY THERE).              
  173.  
  174.  [ THE SYMBOL IS PRINTED AT THIS POINT ]                        
  175.  
  176.      SPACEAFTER      - A SPACE IS INSERTED AFTER THE SYMBOL BEING   
  177.                        SCANNED (UNLESS ALREADY THERE).              
  178.  
  179.      GOBBLESYMBOLS   - SYMBOLS ARE CONTINUOUSLY SCANNED AND PRINTED 
  180.                        WITHOUT ANY PROCESSING UNTIL ONE OF THE      
  181.                        SPECIFIED SYMBOLS IS SEEN (BUT NOT GOBBLED). 
  182.  
  183.      INDENTBYTAB     - THE MARGIN IS INDENTED BY A STANDARD AMOUNT  
  184.                        FROM THE PREVIOUS MARGIN.                    
  185.  
  186.      INDENTTOCLP     - THE MARGIN IS INDENTED TO THE CURRENT LINE   
  187.                        POSITION.                                    
  188.  
  189.      CRAFTER         - A CARRIAGE RETURN IS INSERTED FOLLOWING THE  
  190.                        SYMBOL SCANNED.                              
  191.  
  192.  
  193.  
  194. *)
  195.  
  196.  (*Monaco's PASCAL PRETTYPRINTER for UCSD PASCAL
  197.  
  198.  
  199.  1)  To learn how to use the Prettyprinter, see "PRETTY.DOC"
  200.  
  201.  2)  Make certain that program to be prettyprinted is in logical unit #5.
  202.  
  203.  3)  If you modify the source (PARTA, PARTB, PARTC), you must recompile 
  204.  PRETTY; note that the $I files are supposed to be on number 5.
  205.  
  206.  4)  Object file "PRETTY" should execute on your system as is: no terminal
  207.  dependent software is used.
  208.  
  209.  5)  The author has found that the prettyprinter works best if the input 
  210.  to it is left-justified (no leading blanks on any line). I suggest that 
  211.  you write your PASCAL Program with indentations; then use "REM.BLANKS.CODE"
  212.  to get rid of leading blanks and build a file to be input to the
  213.  Prettyprinter.
  214.  "REM.BLANKS.CODE" expects complete file specifications less ".text" such as
  215.  #5:myprog.  
  216.  
  217.  6) Lastly, the purpose of prettyprinting is to standardize format for PASCAL
  218.  programs to facilitate portability and to increase user familiarity with 
  219.  the suggested format of Jensen and Wirth. To this end, all programs that you
  220.  expect to pass on should be prettyprinted! (NOTE: The prettyprinter is living
  221.  proof of this itself). Note: To this end, the prettyprinter transliterates 
  222.  all lowercase characters not in quoted strings to uppercase and converts all 
  223.  brackets to (**). ( You can use a single ' inside of a comment )
  224.  *)
  225.