.ENABL LC .TITLE SWRITE SUBROUTINE SWRITE ( [UNIT], [CC], STR1, ..., STRn) .IDENT /V01.00/ ;***************************************************************************** ; ; Description : Write to unit the concatenated strings STR1 to STRn using ; the FORTRAN control characters CC ; ; Arguments : UNIT = unit number to write to (optional default=5) ; CC = FORTRAN carriagecontrol string (eg.' ','+$','$') ; (optional default=' ') ; STRm = STRINGs to write (optional) ; ; Author : R.Beetz ; AKZO PHARMA, Oss Holland ; dept. SDA ; ; Version : V1.0 Date : 26-oct-82 ; ; Module name : SWRITE.MAC ; ; Package : RSX-LIBRARY ; ; Compilation/Linking : MACRO SWRITE ; ; Updates : name version ; ; description : ; ;***************************************************************************** ; .GLOBL SWRITS SWRITE:: ; 10$: CLR NARG MOVB (R5)+,NARG ;save number of args TSTB (R5)+ ; TST NARG BEQ 15$ CMP (R5),#-1 BNE 20$ ;unitnumber given 15$: MOV #VYF,TABEL+2 ;default unitnumber = 5 TST (R5)+ BR 30$ 20$: MOV (R5)+,TABEL+2 ;save unitnumber ; 30$: CMP NARG,#1 BLE 40$ CMP (R5),#-1 BEQ 40$ ;CC defaulted TSTB @(R5) BEQ 40$ ;CC string is empty MOV (R5),R0 CMPB (R0),#'$ BEQ 50$ ;CC = '$' CMPB 1(R0),#'$ BEQ 60$ ;CC = 'x$' MOVB @(R5),CC1 ;CC = 'x' => CC1 = 'x' MOVB #40,CC2 ; CC2 = ' ' BR PRINT 40$: MOVB #40,CC1 ;CC defaulted or empty => CC1 = ' ' MOVB #40,CC2 ; CC2 = ' ' BR PRINT 50$: MOVB #40,CC1 ;CC = '$' => CC1 = ' ' MOVB #'$,CC2 ; CC2 = '$' BR PRINT 60$: MOVB @(R5),CC1 ;CC = 'x$' => CC1 = 'x' MOVB #'$,CC2 ; CC2 = '$' ; PRINT: SUB #2,NARG ;# of strings = # of args - 2 TST (R5)+ MOVB CC1,CCHAR1 ;CC of first string to write BR 20$ 10$: MOVB #'+,CCHAR1 ;CC of all other strings to write 20$: CMP NARG,#1 ;last argument? BGT 30$ MOVB CC2,CCHAR2 ;closing CC of last string to write BR 40$ 30$: MOVB #'$,CCHAR2 ;closing CC of all other strings to write 40$: MOV #EMPTY,TABEL+6 ;default string is empty TST NARG BLE 45$ CMP (R5),#-1 BEQ 45$ MOV (R5)+,TABEL+6 ;address of string to write 45$: MOV R5,-(SP) ;save address of arglist MOV #TABEL,R5 ;set up arglist for SWRITS CALL SWRITS MOV (SP)+,R5 ;restore arglist DEC NARG BGT 10$ RETURN ; TABEL: .WORD 3 ;arglist of SWRITS .WORD 0 ;unitnr .WORD CCHAR1 ;control characters .WORD 0 ;string to write ; CCHAR1: .BYTE 0 CCHAR2: .BYTE 0 CC1: .BYTE 0 CC2: .BYTE 0 NARG: .WORD 0 VYF: .WORD 5 EMPTY: .WORD 0 .END