options.c
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:5k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  options.c  -  set of options processors of GNU SQL compiler
  3.  *
  4.  *  NOTE:(!!)  This file does NOT compiled by itself. It's only included
  5.  *             by main routines of client and server parts of compiler.
  6.  *
  7.  *  This file is a part of GNU SQL Server
  8.  *
  9.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  10.  *  Developed at the Institute of System Programming
  11.  *  This file is written by Michael Kimelman
  12.  *
  13.  *  This program is free software; you can redistribute it and/or modify
  14.  *  it under the terms of the GNU General Public License as published by
  15.  *  the Free Software Foundation; either version 2 of the License, or
  16.  *  (at your option) any later version.
  17.  *
  18.  *  This program is distributed in the hope that it will be useful,
  19.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  *  GNU General Public License for more details.
  22.  *
  23.  *  You should have received a copy of the GNU General Public License
  24.  *  along with this program; if not, write to the Free Software
  25.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  26.  *
  27.  *  Contacts: gss@ispras.ru
  28.  *
  29.  */
  30. /* $Id: options.c,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  31. #if   !defined(__CLIENT__) && !defined(__SERVER__)
  32. #error File options.c can`t be included here!!!!
  33. #endif
  34. #include <string.h>
  35. #ifdef __SERVER__
  36. #define DEF_PASS(name,title,id,proc,st_id,skip,dmp,ext,dumper) 
  37.     {name,title,id,proc,(skip?~0:0),(dmp?~0:0),ext,NULL,dumper,st_id},
  38. #else /* if only __CLIENT__ is defined */
  39. #define DEF_PASS(name,title,id,proc,st_id,skip,dmp,ext,dumper) 
  40.     {name,title,id,NULL,(skip?~0:0),(dmp?~0:0),ext,NULL,NULL,0},
  41. #endif
  42. struct compiler_pass_descr compiler_passes[]=
  43. {
  44. #include "options.def"
  45.   {NULL, NULL, 0, NULL, 0, 0, NULL, NULL}
  46. };
  47. #ifndef DYN_MODE
  48. #define DEF_OPTION(o_nm,var_nm,is_settled)  {o_nm,&var_nm,NULL},
  49. #define DEF_OPTION1(o_hd,o_proc)            {o_hd,&o_proc##_state,o_proc},
  50. struct sql_options_info sql_options[]=
  51. {
  52. #include "options.def"
  53.   {NULL, NULL, NULL}
  54. };
  55. void 
  56. notdump (FILE * f)
  57. {
  58. }
  59. void 
  60. read_options (i4_t argc, char *argv[])
  61. {
  62.   register i4_t i;
  63.   extern i4_t errno;
  64.   
  65.   errno = -1;
  66.   
  67.   for (i = 1; i < argc; i++)
  68.     {
  69.       register struct sql_options_info *copt;
  70.       if (argv[i][0] != '-')
  71.         {
  72.           if(!progname) /* if no module name is given --> store name of  */
  73.             progname = savestring(argv[i]); /* first program file        */
  74.           continue;
  75.         }
  76.       for (copt = sql_options; copt->name; copt++)
  77.         {
  78.           register char *opt=argv[i]+1;
  79.           register i4_t k = strlen (copt->name),k1=strlen(opt);
  80.       
  81.           if ((0 == strcmp (opt, copt->name)) &&
  82.               (copt->proc == NULL))
  83.             *(copt->ptr_to_var) = -1;
  84.           else if ((k1 == k + 1) &&
  85.                    (0 == strncmp (opt, copt->name, k)) &&
  86.                    (0 == strcmp (opt + k, "-")) &&
  87.                    (copt->proc == NULL))
  88.             *(copt->ptr_to_var) = 0;
  89.           else if ((k1 == k + 1) &&
  90.                    (0 == strncmp (opt, copt->name, k)) &&
  91.                    (0 == strcmp (opt + k, "+")) &&
  92.                    (copt->proc == NULL))
  93.             *(copt->ptr_to_var) = -1;
  94.           else if ((k1 > k) &&
  95.                    (0 == strncmp (opt, copt->name, k)) &&
  96.                    (copt->proc != NULL))
  97.             copt->proc (copt->ptr_to_var, opt + k);
  98.           else
  99.             continue;
  100.           break;
  101.         }
  102.       /*
  103.        * if(copt->name==NULL)
  104.        *   fprintf(STDERR,"Can't recognize option '%s' n",argv[i]);
  105.        */
  106.     }
  107. }
  108. void 
  109. scan_mode (i4_t *p, char *s)
  110. {
  111. #ifdef __CLIENT__
  112.   extern void client_scan_mode  __P((i4_t *p, char *s));
  113.   client_scan_mode (p, s);
  114. #endif
  115. }
  116. void 
  117. module_name (i4_t *p, char *s)
  118. {
  119.   if(progname)
  120.     xfree(progname);
  121.   progname = savestring(s);
  122. }
  123. void 
  124. server_host(i4_t *p, char *s)
  125. {
  126. #ifdef __CLIENT__
  127.   server_host_name = s;
  128. #endif
  129. }
  130. void 
  131. tree_memory_mode (i4_t *p, char *s)
  132. {
  133. #ifdef __SERVER__
  134. /*  if (s)
  135.     *p = set_virtual_mode (atoi (s)); 
  136.   else
  137.     *p = set_virtual_mode (-1); */
  138. #endif
  139. }
  140. void 
  141. vm_debug_mode (i4_t *ptr, char *s)
  142. {
  143. #ifdef __SERVER__
  144.   extern i4_t debug_vmemory;
  145.   if (s)
  146.     *ptr = debug_vmemory = atoi (s);
  147.   else
  148.     debug_vmemory = *ptr;
  149. #endif
  150. }
  151. static void 
  152. pass_modes (i4_t *state, char c, char *s)
  153. {
  154.   register i4_t kk;
  155.   for (kk = 0; compiler_passes[kk].sname; kk++)
  156.     {
  157.       if (s)
  158.         {
  159.           register i4_t k;
  160.           for (k = strlen (s); k--;)
  161.             if (compiler_passes[kk].atr == s[k])
  162.               {
  163.                 if (c == 'd')
  164.                   compiler_passes[kk].dump ^= ~0;
  165.                 else if (c == 's')
  166.                   compiler_passes[kk].skip ^= ~0;
  167.                 else
  168.                   yyfatal ("unexpected option type descriptor");
  169.               }
  170.           if (c == 'd')
  171.             *state &= compiler_passes[kk].dump ? 1 << kk : 0;
  172.           else if (c == 's')
  173.             *state &= compiler_passes[kk].skip ? 1 << kk : 0;
  174.         }
  175.       else
  176.         /* if s==NULL */
  177.         {
  178.           if (c == 'd')
  179.             compiler_passes[kk].dump = (*state) & (1 << kk);
  180.           else if (c == 's')
  181.             compiler_passes[kk].skip = (*state) & (1 << kk);
  182.         }
  183.     }
  184. }
  185. void 
  186. dump_modes (i4_t *p, char *s)
  187. {
  188.   pass_modes (p, 'd', s);
  189. }
  190. void 
  191. skip_modes (i4_t *p, char *s)
  192. {
  193.   pass_modes (p, 's', s);
  194. }
  195. #endif