Previous: uttexp Up: ../plot79_u.html Next: utts00
INTEGER FUNCTION UTTIK (TOKEN,LOCTOK,LENTOK,KEYSTR,LENSTR,PKEY, X LKEY,NKEY,MINMAT) C$ (Index of Key) C$ Given a token of LENTOK characters packed in TOKEN(*) C$ beginning at position LOCTOK, and an alphabetical list of C$ keywords packed in the first LENSTR characters of KEYSTR(*) C$ in the form C$ C$ *KEY1*KEY2*KEY3*...*KEYN C$ C$ where the first character is the key separator character, C$ return the number of the key which matches, or if none C$ match, return the negative of the number of the key which C$ would PRECEDE the token if it were inserted in the list C$ (allowing the result to be used for installing a new key in C$ alphabetical order). Letter case is ignored in the C$ comparisons. Trailing white space in TOKEN(*) will be C$ ignored, implicitly reducing LENTOK. The key separator C$ character may be any character which is not a keyword C$ character. C$ C$ MINMAT is the minimum number of characters required for a C$ match; it may be set to enforce the use of a certain number C$ of leading characters in keywords. However, since a test C$ is always made for ambiguous matches, setting MINMAT to 1 C$ will permit the smallest number of characters for a match. C$ If a keyword contains fewer than MINMAT characters, then C$ the keyword length is used for the minimum match test. C$ However, if MINMAT .LE. 0, then an exact keyword match is C$ required. C$ C$ The table is required to be alphabetically ordered C$ according to the ASCII collating sequence to preserve C$ machine-independence. White space is defined to be any C$ ASCII control character (0..31, 127) or blank (32). Key C$ number k (k in 1..NKEY) begins at PKEY(k) and has length C$ LKEY(k). This allows the table to be binary searched C$ instead of linearly searched. Timing tests with a table of C$ about 40 keywords showed that linear searching was from 20 C$ to 40 times slower than binary searching, and in the SLIDES C$ program about 35 percent of the execution time was spent in C$ the keyword matching code sections with a linear search. C$ Binary search is therefore very worthwhile. It should also C$ be noted that because keyword abbreviations are allowed, C$ hash coding techniques (which would otherwise be faster, C$ requiring seldom more than 1 comparison per lookup) cannot C$ be used. C$ C$ FUNCTION UTTCK should be used to automatically compute C$ NKEY, PKEY(*) and LKEY(*) from the contents of KEYSTR(*), C$ so that that tedious and error-prone task need never be C$ done by hand. C$ C$ This function provides a convenient way of implementing C$ symbol table lookup for input languages and optionally C$ permitting abbreviated command keywords. The function C$ value returned can be used as a CASE statement index to C$ select processing according to the matched keyword. If C$ abbreviations are to be disallowed, then simply setting C$ MINMAT = 0 will prevent their recognition. C$ C$ Occasionally one wishes to have keywords with common C$ prefixes, but allow an abbreviation, which otherwise does C$ not distinguish between them, to select a particular one. C$ For example, a graphics program might have the keywords C$ LINE, LINECOLOR, LINEINTENSITY, LINESTYLE, and LINEWIDTH, C$ where one would like to accept the token LIN to mean the C$ first of them. This situation can be easily handled by C$ putting the preferred keyword in one keyword string and the C$ others in a second keyword string which is not scanned C$ until the first has been examined. C$ C$ For the benefit of users on non-ASCII machines, here is a C$ table of the ASCII character set: C$ C$ ============================ ============================ C$ HEX DEC OCT CHR Remark HEX DEC OCT CHR Remark C$ ============================ ============================ C$ 00 0 000 NUL 20 32 040 Space C$ 01 1 001 SOH 21 33 041 ! Exclamation C$ 02 2 002 STX 22 34 042 " Double Quote C$ 03 3 003 ETX 23 35 043 # Number C$ 04 4 004 EOT 24 36 044 $ Dollar C$ 05 5 005 ENQ 25 37 045 % Percent C$ 06 6 006 ACK 26 38 046 & Ampersand C$ 07 7 007 BEL 27 39 047 ' Apostrophe C$ 08 8 010 BS 28 40 050 ( Left Paren C$ 09 9 011 HT 29 41 051 ) Right Paren C$ 0A 10 012 LF 2A 42 052 * Asterisk C$ 0B 11 013 VT 2B 43 053 + Plus C$ 0C 12 014 FF 2C 44 054 , Comma C$ 0D 13 015 CR 2D 45 055 - Minus C$ 0E 14 016 SO 2E 46 056 . Period C$ 0F 15 017 SI 2F 47 057 / Forward Slash C$ 10 16 020 DLE 30 48 060 0 Zero C$ 11 17 021 DC1 31 49 061 1 One C$ 12 18 022 DC2 32 50 062 2 Two C$ 13 19 023 DC3 33 51 063 3 Three C$ 14 20 024 DC4 34 52 064 4 Four C$ 15 21 025 NAK 35 53 065 5 Five C$ 16 22 026 SYN 36 54 066 6 Six C$ 17 23 027 ETB 37 55 067 7 Seven C$ 18 24 030 CAN 38 56 070 8 Eight C$ 19 25 031 EM 39 57 071 9 Nine C$ 1A 26 032 SUB 3A 58 072 : Colon C$ 1B 27 033 ESC 3B 59 073 ; Semicolon C$ 1C 28 034 FS 3C 60 074 < Left angle C$ 1D 29 035 GS 3D 61 075 = Equals C$ 1E 30 036 RS 3E 62 076 > Right angle C$ 1F 31 037 US 3F 63 077 ? Query C$ 40 64 100 @ At sign 60 96 140 ` Accent grave C$ 41 65 101 A Upper-case 61 97 141 a Lower-case C$ 42 66 102 B 62 98 142 b C$ 43 67 103 C 63 99 143 c C$ 44 68 104 D 64 100 144 d C$ 45 69 105 E 65 101 145 e C$ 46 70 106 F 66 102 146 f C$ 47 71 107 G 67 103 147 g C$ 48 72 110 H 68 104 150 h C$ 49 73 111 I 69 105 151 i C$ 4A 74 112 J 6A 106 152 j C$ 4B 75 113 K 6B 107 153 k C$ 4C 76 114 L 6C 108 154 l C$ 4D 77 115 M 6D 109 155 m C$ 4E 78 116 N 6E 110 156 n C$ 4F 79 117 O 6F 111 157 o C$ 50 80 120 P 70 112 160 p C$ 51 81 121 Q 71 113 161 q C$ 52 82 122 R 72 114 162 r C$ 53 83 123 S 73 115 163 s C$ 54 84 124 T 74 116 164 t C$ 55 85 125 U 75 117 165 u C$ 56 86 126 V 76 118 166 v C$ 57 87 127 W 77 119 167 w C$ 58 88 130 X 78 120 170 x C$ 59 89 131 Y 79 121 171 y C$ 5A 90 132 Z 7A 122 172 z C$ 5B 91 133 [ Left bracket 7B 123 173 { Left brace C$ 5C 92 134 \ Back slash 7C 124 174 | Vertical bar C$ 5D 93 135 ] Right bracket 7D 125 175 } Right brace C$ 5E 94 136 ^ Circumflex 7E 126 176 ~ Tilde C$ 5F 95 137 _ Underscore 7F 127 177 DEL Delete C$ ============================ ============================ C$ C$ Characters 0..31 and 127 are control characters and have no C$ assigned printer graphic. The important thing to note for C$ most applications of this routine is the order: space C$ before digits before letters. This is different from the C$ order in Honeywell BCD, CDC, IBM EBCDIC, and UNIVAC C$ FIELDATA character sets. C$ (11-SEP-85)