home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / comm / ums / SUMSTools.lha / UMS / Tools / SUMSTools / Source / sumsfolder.c < prev    next >
C/C++ Source or Header  |  1995-08-03  |  7KB  |  263 lines

  1. /*  04-Aug-94 [olio] SUMSFolder now return WARN (5), if no msgs
  2. **                   matched the filter..
  3. */
  4.  
  5. #include "sumstl.h"
  6.  
  7. #include <stdio.h>
  8.  
  9. #include "umsfilter.h"
  10.  
  11. #ifdef __SASC
  12. #include <dos.h>
  13. #endif
  14.  
  15. /* SMAKE */
  16.  
  17.  
  18.  
  19. // Version String
  20. // --------------
  21.  
  22. static char VersionString[] = "$VER: sumsfolder "VERSION;
  23.  
  24. static char UsageString[] = "\
  25.    U=User     : user name.\n\
  26.    P=Password : user's password.\n\
  27.   FI=Filter   : filter specification.\n\
  28.   FO=Folder   : folder to set.\n\
  29.    S=Server   : server name.\n\
  30.    Q=Quiet    : work quietly\n\
  31.    T=Tiny     : use tiny output\n\n\
  32. ";
  33.  
  34.  
  35. // Template
  36. // --------
  37.  
  38. static char *TemplateString = "U=User=Name/A,P=Password/A,FI=Filter/A,FO=Folder/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
  39. enum opts {
  40.     OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_FOLDER, OPT_SERVER, OPT_QUIET, OPT_TINY,
  41.     OPT_COUNT};
  42. static LONG opts[OPT_COUNT];
  43.  
  44.  
  45. // Globals
  46. // -------
  47.  
  48. extern struct DosLibrary *DOSBase;
  49.  
  50. struct Library *UMSBase = NULL;
  51. UMSAccount Account = NULL;
  52.  
  53. struct BitSpec
  54.  {
  55.   char *name;
  56.   LONG bit;
  57.   BOOL global;
  58.  };
  59.  
  60. struct BitSpec BitSpecs[] =
  61.  {
  62.   {"Archive"    , UMSUSTATF_Archive    ,FALSE},
  63.   {"Junk"       , UMSUSTATF_Junk       ,FALSE},
  64.   {"PostPoned"  , UMSUSTATF_PostPoned  ,FALSE},
  65.   {"Selected"   , UMSUSTATF_Selected   ,FALSE},
  66.   {"Old"        , UMSUSTATF_Old        ,FALSE},
  67.   {"WriteAccess", UMSUSTATF_WriteAccess,FALSE},
  68.   {"ReadAccess" , UMSUSTATF_ReadAccess ,FALSE},
  69.   {"ViewAccess" , UMSUSTATF_ViewAccess ,FALSE},
  70.   {"Owner"      , UMSUSTATF_Owner      ,FALSE},
  71.   {"UFlag0"     , (1<<0 )              ,FALSE},
  72.   {"UFlag1"     , (1<<1 )              ,FALSE},
  73.   {"UFlag2"     , (1<<2 )              ,FALSE},
  74.   {"UFlag3"     , (1<<3 )              ,FALSE},
  75.   {"UFlag4"     , (1<<4 )              ,FALSE},
  76.   {"UFlag5"     , (1<<5 )              ,FALSE},
  77.   {"UFlag6"     , (1<<6 )              ,FALSE},
  78.   {"UFlag7"     , (1<<7 )              ,FALSE},
  79.   {"UFlag8"     , (1<<8 )              ,FALSE},
  80.   {"UFlag9"     , (1<<9 )              ,FALSE},
  81.   {"UFlagA"     , (1<<10)              ,FALSE},
  82.   {"UFlagB"     , (1<<11)              ,FALSE},
  83.   {"UFlagC"     , (1<<12)              ,FALSE},
  84.   {"UFlagD"     , (1<<13)              ,FALSE},
  85.   {"UFlagE"     , (1<<14)              ,FALSE},
  86.   {"UFlagF"     , (1<<15)              ,FALSE},
  87.   {"Deleted"    , UMSGSTATF_Deleted    ,TRUE },
  88.   {"Expired"    , UMSGSTATF_Expired    ,TRUE },
  89.   {"Exported"   , UMSGSTATF_Exported   ,TRUE },
  90.   {"Orphan"     , UMSGSTATF_Orphan     ,TRUE },
  91.   {"Link"       , UMSGSTATF_Link       ,TRUE },
  92.   {"HardLink"   , UMSGSTATF_HardLink   ,TRUE },
  93.   {NULL,0,0 }
  94.  };
  95.  
  96. struct BitSpec *FindBit(char *name)
  97.  
  98. {
  99.  struct BitSpec *b=BitSpecs;
  100.  
  101.  while (b->name)
  102.   {
  103.    if (!stricmp(b->name,name)) return(b);
  104.    b++;
  105.   }
  106.  return(NULL);
  107. }
  108.  
  109.  
  110. // CTRL-C Stuff
  111. // ------------
  112.  
  113. int brk(void)
  114.  
  115. {
  116.  return 0;
  117. }
  118.  
  119. // Main Function
  120. // -------------
  121.  
  122. void main(int argc,char *argv[])
  123.  
  124. {
  125.  int erg=20;
  126.  int anz;
  127.  int fi;
  128.  struct RDArgs *args_ptr;
  129.  
  130.  onbreak(brk);
  131.  
  132.  if ((argc<2) || (argv[1][0]=='?'))
  133.   {
  134.    struct BitSpec *b=BitSpecs;
  135.    int i;
  136.  
  137.    fprintf (stderr,"\33[1m%s\33[0m, written by Matthias Scheler, Public Domain.\n\nTemplate: %s\n%s",
  138.             &VersionString[6],TemplateString,UsageString);
  139.    fprintf (stderr,"    bit-specs : ");
  140.  
  141.    i=0;
  142.    while (b->name)
  143.     {
  144.      fprintf (stderr,"%s%c ",b->name,(b+1)->name ? ',' : '.');
  145.      b++;
  146.      if (++i==6)
  147.       {
  148.        i=0;
  149.        fprintf (stderr,"\n                ");
  150.       }
  151.     }
  152.  
  153.    fprintf (stderr,"\n\n");
  154.   }
  155.  
  156.  {
  157.   int i;
  158.  
  159.   for (i=0; i<OPT_COUNT; i++)
  160.    opts[i]=NULL;
  161.  }
  162.  
  163.  if (args_ptr = ReadArgs(TemplateString, opts, NULL))
  164.   {
  165.    if (UMSBase=OpenLibrary(UMSNAME,UMSVERSION))
  166.     {
  167.      if (Account=UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
  168.       {
  169.        if (!(fi=UmsFilterExpression((char *)opts[OPT_FILTER],Account,0,0,1)))
  170.         {
  171.          UMSMsgNum MsgNum;
  172.          char *Fields[UMSNUMFIELDS];
  173.  
  174.          (void)UMSSelectTags(Account,
  175.                              UMSTAG_SelWriteLocal,TRUE,
  176.                              UMSTAG_SelUnset,2L,
  177.                              TAG_DONE);
  178.          (void)UMSSelectTags(Account,
  179.                              UMSTAG_SelMask,
  180.                               UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
  181.                              UMSTAG_SelMatch,
  182.                               UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
  183.                              UMSTAG_SelWriteLocal,TRUE,
  184.                              UMSTAG_SelSet,2L,
  185.                              TAG_DONE);
  186.  
  187.          anz=0;
  188.          while (MsgNum=UMSSearchTags(Account,
  189.                        UMSTAG_SearchLocal,TRUE,
  190.                        UMSTAG_SearchMask,3L,
  191.                        UMSTAG_SearchMatch,3L,
  192.                        TAG_DONE))
  193.           {
  194.            if (!UMSReadMsgTags(Account,
  195.                                UMSTAG_RMsgNum,MsgNum,
  196.                                UMSTAG_RNoUpdate,TRUE,
  197.                                UMSTAG_RTextFields,&Fields[0],
  198.                                UMSTAG_RReadAll,TRUE,
  199.                                TAG_DONE))
  200.             {
  201.              fprintf (stderr,"error reading message #%d: %s\n",MsgNum,UMSErrTxt(Account));
  202.              break;
  203.             }
  204.  
  205.            Fields[UMSCODE_Folder]=(char *)opts[OPT_FOLDER];
  206.            if (!UMSWriteMsgTags(Account,
  207.                                 UMSTAG_WMsgNum,MsgNum,
  208.                                 UMSTAG_WNoUpdate,TRUE,
  209.                                 UMSTAG_WTextFields,&Fields[0],
  210.                                 TAG_DONE))
  211.             {
  212.              fprintf (stderr,"error writing message #%d: %s\n",MsgNum,UMSErrTxt(Account));
  213.  
  214.              UMSFreeMsg (Account,MsgNum);
  215.              break;
  216.             }
  217.  
  218.            UMSFreeMsg (Account,MsgNum);
  219.            (void)UMSSelectTags(Account,
  220.                                UMSTAG_SelWriteLocal,TRUE,
  221.                                UMSTAG_SelMsg,MsgNum,
  222.                                UMSTAG_SelUnset,1L,
  223.                                TAG_DONE);
  224.  
  225.            if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
  226.             {
  227.              fprintf (stderr,"*** BREAK\n");
  228.              break;
  229.             }
  230.  
  231.            anz++;
  232.           }
  233.  
  234.          if (MsgNum==0L)
  235.           {
  236.            if (!opts[OPT_QUIET])
  237.             if (opts[OPT_TINY]) printf ("set folder for %d Msgs to \"%s\".\n",anz,(char *)opts[OPT_FOLDER]);
  238.             else printf ("set folder for %d Msgs (%s) to \"%s\".\n",anz,(char *)opts[OPT_FILTER],(char *)opts[OPT_FOLDER]);
  239.            erg=0;
  240.            if (anz==0) erg=5;
  241.           }
  242.         }
  243.        else fprintf (stderr,"\7Expression Error %ld\n",fi);
  244.  
  245.        UMSLogout( Account);
  246.       }
  247.      else fprintf (stderr,"\7UMS-Login failed.\n");
  248.  
  249.      CloseLibrary (UMSBase);
  250.     }
  251.    else fprintf (stderr,"\7Could not open %s V%d.\n",UMSNAME,UMSVERSION);
  252.  
  253.    FreeArgs(args_ptr);
  254.   }
  255.  else
  256.   {
  257.    PrintFault(IoErr(), NULL);
  258.    exit(RETURN_ERROR);
  259.   }
  260.  
  261.  exit (erg);
  262. }
  263.