.TITLE DOC .MCALL ENTER,LEAVE,TINIT,TTYOUT,PSTR .MCALL FINIT$,FSRSZ$,QIOW$ .MCALL OPEN$W,OPEN$,OPEN$R,GET$,PUT$,CLOSE$ .MCALL CSI$,CSI$1,CSI$2,GMCR$,EXIT$S .MCALL CSI1G,CSI2 .MCALL GCML,RCML$,GCMLB$ .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A .MCALL FDOP$R,NMBLK$ .MCALL EXCHS ;+ ; ; DOC -- PROGRAM TO ALLOW FOR THE QUICK AND EASY ; PRODUCTION OF STANDARD DOCUMENTATION. THIS ; PROGRAM TAKES CONTROL INPUT FROM A SPECIFIED ; INPUT FILE AND GENERATES RUNOFF SOURCE FILES. ; IF THE FILE TO BE USED IS NOT SPECIFIED, IT ; USES A STANDARD DEFAULT FILE. ; ; AUTHOR: W. KORENDYK ; WRITTEN: NOVEMBER 22, 1977 ; LAST MOD: JANUARY 16, 1978 ; ; VERSION: 04.00 ; ;- ; .SBTTL >I. ERROR CONTROL ; ; ERROR SUPPORT ADDRESSES ; ERRPFX::PSTR ^*/DOC -- /* ;COME HERE IF AN RETURN ;ERROR IS ENCOUNTERED ; DIE:: CLOSE$ #OUTFDB ;TRY CLOSING OUT FILE MOV CURFDB,R1 ;ATTEMPT TO CLOSE 1$: CLOSE$ @R1 ;ALL THE INPUT FILES TST -(R1) ;POINT TO PREVIOUS CMP #FDBS,R1 ;IF THERE IS ONE, BLOS 1$ ;AND THERE IS ; RSTART: MOV SPSAVE,SP ;RESTORE THE STACK POINTER MOV #FDBS,CURFDB ;RESET FDB QUEUE MOV #BASE,POINT ;AND THE MARK LIFO RCML$ #GCBLK ; BR START2 ;NOW START AGAIN ; TERMIN: EXIT$S ;AND STOP ON AN EOF ; SPSAVE: .WORD 0 ;SAVE SP HERE .SBTTL >II. MAIN LINE CODE START: TINIT TILUN,TTYEVF ;INIT FOR TERMINAL I/O FINIT$ ;AND FOR FILE I/O TTYOUT #PRAMB,#LPRAMB ;OUTPUT PREAMBLE ; START2: MOV SP,SPSAVE ;SAVE SP FOR ERROR RESTART GCML #GCBLK,,,TERMIN,GCERR ;GET THE COMMAND LINE CSI1G #CSBLK,GCBLK,CS1ERR ;AND PARSE IT CSI2 #CSBLK,OUTPUT,,CS2ERR ;GET OUTPUT NAME BITB #CS.NMF,C.STAT(R0) ;IS ONE GIVEN? BNE 4$ ;YES CALL ERRPFX ;OUTPUT THE ERROR PSTR ^*/SYNTAX ERROR/* ;FROM HERE JMP DIE 4$: MOV #OUDSDS,R5 ;WHERE TO PUT DSDS CALL SAVEDS ;AND PUT IT THERE ; BITB #CS.EQU,C.STAT(R0) ;IS THERE AN '='? BEQ 1$ ;IF EQ THEN NO ; CSI2 #CSBLK,INPUT,,CS2ERR ;PARSE INPUT NAME BITB #CS.NMF,C.STAT(R0) ;IS THERE A NAME? BEQ 1$ ;IF EQ THEN NO FDOP$R @CURFDB,,#CSBLK+C.DSDS 1$: OPEN$W #OUTFDB,,,,,,IOERR ;OPEN OUTPUT FILE OPEN$R @CURFDB,,,,,,IOERR ;OPEN INPUT FILE ; ; MOV #BUF1,R1 ;ADDRESS OF INPUT BUFFER, CALL GOTOIT ;GO TO IT ; DONE: CLOSE$ @CURFDB,IOERR ;CLOSE IN-FILE CLOSE$ #OUTFDB,IOERR ;CLOSE OUT-FILE JMP RSTART ;AND RESTART ; ;+ ; SAVEDS - ROUTINE TO SAVE THE DSDS AS PARSED INTO ; THE CSI CONTROL BLOCK. ; ; INPUTS: R5 => WHERE TO SAVE DSDS ; ;- SAVEDS: ENTER R0,R1,R5 ;SAVE REGISTERS MOV #CSBLK+C.DSDS,R0 ; ADDRESS OF DSDS MOV #6,R1 ;LOOP COUNTER 1$: MOV (R0),(R5)+ ;MOVE IT IN CLR (R0)+ ;CLEARING OUT CSBLK SOB R1,1$ LEAVE ;LEAVE RETURN ;RETURN .SBTTL >III. WRITING AND READING BLOCK ;+ ; ; GOTOIT -- ROUTINE WHICH ACTUALLY ACCOMPLISHES ; THE READING AND WRITING FROM FILE TO FILE. ; ; INPUTS: ?????? ; ; OUTPUTS: ?????? ; ;- GOTOIT: ENTER R1,R2,R3,R4 ; 100$: GET$ @CURFDB,R1 ;GET A RECORD BCC 10$ ;ALL IS COOL CMPB #IE.EOF,F.ERR(R0) ;AN EOF? BEQ 200$ ;WE'RE DONE CALL IOERR ;SOMETHING ELSE 10$: MOV F.NRBD(R0),R2 ;GET RECORD SIZE MOV #CONTAB,R0 ;CONTROL CHARACTER TABLE 11$: CMPB (R0)+,(R1) ;IS RECORD A CONTROL LINE? BEQ 20$ ;YES IT IS TSTB (R0) ;WAS THAT THE LAST CON. CHAR? BEQ 110$ ;YES, SO NORMAL OUTPUT BR 11$ ;NO, SO TRY THE NEXT ONE. ; 20$: SUB #CONTAB,R0 ;GET DISPLACEMENT IN TABLE DEC R0 ;IN ZERO OFFSET ASL R0 ;AS A WORD COUNT CALL @DISTAB(R0) ;DISPATCH TO ROUTINE. BR 100$ ;THAT DONE, RESUME INPUT ; 110$: CALL OUTPUT ;NORMAL OUTPUT BR 100$ ;GO FOR MORE ; 200$: LEAVE ;THAT'S ALL FOLKS RETURN ; .SBTTL >IV. CONTROL CHARACTER .SBTTL > A. RECOGNITION TABLE ; ; CONTROL CHARACTER RECOGNITION TABLE ; CONTAB: .BYTE '# ;MARK FILE POSITION .BYTE '? ;RESUME WITH TERMINAL INPUT .BYTE '$ ;FILL IN STANDARD TITLE .BYTE '@ ;INDIRECT FILE ACCESS .BYTE '\ ;TEMINAL OUTPUT .BYTE 0 ;TABLE TERMINATION .EVEN .SBTTL > B. DISPATCH TABLE ; ; CONTROL CHARACTER DISPATCH TABLE ; DISTAB: .WORD MARK ;MARK FILE POSITION .WORD INTI ;RESUME WITH TERMINAL INPUT .WORD TITLE ;FILL IN STANDARD TITLE .WORD INDIR ;INDIRECT FILE ACCESS .WORD PROMPT ;TERMINAL OUTPUT .WORD 0 ;TABLE TERMINATION .SBTTL >V. CONTROL FUNCTIONS .SBTTL > A. REMEMBER FILE POSITIONS .SBTTL > 1. MARK CURRENT POSITION ;+ ; MARK -- ROUTINE TO MARK THE CURRNT POSITION, AND ; REMEMBER IT FOR LATER REFERENCE. ; ;- MARK: ENTER R1,R2,R3,R5 MOV #OUTFDB,R0 ;FILE TO MARK MOV POINT,R5 ;THE "STACK" POINTER CMP #BOT,R5 ;STILL IN "STACK" BLOS 10$ ;NO, ERROR CALL .MARK ;OBTAIN THE POSITION, BCC 5$ ;WORKED GREAT CALL IOERR ;NOT SO GREAT 5$: MOV R1,(R5)+ ;AND STACK THEM. MOV R2,(R5)+ ; MOV R3,(R5)+ ; MOV R5,POINT ;AND REMEMBER POINTER 6$: LEAVE RETURN ; 10$: CALL ERRPFX PSTR ^#/*** WARNING ***/# PSTR ^#/MAX LEVEL OF EMBEDDING REACHED/# CALL DIE BR 6$ ; .SBTTL > 2. UNMARK AND REWIND OUTPUT ; ;+ ; UNMARK -- ROUTINE TO REWIND FILE TO THE LAST MARK. ; ;- .MCALL OFNB$U UNMARK: ENTER R1,R2,R3,R5 MOV #OUTFDB,R0 ;FILE TO REWIND MOV POINT,R5 ;GET "STACK POINTER CMP #BASE,R5 ;CHECK BOUNDS BHIS 10$ ;NO PLACE TO REWIND TO MOV -(R5),R3 MOV -(R5),R2 MOV -(R5),R1 MOV R5,POINT ;NEW POINTER CLOSE$ ,IOERR OFNB$U ,,,,,,IOERR CALL .POINT ;POSITION IN FILE BCC 10$ ;WORKED GREAT CALL IOERR ;NOT SO GREAT 10$: LEAVE RETURN ; .SBTTL > 3. REMOVE LAST MARKED POSITION ;+ ; CLEAR -- ROUTINE TO REMOVE THE LAST MARKED POSITION ; ;- CLEAR: CMP #BASE,POINT ;AT BASE? BHIS 1$ ;YEH, NOTHING TO DO SUB #6,POINT ;REMOVE MARK 1$: RETURN ; ; .SBTTL > 4. MARKING STACK ; ;+ ; STORAGE FOR FILE MARKING ; ; NOTE THAT NESTING LEVEL IS SET AT 5 ; ;- LEV =5 POINT: .WORD BASE BASE: .BLKW LEV*3 BOT: .WORD 0 .SBTTL > B. BEGIN READING FROM TERMINAL ;+ ; INTI -- ROUTINE TO READ IN FROM THE TEMINAL. ; INPUT TERMINATES AND RESORTS BACK TO ; THE CALLER ON RECEIPT OF A EOF. ; ; INPUTS: R1 = CURRENT RECORD BUFFER ADDRESS ; R2 = CURRENT RECORD BUFFER SIZE ; ; OUTPUTS: SAME ; ;- INTI: ENTER R1,R2 OPEN$ #TIFDB,,,,,,IOERR ;OPEN TERMINAL AS FILE GET$ ,R1 ;READ A RECORD BCC 2$ ;WAS GOOD CMPB #IE.EOF,F.ERR(R0) ;AN EOF? BEQ 10$ ;YES CALL IOERR ;SOMETHING ELSE 1$: GET$ #TIFDB,R1 ;READ NEXT RECORD BCC 2$ ;GOT IT CMPB #IE.EOF,F.ERR(R0) ;AN EOF? BEQ 20$ ;YES CALL IOERR ;NO, SOMETHING ELSE 2$: MOV F.NRBD(R0),R2 ;GET RECORD SIZE CALL OUTPUT ;OUTPUT RECORD IN HAND BR 1$ ;AND GET MORE ; 10$: CALL UNMARK ;UNMARK THE OUTPUT BR 30$ ;AND LEAVE ; 20$: CALL CLEAR ;CLEAR THE LAST MARK 30$: CLOSE$ #TIFDB,IOERR ;CLOSE OFF TERMINAL LEAVE ; RETURN ; .SBTTL > C. OUTPUT STANDARD TITLE .SBTTL > 1. TRANSFER TO OUTPUT LINE ;+ ; ; MACRO AND ASSOCIATED SUBROUTINE WHICH ALLOWS ; FOR THE TRANSFER OF CHARACTER STRINGS. MACRO ENTERS ; ASSUMING THAT THE REGISTER R1 POINTS TO WHERE ; THE CHARACTER STRINGS ARE TO BE TRANSFERRED. ; ;- .MACRO TRAN STR,LEN,?L1 MOV LEN,L1 JSR R5,TRANS .WORD STR L1: .WORD 0 .ENDM ; ; TRANS: ENTER R2,R3 MOV (R5)+,R2 ;GET STRING ADDRESS MOV (R5)+,R3 ;AND ITS LENGTH 1$: MOVB (R2)+,(R1)+ ;TRANSFER SOB R3,1$ LEAVE RTS R5 ;RETURN ; ;+ ; ; MACRO TO FORCE OUTPUT OF RECORD ; ;- .MACRO OUT,REC,LEN MOV REC,R1 MOV LEN,R2 CALL OUTPUT .ENDM .SBTTL > 2. FILL IN OUTPUT LINE ;+ ; ; TITLE -- ROUTINE TO OUTPUT THE TITLE AND HEADER ; IN THE FOLLOWING FORMAT: ; ; .TITLE NAME -- DESCRIPTION ; .PAGE ; .INDENT 50 ; NAME ; .SKIP 1 ; .CENTER ; NAME -- DESCRIPTION ; ; WHERE NAME AND DESCRIPTION ARE PROMPTED FOR FROM ; TI: ON LUN =TILUN. ; ; INPUTS: R1 = ADDRESS OF LAST BUFFER READ ; R2 = LENGTH OF LAST BUFFER READ ; ;- TITLE: ENTER R1,R2 TTYOUT #NPROM,#LNPROM ;ISSUE NAME PROMPT MOV #NAME,READ+Q.IOPL ;SET UP FOR READ DIR$ #READ,DIRERR ;READ IN NAME MOV RDST+2,LNAME ;GET LENGTH OF NAME BEQ 10$ ;IF NOTHING THERE, FORGET IT ; TTYOUT #DESPR,#LDESPR ;DESCRIPTION PROMPT MOV #DESC,READ+Q.IOPL ;SET UP FOR READ DIR$ #READ,DIRERR ;READ IN DESCRIPTION MOV RDST+2,LDESC ;GET ITS LENGTH BEQ 10$ ;IF NOTHING THERE, FORGET IT ; MOV #LINE1,R1 ;POINTER FOR LINE1 TRAN TITL,#LTITL ;TRANSFER ".TITLE" MOV R1,LINE7 ;REMEMBER START OF LINE 7 TRAN NAME,LNAME ;TRAN NAME TRAN DASH,#LDASH ;TRAN " -- " TRAN DESC,LDESC ;TRAN DESCRIPTION TRAN LOW,#LLOW ;FORCE TO LOWER CASE MOV R1,R2 ;DETERMINE LENGTH SUB #LINE1,R2 ;OF LINE 1 MOV R1,LLINE7 ;AND THE DETERMINE SUB LINE7,LLINE7 ;LEN OF LINE 7 MOV #LINE1,R1 ;RESET POINTER TO CALL OUTPUT ;OUTPUT LINE 1 ; OUT #LINE2,#LLINE2 OUT #LINE3,#LLINE3 OUT #NAME,LNAME OUT #LINE5,#LLINE5 OUT #LINE6,#LLINE6 OUT LINE7,LLINE7 ; 10$: LEAVE RETURN .SBTTL > 3. PROMPT BUFFERS .NLIST BEX ; ;+ ; ; PROMPTS FOR NAME AND DESCRIPTION, AND THE READ QIO ; ;- NPROM: .ASCII /Please enter name of routine (program) ?/ LNPROM =.-NPROM ; DESPR: .ASCII /Please enter a one line description/ .ASCII /?/ LDESPR =.-DESPR ; ; .MCALL QIOW$ READ: QIOW$ IO.RLB,TILUN,TTYEVF,,RDST,, RDST: .BLKW 2 .LIST BEX .SBTTL > 4. LINE BUFFERS .NLIST BEX ;+ ; ; THE LINES AND BUFFERS WHICH CONSTITUTE THE ; STANDARD TITLE AND HEADER. ; ;- ; ; THE FIRST AND MAIN LINE ; LINE1: .BLKB 80. ; ; SUBSEQUENT LINES ; LINE2: .ASCII /.PAGE/ LLINE2 =.-LINE2 ; LINE3: .ASCII /.INDENT 50/ LLINE3 =.-LINE3 ; LINE5: .ASCII /.SKIP 1/ LLINE5 =.-LINE5 ; LINE6: .ASCII /.CENTER/ LLINE6 =.-LINE6 .EVEN ; LINE7: .WORD LINE1 ;HOLDS ADDRESS OF LINE 7 LLINE7: .WORD 80. ;HOLDS LENGTH OF LINE 7 ; ; AND THE BUFFERS ; TITL: .ASCII /.TITLE ^^/ LTITL =.-TITL ; DASH: .ASCII / -- / LDASH =.-DASH ; LOW: .ASCII /\\/ ;FORCE TO LOWER CASE LLOW =.-LOW .EVEN ; NAME: .BLKB 20. ;WHERE THE NAME IS LNAME: .WORD 20. ;AND ITS LENGTH ; DESC: .BLKB 60. ;WHERE THE DESCRIPTION IS LDESC: .WORD 60. ;AND ITS LENGTH ; .LIST BEX .SBTTL > D. INDIRECT FILE PROCESSING .SBTTL > 1. PROCESS NEXT LEVEL ; ;+ ; ; INDIR -- ROUTINE TO OPEN THE NEXT LEVEL OF FILE ; INDIRECTION. CURRENTLY, EACH FILE IS LEFT ; OPEN AS THE NEXT LEVEL OF INDIRECTION IS ; ATTAINED. HOPEFULLY, THIS CAN BE RELIEVED ; LATER WITH THE USE OF THE MARK AND POSITION. ; ; INPUTS: R1 = ADDRESS OF LAST RECORD READ. ; ("@FILENAME") ; R2 = LENGTH OF LAST RECORD READ ; ;- INDIR: ENTER R1,R2 INC R1 ;SKIP OVER '@' DEC R2 ; CALL PRSE ;PARSE THE NAME GIVEN CALL GETFDB ;GET NEXT AVALABLE FDB BCC 1$ ;ISN'T ONE TO GET CALL 3$ ;ISSUE WARNING BR 2$ ;AND CONTINUE 1$: FDOP$R R0,,#CSBLK+C.DSDS ;INSERT DSDS OPEN$R R0,,,,,,IOERR ;OPEN THE FILE CALL GOTOIT ;GO TO IT FROM THERE CLOSE$ @CURFDB,IOERR ;DONE WITH THIS FILE CALL RELFDB ;FREE FDB 2$: LEAVE ; RETURN ; ; ; 3$: CALL ERRPFX ;ERROR PREFIX PSTR ^#/***WARNING***/# PSTR ^#/MAX LEVEL OF INDIRECTION EXCEEDED/# PSTR ^#/RECORD IN ERROR: /# TTYOUT R1,R2 PSTR ^#/FURTHER LEVELS IGNORED/# RETURN .SBTTL > 2. PARSE FILE NAME ;+ ; ; PRSE -- ROUTINE TO PARSE THE GIVEN FILE NAME, AND ; LEAVE RESULTING DSDS IN CSI BLOCK. ; ; INPUTS: R1 = COMMAND LINE ; R2 = LENGTH OF COMMAND LINE ; ; OUTPUTS: R0 = ADDRESS OF CSI BLOCK ; CSI BLOCK OFFSET C.DSDS IS FILLED ; AS FOR FIRST PARSE OF OUTPUT ; SPECIFIER. ; ;- PRSE: CSI$1 #CSBLK,R1,R2 ;PARSE FILE NAME BCC 1$ ;WAS COOL CALL CS1ERR ;NOT GOOD 1$: CSI$2 ,OUTPUT ;GET A DSDS BCC 2$ ;GOT IT. CALL CS2ERR ; 2$: RETURN ; .SBTTL > 3. GET NEXT AVAILABLE FDB ; ;+ ; ; GETFDB -- ROUTINE TO PULL THE NEXT AVAILABLE ; FDB FROM THE LIST OF FDBS. ; ; OUTPUTS: CURFDB = ADDRESS OF FDB POINTER ; R0 = FDB POINTER ; CARRY SET IF NO FDB AVAILABLE ; ;- GETFDB: ENTER R1 MOV CURFDB,R1 ;GET CURRENT POINTER MOV (R1)+,R0 ;GET FDB FROM IT MOV (R1),R0 ; BEQ 1$ ;NOTHING THERE MOV R1,CURFDB ;UPDATE POINTER CLC ;INDICATE SUCCESS BR 2$ ;LEAVE 1$: SEC ;INDICATE FAILURE 2$: LEAVE RETURN .SBTTL > 4. RELEASE CURRENT FDB ; ;+ ; ; RELFDB -- ROUTINE WHICH TAKES THE CURRENTLY POINTED ; TO FDB AS DEFUNCT, AND BACKS UP THE LIST TO THE ; LAST AVAILABLE FDB. ; ; OUTPUTS: CARRY SET IF THERE WAS NO LAST AVAILABLE FDB ; ;- RELFDB: ENTER R1 MOV CURFDB,R1 ;GET CURRENT CMP #FDBS,-(R1) ;UPDATE BHI 1$ ;STILL IN TABLE TST (R1)+ ;GET BACK INTO LIST SEC ;INDICATE FAILURE BR 2$ ;LEAVE 1$: MOV R1,CURFDB ;NEW POINTER CLC ;INDICATE SUCCESS 2$: LEAVE ; RETURN ; .SBTTL > E. TERMINAL OUTPUT (PROMPT) ; ;+ ; ; PROMPT -- ROUTINE WHICH OUTPUTS THE CURRENT RECORD ; AS A PROMPT TO THE TERMINAL. ; ; INPUTS: R1 = ADDRESS OF CURRENT RECORD ; R2 = SIZE OF CURRENT RECORD ; ; NOTE: THE CONTROL CHARACTER IS REMOVED FROM THE ; RECORD BEFORE OUTPUT AND REPLACED WITH ; A LINE FEED CHARACTER. ; ;- .MCALL PCRLF PROMPT: MOVB #LF,(R1) ;REPLACE CONTROL CHAR TTYOUT R1,R2 ;ISSUE THE PROMPT PCRLF ;AND ADVANCE CARRIAGE RETURN ; .SBTTL >VI. OUTPUT A RECORD ;+ ; OUTPUT -- ROUTINE TO OUTPUT A RECORD (THE ; CURRENT RECORD) TO THE OUTPUT FILE ; ; INPUTS: R1 = BUFFER ; R2 = LENGTH ; ; ;- OUTPUT: PUT$ #OUTFDB,R1,R2,IOERR RETURN .SBTTL >VII. BUFFERS AND VARIABLES .SBTTL > A. FILE BUFFERS AND FDBS .SBTTL > 1. LUNS AND EVFS .NLIST BEX ; ; INDLEV =4 ;LEVEL OF INDIRECTION ; ; EVF'S AND LUNS ; OUTLUN =1 ;OUTPUT FILE LUN OUTEVF =1 ;AND EVF ; TILUN =2 ;TERMINAL IO LUN TTYEVF =2 ;AND EVF ; TIFLUN =3 ;TERMINAL "FILE" LUN TIFEVF =3 ;AND EVF ; INFLUN =4 ;THE FIRST IN-FILE LUN INFEVF =4 ;AND EVF .SBTTL > 2. INPUT FDBS ; ; ; THE INPUT FILES ; .MACRO FDBDF,N FDB'N: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILE ATTRIBUTES FDRC$A ,BUF1,132. ;RECORD FDOP$A INFLUN+DD,INDSDS,NMBLK1 ;FILE NAME FDBF$A INFEVF+DD ;EVF .ENDM ; DD=0 .REPT INDLEV FDBDF \DD DD=DD+1 .ENDR ; ; .MACRO FDBLST,N .WORD FDB'N .ENDM ; DD=0 FDBS=. .REPT INDLEV FDBLST \DD DD=DD+1 .ENDR .WORD 0 ;LIST TERMINATOR ; ; CURFDB: .WORD FDBS ;FIRST FDB ; INDSDS: .WORD LDEV,DEV .WORD LUIC,UIC .WORD LNAM,NAM ; DEV: .ASCII /DM1:/ ;DEFAULT DEVICE LDEV =.-DEV ; UIC: .ASCII /[111,1]/ ;DEFAULT UIC LUIC =.-UIC ; NAM: .ASCII /DOC.SRC;0/ ;DEFAULT NAME LNAM =.-NAM .EVEN ; NMBLK1: NMBLK$ DOC,SRC,,SY,0 ;HIS DEFAULTS, ; (IF DSDS GETS REPLACED) ; .SBTTL > 3. OUTPUT FDB ;;;; ; ; THE OUTPUT FDB ; OUTFDB: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILE ATTRIBUTES FDRC$A ,BUF1,132. ;RECORD FDOP$A OUTLUN,OUDSDS,NMBLK2 ;FILE NAME FDBF$A OUTEVF ;EVF ; OUDSDS: .WORD 0,0 .WORD 0,0 .WORD 0,0 ; NMBLK2: NMBLK$ ,RNO,,SY,0 ;DEFAULT NAME ; .SBTTL > 4. TERMINAL FDB ;;;;; ; ; THE TERMINAL'S FDB ; TIFDB: FDBDF$ ;DEFINE FDB BLOCK FDAT$A R.VAR,FD.CR ;FILE ATTRIBUTES FDRC$A ,BUF1,80. ;RECORD FDOP$A TIFLUN,TIDSDS ;FILE NAME FDBF$A TIFEVF ;FILE EVF ; TIDSDS: .WORD LTI,TI .WORD 0,0 .WORD 0,0 ; TI: .ASCII /TI:/ LTI =.-TI .SBTTL > B. MISCELLANEOUS .SBTTL > 1. CSI CONTROL BLOCK ; ; CSI CONTROL BLOCK ; CSI$ .EVEN CSBLK: .BLKB C.SIZE .EVEN ; .SBTTL > 2. TERMINAL OUTPUT BUFFERS ; ; TERMINAL OUTPUT BUFFERS ; .NLIST BEX PRAMB: .ASCII /This program is designed to allow for/ .ASCII /the quick and easy production of/ .ASCII /standardized format documentation./ LPRAMB =.-PRAMB .EVEN ; .SBTTL > 3. GCML CONTROL BLOCK ; GCLUN =TILUN GCBLK: GCMLB$ 2,DOC,,GCLUN ; .SBTTL > 4. THE REST ; ; THE REMAINING STORES ; ; ; GMCR BLOCK ; GMCR: GMCR$ .EVEN ; ; BUF1: .BLKW 132. ;THE RECORD BUFFER ; ; FSRSZ$ INDLEV+4 .SBTTL >VIII.THE END .END START