Annotation of researchv9/X11/src/X.V11R1/clients/xmh/tocfuncs.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char rcs_id[] = "$Header: tocfuncs.c,v 1.13 87/09/11 08:18:56 toddb Exp $";
                      3: #endif lint
                      4: /*
                      5:  *                       COPYRIGHT 1987
                      6:  *                DIGITAL EQUIPMENT CORPORATION
                      7:  *                    MAYNARD, MASSACHUSETTS
                      8:  *                     ALL RIGHTS RESERVED.
                      9:  *
                     10:  * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
                     11:  * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
                     12:  * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
                     13:  * ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
                     14:  *
                     15:  * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
                     16:  * APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
                     17:  * SET FORTH ABOVE.
                     18:  *
                     19:  *
                     20:  * Permission to use, copy, modify, and distribute this software and its
                     21:  * documentation for any purpose and without fee is hereby granted, provided
                     22:  * that the above copyright notice appear in all copies and that both that
                     23:  * copyright notice and this permission notice appear in supporting documentation,
                     24:  * and that the name of Digital Equipment Corporation not be used in advertising
                     25:  * or publicity pertaining to distribution of the software without specific,
                     26:  * written prior permission.
                     27:  */
                     28: 
                     29: /* tocfuncs.c -- handle things in the toc window. */
                     30: 
                     31: #include "xmh.h"
                     32: 
                     33: 
                     34: void ExecNextView(scrn)
                     35:   Scrn scrn;
                     36: {
                     37:     Toc toc = scrn->toc;
                     38:     MsgList mlist;
                     39:     FateType fate;
                     40:     Msg msg;
                     41:     if (toc == NULL) return;
                     42:     mlist = TocCurMsgList(toc);
                     43:     if (mlist->nummsgs)
                     44:        msg = mlist->msglist[0];
                     45:     else {
                     46:        msg = TocGetCurMsg(toc);
                     47:        if (msg && msg == scrn->msg) msg = TocMsgAfter(toc, msg);
                     48:        if (msg) fate = MsgGetFate(msg, (Toc *)NULL);
                     49:        while (msg && ((SkipDeleted && fate == Fdelete)
                     50:                || (SkipMoved && fate == Fmove)
                     51:                || (SkipCopied && fate == Fcopy))) {
                     52:            msg = TocMsgAfter(toc, msg);
                     53:            if (msg) fate = MsgGetFate(msg, (Toc *)NULL);
                     54:        }
                     55:     }
                     56:     if (msg) {
                     57:        if (!MsgSetScrn(msg, scrn)) {
                     58:            TocUnsetSelection(toc);
                     59:            TocSetCurMsg(toc, msg);
                     60:        }
                     61:     }
                     62:     FreeMsgList(mlist);
                     63: }
                     64: 
                     65: 
                     66: 
                     67: void ExecPrevView(scrn)
                     68:   Scrn scrn;
                     69: {
                     70:     Toc toc = scrn->toc;
                     71:     MsgList mlist;
                     72:     FateType fate;
                     73:     Msg msg;
                     74:     if (toc == NULL) return;
                     75:     mlist = TocCurMsgList(toc);
                     76:     if (mlist->nummsgs)
                     77:        msg = mlist->msglist[mlist->nummsgs - 1];
                     78:     else {
                     79:        msg = TocGetCurMsg(toc);
                     80:        if (msg && msg == scrn->msg) msg = TocMsgBefore(toc, msg);
                     81:        if (msg) fate = MsgGetFate(msg, (Toc *)NULL);
                     82:        while (msg && ((SkipDeleted && fate == Fdelete)
                     83:                || (SkipMoved && fate == Fmove)
                     84:                || (SkipCopied && fate == Fcopy))) {
                     85:            msg = TocMsgBefore(toc, msg);
                     86:            if (msg) fate = MsgGetFate(msg, (Toc *)NULL);
                     87:        }
                     88:     }
                     89:     if (msg) {
                     90:        if (!MsgSetScrn(msg, scrn)) {
                     91:            TocUnsetSelection(toc);
                     92:            TocSetCurMsg(toc, msg);
                     93:        }
                     94:     }
                     95:     FreeMsgList(mlist);
                     96: }
                     97: 
                     98: 
                     99: 
                    100: void ExecViewNew(scrn)
                    101: Scrn scrn;
                    102: {
                    103:     Toc toc = scrn->toc;
                    104:     Scrn vscrn;
                    105:     MsgList mlist;
                    106:     if (toc == NULL) return;
                    107:     mlist = CurMsgListOrCurMsg(toc);
                    108:     if (mlist->nummsgs) {
                    109:        vscrn = NewViewScrn();
                    110:        (void) MsgSetScrn(mlist->msglist[0], vscrn);
                    111:        MapScrn(vscrn);
                    112:     }
                    113:     FreeMsgList(mlist);
                    114: }
                    115: 
                    116: 
                    117: 
                    118: void ExecTocForward(scrn)
                    119: Scrn scrn;
                    120: {
                    121:     Toc toc = scrn->toc;
                    122:     MsgList mlist;
                    123:     if (toc == NULL) return;
                    124:     mlist = CurMsgListOrCurMsg(toc);
                    125:     if (mlist->nummsgs)
                    126:        CreateForward(mlist);
                    127:     FreeMsgList(mlist);
                    128: }
                    129: 
                    130: 
                    131: void ExecTocUseAsComposition(scrn)
                    132: Scrn scrn;
                    133: {
                    134:     Toc toc = scrn->toc;
                    135:     Scrn vscrn;
                    136:     MsgList mlist;
                    137:     Msg msg;
                    138:     if (toc == NULL) return;
                    139:     mlist = CurMsgListOrCurMsg(toc);
                    140:     if (mlist->nummsgs) {
                    141:        vscrn = NewCompScrn();
                    142:        if (DraftsFolder == toc) {
                    143:            msg = mlist->msglist[0];
                    144:        } else {
                    145:            msg = TocMakeNewMsg(DraftsFolder);
                    146:            MsgLoadCopy(msg, mlist->msglist[0]);
                    147:            MsgSetTemporary(msg);
                    148:        }
                    149:        (void)MsgSetScrnForComp(msg, vscrn);
                    150:        MapScrn(vscrn);
                    151:     }
                    152:     FreeMsgList(mlist);
                    153: }
                    154: 
                    155: 
                    156: 
                    157: /* Utility: change the fate of a set of messages. */
                    158: 
                    159: static MarkMessages(scrn, fate, skip)
                    160: Scrn scrn;
                    161: FateType fate;
                    162: int skip;
                    163: {
                    164:     Toc toc = scrn->toc;
                    165:     Toc desttoc;
                    166:     int i;
                    167:     MsgList mlist;
                    168:     Msg msg;
                    169:     if (toc == NULL) return;
                    170:     if (fate == Fcopy || fate == Fmove)
                    171:        desttoc = SelectedToc(scrn);
                    172:     else
                    173:        desttoc = NULL;
                    174:     if (desttoc == toc)
                    175:        Feep();
                    176:     else {
                    177:        mlist = TocCurMsgList(toc);
                    178:        if (mlist->nummsgs == 0) {
                    179:            msg = TocGetCurMsg(toc);
                    180:            if (msg) {
                    181:                MsgSetFate(msg, fate, desttoc);
                    182:                if (skip)
                    183:                    ExecNextView(scrn);
                    184:            }
                    185:        } else {
                    186:            for (i = 0; i < mlist->nummsgs; i++)
                    187:                MsgSetFate(mlist->msglist[i], fate, desttoc);
                    188:        }
                    189:        FreeMsgList(mlist);
                    190:     }
                    191: }
                    192: 
                    193: 
                    194: 
                    195: void ExecMarkDelete(scrn)
                    196: Scrn scrn;
                    197: {
                    198:     MarkMessages(scrn, Fdelete, SkipDeleted);
                    199: }
                    200: 
                    201: 
                    202: 
                    203: void ExecMarkCopy(scrn)
                    204: Scrn scrn;
                    205: {
                    206:     MarkMessages(scrn, Fcopy, SkipCopied);
                    207: }
                    208: 
                    209: 
                    210: void ExecMarkMove(scrn)
                    211: Scrn scrn;
                    212: {
                    213:     MarkMessages(scrn, Fmove, SkipMoved);
                    214: }
                    215: 
                    216: 
                    217: void ExecMarkUnmarked(scrn)
                    218: Scrn scrn;
                    219: {
                    220:     MarkMessages(scrn, Fignore, FALSE);
                    221: }
                    222: 
                    223: 
                    224: void ExecCommitChanges(scrn)
                    225: Scrn scrn;
                    226: {
                    227:     if (scrn->toc == NULL) return;
                    228:     TocCommitChanges(scrn->toc);
                    229: }
                    230: 
                    231: 
                    232: void ExecPrintMessages(scrn)
                    233: Scrn scrn;
                    234: {
                    235:     Toc toc = scrn->toc;
                    236:     MsgList mlist;
                    237:     char str[200];
                    238:     int i;
                    239:     if (toc == NULL) return;
                    240:     mlist = CurMsgListOrCurMsg(toc);
                    241:     for (i = 0; i < mlist->nummsgs; i++) {
                    242:        (void) sprintf(str, "%s %s", defPrintCommand,
                    243:                MsgFileName(mlist->msglist[i]));
                    244:        (void) system(str);
                    245:     }
                    246:     FreeMsgList(mlist);
                    247: }
                    248: 
                    249: 
                    250: 
                    251: void ExecPack(scrn)
                    252: Scrn scrn;
                    253: {
                    254:     Toc toc = scrn->toc;
                    255:     char **argv, str[100];
                    256:     if (toc == NULL) return;
                    257:     if (TocConfirmCataclysm(toc)) return;
                    258:     argv = MakeArgv(4);
                    259:     argv[0] = "folder";
                    260:     (void) sprintf(str, "+%s", TocGetFolderName(toc));
                    261:     argv[1] = str;
                    262:     argv[2] = "-pack";
                    263:     argv[3] = "-fast";
                    264:     DoCommand(argv, (char *) NULL, "/dev/null");
                    265:     XtFree((char *) argv);
                    266:     TocForceRescan(toc);
                    267: }
                    268: 
                    269: 
                    270: 
                    271: void ExecSort(scrn)
                    272: Scrn scrn;
                    273: {
                    274:     Toc toc = scrn->toc;
                    275:     char **argv, str[100];
                    276:     if (toc == NULL) return;
                    277:     if (TocConfirmCataclysm(toc)) return;
                    278:     argv = MakeArgv(3);
                    279:     argv[0] = "sortm";
                    280:     (void) sprintf(str, "+%s", TocGetFolderName(toc));
                    281:     argv[1] = str;
                    282:     argv[2] = "-noverbose";
                    283:     DoCommand(argv, (char *) NULL, "/dev/null");
                    284:     XtFree((char *) argv);
                    285:     TocForceRescan(toc);
                    286: }
                    287: 
                    288: 
                    289: 
                    290: 
                    291: void ExecForceRescan(scrn)
                    292: Scrn scrn;
                    293: {
                    294:     Toc toc = scrn->toc;
                    295:     if (toc == NULL) return;
                    296:     TocForceRescan(toc);
                    297: }
                    298: 
                    299: 
                    300: 
                    301: /* Incorporate new mail. */
                    302: 
                    303: void ExecIncorporate(scrn)
                    304: Scrn scrn;
                    305: {
                    306:     if (scrn->toc == NULL) return;
                    307:     TocIncorporate(scrn->toc);
                    308:     TocCheckForNewMail();
                    309: }
                    310: 
                    311: 
                    312: void ExecTocReply(scrn)
                    313: Scrn scrn;
                    314: {
                    315:     Toc toc = scrn->toc;
                    316:     Scrn nscrn;
                    317:     MsgList mlist;
                    318:     Msg msg;
                    319:     if (toc == NULL) return;
                    320:     mlist = CurMsgListOrCurMsg(toc);
                    321:     if (mlist->nummsgs) {
                    322:        nscrn = NewCompScrn();
                    323:        msg = TocMakeNewMsg(DraftsFolder);
                    324:        MsgSetTemporary(msg);
                    325:        MsgLoadReply(msg, mlist->msglist[0]);
                    326:        (void)MsgSetScrnForComp(msg, nscrn);
                    327:        MapScrn(nscrn);
                    328:     }
                    329:     FreeMsgList(mlist);
                    330: }
                    331: 
                    332: 
                    333: void ExecPick(scrn)
                    334: Scrn scrn;
                    335: {
                    336:     Toc toc = scrn->toc;
                    337:     Scrn nscrn;
                    338:     char *toseq;
                    339:     if (toc == NULL) return;
                    340:     if (scrn->curseq)
                    341:        toseq = BBoxNameOfButton(scrn->curseq);
                    342:     else toseq = "temp";
                    343:     if (strcmp(toseq, "all") == 0)
                    344:        toseq = "temp";
                    345:     nscrn = CreateNewScrn(STpick);
                    346:     AddPick(nscrn, toc, TocViewedSequence(toc)->name, toseq);
                    347:     MapScrn(nscrn);
                    348: }
                    349: 
                    350: 
                    351: void ExecOpenSeq(scrn)
                    352: Scrn scrn;
                    353: {
                    354:     Toc toc = scrn->toc;
                    355:     if (toc == NULL) return;
                    356:     TocChangeViewedSeq(toc, TocGetSeqNamed(toc,
                    357:                                           BBoxNameOfButton(scrn->curseq)));
                    358: }
                    359: 
                    360: 
                    361: 
                    362: typedef enum {ADD, REMOVE, DELETE} TwiddleOperation;
                    363: 
                    364: static TwiddleSequence(scrn, op)
                    365: Scrn scrn;
                    366: TwiddleOperation op;
                    367: {
                    368:     Toc toc = scrn->toc;
                    369:     char **argv, plus[100], str[100], *seqname;
                    370:     int i;
                    371:     MsgList mlist;
                    372:     if (toc == NULL || scrn->curseq == NULL) return;
                    373:     seqname = BBoxNameOfButton(scrn->curseq);
                    374:     if (strcmp(seqname, "all") == 0) {
                    375:        Feep();
                    376:        return;
                    377:     }
                    378:     if (op == DELETE)
                    379:        mlist = MakeNullMsgList();
                    380:     else {
                    381:        mlist = CurMsgListOrCurMsg(toc);
                    382:        if (mlist->nummsgs == 0) {
                    383:            FreeMsgList(mlist);
                    384:            Feep();
                    385:            return;
                    386:        }
                    387:     }
                    388:     argv = MakeArgv(6 + mlist->nummsgs);
                    389:     argv[0] = "mark";
                    390:     (void) sprintf(plus, "+%s", TocGetFolderName(toc));
                    391:     argv[1] = plus;
                    392:     argv[2] = "-sequence";
                    393:     argv[3] = seqname;
                    394:     switch (op) {
                    395:       case ADD:
                    396:        argv[4] = "-add";
                    397:        argv[5] = "-nozero";
                    398:        break;
                    399:       case REMOVE:
                    400:        argv[4] = "-delete";
                    401:        argv[5] = "-nozero";
                    402:        break;
                    403:       case DELETE:
                    404:        argv[4] = "-delete";
                    405:        argv[5] = "all";
                    406:        break;
                    407:     }
                    408:     for (i = 0; i < mlist->nummsgs; i++) {
                    409:        (void) sprintf(str, "%d", MsgGetId(mlist->msglist[i]));
                    410:        argv[6 + i] = MallocACopy(str);
                    411:     }
                    412:     DoCommand(argv, (char *) NULL, "/dev/null");
                    413:     for (i = 0; i < mlist->nummsgs; i++)
                    414:         free((char *) argv[6 + i]);
                    415:     free((char *) argv);
                    416:     FreeMsgList(mlist);
                    417:     TocReloadSeqLists(toc);
                    418: }
                    419: 
                    420:     
                    421: 
                    422: 
                    423: void ExecAddToSeq(scrn)
                    424: Scrn scrn;
                    425: {
                    426:     TwiddleSequence(scrn, ADD);
                    427: }
                    428: 
                    429: 
                    430: 
                    431: void ExecRemoveFromSeq(scrn)
                    432: Scrn scrn;
                    433: {
                    434:     TwiddleSequence(scrn, REMOVE);
                    435: }
                    436: 
                    437: 
                    438: 
                    439: void ExecDeleteSeq(scrn)
                    440: Scrn scrn;
                    441: {
                    442:     TwiddleSequence(scrn, DELETE);
                    443: }
                    444: 
                    445: 
                    446: XtEventReturnCode HandleTocButtons(event, scrn)
                    447: XEvent *event;
                    448: Scrn scrn;
                    449: {
                    450:     DoubleClickProc = ExecNextView;
                    451:     DoubleClickParam = (caddr_t)scrn;
                    452:     return XteventHandled;
                    453: }

unix.superglobalmegacorp.com

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