This is Utilities.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import "Global.h" #define CHUNK 127 const char *localString(const char *aString) { return NXLocalizedString(aString,NULL,aString); } const char *appDirectory() { static char appDirectory[MAXPATHLEN] = { '\0' }; char temp[MAXPATHLEN+1]; char *ptr = NULL; if(!appDirectory[0]) { strcpy(appDirectory, NXArgv[0]); if(ptr = rindex(appDirectory, '/')) *ptr = '\0'; if (appDirectory && appDirectory[0]) { getwd(temp); chdir(appDirectory); getwd(appDirectory); chdir(temp); } #ifdef DEBUG printf("appDirectory = %s\n",appDirectory); #endif } return appDirectory; } BOOL isThereSwapSpace(int imageSize) { int rtn; struct statfs stfs; rtn = statfs("/private/vm", &stfs); if (rtn || ((stfs.f_bavail * stfs.f_bsize) < 0)) { #ifdef DEBUG printf("NXApp: No space available on Hard Disk\n"); #endif NXRunAlertPanel(localString("Disk is Full"), localString("Enough swapspace is not available. Please make more space by erasing old files or by rebooting the computer."), localString("Cancel"),NULL,NULL); return NO; } else if (rtn || ((stfs.f_bavail * stfs.f_bsize) < imageSize)) { #ifdef DEBUG printf("NXApp: Not enough space available on Hard Disk\n"); printf(" Required size = %d Kbytes\n",imageSize/1024); #endif rtn = NXRunAlertPanel(localString("Disk is Full"), localString("The swapfile is full. Please make more space by erasing old files or by rebooting the computer. Continuing may cause a crash."), localString("Cancel"), localString("Continue"),NULL); if (rtn == NX_ALERTDEFAULT) return NO; else return YES; } return YES; } char *stripnl(char *s) { char *p; for (p=s;*p;p++) if (*p == '\n' || *p == '\r') *p = '\0'; return s; } char *execstr(char *s) /* Executes the passed string and returns a string value in that pointer */ /* Stolen from Opener 3.0 */ { FILE *f = popen(s,"r"); char *p = s; *s = '\0'; if (f){ while (fgets(p,256,f)) stripnl(p), p += strlen(p); pclose(f); } return s; } void fillMemory(unsigned char *ptr, int numBytes) { int i; for (i=0;i < numBytes; i++) { *(ptr+i) = 0xff; } } /* Functions for creating and managing a dynamically-allocated fileList */ /* - really just a list of strings. They seem to be somewhat useful. */ char **addFile(const char *file, char **list, int count, NXZone *zone) /* Adds the specified filename to the list of filenames. It allocates * more memory in chunks as needed. */ { if (!list) list = (char **)NXZoneMalloc(zone,CHUNK*sizeof(char *)); list[count] = (char *)NXZoneMalloc(zone,(strlen(file)+1)*sizeof(char)); strcpy(list[count], file); count++; if (!(count% CHUNK)) { list = (char **)NXZoneRealloc(zone,list,(((count/CHUNK)+1)*CHUNK)*sizeof(char *)); } list[count] = NULL; return list; } void freeList(char **list) /* Frees the array of filenames */ { char **strings; if (list) { strings = list; while (*strings) NX_FREE(*strings++); NX_FREE(list); } } NXRect *calcFrame(id printInfo, NXRect *viewRect) /* * Calculates the size of the page the user has chosen minus its margins. */ { float lm, rm, bm, tm; const NXRect *paperRect; float scale; viewRect->origin.x = viewRect->origin.y = 0.0; paperRect = [printInfo paperRect]; scale = 1 / [printInfo scalingFactor]; [printInfo getMarginLeft:&lm right:&rm top:&tm bottom:&bm]; viewRect->size = paperRect->size; viewRect->size.width -= lm + rm; viewRect->size.height -= tm + bm; viewRect->size.width *= scale; viewRect->size.height *= scale; return viewRect; } void strtoRect(char * inputString, NXRect * frame) { char *start, *next; frame->origin.y = frame->origin.y = 0.0; frame->size.width = frame->size.height = 0.0; start = inputString; if ( *start == ' ' ) start++; if ( *start == 'x' ) start++; if ( *start == '\0' ) return; frame->origin.x = strtod(start, &next); if ( start == next ) return; start = next; if ( *start == ' ' ) start++; if ( *start == 'y' ) start++; if ( *start == '\0' ) return; frame->origin.y = strtod(start, &next); if ( start == next ) return; start = next; if ( *start == ' ' ) start++; if ( *start == 'w' ) start++; if ( *start == '\0' ) return; frame->size.width = strtod(start, &next); if ( start == next ) return; start = next; if ( *start == ' ' ) start++; if ( *start == 'h' ) start++; if ( *start == '\0' ) return; frame->size.height = strtod(start, &next); if ( start == next ) return; return; } BOOL includesType(const NXAtom *types, NXAtom type) { if (types) while (*types) if (*types++ == type) return YES; return NO; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.