Annotation of coherent/g/usr/bin/me/fileio.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * The routines in this file read and write ASCII files from the
        !             3:  * disk.  All of the knowledge about files are here.  A better message
        !             4:  * writing scheme should be used.
        !             5:  */
        !             6: #include       <stdio.h>
        !             7: #include       "ed.h"
        !             8: #include       <access.h>
        !             9: 
        !            10: FILE   *ffp;                           /* File pointer, all functions. */
        !            11: 
        !            12: /*
        !            13:  * Open a file for reading.
        !            14:  */
        !            15: ffropen(fn)
        !            16: uchar  *fn;
        !            17: {
        !            18:        if ((ffp=fopen(fn, "r")) == NULL)
        !            19:                if (access(fn, AEXISTS)) /* access returns 0 on success */
        !            20:                        return (FIOFNF); /* new file */
        !            21:                else
        !            22:                        return (FIOERR); /* error */
        !            23:        return (FIOSUC);
        !            24: }
        !            25: 
        !            26: /*
        !            27:  * Open a file for writing.
        !            28:  * Return TRUE if all is well, and FALSE on error (cannot create).
        !            29:  */
        !            30: ffwopen(fn, w)
        !            31: uchar  *fn, *w;
        !            32: {
        !            33: #if    VMS
        !            34:        register int    fd;
        !            35: 
        !            36:        if ((fd=creat(fn, 0666, "rfm=var", "rat=cr")) < 0
        !            37:        || (ffp=fdopen(fd, w)) == NULL) {
        !            38: #else
        !            39:        if ((ffp=fopen(fn, w)) == NULL) {
        !            40: #endif
        !            41:                mlwrite("Cannot open file for writing");
        !            42:                return (FIOERR);
        !            43:        }
        !            44:        return (FIOSUC);
        !            45: }
        !            46: 
        !            47: /*
        !            48:  * Close a file.
        !            49:  * Should look at the status in all systems.
        !            50:  */
        !            51: ffclose()
        !            52: {
        !            53: #if    V7
        !            54:        if (fclose(ffp) != FALSE) {
        !            55:                mlwrite("Error closing file");
        !            56:                return (FIOERR);
        !            57:        }
        !            58:        return (FIOSUC);
        !            59: #endif
        !            60:        fclose(ffp);
        !            61:        return (FIOSUC);
        !            62: }
        !            63: 
        !            64: /*
        !            65:  * Write a line to the already opened file.  The "buf" points to the
        !            66:  * buffer, and the "nbuf" is its length, less the free newline.
        !            67:  * Return the status.
        !            68:  * Check only at the newline.
        !            69:  */
        !            70: ffputline(buf, nbuf)
        !            71: #ifdef SLOW
        !            72: register uchar buf[];
        !            73: #else
        !            74: uchar  buf[];
        !            75: #endif
        !            76: {
        !            77:        register int    i;
        !            78: 
        !            79: #ifdef SLOW
        !            80:        for (i=0; i<nbuf; ++i)
        !            81:                putc(buf[i]&0xFF, ffp);
        !            82: #else
        !            83:        fwrite(buf, 1, nbuf, ffp);
        !            84: #endif
        !            85:        putc('\n', ffp);
        !            86:        if (ferror(ffp) != FALSE) {
        !            87:                mlwrite("Write I/O error");
        !            88:                return (FIOERR);
        !            89:        }
        !            90:        return (FIOSUC);
        !            91: }
        !            92: 
        !            93: /*
        !            94:  * Read a line from a file and store the bytes in the supplied buffer.
        !            95:  * The "nbuf" is the length of the buffer.  Complain about long lines
        !            96:  * and lines at the end of the file that don't have a newline present.
        !            97:  * Check for I/O errors too.  Return status.
        !            98:  */
        !            99: ffgetline(buf, nbuf)
        !           100: register uchar buf[];
        !           101: {
        !           102:        register int    c;
        !           103:        register int    i;
        !           104: 
        !           105:        i = 0;
        !           106: #ifdef SLOW
        !           107:        while ((c=getc(ffp))!=EOF && c!='\n') {
        !           108:                if (i >= nbuf-1) {
        !           109:                        mlwrite("File has long line");
        !           110:                        buf[i] = 0;
        !           111:                        ungetc(c, ffp);
        !           112:                        return (FIOSUC);        /* Make long lines load */
        !           113:                }
        !           114:                buf[i++] = c;
        !           115:        }
        !           116: #else
        !           117:        if (fgets(buf, nbuf, ffp) != NULL) {
        !           118:                for (i=0; i<nbuf-1; i++) {
        !           119:                        if ((c = buf[i]) == '\n') {
        !           120:                                buf[i] = 0;
        !           121:                                goto lineread;
        !           122:                        }
        !           123:                }
        !           124:                mlwrite("File has long line");
        !           125:                buf[i] = 0;
        !           126:                return FIOSUC;
        !           127:        } else
        !           128:                c = EOF;
        !           129: lineread:
        !           130: #endif
        !           131:        if (c == EOF) {
        !           132:                if (ferror(ffp) != FALSE) {
        !           133:                        mlwrite("File read error");
        !           134:                        return (FIOERR);
        !           135:                }
        !           136:                if (i != 0) {
        !           137:                        mlwrite("File has funny line at EOF");
        !           138:                        buf[i]=0;               /* Make funny line show up. */
        !           139:                        return (FIOSUC);
        !           140:                }
        !           141:                return (FIOEOF);
        !           142:        }
        !           143:        buf[i] = 0;
        !           144:        return (FIOSUC);
        !           145: }

unix.superglobalmegacorp.com

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