home *** CD-ROM | disk | FTP | other *** search
- /* arg.c 4-10-91 bookeeping functions for the tierra simulator */
- /** Tierra Simulator V3.0: Copyright (c) 1991 Tom Uffner **/
- #include "license.h"
-
- #ifndef lint
- static char sccsid[] = "@(#)arg.c 1.6 9/19/91";
- #endif
-
- #include "tierra.h"
- #include "declare.h"
- #include "arginst.h"
- #include <errno.h>
-
- #ifdef unix
- char *malloc();
- #endif
-
- int hangup = 0;
-
- int main(argc, argv)
- int argc;
- char *argv[];
- {
- I8s com, *mod, *u = "usage: arg c|r[vo12] afile size file [file...]\n\
- \targ x[vo12] afile [genotype [genotype...]]\n\targ t[v] afile\n";
- I8s *file = 0, hbuf[5];
- int i, v = 0, o = 0, f = 1, size = 0;
- FILE *afp = 0;
- #ifdef __TURBOC__
- float z = sin(0);
- #endif
-
- struct g_list *g = 0;
- head_t head;
- indx_t *indx;
-
- if (argc < 3) {
- fprintf(stderr, u);
- exit(1);
- }
- switch (com = *argv[1]) {
- case 'c':
- case 'r':
- if (argc < 5) {
- fprintf(stderr, u);
- exit(2);
- }
- if (!sscanf(argv[3], "%d", &size)) {
- fprintf(stderr, u);
- exit(3);
- }
- case 't':
- case 'x':
- break;
- default:
- fprintf(stderr, u);
- exit(4);
- }
- for (mod = ++argv[1]; *mod; mod++)
- switch (*mod) {
- case 'v':
- ++v;
- break;
- case 'o':
- ++o;
- break;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- f = *mod - '0';
- break;
- default:
- fprintf(stderr, u);
- exit(5);
- }
- file = argv[2];
-
- switch (com) {
- case 'c':
- fprintf(stdout, "creating archive \"%s\"\n", file);
- case 'r':
- if (!(afp = open_ar(file, size, f, com == 'c' ? 1 : 0))) {
- perror(argv[0]);
- exit(6);
- }
- head = read_head(afp);
- indx = read_indx(afp, &head);
- g = (struct g_list *) calloc(1, sizeof(struct g_list));
- for (i=4; i < argc; i++) {
- int j;
- o ? GetGenFormat(g, argv[i]) : GetAscGen(g, argv[i]);
- if (head.size != g->gen.size) {
- fprintf(stderr, "%s is wrong size\n", g->gen.label);
- continue;
- }
- j = add_gen(afp, &head, &indx, g);
- if (v)
- ; /* verbose mode */
- else fprintf(stdout, "%c - %s\n", j?'r':'a', g->gen.label);
- }
- free(g);
- fclose(afp);
- break;
- case 't':
- if (!(afp = fopen(file, "rb"))) {
- perror(argv[0]);
- exit(7);
- }
- head = read_head(afp);
- if (strncmp(head.magic, "tie", 3) || head.magic[3] - '0' != f) {
- fprintf(stderr, "%s: bad magic number", *argv);
- exit(8);
- }
- indx = read_indx(afp, &head);
- hbuf[0] = head.magic[0]; hbuf[1] = head.magic[1];
- hbuf[2] = head.magic[2]; hbuf[3] = head.magic[3]; hbuf[4] = 0;
- fprintf(stdout, "Format: %s, Size: %d, # of entries: %d\n\n",
- hbuf, head.size, head.n);
- for (i = 0; i < head.n; i++)
- if (v)
- ; /* verbose mode */
- else fprintf(stdout, "%.3s\n", indx[i].gen);
- break;
- case 'x':
- if (!(afp = fopen(file, "rb"))) {
- perror(argv[0]);
- exit(9);
- }
- head = read_head(afp);
- if (strncmp(head.magic, "tie", 3) || head.magic[3] - '0' != f) {
- fprintf(stderr, "%s: bad magic number", *argv);
- exit(10);
- }
- indx = read_indx(afp, &head);
- if (argc > 3)
- for (i=3; i<argc; i++) {
- int j;
- if ((j = find_gen(indx, argv[i], head.n)) == head.n) {
- fprintf(stderr, "%s not in archive\n", argv[i]);
- continue;
- }
- g = get_gen(afp, &head, &indx[j], j);
- file = malloc(8);
- sprintf(file, "%04d%s", head.size, g->gen.label);
- o ? WritGenFile(g, file) : WritAscFile(g, file);
- if (v)
- ; /* verbose mode */
- else fprintf(stdout, "x - %s\n", g->gen.label);
- free(file);
- free(g->genome);
- free(g);
- }
- else
- for (i=0; i<head.n; i++) {
- g = get_gen(afp, &head, &indx[i], i);
- file = malloc(12);
- sprintf(file, "%04d%s", head.size, g->gen.label);
- o ? WritGenFile(g, file) : WritAscFile(g, file);
- if (v)
- ; /* verbose mode */
- else fprintf(stdout, "x - %s\n", g->gen.label);
- free(file);
- free(g->genome);
- free(g);
- }
- break;
- }
- }
-