1DSPLOG - PROGRAM PAGE 1 TOTAL PAGES 1 FILE NAME: DSPLOG.PGM + 30-DEC-81 *** "C@SD" STARTS EMBEDDED USER MANUAL. C* PROGRAM ID: DSPLOG (DISPLAY LOGIC) C* C* CREATED ON 15 APR 81 FOR PROJECT 113201 C* AS OF: 19 NOV 81 (SOURCE ONLY UPDATED 30 DEC 81 FOR DOCUMENTATION) C* C* ANALYST/PROGRAMMER: MAJOR CARL S. ZIMMERMAN, USAFETAC/ADG C* C* DESCRIPTION: THIS PROGRAM IS DESIGNED TO PRINT "DISPLAY LOGIC C* STRUCTURE" DOCUMENTATION CARDS FROM ANY SOURCE FILE(S). IT IS C* INTENDED TO BE USED ON FORTRAN SOURCE PROGRAM FILES WHICH CONTAIN C* EMBEDDED USER MANUALS OR SPECIAL COMMENT CARDS REFLECTING THE C* LOGICAL STRUCTURE OF THE FORTRAN PROGRAM. USAGE IS AS FOLLOWS: C* C* 1) UNDER RSX ON THE PDP SYSTEM: C* C* >RUN DSPLOG (OR) RUN $DSPLOG C* THE PROGRAM WILL SOLICIT FILE SPECIFICATIONS FROM THE USER. C* RESPOND WITH ANY OF THE FOLLOWING: C* C* A) ANY LEGAL "FILENAME.TYP", WHICH WILL BE TAKEN AS THE NAME OF C* A SOURCE FILE TO BE SCANNED FOR LOGIC CODE; C* C* B) "@FILENAME.TYP", WHICH WILL BE USED AS THE NAME OF AN INDIRECT C* FILE CONTAINING THE NAMES OF ONE OR MORE SOURCE FILES TO BE C* SCANNED FOR LOGIC CODE; C* C* C) TO TERMINATE FILE PROCESSING AND DISPATCH PRINT TO C* PRINTER. THE OUTPUT FILENAME IS "DISPLOGIC.LST" UNDER THE C* USER'S UIC. THIS ALLOWS THE USER LATER TO SPOOL MULTIPLE COPIES C* IF DESIRED. ONE COPY WILL BE SPOOLED TO THE PRINTER AUTOMATIC- C* ALLY WHEN THE PROGRAM STOPS. C* C* WARNING: IF YOU RUN FROM A PRINTER TERMINAL, SOME OF THE MESSAGES C* WILL BE UNREADABLE BECAUSE OF OVERPRINTING. THE OUTPUT MESSAGES C* ARE DESIGNED TO MAKE A NEAT DISPLAY ON A CRT. C* C* 2) UNDER DOS ON THE IBM SYSTEM: C* ((((( NOT YET IMPLEMENTED ))))) C* C* 3) UNDER CMS ON THE IBM SYSTEM: C* ENTER "DSPLOG FILENAME", WHERE "FILENAME" IS THE NAME OF A FILE C* WHOSE FILETYPE IS FORTRAN. THAT ENTRY WILL CALL THE DSPLOG EXEC C* TO CREATE THE NECESSARY FILEDEF COMMANDS AND EXECUTE THE DSPLOG C* PROGRAM. THE OUTPUT FILENAME IS "FILENAME DSPLOGIC" IN THE C* USER'S A-DISK. C* C* ANY NUMBER OF FILENAMES MAY BE SUPPLIED, IN ANY DESIRED ORDER. C* THE PROGRAM WILL START PRINTING FROM EACH SOURCE FILE AT THE TOP C* OF A NEW PAGE. PRINTOUT BEARS DUAL PAGE NUMBERING--GLOBAL (WHICH C* IS CONTINUOUS THROUGHOUT THE PRINT) AND LOCAL (WHICH RESTARTS WITH C* EVERY NEW INPUT SOURCE FILE). IF MORE THAN ONE FILE IS INPUT, C* THEN AN INDEX WILL BE PRINTED AT THE END. 1DSPLOG - PROGRAM PAGE 2 TOTAL PAGES 2 C* C* INPUT: FILE(S) SPECIFIED BY USER, ACCESSED UNDER LUN 1; C* INDIRECT FILE (@), ACCESSED UNDER LUN 3 (RSX ONLY). C* C* OUTPUT: A SINGLE PRINT FILE ON LUN 6 REFLECTING SPECIALLY MARKED C* LINES FROM THE INPUT FILE AS FOLLOWS: C* "C@SD" IN COL.1-4: COL.7-80 OF THIS INPUT LINE WILL BECOME C* THE PAGE HEADING LINE; LOCAL PAGE NUMBERING WILL RESTART C* FROM 1, AND A PAGE EJECT TO THIS NEW HEADING WILL OCCUR C* AT THE NEXT PRINTABLE LINE (SEE BELOW). A FLAG MESSAGE WILL C* BE PRINTED IN THE RIGHT MARGIN OF THE OUTPUT. C* "CH" IN COL.1-2: IF THIS IS THE FIRST SPECIAL LINE FOUND, C* THEN IT IS TREATED EXACTLY AS A "C@SD" LINE (SEE ABOVE). C* IF IT IS NOT THE FIRST SUCH LINE, THEN IT IS TREATED C* SIMILARLY EXCEPT THAT LOCAL PAGE NUMBERING IS NOT RESTARTED. C* "C*" IN COL.1-2: THE ENTIRE LINE IS PRINTED EXACTLY AS INPUT, C* UNLESS RECOGNITION IS DISABLED (SEE "CF" LINE BELOW). C* "CF" IN COL.1-2: DISABLE (TURN OFF) RECOGNITION OF "C*". C* THIS ALLOWS SUPPRESSING OF PRINTING OF COMMENT LINES WHICH C* WERE STARRED FOR SOME REASON OTHER THAN DISPLAYING LOGIC C* STRUCTURE. C* "CN" IN COL.1-2: ENABLE (TURN ON) RECOGNITION OF "C*" C* LINES (THIS IS THE DEFAULT CONDITION WHEN FILE INPUT BEGINS). C* "CA" IN COL.1-2: TURN ON PRINTING OF ALL INPUT LINES UNTIL C* THE NEXT "C*" LINE IS ENCOUNTERED (WHETHER OR NOT RECOGNITION C* OF "C*" LINES IS ENABLED). THIS FEATURE IS USEFUL EITHER TO C* PRINT EXISTING UN-STARRED COMMENT LINES OR TO PRINT PORTIONS C* OF UN-COMMENTED CODE (FOR EXAMPLE, THE SPECIFICATION STATE- C* MENTS AT THE BEGINNING OF A FORTRAN PROGRAM). C* "C@PG" IN COL.1-4: CAUSE PAGE-EJECT IN THE PRINTOUT. THIS C* FEATURE MAY BE USED TO AVOID SPLITTING PARAGRAPHS OR LOGIC C* STRUCTURES ACROSS PAGE BOUNDARIES. C* C* NOTES: C* C* 1) IF "C*" LINES ARE FOUND BEFORE A "CH" OR "C@SD" LINE IN A C* SINGLE FILE, THEY WILL BE PRINTED UNDER A BLANK PAGE HEADING. C* C* 2) THE "SD" LINES NEED "@" IN COL.5 ALSO, TO CONFORM TO THE C* REQUIREMENTS OF THE "PRINTDOC" PROGRAM. IF AN "SD" LINE IS C* INCLUDED TO START AN EMBEDDED USER'S MANUAL, THEN THERE MUST BE C* MUST BE A CORRESPONDING "C@ED@" LINE TO TERMINATE IT. THIS IS C* NORMALLY PLACED BEFORE ANY EXECUTABLE CODE. IT WILL NOT BE C* PRINTED BY DSPLOG, ALTHOUGH A FLAG MESSAGE WILL BE PRINTED IN C* THE RIGHT MARGIN OF THE OUTPUT. C* C* 3) THE COMMENTS IN THE SOURCE TEXT OF THIS PROGRAM ARE AN EXAMPLE C* OF SUCH SPECIAL COMMENT USAGE IN A STRUCTURED PROGRAM WHERE C* INDENTATION IS USED TO PRESENT THE PROGRAM STRUCTURE TO THE C* READER. C* C* SUBPROGRAMS USED: C* 1) ON PDP SYSTEM, C* PDP SYSTEMS ROUTINES: DATE C* ETAC SUBROUTINES: TRMSG C* INTERNAL SUBROUTINES: HEDSTO, FPRINT 1DSPLOG - PROGRAM PAGE 3 TOTAL PAGES 3 C* 2) ON IBM SYSTEM UNDER CMS, C* INTERNAL SUBROUTINES: HEDSTO, FPRINT, INSETF (FUNCTION). C* C* STORAGE REQUIREMENTS: C* 1) ON PDP SYSTEM, 6K WORDS (12 K BYTES) C* 2) ON IBM SYSTEM, UNDER CMS, 158K BYTES (30K PGM + 128K BASE) C* C* TIMING: DEPENDENT ON NUMBER AND LENGTH OF USER-SUPPLIED INPUT C* FILES. C* *** "C@ED" ENDS EMBEDDED USER MANUAL. C*-------------------- END OF EMBEDDED USER'S MANUAL -------------------- *** "CF" CARD DISABLED "C*" RECOGNITION. *** "CN" CARD ENABLED "C*" RECOGNITION. C* C@ BAD "C@" LINE PRODUCES ERROR MESSAGE: + <== BAD "C@" CARD FORMAT ************* C* *** "CA" CARD TURNED ON "ALL PRINT" SWITCH. C IMPLICIT REAL(A), BYTE(B), INTEGER*2(C-Z) C C* THIS LINE TURNS OFF "ALL-PRINT" SWITCH C* OPEN PRINT FILE C* OPEN WORK FILE FOR DEVELOPING INDEX C* INITIALIZE TOTALS FOR FILE, HEADER, PAGE AND LINE COUNTS C* INITIALIZE FOR DIRECT INPUT OF FILE NAMES C* WHILE AN INPUT FILE NAME IS AVAILABLE C* OPEN THAT FILE FOR INPUT C* INITIALIZE INPUT/OUTPUT COUNTERS AND HEADING/PAGING C* BLANK OUT HEADING AREA C* ENABLE "C*" RECOGNITION C* WHILE CARD IMAGE IS AVAILABLE (I.E. NOT EOF) C* READ A CARD IMAGE C* INCREMENT INPUT COUNTER C* FIRST 2 CHARACTERS IN IMAGE DETERMINE CASE: C* CASE 1: 'CH' CARD C* STORE NEW HEADING C* IF FIRST SPECIAL LINE C* OUTPUT MAJOR PAGE HEADING AND FILENAME VIA 'HEDWRT' C* ELSE C* INCREMENT SUBHEADING COUNTER C* STORE NEW HEADING LINE IN INDEX FILE C* CASE 2: 'C*' CARD C* TURN OFF "ALL-PRINT" SWITCH C* IF RECOGNITION IS ENABLED C* PRINT CARD BY CALLING 'FPRINT' C* INCREMENT OUTPUT COUNTER C* CASE 3: 'C@' CARD C* IF "C@SD" CARD C* STORE NEW HEADING C* OUTPUT MAJOR PAGE HEADING AND FILE NAME VIA 'HEDWRT' C* STORE NEW HEADING LINE IN INDEX FILE C* PRINT SPECIAL MESSAGE C* ELSE IF "C@ED" CARD C* PRINT SPECIAL MESSAGE C* ELSE IF "C@PG" CARD C* PRINT SPECIAL MARGIN MESSAGE 1DSPLOG - PROGRAM PAGE 4 TOTAL PAGES 4 C* FORCE PAGE-EJECT AT NEXT LINE-PRINT C* ELSE CARD HAS BAD FORMAT C* PRINT ERROR MESSAGE WITH CARD + @PG@ CARD FORCES PAGE EJECT 1DSPLOG - PROGRAM PAGE 5 TOTAL PAGES 5 C* CASE 4: 'CF' CARD C* DISABLE C* RECOGNITION C* PRINT 'DISABLE' MESSAGE C* INCREMENT OUTPUT COUNTERS C* CASE 5: 'CN' CARD C* ENABLE C* RECOGNITION C* PRINT 'ENABLE' MESSAGE C* INCREMENT OUTPUT COUNTERS C* CASE 6: 'CA' CARD C* TURN ON "ALL PRINT" SWITCH C* PRINT SPECIAL MESSAGE C* CASE 7: ANYTHING ELSE C* IF "ALL PRINT" IS ENABLED C* PRINT THE LINE C* INCREMENT OUTPUT COUNTER C* TELL USER HOW MANY LINES INPUT FROM THIS FILE C* IF ANY DOCUMENTATION WAS PRINTED FROM THIS FILE C* PRINT THE INPUT AND OUTPUT LINE COUNTS C* ADD THE INPUT COUNT TO TOTAL COUNT (FOR MULTIPLE FILES) C* CLOSE INPUT FILE C* TELL USER HOW MANY PAGES OF OUTPUT TO EXPECT, ETC. C* IF TOTALS SUGGEST INADEQUATE DOCUMENTATION IN THE INPUT FILES C* WARN USER C* CLOSE AND REWIND INDEX FILE C* IF MORE THAN ONE FILE WAS INPUT C* WRITE INDEX HEADING C* WHILE AN INDEX LINE IS AVAILABLE (I.E. NO EOF) C* READ AN INDEX LINE C* WRITE THAT INDEX LINE C* WRITE SUMMARY OF PROCESSING C* DISPATCH PRINT C* STOP. 1UTILITY SUBROUTINES FOR 'DSPLOG' PROGRAM PAGE 6 TOTAL PAGES 6 C* C* HEDSTO - SUBROUTINE IN 'DSPLOG' C* C* THIS SUBROUTINE STORES THE TEXT FROM EACH HEADING CARD FOUND C* BY THE MAIN PROGRAM. C* C* - - - - - - - - - C* C* STORE NEW HEADING C* RESET LINE COUNT TO FORCE PAGE EJECT AT NEXT PRINT LINE C* RETURN TO CALLER. C* C* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C* C* HEDWRT - ENTRY IN SUBROUTINE 'HEDSTO' IN PROGRAM 'DSPLOG' C* C* THIS ENTRY WRITES FILE IDENTIFICATION IN SUCH A WAY AS TO FORCE A C* NEW PAGE HEADING TO START PRINTING. IT IS USED WHENEVER A NEW C* MAJOR HEADING IS ENCOUNTERED, WHICH IS NORMALLY AT OR NEAR THE C* START OF EACH SOURCE FILE PROCESSED. C* C* C* RESET PAGE COUNTER C* INCREMENT MAJOR HEADING COUNTER C* PRINT OUTPUT FILE IDENTIFICATION VIA FPRINT TO FORCE NEW HEADING C* AND FOLLOW WITH DATE AND TWO BLANK LINES C* RETURN TO CALLER. C*---------------------------------------------------------------------- C* C* SUBROUTINE 'FPRINT' PRINTS SELECTED LINES FOR 'DSPLOG'. C* IT ALSO PUTS OUT PAGE HEADINGS AT APPROPRIATE INTERVALS, WITH C* BOTH LOCAL AND GLOBAL NUMBERING. C* C* - - - - - - - - C* C* INCREMENT OUTPUT LINE COUNT FOR PAGE C* IF THE LAST PRINTED PAGE IS FULL C* INCREMENT PAGE COUNTS C* WRITE PAGE HEADING C* RESET LINE COUNT FOR PAGE C* WRITE THE SELECTED LINE C* RETURN TO CALLER. 0 486 LINES SOURCE TEXT INPUT 243 LINES DOCUMENTATION OUTPUT: 50.0 PERCENT