TITLE READ F=7 S=10 P=6 PNTR=1 A=2 B=3 CMPTR=4 BCOUNT=5 RCH: MOVE PNTR,[10700,,BUFF-1] ;INITL BYTE PNTR TO BUFF MOVEM PNTR,CMPTR GCHR: PUSHJ P,TYI ;GET CHAR CAIN A,177 ;RUBOUT? JRST RUBOT IDPB A,PNTR CAIE A,15 ;CR? JRST GCHR MOVEI A,0 ;IT WAS CR IDPB A,PNTR ;MARK END OF STRNG CPOPJ: POPJ P, RUBOT: CAMN PNTR,[10700,,BUFF-1] ;RUBOUT AT BEG OF BUFFER? JRST BRUB LDB A,PNTR ;GET LAST CHAR TYPED PUSHJ P,TYO ;ECHO IT ADD PNTR,[70000,,] ;DECREMENT POINTER JUMPGE PNTR,GCHR ;JUMP IF VALID SUB F,[430000,,1] ;WAS 440700,,SOMETHING, BACK IT UP JRST GCHR BRUB: PUSHJ P,CRR ;TYPE CR LF JRST GCHR TYI: .IOT TTI,A JUMPE A,TYI CAIE A,15 POPJ P, PUSHJ P,CRR ;ECHO CR MOVEI A,15 POPJ P, TYO: .IOT TTO,A POPJ P, CRS: MOVEI A,"* PUSHJ P,TYO CRR: MOVEI A,15 PUSHJ P,TYO MOVEI A,12 JRST TYO BUFF: BLOCK 10 LINE==1 TTO==1 TTI==2 DSK==3 ERRC==4 PTRC==5 BEGIN: MOVE P,[-100,,PLD] .OPEN TTO,STTO .VALUE 0 .OPEN TTI,STTI .VALUE 0 JRST BCMD STTO: 5,,(SIXBIT /TTY/) STTI: 0,,(SIXBIT /TTY/) PLD: BLOCK 100 BCMD: PUSHJ P,CRS PUSHJ P,RCH ;GET TYPED IN COMMANND MOVE PNTR,IP SETZB F,S COMND: ILDB A,CMPTR CAIN A,^Q JRST CMDQ CAIN A,15 JRST CMDE CAIN A,^G JRST BCMD CAIN A,": JRST CMDCOL CAIN A,"; JRST CMDSC CAIG A,40 JRST CMDS SXBT: SUBI A,40 TLNE PNTR,770000 ;STOP AFTER POSITIN=0 IDPB A,PNTR JRST COMND CMDS: MOVE F,S CMD1: MOVE PNTR,IP MOVEI S,0 JRST COMND CMDSC: MOVEM S,SNR JRST CMD1 CMDCOL: JRST CMD1 ;FOR NOW IGNORE IT IP: 440600,,S CMDE: .SUSET [.SSNAM,,SNR] JUMPE F,FZ JUMPN S,SNZ FZ: LSHC F,36. ;MOVE S TO F AND ZERO S SZ: JUMPE F,BCMD ;TAKE IN NEW NAME MOVE S,BIN SNZ: MOVEM F,ADR+1 MOVEM S,ADR+2 .OPEN DSK,ADR JRST ERROR MOVEI PNTR,0 JRST STBLK ERROR: .OPEN ERRC,ERR0 .VALUE 0 ERR1: .IOT ERRC,A CAIN A,3 JRST BCMD JUMPL A,BCMD PUSHJ P,TYO JRST ERR1 ERR0: SIXBIT / ERR/ 1 0 SNR: 0 ADR: 5,,(SIXBIT /DSK/) 0 0 BIN: SIXBIT / BIN/ CMDQ: ILDB A,CMPTR JRST SXBT STBLK: .OPEN PTRC,[10,,(SIXBIT /PTR/)] .VALUE 0 ST: SETZ B .IOT PTRC,A JUMPL A,DONE ADD B,A LSH B,7 .IOT PTRC,A JUMPL A,DONE ADD B,A LSH B,7 .IOT PTRC,A JUMPL A,DONE ADD B,A LSH B,7 .IOT PTRC,A JUMPL A,DONE ADD B,A LSH B,7 .IOT PTRC,A JUMPL A,DONE ADD B,A LSH B,8 .IOT DSK,B JRST ST DONE: .CLOSE DSK, .CLOSE PTRC, JRST BCMD END BEGIN STBLK: PUSHJ P,GET MOVEI BCOUNT,15 ;RANDOM NUMBER JUMPL A,DONE PUSHJ P,SEND CAIE A,1 JRST STBLK ;SEARCH FOR BEGINNING OF BLOCK PUSHJ P,GET ;SHOULD BE ZERO PUSHJ P,SEND PUSHJ P,GSWRD SUBI B,3 ;GET CORRECT BYTE COUNT MOVEM B,BCOUNT PUSHJ P,GSWRD DATA: PUSHJ P,GSWRD JUMPL BCOUNT,DONE ;WAS A JUMP BLOCK LOOP: JUMPLE BCOUNT,STBLK PUSHJ P,GSWRD JRST LOOP DONE: MOVEI PNTR,100. DON1: MOVEI A,0 PUSHJ P,SEND SOSLE PNTR JRST DON1 .CLOSE DSK, .CLOSE PTR, .VALUE 0 BUFF: BLOCK 10 SEND: .IOT DSK,A POPJ P, GSWRD: PUSHJ P,GET MOVE B,A PUSHJ P,SEND PUSHJ P,GET PUSHJ P,SEND LSH A,8. ADDB A,B SUBI BCOUNT,2 POPJ P, END BEGIN