]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/spred/fil.c
cc: use 7 octal digits for 21 bit runes
[plan9front.git] / sys / src / cmd / spred / fil.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 int
12 tline(Biobuf *bp, char **str, char **args, int max)
13 {
14         char *s, *p;
15         int q, dq, rc;
16
17         do{
18                 s = Brdstr(bp, '\n', 10);
19                 if(s == nil)
20                         return -1;
21                 q = dq = 0;
22                 for(p = s; *p != 0; p++)
23                         if(*p == '\'')
24                                 dq = !dq;
25                         else{
26                                 if(dq){
27                                         q = !q;
28                                         dq = 0;
29                                 }
30                                 if(*p == '#' && !q){
31                                         *p = 0;
32                                         break;
33                                 }
34                         }
35                 rc = tokenize(s, args, max);
36         }while(rc == 0 && (free(s), 1));
37         *str = s;
38         return rc;
39 }
40
41 Ident
42 getident(int fd)
43 {
44         Dir *d;
45         Ident i;
46         
47         d = dirfstat(fd);
48         if(d == nil)
49                 return (Ident){-1, -1, (Qid){0, 0, 0}};
50         i = (Ident){d->type, d->dev, d->qid};
51         free(d);
52         return i;
53 }
54
55 void
56 putident(Ident)
57 {
58 }
59
60 int
61 identcmp(Ident *a, Ident *b)
62 {
63         return a->type != b->type || a->dev != b->dev || a->path != b->path;
64 }
65
66 int
67 filcmp(File *f, File *g)
68 {
69         if(f->type != g->type)
70                 return f->type - g->type;
71         if(f->name == nil || g->name == nil)
72                 return -1;
73         return strcmp(f->name, g->name);
74 }
75
76 void
77 filinit(File *f, char *t)
78 {
79         File *g;
80
81         f->wins.wnext = f->wins.wprev = &f->wins;
82         f->name = strdup(t);
83         for(g = flist.next; g != &flist && filcmp(g, f) < 0; g = g->next)
84                 ;
85         f->prev = g->prev;
86         f->next = g;
87         g->prev->next = f;
88         g->prev = f;
89 }
90
91 void
92 putfil(File *f)
93 {
94         switch(f->type){
95         case PAL: putpal((Pal *) f); break;
96         case SPR: putspr((Spr *) f); break;
97         }
98         f->prev->next = f->next;
99         f->next->prev = f->prev;
100         free(f->name);
101         free(f);
102 }
103
104 static char phasetitle[] = "??? phase error ???";
105
106 int
107 filtitlelen(File *f)
108 {
109         if(f->name != nil)
110                 return utflen(f->name) + 4;
111         return strlen(phasetitle);
112 }
113
114 char *
115 filtitle(File *f, char *s, char *e)
116 {
117         if(f->name == nil)
118                 return strecpy(s, e, phasetitle);
119         *s++ = f->change ? '\'' : ' ';
120         if(f->wins.wnext != &f->wins)
121                 if(f->wins.wnext->wnext != &f->wins)
122                         *s++ = '*';
123                 else
124                         *s++ = '+';
125         else
126                 *s++ = '-';
127         *s++ = actf != nil && f == actf->f ? '.' : ' ';
128         *s++ = ' ';
129         return strecpy(s, e, f->name);
130 }
131
132 void
133 winwrite(Win *w, char *f)
134 {
135         if(w->f == nil){
136                 cmdprint("?\n");
137                 return;
138         }
139         switch(w->type){
140         case PAL:
141                 writepal((Pal *) w->f, f);
142                 return;
143         case SPR:
144                 writespr((Spr *) w->f, f);
145                 return;
146         }
147         cmdprint("?\n");
148 }
149
150 void
151 filredraw(File *f)
152 {
153         Win *w;
154         
155         for(w = f->wins.wnext; w != &f->wins; w = w->wnext)
156                 w->tab->draw(w);
157 }
158
159 void
160 change(File *f)
161 {
162         f->change = 1;
163         quitok = 0;
164 }