PULSE by -KING- (a french TECHNO & HARD-ROCK lover guy). All code in this basic file by KING. ".General" ".Wimp" TaskName$="Pulse" PathApp$="" LibWimpInit InitVariables MemoryInit ExprMax%=100 MaxEntry%=20 IconBlock% 200 "QTM_VUBarControl",2,-1 Constants InitMode InitQTM CurColor%(3) XPitch%(61) XNote%(61) a%=0 XPitch%(a%) a%=0 $ A%=0 S$,3,1) (A$)<<8 S$,2,1) A%=A% (A$)<<16 S$,1,1) A%=A% (A$)<<24 XNote%(a%)=A% Options by default OQuickDraw%= OPaneVoice%= OPaneSeq%= OCursor%=2 ReadOptions OHCell%=50 OWCell%=450 OQuickDraw%= OPaneVoice%= OPaneSeq%= OInitQTMPlay%= OCopyReverse%= OCopyMode%=0 FontInit "OS_SpriteOp",10,,".Sprites" "OS_ReadMemMapInfo" PageSize% F'TransfertPath$=".ForQTM" BASICSize%= -&8000 Heap%= CreateMenus LibSetExtent(HFXControl%,500,CHIcons%*(&F+&F+1)) PollMask%=%00000000110001 CurrentMenu%=-1 InitTempPattern UpdateNote(-1,-1) Block%!0=0 "Wimp_Poll",PollMask%,Block%,TaskId% Poll% Poll% 0 : 1 : PollRedraw 2 : PollOpenWindow 3 : PollCloseWindow 6 : PollMouseClick 7 : EndDrag 8 : KeyPressed 9 : PollMenuSelection 11 : LoseCaret 12 : GainCaret 17,18,19 : PollMessage GainCaret WinH%=Block%!0 IconH%=Block%!4 WinH% HPlay% IconH% SelectIcon(10) LoseCaret WinH%=Block%!0 IconH%=Block%!4 WinH% HPlay% IconH% DeselectIcon(10) CreateIcon(handle%,xpos%,ypos%,xs%,ys%,flags%,Title$,mem%,area%) Block%!0=handle% Block%!4=xpos% Block%!8=ypos% Block%!12=xpos%+xs% Block%!16=ypos%+ys% Block%!20=flags% OK% 12 $OK%=Title$ Block%!24=OK% Block%!28=area% Block%!32=12 "Wimp_CreateIcon",,Block% Handle% =Handle% LibIconBarInstall LibLoadTemplates(".Templates") OpenWindow(WinH%) Flags% Block%!0=WinH% "Wimp_GetWindowState",,Block% Flags%=Block%!32 (Flags%>>16) Block%!4 = 1000 Block%!8 = 0 Block%!12 = 3000 Block%!16 = 1000 Block%!20 = 0 Block%!24 = 0 Block%!28 = -1 "Wimp_OpenWindow",,Block% WinOpened(WinH%) Block%!0=WinH% "Wimp_GetWindowState",,Block% Flags%=Block%!32 Cond%=(Flags%>>16) Cond%=1 WinOpened(HPlayWin%) Update VUs Block%!0=HVUs% Block%!4=0 Block%!8=-200 Block%!12=OWCell%*4 Block%!16=0 "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 "QTM_ReadVULevels",1 VU1% "QTM_ReadVULevels",2 VU2% "QTM_ReadVULevels",3 VU3% "QTM_ReadVULevels",4 VU4% Flag% OX%,OY% DrawVUs "Wimp_GetRectangle",,Block% Flag% VModify%= OInitQTMPlay%= ReInitQTMMod UpdatePlayPosition DrawVUs ORIGIN OX%,OY% 128,0,0,0 C%=VU1%/64*255 A%=VCurPlayEvent%/64*255 255,C%,0 RECTANGLE FILL -OWCell%/2*(VU1%/64)+OWCell%/2,-100,OWCell%*(VU1%/64),100 0,-100,OWCell%,VU1%/64*100 C%=VU2%/64*255 255,C%,0 OWCell%,-100,OWCell%,VU2%/64*100 C%=VU3%/64*255 255,C%,0 OWCell%*2,-100,OWCell%,VU3%/64*100 C%=VU4%/64*255 255,C%,0 OWCell%*3,-100,OWCell%,VU4%/64*100 0,255,255,255 OWCell%,0,OWCell%,-100 OWCell%*2,0,OWCell%*2,-100 OWCell%*3,0,OWCell%*3,-100 RLibLoadTemplates ( HStore%= LibWindowTemplate("Store") ) PaneIconFlags%=!(TemplBuffer%+88+16) * PaneIconString%=!(TemplBuffer%+88+24) ( HPaneH%= LibWindowTemplate("PaneH") ( HPaneV%= LibWindowTemplate("PaneV") , HSplData%= LibWindowTemplate("SplData") * HParams%= LibWindowTemplate("Params") Adr%=TemplBuffer%+88+32*51 X1NoteBBox%=!(Adr%) Y1NoteBBox%=!(Adr%+4) X2NoteBBox%=!(Adr%+8) Y2NoteBBox%=!(Adr%+12) , HSamples%= LibWindowTemplate("Samples") Adr%=TemplBuffer%+88+32*14 X1Spl%=!(Adr%) Y1Spl%=!(Adr%+4) X2Spl%=!(Adr%+8) Y2Spl%=!(Adr%+12) . HSongInfo%= LibWindowTemplate("SongInfo") & HCopy%= LibWindowTemplate("Copy") & HSave%= LibWindowTemplate("Save") , HPatSave%= LibWindowTemplate("PatSave") + HInfo%= LibWindowTemplate("PULSEInfo") , HOptions%= LibWindowTemplate("Options") . HSequence%= LibWindowTemplate("Sequence") , HPlayWin%= LibWindowTemplate("PlayWin") & HPlay%= LibWindowTemplate("Play") 0 HFXControl%= LibWindowTemplate("FXControl") $ HVUs%= LibWindowTemplate("VUs") Writable(IconH%) Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% =Block%!28 PollCloseWindow WinH%=Block%!0 ! Entry%= HandleToEntry(WinH%) Entry%=-1 WinH% HSamples% LibCloseWindow(WinH%) LibCloseWindow(HSplData%) HPlayWin% ClosePlayWindow LibCloseWindow(WinH%) Shell windows ClosePattern(WinH%) EndDrag Send message to filer "Wimp_GetPointerInfo",,Block% WinH%=Block%!12 Block%!0=100 Block%!12=0 Block%!16=1 : DataSave Block%!20=WinH% $(Block%+44)="" Block%?(44+12)=0 "Wimp_SendMessage",17,Block%,WinH% *********************************************MouseClick**************************************** PollMouseClick X%=Block%!0 Y%=Block%!4 MX%=X% MY%=Y% Mouse%=Block%!8 WinH%=Block%!12 IconH%=Block%!16 WinH% -2 : IconBar Mouse% 4 : Select VModuleState%= L& Advice user to drag a module Block%!0=0 Error%=%100100000101 ON $(Block%+4)="Drag an AMIGA module to this icon to edit it, simple no?" PE "Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1 ,OK% LibOpenWindow(HPlay%) 1 : Adjust VModuleState%= OpenPlayWindow( 2 : Menu VModuleState%= ZP EditEntry%=-1 LibMDisable(MPIconBar%,1) LibMEnable(MPIconBar%,1) [! LibMEnable(MPIconBar%,2) \! LibMEnable(MPIconBar%,3) ]! LibMEnable(MPIconBar%,4) ^! LibMEnable(MPIconBar%,5) _! LibMEnable(MPIconBar%,7) a" LibMDisable(MPIconBar%,1) b" LibMDisable(MPIconBar%,2) c" LibMDisable(MPIconBar%,3) d" LibMDisable(MPIconBar%,4) e" LibMDisable(MPIconBar%,5) f" LibMDisable(MPIconBar%,7) CheckTick(HParams%,1) CheckTick(HSamples%,2) CheckTick(HSongInfo%,3) CheckTick(HPlay%,4) CheckTick(HSequence%,5) m CheckTick(HFXControl%,6) CheckTick(HPlayWin%,7) o2 "Wimp_CreateMenu",,MPIconBar%,MX%-64,650 p CurrentMenu%=MENUIconBar% HInfo% Nothing HParams% HParams% Entry%=EditEntry% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=Block%!4 Y%=Block%!16 IconH% IDPPFX% Effect POPUP Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% "Wimp_CreateMenu",,MPEffects%,X%+Block%!16,Y%+Block%!20 CurrentMenu%=MENUEffects% IDPPSpl% SampleList POPUP Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% "Wimp_CreateMenu",,MPSamples2%,X%+Block%!16,Y%+Block%!20 CurrentMenu%=MENUSamples% IDNbSpl% Open EditSample window. ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) UpdateSampleInfo(Sample%) OpenSamples( Sequence EnableIcon(37) Pattern button isn't writable Block%!0=WinH% Block%!4=46 ! Block%!8=(0<<15) (1<<12) " Block%!12=(1<<15) (1<<12) "Wimp_SetIconState",,Block% "Wimp_SetCaretPosition",WinH%,37,0,0,-1,-1 Pattern DisableIcon(37) Pattern button is writable Block%!0=WinH% Block%!4=46 Block%!8=1<<15 Block%!12=1<<15 "Wimp_SetIconState",,Block% "Wimp_SetCaretPosition",WinH%,46,0,0,-1,-1 No note Note%=0 Sample%=0 Pitch%=&6B0 Effect%=0 PitchEffect%=0 StoreParams % UpdateNote(EditEntry%,Note%) UpdateShell(Note%) New note=0 ! UpdateNote(EditEntry%,0) UpdateShell(Note%) Decrement Increment No Pitch ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Pitch%=0 4 PitchEffect%=PitchEffect1%<<8 PitchEffect2% StoreParams UpdateNote(EditEntry%,Note%) UpdateShell(Note%) IconH%>=IDKeybrd% IconH%<=IDKeybrd%+12 ) Cursor%=Windows%(Entry%,WCursor%) 0 SYS "QTM_PlaySample",1,10,IconH%-12,64 New sample pitch W ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Pitch%<>0 b%=-1 b%+=1 XPitch%(b%)=Pitch% b%=b% b%=2 a%=IconH%-IDKeybrd% Pitch%=XPitch%(a%+b%*12) StoreParams % UpdateNote(EditEntry%,Note%) IconH%>=IDKeybrd%+12 IconH%<=IDKeybrd%+12+5 New octave pitch W ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Pitch%<>0 b%=-1 b%+=1 XPitch%(b%)=Pitch% b%=b% b%=0 a%=IconH%-IDKeybrd%-12 Pitch%=XPitch%(b%+a%*12) StoreParams % UpdateNote(EditEntry%,Note%) UpdateShell(Note%) HPlay% HPlay% IconH% 16 : Rewind SYS "QTM_Pos",-1,-1 TO Seq%,Event% Seq%=VCurPlaySeq% Event%=VCurPlayEvent% Mouse%=4 Event%-=1 Seq%-=1 : Event%=0 Event%<0 Event%=63 : Seq%-=1 Seq%<0 Seq%=0 : Event%=0 SetPlayPosition(Seq%,Event%) PlayLine(Seq%,Event%) 18 : Forwind SYS "QTM_Pos",-1,-1 TO Seq%,Event% Seq%=VCurPlaySeq% Event%=VCurPlayEvent% Mouse%=4 Event%+=1 Seq%+=1 : Event%=0 Event%>63 Event%=0 : Seq%+=1 Seq%>=NbSeq% Seq%=NbSeq%-1 SetPlayPosition(Seq%,Event%) PlayLine(Seq%,Event%) 17 : Pause/Play Mouse% 6 4 : VPlayStatus%= PauseMod StartMod 2 : StopMod ? 1 : SetPlayPosition(LastSeq%,LastEvent%) : StartMod 14 : Follow edit cursor VPlayEdit%= VPlayEdit%= VPlayEdit%= 10 : Tempo button: open writable menu Entry%=EditEntry% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=Block%!4 Y%=Block%!16 Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% x%=Block%!8 y%=Block%!20 CreateWritableMenu(x%+X%,y%+Y%,"Set new tempo value",VCurSpeed%) MenuBlock%!0=1 Pattern number !/ NewPattern( SeqToPattern(VCurPlaySeq%)) Channels % IconH%>=4 IconH%<=7 C%=IconH%-3 ' IconState(IconH%)= (# "QTM_RestoreChannel",C% )1 VOChPlayState%(C%-1)=VChPlayState%(C%-1) VChPlayState%(C%-1)=1 UpdatePlayPosition , -" "QTM_RemoveChannel",C% .1 VOChPlayState%(C%-1)=VChPlayState%(C%-1) VChPlayState%(C%-1)=0 UpdatePlayPosition HOptions% HOptions% WinH%=HOptions% IconH% 4 : Update CheckOptions 3 : Save options Block%!0=OQuickDraw% Block%!4=OPaneVoice% Block%!8=OPaneSeq% Block%!12=OCursor% Block%!16=OWCell% Block%!20=OHCell% C2 Save(Block%,24,".Options",&FFD) HSamples% HSamples% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=Block%!4 Y%=Block%!16 IconH% Effect POPUP Block%!0=WinH% Block%!4=IconH% S% "Wimp_GetIconState",,Block% UA "Wimp_CreateMenu",,MPSamples%,X%+Block%!16,Y%+Block%!20 V" CurrentMenu%=MENUSamplesII% 16 : Update data information for this sample. S%=CurrentEditSample%-1 Sample$=$ Writable(2) Sample$= Sample$,22) $Block%=Sample$ No end char! P%=SampleInfo%+S%*30 a%=0 P%?a%=Block%?a% Finetune value e Adr%=SampleInfo%+S%*30+24 V%= Writable(13)) V%<-128 V%>128 ?Adr%=V% Volume k Adr%=SampleInfo%+S%*30+25 V%= Writable(10)) V%<0 V%>64 ?Adr%=V% Repeat offset q Adr%=SampleInfo%+S%*30+26 V%= Writable(6))/2 ?Adr%=(V%>>8) Adr%+=1 ?Adr%=V% Repeat length x Adr%=SampleInfo%+S%*30+28 V%= Writable(8))/2 ?Adr%=(V%>>8) Adr%+=1 ?Adr%=V% &FF UpdateMenuSamples No data button SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) Length%<>0 5 Delete data sample: needs user confirmation Block%!0=0 Error%=%100100000111 E $(Block%+4)="Delete data sample n (CurrentEditSample%)+"?" E "Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1 ,OK% OK%=1 2 Adr%= SearchAdrSample(CurrentEditSample%) # MoveMemory(Adr%,-Length%) S%=CurrentEditSample%-1 " P%=(SampleInfo%+S%*30)+22 P%!0=0 P%!4=0 . UpdateSampleInfo(CurrentEditSample%) UpdateMenuSamples SamplesLength%-=Length% SongInfo Advice user to drag Block%!0=0 Error%=%100100000101 R $(Block%+4)="To register this sample, just drag a sample file to the icon" E "Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1 ,OK% No repeat NewSplRepeat(0,0) End repeat SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) NewSplRepeat(RepeatO%,Length%-RepeatO%) Test sample pitch. VModify%= ReInitQTMMod PauseMod Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% W%=Block%!16-Block%!8 # x%=(MX%-X%-Block%!8)/W%*35+1 "QTM_RestoreChannel",1 "QTM_Stereo",1,0 "QTM_PlaySample",1,CurrentEditSample%,x%,64 Export a sample StartDrag(DRAGSample%,"file_ffd") Export group of samples StartDrag(DRAGAllSamples%,"package") HSplData% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=MX%-Block%!4+Block%!20 SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) NRepeatO%=RepeatO% NRepeatL%=RepeatL% Mouse% Set Repeat offset NRepeatO%=X%/2 " NRepeatO%=(NRepeatO% 2)*2 . NRepeatL%=(RepeatL%+RepeatO%)-NRepeatO% NRepeatL%<0 NRepeatL%=10 Set Repeat end (length) NRepeatL%=X%/2-RepeatO% NRepeatL%<0 NRepeatO%=NRepeatO%+NRepeatL%-10 : NRepeatL%=10 NewSplRepeat(NRepeatO%,NRepeatL%) HSongInfo% HSongInfo% IconH% 11 : Open sequence table OpenWindow(HSequence%) Update TrackName$=$ Writable(0) $Module%=TrackName$ HSequence% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=MX%-Block%!4+Block%!20 # Y%=-(MY%-Block%!16+Block%!24) Seq%=Y% Pat%=?(MemSequence%+Seq%) Mouse% NewPattern(Pat%) / Title$="Pattern for sequence n (Seq%) CreateWritableMenu(MX%,MY%,Title$,Pat%) MenuBlock%!0=0 MenuBlock%!8=Seq% HFXControl% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=MX%-Block%!4+Block%!20 # Y%=-(MY%-Block%!16+Block%!24) FX%=Y% Mouse% "QTM_EffectControl",-1 State%,SubState% FX%>=&E FX%<=(&E+&F) Extended effects RFX%=(&E<<4)+(FX%-&E) ( FXState%=(SubState%>>(FX%-&E)) Effect%=&E P1%=(FX%-&E) Normal effects ) FX%=&F+&F RFX%=&F RFX%=FX% RFX%=&F Effect%=&F A%=15 Effect%=FX% A%=FX% FXState%=(State%>>A%) P1%=0 S%=1-FXState% "QTM_EffectControl",RFX%,S% Y%=-(FX%+1)*CHIcons% "Wimp_ForceRedraw",HFXControl%,0,Y%,500,Y%+CHIcons% Give help on this effect HCopy% Copy options buttons update in real time. IconH%>=6 IconH%<=9 : Swap origin and destination block OCopyMode%=IconH%-6 IconH%=10 : Copy! HPatSave% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=Block%!4 Y%=Block%!16 Save pattern IconH% 1 : Pattern DragBlock%!0=0 ,* StartDrag(DRAGPattern%,"File_ffd") 2 : Group .) StartDrag(DRAGAllPats%,"Package") HSave% Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=Block%!4 Y%=Block%!16 IconH% 1 : Drag 9( StartDrag(DRAGTrack%,"File_001") 3 : Path$=$ Writable(2) ModulePath$=Path$ >- Save(Module%,ModuleLength%,Path$,001) HPlayWin% B Block%!0=WinH% "Wimp_GetWindowState",,Block% E* X%=(X%-Block%!4+Block%!20) OWCell% F, Y%=-(Y%-Block%!16+Block%!24) OHCell% Seq%=Y% Event%=Y% SetPlayPosition(Seq%,Event%) PlayLine(Seq%,Event%) Shell windows OldEntry%=EditEntry% No shell window before: OldEntry%=-1 Set Wimp caret on the new shell window. S" Entry%= HandleToEntry(WinH%) Block%!0=WinH% "Wimp_GetWindowState",,Block% X%=X%-Block%!4+Block%!20 X" Y%=-(Y%-Block%!16+Block%!24) Y* NewCursor%=X%/OWCell%+Y% OHCell%*4 Mouse% 4 : Select button xN%=NewCursor% yN%=NewCursor% VPlayEdit%= Update edit cursor d% NewCursor(Entry%,NewCursor%) Set play position Problem h2 Seq%= PatToSeq(Windows%(Entry%,WPattern%)) i" SetPlayPosition(Seq%,yN%) PlayLine(Seq%,yN%) k 1 : New block defined from cursor to right button. n' Start%=Windows%(Entry%,WCursor%) o> NewBlock(Windows%(Entry%,WPattern%),Start%,NewCursor%) 2 : Menu r3 NewCursor(Entry%,Windows%(Entry%,WCursor%)) sN BlockPattern%=-1 LibMDisable(MPShell%,3) LibMEnable(MPShell%,3) tK EditEntry%=-1 LibMDisable(MPShell%,4) LibMEnable(MPShell%,4) u- "Wimp_CreateMenu",,MPShell%,MX%,MY% CurrentMenu%=MPShell% MenuBlock%!0=Entry% InitMode "Wimp_ReadSysInfo",1 WIMPMode% XScreen%=WIMPMode%!4 YScreen%=WIMPMode%!8 XS%=XScreen% YS%=YScreen% PollMessage Block%!16 &400C0 : Menu warning "Wimp_CreateSubMenu",,Block%!20,Block%!24,Block%!28 &400C1 : ModeChange InitMode ChangeMode%= 0 : Quit DataLoad WinH%=Block%!20 IconH%=Block%!24 S%=Block%+44 N%=S% N%+=1 ?N%=0 ?N%=&0D Path$=$S% WinH% HSamples% WinH%=HSamples% IconH%=15 8 Replace the old sample by the new one dropped. " Block%!16=4 : DataLoadAck ) "Wimp_SendMessage",18,Block%,0 M SampleInfo(CurrentEditSample%,OldLength%,RepeatO%,RepeatL%,DV%,FTV%) + NewLength%= LibGetFileLength(Path$) 1 Adr%= SearchAdrSample(CurrentEditSample%) / MoveMemory(Adr%,NewLength%-OldLength%) Load(Adr%,Path$) S%=CurrentEditSample%-1 ! P%=(SampleInfo%+S%*30)+22 A%=NewLength%/2 $ P%!0=(A% &FF)<<8 (A%>>8) P%!4=0 P%?3=64 - UpdateSampleInfo(CurrentEditSample%) UpdateMenuSamples - SamplesLength%+=NewLength%-OldLength% SongInfo -2 : Icon bar Load a new module ! Block%!16=4 : DataLoadAck "Wimp_SendMessage",18,Block%,0 LoadModule(Path$) # Entry%= HandleToEntry(WinH%) Entry%<>-1 Load a pattern " Block%!16=4 : DataLoadAck ) "Wimp_SendMessage",18,Block%,0 ' Pat%=Windows%(Entry%,WPattern%) P%= PatToMem(Pat%) 3 "OS_File",13,Path$,,,Path$ ,,,,Length% Length%=1024 Load(P%,Path$) LibUpdateWindow(WinH%) 2 : DataSaveAck DragCase% DRAGSample% Save sample data N%=Block%+44 N%+=1 ?N%=0 ?N%=&0D Path$=$(Block%+44) SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) 0 Adr%= SearchAdrSample(CurrentEditSample%) Save(Adr%,Length%,Path$+"Sample"+ (CurrentEditSample%),&ffd) DRAGAllSamples% Export all 31 samples in a directory N%=Block%+44 N%+=1 ?N%=0 ?N%=&0D Path$=$(Block%+44) Create directory Dir$=Path$+"ModSamples" "OS_File",8,Dir$,,,0 S%=1 : SampleInfo(S%,Length%,RepeatO%,RepeatL%,DV%,FTV%) Length%<>0 " Adr%= SearchAdrSample(S%) 6 Save(Adr%,Length%,Dir$+".Sample"+ (S%),&ffd) DRAGTrack% Save track file S%=Block%+44 N%=S% N%+=1 ?N%=0 ?N%=&0D ' Leaf$= GetLeafPath(ModulePath$) ModulePath$=$S%+Leaf$ WinH%=HSave% LibSetIconText2(2,ModulePath$) Save(Module%,ModuleLength%,ModulePath$,001) DRAGPattern% S%=Block%+44 N%=S% N%+=1 ?N%=0 ?N%=&0D 9 Pat%=Windows%(EditEntry%,WPattern%) : DragBlock%!0 Path$=$S%+"Pat"+ (Pat%) # Pattern%=Patterns%+1024*Pat% Save(Pattern%,64*4*4,Path$,&ffd) DRAGAllPats% S%=Block%+44 N%=S% N%+=1 ?N%=0 ?N%=&0D Path$=$S% Create directory Dir$=Path$+"ModPats" "OS_File",8,Dir$,,,0 Pat%=0 NbPat% Adr%= PatToMem(Pat%) 2 Save(Adr%,1024,Dir$+".Pat"+ (Pat%),&ffd) ! **********************************Redraw***************************** NewSplRepeat(NRepeatO%,NRepeatL%) VModify%= SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) , NRepeatO%=(NRepeatO% 2)*2 - NRepeatL%=(NRepeatL% 2)*2 XRepeatO%=RepeatO% XRepeatL%=RepeatL% Block%!0=HSplData% "Wimp_GetWindowState",,Block% XMin%=Block%!20/2 4+ XMax%=(Block%!12-Block%!4+Block%!20)/2 OX%=Block%!4 OY%=Block%!16 7 Block%!0=HSplData% Block%!4=0 Block%!8=-1000 Block%!12=Length%*2 Block%!16=0 "Wimp_UpdateWindow",,Block% Flag% Flag% OX%,OY% Erase previous repeat block RepeatO%=XRepeatO% RepeatL%=XRepeatL% DrawRepeatBlock Draw new repeat block RepeatO%=NRepeatO% RepeatL%=NRepeatL% DrawRepeatBlock "Wimp_GetRectangle",,Block% Flag% S%=CurrentEditSample%-1 WinH%=HSamples% Repeat offset Adr%=SampleInfo%+S%*30+26 LibSetIconText2(6, (RepeatO%)) V%=RepeatO%/2 ?Adr%=(V%>>8) Adr%+=1 ?Adr%=V% Repeat length Adr%=SampleInfo%+S%*30+28 LibSetIconText2(8, (RepeatL%)) V%=RepeatL%/2 ?Adr%=(V%>>8) Adr%+=1 ?Adr%=V% DrawAllSeqPat(Seq%) Pat%= SeqToPattern(Seq%) S%=0 NbSeq% Pat%=?(MemSequence%+S%) 3,100,0,0 i# 100,-(S%+1)*50,500,50 PollRedraw WinH%=Block%!0 WinH% HSequence% "Wimp_RedrawWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 OHSeq%=50 Flag% y6 YMin%=-(Block%!40-Block%!16+Block%!24) OHSeq% z5 YMax%=(Block%!16-Block%!32-Block%!24) OHSeq% Y%=-YMin%*(OHSeq%) S%=YMin% YMax% Y%-=OHSeq% ~7 PlotIcon(0,Y%,100,OHSeq%, (S%),PaneIconFlags%) " Pat$= (?(MemSequence%+S%)) E PlotIcon(100,Y%,200,OHSeq%,"Pattern n "+Pat$,PaneIconFlags%) OX%,OY% 3,100,0,0 0,-(VCurPlaySeq%+1)*50,100,50 DrawAllSeqPat(VCurPlaySeq%) "Wimp_GetRectangle",,Block% Flag% HFXControl% "Wimp_RedrawWindow",,Block% Flag% HFX%=50 Flag% 4 YMin%=-(Block%!40-Block%!16+Block%!24) HFX% 3 YMax%=(Block%!16-Block%!32-Block%!24) HFX% Y%=-YMin%*HFX% "QTM_EffectControl",-1 State%,SubState% FX%=YMin% YMax% Y%-=HFX% " FX%>=&E FX%<=(&E+&F) Extended effects RFX%=(&E<<4)+(FX%-&E) ) FXState%=(SubState%>>(FX%-&E)) Effect%=&E P1%=(FX%-&E) Normal effects . FX%=&F+&F RFX%=&FF RFX%=FX%<<4 RFX%=&FF Effect%=&F A%=15 Effect%=FX% A%=FX% FXState%=(State%>>A%) P1%=0 Effects(Effect%,P1%,0) Icon%=PaneIconFlags% I FXState%=0 Icon%=(PaneIconFlags% (%1111<<24)) (11<<24) ; PlotIcon(0,Y%,500,HFX%, ~(RFX%)+"."+LongFX$,Icon%) "Wimp_GetRectangle",,Block% Flag% HSplData% Block%!0=WinH% "Wimp_GetWindowState",,Block% XMin%=Block%!20/2 , XMax%=(Block%!12-Block%!4+Block%!20)/2 OX%=Block%!4 OY%=Block%!16 "Wimp_RedrawWindow",,Block% Flag% SampleInfo(CurrentEditSample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) / Adr%= SearchAdrSample(CurrentEditSample%) Flag% - XL%=(Block%!28-Block%!4+Block%!20)/2 - XR%=(Block%!36-Block%!4+Block%!20)/2 OX%,OY% D%=(XR%-XL%) Length%0 0,0,0 Scale=1/128*CenterYSpl% P%=0 A%=?(Adr%+P%+XL%) S%=(A%>>7) A%=A% %1111111 S%=1 A%=A%-128 @ (O%+P%)*2,CenterYSpl%,(O%+P%)*2,-A%*Scale+CenterYSpl% 0,255,0,0 0,CenterYSpl%,X2Spl%-X1Spl%,CenterYSpl% Length%<>0 DrawRepeatBlock ! Length%200 Seq$= (SeqMax%) (Seq$) 1 : A%=1000 2 : A%=500 3 : A%=500 < "Font_FindFont",,"Homerton.Medium",A%,A%,0 Font% ![ "ColourTrans_SetFontColours",0,0<<24 0<<16 0<<8,255<<24 100<<16 100<<8,14 "7 "Font_Paint",Font%,Seq$,&11 1<<8,OX%,OY%-50 $% Pat$= SeqToPattern(SeqMax%)) (Pat$) 1 : A%=1000 2 : A%=500 3 : A%=500 *< "Font_FindFont",,"Homerton.Medium",A%,A%,0 Font% +[ "ColourTrans_SetFontColours",0,0<<24 0<<16 0<<8,255<<24 100<<16 100<<8,14 ,E "Font_Paint",Font%,Pat$,&11 1<<8,OX%+4*OWCell%-100,OY%-50 SeqMin%SeqMin% THEN FX%,FY% HH DrawPlayPosition(VCurPlayEvent%+VCurPlaySeq%*64,VChPlayState%()) I K- "Wimp_GetRectangle",,Block% Flag% Shell windows ShellRedraw R& Pat%= SeqToPattern(VCurPlaySeq%) S" PlayEntry%= PatToEntry(Pat%) PlayEntry%<>-1 U` WinH%=Windows%(PlayEntry%,WHShell%) DrawPlayPosition(VCurPlayEvent%,VChPlayState%()) PlotIcon(x1%,y1%,w%,h%,String$,IconFlags%) $String%=String$ String%?( (String$))=&0D IconBlock%!0=x1% IconBlock%!4=y1% IconBlock%!8=x1%+w% IconBlock%!12=y1%+h% IconBlock%!16=IconFlags% IconBlock%!20=String% f" IconBlock%!24=PaneIconString% IconBlock%!28= (String$) "Wimp_PlotIcon",,IconBlock% PollOpenWindow WinH%=Block%!0 WinH% HSamples% OpenSamples( HSplData% "Wimp_OpenWindow",,Block% HPlayWin% OpenPlayWindow( "Wimp_OpenWindow",,Block% SetPanes OPaneSeq%= Block2%!0=HPaneV% "Wimp_GetWindowState",,Block2% Block2%!4=Block%!4 Block2%!8=Block%!8 Block2%!12=Block%!4+100 Block2%!16=Block%!16 Block2%!20=0 Block2%!24=Block%!24 Block2%!28=HShell% "Wimp_OpenWindow",,Block2% OPaneVoice%= Block2%!0=HPaneH% "Wimp_GetWindowState",,Block2% Block2%!4=Block%!4+100 Block2%!8=Block%!16-100 Block2%!12=Block%!12 Block2%!16=Block%!16 Block2%!20=Block%!20 Block2%!24=0 Block2%!28=HPaneV% "Wimp_OpenWindow",,Block2% Block%!28=HPaneH% "Wimp_OpenWindow",,Block% SetExtent(Entry%,WkX%,WkY%) OPaneSeq%= OX%=50 OX%=0 OPaneVoice%= OY%=-50 OY%=0 Block%!0=OX% Block%!4=-WkY%+OY% Block%!8=WkX%+OX% Block%!12=OY% "Wimp_SetExtent",Windows%(Entry%,WHShell%),Block% ' Block%!0=Windows%(Entry%,WHShell%) "Wimp_GetWindowState",,Block% "Wimp_OpenWindow",,Block% Block2%!0=0 Block2%!4=OY% Block2%!8=WkX%-OX% Block2%!12=0 SYS "Wimp_SetExtent",Windows%(Entry%,WHPaneH%),Block2% Block2%!0=0 Block2%!4=-WkY% : Block2%!8=100 Block2%!12=OY% SYS "Wimp_SetExtent",Windows%(Entry%,WHPaneV%),Block2% MemoryInit String% 255 Block2% 500 Icon% 50 TemplBuffer% 3024*2 Windows(100,50) Windows%(100,50) Windows$(100,3) Win% 500 MenuBlock% 500 ******************************Key pressed*************************** KeyPressed WinH%=Block%!0 IconH%=Block%!4 WinH% HParams% Index%=Block%!20 IconH% IDVal1%,IDVal2% : DirectInput(IconH%) HPlay% IconH% 10 : Speed tempo HSave% IconH% Path Path$= Writable(2) Valid path? ModulePath$=Path$ Save(Module%,ModuleLength%,ModulePath$,001) HSamples% Shell windows Entry%=FNHandleToEntry(WinH%) Entry%=EditEntry% EditEntry%=-1 ' Cursor%=Windows%(Entry%,WCursor%) CC%=Block%!24 CC%>=&18C CC%<=&18E X%=Cursor% Y%=Cursor% Let's clear the old cursor position F OldNote%=!(Patterns%+Cursor%*4+1024*Windows%(Entry%,WPattern%)) RedrawCursor( ,Entry%) CC% &18C Left X%-=1 X%<0 X%=0 &18D Right X%+=1 X%>3 X%=3 &18F Y%-=1 Y%<0 Y%=0 &18E Down Y%+=1 Y%>63 Y%=63 &19E Page down &19F Page up ( A Numeric key has been pressed Cursor%=X%+Y%*4 F NewNote%=!(Patterns%+Cursor%*4+1024*Windows%(Entry%,WPattern%)) Block%!0=HShell% "Wimp_GetWindowState",,Block% X1%=Block%!4+Block%!20 Y1%=Block%!8-Block%!24 X2%=Block%!12+Block%!20 Y2%=Block%!16-Block%!24 PageW%=Block%!12-Block%!4 ! PageH%=Block%!16-Block%!8 A%=X%*OWCell% B%=Y%*OHCell% &# A%X2% Block%!20+=PageW% (# B%Y2% Block%!24-=PageH% +& SYS "Wimp_OpenWindow",,Block% -( Windows%(Entry%,WCursor%)=Cursor% /- Let's update the new cursor position RedrawCursor( ,Entry%) 2# UpdateNote(Entry%,NewNote%) CC%=&181 : CC%=&07F : Delete DeleteBlock "Wimp_ProcessKey",CC% ********************************END: KeyPressed********************** CreateMenus LibMenuInit CompactFlag%= Samples list menus MPSamples% 28+24*31+500 SamplesName% 50*31 MPSamples2% 28+24*31+500 SamplesName2% 50*31 Effect list menu MPEffects% 28+24*50 MenuPtr%=MPEffects% LibMenuHeader("Effects",100) LibMenuItem(0,-1,IconFlag%,"Arpeggio") LibMenuItem(0,-1,IconFlag%,"Pitch slide up") LibMenuItem(0,-1,IconFlag%,"Pitch slide down") LibMenuItem(0,-1,IconFlag%,"Tone portamento") LibMenuItem(0,-1,IconFlag%,"Vibrato") LibMenuItem(0,-1,IconFlag%,"Tone portamento + Volume slide") LibMenuItem(0,-1,IconFlag%,"Vibrato + Volume slide") LibMenuItem(0,-1,IconFlag%,"Tremolo") LibMenuItem(0,-1,IconFlag%,"Fine Pan Position *") LibMenuItem(0,-1,IconFlag%,"Set sample offset") LibMenuItem(0,-1,IconFlag%,"Volume slide") LibMenuItem(0,-1,IconFlag%,"Jump to sequence") LibMenuItem(0,-1,IconFlag%,"Set volume") LibMenuItem(0,-1,IconFlag%,"Pattern break") MSExtFX% 28+24*50 LibMenuItem(SubMenu%,MSExtFX%,IconFlag%,"Extended effects") LibMenuItem(Last%,-1,IconFlag%,"Set speed/tempo") Extended Effect list submenu MenuPtr%=MSExtFX% LibMenuHeader("Extended effects",100) LibMenuItem(0,-1,IconFlag%,"Set filter") LibMenuItem(0,-1,IconFlag%,"Fine pitch slide up") LibMenuItem(0,-1,IconFlag%,"Fine pitch slide down") LibMenuItem(0,-1,IconFlag%,"Set glissando control") LibMenuItem(0,-1,IconFlag%,"Set vibrato control") LibMenuItem(0,-1,IconFlag%,"Set fine tuning") LibMenuItem(0,-1,IconFlag%,"Pattern loop") LibMenuItem(0,-1,IconFlag%,"Set tremolo control") LibMenuItem(0,-1,IconFlag%,"Set pan position *") LibMenuItem(0,-1,IconFlag%,"Retrig note") LibMenuItem(0,-1,IconFlag%,"Fine volume slide up") LibMenuItem(0,-1,IconFlag%,"Fine volume slide down") LibMenuItem(0,-1,IconFlag%,"Note cut") LibMenuItem(0,-1,IconFlag%,"Note delay") LibMenuItem(0,-1,IconFlag%,"Pattern delay") LibMenuItem(Last%,-1,IconFlag%,"Invert loop") IconBar menu MPIconBar% 28+24*20 MenuPtr%=MPIconBar% LibMenuHeader("Pulse",100) LibMenuItem(SubMenu%+DotLine%,HInfo%,IconFlag%,"Info") LibMenuItem(0,-1,IconFlag%,"Note Edition") LibMenuItem(0,-1,IconFlag%,"Sample definition") LibMenuItem(0,-1,IconFlag%,"Song informations") LibMenuItem(0,-1,IconFlag%,"Play position") LibMenuItem(0,-1,IconFlag%,"SequenceTable") LibMenuItem(0,-1,IconFlag%,"QTM Effects control") LibMenuItem(0,-1,IconFlag%,"Play window") LibMenuItem(DotLine%,-1,IconFlag%,"Close all windows") LibMenuItem(0,-1,IconFlag%,"Options...") LibMenuItem(0,-1,IconFlag%,"Reinit QTM") LibMenuItem(Last%,-1,IconFlag%,"Quit") Shell menu MPShell% 28+24*20 MPSelect% 28+24*20 MenuPtr%=MPShell% LibMenuHeader("PULSE",100) LibMenuItem(SubMenu%,HSave%,IconFlag%,"Module...") LibMenuItem(SubMenu%,HPatSave%,IconFlag%,"Pattern...") LibMenuItem(SubMenu%,HCopy%,IconFlag%,"Copy Options...") LibMenuItem(SubMenu%,MPSelect%,IconFlag%,"Selection...") LibMenuItem(0,-1,IconFlag%,"Set play position") LibMenuItem(0,-1,IconFlag%,"Reinit QTM") LibMenuItem(Last%,-1,IconFlag%,"Clear pattern") MenuPtr%=MPSelect% LibMenuHeader("Selection",100) LibMenuItem(0,-1,IconFlag%,"Just forget") LibMenuItem(0,-1,IconFlag%,"Delete") LibMenuItem(SubMenu%,MPSamples2%,IconFlag%,"Change Sample") LibMenuItem(SubMenu%,MPEffects%,IconFlag%,"Change Effect") LibMenuItem(0,-1,IconFlag%,"Transpose") LibMenuItem(Last%,-1,IconFlag%,"Quit") For writable menus WritableMenuBlock% 28+20+100 MenuWrStr% 100 Effects menus Wave form MPVibrato% 28+24*10 MenuPtr%=MPVibrato% LibMenuHeader("Wave Form",100) LibMenuItem(0,-1,IconFlag%,"Sine") LibMenuItem(0,-1,IconFlag%,"Ramp down") LibMenuItem(Last%,-1,IconFlag%,"Square") Glissando control MPGlissando% 28+24*5 MenuPtr%=MPGlissando% LibMenuHeader("Glissando control",100) LibMenuItem(0,-1,IconFlag%,"On (smooth slide)") LibMenuItem(Last%,-1,IconFlag%,"Off (halftone to halftone)") MPPatBreak% 28+24*5 MenuPtr%=MPGlissando% LibMenuHeader("Pattern",100) LibMenuItem(0,-1,IconFlag%,"On") LibMenuItem(Last%,-1,IconFlag%,"Off") *************************UpdateMenuSamples*************************** UpdateMenuSamples ->CurrentEditSample% Edit samples Menu MenuPtr%=MPSamples% LibMenuHeader("Sample list",100) mem%=MenuPtr% N%=SamplesName% MenuFlag%=0 S%=0 S%=30 MenuFlag%=%010000000 SampleInfo(S%+1,Length%,RepeatO%,RepeatL%,DV%,FTV%) Name$= GetSampleName(S%+1) SIconFlag%=IconFlag% Name$+=" (No sample)" Length%=0 SIconFlag%=(IconFlag% (&FF<<24)) (11<<24) / Name$= (S%+1)+". "+Name$+" ^"+ (Length%) !mem%=MenuFlag% !(mem%+4)=-1 L%= (Name$) 2 !(mem%+8)=SIconFlag% (1<<8) : Indirected !(mem%+12)=N% !(mem%+16)=0 !(mem%+20)=L% $N%=Name$ ! N%?L%=&0D : End character N%+=L%+1 mem%+=24 Put left tick CurrentEditSample%<>-1 2 Adr%=MPSamples%+28+24*(CurrentEditSample%-1) !Adr%=(!Adr% Note menu samples. MenuPtr%=MPSamples2% LibMenuHeader("Sample list",100) mem%=MenuPtr% N%=SamplesName2% MenuFlag%=0 Name$="No sample" !mem%=MenuFlag% !(mem%+4)=-1 (Name$) L !(mem%+8)=((IconFlag% (&FF<<24)) (11<<24)) (1<<8) : Indirected !(mem%+12)=N% !(mem%+16)=0 !(mem%+20)=L% $N%=Name$ N%?L%=&0D : End character N%+=L%+1 mem%+=24 S%=0 S%=30 MenuFlag%=%010000000 / Length%=(!(SampleInfo%+S%*30+22)) &FFFF Name$= GetSampleName(S%+1) SIconFlag%=IconFlag% Length%=0 SIconFlag%=(IconFlag% (1<<22)) Name$= (S%+1)+". "+Name$ !mem%=MenuFlag% !(mem%+4)=-1 L%= (Name$) 2 !(mem%+8)=SIconFlag% (1<<8) : Indirected !(mem%+12)=N% !(mem%+16)=0 !(mem%+20)=L% $N%=Name$ ! N%?L%=&0D : End character N%+=L%+1 mem%+=24 Put left tick KCurrentNote%<>-1 ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) $ Adr%=MPSamples2%+28+24*Sample% !Adr%=(!Adr% 1)+1 *******************************Menu selection**************************** PollMenuSelection CurrentMenu% Note parameters MENUEffects% SelectEffect%=Block%!0 SubEffect%=Block%!4 ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Effect%=SelectEffect% PitchEffect1%=0 PitchEffect2%=0 Effect%=14 PitchEffect1%=SubEffect% 02 PitchEffect%=PitchEffect1%<<8 PitchEffect2% StoreParams UpdateNote(EditEntry%,Note%) UpdateShell(Note%) MENUSamples% Note parameters NSample%=Block%!0 ReturnParams(KCurrentNote%,OSample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Sample%=NSample% PitchEffect%=PitchEffect1%<<8 OR PitchEffect2% StoreParams UpdateNote(EditEntry%,Note%) UpdateShell(Note%) MENUSamplesII% Sample edition. S%=(Block%!0)+1 UpdateSampleInfo(S%) MENUIconBar% Block%!0 1 : Note edit OpenWindow(HParams%) OpenSamples( Window(HSamples%) OpenWindow(HSongInfo%) 4 : Play position OpenWindow(HPlay%) 5 : Sequence table OpenWindow(HSequence%) 6 : QTM FX Control OpenWindow(HFXControl%) 7 : Play window OpenPlayWindow( 8 : Hide all windows HideAllWins 9 : Options UpdateOptions OpenWindow(HOptions%) 10 : Reinit QTM module ReInitQTMMod MPShell% Entry%=Block%!0 Entry% 2 : Copy options OpenWindow(HCopy%) 3 : Selection Entry%=Block%!4 Entry% 0 : Just forget NoEditBlock 1 : Delete block DeleteBlock 2 : Change sample ChangeSample(Block%!8) 3 : Change effect ChangeFX(Block%!8) 4 : Set play position x. Event%=Windows%(EditEntry%,WCursor%) y4 Seq%= PatToSeq(Windows%(EditEntry%,WPattern%)) SetPlayPosition(Seq%,Event%) 5 : ReInitQTMMod 6 : Clear whole pattern 2 P%= PatToMem(Windows%(EditEntry%,WPattern%)) A%=0 1024 P%!A%=0 LibUpdateWindow(Windows%(EditEntry%,WHShell%)) WritableMenuBlock% AdrValue%=MenuBlock%!4 Value%= ($AdrValue%) MenuBlock%!0 0 : Sequence menu Pat%=Value% Seq%=MenuBlock%!8 Pat%<=NbPat% ?(MemSequence%+Seq%)=Pat% Y%=-(Seq%+1)*CHIcons% "Wimp_ForceRedraw",HSequence%,0,Y%,400,Y%+CHIcons% Block%!0=0 Error%=%100100000101 H $(Block%+4)="Illegal pattern number: increase number of patterns" "Wimp_ReportError",Block%,Error%,TaskName$,-1,-1,-1 ,OK% Tempo settings Value%>255 Value%=255 : "QTM_SetSpeed",Value% UpdateInfoPlayPosition ****************************UPDATE NOTE************************** UpdateNote(NewEntry%,NewNote%) Update note window regarding to NewNote% Update shell windows accordingly Sets VCurEditNote%=NewNote%,VCurEditEntry%=NewEntry% Note%,Octave% WinH%=HParams% OldEntry%=EditEntry% OldNote%=KCurrentNote% OldEntry%<>NewEntry% NewEntry%=-1 Close Edit note window Block%!0=HParams% "Wimp_CloseWindow",,Block% EditEntry%=-1 OldEntry%=-1 Open Edit note window OpenWindow(HParams%) NewNote%<>OldNote% ReturnParams(OldNote%,OSample%,OPitch%,OEffect%,OPitchEffect1%,OPitchEffect2%) OPitchEffect%=PitchEffect% ReturnParams(NewNote%,NSample%,NPitch%,NEffect%,NPitchEffect1%,NPitchEffect2%) NPitchEffect%=PitchEffect% NPitch%<>0 NPitch%<=&358 NPitch%>=&071 VPlayStatus%= "QTM_PlaySample",1,NSample%,NPitch%,64 OSample%<>NSample% NSample%<>0 % Name$= GetSampleName(NSample%) LibSetIconText2(IDNbSpl%, (NSample%)) LibSetIconText2(IDSplName%,Name$) LibSetIconText2(IDNbSpl%,"0") LibSetIconText2(IDSplName%,"No sample") Sample Note Menu Remove old tick % Adr%=MPSamples2%+28+24*OSample% !Adr%=!Adr% Tick to new sample % Adr%=MPSamples2%+28+24*NSample% !Adr%=(!Adr% OPitch%<>NPitch% WinH%=HParams% OPitch%>=&36 OPitch%<=&6B0 a%=-1 a%+=1 XPitch%(a%)=OPitch% XNote%=a% OOctave%=a% No pitch before XNote%=-1 OOctave%=-1 NPitch%>=&36 NPitch%<=&6B0 a%=-1 a%+=1 XPitch%(a%)=NPitch% NNote%=a% NOctave%=a% Note$="" A%=XNote%(a%) Note$+= ((A%>>24) &FF) Note$+= ((A%>>16) &FF) Note$+= ((A%>>8) &FF) LibSetIconText2(IDNote%,Note$) No pitch now NNote%=-1 NOctave%=-1 XNote%=-1 NNote%<>-1 DeselectIcon(35) : SelectIcon(IDKeybrd%+NNote%) : SelectIcon(IDKeybrd%+NOctave%+12) XNote%<>-1 NNote%<>-1 Z XNote%<>NNote% DeselectIcon(IDKeybrd%+XNote%) : SelectIcon(IDKeybrd%+NNote%) h OOctave%<>NOctave% DeselectIcon(IDKeybrd%+OOctave%+12) : SelectIcon(IDKeybrd%+NOctave%+12) " XNote%<>-1 AND NNote%=-1 ' DeselectIcon(IDKeybrd%+XNote%) , DeselectIcon(IDKeybrd%+OOctave%+12) SelectIcon(35) UpdatePitchEffect KCurrentNote%=NewNote% EditEntry%=NewEntry% UpdatePitchEffect -> NEffect%,NPitchEffect1%,NPitchEffect2%,OPitchEffect1%,OPitchEffect2% -> WinH% OEffect%<>NEffect% OPitchEffect%<>NPitchEffect% Update FX Menu Remove old tick $ Adr%=MPEffects%+28+24*OEffect% !Adr%=!Adr% Tick to new FX $ Adr%=MPEffects%+28+24*NEffect% !Adr%=(!Adr% P1%=IDPitch1% V1%=IDVal1% P2%=IDPitch2% V2%=IDVal2% OEffect%<>NEffect% '7 Effects(NEffect%,NPitchEffect1%,NPitchEffect2%) (* LibSetIconText2(IDFXName%,LongFX$) KFXType%=FXType% KFXType% .$ LibSetIconText2(P1%,Pitch1$) /$ LibSetIconText2(P2%,Pitch2$) 1. UndeleteIcon(P1%) : UndeleteIcon(V1%) 2. UndeleteIcon(P2%) : UndeleteIcon(V2%) 3( DeleteIcon(52) : DeleteIcon(51) KFXType% 8- LibSetIconText2(V1%, (NPitchEffect%)) : LibSetIconText2(V2%,"0") ;* EnableIcon(P1%) : EnableIcon(V1%) <, DisableIcon(P2%) : DisableIcon(V2%) ?* EnableIcon(P1%) : EnableIcon(V1%) @* EnableIcon(P2%) : EnableIcon(V2%) A/ IF OPitchEffect1%<>NPitchEffect1% THEN B/ LibSetIconText2(V1%, (NPitchEffect1%)) ENDIF D/ IF OPitchEffect2%<>NPitchEffect2% THEN E/ LibSetIconText2(V2%, (NPitchEffect2%)) ENDIF Popup J* DeleteIcon(P1%) : DeleteIcon(V1%) K* DeleteIcon(P2%) : DeleteIcon(V2%) L, UndeleteIcon(52) : UndeleteIcon(51) M. Text%=!(Menu%+28+24*PitchEffect1%+12) N' PROCLibSetIconText2(53,$Text%) Sub effect Q$ LibSetIconText2(P1%,Pitch1$) R. LibSetIconText2(V1%, (NPitchEffect2%)) S LibSetIconText2(V2%,"0") T* EnableIcon(P1%) : EnableIcon(V1%) U, DisableIcon(P2%) : DisableIcon(V2%) V$ LibSetIconText2(P2%,Pitch2$) ****************************END: UPDATE NOTE********************************************* SetIconText(WinHandle%,IconHandle%,S$) Block%!0=WinHandle% Block%!4=IconHandle% "Wimp_GetIconState",,Block% Block%!8=0 Block%!12=0 !!!!! Not documented in the PRM !!!!! $(Block%!28)=S$ "Wimp_SetIconState",,Block% FontInit A%=OWCell%/500*200 "Font_FindFont",,"Homerton.Medium",A%,A%,0 DigitFont% A%=OWCell%/500*150 "Font_FindFont",,"Corpus.Medium",A%,A%,0 EffectFont% Flag%=%0111 SYS "Font_MakeBitmap",,DigitFont%,A%,A%,0,0,Flag% SYS "Font_MakeBitmap",,EffectFont%,A%,A%,0,0,Flag% SetFontColour(R%,G%,B%) "ColourTrans_SetFontColours",0,0<<24 0<<16 0<<8,B%<<24 G%<<16 R%<<8,14 SongInfo NbVoices%=4 NbPat%=NbPatterns% WinH%=HSongInfo% LibSetIconText2(4, (NbPat%)) LibSetIconText2(13, (NbSamples%)) LibSetIconText2(7, (NbVoices%)) Tot. sample length LibSetIconText2(16, (SamplesLength%)) "OS_ConvertFileSize",ModuleLength%,String%,100 T%?0=&0D PROCLibSetIconText2(10,$String%) LibSetIconText2(10, (ModuleLength%)) TrackName$="" P%=Module% n%=0 TrackName$+= (?P%) P%+=1 n%+=1 n%=22 LibSetIconText2(0,TrackName$) IconState(IconH%) Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% IconFlags%=Block%!24 A%=(IconFlags%>>21) A%=1 SelectIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=1<<21 Block%!12=1<<21 "Wimp_SetIconState",,Block% DeselectIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=0<<21 Block%!12=1<<21 "Wimp_SetIconState",,Block% ReadOptions Load(Block%,".Options") OQuickDraw%=Block%!0 OPaneVoice%=Block%!4 OPaneSeq%=Block%!8 OCursor%=Block%!12 OWCell%=Block%!16 OHCell%=Block%!20 Width%=OWCell% Heigth%=OHCell% UpdateOptions WinH%=HOptions% OQuickDraw%= SelectIcon(1) SelectIcon(2) IF OPaneVoice%=TRUE THEN PROCSelectIcon(6) IF OPaneSeq%=TRUE THEN PROCSelectIcon(7) CASE OCursor% OF WHEN 0 : PROCSelectIcon(10) WHEN 1 : PROCSelectIcon(11) WHEN 2 : PROCSelectIcon(12) ENDCASE SetIconText(HOptions%,9, (OWCell%)) VModuleState%= StopMod InitQTM RestoreQTM "Wimp_CloseDown",TaskName$,"TASK" "OS_Exit" SampleInfo(Sample%, Length%, RepeatO%, RepeatL%, DV%, FTV%) $ Adr%=SampleInfo%+30*(Sample%-1) ! Length%=(!(Adr%+22)) &FFFF . Length%=Length%>>8 (Length%<<8) &FF00 Length%=Length%*2 " RepeatO%=(!(Adr%+26)) &FFFF 1 RepeatO%=RepeatO%>>8 (RepeatO%<<8) &FF00 RepeatO%=RepeatO%*2 " RepeatL%=(!(Adr%+28)) &FFFF 1 RepeatL%=RepeatL%>>8 (RepeatL%<<8) &FF00 RepeatL%=RepeatL%*2 DV%=?(Adr%+25) FTV%=?(Adr%+24) ReturnParams(Note%, Sample%, Pitch%, Effect%, PitchEffect1%, PitchEffect2%) <- PitchEffect% - Sample%=(Note% &F0) (Note%>>20 0 Pitch%=(Note%>>8 &FF) ((Note% &F)<<8) Effect%=(Note%>>16) # PitchEffect1%=(Note%>>28) # PitchEffect2%=(Note%>>24) Attention! # PitchEffect%=(Note%>>24) StoreParams -> Sample%,Pitch%,Effect%,PitchEffect% <- Note% No PitchEffect1% or PitchEffect2% Note%=0 7 Note%=Note% (Sample% &F)<<20 (Sample% &F0) 7 Note%=Note% (Pitch% &FF)<<8 (Pitch%>>8 Note%=Note% (Effect%<<16) % Note%=Note% (PitchEffect%<<24) DisableIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=1<<22 Block%!12=1<<22 "Wimp_SetIconState",,Block% EnableIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=0<<22 Block%!12=1<<22 "Wimp_SetIconState",,Block% DeleteIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=1<<23 Block%!12=1<<23 "Wimp_SetIconState",,Block% UndeleteIcon(IconH%) Block%!0=WinH% Block%!4=IconH% Block%!8=0<<23 Block%!12=1<<23 "Wimp_SetIconState",,Block% DrawBlock(Entry%,A%,B%) Entry%<>-1 X1%=(A% 4) * OWCell% Y2%=-(A% 4) * OHCell% 1 X2%=(B% 4 + 1) * OWCell% 2! Y1%=-(B% 4 + 1) * OHCell% 4( Block%!0=Windows%(Entry%,WHShell%) Block%!4=X1%-2 Block%!8=Y1%-2 Block%!12=X2%+2 Block%!16=Y2%+2 :, "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% A1 3,CurColor%(0),CurColor%(1),CurColor%(2) B$ X1%,Y1%,X2%-X1%,Y2%-Y1% D- "Wimp_GetRectangle",,Block% Flag% NoEditBlock J* Cursor%=Windows%(EditEntry%,WCursor%) K+ BlockEntry%= PatToEntry(BlockPattern%) SetBlockColor DrawBlock(BlockEntry%,EditStart%,EditEnd%) SetEditColor DrawBlock(EditEntry%,Cursor%,Cursor%+(EditEnd%-EditStart%)) BlockPattern%=-1 EditStart%=-1 EditEnd%=-1 NewBlock(NPattern%,NStart%,NEnd%) <- BlockPattern%,EditStart%,EditEnd%,EditEntry% "Wimp_SetCaretPosition",WinH%,-1,0,0,-1,-1 OEntry%=-1 Z# NEntry%= PatToEntry(NPattern%) OCursor%=-1 \( NCursor%=Windows%(NEntry%,WCursor%) OStart%=EditStart% OEnd%=EditEnd% _/ EditCursor%=Windows%(EditEntry%,WCursor%) BlockPattern%<>-1 b( OEntry%= PatToEntry(BlockPattern%) d9 OEntry%<>-1 OCursor%=Windows%(OEntry%,WCursor%) f0 OEntry%<>NEntry% NEntry%<>EditEntry% g0 Transform cursor in current edit cursor RedrawCursor( ,OEntry%) RedrawCursor( ,OEntry%) RedrawCursor( ,NEntry%) RedrawCursor( ,NEntry%) OCopyMode%<>2 p$ Erase previous origin block SetBlockColor r( DrawBlock(OEntry%,OStart%,OEnd%) s) Erase previous destination block SetEditColor uE DrawBlock(EditEntry%,EditCursor%,EditCursor%+(OEnd%-OStart%)) Duplicate mode x( DrawBlock(NEntry%,NStart%,NEnd%) OCopyMode%<>2 ~> Draw origin block + destination block at the same pos. SetBlockColor DrawBlock(NEntry%,NCursor%,NCursor%+(NEnd%-NStart%)) SetEditColor DrawBlock(NEntry%,NCursor%,NCursor%+(NEnd%-NStart%)) DrawBlock(NEntry%,NCursor%,NCursor%) BlockPattern%=NPattern% EditStart%=NStart% EditEnd%=NEnd% EditEntry%=NEntry% NewCursor(NEntry%,NCursor%) <- EditEntry%,Windows%(Entry%,WCursor%) Set new cursor position % WinH%=Windows%(NEntry%,WHShell%) "Wimp_SetCaretPosition",WinH%,-1,0,0,-1,-1 OEntry%=EditEntry% OCursor%=-1 OEntry%<>-1 ) OCursor%=Windows%(OEntry%,WCursor%) BlockPattern%<>-1 Erase old ghost block SetEditColor DrawBlock(OEntry%,OCursor%,OCursor%+(EditEnd%-EditStart%)) OEntry%<>NEntry% RedrawCursor( ,OEntry%) RedrawCursor( ,OEntry%) OEntry%<>NEntry% RedrawCursor( ,NEntry%) BlockPattern%<>-1 Draw new ghost block SetEditColor DrawBlock(NEntry%,NCursor%,NCursor%+(EditEnd%-EditStart%)) ( Windows%(NEntry%,WCursor%)=NCursor% RedrawCursor( ,NEntry%) F NewNote%=!(Patterns%+NCursor%*4+1024*Windows%(NEntry%,WPattern%)) UpdateNote(NEntry%,NewNote%) EditEntry%=NEntry% RedrawCursor(Current%,Entry%) Entry%=-1 & Cursor%=Windows%(Entry%,WCursor%) X%=Cursor% Y%=Cursor% ' Block%!0=Windows%(Entry%,WHShell%) Block%!4=X%*OWCell%+2-10 Block%!8=-OHCell%*(Y%+1)-10 $ Block%!12=X%*OWCell%+OWCell%+20 + Block%!16=-OHCell%*(Y%+1)+OHCell%+2+20 "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% Current%= 3,255,0,0 X%*OWCell%,-OHCell%*(Y%+1),OWCell%,OHCell% X%*OWCell%-2,-OHCell%*(Y%+1)-2,OWCell%+4,OHCell%+4 X%*OWCell%-4,-OHCell%*(Y%+1)-4,OWCell%+8,OHCell%+8 3,255,255,255 X%*OWCell%,-OHCell%*(Y%+1),OWCell%,OHCell% "Wimp_GetRectangle",,Block% Flag% NewPattern(Pat%) PROCUpdatePlayPosition NbEntry%>0 PatToEntry(Pat%)<>-1 NbEntry%+=1 Entry%= SearchEntry P%=TitlePat%+50*Entry% Title$="Pattern n (Pat%) $P%=Title$ New title TempPattern%!72=P% TempPattern%!76=0 % TempPattern%!80=5 : LEN(Title$) ?(P%+5)=&0 "Wimp_CreateWindow",,TempPattern% HShell% & Windows%(Entry%,WHPaneH%)=HPaneH% & Windows%(Entry%,WHPaneV%)=HPaneV% & Windows%(Entry%,WHShell%)=HShell% Windows%(Entry%,WCursor%)=0 - Windows%(Entry%,WFreeFlag%)=-1 : Locked $ Windows%(Entry%,WPattern%)=Pat% SetExtent(Entry%,OWCell%*4,64*OHCell%) Block%!0 = HShell% Block%!4 = 100 Block%!8 = 100 Block%!12 = 2000 Block%!16 = 1200 Block%!20 = 0 Block%!24 = 0 Block%!28 = -1 PROCSetPanes PROCOpenWindow(HShell%) Block%!0=HShell% Block%!4 = 0.1*XScreen%*2 Block%!8 = 0.1*YScreen%*2 Block%!12 = 0.9*XScreen%*2 Block%!16 = 0.9*YScreen%*2 Block%!20 = 0 Block%!24 = 0 Block%!28 = -1 "Wimp_OpenWindow",,Block% InitTempPattern TitlePat% 1000 : Win titles TempPattern% 500 "Wimp_OpenTemplate",,".Templates" "Wimp_LoadTemplate",,TempPattern%,TitlePat%,TitlePat%+500,-1,"Shell",0 "Wimp_CloseTemplate" ClosePattern(WinH%) ! Entry%= HandleToEntry(WinH%) IF Entry%<>-1 THEN # Windows%(Entry%,WFreeFlag%)=0 Block%!0=WinH% "Wimp_CloseWindow",,Block% Entry%=EditEntry% Disable note window. UpdateNote(-1,-1) IF Entry%=BlockEntry% THEN BlockEntry%=-1 Erase destination block ENDIF NbEntry%-=1 ENDIF PatToMem(Pat%) =Patterns%+1024*Pat% SearchEntry Entry% Entry%=-1 Entry%+=1 Windows%(Entry%,WFreeFlag%)=0 =Entry% HandleToEntry(WinH%) Entry%,Offset% Entry%=0 Offset%=0 Entry%=NbEntry% Windows%(Offset%,WFreeFlag%)=-1 34 Windows%(Offset%,WHShell%)=WinH% =Offset% Entry%+=1 Offset%+=1 PatToEntry(Pattern%) Entry%,Offset% Entry%=0 Offset%=0 Entry%=NbEntry% Windows%(Offset%,WFreeFlag%)=-1 @8 Windows%(Offset%,WPattern%)=Pattern% =Offset% Entry%+=1 Offset%+=1 SeqToPattern(S%) = ?(MemSequence%+S%) PatToSeq(P%) I A%=-1 A%+=1 ?(MemSequence%+A%)=P% UpdateSampleInfo(Sample%) "Wimp_SetCaretPosition",-1 Remove old menu tick CurrentEditSample%<>-1 S2 Adr%=MPSamples%+28+24*(CurrentEditSample%-1) !Adr%=!Adr% Tick to new sample W& Adr%=MPSamples%+28+24*(Sample%-1) !Adr%=(!Adr% CurrentEditSample%=Sample% [" Name$= GetSampleName(Sample%) Name$="*Untitled*" Name$="" WinH%=HSamples% LibSetIconText2(1, (Sample%)) : Sample number LibSetIconText2(2,Name$) SampleInfo(Sample%,Length%,RepeatO%,RepeatL%,DV%,FTV%) LibSetIconText2(4, (Length%)) LibSetIconText2(6, (RepeatO%)) LibSetIconText2(8, (RepeatL%)) LibSetIconText2(10, (DV%)) LibSetIconText2(13, (FTV%)) Length%=0 SelectIcon(17) DisableIcon(6) DisableIcon(8) DisableIcon(10) DisableIcon(13) DisableIcon(18) LibSetExtent(HSplData%,X2Spl%-X1Spl%,500) "Wimp_ForceRedraw",HSplData%,0,Y1Spl%-Y2Spl%,X2Spl%-X1Spl%,0 Length%>8 ((Length%<<8) &FF00) Length%=Length%*2 S%+=1 S%=A% MoveMemory(P%,Offset%) Offset%: Size to move "Hourglass_On" L%=ModuleLength%-(P%-Heap%) HeapSize%+=Offset% ModuleLength%+=Offset% # NbPages%=HeapSize% PageSize% (HeapSize% PageSize%)>0 NbPages%+=1 "Wimp_SlotSize",BASICSize%+PageSize%*NbPages%,-1 SlotSize% Offset%>0 A%=P%+L% ?(A%+Offset%)=?A% A%=P% P%+L% ?A%=?(A%-Offset%) "Hourglass_Off" VModify%= LoadModule(Path$) LastSeq%=0 LastEvent%=0 "Hourglass_On" ModulePath$=Path$ "OS_File",20,Path$ ,,,,ModuleLength% 0' HeapSize%=ModuleLength%+BASICSize% 2# NbPages%=HeapSize% PageSize% (HeapSize% PageSize%)>0 NbPages%+=1 "Wimp_SlotSize",PageSize%*NbPages%,-1 : TO SlotSize% Heap%= Module%=Heap% Update Save window WinH%=HSave% LibSetIconText2(2,Path$) Load(Module%,Path$) "QTM_Load",Path$,0 =' Patterns%=Module%+20+30*31+2+128+4 MemPatterns%=Patterns% ?$ MemSequence%=Module%+20+30*31+2 Let's find the number of patterns by scanning the sequence Max%=0 A%=0 B%=?(MemSequence%+A%) B%>Max% Max%=B% NbPatterns%=Max% J1 Samples%=MemPatterns%+(NbPatterns%+1)*4*4*64 MemSamples%=Samples% SampleInfo%=Module%+20 MemSampleInfo%=SampleInfo% Then the total data sample length Length%=0 Q S%=0 SamplesLength%=0 S N%=0 U0 Length%=!(MemSampleInfo%+S%*30+22) &FFFF V1 Length%=Length%>>8 ((Length%<<8) &FF00) SamplesLength%+=Length%*2 Length%<>0 N%+=1 S%+=1 S%=31 NbSamples%=N% SongInfo UpdateNbSeq UpdateMenuSamples UpdateSampleInfo(1) NbEntry%>0 Close all previous shell windows I%=0 A%=0 f% Windows%(I%,WFreeFlag%)=-1 g# WinH%=Windows%(I%,WHShell%) ClosePattern(WinH%) A%+=1 I%+=1 NbEntry%=0 VModuleState%= OpenSamples( OpenWindow(HPlay%) OpenWindow(HSongInfo%) VModuleState%= StopMod ReInitQTMMod ResizePlayWindow LibUpdateWindow(HPlayWin%) LibWinSetScroll(HPlayWin%,0,100) "Hourglass_Off" DirectInput(IconH%) S$=$ Writable(IconH%) Let's find an illegal character in S$ S$,1) C%<&30 C%>&39 S$) : LibSetIconText2(IconH%,S$) S$="" Val%=0 PROCLibSetIconText2(IconH%,"0") Val%= ReturnParams(KCurrentNote%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) PFX1%=PitchEffect1% PFX2%=PitchEffect2% KFXType% Val%>255 Val%=255 : LibSetIconText2(IconH%,"255") : IconH% IDVal1% : PFX2%=Val% PitchEffect%=PFX2% Val%>15 Val%=15 : LibSetIconText2(IconH%,"15") : IconH% IDVal1% : PFX1%=Val% IDVal2% : PFX2%=Val% % PitchEffect%=(PFX1%<<4) PFX2% IF PitchEffect1%<>Val% OR PitchEffect2%<>Val% THEN StoreParams \ !(Patterns%+Windows%(EditEntry%,WCursor%)*4+1024*Windows%(EditEntry%,WPattern%))=Note% KCurrentNote%=Note% NewNote(EditEntry%) ENDIF Entry%=EditEntry% The selected block is pasted... & Cursor%=Windows%(Entry%,WCursor%) , PatternDest%=Windows%(Entry%,WPattern%) EditPattern%=BlockPattern% $ WinH%=Windows%(Entry%,WHShell%) X1%=EditStart% Y1%=EditStart% X2%=EditEnd% Y2%=EditEnd% X0%=Cursor% Y0%=Cursor% D%=Block% Y%=Y1% X%=X1% 4 O%=MemPatterns%+1024*EditPattern%+(X%+Y%*4)*4 !D%=!O% D%+=4 % A%=Cursor%+(EditEnd%-EditStart%) X1%=Cursor% Y1%=Cursor% X2%=A% Y2%=A% OCopyMode%=2 A%=Y2% : B%=Y1% : Step%=-1 A%=Y1% : B%=Y2% : Step%=1 OCopyMode%<>3 O%=Block% Y%=A% Step% X%=X1% 4 D%=MemPatterns%+1024*PatternDest%+(X%+Y%*4)*4 !D%=!O% O%+=4 Duplicate 7 O%=!(MemPatterns%+1024*EditPattern%+(X0%+Y0%*4)*4) Y%=A% Step% X%=X1% 4 D%=MemPatterns%+1024*PatternDest%+(X%+Y%*4)*4 !D%=O% X2%+=1 Y2%+=1 Now, let's redraw the destination block "Wimp_ForceRedraw",WinH%,X1%*OWCell%,-Y2%*OHCell%,X2%*OWCell%,-Y1%*OHCell% VModify%= Effects(FX%,P1%,P2%) P%=P1%<<8 P2% <- ShortFX$, LongFX$, PitchStr$, Pitch1$, Pitch2$, FXType%, Menu% FXType%: 0: Error, undefined 1: 1 Pitch value 2: 2 Pitchs values 3: 1 Pitch sub effect 4: 1 Pitch text sub effect (popup) ShortFX$: Abreviation FX for printing LongFX$: Real name FX for popup PitchStr$: Pitch text abreviation. Pitch1$: Pitch 1 Pitch2$: Pitch 2 Menu%: MenuPopup if FXType%=4 Pitch1$="Pitch 1" Pitch2$="Pitch 2" $ FXType%=2 : Default (2 pitchs) FX% &0 : Arpeggio LongFX$="Arpeggio" # Pitch1$="1st halftone (0-15)" # Pitch2$="2nd halftone (0-15)" ShortFX$="Arpgio" &1 : Portamento Up LongFX$="Portamento Up" Pitch1$="Increase speed" ShortFX$="PortUp" FXType%=1 &2 : Portamento Down LongFX$="Portamento Down" Pitch1$="Decrease speed" ShortFX$="PortDn" FXType%=1 &3 : Portamento to Note " LongFX$="Portamento to Note" ! Pitch1$="Pitch slide speed" ShortFX$="TonPrt" FXType%=1 &4 : Vibrato LongFX$="Vibrato" Pitch1$="Speed" Pitch2$="Depth" ShortFX$="Vibrto" Menu%=MPVibrato% &5 : PTN + Vol sliding + LongFX$="Portamento + Volume sliding" Pitch1$="Portamento Speed" " Pitch2$="Slide Volume Speed" ShortFX$="TPt+VS" &6 : Vibrato + Vol sliding #( LongFX$="Vibrato + Volume sliding" Pitch1$="Vibrato Speed" %" Pitch2$="Slide Volume Speed" ShortFX$="Vrt+VS" &7 : Tremolo LongFX$="Tremolo" )# Pitch1$="Volume change speed" *# Pitch2$="Volume change depth" ShortFX$="Tremlo" LongFX$="Undefined" ShortFX$="Undefined" FXType%=0 &9 : Sample Offset FXType%=1 2! LongFX$="Set Sample Offset" 3( Pitch1$="Offset in sample DIV 256" ShortFX$="SplOff" &A : Volume slide Special case (n0 or 0n) ShortFX$="VolSld" LongFX$="Volume slide" FXType%=1 P2%=0 PitchEffect%=P1% PitchEffect%=-P2% &B : Pos jump LongFX$="Position jump" Pitch1$="Pattern Number" FXType%=1 ShortFX$="PosJmp" &C : Set volume LongFX$="Set volume" ShortFX$="SetVol" C! Pitch1$="New volume (0-64)" FXType%=1 &D : Pattern break LongFX$="Pattern break" ShortFX$="PatBrk" FXType%=1 Extended Effects FXType%=3 PitchEffect%=P2% P1% 0 : ShortFX$="SetFilter" : LongFX$="Set Filter" : FXType%=4 1 : ShortFX$="SldUp" : LongFX$="Slide up" : FXType%=4 2 : ShortFX$="SldDown" : LongFX$="Slide down" 3 : ShortFX$="Glisndo" : LongFX$="Glissando" T1 P2%=1 PitchStr$="On" PitchStr$="Off" FXType%=4 4 : ShortFX$="VbrCtrl" : LongFX$="Set vibrato control" PitchEffect% 0 : PitchStr$="Sinus" 1 : PitchStr$="Const" [ 2 : PitchStr$="SinRect" 3 : PitchStr$="Random" FXType%=4 5 : ShortFX$="FineTun" : LongFX$="Set Fine Tune" 7 : ShortFX$="TremForm" : LongFX$="Set Tremolo Waveform" PitchEffect% 0 : PitchStr$="Sinus" e! 1 : PitchStr$="RampDown" 2 : PitchStr$="Square" FXType%=4 8 : ShortFX$="NotUsed" : LongFX$="Not Used" : FXType%=0 9 : ShortFX$="RetrigNote" : LongFX$="Retrig Note" 10 : ShortFX$="FinVolSld+" : LongFX$="Fine Volume Slide Up" 11 : ShortFX$="FinVolSld-" : LongFX$="Fine Volume Slide Down" 12 : ShortFX$="NoteCut" : LongFX$="Note Cut" 13 : ShortFX$="NoteDelay" : LongFX$="Note Delay" 14 : ShortFX$="PatrnDelay" : LongFX$="Pattern Delay" 15 : ShortFX$="InvrtLoop" : LongFX$="Invert Loop" ShortFX$= (P1%) ShortFX$="SetSpeed" LongFX$="Set speed/tempo" FXType%=1 ShortFX$= (FX%) FXType%=0 CreateSplDir(Path$) "OS_File",8,Path$,,,0 GetSampleName(S%) 0<=S%<=31 S%>0 M%=SampleInfo%+(S%-1)*30 ?M%<>0 ?M%<>&0D Name$="" a%=0 ?M%<>0 a%<>22 Name$+= (?M%) M%+=1 a%+=1 Name$="*Untitled*" Name$="No sample" =Name$ PlayLine(Seq%,Event%) 7 Adr%=Patterns%+Event%*4*4+ SeqToPattern(Seq%)*1024 Note1%=!(Adr%) Note2%=!(Adr%+4) Note3%=!(Adr%+8) Note4%=!(Adr%+12) ReturnParams(Note1%,Sample1%,Pitch1%,Effect1%,PitchEffect11%,PitchEffect21%) ReturnParams(Note2%,Sample2%,Pitch2%,Effect2%,PitchEffect12%,PitchEffect22%) ReturnParams(Note3%,Sample3%,Pitch3%,Effect3%,PitchEffect13%,PitchEffect23%) ReturnParams(Note4%,Sample4%,Pitch4%,Effect4%,PitchEffect14%,PitchEffect24%) Z Cond1%=Sample1%<>0 Pitch1%<>0 Pitch1%>=&071 Pitch1%<=&358 VOChPlayState%(0)=1 Z Cond2%=Sample2%<>0 Pitch2%<>0 Pitch2%>=&071 Pitch2%<=&358 VOChPlayState%(1)=1 Z Cond3%=Sample3%<>0 Pitch3%<>0 Pitch3%>=&071 Pitch3%<=&358 VOChPlayState%(2)=1 Z Cond4%=Sample4%<>0 Pitch4%<>0 Pitch4%>=&071 Pitch4%<=&358 VOChPlayState%(3)=1 Cond1% "QTM_PlaySample",1,Sample1%,Pitch1%,64 Cond2% "QTM_PlaySample",2,Sample2%,Pitch2%,64 Cond3% "QTM_PlaySample",3,Sample3%,Pitch3%,64 Cond4% "QTM_PlaySample",4,Sample4%,Pitch4%,64 UpdateInfoPlayPosition Update play window <-VCurSpeed% WinH%=HPlay% UpdatePlaySpeed OldSeq%<>NewSeq% LibSetWritableText(3, (NewSeq%)) LibSetWritableText(2, SeqToPattern(NewSeq%))) OldEvent%<>NewEvent% LibSetWritableText(12, (NewEvent%)) VCurSpeed%=NewSpeed% UpdatePlaySpeed OldSpeed%=VCurSpeed% "QTM_ReadSpeed" ,NewSpeed% OldSpeed%<>NewSpeed% LibSetWritableText(10, (NewSpeed%)) SetPlayPosition(Seq%,Event%) "QTM_Pos",Seq%,Event% UpdatePlayPosition SetCurPlayVars OldEntry%=VCurPlayEntry% OldSeq%=VCurPlaySeq% OldEvent%=VCurPlayEvent% "QTM_Pos",-1,-1 NewSeq%,NewEvent% Pat%= SeqToPattern(NewSeq%) NewEntry%= PatToEntry(Pat%) UpdatePlayPosition Update BASIC vars. ->VCurPlayEntry%,VCurPlaySeq%,VCurPlayEvent% <-VCurPlayEntry%,VCurPlaySeq%,VCurPlayEvent% SetCurPlayVars ChannelStateChanged%=VOChPlayState%(0)<>VChPlayState%(0) VOChPlayState%(1)<>VChPlayState%(1) VOChPlayState%(2)<>VChPlayState%(2) VOChPlayState%(3)<>VChPlayState%(3) OldSeq%<>NewSeq% Update sequence table. Block%!0=HSequence% Block%!4=0 Block%!8=-50*NbSeq% Block%!12=OWCell%*4 Block%!16=0 "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% 3,100,0,0 0,-(OldSeq%+1)*50,100,50 3,100,0,0 0,-(NewSeq%+1)*50,100,50 DrawAllSeqPat(OldSeq%) DrawAllSeqPat(NewSeq%) "Wimp_GetRectangle",,Block% Flag% OldSeq%<>NewSeq% OldEvent%<>NewEvent% ChannelStateChanged% UpdateInfoPlayPosition Update Play window Block%!0=HPlayWin% Block%!4=0 ( Y%=-OHCell%*(OldEvent%+OldSeq%*64) Block%!8=Y%-OHCell% Block%!12=OWCell%*4 Block%!16=Y%+2 "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 OY%-=OldSeq%*64*OHCell% Flag% OX%,OY% DrawPlayPosition(OldEvent%,VOChPlayState%()) "Wimp_GetRectangle",,Block% Flag% Block%!0=HPlayWin% Block%!4=0 ( Y%=-OHCell%*(NewEvent%+NewSeq%*64) Block%!8=Y%-OHCell% Block%!12=OWCell%*4 Block%!16=Y%+2 "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 OY%-=NewSeq%*64*OHCell% Flag% OX%,OY% !3 DrawPlayPosition(NewEvent%,VChPlayState%()) #- "Wimp_GetRectangle",,Block% Flag% (OldEntry%=NewEntry% NewEntry%<>-1) Same window ), Block%!0=Windows%(NewEntry%,WHShell%) Block%!4=0 Block%!8=-64*50*2 Block%!12=OWCell%*4 Block%!16=0 /- "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% 45 DrawPlayPosition(OldEvent%,VOChPlayState%()) 54 DrawPlayPosition(NewEvent%,VChPlayState%()) 7. "Wimp_GetRectangle",,Block% Flag% :9 The play pointer has moved out of a shell window OldEntry%<>-1 <- Block%!0=Windows%(OldEntry%,WHShell%) Block%!4=0 Block%!8=-64*50*2 Block%!12=OWCell%*4 Block%!16=0 B. "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% G= DrawPlayPosition(OldEvent%,VOChPlayState%()) I/ "Wimp_GetRectangle",,Block% Flag% J NewEntry%<>-1 N- Block%!0=Windows%(NewEntry%,WHShell%) Block%!4=0 Block%!8=-64*50*2 Block%!12=OWCell%*4 Block%!16=0 T. "Wimp_UpdateWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 Flag% OX%,OY% Y5 DrawPlayPosition(NewEvent%,VChPlayState%()) 0,0 [/ "Wimp_GetRectangle",,Block% Flag% \ VCurPlaySeq%=NewSeq% VCurPlayEvent%=NewEvent% VCurPlayEntry%=NewEntry% d% VOChPlayState%()=VChPlayState%() CreateWritableMenu(MX%,MY%,MenuName$,InitValue%) <- MenuBlock%!4:String adress i$ CurrentMenu%=WritableMenuBlock% j MenuPtr%=WritableMenuBlock% LibMenuHeader(MenuName$,100) MenuPtr%-=28 $MenuWrStr%=MenuName$ MenuPtr%!0=MenuWrStr% MenuPtr%!4=0 MenuPtr%!8= (MenuName$) MenuPtr%+=28 LibMenuItem(Last%+Writable%+TitleInd%,-1,IconFlag%,"9999") MenuPtr%-=24 u' MenuPtr%!12=MenuWrStr%+50 : Value v, MenuPtr%!16=MenuWrStr%+30 : Validation $(MenuWrStr%+30)="A0-9" x# $(MenuWrStr%+50)= (InitValue%) "Wimp_CreateMenu",,WritableMenuBlock%,MX%,MY% MenuBlock%!4=MenuWrStr%+50 DefineIconH ->WinH%,IconH% WinH% HParams% Drawing procedures ShellRedraw Shell windows redraw ! Entry%= HandleToEntry(WinH%) & Cursor%=Windows%(Entry%,WCursor%) ( Pattern%=Windows%(Entry%,WPattern%) "Wimp_RedrawWindow",,Block% Flag% OX%=Block%!4-Block%!20 OY%=Block%!16-Block%!24 SYS "QTM_Pos",-1,-1 TO Seq%,Event% Seq%=0 Event%=0 Flag% 4 XMin%=(Block%!28-Block%!4+Block%!20) OWCell% 4 XMax%=(Block%!36-Block%!4+Block%!20) OWCell% 6 YMin%=-(Block%!40-Block%!16+Block%!24) OHCell% 5 YMax%=(Block%!16-Block%!32-Block%!24) OHCell% YMax%>64 YMax%=64 YMin%<64 HShell%=WinH% WinH% HPaneV% Y%=-YMin%*(OHCell%+1) S%=YMin% YMax% Y%-=OHCell%+1 9 PlotIcon(0,Y%,100,OHCell%, (S%),PaneIconFlags%) HPaneH% < PlotIcon(0,-50,OWCell%,50,"Voice 1",PaneIconFlags%) B PlotIcon(OWCell%,-50,OWCell%,50,"Voice 2",PaneIconFlags%) D PlotIcon(OWCell%*2,-50,OWCell%,50,"Voice 3",PaneIconFlags%) D PlotIcon(OWCell%*3,-50,OWCell%,50,"Voice 4",PaneIconFlags%) HShell% 128,0,0,0 16 OX%,OY% DrawTracker(XMin%,XMin%,YMin%,YMax%) VCurPlayEntry%=Entry% DrawPlayPosition(VCurPlayEvent%,VChPlayState%()) Edition Cursor X0%=(Cursor% 4)*OWCell% $ Y0%=-(Cursor% 4 +1)*OHCell% EditEntry%<>Entry% 3,255,255,255 " X0%,Y0%,OWCell%,OHCell% SetBlockColor " X0%,Y0%,OWCell%,OHCell% * X0%-2,Y0%-2,OWCell%+4,OHCell%+4 * X0%-4,Y0%-4,OWCell%+8,OHCell%+8 BlockPattern%<>-1 $ X1%=(EditStart% 4)*OWCell% % Y1%=-(EditStart% 4)*OHCell% & X2%=(EditEnd% 4 + 1)*OWCell% ' Y2%=-(EditEnd% 4 + 1)*OHCell% Ghost Block (Blue) EditEntry%=Entry% SetEditColor Y0%+=OHCell% & X0%,Y0%,X2%-X1%,Y2%-Y1% Edit Block (Red) 4 BlockPattern%=Windows%(Entry%,WPattern%) SetBlockColor & X1%,Y1%,X2%-X1%,Y2%-Y1% "Wimp_GetRectangle",,Block% Flag% DrawTracker(XMin%,XMin%,YMin%,YMax%) -> ORIGIN OX%,OY% -> OX%,OY% for fonts! -> Pattern% SetFontColour(255,255,255) Here, we search for same sample: same colour ! Pos%=Patterns%+1024*Pattern% VoiceSpl%(0,0)=0 VoiceSpl%(1,0)=0 VoiceSpl%(2,0)=0 VoiceSpl%(3,0)=0 VoiceSpl%(0,1)=0 VoiceSpl%(1,1)=0 VoiceSpl%(2,1)=0 VoiceSpl%(3,1)=0 E%=0 YMin% C%=0 ReturnParams(Pos%!0,NSample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) OSample%=VoiceSpl%(C%,0) NSample%<>0 OSample%<>NSample% ) VoiceSpl%(C%,1)=1-VoiceSpl%(C%,1) VoiceSpl%(C%,0)=NSample% Pos%+=4 N% = YMin% YMax% V% = XMin% XMax% / Pos%=Patterns%+N%*4*4+V%*4+1024*Pattern% ReturnParams(Pos%!0,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Sample%<>0 VoiceSpl%(V%,0)<>Sample% ) VoiceSpl%(V%,1)=1-VoiceSpl%(V%,1) VoiceSpl%(V%,0)=Sample% 4 Effects(Effect%,PitchEffect1%,PitchEffect2%) Pos%!0<>0 Note$="" Pitch%<>0 a%=-1 a%+=1 $ XPitch%(a%)=Pitch% a%>60 a%<60 A%=XNote%(a%) ! Note$+= ((A%>>24) &FF) ! Note$+= ((A%>>16) &FF) Note$+= ((A%>>8) &FF) Note$="???" OQuickDraw%= X%=V%*OWCell%-120 Y%=-N%*OHCell%-10 Sample%<>0 7 VoiceSpl%(V%,1)=0 255,0,0 255,255,0 X%,Y% Sample% # 0,255,0 X%+200,Y% Note$ 255,255,255 *# Effect%=0 100,100,100 ,( Effect%<>0 PitchEffect%<>0 X%+300,Y% ShortFX$ / FXType%=0 1 FXType% 0,0,255 X%+350,Y% PitchEffect1% 0,0,255 X%+400,Y% PitchEffect2% 100,100,255 X%+350,Y% PitchEffect% A D3 Font antialiased mode (slow mode...ACORN) X%=V%*OWCell%+OX% Y%=-(N%+1)*OHCell%+OY% y%=1/5*OHCell% J Sample%<>0 MS VoiceSpl%(V%,1)=0 SetFontColour(255,0,0) SetFontColour(255,255,0) NO "Font_Paint",DigitFont%, (Sample%),&11 1<<8,X%+2/50*OWCell%,Y%+y% O SetFontColour(0,255,0) TJ "Font_Paint",DigitFont%,Note$,&11 1<<8,X%+12/50*OWCell%,Y%+y% FXType% W+ -1 : SetFontColour(255,100,100) X& -2 : SetFontColour(255,0,0) Y' 0 : SetFontColour(255,255,0) Z' SetFontColour(255,255,255) [ ]( Effect%<>0 PitchEffect%<>0 ^O "Font_Paint",EffectFont%,ShortFX$,&11 1<<8,X%+22/50*OWCell%,Y%+y% _ FXType%=0 a FXType% e" SetFontColour(100,0,255) fV "Font_Paint",DigitFont%, (PitchEffect1%),&11 1<<8,X%+37/50*OWCell%,Y%+y% gV "Font_Paint",DigitFont%, (PitchEffect2%),&11 1<<8,X%+43/50*OWCell%,Y%+y% 1,-1 i$ SetFontColour(100,100,255) jU "Font_Paint",DigitFont%, (PitchEffect%),&11 1<<8,X%+40/50*OWCell%,Y%+y% 0,-2 l Voices separation 0,255,0,255 OWCell%,0,OWCell%,-OHCell%*64 OWCell%*2,0,OWCell%*2,-OHCell%*64 OWCell%*3,0,OWCell%*3,-OHCell%*64 DrawPlayPosition(Event%,Ch%()) ->ORIGIN Y% 3,255,255,255 0,-OHCell%*(Event%+1),OWCell%*4,OHCell% 3,255,255,0 Y%=-OHCell%*(Event%+1) Ch%(0)=1 0,Y%,OWCell%,OHCell% Ch%(1)=1 OWCell%,Y%,OWCell%,OHCell% Ch%(2)=1 OWCell%*2,Y%,OWCell%,OHCell% Ch%(3)=1 OWCell%*3,Y%,OWCell%,OHCell% DrawRepeatBlock ->ORIGIN OX%,OY% ->XMax%,XMin%,RepeatO%,RepeatL% RepeatO%0 A%=RepeatO%-XMin% " B%=(RepeatO%+RepeatL%)-XMax% D%=(X2Spl%-X1Spl%)/2 A%<0 x1%=0 x1%=A% B%<0 x2%=D%+B% x2%=D% x1%0 3,255,255,0 x1%*2,CenterYSpl%*2,(x2%-x1%)*2,-CenterYSpl%*2 ReInitQTMMod Tempory: Save track file for QTM VModuleState%= "Hourglass_On" "QTM_ReadSpeed" Play%,Speed% Save(Module%,ModuleLength%,TransfertPath$,001) "QTM_Load",TransfertPath$,0 "QTM_Pos",VCurPlaySeq%,VCurPlayEvent% Play%<>0 "QTM_Start" "QTM_SetSpeed",Play% "QTM_SetSpeed",Speed% "Hourglass_Off" VModify%= RestoreQTM A%=&0 "QTM_EffectControl",A%,1 "QTM_EffectControl",(&E<<4) HideAllWins LibCloseWindow(HSplData%) LibCloseWindow(HSamples%) LibCloseWindow(HSongInfo%) LibCloseWindow(HOptions%) LibCloseWindow(HSequence%) LibCloseWindow(HPlay%) LibCloseWindow(HParams%) ClosePlayWindow Close all shell windows I%=0 A%=0 A% X%,Y% Block%!0=WinH% Block%!4=IconH% "Wimp_GetIconState",,Block% X%+=Block%!16 Y%+=Block%!20 Flags%=%11000101 Block%!0=X%+16 Block%!4=Y%+16 Block%!8=X%-16 Block%!12=Y%-16 "DragASprite_Start",Flags%,1,Sprite$,Block%,0 DragCase%=Drag% &6B0,&650,&5F5,&5A0,&54F,&503,&4BB,&477,&436,&3FA,&3C1,&386 &358,&328,&2FA,&2D0,&2A6,&280,&25C,&23A,&21A,&1FC,&1E0,&1C5 &1AC,&194,&17D,&168,&153,&140,&12E,&11D,&10D,&0FE,&0F0,&0E2 &0D6,&0CA,&0BE,&0B4,&0AA,&0A0,&097,&08F,&087,&07F,&078,&071 &06B,&065,&05F,&05A,&055,&04C,&047,&043,&040,&03C,&039,&036 C-1,C#1,D-1,D#1,E-1,F-1,F#1,G-1,G#1,A-1,A#1,B-1 C-2,C#2,D-2,D#2,E-2,F-2,F#2,G-2,G#2,A-2,A#2,B-2 C-3,C#3,D-3,D#3,E-3,F-3,F#3,G-3,G#3,A-3,A#3,B-3 C-4,C#4,D-4,D#4,E-4,F-4,F#4,G-4,G#4,A-4,A#4,B-4 C-5,C#5,D-5,D#5,E-5,F-5,F#5,G-5,G#5,A-5,A#5,B-5 DeleteBlock X1%=EditStart% Y1%=EditStart% X2%=EditEnd% Y2%=EditEnd% Y%=Y1% X%=X1% 17 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4 Adr%!0=0 Now, let's redraw the block RedrawBlockContents NoEditBlock VModify%= ChangeSample(S%) X1%=EditStart% Y1%=EditStart% X2%=EditEnd% Y2%=EditEnd% Y%=Y1% X%=X1% C7 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4 Note%=!Adr% EN ReturnParams(Note%,Sample%,Pitch%,Effect%,PitchEffect1%,PitchEffect2%) Sample%<>0 Sample%=S% StoreParams !Adr%=Note% Now, let's redraw the block RedrawBlockContents NoEditBlock VModify%= ChangeFX(FX%) X1%=EditStart% Y1%=EditStart% X2%=EditEnd% Y2%=EditEnd% Y%=Y1% X%=X1% Z7 Adr%=MemPatterns%+1024*BlockPattern%+(X%+Y%*4)*4 Note%=!Adr% \: ReturnParams(Note%,Sample%,Pitch%,Effect%,P1%,P2%) ]% FX%<>0 (P1%<>0 P2%<>0) Effect%=FX% StoreParams !Adr%=Note% Now, let's redraw the block RedrawBlockContents NoEditBlock VModify%= RedrawBlockContents l+ BlockEntry%= PatToEntry(BlockPattern%) X1%=EditStart% Y1%=EditStart% X2%=EditEnd% Y2%=EditEnd% X2%+=1 Y2%+=1 "Wimp_ForceRedraw",Windows%(BlockEntry%,WHShell%),X1%*OWCell%,-Y2%*OHCell%,X2%*OWCell%,-Y1%*OHCell% CheckOptions Old%=OQuickDraw% IconState(1)= OQuickDraw%= OQuickDraw%= IF FNIconState(6)=TRUE THEN OPaneVoice%=TRUE ELSE OPaneVoice%=FALSE IF FNIconState(7)=TRUE THEN OPaneSeq%=TRUE ELSE OPaneSeq%=FALSE IF FNIconState(5)=TRUE THEN OCursor%=0 IF FNIconState(6)=TRUE THEN OCursor%=1 IF FNIconState(7)=TRUE THEN OCursor%=2 OldW%=OWCell% OldH%=OHCell% OWCell%= Writable(9)) OHCell%=OWCell%/10 Old%<>OQuickDraw% OldW%<>OWCell% Update all shell windows FontInit I%=0 A%=0 A%Block% Block2%!0=HSamples% "Wimp_GetWindowInfo",,Block2%+1 WX1%=Block2%!44 WX2%=Block2%!52 WY1%=Block2%!48 WY2%=Block2%!56 WX%=WX2%-WX1% WY%=-(WY2%-WY1%) Block%!0=HSamples% Front%= Block%!4 = XScreen%-WX%/2 Block%!16 = YScreen%-WY%/2 Block%!12 = Block%!4+WX% Block%!8 = Block%!16+WY% Block%!20 = 0 Block%!24 = 0 Block%!28 = -1 X1%=Block%!4 Y2%=Block%!16 Win%=Block%!28 First, let the WIMP correct Block% coordinates. Block%!0=HSamples% Block%!28=HSplData% "Wimp_OpenWindow",,Block% Then, put pane window front of its mother For previous scroll offset Block2%!0=HSplData% "Wimp_GetWindowState",,Block2% W%=-(WX2%-WX1%-X2Spl%) H%=(WY2%-WY1%+Y1Spl%) Block2%!4=Block%!4+X1Spl% Block2%!8=Block%!8+H% Block2%!12=Block%!12+W% Block2%!16=Block%!16+Y2Spl% Block2%!28=Win% "Wimp_OpenWindow",,Block2% And finally, the mother behind her child Block%!0=HSamples% Block%!28=HSplData% "Wimp_OpenWindow",,Block% OpenPlayWindow(Poll%) ->Block% Block%!0 = HPlayWin% Poll% Block%!4 = 0.1*XScreen%*2 Block%!8 = 0.1*YScreen%*2 Block%!12 = 0.9*XScreen%*2 Block%!16 = 0.9*YScreen%*2 Block%!20 = 0 Block%!24 = 100 Block%!28 = -1 Win%=Block%!28 First, let the WIMP correct Block% coordinates. Block%!0=HPlayWin% Block%!28=HVUs% "Wimp_OpenWindow",,Block% Then, put pane window front of its mother Block2%!0=HVUs% Block2%!4=Block%!4 Block2%!8=Block%!16-100 Block2%!12=Block%!12 Block2%!16=Block%!16 Block2%!20=Block%!20 Block2%!24=Block%!24 Block2%!28=Win% "Wimp_OpenWindow",,Block2% And finally, the mother behind her child Block%!0=HPlayWin% Block%!28=HVUs% "Wimp_OpenWindow",,Block% ClosePlayWindow Block%!0 = HPlayWin% "Wimp_CloseWindow",,Block% Block%!0 = HVUs% "Wimp_CloseWindow",,Block%