linux-old/drivers/message/fusion/ascq_tbl.sh
<<
>>
Prefs
   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
   9PREF_INFILE="t10.org/asc-num.txt"       # From SCSI t10.org
  10PREF_OUTFILE="ascq_tbl.c"
  11
  12#*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
  13
  14xlate_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()
  97if [ $# -lt 1 ]; then
  98        echo "INFO: No input filename supplied - using: $PREF_INFILE" >&2
  99        FIN=$PREF_INFILE
 100else
 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
 106fi
 107
 108cat $FIN | xlate_ascq
 109exit 0
 110
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.