1: /* $Header: init.c,v 4.3.1.2 85/05/21 14:22:46 lwall Exp $
   2:  *
   3:  * $Log:	init.c,v $
   4:  * Revision 4.3.1.2  85/05/21  14:22:46  lwall
   5:  * Sped up "rn -c" by avoiding unnecessary initialization.
   6:  *
   7:  * Revision 4.3.1.1  85/05/10  11:33:39  lwall
   8:  * Branch for patches.
   9:  *
  10:  * Revision 4.3  85/05/01  16:16:13  lwall
  11:  * Baseline for release with 4.3bsd.
  12:  *
  13:  */
  14: 
  15: #include "EXTERN.h"
  16: #include "common.h"
  17: #include "util.h"
  18: #include "final.h"
  19: #include "term.h"
  20: #include "last.h"
  21: #include "rn.h"
  22: #include "rcstuff.h"
  23: #include "ngdata.h"
  24: #include "only.h"
  25: #include "intrp.h"
  26: #include "addng.h"
  27: #include "sw.h"
  28: #include "art.h"
  29: #include "artsrch.h"
  30: #include "artio.h"
  31: #include "backpage.h"
  32: #include "bits.h"
  33: #include "cheat.h"
  34: #include "head.h"
  35: #include "help.h"
  36: #include "kfile.h"
  37: #include "ngsrch.h"
  38: #include "ngstuff.h"
  39: #include "rcln.h"
  40: #include "respond.h"
  41: #include "ng.h"
  42: #include "server.h"
  43: #include "INTERN.h"
  44: #include "init.h"
  45: 
  46: bool
  47: initialize(argc,argv)
  48: int argc;
  49: char *argv[];
  50: {
  51:     char *tcbuf;
  52:     register bool foundany = FALSE;
  53:     long time();
  54: #ifdef NOLINEBUF
  55:     char std_out_buf[BUFSIZ];
  56: 
  57:     setbuf(std_out_buf);
  58: #endif
  59: 
  60:     tcbuf = safemalloc(1024);       /* make temp buffer for termcap and */
  61:                     /* other initialization stuff */
  62: 
  63:     /* init terminal */
  64: 
  65:     term_init();            /* must precede sw_init() so that */
  66:                     /* ospeed is set for baud-rate */
  67:                     /* switches.  Actually terminal */
  68:                     /* mode setting is in term_set() */
  69: 
  70:     /* we have to know rnlib to look up global switches in %X/INIT */
  71: 
  72:     lib = savestr(filexp(LIB));
  73:     rnlib = savestr(filexp(RNLIB));
  74: 
  75:     /* decode switches */
  76: 
  77:     sw_init(argc,argv,&tcbuf);          /* must not do % interps! */
  78:                     /* (but may mung environment) */
  79: 
  80:     /* init signals, status flags */
  81: 
  82:     final_init();
  83: 
  84:     /* start up file expansion and the % interpreter */
  85: 
  86:     intrp_init(tcbuf);
  87: 
  88:     /* now make sure we have a current working directory */
  89: 
  90:     if (!checkflag)
  91:     cwd_check();
  92: 
  93:     /* now that we know where to save things, cd to news directory */
  94: 
  95:     if (chdir(spool)) {
  96:     printf(nocd,spool) FLUSH;
  97:     finalize(1);
  98:     }
  99: 
 100:     /* if we aren't just checking, turn off echo */
 101: 
 102:     if (!checkflag)
 103:     term_set(tcbuf);
 104: 
 105:     /* get info on last rn run, if any */
 106: 
 107:     if (!checkflag)
 108:     last_init(tcbuf);
 109: 
 110:     free(tcbuf);            /* recover 1024 bytes */
 111: 
 112:     /* make sure we are the right version */
 113: 
 114: #ifndef SERVER
 115:     if (!checkflag)
 116:     version_check();
 117: #endif
 118: 
 119:     /* make sure we are the sole possessors of .newsrc */
 120: 
 121:     if (!checkflag)
 122:     lock_check();
 123: 
 124:     /* check for news news */
 125: 
 126:     if (!checkflag)
 127:     newsnews_check();
 128: 
 129:     /* open connection to server if appropriate */
 130: 
 131: #ifdef SERVER
 132:     if (server_init(SERVER_HOST) < 0)
 133:     finalize(1);
 134: #endif
 135: 
 136:     /* open active file, etc. */
 137: 
 138:     ngdata_init();
 139: 
 140:     /* now read in the .newsrc file */
 141: 
 142:     foundany = rcstuff_init();
 143: 
 144:     /* it looks like we will actually read something, so init everything */
 145: 
 146:     addng_init();
 147:     art_init();
 148:     artio_init();
 149:     artsrch_init();
 150:     backpage_init();
 151:     bits_init();
 152:     cheat_init();
 153: /*  final_init();	already done */
 154:     head_init();
 155:     help_init();
 156: /*  intrp_init();      already done */
 157:     kfile_init();
 158: /*  last_init();	already done */
 159:     ng_init();
 160: /*  ngdata_init();	already done */
 161:     ngsrch_init();
 162:     ngstuff_init();
 163:     only_init();
 164:     rcln_init();
 165: /*  rcstuff_init();	already done */
 166:     respond_init();
 167:     rn_init();
 168:     search_init();
 169: /*  sw_init();      already done */
 170: /*  term_init();	already done */
 171:     util_init();
 172: 
 173: #ifdef FINDNEWNG
 174:     fstat(actfp->_file,&filestat);  /* did active file grow? */
 175:     if (filestat.st_size != lastactsiz) {
 176:     long actsiz = filestat.st_size; /* remember new size */
 177:     NG_NUM oldnext = nextrcline;    /* remember # lines in newsrc */
 178: #ifdef FASTNEW
 179:     bool munged = writesoft || !lastactsiz;
 180:                     /* bad soft ptrs -> edited active */
 181: #else
 182:     bool munged = TRUE;     /* just assume .newsrc munged */
 183: #endif
 184: 
 185: #ifdef VERBOSE
 186:     IF(verbose)
 187:         fputs("\nChecking active list for new newsgroups...\n",stdout)
 188:           FLUSH;
 189:     ELSE
 190: #endif
 191: #ifdef TERSE
 192:         fputs("\nNew newsgroups:\n",stdout) FLUSH;
 193: #endif
 194: #ifdef FASTNEW
 195:     if (!munged) {          /* maybe just do tail of file? */
 196:         fseek(actfp,lastactsiz-1,0);
 197:         fgets(buf,LBUFLEN,actfp);
 198:         munged = (*buf != '\n');
 199:         if (!munged)
 200:         munged = newlist(munged,FALSE);
 201:     }
 202: #endif
 203:     if (munged) {           /* must we scan entire file? */
 204:         fseek(actfp,0L,0);      /* rewind active file */
 205:         newlist(munged,FALSE);      /* sure hope they use hashing... */
 206:     }
 207:     lastactsiz = actsiz;        /* remember for .rnlast */
 208:     if (nextrcline != oldnext) {    /* did we add any new groups? */
 209:         foundany = TRUE;        /* let main() know */
 210:         starthere = 0;              /* and start ng scan from the top */
 211:     }
 212:     }
 213: #endif
 214:     time(&lasttime);            /* remember when we inited-- */
 215:                     /* ends up back in .rnlast */
 216:     writelast();                       /* in fact, put it there now */
 217: 
 218: #ifdef FINDNEWNG
 219: # ifdef ONLY
 220:     if (maxngtodo)          /* patterns on command line? */
 221:     foundany |= scanactive();
 222: # endif
 223: #endif
 224: 
 225:     return foundany;
 226: }
 227: 
 228: /* make sure there is no rn out there already */
 229: 
 230: void
 231: lock_check()
 232: {
 233:     lockname = savestr(filexp(LOCKNAME));
 234:     if (!checkflag) {
 235:     tmpfp = fopen(lockname,"r");
 236:     if (tmpfp != Nullfp) {
 237:         int processnum;
 238: 
 239:         fgets(buf,LBUFLEN,tmpfp);
 240:         fclose(tmpfp);
 241:         processnum = atoi(buf);
 242: #ifdef VERBOSE
 243:         IF(verbose)
 244:         printf("You seem to have left an rn running, process %d.\n",
 245:             processnum) FLUSH;
 246:         ELSE
 247: #endif
 248: #ifdef TERSE
 249:         printf("Rn left running, #%d.\n", processnum) FLUSH;
 250: #endif
 251:         if (kill(processnum, SIGEMT)) {
 252:                     /* does process not exist? */
 253:                     /* (rn ignores SIGEMT) */
 254:         sleep(2);
 255: #ifdef VERBOSE
 256:         IF(verbose)
 257:             fputs("\n\
 258: That process does not seem to exist anymore.  The count of read articles\n\
 259: may be incorrect in the last newsgroup accessed by that other (defunct)\n\
 260: process.\n\n",stdout) FLUSH;
 261:         ELSE
 262: #endif
 263: #ifdef TERSE
 264:             fputs("\nProcess crashed.\n",stdout) FLUSH;
 265: #endif
 266:         if (*lastngname) {
 267: #ifdef VERBOSE
 268:             IF(verbose)
 269:             printf("(The last newsgroup accessed was %s.)\n\n",
 270:             lastngname) FLUSH;
 271:             ELSE
 272: #endif
 273: #ifdef TERSE
 274:             printf("(In %s.)\n\n",lastngname) FLUSH;
 275: #endif
 276:         }
 277:         get_anything();
 278:         putchar('\n') FLUSH;
 279:         }
 280:         else {
 281: #ifdef VERBOSE
 282:         IF(verbose)
 283:             fputs("\n\
 284: You may not have two copies of rn running simultaneously.  Goodbye.\n\
 285: ",stdout) FLUSH;
 286:         ELSE
 287: #endif
 288: #ifdef TERSE
 289:             fputs("\nCan't start another.\n",stdout) FLUSH;
 290: #endif
 291:         finalize(0);
 292:         }
 293:     }
 294:     tmpfp = fopen(lockname,"w");
 295:     if (tmpfp == Nullfp) {
 296:         printf(cantcreate,lockname) FLUSH;
 297:         sig_catcher(0);
 298:     }
 299:     fprintf(tmpfp,"%d\n",getpid());
 300:     fclose(tmpfp);
 301:     }
 302: }
 303: 
 304: void
 305: newsnews_check()
 306: {
 307:     char *newsnewsname = filexp(NEWSNEWSNAME);
 308: 
 309:     if ((tmpfp = fopen(newsnewsname,"r")) != Nullfp) {
 310:     fstat(tmpfp->_file,&filestat);
 311:     if (filestat.st_mtime > lasttime) {
 312:         while (fgets(buf,sizeof(buf),tmpfp) != Nullch)
 313:         fputs(buf,stdout) FLUSH;
 314:         get_anything();
 315:         putchar('\n') FLUSH;
 316:     }
 317:     fclose(tmpfp);
 318:     }
 319: }
 320: 
 321: void
 322: version_check()
 323: {
 324:     set_ngname("net.announce");
 325:     if (access(ngdir,0)) {
 326: #ifdef VERBOSE
 327:     IF(verbose)
 328:         fputs("Can't find net.announce.  Wrong news version?\n",stdout)
 329:           FLUSH;
 330:     ELSE
 331: #endif
 332: #ifdef TERSE
 333:         fputs("Wrong version?\n",stdout) FLUSH;
 334: #endif
 335:     finalize(1);
 336:     }
 337: }

Defined functions

initialize defined in line 46; used 2 times
lock_check defined in line 230; used 2 times
newsnews_check defined in line 304; used 2 times
version_check defined in line 321; used 2 times
Last modified: 1986-03-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1434
Valid CSS Valid XHTML 1.0 Strict