Annotation of 43BSDTahoe/new/notes/src/asearch.c, revision 1.1

1.1     ! root        1: #include "parms.h"
        !             2: #include "structs.h" 
        !             3: 
        !             4: #ifdef RCSIDENT
        !             5: static char rcsid[] = "$Header: asearch.c,v 1.7 85/01/18 15:04:25 notes Rel $";
        !             6: #endif RCSIDENT
        !             7: 
        !             8: /*
        !             9:  *     asearch(io, notenum, respnum, grabname)
        !            10:  *     int *notenum, *respnum; struct io_f *io;
        !            11:  *
        !            12:  *     searches for an article by the specified author. The author to
        !            13:  *     look for is kept in io->xasys and io->xaname
        !            14:  *     The search starts with note # notenum, and the respnum'th
        !            15:  *     response of that note.
        !            16:  *
        !            17:  *     The search proceeds out to the end of the response chain and
        !            18:  *     then goes through the previous note and its responses
        !            19:  *     --so it is not strictly backwards, but instead is backwards on
        !            20:  *     the notes and forward within a notes responses. 
        !            21:  *     ---This could be changed later.
        !            22:  *
        !            23:  *     Returns:        0 nothing found
        !            24:  *                     >0 Found something. Correct place is in
        !            25:  *                        notenum and respnum....
        !            26:  *                     -1 did not specify a search string!
        !            27:  *
        !            28:  *
        !            29:  *     Ray Essick                      Feb 1982
        !            30:  */
        !            31: 
        !            32: asearch (io, notenum, respnum, grabname)
        !            33: struct io_f *io;
        !            34: int    *notenum,
        !            35:        *respnum;
        !            36: {
        !            37:     struct note_f   note;
        !            38:     struct resp_f   rsprec;
        !            39:     register int    i,
        !            40:                     j;                                 /* scratch counters */
        !            41:     int     rblock,
        !            42:             roffset;
        !            43:     char    buf[SYSSZ + NAMESZ + 5];
        !            44:     char    author[SYSSZ + NAMESZ + 2];                        /* must hold either */
        !            45:     char    checkit[SYSSZ + NAMESZ + 2];               /* built from note */
        !            46: 
        !            47:     if (grabname || (io -> xauthor[0] == '\0'))
        !            48:     {                                                  /* get an author */
        !            49: rekey:                                                         /* re-enter */
        !            50:        at (-1, 1);
        !            51:        printf ("Search author:                          ");
        !            52:        at (-1, 16);
        !            53:        i = gline (buf, NNLEN + SYSSZ + 1);             /* grab name */
        !            54:        at (-1, 1);
        !            55:        printf ("%*s", i + 15, " ");
        !            56:        if (i == 1)
        !            57:            return (-1);                                /* no name */
        !            58:        if (sscanf (buf, "%s", author) == 1)
        !            59:        {
        !            60:            strcpy (io -> xauthor, author);             /* load it */
        !            61:        }
        !            62:        else
        !            63:        {
        !            64:            at (0, 1);
        !            65:            printf ("Bad author specification - reenter");
        !            66:            goto rekey;
        !            67:        }
        !            68:     }
        !            69: 
        !            70:     at (-1, 1);
        !            71:     printf ("Searching for articles by %s    ", io -> xauthor);
        !            72:     fflush (stdout);
        !            73: 
        !            74:     if (*notenum > io -> descr.d_nnote)                        /* check boundaries */
        !            75:     {
        !            76:        *respnum = 0;
        !            77:        *notenum = io -> descr.d_nnote;
        !            78:     }
        !            79: 
        !            80:     for (j = 0; io -> xauthor[j]; j++)                 /* force lower case */
        !            81:        io -> xauthor[j] = tolcase (io -> xauthor[j]);
        !            82: 
        !            83:     if (*respnum != 0)
        !            84:     {
        !            85:        getnrec (io, *notenum, &note);
        !            86:        goto inloop;
        !            87:     }
        !            88: 
        !            89:     intflag = 0;                                       /* for quit signals */
        !            90:     while (*notenum > 0)
        !            91:     {
        !            92:        getnrec (io, *notenum, &note);
        !            93:        if (note.n_stat & DELETED)
        !            94:        {
        !            95:            (*notenum)--;
        !            96:            continue;                                   /* dead note */
        !            97:        }
        !            98: #ifdef USERHOST
        !            99:        sprintf (checkit, "%s@%s", note.n_auth.aname, note.n_id.sys);
        !           100: #else
        !           101:        sprintf (checkit, "%s!%s", note.n_id.sys, note.n_auth.aname);
        !           102: #endif USERHOST
        !           103:        for (j = strlen (checkit) - 1; j >= 0; j--)     /* use lower case */
        !           104:            checkit[j] = tolcase (checkit[j]);
        !           105:        if (substr (io -> xauthor, checkit))
        !           106:            return (*notenum);                          /* found him! */
        !           107:        *respnum = 1;                                   /* set it now */
        !           108: inloop:                                                /* start on a resp */
        !           109:        for (; *respnum <= note.n_nresp; (*respnum)++)
        !           110:        {
        !           111:            if (lrsp (io, *notenum, *respnum, &rsprec, &roffset, &rblock) == -1)
        !           112:                break;
        !           113: #ifdef USERHOST
        !           114:            sprintf (checkit, "%s@%s", rsprec.r_auth[roffset].aname,
        !           115:                    rsprec.r_id[roffset].sys);
        !           116: #else
        !           117:            sprintf (checkit, "%s!%s", rsprec.r_id[roffset].sys,
        !           118:                    rsprec.r_auth[roffset].aname);
        !           119: #endif USERHOST
        !           120:            if (substr (io -> xauthor, checkit))
        !           121:                return * notenum;                       /* found him */
        !           122:            if (intflag)
        !           123:                break;                                  /* impatience */
        !           124:        }
        !           125:        *respnum = 0;                                   /* make it a main note */
        !           126:        (*notenum)--;                                   /* and proceed to next note */
        !           127:        if (intflag)
        !           128:            break;                                      /* impatient little boy */
        !           129:     }
        !           130:     at (0, 1);
        !           131:     if (intflag)
        !           132:     {
        !           133:        intflag = 0;                                    /* don't field same one later */
        !           134:        printf ("Search aborted");
        !           135:     }
        !           136:     else
        !           137:     {
        !           138:        printf ("Can't find any articles by %s", io -> xauthor);
        !           139:     }
        !           140:     return 0;
        !           141: }

unix.superglobalmegacorp.com

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