/* net.c */
#define VERS_DATE "21-May-96"
/* simple client program to act with mars_nwe */

/****************************************************************
 * (C)opyright (C) 1993,1996  Martin Stover, Marburg, Germany   *
 ****************************************************************/

#include "net.h"

char *funcname=NULL;
char  prgpath[65];

typedef int (*NET_FUNC)(int argc, char *argv[], int mode);

static struct s_net_functions {
 char      *name;
 char      *description;
 NET_FUNC  func;
 int       mode;
} net_functions[] = {

{"SPAWN",  "spawn program(command file)" ,          func_exec   , 0},
{"EXEC",   "execute program(command file)",         func_exec   , 1},
{"ECHO",   "echoes string (command file)" ,         func_echo   , 0},
{"CD",     "change directory (command file)" ,      func_cwd    , 0},
{"LOGIN",  "login to server as user" ,              func_login  , 0},
{"PROFILE","read command file" ,                    func_profile, 0},
{"CAPTURE","list and redirect printers" ,           func_capture, 0},
{"ENDCAP", "cancel redirect printers" ,             func_capture, 1},
{"MAP",    "list maps and map drives" ,             func_map    , 0},
{"MAPDEL", "removes maps" ,                         func_map    , 1},
{"PATH",   "list and set search path" ,             func_path   , 0},
{"PATHDEL","removes search path" ,                  func_path   , 1},
{"PATHINS","insert search path" ,                   func_path   , 2},
{"LOGOUT", "logout from server",       		    func_logout , 0},
{"SLIST",  "list servers",          		    func_slist  , 0},
{"PASSWD", "change password",          		    func_passwd , 0},
#if 1
{"TESTS",  "only testroutines!",                    func_tests  , 0},
#endif
{"DEBUG",  "set debug level, for mars_nwe only !",  func_debug  , 0}
};

#define MAX_FUNCS  (sizeof(net_functions) / sizeof(struct s_net_functions))

static int get_entry_nr(char *fstr)
{
  int       entry    = MAX_FUNCS;
  char      buff[200];
  char      funcn[100];
  char      *pp;
  strmaxcpy(buff, fstr, sizeof(buff)-1);
  korrpath(buff);
  get_path_fn(buff, NULL, funcn);
  pp=strrchr(funcn, '.');
  if (NULL != pp) *pp = '\0';
  upstr(funcn);
  while (entry--) {
    if (!strcmp(funcn, net_functions[entry].name)) return(entry);
  }
  return(-1);
}

int call_func_entry(int argc, char *argv[])
{
  int       funcmode;
  int       result   = -1;
  NET_FUNC  func     = NULL;
  int       entry = get_entry_nr(argv[0]);
  if (entry > -1) {
    func     = net_functions[entry].func;
    funcmode = net_functions[entry].mode;
    funcname = net_functions[entry].name;
  }
  if (NULL != func) {
    if (ipx_init() || func == func_map) {
      result = (*func)(argc, argv, funcmode);
    } else {
      fprintf(stderr, "Cannot init IPX\n");
    }
  } else result = -0xff;
  return(result);
}

static void get_path(char *path)
{
  char buf[100];
  strmaxcpy(buf, path, sizeof(buf)-1);
  korrpath(buf);
  get_path_fn(buf, prgpath, NULL);
}

int main(int argc, char *argv[])
{
  int result = -0xff;
  get_path(argv[0]);
  result = call_func_entry(argc, argv);
  if (result == -0xff)
    result = call_func_entry(argc-1, argv+1);
  if (result == -0xff) {
    int  k= MAX_FUNCS;
    char progname[256];
    strmaxcpy(progname, argv[0], sizeof(progname)-1);
    upstr(progname);
    fprintf(stderr, "\n"
     "* (C)opyright (C) 1993,1996  Martin Stover, Marburg, Germany *\n"
     "  Version: %s\n\n", VERS_DATE);

    fprintf(stderr, "Usage:\t%s func ... \nfuncs:", progname);
    while (k--) {
      if (net_functions[k].func) {
        fprintf(stderr, "\t%s\t: %s\n",
           net_functions[k].name, net_functions[k].description);
      }
    }
  }
  return(result);
}


