|
|
1.1 ! root 1: /* copen.c 1.8 85/03/24 */ ! 2: ! 3: #include <stdio.h> ! 4: #include "cpmio.h" ! 5: #include "cpmfio.h" ! 6: ! 7: /* ! 8: * Open cp/m file with the given file name and extension, return ! 9: * file pointer. A null pointer is returned if the file could not ! 10: * be opened. mode tells whether the file is to be read, written ! 11: * or both. ! 12: */ ! 13: ! 14: C_FILE * ! 15: c_open(name, ext, mode) ! 16: char *name, *ext; ! 17: { ! 18: ! 19: register int i, index, scnt; ! 20: register C_FILE *fptr; ! 21: char *malloc(), *fixname(); ! 22: ! 23: if ((index = searchdir(name, ext)) == -1) { ! 24: fprintf(stderr, "file not found: %s\n", fixname(name, ext)); ! 25: return (NULL); ! 26: } ! 27: /* test for legal mode */ ! 28: if (!(mode & RW)) { ! 29: fprintf(stderr, "open: illegal mode - %d\n", mode); ! 30: return (NULL); ! 31: } ! 32: #ifdef DEBUG ! 33: printf("directory index: %d\n", index); ! 34: #endif ! 35: for ((i = 0, fptr=c_iob); i < C_NFILE; i++,fptr++) ! 36: if (!(fptr->c_flag)) ! 37: break; ! 38: if (i == C_NFILE) { ! 39: fprintf(stderr, "too many open files\n"); ! 40: return (NULL); ! 41: } ! 42: ! 43: /* ! 44: * Free file descriptor slot found, initialize field, allocate ! 45: * memory and read first block. ! 46: */ ! 47: if ((fptr->c_buf = malloc(blksiz)) == NULL) { ! 48: printf("c_open: no memory!\n"); ! 49: return (NULL); ! 50: } ! 51: fptr->c_extno = 0; ! 52: fptr->c_base = fptr->c_buf; ! 53: fptr->c_flag = mode; ! 54: fptr->c_blk = 0; ! 55: fptr->c_ext = index; ! 56: fptr->c_dirp = dirbuf+index; ! 57: fptr->c_seccnt = 0xff &(dirbuf+index)->blkcnt; ! 58: scnt = (fptr->c_seccnt > blksiz/seclth) ? blksiz/seclth:fptr->c_seccnt; ! 59: #ifdef DEBUG ! 60: printf("c_open: scnt=%d\n",scnt); ! 61: #endif ! 62: if (getblock(0xff &(int)fptr->c_dirp->pointers[0], fptr->c_buf, scnt) ! 63: == EOF) ! 64: return (NULL); ! 65: fptr->c_cnt = seclth*scnt; ! 66: fptr->c_seccnt -= scnt; ! 67: return (fptr); ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.