| /****************************************************************************** |
| ** 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 <string.h> |
| |
| #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", |
| "<less", |
| "=equal", |
| ">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 */ |