Annotation of 43BSD/contrib/notes/src/dropt.c, revision 1.1

1.1     ! root        1: #include "parms.h"
        !             2: #include "structs.h"
        !             3: 
        !             4: #ifdef RCSIDENT
        !             5: static char rcsid[] = "$Header: dropt.c,v 1.7.0.1 85/09/09 18:31:21 notes Rel $";
        !             6: #endif RCSIDENT
        !             7: 
        !             8: #define BUFSZ  128
        !             9: 
        !            10: /*
        !            11:  *     this file processes the director options.
        !            12:  *
        !            13:  *     call: contains the io pointer to the file.
        !            14:  *
        !            15:  *     allows continued access only if the user if a director.
        !            16:  *
        !            17:  *     the functions of the director options includes:
        !            18:  *     1) granting/denial of director priviledges
        !            19:  *     2) granting/denial of regular access priviledges
        !            20:  *     3) changing the director message
        !            21:  *     4) writing a policy note
        !            22:  *
        !            23:  *     Returns: -1 normally
        !            24:  *              -4 if the user hit cntrl d ( to total exit)
        !            25:  *
        !            26:  *     original author/outliner : Ray Essick may 29, 1981
        !            27:  *
        !            28:  */
        !            29: 
        !            30: static int  anonrow,                                   /* allow anon */
        !            31:             openrow,                                   /* is open */
        !            32:             archrow,                                   /* is archive */
        !            33:             keeprow,                                   /* expire action */
        !            34:             dirmsgrow,                                 /* expire w/dirmsg */
        !            35:             netrow,                                    /* networked */
        !            36:             expirerow,                                 /* expire age */
        !            37:             longrow,                                   /* longest ok text */
        !            38:             worksetrow;                                        /* working set */
        !            39: static int  lastrow;
        !            40: 
        !            41: direct (io) struct io_f *io;
        !            42: {
        !            43:     int     i;                                         /* scratch */
        !            44:     int     c;
        !            45:     long    expires;
        !            46:     long    workset;
        !            47:     long    textlength;                                        /* scratch */
        !            48:     char    title[DMLEN + 1];                          /* hold new director message */
        !            49:     char    ntitle[NNLEN + 1];                         /* hold note file title */
        !            50:     struct note_f   note;
        !            51:     struct auth_f   auth;                              /* author of policy note */
        !            52:     struct daddr_f  where;
        !            53:     char   *r,
        !            54:             buff[BUFSZ + 1];
        !            55:     int     buffptr;
        !            56:     int     start,
        !            57:             end,
        !            58:             nnotes,
        !            59:             nresps;
        !            60:     int     redraw;                                    /* paint screen */
        !            61: 
        !            62:     if (allow (io, DRCTOK) == 0)
        !            63:     {
        !            64:        at (0, PROMPTMSGX);
        !            65:        printf ("Sorry, you are not a director");
        !            66:        fflush (stdout);
        !            67:        sleep (2);
        !            68:        return (-1);
        !            69:     }
        !            70: 
        !            71:     redraw = 1;
        !            72:     while (1)
        !            73:     {
        !            74:        if (redraw)
        !            75:            dirplot (io);
        !            76: getkey:                                                /* suck in a key */
        !            77:        at (-1, 1);
        !            78:        printf ("Option:  \010");
        !            79:        c = gchar ();                                   /* get command */
        !            80:        printf ("\010 ");                               /* overwrite the character */
        !            81:        redraw = 0;                                     /* draw if want it */
        !            82:        switch (c)
        !            83:        {
        !            84:            case '?': 
        !            85:            case 'h': 
        !            86:                help (DIRHLP);
        !            87:                redraw++;
        !            88:                break;
        !            89: 
        !            90:            case 'r':                                   /* replot the screen */
        !            91:            case '\f':                                  /* control-L also */
        !            92:                redraw++;
        !            93:                break;
        !            94: 
        !            95: #ifdef K_KEY
        !            96:            case 'k':                                   /* same as q */
        !            97: #endif K_KEY
        !            98:            case 'q':                                   /* leave */
        !            99:                return (-1);
        !           100: 
        !           101:            case '\004': 
        !           102:                return QUITFAST;                        /* Universal exit */
        !           103: 
        !           104:            case '!':                                   /* give him a shell */
        !           105:                gshell ();
        !           106:                redraw++;
        !           107:                break;
        !           108: 
        !           109:            case 'p':                                   /* run access lists */
        !           110:                if (accessedit (io) == QUITFAST)
        !           111:                    return QUITFAST;                    /* doit */
        !           112:                redraw++;
        !           113:                break;                                  /* skipt out of the loop */
        !           114: 
        !           115:            case 'a':                                   /* toggle anonymous option */
        !           116:                locknf (io, DSCRLOCK);                  /* lock the thing for a minute */
        !           117:                getdscr (io, &io -> descr);             /* get up to date descriptor */
        !           118:                if (io -> descr.d_stat & ANONOK)
        !           119:                    io -> descr.d_stat &= NOT ANONOK;
        !           120:                else
        !           121:                    io -> descr.d_stat |= ANONOK;
        !           122:                putdscr (io, &io -> descr);
        !           123:                unlocknf (io, DSCRLOCK);
        !           124:                at (anonrow, 18);
        !           125:                printf (io -> descr.d_stat & ANONOK ? "ON " : "OFF");
        !           126:                redraw = 0;
        !           127:                break;
        !           128: 
        !           129:            case 'A':                                   /* Archive option */
        !           130:                locknf (io, DSCRLOCK);                  /* lock the thing for a minute */
        !           131:                getdscr (io, &io -> descr);             /* get up to date descriptor */
        !           132:                if (io -> descr.d_stat & ISARCH)
        !           133:                    io -> descr.d_stat &= NOT ISARCH;
        !           134:                else
        !           135:                    io -> descr.d_stat |= ISARCH;
        !           136:                putdscr (io, &io -> descr);
        !           137:                unlocknf (io, DSCRLOCK);
        !           138:                at (archrow, 18);
        !           139:                printf (io -> descr.d_stat & ISARCH ? "YES" : "NO ");
        !           140:                redraw = 0;
        !           141:                break;
        !           142: 
        !           143:            case 'l':                                   /* message length */
        !           144:                while (1)
        !           145:                {
        !           146:                    at (lastrow, 10);
        !           147:                    printf ("New Maximum Message Size: ");
        !           148:                    ceol ();                            /* clear to eol */
        !           149:                    if (gline (buff, BUFSZ) == 1)       /* empty line */
        !           150:                    {
        !           151:                        at (lastrow + 1, 10);
        !           152:                        printf ("Maximum Message Size Unchanged");
        !           153:                        goto getkey;
        !           154:                    }
        !           155:                    if (sscanf (buff, "%ld", &textlength) == 1)
        !           156:                    {
        !           157:                        if (textlength <= HARDMAX)      /* too big? */
        !           158:                            break;
        !           159:                        else
        !           160:                        {
        !           161:                            at (lastrow + 1, 10);
        !           162:                            printf ("Maximum Allowed is %d", HARDMAX);
        !           163:                            continue;
        !           164:                        }
        !           165:                    }
        !           166:                    at (lastrow + 1, 10);
        !           167:                    printf ("Enter an integer or <return>");
        !           168:                }
        !           169:                locknf (io, DSCRLOCK);                  /* CRITICAL SECTION */
        !           170:                getdscr (io, &io -> descr);             /* update descriptor */
        !           171:                io -> descr.d_longnote = textlength;    /* new value */
        !           172:                putdscr (io, &io -> descr);
        !           173:                unlocknf (io, DSCRLOCK);                /* all done ... */
        !           174:                at (longrow, 27);
        !           175:                printf ("%ld bytes   ", io -> descr.d_longnote);
        !           176:                redraw = 0;
        !           177:                break;
        !           178: 
        !           179:            case 'c':                                   /* compress the notefile */
        !           180:                redraw = 0;
        !           181:                if (io -> descr.d_stat & OPEN)
        !           182:                {
        !           183:                    at (lastrow, 10);
        !           184:                    printf ("Notefile must be closed to compress");
        !           185:                    break;
        !           186:                }
        !           187:                else
        !           188:                {
        !           189:                    at (lastrow, 10);
        !           190:                    if (askyn ("Really Compress? (y/n) ") != 'y')
        !           191:                    {
        !           192:                        at (lastrow + 1, 10);
        !           193:                        printf ("Compress not done");
        !           194:                        break;
        !           195:                    }
        !           196:                    at (lastrow + 1, 1);
        !           197:                    printf ("Compressing ");
        !           198:                    if (compress (io, LOCKIT, 1, &nnotes, &nresps) >= 0)
        !           199:                    {
        !           200:                        dirplot (io);                   /* show it */
        !           201:                        at (-3, 1);
        !           202:                        printf ("Compress left %d notes and %d responses",
        !           203:                                nnotes, nresps);
        !           204:                    }
        !           205:                    else
        !           206:                    {
        !           207:                        dirplot (io);                   /* show page */
        !           208:                        at (-3, 1);
        !           209:                        printf ("Compress not done");
        !           210:                    }
        !           211:                    break;
        !           212:                }
        !           213:                break;
        !           214: 
        !           215:            case 'e':                                   /* change expiration time */
        !           216:                while (1)
        !           217:                {
        !           218:                    at (lastrow, 10);
        !           219:                    printf ("New Expiration time: ");
        !           220:                    ceol ();                            /* clear to eol */
        !           221:                    if (gline (buff, BUFSZ) == 1)       /* empty line */
        !           222:                    {
        !           223:                        at (lastrow + 1, 10);
        !           224:                        printf ("Expiration Threshold Unchanged");
        !           225:                        goto getkey;
        !           226:                    }
        !           227:                    if (!strcmp (buff, "Never") || !strcmp (buff, "never") ||
        !           228:                            !strcmp (buff, "NEVER"))
        !           229:                    {
        !           230:                        expires = NEVER;
        !           231:                        break;
        !           232:                    }
        !           233:                    if (!strcmp (buff, "Default") || !strcmp (buff, "default") ||
        !           234:                            !strcmp (buff, "DEFAULT"))
        !           235:                    {
        !           236:                        expires = 0;
        !           237:                        break;
        !           238:                    }
        !           239:                    if (sscanf (buff, "%ld", &expires) == 1)
        !           240:                    {
        !           241:                        break;
        !           242:                    }
        !           243: 
        !           244:                    at (lastrow + 1, 10);
        !           245:                    printf ("Want `default', `never', or a number");
        !           246:                    at (lastrow + 2, 10);
        !           247:                    printf ("<return> to leave unchanged");
        !           248:                }
        !           249: 
        !           250:                locknf (io, DSCRLOCK);                  /* critical section */
        !           251:                getdscr (io, &io -> descr);
        !           252:                io -> descr.d_archtime = expires;       /* update */
        !           253:                putdscr (io, &io -> descr);             /* replace */
        !           254:                unlocknf (io, DSCRLOCK);                /* leave critical */
        !           255:                at (expirerow, 27);
        !           256:                switch ((int) (io -> descr.d_archtime)) /* update screen */
        !           257:                {
        !           258:                    case NEVER: 
        !           259:                        printf ("Never       ");
        !           260:                        break;
        !           261:                    case 0: 
        !           262:                        printf ("Default     ");
        !           263:                        break;
        !           264:                    default: 
        !           265:                        printf ("%ld days     ", io -> descr.d_archtime);
        !           266:                        break;
        !           267:                }
        !           268:                redraw = 0;
        !           269:                break;
        !           270: 
        !           271:            case 'W':                                   /* working Set size */
        !           272:                while (1)
        !           273:                {
        !           274:                    at (lastrow, 10);
        !           275:                    printf ("New Working Set Size: ");
        !           276:                    ceol ();                            /* clear to eol */
        !           277:                    if (gline (buff, BUFSZ) == 1)       /* empty line */
        !           278:                    {
        !           279:                        at (lastrow + 1, 10);
        !           280:                        printf ("Working Set Size Unchanged");
        !           281:                        goto getkey;
        !           282:                    }
        !           283:                    if (!strcmp (buff, "Default") || !strcmp (buff, "default") ||
        !           284:                            !strcmp (buff, "DEFAULT"))
        !           285:                    {
        !           286:                        workset = 0;
        !           287:                        break;
        !           288:                    }
        !           289:                    if (sscanf (buff, "%ld", &workset) == 1)
        !           290:                    {
        !           291:                        break;
        !           292:                    }
        !           293: 
        !           294:                    at (lastrow + 1, 10);
        !           295:                    printf ("Want `default' or a number");
        !           296:                    at (lastrow + 2, 10);
        !           297:                    printf ("<return> to leave unchanged");
        !           298:                }
        !           299: 
        !           300:                locknf (io, DSCRLOCK);                  /* critical section */
        !           301:                getdscr (io, &io -> descr);
        !           302:                io -> descr.d_workset = workset;        /* update */
        !           303:                putdscr (io, &io -> descr);             /* replace */
        !           304:                unlocknf (io, DSCRLOCK);                /* leave critical */
        !           305:                at (worksetrow, 27);
        !           306:                switch ((int) io -> descr.d_workset)
        !           307:                {
        !           308:                    case 0: 
        !           309:                        printf ("Default      ");
        !           310:                        break;
        !           311:                    default: 
        !           312:                        printf ("%ld Notes    ", io -> descr.d_workset);
        !           313:                }
        !           314:                redraw = 0;
        !           315:                break;
        !           316: 
        !           317:            case 'E':                                   /* keep/delete/default */
        !           318:                locknf (io, DSCRLOCK);                  /* critical section */
        !           319:                getdscr (io, &io -> descr);
        !           320:                switch ((int) io -> descr.d_archkeep)   /* change it */
        !           321:                {
        !           322:                    case KEEPNO: 
        !           323:                        io -> descr.d_archkeep = KEEPYES;
        !           324:                        break;
        !           325:                    case KEEPYES: 
        !           326:                        io -> descr.d_archkeep = KEEPDFLT;
        !           327:                        break;
        !           328:                    case KEEPDFLT: 
        !           329:                    default: 
        !           330:                        io -> descr.d_archkeep = KEEPNO;
        !           331:                        break;
        !           332:                }
        !           333:                putdscr (io, &io -> descr);             /* replace */
        !           334:                unlocknf (io, DSCRLOCK);                /* leave critical */
        !           335:                at (keeprow, 27);
        !           336:                switch ((int) io -> descr.d_archkeep)   /* update display */
        !           337:                {
        !           338:                    case KEEPYES: 
        !           339:                        printf ("ARCHIVE");
        !           340:                        break;
        !           341:                    case KEEPNO: 
        !           342:                        printf ("DELETE ");
        !           343:                        break;
        !           344:                    case KEEPDFLT: 
        !           345:                        printf ("Default");
        !           346:                        break;
        !           347:                    default: 
        !           348:                        printf ("UNKNOWN");
        !           349:                        break;
        !           350:                }
        !           351:                redraw = 0;
        !           352:                break;
        !           353: 
        !           354:            case 'D':                                   /* Archive dirmsg */
        !           355:                locknf (io, DSCRLOCK);                  /* critical section */
        !           356:                getdscr (io, &io -> descr);
        !           357:                switch ((int) io -> descr.d_dmesgstat)  /* change it */
        !           358:                {
        !           359:                    case DIRNOCARE: 
        !           360:                        io -> descr.d_dmesgstat = DIRON;
        !           361:                        break;
        !           362:                    case DIRON: 
        !           363:                        io -> descr.d_dmesgstat = DIROFF;
        !           364:                        break;
        !           365:                    case DIROFF: 
        !           366:                        io -> descr.d_dmesgstat = DIRDFLT;
        !           367:                        break;
        !           368:                    case DIRDFLT: 
        !           369:                    default: 
        !           370:                        io -> descr.d_dmesgstat = DIRNOCARE;
        !           371:                        break;
        !           372:                }
        !           373:                putdscr (io, &io -> descr);             /* replace */
        !           374:                unlocknf (io, DSCRLOCK);                /* leave critical */
        !           375:                at (dirmsgrow, 27);
        !           376:                switch ((int) io -> descr.d_dmesgstat)
        !           377:                {
        !           378:                    case DIRNOCARE: 
        !           379:                        printf ("NOCARE   ");
        !           380:                        break;
        !           381:                    case DIRON: 
        !           382:                        printf ("ON       ");
        !           383:                        break;
        !           384:                    case DIROFF: 
        !           385:                        printf ("OFF      ");
        !           386:                        break;
        !           387:                    case DIRDFLT: 
        !           388:                        printf ("Default  ");
        !           389:                        break;
        !           390:                    default: 
        !           391:                        printf ("UNKNOWN  ");
        !           392:                        break;
        !           393:                }
        !           394:                redraw = 0;
        !           395:                break;
        !           396: 
        !           397:            case 'o':                                   /* toggle open status */
        !           398:                locknf (io, DSCRLOCK);
        !           399:                getdscr (io, &io -> descr);
        !           400:                if (io -> descr.d_stat & OPEN)
        !           401:                    io -> descr.d_stat &= NOT OPEN;
        !           402:                else
        !           403:                    io -> descr.d_stat |= OPEN;
        !           404:                putdscr (io, &io -> descr);
        !           405:                unlocknf (io, DSCRLOCK);
        !           406:                at (openrow, 18);
        !           407:                printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
        !           408:                redraw = 0;
        !           409:                break;
        !           410: 
        !           411:            case 'n':                                   /* toggle network status */
        !           412:                locknf (io, DSCRLOCK);
        !           413:                getdscr (io, &io -> descr);
        !           414:                if (io -> descr.d_stat & NETWRKD)
        !           415:                {
        !           416:                    io -> descr.d_stat &= NOT NETWRKD;
        !           417:                }
        !           418:                else
        !           419:                {
        !           420:                    io -> descr.d_stat |= NETWRKD;
        !           421:                }
        !           422:                putdscr (io, &io -> descr);
        !           423:                unlocknf (io, DSCRLOCK);
        !           424:                at (netrow, 18);
        !           425:                printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
        !           426:                redraw = 0;
        !           427:                break;
        !           428: 
        !           429: 
        !           430:            case 'm':                                   /* collect a new director message */
        !           431:                redraw++;
        !           432:                at (lastrow, 10);
        !           433:                printf ("Enter new director message");
        !           434:                at (lastrow + 2, 10);
        !           435:                for (i = 0; i < DMLEN; i++)
        !           436:                    printf ("-");
        !           437:                at (lastrow + 1, 10);
        !           438:                i = gline (title, DMLEN - 1);           /* grab message */
        !           439:                if (i <= 1)
        !           440:                    break;                              /* no new message */
        !           441:                locknf (io, DSCRLOCK);                  /* mutual exclusion */
        !           442:                getdscr (io, &io -> descr);             /* get up-to-date */
        !           443:                strncpy (io -> descr.d_drmes, title, DMLEN);/* replace */
        !           444:                putdscr (io, &io -> descr);
        !           445:                unlocknf (io, DSCRLOCK);                /* uncritical now */
        !           446:                break;
        !           447: 
        !           448:            case 't':                                   /* write title for note file */
        !           449:                redraw++;
        !           450:                at (lastrow, 10);
        !           451:                printf ("Enter new title for notefile");
        !           452:                at (lastrow + 2, 10);
        !           453:                for (i = 0; i < NNLEN; i++)
        !           454:                    printf ("-");
        !           455:                at (lastrow + 1, 10);
        !           456:                i = gline (ntitle, NNLEN - 1);          /* suck the title */
        !           457:                if (i <= 1)
        !           458:                    break;                              /* no new message */
        !           459:                locknf (io, DSCRLOCK);                  /* MUTEX */
        !           460:                getdscr (io, &io -> descr);             /* current descr */
        !           461:                strncpy (io -> descr.d_title, ntitle, NNLEN);/* update */
        !           462:                putdscr (io, &io -> descr);             /* and replace */
        !           463:                unlocknf (io, DSCRLOCK);                /* uncritical now */
        !           464:                break;
        !           465: 
        !           466:            case 'w':                                   /* let him write a new policy note */
        !           467:                if (io -> descr.d_plcy)
        !           468:                {
        !           469:                    at (0, PROMPTMSGX);
        !           470:                    if (askyn ("Rewrite policy? (y/n) :") == 'n')
        !           471:                    {
        !           472:                        redraw++;
        !           473:                        break;
        !           474:                    }
        !           475:                }
        !           476:                at (0, PROMPTMSGX);
        !           477:                printf ("\nEdit New Policy Text:\n");
        !           478:                if (gettext (io, &where, (FILE *) NULL, EDIT) == 0)
        !           479:                {
        !           480:                    redraw++;
        !           481:                    break;
        !           482:                }
        !           483:                r = title;
        !           484:                strcpy (title, "POLICY NOTE");
        !           485:                gettime (&note.n_date);                 /* date of writing */
        !           486:                getname (&auth, 0);                     /* get author */
        !           487:                putnote (io, &where, title, 0, &note, &auth, 1, 1, 1, System, 1);
        !           488:                dspnote (io, &note, 0);                 /* show it to him */
        !           489:                redraw++;
        !           490:                break;
        !           491: 
        !           492:            case 'z':                                   /* zap a lot of notes/responses */
        !           493:            case 'u':                                   /* undelete a bunch */
        !           494:                {
        !           495:                    char   *action;                     /* del/undel */
        !           496: 
        !           497:                    redraw++;                           /* want to repaint */
        !           498:                    action = c == 'z' ? "delete" : "un-delete";/* for prompts */
        !           499:                    at (lastrow, 1);
        !           500:                    printf ("Enter list of notes to %s: ", action);
        !           501:                    gline (buff, BUFSZ);                /* grab line */
        !           502:                    at (lastrow + 1, 1);
        !           503:                    printf ("Going to %s: %s", action, buff);
        !           504:                    at (lastrow + 2, 1);
        !           505:                    if (askyn ("Do you really want to do that? ") != 'y')
        !           506:                        break;                          /* chicken out */
        !           507:                    buffptr = 0;
        !           508:                    at (lastrow + 3, 1);
        !           509:                    while (listget (buff, &buffptr, &start, &end))
        !           510:                    {
        !           511:                        if (start > end)
        !           512:                        {
        !           513:                            printf ("IGNORING %d-%d", start, end);
        !           514:                            continue;
        !           515:                        }
        !           516:                        if (start == end)
        !           517:                            printf ("%d ", start);
        !           518:                        else
        !           519:                            printf ("%d-%d ", start, end);
        !           520:                        mdelete (io, start, end, c == 'z');/* zap those */
        !           521:                    }
        !           522:                    goto getkey;                        /* leave this stuff on screen */
        !           523:                }
        !           524: 
        !           525:            default: 
        !           526:                printf ("\07");
        !           527:                redraw = 0;
        !           528:                goto getkey;                            /* hit a bad key */
        !           529: 
        !           530:        }
        !           531:     }
        !           532: }
        !           533: /*
        !           534:  *     dirplot - Plot the notesfile status
        !           535:  */
        !           536: 
        !           537: dirplot (io)
        !           538: struct io_f *io;
        !           539: {
        !           540:     int     atrow;
        !           541:     int     atcol;
        !           542: 
        !           543:     erase ();
        !           544:     center (io -> descr.d_title, NNLEN, 1, 40 - NNLEN / 2);
        !           545:     center (io -> descr.d_drmes, DMLEN, 2, 40 - DMLEN / 2);
        !           546:     atrow = 4;                                         /* start filling in */
        !           547:     atcol = 1;
        !           548:     at (anonrow = atrow++, atcol);
        !           549:     printf ("(a) Anonymous:   ");                      /* at (3,18); */
        !           550:     printf (io -> descr.d_stat & ANONOK ? "ON" : "OFF");
        !           551:     at (openrow = atrow++, atcol);
        !           552:     printf ("(o) Notesfile:   ");                      /* at(4,18); */
        !           553:     printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
        !           554:     at (netrow = atrow++, atcol);
        !           555:     printf ("(n) Networked:   ");                      /* at(5,18); */
        !           556:     printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
        !           557:     at (archrow = atrow++, atcol);
        !           558:     printf ("(A) Is Archive:  ");                      /* at(6,18); */
        !           559:     printf (io -> descr.d_stat & ISARCH ? "YES" : "NO");
        !           560:     at (expirerow = atrow++, atcol);
        !           561:     printf ("(e) Expiration Threshold: ");             /* at (6,27); */
        !           562:     switch ((int) (io -> descr.d_archtime))
        !           563:     {
        !           564:        case NEVER: 
        !           565:            printf ("Never");
        !           566:            break;
        !           567:        case 0: 
        !           568:            printf ("Default");
        !           569:            break;
        !           570:        default: 
        !           571:            printf ("%ld days", io -> descr.d_archtime);
        !           572:            break;
        !           573:     }
        !           574:     at (keeprow = atrow++, atcol);
        !           575:     printf ("(E) Expiration Action:    ");             /* at(?,27); */
        !           576:     switch ((int) io -> descr.d_archkeep)
        !           577:     {
        !           578:        case KEEPYES: 
        !           579:            printf ("ARCHIVE");
        !           580:            break;
        !           581:        case KEEPNO: 
        !           582:            printf ("DELETE ");
        !           583:            break;
        !           584:        case KEEPDFLT: 
        !           585:            printf ("Default");
        !           586:            break;
        !           587:        default: 
        !           588:            printf ("UNKNOWN");
        !           589:            break;
        !           590:     }
        !           591:     at (dirmsgrow = atrow++, atcol);
        !           592:     printf ("(D) Expire with Dirmsg:   ");             /* at (?,27) */
        !           593:     switch ((int) io -> descr.d_dmesgstat)
        !           594:     {
        !           595:        case DIRNOCARE: 
        !           596:            printf ("NOCARE   ");
        !           597:            break;
        !           598:        case DIRON: 
        !           599:            printf ("ON       ");
        !           600:            break;
        !           601:        case DIROFF: 
        !           602:            printf ("OFF      ");
        !           603:            break;
        !           604:        case DIRDFLT: 
        !           605:            printf ("Default  ");
        !           606:            break;
        !           607:        default: 
        !           608:            printf ("UNKNOWN  ");
        !           609:            break;
        !           610:     }
        !           611:     at (worksetrow = atrow++, atcol);
        !           612:     printf ("(W) Working Set Size:     ");             /* at (5,27) */
        !           613:     switch ((int) io -> descr.d_workset)
        !           614:     {
        !           615:        case 0: 
        !           616:            printf ("Default");
        !           617:            break;
        !           618:        default: 
        !           619:            printf ("%ld Notes", io -> descr.d_workset);
        !           620:     }
        !           621:     at (longrow = atrow++, atcol);
        !           622:     printf ("(l) Maximum text/article: ");             /* at (6,27) */
        !           623:     printf ("%ld bytes", io -> descr.d_longnote);
        !           624: 
        !           625:     lastrow = atrow;                                   /* for queries */
        !           626: 
        !           627: /*
        !           628:  *     Second Column
        !           629:  */
        !           630: 
        !           631:     atrow = 4;
        !           632:     atcol = 40;
        !           633:     at (atrow++, atcol);
        !           634:     printf ("Policy Note Exists: %s", io -> descr.d_plcy ? "YES" : "NO");
        !           635:     at (atrow++, atcol);
        !           636:     printf ("Next note in slot: %d", io -> descr.d_nnote + 1);
        !           637:     at (atrow++, atcol);
        !           638:     printf ("Deleted Notes (holes): %ld  ", io -> descr.d_delnote);
        !           639:     at (atrow++, atcol);
        !           640:     printf ("Deleted Responses (holes): %ld  ", io -> descr.d_delresp);
        !           641: /*
        !           642:  *     Should we show more statistics here?
        !           643:  *     Things like orphans, adoptions, etc.
        !           644:  */
        !           645: 
        !           646:     if (atrow > lastrow)
        !           647:        lastrow = atrow;
        !           648:     lastrow++;
        !           649: }

unix.superglobalmegacorp.com

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