.TITLE STATUS - REPORT RSXNET STATUS .IDENT /02.5/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided ; or otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: STATUS ; Author: Robin Miller ; Date: April 15, 1982 ; ; Description: ; ; This module initializes the counters and formats the screen ; when doing file transfers in RSXNET. ; ; Modification History: ; ;- .ENABL AMA .NLIST BEX .MCALL QIOW$S ; ; Local equates: ; BELL = 7 ; RING BELL LF = 12 ; LINE FEED CR = 15 ; CARRIAGE RETURN ; Local variables. .GLOBL BYTCNT, TBYTES, RECCNT, TRECNT .GLOBL NAKCNT, TMOCNT, BCCERR, DAOERR, VERERR NCRLF:: .WORD 0 ; NEED CR/LF FLAG BYTCNT: .WORD 0,0 ; BYTE COUNT TBYTES: .WORD 0,0 ; TOTAL BYTES RECCNT: .WORD 0,0 ; RECORD COUNT TRECNT: .WORD 0,0 ; TOTAL RECORD COUNT NAKCNT: .WORD 0 ; NEGATIVE ACKNOWLEGMENTS TMOCNT: .WORD 0 ; NUMBER OF TIMEOUTS BCCERR: .WORD 0 ; FRAMING ERRORS DAOERR: .WORD 0 ; DATA OVERRUN ERRORS VERERR: .WORD 0 ; VERTICAL PARITY ERRROS ERRREC: .WORD 0,0 ; ERRORING RECORD NUMBER ; ASCII Messages: STAT1: .ASCIZ "RSXNET Status Report:" STAT2: .ASCIZ "Total records: " STAT3: .ASCIZ ", total bytes: " STAT4: .ASCIZ ", timeouts: " STAT5: .ASCIZ "Framing errors: " STAT6: .ASCIZ ", overruns: " STAT7: .ASCIZ ", parity errors: " REC1: .ASCIZ "Record count: " REC2: .ASCIZ ", byte count: " REC3: .ASCIZ ", Naks: " TERROR: .ASCII "Transmission ERROR on RECORD " TERRBF: .BLKB 12. ; STORAGE FOR ERROR # .EVEN .SBTTL INTALL - INITIALIZE ALL THE COUNTERS ;+ ; ; INTALL - Initilaize all the counters. ; ; This routine initializes all counters user during file transmission. ; It should be called only once before starting a file transmission. ; ;- INTALL:: CALL INTFIL ; INITIALIZE FILE COUNTERS CLR TBYTES ; CLEAR TOTAL CLR TBYTES+2 ; BYTES COUNTER CLR TRECNT ; CLEAR TOTAL CLR TRECNT+2 ; RECORD COUNTER CLR NAKCNT ; NAK COUNTER CLR TMOCNT ; # OF TIMEOUTS CLR BCCERR ; FRAMING ERRORS CLR DAOERR ; DATA OVERRUN ERRORS CLR VERERR ; VERTICAL PARITY ERRORS RETURN ; This routine must be called before each file transmission. INTFIL:: CLR BYTCNT ; CLEAR THE CLR BYTCNT+2 ; BYTE COUNT CLR RECCNT ; CLEAR THE CLR RECCNT+2 ; RECORD COUNT RETURN .SBTTL RSTAT - WRITE RECORD STATUS MESSAGE ;+ ; ; RSTAT - Write record status message. ; ; This routine is called for each record which is received or transmitted. ; It updated the byte counters and record counters, formats the buffer with ; the counts, and writes it to the terminal. ; ; Inputs: ; R3 = the record byte count. ; ; Outputs: ; All registers are preserved. ; ;- RSTAT:: CALL $SAVAL ; SAVE ALL REGISTERS ADD R3,BYTCNT+2 ; ACCUMULATE BYTE COUNT ADC BYTCNT ; AND THE CARRY BIT ADD R3,TBYTES+2 ; TOTAL BYTE COUNT ADC TBYTES ; AND THE CARRY BIT ADD #1,RECCNT+2 ; BUMP THE RECORD COUNT ADC RECCNT ; AND THE CARRY BIT ADD #1,TRECNT+2 ; TOTAL RECORD COUNT ADC TRECNT ; AND THE CARRY BIT ; Prepare the buffer to output to the terminal. ; Insure the terminal is of the VT100 family. CMPB TTYPE,#T.V100 ; Are we running on a VT100 ? BEQ 5$ ; If EQ, yes ; Range of VT100 terminals is T.V101 (24) through T.V132 (31). CMPB TTYPE,#T.V101 ; Is this possible VT100 family ? BLO 100$ ; If LO, no CMPB TTYPE,#T.V132 ; Really a VT100 family terminal ? BHI 100$ ; If HI, no (skip the status) 5$: MOV #LBUFF,R0 ; OUTPUT BUFFER ADDRESS MOV R0,R3 ; COPY FOR WRITE ROUTINE MOV #REC1,R1 ; STRING TO MOVE CALL MOVE ; DO IT MOV #RECCNT,R1 ; ADDRESS OF RECORD COUNT MOV #5,R2 ; SET THE FIELD WIDTH CALL CDDMG ; CONVERT TO ASCII MOV #REC2,R1 ; STRING TO MOVE CALL MOVE ; MOVE IT MOV #BYTCNT,R1 ; ADDRESS OF BYTE COUNT MOV #7,R2 ; SET THE FIELD WIDTH CALL CDDMG ; CONVERT TO ASCII ; If in SEND or GET mode, output the number of NAKs. CMP MODE,#DUMP ; ARE WE IN DUMP MODE ? BEQ 10$ ; IF EQ, YES (DONE) MOV #REC3,R1 ; ADDRESS OF NAKS MESSAGE CALL MOVE ; MOVE IT MOV NAKCNT,R1 ; COPY THE NAK COUNT MOV #17012,R2 ; DECIMAL/BLANK FILL/WIDTH = 3 CALL $CBTA ; CONVERT TO ASCII 10$: CLRB (R0) ; TERMINATE MESSAGE SUB R3,R0 ; CALCULATE BYTE COUNT MOV #-1,NCRLF ; SHOW CRLF NEEDED QIOW$S #IO.WAL!TF.CCO,#LOCAL,#LOCAL,,,, 100$: RETURN .SBTTL REPERR - REPORT A TRANSMISSION ERROR ;+ ; ; REPERR - Report a transmission error. ; ; This routine is called when we either receive a "NAK" from the remote ; when sending a file, or when we have a checksum or bad byte count when ; we are getting a file from the remote. ; ; Inputs: ; None. ; ; Outputs: ; All registers are preserved. ; ;- REPERR:: CALL $SAVAL ; SAVE ALL REGISTERS MOV RECCNT,ERRREC ; COPY THE LAST MOV RECCNT+2,ERRREC+2 ; RECORD NUMBER ADD #1,ERRREC+2 ; ADJUST TO CURRENT RECORD ADC ERRREC ; ADD IN THE CARRY MOV #TERRBF,R0 ; TRANSMISSION ERROR BUFFER MOV #ERRREC,R1 ; ERRORING RECORD NUMBER CLR R2 ; ZERO SUPPRESSION CALL $CDDMG ; CONVERT TO ASCII MOVB #CR,(R0)+ ; MOVE IN MOVB #LF,(R0)+ ; SINGLE SPACING CLRB (R0) ; MARK END OF MESSAGE CALL TBLANK ; WRITE BLANK LINE TO TTY MOV #TERROR,R4 ; ADDRESS OF MESSAGE CALL WRITE ; GO WRITE IT RETURN .SBTTL TOTALS - OUTPUT RSXNET TOTALS FROM GET OR SEND ;+ ; ; TOTALS - Output RSXNET totals from last GET or SEND. ; ;- TOTALS:: CALL $SAVAL ; SAVE ALL REGISTERS MOV #LBUFF,R0 ; STORE THE STATUS HERE MOV #STAT1,R1 ; HEADER MESSAGE ADDRESS CALL MOVE ; MOVE IT ; Output the total # of records. MOV #STAT2,R1 ; TOTAL RECORDS MESSAGE CALL MOVE ; MOVE IT MOV #TRECNT,R1 ; ADDRESS OF TOTAL RECORDS MOV #7,R2 ; SET THE FIELD WIDTH CALL CDDMG ; CONVERT TO DECIMAL ASCII ; Output the total byte count. MOV #STAT3,R1 ; TOTAL BYTE COUNT MESSAGE CALL MOVE ; MOVE IT MOV #TBYTES,R1 ; ADDRESS OF TOTAL BYTES MOV #9.,R2 ; SET THE FIELD WIDTH CALL CDDMG ; CONVERT TO DECIMAL ASCII ; Output the number of timeouts. MOV #STAT4,R1 ; TIMEOUTS MESSAGE CALL MOVE ; MOVE IT MOV TMOCNT,R1 ; COPY THE TIMEOUT COUNT MOV #33012,R2 ; DECIMAL/BLANK FILL/WIDTH = 6 CALL $CBTA ; CONVERT TO ASCII ; Output the framing errors. MOV #STAT5,R1 ; FRAMING ERRORS MESSAGE CALL MOVE ; MOVE IT MOV BCCERR,R1 ; COPY FRAMING ERROR COUNT MOV #33012,R2 ; DECIMAL/BLANK FILL/WIDTH = 6 CALL $CBTA ; CONVERT TO ASCII ; Output the overrun error count. MOV #STAT6,R1 ; OVERRUN ERROR MESSAGE CALL MOVE ; MOVE IT MOV DAOERR,R1 ; COPY OVERRUN ERROR COUNT MOV #33012,R2 ; DECIMAL/BLANK FILL/WIDTH = 6 CALL $CBTA ; CONVERT TO ASCII ; Output the parity errors. MOV #STAT7,R1 ; PARITY ERRORS MESSAGE CALL MOVE ; MOVE IT MOV VERERR,R1 ; COPY PARITY ERROR COUNT MOV #33012,R2 ; DECIMAL/BLANK FILL/WIDTH = 6 CALL $CBTA ; CONVERT TO ASCII MOV #CRLF,R1 ; DO SINGLE SPACING CALL MOVE ; MOVE IT CLRB (R0) ; TERMINATE THE MESSAGE MOV #LBUFF,R4 ; ADDRESS OF OUTPUT BUFFER CALL WRITE ; WRITE THE STATUS REPORT RETURN .END