var.c (11997) | var.c (18730) |
---|---|
1/* 2 * Copyright (c) 1988, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * Copyright (c) 1989 by Berkeley Softworks 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Adam de Boor. --- 144 unchanged lines hidden (view full) --- 153static Var *VarFind __P((char *, GNode *, int)); 154static void VarAdd __P((char *, char *, GNode *)); 155static void VarDelete __P((ClientData)); 156static Boolean VarHead __P((char *, Boolean, Buffer, ClientData)); 157static Boolean VarTail __P((char *, Boolean, Buffer, ClientData)); 158static Boolean VarSuffix __P((char *, Boolean, Buffer, ClientData)); 159static Boolean VarRoot __P((char *, Boolean, Buffer, ClientData)); 160static Boolean VarMatch __P((char *, Boolean, Buffer, ClientData)); | 1/* 2 * Copyright (c) 1988, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * Copyright (c) 1989 by Berkeley Softworks 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Adam de Boor. --- 144 unchanged lines hidden (view full) --- 153static Var *VarFind __P((char *, GNode *, int)); 154static void VarAdd __P((char *, char *, GNode *)); 155static void VarDelete __P((ClientData)); 156static Boolean VarHead __P((char *, Boolean, Buffer, ClientData)); 157static Boolean VarTail __P((char *, Boolean, Buffer, ClientData)); 158static Boolean VarSuffix __P((char *, Boolean, Buffer, ClientData)); 159static Boolean VarRoot __P((char *, Boolean, Buffer, ClientData)); 160static Boolean VarMatch __P((char *, Boolean, Buffer, ClientData)); |
161#ifdef SYSVVARSUB |
|
161static Boolean VarSYSVMatch __P((char *, Boolean, Buffer, ClientData)); | 162static Boolean VarSYSVMatch __P((char *, Boolean, Buffer, ClientData)); |
163#endif |
|
162static Boolean VarNoMatch __P((char *, Boolean, Buffer, ClientData)); 163static Boolean VarSubstitute __P((char *, Boolean, Buffer, ClientData)); 164static char *VarModify __P((char *, Boolean (*)(char *, Boolean, Buffer, 165 ClientData), 166 ClientData)); 167static int VarPrintVar __P((ClientData, ClientData)); 168 169/*- --- 97 unchanged lines hidden (view full) --- 267 } 268 if ((var == NILLNODE) && (flags & FIND_ENV)) { 269 char *env; 270 271 if ((env = getenv (name)) != NULL) { 272 int len; 273 274 v = (Var *) emalloc(sizeof(Var)); | 164static Boolean VarNoMatch __P((char *, Boolean, Buffer, ClientData)); 165static Boolean VarSubstitute __P((char *, Boolean, Buffer, ClientData)); 166static char *VarModify __P((char *, Boolean (*)(char *, Boolean, Buffer, 167 ClientData), 168 ClientData)); 169static int VarPrintVar __P((ClientData, ClientData)); 170 171/*- --- 97 unchanged lines hidden (view full) --- 269 } 270 if ((var == NILLNODE) && (flags & FIND_ENV)) { 271 char *env; 272 273 if ((env = getenv (name)) != NULL) { 274 int len; 275 276 v = (Var *) emalloc(sizeof(Var)); |
275 v->name = strdup(name); | 277 v->name = estrdup(name); |
276 277 len = strlen(env); 278 279 v->val = Buf_Init(len); 280 Buf_AddBytes(v->val, len, (Byte *)env); 281 282 v->flags = VAR_FROM_ENV; 283 return (v); --- 36 unchanged lines hidden (view full) --- 320 char *val; /* value to set it to */ 321 GNode *ctxt; /* context in which to set it */ 322{ 323 register Var *v; 324 int len; 325 326 v = (Var *) emalloc (sizeof (Var)); 327 | 278 279 len = strlen(env); 280 281 v->val = Buf_Init(len); 282 Buf_AddBytes(v->val, len, (Byte *)env); 283 284 v->flags = VAR_FROM_ENV; 285 return (v); --- 36 unchanged lines hidden (view full) --- 322 char *val; /* value to set it to */ 323 GNode *ctxt; /* context in which to set it */ 324{ 325 register Var *v; 326 int len; 327 328 v = (Var *) emalloc (sizeof (Var)); 329 |
328 v->name = strdup (name); | 330 v->name = estrdup (name); |
329 330 len = val ? strlen(val) : 0; 331 v->val = Buf_Init(len+1); 332 Buf_AddBytes(v->val, len, (Byte *)val); 333 334 v->flags = 0; 335 336 (void) Lst_AtFront (ctxt->context, (ClientData)v); --- 433 unchanged lines hidden (view full) --- 770 Buf_AddByte(buf, (Byte)' '); 771 } 772 addSpace = TRUE; 773 Buf_AddBytes(buf, strlen(word), (Byte *)word); 774 } 775 return(addSpace); 776} 777 | 331 332 len = val ? strlen(val) : 0; 333 v->val = Buf_Init(len+1); 334 Buf_AddBytes(v->val, len, (Byte *)val); 335 336 v->flags = 0; 337 338 (void) Lst_AtFront (ctxt->context, (ClientData)v); --- 433 unchanged lines hidden (view full) --- 772 Buf_AddByte(buf, (Byte)' '); 773 } 774 addSpace = TRUE; 775 Buf_AddBytes(buf, strlen(word), (Byte *)word); 776 } 777 return(addSpace); 778} 779 |
778 779 | 780#ifdef SYSVVARSUB |
780/*- 781 *----------------------------------------------------------------------- 782 * VarSYSVMatch -- 783 * Place the word in the buffer if it matches the given pattern. 784 * Callback function for VarModify to implement the System V % 785 * modifiers. 786 * 787 * Results: --- 25 unchanged lines hidden (view full) --- 813 814 if ((ptr = Str_SYSVMatch(word, pat->lhs, &len)) != NULL) 815 Str_SYSVSubst(buf, pat->rhs, ptr, len); 816 else 817 Buf_AddBytes(buf, strlen(word), (Byte *) word); 818 819 return(addSpace); 820} | 781/*- 782 *----------------------------------------------------------------------- 783 * VarSYSVMatch -- 784 * Place the word in the buffer if it matches the given pattern. 785 * Callback function for VarModify to implement the System V % 786 * modifiers. 787 * 788 * Results: --- 25 unchanged lines hidden (view full) --- 814 815 if ((ptr = Str_SYSVMatch(word, pat->lhs, &len)) != NULL) 816 Str_SYSVSubst(buf, pat->rhs, ptr, len); 817 else 818 Buf_AddBytes(buf, strlen(word), (Byte *) word); 819 820 return(addSpace); 821} |
822#endif |
|
821 822 823/*- 824 *----------------------------------------------------------------------- 825 * VarNoMatch -- 826 * Place the word in the buffer if it doesn't match the given pattern. 827 * Callback function for VarModify to implement the :N modifier. 828 * --- 266 unchanged lines hidden (view full) --- 1095{ 1096 register char *tstr; /* Pointer into str */ 1097 Var *v; /* Variable in invocation */ 1098 register char *cp; /* Secondary pointer into str (place marker 1099 * for tstr) */ 1100 Boolean haveModifier;/* TRUE if have modifiers for the variable */ 1101 register char endc; /* Ending character when variable in parens 1102 * or braces */ | 823 824 825/*- 826 *----------------------------------------------------------------------- 827 * VarNoMatch -- 828 * Place the word in the buffer if it doesn't match the given pattern. 829 * Callback function for VarModify to implement the :N modifier. 830 * --- 266 unchanged lines hidden (view full) --- 1097{ 1098 register char *tstr; /* Pointer into str */ 1099 Var *v; /* Variable in invocation */ 1100 register char *cp; /* Secondary pointer into str (place marker 1101 * for tstr) */ 1102 Boolean haveModifier;/* TRUE if have modifiers for the variable */ 1103 register char endc; /* Ending character when variable in parens 1104 * or braces */ |
1103 register char startc; /* Starting character when variable in parens | 1105 register char startc=0; /* Starting character when variable in parens |
1104 * or braces */ 1105 int cnt; /* Used to count brace pairs when variable in 1106 * in parens or braces */ 1107 char *start; 1108 Boolean dynamic; /* TRUE if the variable is local and we're 1109 * expanding it in a non-local context. This 1110 * is done to support dynamic sources. The 1111 * result is just the invocation, unaltered */ --- 500 unchanged lines hidden (view full) --- 1612 case 'R': 1613 if (tstr[1] == endc || tstr[1] == ':') { 1614 newStr = VarModify (str, VarRoot, (ClientData)0); 1615 cp = tstr + 1; 1616 termc = *cp; 1617 break; 1618 } 1619 /*FALLTHRU*/ | 1106 * or braces */ 1107 int cnt; /* Used to count brace pairs when variable in 1108 * in parens or braces */ 1109 char *start; 1110 Boolean dynamic; /* TRUE if the variable is local and we're 1111 * expanding it in a non-local context. This 1112 * is done to support dynamic sources. The 1113 * result is just the invocation, unaltered */ --- 500 unchanged lines hidden (view full) --- 1614 case 'R': 1615 if (tstr[1] == endc || tstr[1] == ':') { 1616 newStr = VarModify (str, VarRoot, (ClientData)0); 1617 cp = tstr + 1; 1618 termc = *cp; 1619 break; 1620 } 1621 /*FALLTHRU*/ |
1620 default: { | 1622#ifdef SUNSHCMD 1623 case 's': 1624 if (tstr[1] == 'h' && (tstr[2] == endc || tstr[2] == ':')) { 1625 char *err; 1626 newStr = Cmd_Exec (str, &err); 1627 if (err) 1628 Error (err, str); 1629 cp = tstr + 2; 1630 termc = *cp; 1631 break; 1632 } 1633 /*FALLTHRU*/ 1634#endif 1635 default: 1636 { 1637#ifdef SYSVVARSUB |
1621 /* 1622 * This can either be a bogus modifier or a System-V 1623 * substitution command. 1624 */ 1625 VarPattern pattern; 1626 Boolean eqFound; 1627 1628 pattern.flags = 0; --- 50 unchanged lines hidden (view full) --- 1679 (ClientData)&pattern); 1680 1681 /* 1682 * Restore the nulled characters 1683 */ 1684 pattern.lhs[pattern.leftLen] = '='; 1685 pattern.rhs[pattern.rightLen] = endc; 1686 termc = endc; | 1638 /* 1639 * This can either be a bogus modifier or a System-V 1640 * substitution command. 1641 */ 1642 VarPattern pattern; 1643 Boolean eqFound; 1644 1645 pattern.flags = 0; --- 50 unchanged lines hidden (view full) --- 1696 (ClientData)&pattern); 1697 1698 /* 1699 * Restore the nulled characters 1700 */ 1701 pattern.lhs[pattern.leftLen] = '='; 1702 pattern.rhs[pattern.rightLen] = endc; 1703 termc = endc; |
1687 } else { | 1704 } else 1705#endif 1706 { |
1688 Error ("Unknown modifier '%c'\n", *tstr); 1689 for (cp = tstr+1; 1690 *cp != ':' && *cp != endc && *cp != '\0'; 1691 cp++) 1692 continue; 1693 termc = *cp; 1694 newStr = var_Error; 1695 } --- 328 unchanged lines hidden --- | 1707 Error ("Unknown modifier '%c'\n", *tstr); 1708 for (cp = tstr+1; 1709 *cp != ':' && *cp != endc && *cp != '\0'; 1710 cp++) 1711 continue; 1712 termc = *cp; 1713 newStr = var_Error; 1714 } --- 328 unchanged lines hidden --- |