Home » Archimedes archive » Archimedes World » AW-1996-08.adf » !Graph_Graph » !Graph/Graph
!Graph/Graph
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Archimedes World » AW-1996-08.adf » !Graph_Graph |
Filename: | !Graph/Graph |
Read OK: | ✔ |
File size: | A943 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
1REM>Graph 2ON ERROR PROCLFs:OSCLI"POINTER 1":END 3@%=&90A 4Ph$="<Graph$Dir>." 5DP$=Ph$+"DrawFiles.Draw.DrawFile" 6LP$=Ph$+"DrawFiles.Log.LogFile" 7Log$="Graph"+STRING$(3,CHR$(0))+"GraphLog"+STRING$(4,CHR$(0)) 8Dg%=FALSE:PX%=0:PY%=0 9Ng%=19 10Mg=.9 11MW%=-1 12CW%=TRUE 13Te=.0625 14OS=.141111111 15Gm%=80 16Dy%=FALSE 17Ts%=216 18Ig%=FALSE 19Cd%=-1 20DIM h% 40 21DIM Gw%(Ng%):Gn%=0 22DIM Ga%(Ng%) 23DIM Hp%(Ng%,5) 24DIM Gp(Ng%,21) 25DIM Gc%(Ng%):Gc%()=TRUE 26DIM Ag%(Ng%):Ag%()=TRUE 27DIM F$(Ng%) 28DIM Fh%(Ng%,1):Fh%()=TRUE 29DIM Font% 256:FOR A%=0 TO255 :A%!Font%=0:NEXT 30SYS"Font_ReadFontMax" TO Max0%,Max1%,Max2%,Max3% 31max3%=Max3% 32Font$="Trinity.Medium" 33IL%=&764+&3D4*(Ng%+1) 34MOpen%=FALSE 35LMenu%=0 36DIM Icons% IL% 37Icon%=Icons% 38PROCHI 39SptS%=FNFS(Ph$+"Sprites")+20 40Spt%=FNHCm(SptS%) 41!Spt%=SptS%:Spt%!8=16 42SYS"OS_SpriteOp",265,Spt% 43SYS"OS_SpriteOp",266,Spt%,Ph$+"Sprites" 44DIM IM% FNMenuSize("Icon") 45DIM On% FNMenuSize("Option") 46DIM Save% FNMenuSize("Save") 47DIM LDM% FNMenuSize("LOption") 48DIM Buf% (256*(Ng%+2)) 49DIM Wb% &95C 50SYS"Wimp_Initialise",200,&4B534154,"Graphschetch" TO Ver%,Th% 51Start%=FNLW(Ph$+"Templates","Start",Font%) 52Start%=FNCW(Start%) 53PROCow(Start%,0,-1) 54PA%=FNLW(Ph$+"Templates","PlotArea",-1) 55IconN%=FNIconMenu(IM%,"Icon") 56SW%=FNMenuWh(IM%,1) 57OnN%=FNIconMenu(On%,"Option") 58Zoom%=FNLW(Ph$+"Templates","Zoom",-1) 59CdW%=FNLW(Ph$+"Templates","Coords",-1) 60SaveN%=FNIconMenu(Save%,"Save") 61LDMN%=FNIconMenu(LDM%,"LOption") 62Dw%=FNMenuWh(Save%,0) 63Log%=FNMenuWh(Save%,1) 64PROCLS(Dw%,2,DP$) 65PROCLN(SW%,1,INT(FNOSX*OS)) 66OS1=FNRN(SW%,1)/INT(FNOSX*OS) 67Ih%=FNIconBar("!Graph") 68XPix%=1<<FNXPixVal:YPix%=1<<FNYPixVal 69PROCSe(IM%,3) 70Quit%=FALSE 71REPEAT 72PROCProg 73UNTIL Quit% 74Spt%=FNHF(Spt%) 75PROCLFs 76SYS"Font_SetFontMax",,Max1%,Max2%,Max3% 77SYS"Wimp_CloseDown",Th%,&4B534154 78END 79DEF PROCProg 80LOCAL M%,Cal%,Dn%:Dn%=TRUE 81M%=&1801 82PROCPoll(M%,Buf%) 83ENDPROC 84DEF PROCPoll(M%,Buf%) 85LOCAL R%,W%,n%,d% 86REPEAT 87SYS"Wimp_Poll",M%,Buf% TO R% 88CASE R% OF 89WHEN 0: 90SYS"Wimp_GetPointerInfo",,Buf% 91 IF Buf%!16=-9 THEN 92 CASE Buf%!8 OF 93 WHEN4: 94 IF Dy% THEN 95 Dn%=FNFindW(Buf%!12) 96 IF Dn%>=0 THEN 97 IF Ga%(Dn%)=Buf%!12 PROCDc(Dn%) ELSE Dn%=TRUE 98 ENDIF 99 ENDIF 100 WHEN0:IF Dn%>=0 PROCCS(Dn%,0):PROCow(Ga%(Dn%),0,-1):Dn%=TRUE:IF Cd%<>TRUE ANDBuf%!12=MW% PROCMC(MW%) 101 ENDCASE 102 ELSE 103 IF Dn%>=0 ANDBuf%!8=0 PROCCS(Dn%,0):PROCow(Ga%(Dn%),0,-1):Dn%=TRUE 104 IF MW%<>TRUE ANDDg%=FALSE THEN 105 IF FNPMove(PX%,PY%) PROCAP(FNFindW(MW%),"ptr_grab") 106 ELSE IF Dg% ANDFNPMove(PX%,PY%) PROCUC(MW%) 107 ENDIF 108 ENDIF 109WHEN 1:PROCRD(FNFindW(!Buf%)) 110WHEN 2:SYS"Wimp_OpenWindow",,Buf% 111WHEN 3: 112 n%=FNFindW(!Buf%) 113 IF n%>=0 THEN 114 CASE !Buf% OF 115 WHEN Gw%(n%):SYS"Wimp_CloseWindow",,Buf% 116 WHEN Ga%(n%):PROCCe(n%) 117 ENDCASE 118 ENDIF 119 ENDIF 120 WHEN 4: 121 IF MW%=!Buf% ANDDg%=FALSE THEN 122 IF Cd%<>TRUE !Wb%=Cd%:SYS"Wimp_CloseWindow",,Wb%:Cd%=TRUE 123 OSCLI"POINTER 1":Ig%=FALSE 124 IF NOTDy% M%=M%OR1 125 ENDIF 126 n%=FNFindW(!Buf%) 127 IF n%>=0 THEN 128 IF MOpen% AND!Buf%=Ga%(n%) CW%=!Buf% 129 ENDIF 130 IF !Buf%=Zoom% SYS"Wimp_CloseWindow",,Buf% 131 IF !Buf%=SW% THEN 132 IF FNRN(SW%,1)<80 PROCLN(SW%,1,INT(FNOSX*OS)) 133 OS1=FNRN(SW%,1)/INT(FNOSX*OS) 134 ENDIF 135 ENDIF 136WHEN 5:n%=FNFindW(!Buf%) 137 IF n%>=0 THEN 138 IF MW%=!Buf% THEN 139 !Wb%=MW%:SYS"Wimp_GetWindowState",,Wb% 140 IF Wb%!28=-1 THEN 141 M%=M%AND&FFFFFFFE 142 IF Cd%=TRUE PROCCd(MW%) 143 ELSE MW%=TRUE 144 IF Cd%<>TRUE !Wb%=Cd%:SYS"Wimp_CloseWindow",,Wb%:Cd%=TRUE 145 ENDIF 146 ENDIF 147 IF MOpen% ELSE IF Ga%(n%)=!Buf% CW%=!Buf% 148 ENDIF 149WHEN 7:IF MW%<>TRUE PROCBE(Buf%) ELSE PROCDE 150WHEN 6:PROCCk 151WHEN 8: 152 CASE !Buf% OF 153 WHEN Zoom%:PROCZK(Buf%) 154 WHEN Gw%(Gn%):PROCPK(Buf%) 155 ENDCASE 156WHEN 9: 157 Buf%!16=Buf%!4:Buf%!4=-1 158 !Wb%=Zoom%:SYS"Wimp_CloseWindow",,Wb% 159 SYS"Wimp_DecodeMenu",,CM%,Buf%,Wb% 160 SYS"Wimp_CreateMenu",,-1:MOpen%=FALSE 161 IF INSTR($Wb%,CHR$(&2E))>0 Wb%!INSTR($Wb%,CHR$(&2E))=&D 162 CASE $Wb% OF 163 WHEN"Close":PROCCe(FNFindW(CW%)) 164 WHEN"Plot size" 165 n%=FNFindW(CW%) 166 IF n%<>TRUE PROCPS(n%):PROCow(Ga%(n%),0,-1) 167 WHEN"Minimize" 168 n%=FNFindW(CW%) 169 PROCCS(n%,0) 170 CW%=Ga%(n%) 171 PROCow(Ga%(n%),0,-1) 172 WHEN"Dynamize": 173 PROCSDc($Wb%) 174 WHEN"Magnify": 175 SYS"Wimp_GetPointerInfo",,Wb%:PX%=!Wb%-1:PY%=Wb%!4:MW%=CW% 176 PROCTW(MW%) 177 WHEN"Quit":Quit%=TRUE 178 WHEN"Zoom":n%=FNFindW(CW%) 179 PROCLN(Zoom%,0,Hp%(n%,3)!184):PROCLN(Zoom%,1,Hp%(n%,3)!188) 180 PROCZS(n%) 181 SYS"Wimp_OpenWindow",,Wb% 182 WHEN"Graph menu","Re-plot" 183 PROCCMW(Gn%) 184 WHEN"New graph": 185 !Buf%=Gw%(Gn%):SYS"Wimp_CloseWindow",,Buf% 186 Gn%=FNFt 187 PROCCMW(Gn%) 188 WHEN"Load","Load graph": 189 Buf%!4=Buf%!16 190 SYS"Wimp_DecodeMenu",,LMenu%,Buf%+4,Wb% 191 IF$Wb%<>"None" THEN 192 $(Buf%+44)=LP$+".^."+$Wb% 193 IF INSTR($Wb%,CHR$(&2E))>0 $(Buf%+44)=LP$+".^."+LEFT$($Wb%,INSTR($Wb%,CHR$(&2E))-1) 194 IF Buf%!8<>-1 THEN 195 IF $(Wb%+INSTR($Wb%,CHR$(&2E)))="Delete" SYS"OS_File",6,Buf%+44 ELSE IF$(Wb%+INSTR($Wb%,CHR$(&2E)))="Load" PROCLL(Buf%,-1) 196 ELSE 197 PROCLL(Buf%,-1) 198 ENDIF 199 ENDIF 200 ENDCASE 201WHEN 17,18,19: 202 PROCMess(R%,Buf%) 203ENDCASE 204UNTIL Quit% ORCal% 205ENDPROC 206DEF PROCCk 207IF Start%>0 !Wb%=Start%:SYS"Wimp_DeleteWindow",,Wb%:Start%=-1:PROCLDF 208n%=FNFindW(Buf%!12) 209IF Zoom%<>Buf%!12 !Wb%=Zoom%:SYS"Wimp_CloseWindow",,Wb% 210CASE Buf%!8 OF 211WHEN2: 212 IF MW%<>TRUE THEN 213 MW%=TRUE:Ig%=FALSE:OSCLI"POINTER 1":IF NOTDy% M%=M%OR1 214 IF Cd%<>TRUE !Wb%=Cd%:SYS"Wimp_CloseWindow",,Wb%:Cd%=TRUE 215 ENDIF 216 CASE Buf%!12 OF 217 WHEN-2:!Buf%=!Buf%-50:Buf%!4=360:PROCCm(IM%) 218 ENDCASE 219 IF n%>=0 THEN 220 CASE Buf%!12 OF 221 WHEN Ga%(n%):IF Gw%(n%)<>Gw%(Gn%) !Wb%=Gw%(Gn%):SYS"Wimp_CloseWindow",,Wb% 222 PROCCm(On%):Gn%=n%:Sn%=n%:MOpen%=TRUE 223 ENDCASE 224 ENDIF 225WHEN4: 226 227 IF n%>=0 IF Gc%(n%)=Buf%!12 ANDBuf%!16=3 Ag%(n%)=n% 228 CASE Buf%!12 OF 229 230 WHEN-2: 231 PROCCMW(Gn%) 232 WHEN Gw%(Gn%): 233 CASE Buf%!16 OF 234 WHEN32: 235 PROCCt(Gn%) 236 WHEN33:SYS"Wimp_CloseWindow",,Buf%+12 237 WHEN31:PROCAPs(Buf%!12): 238 239 WHEN35:PROCMn(Gw%(Gn%)) 240 WHEN5: 241 IF FNReS(Gw%(Gn%),5)="Graph width" THEN 242 PROCLS(Gw%(Gn%),5,"Paper width") 243 ELSE 244 PROCLS(Gw%(Gn%),5,"Graph width") 245 ENDIF 246 ENDCASE 247 WHEN SW%: 248 CASE Buf%!16 OF 249 WHEN 2:PROCScD(Buf%!12) 250 ENDCASE 251 WHEN Dw%: 252 CASE Buf%!16 OF 253 WHEN3:PROCSD(Sn%) 254 WHEN1:Df%=&AFF:PROCDrag(Buf%) 255 ENDCASE 256 WHEN Log%: 257 CASE Buf%!16 OF 258 WHEN3:PROCSL(Sn%) 259 WHEN1:Df%=&FFD:PROCDrag(Buf%) 260 ENDCASE 261 WHEN Zoom%: 262 CASE Buf%!16 OF 263 WHEN2:PROCIZ(0) 264 WHEN3:PROCDZ(0) 265 WHEN4:PROCIZ(1) 266 WHEN5:PROCDZ(1) 267 ENDCASE 268 CASE Buf%!16 OF 269 WHEN2,3,4,5:PROCZS(Zn%) 270 IF Wb%!28=-1 Wb%!28=Zoom% 271 SYS"Wimp_OpenWindow",,Wb% 272 ENDCASE 273 ENDCASE 274WHEN 64: 275 CASE Buf%!12 OF 276 WHEN MW%: 277 IF Ig% PROCDB(Buf%,n%) 278 ENDCASE 279ENDCASE 280ENDPROC 281DEF PROCMUS 282PROCUnSe(IM%,3):PROCUnSe(On%,1) 283PROCUnSe(On%,4):PROCUnSe(On%,8) 284PROCUnSe(IM%,4) 285IF FNCountA<=0 THEN 286PROCSe(IM%,3):PROCUnSI(SW%,2) 287IF FNRSelect(SW%,2)=0 THEN 288PROCUnSI(SW%,1) 289PROCSFg(SW%,1,15) 290ENDIF 291ENDIF 292ENDPROC 293DEF PROCCm(M%) 294SYS"Wimp_CreateMenu",,-1 295SYS"Wimp_CreateMenu",,M%,!Buf%,Buf%!4 296CM%=M% 297ENDPROC 298 299DEF PROCRD(N%) 300LOCAL F%,H%,V%,I%,J% 301!Wb%=Gw%(N%) 302SYS"Wimp_RedrawWindow",,Buf% TO F% 303WHILE F% 304XMin%=Buf%!28-(Buf%!4-Buf%!20) 305XMax%=Buf%!36-(Buf%!4-Buf%!20) 306YMin%=(Buf%!32-(Buf%!16-Buf%!24))-Hp%(N%,3)!84 307YMax%=(Buf%!40-(Buf%!16-Buf%!24))-Hp%(N%,3)!84 308VDU29,(Buf%!4-Buf%!20);(Buf%!16-Buf%!24)+Hp%(N%,3)!84; 309SYS"Draw_Stroke",Hp%(N%,0),0,Hp%(N%,3),0,0,0,0 310SYS"Draw_Stroke",Hp%(N%,0)+Hp%(N%,4),0,Hp%(N%,3),0,0,0,0 311VDU29,0;0; 312SYS"Wimp_SetFontColours",,0,7 313IF XMax%>=Hp%(N%,3)!96 THEN 314IF YMax%>Hp%(N%,3)!92 ANDXMin%<Hp%(N%,3)!96+Hp%(N%,3)!124 SYS"Font_Paint",Fh%(N%,0),F$(N%),&110,(Buf%!4-Buf%!20)+Hp%(N%,3)!96,(Buf%!16-Buf%!24)+(Hp%(N%,3)!84+Hp%(N%,3)!120) 315ENDIF 316IF YMax%>Hp%(N%,3)!116 ANDYMin%<Hp%(N%,3)!116+(Hp%(N%,3)!212) THEN 317IF XMax%>=Hp%(N%,3)!128 THEN 318SYS"Font_Paint",Fh%(N%,1),FNReS(Gw%(N%),11),&110,(Buf%!4-Buf%!20)+Hp%(N%,3)!128,((Buf%!16-Buf%!24)+Hp%(N%,3)!84)+(Hp%(N%,3)!116) 319ENDIF 320IF XMax%>=Hp%(N%,3)!144 THEN 321SYS"Font_Paint",Fh%(N%,1),FNReS(Gw%(N%),12),&110,(Buf%!4-Buf%!20)+Hp%(N%,3)!144,((Buf%!16-Buf%!24)+Hp%(N%,3)!84)+(Hp%(N%,3)!116) 322ENDIF 323ENDIF 324IF XMin%<Hp%(N%,3)!112+Hp%(N%,3)!96 THEN 325IF XMax%>Hp%(N%,3)!196 ORXMax%>Hp%(N%,3)!204 THEN 326SYS"Font_Paint",Fh%(N%,1),FNReS(Gw%(N%),13),&110,(Buf%!4-Buf%!20)+Hp%(N%,3)!196,((Buf%!16-Buf%!24)+Hp%(N%,3)!84)+(Hp%(N%,3)!168) 327SYS"Font_Paint",Fh%(N%,1),FNReS(Gw%(N%),14),&110,(Buf%!4-Buf%!20)+Hp%(N%,3)!204,((Buf%!16-Buf%!24)+Hp%(N%,3)!84)+(Hp%(N%,3)!176) 328ENDIF 329ENDIF 330 331SYS"Wimp_GetRectangle",,Buf% TO F% 332ENDWHILE 333ENDPROC 334DEF PROCWN(W%) 335!Wb%=W% 336SYS"Wimp_GetWindowInfo",,Wb% 337CASE Wb%!60AND&101 OF 338WHEN&101: 339 IF LEN($(Wb%!76)+" ("+STR$(Gn%)+")")<Wb%!84 $(Wb%!76)=$(Wb%!76)+" ("+STR$(Gn%)+")" 340WHEN1: 341 IF LEN($(Wb%+76)+" ("+STR$(Gn%)+")")<12 THEN 342 $(Wb%+76)=$(Wb%+76)+" ("+STR$(Gn%)+")" 343 ENDIF 344ENDCASE 345ENDPROC 346DEF FNLNW(F$,W$) 347LOCAL W% 348W%=FNLW(F$,W$,-1) 349PROCWN(W%) 350SYS"Wimp_DeleteWindow",,Wb% 351SYS"Wimp_CreateWindow",,Wb%+4 TO W% 352=W% 353DEF PROCAPs(W%) 354IF FNRSelect(W%,31)>0 THEN 355PROCUSI(W%,31):PROCUnSI(W%,30) 356ELSE 357PROCSi(W%,31):PROCSI(W%,30):PROCAPt(FNFindW(W%)) 358ENDIF 359ENDPROC 360DEF PROCAPt(N%) 361PROCSP1(N%) 362IF FNRSelect(Gw%(N%),31)<=0 ENDPROC 363PROCLN(Gw%(N%),30,INT((Hp%(N%,3)!88>>FNXPixVal)*Mg)) 364PROCSP1(N%) 365ENDPROC 366DEF PROCScD(W%) 367IF FNRSelect(SW%,2)>0 THEN 368PROCUSI(SW%,2) 369PROCUnSI(SW%,1) 370PROCSFg(SW%,1,15) 371ELSE 372PROCSi(SW%,2) 373PROCLN(SW%,1,INT(FNOSX*OS)) 374PROCSI(SW%,1) 375PROCSFg(SW%,1,0) 376ENDIF 377!Wb%=SW%:SYS"Wimp_GetWindowInfo",,Wb% 378SYS"Wimp_CloseWindow",,Wb% 379SYS"Wimp_OpenWindow",,Wb% 380ENDPROC 381DEF FNFt 382LOCAL N% 383REPEAT 384IF Ga%(N%)=0 =N% 385N%+=1 386UNTIL N%>Ng% 387=-1 388DEF FNFt1 389LOCAL N%:N%=Ng% 390REPEAT 391IF Gc%(N%)>0 =N% 392N%-=1 393UNTIL N%<0 394=0 395DEF FNFindW(W%) 396LOCAL N% 397REPEAT 398IF Ga%(N%)=W% ORGw%(N%)=W% ORGc%(N%)=W% =N% 399N%+=1 400UNTIL N%>Ng% 401=-1 402DEF FNCountA 403LOCAL N%,C% 404REPEAT 405IF Ga%(N%)<>0 C%+=1 406N%+=1 407UNTIL N%>Ng% 408=C% 409DEF FNCPlotA(W%) 410PROCWN(W%) 411SYS"Wimp_CreateWindow",,Wb%+4 TO Wb%!4 412=Wb%!4 413DEF PROCCMW(Gn%) 414IF Gc%(Gn%)>=0 ENDPROC 415IF Hp%(Gn%,3)=0 PROCCM(Gn%,3,Ts%) 416IF Gw%(Gn%)=0 THEN 417 Gw%(Gn%)=FNLNW(Ph$+"Templates","PlotWindow") 418 Gw%(Gn%)=FNCW(Gw%(Gn%)) 419 PROCLF(Gn%) 420 PROCLN(Gw%(Gn%),19,FNRN(SW%,1)) 421 PROCSM(Gn%) 422 PROCSP(Gn%) 423 PROCLN(Gw%(Gn%),30,INT((Hp%(Gn%,3)!88>>FNXPixVal)*Mg)) 424 PROCSP(Gn%) 425 ENDIF 426IF Hp%(Gn%,3)<>0 PROCow(Gw%(Gn%),0,-1) 427ENDPROC 428DEF PROCRM(N%) 429Hp%(N%,0)=FNHF(Hp%(N%,0)) 430Hp%(N%,3)=FNHF(Hp%(N%,3)) 431ENDPROC 432 433DEF PROCCM(N%,A%,S%) 434Hp%(N%,A%)=FNHCm(S%) 435IF Hp%(N%,A%)=0 SYS"Wimp_ReportError","