📄 netinfo.c
字号:
**********************************************************************/
VOID GetLM_VersionInfo (NETWORK_STRUCT * pNetInfo)
{
unsigned short int err, len;
char buf[BUFSIZ], *pbegin;
int i;
err = NetConfigGet ("VERSION", "LAN_MANAGER", buf, BUFSIZ, &len);
/* buf = x.x.x [major].[minor].[patch] */
if (err == 0)
{
/* skip to minor version */
if (pbegin = strstr (buf, "."))
{
++pbegin;
/* skip to patch number */
if (pbegin = strstr (pbegin, "."))
{
for (i = 0, ++pbegin; i < 7 && *pbegin != NULL; ++i, ++pbegin)
pNetInfo->szLanManager_CSD[i] = *pbegin;
pNetInfo->szLanManager_CSD[i] = '\0';
}
}
}
}
/*********************************************************************
* SprintNetworkInfo - Put Network information into a set of strings
* to be printed or displayed.
*
* pNetInfo - Network information structure.
* szSumStrings - Summary strings for summary information.
*
* Returns: NULL if an error occured.
*********************************************************************/
QSZ * SprintNetworkInfo (NETWORK_STRUCT *pNetInfo,
CHAR szSumStrings[][MAX_SUMM_INFO + 5])
{
WORD wNmbrStrings; /* Number of strings */
WORD wNmbrChars; /* Number of characters in the strings */
WORD i; /* Index variable */
CHAR chBuffer[80]; /* Local string */
QSZ *pqszStrings; /* Location for storing string pointers */
WORD wAlignColumn; /* Column to align titles */
/* Summary Strings */
if (szSumStrings != NULL)
{
szSumStrings[0][0] ='\0';
szSumStrings[1][0] ='\0';
if (pNetInfo->fNetworkActive == FALSE &&
pNetInfo->wNetworkType != NET_LANMAN &&
pNetInfo->wNetworkType != NET_LANMAN_BASIC &&
pNetInfo->wNetworkType != NET_LANMAN_ENHANCED)
strncpy (szSumStrings[0], paszNetworkTypes[NET_NO_NETWORK],
MAX_SUMM_INFO);
else
{
/* Network name */
/* fixed bug 2414: network was getting reported as "MS Workgroup
Clien" because only MAX_SUMM_INFO (18) chars were getting copied
by strnspy. Can't increase MAX_SUMM_INFO because that will
break other things. Added XTRA_LEN_HACK to copy 1 more character...
wanted to make it longer to avoid this problem with future network
strings, but receiving buffer is only 23 bytes. -jeremys */
#define XTRA_LEN_HACK 1
strncpy (szSumStrings[0], pNetInfo->szNetworkType, MAX_SUMM_INFO
+XTRA_LEN_HACK);
strncat (szSumStrings[0], " ",
MAX_SUMM_INFO + XTRA_LEN_HACK - strlen (szSumStrings[0]));
/* Network version */
if (pNetInfo->wNetworkType == NET_NOVELL)
{
sprintf (szSumStrings[1], "Shell %d.%02d.%02d",
pNetInfo->wShellMajor,
pNetInfo->wShellMinor,
pNetInfo->wShellRevision);
}
else if (pNetInfo->wNetworkMajor > 0)
{
sprintf (chBuffer, "%d.%02d", pNetInfo->wNetworkMajor,
pNetInfo->wNetworkMinor);
if (strlen (chBuffer) + strlen (szSumStrings[0]) > MAX_SUMM_INFO)
{
i = 1;
szSumStrings[i][0] = '\0';
}
else
i = 0;
strncat (szSumStrings[i], chBuffer,
MAX_SUMM_INFO - strlen (szSumStrings[i]));
}
}
/* Remove trailing spaces from the first line */
i = strlen (szSumStrings[0]) - 1;
while (i >= 1 && szSumStrings[0][i] == ' ')
szSumStrings[0][i--] = '\0';
return (NULL);
}
/* Overestimate the amount of space required for the strings */
if (pNetInfo->fNetworkActive == FALSE &&
pNetInfo->wNetworkType != NET_LANMAN &&
pNetInfo->wNetworkType != NET_LANMAN_BASIC &&
pNetInfo->wNetworkType != NET_LANMAN_ENHANCED &&
pNetInfo->wNetworkType != NET_WORKGROUP_CLIENT)
{
wAlignColumn = 18;
wNmbrStrings = 2;
wNmbrChars = wAlignColumn + strlen (pszNo) + 1;
}
else
{
wAlignColumn = 26;
wNmbrStrings = 90;
wNmbrChars = 3000;
}
/* Allocate space for the pointer area and string area */
pqszStrings = AllocStringSpace (wNmbrStrings, wNmbrChars);
if (pqszStrings == NULL)
return (NULL);
/* Put the information in place */
i = 0;
{
/* Network Detected */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NETWORK_DETECTED],
wAlignColumn);
if (pNetInfo->fNetworkActive == TRUE ||
pNetInfo->wNetworkType == NET_LANMAN ||
pNetInfo->wNetworkType == NET_LANMAN_BASIC ||
pNetInfo->wNetworkType == NET_LANMAN_ENHANCED)
Qstrcat (pqszStrings[i], pszYes);
else
Qstrcat (pqszStrings[i], pszNo);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* We're done here if there was no network */
if (pNetInfo->fNetworkActive == FALSE &&
pNetInfo->wNetworkType != NET_LANMAN &&
pNetInfo->wNetworkType != NET_LANMAN_BASIC &&
pNetInfo->wNetworkType != NET_LANMAN_ENHANCED)
{
pqszStrings[i] = NULL;
return (pqszStrings);
}
}
{
/* Network Name */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NETWORK_NAME],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szNetworkType);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
{
/* Network Version */
if ((pNetInfo->wNetworkType == NET_NOVELL &&
pNetInfo->szNovellNetwareVersion[0] != '\0') ||
(pNetInfo->wNetworkMajor != 0 ||
pNetInfo->wNetworkMinor != 0))
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_VERSION],
wAlignColumn);
if (pNetInfo->wNetworkType == NET_NOVELL)
{
Qstrcat (pqszStrings[i], pNetInfo->szNovellNetwareVersion);
}
else
{
sprintf (chBuffer, "%d.%02d", pNetInfo->wNetworkMajor,
pNetInfo->wNetworkMinor);
Qstrcat (pqszStrings[i], chBuffer);
}
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
}
{
/* MS-DOS Network Functions: [Not] Supported */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_MSNET],
wAlignColumn);
if (pNetInfo->fMsnetCompatible)
Qstrcat (pqszStrings[i], pszSupported);
else
Qstrcat (pqszStrings[i], pszNotSupported);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
{
/* MSNET Machine Name */
if (pNetInfo->fMsnetCompatible)
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_COMPUTER_NAME],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szMsnetMachineName);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
}
{
/* NetBIOS Installed */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NETBIOS],
wAlignColumn);
if (pNetInfo->fNetBiosCompatible)
Qstrcat (pqszStrings[i], pszYes);
else
Qstrcat (pqszStrings[i], pszNo);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
{
/* NetBIOS Address */
if (pNetInfo->fNetBiosCompatible)
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NETBIOS_ADDRESS],
wAlignColumn);
sprintf (chBuffer, "%04X:%04X", pNetInfo->wNetBIOSSegment,
pNetInfo->wNetBIOSOffset);
Qstrcat (pqszStrings[i], chBuffer);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
}
/* LANMAN Information */
{
if (pNetInfo->wNetworkType == NET_LANMAN ||
pNetInfo->wNetworkType == NET_LANMAN_BASIC ||
pNetInfo->wNetworkType == NET_LANMAN_ENHANCED ||
pNetInfo->wNetworkType == NET_WORKGROUP_CLIENT)
{
/* LAN Manager Root */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_ROOT],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szLanRoot);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* User Name */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_USER_NAME],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szUserName);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* Primary Domain */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_DOMAIN],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szPrimaryDomain);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* Server Connection */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_SERVER],
wAlignColumn);
if (pNetInfo->fServerConnection == TRUE)
Qstrcat (pqszStrings[i], "Established");
else
Qstrcat (pqszStrings[i], "Not Established");
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* Mailslot Support */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_MAILSLOT],
wAlignColumn);
if (pNetInfo->fMailslot_Support == TRUE)
Qstrcat (pqszStrings[i], pszYes);
else
Qstrcat (pqszStrings[i], pszNo);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* API Support */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_API],
wAlignColumn);
if (pNetInfo->fAPI_Support == TRUE)
Qstrcat (pqszStrings[i], pszYes);
else
Qstrcat (pqszStrings[i], pszNo);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* LAN Manager Date */
if (pNetInfo->szLanManager_Date[0] != '\0')
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_DATE],
wAlignColumn);
if (strlen(pNetInfo->szLanManager_Date) == 5)
sprintf (chBuffer, "0%c/%c%c/%c%c",
pNetInfo->szLanManager_Date[0],
pNetInfo->szLanManager_Date[1],
pNetInfo->szLanManager_Date[2],
pNetInfo->szLanManager_Date[3],
pNetInfo->szLanManager_Date[4]);
else
sprintf (chBuffer, "%c%c/%c%c/%c%c",
pNetInfo->szLanManager_Date[0],
pNetInfo->szLanManager_Date[1],
pNetInfo->szLanManager_Date[2],
pNetInfo->szLanManager_Date[3],
pNetInfo->szLanManager_Date[4],
pNetInfo->szLanManager_Date[5]);
Qstrcat (pqszStrings[i], chBuffer);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
/* LAN Manager Date */
if (pNetInfo->szLanManager_CSD[0] != '\0')
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_LANMAN_PATCH_LEVEL],
wAlignColumn);
Qstrcat (pqszStrings[i], pNetInfo->szLanManager_CSD);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
}
}
}
/* Novell Information */
{
if (pNetInfo->wNetworkType == NET_NOVELL)
{
/* Shell version */
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NOVELL_SHELL_VER],
wAlignColumn);
sprintf (chBuffer, "%d.%02d.%02d", pNetInfo->wShellMajor,
pNetInfo->wShellMinor, pNetInfo->wShellRevision);
Qstrcat (pqszStrings[i], chBuffer);
/* Set the next pointer */
PrepNextString (pqszStrings, i++);
/* Shell Type */
if (pNetInfo->wShellMajor * 100 + pNetInfo->wShellMinor >= 301 &&
pNetInfo->wShellType <= 2)
{
QstrcpyAlign (pqszStrings[i], paszNetworkTitles[NET_NOVELL_SHELL_TYPE],
wAlignColumn);
switch (pNetInfo->wShellType)
{
case 0:
Qstrcat (pqszStrings[i], pszConventional);
break;
case 1:
Qstrcat (pqszStrings[i], "Expanded Memory (EMS)");
break;
case 2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -