slist
This commit is contained in:
@@ -117,3 +117,8 @@ install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
||||
RENAME map.exe)
|
||||
|
||||
install(FILES "${MARS_DOSUTILS_NET_EXE}"
|
||||
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
||||
RENAME slist.exe)
|
||||
|
||||
|
||||
59
slist.c
59
slist.c
@@ -2,17 +2,26 @@
|
||||
|
||||
#include "net.h"
|
||||
|
||||
#define NCP_BINDERY_FSERVER 0x0004
|
||||
|
||||
static int usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage:\t%s [pattern]\n", funcname);
|
||||
return(-1);
|
||||
fprintf(stdout, "Usage: SLIST [Server] [/Continue]\n");
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void print_net_node(uint8 *addr)
|
||||
static int is_help_arg(char *s)
|
||||
{
|
||||
fprintf(stdout, "%08lX %02X%02X%02X%02X%02X%02X",
|
||||
if (!s) return(0);
|
||||
return(!strcmp(s, "/?") || !strcmp(s, "-?") || !strcmp(s, "?"));
|
||||
}
|
||||
|
||||
static void print_net_node_status(uint8 *addr, int is_default)
|
||||
{
|
||||
fprintf(stdout, "[%08lX][%02X%02X%02X%02X%02X%02X]%s",
|
||||
(unsigned long)GET_BE32(addr),
|
||||
addr[4], addr[5], addr[6], addr[7], addr[8], addr[9]);
|
||||
addr[4], addr[5], addr[6], addr[7], addr[8], addr[9],
|
||||
is_default ? "Default" : "");
|
||||
}
|
||||
|
||||
int func_slist(int argc, char *argv[], int mode)
|
||||
@@ -22,33 +31,48 @@ int func_slist(int argc, char *argv[], int mode)
|
||||
uint8 pattern[50];
|
||||
int found = 0;
|
||||
int result;
|
||||
int i;
|
||||
|
||||
(void)mode;
|
||||
|
||||
if (argc > 2) return(usage());
|
||||
strcpy(pattern, "*");
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (is_help_arg(argv[i])) return(usage());
|
||||
|
||||
if (argv[i][0] == '/' || argv[i][0] == '-') {
|
||||
if (!stricmp(argv[i], "/C") || !stricmp(argv[i], "/CONTINUE") ||
|
||||
!stricmp(argv[i], "-C") || !stricmp(argv[i], "-CONTINUE")) {
|
||||
continue;
|
||||
}
|
||||
return(usage());
|
||||
}
|
||||
|
||||
strmaxcpy(pattern, argv[i], sizeof(pattern) - 1);
|
||||
}
|
||||
|
||||
if (argc == 2) strmaxcpy(pattern, argv[1], sizeof(pattern) - 1);
|
||||
else strcpy(pattern, "*");
|
||||
upstr(pattern);
|
||||
|
||||
fprintf(stdout, "\n%-52s%-10s%-12s\n",
|
||||
"Known NetWare File Servers", "Network", "Node Address");
|
||||
fprintf(stdout,
|
||||
"-----------------------------------------------"
|
||||
"---------------------------\n");
|
||||
fprintf(stdout, "Known NetWare File Servers Network Node Address Status\n");
|
||||
fprintf(stdout, "-------------------------------------------- -------- ----------------------\n");
|
||||
|
||||
while ((result = ncp_17_37(last_id, NCP_BINDERY_FSERVER,
|
||||
pattern, &obj)) == 0) {
|
||||
NW_PROPERTY prop;
|
||||
|
||||
found = 1;
|
||||
found++;
|
||||
last_id = obj.object_id;
|
||||
|
||||
fprintf(stdout, "%-52s", obj.object_name);
|
||||
fprintf(stdout, "%-44s", obj.object_name);
|
||||
|
||||
if (!ncp_17_3d(NCP_BINDERY_FSERVER, obj.object_name,
|
||||
1, "NET_ADDRESS", &prop)) {
|
||||
print_net_node(prop.value);
|
||||
/*
|
||||
* We only have one active connection in mars-dosutils, so mark the
|
||||
* first/current server as Default. This matches the useful Novell
|
||||
* output closely enough for scripts and humans.
|
||||
*/
|
||||
print_net_node_status(prop.value, found == 1);
|
||||
}
|
||||
|
||||
fprintf(stdout, "\n");
|
||||
@@ -56,8 +80,7 @@ int func_slist(int argc, char *argv[], int mode)
|
||||
if (last_id == MAX_U32) break;
|
||||
}
|
||||
|
||||
if (!found)
|
||||
fprintf(stdout, "No servers found\n");
|
||||
fprintf(stdout, "\nTotal of %d file servers found\n", found);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user