ascq_tbl.sh
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
- #!/bin/sh
- #
- # ascq_tbl.sh - Translate SCSI t10.org's "asc-num.txt" file of
- # SCSI Additional Sense Code & Qualifiers (ASC/ASCQ's)
- # into something useful in C, creating "ascq_tbl.c" file.
- #
- #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
- PREF_INFILE="t10.org/asc-num.txt" # From SCSI t10.org
- PREF_OUTFILE="ascq_tbl.c"
- #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
- xlate_ascq() {
- cat | awk '
- BEGIN {
- DQ = "42";
- OUTFILE = "'"${PREF_OUTFILE}"'";
- TRUE = 1;
- FALSE = 0;
- #debug = TRUE;
- # read and discard all lines up to and including the one that begins
- # with the "magic token" of "------- -------------- ---"...
- headers_gone = FALSE;
- while (!headers_gone) {
- if (getline <= 0)
- exit 1;
- header_line[++hdrs] = $0;
- if (debug)
- printf("header_line[%d] = :%s:n", ++hdrs, $0);
- if ($0 ~ /^------- -------------- ---/) {
- headers_gone = TRUE;
- }
- }
- outcount = 0;
- }
- (NF > 1) {
- ++outcount;
- if (debug)
- printf( "DBG: %sn", $0 );
- ASC[outcount] = substr($0,1,2);
- ASCQ[outcount] = substr($0,5,2);
- devtypes = substr($0,10,14);
- gsub(/ /, ".", devtypes);
- DESCRIP[outcount] = substr($0,26);
- if (!(devtypes in DevTypesVoodoo)) {
- DevTypesVoodoo[devtypes] = ++voodoo;
- DevTypesIdx[voodoo] = devtypes;
- }
- DEVTYPES[outcount] = DevTypesVoodoo[devtypes];
- # Handle 0xNN exception stuff...
- if (ASCQ[outcount] == "NN" || ASCQ[outcount] == "nn")
- ASCQ[outcount] = "FF";
- }
- END {
- printf("#ifndef SCSI_ASCQ_TBL_C_INCLUDEDn") > OUTFILE;
- printf("#define SCSI_ASCQ_TBL_C_INCLUDEDn") >> OUTFILE;
- printf("n/* AuToMaGiCaLlY generated from: %s'"${FIN}"'%sn", DQ, DQ) >> OUTFILE;
- printf(" *******************************************************************************n") >> OUTFILE;
- for (i=1; i<=hdrs; i++) {
- printf(" * %sn", header_line[i]) >> OUTFILE;
- }
- printf(" */n") >> OUTFILE;
- printf("n") >> OUTFILE;
- for (i=1; i<=voodoo; i++) {
- printf("static char SenseDevTypes%03d[] = %s%s%s;n", i, DQ, DevTypesIdx[i], DQ) >> OUTFILE;
- }
- printf("nstatic ASCQ_Table_t ASCQ_Table[] = {n") >> OUTFILE;
- for (i=1; i<=outcount; i++) {
- printf(" {n") >> OUTFILE;
- printf(" 0x%s, 0x%s,n", ASC[i], ASCQ[i]) >> OUTFILE;
- printf(" SenseDevTypes%03d,n", DEVTYPES[i]) >> OUTFILE;
- printf(" %s%s%sn", DQ, DESCRIP[i], DQ) >> OUTFILE;
- printf(" },n") >> OUTFILE;
- }
- printf( "};nn" ) >> OUTFILE;
- printf( "static int ASCQ_TableSize = %d;nn", outcount ) >> OUTFILE;
- printf( "Total of %d ASC/ASCQ records generatedn", outcount );
- printf("n#endifn") >> OUTFILE;
- close(OUTFILE);
- }'
- return
- }
- #*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
- # main()
- if [ $# -lt 1 ]; then
- echo "INFO: No input filename supplied - using: $PREF_INFILE" >&2
- FIN=$PREF_INFILE
- else
- FIN="$1"
- if [ "$FIN" != "$PREF_INFILE" ]; then
- echo "INFO: Ok, I'll try chewing on '$FIN' for SCSI ASC/ASCQ combos..." >&2
- fi
- shift
- fi
- cat $FIN | xlate_ascq
- exit 0