TITLE VTED - TEXT RECEIVING AND EDITING PROGRAM ENTRY VTED ;GUARANTEED NOT TO LOSE MUCH DATA ON A CRASH loc 137 vvted:: 1 reloc IFNDEF NOECHO, DEFINE ERRMES(A) < JRST [TTCALL 3,[ASCIZ/ A/] SETZM .JBINT## EXIT 1, JRST VTED]> P=17 C=16 M=15 P2=14 P1=13 AC=0 T1=10 T2=11 T3=12 T4=4 T5=5 TEMP=6 SAC=7 DSK=1 TTY=2 PRF=3 HORMAX=^D71 VERMAX=^D20 BELL=7 LF=12 CR=15 TAB=11 ALT=33 FORM=^D12 BAKSPC=10 RUBOUT=177 CRSRUP=32 EOL=36 HOME=^D29 EOS=^D31 UPARO=^D26 DWNARO=^D11 FORARO=^D24 BAKARO=^D8 BAKAR1=^D25 FRUST=4 ;Number of ^C's before exiting FLINES=5 ;Number of Line-Feeds in a Form-feed NLINES=5 ;Lines typed on an append TLINES=1 ;Lines typed on a search IFE NOECHO,< WIDTH=HORMAX FREECR=2012 TTYMOD=500> IFN NOECHO,< WIDTH=1 FREECR=2010 TTYMOD=700> VTED: RESET MOVE P,[IOWD PDLEN,PDLST] SETZM PRFFLG# SETZM OLDCHR# SETZM FASTF# SETZM NXTCHR# SETZM LSTCHR# SETOM MOVFLG# MOVEI FILL4 MOVEM FILFLG# SETZM CAPSIM# SETZM STOCNT SETO AC, GETLCH AC MOVEM AC,SAVTTY# TLZ AC,(1B13) TRO AC,200000 HRRZM AC,IOINDX HRRZM AC,FRMBLK+1 SETLCH AC MOVEI 0,FREECR MOVE 1,IOINDX MOVEI 2,WIDTH MOVSI 3,3 TRMOP. 3, JFCL MOVE AC,[XWD 3,FRMBLK] TRMOP. AC JFCL PUSHJ P,GETNAM PUSHJ P,OPNFIL INIT TTY,TTYMOD SIXBIT/TTY/ EXP TIBUF ERRMES() SETZM BUFF MOVE P1,[XWD BUFF,BUFF+1] BLT P1,BUFF+177 SETO AC, GETLCH AC TLO AC,(1B13) SETLCH MOVE .JBFF## MOVEM STOBUF PUSHJ P,GTBAUD MOVEI C,EOS PUSHJ P,TYPCHR SETZM DONFLG# SETZM INTBLK+2 MOVEI INTBLK MOVEM .JBINT## MOVE SAVTTY TLNN (1B13) SETOM CAPSIM LOOP: PUSHJ P,GETCHR IFE NOECHO,< PUSHJ P,UPDATE> CAIE C,BAKAR1 CAIN C,BAKARO JRST BAK1WD CAIN C,FORARO JRST FOR1WD CAIN C,UPARO JRST BAK1LN CAIN C,DWNARO JRST FOR1LN CAIN C,RUBOUT JRST RUB1CH CAIN C,ALT JRST COMAND CAIN C,EOL JRST DELEOL CAIN C,EOS JRST DELEOS IFN NOECHO,< PUSHJ P,UPTYP> PUSHJ P,PUTCHR JRST LOOP GETCHR: SKIPE NXTCHR JRST GETNXT GETCH: INCHRW C GETCH2: PUSHJ P,CHKFIL SKIPE DONFLG JRST DONE CAIN C,FORM PUSHJ P,CHKFRM CAIE C,LF JRST GETCH1 MOVEI CR CAMN LSTCHR JRST GETCH1 AOS T1,NXTCHR MOVEM C,SAVCHR-1(T1) MOVEI C,BELL PUSHJ P,TYPEC MOVEI C,CR IFE NOECHO,< PUSHJ P,UPTYP> GETCH1: MOVE LSTCHR MOVEM OLDCHR CAIE BAKARO CAIN BAKAR1 PUSHJ P,CHKEOL CAIN UPARO PUSHJ P,CHKEOL MOVEM C,LSTCHR IFE NOECHO,< CAIN C,FORM JRST TYPFRM> POPJ P, CHKEOL: CAIE C,BAKARO CAIN C,BAKAR1 POPJ P, CAIE C,UPARO CAIN C,EOS POPJ P, TTCALL 15,[EOL] POPJ P, GETNXT: SOS C,NXTCHR MOVE C,SAVCHR(C) JRST GETCH2 CHKFRM: PUSHJ P,SCAN CAIE C,FORM CAIN C,LF JRST [ MOVEI C,FORM POPJ P,] MOVEI C,FORM AOS T1,NXTCHR MOVEM C,SAVCHR-1(T1) MOVEI C,LF POPJ P, SAVCHR: BLOCK 3 PUTCHR: JUMPE C,CPOPJ SOSG OUTCNT JRST PUTBF IDPB C,OUTPNT SKIPN FASTF CAIE C,12 CPOPJ: POPJ P, MOVE P1,BLKPNT USETO DSK,(P1) OUT DSK,CL POPJ P, PUTERR: ERRMES() PUTBF: MOVE P1,[POINT 7,BUFF] MOVEM P1,OUTPNT MOVEI P1,200*5 MOVEM P1,OUTCNT MOVE P1,BLKPNT JUMPE P1,PUTBF1 USETO DSK,(P1) OUT DSK,CL PUTBF1: AOSA P1,BLKPNT JRST PUTERR SETZM BUFF MOVE P1,[XWD BUFF,BUFF+1] BLT P1,BUFF+177 SKIPE FASTF JRST PUTCHR MOVE P1,BLKPNT USETO DSK,(P1) OUTPUT DSK,CL CLOSE DSK, LOOKUP DSK,NAME ERRMES() HLLZS NAME+1 SETZM NAME+2 SETZM NAME+3 ENTER DSK,NAME ERRMES() JRST PUTCHR BAK1WD: IFE NOECHO,< SETOM BAKFLG# SKIPN MOVFLG AOS BAKFLG> PUSHJ P,SCAN IFE NOECHO,< CAIN C,TAB AOS BAKFLG> CAIE C,FORM CAIN C,LF JRST BAKLN1 JRST BAKWD4 BAKWD3: PUSHJ P,SCAN BAKWD4: PUSHJ P,TEXT JRST BAKWD5 PUSHJ P,DELETE IFE NOECHO,< AOSE BAKFLG> PUSHJ P,BAKCSR JUMPE C,LOOP PUSHJ P,STOBYT JRST BAKWD3 BAKWD1: PUSHJ P,SCAN PUSHJ P,TEXT SKIPA JRST LOOP BAKWD5: CAIE C,FORM CAIN C,LF JRST LOOP BAKWD2: PUSHJ P,DELETE IFE NOECHO,< AOSE BAKFLG> PUSHJ P,BAKCSR JUMPE C,LOOP PUSHJ P,STOBYT JRST BAKWD1 FOR1WD: IFE NOECHO,< MOVEI C,BAKARO SKIPE MOVFLG PUSHJ P,UPTYP> MOVEI C,EOL PUSHJ P,TYPEC PUSHJ P,GETBYT JRST FORWD4 JRST FORWD6 FORWD2: PUSHJ P,GETBYT JRST FORWD4 CAIE C,FORM CAIN C,CR JRST FORWD3 FORWD6: PUSHJ P,PUTCHR PUSHJ P,UPTYP CAIN C,LF JRST FORWD4 PUSHJ P,TEXT JRST FORWD2 FORWD1: PUSHJ P,GETBYT JRST FORWD4 CAIE C,FORM CAIN C,CR JRST FORWD3 PUSHJ P,TEXT JRST FORWD3 PUSHJ P,PUTCHR PUSHJ P,UPTYP JRST FORWD1 FORWD3: PUSHJ P,STOBYT FORWD4: JRST LOOP CHKEND: CAIN C,TAB JRST CHKETB MOVE HORCNT CAIGE HORMAX-1 POPJ P, CAIN C,ALT JRST CHKND1 CAIL C,40 CAIL C,175 POPJ P, CAIL C,"A" CAILE C,"Z" JRST CHKND1 SKIPE CAPSIM JRST CHKND2 CHKND1: CAIGE HORMAX POPJ P, CHKND2: MOVEI M,[BYTE (7)CR,LF,0] JRST MESOUT CHKETB: PUSH P,HORCNT PUSH P,VERCNT PUSHJ P,UPDATE MOVE HORCNT POP P,VERCNT POP P,HORCNT CAML HORCNT POPJ P, JRST CHKND2 BAK1LN: IFE NOECHO,< MOVEI C,DWNARO SKIPE MOVFLG PUSHJ P,UPTYP> MOVEI C,CR PUSHJ P,TYPCHR BAKLN1: PUSHJ P,DELETE PUSHJ P,SBKCSR JUMPE C,LOOP PUSHJ P,STOBYT CAIE C,FORM CAIN C,CR JRST LOOP JRST BAKLN1 FOR1LN: IFE NOECHO,< MOVEI C,UPARO SKIPE MOVFLG PUSHJ P,UPTYP> MOVEI C,EOL PUSHJ P,TYPEC SETZM FORFLG# FORLN1: PUSHJ P,GETBYT JRST FORLN2 CAIE C,FORM CAIN C,CR JRST [ SKIPN FORFLG JRST .+1 PUSHJ P,STOBYT JRST FORLN2] AOS FORFLG PUSHJ P,PUTCHR PUSHJ P,UPTYP JRST FORLN1 FORLN2: MOVEI C,EOL PUSHJ P,TYPEC JRST LOOP RUB1CH: PUSHJ P,DELETE PUSHJ P,BAKCSR CAIN C,LF jrst [ pushj P,SCAN CAIn C,CR jrst rub1ch jrst .+1] MOVEI C,EOL PUSHJ P,TYPEC JRST LOOP DELEOL: PUSHJ P,TYPEC DEOL1: PUSHJ P,GETBYT JRST LOOP CAIN C,LF JRST LOOP JRST DEOL1 DELEOS: CAME C,OLDCHR JRST LOOP PUSHJ P,TYPEC SETZM STOCNT SETZM PRFFLG JRST LOOP COMAND: CAME C,OLDCHR JRST [ PUSHJ P,PUTCHR PUSHJ P,UPTYP JRST LOOP] PUSHJ P,DELETE MOVEI C,EOS PUSHJ P,TYPEC COMND1: MOVEI M,[ASCIZ/ Enter command! /] PUSHJ P,MESOUT PUSHJ P,GETCHR CAIE C,"S" CAIN C,163 SKIPA JRST COMERR SETSTS TTY,0 MOVEI M,[ASCIZ/Search for: /] PUSHJ P,MESOUT MOVSI T4,1-SBUFL*5 MOVE T5,[POINT 7,SBUF] COMLOP: INCHWL C CAIE C,ALT IDPB C,T5 CAIE C,ALT AOBJN T4,COMLOP TRNE T4,-1 HRRZM T4,SCNT# SETZM LSTCHR SETZM OLDCHR JUMPGE T4,SBUFUL SLOOP0: MOVE T4,[POINT 7,SBUF] MOVE SAC,[POINT 7,SBUF1] MOVE T5,SCNT SETOM FASTF SLOOP1: PUSHJ P,GETBYT JRST SDONE ILDB T3,T4 IDPB C,SAC CAMN T3,C JRST SLOOP3 CAIL T3,101 CAILE T3,132 JRST [ CAIL T3,141 CAILE T3,172 JRST NOMACH JRST .+1] TRC T3,40 CAME T3,C JRST NOMACH SLOOP3: SOJG T5,SLOOP1 MOVE T4,[POINT 7,SBUF1] MOVE T5,SCNT SLOOP2: ILDB C,T4 PUSHJ P,PUTCHR SOJG T5,SLOOP2 SDONE: SETZM FASTF MOVEI M,[BYTE (7)HOME,EOS,0] PUSHJ P,MESOUT SETZB SAC,TEMP SDONE1: PUSHJ P,DELETE JUMPE C,SDONE2 PUSHJ P,STOBYT AOS SAC CAIE C,CR JRST SDONE1 CAIGE TEMP,TLINES AOJA TEMP,SDONE1 SDONE2: SETSTS TTY,TTYMOD SDONE3: PUSHJ P,GETBYT JRST LOOP PUSHJ P,PUTCHR PUSHJ P,UPTYP SOJG SAC,SDONE3 JRST LOOP NOMACH: MOVE T4,[POINT 7,SBUF1] SUB T5,SCNT MOVN SAC,T5 NOMAC1: JUMPE T5,NOMAC2 PUSH P,C ILDB C,T4 PUSHJ P,PUTCHR POP P,C AOJA T5,NOMAC1 NOMAC2: PUSHJ P,PUTCHR NOMAC3: JUMPE SAC,SLOOP0 PUSHJ P,DELETE PUSHJ P,STOBYT SOJA SAC,NOMAC3 COMERR: MOVEI C,"?" PUSHJ P,TYPEC JRST COMND1 SBUFUL: MOVEI M,[ASCIZ/ Maximum search string length reached... starting search! /] PUSHJ P,MESOUT JRST SLOOP0 STOBYT: MOVE 1,STOCNT# IDIVI 1,5 ADD 1,STOBUF CAML 1,.JBREL JRST GETCOR DPB C,STOPNT(2) AOS STOCNT POPJ P, GETBYT: SOSGE 1,STOCNT JRST GETBP IDIVI 1,5 ADD 1,STOBUF LDB C,STOPNT(2) CPOPJ1: AOS (P) POPJ P, GETBP: SETZM STOCNT SKIPN PRFFLG POPJ P, JRST GETPRF STOPNT: POINT 7,(1),6 POINT 7,(1),13 POINT 7,(1),20 POINT 7,(1),27 POINT 7,(1),34 GETCOR: MOVE .JBREL## ADDI 2000 CORE ERRMES() JRST STOBYT SCAN: PUSHJ P,DELETE JRST PUTCHR DELETE: SETZM LSTRUB MOVE AC,OUTCNT CAIL AC,200*5 JRST BAKDSK LDB T2,[POINT 6,OUTPNT,5] IDIVI T2,7 SUBI T2,4 MOVNS T2 HRRZ T1,OUTPNT SUBI T1,BUFF BAKLOP: LDB AC,PNTTAB(T2) MOVEM AC,LSTRUB# AOS OUTCNT JUMPN AC,BAKDON SOJGE T2,BAKLOP SOJGE T1,[ MOVEI T2,4 JRST BAKLOP] BAKDSK: MOVE P1,BLKPNT CAIN P1,1 JRST BAKDN1 USETO DSK,(P1) OUTPUT DSK,CL SOS P1,BLKPNT SETZM OUTCNT MOVEI T2,4 MOVEI T1,177 USETI DSK,(P1) INPUT DSK,CL JRST BAKLOP BAKDON: MOVEI AC,0 DPB AC,PNTTAB(T2) SOJGE T2,BAKDN2 MOVEI T2,4 SOJGE T1,BAKDN2 BAKDN1: MOVE AC,[POINT 7,BUFF] JRST BAKDN3 BAKDN2: MOVE AC,PNTTAB(T2) ADDI AC,(T1) TLZ AC,37 BAKDN3: MOVEM AC,OUTPNT MOVE C,LSTRUB POPJ P, SBKCSR: SETOM SILENT# SKIPA BAKCSR: SETZM SILENT CAIN C,LF JRST BAKLF CAIN C,CR JRST BAKCR CAIN C,TAB JRST BAKTAB CAIN C,FORM JRST BAKFRM CAIN C,ALT JRST BAKCS1 CAIL C,40 CAIL C,175 POPJ P, BAKCS1: PUSH P,C SKIPG HORCNT PUSHJ P,BAKCS2 MOVEI C,BAKARO SKIPN SILENT PUSHJ P,TYPEC PUSHJ P,UPDATE SKIPE CAPSIM PUSHJ P,BAKCAP POP P,C POPJ P, BAKCS2: MOVEI C,UPARO PUSHJ P,UPTYP MOVEI C,CR PUSHJ P,BAKCR MOVE C,-1(P) JRST UPTYP BAKCAP: MOVE C,-1(P) CAIL C,"A" CAILE C,"Z" POPJ P, MOVEI C,"^" JRST BAKCS1 BAKLF: MOVEI C,UPARO PUSHJ P,UPTYP MOVE C,LSTRUB POPJ P, BAKFRM: MOVEI C,UPARO MOVEI P1,FLINES PUSHJ P,UPTYP SOJG P1,.-1 MOVEI C,CR PUSHJ P,UPTYP MOVEI C,FORM POPJ P, BAKCR: SETZM CRCNT# PUSHJ P,UPTYP MOVEI C,EOL PUSHJ P,TYPEC BAKCR0: PUSHJ P,DELETE JUMPE C,BAKCR2 CAIE C,FORM CAIN C,LF JRST BAKCR1 PUSHJ P,STOBYT AOS CRCNT JRST BAKCR0 BAKCR1: PUSHJ P,PUTCHR BAKCR2: PUSH P,VERCNT PUSH P,HORCNT BAKCR9: PUSH P,STOCNT SETOM CRFLG# SETZM CRCNT1# BAKCR3: SOSGE CRCNT JRST BAKCR4 PUSHJ P,GETBYT JFCL MOVE P1,HORCNT AOSN CRFLG SETZ P1, PUSHJ P,UPDATE CAMLE P1,HORCNT JRST BAKCR5 AOS CRCNT1 JRST BAKCR3 BAKCR4: POP P,STOCNT POP P,HORCNT POP P,VERCNT BAKCR7: SOSGE CRCNT1 JRST BAKCR6 PUSHJ P,GETBYT JFCL PUSHJ P,PUTCHR PUSHJ P,UPTYP JRST BAKCR7 BAKCR6: MOVEI C,CR POPJ P, BAKCR5: MOVEM P1,HORCNT AOS CRCNT POP P,STOCNT BAKCR8: SOSGE CRCNT1 JRST BAKCR9 PUSHJ P,GETBYT JFCL PUSHJ P,PUTCHR JRST BAKCR8 BAKTAB: SETZM TABCNT# BAKTB0: PUSHJ P,DELETE JUMPE C,BAKTB2 CAIN C,LF JRST BAKTB1 PUSHJ P,STOBYT AOS TABCNT JRST BAKTB0 BAKTB1: PUSHJ P,PUTCHR BAKTB2: PUSH P,VERCNT PUSH P,HORCNT SETZM HORCNT BAKTB3: SOSGE TABCNT JRST BAKTB4 PUSHJ P,GETBYT JFCL PUSHJ P,PUTCHR PUSHJ P,UPDATE JRST BAKTB3 BAKTB4: MOVN P2,HORCNT POP P,HORCNT POP P,VERCNT ADD P2,HORCNT JUMPL P2,BAKTB6 BAKTB5: SOJL P2,BAKTB7 MOVEI C,BAKARO PUSHJ P,UPTYP JRST BAKTB5 BAKTB6: MOVEI C,UPARO PUSHJ P,UPTYP MOVEI C,CR PUSHJ P,BAKCR BAKTB7: MOVEI C,TAB POPJ P, TEXT: CAIE C,ALT CAILE C," " JRST CPOPJ1 POPJ P, TYPFRM: MOVEI C,CR PUSHJ P,UPTYP MOVEI C,LF MOVEI P1,FLINES PUSHJ P,UPTYP SOJG P1,.-1 MOVEI C,FORM POPJ P, MESOUT: PUSH P,C HRLI M,(POINT 7,0) MESOT1: ILDB C,M JUMPE C,[POP P,C POPJ P,] PUSHJ P,UPTYP JRST MESOT1 TYPEC: CAIE C,LF JRST TYPE PUSHJ P,TYPE TTCALL 1,[EOL] POPJ P, TYPE: CAIN C,CR TTCALL 1,[EOL] TYPCHR: CAIN C,FORM JRST TYPFRM PUSHJ P,CHKEND SKIPE CAPSIM PUSHJ P,CHKCAP CAIN C,ALT JRST [ TTCALL 1,["$"] POPJ P,] TTCALL 1,C CHKFIL: SKIPN TEMP,FILFLG POPJ P, CAIE C,LF CAIN C,DWNARO JRST (TEMP) CAIE C,UPARO CAIN C,EOS JRST (TEMP) CAIE C,HOME POPJ P, SETZM HORCNT SETZM VERCNT JRST (TEMP) CHKCAP: CAIL C,"A" CAILE C,"Z" POPJ P, PUSH P,C MOVEI C,"^" PUSHJ P,TYPEC POP P,C POPJ P, UPTYP: PUSHJ P,TYPEC UPDATE: SETOM MOVFLG CAIL C,40 CAIL C,175 JRST SPCCHR UPDT1: SKIPGE HORCNT SETZM HORCNT SKIPE CAPSIM PUSHJ P,CAPUP AOS 1,HORCNT CAIG 1,HORMAX POPJ P, IDIVI 1,HORMAX MOVEM 2,HORCNT SPLF: SKIPGE VERCNT SETZM VERCNT AOS 1,VERCNT CAIGE 1,VERMAX POPJ P, MOVEI 1,VERMAX-1 MOVEM 1,VERCNT POPJ P, CAPUP: CAIL C,"A" CAILE C,"Z" POPJ P, AOS HORCNT POPJ P, SPCCHR: CAIN C,11 JRST SPTAB CAIN C,12 JRST SPLF CAIN C,15 JRST SPCR CAIN C,UPARO JRST SPUPAR CAIE C,BAKAR1 CAIN C,BAKARO JRST SPBKAR CAIN C,DWNARO JRST SPDNAR CAIN C,FORARO JRST SPFRAR CAIN C,ALT JRST UPDT1 SETZM MOVFLG POPJ P, SPTAB: MOVE HORCNT TRZ 7 ADDI 8 CAILE HORMAX MOVEI 8 MOVEM HORCNT POPJ P, SPCR: SETZM HORCNT POPJ P, SPUPAR: SKIPG VERCNT SETZM MOVFLG MOVEI VERMAX-1 CAMGE VERCNT MOVEM VERCNT SOS VERCNT POPJ P, SPDNAR: MOVE VERCNT CAIL VERMAX-1 SETZM MOVFLG SKIPGE VERCNT SETZM VERCNT AOS VERCNT POPJ P, SPBKAR: SKIPG HORCNT SETZM MOVFLG MOVEI HORMAX CAMGE HORCNT MOVEM HORCNT SOS HORCNT POPJ P, SPFRAR: MOVE HORCNT CAIL HORMAX SETZM MOVFLG SKIPGE HORCNT SETZM HORCNT AOS HORCNT POPJ P, GETERR: TTCALL 11, MOVEI M,[ASCIZ/ Use the format: NAME.EXT /] PUSHJ P,MESOUT GETNAM: MOVEI M,[ASCIZ/File name? /] PUSHJ P,MESOUT MOVEI AC,6 MOVE T1,[POINT 6,NAME] SETZM NAME SETZM NAME+1 INCHWL C JRST GETLP2 GETLOP: INCHSL C JRST GETERR GETLP2: CAIN C,15 JRST GETDON CAIN C,"." JRST GETEXT SUBI C,40 IDPB C,T1 SOJG AC,GETLOP GETLP1: INCHSL C JRST GETERR CAIN C,15 JRST GETDON CAIE C,"." JRST GETLP1 GETEXT: MOVEI AC,3 MOVE T1,[POINT 6,NAME+1] GETELP: INCHSL C JRST GETERR CAIN C,15 JRST GETDON SUBI C,40 IDPB C,T1 SOJG AC,GETELP GETDON: TTCALL 11, POPJ P, PROOF: PUSHJ P,OVERWRITE INIT PRF,0 SIXBIT /DSK/ EXP PIBUF ERRMES () INBUF PRF,2 HLLZS NAME1+1 SETZM NAME1+2 SETZM NAME1+3 LOOKUP PRF,NAME1 ERRMES() SETOM PRFFLG POPJ P, GETPRF: SOSGE PIBUF+2 JRST GETPBF ILDB C,PIBUF+1 JUMPE C,GETPRF JRST CPOPJ1 GETPBF: IN PRF, JRST GETPRF SETZM PRFFLG POPJ P, PIBUF: BLOCK 3 OPNFIL: INIT 1,17 SIXBIT/DSK/ 0 ERRMES() SETZ P1, LOOKUP DSK,NAME JRST OPNFL1 MOVEI M,[ASCIZ/File already exists Do you want to: Proof, Append, or Overwrite? /] PUSHJ P,MESOUT OPNFL2: INCHWL C TTCALL 11, CAIN C,"P" JRST PROOF CAIN C,"A" JRST APPEND CAIN C,"O" JRST OVERWRITE MOVEI M,[ASCIZ/ Answer A or O /] PUSHJ P,MESOUT JRST OPNFL2 APPEND: HLLZS NAME+1 SETZM NAME+2 HLRE P1,NAME+3 JUMPGE P1,OPNFL1 MOVMS P1 IDIVI P1,200 OPNFL1: AOS P1 MOVEM P1,BLKPNT SETZM NAME+3 ENTER DSK,NAME ERRMES() SETZM OUTCNT MOVE P1,[POINT 7,BUFF] MOVEM P1,OUTPNT MOVEI P1,200*5 MOVEM P1,OUTCNT MOVE P1,BLKPNT USETO DSK,1(P1) SETZM BUFF MOVE T1,[XWD BUFF,BUFF+1] BLT T1,BUFF+177 OUTPUT DSK,CL CLOSE DSK, LOOKUP DSK,NAME ERRMES() HLLZS NAME+1 SETZM NAME+2 SETZM NAME+3 ENTER DSK,NAME ERRMES() MOVEI M,[BYTE (7)HOME,EOS,CR,0] PUSHJ P,MESOUT SETZM HORCNT# SETZM VERCNT# MOVEI T3,NLINES APLOP: CAIG P1,1 POPJ P, USETI DSK,-1(P1) INPUT DSK,CL MOVEI T1,177 ALP1: MOVEI T2,4 ALP2: LDB AC,PNTTAB(T2) CAIN AC,12 SOJL T3,APTYP ALP3: SOJGE T2,ALP2 SOJGE T1,ALP1 APTYP: SKIPGE T2 MOVEI T2,4 JUMPL T1,[ CAILE P1,2 SOJA P1,APLOP MOVEI T2,4 JRST APTYP0] APTYP0: MOVEI M,[BYTE (7)16,63,0] PUSHJ P,MESOUT PUSHJ P,FILL4 MOVEI C,40 TTCALL 1,C MOVEI M,[ASCIZ/The last lines entered were:/] PUSHJ P,MESOUT MOVEI C,HOME PUSHJ P,TYPEC MOVE T3,PNTTAB(T2) MOVE SAVTTY TLNN (1B13) SETOM CAPSIM SETZM HORCNT SETZM VERCNT APTYP1: ILDB C,T3 JUMPE C,APTYP2 PUSHJ P,UPTYP JRST APTYP1 APTYP2: IN DSK,CL SKIPA T3,[POINT 7,BUFF] POPJ P, JRST APTYP1 PNTTAB: POINT 7,BUFF(T1),6 POINT 7,BUFF(T1),13 POINT 7,BUFF(T1),20 POINT 7,BUFF(T1),27 POINT 7,BUFF(T1),34 OVERWRITE: MOVEI AC,1000 MOVEI P1,0 OVLOOP: MOVEI T1,3 MOVE T2,[POINT 3,P1,26] MOVE T3,[POINT 6,NAME1+1] OVLP1: ILDB C,T2 ADDI C,20 IDPB C,T3 SOJG T1,OVLP1 MOVE T1,NAME MOVEM T1,NAME1 HLLZS NAME1+1 SETZM NAME1+2 SETZM NAME1+3 LOOKUP DSK,NAME ERRMES() RENAME DSK,NAME1 JRST RFAIL MOVEI M,[ASCIZ/Old file renamed to /] PUSHJ P,MESOUT MOVE T1,[POINT 6,NAME1] RLOOP: ILDB C,T1 JUMPE C,REXT ADDI C,40 PUSHJ P,TYPEC TLNE T1,770000 JRST RLOOP REXT: MOVEI C,"." PUSHJ P,TYPEC MOVE T1,[POINT 6,NAME1+1] HLLZS NAME1+1 RELP: ILDB C,T1 JUMPE C,RDONE ADDI C,40 PUSHJ P,TYPEC JRST RELP RDONE: MOVEI M,[ASCIZ/ /] PUSHJ P,MESOUT HLLZS NAME+1 SETZM NAME+2 SETZM NAME+3 SETZ P1, JRST OPNFL1 RFAIL: AOS P1 SOJG AC,OVLOOP ERRMES() INTBLK: XWD 4,INTLOC EXP 2 0 0 INTLOC: PUSH P,1 AOS 1,DONFLG CAIL 1,FRUST ERRMES() HRRZ 1,INTBLK+2 CAIN 1,GETCH JRST DONE POP P,1 PUSH P,INTBLK+2 SETZM INTBLK+2 POPJ P, DONE: SETZM INTBLK+2 SETZM CAPSIM MOVEI TTY RESDV. JFCL MOVEI C,EOS PUSHJ P,TYPEC MOVEI M,[ASCIZ/ Closing file.../] PUSHJ P,MESOUT SKIPN PRFFLG SKIPE STOCNT PUSHJ P,COPY MOVE P1,BLKPNT USETO DSK,(P1) OUTPUT DSK,CL CLOSE DSK, MOVE SAVTTY SETLCH MOVEI 2010 MOVE 1,IOINDX MOVEI 2,0 MOVSI 3,3 TRMOP. 3, JFCL SETZM .JBINT MOVEI M,[ASCIZ/ Done!/] PUSHJ P,MESOUT EXIT 1, JRST VTED COPY: TTCALL 11, SETOM FASTF COPYA: PUSHJ P,GETBYT POPJ P, PUSHJ P,PUTCHR JRST COPYA GTBAUD: PJOB TRMNO. JFCL MOVEM SOP+1 MOVEI P1,3 HRLOI P2,377777 GTWAIT: MOVE [XWD 2,SOP] TRMOP. SKIPA JRST GTWAIT MSTIME T2, TTCALL 3,[BYTE (7)177,177,177,177,177,0] GTLOOP: MOVE [XWD 2,SOP] TRMOP. SKIPA JRST GTLOOP MSTIME T1, SUB T1,T2 CAMGE T1,P2 MOVE P2,T1 SOJG P1,GTWAIT SETZ T1, CAIG P2,5*^D33-^D17 MOVEI T1,FILL1 CAIG P2,5*^D16-^D17 MOVEI T1,FILL2 CAIG P2,5*^D8-^D17 MOVEI T1,FILL4 MOVEM T1,FILFLG MOVEI 0,1017 MOVE 1,IOINDX MOVSI 3,2 TRMOP. 3, POPJ P, MOVEI 1,FILL4 CAIN 3,0 POPJ P, CAIN 3,1 MOVEI 1,FILL1 CAIN 3,2 MOVEI 1,FILL2 CAMGE 1,FILFLG MOVEM 1,FILFLG POPJ P, FILL4: PUSHJ P,FILL2 FILL2: PUSHJ P,FILL1 FILL1: MOVEI TEMP,0 TTCALL 15,TEMP POPJ P, TIBUF: BLOCK 3 SOP: 2 0 SIPBLK: 1 IOINDX: 0 FRMBLK: 2006 0 1 NAME1: BLOCK 4 NAME: SIXBIT/FILE/ 0 0 0 0 BLKPNT: 0 OUTPNT: 0 OUTCNT: 0 CL: IOWD 200,BUFF 0 PDLEN=20 PDLST: BLOCK PDLEN SBUFL=^D20 SBUF: BLOCK SBUFL SBUF1: BLOCK SBUFL BUFF: BLOCK 200 0 STOBUF: 0 END VTED