home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / SFILE.C < prev    next >
C/C++ Source or Header  |  1990-05-01  |  2KB  |  75 lines

  1. /*
  2.     sfile.c
  3.  
  4.     % sfile_Open, sfile_Close    (screen file routines)
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1986-1989 by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     ---------------------
  12.      2/02/89 jdc    changed
  13.      4/21/89 jdc    rewrote for non-global fsymlists
  14.      5/09/89 jdc    fixed sfile->bfile == NULL return(NULL)
  15.      7/22/89 jdc    put file buffer into sfile_struct
  16.  
  17.      3/28/90 jmd    ansi-fied
  18.      4/15/90 jdc    added sfile_ReadOnly, preened
  19.      5/01/90 jmd    changed readonly to onlyread to avoid VMS key word conflict
  20. */
  21.  
  22. #include "sed.h"
  23. #include "sfile.h"
  24.  
  25. sfile_type sf_open(char *name, fsyminit_struct *fsyminit_list, oslist_type *oslist_array, char *comment, boolean onlyread)
  26. {
  27.     sfile_type sfile;
  28.     int i;
  29.  
  30.     if ((sfile = (sfile_type)omalloc(OA_SFILE, sizeof(struct sfile_struct))) == NULL) {
  31.         return(NULL);
  32.     }
  33.     if ((sfile->bfile = bf_open(name, SFILE_BSIZE, comment, onlyread)) != NULL) {
  34.         if (oslist_array == NULL) {
  35.             if (!fsym_Init(fsyminit_list, sfile->oslist_array)) {
  36.                 ofree(OA_SFILE, (VOID *)sfile);
  37.                 return(NULL);
  38.             }
  39.             sfile->oslist_owner = TRUE;
  40.         }
  41.         else {
  42.             for (i = 0; i < TOT_FSYM_COUNT; i++) {
  43.                 sfile->oslist_array[i] = oslist_array[i];
  44.             }
  45.             sfile->oslist_owner = FALSE;
  46.         }
  47.     }
  48.     else {
  49.         ofree(OA_SFILE, (VOID *)sfile);
  50.         return(NULL);
  51.     }
  52.     sfile->alloc = FALSE;
  53.  
  54.     return(sfile);
  55. }    
  56.  
  57. void sfile_Close(sfile_type sfile)
  58. {
  59.     int i;
  60.  
  61.     if ( sfile != NULL ) {
  62.         bfile_Close(sfile->bfile);
  63.  
  64.         if (sfile->oslist_owner) {
  65.             for (i = 0; i < TOT_FSYM_COUNT; i++) {
  66.  
  67.                 /* oslist_Close checks for NULL */
  68.                 oslist_Close(sfile->oslist_array[i]);
  69.             }
  70.         }
  71.         ofree(OA_SFILE, (VOID *)sfile);
  72.     }
  73. }    
  74.  
  75.