Annotation of 43BSD/contrib/notes/src/structs.h, revision 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.