Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* VERSION 1 introduces plumbing
2
	2 increases SNARFSIZE from 4096 to 32000
3
 */
4
#define	VERSION	2
5
 
6
#define	TBLOCKSIZE 512		  /* largest piece of text sent to terminal */
7
#define	DATASIZE  (UTFmax*TBLOCKSIZE+30) /* ... including protocol header stuff */
8
#define	SNARFSIZE 32000		/* maximum length of exchanged snarf buffer, must fit in 15 bits */
9
/*
10
 * Messages originating at the terminal
11
 */
12
typedef enum Tmesg
13
{
14
	Tversion,	/* version */
15
	Tstartcmdfile,	/* terminal just opened command frame */
16
	Tcheck,		/* ask host to poke with Hcheck */
17
	Trequest,	/* request data to fill a hole */
18
	Torigin,	/* gimme an Horigin near here */
19
	Tstartfile,	/* terminal just opened a file's frame */
20
	Tworkfile,	/* set file to which commands apply */
21
	Ttype,		/* add some characters, but terminal already knows */
22
	Tcut,
23
	Tpaste,
24
	Tsnarf,
25
	Tstartnewfile,	/* terminal just opened a new frame */
26
	Twrite,		/* write file */
27
	Tclose,		/* terminal requests file close; check mod. status */
28
	Tlook,		/* search for literal current text */
29
	Tsearch,	/* search for last regular expression */
30
	Tsend,		/* pretend he typed stuff */
31
	Tdclick,	/* double click */
32
	Tstartsnarf,	/* initiate snarf buffer exchange */
33
	Tsetsnarf,	/* remember string in snarf buffer */
34
	Tack,		/* acknowledge Hack */
35
	Texit,		/* exit */
36
	Tplumb,		/* send plumb message */
37
	TMAX,
38
}Tmesg;
39
/*
40
 * Messages originating at the host
41
 */
42
typedef enum Hmesg
43
{
44
	Hversion,	/* version */
45
	Hbindname,	/* attach name[0] to text in terminal */
46
	Hcurrent,	/* make named file the typing file */
47
	Hnewname,	/* create "" name in menu */
48
	Hmovname,	/* move file name in menu */
49
	Hgrow,		/* insert space in rasp */
50
	Hcheck0,	/* see below */
51
	Hcheck,		/* ask terminal to check whether it needs more data */
52
	Hunlock,	/* command is finished; user can do things */
53
	Hdata,		/* store this data in previously allocated space */
54
	Horigin,	/* set origin of file/frame in terminal */
55
	Hunlockfile,	/* unlock file in terminal */
56
	Hsetdot,	/* set dot in terminal */
57
	Hgrowdata,	/* Hgrow + Hdata folded together */
58
	Hmoveto,	/* scrolling, context search, etc. */
59
	Hclean,		/* named file is now 'clean' */
60
	Hdirty,		/* named file is now 'dirty' */
61
	Hcut,		/* remove space from rasp */
62
	Hsetpat,	/* set remembered regular expression */
63
	Hdelname,	/* delete file name from menu */
64
	Hclose,		/* close file and remove from menu */
65
	Hsetsnarf,	/* remember string in snarf buffer */
66
	Hsnarflen,	/* report length of implicit snarf */
67
	Hack,		/* request acknowledgement */
68
	Hexit,
69
	Hplumb,		/* return plumb message to terminal - version 1 */
70
	HMAX,
71
}Hmesg;
72
typedef struct Header{
73
	uchar	type;		/* one of the above */
74
	uchar	count0;		/* low bits of data size */
75
	uchar	count1;		/* high bits of data size */
76
	uchar	data[1];	/* variable size */
77
}Header;
78
 
79
/*
80
 * File transfer protocol schematic, a la Holzmann
81
 * #define N	6
82
 * 
83
 * chan h = [4] of { mtype };
84
 * chan t = [4] of { mtype };
85
 * 
86
 * mtype = {	Hgrow, Hdata,
87
 * 		Hcheck, Hcheck0,
88
 * 		Trequest, Tcheck,
89
 * 	};
90
 * 
91
 * active proctype host()
92
 * {	byte n;
93
 * 
94
 * 	do
95
 * 	:: n <  N -> n++; t!Hgrow
96
 * 	:: n == N -> n++; t!Hcheck0
97
 * 
98
 * 	:: h?Trequest -> t!Hdata
99
 * 	:: h?Tcheck   -> t!Hcheck
100
 * 	od
101
 * }
102
 * 
103
 * active proctype term()
104
 * {
105
 * 	do
106
 * 	:: t?Hgrow   -> h!Trequest
107
 * 	:: t?Hdata   -> skip
108
 * 	:: t?Hcheck0 -> h!Tcheck
109
 * 	:: t?Hcheck  ->
110
 * 		if
111
 * 		:: h!Trequest -> progress: h!Tcheck
112
 * 		:: break
113
 * 		fi
114
 * 	od;
115
 * 	printf("term exits\n")
116
 * }
117
 *
118
 * From: gerard@research.bell-labs.com
119
 * Date: Tue Jul 17 13:47:23 EDT 2001
120
 * To: rob@research.bell-labs.com
121
 * 
122
 * spin -c 	(or -a) spec
123
 * pcc -DNP -o pan pan.c
124
 * pan -l
125
 * 
126
 * proves that there are no non-progress cycles
127
 * (infinite executions *not* passing through
128
 * the statement marked with a label starting
129
 * with the prefix "progress")
130
 * 
131
 */