home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / clients / xmh / mlist.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-01-06  |  3.3 KB  |  135 lines

  1. /* $XConsortium: mlist.c,v 2.10 91/01/06 21:08:51 rws Exp $" */
  2.  
  3. /*
  4.  *              COPYRIGHT 1987
  5.  *           DIGITAL EQUIPMENT CORPORATION
  6.  *               MAYNARD, MASSACHUSETTS
  7.  *            ALL RIGHTS RESERVED.
  8.  *
  9.  * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
  10.  * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
  11.  * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
  12.  * ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
  13.  *
  14.  * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
  15.  * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
  16.  * ADDITION TO THAT SET FORTH ABOVE.
  17.  *
  18.  *
  19.  * Permission to use, copy, modify, and distribute this software and its
  20.  * documentation for any purpose and without fee is hereby granted, provided
  21.  * that the above copyright notice appear in all copies and that both that
  22.  * copyright notice and this permission notice appear in supporting
  23.  * documentation, and that the name of Digital Equipment Corporation not be
  24.  * used in advertising or publicity pertaining to distribution of the software
  25.  * without specific, written prior permission.
  26.  */
  27.  
  28. /* mlist.c -- functions to deal with message lists. */
  29.  
  30. #include "xmh.h"
  31.  
  32.  
  33. /* Create a message list containing no messages. */
  34.  
  35. MsgList MakeNullMsgList()
  36. {
  37.     MsgList mlist;
  38.     mlist = XtNew(MsgListRec);
  39.     mlist->nummsgs = 0;
  40.     mlist->msglist = XtNew(Msg);
  41.     mlist->msglist[0] = NULL;
  42.     return mlist;
  43. }
  44.  
  45.  
  46. /* Append a message to the given message list. */
  47.  
  48. void AppendMsgList(mlist, msg)
  49.   MsgList mlist;
  50.   Msg msg;
  51. {
  52.     mlist->nummsgs++;
  53.     mlist->msglist =
  54.     (Msg *) XtRealloc((char *) mlist->msglist,
  55.               (unsigned) (mlist->nummsgs + 1) * sizeof(Msg));
  56.     mlist->msglist[mlist->nummsgs - 1] = msg;
  57.     mlist->msglist[mlist->nummsgs] = 0;
  58. }
  59.  
  60.  
  61.  
  62. /* Delete a message from a message list. */
  63.  
  64. void DeleteMsgFromMsgList(mlist, msg)
  65. MsgList mlist;
  66. Msg msg;
  67. {
  68.     int i;
  69.     for (i=0 ; i<mlist->nummsgs ; i++) {
  70.     if (mlist->msglist[i] == msg) {
  71.         mlist->nummsgs--;
  72.         for (; i<mlist->nummsgs ; i++)
  73.         mlist->msglist[i] = mlist->msglist[i+1];
  74.         return;
  75.     }
  76.     }
  77. }
  78.  
  79.  
  80.  
  81. /* Create a new messages list containing only the one given message. */
  82.  
  83. MsgList MakeSingleMsgList(msg)
  84.   Msg msg;
  85. {
  86.     MsgList result;
  87.     result = MakeNullMsgList();
  88.     AppendMsgList(result, msg);
  89.     return result;
  90. }
  91.  
  92.  
  93. /* We're done with this message list; free it's storage. */
  94.  
  95. void FreeMsgList(mlist)
  96.    MsgList mlist;
  97. {
  98.     XtFree((char *) mlist->msglist);
  99.     XtFree((char *) mlist);
  100. }
  101.  
  102.  
  103.  
  104. /* Parse the given string into a message list.  The string contains mh-style
  105.    message numbers.  This routine assumes those messages numbers refer to
  106.    messages in the given toc. */
  107.  
  108. MsgList StringToMsgList(toc, str)
  109. Toc toc;
  110. char *str;
  111. {
  112.     MsgList mlist;
  113.     char *ptr;
  114.     int first, second, i;
  115.     Msg msg;
  116.     mlist = MakeNullMsgList();
  117.     while (*str) {
  118.         while (*str == ' ')
  119.             str++;
  120.         first = second = atoi(str);
  121.         str++;
  122.         for (ptr = str; *ptr >= '0' && *ptr <= '9'; ptr++) ;
  123.         if (*ptr == '-')
  124.             second = atoi(ptr + 1);
  125.         if (first > 0) {
  126.             for (i = first; i <= second; i++) {
  127.         msg = TocMsgFromId(toc, i);
  128.                 if (msg) AppendMsgList(mlist, msg);
  129.         }
  130.     }
  131.         str = ptr;
  132.     }
  133.     return mlist;
  134. }
  135.