! S14PAT -- FOR PATCHING [0,1]S1401.RTS EASILY ! ! 13-NOV-74 -- ERG ! 10 DIM D%(512%) 20 RESTORE : READ D1(I%) FOR I%=1% TO 6% 30 DATA 1.,8.,64.,512.,4096.,32768. 40 F$="[0,1]S1401.RTS": PRINT "S14PAT -- PATCH ";F$: OPEN "KB:" AS FILE 10%: OPEN F$ FOR INPUT AS FILE 1% ! LINE 45 GETS FILE SIZE (SYS CALL), AND TESTS ACCESS BY READING ! THE LAST BLOCK OF THE FILE. 45 V$=SYS(CHR$(6%)+CHR$(-8%)+CHR$(1%)+STRING$(27%,0%)): F=ASCII(RIGHT(V$,7%))+SWAP%(ASCII(RIGHT(V$,8%))): GET #1,RECORD F 50 PRINT "ALL NUMBERS ARE OCTAL.":PRINT: FIELD #1,512% AS D$: T=65536.: B=T-(512.*F) 80 PRINT : INPUT "ADDRESS";O$ : GOTO 300 IF ASCII(O$)=ASCII("E") : GOSUB 10000 : A=D : PRINT "ADDRESS OLD NEW?" 100 GOTO 180 IF A=T : GOTO 180 IF A<>2.*INT(A/2) 110 X=(512.*F)-(T-A) : Y=INT(X/512.) : B0%=Y+1: W0%=(X-512.*Y)+1 : W1%=W0%+1% 115 GET #1,RECORD B0% : CHANGE D$ TO D% : D=A : GOSUB 9000 : PRINT O$; : D=D%(W0%) + SWAPAPD%(W(W(W : D=65536.+D IF D<0. : GOSUB 9000 : PRINT " ";O$;" "; 120 INPUT #10,O$ : GOTO 80 IF O$="" : GOSUB 10000 : GOTO 190 IF D<0. 125 D=D-65536. IF D>32767. : D%=D : D%(W0%) = D% AND 255% : D%(W1%) = SWAP%(D%) AND 255% : CHANGE D% TO E$ : LSET D$=E$ : PUT #1%,RECORD B0% 130 A=A+2. : GOTO 100 ! 180 PRINT "INVALID ADDRESS" : GOTO 80 190 PRINT "INVALID RESPONSE" : GOTO 100 300 CLOSE 1%,10% : GOTO 32767 ! ! ! !DECIMAL TO OCTAL CONVERSION SUBROUTINE !CONVERTS D TO O$ !RETURNS "000000" IF D<0 !RETURNS STRANGE STRING IF D>65535. !DESTROYS D !USES VBL NAMES D,D1,D1(),D2%,Q%,O$ ! 9000 O$="" : D2%=6% 9005 Q%=0% 9010 D=D-D1(D2%) : GOTO 9015 IF D<0. : Q%=Q%+1% : GOTO 9010 9015 D=D+D1(D2%) : O$=O$+CHR$(48%+Q%) : D2%=D2%-1% : GOTO 9005 IF D2%>0% : RETURN ! ! ! !OCTAL TO DECIMAL CONVERSION SUBROUTINE !CONVERTS O$ (STRING) TO D (REAL VBL.) !RETURNS D=-1. IF ERROR !USES VBL NAMES D,D1,D1(),D2%,Q%,Q1%,O$ !DESTROYS O$ ! 10000 D=-1.: RETURN IF LEN(O$)>6% OR LEN(O$)<1% : D1=0. : D2%=0% 10005 Q%=LEN(O$) : GOTO 10010 IF Q%=0% : Q1%=ASCII(RIGHT(O$,Q%)) : RETURN IF Q1%ASCII("7") : O$=LEFT(O$,Q%-1%) : D2%=D2%+1% : D1=D1+D1(D2%)*(Q1%-48%) : GOTO 10005 10010 D=D1 : RETURN ! ! ! 32767 END