.TITLE MAKDOC .MCALL TINIT,TTYOUT,PSTR,PCRLF .MCALL EXIT$S,PUT$,OPEN$W,CLOSE$ .MCALL FINIT$,FSRSZ$ ; .MACRO PUT,LIN,LEN MOV LIN,R4 MOV LEN,R5 CALL OUTPUT .ENDM ; ;+ ; ; MAKEDOC IS A PROGRAM DESIGNED TO MAKE THE CHORE ; OF WRITTING LIBRARY DOCUMENTATIONS LESS SO. IT ; PROMPTS FOR THE CONTENTS OF EACH ENTRY IN THE DOC. ; AND DOES THINGS SO THE THE OUTPUT ; PRODUCT IS A NICE RUNOFF SOURCE. ; ; AUTHOR: W. KORENDYK ; VERSION: 02 ; DATE WRITTEN: JULY 17, 1977 ; SOURCE: MACRO-11 ASSEMBLER ; MAINTENANCE: GRAPHICS SECTION ; ;- ; START: TINIT 5,23 ;INIT TTY OUTPUT FINIT$ ;FILE INIT TTYOUT #PREAMB,#LPRAMB ;PRINT A PREAMBLE TTYOUT #NAME,#LNAME ;ASK FOR FILE NAME DIR$ #READLN,DIRERR ;READ IN THE NAME CALL PARSE ;PARSE WHAT GAVE US BCC 10$ ; GOOD JMP DIE 10$: OPEN$W #FDB,,,,,,IOERR ;OPEN THE FILE ; ; NOW BEGIN THE JOB OF FILLING IN THE FILE ; TTYOUT #ENT,#LENT ;ASK FOR ROUTINE NAME DIR$ #READLN,DIRERR ;AND FIND WHAT IT IS MOV #LINE,R1 ;LINE THAT WE READ MOV #RNAME1,R2 ;AND PUT INTO PLACE(S) MOV #RNAME2,R3 MOV #RNAME3,R4 MOV LENGTH,R5 ;AND LENGTH CMP #6,R5 ;TOO LONG? BLOS 11$ ;NO, SIS OK. MOV #6,R5 ;YES, TAKE ONLY 6 11$: MOV R5,-(SP) ;SAVE FOR LATER 1$: MOVB (R1),(R2)+ ;MOVE INTO PLACE(S) MOVB (R1),(R3)+ MOVB (R1)+,(R4)+ SOB R5,1$ ; ; THE FIRST LINE IS NEARLY COMPLETE, ALL THAT WE NEED NOW ; IS A ONE LINE DESCRIPTION OF THE ROUTINE FOR THE TITLE. ; TTYOUT #ONEL,#LONEL ;ASK FOR IT DIR$ #READLN,DIRERR ;AND READ IT MOV #LINE,R1 ;WHERE IT'S AT MOV #DESC,R2 ;WHERE IT'S TO GO MOV #DESC2,R3 ; MOV LENGTH,R4 ;ITS LENGTH 2$: MOVB (R1),(R2)+ MOVB (R1)+,(R3)+ SOB R4,2$ ; ; WE CAN NOW OUTPUT THAT MESS OF A LINE. ; PUT #LINE1,#LLINE1 PUT #LINE2,#LLINE2 PUT #SPACER,#LSPCER ;SPACE THE RNO FILE MOV #RNAME1,R1 ;GET THE ROUTINE NAME MOV #RNAME,R2 ;TO PUT INTO THE LINE MOV (SP)+,R5 ;RECOVER THE LENGTH 4$: MOVB (R1)+,(R2)+ SOB 5,4$ ; PUT #RNL,#LRNL ;OUTPUT ROUTINE NAME LINE ; ; FROM HERE ON, R0=#FDB ; R1=#OF TABLE ENTRY ; TTYOUT #AMB2,#LAMB2 ;TELL SOME NEWS MOV #TABLE,R1 20$: PUT #SPACER,#LSPCER ;SPACE THINGS 205$: MOV (R1)+,R2 ;GET ADDRESS MOV (R1),R3 ;GET ITS LENGTH PCRLF ;SPACE INPUT ENTRIES TST -(R1) ;WE DONE? BEQ DONE ;YEP TTYOUT (R1)+,(R1) ;NO, PROMPT MOV #LINE,R4 ;ADDRESS OF LINE 21$: MOVB (R2)+,(R4)+ ;MOVE IN THAT PROMPT SOB R3,21$ ;; ; NOW WE CAN START THROWING IN TEXT. ; MOV R4,READLN+Q.IOPL ;UPDATE THE BUFFER CALL READIT ;AND READ STUFF IN BCC 22$ ;AN EOF!! TST LENGTH ;ANYTHING THERE? BGT 22$ ;YEP, OUTPUT IT TST (R1)+ ;NO, SKIP IN TABLE BR 205$ ;AND TRY NEXT ENTRY 22$: MOV (R1)+,R2 ADD LENGTH,R2 ;GET THE LENGTH OF THE LINE. PUT #LINE,R2 ;AND OUTPUT THE LINE ; ; THAT PUTS ASIDE THE LINE WITH THE ENTRY HEADING, BUT ; THERE MAY BE MORE TO THIS ENTRY. ; TSTB IOSB ;AN ERROR BEFORE (EOF) BMI 20$ ;YEP, ONTO NEXT ENTRY. MOV #LINE,READLN+Q.IOPL ;RESTORE QIO BUFFER 23$: CALL READIT ;GET A LINE BCS 24$ ;THERE WAS AN EOF PUT #LINE,LENGTH BR 23$ ;GO FOR MORE 24$: PUT #LINE,LENGTH ;OUT WITH THE LAST LINE OF ENTRY BR 20$ ;ON TO NEXT ENTRY ; ; WE'RE THROUGH, SO FINISH UP ; DONE: CLOSE$ ;CLOSE FILE TTYOUT #FWELL,#LFWELL ;FAREWELL MESSAGE DIE:: EXIT$S ; ERRPFX::PSTR ^*/DOC - /* RETURN ; ; ; ; THE FOLLOWING ARE SOME SUPPORT ROUTINES FOR THIS HAR PROGRAM ; OUTPUT: TST R5 BEQ 1$ ;NOTHING TO OUTPUT PUT$ ,R4,R5,IOERR RETURN 1$: SEC RETURN ; ; ; READIT SEC=>OK ; CLC=>EOF ; .MCALL POCTB READIT: PSTR ^*/?/* DIR$ #READLN CMPB #IS.SUC,IOSB BEQ 1$ CMPB #IE.EOF,IOSB BNE 2$ SEC 1$: RETURN 2$: CALL ERRPFX PSTR ^*/QIO ERROR/* CALL QUTPC PCRLF PSTR ^*/ERROR CODE = /* POCTB IOSB,SIGN PSTR ^** JMP DIE ; ; ; ; PARSE - A CRUDE PARSE OF THE FILE NAME. ; THE DSD IS FILED IN. ; ; PARSE: MOV LENGTH,R5 ;THE LENGTH MOV #LINE,R1 MOV #DSD,R0 MOV R1,-(SP) ;SAVE LINE START 1$: CMPB #':,(R1)+ BEQ 2$ SOB R5,1$ ADD #4,R0 MOV (SP),R1 ;RESTORE START MOV LENGTH,R5 ;RESTORE LENGTH BR 3$ ;NO DEVICE 2$: MOV R1,(R0) SUB (SP),(R0)+ MOV (SP)+,(R0)+ MOV R1,-(SP) DEC R5 3$: CMPB #'[,(R1) BNE 5$ ;NO UIC ; ; FOR NOW, A UIC CREATES PROBLEMS, WE'LL JUST KILL ; OURSELVES. ; SEC RETURN 5$: ADD #4,R0 MOV R5,(R0)+ MOV (SP)+,(R0)+ CLC RETURN ; ; ; THE FILE STUFF ; .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A FDB: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,LINE,140. FDOP$A 1,DSD,NMBLK FDBF$A 12 ; .MCALL NMBLK$ NMBLK: NMBLK$ LIBDOC,RNO,,SY,0 ; DSD: .WORD 0,0 .WORD 0,0 .WORD 0,0 ;; ; ; AND FOR THE QIO'ING ; .MCALL QIOW$ READLN: QIOW$ IO.RVB,5,24,,IOSB,, IOSB: .WORD 0 LENGTH: .WORD 0 ; LINE: .BLKW 70. ; ;;; ; THE TABLE FOR THE PROMPTING ; TABLE: .WORD PURP,LPURP .WORD CAL,LCAL .WORD PAR,LPAR .WORD ROU,LROU .WORD EXA,LEXA .WORD FEA,LFEA .WORD AUT,LAUT .WORD WRI,LWRI .WORD SOU,LSOU .WORD OBJ,LOBJ .WORD LIB,LLIB .WORD LAS,LLAS .WORD MAI,LMAI .WORD 0,0 ; ; ALL THE ASCII STRINGS FOR YOUR PLEASURE ; .NLIST BEX PREAMB: .ASCII /THIS PROGRAM WAS WRITTEN TO ALLOW/ .ASCII /FOR THE RAPID AND CONSISTENT DOCUMENTATION/ .ASCII /OF LIBRARY SUBROUTINES/ LPRAMB=.-PREAMB ; ; NAME: .ASCII /ENTER FILE NAME: / LNAME=.-NAME ; ; ENT: .ASCII /ENTER THE NAME OF THE ROUTINE: / LENT=.-ENT ; ; ONEL: .ASCII /ENTER A ONE LINE DESCRIPTION/ .ASCII /(FOR THE TITLE): / LONEL=.-ONEL ; ; AMB2: .ASCII /ALL ENTRIES FROM HERE ON IN,/ .ASCII /SHOULD BE IN ACCEPTABLE RUNOFF FORMAT./ .ASCII /EACH ENTRY IS TERMINATED WITH CTRL-Z./ LAMB2=.-AMB2 ; ; LINE1: .ASCII /.NONUMBER/ .ASCII /.TITLE / RNAME1: .BLKB 6 ;6 CHAR ROUTINE NAME .ASCII / - / DESC2: .BLKB 40. .ASCII /.PAGE/ .ASCII /.INDENT 50/ RNAME2: .BLKB 6 LLINE1=.-LINE1 LINE2: .ASCII /.SKIP 1/ .ASCII /.CENTER/ RNAME3: .BLKB 6 .ASCII / - / DESC: .BLKB 40. .ASCII /.LEFT MARGIN 10/ LLINE2=.-LINE2 ; ; SPACER: .ASCII /.SKIP 1/ .ASCII /.INDENT -10/ LSPCER=.-SPACER ; ; FWELL: .ASCII /DOCUMENTATION COMPLETE/ LFWELL=.-FWELL ; RNL: .ASCII /^^ROUTINE NAME: / RNAME: .BLKB 6 .ASCII /\\/ LRNL=.-RNL ; ; PURP: .ASCII /^^PURPOSE:\\ / LPURP=.-PURP ; ; CAL: .ASCII /^^CALLABLE:\\ / LCAL=.-CAL ; ; PAR: .ASCII /^^PARAMETERS:\\ / LPAR=.-PAR ; ; ROU: .ASCII /^^ROUTINES USED:\\ / LROU=.-ROU ; ; EXA: .ASCII /^^EXAMPLE:\\ / LEXA=.-EXA ; ; FEA: .ASCII /^^FEATURES:\\ / LFEA=.-FEA ; ; AUT: .ASCII /^^AUTHOR:\\ / LAUT=.-AUT ; ; WRI: .ASCII /^^WRITTEN:\\ / LWRI=.-WRI ; ; SOU: .ASCII /^^SOURCE LANGUAGE:\\ / LSOU=.-SOU ; ; OBJ: .ASCII /^^OBJECT MODULE NAME:\\ / LOBJ=.-OBJ ; ; LAS: .ASCII /^^LAST MODIFICATION:\\ / LLAS=.-LAS ; ; MAI: .ASCII /^^MAINTENANCE:\\ / LMAI=.-MAI ; ; LIB: .ASCII /^^LIBRARY:\\ / LLIB=.-LIB ; ; FSRSZ$ 1 .END START