.TITLE PINDX .IDENT /M02/ .IDENT /M02.1/ .IDENT /M02.2/ ; RAY VAN TASSLE--TOC ; ; COPYRIGHT (C) 1976 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- ; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE ; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; VERSION M02 ; ; AUTHOR: L. WADE 1-JUN-72 ; ; MODIFIED BY: ; ; E. POLLACK U. OF W. 19-DEC-73 ; ; D. N. CUTLER 22-SEP-75 ; ; ; CARTS LUG MODIFICATIONS ; ; CAR 1 --> ADD CHANGE BAR AND RIGHT SHIFT ; ; PRINT INDEX COMMAND ; ; COMMAND ROUTINE IS ENTERED WITH: ; ; R4=ADDRESS OF NUMBER CONVERSION ROUTINE. ; R5=ADDRESS OF FLAG WORD F.1. ; ; LOCAL DATA ; ; OUTPUT TEXT ; DXAPN: .BYTE 'I-'A+1 ; I FOR INDEX ;CAR 1 DXTYP: .BYTE 1 ; 0 FOR TOC ;CAR 1 ;CAR 1 TOCTXT: .BYTE 'T,'A+40,'B+40,'L+40,'E+40,' ,'O+40,'F+40 ;CAR 1 .BYTE ' ,'C,'O+40,'N+40,'T+40,'E+40,'N+40,'T+40,'S+40,0 ;CAR 1 ;CAR 1 DOTXT: .BYTE 'I,'N+40,'D+40,'E+40,'X+40,0 ;CAR 1 INDMG: .ASCIZ / ./ ;INDEX ELIPSIS TEXT ;**-1 .EVEN ; ; DO INDEX COMMAND ; DOINX:: CLR $CBON ;STOP CHANGE BAR ;CAR 1 MOV TTLP1,TTLP2 ;CLEAR TITLE BUFFER ;CAR 1 MOV STTLP1,STTLP2 ;CLEAR SUBTITLE BUFFER ;**-1 MOV STDLM,LMARG ; SET TO STANDARD LEFT MARGIN ;CAR 1 MOV PRMRG,RMARG ;SET RIGHT MARGIN ;**-1 MOV #SPCNG,NSPNG ;SET INITIAL SPACING BIS #FILLF!JUSTF!PJUSTF,(R5) ;SET FILL AND JUSTIFY FLAGS CLR PAGENO ;CLEAR PAGE NUMBER TSTNE LINEC,10$ ;AT TOP OF PAGE ALREADY? INC PAGENO ;INCREMENT PAGE NUMBER INC ABSPAG ;CAR 1 10$: CALL PAGEC ;BREAK PAGE MOV #7.,R2 ;SET LINE COUNT CALL SKIPN ;SKIP SEVEN LINES mov #TOCTXT,R3 ;CAR 1 TSTEQB DXTYP,20$ ;CAR 1 ;CAR 1 CALL SETTL ;MOVE TITLE TO TITLE BUFFER CMPNE TTLP1,TTLP2,30$ ;TITLE SPECIFIED? MOV #DOTXT,R3 ;POINT TO DEFAULT TEXT 20$: MOVB (R3)+,R1 ;GET NEXT BYTE BEQ 30$ ;IF EQ DONE MOV #TTLP1,R4 ;POINT TO TITLE DESCRIPTOR CALL WCI ;WRITE CHARACTER IN BUFFER BR 20$ ; 30$: MOV RMARG,R2 ;CALCULATE SPACE COUNT TO CENTER TITLE TEXT ADD TTLP1,R2 ; SUB TTLP2,R2 ; ASR R2 ; ADD RIGSHI,R2 ;ADD ON SHIFT ;CAR 1 CALL NSPAC ;SPACE TO TEXT POSITION MOV #TTLP1,R4 ;SET ADDRESS OF LINE DESCRIPTOR CALL PSTRPA ;OUTPUT NOTE TEXT MOV #2.,R2 ;SET LINE COUNT CALL SKIPN ;SKIP LINES MOVB APNDN,-(SP) ;SAVE CURRENT APPENDIX MOVB DXAPN,APNDN ; SET APPENDIX TO 'I' OR 'T' ;CAR 1 CALL PINDX ;PRINT THE INDEX ;**-1 MOVB (SP)+,APNDN ;RESTORE APPENDIX NUMBER RETURN ; ;CAR 1 ; PRINT THE TABLE OF CONTENTS ;CAR 1 DOTOC:: ;CAR 1 TST TOCCHN ;CAR 1 BEQ 5$ ;CAR 1 MOVB #'T-'A+1,DXAPN ;CAR 1 CLRB DXTYP ;CAR 1 MOV TOCCHN,XFIRST ;CAR 1 CALL DOINX ;CAR 1 MOVB #'I-'A+1,DXAPN ;CAR 1 INCB DXTYP ;CAR 1 5$: RETURN ;CAR 1 ;CAR 1 ;CAR 1 ; ; PRINT INDEX COMMAND ; PINDX:: CLR -(SP) ;CLEAR CURRENT LETTER MOV XFIRST,R5 ;GET FIRST ITEM IN INDEX BEQ PINDXX ;IF EQ NONE PINDL1: MOVB @4(R5),R1 ;GET FIRST LETTER CMP R1,#141 ;LOWER CASE? BLT 10$ BIC #40,R1 ;YES. MAKE UPPER 10$: CMPEQ R1,(SP),PINDX1 ;SAME AS INITIAL LETTER OF PREVIOUS ONE? MOV R1,(SP) ;SAVE THIS CHARACTER CALL SKIP1 ;SKIP ONE LINE PINDX1: MOV LMARG,R2 ;SPACE IN TO LEFT MARGIN ADD RIGSHI,R2 ; ALLOW FOR RIGHT SHIFT ;CAR 1 CALL NSPAC ; .. MOV 4(R5),S1 ;.. CALL PSTRAZ ;OUTPUT STRING OF ASCIZ MOV RMARG,R2 ;NOW GO TO MIDDLE OF LINE SUB LMARG,R2 ;IF NOT THERE YET ROR R2 ; .. MOV R2,-(SP) ; 3/4 ALONG ;CAR 1 ROR R2 ;CAR 1 ADD (SP)+,R2 ;CAR 1 SUB CPOS,R2 ;MINUS CURRENT POSITION BLE PIND2 ;THERE ALREADY ASR R2 ;EVEN NUMBER OF SPACES AND DOTS? BCC 10$ ;IF CC YES CALL CCSPC ;OUTPUT A SPACE 10$: MOV #INDMG,S1 ; .. CALL FMSG ; .. DEC R2 ;MIDDLE OF LINE? BGT 10$ ;IF GT NO PIND2: CALL CCSPC ;OUTPUT A SPACE MOV 10(R5),R1 ;CHAPTER/APPENDIX NUMBER? BEQ 30$ ;IF EQ NO BMI 10$ ;IF MI CHAPTER NUMBER ADD #'A-1,R1 ;CONVERT TO LETTER CALL FOUT ;OUTPUT APPENDIX DESIGNATION BR 20$ ; 10$: CLR R0 ;GET CHAPTER NUMBER BISB R1,R0 ; CALL DECPRT ;CONVERT CHAPTER NUMBER 20$: MOV #'-,R1 ;OUTPUT A DASH CALL FOUT ; 30$: MOV 6(R5),R0 ;GET PAGE NUMBER CALL DECPRT ;OUTPUT PAGE NUMBER PINDX2: MOV R5,R0 ;GET SUCCESSOR OF THIS ENTRY MOV (R0),R5 ; BEQ PINDXX ;END OF LIST? JUMP IF SO. CMPNE 4(R5),4(R0),PINDX3 ;NEXT ITEM DIFFERENT FROM CURRENT? CMPNE 6(R5),6(R0),10$ ;;PAGE NUMBERS DIFFERENT? CMPEQ 10(R5),10(R0),PINDX2 ;CHAPTER/APPENDIX MATCH? 10$: MOV #',,R1 ;PUT COMMA BETWEEN PAGE NUMBERS CALL FOUT BR PIND2 ;AND THEN OUTPUT NUMBER PINDX3: CALL SKIPS ; .. BR PINDL1 ;GO ON TO NEXT ITEM IN LIST PINDXX: CALL SKIPS ; .. MOV XTOP,XBOT CLR XFIRST ; CLEAR THE INDEX CHAIN ;CAR 1 TST (SP)+ ;CLEAN STACK ;**-1 RETURN ; .END