1 #define	SAMTERM
2 
3 #define	RUNESIZE	sizeof(Rune)
4 #define	MAXFILES	256
5 #define	READBUFSIZE 8192
6 #define	NL	5
7 
8 enum{
9 	Up,
10 	Down
11 };
12 
13 typedef struct Text	Text;
14 typedef struct Section	Section;
15 typedef struct Rasp	Rasp;
16 typedef struct Readbuf Readbuf;
17 
18 struct Section
19 {
20 	long	nrunes;
21 	Rune	*text;		/* if null, we haven't got it */
22 	Section	*next;
23 };
24 
25 struct Rasp
26 {
27 	long	nrunes;
28 	Section	*sect;
29 };
30 
31 #define	Untagged	((ushort)65535)
32 
33 struct Text
34 {
35 	Rasp	rasp;
36 	short	nwin;
37 	short	front;		/* input window */
38 	ushort	tag;
39 	char	lock;
40 	Flayer	l[NL];		/* screen storage */
41 };
42 
43 struct Readbuf
44 {
45 	short	n;					/* # bytes in buf */
46 	uchar	data[READBUFSIZE];		/* data bytes */
47 };
48 
49 enum Resource
50 {
51 	RHost,
52 	RKeyboard,
53 	RMouse,
54 	RPlumb,
55 	RResize,
56 	NRes
57 };
58 
59 extern int	protodebug;
60 
61 extern Text	**text;
62 extern uchar	**name;
63 extern ushort	*tag;
64 extern int	nname;
65 extern int	mname;
66 extern Cursor	bullseye;
67 extern Cursor	deadmouse;
68 extern Cursor	lockarrow;
69 extern Cursor	*cursor;
70 extern Flayer	*which;
71 extern Flayer	*work;
72 extern Text	cmd;
73 extern Rune	*scratch;
74 extern long	nscralloc;
75 extern char	hostlock;
76 extern char	hasunlocked;
77 extern long	snarflen;
78 extern Mousectl* mousectl;
79 extern Keyboardctl* keyboardctl;
80 extern Mouse*	mousep;
81 extern long	modified;
82 extern int	maxtab;
83 extern Readbuf	hostbuf[2];	/* double buffer; it's synchronous communication */
84 extern Readbuf	plumbbuf[2];	/* double buffer; it's synchronous communication */
85 extern Channel *plumbc;
86 extern Channel *hostc;
87 extern int	hversion;
88 extern int	plumbfd;
89 extern int	hostfd[2];
90 extern int	exiting;
91 extern int	autoindent;
92 
93 #define gettext sam_gettext	/* stupid gcc built-in functions */
94 Rune	*gettext(Flayer*, long, ulong*);
95 void	*alloc(ulong n);
96 
97 void	iconinit(void);
98 void	getscreen(int, char**);
99 void	initio(void);
100 void	setlock(void);
101 void	outcmd(void);
102 void	rinit(Rasp*);
103 void	startnewfile(int, Text*);
104 void	getmouse(void);
105 void	mouseunblock(void);
106 void	kbdblock(void);
107 void	extstart(void);
108 void	hoststart(void);
109 int	plumbstart(void);
110 int	button(int but);
111 int	load(char*, int);
112 int	waitforio(void);
113 int	rcvchar(void);
114 int	getch(void);
115 int	kbdchar(void);
116 int	qpeekc(void);
117 void	cut(Text*, int, int, int);
118 void	paste(Text*, int);
119 void	snarf(Text*, int);
120 int	center(Flayer*, long);
121 int	xmenuhit(int, Menu*);
122 void	buttons(int);
123 int	getr(Rectangle*);
124 void	current(Flayer*);
125 void	duplicate(Flayer*, Rectangle, Font*, int);
126 void	startfile(Text*);
127 void	panic(char*);
128 void	panic1(Display*, char*);
129 void	closeup(Flayer*);
130 void	Strgrow(Rune**, long*, int);
131 int	RESIZED(void);
132 void	resize(void);
133 void	rcv(void);
134 void	type(Flayer*, int);
135 void	menu2hit(void);
136 void	menu3hit(void);
137 void	scroll(Flayer*, int);
138 void	hcheck(int);
139 void	rclear(Rasp*);
140 int	whichmenu(int);
141 void	hcut(int, long, long);
142 void	horigin(int, long);
143 void	hgrow(int, long, long, int);
144 int	hdata(int, long, uchar*, int);
145 int	hdatarune(int, long, Rune*, int);
146 Rune	*rload(Rasp*, ulong, ulong, ulong*);
147 void	menuins(int, uchar*, Text*, int, int);
148 void	menudel(int);
149 Text	*sweeptext(int, int);
150 void	setpat(char*);
151 void	scrdraw(Flayer*, long tot);
152 int	rcontig(Rasp*, ulong, ulong, int);
153 int	rmissing(Rasp*, ulong, ulong);
154 void	rresize(Rasp *, long, long, long);
155 void	rdata(Rasp*, long, long, Rune*);
156 void	rclean(Rasp*);
157 void	scrorigin(Flayer*, int, long);
158 long	scrtotal(Flayer*);
159 void	flnewlyvisible(Flayer*);
160 char	*rcvstring(void);
161 void	Strcpy(Rune*, Rune*);
162 void	Strncpy(Rune*, Rune*, long);
163 void	flushtyping(int);
164 void	dumperrmsg(int, int, int, int);
165 int	screensize(int*,int*);
166 void	getmouse(void);
167 
168 #include "mesg.h"
169 
170 void	outTs(Tmesg, int);
171 void	outT0(Tmesg);
172 void	outTl(Tmesg, long);
173 void	outTslS(Tmesg, int, long, Rune*);
174 void	outTsll(Tmesg, int, long, long);
175 void	outTsl(Tmesg, int, long);
176 void	outTsv(Tmesg, int, vlong);
177 void	outTv(Tmesg, vlong);
178 void	outstart(Tmesg);
179 void	outcopy(int, uchar*);
180 void	outshort(int);
181 void	outlong(long);
182 void	outvlong(vlong);
183 void	outsend(void);
184