This is cardCheck.m in view mode; [Download] [Up]
#import "cardCheck.h"
@implementation cardCheck
- appDidInit:sender
{
ouvert = 1;
ferme = 0;
windowState = ferme;
[TheWindow makeKeyAndOrderFront:self];
[CCnumber setStringValue:""];
[CCnumber selectText:self];
[Status setStringValue:"Welcome to cardCheck!!"];
[crcStat setStringValue:""];
[attentionTexte setStringValue:"Read the warnings in the info menu..."];
return self;
}
- textDidChange:sender
{
[Status setStringValue:""];
[crcStat setStringValue:""];
[attentionTexte setStringValue:""];
return self;
}
- CheckIt:sender
{
// Local Variables
char cc[120];
int check, len, prod, j;
// Assign the value in the panel to the cc variable.
strcpy(cc, [CCnumber stringValue]);
if (cc[0] != '3' && cc[0] != '4' && cc[0] != '5' && cc[0] != '6') {
[Status setStringValue:"Card number must start with 3, 4, 5, or 6."];
[CCnumber selectText:self];
return self;
}
// Counts the string length of the cc variable.
len = strlen(cc);
if (cc[0] == '5' && len != 16) {
[Status setStringValue:"Mastercard must be 16 digits."];
[CCnumber selectText:self];
return self;
}
if (cc[0] == '4' && (len != 13 && len != 16)) {
[Status setStringValue:"Visa numbers must be 13 or 16 digits."];
[CCnumber selectText:self];
return self;
}
if (cc[0] == '3' && len != 15) {
[Status setStringValue:"American Express numbers must be 15 digits."];
[CCnumber selectText:self];
return self;
}
if (cc[0] == '6' && len != 16) {
[Status setStringValue:"Discover numbers must be 16 digits."];
[CCnumber selectText:self];
return self;
}
// Perform checksum - Weighing list 212121212121...
check = 0;
for (j = 0; j < len; ++j) {
prod = cc[j] - '0';
if (((len - (j + 1)) %2)) {
prod *= 2;
}
if (prod >= 10) {
prod = prod - 9;
}
check += prod;
}
if ((check % 10) == 0) {
[crcStat setStringValue:"GOOD"];
[CCnumber selectText:self];
[attentionTexte setStringValue:"NOTE: Valid card number but is it a valid account? Careful..."];
} else {
[crcStat setStringValue:"BAD"];
[attentionTexte setStringValue:"This is not a valid card number..."];
[CCnumber selectText:self];
}
return self;
}
- ClearStatus:sender
{
[Status setStringValue:"Ummmmmm...."];
return self;
}
- InfoPanel:sender
{
[NXApp loadNibSection:"InfoPanel.nib" owner:self]; // load nib
return self;
}
- IntroAndHelp:sender
{
[NXApp loadNibSection:"HelpIntro.nib" owner:self]; // load nib
return self;
}
- MoreInfo:sender
{
[NXApp loadNibSection:"MoreInfo.nib" owner:self]; // load nib
return self;
}
- warning:sender
{
[NXApp loadNibSection:"warning.nib" owner:self]; // load nib
return self;
}
- setWindowSize:sender
{
if (windowState == ferme) {
windowState = ouvert;
NX_HEIGHT(&cadre) = 336;
NX_WIDTH(&cadre) = 660; }
else {
windowState = ferme;
NX_HEIGHT(&cadre) = 336;
NX_WIDTH(&cadre) = 392;
};
[TheWindow sizeWindow : NX_WIDTH(&cadre) : NX_HEIGHT(&cadre) ];
[TheWindow display];
return self;
}
- showMainWindow:sender
{
[TheWindow makeKeyAndOrderFront:self];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.