home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / comm / misc / cyberpager / source / spooler / dogroup.c < prev    next >
C/C++ Source or Header  |  1994-02-07  |  3KB  |  135 lines

  1. #include "spooler.h"
  2. #include "/include/memory.h"
  3.  
  4. #define TEMPLATE "TARGETS/M,GROUP/K"
  5.   enum templateArgs {
  6.       ARG_TARGET,
  7.       ARG_GROUP,
  8.       ARG_sizeof
  9.   };
  10.  
  11. int DoGroup(STRPTR target, STRPTR pageText)
  12. {
  13.     ULONG line = 0;
  14.     BPTR fh;
  15.     STRPTR ptr;
  16.     STRPTR *targets;
  17.     BOOL foundGroup, leave;
  18.     LONG groupCount;
  19.     int result = 0;
  20.  
  21.     struct RDArgs *ArgsPtr, *MyArgs;
  22.     char *ArgArray[ARG_sizeof];
  23.  
  24.     foundGroup = FALSE;
  25.     groupCount = 0;
  26.  
  27.     if (fh = Open("pager:groups", MODE_OLDFILE)) {
  28.         /* loop reading lines looking for a group that matches */
  29.  
  30.         leave = FALSE;
  31.  
  32.         while (!result && !leave && FGets(fh, inputBuffer, sizeof(inputBuffer) - 1)) {
  33.             line++;
  34.  
  35.             /*
  36.              * check to make sure the line isn't all blank
  37.              */
  38.  
  39.             ptr = inputBuffer;
  40.             while (isspace(*ptr))
  41.                 ptr++;
  42.  
  43.             if (!*ptr)
  44.                 continue;
  45.  
  46.             /*
  47.              * check for comment character at beginning of line
  48.              */
  49.  
  50.             if (*ptr == ';')
  51.                 continue;
  52.  
  53.             /* setup to call ReadArgs() to parse the line */
  54.  
  55.             if (MyArgs = (struct RDArgs *)AllocDosObject(DOS_RDARGS, TAG_DONE)) {
  56.                 MyArgs->RDA_Flags |= RDAF_NOPROMPT;
  57.                 MyArgs->RDA_Source.CS_Buffer = inputBuffer;
  58.                 MyArgs->RDA_Source.CS_Length = strlen(inputBuffer);
  59.                 MyArgs->RDA_Source.CS_CurChr = 0L;
  60.  
  61.                 memset((char *)ArgArray, 0, sizeof(ArgArray));
  62.                 if (ArgsPtr = ReadArgs(TEMPLATE, (LONG *)&ArgArray, MyArgs)) {
  63.  
  64.                     /*
  65.                      * if we are inside the group we are
  66.                      * looking for and find a line with a
  67.                      * new GROUP entry then we know we
  68.                      * are at the end of the list and
  69.                      * should return.  otherwise we need
  70.                      * to check if this is the group we
  71.                      * are looking for.
  72.                      */
  73.  
  74.                     if (ArgArray[ARG_GROUP]) {
  75.                         if (foundGroup)
  76.                             leave = TRUE;
  77.                         else if (stricmp(target, ArgArray[ARG_GROUP]) == 0)
  78.                             foundGroup = TRUE;
  79.                     }
  80.  
  81.                     if (!leave && foundGroup && ArgArray[ARG_TARGET]) {
  82.                         targets = (STRPTR *)ArgArray[ARG_TARGET];
  83.  
  84.                         while (*targets && !result)
  85.                             if (!(result = DoDest(*targets++, pageText)))
  86.                                 groupCount++;
  87.                     }
  88.  
  89.                     FreeArgs(ArgsPtr);
  90.                 }
  91.                 else {
  92.                     Fault(IoErr(), NULL, inputBuffer, sizeof(inputBuffer) - 1);
  93.                     ErrorMsg("Error in groups file - line %ld: %s", line, inputBuffer);
  94.                     ULog(ph, -1, "Error in groups file - line %ld: %s", line, inputBuffer);
  95.                     result = 15;
  96.                 }
  97.  
  98.                 FreeDosObject(DOS_RDARGS, MyArgs);
  99.             }
  100.             else {
  101.                 ErrorMsg("out of memory!");
  102.                 result = 15;
  103.             }
  104.         }
  105.  
  106.         Close(fh);
  107.     }
  108.     else {
  109.         if (IoErr() != ERROR_OBJECT_NOT_FOUND) {
  110.             ErrorMsg("Error trying to open groups file.");
  111.             ULog(ph, -1, "Error trying to open groups file.");
  112.         }
  113.     }
  114.  
  115.     if (!result)
  116.         if (foundGroup) {
  117.             if (groupCount == 0) {
  118.                 ErrorMsg("warning - no members in group \"%s\"", target);
  119.                 ULog(ph, 0, "warning - no members in group \"%s\"", target);
  120.             }
  121.         }
  122.         else {
  123.  
  124.             /*
  125.              * if the target doesn't exist as a group entry then
  126.              * call DoDest() on it to process it as an
  127.              * alias/non-alias
  128.              */
  129.  
  130.             result = DoDest(target, pageText);
  131.         }
  132.  
  133.     return result;
  134. }
  135.