source: buchla-68k/ram/ptwrite.c@ fa38804

Last change on this file since fa38804 was fa38804, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Removed form-feed comments.

  • Property mode set to 100644
File size: 6.3 KB
RevLine 
[f40a309]1/*
2 =============================================================================
3 ptwrite.c -- librarian - write patch functions
4 Version 7 -- 1988-11-18 -- D.N. Lynx Crowe
5 =============================================================================
6*/
7
8#define DEBUGWE 0
9#define DEBUGPW 0
10
[b28a12e]11#include "ram.h"
[f40a309]12
13#if DEBUGPW
14short debugpw = 1;
15#endif
16
[7258c6a]17int8_t ptsizes[] = {
[f40a309]18
19 0, /* NULL - end of list */
20 4, /* PA_KEY */
21 4, /* PA_TRG */
22 3, /* PA_PLS */
23 3, /* PA_LED */
24 4, /* PA_SLIN */
25 3, /* PA_SCTL */
26 2, /* PA_TUNE */
27 4, /* PA_RSET */
28 4, /* PA_RADD */
29 3, /* PA_INST */
30 6, /* PA_OSC */
31 3, /* PA_WAVA */
32 3, /* PA_WAVB */
33 3, /* PA_CNFG */
34 5, /* PA_LEVL */
35 6, /* PA_INDX */
36 6, /* PA_FREQ */
37 5, /* PA_FILT */
38 5, /* PA_FILQ */
39 5, /* PA_LOCN */
40 5, /* PA_DYNM */
41 4, /* PA_AUX */
42 4, /* PA_RATE */
43 4, /* PA_INTN */
44 4, /* PA_DPTH */
45 5 /* PA_VOUT */
46};
47
48/*
49 =============================================================================
50 ptsizer() -- return number of bytes necessary for storing active patches
51 =============================================================================
52*/
53
[7258c6a]54int32_t ptsizer(void)
[f40a309]55{
[7258c6a]56 register int16_t pp;
57 register int32_t nb;
[f40a309]58
59 nb = 0L;
60
61 if (pp = find1st()) {
62
63 while (pp) {
64
65 nb += (ptsizes[PE_SPEC & patches[pp].paspec] + 4);
66 pp = findnxt(pp);
67 }
68 }
69
70 if (nb)
71 ++nb; /* ... and one for the terminator */
72
73#if DEBUGPW
74 if (debugsw AND debugpw)
75 printf("ptsizer(): %ld bytes required\n", nb);
76#endif
77
78 return(nb);
79}
80
81/*
82 =============================================================================
83 ptwrite() -- store a patch table
84 =============================================================================
85*/
86
[7258c6a]87int16_t ptwrite(FILE *fp)
[f40a309]88{
[7258c6a]89 register int16_t pp;
90 int8_t cb, zero;
[f40a309]91
92#if DEBUGPW
93 if (debugsw AND debugpw)
94 printf("ptwrite($%08lX): entered\n", fp);
95#endif
96
97 zero = '\0';
98
[7258c6a]99 ldwmsg("Busy -- Please stand by", (int8_t *)0L, " writing patches",
[f40a309]100 LCFBX10, LCBBX10);
101
102 if (pp = find1st()) {
103
104 while (pp) {
105
106#if DEBUGWE
107 if (debugsw AND debugwe) {
108
109 printf("ptwrite(): %3d %04.4X %04.4X %04.4X %04.4X %04.4X %04.4X\n ",
110 pp, patches[pp].defnum, patches[pp].stmnum,
111 patches[pp].paspec, patches[pp].pasuba,
112 patches[pp].padat1, patches[pp].padat2);
113 }
114#endif
115
116 switch (cb = (PE_SPEC & patches[pp].paspec)) {
117
118 case PA_KEY:
119 case PA_TRG:
120
121 if (wr_ec(fp, &cb, 1L))
122 return(FAILURE);
123
124 if (wr_ec(fp, &patches[pp].defnum, 4L))
125 return(FAILURE);
126
127 if (wr_ec(fp, &patches[pp].pasuba, 2L))
128 return(FAILURE);
129
[7258c6a]130 if (wr_ec(fp, (int8_t *)&patches[pp].padat2 + 1, 1L))
[f40a309]131 return(FAILURE);
132
133 break;
[fa38804]134
[f40a309]135 case PA_PLS:
136 case PA_SCTL:
137
138 if (wr_ec(fp, &cb, 1L))
139 return(FAILURE);
140
141 if (wr_ec(fp, &patches[pp].defnum, 4L))
142 return(FAILURE);
143
[7258c6a]144 if (wr_ec(fp, (int8_t *)&patches[pp].pasuba + 1, 1L))
[f40a309]145 return(FAILURE);
146
[7258c6a]147 if (wr_ec(fp, (int8_t *)&patches[pp].padat2 + 1, 1L))
[f40a309]148 return(FAILURE);
149
150 break;
151
152 case PA_LED:
153
154 if (wr_ec(fp, &cb, 1L))
155 return(FAILURE);
156
157 if (wr_ec(fp, &patches[pp].defnum, 4L))
158 return(FAILURE);
159
[7258c6a]160 if (wr_ec(fp, (int8_t *)&patches[pp].pasuba + 1, 1L))
[f40a309]161 return(FAILURE);
162
163 if (wr_ec(fp, &patches[pp].padat1, 1L))
164 return(FAILURE);
165
166 break;
167
168 case PA_SLIN:
169
170 if (wr_ec(fp, &cb, 1L))
171 return(FAILURE);
172
173 if (wr_ec(fp, &patches[pp].defnum, 4L))
174 return(FAILURE);
175
[7258c6a]176 if (wr_ec(fp, (int8_t *)&patches[pp].pasuba + 1, 1L))
[f40a309]177 return(FAILURE);
178
179 if (wr_ec(fp, &patches[pp].padat1, 2L))
180 return(FAILURE);
181
182 break;
183
184 case PA_TUNE:
185
186 if (wr_ec(fp, &cb, 1L))
187 return(FAILURE);
188
189 if (wr_ec(fp, &patches[pp].defnum, 4L))
190 return(FAILURE);
191
[7258c6a]192 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]193 return(FAILURE);
194
195 break;
[fa38804]196
[f40a309]197 case PA_RSET:
198 case PA_RADD:
199
200 if (wr_ec(fp, &cb, 1L))
201 return(FAILURE);
202
203 if (wr_ec(fp, &patches[pp].defnum, 4L))
204 return(FAILURE);
205
[7258c6a]206 if (wr_ec(fp, (int8_t *)&patches[pp].pasuba + 1, 1L))
[f40a309]207 return(FAILURE);
208
[7258c6a]209 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]210 return(FAILURE);
211
[7258c6a]212 if (wr_ec(fp, (int8_t *)&patches[pp].padat2 + 1, 1L))
[f40a309]213 return(FAILURE);
214
215 break;
216
217 case PA_INST:
218 case PA_WAVA:
219 case PA_WAVB:
220 case PA_CNFG:
221
222 if (wr_ec(fp, &cb, 1L))
223 return(FAILURE);
224
225 if (wr_ec(fp, &patches[pp].defnum, 4L))
226 return(FAILURE);
227
228 if (wr_ec(fp, &patches[pp].pasuba, 1L))
229 return(FAILURE);
230
[7258c6a]231 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]232 return(FAILURE);
233
234 break;
235
236 case PA_OSC:
237 case PA_INDX:
238 case PA_FREQ:
239
240 if (wr_ec(fp, &cb, 1L))
241 return(FAILURE);
242
243 if (wr_ec(fp, &patches[pp].defnum, 4L))
244 return(FAILURE);
245
246 if (wr_ec(fp, &patches[pp].pasuba, 2L))
247 return(FAILURE);
248
[7258c6a]249 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]250 return(FAILURE);
251
252 if (wr_ec(fp, &patches[pp].padat2, 2L))
253 return(FAILURE);
254
255 break;
[fa38804]256
[f40a309]257 case PA_LEVL:
258 case PA_FILT:
259 case PA_FILQ:
260 case PA_LOCN:
261 case PA_DYNM:
262
263 if (wr_ec(fp, &cb, 1L))
264 return(FAILURE);
265
266 if (wr_ec(fp, &patches[pp].defnum, 4L))
267 return(FAILURE);
268
269 if (wr_ec(fp, &patches[pp].pasuba, 1L))
270 return(FAILURE);
271
[7258c6a]272 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]273 return(FAILURE);
274
275 if (wr_ec(fp, &patches[pp].padat2, 2L))
276 return(FAILURE);
277
278 break;
279
280 case PA_AUX:
281 case PA_RATE:
282 case PA_INTN:
283 case PA_DPTH:
284
285 if (wr_ec(fp, &cb, 1L))
286 return(FAILURE);
287
288 if (wr_ec(fp, &patches[pp].defnum, 4L))
289 return(FAILURE);
290
[7258c6a]291 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]292 return(FAILURE);
293
294 if (wr_ec(fp, &patches[pp].padat2, 2L))
295 return(FAILURE);
296
297 break;
298
299 case PA_VOUT:
300
301 if (wr_ec(fp, &cb, 1L))
302 return(FAILURE);
303
304 if (wr_ec(fp, &patches[pp].defnum, 4L))
305 return(FAILURE);
306
[7258c6a]307 if (wr_ec(fp, (int8_t *)&patches[pp].pasuba + 1, 1L))
[f40a309]308 return(FAILURE);
309
[7258c6a]310 if (wr_ec(fp, (int8_t *)&patches[pp].padat1 + 1, 1L))
[f40a309]311 return(FAILURE);
312
313 if (wr_ec(fp, &patches[pp].padat2, 2L))
314 return(FAILURE);
315
316 break;
[fa38804]317
[f40a309]318 default:
319
320 return(FAILURE);
321 }
322
323#if DEBUGWE
324 if (debugsw AND debugwe)
325 printf("\n\n");
326#endif
327
328 pp = findnxt(pp); /* find the next patch */
329 }
330
331 if (wr_ec(fp, &zero, 1L)) /* write the terminator */
332 return(FAILURE);
333
334 } else {
335
336 return(FAILURE); /* no patches to write */
337 }
338
339#if DEBUGPW
340 if (debugsw AND debugpw)
341 printf("ptwrite(): SUCCESS\n");
342#endif
343
344 return(SUCCESS);
345}
[6262b5c]346
Note: See TracBrowser for help on using the repository browser.