Annotation of 43BSDTahoe/new/notes/src/structs.h, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: 
                      3: #if    defined(RCSIDENT) && defined(MAINLINE)
                      4: static char zzstructs[] = "$Header: structs.h,v 1.7.0.1 85/03/17 20:57:42 notes Rel $";
                      5: #endif defined(RCSIDENT) && defined(MAINLINE)
                      6: 
                      7: /*
                      8:  *     structure definitions for the notesfile program.
                      9:  *
                     10:  *     Constants/definitions likely to change with different
                     11:  *     kernels are included in the file "parms.h".
                     12:  */
                     13: 
                     14: 
                     15: #define        TRUE    1                                       /* pretty euphemisms */
                     16: #define        FALSE   0
                     17: #define        NEVER   (-1)                                    /* expiration stuff */
                     18: #define        EDIT    TRUE                                    /* whether to edit or */
                     19: #define        NOEDIT  FALSE                                   /* not to edit */
                     20: 
                     21: #ifdef UID8                                            /* 8 bit uids */
                     22: #define                UIDMASK 0377                            /* mask 8 bit uids */
                     23: #define                GIDMASK 0377                            /* mask 8 bit gids */
                     24: #else  ! defined(UID8)                                 /* 16 bit uids */
                     25: #define                UIDMASK 0177777                         /* mask out high UID bits */
                     26: #define                GIDMASK 0177777                         /* mask out high GID bits */
                     27: #endif ! defined(UID8)
                     28: 
                     29: #define                NETLOG  "net.log"                       /* network logfile */
                     30: #define                GRIPES  "nfgripes"                      /* gripe notesfile */
                     31: #define                UTILITY ".utilities"                    /* utility directory */
                     32: #define                LOCKS   ".locks"                        /* lock directory */
                     33: #define                SEQUENCER ".sequencer"                  /* sequencer files */
                     34: #define                SEQ     ".SEQ"                          /* next d_nfnum */
                     35: #define                INDXHLP "index.help"                    /* index page help */
                     36: #define                RDMHLP  "read.help"                     /* readem page help file */
                     37: #define                LIMHLP  "lim.help"                      /* help for limited index */
                     38: #define                ACCHLP  "access.help"                   /* for access editor */
                     39: #define                DIRHLP  "dir.help"                      /* for director options */
                     40: #define                AVAILHLP "avail.notes"                  /* list of public notefiles */
                     41: #define                NFCOMMENT "nfcomment"                   /* nfcomment routine */
                     42: #define                ARCHALIAS "Archive-into"                /* archive mapping */
                     43: 
                     44: #define                TEXT    "text"                          /* name of text file */
                     45: #define                INDEXN  "note.indx"                     /* master index */
                     46: #define                INDEXR  "resp.indx"                     /* response chains */
                     47: #define                ACCESS  "access"                        /* access lists here */
                     48: #define                ARCHIVE "archive"                       /* archive sub-dir */
                     49: #define                COMPRESS "comp."                        /* compress names */
                     50: #define                SEQLOCK         's'                     /* .SEQ lock */
                     51: #define                LOGLOCK         'l'                     /* log file locking */
                     52: #define                ARCHLOCK        'a'                     /* archiving */
                     53: #define                TXTLOCK         't'                     /* text file */
                     54: #define                DSCRLOCK        'n'                     /* index file */
                     55: 
                     56: #define                RESPSZ  5                               /* number responses/response record */
                     57: #define                NAMESZ  17                              /* longest user name */
                     58: #define                HOMESYSSZ       33                      /* user home system */
                     59: #define                SYSSZ   33                              /* system name length */
                     60:                                                        /* above hold null byte also */
                     61: #define                BUFSIZE 1024                            /* chars in core */
                     62: 
                     63: /*
                     64:  *     pick an appropriate default for the maximum message length
                     65:  *     (MAXMSG). Also pick an appropriate hard limit. (HARDMAX)
                     66:  *     HARDMAX must leave room for a one line message of up to 50
                     67:  *     bytes of the form "ignoring %ld excess bytes"
                     68:  */
                     69: #ifdef BIGTEXT
                     70: #define                MAXMSG  100000                          /* can be larger */
                     71: #define                HARDMAX 3000000                         /* 3 Mbytes */
                     72: #else  NOT BIGTEXT
                     73: #define                MAXMSG  65000                           /* not much larger */
                     74: #define                HARDMAX 65000                           /* room for mesage */
                     75: #endif NOT BIGTEXT
                     76: #define                PAGESAV 50                              /* display stack */
                     77:                                                        /* using unsigned short */
                     78: #define                UNIQPLEX 100000                         /* multiplex nfid into noteid */
                     79:                                                        /* see putnote and putresp */
                     80: 
                     81: #define                TITLEN  36                              /* note title length */
                     82: #define                NNLEN   40                              /* Notesfile Name length */
                     83: #define                DMLEN   40                              /* director message length */
                     84: #define                NOT     ~                               /* tilde, prints wrong on hazeltines */
                     85: #define                WDLEN   128                             /* longest file name */
                     86: #define                CMDLEN  512                             /* build-a-command */
                     87: #define                PASSWDLEN 128                           /* longest line in /etc/passwd */
                     88: #define                DATELEN 24                              /* length of formatted date */
                     89: #define                NPERMS  35                              /* max access list */
                     90: /*
                     91:  *     NPERMS can be increased as desired. However, a static array is
                     92:  *     allocated based on this constant. Watch it if you are running in
                     93:  *     a memory starved environment (like an 11/60).
                     94:  */
                     95: #define                PAGELEN 56                              /* pagelength for 'S' */
                     96: 
                     97: #define                ANONOK     01                           /* permit anon notes */
                     98: #define                FRMNEWS    01                           /* non-nf article */
                     99: #define                OPEN       02                           /* open for public */
                    100: #define                DIRMES     04                           /* director msg on */
                    101: #define                DELETED    010                          /* is deleted */
                    102: #define                NFINVALID  010                          /* got bad copy */
                    103: #define                NETWRKD    020                          /* networking OK */
                    104: #define                CONTINUED  040                          /* was auto-split */
                    105: #define                WRITONLY   0100                         /* writeonly access when written */
                    106: #define                ORPHND     0200                         /* foster parent */
                    107: #define                ISARCH     0400                         /* is an archive */
                    108: 
                    109: /*     change these only after modifying the table in access.c         */
                    110: #define                READOK  01                              /* allow user to read */
                    111: #define                WRITOK  02                              /* allow user to write */
                    112: #define                DRCTOK  04                              /* allow user to be director */
                    113: #define                RESPOK  010                             /* ok to respond */
                    114: /*
                    115:  *     archive writing keyed on director status for now...
                    116:  */
                    117: #define                ARCHWRITOK  020                         /* archive write */
                    118: #define                ARCHRESPOK 040                          /* archive response */
                    119: #define                DFLTPERMS (READOK+WRITOK+RESPOK)        /* default permissions */
                    120: 
                    121: #define                PERMUSER        00                      /* perm_f entry type */
                    122: #define                PERMGROUP       01                      /* ORDER IS IMPORTANT */
                    123: #define                PERMSYSTEM      02
                    124: 
                    125: 
                    126: /*
                    127:  *     Sequencer modes.
                    128:  *     modes < NOREADSEQ cause the time to be taken from "Basetime"
                    129:  *     modes < NOWRITESEQ cause no update when leaving the notesfile.
                    130:  *     There is currently no way to read from the sequencer file
                    131:  *             and not update -- it's a wierd case anyway.
                    132:  */
                    133: 
                    134: #define                NOSEQ           0                       /* no sequencer */
                    135: #define                USERSEQ         1                       /* usertime noupdate */
                    136: 
                    137: #define                NOWRITESEQ      10                      /* < this no write */
                    138: #define                BASESEQ         11                      /* usertime & update */
                    139: 
                    140: #define                NOREADSEQ       100                     /* use Basetime if < */
                    141: #define                NORMSEQ         101                     /* normal sequencer */
                    142: #define                EXTSEQ          102                     /* enter anyway */
                    143: #define                INDXSEQ         103                     /* index sequencer */
                    144:                                                        /*  from harpo!mmp */
                    145: 
                    146: #define                QUITSEQ         -2                      /* quit, update sequencer */
                    147: #define                QUITNOSEQ       -3                      /* quit, no seq update */
                    148: #define                QUITFAST        -4                      /* quit almost abort */
                    149: #define                QUITUPD         -5                      /* like quitfast */
                    150: #define                QUITNEX         -6                      /* no notesfile */
                    151: #define                QUITBAD         -7                      /* bad notesfile */
                    152: 
                    153: #define                GOOD            0                       /* good exit status */
                    154: #define                BAD             1                       /* bad exit status */
                    155: #define                NONF            2                       /* no notefile */
                    156: 
                    157: #define                POLICY          1                       /* mnemonics */
                    158: #define                NOPOLICY        0                       /* used in calls */
                    159: #define                LOCKIT          1                       /* Do not change */
                    160: #define                NOLOCKIT        0
                    161: #define                COPYID          1
                    162: #define                NOCOPYID        0
                    163: #define                ADDID           1
                    164: #define                NOADDID         0
                    165: #define                ADDTIME         1
                    166: #define                NOADDTIME       0
                    167: #define                DETAIL          1                       /* dump extra info */
                    168: #define                NODETAIL        0                       /* used for generic form */
                    169: 
                    170: /*
                    171:  *     These defines are for the archiver. They are used for determining
                    172:  *     eligibility for archival along with the age of the note.
                    173:  *     DFLT means to use whatever value was supplied on the archive
                    174:  *     command line.  The others mean the notesfile is configured
                    175:  *     for a specific archival setup.
                    176:  */
                    177: 
                    178: #define                DIRDFLT         0                       /* use cmd line */
                    179: #define                DIRNOCARE       1                       /* don't check dir */
                    180: #define                DIRON           2                       /* only if dir on */
                    181: #define                DIROFF          3                       /* only if dir off */
                    182: 
                    183: #define                KEEPDFLT        0                       /* use cmd line */
                    184: #define                KEEPNO          1                       /* delete 'em */
                    185: #define                KEEPYES         2                       /* archive 'em */
                    186: 
                    187: struct auth_f                                          /* how we id author */
                    188: {
                    189:     char    aname[NAMESZ];                             /* his name */
                    190:     char    asystem[HOMESYSSZ];                                /* his system */
                    191:     int     aid;                                       /* uid (if local) */
                    192: };
                    193: 
                    194: struct when_f                                          /* standard date structure */
                    195: {
                    196:     short   w_year;
                    197:     short   w_month;
                    198:     short   w_day;
                    199:     short   w_hours;
                    200:     short   w_mins;
                    201:     long    w_gmttime;                                 /* stock unix time */
                    202: };
                    203: 
                    204: struct id_f                                            /* unique id for notes */
                    205: {
                    206:     char    sys[SYSSZ];
                    207:     long    uniqid;
                    208: };
                    209: 
                    210: struct perm_f                                          /* permission tables */
                    211: {
                    212:     short   ptype;                                     /* user, group, system */
                    213:     char    name[NAMESZ];                              /* name of such */
                    214:     short   perms;                                     /* what he is allowed */
                    215: };
                    216: 
                    217: struct daddr_f                                         /* save a disk address */
                    218: {
                    219:     long    addr;                                      /* for lseeks */
                    220: #ifdef BIGTEXT
                    221:     unsigned long   textlen;                           /* how long is text */
                    222: #else  NOT BIGTEXT
                    223:     unsigned short  textlen;                           /* how long the text is */
                    224: #endif NOT BIGTEXT
                    225: };
                    226: 
                    227: struct txtbuf_f
                    228: {
                    229:     char    txtbuf[BUFSIZE];                           /* hold a bunch of characters */
                    230: };
                    231: 
                    232: struct dsply_f
                    233: {
                    234:     struct daddr_f  d_head;                            /* text start */
                    235:     struct txtbuf_f d_buf;
                    236:     int     optr,
                    237:             olim;                                      /* output index and end of buffer */
                    238:     long    outcount;                                  /* number of characters dumped */
                    239: };
                    240: 
                    241: struct resp_f                                          /* for each response: */
                    242: {
                    243:     short   r_first,                                   /* bounds of this */
                    244:             r_last;                                    /* resp_f block */
                    245:     struct id_f r_id[RESPSZ];                          /* system/id for each response */
                    246:     struct daddr_f  r_addr[RESPSZ];                    /* where the response is */
                    247:     struct when_f   r_when[RESPSZ];                    /* date/time of response */
                    248:     char    r_from[RESPSZ][SYSSZ];                     /* system that sent this to us */
                    249:     struct when_f   r_rcvd[RESPSZ];                    /* date/time for sequencer */
                    250:     struct auth_f   r_auth[RESPSZ];
                    251:     char    r_stat[RESPSZ];                            /* director/status flag */
                    252:     int     r_next;                                    /* index of next response_ind */
                    253:     int     r_previous;                                        /* backlinks */
                    254:                                                        /* [currently unused */
                    255: };
                    256: 
                    257: struct note_f                                          /* standard note structure: */
                    258: {
                    259:     struct id_f n_id;                                  /* unique id for this note */
                    260:     short   n_nresp;                                   /* number of responses */
                    261:     char    ntitle[TITLEN];                            /* title of note */
                    262:     struct auth_f   n_auth;                            /* note's author */
                    263:     struct when_f   n_date;                            /* note's date */
                    264:     struct when_f   n_rcvd;                            /* date we got it */
                    265:     struct when_f   n_lmod;                            /* date of last mod */
                    266:     char    n_from[SYSSZ];                             /* system that handed us the note */
                    267:     int     n_rindx;                                   /* where the first set of responses lies */
                    268:     struct daddr_f  n_addr;                            /* address of note's text on disk */
                    269:     char    n_stat;                                    /* director/status flag */
                    270: };
                    271: 
                    272: struct descr_f                                         /* for the notesfile: */
                    273: {
                    274:     long    d_format;                                  /* nf's format */
                    275:     char    d_title[NNLEN];                            /* nf's name */
                    276:     char    d_drmes[DMLEN];                            /* director message */
                    277:     short   d_plcy;                                    /* ==0 if no message */
                    278:     struct when_f   d_lastm;                           /* last modified time */
                    279:     short   d_stat;                                    /* open/closed/etc */
                    280:     short   d_nnote;                                   /* how many notes in file */
                    281:     struct id_f d_id;                                  /* sys name & unique id counter */
                    282:     struct when_f   d_lstxmit;                         /* last network transmit */
                    283:     struct when_f   d_created;                         /* creation date */
                    284:     struct when_f   d_lastuse;                         /* last day used */
                    285:     long    d_daysused;                                        /* count those days */
                    286:     long    d_rspwrit;                                 /* number of responses ever written */
                    287:     long    d_notwrit;                                 /* number of notes ever written */
                    288:     long    entries;                                   /* number of entries into the notefile */
                    289:     long    walltime;                                  /* man-seconds (?) spent in notefile */
                    290:     long    d_rspread;                                 /* number of responses read */
                    291:     long    d_notread;                                 /* and number of notes */
                    292:     long    d_rsprcvd;                                 /* network in stats */
                    293:     long    d_notrcvd;
                    294:     long    d_rspxmit;                                 /* network out stats */
                    295:     long    d_notxmit;
                    296:     long    d_notdrop;                                 /* duplicate notes recieved */
                    297:     long    d_rspdrop;                                 /* and dropped on ground */
                    298:     long    d_orphans;                                 /* orphaned responses */
                    299:     long    netwrkouts;                                        /* number of times networked out */
                    300:     long    netwrkins;                                 /* and number of networked in */
                    301:     short   d_nfnum;                                   /* unique to this notesfile */
                    302:     long    d_archtime;                                        /* archive after X days */
                    303:     long    d_workset;                                 /* working set size */
                    304:     long    d_delnote;                                 /* count deletes */
                    305:     long    d_delresp;                                 /* count resp dels */
                    306:     long    d_dmesgstat;                               /* use dirmsg for archive */
                    307:     long    d_archkeep;                                        /* keep/delete */
                    308:     long    d_adopted;                                 /* orphans adopted */
                    309:     long    d_longnote;                                        /* max per article */
                    310:     char    d_filler[20];                              /* future use ... */
                    311: };
                    312: 
                    313: struct io_f                                            /* master i/o form */
                    314: {
                    315:     int     fidtxt;                                    /* text */
                    316:     int     fidndx;                                    /* note.indx */
                    317:     int     fidrdx;                                    /* resp.indx */
                    318:     struct descr_f  descr;                             /* current descr */
                    319:                                                        /* updated by critical sections */
                    320:     char    nf[NNLEN];                                 /* last part of name */
                    321:     char    basedir[WDLEN];                            /* its directory */
                    322:     char    fullname[WDLEN];                           /* full pathname */
                    323:     char    xstring[TITLEN + 1];                       /* search string */
                    324:     char    xauthor[NAMESZ + SYSSZ + 2];               /* author search */
                    325:                                                        /* site!user\0 */
                    326:     struct when_f   stime;                             /* read notes/responses more recent than this */
                    327:     short   access;                                    /* what sort of access user has */
                    328:     int     nrspwrit;                                  /* number of responses written this entry */
                    329:     int     nnotwrit;                                  /* num of notes written */
                    330:     long    entered;                                   /* when started so can figure time in */
                    331:     int     nrspread;                                  /* how many responses he read */
                    332:     int     nnotread;                                  /* how many notes he read */
                    333:                                                        /* num read may be tough */
                    334:     int     nnotxmit;                                  /* network out stats */
                    335:     int     nrspxmit;
                    336:     int     nnotrcvd;                                  /* network in stats */
                    337:     int     nrsprcvd;
                    338:     int     nnotdrop;                                  /* duplicates rom the network */
                    339:     int     nrspdrop;
                    340:     int     norphans;                                  /* orphans rcvd */
                    341:     int     adopted;                                   /* adoptions handled */
                    342: };
                    343: 
                    344: struct seq_f                                           /* sequencer entry list form */
                    345: {
                    346:     char    nfname[NNLEN];                             /* name of notefile */
                    347:     struct when_f   lastin;                            /* last entry time */
                    348: };
                    349: 
                    350: struct nflist_f                                                /* nf's to scan */
                    351: {
                    352:     char   *nf_name;
                    353:     short   nf_active;                                 /* !'ed or not */
                    354:     short   nf_seqmode;                                        /* sequencer mode */
                    355: };
                    356: 
                    357: /*
                    358:  *     Declare global variables. The actual instantiation of these 
                    359:  *     variables is in the file startup.c
                    360:  *
                    361:  */
                    362: 
                    363: extern char *hised;                                    /* preferred editor */
                    364: extern char *hisshell;                                 /* preferred shell */
                    365: extern char *hispager;                                 /* paging program */
                    366: extern char *hismailer;                                        /* mail program */
                    367: extern int  nrows;                                     /* rows on screen */
                    368: extern int  ncols;                                     /* screen width */
                    369: extern char *histty;                                   /* tty on command */
                    370: extern int  intflag;                                   /* DEL hit recently */
                    371: extern int  globuid;                                   /* his true user id */
                    372: extern int  Notesuid;                                  /* who's god */
                    373: extern int  Anonuid;                                   /* who's not allowed */
                    374: extern int  Nindex;                                    /* index page rows */
                    375: extern int  ignoresigs;                                        /* critical section */
                    376: extern char *Mstdir;                                   /* default nf place */
                    377: extern char *System;                                   /* point to it */
                    378: extern char *Authsystem;                               /* author's system */
                    379: extern char *Invokedas;                                        /* argv[0] */
                    380: extern char Seqname[];                                 /* sequencing name */
                    381: extern struct when_f    Basetime;                      /* zero time */
                    382: 
                    383: /*
                    384:  *     Various definitions that help keep things portable.
                    385:  *     Types that various functions return, etc.
                    386:  */
                    387: 
                    388: #if    defined(USG)
                    389: extern char *strchr ();                                        /* UNIX4.0 index() */
                    390: extern char *strrchr ();                               /* UNIX4.0 rindex() */
                    391: #else
                    392: extern char *index ();                                 /* for lint */
                    393: extern char *rindex ();
                    394: #endif defined(USG)
                    395: 
                    396: /*
                    397:  *     Standard library routines that return other than "int".
                    398:  */
                    399: 
                    400: extern int  errno;                                     /* syscall errors */
                    401: extern char *sys_errlist[];                            /* errno messages */
                    402: extern int  sys_nerr;                                  /* and how many */
                    403: char   *sprintf ();                                    /* satisfy lint */
                    404: char   *getenv ();
                    405: long    lseek ();                                      /* for lint */
                    406: 
                    407: /*
                    408:  *     routines in the notesfile system that return other than
                    409:  *     "int".
                    410:  */
                    411: 
                    412: extern char *strsave ();                               /* in misc.c */
                    413: extern struct nflist_f *nextgroup ();                  /* in expand.c */
                    414: extern long pagein ();                                 /* in pagein.c */
                    415: extern long gettext ();                                        /* in gtext.c */
                    416: extern long puttrec ();                                        /* in recsio.c */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.