Annotation of coherent/b/conf/convert/ldev/cvldev.c, revision 1.1

1.1     ! root        1: /* cvldev.c: COnvert a Coherent L-devices file into a Taylor UUCP
        !             2:  *     port file.
        !             3:  */
        !             4: 
        !             5: #include <stdio.h>
        !             6: #include <string.h>
        !             7: 
        !             8: #define LDEV   "/usr/lib/uucp/L-devices"
        !             9: #define PORT   "/usr/lib/uucp/port"
        !            10: 
        !            11: int readfile();                /* read L-devices file */
        !            12: int convert_line();    /* convert line from L-devices into port entries */
        !            13: int write_entry();     /* add the entry to the port file */
        !            14: 
        !            15: /* stuff to be used to build port entry */
        !            16: char   port_type[4];           /* from ldev, either DIR pr ACU */
        !            17: char   dev_use[15];            /* 'line' from ldev, device call made on */
        !            18: char   dialer[15];             /* 'brand' from ldev, which should match a
        !            19:                                 * 'dial' file entry from converted modemcap.
        !            20:                                 */
        !            21: char   baud[6];                /* baud rate from ldev entry */
        !            22: 
        !            23: main()
        !            24: {
        !            25: 
        !            26:        FILE *infp;     /* our input file L-devices */
        !            27: 
        !            28:        umask(0177);
        !            29: 
        !            30:        /* open file, abort on error */
        !            31:        if( (infp = fopen(LDEV,"r")) == NULL){
        !            32:                printf("Failed to open %s.\n",LDEV);
        !            33:                exit(1);
        !            34:        }
        !            35: 
        !            36: 
        !            37:        while (readfile(infp)){
        !            38:                /* do nothing */
        !            39:                ;
        !            40:        }
        !            41: 
        !            42:        fclose(infp);
        !            43: }
        !            44: 
        !            45: 
        !            46: /* readfile: read a line from L-devices. Skip blank and comment lines. */
        !            47: 
        !            48: readfile(infile)
        !            49: FILE *infile;
        !            50: {
        !            51: 
        !            52:        char ldevline[75];              /* line read from L-devices file */
        !            53: 
        !            54:        if(fgets(ldevline,sizeof(ldevline),infile) == NULL){
        !            55:                /* we hit EOF or some error occured */
        !            56:                return(0);
        !            57:        }
        !            58: 
        !            59:        if( (ldevline[0] == '#') || (ldevline[0] == '\n')){
        !            60:                /* skip comment or blank line */
        !            61:                return(1);
        !            62:        }
        !            63: #ifdef DEBUG
        !            64:        printf("want to parse:  %s",ldevline);
        !            65: #endif
        !            66:        return(convert_line(ldevline));
        !            67: }
        !            68: 
        !            69: 
        !            70: /* convert_line() will walk down the string passed to it, extracting the
        !            71:  * three fields (type, line and brand) needed to build a port entry.
        !            72:  */
        !            73: 
        !            74: convert_line(ldevline)
        !            75: char *ldevline;
        !            76: {
        !            77:        char *ptrldev;          /* pointer to Ldev line passed to us */
        !            78:        char *ptrport;          /* pointer to port field we will fill */
        !            79: 
        !            80:        /* initialize our stuff */
        !            81: 
        !            82:        strcpy(port_type,"");
        !            83:        strcpy(dev_use,"");
        !            84:        strcpy(dialer,"");
        !            85: 
        !            86:        ptrldev = ldevline;
        !            87: 
        !            88:        /* now we parse out the port type from L-devices entry, which
        !            89:         * is either ACU or DIR. We only really need to look at the
        !            90:         * first character to know what the port type will be.
        !            91:         */
        !            92: 
        !            93:        if(*ptrldev == 'D'){
        !            94:                strcpy(port_type,"direct  ");
        !            95:        }
        !            96: 
        !            97:        if(*ptrldev == 'A'){
        !            98:                strcpy(port_type,"modem  ");
        !            99:        }
        !           100: 
        !           101:        /* if port_type is still NULL at this point, then there is
        !           102:         * something wrong with this line. We will print the line
        !           103:         * and abort.
        !           104:         */
        !           105: 
        !           106:        if(strlen(port_type) == 0){
        !           107:                printf("Error parsing L-devices entry.\n");
        !           108:                printf("An 'A' or 'D' was expected in the 1st field:\n");
        !           109:                printf("Line read was: %s\n",ldevline);
        !           110:                return(0);
        !           111:        }
        !           112: 
        !           113: #ifdef DEBUG
        !           114:        printf("parsed [%s] from 1st field\n",port_type);
        !           115: #endif
        !           116: 
        !           117:        /* now we walk down our string past the first field, which will be
        !           118:         * terminated by either a space or a tab. When we hit the space or
        !           119:         * tab, we keep going until we don't hit a space or tab, which should
        !           120:         * be the begining of the next field we want to parse.
        !           121:         */
        !           122: 
        !           123:        ptrport = dev_use;      /* we are filling in our 'line' field */
        !           124: 
        !           125:        ptrldev+=3;             /* skip first field of 3 chars */
        !           126: 
        !           127:        while(isspace(*ptrldev)){
        !           128:                /* do nothing, keep on skipping */
        !           129: #ifdef DEBUG
        !           130:                printf("skipping [%d]\n", *ptrldev);
        !           131: #endif
        !           132:                ptrldev++;
        !           133:        }
        !           134: 
        !           135:        /* no we fill in out field until we hit a space or tab */
        !           136:        while(0 == isspace(*ptrldev)){
        !           137: 
        !           138: #ifdef DEBUG
        !           139:                printf("%c [%d]",*ptrldev, *ptrldev);
        !           140: #endif
        !           141:                *ptrport++ = *ptrldev++;
        !           142:        }
        !           143: 
        !           144:        *ptrport = '\0';        /* terminate our string */
        !           145: 
        !           146: #ifdef DEBUG
        !           147:        printf("field is {%s}\n",dev_use);
        !           148: #endif
        !           149: 
        !           150:        /* we will now skip the remote field to get to the
        !           151:         * baud field.
        !           152:         */
        !           153: 
        !           154: 
        !           155:        while(isspace(*ptrldev++))      /* skip remote */
        !           156:                ;
        !           157:        while(!isspace(*ptrldev++))
        !           158:                ;
        !           159: 
        !           160:        ptrport = baud; 
        !           161:        while(isspace(*ptrldev))        /* get baud */
        !           162:                ptrldev++;
        !           163:        while(!isspace(*ptrldev))
        !           164:                *ptrport++ = *ptrldev++;
        !           165: 
        !           166:        *ptrport = '\0';
        !           167: 
        !           168:        while(isspace(*ptrldev++))
        !           169:                ;
        !           170: 
        !           171:        ptrport = dialer;       /* point to the dialer field to use */
        !           172: 
        !           173:        ptrldev--;
        !           174:        while(!isspace(*ptrldev))
        !           175:                *ptrport++ = *ptrldev++;
        !           176: 
        !           177:        *ptrport = '\0';
        !           178: 
        !           179: 
        !           180: #ifdef DEBUG
        !           181:        printf("Parsed: type %s line %s  dialer %s\n",
        !           182:                port_type, dev_use, dialer);
        !           183: #endif
        !           184: 
        !           185:        return(write_entry());
        !           186: }
        !           187: 
        !           188: 
        !           189: /* write_entry() will open the port file and write an appropriate
        !           190:  * entry into it.
        !           191:  */
        !           192: 
        !           193: 
        !           194: write_entry()
        !           195: {
        !           196:        FILE *outfp;
        !           197: 
        !           198:        if((outfp = fopen(PORT,"a")) == NULL){
        !           199:                printf("Error opening %s to write entry.\n",PORT);
        !           200:                return(0);
        !           201:        }
        !           202: 
        !           203: 
        !           204: #ifdef DEBUG
        !           205:        printf("write %s  %s  %s \n",dev_use, port_type, dev_use);
        !           206: #endif
        !           207:        fprintf(outfp,"port %s\n",dev_use);
        !           208:        fprintf(outfp,"type %s\n",port_type[0] == 'm'? "modem" : "direct");
        !           209:        fprintf(outfp,"device /dev/%s\n",dev_use);
        !           210:        fprintf(outfp,"baud %s\n",baud);
        !           211: 
        !           212:        if(port_type[0] == 'm'){
        !           213:                fprintf(outfp,"dialer %s\n\n",dialer);
        !           214:        }else{
        !           215:                fprintf(outfp,"\n");
        !           216:        }
        !           217: 
        !           218:        fflush(outfp);
        !           219:        fclose(outfp);
        !           220:        return(1);
        !           221: }

unix.superglobalmegacorp.com

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