This is streams.c in view mode; [Download] [Up]
/* streams - Definitions and macros for streams package Copyright (C) 1994. Adam Fedor streams.c,v 1.4 1995/12/13 22:36:05 fedor Exp Right now this is just a simple package based on stdio meant to provide compile compatability with NeXT's streams package. */ #include <streams/streams.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/time.h> /* This routine is a bit simplistic. "rw" doesn't exist on sun unix */ /* static const char * type_for_mode(int mode) { char *type = NULL; if (mode == NX_READONLY) type = "r"; else if (mode == NX_WRITEONLY) type = "w"; else if (mode == NX_READWRITE) type = "rw"; return type; } */ char *NXGetTempFilename( char *name, int pos) /* description: This function creates a unique file name by altering the "name" argument it is passed. It replaces the six character starting at the "pos"th position within "name" with digits it generates; it then checks whether the file name is unique. If it is, the file name is returned; if not, different digits are tried until a unique name is found. It is similar to the standard C function mktemp(), except that it can leave suffixed intact since you specify the location of the character that get replaced. */ { FILE *file; int random,tries=100; if (pos < 0 || pos > (strlen(name)-6)) return NULL; random = (int) time(NULL); do { if (!tries--) return NULL; random %= 1000000; sprintf(&name[pos],"%06d",random); file = fopen(name,"r"); if (file != NULL) fclose(file); random++; } while (file != NULL); return name; } NXStream * NXOpenFile(int fd, int mode) { NXStream *stream = NULL; /* const char* type; type = type_for_mode(mode); if (type) stream = fdopen(fd, type); */ if (mode == NX_READONLY) stream = fdopen(fd, "r"); else if (mode == NX_WRITEONLY) stream = fdopen(fd, "w"); else if (mode == NX_READWRITE) { /* READWRITE should work whether or not the file exists already. */ /* here, if it doesn't exist, it is created. */ if ((stream = fdopen(fd, "r+")) == NULL) { stream = fdopen(fd, "w+"); } } return stream; } /* Need a real streams package for this */ /* THIS IS NOT IMPLEMENTED CORRECTLY, but it should work for a while */ NXStream * NXOpenMemory(const char *addr, int size, int mode) { char tempname[20]; strcpy(tempname,"/tmp/NXStreamXXXXXX"); NXGetTempFilename(tempname,13); return NXMapFile(tempname,mode); } NXStream * NXMapFile(const char *name, int mode) { NXStream *stream = NULL; /* const char* type; type = type_for_mode(mode); if (type) stream = fopen(name, type); */ if (mode == NX_READONLY) stream = fopen(name, "r"); else if (mode == NX_WRITEONLY) stream = fopen(name, "w"); else if (mode == NX_READWRITE) { /* READWRITE should work whether or not the file exists already. */ /* here, if it doesn't exist, it is created. */ if ((stream = fopen(name, "r+")) == NULL) { stream = fopen(name, "w+"); } } return stream; } /* Need a real streams package for this */ /* THIS IS NOT IMPLEMENTED CORRECTLY, but it should work for a while */ int NXSaveToFile(NXStream *s, const char *name) { FILE *outputfile; long temppos; char byte; if ((outputfile = fopen(name,"w")) == NULL) return -1; temppos = ftell(s); rewind(s); while ( (byte=getc(s))!= EOF) { putc(byte,outputfile); } fseek(s,temppos,0); return fclose(outputfile)==0?0:-1; } /* Need a real streams package for this */ /* THIS IS NOT IMPLEMENTED CORRECTLY, but it should work for a while */ void NXGetMemoryBuffer(NXStream *s, char **addr, int *len, int *maxlen) { } /* Need a real streams package for this */ void NXCloseMemory(NXStream *s, int option) { NXClose(s); } void useredit(const char *filename) { char buffer[256]; char *editorname = NULL; if (editorname == NULL) { editorname = getenv("EDITOR"); if (editorname == NULL) { editorname = "/bin/vi"; } } sprintf(buffer,"%s %s",editorname,filename); system(buffer); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.