home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 208_01 / e10.c < prev    next >
Text File  |  1987-10-13  |  3KB  |  118 lines

  1. /*
  2. HEADER:        CUG208;
  3. TITLE:        'e' for CP/M68K
  4. VERSION:    1.48+
  5.  
  6. DESCRIPTION:    "a screen editor";
  7.  
  8. KEYWORDS:    editor;
  9. SYSTEM:        CP/M68K, V1.2;
  10. FILENAME:    e/e10.c
  11. WARNINGS:    "the default value is for systems with 128K bytes
  12.          of memory or more";
  13. SEE-ALSO:    cpm68k.c, e68k.doc, CUG VOL 133;
  14. AUTHORS:    G.N.Gilbert('e'), J.W.Haefner(for DeSmet C on MSDOS and UNIX)
  15. CODER:        Yoshimasa Tsuji
  16. COMPILERS:    DRI C(Alcyon C) for CP/M68K;
  17. */
  18. /*        FUNCTIONS: efopen,efcreat,efflush,efclose,eputc,egetc
  19.     PURPOSE:   buffered disk IO
  20. */
  21.  
  22. #include "e.h"
  23.  
  24. extern char *rindex();
  25.  
  26. efopen(s,iobuf)
  27. struct iobuffer *iobuf;
  28. char *s;
  29. {
  30. #if CPM68K
  31. char *p;
  32. char temp[FILELEN];
  33.     strcpy(temp, s);
  34.     if( p = rindex(temp, ':') ) {
  35.         *p = 0;
  36.         if(chdir(temp)== FAIL)
  37.             return(FAIL);
  38.         chdir(curdir);
  39.     }
  40. #endif
  41.     iobuf->_nleft = 0;
  42.         return (iobuf->_fd = open(s,0));
  43. }
  44.  
  45.  
  46. efcreat(s,iobuf)
  47. char *s;
  48. struct iobuffer *iobuf;
  49. {
  50. #if CPM68K
  51. char *p;
  52. char temp[FILELEN];
  53.     strcpy(temp, s);
  54.     if( p = rindex(temp, ':') ) {
  55.         *p = 0;
  56.         if(chdir(temp)== FAIL)
  57.             return(FAIL);
  58.         chdir(curdir);
  59.     }
  60. #endif
  61.         if ((iobuf -> _fd = creat(s,0666)) < 0 )
  62.                 return(FAIL);
  63.         iobuf -> _nextp = iobuf -> _buff;
  64.         iobuf -> _nleft = (NSECTS * SECSIZ);
  65.         return(iobuf -> _fd);
  66. }
  67.  
  68. efflush(iobuf)       /*does NOT allow more writing*/
  69.  
  70. struct iobuffer *iobuf;
  71. {
  72.         int i;
  73.  
  74.         if (iobuf -> _nleft == (NSECTS * SECSIZ)) return(YES);
  75.         i = NSECTS*SECSIZ - iobuf->_nleft;
  76.         if (write(iobuf -> _fd, iobuf -> _buff, i) != i) return(FAIL);
  77.         return(YES);
  78. }
  79.  
  80. efclose(iobuf)
  81. struct iobuffer *iobuf;
  82. {
  83. register int f;
  84.     /* close opened file */
  85.     return ((f= iobuf->_fd)? close(f) : -1 );
  86. }
  87.  
  88. eputc(c,iobuf)  /*stripped down version of standard putc*/
  89. char c;
  90. struct iobuffer *iobuf;
  91. {
  92.         if (iobuf -> _nleft--) return(*iobuf -> _nextp++ = c);
  93.     if ((write(iobuf -> _fd, iobuf -> _buff, NSECTS*SECSIZ)) != NSECTS*SECSIZ)
  94.                 return(FAIL);
  95.         iobuf -> _nleft = (NSECTS * SECSIZ -1);
  96.         iobuf -> _nextp = iobuf -> _buff;
  97.         return(*iobuf -> _nextp++ = c);
  98. }
  99.  
  100. egetc(iobuf)        /*the standard getc, trimmed for speed*/
  101. struct iobuffer  *iobuf;
  102. {
  103.         int nbytes;
  104.  
  105.         if (iobuf -> _nleft--) return(*iobuf -> _nextp++);
  106.         if ((nbytes = read(iobuf -> _fd, iobuf -> _buff, NSECTS*SECSIZ))==FAIL) {
  107.                 iobuf -> _nleft++;
  108.                 return(EOF);
  109.                 }
  110.         if (nbytes == 0) {
  111.                 iobuf -> _nleft++;
  112.                 return(EOF);
  113.                 }
  114.         iobuf -> _nleft = nbytes - 1;
  115.         iobuf -> _nextp = iobuf -> _buff;
  116.         return(*iobuf->_nextp++);
  117. }
  118.