Annotation of 43BSD/contrib/icon/tran/lnklist.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Routines for handling file linking.
        !             3:  */
        !             4: 
        !             5: #include "itran.h"
        !             6: #include "lfile.h"
        !             7: 
        !             8: struct lfile *lfiles;
        !             9: 
        !            10: /*
        !            11:  * alclfile allocates an lfile structure for the named file, fills
        !            12:  *  in the name and returns a pointer to it.
        !            13:  */
        !            14: struct lfile *alclfile(name)
        !            15: char *name;
        !            16:    {
        !            17:    struct lfile *p;
        !            18:    char *np;
        !            19:    int l;
        !            20:    extern char *allocate();
        !            21:    
        !            22:    p = (struct lfile *)allocate(1,sizeof(struct lfile));
        !            23:    if (!p)
        !            24:       syserr("not enough memory for file list");
        !            25:    p->lf_link = NULL;
        !            26:    l = strlen(name);
        !            27:    np = allocate(1,(l+1+sizeof(int *)) & ~(sizeof(int *)-1));
        !            28:    if (!np)
        !            29:       syserr("not enough memory for file list");
        !            30:    strncpy(np,name,l);
        !            31:    p->lf_name = np;
        !            32:    return p;
        !            33:    }
        !            34: /*
        !            35:  * dumplfiles - print the list of files to link.  Debugging only.
        !            36:  */
        !            37: dumplfiles()
        !            38: {
        !            39:    struct lfile *p,*lfls;
        !            40: 
        !            41:    printf("lfiles:\n");
        !            42:    lfls = lfiles;
        !            43:    while (p = getlfile(&lfls))
        !            44:        printf("'%s'\n",p->lf_name);
        !            45: }
        !            46: /*
        !            47:  * addlfile creates an lfile structure for the named file and add it to the
        !            48:  *  end of the list of files (lfiles) to generate link instructions for.
        !            49:  */
        !            50: addlfile(name)
        !            51: char *name;
        !            52: {
        !            53:    struct lfile *nlf, *p;
        !            54:    
        !            55:    nlf = alclfile(name);
        !            56:    if (lfiles == NULL) {
        !            57:       lfiles = nlf;
        !            58:       }
        !            59:    else {
        !            60:       p = lfiles;
        !            61:       while (p->lf_link != NULL) {
        !            62:          p = p->lf_link;
        !            63:          }
        !            64:       p->lf_link = nlf;
        !            65:       }
        !            66: }
        !            67: /*
        !            68:  * getlfile returns a pointer (p) to the lfile structure pointed at by lptr
        !            69:  *  and moves lptr to the lfile structure that p points at.  In other words,
        !            70:  *  getlfile returns a pointer to the current (wrt. lptr) lfile and advances
        !            71:  *  lptr.
        !            72:  */
        !            73: struct lfile *
        !            74: getlfile(lptr)
        !            75: struct lfile **lptr;
        !            76: {
        !            77:    struct lfile *p;
        !            78:    
        !            79:    if (*lptr == NULL)
        !            80:       return NULL;
        !            81:    else {
        !            82:       p = *lptr;
        !            83:       *lptr = p->lf_link;
        !            84:       return p;
        !            85:       }
        !            86: }

unix.superglobalmegacorp.com

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