; JAMIT.LIT ; ; ; SEARCH SYS SEARCH SYSSYM SEARCH TRM AUTOEXTERN VMAJOR=1. VMINOR=0. VSUB=1. VEDIT=100. VWHO=1. BUFSIZ=400. ;allow for at least 400 char buffer 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 .