This is InfoPanel.m in view mode; [Download] [Up]
/* * Copyright 1991 RightBrain Software. All rights reserved. * * No part of this code may be reproduced in any form, compiled * or source code, nor used for any purpose without the express * written permission of RightBrain Software. * * Entered into the public domain 12/15/93 by RightBrain Software. * */ #import "timebomb.h" #import <appkit/TextField.h> #import <appkit/appkit.h> #import <pwd.h> #import <ctype.h> #import <time.h> #import <strings.h> #import "InfoPanel.h" #import "Time.h" #define DEVELOP 0 #ifndef EDIT_N #define EDIT_N 0 #endif #ifndef VERSION #define VERSION 1.0 #endif char users[256] = "**********"; @implementation InfoPanel + new { self = [super new]; return self; } - show { [panel makeKeyAndOrderFront: self]; return self; } /****************************** timeBombCheck */ - timeBombCheck { Time *time; long cur, end; /* time values */ time = [Time new]; cur = [time currentIntTime]; // end = cur + 900; // current time plus fifteen minutes (60 * 15) end = EXPIRE_TIME; if ( cur > end ) { NXRunAlertPanel("Expired", "This beta software has expired. Call +1 415-326-2974 to order a working copy", "Quit", NULL, NULL ); [NXApp terminate: self]; } [time free]; return self; } /****************************** setupVersionText */ - setupVersionText { char version[128]; sprintf ( version, "(v%2.1f edit %d", VERSION, EDIT_N); if ( TIME_BOMB_VERSION ) { strcat ( version, "*"); } if ( !SINGLE_USER ) { strcat ( version, "M"); } strcat ( version, ")" ); [versionText setStringValue: version]; myInfoPanel = self; return self; } - personalizeButton:sender { [NXApp stopModal]; return self; } // personalize - quitButton:sender { [NXApp terminate:self]; return self; } - checkRegistration:sender { FILE *fd; char *chptr; int ch, cnt, tmp, tmpidx, tmplen, usercount, len; char host[28], userbuff[5], namebuff[128], userID[128], entry[1024]; char userName[512], userCompany[512], userDate[512]; long idx, placename, placecount; struct passwd *pwd; short found; long theTime; struct tm *date; NXModalSession session; int button, eventmask; int readOnly; #if SINGLE_USER if ( !strncmp ( "/LocalApps/", NXArgv[0], 11 ) ) { NXRunAlertPanel("Single User", "This software is only licensed for 1 CPU and will not run from /LocalApps. Call +1 415-326-2974 to order a multiple-use copy", "Quit", NULL, NULL ); [NXApp terminate: self]; } #endif gethostname ( host, 28 ); pwd = getpwuid ( getuid() ); sprintf ( userID, "%s@%s\0", pwd->pw_name, host ); len = strlen ( userID ); readOnly = FALSE; fd = fopen ( NXArgv[0], "r+" ); if ( (int)fd <= 0 ) { fd = fopen ( NXArgv[0], "r" ); if ( (int)fd <= 0 ) { NXRunAlertPanel ( "Launch", "Problems: couldn't find licensing information.", NULL, NULL, NULL ); exit ( 0 ); } readOnly = TRUE; } // find the secret place idx = 0; placename = 0; placecount = 0; while ( (ch=fgetc(fd)) != EOF ) { idx++; if ( ch == '*' ) { cnt=0; while ( (ch=fgetc(fd)) != EOF ) { if ( ch == '*' ) { cnt++; } else { if ( cnt > 5 ) { placecount = idx + 10; placename = idx + 13; // leave the stars... } else { idx += cnt + 1; } break; } } if ( placename ) break; } // if } // while if ( ch != EOF ) { usercount = 0; // find out how many users are already in the database: for ( tmp=0; tmp<3; tmp++ ) { ch=fgetc(fd); usercount += (int)ch; userbuff[tmp] = ch; } userbuff[tmp] = '\0'; if ( usercount ) { sscanf ( userbuff, "%d", &usercount ); found = TRUE; } // check to see if this user is already there: if ( DEVELOP ) { [personalName setStringValue: "Glenn Reid"]; [personalCompany setStringValue: "RightBrain Software"]; [personalDate setStringValue: "UNDER DEVELOPMENT"]; [personalButton setEnabled:FALSE]; [quitButton setEnabled:FALSE]; [personalButton setTransparent:YES]; [quitButton setTransparent:YES]; } else if ( usercount ) { tmp = 0; while ( (ch=fgetc(fd)) != '\n' ) { namebuff[tmp++] = ch; placename++; } namebuff[tmp] = '\0'; placename++; // pick it apart to put in the user panel tmp = tmpidx = 0; chptr = NULL; tmplen = strlen ( namebuff ); while ( tmp < tmplen ) { if ( namebuff[tmp] == '~' ) { namebuff[tmp] = '\0'; strcpy ( userName, namebuff ); tmpidx = tmp + 1; chptr = (char *)(namebuff + tmp + 1); } else if ( (tmpidx != 0) && namebuff[tmp] == '\(' ) { namebuff[tmp-1] = '\0'; strcpy ( userCompany, (char *)(namebuff + tmpidx) ); tmpidx = tmp + 1; chptr = (char *)(namebuff + tmp + 1); } else if ( (chptr!=NULL) && namebuff[tmp] == ')' ) { tmpidx = tmp + 1; chptr = (char *)(namebuff + tmp + 1); } tmp++; } if ( tmpidx != 0 ) { strcpy ( userDate, chptr ); } [personalName setStringValue: userName]; [personalCompany setStringValue: userCompany]; [personalDate setStringValue: userDate]; [personalName setEnabled: NO]; [personalCompany setEnabled: NO]; [personalDate setEnabled: NO]; [personalButton setEnabled:FALSE]; [quitButton setEnabled:FALSE]; [personalButton setTransparent:YES]; [quitButton setTransparent:YES]; } else { if ( readOnly ) { NXRunAlertPanel ( "Protection", "Must be able to open the Application file for WRITING; %s", NULL, NULL, NULL, "please give the program WRITE PERMISSION for you or other." ); exit ( 1 ); } /* set up modal session to watch for "Personalize" button */ // don't put the full name into the panel if the user account // is "me", because it won't be helpful: if ( strncmp ( pwd->pw_name, "me", 2 ) ) { [personalName setStringValue: pwd->pw_gecos]; } [personalCompany setStringValue: ""]; [personalName setEnabled:YES]; [personalName setEditable:YES]; [myInfoPanel performClose:self]; [myInfoPanel makeFirstResponder:[myInfoPanel contentView]]; [myInfoPanel setWorksWhenModal: YES]; eventmask = [myInfoPanel addToEventMask: (NX_KEYDOWNMASK | NX_KEYUPMASK) ]; [myInfoPanel makeKeyAndOrderFront: self]; retry: [personalMatrix selectTextAt:0]; [NXApp beginModalSession:&session for:myInfoPanel]; for (;;) { button = [NXApp runModalSession:&session]; if (button != NX_RUNCONTINUES) break; } [NXApp endModalSession:&session]; if ( button != NX_RUNSTOPPED ) { exit ( 0 ); } if ( [personalName stringValue] && strlen([personalName stringValue]) ) { strcpy ( userName, [personalName stringValue] ); } else { NXBeep(); NXRunAlertPanel ( "Personalize", "You must personalize with both Name and Company", NULL, NULL, NULL ); goto retry; } if ( [personalCompany stringValue] && strlen([personalCompany stringValue]) ) { strcpy ( userCompany, [personalCompany stringValue] ); } else { NXBeep(); NXRunAlertPanel ( "Personalize", "You must personalize with both Name and Company", NULL, NULL, NULL ); goto retry; } [personalButton setEnabled:FALSE]; [quitButton setEnabled:FALSE]; [personalButton setTransparent:YES]; [quitButton setTransparent:YES]; [personalName setEnabled: NO]; [personalCompany setEnabled: NO]; [personalDate setEnabled: NO]; [myInfoPanel orderOut:self]; [myInfoPanel setEventMask: eventmask]; NXPing(); theTime = time(0); date = localtime ( &theTime ); sprintf ( entry, "%s (%s) %02d/%02d/%02d %02d:%02d\n", userID, pwd->pw_gecos, date->tm_mon + 1, date->tm_mday, date->tm_year, date->tm_hour, date->tm_min ); [personalDate setStringValue:entry]; sprintf ( entry, "%s~%s (%s) %s %02d/%02d/%02d %02d:%02d\n", userName, userCompany, pwd->pw_gecos, userID, date->tm_mon + 1, date->tm_mday, date->tm_year, date->tm_hour, date->tm_min ); usercount++; // if ( !bad ) { fseek ( fd, placecount, SEEK_SET ); fprintf ( fd, "%3d", usercount ); fseek ( fd, placename, SEEK_SET ); fprintf ( fd, "%s", entry ); // } NXPing(); } } // if ch != EOF fclose ( fd ); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.