]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/sam/mesg.h
9bootfat: rename open() to fileinit and make it static as its really a internal funct...
[plan9front.git] / sys / src / cmd / sam / mesg.h
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  */