1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2001, 2004, 2007, 2008, 2009, 2010, 2011 4 Free Software Foundation, Inc. 5 6 Contributed by Red Hat, originally written by Jim Blandy. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. 20 21 Please email any bugs, comments, and/or additions to this file to: 22 bug-gdb@gnu.org */ 23 24/* X_string is a null-terminated string in the X charset whose 25 elements are as follows. X should be the name the `set charset' 26 command uses for the character set, in lower-case, with any 27 non-identifier characters replaced with underscores. Where a 28 character set doesn't have the given character, the string should 29 contain the character 'x'. 30 31 [0] --- the `alert' character, '\a' 32 [1] --- the `backspace' character, '\b' 33 [2] --- the `form feed' character, '\f' 34 [3] --- the `line feed' character, '\n' 35 [4] --- the `carriage return' character, '\r' 36 [5] --- the `horizontal tab' character, '\t' 37 [6] --- the `vertical tab' character, '\v' 38 [7 .. 32] --- the uppercase letters A-Z 39 [33 .. 58] --- the lowercase letters a-z 40 [59 .. 68] --- the digits 0-9 41 [69] --- the `cent' character 42 [70] --- a control character with no defined backslash escape 43 44 Feel free to extend these as you like. */ 45 46#define NUM_CHARS (71) 47 48char ascii_string[NUM_CHARS]; 49char iso_8859_1_string[NUM_CHARS]; 50char ebcdic_us_string[NUM_CHARS]; 51char ibm1047_string[NUM_CHARS]; 52 53/* We make a phony wchar_t and then pretend that this platform uses 54 UTF-32 (or UTF-16, depending on the size -- same difference for the 55 purposes of this test). */ 56typedef unsigned int wchar_t; 57wchar_t utf_32_string[NUM_CHARS]; 58 59/* We also define a couple phony types for testing the u'' and U'' 60 support. It is ok if these have the wrong size on some platforms 61 -- the test case will skip the tests in that case. */ 62typedef unsigned short char16_t; 63typedef unsigned int char32_t; 64 65/* Make sure to use the typedefs. */ 66char16_t uvar; 67char32_t Uvar; 68 69char16_t *String16; 70char32_t *String32; 71 72/* A typedef to a typedef should also work. */ 73typedef wchar_t my_wchar_t; 74my_wchar_t myvar; 75 76/* Some arrays for simple assignment tests. */ 77short short_array[3]; 78int int_array[3]; 79long long_array[3]; 80 81void 82init_string (char string[], 83 char x, 84 char alert, char backspace, char form_feed, 85 char line_feed, char carriage_return, char horizontal_tab, 86 char vertical_tab, char cent, char misc_ctrl) 87{ 88 int i; 89 90 for (i = 0; i < NUM_CHARS; ++i) 91 string[i] = x; 92 string[0] = alert; 93 string[1] = backspace; 94 string[2] = form_feed; 95 string[3] = line_feed; 96 string[4] = carriage_return; 97 string[5] = horizontal_tab; 98 string[6] = vertical_tab; 99 string[69] = cent; 100 string[70] = misc_ctrl; 101} 102 103 104void 105fill_run (char string[], int start, int len, int first) 106{ 107 int i; 108 109 for (i = 0; i < len; i++) 110 string[start + i] = first + i; 111} 112 113 114void 115init_utf32 () 116{ 117 int i; 118 119 for (i = 0; i < NUM_CHARS; ++i) 120 utf_32_string[i] = iso_8859_1_string[i] & 0xff; 121} 122 123extern void malloc_stub (void); 124 125int main () 126{ 127#ifdef usestubs 128 set_debug_traps(); 129 breakpoint(); 130#endif 131 132 malloc_stub (); 133 134 /* Initialize ascii_string. */ 135 init_string (ascii_string, 136 120, 137 7, 8, 12, 138 10, 13, 9, 139 11, 120, 17); 140 fill_run (ascii_string, 7, 26, 65); 141 fill_run (ascii_string, 33, 26, 97); 142 fill_run (ascii_string, 59, 10, 48); 143 144 /* Initialize iso_8859_1_string. */ 145 init_string (iso_8859_1_string, 146 120, 147 7, 8, 12, 148 10, 13, 9, 149 11, 162, 17); 150 fill_run (iso_8859_1_string, 7, 26, 65); 151 fill_run (iso_8859_1_string, 33, 26, 97); 152 fill_run (iso_8859_1_string, 59, 10, 48); 153 154 /* Initialize ebcdic_us_string. */ 155 init_string (ebcdic_us_string, 156 167, 157 47, 22, 12, 158 37, 13, 5, 159 11, 74, 17); 160 /* In EBCDIC, the upper-case letters are broken into three separate runs. */ 161 fill_run (ebcdic_us_string, 7, 9, 193); 162 fill_run (ebcdic_us_string, 16, 9, 209); 163 fill_run (ebcdic_us_string, 25, 8, 226); 164 /* The lower-case letters are, too. */ 165 fill_run (ebcdic_us_string, 33, 9, 129); 166 fill_run (ebcdic_us_string, 42, 9, 145); 167 fill_run (ebcdic_us_string, 51, 8, 162); 168 /* The digits, at least, are contiguous. */ 169 fill_run (ebcdic_us_string, 59, 10, 240); 170 171 /* Initialize ibm1047_string. */ 172 init_string (ibm1047_string, 173 167, 174 47, 22, 12, 175 37, 13, 5, 176 11, 74, 17); 177 /* In EBCDIC, the upper-case letters are broken into three separate runs. */ 178 fill_run (ibm1047_string, 7, 9, 193); 179 fill_run (ibm1047_string, 16, 9, 209); 180 fill_run (ibm1047_string, 25, 8, 226); 181 /* The lower-case letters are, too. */ 182 fill_run (ibm1047_string, 33, 9, 129); 183 fill_run (ibm1047_string, 42, 9, 145); 184 fill_run (ibm1047_string, 51, 8, 162); 185 /* The digits, at least, are contiguous. */ 186 fill_run (ibm1047_string, 59, 10, 240); 187 188 init_utf32 (); 189 190 myvar = utf_32_string[7]; 191 192 return 0; /* all strings initialized */ 193} 194