URI:
       tdat.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdat.h (11755B)
       ---
            1 enum
            2 {
            3         Qdir,
            4         Qacme,
            5         Qcons,
            6         Qconsctl,
            7         Qdraw,
            8         Qeditout,
            9         Qindex,
           10         Qlabel,
           11         Qlog,
           12         Qnew,
           13 
           14         QWaddr,
           15         QWbody,
           16         QWctl,
           17         QWdata,
           18         QWeditout,
           19         QWerrors,
           20         QWevent,
           21         QWrdsel,
           22         QWwrsel,
           23         QWtag,
           24         QWxdata,
           25         QMAX
           26 };
           27 
           28 enum
           29 {
           30         Blockincr =        256,
           31         Maxblock =         8*1024,
           32         NRange =                10,
           33         Infinity =                 0x7FFFFFFF        /* huge value for regexp address */
           34 };
           35 
           36 #define Buffer AcmeBuffer
           37 typedef        struct        Block Block;
           38 typedef        struct        Buffer Buffer;
           39 typedef        struct        Command Command;
           40 typedef        struct        Column Column;
           41 typedef        struct        Dirlist Dirlist;
           42 typedef        struct        Dirtab Dirtab;
           43 typedef        struct        Disk Disk;
           44 typedef        struct        Expand Expand;
           45 typedef        struct        Fid Fid;
           46 typedef        struct        File File;
           47 typedef        struct        Elog Elog;
           48 typedef        struct        Mntdir Mntdir;
           49 typedef        struct        Range Range;
           50 typedef        struct        Rangeset Rangeset;
           51 typedef        struct        Reffont Reffont;
           52 typedef        struct        Row Row;
           53 typedef        struct        Runestr Runestr;
           54 typedef        struct        Text Text;
           55 typedef        struct        Timer Timer;
           56 typedef        struct        Window Window;
           57 typedef        struct        Xfid Xfid;
           58 
           59 struct Runestr
           60 {
           61         Rune        *r;
           62         int        nr;
           63 };
           64 
           65 struct Range
           66 {
           67         int        q0;
           68         int        q1;
           69 };
           70 
           71 struct Block
           72 {
           73         vlong                addr;        /* disk address in bytes */
           74         union
           75         {
           76                 uint        n;                /* number of used runes in block */
           77                 Block        *next;        /* pointer to next in free list */
           78         } u;
           79 };
           80 
           81 struct Disk
           82 {
           83         int                fd;
           84         vlong                addr;        /* length of temp file */
           85         Block        *free[Maxblock/Blockincr+1];
           86 };
           87 
           88 Disk*        diskinit(void);
           89 Block*        disknewblock(Disk*, uint);
           90 void                diskrelease(Disk*, Block*);
           91 void                diskread(Disk*, Block*, Rune*, uint);
           92 void                diskwrite(Disk*, Block**, Rune*, uint);
           93 
           94 struct Buffer
           95 {
           96         uint        nc;
           97         Rune        *c;                        /* cache */
           98         uint        cnc;                        /* bytes in cache */
           99         uint        cmax;                /* size of allocated cache */
          100         uint        cq;                        /* position of cache */
          101         int                cdirty;        /* cache needs to be written */
          102         uint        cbi;                        /* index of cache Block */
          103         Block        **bl;                /* array of blocks */
          104         uint        nbl;                        /* number of blocks */
          105 };
          106 void                bufinsert(Buffer*, uint, Rune*, uint);
          107 void                bufdelete(Buffer*, uint, uint);
          108 uint                bufload(Buffer*, uint, int, int*, DigestState*);
          109 void                bufread(Buffer*, uint, Rune*, uint);
          110 void                bufclose(Buffer*);
          111 void                bufreset(Buffer*);
          112 
          113 struct Elog
          114 {
          115         short        type;                /* Delete, Insert, Filename */
          116         uint                q0;                /* location of change (unused in f) */
          117         uint                nd;                /* number of deleted characters */
          118         uint                nr;                /* # runes in string or file name */
          119         Rune                *r;
          120 };
          121 void        elogterm(File*);
          122 void        elogclose(File*);
          123 void        eloginsert(File*, int, Rune*, int);
          124 void        elogdelete(File*, int, int);
          125 void        elogreplace(File*, int, int, Rune*, int);
          126 void        elogapply(File*);
          127 
          128 struct File
          129 {
          130         Buffer        b;                        /* the data */
          131         Buffer        delta;        /* transcript of changes */
          132         Buffer        epsilon;        /* inversion of delta for redo */
          133         Buffer        *elogbuf;        /* log of pending editor changes */
          134         Elog                elog;                /* current pending change */
          135         Rune                *name;        /* name of associated file */
          136         int                nname;        /* size of name */
          137         uvlong        qidpath;        /* of file when read */
          138         ulong        mtime;        /* of file when read */
          139         int                dev;                /* of file when read */
          140         uchar        sha1[20];        /* of file when read */
          141         int                unread;        /* file has not been read from disk */
          142         int                editclean;        /* mark clean after edit command */
          143 
          144         int                seq;                /* if seq==0, File acts like Buffer */
          145         int                mod;
          146         Text                *curtext;        /* most recently used associated text */
          147         Text                **text;        /* list of associated texts */
          148         int                ntext;
          149         int                dumpid;        /* used in dumping zeroxed windows */
          150 };
          151 File*                fileaddtext(File*, Text*);
          152 void                fileclose(File*);
          153 void                filedelete(File*, uint, uint);
          154 void                filedeltext(File*, Text*);
          155 void                fileinsert(File*, uint, Rune*, uint);
          156 uint                fileload(File*, uint, int, int*, DigestState*);
          157 void                filemark(File*);
          158 void                filereset(File*);
          159 void                filesetname(File*, Rune*, int);
          160 void                fileundelete(File*, Buffer*, uint, uint);
          161 void                fileuninsert(File*, Buffer*, uint, uint);
          162 void                fileunsetname(File*, Buffer*);
          163 void                fileundo(File*, int, uint*, uint*);
          164 uint                fileredoseq(File*);
          165 
          166 enum        /* Text.what */
          167 {
          168         Columntag,
          169         Rowtag,
          170         Tag,
          171         Body
          172 };
          173 
          174 struct Text
          175 {
          176         File                *file;
          177         Frame        fr;
          178         Reffont        *reffont;
          179         uint        org;
          180         uint        q0;
          181         uint        q1;
          182         int        what;
          183         int        tabstop;
          184         Window        *w;
          185         Rectangle scrollr;
          186         Rectangle lastsr;
          187         Rectangle all;
          188         Row                *row;
          189         Column        *col;
          190 
          191         uint        iq1;        /* last input position */
          192         uint        eq0;        /* start of typing for ESC */
          193         uint        cq0;        /* cache position */
          194         int                ncache;        /* storage for insert */
          195         int                ncachealloc;
          196         Rune        *cache;
          197         int        nofill;
          198         int        needundo;
          199 };
          200 
          201 uint                textbacknl(Text*, uint, uint);
          202 uint                textbsinsert(Text*, uint, Rune*, uint, int, int*);
          203 int                textbswidth(Text*, Rune);
          204 int                textclickhtmlmatch(Text*, uint*, uint*);
          205 int                textclickmatch(Text*, int, int, int, uint*);
          206 void                textclose(Text*);
          207 void                textcolumnate(Text*, Dirlist**, int);
          208 void                textcommit(Text*, int);
          209 void                textconstrain(Text*, uint, uint, uint*, uint*);
          210 void                textdelete(Text*, uint, uint, int);
          211 void                textdoubleclick(Text*, uint*, uint*);
          212 void                textfill(Text*);
          213 void                textframescroll(Text*, int);
          214 void                textinit(Text*, File*, Rectangle, Reffont*, Image**);
          215 void                textinsert(Text*, uint, Rune*, uint, int);
          216 int                textload(Text*, uint, char*, int);
          217 Rune                textreadc(Text*, uint);
          218 void                textredraw(Text*, Rectangle, Font*, Image*, int);
          219 void                textreset(Text*);
          220 int                textresize(Text*, Rectangle, int);
          221 void                textscrdraw(Text*);
          222 void                textscroll(Text*, int);
          223 void                textselect(Text*);
          224 int                textselect2(Text*, uint*, uint*, Text**);
          225 int                textselect23(Text*, uint*, uint*, Image*, int);
          226 int                textselect3(Text*, uint*, uint*);
          227 void                textsetorigin(Text*, uint, int);
          228 void                textsetselect(Text*, uint, uint);
          229 void                textshow(Text*, uint, uint, int);
          230 void                texttype(Text*, Rune);
          231 
          232 struct Window
          233 {
          234         QLock        lk;
          235         Ref        ref;
          236         Text                tag;
          237         Text                body;
          238         Rectangle        r;
          239         uchar        isdir;
          240         uchar        isscratch;
          241         uchar        filemenu;
          242         uchar        dirty;
          243         uchar        autoindent;
          244         uchar        showdel;
          245         int                id;
          246         Range        addr;
          247         Range        limit;
          248         uchar        nopen[QMAX];
          249         uchar        nomark;
          250         Range        wrselrange;
          251         int                rdselfd;
          252         Column        *col;
          253         Xfid                *eventx;
          254         char                *events;
          255         int                nevents;
          256         int                owner;
          257         int                maxlines;
          258         Dirlist        **dlp;
          259         int                ndl;
          260         int                putseq;
          261         int                nincl;
          262         Rune                **incl;
          263         Reffont        *reffont;
          264         QLock        ctllock;
          265         uint                ctlfid;
          266         char                *dumpstr;
          267         char                *dumpdir;
          268         int                dumpid;
          269         int                utflastqid;
          270         int                utflastboff;
          271         int                utflastq;
          272         int                tagsafe;                /* taglines is correct */
          273         int                tagexpand;
          274         int                taglines;
          275         Rectangle        tagtop;
          276         QLock        editoutlk;
          277 };
          278 
          279 void        wininit(Window*, Window*, Rectangle);
          280 void        winlock(Window*, int);
          281 void        winlock1(Window*, int);
          282 void        winunlock(Window*);
          283 void        wintype(Window*, Text*, Rune);
          284 void        winundo(Window*, int);
          285 void        winsetname(Window*, Rune*, int);
          286 void        winsettag(Window*);
          287 void        winsettag1(Window*);
          288 void        wincommit(Window*, Text*);
          289 int        winresize(Window*, Rectangle, int, int);
          290 void        winclose(Window*);
          291 void        windelete(Window*);
          292 int        winclean(Window*, int);
          293 void        windirfree(Window*);
          294 void        winevent(Window*, char*, ...);
          295 void        winmousebut(Window*);
          296 void        winaddincl(Window*, Rune*, int);
          297 void        wincleartag(Window*);
          298 char        *winctlprint(Window*, char*, int);
          299 
          300 struct Column
          301 {
          302         Rectangle r;
          303         Text        tag;
          304         Row                *row;
          305         Window        **w;
          306         int                nw;
          307         int                safe;
          308 };
          309 
          310 void                colinit(Column*, Rectangle);
          311 Window*        coladd(Column*, Window*, Window*, int);
          312 void                colclose(Column*, Window*, int);
          313 void                colcloseall(Column*);
          314 void                colresize(Column*, Rectangle);
          315 Text*        colwhich(Column*, Point);
          316 void                coldragwin(Column*, Window*, int);
          317 void                colgrow(Column*, Window*, int);
          318 int                colclean(Column*);
          319 void                colsort(Column*);
          320 void                colmousebut(Column*);
          321 
          322 struct Row
          323 {
          324         QLock        lk;
          325         Rectangle r;
          326         Text        tag;
          327         Column        **col;
          328         int                ncol;
          329 
          330 };
          331 
          332 void                rowinit(Row*, Rectangle);
          333 Column*        rowadd(Row*, Column *c, int);
          334 void                rowclose(Row*, Column*, int);
          335 Text*        rowwhich(Row*, Point);
          336 Column*        rowwhichcol(Row*, Point);
          337 void                rowresize(Row*, Rectangle);
          338 Text*        rowtype(Row*, Rune, Point);
          339 void                rowdragcol(Row*, Column*, int but);
          340 int                rowclean(Row*);
          341 void                rowdump(Row*, char*);
          342 int                rowload(Row*, char*, int);
          343 void                rowloadfonts(char*);
          344 
          345 struct Timer
          346 {
          347         int                dt;
          348         int                cancel;
          349         Channel        *c;        /* chan(int) */
          350         Timer        *next;
          351 };
          352 
          353 struct Command
          354 {
          355         int                pid;
          356         Rune                *name;
          357         int                nname;
          358         char                *text;
          359         char                **av;
          360         int                iseditcmd;
          361         Mntdir        *md;
          362         Command        *next;
          363 };
          364 
          365 struct Dirtab
          366 {
          367         char        *name;
          368         uchar        type;
          369         uint        qid;
          370         uint        perm;
          371 };
          372 
          373 struct Mntdir
          374 {
          375         int                id;
          376         int                ref;
          377         Rune                *dir;
          378         int                ndir;
          379         Mntdir        *next;
          380         int                nincl;
          381         Rune                **incl;
          382 };
          383 
          384 struct Fid
          385 {
          386         int                fid;
          387         int                busy;
          388         int                open;
          389         Qid                qid;
          390         Window        *w;
          391         Dirtab        *dir;
          392         Fid                *next;
          393         Mntdir        *mntdir;
          394         int                nrpart;
          395         uchar        rpart[UTFmax];
          396         vlong        logoff;        // for putlog
          397 };
          398 
          399 
          400 struct Xfid
          401 {
          402         void                *arg;        /* args to xfidinit */
          403         Fcall        fcall;
          404         Xfid        *next;
          405         Channel        *c;                /* chan(void(*)(Xfid*)) */
          406         Fid        *f;
          407         uchar        *buf;
          408         int        flushed;
          409 };
          410 
          411 void                xfidctl(void *);
          412 void                xfidflush(Xfid*);
          413 void                xfidopen(Xfid*);
          414 void                xfidclose(Xfid*);
          415 void                xfidread(Xfid*);
          416 void                xfidwrite(Xfid*);
          417 void                xfidctlwrite(Xfid*, Window*);
          418 void                xfideventread(Xfid*, Window*);
          419 void                xfideventwrite(Xfid*, Window*);
          420 void                xfidindexread(Xfid*);
          421 void                xfidutfread(Xfid*, Text*, uint, int);
          422 int                xfidruneread(Xfid*, Text*, uint, uint);
          423 void                xfidlogopen(Xfid*);
          424 void                xfidlogread(Xfid*);
          425 void                xfidlogflush(Xfid*);
          426 void                xfidlog(Window*, char*);
          427 
          428 struct Reffont
          429 {
          430         Ref        ref;
          431         Font        *f;
          432 
          433 };
          434 Reffont        *rfget(int, int, int, char*);
          435 void                rfclose(Reffont*);
          436 
          437 struct Rangeset
          438 {
          439         Range        r[NRange];
          440 };
          441 
          442 struct Dirlist
          443 {
          444         Rune        *r;
          445         int                nr;
          446         int                wid;
          447 };
          448 
          449 struct Expand
          450 {
          451         uint        q0;
          452         uint        q1;
          453         Rune        *name;
          454         int        nname;
          455         char        *bname;
          456         int        jump;
          457         union{
          458                 Text        *at;
          459                 Rune        *ar;
          460         } u;
          461         int        (*agetc)(void*, uint);
          462         int        a0;
          463         int        a1;
          464 };
          465 
          466 enum
          467 {
          468         /* fbufalloc() guarantees room off end of BUFSIZE */
          469         BUFSIZE = Maxblock+IOHDRSZ,        /* size from fbufalloc() */
          470         RBUFSIZE = BUFSIZE/sizeof(Rune),
          471         EVENTSIZE = 256,
          472 };
          473 
          474 #define Scrollwid scalesize(display, 12)
          475 #define Scrollgap scalesize(display, 4)
          476 #define Margin scalesize(display, 4)
          477 #define Border scalesize(display, 2)
          478 #define ButtonBorder scalesize(display, 2)
          479 
          480 #define        QID(w,q)        ((w<<8)|(q))
          481 #define        WIN(q)        ((((ulong)(q).path)>>8) & 0xFFFFFF)
          482 #define        FILE(q)        ((q).path & 0xFF)
          483 
          484 #undef FALSE
          485 #undef TRUE
          486 
          487 enum
          488 {
          489         FALSE,
          490         TRUE,
          491         XXX
          492 };
          493 
          494 enum
          495 {
          496         Empty        = 0,
          497         Null                = '-',
          498         Delete        = 'd',
          499         Insert        = 'i',
          500         Replace        = 'r',
          501         Filename        = 'f'
          502 };
          503 
          504 enum        /* editing */
          505 {
          506         Inactive        = 0,
          507         Inserting,
          508         Collecting
          509 };
          510 
          511 uint                globalincref;
          512 uint                seq;
          513 uint                maxtab;        /* size of a tab, in units of the '0' character */
          514 
          515 Display                *display;
          516 Image                *screen;
          517 Font                        *font;
          518 Mouse                *mouse;
          519 Mousectl                *mousectl;
          520 Keyboardctl        *keyboardctl;
          521 Reffont                reffont;
          522 Image                *modbutton;
          523 Image                *colbutton;
          524 Image                *button;
          525 Image                *but2col;
          526 Image                *but3col;
          527 Cursor                boxcursor;
          528 Cursor2                boxcursor2;
          529 Row                        row;
          530 int                        timerpid;
          531 Disk                        *disk;
          532 Text                        *seltext;
          533 Text                        *argtext;
          534 Text                        *mousetext;        /* global because Text.close needs to clear it */
          535 Text                        *typetext;                /* global because Text.close needs to clear it */
          536 Text                        *barttext;                /* shared between mousetask and keyboardthread */
          537 int                        bartflag;
          538 int                        swapscrollbuttons;
          539 Window                *activewin;
          540 Column                *activecol;
          541 Buffer                snarfbuf;
          542 Rectangle                nullrect;
          543 int                        fsyspid;
          544 char                        *cputype;
          545 char                        *objtype;
          546 char                        *home;
          547 char                        *acmeshell;
          548 char                        *fontnames[2];
          549 Image                *tagcols[NCOL];
          550 Image                *textcols[NCOL];
          551 extern char                wdir[]; /* must use extern because no dimension given */
          552 int                        editing;
          553 int                        erroutfd;
          554 int                        messagesize;                /* negotiated in 9P version setup */
          555 int                        globalautoindent;
          556 int                        dodollarsigns;
          557 char*                mtpt;
          558 
          559 enum
          560 {
          561         Kscrolloneup                = KF|0x20,
          562         Kscrollonedown        = KF|0x21
          563 };
          564 
          565 Channel        *cplumb;                /* chan(Plumbmsg*) */
          566 Channel        *cwait;                /* chan(Waitmsg) */
          567 Channel        *ccommand;        /* chan(Command*) */
          568 Channel        *ckill;                /* chan(Rune*) */
          569 Channel        *cxfidalloc;        /* chan(Xfid*) */
          570 Channel        *cxfidfree;        /* chan(Xfid*) */
          571 Channel        *cnewwindow;        /* chan(Channel*) */
          572 Channel        *mouseexit0;        /* chan(int) */
          573 Channel        *mouseexit1;        /* chan(int) */
          574 Channel        *cexit;                /* chan(int) */
          575 Channel        *cerr;                /* chan(char*) */
          576 Channel        *cedit;                /* chan(int) */
          577 Channel        *cwarn;                /* chan(void*)[1] (really chan(unit)[1]) */
          578 
          579 QLock        editoutlk;
          580 
          581 #define        STACK        65536