Annotation of researchv9/X11/src/X.V11R1/clients/xmh/tocfuncs.c, revision 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.