/****************************************************************************** ** Filename: name2char.c ** Purpose: Routines to convert between classes and class names. ** Author: Dan Johnson ** History: Fri Feb 23 08:03:09 1990, DSJ, Created. ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. ******************************************************************************/ /**---------------------------------------------------------------------------- Include Files and Type Defines ----------------------------------------------------------------------------**/ #include "name2char.h" #include "matchdefs.h" #include "danerror.h" #include #define ILLEGALCHARNAME 6001 /**---------------------------------------------------------------------------- Global Data Definitions and Declarations ----------------------------------------------------------------------------**/ /* character ID (ascii code) to character name mapping */ static const char *NameList[]={ "!bang", "\"doubleq", "#hash", "$dollar", "%percent", "&and", "'quote", "(lround", ")rround", "*asterisk", "+plus", ",comma", "-minus", ".dot", "/slash", ":colon", ";semic", "greater", "?question", "@at", "[lsquare", "\\backsl", "]rsquare", "^uparr", "_unders", "`grave", "{lbrace", "|bar", "}rbrace", "~tilde", "AcA", "BcB", "CcC", "DcD", "EcE", "FcF", "GcG", "HcH", "IcI", "JcJ", "KcK", "LcL", "McM", "NcN", "OcO", "PcP", "QcQ", "RcR", "ScS", "TcT", "UcU", "VcV", "WcW", "XcX", "YcY", "ZcZ", NULL }; /**---------------------------------------------------------------------------- Public Code ----------------------------------------------------------------------------**/ /*---------------------------------------------------------------------------*/ CLASS_ID NameToChar ( char CharName[]) /* ** Parameters: ** CharName character name to convert to a character ** Globals: ** NameList lookup table for name to char mapping ** Operation: ** This routine converts the specified character name to ** an ascii character. ** Return: Ascii character that corresponds to the character name. ** Exceptions: ILLEGALCHARNAME ** History: Sat Aug 26 12:26:54 1989, DSJ, Created. */ { int i; // look for name in table and return character if found for ( i = 0; NameList[i] != NULL; i++ ) if ( strcmp (CharName, &NameList[i][1]) == 0) return (NameList[i][0]); if ( strlen (CharName) == 1 ) return (CharName[0]); //name is not in table but is a single character else //illegal character { DoError (ILLEGALCHARNAME, "Illegal character name"); return 0; } } /* NameToChar */ /*---------------------------------------------------------------------------*/ void CharToName ( CLASS_ID Char, char CharName[]) /* ** Parameters: ** Char character to map to a character name ** CharName string to copy character name into ** Globals: ** NameList lookup table for char to name mapping ** Operation: ** This routine converts the specified ascii character to a ** character name. This is convenient for representing ** characters which might have special meaning to operating ** system shells or other programs (e.g. "*?&><" etc.). ** Return: none ** Exceptions: none ** History: Sat Aug 26 12:51:02 1989, DSJ, Created. */ { int i; /* look for character in table and return a copy of its name if found */ for ( i = 0; NameList[i] != NULL; i++ ) if ( Char == NameList[i][0] ) { strcpy ( CharName, &NameList[i][1] ); return; } /* if the character is not in the table, then use it as the name */ CharName[0] = Char; CharName[1] = 0; } /* CharToName */