home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsd / easitrack / !EasiTrack / Source < prev    next >
Encoding:
Text File  |  1995-04-26  |  15.2 KB  |  733 lines

  1. ; !EasiTrack.Source
  2. ; by Nicholas Marriott
  3. ; © NSoft 1995
  4.  
  5. ; r11 = playing indicator, 1=playing, 0=not loaded, -1=paused
  6.  
  7.         #name   !RunImage
  8.         #base   &8000
  9.  
  10.         #set    StackSize = 512
  11.  
  12. .Code_Start
  13.         adr     r13,Stack_End
  14.  
  15.         bl      Initialise
  16.         bl      Poll
  17.         bl      Finalise
  18.         swi     XOS_Exit
  19.  
  20. .Stack_Start
  21.         dbb     StackSize,0
  22.         align
  23. .Stack_End
  24.  
  25. .Initialise
  26.         stmfd   r13!,{r0-r12,r14}
  27.  
  28.         mov     r0,#200
  29.         ldr     r1,TASK
  30.         adr     r2,TaskName
  31.         swi     XWimp_Initialise
  32.         str     r1,TaskHandle
  33.  
  34.         mov     r0,#14
  35.         mov     r2,#%000000100010
  36.         swi     XWimpExt_Initialise
  37.  
  38.         mov     r1,#%101
  39.         adr     r0,Code_End
  40.         str     r1,[r0]
  41.         adr     r1,Code_End+64
  42.         adr     r2,Code_End+2048
  43.         adr     r3,Code_End+64+2048+1024
  44.         mvn     r4,#0
  45.         adr     r5,TemplateFile
  46.         mov     r6,#1
  47.         swi     XWimpExt_LoadTemplates
  48.  
  49.         adr     r12,Poll_Block
  50.         ldr     r0,Code_End
  51.         str     r0,[r12]
  52.         mov     r1,r12
  53.         swi     XWimp_GetWindowState
  54.         swi     XWimp_OpenWindow
  55.  
  56.         bl      Stop_Tune
  57.  
  58.         ldmfd   r13!,{r0-r12,pc}
  59.  
  60. .TASK
  61.         dcb     "TASK"
  62. .TaskName
  63.         dcb     "EasiTrack",0
  64. .TemplateFile
  65.         dcb     "<EasiTrack$Dir>.Templates",0
  66.         align
  67. .TaskHandle
  68.         dcd     0
  69. .IconbarIcon
  70.         dcd     0
  71. .IconbarSprite
  72.         dcb     "!easitrack",0
  73. .BlankString
  74.         dcb     0
  75.         align
  76.  
  77. .Finalise
  78.         stmfd   r13!,{r0-r12,r14}
  79.  
  80.         swi     XTracker_Stop
  81.         mvn     r0,#0
  82.         mov     r1,#0
  83.         mov     r2,#0
  84.         mov     r3,#0
  85.         mov     r4,#0
  86.         swi     XDSym_Load
  87.  
  88.         adr     r0,Kill_Symphony
  89.         swi     XOS_CLI
  90.  
  91.         adr     r0,Kill_Tracker
  92.         swi     XOS_CLI
  93.  
  94.         ldr     r0,TaskHandle
  95.         swi     XWimpExt_CloseDown
  96.  
  97.         ldr     r0,TaskHandle
  98.         ldr     r1,TASK
  99.         swi     XWimp_CloseDown
  100.  
  101.         ldmfd   r13!,{r0-r12,pc}
  102.  
  103. .Poll
  104.         stmfd   r13!,{r0-r12,r14}
  105.  
  106.         mov     r11,#0
  107.         adr     r12,Poll_Block
  108.  
  109. .Poll_Loop
  110.         swi     XWimpExt_PrePoll
  111.  
  112.         mov     r0,#0
  113.         mov     r1,r12
  114.         swi     XWimp_Poll
  115.         mov     r9,r0
  116.  
  117.         ldr     r0,TaskHandle
  118.         mov     r1,r12
  119.         mov     r2,r9
  120.         swi     XWimpExt_Action
  121.  
  122.         cmp     r9,#0
  123.         cmpeq   r11,#1
  124.         bleq    Update_Tune
  125.  
  126.         cmp     r9,#3
  127.         moveq   r1,r12
  128.         swieq   XWimp_CloseWindow
  129.         beq     Poll_End
  130.  
  131.         cmp     r9,#2
  132.         moveq   r1,r12
  133.         swieq   XWimp_OpenWindow
  134.  
  135.         cmp     r9,#1
  136.         moveq   r1,r12
  137.         swieq   XWimpExt_AutoRedraw
  138.  
  139.         cmp     r9,#6
  140.         bleq    Mouse_Click
  141.  
  142.         cmp     r9,#17
  143.         bleq    User_Message
  144.         cmp     r9,#18
  145.         bleq    User_Message
  146.  
  147.         b       Poll_Loop
  148.  
  149. .Poll_End
  150.         ldmfd   r13!,{r0-r12,pc}
  151.  
  152. .Poll_Block
  153.         dbb     256,0
  154.         align
  155.  
  156. .User_Message
  157.         stmfd   r13!,{r1-r2r14}
  158.  
  159.         ldr     r1,[r12,#16]
  160.  
  161.         cmp     r1,#3
  162.         bleq    Load_Tune
  163.  
  164.         cmp     r1,#0
  165.         ldmeqfd r13!,{r1-r2,r14}
  166.         beq     Poll_End
  167.  
  168.         ldmfd   r13!,{r1-r2,pc}
  169.  
  170. .Stop_Tune
  171.         stmfd   r13!,{r0-r10,r14}
  172.  
  173.         swi     XTracker_Stop
  174.         mvn     r0,#0
  175.         mov     r1,#0
  176.         mov     r2,#0
  177.         mov     r3,#0
  178.         mov     r4,#0
  179.         swi     XDSym_Load
  180.  
  181.         mov     r11,#0
  182.  
  183.         mov     r0,#0
  184.         str     r0,Tune_Type
  185.  
  186.         ldr     r10,Code_End
  187.  
  188.         mov     r0,#1
  189.         mov     r2,r10
  190.         mov     r3,#2
  191.         adr     r4,Blank_String
  192.         swi     XWimpExt_SetIconString
  193.  
  194.         mov     r2,r10
  195.         mov     r3,#0
  196.         adr     r4,Blank_String
  197.         swi     XWimpExt_SetIconString
  198.  
  199.         mov     r2,r10
  200.         mov     r3,#15
  201.         adr     r4,Blank_String
  202.         swi     XWimpExt_SetIconString
  203.  
  204.         mov     r2,r10
  205.         mov     r3,#4
  206.         adr     r4,Blank_String
  207.         swi     XWimpExt_SetIconString
  208.  
  209.         mov     r2,r10
  210.         mov     r3,#7
  211.         adr     r4,Blank_String
  212.         swi     XWimpExt_SetIconString
  213.  
  214.         mov     r2,r10
  215.         mov     r3,#11
  216.         adr     r4,Blank_String
  217.         swi     XWimpExt_SetIconString
  218.  
  219.         mov     r2,r10
  220.         mov     r3,#9
  221.         adr     r4,Blank_String
  222.         swi     XWimpExt_SetIconString
  223.  
  224.         mov     r2,r10
  225.         mov     r3,#13
  226.         adr     r4,Blank_String
  227.         swi     XWimpExt_SetIconString
  228.  
  229.         ldr     r10,Code_End
  230.  
  231.         mov     r2,r10
  232.         mov     r3,#17
  233.         mov     r4,#1
  234.         swi     XWimpExt_ShadeIcon
  235.  
  236.         mov     r2,r10
  237.         mov     r3,#18
  238.         mov     r4,#1
  239.         swi     XWimpExt_ShadeIcon
  240.  
  241.         mov     r2,r10
  242.         mov     r3,#19
  243.         mov     r4,#1
  244.         swi     XWimpExt_ShadeIcon
  245.  
  246.         mov     r2,r10
  247.         mov     r3,#20
  248.         mov     r4,#1
  249.         swi     XWimpExt_ShadeIcon
  250.  
  251.         mov     r2,r10
  252.         mov     r3,#21
  253.         mov     r4,#1
  254.         swi     XWimpExt_ShadeIcon
  255.  
  256.         ldmfd   r13!,{r0-r10,pc}
  257.  
  258. .Kill_Symphony
  259.         dcb     "RMKill DSymphonyPlayer",0
  260. .Kill_Tracker
  261.         dcb     "RMKill TrackerModule",0
  262. .Load_Symphony
  263.         dcb     "RMLoad <EasiTrack$Dir>.DSymPlay",0
  264. .Load_Tracker1
  265.         dcb     "If ",34,"<RISCOS>",34,"=",34,"350",34," Then RMEnsure TrackerModule 4.09 Run <EasiTrack$Dir>.Tracker409",0
  266. .Load_Tracker2
  267.         dcb     "If ",34,"<RISCOS>",34,"<",34,"350",34," Then RMEnsure TrackerModule 4.06 Run <EasiTrack$Dir>.Tracker406",0
  268.         align
  269.  
  270. .Load_Tune
  271.         stmfd   r13!,{r0-r10,r14}
  272.  
  273.         swi     XTracker_Stop
  274.         mvn     r0,#0
  275.         mov     r1,#0
  276.         mov     r2,#0
  277.         mov     r3,#0
  278.         mov     r4,#0
  279.         swi     XDSym_Load
  280.  
  281.         ldr     r10,Code_End
  282.  
  283.         ldr     r0,[r12,#40]
  284.         str     r0,Tune_Type
  285.  
  286.         mov     r0,#1
  287.         mov     r2,r10
  288.         mov     r3,#2
  289.         add     r4,r12,#44
  290.         swi     XWimpExt_SetIconString
  291.  
  292.         bl      Find_Type
  293.         mov     r4,r0
  294.         mov     r2,r10
  295.         mov     r3,#4
  296.         swi     XWimpExt_SetIconString
  297.  
  298.         mov     r0,#17
  299.         add     r1,r12,#44
  300.         swi     XOS_File
  301.         mov     r0,r4
  302.         adr     r1,Buffer
  303.         mov     r2,#128
  304.         swi     XOS_ConvertInteger4
  305.         mov     r4,r0
  306.         mov     r2,r10
  307.         mov     r3,#7
  308.         swi     XWimpExt_SetIconString
  309.  
  310.         mov     r11,#1
  311.  
  312.         ldr     r0,Tune_Type
  313.         ldr     r1,Type_10B
  314.         cmp     r0,r1
  315.         bleq    Symphony_Load
  316.         blne    Tracker_Load
  317.  
  318.         bl      UnShade
  319.         ldr     r10,Code_End
  320.         mov     r2,r10
  321.         mov     r3,#19
  322.         mov     r4,#1
  323.         swi     XWimpExt_ShadeIcon
  324.  
  325.         ldmfd   r13!,{r0-r10,pc}
  326.  
  327. .Tracker_Load
  328.         stmfd   r13!,{r0-r10,r14}
  329.  
  330.         adr     r0,Load_Tracker1
  331.         swi     XOS_CLI
  332.         adr     r0,Load_Tracker2
  333.         swi     XOS_CLI
  334.  
  335.         add     r0,r12,#44
  336.         swi     XTracker_Load
  337.  
  338.         swi     XTracker_Play
  339.  
  340.         swi     XTracker_TuneInfo
  341.         mov     r2,r10
  342.         mov     r4,r3
  343.         mov     r3,#0
  344.         swi     XWimpExt_SetIconString
  345.  
  346.         swi     XTracker_TuneInfo
  347.         mov     r2,r10
  348.         mov     r3,#15
  349.         cmp     r4,#0
  350.         adreq   r4,Bad_Author
  351.         swi     XWimpExt_SetIconString
  352.  
  353.         swi     XTracker_TuneInfo
  354.         adr     r1,Buffer
  355.         mov     r2,#128
  356.         swi     XOS_ConvertInteger4
  357.         mov     r4,r0
  358.         mov     r2,r10
  359.         mov     r3,#11
  360.         swi     XWimpExt_SetIconString
  361.  
  362.         swi     XTracker_TuneInfo
  363.         mov     r0,r1
  364.         adr     r1,Buffer
  365.         mov     r2,#128
  366.         swi     XOS_ConvertInteger4
  367.         mov     r4,r0
  368.         mov     r2,r10
  369.         mov     r3,#9
  370.         swi     XWimpExt_SetIconString
  371.  
  372.         ldmfd   r13!,{r0-r10,pc}
  373.  
  374. .Symphony_Load
  375.         stmfd   r13!,{r0-r10,r14}
  376.  
  377.         adr     r0,Load_Symphony
  378.         swi     XOS_CLI
  379.  
  380.         add     r0,r12,#44
  381.         mov     r1.#0
  382.         mov     r2,#0
  383.         mov     r3,#0
  384.         mov     r4,#0
  385.         swi     XDSym_Load
  386.  
  387.         swi     XDSym_RestartSong
  388.  
  389.         mov     r2,r10
  390.         mov     r3,#0
  391.         adr     r4,Blank_String
  392.         swi     XWimpExt_SetIconString
  393.  
  394.         mov     r2,r10
  395.         mov     r3,#15
  396.         adr     r4,Bad_Author
  397.         swi     XWimpExt_SetIconString
  398.  
  399.         swi     XDSym_TuneInfo
  400.         adr     r1,Buffer
  401.         mov     r2,#128
  402.         swi     XOS_ConvertInteger4
  403.         mov     r4,r0
  404.         mov     r2,r10
  405.         mov     r3,#11
  406.         swi     XWimpExt_SetIconString
  407.  
  408.         mvn     r0,#0
  409.         swi     XDSym_Voices
  410.         adr     r1,Buffer
  411.         mov     r2,#128
  412.         swi     XOS_ConvertInteger4
  413.         mov     r4,r0
  414.         mov     r2,r10
  415.         mov     r3,#9
  416.         swi     XWimpExt_SetIconString
  417.  
  418.         ldmfd   r13!,{r0-r10,pc}
  419.  
  420. .Find_Type
  421.         stmfd   r13!,{r1-r2,r14}
  422.  
  423.         ldr     r2,Tune_Type
  424.  
  425.         ldr     r1,Type_CB6
  426.         cmp     r2,r1
  427.         adreq   r0,Type_CB6+4
  428.         ldmeqfd r13!,{r1-r2,pc}
  429.  
  430.         ldr     r1,Type_001
  431.         cmp     r2,r1
  432.         adreq   r0,Type_001+4
  433.         ldmeqfd r13!,{r1-r2,pc}
  434.  
  435.         ldr     r1,Type_CC5
  436.         cmp     r2,r1
  437.         adreq   r0,Type_CC5+4
  438.         ldmeqfd r13!,{r1-r2,pc}
  439.  
  440.         ldr     r1,Type_365
  441.         cmp     r2,r1
  442.         adreq   r0,Type_365+4
  443.         ldmeqfd r13!,{r1-r2,pc}
  444.  
  445.         ldr     r1,Type_10B
  446.         cmp     r2,r1
  447.         adreq   r0,Type_10B+4
  448.  
  449.         ldmfd   r13!,{r1-r2,pc}
  450.  
  451. .Update_Tune
  452.         stmfd   r13!,{r0-r3,r10,r14}
  453.  
  454.         ldr     r10,Code_End
  455.  
  456.         ldr     r0,Tune_Type
  457.         ldr     r1,Type_10B
  458.         cmp     r0,r1
  459.         swine   XTracker_ReadPos
  460.         mvneq   r0,#0
  461.         mvneq   r1,#0
  462.         swieq   XDSym_SongPos
  463.         adr     r1,Buffer
  464.         mov     r2,#128
  465.         swi     XOS_ConvertInteger1
  466.         mov     r4,r0
  467.         mov     r2,r10
  468.         mov     r3,#13
  469.         swi     XWimpExt_SetIconString
  470.  
  471.         ldmfd   r13!,{r0-r3,r10,pc}
  472.  
  473. .UnShade
  474.         stmfd   r13!,{r0-r12,r14}
  475.  
  476.         ldr     r10,Code_End
  477.  
  478.         mov     r2,r10
  479.         mov     r3,#17
  480.         mov     r4,#0
  481.         swi     XWimpExt_ShadeIcon
  482.  
  483.         mov     r2,r10
  484.         mov     r3,#18
  485.         mov     r4,#0
  486.         swi     XWimpExt_ShadeIcon
  487.  
  488.         mov     r2,r10
  489.         mov     r3,#19
  490.         mov     r4,#0
  491.         swi     XWimpExt_ShadeIcon
  492.  
  493.         mov     r2,r10
  494.         mov     r3,#20
  495.         mov     r4,#0
  496.         swi     XWimpExt_ShadeIcon
  497.  
  498.         mov     r2,r10
  499.         mov     r3,#21
  500.         mov     r4,#0
  501.         swi     XWimpExt_ShadeIcon
  502.  
  503.         ldmfd   r13!,{r0-r12,pc}
  504.  
  505. .Next_Tune
  506.         stmfd   r13!,{r0-r2,r14}
  507.  
  508.         ldr     r0,Tune_Type
  509.         ldr     r1,Type_10B
  510.         cmp     r0,r1
  511.         swine   XTracker_ReadPos
  512.         addne   r0,r0,#1
  513.         movne   r1,#0
  514.         swine   XTracker_SetPos
  515.         mvneq   r0,#0
  516.         mvneq   r1,#0
  517.         swieq   XDSym_SongPos
  518.         addeq   r0,r0,#1
  519.         mvneq   r1,#0
  520.         swieq   XDSym_SongPos
  521.         swieq   XDSym_FlushOutput
  522.  
  523.         ldmfd   r13!,{r0-r2,pc}
  524.  
  525. .Prev_Tune
  526.         stmfd   r13!,{r0-r2,r14}
  527.  
  528.         ldr     r0,Tune_Type
  529.         ldr     r1,Type_10B
  530.         cmp     r0,r1
  531.         swine   XTracker_ReadPos
  532.         subne   r0,r0,#1
  533.         movne   r1,#0
  534.         swine   XTracker_SetPos
  535.         mvneq   r0,#0
  536.         swieq   XDSym_SongPos
  537.         subeq   r0,r0,#1
  538.         moveq   r1,#0
  539.         swieq   XDSym_SongPos
  540.         swieq   XDSym_FlushOutput
  541.  
  542.         ldmfd   r13!,{r0-r2,pc}
  543.  
  544. .Pause_Tune
  545.         stmfd   r13!,{r0-r4,r10,r14}
  546.  
  547.         mvn     r11,#0
  548.  
  549.         ldr     r0,Tune_Type
  550.         ldr     r1,Type_10B
  551.         cmp     r0,r1
  552.         swine   XTracker_Pause
  553.         swieq   XDSym_Pause
  554.  
  555.         bl      UnShade
  556.         ldr     r10,Code_End
  557.  
  558.         mov     r2,r10
  559.         mov     r3,#17
  560.         mov     r4,#1
  561.         swi     XWimpExt_ShadeIcon
  562.  
  563.         mov     r2,r10
  564.         mov     r3,#18
  565.         mov     r4,#1
  566.         swi     XWimpExt_ShadeIcon
  567.  
  568.         mov     r2,r10
  569.         mov     r3,#20
  570.         mov     r4,#1
  571.         swi     XWimpExt_ShadeIcon
  572.  
  573.         ldmfd   r13!,{r0-r4,r10,pc}
  574.  
  575. .Play_Tune
  576.         stmfd   r13!,{r0-r1,r14}
  577.  
  578.         mov     r11,#1
  579.  
  580.         ldr     r0,Tune_Type
  581.         ldr     r1,Type_10B
  582.         cmp     r0,r1
  583.         swine   XTracker_Play
  584.         mvneq   r0,#0
  585.         mvneq   r1,#0
  586.         swieq   XDSym_PlaySingle
  587.  
  588.         bl      UnShade
  589.         ldr     r10,Code_End
  590.         mov     r2,r10
  591.         mov     r3,#19
  592.         mov     r4,#1
  593.         swi     XWimpExt_ShadeIcon
  594.  
  595.         ldmfd   r13!,{r0-r1,pc}
  596.  
  597. .Mouse_Click
  598.         stmfd   r13!,{r0-r12,r14}
  599.  
  600.         ldr     r9,[r12,#12]
  601.         cmn     r9,#2
  602.         bleq    Iconbar_Remove
  603.         ldmeqfd r13!,{r0-r12,pc}
  604.         ldr     r10,Code_End
  605.         cmp     r9,r10
  606.         ldmnefd r13!,{r0-r12,pc}
  607.  
  608.         ldr     r9,[r12,#8]
  609.         cmp     r9,#%010
  610.         ldreq   r2,Code_End+4
  611.         moveq   r3,#128
  612.         moveq   r4,#128
  613.         swieq   XWimpExt_OpenDialogue
  614.         ldmeqfd r13!,{r0-r12,pc}
  615.  
  616.         ldr     r9,[r12,#16]
  617.  
  618.         cmp     r9,#17
  619.         bleq    Next_Tune
  620.  
  621.         cmp     r9,#18
  622.         bleq    Prev_Tune
  623.  
  624.         cmp     r9,#19
  625.         bleq    Play_Tune
  626.  
  627.         cmp     r9,#20
  628.         bleq    Pause_Tune
  629.  
  630.         cmp     r9,#21
  631.         bleq    Stop_Tune
  632.  
  633.         cmp     r9,#22
  634.         bleq    Iconbar_Create
  635.  
  636.         cmp     r9,#23
  637.         ldmeqfd r13!,{r0-r12,r14}
  638.         beq     Poll_End
  639.  
  640.         cmp     r9,#24
  641.         mvneq   r0,#0
  642.         swieq   XSound_Speaker
  643.         rsbeq   r0,r0,#3
  644.         swieq   XSound_Speaker
  645.  
  646.         ldmfd   r13!,{r0-r12,pc}
  647.  
  648. .Iconbar_Create
  649.         stmfd   r13!,{r0-r12,r14}
  650.  
  651.         ldr     r10,Code_End
  652.         str     r10,[r12]
  653.         mov     r1,r12
  654.         swi     XWimp_CloseWindow
  655.  
  656.         mvn     r2,#1
  657.         adr     r3,IconbarSprite
  658.         mov     r5,#3
  659.         swi     XWimpExt_IconBarSprite
  660.         str     r0,IconbarIcon
  661.  
  662.         ldmfd   r13!,{r0-r12,pc}
  663.  
  664. .Iconbar_Remove
  665.         stmfd   r13!,{r0-r12,r14}
  666.  
  667.         adr     r12,Poll_Block
  668.         ldr     r0,Code_End
  669.         str     r0,[r12]
  670.         mov     r1,r12
  671.         swi     XWimp_GetWindowState
  672.         swi     XWimp_OpenWindow
  673.  
  674.         mvn     r0,#1
  675.         str     r0,[r12]
  676.         ldr     r0,IconbarIcon
  677.         str     r0,[r12,#4]
  678.         mov     r1,r12
  679.         swi     XWimp_DeleteIcon
  680.  
  681.         ldmfd   r13!,{r0-r12,pc}
  682.  
  683. .Tune_Type
  684.         dcd     0
  685.         align
  686.  
  687. .Type_CB6
  688.         dcd     &CB6
  689.         dcb     "&CB6 (STModule)",0
  690.         align
  691. .Type_001
  692.         dcd     &001
  693.         dcb     "&001 (STracker)",0
  694.         align
  695. .Type_CC5
  696.         dcd     &CC5
  697.         dcb     "&CC5 (TeqMusic)",0
  698.         align
  699. .Type_10B
  700.         dcd     &10B
  701.         dcb     "&10B (Symphony)",0
  702.         align
  703. .Type_365
  704.         dcd     &365
  705.         dcb     "&365 (CocoTrak)",0
  706.         align
  707. .Type_XXX
  708.         dcd     &000
  709.         dcb     "&000 (--------)",0
  710.         align
  711.  
  712. .Blank_String
  713.         dcb     0
  714.         align
  715.  
  716. .Bad_Author
  717.         dcb     "Not applicable (STracker/Symphony)",0
  718.         align
  719.  
  720. .Buffer
  721.         dbb     128,0
  722.         align
  723.  
  724.         dcb     10,10,"EasiTrack by Nicholas Marriott. © NSoft 1995"
  725.         dcb     10,10,"Written with Zap and assembled with extASM."
  726.         dcb     10,10,"No support for Coconizer or DTTracker yet!"
  727.         dcb     10,10,"Nicholas Marriott,",10,"1 Parkmore,"
  728.         dcb     10,"Magherafelt",10,"Co. Derry,",10,"N. Ireland,"
  729.         dcb     10,"BT45 6EZ."
  730.         dcb     10,10
  731.         align
  732. .Code_End
  733.