A large commit.
[pdp8.git] / sw / src / f4 / MANDEL.FT
CommitLineData
81e70d48
PH
1C APFELMAENNCHEN-PROGRAMM, 02.APRIL.2006 PHILIPP HACHTMANN
2C INTERMEDIATE VERSION
3C
4C THIS VERSION SHOULD RUN A BIT FASTER BECAUSE THE SQUARE
5C ROOT IS OMMITTED.
6C
7C SWITCH SETTINGS:
8C SENSE-SWITCH 1: IF SET, ASK FOR PARAMETERS
9C SENSE-SWITCH 2: IF SET, DON'T PRINT PARAMETERS ON START
10C SENSE-SWITCH 3: IF SET, RESTORE PARAMETERS TO DEFAULT VALUES
11C
12CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
13C COMMON BLOCK DECLARATIONS
14C
15 INTEGER MAXI,WIDTH,CR,LF,POSI,NEGA
16 COMMON /PARAM2/MAXI,WIDTH,CR,LF,POSI,NEGA
17C
18 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
19 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
20C
21 INTEGER INIT
22 COMMON /PARAM3/INIT
23C
24 INTEGER PBUFF
25 DIMENSION PBUFF(4000)
26 DIMENSION PX(1),PY(1)
27C
28CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
29C START MESSAGE
30 100 WRITE (4,10)
31 10 FORMAT (48H MANDELBROT-DEMO 3RC1) XX.XX.2009, PH. HACHTMANN)
32C
33C
34 CALL CLRPLT(4096,PBUFF)
35C
36CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
37C CONFIGURATION
38CCCCCC RESET DO DEFAULT VALUES?
39C 110 CALL SSWTCH(3,I)
40C IF (I.EQ.1) CALL RST
41 CALL RST
42C
43CCCCCC ON THE FIRST START OR IF DESIRED
44C IF(INIT.EQ.0) CALL STVAL
45C
46CCCCCC DO WE HAVE TO ASK FOR PARAMETERS?
47C CALL SSWTCH(1,I)
48C IF (I.EQ.1) CALL GETCFG
49C
50CCCCCC OUTPUT SETTINGS?
51C CALL SSWTCH(2,I)
52C IF(I.EQ.2) CALL OUTCFG
53 CALL OUTCFG
54C
55 WRITE (4,55)
56 55 FORMAT (1H0)
57C
58 CALL CALC2
59C
60 WRITE (4, 60)
61 60 FORMAT (5HREADY)
62C
63CCCCCC BREAK WITH 7 in A REG, THEN START OVER
64C CALL PWAIT
65 PAUSE 7
66 GO TO 100
67 END
68C END OF MAIN PROGRAM
69C
70CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
71CCCCCC THE MANDELBROT SET CALCULATION
72 SUBROUTINE CALC2
73C
74 INTEGER MAXI,WIDTH,CR,LF
75 COMMON /PARAM2/MAXI,WIDTH,CR,LF
76 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
77 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
78 REAL CMPAVL
79 REAL ZR,ZI,ZRN
80 REAL X,Y
81 INTEGER COUNT
82C
83 SCALE(LOWX,LOWY,HIGHX,HIGHY)
84C
85CCCCCC ENTER THE CALCULATION
86 299 CMPVAL=MAXVAL*MAXVAL
87 X=LOWX
88 Y=HIGHY
89C
90CCCCCC EINSTIEG IN DEN AKTUELLEN PUNKT
91 300 COUNT=0
92 ZR=0.0
93 ZI=0.0
94C
95CCCCCC HIER DER ITERIERTE TEIL
96C
97 400 ZRN=ZR*ZR-ZI*ZI+X
98 ZI=2.0*ZR*ZI+Y
99 ZR=ZRN
100C
101 IF ((ZR*ZR+ZI*ZI).GE.CMPVAL) GO TO 410
102 COUNT=COUNT+1
103 IF (COUNT.GE.MAXI) GO TO 410
104 GO TO 400
105C
106CCCCCC PUNKT FERTIG
107 410 NOUT=32
108C IF (COUNT.GE.8) NOUT=46
109C IF (COUNT.GE.23) NOUT=43
110C IF (COUNT.EQ.MAXI) NOUT=64
111 IF (COUNT.GE.8) NOUT=46
112 IF (COUNT.GE.23) NOUT=43
113 IF (COUNT.EQ.MAXI) NOUT=64
114 PX(1)=X
115 PY(1)=Y
116 IF (COUNT.EQ.MAXI) CALL PLOT(1,PX,PY)
117
118 411 CALL PCHAR(NOUT)
119 GO TO 500
120C
121CCCCCC NEUEN PUNKT MACHEN
122 500 X = X + XSTEP
123CCCCCC ZEILE NOCH NICHT VOLL?
124 IF (X.LE.HIGHX) GO TO 300
125CCCCCC X AN ANFANG SETZTEN, CR+LF DRUCKEN
126 X = LOWX
127 CALL PCHAR(CR)
128 CALL PCHAR(LF)
129CCCCCC Y WEITERRUECKEN - NEGATIV WEIL WIR VON OBEN KOMMEN
130 Y=Y-YSTEP
131 IF (Y.GE.LOWY) GO TO 300
132C
133CCCCCC HIER IST DAS BILD FERTIG.
134 RETURN
135 END
136CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
137CCCCCC STARTWERTE AUSFUELLEN
138 SUBROUTINE STVAL
139C
140 INTEGER MAXI,WIDTH,CR,LF
141 COMMON /PARAM2/MAXI,WIDTH,CR,LF
142 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
143 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
144 INTEGER INIT
145 COMMON /PARAM3/INIT
146C
147 CR = 13
148 LF = 10
149 WIDTH = 68
150 MAXI = 60
151 MAXVAL = 2.0
152 LOWX =-1.48
153 HIGHX = 0.5
154 LOWY =-1.2
155 HIGHY = 1.2
156 INIT = 1
157C
158CCCCCC SCHRITTWEITEN AUSRECHNEN
159 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
160 YSTEP = 2.0 * XSTEP
161C
162 WRITE (4,1500)
163 1500 FORMAT (20HDEFAULT VALUES USED.)
164 RETURN
165 END
166C
167C
168CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
169CCCCCC EINSTELLUNGEN EINLESEN
170 SUBROUTINE GETCFG
171C
172 INTEGER MAXI,WIDTH,CR,LF
173 COMMON /PARAM2/MAXI,WIDTH,CR,LF
174 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
175 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
176C
177 REAL XIN1,XIN2,YIN1,YIN2
178C
179 WRITE (4,11)
180 READ (1,16) XIN1
181 WRITE (4,12)
182 READ (1,16) XIN2
183 WRITE (4,13)
184 READ (1,16) YIN1
185 WRITE (4,14)
186 READ (1,16) YIN2
187 WRITE (4,15)
188 READ (1,17) MAXI
189C
190 11 FORMAT(14H X FROM : )
191 12 FORMAT(14H TO : )
192 13 FORMAT(14H Y FROM : )
193 14 FORMAT(14H TO : )
194 15 FORMAT(14H MAXIT (I3): )
195 16 FORMAT(F12.0)
196 17 FORMAT(I3)
197C
198CCCCCC EVENTUELL STARTWERTE TAUSCHEN:
199CCCCCC WENN XIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
200 150 I F(XIN2.GT.XIN1) GO TO 200
201 TEMP = XIN1
202 XIN1 = XIN2
203 XIN2 = TEMP
204C
205CCCCCC WENN YIN2 GROESSER IST OK, ANSONSTEN TAUSCHEN
206 200 IF(YIN2.GT.YIN1) GO TO 201
207 TEMP = YIN1
208 YIN1 = YIN2
209 YIN2 = TEMP
210C
211CCCCCC WERTE UEBERNEHMEN
212 201 LOWX = XIN1
213 HIGHX = XIN2
214 LOWY = YIN1
215 HIGHY = YIN2
216C
217CCCCCC SCHRITTWEITEN AUSRECHNEN
218 XSTEP = (HIGHX-LOWX)/FLOAT(WIDTH)
219 YSTEP = 2.0 * XSTEP
220C
221 RETURN
222 END
223C
224C
225CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
226CCCCCC EINSTELLUNGEN AUSGEBEN
227 SUBROUTINE OUTCFG
228C
229 INTEGER MAXI,WIDTH,CR,LF
230 COMMON /PARAM2/MAXI,WIDTH,CR,LF
231 REAL LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
232 COMMON /PARAM1/LOWX,LOWY,HIGHX,HIGHY,MAXVAL,XSTEP,YSTEP
233C
234 WRITE (4,20)
235 20 FORMAT (9HSETTINGS:)
236 WRITE (4,30) LOWX, HIGHX
237 30 FORMAT (12HX-WERTE VON ,1F8.5,5H BIS ,1F8.5)
238 WRITE (4,40) LOWY, HIGHY
239 40 FORMAT (12HY-WERTE VON ,F8.5,5H BIS ,F8.5)
240 WRITE (4,50) MAXI, MAXVAL, XSTEP, YSTEP, WIDTH
241 50 FORMAT ( 4HMAX:,I3,
242 + 8H MAXVAL:,F8.5,
243 + 7H XSTEP:,F8.5,
244 + 7H YSTEP:,F8.5,
245 + 7H WIDTH:,I2)
246 RETURN
247 END
248C
249C
250CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
251CCCCCC RUECKSETZEN
252 SUBROUTINE RST
253C
254 INTEGER MAXI,WIDTH,CR,LF
255 COMMON /PARAM2/MAXI,WIDTH,CR,LF
256C
257 WRITE (4,245)
258 245 FORMAT(25HPARAMETER RESET REQUESTED)
259 INIT=0
260 RETURN
261 END
262C
263C
264CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
265C PRELOAD VALUE OF INIT
266 BLOCK DATA
267 INTEGER INIT
268 COMMON /PARAM3/INIT
269 DATA INIT/0/
270 END
271CCCCCCCCCCCCCCCCCCCCCCCC
272C
273 SUBROUTINE SSWTCH(INUM,ITARG)
274 ITARG=0
275 RETURN
276 END
277C
278C
279$0