/* * Copyright (c) 1995 Gunther Schadow. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "names.h" #include #include #include static char *classbuf = NULL; static char *varbuf = NULL; static char *lowerbuf = NULL; static char *upperbuf = NULL; static const char *classorig = NULL; static const char *varorig = NULL; static const char *lowerorig = NULL; static const char *upperorig = NULL; void resetnames() { classorig = classbuf = NULL; varorig = varbuf = NULL; upperorig = upperbuf = NULL; lowerorig = lowerbuf = NULL; } const char* classname(const char *name) { if(name != classorig) { classorig = name; if(name == NULL) return classbuf = NULL; if(classbuf == NULL) classbuf = (char *)malloc(strlen(name) + 1); else classbuf = (char *)realloc(classbuf, strlen(name) + 1); bool new_word = true; const char *p; char *q; for(p = name, q = classbuf; *p != '\0'; p++, q++) { if(new_word) *q = toupper(*p); else *q = tolower(*p); new_word = !isalpha(*p); } *q = '\0'; } return classbuf; } const char* varname(const char *name) { if(name != varorig) { varorig = name; if(name == NULL) return varbuf = NULL; if(varbuf == NULL) varbuf = (char *)malloc(strlen(name) + 1); else varbuf = (char *)realloc(varbuf, strlen(name) + 1); const char *p; char *q; for(p = name, q = varbuf; *p != '\0'; p++, q++) { if(isalpha(*p)) *q = tolower(*p); else if(!isdigit(*p)) *q = '_'; else *q = *p; } *q = '\0'; } return varbuf; } const char* uppername(const char *name) { if(name != upperorig) { upperorig = name; if(name == NULL) return upperbuf = NULL; if(upperbuf == NULL) upperbuf = (char *)malloc(strlen(name) + 1); else upperbuf = (char *)realloc(upperbuf, strlen(name) + 1); const char *p; char *q; for(p = name, q = upperbuf; *p != '\0'; p++, q++) *q = toupper(*p); *q = '\0'; } return upperbuf; } const char* lowername(const char *name) { if(name != lowerorig) { lowerorig = name; if(name == NULL) return lowerbuf = NULL; if(lowerbuf == NULL) lowerbuf = (char *)malloc(strlen(name) + 1); else lowerbuf = (char *)realloc(lowerbuf, strlen(name) + 1); const char *p; char *q; for(p = name, q = lowerbuf; *p != '\0'; p++, q++) *q = tolower(*p); *q = '\0'; } return lowerbuf; } /* * Compare two strings for equality regardless of trailing blanks at * the second string. */ bool equals(const char* a, const char *b) { while(*a != 0) { if(*b == 0) return false; if(*a != *b) return false; a++; b++; } while(*b != 0) if(!isspace(*b++)) return false; return true; }