# 2.11BSD#431 - /usr/src/new/rn/init.c

##### Functions

    initialize        X
    lock_check        X
    newsnews_check    X

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

#### Defined functions

initialize defined in line 52; used 2 times

- in /usr/src/new/rn/init.h line 11
- in /usr/src/new/rn/rn.c line 63

lock_check defined in line 252; used 2 times

- in line 125
- in /usr/src/new/rn/init.h line 12

newsnews_check defined in line 326; used 2 times

- in line 130
- in /usr/src/new/rn/init.h line 13

Last modified: 1987-05-26 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1020 |