PHDR -1,PV$RPD,PH$REE!PH$REU
START: GETIMP 400.,A3 ; ALLOCATE MEMORY MODULE
PUSH A3 ; SAVE BEGINNING OF BUFFER FOR LATER
JOBIDX A0 ; GET JCB ADDRESS
CLR D2 ; CLEAR THE CONTROL CHARACTER FLAG
MOV #BUFSIZ,D4 ; SET UP OUR CHARACTER COUNTER
CLR D5 ; CLEAR MODE FLAG FOR SINGLE LINE
;
; CHECK FOR INPUT ON SAME LINE AS JAMIT COMMAND (SINGLE LINE MODE)
;
BYP ; GET PAST BLANKS AND TABS
LIN ; AT END OF LINE
BNE FRC3 ; IF NOT, THEN SINGLE LINE INPUT
INC D5 ; ELSE SET MODE TO MULTIPLE LINE
;
; GET ANOTHER LINE OF INPUT (MULTIPLE LINE MODE)
;
FRC2: KBD ; GET ANOTHER LINE OF INPUT
CTRLC FRCX ; ON CONTROL/C EXIT
BYP ; GET PAST BLANKS AND TABS
LIN ; ANYTHING ON THIS LINE ?
BEQ FRC4 ; IF NOT, GO TO FORCE OPERATION
;
; PUT CHARACTERS TO BE FORCED INTO LOCAL BUFFER
;
FRC3: MOVB @A2,(A3)+ ; PUT NEXT CHARACTER INTO LOCAL BUFFER
DEC D4 ; DECREMENT CHARACTER COUNT
BEQ FRC4 ; DONE IF NO MORE ROOM IN BUFFER
CMPB (A2)+,#15 ; IS THIS THE END OF THE LINE ?
BNE FRC3 ; NO
TST D5 ; ARE WE IN SINGLE LINE MODE ?
BNE FRC2 ; NO
;
; TRANSFER CHARACTERS FROM LOCAL BUFFER TO TERMINAL INPUT BUFFER
;
FRC4: NEG D4 ; CALCULATE NUMBER OF CHARS. IN BUFFER
ADD #BUFSIZ,D4
BEQ FRCX ; DONE IF NONE
POP A3 ; POINT TO BUFFER BEGINNING AGAIN
MOV JOBTRM(A0),A5 ; POINT TO TRMDEF
ORW #T$XLT!T$ILC!T$DAT,T.STS(A5) ; SET NOECHO, IMAGE MODE, DATA TRANSPARENCY, & ENABLE LOWER CASE
FRC5: MOV JOBTRM(A0),A5 ; POINT TO TRMDEF FOR THIS JOB
MOVB (A3)+,D1 ; PICK UP THE CHARACTER TO OUTPUT
CMPB D1,#10 ; SEE IF LINE FEED
BNE FRC6 ; IF NOT, PUT IT OUT
CMPB -1(A3),#15 ; SEE IF LAST ONE WAS A CARRIAGE RETURN
BEQ FRC7 ; IF SO, NO NEED FOR LINEFEED
FRC6: TRMICP ; PROCESS CHARACTER
FRC7: SOB D4,FRC5 ; LOOP BACK TILL DONE
FRCX: EXIT ; ALL DONE HERE
END