summaryrefslogtreecommitdiff
path: root/sys/src/cmd/spred/fil.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2014-07-30 15:57:14 +0200
committeraiju <devnull@localhost>2014-07-30 15:57:14 +0200
commit712fd30652d29dc9e936f11d7837d1cb079575fc (patch)
tree2915c820a5c05761f1d2ac4d525067f701aa474b /sys/src/cmd/spred/fil.c
parent555a05018b60b28bdfd6ada0310848c68fe20e48 (diff)
added sprite editor spred
Diffstat (limited to 'sys/src/cmd/spred/fil.c')
-rw-r--r--sys/src/cmd/spred/fil.c157
1 files changed, 157 insertions, 0 deletions
diff --git a/sys/src/cmd/spred/fil.c b/sys/src/cmd/spred/fil.c
new file mode 100644
index 000000000..8cb3708b2
--- /dev/null
+++ b/sys/src/cmd/spred/fil.c
@@ -0,0 +1,157 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <thread.h>
+#include <draw.h>
+#include <mouse.h>
+#include <frame.h>
+#include "dat.h"
+#include "fns.h"
+
+int
+tline(Biobuf *bp, char **str, char **args, int max)
+{
+ char *s, *p;
+ int q, dq, rc;
+
+ do{
+ s = Brdstr(bp, '\n', 10);
+ if(s == nil)
+ return -1;
+ q = dq = 0;
+ for(p = s; *p != 0; p++)
+ if(*p == '\'')
+ dq = !dq;
+ else{
+ if(dq){
+ q = !q;
+ dq = 0;
+ }
+ if(*p == '#' && !q){
+ *p = 0;
+ break;
+ }
+ }
+ rc = tokenize(s, args, max);
+ }while(rc == 0 && (free(s), 1));
+ *str = s;
+ return rc;
+}
+
+Ident
+getident(int fd)
+{
+ Dir *d;
+ Ident i;
+
+ d = dirfstat(fd);
+ if(d == nil)
+ return (Ident){-1, -1, (Qid){0, 0, 0}};
+ i = (Ident){d->type, d->dev, d->qid};
+ free(d);
+ return i;
+}
+
+void
+putident(Ident)
+{
+}
+
+int
+identcmp(Ident *a, Ident *b)
+{
+ return a->type != b->type || a->dev != b->dev || a->path != b->path;
+}
+
+int
+filcmp(File *f, File *g)
+{
+ if(f->type != g->type)
+ return f->type - g->type;
+ if(f->name == nil || g->name == nil)
+ return -1;
+ return strcmp(f->name, g->name);
+}
+
+void
+filinit(File *f, char *t)
+{
+ File *g;
+
+ f->wins.wnext = f->wins.wprev = &f->wins;
+ f->name = strdup(t);
+ for(g = flist.next; g != &flist && filcmp(g, f) < 0; g = g->next)
+ ;
+ f->prev = g->prev;
+ f->next = g;
+ g->prev->next = f;
+ g->prev = f;
+}
+
+void
+putfil(File *f)
+{
+ switch(f->type){
+ case PAL: putpal((Pal *) f); break;
+ case SPR: putspr((Spr *) f); break;
+ }
+ f->prev->next = f->next;
+ f->next->prev = f->prev;
+ free(f->name);
+ free(f);
+}
+
+static char phasetitle[] = "??? phase error ???";
+
+int
+filtitlelen(File *f)
+{
+ if(f->name != nil)
+ return utflen(f->name) + 4;
+ return strlen(phasetitle);
+}
+
+char *
+filtitle(File *f, char *s, char *e)
+{
+ if(f->name == nil)
+ return strecpy(s, e, phasetitle);
+ *s++ = f->change ? '\'' : ' ';
+ if(f->wins.wnext != &f->wins)
+ if(f->wins.wnext->wnext != &f->wins)
+ *s++ = '*';
+ else
+ *s++ = '+';
+ else
+ *s++ = '-';
+ *s++ = actf != nil && f == actf->f ? '.' : ' ';
+ *s++ = ' ';
+ return strecpy(s, e, f->name);
+}
+
+void
+winwrite(Win *w, char *f)
+{
+ if(w->f == nil){
+ cmdprint("?\n");
+ return;
+ }
+ switch(w->type){
+ case PAL:
+ writepal((Pal *) w->f, f);
+ return;
+ case SPR:
+ writespr((Spr *) w->f, f);
+ return;
+ }
+ cmdprint("?\n");
+}
+
+void
+filredraw(File *f)
+{
+ Win *w;
+
+ for(w = f->wins.wnext; w != &f->wins; w = w->wnext)
+ w->tab->draw(w);
+}