0 REM SPREAD.WM3 06/19/84 (C)1984 by Woods Martin. Revised and translated for the NEC by George Graff. 1 REM Appears on "XPROM FOR NEC NOTEBOOK (2.0)" with permission of the authors. 2 MAXFILES=1:CLEAR3062,-3963:DEFINTA-Z:DEFSTRS:SCREEN,0:CM=19:RM=20:SU="S":GOSUB800:GOSUB770:GOSUB90:GOTO70 4 IFT(I,J)>0THENVI=VAL(S(I,J))ELSEVI=0:IFT(I,J)<0THENST=S(I,J):SC="+":L=1:N=0:GOSUB8 6 V(I,J)=VI:RETURN 8 GOSUB44:IFQTHENRETURNELSEIFSL="("THENW=0:GOSUB28ELSEIFINSTR(SN,SL)THENSC=SL:GOTO8ELSEA=ASC(SL):IFA>=65ANDA<=90THENX=VAL(MID$(SL,2)):V=V(X,A-65):T=T(X,A-65)ELSEIFA=64THENGOSUB16ELSEV=VAL(SL) 10 A=INSTR(SN,SC):IFA<2ORA=6THENVI=VI+VELSEIFA=2THENVI=VI-VELSEIFA=3THENVI=VI*VELSEIFA=4THENVI=VI/VELSEIFA=5THENVI=VI^VELSEIFA=7THENVY=VI:VZ=V 12 GOTO8 16 W=INSTR("@ABS @INT @SQRT @ROUND @SUM @AVG @COUNT @EXP @LN @SIN @COS @TAN @ATAN @FIX @MIN @MAX @MOD @< @<= @> @>= @= @<> @PI @TYP ",SL+" ") 18 IFW=0THENGOSUB920:RETURNELSEW=W/7+1:GOSUB28:IFW>4ANDW<8THENRETURNELSEIFW=1THENV=ABS(V)ELSEIFW=2THENV=INT(V)ELSEIFW=3THENV=SQR(V) 20 IFW=4THENVI=SGN(VI)*(INT(ABS(VI)*10^V+.5))/10^V:V=1ELSEIFW=8THENV=EXP(V)ELSEIFW=9THENV=LOG(V)ELSEIFW=10THENV=SIN(V)ELSEIFW=11THENV=COS(V)ELSEIFW=12THENV=TAN(V) 22 IFW=13THENV=ATN(V)ELSEIFW=14THENV=FIX(V)ELSEIFW=15THENIFVYVZTHENV=VYELSEV=VZ 24 IFW=17THENV=VYMODVZELSEIFW=18THENV=-(VYVZ)ELSEIFW=21THENV=-(VY>=VZ)ELSEIFW=22THENV=-(VY=VZ)ELSEIFW=23THENV=-(VY<>VZ)ELSEIFW=24THENV=3.1415926536#ELSEIFW=25THENV=-(T<>0) 26 RETURN 28 SO(N)=SC:SC=SL:VS(N)=VI:W(N)=W:N=N+1:VI=0:IFW>4ANDW<8THENGOSUB32ELSEL=L-(W>0):GOSUB8 30 N=N-1:V=VI:W=W(N):VI=VS(N):SC=SO(N):RETURN 32 GOSUB40:CA=CB:RA=RB:GOSUB40:L=L+1:VI=0:X=0:IFCA=CBTHEN34ELSEIFRA=RBTHEN36ELSEGOSUB925:GOTO38 34 FORRI=RATORB:VI=VI+V(RI,CA):X=X-(T(RI,CA)<>0):NEXT:GOTO38 36 FORCI=CATOCB:VI=VI+V(RA,CI):X=X-(T(RA,CI)<>0):NEXT 38 IFX=0ORW=5THENRETURNELSEIFW=6THENVI=VI/X:RETURNELSEVI=X:RETURN 40 L=L+1:GOSUB44 42 CB=ASC(SL)-65:RB=VAL(MID$(SL,2)):RETURN 44 Q=L>LEN(ST):IFQTHENRETURNELSESL=MID$(ST,L,1):L=L+1:Q=(SL=")"):IFQORINSTR(SN,SL)THENRETURN 46 IFL>LEN(ST)THENRETURNELSES=MID$(ST,L,1):IFINSTR(SN,S)ORS=")"THENRETURNELSEL=L+1:IFS=","THENRETURNELSESL=SL+S:GOTO46 48 GOSUB76 50 PRINTSHCHR$(I-R1+34)CHR$(CW*(J-C1)+35);:GOSUB52:PRINTSR(X);:IFP<0THENIFGFTHENPRINTLEFT$(S(I,J),CW)+SPACE$(CW-LEN(LEFT$(S(I,J),CW)))SM;:RETURNELSEPRINTSPACE$(CW-LEN(LEFT$(S(I,J),CW)));LEFT$(S(I,J),CW);SM;:RETURN 51 PRINTUSINGSE;V(I,J);:PRINTSM;:RETURN 52 P=ABS(T(I,J))-1:IFP>8THENP=G-1 53 IFP>=0THENIF(ABS(V(I,J))>VAL(STRING$(CW-1,"9"))/(10^(P+1+(P=0))))OR(P=8)THENSE=STRING$(CW-4,35)+"^^^^\\"ELSESE=STRING$(CW,35)+"\\":IFPTHENSE=STRING$(CW-1-P,35)+"."+STRING$(P,35)+"\\" 54 RETURN 58 IFHTHENGOSUB260:RETURNELSEPRINTSI"In>"S;:ST=S:GOTO60 59 ST="" 60 GOSUB61:IFKTHENRETURNELSEIFA=27THENST="":RETURNELSEIFA=8THENIFLEN(ST)THENPRINTS" "S;:ST=MID$(ST,1,LEN(ST)-1):GOTO60ELSERETURNELSEIFA=127ORA<32ORA=34THEN60ELSEST=ST+S:PRINTS;:GOTO60 61 S=INPUT$(1):A=ASC(S):K=INSTR(SA,S):IFKORU=0THENRETURNELSEIFA>=97ANDA<=122THENA=A-32:S=CHR$(A):RETURNELSERETURN 64 T(R,C)=0:S(R,C)="":V(R,C)=0:RETURN 66 CL=CL-(J-CL)*(CL#",S)+1GOSUB110,200,210,230,240:IFK<2THEN69 72 X=0:GOSUB48:IFR2>5THENGOSUB86 73 C=C-(K=2)+(K=3)-(K=6)*((C=C1)*(C2+1)+(C<>C1)*(C-C1))+(K=7)*((C=C1+C2)*(C2+1)-(C<>C1+C2)*(C-C1-C2))+(K=10)*C-(K=11)*(CL-C) 74 R=R+(K=4)-(K=5)-(K=8)*((R=R1)*(R2+1)+(R<>R1)*(R-R1))+(K=9)*((R=R1+R2)*(R2+1)-(R<>R1+R2)*(R-R1-R2))+(K=12)*R-(K=13)*(RL-R):GOSUB90:GOTO70 76 I=R:J=C:RETURN 78 C2=(36\CW)-1 80 PRINTSJ;SO;SH"! wm3";:FORI=C1TOC1+C2:PRINTSR"."SPACE$(CW\2-1)CHR$(65+I)SPACE$(CW-CW\2-1)SM;:NEXT:PRINT:X=0:FORI=R1TOR1+R2:PRINTUSINGSR+"###"+SM;I;:FORJ=C1TOC1+C2:IFS(I,J)>""THENGOSUB50 82 NEXT:IFI9)-(I>99)):RETURN 90 B=0:IFR<0ORR>RMORC<0ORC>CMTHENBEEP:R=-R*(R>=0ANDR<=RM)-RM*(R>RM):C=-C*(C>=0ANDC<=CM)-CM*(C>CM) 92 GOSUB76:GOSUB66:IFR-R1>R2THENR1=R-R2:B=1ELSEIFR-R1<0THENR1=R:B=1 94 IFC-C1>C2THENC1=C-C2:B=1ELSEIFC-C1<0THENC1=C:B=1 96 S="":IFBTHENGOSUB80 100 X=1:GOSUB48:IFR2>5THENPRINTCHR$(128); 102 GOSUB76:GOSUB88:PRINTSI" ";:IFLEN(S(R,C))THENPRINTCHR$(70-6*(T(R,C)=0)-16*(T(R,C)>0))">"S(R,C); 104 PRINTSH" #";:RETURN 110 IFINSTR("1234567890.+-(@",S)THEN130ELSEIFA>31ANDA<>127THEN120ELSERETURN 118 S="":Z=C+1 120 U=0:IFA=34THENS="" 122 GOSUB58:IFST=""THENRETURNELSEGOSUB64:IFZ=0THENS(R,C)=ST:RETURNELSEFORX=1TOLEN(ST)STEPCW:S(R,C)=MID$(ST,X,CW)+SPACE$(CW-LEN(MID$(ST,X,CW))):C=C+1:IFC>CMTHENX=LEN(ST):BEEP 124 NEXT:C=C-1:GOSUB76:GOSUB66:C=Z-1:GOSUB80:RETURN 130 U=1:GOSUB58:IFST=""THENS=ST:RETURNELSEGOSUB76:S(I,J)=ST:T=ABS(T(I,J)):IFT=0THENT=10 132 FORX=1TOLEN(ST):A=ASC(MID$(ST,X)):IF(A<48+6*(X=1)ORA>57)ANDA<>46THENT=-T:X=256 134 NEXT:T(I,J)=T:GOSUB4:RETURN 200 CLOSE:PRINTSI"Cmd: Hd Ed In De Re Bl Fm Gl Pr St Me ";:U=1:E=0:GOSUB61:ONINSTR("HEIDRBFGPSM",S)+1GOSUB780,118,250,300,310,600,760,500,550,700,400,770:RETURN 210 PRINTSJ"!"SQ(O)SB;:IFOTHENFORI=0TORL:FORJ=0TOCLELSEFORJ=0TOCL:FORI=0TORL 215 IFT(I,J)THENGOSUB88:GOSUB4 220 NEXT:NEXT:GOTO765 230 PRINTSI"GOTO: ";:U=1:GOSUB59:IFLEN(ST)<2THEN780ELSEGOSUB86:C=ASC(ST)-65:R=VAL(MID$(ST,2)):GOSUB90:GOTO785 240 IFT(R,C)=0THEN780ELSES(R,C)=MID$(STR$(V(R,C)),1-(V(R,C)>=0)):T(R,C)=ABS(T(R,C)):GOTO785 250 H=1:ST=S(R,C):IFT(R,C)THENGOSUB130ELSEGOSUB120 255 GOTO785 260 SX=ST:H=LEN(SX) 265 H=H-(H<0)+(H>LEN(SX)):PRINTSI;S4"Ed>"SX;:PRINTSH" "CHR$(H+35);:GOSUB61:IFK=1THENST=SX:PRINTS3;:RETURN 270 IFKTHENH=H+(K=3)-(K=2)+H*(K=10)-(LEN(SX)-H)*(K=11):GOTO265ELSEIFA>31ANDA<>127ANDA<>34THENSX=LEFT$(SX,H)+S+MID$(SX,H+1):H=H+1:GOTO265ELSEIFA=27THENST="":RETURN 275 IFA=8THENSX=LEFT$(SX,H-1-(H=0))+MID$(SX,H+1):H=H-1ELSEIFA=127THENSX=LEFT$(SX,H)+MID$(SX,H+2) 280 GOTO265 300 ST="Insert":GOSUB340:IFA=0THEN780ELSEIFA=67THENIFCL=CMTHEN780ELSEZ=1:FORY=CL+1TOC+1STEP-1:CV=Y-1:GOSUB345:NEXT:Y=R:GOSUB320:R=Y:GOTO355 305 IFRL=RMTHEN780ELSEZ=2:FORY=RL+1TOR+1STEP-1:RW=Y-1:GOSUB345:NEXT:Y=C:GOSUB335:C=Y:GOTO355 310 ST="Delete":GOSUB340:IFA=0THEN780ELSEIFA=82THEN325ELSEZ=1:IFC0):R=RT:GOTO355 320 FORR=0TORL:GOSUB64:NEXT:RETURN 325 Z=2:IFR0):GOTO355 335 FORC=0TOCL:GOSUB64:NEXT:RETURN 340 ST=ST+" Col Row ":PRINTSI;ST;:GOSUB61:PRINTS;:IFA=67ORA=82THENRETURNELSEA=0:RETURN 345 IFZ=1THENRW=0:RX=RL:RY=0:CX=CV:CY=YELSECV=0:CX=CL:CY=0:RX=RW:RY=Y 350 CZ=CY:RZ=RY:GOSUB610:RETURN 355 Z=0:GOTO210 400 Z=0:PRINTSI"Store: # L S Q C ";:GOSUB61:ONINSTR("#LSQC",S)+1GOTO780,405,450,410,750,755 405 Z=1:PRINTSI"DIF: L S ";:GOSUB61:IFS="L"THEN450ELSEIFS<>"S"THEN780 410 CLOSE:PRINTSI"Save File:";:GOSUB59:IFST=""THEN780ELSESV=ST:IFZ=0THENRA=0:RB=RL:CA=0:CB=CL:GOTO415ELSEGOSUB715:IFST=""ORCB=0))" ";:IFT<1THENPRINT#1,CHR$(34)S(I,J)CHR$(34)ELSEPRINT#1,S(I,J) 430 GOSUB88:NEXT:NEXT:PRINT#1,"-1"CW"1 0 END"SZ:CLOSE:GOSUB102:GOTO785 440 D2=RB-RA:S="VECTORS":GOSUB447 441 D2=CB-CA:S="TUPLES":GOSUB447 442 D2=0:S="DATA":GOSUB447 443 FOR J=CATOCB:T=-1:V=0:S="BOT":GOSUB449:FOR I=RATORB:IFT(I,J)=0THENT=1:S=S(I,J):V=0ELSET=0:S="V":V=V(I,J) 445 GOSUB449:GOSUB88:NEXT:NEXT:T=-1:V=0:S="EOD":GOSUB449:CLOSE:GOSUB102:GOTO780 447 PRINT#1,S:PRINT#1,"0,";D2:PRINT#1,"":RETURN 449 PRINT#1,T","V:PRINT#1,CHR$(34) S CHR$(34):RETURN 450 CLOSE:PRINTSH"! Ram:"SO:FILES 455 PRINTSI"Load File:";:GOSUB59:IFST=""THEN765ELSEPRINTSH" :"SO;:OPENSTFORINPUTAS1:IFZTHEN485ELSEINPUT#1,I,J,RB,CB 460 IFI<0ORRB<1ORRB>9ORCB<0ORCB>1THEN470ELSEG=RB:O=CB:IFI<=RMANDJ<=CMTHENRL=0:RO=0:CL=0:CO=0:GOTO480 465 PRINT" too big";:GOSUB955:IFZTHEN495ELSERUN 470 GOSUB615:GOTO450 480 IFEOF(1)THEN495ELSEINPUT#1,I,J,T,S:IFI<0THENCW=J-10*(J<1):GOTO495ELSEI=I+RO:J=J+CO:T(I,J)=T:S(I,J)=S:GOSUB66:GOSUB88:GOTO480 485 INPUT#1,S,D1,D2,S1:IFS="VECTORS"THENNV=D2ELSEIFS="TUPLES"THENNT=D2ELSEIFS="DATA"GOTO490 489 GOTO485 490 RO=R:CO=C:RA=RO+NV:CA=CO+NT:J=CO-1:IFRA>RMORCA>CMGOTO465 491 INPUT#1,T1,V,S 492 IFT1=-1THENIFS="BOT"THENI=RO:J=J+1:GOTO491ELSEIFS="EOD"GOTO495ELSE470 493 T(I,J)=-(T1-1)*G:IFT1THENS(I,J)=SELSES(I,J)=MID$(STR$(V),1-(V>=0)) 494 GOSUB66:GOSUB88:I=I+1:GOTO491 495 CLOSE:IFZ=0THENR=0:C=0:R1=0:C1=0:GOTO210ELSE210 500 A=128:GOSUB510:IFT(R,C)=0THEN505ELSET(R,C)=SGN(T(R,C))*A:GOTO785 505 IFLEFT$(S(R,C),1)=" "THENS(R,C)=RIGHT$(S(R,C),LEN(S(R,C))-1):GOTO505 506 IFRIGHT$(S(R,C),1)=" "THENS(R,C)=LEFT$(S(R,C),LEN(S(R,C))-1):GOTO506 507 IF S="R"THENS(R,C)=SPACE$(CW-LEN(LEFT$(S(R,C),CW)))+S(R,C)ELSEIFS="L"THENS(R,C)=LEFT$(S(R,C),CW)+SPACE$(CW-LEN(LEFT$(S(R,C),CW))) 508 GOTO785 510 PRINTSI"Format:"CHR$(32-(39*(A=128)))" L R Decimal 0-7 or S ";:GOSUB61:A=A-47+27*(A=83):IFA<1ORA>9THENA=10 515 RETURN 550 PRINTSI"Global: C O F ";:GOSUB61:IFS="O"THENPRINTSI"Recalc Order: R C ";:GOSUB61:Z=INSTR("CR",S):IFZTHENO=Z-1ELSE78OELSEIFS="F"THENGOSUB510:Z=INSTR("LR",S):IFZTHENGF=Z-2ELSEG=A 555 IFS="C"THENPRINTSI"Column Width (5-18):";:GOSUB59:IFVAL(ST)<5ORVAL(ST)>18THEN780ELSECW=VAL(ST) 560 GOTO765 600 Z=0:SL=CHR$(C+65)+MID$(STR$(R),2):CO=C:RO=R:PRINTSI"Source:";:GOSUB685:IFETHEN615ELSECV=CO:RW=RO:GOSUB680:CX=CO:RX=RO:IFEOR(CV<>CXANDRW<>RX)ORRW>RX ORCV>CXTHEN615 605 SL="":PRINT" Target:";:GOSUB685:IFST=""ORETHEN615ELSECY=CO:RY=RO:GOSUB680:CZ=CO:RZ=RO 610 IFEOR(CY<>CZANDRY<>RZ)ORCZ>CMORRZ>RMORCY>CZORRY>RZORCZ>CMORRZ>RMTHEN615ELSERT=RY:CT=CY:GOTO620 615 IFA=27THEN780ELSEPRINT"90THEN675ELSERI=VAL(MID$(SL,2)) 655 IF(Z=1AND(CI-65)LEN(SD)THENPRINTSILEFT$(ST,L-1)""R"THEN675 670 CI=CI+CO:RI=RI+RO:IFCI<65ORRI<0THENSL="err"ELSESL=CHR$(CI)+MID$(STR$(RI),2) 675 SX=SX+SL:IFL<=LEN(ST)THEN650ELSEST=SX:RETURN 680 PRINT"..."; 685 PRINTSLSTRING$(LEN(SL),8);:GOSUB59:IFST=""THENPRINTSL;ELSECO=ASC(ST)-65:RO=VAL(MID$(ST,2)):SL=ST 690 E=(LEN(SL)<2)+(CO>CM)+(RO>RM)+(A=27):RETURN 695 IFZTHENRETURNELSE765 700 PRINTSI"Print: Printer, Device ";:GOSUB61:IFS="P"THENSV="LPT:":GOTO705ELSEIFS<>"D"THEN780ELSEPRINT"Spec: ";:GOSUB59:SV=ST 705 GOSUB715:IFST=""THEN780ELSEOPENSVFOROUTPUTAS1:FORI=RTORB:FORJ=CTOCB:GOSUB52:IFP<0THENPRINT#1,LEFT$(S(I,J),CW);SPACE$(CW-LEN(LEFT$(S(I,J),CW)));ELSEPRINT#1,USINGSE;V(I,J); 710 GOSUB88:NEXT:PRINT#1,"":NEXT:PRINT#1,SZ;:CLOSE:GOTO785 715 PRINTSI"Lower right ";:GOSUB59:IFST=""THENRETURNELSESL=ST:GOSUB42:RETURN 750 S="Quit: ":GOSUB790:IFS="Y"THENCLS:SCREEN0:CLEAR100:MENUELSE780 755 S="Clear: ":GOSUB790:IFS="Y"THENRUNELSE780 760 PRINTSI;"Blank ";:GOSUB61:IFKTHENGOSUB64:GOTO785ELSE780 765 GOSUB78:GOTO780 770 GOSUB80:GOSUB795:PRINTUSING" f=# o="+SQ(O)+" #####m ####s";G-1,FRE(0),FRE(S); 775 BEEP:FORX=1TO4000:NEXT 780 BEEP 785 S="":RETURN 790 PRINTSI;S" Confirm=Y Abort=";:GOSUB955:RETURN 795 PRINTUSINGSI+"spr cm="+CHR$(65+CM)+" rm=## p="+SU;RM;:RETURN 800 ONERRORGOTO900:SCREEN1,0:R2=(-21*(RM>=21))-(RM*(RM<21)) 802 CW=9:C2=3:W=(CM+1)*RM:FORU=1TO13:SA=SA+CHR$(ASC(MID$("5DEFG).<*4:?B",U))-40):NEXT 805 CLS:U=1:RM=W/(CM+1):GOSUB795:PRINT" or new cm?";:GOSUB61:IFKTHENIFSU="S"THENDEFSNGVELSEDEFDBLVELSEIFA<68ORA>90THENBEEP:GOTO805ELSECM=A-65:PRINT:PRINT"precision: SorD pre=";:GOSUB61:SU=CHR$(83+15*(A=68)):GOTO805 815 CLS:ONERRORGOTO910:DIMI,J,VI,L,ST,SC,N,Q,SL,T,X,V,VY,VZ,CA,CB,RA,RB,CI,RI,C1,R1,C,R,P,T(RM,CM),S(RM,CM),V(RM,CM),VS(10),SO(10),W(10),SR(1),SQ(1):SN="+-*/^(,":SZ=CHR$(26):SQ(1)="R":SQ(0)="C" 820 S=CHR$(27):SR=S+"p":SR(1)=SR:SM=S+"q":SB=S+"K":SH=S+"Y":S3=S+"3":S4=S+"4":SJ=SH+" ":SI=SJ+SB:SO=S+"J":G=1:GF=-1:RETURN 900 R2=5:RESUME802 910 E=ERR:IFE=7THENONERRORGOTO0ELSEIFERL=415THENRESUME615ELSEIFERL=455THENRESUME470ELSEIFERL=480ANDERR=9THENRESUME465ELSEIFERL>2ANDERL<48THENGOSUB920ELSEGOSUB950 915 IFERL>46THENRESUME780ELSEPRINTSI;ST;SJ;:RESUME69 920 IFL<1THEN950ELSEST=LEFT$(ST,L-1):R=I:C=J:V(I,J)=0:GOSUB90 925 PRINTSI;ST"";:GOSUB61:RETURN