211{
212 int i,
var, ch, np, last;
214
215 lineno = 1;
216 line_length_error =
FALSE;
217
218loop:
219 switch(ch = getc(fp)) {
220 case EOF:
221 return;
222
223 case '\n':
224 lineno++;
225
226 case ' ': case '\t': case '\f': case '\r':
227 break;
228
229 case '#':
230 (void) ungetc(ch, fp);
232 break;
233
234 case '.':
235
237 if (
cube.fullset != NULL) {
238 (void) fprintf(stderr, "extra .i ignored\n");
240 } else {
241 if (fscanf(fp,
"%d", &
cube.num_binary_vars) != 1)
242 fatal(
"error reading .i");
243 cube.num_vars =
cube.num_binary_vars + 1;
245 }
246
247
249 if (
cube.fullset != NULL) {
250 (void) fprintf(stderr, "extra .o ignored\n");
252 } else {
253 if (
cube.part_size == NULL)
254 fatal(
".o cannot appear before .i");
255 if (fscanf(fp,
"%d", &(
cube.part_size[
cube.num_vars-1]))!=1)
256 fatal(
"error reading .o");
259 }
260
261
263 if (
cube.fullset != NULL) {
264 (void) fprintf(stderr, "extra .mv ignored\n");
266 } else {
267 if (
cube.part_size != NULL)
268 fatal(
"cannot mix .i and .mv");
269 if (fscanf(fp,"%d %d",
270 &
cube.num_vars,&
cube.num_binary_vars) != 2)
271 fatal(
"error reading .mv");
272 if (
cube.num_binary_vars < 0)
273fatal(
"num_binary_vars (second field of .mv) cannot be negative");
274 if (
cube.num_vars <
cube.num_binary_vars)
276"num_vars (1st field of .mv) must exceed num_binary_vars (2nd field of .mv)");
278 for(var=
cube.num_binary_vars; var <
cube.num_vars; var++)
279 if (fscanf(fp,
"%d", &(
cube.part_size[var])) != 1)
280 fatal(
"error reading .mv");
283 }
284
285
287 (void) fscanf(fp, "%d", &np);
288
290 if (
cube.fullset == NULL) {
291
292 } else if (PLA->F == NULL) {
296 }
297 return;
298 }
299
302
303
309 break;
310 }
312 fatal(
"unknown type in .type command");
313
314
316 if (
cube.fullset == NULL)
317 fatal(
"PLA size must be declared before .ilb or .ob");
318 if (PLA->label == NULL)
320 for(var = 0;
var <
cube.num_binary_vars;
var++) {
323 PLA->label[i+1] = util_strsav(
word);
326 }
328 if (
cube.fullset == NULL)
329 fatal(
"PLA size must be declared before .ilb or .ob");
330 if (PLA->label == NULL)
333 for(i =
cube.first_part[var]; i <=
cube.last_part[var]; i++) {
335 PLA->label[i] = util_strsav(
word);
336 }
337
339 if (
cube.fullset == NULL)
340 fatal(
"PLA size must be declared before .label");
341 if (PLA->label == NULL)
343 if (fscanf(fp, "var=%d", &var) != 1)
344 fatal(
"Error reading labels");
345 for(i =
cube.first_part[var]; i <=
cube.last_part[var]; i++) {
347 PLA->label[i] = util_strsav(
word);
348 }
349
354 PLA->symbolic = newlist;
355 } else {
357 p1=p1->next){
358 }
359 p1->next = newlist;
360 }
361 } else {
362 fatal(
"error reading .symbolic");
363 }
364
365 }
else if (
equal(
word,
"symbolic-output")) {
369 PLA->symbolic_output = newlist;
370 } else {
372 p1=p1->next){
373 }
374 p1->next = newlist;
375 }
376 } else {
377 fatal(
"error reading .symbolic-output");
378 }
379
380
382 if (
cube.fullset == NULL)
383 fatal(
"PLA size must be declared before .phase");
384 if (PLA->phase != NULL) {
385 (void) fprintf(stderr, "extra .phase ignored\n");
387 } else {
388 do ch = getc(fp); while (ch == ' ' || ch == '\t');
389 (void) ungetc(ch, fp);
391 last =
cube.last_part[
cube.num_vars - 1];
392 for(i=
cube.first_part[
cube.num_vars - 1]; i <= last; i++)
393 if ((ch = getc(fp)) == '0')
395 else if (ch != '1')
396 fatal(
"only 0 or 1 allowed in phase description");
397 }
398
399
401 int j;
402 if (PLA->pair != NULL) {
403 (void) fprintf(stderr, "extra .pair ignored\n");
404 } else {
407 if (fscanf(fp,
"%d", &(pair->
cnt)) != 1)
408 fatal(
"syntax error in .pair");
411 for(i = 0; i < pair->
cnt; i++) {
416 } else {
417 fatal(
"syntax error in .pair");
418 }
419
423 }
426 } else {
427 fatal(
"syntax error in .pair");
428 }
429 }
430 }
431
432 } else {
434 printf(
"%c%s ", ch,
word);
436 }
437 break;
438 default:
439 (void) ungetc(ch, fp);
440 if (
cube.fullset == NULL) {
441
443 putchar('#');
445 break;
446 }
447 if (PLA->F == NULL) {
451 }
453 }
454 goto loop;
455}␌
ABC_NAMESPACE_IMPL_START void cube_setup()
bool echo_unknown_commands
struct pla_types_struct pla_types[]
#define set_remove(set, e)
struct pair_struct pair_t