TYPE: DO; $INCLUDE (:F1:COMMON.LIT) $INCLUDE (:F1:ISS.COM) DECL ACTUAL ADDRESS; DECL AFTCI ADDRESS; DECL AFTCO ADDRESS; DECL AFTIN ADDRESS; DECL AFTOUT ADDRESS; DECL CHRCOUNT BYTE; DECL CONSL$INP(*) BYTE DATA(':CI: '); DECL ERMSG0(*) BYTE DATA('ILLEGAL SWITCH',0DH,0AH); DECL I ADDRESS; DECL KEYBUFFER(122) BYTE; DECL LPT(*) BYTE DATA(':LP: '); DECL MAXSIZE LIT '2048'; DECL PRNTBUFFER(MAXSIZE) BYTE; DECL SPCBUFFER(*) BYTE DATA (' '); DECL STATUS ADDRESS; DECL TCNT BYTE; DEBLANK: PROCEDURE; DO WHILE KEYBUFFER(I) = SPACE; I = I + 1; END; RETURN; END DEBLANK; PRNTOUT: PROCEDURE; CALL OPEN(.AFTIN,.KEYBUFFER(I),READ$AC,0,.STATUS); IF STATUS > 0 THEN DO; CALL ERROR(STATUS); CALL EXIT; END; DO FOREVER; CALL READ (AFTIN,.PRNTBUFFER,MAXSIZE,.ACTUAL,.STATUS); IF STATUS > 0 THEN CALL ERROR(STATUS); IF ACTUAL = 0 THEN RETURN; DO I = 0 TO (ACTUAL - 1); IF PRNTBUFFER(I) = TAB THEN DO; TCNT = (8 - (CHRCOUNT MOD 8)); CALL WRITE(AFTOUT,.SPCBUFFER,TCNT,.STATUS); IF STATUS > 0 THEN CALL ERROR(STATUS); CHRCOUNT = CHRCOUNT + TCNT; END; ELSE DO; CALL WRITE(AFTOUT,.PRNTBUFFER(I),1,.STATUS); IF STATUS > 0 THEN CALL ERROR(STATUS); IF PRNTBUFFER(I) >= SPACE THEN CHRCOUNT = CHRCOUNT + 1; IF PRNTBUFFER(I) = CR THEN CHRCOUNT = 0; IF PRNTBUFFER(I) = BS THEN CHRCOUNT = CHRCOUNT - 1; END; END; END; END PRNTOUT; /* START OF MAIN PROGRAM */ CALL OPEN (.AFTCI,.CONSL$INP,READ$AC,LN$EDT$CO,.STATUS); IF STATUS > 0 THEN DO; CALL ERROR (STATUS); CALL EXIT; END; CALL READ (AFTCI,.KEYBUFFER,122,.ACTUAL,.STATUS); IF STATUS > 0 THEN DO; CALL ERROR(STATUS); CALL EXIT; END; IF KEYBUFFER(0) = '/' THEN DO; IF KEYBUFFER(1) <> 'L' THEN DO; CALL WRITE(CO$AFT,.ERMSG0,LENGTH(ERMSG0),.STATUS); IF STATUS > 0 THEN CALL ERROR(STATUS); CALL EXIT; END; I = 2; CALL DEBLANK; CALL OPEN(.AFT$OUT,.LPT,WRITE$AC,0,.STATUS); IF STATUS > 0 THEN DO; CALL ERROR(STATUS); CALL EXIT; END; END; ELSE DO; I = 0; CALL DEBLANK; AFT$OUT = CO$AFT; END; CALL PRNT$OUT; CALL EXIT; END; EOF