xref: /csrg-svn/sys/ufs/ffs/ffs_tables.c (revision 6292)
1 /* Copyright (c) 1981 Regents of the University of California */
2 
3 /* @(#)ffs_tables.c 1.4 03/23/82 */
4 
5 #include "../h/param.h"
6 
7 /*	partab.c	4.2	81/03/08	*/
8 
9 /*
10  * Table giving parity for characters and indicating
11  * character classes to tty driver.  In particular,
12  * if the low 6 bits are 0, then the character needs
13  * no special processing on output.
14  */
15 
16 unsigned char partab[] = {
17 	0001,0201,0201,0001,0201,0001,0001,0201,
18 	0202,0004,0003,0201,0005,0206,0201,0001,
19 	0201,0001,0001,0201,0001,0201,0201,0001,
20 	0001,0201,0201,0001,0201,0001,0001,0201,
21 	0200,0000,0000,0200,0000,0200,0200,0000,
22 	0000,0200,0200,0000,0200,0000,0000,0200,
23 	0000,0200,0200,0000,0200,0000,0000,0200,
24 	0200,0000,0000,0200,0000,0200,0200,0000,
25 	0200,0000,0000,0200,0000,0200,0200,0000,
26 	0000,0200,0200,0000,0200,0000,0000,0200,
27 	0000,0200,0200,0000,0200,0000,0000,0200,
28 	0200,0000,0000,0200,0000,0200,0200,0000,
29 	0000,0200,0200,0000,0200,0000,0000,0200,
30 	0200,0000,0000,0200,0000,0200,0200,0000,
31 	0200,0000,0000,0200,0000,0200,0200,0000,
32 	0000,0200,0200,0000,0200,0000,0000,0201,
33 
34 	/*
35 	 * 7 bit ascii ends with the last character above,
36 	 * but we contine through all 256 codes for the sake
37 	 * of the tty output routines which use special vax
38 	 * instructions which need a 256 character trt table.
39 	 */
40 
41 	0007,0007,0007,0007,0007,0007,0007,0007,
42 	0007,0007,0007,0007,0007,0007,0007,0007,
43 	0007,0007,0007,0007,0007,0007,0007,0007,
44 	0007,0007,0007,0007,0007,0007,0007,0007,
45 	0007,0007,0007,0007,0007,0007,0007,0007,
46 	0007,0007,0007,0007,0007,0007,0007,0007,
47 	0007,0007,0007,0007,0007,0007,0007,0007,
48 	0007,0007,0007,0007,0007,0007,0007,0007,
49 	0007,0007,0007,0007,0007,0007,0007,0007,
50 	0007,0007,0007,0007,0007,0007,0007,0007,
51 	0007,0007,0007,0007,0007,0007,0007,0007,
52 	0007,0007,0007,0007,0007,0007,0007,0007,
53 	0007,0007,0007,0007,0007,0007,0007,0007,
54 	0007,0007,0007,0007,0007,0007,0007,0007,
55 	0007,0007,0007,0007,0007,0007,0007,0007,
56 	0007,0007,0007,0007,0007,0007,0007,0007
57 };
58 
59 /*
60  * bit patterns for identifying fragments in the block map
61  * used as ((map & around) == inside)
62  */
63 int around[9] = {
64 	0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff
65 };
66 int inside[9] = {
67 	0x0, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe
68 };
69 
70 /*
71  * given a block map bit pattern, the frag tables tell whether a
72  * particular size fragment is available.
73  *
74  * used as:
75  * if ((1 << (size - 1)) & fragtbl[fs->fs_frag][map] {
76  *	at least one fragment of the indicated size is available
77  * }
78  *
79  * These tables are used by the scanc instruction on the VAX to
80  * quickly find an appropriate fragment.
81  */
82 
83 unsigned char fragtbl124[256] = {
84 	0x00, 0x16, 0x16, 0x2a, 0x16, 0x16, 0x26, 0x4e,
85 	0x16, 0x16, 0x16, 0x3e, 0x2a, 0x3e, 0x4e, 0x8a,
86 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
87 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
88 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
89 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
90 	0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e,
91 	0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa,
92 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
93 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
94 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
95 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
96 	0x26, 0x36, 0x36, 0x2e, 0x36, 0x36, 0x26, 0x6e,
97 	0x36, 0x36, 0x36, 0x3e, 0x2e, 0x3e, 0x6e, 0xae,
98 	0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e,
99 	0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce,
100 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
101 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
102 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
103 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
104 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
105 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
106 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e,
107 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe,
108 	0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e,
109 	0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa,
110 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e,
111 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe,
112 	0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e,
113 	0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce,
114 	0x8a, 0x9e, 0x9e, 0xaa, 0x9e, 0x9e, 0xae, 0xce,
115 	0x9e, 0x9e, 0x9e, 0xbe, 0xaa, 0xbe, 0xce, 0x8a,
116 };
117 
118 unsigned char fragtbl8[256] = {
119 	0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04,
120 	0x01, 0x01, 0x01, 0x03, 0x02, 0x03, 0x04, 0x08,
121 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
122 	0x02, 0x03, 0x03, 0x02, 0x04, 0x05, 0x08, 0x10,
123 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
124 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
125 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
126 	0x04, 0x05, 0x05, 0x06, 0x08, 0x09, 0x10, 0x20,
127 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
128 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
129 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
130 	0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11,
131 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
132 	0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a,
133 	0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04,
134 	0x08, 0x09, 0x09, 0x0a, 0x10, 0x11, 0x20, 0x40,
135 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
136 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
137 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
138 	0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11,
139 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
140 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
141 	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
142 	0x05, 0x05, 0x05, 0x07, 0x09, 0x09, 0x11, 0x21,
143 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
144 	0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a,
145 	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
146 	0x02, 0x03, 0x03, 0x02, 0x06, 0x07, 0x0a, 0x12,
147 	0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04,
148 	0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x04, 0x0c,
149 	0x08, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x0c,
150 	0x10, 0x11, 0x11, 0x12, 0x20, 0x21, 0x40, 0x80,
151 };
152 
153 /*
154  * the actual fragtbl array
155  */
156 unsigned char *fragtbl[MAXFRAG + 1] = {
157 	0, fragtbl124, fragtbl124, 0, fragtbl124, 0, 0, 0, fragtbl8,
158 };
159