]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/spred/cmd.c
exec(2): fix prototypes
[plan9front.git] / sys / src / cmd / spred / cmd.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <thread.h>
5 #include <draw.h>
6 #include <mouse.h>
7 #include <frame.h>
8 #include "dat.h"
9 #include "fns.h"
10
11 extern Mousectl *mc;
12
13 static void
14 dopal(int, char **argv)
15 {
16         Pal *p;
17         
18         p = findpal("", argv[1], 2);
19         if(p == nil){
20                 cmdprint("?%r\n");
21                 p = newpal(argv[1]);
22                 palsize(p, 8, 0);
23         }
24         if(newwinsel(PAL, mc, p) == nil){
25                 if(p->ref == 0)
26                         putfil(p);
27                 return;
28         }
29 }
30
31 static void
32 dosize(int, char **argv)
33 {
34         char *p;
35         int n, m;
36
37         if(actf == nil)
38                 goto err;
39         switch(actf->type){
40         case PAL:
41                 n = strtol(argv[1], &p, 0);
42                 if(*p != 0 || n < 0)
43                         goto err;
44                 palsize((Pal *) actf->f, n, 1);
45                 return;
46         case SPR:
47                 n = strtol(argv[1], &p, 0);
48                 if(*p != '*' || n < 0)
49                         goto err;
50                 m = strtol(++p, &p, 0);
51                 if(*p != 0 || m < 0)
52                         goto err;
53                 sprsize((Spr *) actf->f, n, m, 1);
54                 return;
55         }
56 err:
57         cmdprint("?\n");
58 }
59
60 static void
61 doset(int, char **argv)
62 {
63         int n;
64         char *p;
65         Pal *q;
66
67         if(actf == nil)
68                 goto err;
69         switch(actf->type){
70         case PAL:
71                 n = strtol(argv[1], &p, 0);
72                 if(*p != 0 || n < 0 || n > 0xffffff)
73                         goto err;
74                 q = (Pal *) actf->f;
75                 palset(q, q->sel, n);
76                 return;
77         }
78 err:
79         cmdprint("?\n");
80 }
81
82 static void
83 dozoom(int, char **argv)
84 {
85         int n;
86         char *p;
87         
88         if(actf == nil)
89                 goto err;
90         n = strtol(argv[1], &p, 0);
91         if(*p != 0 || n <= 0)
92                 goto err;
93         actf->zoom = n;
94         actf->tab->draw(actf);
95         return;
96 err:
97         cmdprint("?\n");
98 }
99
100 static void
101 dospr(int, char **argv)
102 {
103         Win *w;
104         Spr *s;
105         Biobuf *bp;
106         
107         s = newspr(argv[1]);
108         bp = Bopen(argv[1], OREAD);
109         if(bp == nil){
110                 cmdprint("?%r\n");
111                 sprsize(s, 8, 8, 0);
112         }else{
113                 if(readspr(s, bp) < 0){
114                         cmdprint("?%r\n");
115                         sprsize(s, 8, 8, 0);
116                 }
117                 Bterm(bp);
118         }
119         w = newwinsel(SPR, mc, s);
120         if(w == nil){
121                 putfil(s);
122                 return;
123         }
124         if(s->palfile != nil){
125                 s->pal = findpal(argv[1], s->palfile, 1);
126                 if(s->pal == nil)
127                         cmdprint("?palette: %r\n");
128                 else{
129                         incref(s->pal);
130                         w->tab->draw(w);
131                 }
132         }
133 }
134
135 static void
136 dowrite(int argc, char **argv)
137 {
138         char *f;
139         
140         if(argc > 2)
141                 cmdprint("?\n");
142         if(argc == 2)
143                 f = argv[1];
144         else
145                 f = nil;
146         if(actf == nil)
147                 cmdprint("?\n");
148         winwrite(actf, f);
149 }
150
151 static void
152 doquit(int, char **)
153 {
154         if(quit() < 0)
155                 threadexitsall(nil);
156 }
157
158 static struct cmd {
159         char *name;
160         int argc;
161         void (*f)(int, char **);
162 } cmds[] = {
163         {"pal", 2, dopal},
164         {"size", 2, dosize},
165         {"set", 2, doset},
166         {"spr", 2, dospr},
167         {"w", 0, dowrite},
168         {"q", 1, doquit},
169         {"zoom", 2, dozoom},
170         {nil, nil}
171 };
172
173 void
174 docmd(char *s)
175 {
176         char *t[32];
177         int nt;
178         struct cmd *c;
179
180         nt = tokenize(s, t, nelem(t));
181         if(nt == 0)
182                 return;
183         for(c = cmds; c->name != 0; c++)
184                 if(strcmp(t[0], c->name) == 0){
185                         if(c->argc != 0 && c->argc != nt)
186                                 cmdprint("?\n");
187                         else
188                                 c->f(nt, t);
189                         return;
190                 }
191         cmdprint("?\n");
192 }