This is Controller.m in view mode; [Download] [Up]
#import "Controller.h"
@implementation Controller
- appDidInit:sender
{
[[NXApp appListener] setServicesDelegate:self];
return self;
}
- app:sender willShowHelpPanel:panel
{
char path[MAXPATHLEN + 1];
sprintf (path, "%s/%s", [panel helpDirectory],
"GettingStarted.rtfd");
[panel showFile:path atMarker:NULL];
return self;
}
- comment:(id)pasteboard
userData:(const char *)language
error:(char **)errorMessage
{
const char *inData;
char *outData;
int inLength, outLength;
const char *const *types;
int hasAscii, i;
types = [pasteboard types];
hasAscii=0;
for (i=0; !hasAscii && types[i] ; i++)
if (!strcmp(types[i], NXAsciiPboardType)) hasAscii=1;
if (hasAscii) {
[pasteboard readType:NXAsciiPboardType data:&inData
length:&inLength];
if (inData && inLength) {
if (strcmp(language,"C")==0) {
int i;
outLength=inLength+6;
outData=malloc(outLength);
outData[0]='/';
outData[1]='*';
outData[2]='\n';
for(i=0;i<inLength;i++)
outData[i+3]=inData[i];
outData[inLength+3]='*';
outData[inLength+4]='/';
outData[inLength+5]='\n';
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:outLength];
free(outData);
} else if (strcmp(language,"ObjC")==0) {
int i=0, j=2, incLength;
outLength=inLength+1000;
outData=malloc(outLength);
outData[0]='/';
outData[1]='/';
incLength=2;
while (i<inLength) {
if (inData[i] != '\n' || i == inLength-1) {
outData[j]=inData[i];
i++;
j++;
} else {
outData[j]=inData[i];
outData[j+1]='/';
outData[j+2]='/';
i++;
j+=3;
incLength+=2;
}
}
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:inLength+incLength];
free(outData);
} else if (strcmp(language,"Postscript")==0) {
int i=0, j=1, incLength;
outLength=inLength+1000;
outData=malloc(outLength);
outData[0]='%';
incLength=1;
while (i<inLength) {
if (inData[i] != '\n' || i == inLength-1) {
outData[j]=inData[i];
i++;
j++;
} else {
outData[j]=inData[i];
outData[j+1]='%';
i++;
j+=2;
incLength+=1;
}
}
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:inLength+incLength];
free(outData);
} else if (strcmp(language,"Sybase")==0) {
int i=0, j=2, incLength;
outLength=inLength+1000;
outData=malloc(outLength);
outData[0]='-';
outData[1]='-';
incLength=2;
while (i<inLength) {
if (inData[i] != '\n' || i == inLength-1) {
outData[j]=inData[i];
i++;
j++;
} else {
outData[j]=inData[i];
outData[j+1]='-';
outData[j+2]='-';
i++;
j+=3;
incLength+=2;
}
}
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:inLength+incLength];
free(outData);
} else if (strcmp(language,"Debug")==0) {
int i;
outLength=inLength+20;
outData=malloc(outLength);
strcpy(outData,"#ifdef DEBUG\n");
for(i=0;i<inLength;i++)
outData[i+13]=inData[i];
if (inData[inLength-1]!='\n')
strcpy(&(outData[inLength+13]),"\n#endif");
else
strcpy(&(outData[inLength+13]),"#endif\n");
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:outLength];
free(outData);
} else if (strcmp(language,"Shell")==0) {
int i=0, j=1, incLength;
outLength=inLength+1000;
outData=malloc(outLength);
outData[0]='#';
incLength=1;
while (i<inLength) {
if (inData[i] != '\n' || i == inLength-1) {
outData[j]=inData[i];
i++;
j++;
} else {
outData[j]=inData[i];
outData[j+1]='#';
i++;
j+=2;
incLength+=1;
}
}
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:inLength+incLength];
free(outData);
}
}
}
return self;
}
- unComment:(id)pasteboard
userData:(const char *)language
error:(char **)errorMessage
{
BOOL inString;
const char *inData;
char *outData;
int inLength, outLength, currLength;
const char *const *types;
int hasAscii, i;
types = [pasteboard types];
hasAscii=0;
outLength=0;
currLength=0;
inString=NO;
for (i=0; !hasAscii && types[i] ; i++)
if (!strcmp(types[i], NXAsciiPboardType)) hasAscii=1;
if (hasAscii) {
[pasteboard readType:NXAsciiPboardType data:&inData
length:&inLength];
if (inData && inLength) {
outData=malloc(inLength);
while (currLength < inLength) {
if (!inString && inData[currLength]=='/') {
if (inData[currLength+1]=='*') {
currLength+=2;
if (inData[currLength]=='\n' &&
currLength<inLength)
currLength++;
while (!(inData[currLength]=='*' &&
inData[currLength+1]=='/') &&
currLength < inLength)
outData[outLength++]=inData[currLength++];
currLength+=2;
if (inData[currLength]=='\n' &&
currLength<inLength) {
currLength++;
} else if (currLength > inLength) {
*errorMessage="End of C comment not found.";
return self;
}
} else if (inData[currLength+1]=='/') {
currLength+=2;
while (inData[currLength]!='\n' &&
currLength<inLength)
outData[outLength++]=inData[currLength++];
} else {
outData[outLength++]=inData[currLength++];
}
} else if (!inString && inData[currLength]=='%') {
currLength+=1;
while (inData[currLength]!='\n' &&
currLength<inLength)
outData[outLength++]=inData[currLength++];
} else if (!inString && inData[currLength]=='-'
&& inData[currLength+1]=='-') {
currLength+=2;
while (inData[currLength]!='\n' &&
currLength<inLength)
outData[outLength++]=inData[currLength++];
} else if (!inString && inData[currLength]=='#') {
if (strncmp(&(inData[currLength+1]),"ifdef DEBUG",11) == 0) {
currLength+=12;
if (inData[currLength]=='\n' &&
currLength<inLength)
currLength++;
while ((strncmp(&(inData[currLength]),"\n#endif",7) != 0) &&
currLength < inLength)
outData[outLength++]=inData[currLength++];
currLength+=7;
if (currLength > inLength) {
*errorMessage="End of DEBUG statement not found.";
return self;
}
} else {
currLength+=1;
while (inData[currLength]!='\n' &&
currLength<inLength)
outData[outLength++]=inData[currLength++];
}
} else {
outData[outLength++]=inData[currLength++];
}
}
[pasteboard declareTypes:&NXAsciiPboardType num:1 owner:self];
[pasteboard writeType:NXAsciiPboardType data:outData
length:outLength];
free(outData);
}
}
return self;
}
- showInfoPanel:sender
{
if (!infoPanel)
[NXApp loadNibSection:"InfoPanel.nib" owner:self];
[infoPanel 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.