/* time expander/compresser over selected events */ /* written by Joe Pearce (3-14-91) */ Options results MXLABEL "Percentage" MXSLIDER " of Original:,1,200,100" MXREQUEST "Expand/Compress Time,DO IT" if result = 0 then exit MXVALUE 2 timeadj = Result / 100 GETBARDATA if BARDATA.SELECT == 'NONE' then do MXREPORT "No events selected or marked!" exit end MXPOINTER "sleepy" if BARDATA.SELECT == 'SELECT' then do i = 0 BEGINSCAN 'selected' if result ~=0 then do forever NEXTEVENT if result == 0 then break EvtT.1 = EVENT.START.ticks if i = 0 then EvtT.0 = EVENT.START.ticks i = i + 1 end ENDSCAN if i < 2 then do MXREPORT "Need at least two events selected!" MXPOINTER "normal" exit end end else do /* 'MARK' */ EvtT.0 = BARDATA.START.BARS * BARDATA.MEASURE + BARDATA.START.CLOCKS EvtT.1 = BARDATA.STOP.BARS * BARDATA.MEASURE + BARDATA.STOP.CLOCKS end mode = 0 delta = EvtT.1 - EvtT.0 if delta = 0 then do MXREPORT "Time interval is zero." MXPOINTER "normal" exit end /* MXREPORT "Time delta:" delta */ BEGINSCAN 'all' if result ~=0 then do forever NEXTEVENT if result == 0 then break gotstop = 0 if EVENT.TYPE == 'NOTE' then gotstop = 1 if EVENT.TYPE == 'TEMP' then gotstop = 1 if EVENT.TYPE == 'MSEQ' then gotstop = 1 if EVENT.TYPE == 'PSEQ' then gotstop = 1 if EVENT.TYPE == 'SSEQ' then gotstop = 1 if EVENT.TYPE == 'MTRK' then gotstop = 1 if EVENT.TYPE == 'STRK' then gotstop = 1 if mode = 0 then do if EvtT.0 <= EVENT.START.ticks then mode = 1 end if mode = 1 then do if EvtT.1 <= EVENT.START.ticks then mode = 2 c = (EVENT.START.ticks - EvtT.0) * timeadj + EvtT.0 EVENT.START.CLOCKS = c // BARDATA.MEASURE EVENT.START.BARS = c % BARDATA.MEASURE if gotstop = 1 then do b = EVENT.STOP.ticks + c - EVENT.START.ticks EVENT.STOP.CLOCKS = b // BARDATA.MEASURE EVENT.STOP.BARS = b % BARDATA.MEASURE end REPLEVENT end else if mode = 2 then do c = (EVENT.START.ticks - delta) + (delta * timeadj); EVENT.START.CLOCKS = c // BARDATA.MEASURE EVENT.START.BARS = c % BARDATA.MEASURE if gotstop = 1 then do b = EVENT.STOP.ticks + c - EVENT.START.ticks EVENT.STOP.CLOCKS = b // BARDATA.MEASURE EVENT.STOP.BARS = b % BARDATA.MEASURE end REPLEVENT end end ENDSCAN MXPOINTER "normal"