.TITLE PINDX .IDENT /M02/ ; ; 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 ; ; 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 ; DOTXT: .ASCIZ /INDEX/ ;INDEX HEADING INDMG: .ASCIZ / ./ ;INDEX ELIPSIS TEXT .EVEN ; ; DO INDEX COMMAND ; DOINX:: MOV TTLP1,TTLP2 ;CLEAR TITLE BUFFER MOV STTLP1,STTLP2 ;CLEAR SUBTITLE BUFFER CLR LMARG ;SET LEFT MARGIN MOV PRMRG,RMARG ;SET RIGHT MARGIN 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 10$: CALL PAGEC ;BREAK PAGE MOV #7.,R2 ;SET LINE COUNT CALL SKIPN ;SKIP SEVEN LINES 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 ; 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 #'I-'A+1,APNDN ;SET APPENDIX TO 'I' FOR INDEX CALL PINDX ;PRINT THE INDEX MOVB (SP)+,APNDN ;RESTORE APPENDIX NUMBER RETURN ; ; ; 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 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 ; .. 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 TST (SP)+ ;CLEAN STACK RETURN ; .END