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