Annotation of coherent/g/usr/bin/me/fileio.c, revision 1.1.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.