home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v5.zip / DDKX86 / SRC / DEV / DASD / OS2ASPI / GENDTBL.CMD < prev    next >
OS/2 REXX Batch file  |  1995-04-10  |  3KB  |  193 lines

  1. /* rexx */
  2.  
  3. /**
  4.  ** Creates Direction Bit Masks for ASPIDATA.C from SCSI OpCode
  5.  ** text file. (DIRTBL.TXT>
  6.  **/
  7.  
  8. if arg(1) = '' then
  9.   do
  10.     say "GENDIRTBL source_file > output_file"
  11.     exit
  12.   end
  13.  
  14. infile = arg(1)
  15.  
  16. i = 1
  17. do while i \= 0
  18.  
  19.   call nextline
  20.  
  21.   if substr(text,1,1) = '+' then
  22.     do
  23.       i = 0
  24.       iterate
  25.     end
  26.  
  27.   n = word(text,1)
  28.  
  29.   if Op.n = 1 then
  30.     do
  31.       say "*ERROR* - redefinition: <"text">"
  32.       exit
  33.     end
  34.  
  35.   Op.n = 1
  36.   Op.n.TITLE = text
  37.  
  38.   do p = 0 to 255
  39.     code = D2X(p)
  40.     Op.n.code.MASK = 0
  41.     Op.n.code.DEF  = 0
  42.     Op.n.code.DIR  = 'NONE'
  43.     Op.n.code.NAME = ''
  44.   end
  45.  
  46.   j = 1
  47.   do while j \= 0
  48.  
  49.     call nextline
  50.  
  51.     if substr(text,1,1) \= '+' then
  52.       do
  53.         PARSE VAR text CDBcode CDBname CDBdir .
  54.  
  55.         CDBcode = D2X(X2D(CDBcode))
  56.         CDBdir  = STRIP(CDBdir)
  57.  
  58.         if Op.n.CDBcode.DEF = 1 then
  59.           do
  60.             say "*ERROR* - redefinition: <" text ">"
  61.             exit
  62.           end
  63.         if CDBdir \= 'ItoT' & CDBdir \= 'TtoI' & CDBdir \= 'NONE' then
  64.           do
  65.             say "*ERROR* - Invalid direction: <" text ">"
  66.             exit
  67.           end
  68.  
  69.         Op.n.CDBcode.DEF  = 1
  70.         Op.n.CDBcode.NAME = CDBname
  71.         Op.n.CDBcode.DIR  = CDBdir
  72.  
  73.         if CDBdir = 'ItoT' then
  74.           do
  75.             Op.n.CDBcode.MASK = 1
  76.           end
  77.       end
  78.     else
  79.       j = 0
  80.   end
  81.  
  82.   say
  83.   say 'Table for' Op.n.TITLE
  84.   say
  85.  
  86.   j = 0
  87.   do l = 0 to 3
  88.  
  89.     OutL = '  '
  90.  
  91.     do m = 0 to 7
  92.  
  93.       byte = ''
  94.       do p = 0 to 7
  95.         code = D2X(j)
  96.         byte = byte||Op.n.code.MASK
  97.         j = j + 1
  98.       end
  99.       OutL = OutL||'0x'||B2X(byte)||', '
  100.  
  101.     end
  102.  
  103.     say OutL
  104.  
  105.   end
  106.  
  107. end
  108.  
  109. if word(text,1) = "+COMBINE" then
  110.   do
  111.     do p = 0 to 255
  112.       code = D2X(p)
  113.       OpC.code.MASK = 0
  114.       OpC.code.DEF  = 0
  115.       OpC.code.DIR  = 'NONE'
  116.       OpC.code.NAME = ''
  117.     end
  118.  
  119.   say
  120.   say 'Combined Table'
  121.   say
  122.  
  123.     x= 2
  124.     do while word(text,x) \= ''
  125.  
  126.       n = word(text,x)
  127.  
  128.       do p = 0 to 255
  129.  
  130.         code = D2X(p)
  131.  
  132.         if OpC.code.DEF = 1 & Op.n.code.Def = 1 then
  133.           do
  134.             if OpC.code.DIR \= Op.n.code.DIR then
  135.               do
  136.                 say '*Warning* Direction Conflict N =' n 'Op =' code "<"OpC.code.Dir"> <"Op.n.code.DIR">"
  137.                 say OpC.code.NAME Op.n.code.NAME
  138.               end
  139.           end
  140.  
  141.         if ((OpC.code.DEF \= 1 & Op.n.code.Def = 1) | (OpC.code.DEF = 1 & Op.n.code.Def = 1 & OpC.code.DIR = 'NONE')) then
  142.           do
  143.             OpC.code.DEF  = Op.n.code.DEF
  144.             OpC.code.MASK = Op.n.code.MASK
  145.             OpC.code.DIR  = Op.n.code.DIR
  146.             OpC.code.NAME = Op.n.code.NAME
  147.           end
  148.  
  149.       end
  150.  
  151.       x = x+1
  152.     end
  153.  
  154.   end
  155.  
  156.   say
  157.  
  158.   j = 0
  159.   do l = 0 to 3
  160.  
  161.     OutL = '  '
  162.  
  163.     do m = 0 to 7
  164.  
  165.       byte = ''
  166.       do p = 0 to 7
  167.         code = D2X(j)
  168.         byte = byte||OpC.code.MASK
  169.         j = j + 1
  170.       end
  171.       OutL = OutL||'0x'||B2X(byte)||', '
  172.  
  173.     end
  174.  
  175.     say OutL
  176.  
  177.   end
  178.  
  179. exit
  180.  
  181.  
  182.  
  183.  
  184. NextLine:
  185.  
  186.   k = 1
  187.   do while k \= 0
  188.     text = LINEIN(infile)
  189.     if text \= '' & substr(text,1,1) \= '*' then k=0
  190.   end
  191.  
  192.   return
  193.