office-gobmx/dmake/imacs.c
Ivo Hinkelmann e848d1bfc5 INTEGRATION: CWS dmake411 (1.7.2); FILE MERGED
2007/09/22 23:05:37 vq 1.7.2.2: #i81855# Clean-up merge from CWS os2port01.
2007/09/19 00:34:31 vq 1.7.2.1: #i81252# Add a new SHELLCMDQUOTE control macro.
2007-10-15 14:39:37 +00:00

201 lines
6.4 KiB
C

/* RCS $Id: imacs.c,v 1.8 2007-10-15 15:39:37 ihi Exp $
--
-- SYNOPSIS
-- Define default internal macros.
--
-- DESCRIPTION
-- This file adds to the internal macro tables the set of default
-- internal macros, and for those that are accessible internally via
-- variables creates these variables, and initializes them to point
-- at the default values of these macros.
--
-- AUTHOR
-- Dennis Vadura, dvadura@dmake.wticorp.com
--
-- WWW
-- http://dmake.wticorp.com/
--
-- COPYRIGHT
-- Copyright (c) 1996,1997 by WTI Corp. All rights reserved.
--
-- This program is NOT free software; you can redistribute it and/or
-- modify it under the terms of the Software License Agreement Provided
-- in the file <distribution-root>/readme/license.txt.
--
-- LOG
-- Use cvs log to obtain detailed change logs.
*/
#include "extern.h"
static void _set_int_var ANSI((char *, char *, int, int *));
static void _set_string_var ANSI((char *, char *, int, char **));
static void _set_bit_var ANSI((char *, char *, int));
PUBLIC void
Make_rules()/*
==============
Parse the strings stored in Rule_tab (from ruletab.c). */
{
Parse(NIL(FILE));
}
#define M_FLAG M_DEFAULT | M_EXPANDED
/*
** Add to the macro table all of the internal macro variables plus
** create secondary variables which will give access to their values
** easily, both when needed and when the macro value is modified.
** The latter is accomplished by providing a flag in the macro and a field
** which gives a pointer to the value if it is a char or string macro value
** and a mask representing the bit of the global flag register that is affected
** by this macro's value.
*/
PUBLIC void
Create_macro_vars()
{
static char* switchar;
static char* version;
char swchar[2];
char buf[20];
swchar[0] = Get_switch_char(), swchar[1] = '\0';
_set_string_var("SWITCHAR", swchar, M_PRECIOUS, &switchar);
if (*swchar == '/')
DirSepStr = "\\";
else
#if (_MPW)
DirSepStr = ":";
#elif defined( __EMX__)
/* Use '\' for OS/2 port. */
DirSepStr = "\\";
#else
DirSepStr = "/";
#endif
_set_string_var("DIRSEPSTR", DirSepStr, M_DEFAULT,&DirSepStr);
_set_string_var("DIRBRKSTR", DirBrkStr, M_DEFAULT, &DirBrkStr);
swchar[0] = DEF_ESCAPE_CHAR, swchar[1] = '\0';
_set_string_var(".ESCAPE_PREFIX", swchar, M_FLAG, &Escape_char);
/* Each one the following attributes corresponds to a bit of
* Glob_attr. */
_set_bit_var(".SILENT", "", A_SILENT );
_set_bit_var(".IGNORE", "", A_IGNORE );
_set_bit_var(".PRECIOUS", "", A_PRECIOUS);
_set_bit_var(".EPILOG", "", A_EPILOG );
_set_bit_var(".PROLOG", "", A_PROLOG );
_set_bit_var(".NOINFER", "", A_NOINFER );
_set_bit_var(".SEQUENTIAL","",A_SEQ );
_set_bit_var(".USESHELL", "", A_SHELL );
/* .SWAP (MSDOS) and .WINPATH (cygwin) share the same bit. */
_set_bit_var(".SWAP", "", A_SWAP );
_set_bit_var(".WINPATH", "", A_WINPATH );
_set_bit_var(".MKSARGS", "", A_MKSARGS );
_set_bit_var(".IGNOREGROUP","",A_IGNOREGROUP);
Glob_attr = A_DEFAULT; /* set all flags to NULL */
_set_string_var("SHELL", "", M_DEFAULT, &Shell );
_set_string_var("SHELLFLAGS", " ", M_DEFAULT, &Shell_flags );
_set_string_var("SHELLCMDQUOTE","", M_DEFAULT, &Shell_quote );
_set_string_var("GROUPSHELL", "", M_DEFAULT, &GShell );
_set_string_var("GROUPFLAGS", " ", M_DEFAULT, &GShell_flags);
_set_string_var("SHELLMETAS", "", M_DEFAULT, &Shell_metas );
_set_string_var("GROUPSUFFIX", "", M_DEFAULT, &Grp_suff );
_set_string_var("AUGMAKE",NIL(char), M_DEFAULT, &Augmake );
_set_string_var("OOODMAKEMODE", "", M_DEFAULT, &OOoDmMode );
_set_string_var(".KEEP_STATE", "", M_DEFAULT, &Keep_state );
_set_string_var(".NOTABS", "", M_MULTI, &Notabs );
_set_string_var(".DIRCACHE", "y", M_DEFAULT, &UseDirCache );
#if CASE_INSENSITIVE_FS
#define DIRCACHERESPCASEDEFAULT ""
#else
#define DIRCACHERESPCASEDEFAULT "y"
#endif
_set_string_var(".DIRCACHERESPCASE", DIRCACHERESPCASEDEFAULT, M_DEFAULT, &DcacheRespCase);
_set_string_var("MAKEDIR",Get_current_dir(),M_PRECIOUS|M_NOEXPORT,
&Makedir_macval);
Makedir = DmStrDup(Makedir_macval); /* Later done by Def_macro(). */
_set_string_var("MAKEVERSION", VERSION, M_PRECIOUS, &version);
_set_string_var("PWD", Makedir, M_PRECIOUS|M_NOEXPORT, &Pwd_macval);
Pwd = DmStrDup(Pwd_macval); /* Later done by Def_macro(). */
_set_string_var("TMD", ".", M_PRECIOUS|M_NOEXPORT, &Tmd_macval);
Tmd = DmStrDup(Tmd_macval); /* Later done by _set_tmd(). */
Def_macro("NULL", "", M_PRECIOUS|M_NOEXPORT|M_FLAG);
/* Initialize a macro that contains a space. As leading and trailing
* spaces are stripped by Def_macro a little cheating is necessary. */
_set_string_var("SPACECHAR", "x", M_PRECIOUS|M_NOEXPORT|M_FLAG, &Spacechar );
Spacechar[0] = ' ';
_set_int_var( "MAXLINELENGTH", "0", M_DEFAULT|M_NOEXPORT, &Buffer_size );
_set_int_var( "PREP", "0", M_DEFAULT, &Prep );
(void) Def_macro("MAXLINELENGTH", "1024", M_FLAG | M_DEFAULT);
/* set MAXPROCESSLIMIT high initially so that it allows MAXPROCESS to
* change from command line. */
_set_int_var( "MAXPROCESSLIMIT", "100", M_DEFAULT|M_NOEXPORT,&Max_proclmt );
_set_int_var( "MAXPROCESS", "1", M_DEFAULT|M_NOEXPORT, &Max_proc );
sprintf(buf,"%d",NAME_MAX);
_set_int_var( "NAMEMAX", buf, M_DEFAULT|M_NOEXPORT, &NameMax);
}
/*
** Define an integer variable value, and set up the macro.
*/
static void
_set_int_var(name, val, flag, var)
char *name;
char *val;
int flag;
int *var;
{
HASHPTR hp;
hp = Def_macro(name, val, M_FLAG | flag);
hp->ht_flag |= M_VAR_INT | M_MULTI | M_INIT;
hp->MV_IVAR = var;
*var = atoi(val);
}
/*
** Define a string variables value, and set up the macro.
*/
static void
_set_string_var(name, val, flag, var)
char *name;
char *val;
int flag;
char **var;
{
HASHPTR hp;
hp = Def_macro(name, val, M_FLAG | flag);
hp->ht_flag |= M_VAR_STRING | M_MULTI | M_INIT;
hp->MV_SVAR = var;
*var = hp->ht_value;
}
/* Define a bit variable value, and set up the macro. Each of the bits
* corresponds to an attribute bit of Glob_attr. */
static void
_set_bit_var(name, val, mask)
char *name;
char *val;
int mask;
{
HASHPTR hp;
hp = Def_macro(name, val, M_FLAG);
hp->ht_flag |= M_VAR_BIT | M_MULTI | M_INIT;
hp->MV_MASK = mask;
hp->MV_BVAR = &Glob_attr;
}