LCOV - code coverage report
Current view: top level - soltools/mkdepend - cppsetup.c (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 35 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /* $XConsortium: cppsetup.c,v 1.13 94/04/17 20:10:32 gildea Exp $ */
       3             : /*
       4             : 
       5             : Copyright (c) 1993, 1994  X Consortium
       6             : 
       7             : Permission is hereby granted, free of charge, to any person obtaining a copy
       8             : of this software and associated documentation files (the "Software"), to deal
       9             : in the Software without restriction, including without limitation the rights
      10             : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      11             : copies of the Software, and to permit persons to whom the Software is
      12             : furnished to do so, subject to the following conditions:
      13             : 
      14             : The above copyright notice and this permission notice shall be included in
      15             : all copies or substantial portions of the Software.
      16             : 
      17             : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      18             : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      19             : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
      20             : X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
      21             : AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
      22             : CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      23             : 
      24             : Except as contained in this notice, the name of the X Consortium shall not be
      25             : used in advertising or otherwise to promote the sale, use or other dealings
      26             : in this Software without prior written authorization from the X Consortium.
      27             : 
      28             : */
      29             : 
      30             : #include "def.h"
      31             : 
      32             : #ifdef  CPP
      33             : /*
      34             :  * This file is strictly for the sake of cpy.y and yylex.c (if
      35             :  * you indeed have the source for cpp).
      36             :  */
      37             : #define IB 1
      38             : #define SB 2
      39             : #define NB 4
      40             : #define CB 8
      41             : #define QB 16
      42             : #define WB 32
      43             : #define SALT '#'
      44             : #if pdp11 | vax | ns16000 | mc68000 | ibm032
      45             : #define COFF 128
      46             : #else
      47             : #define COFF 0
      48             : #endif
      49             : /*
      50             :  * These variables used by cpy.y and yylex.c
      51             :  */
      52             : extern char *outp, *inp, *newp, *pend;
      53             : extern char *ptrtab;
      54             : extern char fastab[];
      55             : extern char slotab[];
      56             : 
      57             : /*
      58             :  * cppsetup
      59             :  */
      60             : struct filepointer  *currentfile;
      61             : struct inclist      *currentinc;
      62             : 
      63             : cppsetup(line, filep, inc)
      64             :     char   *line;
      65             :     struct filepointer *filep;
      66             :     struct inclist     *inc;
      67             : {
      68             :     char *p, savec;
      69             :     static boolean setupdone = FALSE;
      70             :     boolean value;
      71             : 
      72             :     if (!setupdone) {
      73             :         cpp_varsetup();
      74             :         setupdone = TRUE;
      75             :     }
      76             : 
      77             :     currentfile = filep;
      78             :     currentinc = inc;
      79             :     inp = newp = line;
      80             :     for (p=newp; *p; p++)
      81             :         ;
      82             : 
      83             :     /*
      84             :      * put a newline back on the end, and set up pend, etc.
      85             :      */
      86             :     *p++ = '\n';
      87             :     savec = *p;
      88             :     *p = '\0';
      89             :     pend = p;
      90             : 
      91             :     ptrtab = slotab+COFF;
      92             :     *--inp = SALT;
      93             :     outp=inp;
      94             :     value = yyparse();
      95             :     *p = savec;
      96             :     return value;
      97             : }
      98             : 
      99             : pperror(tag, x0,x1,x2,x3,x4)
     100             :     int tag,x0,x1,x2,x3,x4;
     101             : {
     102             :     warning("\"%s\", line %d: ", currentinc->i_file, currentfile->f_line);
     103             :     warning(x0,x1,x2,x3,x4);
     104             : }
     105             : 
     106             : 
     107             : yyerror(s)
     108             :     char   *s;
     109             : {
     110             :     fatalerr("Fatal error: %s\n", s);
     111             : }
     112             : #else /* not CPP */
     113             : 
     114             : #include "ifparser.h"
     115             : struct _parse_data {
     116             :     struct filepointer *filep;
     117             :     struct inclist *inc;
     118             :     const char *line;
     119             : };
     120             : 
     121             : static const char *
     122           0 : _my_if_errors (IfParser *ip, const char *cp, const char *expecting)
     123             : {
     124             : #ifdef DEBUG_MKDEPEND
     125             :     struct _parse_data *pd = (struct _parse_data *) ip->data;
     126             :     int lineno = pd->filep->f_line;
     127             :     char *filename = pd->inc->i_file;
     128             :     char prefix[300];
     129             :     int prefixlen;
     130             :     int i;
     131             : 
     132             :     sprintf (prefix, "\"%s\":%d", filename, lineno);
     133             :     prefixlen = strlen(prefix);
     134             :     fprintf (stderr, "%s:  %s", prefix, pd->line);
     135             :     i = cp - pd->line;
     136             :     if (i > 0 && pd->line[i-1] != '\n') {
     137             :     putc ('\n', stderr);
     138             :     }
     139             :     for (i += prefixlen + 3; i > 0; i--) {
     140             :     putc (' ', stderr);
     141             :     }
     142             :     fprintf (stderr, "^--- expecting %s\n", expecting);
     143             : #endif /* DEBUG_MKDEPEND */
     144             :     (void)ip;
     145             :     (void)cp;
     146             :     (void)expecting;
     147           0 :     return NULL;
     148             : }
     149             : 
     150             : 
     151             : #define MAXNAMELEN 256
     152             : 
     153             : char *
     154           0 : _lookup_variable (const char *var, size_t len)
     155             : {
     156             :     char tmpbuf[MAXNAMELEN + 1];
     157             : 
     158           0 :     if (len > MAXNAMELEN)
     159           0 :         return 0;
     160             : 
     161           0 :     strncpy (tmpbuf, var, len);
     162           0 :     tmpbuf[len] = '\0';
     163           0 :     return isdefined(tmpbuf);
     164             : }
     165             : 
     166             : 
     167             : static int
     168           0 : _my_eval_defined (IfParser *ip, const char *var, size_t len)
     169             : {
     170             :     (void)ip;
     171           0 :     if (_lookup_variable (var, len))
     172           0 :         return 1;
     173             :     else
     174           0 :         return 0;
     175             : }
     176             : 
     177             : #define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_')
     178             : 
     179             : static int
     180           0 : _my_eval_variable (IfParser *ip, const char *var, size_t len)
     181             : {
     182             :     char *s;
     183             : 
     184             :     (void)ip;
     185             : 
     186           0 :     s = _lookup_variable (var, len);
     187           0 :     if (!s)
     188           0 :         return 0;
     189             :     do {
     190           0 :       var = s;
     191           0 :       if (!isvarfirstletter(*var))
     192           0 :         break;
     193           0 :       s = _lookup_variable (var, strlen(var));
     194           0 :     } while (s);
     195             : 
     196           0 :     return atoi(var);
     197             : }
     198             : 
     199             : 
     200           0 : int cppsetup(char *line, struct filepointer *filep, struct inclist *inc)
     201             : {
     202             :     IfParser ip;
     203             :     struct _parse_data pd;
     204           0 :     int val = 0;
     205             : 
     206           0 :     pd.filep = filep;
     207           0 :     pd.inc = inc;
     208           0 :     pd.line = line;
     209           0 :     ip.funcs.handle_error = _my_if_errors;
     210           0 :     ip.funcs.eval_defined = _my_eval_defined;
     211           0 :     ip.funcs.eval_variable = _my_eval_variable;
     212           0 :     ip.data = (char *) &pd;
     213             : 
     214           0 :     (void) ParseIfExpression (&ip, line, &val);
     215           0 :     if (val)
     216           0 :       return IF;
     217             :     else
     218           0 :       return IFFALSE;
     219             : }
     220             : #endif /* CPP */
     221             : 
     222             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11