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

  1.  
  2. #include <utility/hooks.h>
  3.  
  4. #include "sumstl.h"
  5.  
  6. #include <stdio.h>
  7.  
  8. #ifdef __SASC
  9. #include <dos.h>
  10. #endif
  11.  
  12. #include "umsfilter.h"
  13.  
  14. /* SMAKE */
  15.  
  16.  
  17. // Version String
  18. // --------------
  19.  
  20. static char VersionString[] = "$VER: sumsdel "VERSION;
  21.  
  22. static char UsageString[] = "\
  23.    U=User     : user name.\n\
  24.    P=Password : user's password.\n\
  25.   FI=Filter   : filter specification.\n\
  26.    S=Server   : server name.\n\
  27.    Q=Quiet    : work quietly\n\
  28.    T=Tiny     : use tiny output\n\n\
  29. ";
  30.  
  31.  
  32. // Template
  33. // --------
  34.  
  35. static char *TemplateString = "U=User=Name/A,P=Password/A,FI=Filter/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
  36. enum opts {
  37.     OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_SERVER,
  38.     OPT_QUIET, OPT_TINY, OPT_COUNT};
  39.  
  40.  
  41. // Globals
  42. // -------
  43.  
  44. extern struct DosLibrary *DOSBase;
  45.  
  46. struct Library *UMSBase = NULL;
  47.  
  48.  
  49. // CTRL-C Stuff
  50. // ------------
  51.  
  52. int brk(void)
  53. {
  54.     return(0);
  55. }
  56.  
  57. #define ABORTED (SetSignal(0,0) & SIGBREAKF_CTRL_C)
  58.  
  59.  
  60. // Main Function
  61. // -------------
  62.  
  63. int main(int argc,char *argv[])
  64. {
  65.     int             erg = RETURN_FAIL;
  66.     int                anz = 0;
  67.     int                fi;
  68.     LONG            nr=0,umserr;
  69.     struct RDArgs    *args_ptr;
  70.     LONG            opts[OPT_COUNT] = { 0 };
  71.     UMSAccount        acc;
  72.  
  73.     onbreak(brk);
  74.  
  75.     if (argc<2 || *argv[1] == '?')
  76.     {
  77.         fprintf(stderr,"\33[1m%s\33[0m, written by Bernhard Möllemann, Public Domain.\n\nTemplate: %s\n%s",&VersionString[6],TemplateString,UsageString);
  78.     }
  79.  
  80.     if (args_ptr = ReadArgs(TemplateString, opts, NULL))
  81.     {
  82.  
  83.         if (UMSBase = OpenLibrary(UMSNAME,UMSVERSION))
  84.         {
  85.             if (acc = UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
  86.             {
  87.                 if (!(fi = UmsFilterExpression((char *)opts[OPT_FILTER],acc,0,0,1)))
  88.                 {
  89.                     erg = RETURN_OK;
  90.                     while (nr = UMSSearchTags(acc,
  91.                                               UMSTAG_SearchLast,    nr,
  92.                                               UMSTAG_SearchLocal,    TRUE,
  93.                                               UMSTAG_SearchMask,    1,
  94.                                               UMSTAG_SearchMatch,    1,
  95.                                               TAG_DONE)) {
  96.                         if (ABORTED) {
  97.                             fprintf(stderr,"*** User break.\n");
  98.                             erg = RETURN_WARN;
  99.                             break;
  100.                         }
  101.  
  102.                         if ( UMSDeleteMsg(acc,nr) ) {
  103.                             anz++;
  104.                         } else {
  105.                             fprintf(stderr,"UMS-Error %ld: %s\n",umserr=UMSErrNum(acc),UMSErrTxt(acc));
  106.                             erg = RETURN_WARN;
  107.                             /* kludge for bad behavior of UMSSearchTags() */
  108.                             if ( umserr==UMSERR_ServerTerminated ) {
  109.                                 erg = RETURN_ERROR;
  110.                                 break;
  111.                             }
  112.                         }
  113.                     }
  114.  
  115.                     if (!opts[OPT_QUIET])
  116.                         if (opts[OPT_TINY])
  117.                             printf("%5ld Msgs deleted.\n",anz);
  118.                         else
  119.                             printf("%5ld Msgs (%s) deleted.\n",anz,(char *)opts[OPT_FILTER]);
  120.                     /* if an error occured and no msg was deleted bump warn to error */
  121.                     if ( (erg==RETURN_WARN) && (anz==0) )
  122.                         erg = RETURN_ERROR;
  123.                 }
  124.                 else printf("Expression Error %ld\n",fi);
  125.  
  126.                 UMSLogout(acc);
  127.             }
  128.             else printf("UMS-Login failed.\n");
  129.  
  130.             CloseLibrary(UMSBase);
  131.         }
  132.         else printf("Could not open ums.library V10.\n");
  133.  
  134.         FreeArgs(args_ptr);
  135.     }
  136.     else
  137.     {
  138.         PrintFault(IoErr(), NULL);
  139.         return RETURN_ERROR;
  140.     }
  141.  
  142.     return erg;
  143. }
  144.