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