2018-03-23 02:07:53 +00:00
|
|
|
#include <unistd.h>
|
|
|
|
#include <string.h>
|
2018-03-23 00:30:02 +00:00
|
|
|
#include "globals.h"
|
|
|
|
#include "../util/patchlevel.h"
|
|
|
|
#include "../fileio/wrfile.h"
|
|
|
|
#include "../fileio/wrfileopt.h"
|
|
|
|
#include "../util/util.h"
|
|
|
|
|
|
|
|
#define LOCALOPT "ilqVH"
|
|
|
|
|
|
|
|
void macbinary();
|
|
|
|
|
|
|
|
static void usage();
|
|
|
|
|
|
|
|
static char options[128];
|
|
|
|
|
2018-03-23 02:07:53 +00:00
|
|
|
int main(int argc, char **argv)
|
2018-03-23 00:30:02 +00:00
|
|
|
{
|
|
|
|
int c;
|
|
|
|
extern int optind;
|
|
|
|
extern char *optarg;
|
|
|
|
int errflg;
|
|
|
|
|
|
|
|
set_wrfileopt(0);
|
|
|
|
set_s_wrfileopt(1);
|
|
|
|
(void)strcat(options, get_wrfileopt());
|
|
|
|
(void)strcat(options, LOCALOPT);
|
|
|
|
errflg = 0;
|
|
|
|
|
|
|
|
while((c = getopt(argc, argv, options)) != EOF) {
|
|
|
|
if(!wrfileopt((char)c)) {
|
|
|
|
switch(c) {
|
|
|
|
case 'l':
|
|
|
|
list++;
|
|
|
|
break;
|
|
|
|
case 'q':
|
|
|
|
query++;
|
|
|
|
break;
|
|
|
|
case 'i':
|
|
|
|
info_only++;
|
|
|
|
break;
|
|
|
|
case '?':
|
|
|
|
errflg++;
|
|
|
|
break;
|
|
|
|
case 'H':
|
|
|
|
give_wrfileopt();
|
|
|
|
(void)fprintf(stderr, "Macsave specific options:\n");
|
|
|
|
(void)fprintf(stderr,
|
|
|
|
"-i:\tgive information only, do not save\n");
|
|
|
|
(void)fprintf(stderr, "-l:\tgive listing\n");
|
|
|
|
(void)fprintf(stderr,
|
|
|
|
"-q:\tquery for every file/folder before saving\n");
|
|
|
|
(void)fprintf(stderr,
|
|
|
|
"-V:\tgive information about this version\n");
|
|
|
|
(void)fprintf(stderr, "-H:\tthis message\n");
|
|
|
|
(void)fprintf(stderr, "Default is silent saving\n");
|
|
|
|
exit(0);
|
|
|
|
case 'V':
|
|
|
|
(void)fprintf(stderr, "Version %s, ", VERSION);
|
|
|
|
(void)fprintf(stderr, "patchlevel %d", PATCHLEVEL);
|
|
|
|
(void)fprintf(stderr, "%s.\n", get_mina());
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(errflg || optind != argc) {
|
|
|
|
usage();
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
infp = stdin;
|
|
|
|
|
|
|
|
if(info_only || query) {
|
|
|
|
list++;
|
|
|
|
}
|
|
|
|
c = getc(infp);
|
|
|
|
(void)ungetc(c, infp);
|
|
|
|
switch(c) {
|
|
|
|
case 0:
|
|
|
|
macbinary();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
(void)fprintf(stderr, "Input is not MacBinary\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
exit(0);
|
|
|
|
/* NOTREACHED */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void usage()
|
|
|
|
{
|
|
|
|
(void)fprintf(stderr, "Usage: macsave [-%s]\n", options);
|
|
|
|
(void)fprintf(stderr, "Use \"macsave -H\" for help.\n");
|
|
|
|
}
|
|
|
|
|