NumHelp$mouseC $mouseA $sound $logger $MSUtil $ExpUtil$ModMak $dfBcode$dfAcode$DataMan$N $NumMenu$!BOOT $p3 U~m{mx v u.p.Pg.JssFssP>.-xx.: *DIR *BASIC CHAIN"NumMenu" 0 Hxh08@` (yNumerator failed to loadxLxx!x ^y8)í8@м`  * NUMERATOR *  * System Menu *  * (C) Logotron, 1988 * ( * version 1.00 * 27:=P+&3E8:=&3800 <N=&7800:*LOAD N Fv$="Version 1.00" Pd$="8th August 1988" Z error: d23,1,0;0;0;0; n C%=0 &3E4 4 x!(&7C00+C%)=!(P+C%): M%=17 OM%,1)"Logotron Ltd (C)1988"M%,2)"All Rights Reserved"M%,3)""20,"_") 37-(v$),22)""v$ 37-(d$),23)""d$ rom & menu t~@,dH@,dR@,d\@,df@ *NUM "DataMan" "MSUtil" "ModMak" "ExpUtil"  rom A%=0:(((N))&FF)>0 :M%,8)"LoadingNUMERATOR"M%,10)"Please wait ... "; 23,1,1;0;0;0;:A%=1:N " L%=8 10 2 ,M%,L%)20," "); 6: @ ݤmenu JSM%,6)"RunNUMERATORfrom"M%,7)"this menu, or type"M%,8)"*NUM from BASIC" TT%=11:N%=5 ^M%,T%-1)"<"; hC%=017:",";: r"l" | C%=0N% M$ M%,T%+C%)"5 "M$" j"  M%,T%+N%+1)"-"; C%=017:",";: "." P%=0:cursoron:*FX4,1  :G%= (G%=138)(P%<(N%-1)) down (G%=139)(P%>0) up G%=13:*FX4,0 cursoroff 23,1,1;0;0;0;  =P%+1  down cursoroff & P%=P%+1 0 cursoron : Dup Ncursoroff X P%=P%-1 b cursoron l vcursoroff ?&FE00=10:?&FE01=32 ?&FE00=11:?&FE01=19 23,1,0;0;0;0; M%+2,T%+P%)" ";  cursoron M%+2,T%+P%)">"8; 23,1,1;0;0;0; ?&FE00=10:?&FE01=96 ?&FE00=11:?&FE01=16   error  :*FX4,0 ?&FE00=10:?&FE01=32  ?&FE00=11:?&FE01=19 23,1,1;0;0;0;  :: * "Numerator " 4 "Data Manager " > "Mouse Utility" H "Module Maker " R "Expression " \ " Utility" \ NUMERATOR NUMERATOR & y gxNo sideways RAM found xLx00 Nx 00`0` ^x `NUMERATOR0~ x~0`0HI0h` `8S'xx(x yxLyxixxx0~8@00р000р00р5еЮ0 Nx~08@` gyNumerator failed to loadxLxx!x y8)í8@м`  * NUMERATOR *  * Data Manager *  * (C) Logotron, 1988 * ( * version 1.00 * 2!7:=P+&3E8:=&5000:buffer= <code%=&7300:oscli=&A00 Fver$="Version 1.00" Pd$="23rd August 1988" Z error:dH@ d StartUp : :#0 *FX229,0 Coff:@%=&000090A C%=0 &3E4 4 !(&7C00+C%)=!(P+C%): M%=17 QM%,1)w$"Logotron Ltd (C)1988"M%,2)w$"All Rights Reserved"M%,3)""20,"_") 37-(ver$),22)""ver$ 37-(d$),23)""d$ ",choice=menu/2:choice=1 *LOAD dfBcode ,choice=0 *LOAD dfAcode 6 *FX229,1 @<$inf=""::DiskIn(choice$(choice)): $inf<>"" escape= J" escape choice<2 Convert T escape choice>1 Edit ^scursoroff:12,7:dbox(4):6,21)"Please put the"y$"System disk"5,22)"in"y$"Drive 0"c$"and press RETURN";:Con h:G%=:G%=13 roscli("DIR :0"):escape= | :  StartUp Bchoice$(3), label$(9), label(9), use$(1), chosen$(9):*FX214,1 Bvalue=0:V%=findvar("value"):inf=&A80:outf=&AC0:escape=:cli= R%=0:new=:update=: DXB +g$=(130):y$=(131):c$=(134):w$=(135) $I%=09: label$(I%),label(I%): I%=03:choice$(I%): use$(0)=" No":use$(1)="Yes" l1$=(148)+"<"+36,",")+"l" %l2$=(148)+"5"+35,c$)+(148)+"j" l3$=(148)+"="+36,",")+"n" l4$=(148)+"-"+36,",")+"." *not1$="Not a Numerator data file"+(0) %not2$="No data in this file"+(0)  &: X "x:", 0,"y:", 0 b) "a:", 0,"b:", 0,"c:", 0,"d:", 0 l) "A:", 0,"B:", 0,"C:", 0,"D:", 0 mf Convert data file to ASCII, Convert data file to BASIC, Create new data file, Edit existing file v: ݤfindvar(var$) v%=((var$,1))-64)*2 !p1%=?(&480+v%)+256*?(&481+v%) v%=0::p1%>0 v%=testvar (p1%=0)(v%>0):=v%  ݤtestvar p2%=?p1%+256*?(p1%+1) cs%=cmpstr(var$,p1%+2)  p1%=p2%:=cs% :  ݤcmpstr(p$,p%) *C%=-1::C%=C%+1 4ch1%=(p$,C%+2,1)) >ch2%=?(p%+C%):(ch1%<>ch2%) H*(ch2%=0)((p$)=C%+1) =p%+C%+1 =0 R:  ݤmenu  DlG:T%=9:N%=7:W%=2 3M%+5,5)g$"NUMERATOR"M%+3,6)c$"Data Manager" M%,T%-1)"<"; C%=017:",";: "l"  C%=0N% M$ M%,T%+C%)"5 "M$" j"  M%,T%+N%+1)"-"; C%=017:",";: "." P%=0:cursoron:*FX4,1  :G%= (G%=138)(P%<(N%-1)) down $(G%=139)(P%>0) up %G%=27 escape=:G%=13 .G%=13:*FX4,0 8cursoroff BCon L=P% V:  down cursoroff  P%=P%+W%  cursoron  up cursoroff  P%=P%-W%  cursoron    left cursoroff ( M%=M%-U% 2 cursoron < F right Pcursoroff Z M%=M%+U% d cursoron n x:  Con 23,1,1;0;0;0;   Coff 23,1,0;0;0;0;  : cursoroff ?&FE00=10:?&FE01=32 ?&FE00=11:?&FE01=19  Coff M%+2,T%+P%)" ";  : @cursoron JM%+2,T%+P%)">"8; TCon ^?&FE00=10:?&FE01=96 h?&FE00=11:?&FE01=16 r |:  error #0:*FX4,0 ?&FE00=10:?&FE01=32 ?&FE00=11:?&FE01=19 23,1,1;0;0;0;26:*fx229  *FX225,1  *FX226,1  *FX227,1  *FX228,1  *FX229,0  *FX214,7  =17 "NumMenu" :*FX214,1 Kerr$="":dbox(7):4,18)"Data Manager error routine":I%=?&FD+?&FE*256+1 &K:err$=err$+(?I%):I%=I%+1:?I%=0:I%>&8000 err$=err$+" in BASIC code " 0C3,20);y$;err$;4,22)"Press RETURN to continue";::G%=:G%=13 : D: l "Numerator " v " --> ASCII"  "Numerator "  " --> BASIC"  "Create a new "  " data file"  "Edit an "  "existing file" : DiskIn(m$) e:cursoroff:dbox(4)::Coff:3,21)"Please enter the drive number"3,22)"for the data disk:"y$; 731,22,22,32,8:Con::G%=:(G%>47 G%<56) G%=27 8G%<>27 drive=G%-48:G%::G%=:G%=13 G%=27 G%=127 G%=13G%=27 G%=27 escape=:  qcursoroff:dbox(4):7,21)"Please put the"y$"data disk"5,22)"in"y$"Drive ";drive;c$"and press RETURN";:Con ):G%=:G%=13G%=27:G%=27 escape=:  (info$="DIR :"+(drive):oscli(info$) *cursoroff::oscli(".") 4-dbox(2):5,22)m$5,23)"Enter * command" >.M%=0:P%=21:W%=0:U%=0:T%=1:cursoron:*FX4,1 H$:G%=:G%=138 W%=(P%=21):down RG%=139 W%=(P%=22):up \ G%=13 P%=22 StarCommand f% G%=13 G%=27:G%=27 escape=: pFcursoroff:dbox(2):4,22)"Data file:"y$;:GetFileName: escape: z$inf=name$  : StarCommand Mcli=:cursoroff::dbox(2):5,22);"*";:GetFileName: name$<>"" G%=27 E G%<>27 name$<>"." name$<>"cat" name$<>"CAT" oscli(name$) V:oscli("."):dbox(2):5,22)m$5,23)"Enter * command":G%=0:cli=:P%=21:cursoron  : GetFileName Bname$="":x=:y=:width=36-x::L%=(name$):31,x+L%,y:Con:G%=  L%47 G%<59) (G%>64 G%<91) (G%>96 G%<123) G%=46 (G%=32 cli)) name$=name$+(G%) L%>=width 7 & G%=127 L%>0 name$=name$,L%-1) $Coff:x,y);name$;" "; .0G%=27 (name$<>"" G%=13):G%=27 escape= 8 B:  Convert C3,23);choice$(choice),5);" file:"y$;:GetFileName: escape $outf=name$ [m1$="Data file:"+y$+$inf:m2$=choice$(choice),5)+" file:"+y$+$outf:cursoroff:WorkWind A%=1:X%=8: code%:26,12  :  Edit %R%=0:rmax=0:I%=09:label(I%)=0: choice=2 StartNew choice=3 GetOld  escape ValueMenu  : StartNew +file=($inf):#file,78:#file,68:#file "file=($inf):#file=2:buffset ҍcursoroff:12:grid(5):dbox(7):I%=09 2:8,(I%+1))label$(I%);use$((label(I%)=));23,(I%+1));label$(I%+1);use$((label(I%+1)=)): _10,18);"Press SPACE to select"7,20)"the labels you wish to use"12,22)"RETURN to finish" $M%=3:P%=0:T%=1:U%=15:W%=2:*FX4,1 :cursoron:G%= (G%=138)(P%<8) down (G%=139)(P%>0) up (G%=137)(M%<10) right (G%=136)(M%>10) left "cursoroff ,b G%=32 label(P%+(M%-3)15)=(label(P%+(M%-3)15)=0):M%+8,P%+1)use$((label(P%+(M%-3)15)=)) 6 *FX15,0 @-sum=0:I%=09:sum=label(I%)+sum::ValSet J*(sum G%=13) G%=27:G%=27 escape= Tcursoroff:*FX4 ^)23,1,1;0;0;0;12:grid(10):printvals h r: p GetOld ofile=($inf):I%=01:old$=old$+(#file)::old$<>"ND" #file:?&FD=3:?&FE=1:$(&104)=not1$:error:escape=: C#file<12 #file:?&FD=3:?&FE=1:$(&104)=not2$:error:escape=: #file=2:buffset Jm1$="Examining file:"+y$+$inf:m2$="":WorkWind:30:I%=063:(&FF);: :char=#file !char=120 label(0)=label(0)+1 !char=121 label(1)=label(1)+1  char=97 label(2)=label(2)+1  char=98 label(3)=label(3)+1  char=99 label(4)=label(4)+1 !char=100 label(5)=label(5)+1  char=65 label(6)=label(6)+1  char=66 label(7)=label(7)+1  char=67 label(8)=label(8)+1  char=68 label(9)=label(9)+1 char=&FF R%=R%+1:buffset $:char<>&FF #file=#file+8:0,0)(#file/#file*64) ."#file>=#file:R%=R%-1:26,12 8grmax=R%:item=9:grid(10):I%=09:8,I%*2+1)label$(I%)w$;label(I%)y$"reference";:label(I%)<>1 "s" Bf:dbox(2):2,22)c$"File:"y$$inf;17,22)"Total records:"y$;R%+1;7,23)"Press RETURN to continue"; L,:G%=: G%=13 G%=27:G%=27 escape=: V'(rmax+1) R%=0:12:grid(10):inrec j t: dValueMenu n *FX229,1 x*FX225,124 *FX226,144 *FX227,164 *FX228,184 )U%=15:M%=3:P%=0:T%=1:W%=2:U%=0:*FX4,2 :cursoron:G%= (G%=138)(P%0) up (G%=137)(M%<10) right (G%=136)(M%>10) left cursoroff MG%=13 G%=46 G%=45 (G%>47G%<58) value: G% P%=P%+((P%,I%=code%code%+((item+1)*9):#file, ?I% H: R%>rmax rmax=R% R \:  On(n) Save:sum=0 !R%=R%+n:n>1 R%>rmax R%=rmax ; R%>rmax buffset:ValSet #file=ReadPointer:inrec printvals  :  Back(n)  R%=0  Save R%=R%-n:R%<0 R%=0  inrec  $: L inrec VVitem=-1:#file=ReadPointer:count=0::code%?count=#file: count 9=0 item=item+1 `2count=count+1:code%?(count-1)=&FF:item=item-1 jNumToBas:printvals t ~:  endrec Save:#file  : ݤReadPointer &=buffer?(R%*2)*256+buffer?(R%*2+1) (: x buffset ;buffer?(R%*2)=#file 256:buffer?(R%*2+1)=#file 256  : @WorkWind JC12:dbox(18):6,16)c$m1$5,17)c$m2$9,18)c$"Please wait . . " T28,11,15,26,10 ^ h: lprintvals vlcursoroff:1,22)c$"File:"y$;$inf;24,22);c$"Record:"y$;R%+1" "17,23);c$"Total records:"y$;rmax+1" "; @%=&1020800:I%=0item:31,8,I%*2+1,code%?(I%*9),58,135:!V%=code%!(I%*9+1):V%?4=code%?(I%*9+5): code%?(I%*9+8)=0 "?";(25) strip:s$;(26-(s$)); :@%=&00090A  : strip value=0 s$="0": $exp=0:v$=(value):L%=(v$):s$="" ?count=v$,"E"): count exp=(v$,L%-count)):s$=v$,count-1) ! exp=0 s$=v$ ! % exp<0 s$="0."+Ĕ(exp)-1,"0")+s$ !C exp>0 s$=s$,1)+v$,3-(value<0),count-3)+exp-(count-3),"!") !count=s$,"."): count=0 !4@L%=(s$)::ch$=s$,1): ch$="0" ch$="." L%=L%-1:s$=s$,L%) !>0 (ch$>"0" ch$<":") ch$="." L%=count-1 !H L%=0 s$="0" !R !\ ! value !@point=:val$="":x=M%+8:y=P%+T%:width=31-x:G%<>13 val$=(G%) !x,y)(26):G%=46 point= !,:L%=(val$):Coff:x,y)val$;:Con:G%= !+G%>47G%<58 L%0 '"MM Error:"error(err) J'"PressRETURN "; T =13: ^! == Procedure Definitions == hgetex(g%) r""(65+g%);:":"e$ |e$="" ?(module+g%)=0: U%=0:separate:verify interpolate:errcheck brackets:X%=expunit polish:express(X%) module(g%)  separate C%=032:const$(C%)="": C%=0:N%=0:P%=1:nflag= :sort(e$,P%,1)) P%=P%+1:(P%>(e$)) nflag C%=C%+1 ?(types+C%)=EOE: sort(S$)  sflag= isspace(S$) &Tisnum(S$) ?(types+C%)=NUM:?(elements+C%)=N%:const$(N%)=const$(N%)+S$:nflag=: 0nflag C%=C%+1:N%=N%+1 :N%>32 err=1: TbA Disbrac(S$) sflag=:?(types+C%)=BRAC:?(elements+C%)=(S$) bC%=C%+1:nflag= lC%>255 err=2: TbA vsflag err=3: TbA   ݤop(O$) K%=-1::K%=K%+1 op$(K%)=O$:=opcodes(K%) ݤisnum(i$) %=(((i$>="0")(i$<="9"))(i$=".")) ݤisref(i$) =((i$>="a")(i$<="d")) ݤisop(i$) =("+-*/^DMAOE",i$)>0) ݤisbrac(i$) =((i$="(")(i$=")")) ݤisspace(i$)  =(i$=" ")  verify W%=:C%=-1  :C%=C%+1 *%?(types+C%)=NUM W%=chkconst(C%) 4(W%)(?(types+C%)=EOE) >W% err=4: TbA H Rݤchkconst(K%) \'J%=0:P%=1:K$=const$(?(elements+K%)) f:K$,P%,1)="." J%=J%+1 p P%=P%+1:((P%>(K$))(J%=2)) z%J%<2 const(?(elements+K%))=(K$)  =(J%<2) interpolate  C%=-1  :C%=C%+1 g?(types+C%)=NUM (?(types+C%+1)=REF)((?(types+C%+1)=BRAC)(?(elements+C%+1)=("("))) shift(C%+1) g?(types+C%)=REF (?(types+C%+1)=REF)((?(types+C%+1)=BRAC)(?(elements+C%+1)=("("))) shift(C%+1) j(?(types+C%)=BRAC)(?(types+C%)=(")")) (?(types+C%+1)=BRAC)(?(elements+C%+1)=("("))) shift(C%+1) ?(types+C%)=EOE: shift(S%) $J%=?(types+S%):K%=?(elements+S%) #?(types+S%)=OP:?(elements+S%)=2  :S%=S%+1 X%=J%:Y%=K% $J%=?(types+S%):K%=?(elements+S%) $?(types+S%)=X%:?(elements+S%)=Y%  J%=EOE $?(types+S%+1)=EOE: .errcheck 8?types=OP err=7: TbA BC%=0 L V4?(types+C%)=REF ?(types+C%+1)=NUM err=7: TbA `e?(types+C%)=OP (?(types+C%+1)=OP)((?(types+C%+1)=BRAC)(?(elements+C%+1)=(")"))) err=7: TbA j(?(types+C%)=BRAC)(?(elements+C%)=("(")) (?(types+C%+1)=OP)((?(types+C%+1)=BRAC)(?(elements+C%+1)=(")"))) err=7: TbA te(?(types+C%)=BRAC)(?(elements+C%)=(")")) (?(types+C%+1)=NUM)(?(types+C%+1)=REF) err=7: TbA ~C%=C%+1:?(types+C%)=EOE "?(types+C%-1)=OP err=7: TbA  brackets L%=0:C%=-1  :C%=C%+1 ?(types+C%)=BRAC bsub ?(types+C%)=EOE L%>0 err=6: TbA   bsub !?(elements+C%)=("(") lbrac !?(elements+C%)=(")") rbrac   lbrac ?(brackets+L%)=C%:L%=L%+1:  rbrac (L%=0 err=5: TbA 2L%=L%-1:B%=?(brackets+L%) <?(types+B%)=UNIT F%?(elements+B%)=mkunit(B%+1,C%-1) PD%=C%-B%:K%=B%+1:C%=B% Z :?(types+K%)=?(types+K%+D%) d$?(elements+K%)=?(elements+K%+D%) nK%=K%+1:?(types+K%-1)=EOE x ݤmkunit(m1%,m2%) T%=0 K%=m1% m2% ?(temp_t+T%)=?(types+K%) ?(temp_e+T%)=?(elements+K%)  T%=T%+1: :priorop T%=1:=?(temp_e)  priorop K%=1:J%=5:k%=K% 6:opp(?(temp_e+K%))=T%:K%=k%:Z%=  :K%=K%+2 Z%=(K%>=T%) "Z% Z%=(opp(?(temp_e+K%))>J%) Z% "K%0 W%=0::W%=polish(W%,unit_types,unit_elements):W%=U%  ݤpolish(P%,t%,e%) T%=0:Q%=P% :N%=?(t%+Q%) O%=?(t%+Q%+1) &E%=?(e%+Q%+1) 0N%<128 Q%=pol(Q%) : N%>127 DQ%>P% pol(Q%) N =Q%+1 X ݤpol(F%) b0((N%=NUM)(N%=REF)(N%=UNIT)) err=7: TbA l(O%=OP) err=7: TbA v!?(temp_t+T%)=E%:T%=T%+1:=F%+2  pol(F%)  R%=F%-1  :F%=F%-2 ?(t%+R%)=?(t%+F%) ?(e%+R%)=?(e%+F%) R%=R%-1:F%=P%  :T%=T%-1 %?(t%+F%)=OP:?(e%+F%)=?(temp_t+T%) F%=F%+1:T%=0: express(E%) X%=0:getunit(E%) ?(expression+X%)=255  getconst(G%)  N%:N%=G% ?(expression+X%)=&80  &basnum(const(N%),expression+X%+1) * X%=X%+9: 4getunit(G%) >U%,W%:U%=G% H:W%=?(unit_types+U%)&7F R*W%=NUM getconst(?(unit_elements+U%)) \B(W%=REF)(W%=OP) ?(expression+X%)=?(unit_elements+U%):X%=X%+1 f*W%=UNIT getunit(?(unit_elements+U%)) p#U%=U%+1:?(unit_types+U%-1)>127 z module(m%) ?(module+m%)=M%:X%=0 :M%>255 err=8: TbA !?(module+M%)=?(expression+X%) M%=M%+1:X%=X%+1 ?(module+M%-1)=255: ݤfindvar(var$) v%=((var$,1))-64)*2 !p1%=?(&480+v%)+256*?(&481+v%) v%=0::p1%>0 v%=testvar (p1%=0)(v%>0):=v%  ݤtestvar p2%=?p1%+256*?(p1%+1) cs%=cmpstr(var$,p1%+2) p1%=p2%:=cs% ݤcmpstr(p$,p%) $C%=-1::C%=C%+1 .ch1%=(p$,C%+2,1)) 8ch2%=?(p%+C%):(ch1%<>ch2%) B*(ch2%=0)((p$)=C%+1) =p%+C%+1 =0 Lbasnum(v,R%) V(v=0 C%=06:?(R%+C%)=0::R%?7=&40: ` value=v jC%=04:?(R%+C%)=?(V%+C%): t?R%=?R%&80:R%?5=0:R%?6=0 ~7S%=R%?1&80:R%?1=R%?1&80:S%=0 R%?7=&40 R%?7=&C0  save :'"Module name:"m$ (m$)<6 '"Insert disk for"m$ fsys=8 "in Drive 0,"; "then pressRETURN "; =13 fsys=8 dir $X%=filename:Y%=X%256:$X%=m$+"!" A%=&40:H%=(&FFCE)&FF H%>0 #H%:笤replace 1("SAVE "+m$+"! "+~module+" +100 0000 0000") '" "m$"saved"   dir ( *DISMOUNT 2 *MOUNT0 < :':*CAT F'"Change directory?"c$ P ((c$="Y")(c$="y")) newdir Z((c$="Y")(c$="y")) d n newdir x'"Which directory?"d$ ("DIR "+d$): ݤfsys "A%=0:X%=&70:Y%=0:=(&FFDA)&FF ݤreplace '" "m$"already exists" "Replace it?"a$ =((a$="Y")(a$="y")) ݤnotagain "'"Create another module?"a$ =((a$="N")(a$="n")) ݤerror(E%) TNK :e%,err$:e%=E%  =err$  1,Too many constants  2,Module too big " 3,Unknown character , 4,Illegal constant 6 5,Missing ( @ 6,Missing ) J 7,Syntax error T 8,Module too big  * NUMERATOR *  * Expression Utility *  * version 1.00 * ( * (C) Logotron, 1988 * 27 < module 256, stack 256 F op$(14) PC%=014:op$(C%): ZM "+","-","*","/","S",">?","=?",""m$ &m$,1)="*" (m$,(m$)-1)) F%= F% m$,1)<>"!" m$=m$+"!" ("LOAD "+m$+" "+~module)  " ݤprinter ,"'"Copy to printer (Y/N)?"a$ 6=((a$="Y")(a$="y")) @ main J*H% 2,21:'"Module: ";m$,(m$)-1):6 T E%=03 ^:3:"";:H% 2 h("A"+E%);"="; r3:"";:H% 2,21:" ";:6 |express(?(module+E%)) :::3: express(X%)  X%=0 P%=module+X% c1%=0:c2%=0:sp%=0  ?P%<32 op ?P%=128 const <(?P%>="a")(?P%<="d") print((?P%),1):close_unstack P%=P%+1:?P%=255  op push(?P%):c2%=c2%+1 +P%>(module+X%) print("(",0):c1%=c1%+1 push(c1%):c1%=0  & const 0print(numbas(P%+1),1) :P%=P%+8:close_unstack D Nclose_unstack X+c1%>0 :print(")",0):c1%=c1%-1:c1%=0 b1c2%>0 c1%=pop:c2%=c2%-1:print(op$(pop),2) l vpush(S%) ?(stack+sp%)=S% sp%=sp%+1:  ݤpop sp%=sp%-1:=?(stack+sp%) print(p$,p1%) p1%+p2%=3 " "; ;p$;:p2%=p1%: ݤnotagain  "Another module (Y/N)?"a$ =((a$="N")(a$="n")) ݤfindvar(var$) v%=((var$,1))-64)*2 !p1%=?(&480+v%)+256*?(&481+v%) v%=0::p1%>0 v%=testvar  (p1%=0)(v%>0):=v%  ݤtestvar  p2%=?p1%+256*?(p1%+1) *cs%=cmpstr(var$,p1%+2) 4p1%=p2%:=cs% >ݤcmpstr(p$,p%) HC%=-1::C%=C%+1 Rch1%=(p$,C%+2,1)) \ch2%=?(p%+C%):(ch1%<>ch2%) f*(ch2%=0)((p$)=C%+1) =p%+C%+1 =0 pݤnumbas(N%) z?(N%+7)&40=0 ="?" F%= C%=14:?(N%+C%)>0 F%= :F% ="0" C%=04:?(V%+C%)=?(N%+C%): .?V%=?V%&80:(?(N%+7)&80)=0 V%?1=V%?1&7F  =(value)  error  =17 : : '"PressRETURN ";  =13 :  * NUMERATOR * # * Mouse Sensitivity Utility *  * version 1.00 * ( * (C) Logotron, 1988 * 27 <5'"Numerator "''"Mouse Sensitivity Utility" Fx'"Are you using..."'"1.The AMX mouse driver (mouseA), or"'"2.The Master Compact mouse driver"'" (mouseC) ?" P$:"(1 or 2)"D%:(D%=1)(D%=2) Z#D%=1 f$="mouseA" f$="mouseC" dI'"Insert the disk containing"f$'"in Drive 0, then pressRETURN "; n =13 xfsys=8 mount *DR.0 ch%=(f$) #ch%=3:S%=#ch% N%=scale(S%) !#ch%=3:#ch%,N%:#ch%,256-N% #ch% @0,14)""f$"has now been saved with the new"'"setting."''  ݤfsys "A%=0:X%=&70:Y%=0:=(&FFDA)&FF mount *DISMOUNT *MOUNT0  ݤscale(C%) #:8,3)" SENSITIVITY "  8,5)"Low High" "*8,6)"";:K%=09:(K%*2)+9,6)255: ,C%=11-C%:0,8)"";:a("^") 60,10)"Use left and right arrows to change"'" sensitivity from current setting."'"PressRETURNwhen you are finished."'" "; @ *FX4,1 J :G%= T,(G%=136)(C%>1) a(" "):C%=C%-1:a("^") ^-(G%=137)(C%<10) a(" "):C%=C%+1:a("^") hG%=13:*FX4,0 r =11-C% | a(A$) (C%-1)*2+9,8)A$ 1,13);:  6   b` )H M h` H hLf `Lf d e i ʩ@9ʝ9ʝ9ʝ9ʝ9ʠe 0d *9e 9ʘ9` `l  2` O! ( E!`!!! )H r h!  ! ! ! ! `!Wb !!! i ` !10 ( IHH!8 h h ` ! !!` !) ! !`   Ș ʽ9H)@89ʩ89 Jh`h``l ]! P`ݝ݉퍽ۓѝѝLx,n`HHHm`)'#))*Ld*Ld))Ld)hhh@H`)Ih``)I  l$`)0*08`)`*` /$! `@ /$!`ɀ'$!0`+ LB l `l Number tank cursor [f0]Processor cursor [f1]Small cursor [f2]Module cursor [f3]Labels [f4]Workspace menu [f5]Options menu [f6]Graphs menu [f7]Printer menu [f8]Disk-filing menu [f9]=:741.+(%"++++++++++` GraphChartRevealaei`Lx,n`HHHm`)'#))*Ld*Ld))Ld)hhh@H`)Ih``)I  l$`)0*08`)`*` /$! ` /$!`'$!0`+LB l `l Number tank cursor [f0]Processor cursor [f1]Small cursor [f2]Module cursor [f3]Labels [f4]Workspace menu [f5]Options menu [f6]Graphs menu [f7]Printer menu [f8]Disk-filing menu [f9]=:741.+(%"++++++++++` GraphChartRevealaei`  0 ` Error messages Extensions Filing Graphs & charts Keys Labels Modules Number tanks Options Pipes & plumbing Printing Processes Workspace \]^_` 7.*}-)5;;MAD>...More and pressing RETURN. You can go back in the list with <<...Back. Pressing RETURN on Enter name allows you to type in a filename, including an extended pathname if necessary. Save workspace Save the current workspace, including any modules which are in memory. Any name may be given, within the limitations of the filing system in use, including an extended pathname if required. Load module Load a module into memory. Only module files will be shown on the menu. Up to 8 modules may be stored in the memory at any time. Save as module The system that you have built will be converted into a module, provided NUMERATOR can create an expression from the system. A copy of the workspace is also saved. Open input file Data that has been saved from a NUMERATOR workspace, or created with the DataMan utility program, can be loaded back into a workspace. It is essential that the labelled tanks in the new workspace match the labelled tanks in the original workspace, or data will be ignored. The data file will remain open until all data has been read or until closed by the Close input file option which will have replaced Open input file in the filing menu. Your file will remain open after pressing BREAK with ADFS or on a network but may be closed by DFS. Open output file Values from labelled number tanks can be collected in a file on disk for use later with a separate program. Data collection is carried out in a similar manner as that for the Print data option on the f7 Printer menu. The question marks that show that a tank holds no value will not be sent to the file if you chose to filter them out. The data file will remain open until closed by the Close output file option which will have replaced Open output file in the filing menu. Your file will remain open after pressing BREAK with ADFS or on a network but may be closed by DFS. Enter * command You can give any operating * command - *DRIVE, *MOUNT, *RENAME, etc. - but note that only the one line dialogue window in NUMERATOR will be available for responses. It is possible to leave NUMERATOR by typing BASIC, but no tidying up will have been done - eg, the cursor keys will not work as expected. To exit from NUMERATOR, use Quit instead. Quit Exit from NUMERATOR to the ROM - usually BASIC - which was in use at the time of entry into NUMERATOR. |GRAPHS & CHARTS The x and y labels are used to output values to a graph. Once both labels have been placed you can see the graph by pressing CTRL-G. When the graph is showing, COPY works as usual to start and stop the systems working. CTRL-G or ESCAPE closes the graph window. If the graph scales are not correct, they can be altered from the Graphs menu. Changing the scales will automatically clear the current graph. The graph can also be cleared directly from the Graphs menu. Normally, the graph is drawn as a series of dots. The Line graph option can be switched ON through the f7 Graphs menu. The bar chart can be shown by pressing CTRL-C from the workspace. A vertical bar will be shown on the chart for the current value in any number tank with a label attached. As there are ten labels, up to ten bars can be shown. The vertical scale for a chart is set by the y-axis graph scale. Graphs and charts can be printed out by choosing the f8 Printing menu. |KEYS BREAK If the BREAK key is pressed accidentally, no damage should occur. BREAK is not used for any special purpose by NUMERATOR. COPY The COPY key is used as the on/off switch for running systems. The screen foreground colour will change while systems are running. When Single step has been switched ON, each press of the COPY key will make NUMERATOR take one step, but the screen colour will not change. CTRL-C You can switch between the workspace and the chart by pressing CTRL-C. Bars will only be shown on the chart if labels have been attached to number tanks. CTRL-G When the x and y labels have been attached to number tanks, you can switch between the workspace and the graph by pressing CTRL-G. CTRL-L When the Logger extension has been loaded, a menu of extra labels will be shown. When these labels are attachedto number tanks, values from the ADC and User Ports can be read. CTRL-R This will reveal the full value in any number tanks selected by the f0 Number tank cursor. It is used if a tank is showing the overflow triangle, or if a more precise reading of the value is needed. CTRL-S When the Sound extension has been loaded, a menu of extra labels will be shown. When these labels are attached to number tanks, values in the tanks will be sent to the computer's sound channels. Cursor keys These are normally used to move the chosen cursor (f0 - f3 keys) about the workspace. When the cursor is turned off - by pressing ESCAPE - the cursor keys scroll the whole screen window about the workspace. The cursor (or scrolling) can be made to move quickly by holding down the SHIFT key at the same time as a cursor key. DELETE DELETE is used to delete tanks, processors or pipes from a workspace, and to erase text. ESCAPE The ESCAPE key is the general "panic" button. You can use it to stop things happening - to stop a system working, for example - or to close a menu. ESCAPE also switches the cursor off. RETURN RETURN is the the "fix" key. It fixes tanks, processors, modules and pipes in places. It is also used for making choices from menus - including switching between ON and OFF in some cases - and for putting values in number tanks. TAB When the f0 Number tank cursor is on the screen, the TAB key can be used to jump from one tank to another. The cursor will automatically change size to match the tank that it is on. Values can than be placed in the tank by typing a number and then pressing RETURN. When the f1 Processor cursor is selected, the TAB key can be used to jump to the processors on the screen. The TAB key and the f4 Modules cursor work in the same way. |LABELS The labels - x,y,a,b,c,d,A,B,C and D - can be attached to any number tank. To attach a label, use 啖 the f2 Small cursor and 寰 position it against a number tank, then press the f4 Labels key. Choose a label from the menu. A label may be removed by placing the small cursor over it and pressing DELETE. Making modules To make a module from a system, its inputs - up to a maximum of four - should be labelled from a to d. Its outputs - at least one and up to a maximum of four - should be labelled from A to D. Graphs and Charts To show data on an X,Y graph, two number tanks should be labelled with x and y. To show data on a chart any or all of the labels can be used. Collecting data Data from any labelled number tank can be printed out as a system is working, or saved in a data file on disk. |MODULES Modules are compressed systems and are created in one workspace to be used in another. They are a little like function tanks but may have any number of inputs from 0 to 4 and any number of outputs from 1 to 4. Inputs are always name labelled a,b,c and d and outputs are labelled A,B,C and D. These labels do not appear on the module itself but are replaced by arrowheads. These are placed in the left to right positions of the original letters. Constant values, but not variable values, can be hidden inside modules. No piping loops are allowed inside modules. To create a module, inputs and outputs need to be labelled. Do this by placing the f2 Small cursor against the dummy number tank to be labelled. Press f4 for the labels menu, choose the appropriate label - not x or y - and press RETURN. The module will be saved on disk by choosing Save as module in the f9 Filing menu. A copy of the workspace is also saved. A module title may have up to 5 characters. To load an existing module, choose Load module from the f9 Filing menu. You will be shown a list of modules in the current directory. If the module you want is not there, you may either choose to Enter name, in which case you must type the name, preceded by a pathname if required (not DFS). Modules have names of up to 5 characters only. You may change directory by entering the appropriate * command through the f9 Filing menu and try again. The module will be loaded into memory. Up to 8 modules can be stored in the computer's memory. You can find out which modules are stored in the memory by choosing List modules from the f5 Workspace menu. Remove module will remove a module from memory but NOT from the disk. Modules can be placed in the workspace by placing the f3 Modules cursor and pressing RETURN. You can make a selection from the list of the modules in memory that you will be show. Up to 16 modules can be placed in any one workspace. |Number tanks The f0 Number tank cursor 啖 is used to place a number 寰 tank. Its length depends on the Tank size selected from the f6 Options menu. Use the cursor keys to position the tank, then press RETURN to fix it. Tanks CANNOT be placed anywhere within a single pipes' width of any other object or text, or the edge of the workspace. Values can be entered at any time by placing the left edge of the f0 Number tank cursor on the left edge of the number tank, typing the number and pressing RETURN. The TAB key can also be used to move from tank to tank on the screen. Number tanks can be deleted by a placing the tank cursor over a tank and pressing DELETE. If the value in a number tank contains more 啖 digits than the tank 寰 can show, then the most significant figures will be shown, followed by a triangle. Numbers in 啖 base 10 which 寰 have more than 12 digits are beyond the accuracy range. The least significant digits in such a number are replace by a special character to show that accuracy in this column is beyond the range. The number of places after a fractions point can be set by choosing the Places command from the f6 Options menu. The full value in any tank can be revealed by pressing CTRL-R. A number tank may have no or one input - a pipe entering at the top - but as many outputs as can be fitted along the bottom. Up to 32 number tanks can be in use in a workspace at any time. |OPTIONS Single step Normally, COPY switches a system on and off again. With a looped system, this may to lead to continuous changes in values to be made in one or more number tanks. To see these changes made one at a time, turn Single step ON by selecting it and pressing RETURN. Now COPY will make the system work one step for each press of the key. Fast working Normally, all number tank values will be updated once every second. With this option switched ON, the changes will take place as quickly as possible. Extra processes These can be switched ON or OFF. Tank size The length of number tanks can be set to any value from 1 to 20. The f0 Number tank cursor will show the size set here, although it will change size if the TAB key is used to move from tank to tank. Places NUMERATOR can show up to 12 places beyond a fractions point. Number base The workspace can be set to show values in any number base from 2 to 16. Only one number base can be shown at any time, although all values will change to the base selected. If you choose to work in base 2 you will be asked if you want leading zeroes before numbers displayed in number tanks. This will provide a more useful display for logic work. For example, with a tank size of eight, the number, 33, will be displayed in base 2 as 00100001. Change colours The screen display colours can be changed by repeatedly pressing the RETURN key. Foreground and Background refer to the normal screen colours; Working refers to the colour to which the foreground changes whilst a module is working. |PIPES & PLUMBING Objects can be connected by pipes. A pipe will carry a value from one object to another. VALUES ALWAYS PASS OUT FROM THE BOTTOM OF OBJECTS. INPUTS ALWAYS GO IN AT THE TOP. To plumb a pipe in, choose the f2 Small cursor, place it against the point on the bottom of the object from which the pipe is to be an output, then press RETURN. Now move the cursor next to the input point of the object to which the pipe is to be connected, then press RETURN again. Although values always flow FROM the bottom TO the top, you can connect pipework in either direction. To delete a pipe, place the small cursor anywhere along the pipe's length and press DELETE. |PRINTING A workspace can be printed out by choosing Print workspace from the f8 Printing menu. The print-out will be affected by switching the printer options ON or OFF. The options are: Bold print (double-density), Enlargement and Linefeeds. Workspaces are printed upright on the paper unless they are too wide, in which case they are printed sideways. Too wide is over 60 characters width for normal printing, or over 30 characters for double-size printing. Only the top part of any workspace more than 40 characters wide or 30 characters deep will be printed if the double-size option has been selected. Graphs and charts may also be printed out and will also be affected by the setting of the printer options. Double-size graphs and charts are always printed sideways. During printing, the graph or chart will be displayed on the screen. Data from number tanks can also be printed out if the Print data option is selected. In this case all labels and values from labelled tanks will be copied to the printer at each step of the system. This will continue until this option is switched off. All printing, except printing of data, can be stopped by pressing ESCAPE. In such cases it is often wise to switch the printer off and on again to ensure that no incomplete codes remain in the printer's own memory. |PROCESSORS The processor cursor is switched on by pressing red key f1. A processor is fixed by pressing RETURN, when a processor menu will appear. Choose the process by using the up and down cursor keys then pressing RETURN. A process can be changed by returning to it with the function cursor and pressing RETURN again. Normally, you can choose from seven functions: add, subtract, multiply, divide, STOP. All functions must have two inputs and up to five outputs. Processes such as subtract and divide are executed from left to right - it will be left input minus right input for the subtraction process. The first four processes operate as you might expect. The STOP process stops the whole workspace working if both it inputs are equal. Extra processes When Extra processes are switched on through the f6 Options menu, you will be given a longer list of processes to choose from when you fix a processor. The extra processes are in three groups: control, arithmetic and logic. IF GREATER This passes as output the left input value, provided it is greater than the right input value. If not it passes no value. IF LESS This passes as output the left input value, provided it is less than the right input value. If not it passes no value. IF EQUAL This passes as output the left input value, provided it is equal to the right input value. If not it passes no value. JUNCTION This passes as output the left input value, provide there is a valid value to pass, else it passes the right input value. The junction can be used as a pipe-joint at which preference is given to the left input. DIV Integer divide outputs the integer part of a division (i.e. fractions or remainders are ignored). MOD Modulus outputs the > remainder of a division, e.g. 11 MOD 3 = 2. Power raises the left input to the power of the right input. The right input may be a fraction, so, for example, any number to the power 0.5 will give its square root. AND Logical AND the two inputs. OR Logical OR the two inputs. XOR Exclusive-OR the two inputs. |WORKSPACE Help This is the Help file. List modules This will show a list of the modules in the computer's memory. Up to 8 modules may be in store at any time. Remove module This removes a module from the memory, not from a disk. You will not be able to remove a module that is in use. Clear workspace This removes all systems and text from the workspace and all modules from the computer's memory. Workspace plan This lets you see how all the systems are laid out and how much space you have. The current screen window is outlined by a dotted line. Set values This allows you to make global changes to number tank values. You can: - Set all variables - Set all constants - Clear all variables - Clear all constants