#!/bin/sh # This is a shar archive. # The rest of this file is a shell script which will extract: # # 2_5a_a.c 2_5a_a.cmp 2_5a_a1.c 2_5a_a2.c 2_5a_b.c 2_5a_b.cmp 2_5b.c 2_5b.cmp 2_5b_a.c 2_5b_a.cmp 2_5b_b.c 2_5b_b.cmp 2_5b_c.c 2_5b_c.cmp 2_5c.c 2_5c.cmp 2_5c_a.c 2_5c_a.cmp makefile # # To extract the files from this shell archive file simply # create a directory for this file, move the archive file # to it and enter the command # # sh filename # # The files will be extracted automatically. # Note: Do not use csh. # # Archive created: Mon Jul 30 22:56:53 EDT 1990 # echo x - 2_5a_a.c sed 's/^X//' > 2_5a_a.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // "obvious" solution to print letters and digits // version 1 #include int main(int, char**) { #include "2_5a_a1.c" /* EXPAND */ for (ch = '0'; ch <= '9'; ch++) cout << chr(ch) << " " << ch << "\n"; return 0; } !EOF! ls -l 2_5a_a.c echo x - 2_5a_a.cmp sed 's/^X//' > 2_5a_a.cmp << '!EOF!' a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 !EOF! ls -l 2_5a_a.cmp echo x - 2_5a_a1.c sed 's/^X//' > 2_5a_a1.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ for (int ch = 'a'; ch <= 'z'; ch++) cout << chr(ch) << " " << ch << "\n"; !EOF! ls -l 2_5a_a1.c echo x - 2_5a_a2.c sed 's/^X//' > 2_5a_a2.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ #include #include void pr(int i) { cout << chr(i) << " " << i << "\n"; } !EOF! ls -l 2_5a_a2.c echo x - 2_5a_b.c sed 's/^X//' > 2_5a_b.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // print letters and digits // version 2 // check each letter before printing #include #include void pr(int i) { cout << chr(i) << " " << i << "\n"; } int main(int, char**) { for (int i = 'a'; i <= 'z'; i++) if (isalpha(i)) pr(i); for (i = '0'; i <= '9'; i++) pr(i); return 0; } !EOF! ls -l 2_5a_b.c echo x - 2_5a_b.cmp sed 's/^X//' > 2_5a_b.cmp << '!EOF!' a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 !EOF! ls -l 2_5a_b.cmp echo x - 2_5b.c sed 's/^X//' > 2_5b.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ #include #include #include #ifdef TESTC #include "2_5c.c" #else void pr(int i) { cout << chr(i) << " " << i << "\n"; } #endif int main(int, char**) { for (unsigned char i = 0; i < CHAR_MAX; i++) if (isascii(i) && isprint(i)) pr(i); return 0; } !EOF! ls -l 2_5b.c echo x - 2_5b.cmp sed 's/^X//' > 2_5b.cmp << '!EOF!' 32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 X. 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 XX 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { 123 | 124 } 125 X~ 126 !EOF! ls -l 2_5b.cmp echo x - 2_5b_a.c sed 's/^X//' > 2_5b_a.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // print all printable characters // version 1 #include void pr(int i) // same pr() as before { cout << chr(i) << " " << i << "\n"; } int main(int, char**) { for (int i = 040; i <= 0176; i++) pr(i); return 0; } !EOF! ls -l 2_5b_a.c echo x - 2_5b_a.cmp sed 's/^X//' > 2_5b_a.cmp << '!EOF!' 32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 X. 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 XX 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { 123 | 124 } 125 X~ 126 !EOF! ls -l 2_5b_a.cmp echo x - 2_5b_b.c sed 's/^X//' > 2_5b_b.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // print all printable characters portably // version 2 #include #include #include void pr(int i) // same pr() as before { cout << chr(i) << " " << i << "\n"; } int main(int, char**) { for (int i = 0; i <= CHAR_MAX; i++) if (isprint(i)) pr(i); return 0; } !EOF! ls -l 2_5b_b.c echo x - 2_5b_b.cmp sed 's/^X//' > 2_5b_b.cmp << '!EOF!' 32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 X. 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 XX 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { 123 | 124 } 125 X~ 126 !EOF! ls -l 2_5b_b.cmp echo x - 2_5b_c.c sed 's/^X//' > 2_5b_c.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ #include #include #include void pr(int i) { cout << chr(i) << " " << i << "\n"; } const HIBITC = ((unsigned char)(1 << BITS(unsigned char) - 1)); const MAXCHAR = ((unsigned char) ~HIBITC); int main(int, char**) { for (int i = 0; i < MAXCHAR; i++) if (isascii(i) && isprint(i)) pr(i); return 0; } !EOF! ls -l 2_5b_c.c echo x - 2_5b_c.cmp sed 's/^X//' > 2_5b_c.cmp << '!EOF!' 32 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 X. 46 / 47 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 XX 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { 123 | 124 } 125 X~ 126 !EOF! ls -l 2_5b_c.cmp echo x - 2_5c.c sed 's/^X//' > 2_5c.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // print a number as a char and its hex value void pr(int i) { cout << chr(i) << " " << hex(i) << "\n"; } !EOF! ls -l 2_5c.c echo x - 2_5c.cmp sed 's/^X//' > 2_5c.cmp << '!EOF!' 20 ! 21 " 22 # 23 $ 24 % 25 & 26 ' 27 ( 28 ) 29 * 2a + 2b , 2c - 2d X. 2e / 2f 0 30 1 31 2 32 3 33 4 34 5 35 6 36 7 37 8 38 9 39 : 3a ; 3b < 3c = 3d > 3e ? 3f @ 40 A 41 B 42 C 43 D 44 E 45 F 46 G 47 H 48 I 49 J 4a K 4b L 4c M 4d N 4e O 4f P 50 Q 51 R 52 S 53 T 54 U 55 V 56 W 57 XX 58 Y 59 Z 5a [ 5b \ 5c ] 5d ^ 5e _ 5f ` 60 a 61 b 62 c 63 d 64 e 65 f 66 g 67 h 68 i 69 j 6a k 6b l 6c m 6d n 6e o 6f p 70 q 71 r 72 s 73 t 74 u 75 v 76 w 77 x 78 y 79 z 7a { 7b | 7c } 7d X~ 7e !EOF! ls -l 2_5c.cmp echo x - 2_5c_a.c sed 's/^X//' > 2_5c_a.c << '!EOF!' /* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */ /* The C++ Answer Book */ /* Tony Hansen */ /* All rights reserved. */ // print all letters and digits, taking into // consideration non-English alphabets // version 3 #include #include #include void pr(int i) // same pr() as before { cout << chr(i) << " " << i << "\n"; } int main(int, char**) { for (int i = 0; i <= CHAR_MAX; i++) if (islower(i) || isdigit(i)) pr(i); return 0; } !EOF! ls -l 2_5c_a.c echo x - 2_5c_a.cmp sed 's/^X//' > 2_5c_a.cmp << '!EOF!' 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 !EOF! ls -l 2_5c_a.cmp echo x - makefile sed 's/^X//' > makefile << '!EOF!' CC= CC -I. -I../../CC all: 2_5a_a 2_5a_b 2_5b_a 2_5b_b 2_5c_a 2_5c 2_5a_a: 2_5a_a.c 2_5a_a1.c $(CC) 2_5a_a.c -o 2_5a_a 2_5a_b: 2_5a_b.c $(CC) 2_5a_b.c -o 2_5a_b #2_5b: 2_5b.c #$(CC) 2_5b.c -o 2_5b 2_5b_a: 2_5b_a.c $(CC) 2_5b_a.c -o 2_5b_a 2_5b_b: 2_5b_b.c $(CC) 2_5b_b.c -o 2_5b_b #2_5b_c: 2_5b_c.c #$(CC) 2_5b_c.c -o 2_5b_c 2_5c: 2_5b.c 2_5c.c $(CC) -DTESTC 2_5b.c -o 2_5c 2_5c_a: 2_5c_a.c $(CC) 2_5c_a.c -o 2_5c_a test: all 2_5a_a.cmp 2_5a_b.cmp 2_5b_a.cmp 2_5b_b.cmp 2_5c_a.cmp 2_5c.cmp 2_5a_a > 2_5a_a.out cmp 2_5a_a.out 2_5a_a.cmp 2_5a_b > 2_5a_b.out cmp 2_5a_b.out 2_5a_b.cmp 2_5b_a > 2_5b_a.out cmp 2_5b_a.out 2_5b_a.cmp 2_5b_b > 2_5b_b.out cmp 2_5b_b.out 2_5b_b.cmp 2_5c_a > 2_5c_a.out cmp 2_5c_a.out 2_5c_a.cmp 2_5c > 2_5c.out cmp 2_5c.out 2_5c.cmp echo tests done !EOF! ls -l makefile # The following exit is to ensure that extra garbage # after the end of the shar file will be ignored. exit 0