home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 2
/
goldfish_vol2_cd1.bin
/
files
/
comm
/
misc
/
cyberpager
/
source
/
dialer
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-02-07
|
3KB
|
145 lines
#include "dialer.h"
/* our memory pool header */
#define POOLSIZE 4096
APTR pool;
/* storage for library bases */
struct Library *UtilityBase;
struct Library *PagerSupportBase;
struct Library *OwnDevUnitBase;
/* our pager-support.library handle */
APTR ph;
LONG openedModem;
#define ARG_TEMPLATE "SERVICE/K,MODEM/N/K,LOGLEVEL/N/K"
enum ReadArgsArray {
ARG_SERVICE,
ARG_MODEM,
ARG_LOGLEVEL,
ARG_sizeof
};
static int DoArgs(void)
{
struct RDArgs *RArgs;
STRPTR ArgArray[ARG_sizeof];
LONG modem, modemStart;
int result;
/* do the stuff needed to call ReadArgs to parse the command line */
memset(ArgArray, 0, sizeof(ArgArray));
if (RArgs = ReadArgs(ARG_TEMPLATE, (LONG *)&ArgArray, NULL)) {
if (ArgArray[ARG_LOGLEVEL])
SetLogLevel(ph, *((LONG *)ArgArray[ARG_LOGLEVEL]));
if (ArgArray[ARG_MODEM])
modem = *((LONG *)ArgArray[ARG_MODEM]);
else
modem = 0;
modemStart = 1;
for (result = 2; result == 2;) {
if (openedModem = OpenModem(modem, modemStart)) {
if (ArgArray[ARG_SERVICE])
result = DoOneService(ArgArray[ARG_SERVICE], TRUE);
else
result = DoAllServices();
if (result == 2) {
modemStart = openedModem + 1;
modem = 0;
}
CloseSerial();
}
else {
STRPTR msg;
if (modem)
msg = "couldn't open modem %ld.";
else
msg = "unable to obtain a free modem from pool.";
result = 11;
ErrorMsg(msg, modem);
ULog(ph, -1, msg, modem);
}
}
FreeArgs(RArgs);
}
else {
PrintFault(IoErr(), PROGNAME);
result = 12;
}
return result;
}
void __regargs main(char *cmdptr, int cmdlen, struct WBStartup *WBMsg)
{
int result;
/* punt if started from Workbench */
if (WBMsg)
XCEXIT(20);
#ifdef _DEBUG
#define SUPPORT_LIB "pager:libs/pager-support-debug.library"
#else
#define SUPPORT_LIB "pager:libs/pager-support.library"
#endif
if (UtilityBase = OpenLibrary("utility.library", 37)) {
if (PagerSupportBase = OpenLibrary(SUPPORT_LIB, 0)) {
if (OwnDevUnitBase = OpenLibrary(ODU_NAME, 0)) {
if (pool = CreatePool(MEMF_CLEAR, POOLSIZE, POOLSIZE / 2)) {
if (ph = AllocPagerHandle(PROGNAME)) {
ULog(ph, -1, "startup: version %s", VersionID);
result = DoArgs();
FreePagerHandle(ph);
}
else {
ErrorMsg("couldn't allocate support library handle.");
result = 15;
}
DeletePool(pool);
}
else {
ErrorMsg("out of memory!");
result = 20;
}
CloseLibrary(OwnDevUnitBase);
}
else {
ErrorMsg("couldn't open %s.\n", ODU_NAME);
result = 20;
}
CloseLibrary(PagerSupportBase);
}
else {
ErrorMsg("couldn't open %s.\n", SUPPORT_LIB);
result = 20;
}
CloseLibrary(UtilityBase);
}
else {
ErrorMsg("couldn't open %s.\n", "utility.library");
result = 20;
}
XCEXIT(result);
}