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