Blame


1 76193d7c 2003-09-30 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <libc.h>
3 76193d7c 2003-09-30 devnull #include <plumb.h>
4 76193d7c 2003-09-30 devnull #include "errors.h"
5 76193d7c 2003-09-30 devnull
6 22c7ebff 2004-12-28 devnull #undef waitfor
7 22c7ebff 2004-12-28 devnull #define waitfor samwaitfor
8 22c7ebff 2004-12-28 devnull
9 d9ed7243 2006-04-21 devnull #undef warn
10 d9ed7243 2006-04-21 devnull #define warn samwarn
11 d9ed7243 2006-04-21 devnull
12 76193d7c 2003-09-30 devnull /*
13 76193d7c 2003-09-30 devnull * BLOCKSIZE is relatively small to keep memory consumption down.
14 76193d7c 2003-09-30 devnull */
15 76193d7c 2003-09-30 devnull
16 76193d7c 2003-09-30 devnull #define BLOCKSIZE 2048
17 76193d7c 2003-09-30 devnull #define RUNESIZE sizeof(Rune)
18 76193d7c 2003-09-30 devnull #define NDISC 5
19 76193d7c 2003-09-30 devnull #define NBUFFILES 3+2*NDISC /* plan 9+undo+snarf+NDISC*(transcript+buf) */
20 76193d7c 2003-09-30 devnull #define NSUBEXP 10
21 76193d7c 2003-09-30 devnull
22 76193d7c 2003-09-30 devnull #define TRUE 1
23 76193d7c 2003-09-30 devnull #define FALSE 0
24 76193d7c 2003-09-30 devnull
25 912fba95 2003-11-24 devnull #undef INFINITY /* Darwin declares this as HUGE_VAL */
26 76193d7c 2003-09-30 devnull #define INFINITY 0x7FFFFFFFL
27 76193d7c 2003-09-30 devnull #define INCR 25
28 76193d7c 2003-09-30 devnull #define STRSIZE (2*BLOCKSIZE)
29 76193d7c 2003-09-30 devnull
30 76193d7c 2003-09-30 devnull typedef long Posn; /* file position or address */
31 76193d7c 2003-09-30 devnull typedef ushort Mod; /* modification number */
32 76193d7c 2003-09-30 devnull
33 76193d7c 2003-09-30 devnull typedef struct Address Address;
34 76193d7c 2003-09-30 devnull typedef struct Block Block;
35 76193d7c 2003-09-30 devnull typedef struct Buffer Buffer;
36 76193d7c 2003-09-30 devnull typedef struct Disk Disk;
37 76193d7c 2003-09-30 devnull typedef struct Discdesc Discdesc;
38 76193d7c 2003-09-30 devnull typedef struct File File;
39 76193d7c 2003-09-30 devnull typedef struct List List;
40 76193d7c 2003-09-30 devnull typedef struct Range Range;
41 76193d7c 2003-09-30 devnull typedef struct Rangeset Rangeset;
42 76193d7c 2003-09-30 devnull typedef struct String String;
43 76193d7c 2003-09-30 devnull
44 76193d7c 2003-09-30 devnull enum State
45 76193d7c 2003-09-30 devnull {
46 76193d7c 2003-09-30 devnull Clean = ' ',
47 76193d7c 2003-09-30 devnull Dirty = '\'',
48 cbeb0b26 2006-04-01 devnull Unread = '-'
49 76193d7c 2003-09-30 devnull };
50 76193d7c 2003-09-30 devnull
51 76193d7c 2003-09-30 devnull struct Range
52 76193d7c 2003-09-30 devnull {
53 76193d7c 2003-09-30 devnull Posn p1, p2;
54 76193d7c 2003-09-30 devnull };
55 76193d7c 2003-09-30 devnull
56 76193d7c 2003-09-30 devnull struct Rangeset
57 76193d7c 2003-09-30 devnull {
58 76193d7c 2003-09-30 devnull Range p[NSUBEXP];
59 76193d7c 2003-09-30 devnull };
60 76193d7c 2003-09-30 devnull
61 76193d7c 2003-09-30 devnull struct Address
62 76193d7c 2003-09-30 devnull {
63 76193d7c 2003-09-30 devnull Range r;
64 76193d7c 2003-09-30 devnull File *f;
65 76193d7c 2003-09-30 devnull };
66 76193d7c 2003-09-30 devnull
67 76193d7c 2003-09-30 devnull struct String
68 76193d7c 2003-09-30 devnull {
69 76193d7c 2003-09-30 devnull short n;
70 76193d7c 2003-09-30 devnull short size;
71 76193d7c 2003-09-30 devnull Rune *s;
72 76193d7c 2003-09-30 devnull };
73 76193d7c 2003-09-30 devnull
74 76193d7c 2003-09-30 devnull struct List /* code depends on a long being able to hold a pointer */
75 76193d7c 2003-09-30 devnull {
76 2c0f3733 2006-04-20 devnull int type; /* 'p' for pointer, 'P' for Posn */
77 76193d7c 2003-09-30 devnull int nalloc;
78 76193d7c 2003-09-30 devnull int nused;
79 76193d7c 2003-09-30 devnull union{
80 2c0f3733 2006-04-20 devnull void* listp;
81 2c0f3733 2006-04-20 devnull void** voidp;
82 2c0f3733 2006-04-20 devnull Posn* posnp;
83 2c0f3733 2006-04-20 devnull String**stringp;
84 2c0f3733 2006-04-20 devnull File** filep;
85 76193d7c 2003-09-30 devnull }g;
86 76193d7c 2003-09-30 devnull };
87 76193d7c 2003-09-30 devnull
88 76193d7c 2003-09-30 devnull #define listptr g.listp
89 2c0f3733 2006-04-20 devnull #define voidpptr g.voidp
90 2c0f3733 2006-04-20 devnull #define posnptr g.posnp
91 76193d7c 2003-09-30 devnull #define stringpptr g.stringp
92 76193d7c 2003-09-30 devnull #define filepptr g.filep
93 76193d7c 2003-09-30 devnull
94 76193d7c 2003-09-30 devnull enum
95 76193d7c 2003-09-30 devnull {
96 76193d7c 2003-09-30 devnull Blockincr = 256,
97 76193d7c 2003-09-30 devnull Maxblock = 8*1024,
98 76193d7c 2003-09-30 devnull
99 76193d7c 2003-09-30 devnull BUFSIZE = Maxblock, /* size from fbufalloc() */
100 cbeb0b26 2006-04-01 devnull RBUFSIZE = BUFSIZE/sizeof(Rune)
101 76193d7c 2003-09-30 devnull };
102 76193d7c 2003-09-30 devnull
103 76193d7c 2003-09-30 devnull
104 76193d7c 2003-09-30 devnull enum
105 76193d7c 2003-09-30 devnull {
106 76193d7c 2003-09-30 devnull Null = '-',
107 76193d7c 2003-09-30 devnull Delete = 'd',
108 76193d7c 2003-09-30 devnull Insert = 'i',
109 76193d7c 2003-09-30 devnull Filename = 'f',
110 76193d7c 2003-09-30 devnull Dot = 'D',
111 cbeb0b26 2006-04-01 devnull Mark = 'm'
112 76193d7c 2003-09-30 devnull };
113 76193d7c 2003-09-30 devnull
114 76193d7c 2003-09-30 devnull struct Block
115 76193d7c 2003-09-30 devnull {
116 76193d7c 2003-09-30 devnull uint addr; /* disk address in bytes */
117 522b0689 2003-09-30 devnull union {
118 76193d7c 2003-09-30 devnull uint n; /* number of used runes in block */
119 76193d7c 2003-09-30 devnull Block *next; /* pointer to next in free list */
120 522b0689 2003-09-30 devnull } u;
121 76193d7c 2003-09-30 devnull };
122 76193d7c 2003-09-30 devnull
123 76193d7c 2003-09-30 devnull struct Disk
124 76193d7c 2003-09-30 devnull {
125 76193d7c 2003-09-30 devnull int fd;
126 76193d7c 2003-09-30 devnull uint addr; /* length of temp file */
127 76193d7c 2003-09-30 devnull Block *free[Maxblock/Blockincr+1];
128 76193d7c 2003-09-30 devnull };
129 76193d7c 2003-09-30 devnull
130 76193d7c 2003-09-30 devnull Disk* diskinit(void);
131 76193d7c 2003-09-30 devnull Block* disknewblock(Disk*, uint);
132 76193d7c 2003-09-30 devnull void diskrelease(Disk*, Block*);
133 76193d7c 2003-09-30 devnull void diskread(Disk*, Block*, Rune*, uint);
134 76193d7c 2003-09-30 devnull void diskwrite(Disk*, Block**, Rune*, uint);
135 76193d7c 2003-09-30 devnull
136 76193d7c 2003-09-30 devnull struct Buffer
137 76193d7c 2003-09-30 devnull {
138 76193d7c 2003-09-30 devnull uint nc;
139 76193d7c 2003-09-30 devnull Rune *c; /* cache */
140 76193d7c 2003-09-30 devnull uint cnc; /* bytes in cache */
141 76193d7c 2003-09-30 devnull uint cmax; /* size of allocated cache */
142 76193d7c 2003-09-30 devnull uint cq; /* position of cache */
143 76193d7c 2003-09-30 devnull int cdirty; /* cache needs to be written */
144 76193d7c 2003-09-30 devnull uint cbi; /* index of cache Block */
145 76193d7c 2003-09-30 devnull Block **bl; /* array of blocks */
146 76193d7c 2003-09-30 devnull uint nbl; /* number of blocks */
147 76193d7c 2003-09-30 devnull };
148 76193d7c 2003-09-30 devnull void bufinsert(Buffer*, uint, Rune*, uint);
149 76193d7c 2003-09-30 devnull void bufdelete(Buffer*, uint, uint);
150 76193d7c 2003-09-30 devnull uint bufload(Buffer*, uint, int, int*);
151 76193d7c 2003-09-30 devnull void bufread(Buffer*, uint, Rune*, uint);
152 76193d7c 2003-09-30 devnull void bufclose(Buffer*);
153 76193d7c 2003-09-30 devnull void bufreset(Buffer*);
154 76193d7c 2003-09-30 devnull
155 76193d7c 2003-09-30 devnull struct File
156 76193d7c 2003-09-30 devnull {
157 522b0689 2003-09-30 devnull Buffer b; /* the data */
158 76193d7c 2003-09-30 devnull Buffer delta; /* transcript of changes */
159 76193d7c 2003-09-30 devnull Buffer epsilon; /* inversion of delta for redo */
160 76193d7c 2003-09-30 devnull String name; /* name of associated file */
161 76193d7c 2003-09-30 devnull uvlong qidpath; /* of file when read */
162 76193d7c 2003-09-30 devnull uint mtime; /* of file when read */
163 76193d7c 2003-09-30 devnull int dev; /* of file when read */
164 76193d7c 2003-09-30 devnull int unread; /* file has not been read from disk */
165 76193d7c 2003-09-30 devnull
166 76193d7c 2003-09-30 devnull long seq; /* if seq==0, File acts like Buffer */
167 76193d7c 2003-09-30 devnull long cleanseq; /* f->seq at last read/write of file */
168 76193d7c 2003-09-30 devnull int mod; /* file appears modified in menu */
169 76193d7c 2003-09-30 devnull char rescuing; /* sam exiting; this file unusable */
170 76193d7c 2003-09-30 devnull
171 cbeb0b26 2006-04-01 devnull #if 0
172 76193d7c 2003-09-30 devnull // Text *curtext; /* most recently used associated text */
173 76193d7c 2003-09-30 devnull // Text **text; /* list of associated texts */
174 76193d7c 2003-09-30 devnull // int ntext;
175 76193d7c 2003-09-30 devnull // int dumpid; /* used in dumping zeroxed windows */
176 cbeb0b26 2006-04-01 devnull #endif
177 76193d7c 2003-09-30 devnull
178 76193d7c 2003-09-30 devnull Posn hiposn; /* highest address touched this Mod */
179 76193d7c 2003-09-30 devnull Address dot; /* current position */
180 76193d7c 2003-09-30 devnull Address ndot; /* new current position after update */
181 76193d7c 2003-09-30 devnull Range tdot; /* what terminal thinks is current range */
182 76193d7c 2003-09-30 devnull Range mark; /* tagged spot in text (don't confuse with Mark) */
183 76193d7c 2003-09-30 devnull List *rasp; /* map of what terminal's got */
184 76193d7c 2003-09-30 devnull short tag; /* for communicating with terminal */
185 76193d7c 2003-09-30 devnull char closeok; /* ok to close file? */
186 76193d7c 2003-09-30 devnull char deleted; /* delete at completion of command */
187 76193d7c 2003-09-30 devnull Range prevdot; /* state before start of change */
188 76193d7c 2003-09-30 devnull Range prevmark;
189 76193d7c 2003-09-30 devnull long prevseq;
190 76193d7c 2003-09-30 devnull int prevmod;
191 76193d7c 2003-09-30 devnull };
192 cbeb0b26 2006-04-01 devnull /*File* fileaddtext(File*, Text*); */
193 76193d7c 2003-09-30 devnull void fileclose(File*);
194 76193d7c 2003-09-30 devnull void filedelete(File*, uint, uint);
195 cbeb0b26 2006-04-01 devnull /*void filedeltext(File*, Text*); */
196 76193d7c 2003-09-30 devnull void fileinsert(File*, uint, Rune*, uint);
197 76193d7c 2003-09-30 devnull uint fileload(File*, uint, int, int*);
198 76193d7c 2003-09-30 devnull void filemark(File*);
199 76193d7c 2003-09-30 devnull void filereset(File*);
200 76193d7c 2003-09-30 devnull void filesetname(File*, String*);
201 76193d7c 2003-09-30 devnull void fileundelete(File*, Buffer*, uint, uint);
202 76193d7c 2003-09-30 devnull void fileuninsert(File*, Buffer*, uint, uint);
203 76193d7c 2003-09-30 devnull void fileunsetname(File*, Buffer*);
204 76193d7c 2003-09-30 devnull void fileundo(File*, int, int, uint*, uint*, int);
205 76193d7c 2003-09-30 devnull int fileupdate(File*, int, int);
206 76193d7c 2003-09-30 devnull
207 76193d7c 2003-09-30 devnull int filereadc(File*, uint);
208 76193d7c 2003-09-30 devnull File *fileopen(void);
209 76193d7c 2003-09-30 devnull void loginsert(File*, uint, Rune*, uint);
210 76193d7c 2003-09-30 devnull void logdelete(File*, uint, uint);
211 76193d7c 2003-09-30 devnull void logsetname(File*, String*);
212 76193d7c 2003-09-30 devnull int fileisdirty(File*);
213 76193d7c 2003-09-30 devnull long undoseq(File*, int);
214 76193d7c 2003-09-30 devnull long prevseq(Buffer*);
215 76193d7c 2003-09-30 devnull
216 76193d7c 2003-09-30 devnull void raspload(File*);
217 76193d7c 2003-09-30 devnull void raspstart(File*);
218 76193d7c 2003-09-30 devnull void raspdelete(File*, uint, uint, int);
219 76193d7c 2003-09-30 devnull void raspinsert(File*, uint, Rune*, uint, int);
220 76193d7c 2003-09-30 devnull void raspdone(File*, int);
221 78439d25 2007-01-12 devnull void raspflush(File*);
222 76193d7c 2003-09-30 devnull
223 76193d7c 2003-09-30 devnull /*
224 76193d7c 2003-09-30 devnull * acme fns
225 76193d7c 2003-09-30 devnull */
226 76193d7c 2003-09-30 devnull void* fbufalloc(void);
227 76193d7c 2003-09-30 devnull void fbuffree(void*);
228 76193d7c 2003-09-30 devnull uint min(uint, uint);
229 76193d7c 2003-09-30 devnull void cvttorunes(char*, int, Rune*, int*, int*, int*);
230 76193d7c 2003-09-30 devnull
231 76193d7c 2003-09-30 devnull #define runemalloc(a) (Rune*)emalloc((a)*sizeof(Rune))
232 76193d7c 2003-09-30 devnull #define runerealloc(a, b) (Rune*)realloc((a), (b)*sizeof(Rune))
233 76193d7c 2003-09-30 devnull #define runemove(a, b, c) memmove((a), (b), (c)*sizeof(Rune))
234 76193d7c 2003-09-30 devnull
235 76193d7c 2003-09-30 devnull int alnum(int);
236 76193d7c 2003-09-30 devnull int Read(int, void*, int);
237 76193d7c 2003-09-30 devnull void Seek(int, long, int);
238 76193d7c 2003-09-30 devnull int plan9(File*, int, String*, int);
239 76193d7c 2003-09-30 devnull int Write(int, void*, int);
240 76193d7c 2003-09-30 devnull int bexecute(File*, Posn);
241 76193d7c 2003-09-30 devnull void cd(String*);
242 76193d7c 2003-09-30 devnull void closefiles(File*, String*);
243 76193d7c 2003-09-30 devnull void closeio(Posn);
244 76193d7c 2003-09-30 devnull void cmdloop(void);
245 76193d7c 2003-09-30 devnull void cmdupdate(void);
246 76193d7c 2003-09-30 devnull void compile(String*);
247 76193d7c 2003-09-30 devnull void copy(File*, Address);
248 76193d7c 2003-09-30 devnull File *current(File*);
249 76193d7c 2003-09-30 devnull void delete(File*);
250 76193d7c 2003-09-30 devnull void delfile(File*);
251 76193d7c 2003-09-30 devnull void dellist(List*, int);
252 76193d7c 2003-09-30 devnull void doubleclick(File*, Posn);
253 76193d7c 2003-09-30 devnull void dprint(char*, ...);
254 76193d7c 2003-09-30 devnull void edit(File*, int);
255 76193d7c 2003-09-30 devnull void *emalloc(ulong);
256 76193d7c 2003-09-30 devnull void *erealloc(void*, ulong);
257 76193d7c 2003-09-30 devnull void error(Err);
258 76193d7c 2003-09-30 devnull void error_c(Err, int);
259 76193d7c 2003-09-30 devnull void error_r(Err, char*);
260 76193d7c 2003-09-30 devnull void error_s(Err, char*);
261 76193d7c 2003-09-30 devnull int execute(File*, Posn, Posn);
262 76193d7c 2003-09-30 devnull int filematch(File*, String*);
263 76193d7c 2003-09-30 devnull void filename(File*);
264 76193d7c 2003-09-30 devnull void fixname(String*);
265 76193d7c 2003-09-30 devnull void fullname(String*);
266 76193d7c 2003-09-30 devnull void getcurwd(void);
267 76193d7c 2003-09-30 devnull File *getfile(String*);
268 76193d7c 2003-09-30 devnull int getname(File*, String*, int);
269 76193d7c 2003-09-30 devnull long getnum(int);
270 76193d7c 2003-09-30 devnull void hiccough(char*);
271 2c0f3733 2006-04-20 devnull void inslist(List*, int, ...);
272 76193d7c 2003-09-30 devnull Address lineaddr(Posn, Address, int);
273 2c0f3733 2006-04-20 devnull List *listalloc(int);
274 76193d7c 2003-09-30 devnull void listfree(List*);
275 76193d7c 2003-09-30 devnull void load(File*);
276 76193d7c 2003-09-30 devnull File *lookfile(String*);
277 76193d7c 2003-09-30 devnull void lookorigin(File*, Posn, Posn);
278 76193d7c 2003-09-30 devnull int lookup(int);
279 76193d7c 2003-09-30 devnull void move(File*, Address);
280 76193d7c 2003-09-30 devnull void moveto(File*, Range);
281 76193d7c 2003-09-30 devnull File *newfile(void);
282 76193d7c 2003-09-30 devnull void nextmatch(File*, String*, Posn, int);
283 76193d7c 2003-09-30 devnull int newtmp(int);
284 76193d7c 2003-09-30 devnull void notifyf(void*, char*);
285 76193d7c 2003-09-30 devnull void panic(char*);
286 76193d7c 2003-09-30 devnull void printposn(File*, int);
287 76193d7c 2003-09-30 devnull void print_ss(char*, String*, String*);
288 76193d7c 2003-09-30 devnull void print_s(char*, String*);
289 76193d7c 2003-09-30 devnull int rcv(void);
290 76193d7c 2003-09-30 devnull Range rdata(List*, Posn, Posn);
291 76193d7c 2003-09-30 devnull Posn readio(File*, int*, int, int);
292 76193d7c 2003-09-30 devnull void rescue(void);
293 76193d7c 2003-09-30 devnull void resetcmd(void);
294 76193d7c 2003-09-30 devnull void resetsys(void);
295 76193d7c 2003-09-30 devnull void resetxec(void);
296 76193d7c 2003-09-30 devnull void rgrow(List*, Posn, Posn);
297 76193d7c 2003-09-30 devnull void samerr(char*);
298 76193d7c 2003-09-30 devnull void settempfile(void);
299 76193d7c 2003-09-30 devnull int skipbl(void);
300 76193d7c 2003-09-30 devnull void snarf(File*, Posn, Posn, Buffer*, int);
301 76193d7c 2003-09-30 devnull void sortname(File*);
302 17ab31aa 2005-01-27 devnull void startup(char*, int, char**, char**);
303 76193d7c 2003-09-30 devnull void state(File*, int);
304 76193d7c 2003-09-30 devnull int statfd(int, ulong*, uvlong*, long*, long*, long*);
305 76193d7c 2003-09-30 devnull int statfile(char*, ulong*, uvlong*, long*, long*, long*);
306 76193d7c 2003-09-30 devnull void Straddc(String*, int);
307 76193d7c 2003-09-30 devnull void Strclose(String*);
308 76193d7c 2003-09-30 devnull int Strcmp(String*, String*);
309 76193d7c 2003-09-30 devnull void Strdelete(String*, Posn, Posn);
310 76193d7c 2003-09-30 devnull void Strdupl(String*, Rune*);
311 76193d7c 2003-09-30 devnull void Strduplstr(String*, String*);
312 76193d7c 2003-09-30 devnull void Strinit(String*);
313 76193d7c 2003-09-30 devnull void Strinit0(String*);
314 76193d7c 2003-09-30 devnull void Strinsert(String*, String*, Posn);
315 76193d7c 2003-09-30 devnull void Strinsure(String*, ulong);
316 76193d7c 2003-09-30 devnull int Strispre(String*, String*);
317 76193d7c 2003-09-30 devnull void Strzero(String*);
318 76193d7c 2003-09-30 devnull int Strlen(Rune*);
319 76193d7c 2003-09-30 devnull char *Strtoc(String*);
320 76193d7c 2003-09-30 devnull void syserror(char*);
321 76193d7c 2003-09-30 devnull void telldot(File*);
322 76193d7c 2003-09-30 devnull void tellpat(void);
323 76193d7c 2003-09-30 devnull String *tmpcstr(char*);
324 76193d7c 2003-09-30 devnull String *tmprstr(Rune*, int);
325 76193d7c 2003-09-30 devnull void freetmpstr(String*);
326 76193d7c 2003-09-30 devnull void termcommand(void);
327 76193d7c 2003-09-30 devnull void termwrite(char*);
328 76193d7c 2003-09-30 devnull File *tofile(String*);
329 76193d7c 2003-09-30 devnull void trytoclose(File*);
330 76193d7c 2003-09-30 devnull void trytoquit(void);
331 76193d7c 2003-09-30 devnull int undo(int);
332 76193d7c 2003-09-30 devnull void update(void);
333 76193d7c 2003-09-30 devnull int waitfor(int);
334 76193d7c 2003-09-30 devnull void warn(Warn);
335 76193d7c 2003-09-30 devnull void warn_s(Warn, char*);
336 76193d7c 2003-09-30 devnull void warn_SS(Warn, String*, String*);
337 76193d7c 2003-09-30 devnull void warn_S(Warn, String*);
338 76193d7c 2003-09-30 devnull int whichmenu(File*);
339 76193d7c 2003-09-30 devnull void writef(File*);
340 76193d7c 2003-09-30 devnull Posn writeio(File*);
341 76193d7c 2003-09-30 devnull Discdesc *Dstart(void);
342 76193d7c 2003-09-30 devnull
343 76193d7c 2003-09-30 devnull extern Rune samname[]; /* compiler dependent */
344 76193d7c 2003-09-30 devnull extern Rune *left[];
345 76193d7c 2003-09-30 devnull extern Rune *right[];
346 76193d7c 2003-09-30 devnull
347 76193d7c 2003-09-30 devnull extern char RSAM[]; /* system dependent */
348 76193d7c 2003-09-30 devnull extern char SAMTERM[];
349 76193d7c 2003-09-30 devnull extern char HOME[];
350 76193d7c 2003-09-30 devnull extern char TMPDIR[];
351 76193d7c 2003-09-30 devnull extern char SH[];
352 76193d7c 2003-09-30 devnull extern char SHPATH[];
353 76193d7c 2003-09-30 devnull extern char RX[];
354 76193d7c 2003-09-30 devnull extern char RXPATH[];
355 76193d7c 2003-09-30 devnull
356 76193d7c 2003-09-30 devnull /*
357 76193d7c 2003-09-30 devnull * acme globals
358 76193d7c 2003-09-30 devnull */
359 76193d7c 2003-09-30 devnull extern long seq;
360 76193d7c 2003-09-30 devnull extern Disk *disk;
361 76193d7c 2003-09-30 devnull
362 76193d7c 2003-09-30 devnull extern char *rsamname; /* globals */
363 76193d7c 2003-09-30 devnull extern char *samterm;
364 76193d7c 2003-09-30 devnull extern Rune genbuf[];
365 76193d7c 2003-09-30 devnull extern char *genc;
366 76193d7c 2003-09-30 devnull extern int io;
367 76193d7c 2003-09-30 devnull extern int patset;
368 76193d7c 2003-09-30 devnull extern int quitok;
369 76193d7c 2003-09-30 devnull extern Address addr;
370 76193d7c 2003-09-30 devnull extern Buffer snarfbuf;
371 76193d7c 2003-09-30 devnull extern Buffer plan9buf;
372 76193d7c 2003-09-30 devnull extern List file;
373 76193d7c 2003-09-30 devnull extern List tempfile;
374 76193d7c 2003-09-30 devnull extern File *cmd;
375 76193d7c 2003-09-30 devnull extern File *curfile;
376 76193d7c 2003-09-30 devnull extern File *lastfile;
377 76193d7c 2003-09-30 devnull extern Mod modnum;
378 76193d7c 2003-09-30 devnull extern Posn cmdpt;
379 76193d7c 2003-09-30 devnull extern Posn cmdptadv;
380 76193d7c 2003-09-30 devnull extern Rangeset sel;
381 76193d7c 2003-09-30 devnull extern String curwd;
382 76193d7c 2003-09-30 devnull extern String cmdstr;
383 76193d7c 2003-09-30 devnull extern String genstr;
384 76193d7c 2003-09-30 devnull extern String lastpat;
385 76193d7c 2003-09-30 devnull extern String lastregexp;
386 76193d7c 2003-09-30 devnull extern String plan9cmd;
387 76193d7c 2003-09-30 devnull extern int downloaded;
388 76193d7c 2003-09-30 devnull extern int eof;
389 76193d7c 2003-09-30 devnull extern int bpipeok;
390 76193d7c 2003-09-30 devnull extern int panicking;
391 76193d7c 2003-09-30 devnull extern Rune empty[];
392 76193d7c 2003-09-30 devnull extern int termlocked;
393 5369e5ea 2007-01-12 devnull extern int outbuffered;
394 76193d7c 2003-09-30 devnull
395 76193d7c 2003-09-30 devnull #include "mesg.h"
396 76193d7c 2003-09-30 devnull
397 76193d7c 2003-09-30 devnull void outTs(Hmesg, int);
398 76193d7c 2003-09-30 devnull void outT0(Hmesg);
399 76193d7c 2003-09-30 devnull void outTl(Hmesg, long);
400 76193d7c 2003-09-30 devnull void outTslS(Hmesg, int, long, String*);
401 76193d7c 2003-09-30 devnull void outTS(Hmesg, String*);
402 76193d7c 2003-09-30 devnull void outTsS(Hmesg, int, String*);
403 76193d7c 2003-09-30 devnull void outTsllS(Hmesg, int, long, long, String*);
404 76193d7c 2003-09-30 devnull void outTsll(Hmesg, int, long, long);
405 76193d7c 2003-09-30 devnull void outTsl(Hmesg, int, long);
406 2c0f3733 2006-04-20 devnull void outTsv(Hmesg, int, vlong);
407 76193d7c 2003-09-30 devnull void outflush(void);
408 78439d25 2007-01-12 devnull int needoutflush(void);