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","