.TITLE SETUP .IDENT /M3.0X/ ; RUNOFF commands related to basic format initialization ; (Formerly contained in RNCMD.MAC and FMTCM.MAC) ; ; AUTHOR: C. H. Spalding, Unimation, Dec. '82 ; ; MODIFIED BY ; ; ; MODIFICATIONS ; ; chs03 Reduce blank lines from CHAPTER, APPENDIX, & INDEX ; chs04 Add ALTERNATING HEADER ; chs05 Make page size settings available to task build ; chs10 Change default header type to "MIXED" ; chs11 Add header type "BLANK" ; chs14 Add ALTERNATING TITLE ; chs16 Use local symbols in place of constants ; chs36 Expand scope of STANDARD ; chs39 Add LAYOUT and related switches ; chs40 Expand HEADER ; chs42 Distinguish between "ILLEGAL COMMAND" and "BAD PARAMETER" ; chs46 Change ALTERNATING HEADER to ALTERNATE ; chs60 Make syntax for command arguments common ; ; ALL COMMAND ROUTINES ARE ENTERED WITH: ; ; R4 = Address of number conversion routine ; R5 = Address of flag word F.1 ; ; ASSEMBLER DIRECTIVES .ENABL LC ; LOCAL DATA ; ; Header styles .IF NZ BLNKHD ;chs11 BLANK:: .ASCIZ /BLANK/<0>/ / ;BLANK OUT "PAGE" ;chs11 .ENDC ; NZ BLNKHD ;chs11 LOWER:: .ASCIZ /LOWER/<0>/page / ;LOWER CASE PAGE MIXED:: .ASCIZ /MIXED/<0>/Page / ;MIXED CASE PAGE UPPER:: .ASCIZ /UPPER/<0>/PAGE / ;UPPER CASE PAGE ;LOWER:: .ASCIZ /LOWER/<0><'P+40><'A+40><'G+40><'E+40><' > ;LOWER CASE PAGE ;MIXED:: .ASCIZ /MIXED/<0><'P><'A+40><'G+40><'E+40><' > ;MIXED CASE PAGE ;UPPER:: .ASCIZ /UPPER/<0>/PAGE/<' > ;UPPER CASE PAGE ; STANDARD, PAGE SIZE ; STANDARD command .ENABL LSB STAND:: .IF NZ BIGSTD ;chs36 CALL INITP ;INITIALIZE PARAMETERS ;chs36 .IFF ;chs36 MOV #SPCNG,NSPNG ;SET STANDARD SPACING MOV #IPARIN,PARIND ;SET INITIAL PARAGRAPH INDENT MOV #ILMRG,LMARG ;INITIALIZE LEFT MARGIN .ENDC ; -NZ BIGSTD ;chs36 MOV INLPG,R3 ;SET INITIAL PAGE LENGTH PARAMETER ;chs05 BIS #FILLF!JUSTF!PJUSTF,(R5) ;SET TO FILL AND JUSTIFY BR 15$ ;FINISH IN COMMON CODE ; PAGE SIZE command SETPG:: MOV PNLPG,R3 ;GET CURRENT PAGE LENGTH CALL (R4) ;GET RELATIVE ARGUMENT MOV PNLPG,R3 ;DEFAULT TO CURRENT LENGTH .IF NZ BLSW ; ;chs03 CMP R3,CHPSKP ;LENGTH REASONABLE FOR CHAPT. HEADING ;chs03 .IFF ; (THIS IS AN ODD CRITERION) ;chs03 CMP R3,#12 ;LENGTH REASONABLE FOR CHAPT. HEADING .ENDC ; -NZ BLSW ;chs03 BGT 15$ ; YES, CONTINUE ;chs79 JMP ILCM ; NO, ERROR ;chs79 15$: MOV R3,NLPG ;SAVE AS LENGTH OF THIS PAGE MOV R3,PNLPG ;AND PERMANENT PAGE LENGTH CALL SETRM ;SET RIGHT MARGIN MOV R3,PRMRG ;SET NEW PERMANENT MARGIN .IIF NZ EXTHDR, MOV R3,HRMARG ;SET NEW HEADER RIGHT MARGIN ;chs40 20$: MOV R3,RMARG RETURN .DSABL LSB ; LAYOUT command ;chs39+ .IF NZ LAYOUT LYOUT:: MOV TOPMRG,R3 ;GET OLD TOP MARGIN CALL (R4) ;GET RELATIVE ARGUMENT JMP 40$ ;SKIP IF NONE PROVIDED .IF NZ LAYSW ;chs39a+ BITEQ #DWNSW,$SWTCH,10$ ;ALREADY SET VIA SWITCH? CALL 200$ ; YES, OUTPUT ERROR BR 40$ ;SKIP TO NEXT ARGUMENT .ENDC ; NZ LAYSW ;chs39a- 10$: TST R3 ;MUST BE AT LEAST POSITIVE BGE 30$ 20$: JMP ILCM ;DISPLAY ERROR 30$: MOV R3,TOPMRG ;STORE NEW VALUE 40$: MOV PNLPG,R3 ;GET CURRENT PAGE LENGTH CALL (R4) ;GET RELATIVE ARGUMENT 50$: MOV PNLPG,R3 ;DEFAULT TO CURRENT LENGTH .IF NZ LAYSW ;chs39a+ CMPEQ R3,PNLPG,60$ ;TRYING TO CHANGE VALUE BITEQ #LNGSW,$SWTCH,60$ ;ALREADY SET VIA SWITCH? CALL 200$ ; YES, OUTPUT ERROR BR 50$ ;USE DEFAULT VALUE 60$: .ENDC ; NZ LAYSW ;chs39a- .IF NZ BLSW CMP R3,CHPSKP ;LENGTH REASONABLE FOR CHAPT. HEADING .IFF ; (THIS IS AN ODD CRITERION) CMP R3,#12 ;LENGTH REASONABLE FOR CHAPT. HEADING .ENDC ; -NZ BLSW BLE 20$ ;IF LE ERROR MOV R3,NLPG ;SAVE AS LENGTH OF THIS PAGE MOV R3,PNLPG ; AND PERMANENT PAGE LENGTH MOV BASMRG,R3 ;GET CURRENT PERM. LEFT MARGIN .IF NZ ALTSHF ;chs46+ MOV ASHIFT,R2 ;GET ALTERNATE-PAGE OFFSET CALL LFTRGT ;ON RIGHT-HAND PAGE? BCC 70$ ; NO, BASE MARGIN OKAY SUB R2,R3 ; YES, MUST CONSIDER OFFSET 70$: .IFTF ;chs46- CALL (R4) ;GET RELATIVE ARGUMENT JMP 100$ ;DEFAULT TO CURRENT SETTING .IF NZ LAYSW ;chs39a+ BITEQ #LFTSW,$SWTCH,80$ ;ALREADY SET VIA SWITCH? CALL 200$ ; YES, OUTPUT ERROR BR 100$ ;SKIP TO NEXT ARGUMENT .ENDC ; NZ LAYSW ;chs39a- 80$: TST R3 ;NEW VALUE CANNOT BE NEGATIVE BLT 20$ .IFT ;chs46+ MOV R3,PBMRG ;SAVE AS PERMANENT VALUE CALL LFTRGT ;ON RIGHT-HAND PAGE? BCC 90$ ; NO, BASE MARGIN OKAY ADD R2,R3 ; YES, INCLUDE OFFSET 90$: .ENDC ; NZ ALTSHF ;chs46- MOV R3,BASMRG ;SAVE WORKING VALUE 100$: MOV PRMRG,R3 ;GET CURRENT PERMANENT RIGHT MARGIN CALL (R4) ;GET RELATIVE ARGUMENT JMP 120$ ;IF NONE, LEAVE UNCHANGED .IF NZ LAYSW ;chs39a+ BITEQ #DWNSW,$SWTCH,110$ ;ALREADY SET VIA SWITCH? CALL 200$ ; YES, OUTPUT ERROR BR 120$ ;SKIP .ENDC ; NZ LAYSW ;chs39a- 110$: CMP R3,LMARG ;MUST BE RIGHT OF LEFT MARGIN BLE 20$ ;IF GT OKAY MOV R3,PRMRG ;SET NEW PERMANENT RIGHT MARGIN MOV R3,RMARG ;SET NEW RIGHT MARGIN .IIF NZ EXTHDR, MOV R3,HRMARG ;SET NEW HEADER RIGHT MARGIN ;chs40 120$: RETURN .IF NZ LAYSW ;chs39a+ ; Local subroutine to display warning message 200$: CALL $ERMS2 ;OUTPUT MESSAGE .WORD LOKWRN ;ADDRESS OF MESSAGE CALL ONPAG ;IDENTIFY OUTPUT PAGE RETURN .ENDC ; NZ LAYSW ;chs39a- .ENDC ; NZ LAYOUT ;chs39- ; NOHEADER, HEADER ; NOHEADER command NHEAD:: CLR $HDRSW ;SET TO NOT PRINT PAGE HEADERS RETURN ; HEADER command HEADP:: CALL $FRCND ;FORCE TO LOGICAL END OF LINE .IF NZ MXDHDR ;chs10 MOV #MIXED,R2 ;ASSUME MIXED CASE SPECIFIED ;chs10 .IFF ;chs10 MOV #UPPER,R2 ;ASSUME UPPER CASE SPECIFIED .IFTF ;chs10 CMPEQ #CR,R1,25$ ;CARRIAGE RETURN? CMPEQ #SEMI,R1,25$ ;SEMICOLON? .IIF NZ EXTHDR, CMPEQ #CMA,R1,25$ ;COMMA? ;chs40 CALL 50$ ;READ FIRST CHARACTER CMPEQB R1,(R2)+,10$ ;FIRST CHARACTER MATCH? .IFT ;chs10 MOV #UPPER,R2 ;ASSUME 'UPPER' KEYWORD ;chs10 .IFF ;chs10 MOV #MIXED,R2 ;ASSUME 'MIXED' KEYWORD .ENDC ; NZ MXDHDR ;chs10 CMPEQB R1,(R2)+,10$ ;FIRST CHARACTER MATCH? MOV #LOWER,R2 ;ASSUME 'LOWER' KEYWORD .IF NZ BLNKHD ;chs11 CMPEQB R1,(R2)+,10$ ;FIRST CHARACTER MATCH? ;chs11 MOV #BLANK,R2 ;ASSUME 'BLANK' KEYWORD ;chs11 .ENDC ; NZ BLNKHD ;chs11 CMPNEB R1,(R2)+,20$ ;FIRST CHARACTER MISMATCH? (BUG FIXED) ;chs 10$: TSTEQB (R2),30$ ;NO MORE CHARACTERS TO MATCH? CALL 50$ ;READ ANOTHER CHARACTER CMPEQB R1,(R2)+,10$ ;CHARACTER MATCH? 20$: JMP ILCM ;ILLEGAL COMMAND 25$: TSTNEB (R2)+,25$ ;SEARCH FOR END OF STRING DEC R2 ;ADJUST FOR FOLLOWING INCREMENT 30$: INC R2 ;POINT TO PAGE PROTOTYPE MOV #PAGHD,R1 ;POINT TO PAGE HEADER AREA 40$: MOVB (R2)+,(R1)+ ;MOVE PROTOTYPE BNE 40$ ;IF NE MORE TO GO .IF NZ EXTHDR ;chs40 41$: ;chs60+ .IF NZ GENSEP CALL SKPEND ;SKIP TO NEXT ARGUMENT BCS 48$ ;SKIP IF CR FOUND CMPEQB #SEMI,R1,48$ ;SEMI INDICATES NO MORE .IFF ;chs60- CALL CCIN ;SKIP TO NEXT ARGUMENT ;chs40+ CMPEQB #CMA,R1,42$ ;MARKED BY COMMA CMPEQB #SEMI,R1,48$ ;SEMI INDICATES NO MORE CMPNEB #CR,R1,41$ ;SO DOES MOVB R1,GCSCH ; (BUT IT SHOULD BE SAVED) BR 48$ .ENDC ; -NZ GENSEP ;chs60 42$: MOV HDRLEN,R3 ;GET OLD HEADER LENGTH CALL (R4) ;GET RELATIVE ARGUMENT JMP 44$ ;SKIP IF NONE PROVIDED .IF NZ XHDRSW ;chs40a+ BITEQ #HLNSW,$SWTCH,43$ ;ALREADY SET VIA SWITCH? CALL $ERMS2 ;OUTPUT MESSAGE .WORD LOKWRN CALL ONPAG ;IDENTIFY OUTPUT PAGE BR 44$ ;SKIP TO NEXT ARGUMENT .ENDC ; NZ XHDRSW ;chs40a- 43$: TST R3 ;IS IT REASONABLE? BLT 20$ ;CAN'T BE NEGATIVE MOV R3,HDRLEN ;STORE NEW VALUE 44$: MOV HLMARG,R3 ;GET CURRENT HEADER LEFT MARGIN CALL (R4) ;GET RELATIVE ARGUMENT JMP 46$ ;DEFAULT TO CURRENT SETTING TST R3 ;IS IT REASONABLE? BLT 20$ ;CAN'T BE NEGATIVE CMP R3,HRMARG ;NOR GREATER THAN RIGH MARGIN BGE 20$ MOV R3,HLMARG ;SAVE NEW SETTING 46$: MOV HRMARG,R3 ;GET CURRENT HEADER RIGHT MARGIN CALL (R4) ;GET RELATIVE ARGUMENT JMP 48$ ;DEFAULT TO CURRENT SETTING CMP R3,HLMARG ;IS IT REASONABLE? BLE 20$ ;CAN'T BE LESS THAN LEFT MARGIN MOV R3,HRMARG ;SAVE NEW SETTING 48$: MOV HDRLEN,$HDRSW ;SET TO PRINT PAGE HEADERS .IFF ;chs40- MOV #HDLEN,$HDRSW ;SET TO PRINT PAGE HEADERS ;chs16 .ENDC ; -NZ EXTHDR ;chs40 RETURN ; Local subroutine to convert alpha characters to UC 50$: CALL CCIN ;READ NEXT CHARACTER CMP #'A+40,R1 ;LOWER CASE? BHI 60$ ;IF HI NO CMP #'Z+40,R1 ;LOWER CASE? BLO 60$ ;IF LO NO BIC #40,R1 ;CONVERT TO UPPER CASE 60$: RETURN ; (NO)ALTERNATE, (NO)ALTERNATING TITLE ; ALTERNATE commands ;chs04+ .IF NZ ALTHDR AHEAD:: BITEQ #ALHSW,$SWTCH,30$ ;ALTERNATING HEADER ENABLED? .IF NZ ALTSHF ;chs46+ MOV ASHIFT,R3 ;GET CURRENT SHIFT CALL (R4) ;GET NEW VALUE MOV #0,R3 ;DEFAULT TO ZERO TST R3 ;MAKE SURE ITS NOT NEGATIVE BGE 10$ JMP ILCM ; ELSE ERROR 10$: MOV PBMRG,BASMRG ;GET STANDARD BASE MARGIN CALL LFTRGT ;ON RIGHT-HAND PAGE? BCC 20$ ; NO, BASE MARGIN OKAY ADD R3,BASMRG ; YES, ADD IN OFFSET 20$: MOV R3,ASHIFT ;STORE NEW VALUE .ENDC ; NZ ALTSHF ;chs46- MOV SP,$ALHSW ;SET ALTERNATING HEADER MODE 30$: RETURN NAHEAD::CLR $ALHSW ;CLEAR ALTERNATING HEADER MODE .IIF NZ ALTSHF, CLR ASHIFT ;CLEAR ALTERNATE OFFSET ;chs46 .IF NZ ALTTIT ;chs14 JMP NATITL ;TURN OFF ALTERNATING TITLES ;chs14 .IFF ;chs14 RETURN .ENDC ; -NZ ALTTIT ;chs14 .ENDC ; NZ ALTHDR ;chs04- ; ALTERNATING TITLE commands ;chs14+ .IF NZ ALTTIT ATITL:: TST $ALHSW ;ALTERNATING HEADERS ACTIVE? BNE 10$ ; YES, COMMAND OKAY ;chs42+ .IF NZ BADPRM ;chs42 JMP ILCM2 ; NO, ILLEGAL IN THIS CONTEXT ;chs42 .IFF ;chs42- JMP ILCM .ENDC ; -NZ BADPRM ;chs42 10$: MOV SP,$ALTSW ;SET ALTERNATING TITLE MODE RETURN NATITL::CLR $ALTSW ;CLEAR ALTERNATING TITLE MODE RETURN .ENDC ; NZ ALTTIT ;chs14- .END