This commit is contained in:
Mario Fetka
2026-05-22 19:38:31 +02:00
parent d1840da361
commit 1601a80513

50
slist.c
View File

@@ -10,17 +10,44 @@ static int usage(void)
return(0);
}
static int same_arg(char *a, char *b)
{
while (*a || *b) {
int ca = *a++;
int cb = *b++;
if (ca >= 'a' && ca <= 'z') ca -= 32;
if (cb >= 'a' && cb <= 'z') cb -= 32;
if (ca != cb) return(0);
}
return(1);
}
static int is_help_arg(char *s)
{
if (!s) return(0);
return(!strcmp(s, "/?") || !strcmp(s, "-?") || !strcmp(s, "?"));
return(same_arg(s, "/?") || same_arg(s, "-?") || same_arg(s, "?"));
}
static unsigned long node_to_number(uint8 *addr)
{
unsigned long n = 0;
int i;
/*
* Novell SLIST displays the node field right-aligned in a 12 character
* bracketed field. For a node like 000000000001 this appears as " 1".
*/
for (i = 4; i < 10; i++)
n = (n << 8) + addr[i];
return(n);
}
static void print_net_node_status(uint8 *addr, int is_default)
{
fprintf(stdout, "[%08lX][%02X%02X%02X%02X%02X%02X]%s",
fprintf(stdout, "[%08lX][%12lu]%s",
(unsigned long)GET_BE32(addr),
addr[4], addr[5], addr[6], addr[7], addr[8], addr[9],
node_to_number(addr),
is_default ? "Default" : "");
}
@@ -41,8 +68,8 @@ int func_slist(int argc, char *argv[], int mode)
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")) {
if (same_arg(argv[i], "/C") || same_arg(argv[i], "/CONTINUE") ||
same_arg(argv[i], "-C") || same_arg(argv[i], "-CONTINUE")) {
continue;
}
return(usage());
@@ -53,8 +80,12 @@ int func_slist(int argc, char *argv[], int mode)
upstr(pattern);
fprintf(stdout, "Known NetWare File Servers Network Node Address Status\n");
fprintf(stdout, "-------------------------------------------- -------- ----------------------\n");
/*
* Match Novell SLIST spacing closely:
* name column 44 chars, then Network / Node Address / Status.
*/
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) {
@@ -67,11 +98,6 @@ int func_slist(int argc, char *argv[], int mode)
if (!ncp_17_3d(NCP_BINDERY_FSERVER, obj.object_name,
1, "NET_ADDRESS", &prop)) {
/*
* 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);
}