.NLIST TITLE BUILD,BUILD .LIST .PAGE .SBTTL BUILD - BUILD COMMAND "A" OR "B" OR FILE NAME STRING ; BUILD.MAC 01DEC82 ; ; .ENABL LC ERASE: .BYTE 10, 40, 10 ; CODE TO ERASE LAST CHARACTER WRITTEN MES2: .ASCII <15><12>/TLK -- File name too long -- Not redirected/<15><12> LENM2=.-MES2 MES6: .ASCII <15><12>/TLK -- / .IIF DF SIGMA9 .ASCII /SIGMA9/ .IIF DF RSX11 .ASCII /PDP/ .ASCII / file name too long/<15><12> LENM6=.-MES6 TRAILA: ; COMMAND "A" TRAILING STRING .IF DF RSX11 .ASCII /=TI:/ ; END OF RSX-11M COPY COMMAND .ENDC ;RSX11 LENTRA=.-TRAILA TRAILB: ; COMMAND "B" TRAILING STRING .IF DF VAX .ASCII / TT:/ ; END OF VAX/VMS COPY COMMAND .ENDC ;VAX LENTRB=.-TRAILB .EVEN BUILD:: CMPB #177, CHAR ; IS CHARACTER A DELETE? BNE 2$ ; NO TST NAMECT ; IF YES, IS THIS FIRST INPUT CHARACTER? BNE 1$ ; NO JMP 30$ ; RETURN 1$: QIOMAC R0, #WALTIO, #ERASE, #3, Y ; ERASE LAST CHARACTER ON TERMINAL DEC NAMECT ; IGNORE LAST CHARACTER IN FNAME DEC FNPTR ; UPDATE FILE NAME POINTER JMP 30$ ; RETURN 2$: QIOMAC R0, #WALTIO, #EKOBUF ; SET UP PART OF DPB FOR WRITE MOVB CHAR, EKOBUF ; MOVE CHARACTER TO WRITE BUFFER CMPB CHAR, #15 ; END OF FILE NAME? BNE 10$ ; NO QIOMAC R0, , , #3, Y ; ECHO CHARACTER TO TERMINAL MOVB CHAR,@FNPTR ; BUFFER THE CLRB BLDFLG ; TURN OFF GENERAL BUILD FLAG TSTB BNMFLG ; ARE WE BUILDING A LOCAL FILE NAME? BNE 8$ ; YES ADD NAMECT,LENCMD ; CALCULATE LENGTH OF COMMAND INC LENCMD ; INCREMENT LENGTH OF COMMAND FOR INCB WT2FLG ; SET FLAG TO WAIT FOR COMMAND TRANSMIT TSTB BCBFLG ; ARE WE BUILDING COMMAND "B"? BNE 4$ ; YES ; ; BUILDING COMMAND "A" HERE .IF NE LENTRA ; APPEND TRAILING CMD STRING, IF ANY MOV #TRAILA,R2 ; GET START OF TRAILING CMD STRING MOV #LENTRA,R3 ; LENGTH OF TRAILING CMD STRING 3$: MOVB (R2)+,@FNPTR ; BUFFER THE CHARACTER INC FNPTR ; INCREMENT POINTER SOB R3,3$ ; LOOP MOVB #15,@FNPTR ; APPEND THE ADD #LENTRA,LENCMD ; UPDATE COMMAND LENGTH .ENDC ;LENTRA CLRB BCAFLG ; TURN OFF BUILD FLAG JSR PC,REDINP ; REDIRECT INPUT BR 30$ ; RETURN 4$: ; ; BUILDING COMMAND "B" HERE .IF DF VAX INCB WT2FLG ; ALSO IGNORE EXTRA ON VAX .ENDC ;VAX CLRB NLRFLG ; CLEAR NULL RECORD FLAG .IF NE LENTRB ; APPEND TRAILING CMD STRING, IF ANY MOV #TRAILB,R2 ; GET START OF TRAILING CMD STRING MOV #LENTRB,R3 ; LENGTH OF TRAILING CMD STRING 5$: MOVB (R2)+,@FNPTR ; BUFFER THE CHARACTER INC FNPTR ; INCREMENT POINTER SOB R3,5$ ; LOOP MOVB #15,@FNPTR ; APPEND THE ADD #LENTRB,LENCMD ; UPDATE COMMAND LENGTH .ENDC ;LENTRB CLRB BCBFLG ; TURN OFF BUILD FLAG JSR PC,REDOUT ; REDIRECT OUTPUT BR 30$ ; RETURN 8$: JSR PC,OPNFLE ; PARSE AND OPEN FILE CLRB BNMFLG ; TURN OFF BUILD FLAG TSTB HLPFLG ; IS TALK HELPING? BEQ 30$ ; NO - RETURN JSR PC,SNDCMD ; TRANSMIT COMMAND STRING BR 30$ ; RETURN 10$: QIOMAC R0, , , #1, Y ; ECHO CHARACTER TO TERMINAL CMP #31., NAMECT ; LONGER THAN ANY LEGAL FILE NAME? BEQ 20$ MOVB CHAR,@FNPTR ; APPEND CHARACTER TO COMMAND INC FNPTR ; INCREMENT COMMAND BUFFER POINTER INC NAMECT ; INCREMENT FILE NAME LENGTH BR 30$ 20$: CLRB BCAFLG ; ERROR, TURN OFF BUILD FLAGS CLRB BCBFLG CLRB BLDFLG ; TURN OFF GENERAL BUILD FLAG TSTB BNMFLG ; BUILDING LOCAL FILE NAME? BNE 25$ ; YES QIOMAC R0, , #MES6, #LENM6, Y ; WRITE MESSAGE 6 TO TERMINAL BR 30$ ; RETURN 25$: CLRB BNMFLG ; CLEAR BUILD FLAG QIOMAC R0, , #MES2, #LENM2, Y ; WRITE MESSAGE 2 TO TERMINAL 30$: RTS PC .NLIST TITLE OPNFLE,BUILD .LIST .PAGE .SBTTL OPNFLE - OPEN REDIRECTED INPUT/OUTPUT FILE ; MES3: .ASCII <15><12>/TLK -- File open error - not redirected /<15><12> LENM3=.-MES3 RDIMSG: .ASCII <15><12>/** INPUT REDIRECTED **/<15><12> LENRIM=.-RDIMSG RDOMSG: .ASCII <15><12>/** OUTPUT REDIRECTED **/<15><12> LENROM=.-RDOMSG .EVEN OPNFLE:: CSI$1 #CSIBLK, #FNAME, NAMECT ; SQUEEZE OUT BLANKS BCS 8$ CSI$2 #CSIBLK, OUTPUT ; PARSE FILE NAME BCS 8$ CMPB #1, BNMFLG ; INPUT OR OUTPUT FILE? BNE 1$ OPEN$R #FDBIN ; OPEN INPUT FILE BCS 8$ INCB RDIFLG ; INDICATE REDIRECTED INPUT QIOMAC R0, #WALTIO, #RDIMSG, #LENRIM, Y ; WRITE MESSAGE CLR RECCNT ; CLEAR FLAG FOR SENDING RECORDS CLR NREC ; ZERO COUNT OF RECORDS READ FROM FILE CLR NRECA ; ZERO COUNT OF RECORDS SINCE LAST MSG BR 9$ 1$: OPEN$W #FDBOUT ; OPEN OUTPUT FILE BCS 8$ INCB RDOFLG ; INDICATE REDIRECTED OUTPUT QIOMAC R0, #WALTIO, #RDOMSG, #LENROM, Y ; WRITE MESSAGE BR 9$ 8$: QIOMAC R0, #WALTIO, #MES3, #LENM3, Y ; WRITE MES3 TO TERMINAL CLRB HLPFLG ; CLEAR HELPING FLAG 9$: RTS PC .NLIST TITLE SNDCMD,BUILD .LIST .PAGE .SBTTL SNDCMD - SEND COMMAND "A" OR "B" ; SNDCMD:: MOV CMDPTR,R1 ; ADDRESS OF COMMAND MOV LENCMD,R2 ; GET LENGTH OF COMMAND 5$: MOVB (R1)+,CHAR ; GET CHARACTER JSR PC,SENDPR ; SEND IT TO PORT SOB R2,5$ ; LOOP RTS PC .NLIST TITLE ,BUILD .LIST ; .END