home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
comm
/
Mail+News
/
UMS11
/
Tools
/
SUMSTools
/
Source
/
sumsfolder.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-03
|
7KB
|
263 lines
/* 04-Aug-94 [olio] SUMSFolder now return WARN (5), if no msgs
** matched the filter..
*/
#include "sumstl.h"
#include <stdio.h>
#include "umsfilter.h"
#ifdef __SASC
#include <dos.h>
#endif
/* SMAKE */
// Version String
// --------------
static char VersionString[] = "$VER: sumsfolder "VERSION;
static char UsageString[] = "\
U=User : user name.\n\
P=Password : user's password.\n\
FI=Filter : filter specification.\n\
FO=Folder : folder to set.\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,FO=Folder/A,S=Server/K,Q=Quiet/S,T=Tiny/S";
enum opts {
OPT_USER, OPT_PASSWORD, OPT_FILTER, OPT_FOLDER, OPT_SERVER, OPT_QUIET, OPT_TINY,
OPT_COUNT};
static LONG opts[OPT_COUNT];
// Globals
// -------
extern struct DosLibrary *DOSBase;
struct Library *UMSBase = NULL;
UMSAccount Account = NULL;
struct BitSpec
{
char *name;
LONG bit;
BOOL global;
};
struct BitSpec BitSpecs[] =
{
{"Archive" , UMSUSTATF_Archive ,FALSE},
{"Junk" , UMSUSTATF_Junk ,FALSE},
{"PostPoned" , UMSUSTATF_PostPoned ,FALSE},
{"Selected" , UMSUSTATF_Selected ,FALSE},
{"Old" , UMSUSTATF_Old ,FALSE},
{"WriteAccess", UMSUSTATF_WriteAccess,FALSE},
{"ReadAccess" , UMSUSTATF_ReadAccess ,FALSE},
{"ViewAccess" , UMSUSTATF_ViewAccess ,FALSE},
{"Owner" , UMSUSTATF_Owner ,FALSE},
{"UFlag0" , (1<<0 ) ,FALSE},
{"UFlag1" , (1<<1 ) ,FALSE},
{"UFlag2" , (1<<2 ) ,FALSE},
{"UFlag3" , (1<<3 ) ,FALSE},
{"UFlag4" , (1<<4 ) ,FALSE},
{"UFlag5" , (1<<5 ) ,FALSE},
{"UFlag6" , (1<<6 ) ,FALSE},
{"UFlag7" , (1<<7 ) ,FALSE},
{"UFlag8" , (1<<8 ) ,FALSE},
{"UFlag9" , (1<<9 ) ,FALSE},
{"UFlagA" , (1<<10) ,FALSE},
{"UFlagB" , (1<<11) ,FALSE},
{"UFlagC" , (1<<12) ,FALSE},
{"UFlagD" , (1<<13) ,FALSE},
{"UFlagE" , (1<<14) ,FALSE},
{"UFlagF" , (1<<15) ,FALSE},
{"Deleted" , UMSGSTATF_Deleted ,TRUE },
{"Expired" , UMSGSTATF_Expired ,TRUE },
{"Exported" , UMSGSTATF_Exported ,TRUE },
{"Orphan" , UMSGSTATF_Orphan ,TRUE },
{"Link" , UMSGSTATF_Link ,TRUE },
{"HardLink" , UMSGSTATF_HardLink ,TRUE },
{NULL,0,0 }
};
struct BitSpec *FindBit(char *name)
{
struct BitSpec *b=BitSpecs;
while (b->name)
{
if (!stricmp(b->name,name)) return(b);
b++;
}
return(NULL);
}
// CTRL-C Stuff
// ------------
int brk(void)
{
return 0;
}
// Main Function
// -------------
void main(int argc,char *argv[])
{
int erg=20;
int anz;
int fi;
struct RDArgs *args_ptr;
onbreak(brk);
if ((argc<2) || (argv[1][0]=='?'))
{
struct BitSpec *b=BitSpecs;
int i;
fprintf (stderr,"\33[1m%s\33[0m, written by Matthias Scheler, Public Domain.\n\nTemplate: %s\n%s",
&VersionString[6],TemplateString,UsageString);
fprintf (stderr," bit-specs : ");
i=0;
while (b->name)
{
fprintf (stderr,"%s%c ",b->name,(b+1)->name ? ',' : '.');
b++;
if (++i==6)
{
i=0;
fprintf (stderr,"\n ");
}
}
fprintf (stderr,"\n\n");
}
{
int i;
for (i=0; i<OPT_COUNT; i++)
opts[i]=NULL;
}
if (args_ptr = ReadArgs(TemplateString, opts, NULL))
{
if (UMSBase=OpenLibrary(UMSNAME,UMSVERSION))
{
if (Account=UMSRLogin((char *)opts[OPT_SERVER],(char *)opts[OPT_USER],(char *)opts[OPT_PASSWORD]))
{
if (!(fi=UmsFilterExpression((char *)opts[OPT_FILTER],Account,0,0,1)))
{
UMSMsgNum MsgNum;
char *Fields[UMSNUMFIELDS];
(void)UMSSelectTags(Account,
UMSTAG_SelWriteLocal,TRUE,
UMSTAG_SelUnset,2L,
TAG_DONE);
(void)UMSSelectTags(Account,
UMSTAG_SelMask,
UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
UMSTAG_SelMatch,
UMSUSTATF_ViewAccess|UMSUSTATF_ReadAccess|UMSUSTATF_WriteAccess,
UMSTAG_SelWriteLocal,TRUE,
UMSTAG_SelSet,2L,
TAG_DONE);
anz=0;
while (MsgNum=UMSSearchTags(Account,
UMSTAG_SearchLocal,TRUE,
UMSTAG_SearchMask,3L,
UMSTAG_SearchMatch,3L,
TAG_DONE))
{
if (!UMSReadMsgTags(Account,
UMSTAG_RMsgNum,MsgNum,
UMSTAG_RNoUpdate,TRUE,
UMSTAG_RTextFields,&Fields[0],
UMSTAG_RReadAll,TRUE,
TAG_DONE))
{
fprintf (stderr,"error reading message #%d: %s\n",MsgNum,UMSErrTxt(Account));
break;
}
Fields[UMSCODE_Folder]=(char *)opts[OPT_FOLDER];
if (!UMSWriteMsgTags(Account,
UMSTAG_WMsgNum,MsgNum,
UMSTAG_WNoUpdate,TRUE,
UMSTAG_WTextFields,&Fields[0],
TAG_DONE))
{
fprintf (stderr,"error writing message #%d: %s\n",MsgNum,UMSErrTxt(Account));
UMSFreeMsg (Account,MsgNum);
break;
}
UMSFreeMsg (Account,MsgNum);
(void)UMSSelectTags(Account,
UMSTAG_SelWriteLocal,TRUE,
UMSTAG_SelMsg,MsgNum,
UMSTAG_SelUnset,1L,
TAG_DONE);
if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
{
fprintf (stderr,"*** BREAK\n");
break;
}
anz++;
}
if (MsgNum==0L)
{
if (!opts[OPT_QUIET])
if (opts[OPT_TINY]) printf ("set folder for %d Msgs to \"%s\".\n",anz,(char *)opts[OPT_FOLDER]);
else printf ("set folder for %d Msgs (%s) to \"%s\".\n",anz,(char *)opts[OPT_FILTER],(char *)opts[OPT_FOLDER]);
erg=0;
if (anz==0) erg=5;
}
}
else fprintf (stderr,"\7Expression Error %ld\n",fi);
UMSLogout( Account);
}
else fprintf (stderr,"\7UMS-Login failed.\n");
CloseLibrary (UMSBase);
}
else fprintf (stderr,"\7Could not open %s V%d.\n",UMSNAME,UMSVERSION);
FreeArgs(args_ptr);
}
else
{
PrintFault(IoErr(), NULL);
exit(RETURN_ERROR);
}
exit (erg);
}