This is mifwrite.c in view mode; [Download] [Up]
/* mifwrite.c * cm, 16 jan 90 * * output module for Frame bibliography generator. These routines * handle all MIF output generated from the program. */ /* * Copyright (c) 1991 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ #include <stdio.h> #include <errno.h> #include <signal.h> #include <sys/file.h> #include <mif.h> #include <bib.h> #define BUFSIZE (1024) typedef struct iostream { char fname[256]; int fd; } IOstream; static IOstream streams[3]; /* mif, bib files */ static char buf[BUFSIZE]; /* open output files for to be generated. * will exit on failure. */ mif_open_output(type, fname) register type; char *fname; { if( fname == NULL ) /* force to stdout */ { streams[type].fd = 1; return; } if( (streams[type].fd = open( fname, O_WRONLY|O_TRUNC|O_CREAT, 0644)) < 0 ) err( FATAL, "Can't open <%s>, errno=%d\n", fname, errno ); strcpy( streams[type].fname, fname ); } /* close the current .mif input file */ mif_close_output(type) { close(streams[type]); } /* write a string to the specified file. */ mif_write( type, cp ) int type; char *cp; { register len; if( !cp ) return; len = strlen(cp); if( write( streams[type].fd, cp, len) != len ) { err( FATAL, "mif_write failed <%s>, errno=%d\n", streams[type].fname, errno ); } } /* write a string to the specified file. */ mif_writebuf( type, cp, nbytes ) int type; char *cp; int nbytes; { if( !cp ) return; if( write( streams[type].fd, cp, nbytes) != nbytes ) { err( FATAL, "mif_write failed <%s>, errno=%d\n", streams[type].fname, errno ); } } /* write string followed by newline to the file. */ mif_writeln(type, str) int type; char *str; { if( !str ) return; mif_write( type, str ); mif_write( type, "\n" ); } static char *tmp = "/tmp/mif2bib.XXXXXX"; move_file( dest, src ) char *dest, *src; { mktemp(tmp); set_signals(1); link( dest, tmp ); if( unlink( dest ) < 0 ) { err( WARN, "Couldn't remove %s to rename,\n\tleaving %s, errno=%d\n", dest, src, errno ); unlink( tmp ); return; } if( link( src, dest ) < 0) { link( tmp, dest ); unlink( tmp ); err( WARN, "Couldn't rename, %s,\n\tleaving %s, errno=%d\n", dest, src, errno ); return; } unlink( src ); unlink( tmp ); set_signals(0); } /* trap user interrupts to avoid trashing input files * while overwriting them. */ set_signals(on) { if( on ) { signal( SIGHUP, SIG_IGN ); signal( SIGINT, SIG_IGN ); signal( SIGQUIT, SIG_IGN ); } else { signal( SIGHUP, SIG_DFL ); signal( SIGINT, SIG_DFL ); signal( SIGQUIT, SIG_IGN ); } } /* copy the initial .mif header/Pgf stuff to the top * of the mif bibliography file. */ copy_bibtemplate( template ) char *template; { int src; int n; if( (src = open(template, O_RDONLY)) < 0 ) { err(WARN, "Can't open %s, errno=%d\n", template, errno ); return(0); } while((n = read(src, buf, BUFSIZ )) > 0 ) mif_writebuf( O_BIB, buf, n ); if( n<0 ) err( FATAL, "Error reading %s, errno=%d\n", template, errno ); close( src ); return(1); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.