home *** CD-ROM | disk | FTP | other *** search
-
- /* Generated by Interface Builder */
- // Created By James T. Romano July 22, 1992
- // Member of the Dynamic Duo of NeXT Computers!
- //
- //
- // Read it and Weep!
- #import "tarZanObject.h"
-
- BOOL selectionMade = NO;
- char *copyRightNotice = "tarZan was Created By James T. Romano & Salvatore Saieva (C) 1992";
- char *dduoNotice = "The Dynamic Duo of NeXT Computers!";
- char templateName[] = "/tmp/.tarZantarzee",*tempFile,actionMsg[1024],globalName[1024];
- int fd;
- NXStream *tempF = NULL;
-
-
-
- @implementation tarZanObject
-
- #define SHOWERROR(msg,where) NXRunAlertPanel(msg,where,"OK",NULL,NULL);
- - selectMade
- {
- selectionMade = YES;
- return self;
- }
-
- - init
- {
- [self initUsingFile:NULL withType:0];
- return self;
- }
-
- - initUsingFile:(const char *)fname withType:(int)type
- {
- NXRect myFrame;
- unsigned int windowNum;
- char title[80],streamText[1024],tempChar;
- int tempCount = 0;
-
- [super init];
- [NXApp loadNibSection:"tarZanObj.nib" owner:self withNames:NO fromZone:[self zone]];
-
- if (fname) strcpy(globalName,fname);
- /* ********* */
- //BROWSER STUFF
- [browser setDelegate:self];
- [browser setAction:@selector(selectMade)];
- [browser setTitled:NO];
- [browser allowMultiSel:YES];
- [browser hideLeftAndRightScrollButtons:YES];
- [browser setMaxVisibleColumns:1];
- [browser sizeToFit];
- //END
-
- //LISTENER SPEAKER STUFF FOR ICON DRAGGING
- iconPathList = NULL;
- listen = [Listener allocFromZone:[self zone]];
- [listen init];
- [listen setDelegate:self];
- [listen usePrivatePort];
- [listen addPort];
- speak = [NXApp appSpeaker];
- NXConvertWinNumToGlobal([window windowNum],&windowNum);
- [speak setSendPort:NXPortFromName(NX_WORKSPACEREQUEST,NULL)];
- [speak registerWindow:windowNum toPort:[listen listenPort]];
- //END
- if (!type) {
- sprintf(title,"tarZan V1.0 winNum %d",windowNum);
- [window setTitle:title];
- }
- else {
- [window setTitleAsFilename:fname];
- [matrix setEnabled:NO];
- }
-
- if ([NXApp mainWindow]) {
- [[NXApp mainWindow] getFrame:&myFrame];
- [window moveTo:myFrame.origin.x -10 :myFrame.origin.y +10];
- }
- else
- [window center];
-
- [window makeKeyAndOrderFront:self];
-
- mode = type; //This is for the iconReleasedAt: method
-
- switch(type) {
- case 0: //We are using all available procedures to compress and or tar files!
- [[matrix cellAt:1 :0] setEnabled:NO];
- [[matrix cellAt:1 :1] setEnabled:NO];
- [[matrix cellAt:1 :2] setEnabled:NO];
- break;
- case 1: //We are Going to un-tar a file but we must display it's guts etc..
- [[matrix cellAt:1 :0] setEnabled:YES];
- tempFile = NXGetTempFilename(templateName,12);
- if ((fd = creat(tempFile,(int)00666) ) == -1) {
- SHOWERROR("Error in tarZanObject untar","Couldn't create temp file");
- }
- else {
- sprintf(actionMsg,"tar tf %s > %s",fname,tempFile);
- system(actionMsg);
- if (!(tempF = NXMapFile(tempFile,NX_READONLY))) {
- SHOWERROR("Error in tarZan Object","Couldn't open Stream using fd");
- }
- else {
- oldCount = 0;
- while (!NXAtEOS(tempF)) {
- tempChar = NXGetc(tempF);
- if (tempChar != '\n')
- streamText[tempCount++] = tempChar;
- else if (tempChar == '\n') {
- streamText[tempCount] = '\0';
- tempCount = 0;
- ++oldCount;
- [[browser matrixInColumn:0] addRow];
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:streamText] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
- }
- }
- [browser reloadColumn:0];
- NXClose(tempF);
- }
- }
- unlink(tempFile);
- break;
- case 3: //We are going to uncompress and un-tar the file... display guts!
- [[matrix cellAt:1 :2] setEnabled:YES];
- tempFile = NXGetTempFilename(templateName,12);
- if ( (fd = creat(tempFile,(int)00666) ) == -1) {
- SHOWERROR("Error in tarZanObject","Couldn't create temp file");
- }
- else {
- sprintf(actionMsg,"zcat %s | tar tf - > %s",fname,tempFile);
- system(actionMsg);
- if (!(tempF = NXMapFile(tempFile,NX_READONLY))) {
- SHOWERROR("Error in tarZan Object","Couldn't open Stream using fd");
- }
- else {
- oldCount = 0;
- while (!NXAtEOS(tempF)) {
- tempChar = NXGetc(tempF);
- if (tempChar != '\n')
- streamText[tempCount++] = tempChar;
- else if (tempChar == '\n') {
- streamText[tempCount] = '\0';
- tempCount = 0;
- ++oldCount;
- [[browser matrixInColumn:0] addRow];
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:streamText] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
- }
- }
- [browser reloadColumn:0];
- NXClose(tempF);
- }
- }
- unlink(tempFile);
- break;
- default:
- break;
- }
-
- return self;
- }
-
- - procedure:sender
- { BOOL isThere = NO;
- SavePanel *savePanel;
- const char *tmpChar,*tmp2Char;
- char tarBuffer[1024],tmpBuffer[1024],*tmpPtr;
- int totalCount = 0,decCount = 0,tmpCount = 0,charCount = 0;
-
- switch([[sender selectedCell] tag]) {
- case 0: //tar a file(s)
- if (!selectionMade)
- return self;
- if (oldCount == 0)
- return self;
- savePanel = [SavePanel new];
- [savePanel setTitle:"tar"];
- [savePanel setRequiredFileType:"tar"];
- if ([savePanel runModalForDirectory:NXHomeDirectory() file:"untitled"]) {
- tmpCount = oldCount;
- while (![[[browser matrixInColumn:0] cellAt:tmpCount :0] isHighlighted])
- --tmpCount;
- tmpChar = [[[browser matrixInColumn:0] cellAt:tmpCount :0] stringValue];
- tmpPtr = strrchr(tmpChar,'/');
- for (charCount = 0; charCount <= (tmpPtr-tmpChar) ; charCount++)
- tmpBuffer[charCount] = tmpChar[charCount];
- tmpBuffer[(tmpPtr-tmpChar)+1] = '\0';
- sprintf(tarBuffer,"(cd %s ; tar cf %s %s)",tmpBuffer,[savePanel filename],tmpPtr+1);
- [[browser matrixInColumn:0] removeRowAt:tmpCount andFree:YES];
- decCount++;
- system(tarBuffer);
- for (totalCount = tmpCount ; totalCount >= 0; --totalCount) {
- if ([[[browser matrixInColumn:0] cellAt:totalCount :0] isHighlighted]) {
- tmpChar = [[[browser matrixInColumn:0] cellAt:totalCount :0] stringValue];
- tmpPtr = strrchr(tmpChar,'/');
- for (charCount = 0; charCount <= (tmpPtr-tmpChar) ; charCount++)
- tmpBuffer[charCount] = tmpChar[charCount];
- tmpBuffer[(tmpPtr-tmpChar)+1] = '\0';
- sprintf(tarBuffer,"(cd %s ; tar uf %s %s)",tmpBuffer,[savePanel filename],tmpPtr+1);
- [[browser matrixInColumn:0] removeRowAt:totalCount andFree:YES];
- decCount = decCount + 1;
- isThere = YES;
- system(tarBuffer);
- }
- }
- oldCount = (oldCount - decCount);
- if (oldCount <= 0 ) selectionMade = NO;
- [browser reloadColumn:0];
- }
- break;
- case 1: //compress a file(s)
- if (!selectionMade)
- return self;
- if (oldCount == 0)
- return self;
- if (!NXRunAlertPanel("Hold On!","Are You Sure You Want to do This? ","YES","NO",NULL))
- return self;
- for (totalCount = oldCount; totalCount >= 0; --totalCount) {
- if ([[[browser matrixInColumn:0] cellAt:totalCount :0] isHighlighted]) {
- sprintf(tarBuffer,"compress %s",[[[browser matrixInColumn:0] cellAt:totalCount :0] stringValue]);
- system(tarBuffer);
- [[browser matrixInColumn:0] removeRowAt:totalCount andFree:YES];
- decCount = decCount + 1;
- }
- }
- oldCount = oldCount - decCount;
- if (oldCount <= 0 ) selectionMade = NO;
- [browser reloadColumn:0];
- break;
- case 2: //tar & compress file(s)
- if (!selectionMade)
- return self;
- if (oldCount == 0)
- return self;
- savePanel = [SavePanel new];
- [savePanel setTitle:"tar & compress"];
- [savePanel setRequiredFileType:"tar"];
- if ([savePanel runModalForDirectory:NXHomeDirectory() file:"untitled"]) {
- tmpCount = oldCount;
- while (![[[browser matrixInColumn:0] cellAt:tmpCount :0] isHighlighted])
- --tmpCount;
- tmpChar = [[[browser matrixInColumn:0] cellAt:tmpCount :0] stringValue];
- tmpPtr = strrchr(tmpChar,'/');
- for (charCount = 0; charCount <= (tmpPtr-tmpChar) ; charCount++)
- tmpBuffer[charCount] = tmpChar[charCount];
- tmpBuffer[(tmpPtr-tmpChar)+1] = '\0';
- sprintf(tarBuffer,"(cd %s ; tar cf %s %s)",tmpBuffer,[savePanel filename],tmpPtr+1);
- [[browser matrixInColumn:0] removeRowAt:tmpCount andFree:YES];
- decCount++;
- system(tarBuffer);
- for (totalCount = tmpCount ; totalCount >= 0; --totalCount) {
- if ([[[browser matrixInColumn:0] cellAt:totalCount :0] isHighlighted]) {
- tmpChar = [[[browser matrixInColumn:0] cellAt:totalCount :0] stringValue];
- tmpPtr = strrchr(tmpChar,'/');
- for (charCount = 0; charCount <= (tmpPtr-tmpChar) ; charCount++)
- tmpBuffer[charCount] = tmpChar[charCount];
- tmpBuffer[(tmpPtr-tmpChar)+1] = '\0';
- sprintf(tarBuffer,"(cd %s ; tar uf %s %s)",tmpBuffer,[savePanel filename],tmpPtr+1);
- [[browser matrixInColumn:0] removeRowAt:totalCount andFree:YES];
- decCount = decCount + 1;
- isThere = YES;
- system(tarBuffer);
- }
- }
- oldCount = (oldCount - decCount);
- if (oldCount <= 0) selectionMade = NO;
- [browser reloadColumn:0];
- sprintf(tarBuffer,"compress %s",[savePanel filename]);
- system(tarBuffer);
-
- }
- break;
- case 3: //untar file(s)
- if (!selectionMade)
- return self;
- if (oldCount <= 0)
- return self;
- savePanel = [SavePanel new];
- [savePanel setTitle:"untar"];
- if([savePanel runModalForDirectory:NXHomeDirectory() file:"Do_Not_Erase_This"]) {
- tmpChar = [savePanel directory];
- for (totalCount = oldCount ; totalCount >=0 ; --totalCount) {
- if ([[[browser matrixInColumn:0] cellAt:totalCount :0] isHighlighted]) {
- tmp2Char = [[[browser matrixInColumn:0] cellAt:totalCount :0] stringValue];
- strcpy(tarBuffer,"(cd / ; tar xf ");
- strcpy(tarBuffer,"(cd ");
- strcat(tarBuffer,tmpChar);
- strcat(tarBuffer," ; tar xf ");
-
- strcat(tarBuffer,globalName);
- strcat(tarBuffer," ");
- strcat(tarBuffer,tmp2Char);
- strcat(tarBuffer,")");
- [[browser matrixInColumn:0] removeRowAt:totalCount andFree:YES];
- decCount = decCount + 1;
- system(tarBuffer);
- }
- }
- oldCount = (oldCount - decCount);
- [browser reloadColumn:0];
- }
- if (oldCount <= 0)
- [window close];
- break;
- case 5: //untar & uncompress file(s)
- if (!selectionMade)
- return self;
- if (oldCount <= 0)
- return self;
- savePanel = [SavePanel new];
- [savePanel setTitle:"untar"];
- if([savePanel runModalForDirectory:NXHomeDirectory() file:"Do_Not_Erase_This"]) {
- tmpChar = [savePanel directory];
- sprintf(tarBuffer,"(cd %s ; zcat %s | tar xf - ",tmpChar,globalName);
- for (totalCount = oldCount ; totalCount >=0 ; --totalCount) {
- if ([[[browser matrixInColumn:0] cellAt:totalCount :0] isHighlighted]) {
- strcat(tarBuffer,[[[browser matrixInColumn:0] cellAt:totalCount :0] stringValue]);
- strcat(tarBuffer," ");
- [[browser matrixInColumn:0] removeRowAt:totalCount andFree:YES];
- decCount = decCount + 1;
- isThere = YES;
- }
- }
- strcat(tarBuffer,")");
- oldCount = (oldCount - decCount);
- [browser reloadColumn:0];
- if (isThere)
- system(tarBuffer);
- if (oldCount <=0)
- [window close];
- }
- break;
- default:
- break;
- }
- return self;
- }
-
- - free
- { unsigned int windowNum;
-
- NXConvertWinNumToGlobal([window windowNum],&windowNum);
- [speak unregisterWindow:windowNum];
- [browser free];
- [window free];
- return [super free];
- }
-
- // Window Delegate Methods
- - windowWillClose:sender
- {
- [NXApp delayedFree:self];
- return self;
- }
-
- // Browser Delegate Methods
- - (int)browser:sender fillMatrix:tmatrix inColumn:(int)column
- {
- int i;
-
- for (i = 0; i<oldCount;i++)
- [sender getLoadedCellAtRow:i inColumn:0];
- return oldCount;
- }
-
- // Listener Delegate Methods
- - (int)iconEntered:(int)windowNum at:(double)x :(double)y
- iconWindow:(int)iconWindowNum iconX:(double)iconX iconY:(double)iconY
- iconWidth:(double)iconWidth iconHeight:(double)iconHeight
- pathList:(const char *)pathList
- {
- if (!iconPathList) goto icLabel1;
- if (strcmp(iconPathList,pathList)) goto icLabel1;
- goto icLabel2;
- icLabel1:
- NX_FREE(iconPathList);
- iconPathList = NXCopyStringBuffer(pathList);
- icLabel2:
- return 0;
- }
-
- char *ir_tmpChar,ir_action[1024],dirBuff[255],another[1024],*file,*ptr;
- int icount;
-
- - (int)iconReleasedAt:(double)x :(double)y ok:(int *)flag
- {
-
- file = iconPathList;
- NX_DURING
- file = iconPathList;
- NX_HANDLER
- NX_ENDHANDLER
- if (!file)
- *flag = 0;
- else
- *flag = 1;
-
-
- if (mode == 3) {
- sprintf(ir_action,"uncompress %s",globalName);
- system(ir_action);
- strcpy(another,globalName); //Once we uncompress the string we must reflect the .tar so
- another[strlen(another)-2] = '\0';// we get rid of the .Z part of the string by placing a NULL where the . is
- }
-
- ptr = strtok(file,"\t");
- ++oldCount;
- [[browser matrixInColumn:0] addRow];
- if ( (mode == 1) || (mode == 3) ) {
- ir_tmpChar = strrchr(ptr,'/');
- for (icount = 0; icount <= (ir_tmpChar-ptr) ; icount++)
- dirBuff[icount] = ptr[icount];
- dirBuff[(ir_tmpChar-ptr)+1] = '\0';
- if (mode == 3)
- sprintf(ir_action,"(cd %s ; tar uf %s %s)",dirBuff,another,ir_tmpChar+1);
- if (mode == 1)
- sprintf(ir_action,"(cd %s ; tar uf %s %s)",dirBuff,globalName,ir_tmpChar+1);
- system(ir_action);
- }
- if ((mode == 1) || (mode == 3))
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:ir_tmpChar+1] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
- else
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:ptr] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
- while((ptr = strtok(NULL,"\t"))!= NULL) {
- ++oldCount;
- [[browser matrixInColumn:0] addRow];
- if ( (mode == 1) || (mode == 3) ) {
- ir_tmpChar = strrchr(ptr,'/');
- for (icount = 0; icount <= (ir_tmpChar-ptr) ; icount++)
- dirBuff[icount] = ptr[icount];
- dirBuff[(ir_tmpChar-ptr)+1] = '\0';
- if (mode == 3)
- sprintf(ir_action,"(cd %s ; tar uf %s %s)",dirBuff,another,ir_tmpChar+1);
- if (mode == 1)
- sprintf(ir_action,"(cd %s ; tar uf %s %s)",dirBuff,globalName,ir_tmpChar+1);
- system(ir_action);
- }
-
- if ((mode == 1) || (mode == 3))
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:ir_tmpChar+1] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
- else
- [[browser matrixInColumn:0] putCell:[[[[myBrowserCell alloc] initTextCell:ptr] setLeaf:YES] setLoaded:YES] at:oldCount-1 :0];
-
- }
- if (mode == 3) {
- sprintf(ir_action,"compress %s",another);
- system(ir_action);
- }
- [browser reloadColumn:0];
- return 0;
- }
- @end