slist
This commit is contained in:
50
slist.c
50
slist.c
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user