.TITLE PINDX .IDENT /M01/ ; ; 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 M01 ; ; 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 ; INDMG: .ASCIZ / ./ ;INDEX ELIPSIS TEXT .EVEN ; ; PRINT INDEX COMMAND ; PINDX:: CLR -(SP) ;CLEAR CURRENT LETTER MOV XFIRST,R5 ;GET FIRST ITEM IN INDEX BEQ PINDXX ;QUIT IF NONE. CMP #20.,LINEC ;IF NEAR TOP, USER TRIED TO LABLE INDEX BGE PINDL1 ;SO DON'T FORCE A PAGE CALL PAGEC ;FORCE PAGE BREAK PINDL1: MOVB @4(R5),R1 ;GET FIRST LETTER CMP R1,#141 ;LOWER CASE? BLT ..520 BIC #40,R1 ;YES. MAKE UPPER ..520: CMP R1,(SP) ;SAME AS INITIAL LETTER OF PREVIOUS ONE? BEQ PINDX1 ;YES. SKIP THIS 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 ADD 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 6(R5),R0 ;ASSUME NONCHAPTER DOCUMENT TSTB CHPTN ;CHAPTER ORIENTED DOCUMENT? BEQ 10$ ;IF EQ NO MOVB 7(R5),R0 ;GET CHAPTER NUMBER CALL DECPRT ;CONVERT CHAPTER NUMBER MOV #'-,R1 ;OUTPUT A DASH CALL FOUT ; MOVB 6(R5),R0 ;GET PAGE NUMBER 10$: 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. CMP 4(R5),4(R0) ;NEXT ITEM SAME AS CURENT? BNE PINDX3 ;IF NE NO CMP 6(R5),6(R0) ;PAGE NUMBERS MATCH? BEQ PINDX2 ;IF EQ YES 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