.TITLE POSITN ; ; FORTRAN-CALLABLE ROUTINE TO POSITION THE CURSOR ON A CRT TERMINTAL. ; AN OPTIONAL ENTRY POINT, CLEARS, WILL ALSO CLEAR TO THE END OF SCREEN. ; THIS CODE IS SPECIFICALLY FOR A BEEHIVE 100 TERMINAL AND MAY HAVE ; TO BE MODIFIED WHERE COMMENTED FOR OTHER TERMINALS. ; ; CALLING SEQUENCE ; ; CALL POSITN(LINE,CHAR[,LUN]) - POSITION CURSOR ONLY ; CALL CLEARS(LINE,CHAR[,LUN]) - POSITION CURSOR AND CLEAR TO END OF SCREEN ; LINE = LINE ON WHICH CURSOR IS TO BE POSITIONED (1 TO 24) ; CHAR = CHARACTER POSITION FOR CURSOR ON LINE (1 TO 80) ; LUN = LUN NUMBER (OPTIONAL INPUT - DEFAULT=5) ; ; WRITTEN SEPTEMBER 1977 R B FRENCH ; MODIFIED MARCH 1979 R B FRENCH ADDED CLEARS ; .MCALL DIR$,QIOW$ ; ;*************************************************************************** ; * ; THE FOLLOWING CODE IS SPECIFICALLY FOR A BEEHIVE 100 TERMINAL AND * ; MAY HAVE TO BE MODIFIED FOR OTHER TERMINALS. * ; * KODE: .BYTE 33,131 ;ESCAPE SEQUENCE TO POSITION CURSOR * LINE: .BYTE 0 ;LINE NUMBER * CHAR: .BYTE 0 ;COLUMN NUMBER * NKODE=.-KODE ; * .BYTE 33,112 ;ESCAPE SEQUENCE TO CLEAR TO END OF SCREEN * MKODE=.-KODE ; * ; * OFFSET: .WORD 40 ;OFFSET TO ADD TO LINE/COLUMN NUMBER TO * ;FORM OCTAL CODE FOR CURSOR POSITIONING. * ; * ;*************************************************************************** ; CLEARS::MOV #MKODE,QIOW+Q.IOPL+2 ;PUT BYTE COUNT IN DPB BR GO POSITN::MOV #NKODE,QIOW+Q.IOPL+2 ;PUT BYTE COUNT IN DPB GO:: MOV OFFSET,R0 ;PUT LINE NUMBER IN ESC SEQUENCE ADD @2(R5),R0 MOVB R0,LINE MOV OFFSET,R0 ;PUT CHARACTER POSITION IN ESC SEQUENCE ADD @4(R5),R0 MOVB R0,CHAR CMPB #3,(R5) ;LUN NUMBER INPUT? BNE 10$ ;BRANCH IF NOT MOV @6(R5),QIOW+Q.IOLU ;PUT LUN NUMBER IN DPB 10$: DIR$ #QIOW ;ISSUE QIO DIRECTIVE TO POSITION THE CURSOR RTS PC ;AND RETURN ; QIOW: QIOW$ IO.WLB!TF.WAL,1,1,,,, ;QIOW DPB FOR WRITE-PASS-ALL .END