.TITLE WRTTY .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: WRTTY ; ; DATE: 13-JUL-79 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL WRTTY(LUN,STRING,[ILEN],[WAL],[ISW]) ; ; LUN = INTEGER CONTAINING A LOGICAL UNIT NUMBER. ; ; STRING = VARIABLE, ARRAY OR LITERAL CONTAINING THE BYTE(S) ; TO BE OUTPUT. ; ; ILEN = OPTIONAL INTEGER ARGUMENT SPECIFYING THE NUMBER ; OF BYTES TO OUTPUT. IF THE ARGUMENT IS NOT ; SUPPLIED THE STRING MUST BE TERMINATED BY A ZERO ; BYTE (ASCII NULL CHARACTER). ; ; WAL = OPTIONAL LITERAL 'WRITEALL' INDICATING THAT ALL ; EIGHT BITS OF THE BYTE ARE TO BE OUTPUT WITHOUT ; INTERFERENCE BY THE TERMINAL DEVICE HANDLER. ; ; ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. ; ; 00 = SUCCESS ; ; -NN = FCS ERROR CODE ; ; ; ; DESCRIPTION: ; ; "WRTTY" OUTPUTS AN ARRAY OF BYTES USING THE QIO IO.WLB (WRITE ; LOGICAL BLOCK) FUNCTION. THE ROUTINE MAY BE USED WHENEVER IT IS DE- ; SIRABLE TO OUTPUT THE ENTIRE EIGHT BITS OF A BYTE, ('WRITEALL' OPTION), ; WITHOUT INTERFERENCE BY THE TERMINAL DEVICE HANDLER, SUCH AS SENDING ; PLOT COORDINATES TO A GRAPHICS TERMINAL. ; ; CARE SHOULD BE EXERCISED WHEN OUTPUTING TO TERMINAL DEVICES USING ; THE 'WRITEALL' OPTION. TERMINAL OUTPUT VIA WRITEALL DOES NOT UPDATE ; CURSOR POSITION REGISTERS IN THE TERMINAL HANDLER. AS SUCH, THE TERMINAL ; HANDLER LOSES TRACK OF HORIZONTAL AND VERTICAL CURSOR POSITIONING. ; ; WHEN ISSUED WITHOUT THE 'WRITEALL' OPTION, THE FIRST CHARACTER OF ; "STRING" IS INTERPRETED AS A CARRIAGE CONTROL CHARACTER, (REFER TO ; TABLE 6-3 OF THE "PDP-11 FORTRAN REFERENCE MANUAL"). WHEN THE 'WRITEALL' ; OPTION IS REQUESTED, OUTPUT IS INITIATED FROM THE CURRENT CURSOR POSITION. ; ; ; ; EXAMPLES: ; ; CALL WRTTY(5,' MESSAGE') ; ; CALL WRTTY(5,ARRAY,128,'WRITEALL') ; ; .SBTTL SYMBOL DEFINITIONS ; ; ; .PSECT ; .MCALL QIOW$,DIR$ ; ; DPB: QIOW$ IO.WLB,,,,QIOST,,<,,> ; DECLARE QIO DPB ; QIOBF = Q.IOPL+0 ; QIO STRING ADDRESS OFFSET QIOLN = Q.IOPL+2 ; QIO STRING LENGTH OFFSET QIOVF = Q.IOPL+4 ; QIO VERTICAL FORMAT CONTROL OFFSET ; QIOST: .WORD 0,0 ; QIO STATUS BLOCK ; .SBTTL ENTRY POINT -- PERFORM QIO IO.WLB ; ; ; WRTTY:: ; ; MOV #DPB,R0 ; QIO DPB ADDRESS TO R0 MOV #IO.WLB,Q.IOFN(R0) ; DEFAULT FUNCTION TO DPB MOV @2(R5),Q.IOLU(R0) ; LUN TO QIO DPB MOV @2(R5),Q.IOEF(R0) ; SET EVENT FLAG FOR QIO AND WAIT MOV 4(R5),R1 ; BUFFER ADDRESS TO R1 ; CMPB #4,(R5) ; FOUR ARGUMENTS? BGT 2$ ; NO, ASSUME DEFAULT (NO 'WRITEALL') TST 10(R5) ; NULL ARGUMENT? BLT 2$ ; YES, ASSUME DEFAULT (NO 'WRITEALL') MOV #IO.WAL,Q.IOFN(R0) ; NO, ASSUME 'WRITEALL' REQUESTED CLR QIOVF(R0) ; NULL VERTICAL FORMAT CONTROL BR .+6 ; BRANCH PAST DEFAULT VFC 2$: MOVB (R1)+,QIOVF(R0) ; DEFAULT, 1ST CHARACTER IS VFC MOV R1,QIOBF(R0) ; STRING ADDRESS TO QIO DPB ; CMPB #3,(R5) ; THREE ARGUMENTS? BGT 4$ ; NO, SCAN STRING FOR ILEN TST 6(R5) ; NULL ARGUMENT? BLT 4$ ; YES, SCAN STRING FOR ILEN MOV @6(R5),R2 ; NO, ILEN TO R2 BR 10$ ; BRANCH PAST SCAN FOR ILEN 4$: CLR R2 ; CLEAR CHARACTER COUNT MOV 4(R5),R1 ; STRING ADDRESS TO R1 6$: TSTB (R1)+ ; END-OF-STRING? BEQ 10$ ; YES, BRANCH FROM SCAN LOOP INC R2 ; NO, INCREMENT CHARACTER COUNT BR 6$ ; AND CONTINUE TO SCAN 10$: MOV R2,QIOLN(R0) ; STRING LENGTH TO QIO DPB ; DIR$ #DPB ; ISSUE QIO DIRECTIVE TSTB QIOST ; OPERATION SUCCESS? BLT ERR ; RETURN ON ERROR OR EOF ; .SBTTL PROCESS ERRORS AND RETURN TO CALLER ; ; ; SUC: CLR R4 ; SUCCESS, ISW = 0 BR RTN ; ERR: MOVB QIOST,R4 ; WRITE ERROR ; ; RTN: CMPB #5,(R5) ; FIVE ARGUMENTS? BGT 2$ ; NO, RETURN TO CALLER TST 16(R5) ; NULL ARGUMENT? BLT 2$ ; YES, RETURN TO CALLER MOV R4,@12(R5) ; NO, RETURN STATUS 2$: RTS PC ; RETURN TO CALLER .END ;