ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / drivers / message / fusion / ascq_tbl.sh
1 #!/bin/sh
2 #
3 #  ascq_tbl.sh - Translate SCSI t10.org's "asc-num.txt" file of
4 #                SCSI Additional Sense Code & Qualifiers (ASC/ASCQ's)
5 #                into something useful in C, creating "ascq_tbl.c" file.
6 #
7 #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
8
9 PREF_INFILE="t10.org/asc-num.txt"       # From SCSI t10.org
10 PREF_OUTFILE="ascq_tbl.c"
11
12 #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
13
14 xlate_ascq() {
15         cat | awk '
16         BEGIN {
17                 DQ = "\042";
18                 OUTFILE = "'"${PREF_OUTFILE}"'";
19                 TRUE = 1;
20                 FALSE = 0;
21                 #debug = TRUE;
22
23                 #  read and discard all lines up to and including the one that begins
24                 #  with the "magic token" of "-------  --------------  ---"...
25                 headers_gone = FALSE;
26                 while (!headers_gone) {
27                         if (getline <= 0)
28                                 exit 1;
29                         header_line[++hdrs] = $0;
30                         if (debug)
31                                 printf("header_line[%d] = :%s:\n", ++hdrs, $0);
32                         if ($0 ~ /^-------  --------------  ---/) {
33                                 headers_gone = TRUE;
34                         }
35                 }
36                 outcount = 0;
37         }
38
39         (NF > 1) {
40                 ++outcount;
41                 if (debug)
42                         printf( "DBG: %s\n", $0 );
43                 ASC[outcount] = substr($0,1,2);
44                 ASCQ[outcount] = substr($0,5,2);
45                 devtypes = substr($0,10,14);
46                 gsub(/ /, ".", devtypes);
47                 DESCRIP[outcount] = substr($0,26);
48
49                 if (!(devtypes in DevTypesVoodoo)) {
50                         DevTypesVoodoo[devtypes] = ++voodoo;
51                         DevTypesIdx[voodoo] = devtypes;
52                 }
53                 DEVTYPES[outcount] = DevTypesVoodoo[devtypes];
54
55                 #  Handle 0xNN exception stuff...
56                 if (ASCQ[outcount] == "NN" || ASCQ[outcount] == "nn")
57                         ASCQ[outcount] = "FF";
58         }
59
60         END {
61                 printf("#ifndef SCSI_ASCQ_TBL_C_INCLUDED\n") > OUTFILE;
62                 printf("#define SCSI_ASCQ_TBL_C_INCLUDED\n") >> OUTFILE;
63
64                 printf("\n/* AuToMaGiCaLlY generated from: %s'"${FIN}"'%s\n", DQ, DQ) >> OUTFILE;
65                 printf(" *******************************************************************************\n") >> OUTFILE;
66                 for (i=1; i<=hdrs; i++) {
67                         printf(" * %s\n", header_line[i]) >> OUTFILE;
68                 }
69                 printf(" */\n") >> OUTFILE;
70
71                 printf("\n") >> OUTFILE;
72                 for (i=1; i<=voodoo; i++) {
73                         printf("static char SenseDevTypes%03d[] = %s%s%s;\n", i, DQ, DevTypesIdx[i], DQ) >> OUTFILE;
74                 }
75
76                 printf("\nstatic ASCQ_Table_t ASCQ_Table[] = {\n") >> OUTFILE;
77                 for (i=1; i<=outcount; i++) {
78                         printf("  {\n") >> OUTFILE; 
79                         printf("    0x%s, 0x%s,\n", ASC[i], ASCQ[i]) >> OUTFILE;
80                         printf("    SenseDevTypes%03d,\n", DEVTYPES[i]) >> OUTFILE;
81                         printf("    %s%s%s\n", DQ, DESCRIP[i], DQ) >> OUTFILE;
82                         printf("  },\n") >> OUTFILE;
83                 }
84                 printf( "};\n\n" ) >> OUTFILE;
85
86                 printf( "static int ASCQ_TableSize = %d;\n\n", outcount ) >> OUTFILE;
87                 printf( "Total of %d ASC/ASCQ records generated\n", outcount );
88                 printf("\n#endif\n") >> OUTFILE;
89                 close(OUTFILE);
90         }'
91         return
92 }
93
94 #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
95
96 # main()
97 if [ $# -lt 1 ]; then
98         echo "INFO: No input filename supplied - using: $PREF_INFILE" >&2
99         FIN=$PREF_INFILE
100 else
101         FIN="$1"
102         if [ "$FIN" != "$PREF_INFILE" ]; then
103                 echo "INFO: Ok, I'll try chewing on '$FIN' for SCSI ASC/ASCQ combos..." >&2
104         fi
105         shift
106 fi
107
108 cat $FIN | xlate_ascq
109 exit 0