home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Multimed / Multimed.zip / cdp10.zip / cdp.cmd next >
OS/2 REXX Batch file  |  1997-11-21  |  5KB  |  216 lines

  1. /*  List/Backup/Restore all or selected CD Titles and tracks from Warp 4 CD-Player. */
  2. /*  Author: Dirk C. Stuijfzand                                                      */
  3. /*  21-11-97  Version 1.0 : First public release                                    */
  4.  
  5. '@echo off'
  6.  
  7. Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  8. Call SysLoadFuncs
  9.  
  10. Parse Upper Arg Mode Rest
  11.  
  12. IniDir= ''
  13. IniFil= 'cdp.ini'
  14. IniBak= 'cdp.ibk'
  15. IniLck= 'cdp.!!!'
  16.  
  17. InpFil= 'cdp.inp'
  18. OutFil= 'cdp.out'
  19.  
  20. KeyTit= 'IMMCDDiscTitle'
  21. cAns= ''
  22.  
  23. Say ''
  24.  
  25. IniDir= Stream(IniFil,'C','Query Exist')
  26. IF IniDir= '' THEN DO
  27.   MmDir= Strip(Translate(Value('MMBASE',,'OS2ENVIRONMENT'),'',';'))||'\'
  28.   rc= SysFileTree(MmDir||IniLck,Dummy,'FO')   /* Look up file, even when hidden */
  29.   IF Dummy.0>0 THEN DO
  30.     Say 'CD Player active! - Close first'
  31.     Exit
  32.   END
  33.   IniDir= Stream(MmDir||IniFil,'C','Query Exist')
  34.   IF IniDir= '' THEN DO
  35.     Say 'File '||IniFil||' not found'
  36.     Exit
  37.   END
  38. END
  39.  
  40. IniDir= Substr(IniDir,1,Length(IniDir)-Length(IniFil))  /* Strip file from path */
  41. IniFil= IniDir||IniFil
  42. IniBak= IniDir||IniBak
  43. IniLck= IniDir||IniLck
  44. Say 'Using '||IniFil
  45. Say ''
  46.  
  47. IF Length(Mode)=0 THEN DO      /* Correct for default cmdline params */
  48.   Mode= '-T'                   /* Default to Titles list when no params given */
  49. END
  50. IF Length(Rest)=0 THEN DO
  51.   IF Substr(Mode,1,1)\='-' THEN DO
  52.     Rest= Mode
  53.     Mode= '-T'                 /* Default to Titles list when only param given is not an option */
  54.   END
  55. END
  56.  
  57. SELECT
  58.   WHEN Mode='-T'
  59.     THEN CdpRd('T',Rest)
  60.   WHEN Mode='-L'
  61.     THEN CdpRd('L',Rest)
  62.   WHEN Mode='-X'
  63.     THEN CdpRd('X',Rest)
  64.   WHEN Mode='-A' 
  65.     THEN CdpWrt()
  66. OTHERWISE
  67.   Say 'Usage: cdp    [searchkey] (list Titles)'
  68.   Say '       cdp -l [searchkey] (list Tracks)'
  69.   Say '       cdp -x [searchkey] (list Tracks and save in CDP.OUT)'
  70.   Say '       cdp -a             (add from file CDP.INP)'
  71. END
  72.  
  73. Exit
  74.  
  75.  
  76. /************************************/
  77. CdpRd:
  78. Parse Arg cWrt, cNar   /* cWrt:  T=Titles  L=Track list  X=Extract */
  79.  
  80. IF cWrt='X' THEN 'if exist ' OutFil ' del ' OutFil '>nul'
  81.  
  82. rc = SysIni(IniFil,'ALL:','aAlb')  /* Query all cd codes, put in Album array */
  83.  
  84. DO x= 1 TO aAlb.0                  /* Query all Titles   */
  85.   aTit.x= SysIni(IniFil,aAlb.x,KeyTit)
  86. END
  87.  
  88. DO x= 1 TO aAlb.0
  89.  
  90.   IF (cNar='') | (Pos(cNar,TransLate(aTit.x))>0) THEN DO   /* Narrow the scope when needed */
  91.     Say aTit.x
  92.  
  93.     IF cWrt\='T' THEN DO       /* Skip tracks when only Titles are asked */
  94.       nTrk= 0
  95.       rc= SysIni(IniFil,aAlb.x,'ALL:','aKey')    /* Query all key names for this cd */
  96.       DO y= 1 TO aKey.0
  97.         IF DataType(aKey.y,'N') THEN DO          /* We only want the numeric keys */
  98.           cKey= SysIni(IniFil,aAlb.x,aKey.y)     /* Query value for key */
  99.           nTrk= nTrk+1
  100.           aTrs.nTrk= aKey.y    /* Track Seq nr */
  101.           aTrk.nTrk= cKey      /* Track title  */
  102.         END
  103.       END
  104.                                /* Write to file when in eXtract mode */
  105.       IF cWrt='X' THEN rc= LineOut(OutFil,'['||aAlb.x||'] '||aTit.x)
  106.       DO y= 1 TO nTrk
  107.         Say Right(aTrs.y,3)||' - '||aTrk.y
  108.         IF cWrt='X' THEN rc= LineOut(OutFil,Right(aTrs.y,2)||' '||aTrk.y)
  109.       END
  110.       Say ''
  111.       IF cWrt='X' THEN rc= LineOut(OutFil,'')
  112.     END
  113.  
  114.   END
  115.  
  116. END
  117.  
  118. IF cWrt='X' THEN rc= LineOut(OutFil)   /* Close file */
  119.  
  120. Return ''
  121.  
  122. /************************************/
  123. CdpWrt:
  124.  
  125. IF Stream(InpFil,'C','Query Exist') = '' THEN DO
  126.   Say 'File '||InpFil||' not found'
  127.   Exit
  128. END
  129.  
  130. 'copy '||IniFil||' '||iniBak||'>NUL'
  131.  
  132. cCod= ''
  133. cTit= ''
  134. nTrk= 0
  135. nLnr= 0
  136.  
  137. DO WHILE Lines(InpFil) > 0
  138.   nLnr= nLnr+1
  139.   InBuf= Strip(LineIn(InpFil))
  140.   IF InBuf='' THEN DO    /* Empty line */
  141.     IF cCod\='' THEN DO
  142.       IniUpd()
  143.       cCod= ''
  144.       cTit= ''
  145.       nTrk= 0
  146.     END
  147.   END
  148.   ELSE DO                /* Non empty line */
  149.     IF cCod='' THEN DO
  150.       IF Substr(InBuf,1,1)='[' THEN DO
  151.         Parse Var InBuf '['cCod']'cTit
  152.         cTit= Strip(cTit)
  153.         Say cCod cTit
  154.       END
  155.       ELSE DO
  156.         Say InpFil||' ('||nLnr||') - "[" expected'
  157.         Exit
  158.       END
  159.     END
  160.     ELSE DO
  161.       Parse Var InBuf nVlg cTrk
  162.       IF Datatype(nVlg)\='NUM' THEN DO
  163.         Say InpFil||' ('||nLnr||') - "'||nVlg||'" Number expected'
  164.         Exit
  165.       END
  166.       IF Right(cTrk,1)=')' THEN DO    /* Del trailing (5:67) Tracktime if exist */
  167.         p= LastPos('(',cTrk)
  168.         IF p>0 THEN DO
  169.           cTrk= Strip(Substr(cTrk,1,p-1))
  170.         END
  171.       END
  172.       Say Right(nVlg,3)||' - '||cTrk
  173.       nTrk= nTrk+1
  174.       aVlg.nTrk= nVlg
  175.       aTrk.nTrk= cTrk
  176.     END
  177.   END
  178. END
  179.  
  180. IniUpd()
  181.  
  182. Return ''
  183.  
  184. /************************************/
  185. IniUpd:
  186.  
  187. IF nTrk>0 THEN DO
  188.   Say ''
  189.  
  190.   IF cAns \= 'A' THEN DO
  191.     Say 'Ready to write to '||IniFil
  192.     cAns= ''
  193.     rc= CharOut(,'Continue?  Yes, Skip, All, Quit  ')
  194.     DO UNTIL Pos(cAns,'YSAQ')>0
  195.       cAns= TransLate(SysGetKey('NOECHO'))
  196.     END
  197.     Say cAns
  198.     IF cAns = 'Q' THEN DO
  199.       Exit
  200.     END
  201.   END
  202.  
  203.   IF cAns \= 'S' THEN DO
  204.     Say 'Updating: '||cTit
  205.     rc = SysIni(IniFil,cCod)                   /* Delete data for this cd if already exists */
  206.     rc = SysIni(IniFil,cCod,KeyTit,cTit)       /* Add  cd code and Title */
  207.     DO i=1 TO nTrk
  208.       rc = SysIni(IniFil,cCod,aVlg.i,aTrk.i)   /* Add Track */
  209.     END
  210.   END
  211.  
  212.   Say ''
  213. END
  214.  
  215. Return ''
  216.