1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifndef lint
   8: static char sccsid[] = "@(#)dumpmain.c	5.1 (Berkeley) 6/5/85";
   9: #endif not lint
  10: 
  11: #include "dump.h"
  12: 
  13: int notify = 0; /* notify operator flag */
  14: int blockswritten = 0;  /* number of blocks written on current tape */
  15: int tapeno = 0; /* current tape number */
  16: int density = 160;  /* density in 0.1" units */
  17: 
  18: main(argc, argv)
  19:     int argc;
  20:     char    *argv[];
  21: {
  22:     char        *arg;
  23:     register    i;
  24:     float       fetapes;
  25:     register    struct  fstab   *dt;
  26: 
  27:     time(&(spcl.c_date));
  28: 
  29:     tsize = 2300L*12L*10L;
  30:     tape = TAPE;
  31:     disk = DISK;
  32:     increm = NINCREM;
  33: 
  34:     incno = '9';
  35:     uflag = 0;
  36:     arg = "u";
  37:     if(argc > 1) {
  38:         argv++;
  39:         argc--;
  40:         arg = *argv;
  41:         if (*arg == '-')
  42:             argc++;
  43:     }
  44:     while(*arg)
  45:     switch (*arg++) {
  46:     case 'w':
  47:         lastdump('w');      /* tell us only what has to be done */
  48:         exit(0);
  49:         break;
  50:     case 'W':           /* what to do */
  51:         lastdump('W');      /* tell us the current state of what has been done */
  52:         exit(0);        /* do nothing else */
  53:         break;
  54: 
  55:     case 'J':           /* update old to new */
  56:         o_nconvert();
  57:         exit(0);        /* do nothing else */
  58:         break;
  59: 
  60:     case 'f':           /* output file */
  61:         if(argc > 1) {
  62:             argv++;
  63:             argc--;
  64:             tape = *argv;
  65:         }
  66:         break;
  67: 
  68:     case 'd':           /* density, in bits per inch */
  69:         if (argc > 1) {
  70:             argv++;
  71:             argc--;
  72:             density = atoi(*argv) / 10;
  73:         }
  74:         break;
  75: 
  76:     case 's':           /* tape size, feet */
  77:         if(argc > 1) {
  78:             argv++;
  79:             argc--;
  80:             tsize = atol(*argv);
  81:             tsize *= 12L*10L;
  82:         }
  83:         break;
  84: 
  85:     case '0':           /* dump level */
  86:     case '1':
  87:     case '2':
  88:     case '3':
  89:     case '4':
  90:     case '5':
  91:     case '6':
  92:     case '7':
  93:     case '8':
  94:     case '9':
  95:         incno = arg[-1];
  96:         break;
  97: 
  98:     case 'u':           /* update /etc/dumpdates */
  99:         uflag++;
 100:         break;
 101: 
 102:     case 'n':           /* notify operators */
 103:         notify++;
 104:         break;
 105: 
 106:     default:
 107:         fprintf(stderr, "bad key '%c%'\n", arg[-1]);
 108:         Exit(X_ABORT);
 109:     }
 110:     if(strcmp(tape, "-") == 0) {
 111:         pipeout++;
 112:         tape = "standard output";
 113:     }
 114:     if(argc > 1) {
 115:         argv++;
 116:         argc--;
 117:         disk = *argv;
 118:     }
 119: 
 120:     if (signal(SIGHUP, sighup) == SIG_IGN)
 121:         signal(SIGHUP, SIG_IGN);
 122:     if (signal(SIGTRAP, sigtrap) == SIG_IGN)
 123:         signal(SIGTRAP, SIG_IGN);
 124:     if (signal(SIGFPE, sigfpe) == SIG_IGN)
 125:         signal(SIGFPE, SIG_IGN);
 126:     if (signal(SIGBUS, sigbus) == SIG_IGN)
 127:         signal(SIGBUS, SIG_IGN);
 128:     if (signal(SIGSEGV, sigsegv) == SIG_IGN)
 129:         signal(SIGSEGV, SIG_IGN);
 130:     if (signal(SIGTERM, sigterm) == SIG_IGN)
 131:         signal(SIGTERM, SIG_IGN);
 132: 
 133: 
 134:     if (signal(SIGINT, interrupt) == SIG_IGN)
 135:         signal(SIGINT, SIG_IGN);
 136: 
 137:     set_operators();    /* /etc/group snarfed */
 138:     getfstab();     /* /etc/fstab snarfed */
 139:     /*
 140: 	 *	disk can be either the full special file name,
 141: 	 *	the suffix of the special file name,
 142: 	 *	the special name missing the leading '/',
 143: 	 *	the file system name with or without the leading '/'.
 144: 	 */
 145:     dt = fstabsearch(disk);
 146:     if (dt != 0)
 147:         disk = rawname(dt->fs_spec);
 148:     getitime();     /* /etc/dumpdates snarfed */
 149: 
 150:     msg("Date of this level %c dump: %s\n", incno, prdate(spcl.c_date));
 151:     msg("Date of last level %c dump: %s\n", incno, prdate(spcl.c_ddate));
 152:     msg("Dumping %s ", disk);
 153:     if (dt != 0)
 154:         msgtail("(%s) ", dt->fs_file);
 155:     msgtail("to %s\n", tape);
 156: 
 157:     fi = open(disk, 0);
 158:     if (fi < 0) {
 159:         msg("Cannot open %s\n", disk);
 160:         Exit(X_ABORT);
 161:     }
 162:     CLR(clrmap);
 163:     CLR(dirmap);
 164:     CLR(nodmap);
 165:     esize = 0;
 166: 
 167:     msg("mapping (Pass I) [regular files]\n");
 168:     pass(mark, (short *)NULL);      /* mark updates esize */
 169: 
 170:     do {
 171:         msg("mapping (Pass II) [directories]\n");
 172:         nadded = 0;
 173:         pass(add, dirmap);
 174:     } while(nadded);
 175: 
 176:     bmapest(clrmap);
 177:     bmapest(nodmap);
 178: 
 179:     fetapes =
 180:         (    esize      /* blocks */
 181:             *BSIZE      /* bytes / block */
 182:             *(1.0/density)  /* 0.1" / byte */
 183:           +
 184:              esize      /* blocks */
 185:             *(1.0/NTREC)    /* IRG's / block */
 186:             *7      /* 0.1" / IRG */
 187:         ) * (1.0 / tsize )  /* tape / 0.1" */
 188:     ;
 189:     etapes = fetapes;       /* truncating assignment */
 190:     etapes++;
 191:     /*
 192: 	 *	esize is typically about 5% too low; we frob it here
 193: 	 */
 194:     esize += ((5*esize)/100);
 195:     msg("estimated %ld tape blocks on %3.2f tape(s).\n", esize, fetapes);
 196: 
 197:     otape();            /* bitmap is the first to tape write */
 198:     time(&(tstart_writing));
 199:     bitmap(clrmap, TS_CLRI);
 200: 
 201:     msg("dumping (Pass III) [directories]\n");
 202:     pass(dump, dirmap);
 203: 
 204:     msg("dumping (Pass IV) [regular files]\n");
 205:     pass(dump, nodmap);
 206: 
 207:     spcl.c_type = TS_END;
 208:     for(i=0; i<NTREC; i++)
 209:         spclrec();
 210:     msg("DUMP: %ld tape blocks on %d tape(s)\n",spcl.c_tapea,spcl.c_volume);
 211:     msg("DUMP IS DONE\n");
 212: 
 213:     putitime();
 214:     if (!pipeout) {
 215:         close(to);
 216:         rewind();
 217:     }
 218:     broadcast("DUMP IS DONE!\7\7\n");
 219:     Exit(X_FINOK);
 220: }
 221: 
 222: int sighup(){   msg("SIGHUP()  try rewriting\n"); sigAbort();}
 223: int sigtrap(){  msg("SIGTRAP()  try rewriting\n"); sigAbort();}
 224: int sigfpe(){   msg("SIGFPE()  try rewriting\n"); sigAbort();}
 225: int sigbus(){   msg("SIGBUS()  try rewriting\n"); sigAbort();}
 226: int sigsegv(){  msg("SIGSEGV()  ABORTING!\n"); abort();}
 227: int sigalrm(){  msg("SIGALRM()  try rewriting\n"); sigAbort();}
 228: int sigterm(){  msg("SIGTERM()  try rewriting\n"); sigAbort();}
 229: 
 230: sigAbort()
 231: {
 232:     msg("Rewriting attempted as response to unknown signal.\n");
 233:     fflush(stderr);
 234:     fflush(stdout);
 235:     close_rewind();
 236:     exit(X_REWRITE);
 237: }
 238: 
 239: char *rawname(cp)
 240:     char *cp;
 241: {
 242:     static char rawbuf[32];
 243:     char *dp = (char *)rindex(cp, '/');
 244: 
 245:     if (dp == 0)
 246:         return (0);
 247:     *dp = 0;
 248:     strcpy(rawbuf, cp);
 249:     *dp = '/';
 250:     strcat(rawbuf, "/r");
 251:     strcat(rawbuf, dp+1);
 252:     return (rawbuf);
 253: }

Defined functions

main defined in line 18; never used
rawname defined in line 239; used 4 times
sigAbort defined in line 230; used 6 times
sigalrm defined in line 227; used 1 times
sigbus defined in line 225; used 2 times
sigfpe defined in line 224; used 2 times
sighup defined in line 222; used 2 times
sigsegv defined in line 226; used 2 times
sigterm defined in line 228; used 2 times
sigtrap defined in line 223; used 2 times

Defined variables

blockswritten defined in line 14; never used
density defined in line 16; used 2 times
notify defined in line 13; used 1 times
sccsid defined in line 8; never used
tapeno defined in line 15; never used
Last modified: 1985-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1557
Valid CSS Valid XHTML 1.0 Strict