13e12c5d1SDavid du Colombier #define SAMTERM 23e12c5d1SDavid du Colombier 33e12c5d1SDavid du Colombier #define RUNESIZE sizeof(Rune) 43e12c5d1SDavid du Colombier #define MAXFILES 256 57dd7cddfSDavid du Colombier #define READBUFSIZE 8192 63e12c5d1SDavid du Colombier #define NL 5 73e12c5d1SDavid du Colombier 83e12c5d1SDavid du Colombier enum{ 93e12c5d1SDavid du Colombier Up, 103e12c5d1SDavid du Colombier Down 113e12c5d1SDavid du Colombier }; 123e12c5d1SDavid du Colombier 133e12c5d1SDavid du Colombier typedef struct Text Text; 143e12c5d1SDavid du Colombier typedef struct Section Section; 153e12c5d1SDavid du Colombier typedef struct Rasp Rasp; 167dd7cddfSDavid du Colombier typedef struct Readbuf Readbuf; 173e12c5d1SDavid du Colombier 183e12c5d1SDavid du Colombier struct Section 193e12c5d1SDavid du Colombier { 203e12c5d1SDavid du Colombier long nrunes; 213e12c5d1SDavid du Colombier Rune *text; /* if null, we haven't got it */ 223e12c5d1SDavid du Colombier Section *next; 233e12c5d1SDavid du Colombier }; 243e12c5d1SDavid du Colombier 253e12c5d1SDavid du Colombier struct Rasp 263e12c5d1SDavid du Colombier { 273e12c5d1SDavid du Colombier long nrunes; 283e12c5d1SDavid du Colombier Section *sect; 293e12c5d1SDavid du Colombier }; 303e12c5d1SDavid du Colombier 313e12c5d1SDavid du Colombier #define Untagged ((ushort)65535) 323e12c5d1SDavid du Colombier 333e12c5d1SDavid du Colombier struct Text 343e12c5d1SDavid du Colombier { 353e12c5d1SDavid du Colombier Rasp rasp; 363e12c5d1SDavid du Colombier short nwin; 373e12c5d1SDavid du Colombier short front; /* input window */ 383e12c5d1SDavid du Colombier ushort tag; 393e12c5d1SDavid du Colombier char lock; 403e12c5d1SDavid du Colombier Flayer l[NL]; /* screen storage */ 413e12c5d1SDavid du Colombier }; 423e12c5d1SDavid du Colombier 437dd7cddfSDavid du Colombier struct Readbuf 447dd7cddfSDavid du Colombier { 457dd7cddfSDavid du Colombier short n; /* # bytes in buf */ 467dd7cddfSDavid du Colombier uchar data[READBUFSIZE]; /* data bytes */ 477dd7cddfSDavid du Colombier }; 487dd7cddfSDavid du Colombier 493e12c5d1SDavid du Colombier enum Resource 503e12c5d1SDavid du Colombier { 517dd7cddfSDavid du Colombier RHost, 527dd7cddfSDavid du Colombier RKeyboard, 537dd7cddfSDavid du Colombier RMouse, 547dd7cddfSDavid du Colombier RPlumb, 557dd7cddfSDavid du Colombier RResize, 567dd7cddfSDavid du Colombier NRes, 573e12c5d1SDavid du Colombier }; 583e12c5d1SDavid du Colombier 596b6b9ac8SDavid du Colombier extern Text **text; 606b6b9ac8SDavid du Colombier extern uchar **name; 616b6b9ac8SDavid du Colombier extern ushort *tag; 623e12c5d1SDavid du Colombier extern int nname; 636b6b9ac8SDavid du Colombier extern int mname; 643e12c5d1SDavid du Colombier extern Cursor bullseye; 653e12c5d1SDavid du Colombier extern Cursor deadmouse; 663e12c5d1SDavid du Colombier extern Cursor lockarrow; 673e12c5d1SDavid du Colombier extern Cursor *cursor; 683e12c5d1SDavid du Colombier extern Flayer *which; 693e12c5d1SDavid du Colombier extern Flayer *work; 703e12c5d1SDavid du Colombier extern Text cmd; 713e12c5d1SDavid du Colombier extern Rune *scratch; 723e12c5d1SDavid du Colombier extern long nscralloc; 737dd7cddfSDavid du Colombier extern char hostlock; 743e12c5d1SDavid du Colombier extern char hasunlocked; 753e12c5d1SDavid du Colombier extern long snarflen; 767dd7cddfSDavid du Colombier extern Mousectl* mousectl; 777dd7cddfSDavid du Colombier extern Keyboardctl* keyboardctl; 787dd7cddfSDavid du Colombier extern Mouse* mousep; 793e12c5d1SDavid du Colombier extern long modified; 807dd7cddfSDavid du Colombier extern int maxtab; 817dd7cddfSDavid du Colombier extern Readbuf hostbuf[2]; /* double buffer; it's synchronous communication */ 827dd7cddfSDavid du Colombier extern Readbuf plumbbuf[2]; /* double buffer; it's synchronous communication */ 837dd7cddfSDavid du Colombier extern Channel *plumbc; 847dd7cddfSDavid du Colombier extern Channel *hostc; 857dd7cddfSDavid du Colombier extern int hversion; 867dd7cddfSDavid du Colombier extern int plumbfd; 87cc81b63cSDavid du Colombier extern int exiting; 88e7d29567SDavid du Colombier extern int autoindent; 893e12c5d1SDavid du Colombier 903e12c5d1SDavid du Colombier Rune *gettext(Flayer*, long, ulong*); 913e12c5d1SDavid du Colombier void *alloc(ulong n); 923e12c5d1SDavid du Colombier 933e12c5d1SDavid du Colombier void iconinit(void); 943e12c5d1SDavid du Colombier void getscreen(int, char**); 953e12c5d1SDavid du Colombier void initio(void); 963e12c5d1SDavid du Colombier void setlock(void); 973e12c5d1SDavid du Colombier void outcmd(void); 983e12c5d1SDavid du Colombier void rinit(Rasp*); 993e12c5d1SDavid du Colombier void startnewfile(int, Text*); 1003e12c5d1SDavid du Colombier void getmouse(void); 1013e12c5d1SDavid du Colombier void mouseunblock(void); 1023e12c5d1SDavid du Colombier void kbdblock(void); 103bd389b36SDavid du Colombier void extstart(void); 1047dd7cddfSDavid du Colombier void hoststart(void); 1057dd7cddfSDavid du Colombier int plumbstart(void); 1063e12c5d1SDavid du Colombier int button(int but); 1073e12c5d1SDavid du Colombier int load(char*, int); 1083e12c5d1SDavid du Colombier int waitforio(void); 1093e12c5d1SDavid du Colombier int rcvchar(void); 1103e12c5d1SDavid du Colombier int getch(void); 1113e12c5d1SDavid du Colombier int kbdchar(void); 1123e12c5d1SDavid du Colombier int qpeekc(void); 1133e12c5d1SDavid du Colombier void cut(Text*, int, int, int); 1143e12c5d1SDavid du Colombier void paste(Text*, int); 1153e12c5d1SDavid du Colombier void snarf(Text*, int); 1163e12c5d1SDavid du Colombier int center(Flayer*, long); 1173e12c5d1SDavid du Colombier int xmenuhit(int, Menu*); 1183e12c5d1SDavid du Colombier void buttons(int); 1193e12c5d1SDavid du Colombier int getr(Rectangle*); 1203e12c5d1SDavid du Colombier void current(Flayer*); 1213e12c5d1SDavid du Colombier void duplicate(Flayer*, Rectangle, Font*, int); 1223e12c5d1SDavid du Colombier void startfile(Text*); 1233e12c5d1SDavid du Colombier void panic(char*); 1247dd7cddfSDavid du Colombier void panic1(Display*, char*); 1253e12c5d1SDavid du Colombier void closeup(Flayer*); 1263e12c5d1SDavid du Colombier void Strgrow(Rune**, long*, int); 1277dd7cddfSDavid du Colombier int RESIZED(void); 1287dd7cddfSDavid du Colombier void resize(void); 1293e12c5d1SDavid du Colombier void rcv(void); 130bd389b36SDavid du Colombier void type(Flayer*, int); 1313e12c5d1SDavid du Colombier void menu2hit(void); 1323e12c5d1SDavid du Colombier void menu3hit(void); 1333e12c5d1SDavid du Colombier void scroll(Flayer*, int); 1343e12c5d1SDavid du Colombier void hcheck(int); 1353e12c5d1SDavid du Colombier void rclear(Rasp*); 1363e12c5d1SDavid du Colombier int whichmenu(int); 1373e12c5d1SDavid du Colombier void hcut(int, long, long); 1383e12c5d1SDavid du Colombier void horigin(int, long); 1393e12c5d1SDavid du Colombier void hgrow(int, long, long, int); 1403e12c5d1SDavid du Colombier int hdata(int, long, uchar*, int); 1413e12c5d1SDavid du Colombier int hdatarune(int, long, Rune*, int); 1423e12c5d1SDavid du Colombier Rune *rload(Rasp*, ulong, ulong, ulong*); 1433e12c5d1SDavid du Colombier void menuins(int, uchar*, Text*, int, int); 1443e12c5d1SDavid du Colombier void menudel(int); 1453e12c5d1SDavid du Colombier Text *sweeptext(int, int); 1463e12c5d1SDavid du Colombier void setpat(char*); 1473e12c5d1SDavid du Colombier void scrdraw(Flayer*, long tot); 1483e12c5d1SDavid du Colombier int rcontig(Rasp*, ulong, ulong, int); 1493e12c5d1SDavid du Colombier int rmissing(Rasp*, ulong, ulong); 1503e12c5d1SDavid du Colombier void rresize(Rasp *, long, long, long); 1513e12c5d1SDavid du Colombier void rdata(Rasp*, long, long, Rune*); 1523e12c5d1SDavid du Colombier void rclean(Rasp*); 1533e12c5d1SDavid du Colombier void scrorigin(Flayer*, int, long); 1543e12c5d1SDavid du Colombier long scrtotal(Flayer*); 1553e12c5d1SDavid du Colombier void flnewlyvisible(Flayer*); 1563e12c5d1SDavid du Colombier char *rcvstring(void); 1573e12c5d1SDavid du Colombier void Strcpy(Rune*, Rune*); 1583e12c5d1SDavid du Colombier void Strncpy(Rune*, Rune*, long); 1593e12c5d1SDavid du Colombier void flushtyping(int); 1603e12c5d1SDavid du Colombier void dumperrmsg(int, int, int, int); 161219b2ee8SDavid du Colombier int screensize(int*,int*); 1627dd7cddfSDavid du Colombier void getmouse(void); 1633e12c5d1SDavid du Colombier 1647dd7cddfSDavid du Colombier #include "mesg.h" 1653e12c5d1SDavid du Colombier 1663e12c5d1SDavid du Colombier void outTs(Tmesg, int); 1673e12c5d1SDavid du Colombier void outT0(Tmesg); 1683e12c5d1SDavid du Colombier void outTl(Tmesg, long); 1693e12c5d1SDavid du Colombier void outTslS(Tmesg, int, long, Rune*); 1703e12c5d1SDavid du Colombier void outTsll(Tmesg, int, long, long); 1713e12c5d1SDavid du Colombier void outTsl(Tmesg, int, long); 172*73e742d7SDavid du Colombier void outTsv(Tmesg, int, vlong); 173*73e742d7SDavid du Colombier void outTv(Tmesg, vlong); 1743e12c5d1SDavid du Colombier void outstart(Tmesg); 1753e12c5d1SDavid du Colombier void outcopy(int, uchar*); 1763e12c5d1SDavid du Colombier void outshort(int); 1773e12c5d1SDavid du Colombier void outlong(long); 178*73e742d7SDavid du Colombier void outvlong(vlong); 1793e12c5d1SDavid du Colombier void outsend(void); 180