This is misc.m in view mode; [Download] [Up]
//
// Miscellaneous support functions for Cassandra
// Copyright (c) 1989, 1990, 1991 by Jiro Nakamura. All Rights Reserved.
//
// misc.m
//
// by Jiro Nakamura (jiro@shaman.com)
//
// RCS Information
// Revision Number-> $Revision: 2.6 $
// Last Revised-> $Date: 91/11/01 17:24:26 $
//
static char rcsid[] = "$Id: misc.m,v 2.6 91/11/01 17:24:26 jiro Exp Locker: jiro $";
#ifdef DEBUG
#undef DEBUG
#endif
#import <stdio.h>
#import "cass.h"
#import <strings.h>
#import <appkit/Panel.h> /* for NXRunAlertPanel */
#import <sys/file.h>
#import <libc.h> /* for open(), close(), exit() */
#import "misc.h"
#import "errno.h"
// Function: fileOpen(filename, mode, message)
// Arguments: char * filename -> name of file to be opened
// char * mode -> mode using fopen() (e.g. "r", "a+")
// char * message -> message to be shown if fopen() fails
// Description: Opens the file <filename> with mode <mode>
// using fopen(). If it is successful, a FILE *
// is returned. If it fails, fileOpen tries
// to create the file with creat() mode 0600.
// If that fails too, it uses NXRunAlertPane()
// to show <message>, then exit()s the program.
// Returns: FILE * to open file
FILE *fileOpen(filename,mode,message)
char *filename, *mode, *message;
{
FILE *fd, *fopen();
#ifdef DEBUG
fprintf(stderr,"fileOpened <%s> with mode %s\n",
filename, mode);
#endif
if( (fd = fopen(filename, mode)) == NULL)
{
int ifd;
char dumbChar[5];
// dumb references to some static constants, just
// to avoid warning messages from the compiler (Garance)
dumbChar[0] = rcsid[0]; // dumb de dumb
fprintf(stderr,"%s: Creating file "
"%s with mode %s....\n",
PROGNAME, filename,mode);
ifd = open( filename, O_CREAT, 0600);
close(ifd);
if( (fd = fopen(filename, mode)) == NULL)
{
NXRunAlertPanel("File Error",message,"Quit",NULL,NULL);
exit(1);
}
}
return fd;
}
// Seek file to this position
FILE *fileSeek(source, here, errormsg)
FILE *source;
int here;
char *errormsg;
{
#ifdef DEBUG
fprintf(stderr,"Seeking to %d in fileSeek\n",here);
#endif
if( here < 0)
{
fprintf(stderr,"%s: Error in fileSeek, "
"cannot seek to negative number %d\n",
PROGNAME, here);
NXRunAlertPanel("File Seek Error",
"Cannot seek to a negative number.",
"OK",NULL,NULL);
return NULL;
}
/* Seek to the correct position */
if( fseek( source, (long) FILE_LEN * here, SEEK_SET) == -1)
{
if( errno == EIO)
{
fprintf(stderr, "%s: I/O Error on read. ", PROGNAME);
NXRunAlertPanel("Seek error",
"An IO error occured while seeking.",
"OK",NULL,NULL);
return NULL;
}
/* If we can't seek to the end because the file */
/* is too short, then */
/* seek to the end of file and add newlines*/
fseek(source, 0L, SEEK_END);
do
{
#ifdef DEBUG
fprintf(stderr,"Looping: ftell(source) = "
"%d \n",ftell(source));
#endif
fputc('\n', source);
}
while( ftell(source) < FILE_LEN * here + 5);
/* Try again */
if( fseek( source, (long) FILE_LEN * here, 0) == -1)
{
fprintf(stderr,
"%s: We have an error fseek()-ing to %d....\n"
"%s: Error Numbers are as follows: errno = %d, EIO =%d"
"%s: Calling procedure says: %s\n",
PROGNAME, here,
PROGNAME, errno, EIO,
PROGNAME, errormsg);
NXRunAlertPanel( "Seek error", errormsg,
"Quit", NULL, NULL);
fclose(source);
exit(1);
}
}
return source;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.