.TITLE TRMCTL.MAC 88e24a 15-APR-81/24-May-88. .ENABL LC ; Author: N. A. Bourgeois, Jr. ; NAB Software Services, Inc. ; PO Box 20009 ; Albuquerque, NM 87154 ; The code and information in this software is subject to ; change without notice and should not be construed as a ; commitment by NAB Software Services, Inc. NAB Software ; Services,Inc. assumes no responsibility for any errors ; that may appear in this software. ; ; ; NOTICE ; ; This software is sponsored by NAB Software Services, Inc. ; Neither NAB Software Services, Inc., nor any of their ; employees, nor any of their contractors, subcontractors, ; or their employees makes any warranty, express or implied, ; or assumes any legal liability or responsibility for the ; accuracy, completeness or usefulness of any information, ; apparatus, product or process disclosed, or represents ; that its use would not infringe privately owned rights. ; THIS SOFTWARE WAS ORIGINALLY ISSUED BY SANDIA NATIONAL ; LABORATORIES, OPERATED FOR THE UNITED STATES DEPARTMENT ; OF ENERGY BY SANDIA CORPORATION. ; ; NOTICE ; ; THIS SOFTWARE WAS ORIGINALLY SPONSORED BY THE UNITED ; STATES GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT ; NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF ; THEIR EMPLOYEES, NOR ANY OF THEIR CONTRACTORS, ; SUBCONTRACTORS, OR THEIR EMPLOYEES MAKES ANY WARRANTY, ; EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR ; RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS OR ; USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT OR ; PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT ; INFRINGE PRIVATELY OWNED RIGHTS. ; ; THIS WORK WAS ORIGINALLY FUNDED BY: ; ; HEADQUARTERS, ESD / OCB / STOP 36 ; HANSCOM AIR FORCE BASE, MA 01731 .SBTTL EDIT RECORD 15-APR-81/24-May-88. ;15-APR-81 ORIGINAL CREATION. ;16-JUN-81 CORRECTED TYPO IN DESCRIPTION. ;29-JUL-81 CORRECTED ARGUMENT RETURN ERROR IN THE "DOIT4" SUBROUTINE. ;26-FEB-82 ADDED IDENTIFICATION CODE. ;06-Jan-84 Maintenance assumed by NAB Software Services, Inc. ;26-Jan-84 Added the ITRCTL routine. ;04-Oct-84 Minor revisions for V5.1. ;13-Feb-86 Corrected IRET description for IACTCH routine. Added TTCRTN ; routine. ;26-Mar-87 Revised for V6.2. Added NAB Software disclaimer. Revised ; TTCRTN routine. Added DOIT5 subroutine. ;09-Feb-88 Fixed bugs in DOIT and DOIT4 for F77. ;24-May-88 Revised for V6.31. Added IGNPIC. Changed ITRERR and DOIT. .PAGE .SBTTL DESCRIPTION 15-APR-81/26-Mar-87. ;THESE TERMINAL CONTROL SUPPORT ROUTINES ARE CALLABLE AS ;SUBROUTINES. SOME OF THEM ARE ALSO CALLABLE AS FUNCTIONS. THIS ;MODULE IS A PART OF THE LIBRARY OF FORTRAN CALLABLE TSX/TSX-PLUS ;EMT ROUTINES. ;CHECK THE TERMINAL FOR INPUT ERRORS. ; ;CALLING SEQUENCES: ; ; CALL ITRERR ( IERR ) ; OR ; IERR = ITRERR () ; ; WHERE: IERR IS ONE OF THE FOLLOWING: ; ; 0 NO ERROR. ; 1 AN INPUT ERROR HAS OCCURRED. ; Determine the number of pending input characters for a line. ; ; Calling Sequences: ; ; CALL IGNPIC ( IRET ) ; or ; IRET = IGNPIC () ; ; where: IRET is the number of pending input characters. ;SET TERMINAL READ TIME-OUT VALUE. ; ;CALLING SEQUENCE: ; ; CALL TIMOUT ( ITIME , IACTCH ) ; ; WHERE: ITIME IS THE TIME-OUT VALUE IN 0.5 SECOND UNITS. ; ; IACTCH IS A SINGLE CHARACTER VALUE THAT IS TO BE ; RETURNED AS THE LAST CHARACTER OF THE FIELD ; IF A TIME-OUT OCCURS. ;TURN ON HIGH-EFFICIENCY TERMINAL MODE. ; ;CALLING SEQUENCE: ; ; CALL HIEFON ;TURN OFF HIGH-EFFICIENCY TERMINAL MODE. ; ;CALLING SEQUENCE: ; ; CALL HIEFOF ;CHECK FOR PENDING ACTIVATION CHARACTERS. ; ;CALLING SEQUENCES: ; ; CALL IACTCH ( IRET ) ; OR ; IRET = IACTCH () ; ; WHERE: IRET IS ONE OF THE FOLLOWING: ; ; 0 ACTIVATION CHARACTER(S) PENDING. ; 1 NO ACTIVATION CHARACTER PENDING. ;ESTABLISH BREAK SENTINAL CONTROL. ; ;CALLING SEQUENCE: ; ; CALL BRKCTL ( IBRKCH , CPLRTN ) ; ; WHERE: IBRKCH IS A SINGLE CHARACTER VALUE THAT IS TO BE THE ; BREAK CHARACTER. ; ; CPLRTN IS THE NAME OF THE COMPLETION ROUTINE TO BE ; EXECUTED WHEN THE BREAK CHARACTER IS RECEIVED. ;Establish a terminal input completion routine. ; ;Calling sequence: ; ; CALL TTCRTN ( CPLRTN ) ; ; Where: CPLRTN is the name of the terminal input completion ; routine to be executed for each input character. ;DETERMINE THE TERMINAL TYPE. ; ;CALLING SEQUENCES: ; ; CALL ITRTYP ( IRET ) ; OR ; IRET = ITRTYP () ; ; WHERE: IRET IS ONE OF THE FOLLOWING: ; ; 0 UNKNOWN. ; 1 VT52. ; 2 VT100. ; 3 HAZELTINE. ; 4 ADM3A. ; 5 LA36. ; 6 LA120. ; 7 DIABLO. ; 9 QUME. ; Perform lead-in character type terminal control functions. ; ; Calling sequence: ; ; CALL ITRCTL ( IFUN , IARG ) ; ; where: IFUN is an integer value that corresponds to the ; ASCII code for the desired terminal control ; function in the ranges of 65 through 70 (A-F) ; and 72 through 90 (H-Z). ; ; IARG is zero or an integer value required with some ; functions. .PAGE .SBTTL DIRECTIVES 15-APR-81/24-May-88. .IDENT \88e24a\ ;TELL LINKER OUR VERSION .PSECT TSXLIB .GLOBL TSLBID .WORD TSLBID .DSABL GBL .SBTTL ASSIGNMENTS 15-APR-81/. ERRBYT = 52 ;ERROR CODE LOCATION .PAGE .SBTTL ENTRY POINTS 15-APR-81/24-May-88. ;CHECK THE TERMINAL FOR INPUT ERRORS. ; ITRERR::MOV #116 ,R1 ;EMT CODE CLR R2 ;EMT ID JSR PC ,DOIT ;CHECK FOR ERRORS RTS PC ; Determine the number of input characters pending for a line. ; IGNPIC::MOV #116 ,R1 ;EMT code MOV #1 ,R2 ;EMT ID CALL DOIT ;Get the number RETURN ;SET TERMINAL READ TIME-OUT VALUE. ; TIMOUT::MOV #117 ,R1 ;EMT CODE JSR PC ,DOIT1 ;SET THE VALUE RTS PC ;TURN ON HIGH-EFFICIENCY TERMINAL MODE. ; HIEFON::MOV #120 ,R1 ;EMT CODE MOV #1 ,R2 ;EMT ID JSR PC ,DOIT2 ;TURN IT ON RTS PC ;TURN OFF HIGH-EFFICIENCY TERMINAL MODE. ; HIEFOF::MOV #120 ,R1 ;EMT CODE CLR R2 ;EMT ID JSR PC ,DOIT2 ;TURN IT OFF RTS PC ;CHECK FOR PENDING ACTIVATION CHARACTERS. ; IACTCH::MOV #123 ,R1 ;EMT CODE JSR PC ,DOIT ;CHECK FOR THEM RTS PC ;ESTABLISH BREAK SENTINAL CONTROL. ; BRKCTL::MOV #133 ,R1 ;EMT CODE JSR PC ,DOIT3 ;BREAK CONTROL RTS PC ;Establish a terminal input completion routine. ; TTCRTN::MOV #133 ,R1 ;EMT code MOV #1 ,R2 ;EMT id CALL DOIT5 ;Establish the routine RETURN ;DETERMINE THE TERMINAL TYPE. ; ITRTYP::MOV #137 ,R1 ;EMT CODE JSR PC ,DOIT4 ;GET TERMINAL TYPE RTS PC ; Perform lead-in character type terminal control functions. ; ITRCTL::MOV #152 ,R1 ;EMT code CALL DOIT1 ;perform the function. RETURN .PAGE .SBTTL SUPPORTING SUBROUTINES 15-APR-81/24-May-88. DOIT: MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR MOV #1 ,R0 ; IF ERROR BR 2$ 1$: CLR R0 ;SHOW NO ERROR 2$: CMPB #1 ,(R5) ;F66 function call? BNE 3$ ; yes CMP 2(R5) ,#-1 ; F77 function call? BEQ 3$ ; yes MOV R0 ,@2(R5) ; no, subroutine call 3$: TST (SP)+ ;FIX THE STACK POINTER RTS PC DOIT1: MOV @4(R5) ,-(SP) ;PASS ARGUMENT 2 MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 CLR -(SP) ;LO BYTE = 0 MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT ADD #6 ,SP ;FIX THE STACK POINTER RTS PC DOIT2: MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT TST (SP)+ ;FIX THE STACK POINTER RTS PC DOIT3: MOV 4(R5) ,-(SP) ;PASS ARGUMENT 2 MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 CLR -(SP) ;LO BYTE = 0 MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT ADD #6 ,SP ;FIX THE STACK POINTER RTS PC DOIT4: CLR -(SP) ;LO BYTE = 0 MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT CMPB #1 ,(R5) ;F66 function call? BNE 1$ ; yes CMP 2(R5) ,#-1 ; F77 function call? BEQ 1$ ; yes MOV R0 ,@2(R5) ; no, subroutine call 1$: TST (SP)+ ;FIX THE STACK POINTER RTS PC DOIT5: MOV 2(R5) ,-(SP) ;pass argument 1 MOV R2 ,-(SP) ;lo byte = EMT ID MOV SP ,R0 ;EMT pointer MOVB R1 ,1(R0) ;HI BYTE = EMT code EMT 375 ;let TSX do it CMP (SP)+ ,(SP)+ ;fix the stack pointer RETURN .SBTTL END 15-APR-81/. .END