home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
comm
/
Mail+News
/
UMS11
/
Tools
/
SUMSTools
/
Source
/
sumsdel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-03
|
3KB
|
144 lines
#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;
}