9 extern int *assertvar, nassertvar;
12 printval(Symbol *s, Fmt *f)
16 if(s->type != SYMBITS) return 0;
17 fmtprint(f, "%s = ", s->name);
18 for(i = s->size - 1; i >= 0; i--)
19 switch(satval(sat, s->vars[i])){
20 case 1: fmtrune(f, '1'); break;
21 case 0: fmtrune(f, '0'); break;
22 case -1: fmtrune(f, '?'); break;
40 fmtfdinit(&f, 1, buf, 256);
42 rc = satget(sat, i, t, ta);
46 t = realloc(t, ta * sizeof(int));
50 fmtprint(&f, "%d: ", i);
51 for(j = 0; j < rc; j++)
52 fmtprint(&f, "%s%d", j==0?"":" ∨ ", t[j]);
66 for(s = syms; s != nil; s = s->next){
67 if(s->type != SYMBITS) continue;
69 if(s->size > l) l = s->size;
70 fmtprint(f, "%s%*s", first++ != 0 ? " " : "", l, s->name);
82 for(s = syms; s != nil; s = s->next){
83 if(s->type != SYMBITS) continue;
84 if(first++ != 0) fmtrune(f, ' ');
86 if(s->size > l) l = s->size;
87 for(i = l - 1; i > s->size - 1; i--)
90 switch(satval(sat, s->vars[i])){
91 case 1: fmtrune(f, '1'); break;
92 case 0: fmtrune(f, '0'); break;
93 case -1: fmtrune(f, '?'); break;
108 sysfatal("left as an exercise to the reader");
109 satadd1(sat, assertvar, nassertvar);
112 fmtfdinit(&f, 1, buf, sizeof(buf));
115 while(satmore(sat) > 0){
120 if(satsolve(sat) == 0)
123 fmtfdinit(&f, 1, buf, sizeof(buf));
124 for(s = syms; s != nil; s = s->next)
134 fprint(2, "usage: %s [ -m ] [ file ]\n", argv0);
139 main(int argc, char **argv)
141 typedef void init(void);
142 init miscinit, cvtinit, parsinit;
146 case 'm': mflag++; break;
150 if(argc > 1) usage();
153 fmtinstall('B', mpfmt);
157 parse(argc > 0 ? argv[0] : nil);