/* * mars-nwe-dosutils - NetWare/DOS utility tools. * * Copyright (C) 2026 Mario Fetka * Copyright (C) 1993,1996 Martin Stover, Marburg, Germany * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* * Purpose: NET multicall front-end and command dispatcher for the DOS utility collection. * Depends on: net.h plus command modules such as login.c, map.c, flag.c, ndir.c, trustee.c, tools.c and netcall.c. */ #define VERS_DATE "21-May-96" #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}, {"FLAG", "display or modify file attributes", func_flag , 0}, {"FLAGDIR","display or modify directory attributes",func_flagdir, 0}, {"GRANT", "grant trustee rights", func_grant , 0}, {"REVOKE", "revoke trustee rights", func_revoke , 0}, {"REMOVE", "remove trustee", func_remove , 0}, {"NDIR", "list directory contents", func_ndir , 0}, {"RIGHTS", "display effective file/directory rights",func_rights, 0}, {"CREATOR","display or set creator/modifier/archive ids",func_creator,0}, {"SLIST", "list servers", func_slist , 0}, {"WHOAMI", "show current NetWare user", func_whoami , 0}, #if 0 /* NCOPY disabled: unsafe/open server-side-copy work-in-progress. */ {"NCOPY", "copy files", func_ncopy , 0}, #endif {"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); }