/* UMSWatch */

//+ Defines & Includes
#include    <dos/dos.h>
#include    <dos/dosextens.h>
#include    <dos/rdargs.h>
#include    <exec/exec.h>

#include    <clib/alib_protos.h>
#include    <clib/dos_protos.h>
#include    <clib/exec_protos.h>

#include    <stdio.h>
#include    <stdarg.h>
#include    <time.h>

#define     STRING_LENGTH       60
#define     FAIL                20

#define     POINTS              18

enum    long
{
    NAME,
    SERVER,
    RD_Size
};
//-
//+ Consts
const   char    *Version        = "$VER: PingUMSWatch 0.1 (03.06.95)";

const   char    *RD_Template    = {
                                    "N=NAME,"
                                    "S=SERVER"
                                  };
//-
//+ Variables

char    LoginName[ STRING_LENGTH ];
char    LoginServer[ STRING_LENGTH ];

char    PortName[ 2 * STRING_LENGTH ];

struct RDArgs   *RD_Struct  = NULL;

struct MsgPort  *WatchPort  = NULL;
struct Message  *WatchMessage;

long    RD_Array[ RD_Size ];

BPTR    StdOutputHandle;

//-

//+ main()
main()
{
    if( StdOutputHandle = Output())
    {
        if( RD_Struct = ReadArgs( RD_Template, RD_Array, NULL))
        {
            if( RD_Array[ NAME ]) strncpy( LoginName, ( char *) RD_Array[ NAME ], STRING_LENGTH);
            else strcpy( LoginName, "Sysop");

            if( RD_Array[ SERVER ]) strncpy( LoginServer, ( char *) RD_Array[ SERVER ], STRING_LENGTH);
            else strcpy( LoginServer, "default");

            sprintf( PortName, "User: %s Server: %s", LoginName, LoginServer);

            Forbid();

            if( WatchPort = FindPort( PortName))
            {
                if( WatchMessage = AllocVec( sizeof( struct Message), MEMF_ANY|MEMF_CLEAR|MEMF_PUBLIC))
                {
                    WatchMessage->mn_Node.ln_Type   = NT_MESSAGE;
                    WatchMessage->mn_Length         = sizeof( struct Message);

                    PutMsg( WatchPort, WatchMessage);
                }
                else
                {
                    FPuts( StdOutputHandle, "not enough memory!\n");
                }
            }
            else
            {
                FPrintf( StdOutputHandle, "UMSWatch \x22%s\x22 is not active!\n", PortName);
            }

            Permit();

            FreeArgs( RD_Struct);
        }
        else
        {
            FPuts( StdOutputHandle, "required argument missing!\n");
        }
    }

    exit( NULL);
}
//-
