ITS Muddle.
[pdp10-muddle.git] / MUDDLE / graphs.ura001
1          
2 \r<SET FNCTG <FUNCTION (XL XH FNCT "OPTIONAL" (SCALE (0 0)) (XYDIS (0 0))
3 \r    (P 60) );"THIS FUNCTION WILL PLOT ANY FUNCTION OF THE FORM
4 \r              Y=F(X),FOR X = .XL TO .XH WITH P POINTS IN IT.
5 \r              SCALE,XYDIS, AND P ARE OPTIONAL, AND IF OMITTED
6 \r              THE PROGRAM WILL AUTOMATICALLY SCALE F(X)."
7 \r    <PROG (X Y DX X1 YM HPTS N SX SY)
8 \r        <SET DX </ <FLOAT <- .XH .XL>> .P>> <SET X1 .XL>
9 \r        <SET X <SET Y ()>>
10 \r     LFX <SET X (!.X .X1)>
11 \r        <SET Y (!.Y <.FNCT .X1>)>
12 \r        <SET X1 <+ .X1 .DX>>
13 \r        <COND (<NOT <G? .X1 .XH>> <GO LFX>)>
14 \r        <COND (<NOT <==? <+ !.SCALE> 0>> <SET HPTS .XYDIS>
15 \r            <GO NAS>)>
16 \r        <SET YM <MINIMAX .Y>>
17 \r        <SET SCALE (</ 800.0 <- .XH .XL>> </ -800.0 <- !.YM>>)>
18 \r        <SET HPTS (<* 0.5 <+ .XL .XH>> <* 0.5 <+ !.YM>>)>
19 \r    NAS <SET N 1>
20 \r    LSC <PUT .X .N <FIX <+ <* <1 .SCALE> <- <.N .X> <1 .HPTS> >>
21 \r           500>>>
22 \r       <PUT .Y .N <FIX <+ <* <2 .SCALE> <- <.N .Y> <2 .HPTS> >>
23 \r           400>>>
24 \r        <SET N <+ .N 1>>
25 \r         <COND (<NOT <G? .N <LENGTH .X>>> <GO LSC>)>
26 \r         <PLOTV .X .Y>
27 \r         <COND ( <NOT <G? 100 <SET SX <FIX <+ <* <1 .SCALE>
28 \r              <- 0.0 <1 .HPTS>>> 500>>> >>
29 \r                  <COND ( <NOT <G? .SX 900>> <LINE .SX 00 .SX 800> )> )>
30 \r         <COND ( <NOT <G? 0 <SET SY <FIX <+ <* <2 .SCALE>
31 \r              <- 0.0 <2 .HPTS>>> 400>>> >>
32 \r                  <COND ( <NOT <G? .SY 800 >> <LINE 100 .SY 900 .SY> )> )>
33 \r         <MOVE 0 800>
34 \r         <RETURN ("XMIN
35 \r" .XL "
36 \rXMAX
37 \r" .XH "
38 \rYMIN
39 \r" <1 .YM> "
40 \rYMAX
41 \r" <2 .YM> "
42 \rSCALE
43 \r" .SCALE )>
44 \r>>>
45 \r<SET MINIMAX <FUNCTION (X)
46 \r    <REPEAT ((N 2) (L <LENGTH .X>) (BIG <1 .X>) (SMALL <1 .X>))
47 \r       <COND ( <G? <.N .X> .BIG> <SET BIG <.N .X>> )>
48 \r       <COND ( <L? <.N .X> .SMALL> <SET SMALL <.N .X>> )>
49 \r       <SET N <+ .N 1>>
50 \r       <COND ( <G? .N .L> <RETURN (.SMALL .BIG)> )>
51 \r>>>
52 \r<SET MTRIANGLE <FUNCTION ()
53 \r    <MOVE 170 285><DRAW 170 650><DRAW 200 670>
54 \r    <DRAW 515 485><DRAW 515 450><DRAW 200 260>
55 \r    <DRAW 170 285>
56 \r
57 \r    <DRAW 200 300><DRAW 200 670><MOVE 200 630>
58 \r    <DRAW 515 450><MOVE 480 470><DRAW 480 505>
59 \r    <MOVE 480 470><DRAW 200 300><DRAW 230 280>
60 \r
61 \r    <MOVE 235 360><DRAW 235 605><MOVE 235 570>
62 \r    <DRAW 445 445><MOVE 410 465><DRAW 200 340>
63 \r
64 \r    <MOVE 0 200> "MOBIUS TRANGLE"
65 \r>>
66 \r
67 \r<SET ELIPSE <FUNCTION (X Y A B P) ;"THIS FUNCTION WILL DRAW AN
68 \r                                    ELIPSE WITH CENTER AT (X Y)
69 \r                                    ,(A B),AND P POINTS IN IT."
70 \r     <PROG (I)
71 \r        <MOVE <+ .X .A > .Y>
72 \r        <SET I </ 6.283 .P>>
73 \r        <REPEAT ((Q .I))
74 \r            <DRAW <FIX <+ .X <* .A <COS .Q>>>>
75 \r                  <FIX <+ .Y <* .B <SIN .Q>>>>>
76 \r            SET Q <+ .Q .I>>
77 \r            <COND ( <G? .Q <+ .I  6.283>> <RETURN "DONE"> )>
78 \r>>>><SET CIRCLE <FUNCTION (X Y R P) ;"THIS FUNCTION WILL DRAW
79 \r                                   A CIRLE WITH CENTER AT (X Y)
80 \r                                  ,RADIUS R,AND P POINTS IN IT."
81 \r   <PROG (I)
82 \r       <MOVE <+ .X .R> .Y>
83 \r       <SET I </ 6.283 .P>>
84 \r       <REPEAT ((Q .I))
85 \r           <DRAW <FIX <+ .X <* .R <COS .Q>>>>
86 \r                 <FIX <+ .Y <* .R <SIN .Q>>>>>
87 \r           <SET Q <+ .Q .I>>
88 \r           <COND ( <G? .Q <+ .I 6.283>>  <RETURN "DONE"> )>
89 \r>>>>
90 \r<SET PLVTEST <FUNCTION ()
91 \r    <PROG (X Y XY)
92 \r    <SET X ( <+ 500 <1 <WITCH .2>>> )>
93 \r        <SET Y ( <2 <WITCH .2>> )>
94 \r        <LINE 0 0 1000 0>
95 \r        <LINE 500 0 500 800>
96 \r        <REPEAT ((P .2))
97 \r            <SET XY <WITCH .P>>
98 \r            <SET X ( !.X <1 .XY> )>
99 \r            <SET Y (!.Y <2 .XY>)>
100 \r            <SET P <+ .P .04>>
101 \r            <COND ( <G? .P 2.9> <RETURN <PLOTV .X .Y>>)>
102 \r>>>>
103 \r<SET WITCH <FUNCTION (P)
104 \r    ( <FIX <+ 500 <* 100.0 </ <COS .P> <SIN .P>>>>> 
105 \r      <FIX <* 200.0 <- 1.0 <COS <* 2.0 .P>>>>> )
106 \r>>
107 \r<SET PLOTV <FUNCTION (X Y) "THIS FUNCTION PLOTS VECTOR X AGAINST
108 \r                             VECTOR Y,IT WORKS FOR LISTS TOO.
109 \r                             IT MOVES TO THE FIRST POINT AND DRAWS
110 \r                             TO THE REST."
111 \r    <PROG (L LIST N)
112 \r        <COND ( <NOT <==? <LENGTH .X> <LENGTH .Y>>>
113 \r            <RETURN "ERROR...LENGTHS NOT EQUAL."> )>
114 \r        <SET L <LENGTH .X>>
115 \r        <SET LIST (29)>
116 \r        <SET N 1>
117 \r LOOP   <SET LIST (!.LIST !<TRANS <.N .X> <.N .Y>> )>
118 \r        <SET N <+ .N 1>>
119 \r        <COND ( <G? .N .L>
120 \r            <GO ZAP>)>
121 \r        <GO LOOP>
122 \r  ZAP   <SEND .LIST>
123 \r        <RETURN "DONE">
124 \r>>>
125 \r<SET SINCURV <FUNCTION ()
126 \r                        <MOVE 0 400>
127 \r                       <REPEAT ((X 0)<F <* 400.0 <+ 1.0
128 \r                                       <SIN </ .X 100.0>>>>>>
129 \r                                       <COND (<G? .X 625> <RETURN
130 \r                                       "DONE"> )> <SET X <+ .X 5>>
131 \r>>>
132 \r<SET TEST3 <FUNCTION ()
133 \r                      <LINE 0 0 0 800>
134 \r                      <LINE 0 400 1000 400>
135 \r                      <TEST>
136 \r                      <SINCURV>
137 \r>>
138 \r<SET MOVE <FUNCTION (X Y) ;"THIS FUNCTION WILL MOVE THE BEAM
139 \r                             OF THE SCOPE TO (X Y). IT MUST BE CALLED
140 \r                             BEFORE DRAW BECAUSE IT SETS THE SCOPE IN
141 \r                             GRAPHICS MODE."
142 \r                     <SEND (29 !<TRANS .X .Y> )>
143 \r>>
144 \r
145 \r<SET DRAW <FUNCTION (X Y) ;"THIS FUNCTION DRAWS FROM WHERE THE BEAM
146 \r                           WAS TO (X Y).MOVE MUST BE USED BEFORE THE
147 \r                           FIRST DRAW, ALSO DON'T GO BACK INTO
148 \r                           ALPHA MODE INBETWEEN DRAWS."
149 \r                    <SEND <TRANS .X .Y>>
150 \r>>
151 \r<SET TEST2 <FUNCTION () <PROG (X Y Z)
152 \r                               <SET Z <LINE 300 0 700 0>>
153 \r                               <SET Z <LINE 500 0 500 780>>
154 \r                               <SET X 300>
155 \r                          LOOP <SET Y </ <* <- .X 500> <- .X 500>> 40>>
156 \r                               <SET Z <POINT .X .Y>>
157 \r                               <COND (<G? .X 699> <RETURN "DONE">)>
158 \r                               <SET X <+ .X 1>>
159 \r                               <GO LOOP>
160 \r>>>
161 \r<SET LINE <FUNCTION (X1 Y1 X2 Y2) <PROG (A B)
162 \r                      ;"THIS PROGRAM WILL DRAW A LINE FROM (X1,Y1)
163 \r                         TO (X2,Y2) ON THE SCOPE. AGAIN THE RANGE
164 \r                         OF THE X'S AND Y'S IS 0 TO 1024."
165 \r                       <SET A <TRANS .X1 .Y1>>
166 \r                       <SET B <TRANS .X2 .Y2>>
167 \r                       <RETURN <SEND (29 !.A !.B)>>
168 \r>>>
169 \r<SET TEST1 <FUNCTION () <PROG (X Y Z D)
170 \r                                 <SET X 400>
171 \r                            LOOP <SET Y </ <* <- .X 500> <- .X 500>> 10>>
172 \r                                 <SET Z <POINT .X .Y>>
173 \r                                 <SET D <POINT .X 0>>
174 \r                                 <SET D <POINT 500 .Y>>
175 \r                                 <COND (<G? .X 599> <RETURN "DONE"> )>
176 \r                                 <SET X <+ .X 1>>
177 \r                                 <GO LOOP>
178 \r>>>
179 \r<SET TEST <FUNCTION () <PROG (X Y Z D)
180 \r                              <SET X 0>
181 \r                         LOOP <SET Y </ <* .X .X> 10>>
182 \r                              <SET Z <POINT .X .Y>>
183 \r                             <COND (<==? .X 100> <RETURN "DONE">)>
184 \r                             <SET X <+ .X 1>>
185 \r                     <GO LOOP>
186 \r>>>
187 \r<SET POINT <FUNCTION (X Y) <PROG (D LIST) ;"THIS PROGRAMM DISPLAYS A 
188 \r                                            POINT ON THE 4010'S SCREEN
189 \r                                           THE X AND Y CO-ORDINENTS
190 \r                                            SHOULD BE IN THE RANGE OF
191 \r                                            0 THRU 1024."
192 \r                                 <SET D <TRANS .X .Y>>
193 \r                                 <SET LIST (29 !.D !.D)>
194 \r                                 <RETURN <SEND .LIST>>
195 \r>>>
196 \r<SET SEND <FUNCTION (LIST) ;"THIS FUNCTION TRANSMITS THE CHARACTERS TO
197 \r                              THE TECKRONIX 4010.TO WORK RIGHT YOU MUST
198 \r                              HAVE TYPED (^_)S(CR) AT MONIT."
199 \r                     <PROG (L N D) ;"D IS A DUMMY VAR. THAT HOLDS THE
200 \r                                     UNWANTED THINGS THAT IMAGE RETURNS"
201 \r                           <SET L <LENGTH .LIST>>
202 \r                           <SET N 1>
203 \r                      LOOP <COND ( <G? .N .L> <RETURN 1> )>
204 \r                                  ;"ALL GOOD FUNCTIONS RETURN SOMETHING
205 \r                                    THEREFORE SEND RETURNS 1."
206 \r                           <SET D <IMAGE <.N .LIST>>>
207 \r                           <SET N <+ .N 1>>
208 \r                           <GO LOOP>
209 \r>>>
210 \r<SET PAGE <FUNCTION () ;"THIS FUNCTION ERASES THE SCREEN ON THE 4010."
211 \r                     <SEND (27 12)>
212 \r>>
213 \r<SET TRANS <FUNCTION (X Y) ;"THIS FUNCTION TAKES THE X,Y CO-ORDINANTS
214 \r                              AND TRANSLATES THEM INTO 4 ASCII CHARATERS
215 \r                             FOR THE 4010"
216 \r                      <PROG (LX HX LY HY)
217 \r                            <SET HX <FIX </ .X 32>>>
218 \r                            <SET HY <FIX </ .Y 32>>>
219 \r                            <SET LX <- .X <* .HX 32>>>
220 \r                            <SET LY <- .Y <* .HY 32>>>
221 \r                            <SET HY <+ .HY 32>>
222 \r                            <SET LY <+ .LY 96>>
223 \r                            <SET HX <+ .HX 32>>
224 \r                            <SET LX <+ .LX 64>>
225 \r                            <RETURN (.HY .LY .HX .LX)>
226 \r>>>
227 \f\ 3\f