home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Multimed / Multimed.zip / lbmix04.zip / PipeMix / PMixCtl.cmd < prev   
OS/2 REXX Batch file  |  2000-05-05  |  3KB  |  86 lines

  1. /* A sample pipe mixer control REXX script by Lesha Bogdanow */
  2.  
  3. pipe="\PIPE\MIXER"
  4. REP_UNSUPPORTED="UNSUPPORTED"
  5. REP_OK="OK"
  6. REP_FAILED="FAILED"
  7.  
  8. call RxFuncAdd 'SysSleep','RexxUtil','SysSleep'
  9.  
  10. call Help
  11. do until left(word(data,1),1)='Q'
  12.    call charout ,':'
  13.    PULL data
  14.    data=translate(data)
  15.    if left(word(data,1),1)='?' then call Help
  16.    else if left(word(data,1),1)='F' then do    /* Supported functions */
  17.       say "             Supported functions:"
  18.       say
  19.       say " 80 - Query API level      83 - Get message buffer"
  20.       say
  21.       data='11'
  22.       call Cmd
  23.       call SysSleep 0.05
  24.       if datatype(word(data,2))='NUM' then
  25.          say ' 01 - Set Master volume    11 - Query Master volume'
  26.       do i=0 to 15
  27.          data='6'd2x(i)
  28.          call Cmd
  29.          call SysSleep 0.05
  30.          if datatype(word(data,2))='NUM' then do 
  31.             select 
  32.                when i=0 then  dsc='MonoIn     '
  33.                when i=1 then  dsc='Phone      '
  34.                when i=2 then  dsc='Mic        '
  35.                when i=3 then  dsc='Line       '
  36.                when i=4 then  dsc='CD         '
  37.                when i=5 then  dsc='Video      '
  38.                when i=6 then  dsc='Aux        '
  39.                when i=11 then dsc='Tone       '
  40.                when i=12 then dsc='3D         '
  41.                when i=13 then dsc='DAC Volume '
  42.                when i=14 then dsc='Record src '
  43.                when i=15 then dsc='Record gain'
  44.                otherwise
  45.                               dsc='Unknown ctl'
  46.                end
  47.             say ' 4'd2x(i) '- Set' dsc '     6'd2x(i) '- Query' dsc
  48.             end
  49.          end
  50.       end
  51.    else if left(word(data,1),1)<>'Q' then do    /* Mixer command */
  52.       cmd=word(data,1)
  53.       if (datatype(cmd,X)=0)|(length(cmd)<>2) then say "Invalid command."
  54.       else do
  55.          call Cmd
  56.          odata=''
  57.          EOL=''
  58.          do i=1 to length(data)
  59.             c=substr(data,i,1)
  60.             if (EOL='')&((c=D2C(13))|(c=D2C(10))) then EOL=c
  61.             if (EOL<>'')&(c=EOL) then do
  62.                say odata
  63.                odata=''
  64.                end
  65.             else if (C2D(c)>=32)|(c=D2C(9)) then odata=insert(odata,c)
  66.             end
  67.          if (word(odata,1)<>'') then say odata
  68.          end
  69.       end
  70.    end
  71. exit
  72. Help:
  73.    say "Sample REXX Pipe Mixer control script."
  74.    say "? - help, q - quit, f - list supported functions"
  75.    say "<fn> [par1 [par2 [par3]]] - call mixer function"
  76.    return
  77. Cmd:
  78.    if stream(pipe,'c','open')<>'READY:' then do
  79.       say 'Unable to connect to pipe' pipe
  80.       exit
  81.       end
  82.    call lineout pipe,data
  83.    data=charin(pipe,,2047)
  84.    call stream pipe,'c','close'
  85.    return
  86.