home *** CD-ROM | disk | FTP | other *** search
-
- #include <utility/hooks.h>
-
- #include "sumstl.h"
-
- #include <stdio.h>
-
- #ifdef __SASC
- #include <dos.h>
- #endif
-
- #include "umsfilter.h"
-
- /* SMAKE */
-
-
- // Version String
- // --------------
-
- static char VersionString[] = "$VER: sumsdel "VERSION;
-
- static char UsageString[] = "\
- U=User : user name.\n\
- P=Password : user's password.\n\
- FI=Filter : filter specification.\n\
- S=Server : server name.\n\
- Q=Quiet : work quietly\n\
- T=Tiny : use tiny output\n\n\
- ";
-
-
- // Template
- // --------
-
- static char *TemplateString = "U=User=Name/A,P=Password/A,FI=Filter/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
- enum opts {
- OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_SERVER,
- OPT_QUIET, OPT_TINY, OPT_COUNT};
-
-
- // Globals
- // -------
-
- extern struct DosLibrary *DOSBase;
-
- struct Library *UMSBase = NULL;
-
-
- // CTRL-C Stuff
- // ------------
-
- int brk(void)
- {
- return(0);
- }
-
- #define ABORTED (SetSignal(0,0) & SIGBREAKF_CTRL_C)
-
-
- // Main Function
- // -------------
-
- int main(int argc,char *argv[])
- {
- int erg = RETURN_FAIL;
- int anz = 0;
- int fi;
- LONG nr=0,umserr;
- struct RDArgs *args_ptr;
- LONG opts[OPT_COUNT] = { 0 };
- UMSAccount acc;
-
- onbreak(brk);
-
- if (argc<2 || *argv[1] == '?')
- {
- fprintf(stderr,"\33[1m%s\33[0m, written by Bernhard Möllemann, Public Domain.\n\nTemplate: %s\n%s",&VersionString[6],TemplateString,UsageString);
- }
-
- if (args_ptr = ReadArgs(TemplateString, opts, NULL))
- {
-
- if (UMSBase = OpenLibrary(UMSNAME,UMSVERSION))
- {
- if (acc = UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
- {
- if (!(fi = UmsFilterExpression((char *)opts[OPT_FILTER],acc,0,0,1)))
- {
- erg = RETURN_OK;
- while (nr = UMSSearchTags(acc,
- UMSTAG_SearchLast, nr,
- UMSTAG_SearchLocal, TRUE,
- UMSTAG_SearchMask, 1,
- UMSTAG_SearchMatch, 1,
- TAG_DONE)) {
- if (ABORTED) {
- fprintf(stderr,"*** User break.\n");
- erg = RETURN_WARN;
- break;
- }
-
- if ( UMSDeleteMsg(acc,nr) ) {
- anz++;
- } else {
- fprintf(stderr,"UMS-Error %ld: %s\n",umserr=UMSErrNum(acc),UMSErrTxt(acc));
- erg = RETURN_WARN;
- /* kludge for bad behavior of UMSSearchTags() */
- if ( umserr==UMSERR_ServerTerminated ) {
- erg = RETURN_ERROR;
- break;
- }
- }
- }
-
- if (!opts[OPT_QUIET])
- if (opts[OPT_TINY])
- printf("%5ld Msgs deleted.\n",anz);
- else
- printf("%5ld Msgs (%s) deleted.\n",anz,(char *)opts[OPT_FILTER]);
- /* if an error occured and no msg was deleted bump warn to error */
- if ( (erg==RETURN_WARN) && (anz==0) )
- erg = RETURN_ERROR;
- }
- else printf("Expression Error %ld\n",fi);
-
- UMSLogout(acc);
- }
- else printf("UMS-Login failed.\n");
-
- CloseLibrary(UMSBase);
- }
- else printf("Could not open ums.library V10.\n");
-
- FreeArgs(args_ptr);
- }
- else
- {
- PrintFault(IoErr(), NULL);
- return RETURN_ERROR;
- }
-
- return erg;
- }
-