This is StandardInfo.m in view mode; [Download] [Up]
#import "StandardInfo.h"
@implementation StandardInfo
- initForAppUsingNib:(const char *)ptrNibName
{
#define STR_MAXLEN 1024
char tmpString[STR_MAXLEN + 1],
numString[16];
NXStream *infoStream;
char *curPos,
*curPosSave;
int lineLen;
int nextchar; /* has to be "int" so we can check
* EOF */
const char authorFlag[] = "Author";
const int authorFlen = 6;
const char versionFlag[] = "Version";
const int versionFlen = 7;
const char emailFlag[] = "Email";
const int emailFlen = 5;
const char dateFlag[] = "YYYYMMDD";
const int dateFlen = 8;
const int dayOfYearMap[12] = {
0, 31, 59, 90,
120, 151, 181, 212,
243, 273, 304, 334};
infoNibName = ptrNibName;
strcpy(tmpString,[[NXBundle mainBundle] directory]);
strcat(tmpString, "/StandardInfo");
infoStream = NXMapFile(tmpString, NX_READONLY);
if (infoStream == NULL) {
/* should do some kind of error processing here... */
printf("%s: StandardInfo processing unable to find %s\n",
[NXApp appName], tmpString);
return self;
}
do {
lineLen = 0;
curPos = tmpString;
while (((nextchar = NXGetc(infoStream)) != EOF)) {
if (nextchar == '\n')
break;
if (lineLen < STR_MAXLEN) {
*(curPos++) = nextchar;
lineLen++;
}
}
*curPos = '\0';
if (tmpString[0] == '#')
continue;
if (lineLen > 8) {
/* -- check for Author name info -- */
if (!strncmp(tmpString, authorFlag, authorFlen)) {
curPosSave = curPos = &tmpString[emailFlen];
while ((*curPos == ' ') || (*curPos == '\t'))
curPos++;
if (curPos != curPosSave) {
strcpy(authorNameStr, curPos);
continue;
}
}
/* -- check for Version info -- */
if (!strncmp(tmpString, versionFlag, versionFlen)) {
curPosSave = curPos = &tmpString[versionFlen];
while ((*curPos == ' ') || (*curPos == '\t'))
curPos++;
if (curPos != curPosSave) {
strcpy(versionStr, "Version ");
strcat(versionStr, curPos);
continue;
}
}
/* -- check for Email contact info -- */
if (!strncmp(tmpString, emailFlag, emailFlen)) {
curPosSave = curPos = &tmpString[emailFlen];
while ((*curPos == ' ') || (*curPos == '\t'))
curPos++;
if (curPos != curPosSave) {
strcpy(emailContactStr, curPos);
continue;
}
}
/* -- check for Date info, as YYYY/MM/DD -- */
if (!strncmp(tmpString, dateFlag, dateFlen)) {
curPosSave = curPos = &tmpString[dateFlen];
while ((*curPos == ' ') || (*curPos == '\t'))
curPos++;
if (curPos != curPosSave) {
strncpy(numString, "\0\0\0\0\0\0", 6);
if (NXIsDigit(*curPos)) numString[0] = *(curPos++);
if (NXIsDigit(*curPos)) numString[1] = *(curPos++);
if (NXIsDigit(*curPos)) numString[2] = *(curPos++);
if (NXIsDigit(*curPos)) numString[3] = *(curPos++);
dateValue.tm_year = strtol(numString, (char **)NULL, 10);
if (dateValue.tm_year < 70) dateValue.tm_year += 100;
if (dateValue.tm_year > 1900) dateValue.tm_year -= 1900;
if ((*curPos == '/') || (*curPos == '-'))
curPos++;
strncpy(numString, "\0\0\0\0\0\0", 6);
if (NXIsDigit(*curPos)) numString[0] = *(curPos++);
if (NXIsDigit(*curPos)) numString[1] = *(curPos++);
dateValue.tm_mon = strtol(numString, (char **)NULL, 10) - 1;
if ((*curPos == '/') || (*curPos == '-'))
curPos++;
strncpy(numString, "\0\0\0\0\0\0", 6);
if (NXIsDigit(*curPos)) numString[0] = *(curPos++);
if (NXIsDigit(*curPos)) numString[1] = *(curPos++);
dateValue.tm_mday = strtol(numString, (char **)NULL, 10);
dateValue.tm_hour = 12;
dateValue.tm_min = dateValue.tm_sec = 0;
dateValue.tm_isdst = -1;
dateValue.tm_yday = dayOfYearMap[dateValue.tm_mon]
+ dateValue.tm_mday;
if ((dateValue.tm_mon > 1) && ((dateValue.tm_year % 4) == 0)) {
if ((dateValue.tm_year % 4) != 0)
dateValue.tm_yday++;
}
dateValue.tm_wday = 0;
strftime(dateStr, DATESTR_LEN, "%b %d, %Y", &dateValue);
continue;
}
}
}
} while (nextchar != EOF);
NXCloseMemory(infoStream, NX_FREEBUFFER);
return self;
}
- showInfoPanel:sender
{
if (infoNibName) {
if (!infoPanel) {
[NXApp loadNibSection:infoNibName owner:self];
[dateFieldID setStringValueNoCopy:dateStr];
[versionFieldID setStringValueNoCopy:versionStr];
[emailFieldID setStringValueNoCopy:emailContactStr];
}
[infoPanel makeKeyAndOrderFront:self];
} else {
NXRunAlertPanel(NULL,
"Standard Info object not initialized correctly.",
NULL, NULL, NULL);
}
return self;
}
- (const char *)infoVersion
{
return versionStr;
}
- (const char *)infoVersionDate
{
return dateStr;
}
- (const char *)infoAuthorName
{
return authorNameStr;
}
- (const char *)infoEmailContact
{
return emailContactStr;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.