1: #ifndef lint
   2: static char sccsid[] = "@(#)context.c	3.7 4/24/85";
   3: #endif
   4: 
   5: /*
   6:  * Copyright (c) 1983 Regents of the University of California,
   7:  * All rights reserved.  Redistribution permitted subject to
   8:  * the terms of the Berkeley Software License Agreement.
   9:  */
  10: 
  11: #include <stdio.h>
  12: #include "value.h"
  13: #include "string.h"
  14: #include "context.h"
  15: 
  16: /*
  17:  * Context push/pop for nested command files.
  18:  */
  19: 
  20: char *malloc();
  21: 
  22: cx_alloc()
  23: {
  24:     register struct context *xp;
  25: 
  26:     if (cx.x_type != 0) {
  27:         xp = (struct context *)
  28:             malloc((unsigned) sizeof (struct context));
  29:         if (xp == 0)
  30:             return -1;
  31:         *xp = cx;
  32:         cx.x_link = xp;
  33:         cx.x_type = 0;
  34:     }
  35:     cx.x_erred = 0;
  36:     cx.x_synerred = 0;
  37:     cx.x_abort = 0;
  38:     return 0;
  39: }
  40: 
  41: cx_free()
  42: {
  43:     struct context *xp;
  44: 
  45:     if ((xp = cx.x_link) != 0) {
  46:         cx = *xp;
  47:         free((char *)xp);
  48:     } else
  49:         cx.x_type = 0;
  50: }
  51: 
  52: cx_beginfile(filename)
  53: char *filename;
  54: {
  55:     if (cx_alloc() < 0)
  56:         return -1;
  57:     cx.x_type = X_FILE;
  58:     if ((cx.x_filename = str_cpy(filename)) == 0)
  59:         goto bad;
  60:     cx.x_fp = fopen(filename, "r");
  61:     if (cx.x_fp == 0)
  62:         goto bad;
  63:     cx.x_bol = 1;
  64:     cx.x_lineno = 0;
  65:     cx.x_errwin = 0;
  66:     cx.x_noerr = 0;
  67:     return 0;
  68: bad:
  69:     if (cx.x_filename != 0)
  70:         str_free(cx.x_filename);
  71:     cx_free();
  72:     return -1;
  73: }
  74: 
  75: cx_beginbuf(buf, arg, narg)
  76: char *buf;
  77: struct value *arg;
  78: int narg;
  79: {
  80:     if (cx_alloc() < 0)
  81:         return -1;
  82:     cx.x_type = X_BUF;
  83:     cx.x_bufp = cx.x_buf = buf;
  84:     cx.x_arg = arg;
  85:     cx.x_narg = narg;
  86:     return 0;
  87: }
  88: 
  89: cx_end()
  90: {
  91:     switch (cx.x_type) {
  92:     case X_BUF:
  93:         break;
  94:     case X_FILE:
  95:         (void) fclose(cx.x_fp);
  96:         str_free(cx.x_filename);
  97:         break;
  98:     }
  99:     cx_free();
 100: }

Defined functions

cx_alloc defined in line 22; used 2 times
cx_beginbuf defined in line 75; used 1 times
cx_beginfile defined in line 52; used 1 times
cx_end defined in line 89; used 2 times
cx_free defined in line 41; used 2 times

Defined variables

sccsid defined in line 2; never used
Last modified: 1985-04-25
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1083
Valid CSS Valid XHTML 1.0 Strict