.TITLE NONSTA .IDENT /V7.03/ ;******************************************************************* ; ; NONSTAN.TSK ; ; THIS ROUTINE TABULATES THE NON-STANDARD RATE TABLES. ; ; VERSION: V7 MAY 1981 ; ; STEVE THOMPSON ; SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT809 17-MAR-82 TERMINAL SPECIFICATION IS OUTPUT AS ; "TTN:" RATHER THAN JUST "N". ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;******************************************************************** .MCALL EXIT$S HT = 11 ; HORIZONTAL TAB LF = 12 ; LINEFEED CR = 15 ; CARRIAGE RETURN SPA = 40 ; SPACE BUFT: .BYTE HT ; BUFFER STARTS WITH FORMATTING CHARACTERS BUF: .BLKB 79. ; .ENABL LC CONTTL: .ASCII /Non-standard Connect Rates Table/ .ASCIZ /============ ======= ===== =====/ CPUTTL: .ASCII /Non-standard CPU Rates Table/ .ASCIZ /============ === ===== =====/ .EVEN SPCBLK: .WORD 0 ; ML.DV ARGUMENTS BLOCK .WORD 0 ; FACTOR: .WORD 0 ; SPECIAL RATE FACTOR .WORD 0 ; .PSECT NSCONN NSCTAB::.WORD 0 ; NON-STANDARD CONNECT RATES TABLE .PSECT NSCPU NCPTAB::.WORD 0 ; NON-STANDARD CPU RATES TABLE .PSECT STANEP: MOV #CONTTL,R0 ; GET ADDRESS OF CONNECT TABLE HEADING CALL OUT.PT ; PRINT IT MOV #NSCTAB,R5 ; GET ADDRESS OF CONNECT RATE TABLE CALL TABLE ; FORMAT IT MOV #CPUTTL,R0 ; REPEAT FOR CPU RATES TABLE CALL OUT.PT ; MOV #NCPTAB,R5 ; CALL TABLE ; EXIT$S ; THAT'S ALL ;+ ; ; SUBROUTINE TO PRINT TABLE ; ;- TABLE: ; 10$: MOV #BUF,R0 ; SET BUFFER ADDRESS MOV (R5)+,R1 ; GET TERMINAL NUMBER BEQ 100$ ; IF EQ, END OF TABLE BGT 15$ ; IF GT, A SPECIFIC TERMINAL MOVB #'*,(R0)+ ; INSERT * TO INDICATE ALL TERMINALS BR 16$ ; 15$: MOVB #'T,(R0) ; INSERT "TT" MOVB (R0)+,(R0)+ ; CALL OC.TAL ; FORMAT TERMINAL NUMBER MOVB #':,(R0)+ ; FINISH WITH A COLON 16$: MOVB #HT,(R0)+ ; TAB TO NEXT POSITION MOVB #'[,(R0)+ ; START UIC FIELD MOV (R5),R1 ; GET USER DESCRIPTOR WORD SWAB R1 ; POSITION GROUP CODE IN LOW BYTE BIC #177400,R1 ; CLEAR MEMBER CODE BGT 20$ ; IF GT, A SPECIFIC GROUP MOVB #'*,(R0)+ ; INSERT * TO INDICATE ALL GROUPS BR 21$ ; 20$: CALL OC.TAL ; FORMAT GROUP CODE 21$: MOVB #',,(R0)+ ; INSERT GROUP/MEMBER SEPARATOR MOV (R5)+,R1 ; GET UIC AGAIN BIC #177400,R1 ; CLEAR THE GROUP CODE AWAY BGT 30$ ; IF GT, A SPECIFIC MEMBER MOVB #'*,(R0)+ ; INSERT * TO INDICATE ALL MEMBERS BR 31$ ; 30$: CALL OC.TAL ; FORMAT MEMBER CODE 31$: MOVB #'],(R0)+ ; FINISH UIC FIELD MOVB #SPA,(R0)+ ; MOVB #SPA,(R0)+ ; MOVB #SPA,(R0)+ ; MOVB #HT,(R0)+ ; TAB TO NEXT POSITION MOV R0,-(SP) ; SAVE BUFFER ADDRESS MOV (R5)+,R1 ; GET RATE DESCRIPTOR WORD MOV #SPCBLK+2,R4 ; GET ML.DV ARGUMENT BLOCK ADDRESS MOV R1,(R4) ; SET UP DIVISOR BIC #177400,(R4) ; SWAB R1 ; POSITION FOR MULTIPLICAND BIC #177400,R1 ; SET UP MULTIPLICAND MOV R1,-(R4) ; MOV R5,-(SP) ; SAVE TABLE POINTER MOV #FACTOR+2,R5 ; SET ADDRESS OF 2ND ML.DV ARG. BLOCK MOV #10000.,(R5) ; SET UP ITS CONTENTS CLR -(R5) ; CALL ML.DV ; CALCULATE 10000 TIMES ADJUSTMENT FACTOR MOV R2,-(R5) ; SAVE THE RESULT MOV R1,-(R5) ; MOV R5,R1 ; R1 POINTS TO NUMBER MOV (SP)+,R5 ; RESTORE TABLE POINTER MOV (SP)+,R0 ; RESTORE BUFFER POINTER CALL FMTFAC ; FORMAT IT MOV #BUFT,R0 ; SET ADDRESS OF COMPLETED BUFFER CALL OUT.PT ; AND PRINT IT BR 10$ ; LOOP 100$: RETURN ; RETURN TO CALLER ;+ ; *** FMTFAC ; ; FORMAT NON-STANDARD RATE ADJUSTMENT FACTOR AS X.XXXX ; ; INPUT: ; R0 BUFFER ADDRESS ; R1 ADDRESS OF NUMBER TO CONVERT ; ; OUTPUT: ; R0 UPDATED ; R1,R2 USED ; ;- FMTFAC: MOV 2(R1),-(SP) ; PUSH LOW ORDER NUMBER ON STACK MOV (R1),-(SP) ; FOLLOWED BY HIGH ORDER MOV SP,R1 ; LET R1 POINT TO THE NUMBER CLR R2 ; SET NO LEADING ZEROES TST (SP) ; HIGH ORDER NUMBER NON-ZERO? BNE 20$ ; IF NE YES, DON'T WANT LEADING ZEROES CMP #10000.,2(SP) ; VALUE LESS THAN ONE UNITY? BLOS 20$ ; IF LOS NO, DON'T WANT LEADING ZEROES INC R2 ; < UNITY, SET TO INCLUDE LEADING ZEROES MOVB #'0,(R0)+ ; START STRING WITH A ZERO 20$: CALL $CDDMG ; FORMAT THE AMOUNT CMP (SP)+,(SP)+ ; CLEAN THE STACK MOVB -(R0),1(R0) ; MOVE OVER THE LAST FOUR DIGITS MOVB -(R0),1(R0) ; MOVB -(R0),1(R0) ; MOVB -(R0),1(R0) ; MOVB #'.,(R0)+ ; INSERT A DECIMAL POINT ADD #4,R0 ; STEP PAST LAST DIGIT CLRB (R0) ; MAKE IT ASCII RETURN ; AND RETURN TO THE CALLER .END STANEP