1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/*
* TransFig: Facility for Translating Fig code
*
* Various copyrights in this file follow
* Parts Copyright (c) 1994 Brian V. Smith
*
* THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* The X Consortium, and any party obtaining a copy of these files from
* the X Consortium, directly or indirectly, is granted, free of charge, a
* full and unrestricted irrevocable, world-wide, paid up, royalty-free,
* nonexclusive right and license to deal in this software and
* documentation files (the "Software"), including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons who receive
* copies from any such party to do so, with the only requirement being
* that this copyright notice remain intact. This license includes without
* limitation a license to do the foregoing actions under any patents of
* the party supplying this software to the X Consortium.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "fig2dev.h"
FILE *
open_picfile(name, type)
char *name;
int *type;
{
char unc[PATH_MAX+20]; /* temp buffer for uncompress/gunzip command */
char *compname;
FILE *fstream; /* handle on file */
struct stat status;
*type = 0;
compname = NULL;
/* see if the filename ends with .Z */
/* if so, generate uncompress command and use pipe (filetype = 1) */
if (strlen(name) > (size_t)2 && !strcmp(".Z", name + (strlen(name)-2))) {
sprintf(unc,"uncompress -c %s",name);
*type = 1;
/* or with .z or .gz */
} else if ((strlen(name) > (size_t)3 && !strcmp(".gz", name + (strlen(name)-3))) ||
((strlen(name) > (size_t)2 && !strcmp(".z", name + (strlen(name)-2))))) {
sprintf(unc,"gunzip -qc %s",name);
*type = 1;
/* none of the above, see if the file with .Z or .gz or .z appended exists */
} else {
compname = (char*) malloc(strlen(name)+4);
strcpy(compname, name);
strcat(compname, ".Z");
if (!stat(compname, &status)) {
sprintf(unc, "uncompress -c %s",compname);
*type = 1;
name = compname;
} else {
strcpy(compname, name);
strcat(compname, ".z");
if (!stat(compname, &status)) {
sprintf(unc, "gunzip -c %s",compname);
*type = 1;
name = compname;
} else {
strcpy(compname, name);
strcat(compname, ".gz");
if (!stat(compname, &status)) {
sprintf(unc, "gunzip -c %s",compname);
*type = 1;
name = compname;
}
}
}
}
/* no appendages, just see if it exists */
if (stat(name, &status) != 0) {
fstream = NULL;
} else {
switch (*type) {
case 0:
fstream = fopen(name, "r");
break;
case 1:
fstream = popen(unc,"r");
break;
}
}
if (compname)
free(compname);
return fstream;
}
void
close_picfile(file,type)
FILE *file;
int type;
{
if (type == 0)
fclose(file);
else
pclose(file);
}
|