home *** CD-ROM | disk | FTP | other *** search
/ Merciful 3 / Merciful_Release_3.bin / software / o / octamed / octamedv6.12.lha / rexx / OrgPlayseq.omed < prev    next >
Text File  |  1995-03-29  |  3KB  |  117 lines

  1. /* Organize Playing Sequence - Ed Wiles, 21st March 1995 */
  2. /* NOTE: Ignores sections! (i.e. only works with one playing sequence) */
  3. /* Also ignores line highlighting */
  4.  
  5. address OCTAMED_REXX
  6. options results
  7.  
  8. 'wi_request "Really organize the playing sequence? (Blocks may be deleted)" Organize|Cancel'
  9. if result = 0 then exit
  10.  
  11. 'ed_getnumblocks var numblocks'
  12. if numblocks = 1 then do
  13.    'wi_showstring Song has only one block!'
  14.    exit
  15. end
  16.  
  17. 'op_update off'
  18. 'wi_close playingseq'
  19. 'wi_close blocklist'
  20. 'wi_close blockproperties'
  21. block = 0
  22.  
  23. 'wi_showstring Deleting blocks not in playing sequence...'
  24.  
  25. do until block >= result
  26.    'ed_isblockinseq block' block
  27.    if result = 0 then do
  28.       'ed_goto block' block
  29.       'ed_deleteblock'
  30.    end
  31.  
  32.    block = block + 1
  33.    ed_getnumblocks
  34. end
  35.  
  36. 'ed_getnumplayseq var seqlen'
  37.  
  38. 'wi_showstring Getting sequence blocks...'
  39.  
  40. do i = 1 to seqlen
  41.    'ed_getplayseqblock' i 'var oldseq.'i
  42. end
  43.  
  44. newseq.0 = 0; 'ed_setplayseqblock 0 0'
  45. newblock = 1; flag = -1;
  46.  
  47. 'wi_showstring Organizing playing sequence...'
  48.  
  49. do seqpos = 1 to seqlen - 1
  50.    do i = 0 to seqpos - 1
  51.       if oldseq.i = oldseq.seqpos then do
  52.          flag = i
  53.          break
  54.       end
  55.    end
  56.  
  57.    if flag >= 0 then
  58.       newseq.seqpos = newseq.flag
  59.    else do
  60.       newseq.seqpos = newblock
  61.       newblock = newblock + 1
  62.    end
  63. 'ed_setplayseqblock' seqpos newseq.seqpos; flag = -1
  64. end
  65.  
  66. currblock = 0
  67.  
  68. 'wi_showstring Swapping blocks...'
  69.  
  70. do seqpos = 0 to seqlen - 1
  71.    if newseq.seqpos < currblock then iterate
  72.  
  73.    if oldseq.seqpos ~= newseq.seqpos then do
  74.       'ed_goto block' oldseq.seqpos
  75.  
  76.       'ed_getnumtracks var oldtracks'
  77.       'ed_getblockname var oldname'
  78.  
  79.       'rn_copy block'
  80.  
  81.       'ed_goto block' newseq.seqpos
  82.  
  83.       'ed_getnumtracks var newtracks'
  84.       if oldtracks > newtracks then 'ed_setblocktracks' oldtracks
  85.       'ed_getblockname var newname'
  86.  
  87.       'rn_swap block'
  88.       if oldtracks < newtracks then do
  89.          'ed_setblocktracks' oldtracks
  90.          'ed_setblocktracks block' oldseq.seqpos newtracks
  91.       end
  92.       if compare(oldname, newname) ~= 0 then do
  93.          flag = 1
  94.          'ed_setblockname "'oldname'"'
  95.       end
  96.  
  97.       'ed_goto block' oldseq.seqpos
  98.  
  99.       'rn_paste block'
  100.       if flag = 1 then do
  101.          flag = 0
  102.          'ed_setblockname "'newname'"'
  103.       end
  104.  
  105.       do i = seqpos + 1 to seqlen - 1
  106.          if oldseq.i = currblock then oldseq.i = oldseq.seqpos
  107.       end
  108.    end
  109.  
  110.    currblock = currblock + 1
  111. end
  112.  
  113. 'ed_gotoblock first'
  114. 'ed_gotoplayseq first'
  115. 'op_update on'
  116. 'wi_showstring Playing sequence organized.'
  117.