Annotation of 43BSD/contrib/notes/src/nfxmit.c, revision 1.1

1.1     ! root        1: #define        MAINLINE
        !             2: 
        !             3: #ifdef RCSIDENT
        !             4: static char rcsid[] = "$Header: nfxmit.c,v 1.7 85/01/18 15:31:53 notes Rel $";
        !             5: #endif RCSIDENT
        !             6: 
        !             7: /*
        !             8:  *     This program (netsend) will parse off the control card a destination 
        !             9:  *     site, an optional date for sequencing purposes, and then a list
        !            10:  *     of notefiles. These notefiles are then scanned to send new items
        !            11:  *     to the destination site. The entire arguement list is scanned once
        !            12:  *     to pull in the switches and then again to dump the notefiles.
        !            13:  *     This implies that the switches are indeed global, and that the last
        !            14:  *     specified ones are the ones which are used.
        !            15:  *
        !            16:  *     Original Coding:        Ray Essick      December 1981
        !            17:  */
        !            18: #include "parms.h"
        !            19: #include "structs.h"
        !            20: #include "net.h"
        !            21: 
        !            22: static int  usetime;                                   /* whether overriding sequencer time */
        !            23: static int  sendhim;                                   /* classes to send */
        !            24: static int  callback;                                  /* whether to have remote send back */
        !            25: static char tosite[SYSSZ + 20];                                /* with some buffer space */
        !            26: static char dmpfile[WDLEN];                            /* a scratch file name */
        !            27: 
        !            28: xmitone (local)
        !            29: char   *local;
        !            30: {
        !            31:     char    cmdline[CMDLEN];                           /* build your favorite command */
        !            32:     char    buf[CMDLEN];
        !            33:     char    nfname[NNLEN];                             /* hold aliased nf name */
        !            34:     char   *xmit,
        !            35:            *rply;                                      /* for non-standard */
        !            36:     int     proto;                                     /* protocol to use */
        !            37:     int     queuestat;                                 /* Return Value */
        !            38:     int     sendstat;                                  /* nfsend status */
        !            39: 
        !            40:     getnet (tosite, &xmit, &rply, &proto);             /* see if non standard */
        !            41:     nfalias (local, nfname, tosite);                   /* get remote file name */
        !            42: 
        !            43:     if (callback)
        !            44:     {
        !            45:        if (rply == NULL)
        !            46:            sprintf (cmdline, DFLTRPLY,                 /* see net.h defn */
        !            47:                    tosite, NFXMIT, nfname, System);
        !            48:        else
        !            49:            sprintf (cmdline, rply, nfname, System);    /* do his */
        !            50: #ifndef        FASTFORK
        !            51:        dounix (cmdline, 0, 0);                         /* do it */
        !            52: #else
        !            53:        dounix (0, 0, hisshell, "-c", cmdline, 0, 0);   /* let shell interpret */
        !            54: #endif FASTFORK
        !            55:     }
        !            56: 
        !            57: /*
        !            58:  *     Now see if we have anything to send him.  We don't queue anything
        !            59:  *     unless we do want to send to him.
        !            60:  */
        !            61: 
        !            62:     if ((sendstat =                                    /* WANT ASSIGN */
        !            63:                nfsend (tosite, local, dmpfile, usetime, sendhim, proto)) > 0)
        !            64:     {
        !            65:        if (xmit == NULL)
        !            66:            sprintf (cmdline, DFLTXMIT,                 /* see net.h defn */
        !            67:                    tosite, NFRCV, nfname, System, dmpfile);
        !            68:        else
        !            69:        {
        !            70:            sprintf (buf, xmit, nfname, System);
        !            71:            sprintf (cmdline, "%s < %s", buf, dmpfile); /* feed stdin to it */
        !            72:        }
        !            73: #ifndef        FASTFORK
        !            74:        queuestat = dounix (cmdline, 0, 0);             /* do it */
        !            75: #else
        !            76:        queuestat = dounix (0, 0, hisshell, "-c", cmdline, 0, 0);
        !            77: #endif FASTFORK
        !            78:     }
        !            79:     else
        !            80:     {                                                  /* error or no data */
        !            81:        queuestat = 0;                                  /* avoid random stack noise */
        !            82:     }
        !            83: 
        !            84: /*
        !            85:  *     nfsendone cleans up the sequencer entry for that notesfile.
        !            86:  *     And does logging information also
        !            87:  *     We only clean up the entry if the command was successful.
        !            88:  */
        !            89:     nfsendone (local, tosite, queuestat, sendstat);
        !            90: 
        !            91:     return (0);                                                /* all is well */
        !            92: }
        !            93: 
        !            94: main (argc, argv)
        !            95: char  **argv;
        !            96: {
        !            97:     int     i;
        !            98:     struct nflist_f *nfptr;
        !            99:     char    fmtdate[DATELEN];                          /* formatted date */
        !           100:     struct when_f   ztime;                             /* hold date */
        !           101: 
        !           102:     startup (argc, argv);                              /* common init */
        !           103: 
        !           104:     if (argc == 1)
        !           105:     {
        !           106:        fprintf (stderr, "Usage: %s -d<site> [-r] [-i] [-a] [-t datespec]  [-f file] nf [nf2 ..]\n", argv[0]);
        !           107:        exit (BAD);
        !           108:     }
        !           109:     sendhim = 0;                                       /* default classes */
        !           110:     usetime = NORMSEQ;                                 /* sequencer time */
        !           111:     callback = 0;                                      /* no return messages */
        !           112:     sprintf (tosite, "*None*");                                /* null site */
        !           113: 
        !           114:     for (i = 1; i < argc; i++)                         /* parse options */
        !           115:        switch (argv[i][0])
        !           116:        {
        !           117:            case '-':                                   /* some options oh goody */
        !           118:                switch (argv[i][1])
        !           119:                {
        !           120:                    case 'd': 
        !           121:                        if (strmove (argv[i] + 2, tosite) > SYSSZ)
        !           122:                        {
        !           123:                            printf ("System name: %s, too long\n", argv[i] + 2);
        !           124:                            exit (BAD);
        !           125:                        }
        !           126:                        break;                          /* out of this switch statement */
        !           127: 
        !           128:                    case 'r':                           /* force rmt nfxmit */
        !           129:                        callback = 1;
        !           130:                        break;
        !           131: 
        !           132:                    case 'a':                           /* ok, news articles */
        !           133:                        sendhim |= SENDNEWS;
        !           134:                        break;
        !           135: 
        !           136:                    case 'i':                           /* stuff he's seen */
        !           137:                        sendhim |= SENDHIS;
        !           138:                        break;
        !           139: 
        !           140:                    case 't':                           /* explicit time */
        !           141:                    case 'o':                           /* compatibility */
        !           142:                        if (++i == argc)
        !           143:                        {
        !           144:                            fprintf (stderr, "-t option requires following date\n");
        !           145:                            exit (BAD);
        !           146:                        }
        !           147:                        switch (parsetime (argv[i], &ztime))
        !           148:                        {
        !           149:                            case 0:                     /* ok */
        !           150:                                usetime = BASESEQ;      /* use this time */
        !           151:                                Basetime = ztime;       /* store it */
        !           152:                                sprdate (&ztime, fmtdate);/* format */
        !           153:                                printf ("%s: Sending articles since %s\n",
        !           154:                                        Invokedas, fmtdate);
        !           155:                                break;
        !           156:                            case -1:                    /* no good */
        !           157:                                fprintf (stderr, "%s: unable to parse time `%s'\n",
        !           158:                                        Invokedas, argv[i]);
        !           159:                                exit (BAD);
        !           160:                            case -2:                    /* in future */
        !           161:                                fprintf (stderr, "%s: parsed date (%s) is in the future\n",
        !           162:                                        Invokedas, argv[i]);
        !           163:                                exit (BAD);
        !           164:                        }
        !           165:                        break;
        !           166: 
        !           167:                    case 'f':                           /* next list is a file name */
        !           168:                        if (++i == argc)                /* no filename */
        !           169:                        {
        !           170:                            fprintf (stderr, "-f must be followed by filename\n");
        !           171:                            exit (BAD);
        !           172:                        }
        !           173:                        readrc (argv[i]);               /* load it */
        !           174:                        break;
        !           175: 
        !           176:                    default: 
        !           177:                        printf ("Bad switch '%c'\n", argv[i][1]);
        !           178:                        exit (BAD);
        !           179:                }
        !           180:                break;
        !           181: 
        !           182:            default:                                    /* a notefile name */
        !           183:                expand (argv[i]);                       /* add it to the list */
        !           184:                break;
        !           185:        }
        !           186: 
        !           187:     sprintf (dmpfile, "/tmp/nfxmit%d", getpid ());
        !           188:     if (strcmp ("*None*", tosite) == 0)
        !           189:     {
        !           190:        printf ("Null destination - use -d flag\n");
        !           191:        exit (BAD);
        !           192:     }
        !           193: 
        !           194: /*     now that we have processed all the parameters, lets dump the
        !           195:  *     notes and send them to the other people.
        !           196:  *     This is a 2 step process. First we make a file and then
        !           197:  *     we 'uucp' it to the other site.
        !           198:  */
        !           199: 
        !           200:     while ((nfptr = nextgroup ()) != (struct nflist_f *) NULL)
        !           201:        xmitone (nfptr -> nf_name);                     /* simple case */
        !           202: 
        !           203:     exit (GOOD);
        !           204: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.