home *** CD-ROM | disk | FTP | other *** search
/ Maximum MODS / MaximumMODS.iso / amiga / delitracker_1.36 / docs / delitracker.doc next >
Text File  |  1996-01-23  |  54KB  |  1,399 lines

  1. ***************************************************************************
  2. *                               DeliTracker                  *
  3. ***************************************************************************
  4.  
  5.                             ⌐ 1992 by Delirium
  6.                          $VER: V1.36 (07.01.1993)
  7.  
  8.  
  9.  
  10. 1. CONTENTS
  11.  
  12.         1.CONTENTS
  13.  
  14.         2.LICENSING AND DISTRIBUTION
  15.  
  16.         3.INTRODUCTION
  17.           3.1 What is DeliTracker ?
  18.           3.2 Why use DeliTracker ?
  19.  
  20.         4. GETTING STARTED
  21.           4.1 System requirements
  22.           4.2 Starting from CLI/Shell
  23.           4.3 Starting from Workbench
  24.           4.4 Installation
  25.  
  26.         5. BASICS
  27.           5.1 Player 
  28.           5.2 Packed modules
  29.           5.3 Options
  30.           5.4 Configuration files
  31.  
  32.         6. HOW TO CONTROL DELITRACKER
  33.           6.1 The main window
  34.             6.1.1 Gadgets 
  35.             6.1.2 Menus
  36.             6.1.3 Shortcuts 
  37.         6.1.4 Appwindow
  38.           6.2 The preferences window
  39.             6.2.1 Gadgets 
  40.             6.2.2 Shortcuts 
  41.           6.3 ARexx 
  42.       6.4 Commodities
  43.  
  44.         7. TROUBLESHOOTING
  45.  
  46.     8. EXTERNAL PLAYER PROGRAMMING INTERFACE
  47.       8.1 The external player interface
  48.         8.1.1 The structure of external players
  49.         8.1.2 The structure of custom modules
  50.       8.2 How to build external players
  51.         8.2.1 Playerheader
  52.         8.2.2 Modulerecognicion
  53.         8.2.3 Interrupts
  54.       8.3 Tags
  55.       8.4 DeliTracker support functions
  56.       8.5 Hints and Tips
  57.  
  58.         9. ACKNOWLEDGEMENTS
  59.  
  60.  
  61.  
  62. 2. LICENSING AND DISTRIBUTION
  63.  
  64.        DeliTracker (c) 1991 - 1993 by Peter Kunath and Frank Riffel.
  65.  
  66.   This Program is Shareware. If you like this program and use it
  67.   frequently, we encourage you to register. The shareware fee is $US 20
  68.   or 20 DM. You may send CASH or EUROCHEQUE's. We cannot accept any other
  69.   cheques cause it is not possible for us to cash foreign checks without
  70.   having to pay substantial fees to the bank. Registered users will be
  71.   shipped a disk with the latest release version of DeliTracker. By
  72.   cooperating with this concept you help to ensure continued development
  73.   of this product. Please send your registration card (Orderform) and
  74.   the money to:
  75.  
  76.                                Frank Riffel
  77.                                 Merkstr. 27
  78.                               8129 Wessobrunn
  79.                                   Germany
  80.  
  81.  
  82.   You may send bug reports, remarks, and suggestions to this address as
  83.   well. If you have written a new soundsystem and you wish to adapt your
  84.   replay-routine to DeliTracker, contact us. We will help you.
  85.  
  86.   DeliTracker may be distributed on public-domain, shareware disks, and
  87.   electronic networks such as the Internet as longs as the followings
  88.   conditions are fulfilled:
  89.  
  90.     ░ all files must be kept together. You can find a list of all
  91.       files in 'Distribution'.
  92.  
  93.     ░ no part of the distribution may be changed in any way. The only 
  94.       exception is archiving (e.g. with LhA), but the original files 
  95.       must be 100% restoreable.
  96.  
  97.     ░ The price of a disk that contains DeliTracker must be less than 
  98.       US $6 or 8.- DM. The same is the maximum price that networks 
  99.       may charge from their users for downloading DeliTracker.
  100.  
  101.     ░ For use in commercial products the permission of the authors
  102.       is required.
  103.  
  104.   DeliTracker was developed and tested very carefully. Nevertheless
  105.   the Authors are not responsible for any damages that are caused by
  106.   DeliTracker. Use at your own risk.
  107.  
  108.  
  109. 3.INTRODUCTION
  110.  
  111.   3.1 What is DeliTracker ?
  112.  
  113.   DeliTracker is a soundplayer which supports several soundformats; some
  114.   are SoundTracker 15 inst., SoundTracker 31 inst., NoiseTracker,
  115.   ProTracker, StarTrekker without AM sounds and CustomPlay. Since these
  116.   types are so common, their replay routines are built within DeliTracker
  117.   itself. Additional players are loaded from disk, meaning that you can
  118.   very easily add/update players by placing them into the DeliPlayers
  119.   directory. DeliTracker is NOT a Songeditor, MIDIsequencer or Digitizer.
  120.   It is only meant to play music modules in a comfortable way.
  121.  
  122.   3.2 Why use DeliTracker ?
  123.  
  124.   There are many reasons for using DeliTracker; here is only a small list:
  125.  
  126.         ░ system friendly and multitasks happily
  127.         ░áallocates the soundchannels
  128.         ░ correct playspeed in PAL/NTSC (uses timerinterrupts)
  129.         ░ works well with serial.device
  130.         ░ supports xpkmaster.library for decrunching
  131.         ░ásupports up to 64 players
  132.         ░áruns fine with 680x0
  133.         ░ ARexx support
  134.         ░ has a configfile
  135.         ░ enforcer and mungwall proof
  136.         ░ supports full CLI or Workbench (ToolTypes) environment
  137.         ░áeasy to use & looks good
  138.         ░áhas Volume/Balance sliders
  139.         ░ resident cli startup
  140.         ░ásupports multiselect
  141.         ░ PubScreen support
  142.         ░ hotkey (Commoditiy)
  143.         ░ modules can be played by simply dropping the moduleicon into
  144.           the mainwindow (Appwindow).
  145.         ░áwritten in 100% Assembler
  146.  
  147.  
  148. 4. GETTING STARTED
  149.  
  150.   4.1 System requirements
  151.  
  152.   As of version 1.31 and beyond DeliTracker requires at least Workbench 
  153.   and Kickstart 2.0 (aka V37). We recomend the usage of Workbench 2.1 
  154.   (or 3.0), because the ASL Filerequester of V38 and above is much faster
  155.   and supports multiselect. If you want to use packed modules, the 
  156.   'xpkmaster.library' and the corresponding sublibraries must be installed. 
  157.   Make sure that you use V2 of XPK! V1 is NOT sufficient. DeliTracker 
  158.   requires at least 70KB of memory. Additional memory is needed for every
  159.   loaded player, for the current modulelist and the decrunched module. Of
  160.   course your System should be equiped with a Monitor that has speakers or
  161.   even better with a HiFi system.
  162.  
  163.  
  164.   4.2 Starting from CLI/Shell
  165.  
  166.   Open a Shell or CLI window and CD to the directory where DeliTracker is
  167.   located. Now you can type 'DeliTracker' followed by none/one/more options
  168.   explained in 5.4. The options and arguments should be separated by spaces. 
  169.   DeliTracker automatically detatches from the CLI and you may close the 
  170.   CLI window. If a wrong arument is supplied DeliTracker quits with a short
  171.   helptext.
  172.  
  173.   Example: 'DeliTracker config DT.config volume 32 filter 0'
  174.   
  175.   Starts DeliTracker with 'DT.config' as configuration file, turns the
  176.   lowpass filter off (not on A1000's) and sets the volume to 32.
  177.  
  178.  
  179.   4.3 Starting from Workbench
  180.  
  181.   Open the drawer that contains DeliTracker and start it with a double
  182.   click. All options can be set as ToolTypes by using the 'Info' item
  183.   from the Workbench. The options must be separated by an '=' from the
  184.   arguments. Invalid Tooltypes are ignored. DeliTracker can be used as
  185.   a 'Default Tool' for automatic playing of modules.
  186.  
  187.   Example:      Config=DT.config
  188.                 PrefWinXY=0/11
  189.                 Volume=43
  190.                 CX_Popup=NO
  191.  
  192.   If DeliTracker is started with these tooltypes, it loads 'DT.config' as
  193.   the configuration file and sets the volume to 43.
  194.  
  195.  
  196.   4.4 Installation
  197.  
  198.   If you already use an older version of DeliTracker, please delete all
  199.   files of the old distribution and your configuration files before you
  200.   install this version.
  201.  
  202.   Copy DeliTracker in a directory of your choosing. Now copy the whole 
  203.   'DeliPlayers' directory into this place. We strongly suggest that you
  204.   move seldom used players from DeliPlayers/ to DeliPlayers/PlayerStore/. 
  205.   If you don't do this you waste memory! When DeliTracker is started every 
  206.   player in the 'DeliPlayers' drawer will be loaded. Note: any loaded 
  207.   player will stay in memory until the user unloads it or DeliTracker is 
  208.   exited. If you have packed modules you must install the XPK libraries.
  209.   A double click on the CopyLibs icon will launch a script that will 
  210.   install the powerpacker.library and the XPK libraries in LIBS:.
  211.  
  212.  
  213. 5. BASICS
  214.  
  215.   5.1 Player 
  216.  
  217.   With DeliTracker it is possible to load single players. If such a player
  218.   is loaded DeliTracker will recognize and play modules of this type.
  219.   Currently a maximum of 64 external players may be loaded. This should be
  220.   sufficient for awhile. When DeliTracker is started all players in the
  221.   'DeliPlayers' directory or the specified playerpath e.g. tooltypes or in
  222.   the configfile are loaded. The player concept is one of the strong points
  223.   in DeliTracker. It has the advantage that you may only load the players 
  224.   that you need (= efficient memoryusage). Of course you may unload any 
  225.   player at any time. Another drawback is that you only need to know the 
  226.   'DeliTracker-player' rather than every single player. Multimedia 
  227.   applications in conjunction with ARexx greatly benefit from this (e.g. 
  228.   You may play any Module in an AmigaVision(TM) presentation). Another 
  229.   major advantage is that the player interface is very flexible so everyone
  230.   may easily enhance/update/adapt or write players. DeliTracker has the 
  231.   most common players built in. These are: StarTrekker without AM sounds, 
  232.   SoundTracker15, SoundTracker31, NoiseTracker and ProTracker. There is 
  233.   another player called 'CustomPlay'; this is a special player that was 
  234.   created to play special modules that contain their own replay code. These
  235.   'modules' may not be crunched, because they are loaded via LoadSeg() to 
  236.   allow relocation. All external players are listed in the 'Players.doc'.
  237.   For details on programming players read the includefile and 
  238.   'Programming.doc'.
  239.  
  240.   5.2 Packed modules
  241.  
  242.   If xpkmaster.library V2 or higher is installed DeliTracker will use the
  243.   library for decrunching. Certain players do NOT support module packing!
  244.   This is due to the fact that those players load the module by themselves
  245.   rather than using the internal LoadFile() function. If the player-info
  246.   field for a particular player shows 'Packable....NO' you are not allowed
  247.   to crunch modules of this player. 
  248.   NOTE: Don't pack custommodules because they are loaded and RELOCATED via 
  249.   LoadSeg()! The only way to get around this is to use the XFH filehandler.
  250.  
  251.  
  252.   5.3 Options
  253.   
  254.   To allow an easy and flexible configuration, DeliTracker uses the
  255.   following options. These options are used as KEYWORDS in Tooltypes,
  256.   Configurationfiles and CLI templates. The options are not case sensitive!
  257.  
  258.   Option                  Default value and description 
  259.   --------------------    -----------------------------
  260.  
  261.   cx_priority <pri>       0 (default priority)
  262.                           Sets the commodities priority. Valid values
  263.                           are -128 to 127.
  264.  
  265.   cx_popup <yes|no>        yes (window opened)
  266.                           Defines if the control window should be opened
  267.                           at startup. If it is set to 'no', the main window
  268.                           will not be opened. It may be opened via hotkey,
  269.                           Commodities Exchange or with an ARexx command. 
  270.  
  271.   cx_popkey <string>      "" (no hotkey)
  272.                           This defines the hotkey that is used to open or
  273.                           close the main window. If the mainwindow is 
  274.                           closed via hotkey the prefs window is closed as
  275.                           well -- the same applies to Hide Interface. To 
  276.                           disable the hotkey use the INACTIVE option of
  277.                           the Commodities Exchange Program.
  278.  
  279.   config <file>           "ENV:DeliTracker.config"
  280.                           Loads the specified file as a configuration file.
  281.                           Note: This option may not be specified in a
  282.                           configuration file!
  283.  
  284.   module <file>           No file, empty module list.
  285.                           Adds the <file> to the module list.
  286.  
  287.   pubscreen <Screen>      "", default PubScreen (usually Workbench).
  288.                           Let you specify the name of the public screen
  289.                           where DeliTracker should pop up. If the given
  290.                           screen is not available (e.g. does not exist),
  291.                           DeliTracker opens its windows on the default
  292.                           public screen.
  293.                           Note: Screen names are case sensitive!
  294.  
  295.   playerpath <path>       "DeliPlayers"
  296.                           Sets the path where DeliTracker loads the 
  297.                           external players.
  298.  
  299.   windowxy<XPos>/<YPos>   0/0
  300.                           Attempts to open the mainwindow at the given 
  301.                           position. If this fails the window will be opened
  302.                           at 0/0.
  303.  
  304.   prefwinxy<XPos>/<YPos>  0/1
  305.                           Attempts to open the prefs window at the given
  306.                           position. If this fails the window will be opened
  307.                           at 0/1.
  308.  
  309.   volume <volume>         64 (maximal volume)
  310.                           Sets the volume to <volume>. Where volume can
  311.                           range from 0 to 64.
  312.                         
  313.   balance <balance>       0
  314.                           Sets the balance to <balance>. Where balance can
  315.                           range from -64 (left channels only) to 64 (right
  316.                           channels only).
  317.  
  318.   reqlines <lines>        0 (requester internal default setting).
  319.                           Specifies the filerequester height in lines.
  320.  
  321.   subsong <number>        0 (first subsong)
  322.                           Sets the subsong counter to <number> if the
  323.                           player for the first module in the soundlist
  324.                           supports subsongs.
  325.  
  326.   playing <yes|no>        yes (first module is playing)
  327.                           Defines if the first module in the soundlist
  328.                           should be loaded, when DeliTracker is started.
  329.  
  330.   filter <yes|no>         no (filter off)
  331.                           Switches the internal lowpass filter on or off.
  332.                           An advantage of having the filter off is that
  333.                           frequencies over 7kHz are not cut off. This has
  334.                           the effect that most modules will sound much
  335.                           better.
  336.                           Note: On A1000 this switch has no effect.
  337.  
  338.   quick <yes|no>          yes (module is played immediately after loading)
  339.                           Defines if a loaded module should begin to play
  340.                           immediately after loading or if the module is
  341.                           in a paused state. This option is meant for
  342.                           synchronization purposes in ARexx scripts.
  343.  
  344.   random <yes|no>         no (sequential order)
  345.                           Lets you specify whether a Next/Prev-Song event
  346.                           should take a randomly picked or the following 
  347.                           (preceeding) list entry for loading. Once a 
  348.                           module has been played it won't be reselected 
  349.                           until other selected modules have been played.
  350.                           This behaviour is also known as 'Shuffleplay'.
  351.                           This option only works if there are more than 2 
  352.                           entries in the modulelist.
  353.  
  354.   append <yes|no>         no (replace modulelist with new selection)
  355.                           Lets you specify whether the soundlist should be
  356.                           appended at the end or replaced by the current
  357.                           selection. If this option is set, multiselect of
  358.                           modules from different directories is possible.
  359.  
  360.   fadeout <yes|no>        no (don't fade)
  361.                           Lets you specify whether the song should be faded
  362.                           out on a eject event or if no smooth transition 
  363.                           should be done. This feature is only available 
  364.                           for players that support volume changing.
  365.  
  366.   songend <yes|no>        no (ignore songend signals)
  367.                           Lets you specify whether songend events should
  368.                           be ignored or not. SOME players support a
  369.                           notification of the song end. If this option is
  370.                           set, DeliTracker will pause the module and load 
  371.                           the next module in the list. If only one module
  372.                           is in the soundlist then it is paused after the
  373.                           song has played once.
  374.  
  375.   timeout <secs>          0 (no timeout)
  376.                           Lets you specify the amount of time (in secs)
  377.                           after that DeliTracker will cause a Next-Song
  378.                           event. A value of 0 disables timeout. 
  379.  
  380.  
  381.   5.4 Configuration files
  382.  
  383.   A Configuration file contains one or more options with the appropriate
  384.   arguments. The only option that is not possible is the 'config' option.
  385.   Only one option per line is allowed. DeliTracker can create configfiles
  386.   with the save functions from the prefs window. Another way is to create 
  387.   a config file by your own with an editor or automatically by using the 
  388.   following NewList alias: 'alias ModList NL -hTigfsF "module=\'%P\'" []'.
  389.   Only redirect the output to a file.
  390.  
  391.   Example of a configfile:
  392.  
  393.   windowxy=473/15
  394.   random=yes
  395.   songend=yes
  396.   timeout=300
  397.   reqlines=50
  398.   subsong=2
  399.   playerpath="Data:DeliPlayers"
  400.   module="Data:Modules/SonicArranger/MF__Slowmotion1.3.pp"
  401.   module="Data:Modules/FutureComposer13/hidden part.pp"
  402.  
  403.   Tooltypes and CLI options have a higher priority over the options in a
  404.   configfile. This means they can override config file settings.
  405.  
  406.   At startup DeliTracker tries to open 'ENV:DeliTracker.config' as the
  407.   default configfile. If this file can be opened, DeliTracker uses all
  408.   settings that are contained therein. After this DeliTracker loads the
  409.   external players and plays the first module. If the Configfile is not
  410.   present, DeliTracker tries to load all external players that are located
  411.   in the 'Deliplayers' directory on the current path.
  412.  
  413.  
  414. 6. HOW TO CONTROL DELITRACKER
  415.  
  416.   6.1 The main window
  417.   
  418.   The main window is the central part of the DeliTracker. All module
  419.   specific things may be controlled with this panel.
  420.  
  421.     6.1.1 Gadgets
  422.     
  423.     This is a overview of the functions of the gadgets. If a gadget is
  424.     drawn ghosted then this option is not accessible for this player.
  425.     Two reasons why this is so: First, the soundsystem does not have this
  426.     feature at all (e.g. SoundTracker has no SubSongs), or second, the 
  427.     player is not perfectly adapted (which is more likely).
  428.  
  429.  
  430.     +---------+-+------------------------------------------------+-+
  431.     |         | |                                             [] | | [15]
  432. [1] |    ?    + +------------------------------------------------+ +
  433.     |         | |                            []                  | | [14]
  434.     +---+-----+-+--+-----+-----+-----+----+-----+-----+-----+----+-+
  435. [2] | + |     |    |     |     |     |    |     |     |     | |»»\ |
  436.     +---+  |< |  < |  << |  |> |  >> |  > |  >| |  [] |  ^  | |  | |
  437. [3] | - |     |    |     |     |     |    |     |     |  -  | +--+ |
  438.     +---+-----+----+-----+-----+-----+----+-----+-----+-----+------+
  439.           [4]   [5]  [6]   [7]   [8]   [9]  [10]  [11]  [12]  [13]
  440.  
  441.      [1] opens or closes the Prefs-Window
  442.  
  443.      [2] Faster: plays song a little faster
  444.  
  445.      [3] Slower: plays song a little slower
  446.  
  447.      [4] Prev Song: play the previous song. This gadget is only enabled if
  448.          more than one file was selected. If Randomplay is selected this 
  449.          button picks a random module. See also Randomplay.
  450.  
  451.      [5] Prev Pattern: Jumps to the previous pattern. If the current 
  452.          pattern is the first, the counter is set to the last pattern.
  453.  
  454.      [6] Prev SubSong: Jumps to the previous sub-song (if available).
  455.  
  456.      [7] Play/Pause: Plays a paused sound or pauses a playing sound.
  457.  
  458.      [8] Forward: Jumps to the next pattern in the module. If the current
  459.          pattern is the last, the counter is set to the first pattern.
  460.  
  461.      [9] Next Song: This button loads the next module form the selected
  462.          Soundlist. If the last module of the list is playing and you 
  463.          press this button the first module of the list will be played
  464.          (cyclic list). If Randomplay is selected this button has the same
  465.          function as the Prev Song button.
  466.  
  467.     [10] Next SubSong: Plays the next SubSong of a module. This function
  468.          allows you to select other melodies in the module. Not every
  469.          Soundsystem provides you this feature. One of the most common
  470.          Soundsystems that provide multi-modules is TFMX.
  471.  
  472.     [11] Stop Song: This button resets the patterncounter and the speed to
  473.          the initial default value.
  474.  
  475.     [12] Kill Song: stops the actual module and removes it from memory.
  476.  
  477.     [13] Load Song: Opens the filerequester and lets you select one or
  478.          more modules for playing. The first selected module is loaded
  479.          and played. If enough memory is available, DeliTracker will use 
  480.          double buffering. This means that the actual song continues
  481.          playing until the next song is loaded.
  482.  
  483.     [14] Balance Control: Let you change the Volume.
  484.  
  485.     [15] Volume Control: Let you change the Balance
  486.  
  487.  
  488.     6.1.2 Menus
  489.            Project
  490.                 Load Module <A> L .........Open the filerequester.
  491.                 Play/Pause        .........Play or pause a module.
  492.                 Stop Playing      .........Stopt the actual module.
  493.                 Eject Module      .........Stop playing and remove the
  494.                                            actual module from memory.
  495.                 ================= 
  496.                 Prefs ...         .........Open prefs window
  497.                 =================
  498.                 About ...   <A> ? .........Open 'About' requester.
  499.                 =================
  500.                 Quit        <A> Q .........Quit DeliTracker.
  501.  
  502.            Control      
  503.                 Faster            .........Increase Playspeed.
  504.                 Slower            .........Decrease Playspeed.
  505.                 Forward           .........Jump one Pattern forward.
  506.                 Backward          .........Jump one Pattern back.
  507.                 Next SubSong      .........Play next Subsong.
  508.                 Prev Subsong      .........Play previous Subsong.
  509.                 Next Module       .........Load the next module in the
  510.                                            Soundlist. See also Randomplay.
  511.                 Prev Module       .........Load previous module.
  512.  
  513.     6.1.3 Shortcuts
  514.  
  515.     All functions of the mainwindow can although be reached with shortcuts.
  516.     To make them easy to remember we decided to order them hirarchically on
  517.     the nummeric keypad. In additon you may specify a HotKey for opening
  518.     and closing of the mainwindow (refer to cx_hotkey).
  519.  
  520.     * and <A> L open the filerequester for moduleselection.
  521.     /           open or close the prefs window.
  522.  
  523.     ] and )     play next song in the modulelist
  524.                 (only if more files are selected).
  525.     [ and (     play previous song (same as above).
  526.  
  527.     8           play next subsong.
  528.     7           play previous subsong.
  529.  
  530.     5           step to next pattern.
  531.     6           skip one pattern back.
  532.  
  533.     +           increase playspeed.
  534.     -           decrese playspeed.
  535.  
  536.     1           stop song (stop playing, reset patterncunter).
  537.     0           play/pause (toggles between playing and paused).
  538.  
  539.     .           stop song and remove it from memory (eject).
  540.  
  541.     9           decreases the volume (besides -).
  542.     6           increases the volume (besides +).
  543.  
  544.     2           changes the balance
  545.                 (decreases the volume of the right channels).
  546.     3           changes the balance.
  547.                 (increases the volume of the right channels)
  548.  
  549.     <A> ?       opens the 'About' requester.
  550.     <A> Q       quits DeliTracker.
  551.  
  552.     6.1.4 Appwindow
  553.     
  554.     To make the module selection even more comfortable icons from modules
  555.     and module drawers may be dropped on the control window. The modules
  556.     will be handled as if they were selected with the file requester. If 
  557.     a drawer is dropped all files will be scanned and added to the module 
  558.     list. Only files that are obviously not module files (e.g .info files)
  559.     will be skipped. Subdirectorys are not scanned. To use this feature the
  560.     control window of DeliTracker must be opened on the workbench screen.
  561.  
  562.  
  563.   6.2 The preferences window
  564.  
  565.   The preferences window is for seting all global and player specific
  566.   options. To open the prefs window you may either select the 'Prefs ...'
  567.   menu or the '?'-Gadget of the mainwindow. Of course, there is a short 
  568.   cut ('/') and an arexx-command ('openprefswin'), too. To activate a
  569.   player select it from the player requester. After selecting a player,
  570.   all informations about the player is shown beside it in the player
  571.   information field.
  572.  
  573.     6.2.1 Gadgets
  574.  
  575.     ADD          Load an external player and set the playerpath.
  576.                  If a player with the same name is already loaded,
  577.                  the player with the lower version number will be
  578.                  expunged.
  579.  
  580.     DEL          Deletes the selected player. This means the player is
  581.                  unloaded. Internal players may be deleted too, but the
  582.                  memory is not freed.
  583.  
  584.     Filter       Refer to 5.4 filter option.
  585.  
  586.     Quick        Refer to 5.4 quick option.
  587.  
  588.     Random       Refer to 5.4 random option.
  589.  
  590.     Songend      Refer to 5.4 songend option.
  591.  
  592.     Append       Refer to 5.4 append option.
  593.  
  594.     Fadeout      Refer to 5.4 fadeout option.
  595.  
  596.     Time         Refer to 5.4 timeout option.
  597.  
  598.     Load Config  Load a saved configuration and set all values.
  599.  
  600.     Save Config  Save all actual settings and the current module list
  601.                  to a configuration file.
  602.  
  603.     Save List    Only save the module list to a configuration file.
  604.  
  605.     Config       If the player provides a player specific configuration
  606.                  routine this routine will be called.
  607.  
  608.     OK           Close the preferences window.
  609.  
  610.  
  611.     You can set the playerdirectory by typing the path into the stringgad
  612.     (on the lefthand of the ADD gadget) or using the filerequester (ADD).
  613.  
  614.     6.2.2 Shortcuts
  615.  
  616.     To make the shortcuts easy to remember we decided to use the first
  617.     letter of the function (if not already used) as shortcuts. Shortcuts
  618.     may be entered either in lower or upper case.
  619.  
  620.     a           <A>dd (Filerequester for loading players).
  621.  
  622.     d           <D>el (delete selected player).
  623.  
  624.     l           <L>oad (Load a config file).
  625.  
  626.     s           <S>ave (Save a config file).
  627.  
  628.     c           <C>onfig (configure selected player).
  629.  
  630.     o           <O>k (Close preference window).
  631.  
  632.     q           <Q>uick (toggle quick).
  633.  
  634.     f           <F>ilter (toggle filter).
  635.  
  636.     r           <R>andom (toggle random).
  637.  
  638.     p           A<P>pend (toggle append).
  639.  
  640.     e           Song<E>nd (toggle songend detection).
  641.  
  642.     u           Fadeo<U>t (toggle fadeout).
  643.  
  644.     t           <T>ime(out) (activate timeout gadget).
  645.  
  646.   6.3 ARexx 
  647.  
  648.   Nearly every function of DeliTracker may be controlled with ARexx.
  649.   This is very nice if you are using other ARexx aware software
  650.   like AmigaVision(TM). DeliTracker is addressed as a function host
  651.   with the name "rexx_DT". DeliTracker provides the following commands:
  652.  
  653.   quit                  Leave DeliTracker.
  654.  
  655.   filter <yes|no>       yes: Switch filter on.
  656.                         no:  Switch filter off.
  657.  
  658.   quickstart <yes|no>   yes: Turn quick on.
  659.                         no:  Turn quick off.
  660.  
  661.   random <yes|no>       yes: Turn Randomplay on.
  662.                         no:  Turn Randomplay off.
  663.  
  664.   songend <yes|no>      yes: Recognize songend signals.
  665.                         no:  Ignore songend events.
  666.  
  667.   append <yes|no>       yes: Activate append mode.
  668.                         no:  Deactivate Append mode.
  669.  
  670.   fadeout <yes|no>      yes: Activate fadeout mode.
  671.                         no:  Deactivate fadeout mode.
  672.  
  673.   timeout <SECS>        Set timeout to given number of seconds (SECS) 
  674.                         If SECS = 0 the timeout function is disabled.
  675.  
  676.   volume <VOL>          Set volume to <VOL> (Range VOL: 0 to 64).
  677.  
  678.   balance <BAL>         Set balance to <BAL>, 0 is default, -64 left only,
  679.                         64 right only (Range BAL: -64 to 64).
  680.  
  681.   forward               Play next pattern.
  682.  
  683.   backward              Play previous pattern.
  684.  
  685.   nextsong              Play next song (module).
  686.  
  687.   prevsong              Play previous song (module).
  688.  
  689.   nextsubsong           Play next subsong.
  690.  
  691.   prevsubsong           Play previous subsong.
  692.  
  693.   faster                Increase playspeed.
  694.  
  695.   slower                Decrease playspeed.
  696.  
  697.   loadconfig [FILE]     Load configfile [FILE] if [FILE] was specified,
  698.                         else pop filerequester up.
  699.  
  700.   saveconfig [FILE]     Save configfile [FILE] if [FILE] was specified,
  701.                         else pop filerequester up.
  702.  
  703.   savelist [FILE]       Save module list to [FILE] if [FILE] was specified,
  704.                         else pop filerequester up.
  705.  
  706.   loadplayer [PLAYER]   Load the [PLAYER] if specified, else open
  707.                         loadplayer requester.
  708.  
  709.   deleteplayer <NUMBER> Remove player number <NUMBER> from memory.
  710.                         Note: all modules of this player won't be
  711.                         recognized any longer.
  712.  
  713.   configplayer <NUMBER> Call the configuration routine of the 
  714.                         player <NUMBER>.
  715.  
  716.   playpause             Play/Pause song.
  717.  
  718.   stop                  Stop song.
  719.  
  720.   playmod [MODULE]      play [MODULE] if [MODULE] was specified else pop
  721.                         requester up.
  722.  
  723.   eject                 Remove active module from memory.
  724.  
  725.   makelist [MODULE]    if [MODULE] is supplied, the given modulename is 
  726.             appended to an internal module list. If [MODULE]
  727.             is ommited the current module list is rebuild and
  728.             the internal list is cleared. Depending on the 
  729.             append flag the current list is either overwritten
  730.             or expanded with the internal list.
  731.  
  732.   playlist <NUMBER>    Play the module with the list position <NUMBER>.
  733.  
  734.   pubscreen <SCREEN>    Closes all DeliTracker windows and tries to open
  735.                         the mainwindow on the pubscreen <SCREEN>.
  736.  
  737.   openmainwin           Open and/or activate mainwindow.
  738.  
  739.   closemainwin          Close mainwindow.
  740.  
  741.   openprefswin          Open and/or activate prefs window.
  742.  
  743.   closeprefswin         Close the prefs window.
  744.  
  745.   status <group> <dependent>  Returns the actual status. This funtion is
  746.                         divided into three different groups: global
  747.                         settings (g), player specific settings (p) and
  748.                         module dependent settings (m). Additional
  749.                         arguments are specified after the group.
  750.  
  751.   <group> =     g :     Global
  752.  
  753.         <dependent>  = <cmd>
  754.  
  755.                <cmd>            description             returnvalue
  756.  
  757.                 ver             DeliTracker version     number
  758.                 dir             playerdir               string
  759.                 num             players                 number
  760.                 led             filter                  <yes|no>
  761.                 qst             quickstart              <yes|no>
  762.                 rnd             random                  <yes|no>
  763.                 app             append                  <yes|no>
  764.                 fad             fadeout                 <yes|no>
  765.                 end             songend                 <yes|no>
  766.                 tim             timeout in seconds      number
  767.                 mwi             mainwindow closed/open  <yes|no>
  768.                 pwi             prefswindow closed/open <yes|no>
  769.                 vol             current volume          number
  770.                 bal             current balance         number
  771.                 ply             paused or playing       <yes|no>
  772.                 pub             prefered pubscreen      string
  773.  
  774.   <group> =     m :     Module
  775.  
  776.         <dependent>  =  <cmd>
  777.  
  778.                <cmd>            description             returnvalue
  779.  
  780.                 dir             moduledir               string
  781.                 fil             filename                string
  782.                 pnr             actual PlayerNr         number
  783.                 max             selected modules        number
  784.                 num             actual position in list number
  785.  
  786.  
  787.  
  788.   <group> =     p :     Player
  789.  
  790.         <dependent>  =  <playernum> <cmd>
  791.  
  792.                <cmd>            description             returnvalue
  793.  
  794.                 nam             name                    string
  795.                 cre             creator                 string
  796.                 ver             player version          number
  797.                 vol             volume                  <yes|no>
  798.                 bal             balance                 <yes|no>
  799.                 jmp             patternjump             <yes|no>
  800.                 spd             playspeed               <yes|no>
  801.                 sub             subsong                 <yes|no>
  802.                 cfg             config                  <yes|no>
  803.                 pck             packable                <yes|no>
  804.  
  805.  
  806.   Square brackets [...] mark arguments that may be omitted. Arguments in
  807.   angle brackets <...> must be supplied.
  808.  
  809.   Note: For almost any command example scripts are available. All commands
  810.   may be entered in lower and upper case.
  811.  
  812.  
  813.   6.4 Commodities
  814.  
  815.   DeliTracker is a Commodity, therefore some typical things may be 
  816.   controled from the Commodies Exchange Program. First select 'DeliTracker' 
  817.   in the 'Available Commodities' box. The cycle gadget shows you if the 
  818.   hotkey for opening/closing the mainwindow is enabled or not. Click once 
  819.   to change this. 'Show Interface' will open and activate the mainwindow.
  820.   'Hide Interface' will close all DeliTracker windows. Finally a click on
  821.   the 'Remove' button will quit DeliTracker. As usual for commodities a
  822.   click on the close gadget only closes the window, but doesn't quit the
  823.   program.
  824.  
  825.  
  826. 7. TROUBLESHOOTING
  827.  
  828.   Preferences window can't be opened: Check the screen height. It must be
  829.   at least 190 Pixels + Barheight. The Barheigth depends on the screenfont
  830.   height. Try to use a smaller font (topaz 8).
  831.   
  832.   Some external players have trouble with >68010 or SuperHires; these
  833.   problems often can't be fixed. The cause of this lies in the coding style
  834.   (e.g. the player is part of the module and contains modulespecific
  835.   code/data) of these players. Many players are hitting at the basic
  836.   principles of programming on the Amiga. Such things as poking directly
  837.   into processor vectors or working with nullpointers are often seen. Don't
  838.   be astonished if enforcer hits occur. These hits are only from external
  839.   players and *not* from DeliTracker itself!!  Usually the playspeed of the
  840.   players are the same on PAL/NTSC machines, because a CIA, rather than
  841.   a VBlank IRQ is used. Since some players essentially need a VBlank
  842.   interrupt, these players have different playspeeds depending on the
  843.   selected video mode (PAL/NTSC/Productivity).
  844.  
  845.   Some players dont take notice of the VBR (on >68000) and write directly
  846.   to the interrupt vector table ($70 Vector/Audio-DMA-End). This may have
  847.   the effect that you won't hear anything when VBR is nonzero. Those
  848.   players are marked in the player documentation.
  849.  
  850.   For Modem users: All players that use the DeliTracker internal timer
  851.   Interrupt should now work well with serial transfers. Players that
  852.   generate their own timer interrupt will probably not(!). This is due
  853.   to the fact that instead of executing the actual playroutine in the
  854.   timer interrupt itself, we cause a SoftInt (so that the real routine
  855.   executes in a lower interrupt priority than the RFB interrupt).
  856.  
  857.  
  858. 8. EXTERNAL PLAYER PROGRAMMING INTERFACE
  859.  
  860.   DeliTracker supports so called external players. These are executables
  861.   in a special format so that they can be loaded from DeliTracker.
  862.  
  863.   8.1 The external player interface
  864.   
  865.   External Players are executables (object files) which means they
  866.   are relocated. At the start of an external player you can find the
  867.   characteristic playerstructure. This structure is generated with a
  868.   macro that can be found in 'misc/deliplayer.i'. There are two kinds
  869.   of players: normal players and custom modules.
  870.  
  871.     8.1.1 The structure of external players
  872.  
  873.     Normal players can distinguished from custom modules by the existence
  874.     of a check routine and the lack of the DTP_CustomPlayer tag.
  875.  
  876.     { player header    }    identifies the objectfile as player.
  877.     { tag array    }    description of the playerfuntions.
  878.     { interfacecode }    playername/registerconversion/checkcode...
  879.     { replaycode    }    replay code itself 
  880.     { optional data    }    optional data
  881.  
  882.     8.1.2 The structure of custom modules
  883.  
  884.     These are not modules in the conventional meaning. They are more like
  885.     external players, the difference is that custom modules contain the 
  886.     player and the module. With the custom module interface you can adapt
  887.     almost every module. If you have more modules with the same replay 
  888.     routine we suggest to write an own player for this moduleformat. 
  889.  
  890.     { player header    }    identifies the objectfile as player.
  891.     { tag array    }    description of the playerfuntions.
  892.     { interfacecode }    playername/registerconversion/checkcode...
  893.     { replaycode    }    replay code itself 
  894.     { optional data    }    optional data
  895.     { SOUND DATA    }    music data (the module)
  896.  
  897.   8.2 How to build external players
  898.  
  899.   It is not difficult to adapt a player if you have the replayroutine. 
  900.   You only need to write some interfacecode. DeliTracker has some helpful 
  901.   builtin routines that will make this job a lot easier. To adapt a new 
  902.   soundsystem you need the replayroutine of that soundsystem, and at least
  903.   5 modules for testing the adaption.
  904.  
  905.     8.2.1 Playerheader
  906.  
  907.     The PLAYERHEADER macro generates the header that identifies the file as
  908.     a valid external player for DeliTracker. This macro must exist and the 
  909.     player must begin with the macro. The only parameter you must supply is
  910.     a pointer to a Tag Array that contains all functions that the external
  911.     player supports. In all calls to player functions (except the interrupt 
  912.     routine) a5 will contain the address to the global player datastructure 
  913.     (Base). For more about this structure read 'misc/deliplayer.i'. In your
  914.     routines (except in DTP_Interrupt) you may trash all registers.
  915.  
  916.     PLAYERHEADER <tagarray>
  917.  
  918.     tagarray    Pointer to a tag array, terminated with TAG_DONE.
  919.  
  920.     8.2.2 Modulerecognicion
  921.  
  922.     In order to recognize the different moduleformats every player contains
  923.     a specific routine, that tells DeliTracker if the player can play this
  924.     module or not. This routine has the task to check certain positions in 
  925.     the module that are identical in every module (like 'M.K.' at offset 
  926.     $438 in NoiseTracker modules) or significant assembler instructions (if
  927.     the module contains the player). Testing against one or two branches or
  928.     jumps is NOT enough, cause many modules with player have branchtables at
  929.     the beginning of the module. If the player recognizes the wrong module, 
  930.     a system crash will be the result! So be careful with the Ckeckroutine. 
  931.     As you can see the playerstructure has two  checkfunctions but the 
  932.     player must use exactly one check routine. This leads to two basic 
  933.     player types:
  934.  
  935.     a) Type one Player
  936.     Here the Check1 function is implemented.
  937.  
  938.     Advantage: You can implement players that can load the module
  939.             by itself.
  940.     Disadvantage: No Packsupport, more complex.
  941.  
  942.     This type should only be used if you REALLY need to load the module by
  943.     yourself!
  944.     (e.g. FTM, IFF-8SVX player that loads the sample while playing, ...) 
  945.  
  946.     b) Type two Player - the easier way 
  947.      Here the Check2 function is implemented.
  948.  
  949.     Advantage: The module may be packed and DeliTracker handles the
  950.            loading and allocation of the module for you.
  951.     Disadvantage: The module is completely loaded into CHIP-Memory.
  952.  
  953.     Regardless of the playertype the checkfunction must return d0.l=0 if
  954.     the player can handle this module or d0.l<>0 if not.
  955.  
  956.     8.2.3 Interrupts
  957.  
  958.     Players can be divided in two categories:
  959.  
  960.     a) Player that uses the internal timer interrupt from DeliTracker
  961.  
  962.      Advantage: The player is independent from the selected videomode
  963.         The player has automatically the faster/slower function.
  964.         No expense for interrupthandling (interrupt structure
  965.         and the insert/remove code).
  966.         Compatible with the serial.device.
  967.      Disadvantage: The interrupt is not synchronous to the VBlank (This 
  968.             leads to problems only in certain cases).
  969.          
  970.      b) Player that generates their own interrupt
  971.  
  972.      Advantage: You can use other interrupt sources (like AudioIRQ)
  973.         
  974.      Disadvantage: You have to handle the interrupts by yourself, and if
  975.            you use VBlank the player is not independent to the
  976.            videomode.
  977.  
  978.     If you use your own timerinterrupt you should allocate CIAB because 
  979.     under 2.x the CIAA is used by the system. Do not to run the soundcode 
  980.     directly in the timerinterrupt. Instead you should Cause() a SoftInt in
  981.     the timer interrupt and execute the routine in the SoftInt. This is to
  982.     assure maximum compatibility for modem users because the SoftInt has a
  983.     lower priority thant the RBF interrupt. Beware of writing directly to
  984.     the 680x0 intvectors! You should use AddIntServer() or SetIntVector() 
  985.     from the OS.
  986.  
  987.   8.3 Tags
  988.  
  989.   In addition to the system tags (TAG_DONE, TAG_IGNORE, TAG_MORE, TAG_SKIP)
  990.   this tags may be used:
  991.  
  992.   DTP_CustomPlayer (BOOL) - this tag identifies a player as customplayer.
  993.         If this tag is used the following tags are ignored:
  994.                 DTP_PlayerVersion
  995.                 DTP_PlayerName
  996.                 DTP_Creator
  997.                 DTP_Check1
  998.                 DTP_Check2
  999.                 DTP_ExtLoad
  1000.                 DTP_Config
  1001.                 DTP_UserConfig
  1002.  
  1003.   DTP_RequestDTVersion (WORD) -    only if the DeliTracker version is greater
  1004.         than or    equal to the requested version (ti_Data) will
  1005.         DeliTracker accept the player. If your player uses 
  1006.         functions that were introduced in later revisions of 
  1007.         DeliTracker you must set this tag according to the version
  1008.         that introduced this function.
  1009.  
  1010.   DTP_RequestV37 (BOOL) - if this tag is set, only the Kick 2.0 version of
  1011.         DeliTracker will load the player.
  1012.         (dtg_GadToolsBase is valid)
  1013.  
  1014.   DTP_PlayerVersion (WORD) - Tag that contains the revision number of the
  1015.         player.    If there are two players with same name the player
  1016.         with the higher version is used.
  1017.  
  1018.   DTP_PlayerName (STRPTR) - ti_Data contains a pointer to the playername.
  1019.         This string may be as long as you wish, but only the first
  1020.         24 chars are actually used. This tag must exist !
  1021.  
  1022.   DTP_Creator (STRPTR) - pointer to the author/adaptor name. This string
  1023.         is visible in the prefs window if the player is selected.
  1024.         The string may contain $A as line separator.
  1025.  
  1026.   DTP_Check1 (FPTR) - pointer to a module identification routine. This
  1027.         routine    is called after the first 1024 bytes of the module
  1028.         are loaded. If the module is shorter, the rest will contain
  1029.         zero. If the routine recognizes the moduleformat it must 
  1030.         return d0=0 else d0<>0.
  1031.  
  1032.   DTP_Check2 (FPTR) - pointer to a module identification routine. This 
  1033.         routine    is called after the complete module is loaded (and
  1034.         decrunched). If the routine recognizes the module it must
  1035.         return d0=0 else d0<>0.
  1036.  
  1037.   DTP_Extload (FPTR) - pointer to a optional loadroutine for modules. If 
  1038.         an error occurs return d0<>0 else d0=0. Please remember to
  1039.         free all allocated resources (memory, locks,...), because
  1040.         no further player function is called.
  1041.  
  1042.   DTP_Interrupt (FPTR) - pointer to a interruptroutine. This routine is 
  1043.         called every 1/50 sec. via a timerinterrupt. Note: your
  1044.         interruptroutine is not executed in the    timerinterrupt 
  1045.         itself. This is the standard method for gaining the 
  1046.         correct playspeed regardless of the videomode. If the 
  1047.         DTP_Faster/DTP_Slower pointers are not supplied, 
  1048.         DeliTracker emulates this by changing the interrupt
  1049.         frequency. If this tag doesn't exist, you must supply 
  1050.         DTP_StartInt/DTP_StopInt.
  1051.  
  1052.   DTP_Stop (FPTR) - pointer to optional stop routine. If this tag does not
  1053.         exist, DeliTracker uses the following standard method:
  1054.             stop interrupt (DTP_StopInt)
  1055.             cleanup sound (DTP_EndSnd)
  1056.             reinitialize the song (DTP_InitSnd)
  1057.         This routine will stop playing the song, reset the
  1058.         'patterncounter' to the begin and change the playspeed
  1059.         to default. This means that the interrupt is started
  1060.         again and the song should begin to play from the
  1061.         beginning.
  1062.  
  1063.   DTP_Config (FPTR) - pointer to an optional initialising routine. This
  1064.         routine    is only called once after the player is    loaded. 
  1065.         Purpose: The player could load a specific configfile.
  1066.  
  1067.   DTP_UserConfig (FPTR) - pointer to a optional initialising routine. This
  1068.         routine is called if the user selects the 'Config' button
  1069.         in the prefswindow. Purpose: The player could open a player
  1070.         specific configwindow for setting special options (e.g 
  1071.         instrumentpath for a sonix player) and saving them into a
  1072.         configfile.
  1073.  
  1074.   DTP_SubSongRange (FPTR) - This tag should be supplied if the player 
  1075.         supports multimodules. ti_Data points to a function that
  1076.         returns in d0 the minimum and in d1 the maximum subsong
  1077.         number.
  1078.  
  1079.   DTP_InitPlayer (FPTR) - pointer to an initialising routine, that is 
  1080.         called if a module is loaded successfully. Must return 
  1081.         d0=0 if all is ok else d0<>0. The audioallocation must be
  1082.         done here. (DeliTracker has a function that does the 
  1083.         allocation.) If the player supports subsongs it has to set
  1084.         dtg_SndNum(a5) to the first subsongnumber. If a routine 
  1085.         for DTP_SubSongRange exists, DeliTracker performs this for
  1086.         you and you may omit the initialization for dtg_SndNum(a5).
  1087.  
  1088.   DTP_EndPlayer (FPTR) - pointer to a cleanuproutine, that is called if the
  1089.         module is removed from memory. Audiochannels have to be 
  1090.         freed here. (Use the DeliTracker internal supportroutine)
  1091.  
  1092.   DTP_InitSound (FPTR) - pointer to an optional initialising routine. This
  1093.         routine    has the task to (re)initialize the module. If the 
  1094.         interrupt is started the song should begin to play at the 
  1095.         beginning.
  1096.  
  1097.   DTP_EndSound (FPTR) - pointer to an optional cleanuproutine. For example
  1098.         it can be used to reset the volumeregister or the audiodma.
  1099.  
  1100.   DTP_StartInt (FPTR) - pointer to an initialising routine, that must exist
  1101.         if DTP_Interrupt doesn't exist. It has the task to start 
  1102.         the sound.
  1103.  
  1104.   DTP_StopInt (FPTR) - pointer to a cleanuproutine, that must exist if
  1105.         DTP_Interrupt doesn't exist. It has the task to stop the 
  1106.         sound.
  1107.  
  1108.   DTP_Volume (FPTR) - pointer to function that sets the volume. This
  1109.         function is called every time the volume is changed (via 
  1110.         arexx or slider) and once at the initialising phase of the
  1111.         module (before DTP_InitSnd is called). The mastervolume can
  1112.         be found in dtg_SndVol(a5). The    mastervolume is the highest
  1113.         volume allowed. The effective volume can be calculated 
  1114.         using the following formula:
  1115.             VOL_eff=( ( MASTERVOLUME*modulevolume ) >>6 ).
  1116.         See also the example sources.
  1117.  
  1118.   DTP_Balance (FPTR) - pointer to a function that sets the balance. This
  1119.         function is called every time the balance is changed (via 
  1120.         arexx or slider) and once at the initialising phase of the
  1121.         module (before tf_InitSnd is called). The balance for the
  1122.         left channel can be found in dtg_SndLBal(a5), for the right
  1123.         channel in dtg_SndRBal(a5). Note: All players that support
  1124.         balance are capable of volume too! Then you must use the 
  1125.         same routine for both operations. The mastervolume for the 
  1126.         left channels can be calculated with this formula:
  1127.             LeftMaster =( ( dtg_Volume(a5)*dtg_SndLBal(a5) ) >>6 ).
  1128.         For the right channels the formula is similar.
  1129.  
  1130.   DTP_Faster (FPTR) - pointer to a function that increases the playspeed.
  1131.  
  1132.   DTP_Slower (FPTR) - pointer to a function that decreases the playspeed.
  1133.  
  1134.   DTP_NextPatt (FPTR) - pointer to a function that increases the 
  1135.         patternpointer.
  1136.  
  1137.   DTP_PrevPatt (FPTR) - pointer to a function that decreases the
  1138.         patternpointer.
  1139.  
  1140.   DTP_NextSong (FPTR) -    pointer to a function that increases the
  1141.         subsongcounter (only if the subsong exists).
  1142.  
  1143.   DTP_PrevSong (FPTR) -    pointer to a function that decreases the
  1144.         subsongcounter (only if the subsong exists).
  1145.  
  1146.   DTP_SubSongTest (FPTR) - (till version 1.35) The tag is only evaluated
  1147.         if DTP_SubSongRange exits too. ti_Data points to a routine
  1148.         that returns a boolean value. This indicates if the subsong
  1149.         number dtg_SubNum(a5) is valid (d0=0) or not (d0<>0). This
  1150.         tag is only necessary for players where not every subsong
  1151.         in the subsong range is existant.
  1152.  
  1153.  
  1154.  
  1155.   8.4 DeliTracker support functions
  1156.  
  1157.   DeliTracker provides some support functions that can be called from the
  1158.   external player. Every function is called like this:
  1159.  
  1160.     move.l    dtg_XXX(a5),a0        ; a5 must contain the base
  1161.     jsr    (a0)
  1162.  
  1163.   All functions (exept dtg_SongEnd/dtg_SetTimer) use d0/d1/a0/a1 as scratch
  1164.   register. A5 must contain the base (exept dtg_SongEnd/dtg_SetTimer).
  1165.   Currently the following functions are available:
  1166.  
  1167.  
  1168.   dtg_GetListData
  1169.  
  1170.     SYNOPSIS
  1171.         memory size = dtg_GetListData(number)
  1172.             a0     d0                     d0.l
  1173.  
  1174.     FUNCTION
  1175.         Returns the address and the length of a file that was
  1176.         loaded with dtg_LoadFile(). 
  1177.  
  1178.     INPUTS
  1179.         number - number of the file beginning with 0 for the file
  1180.              that was selected by the user. 
  1181.  
  1182.     RESULT
  1183.         memory - startaddress of the files in memory, if error 0.
  1184.         size - length of the loaded file in bytes or 0 in case of
  1185.                an error
  1186.  
  1187.  
  1188.   dtg_LoadFile
  1189.  
  1190.     SYNOPSIS
  1191.         success = dtg_LoadFile(name)
  1192.  
  1193.     FUNCTION
  1194.         Loads and decrunches the specified file to chipmemory.
  1195.         Note: this function automatically adds '.pp' to the
  1196.               filename.
  1197.  
  1198.     INPUTS
  1199.         name - store the filename in the internal buffer
  1200.                (dtg_PathArray contains a pointer to this buffer)
  1201.  
  1202.     RESULT
  1203.         success - success d0.l=0, else d0.l<>0.
  1204.  
  1205.  
  1206.   dtg_CopyDir
  1207.  
  1208.     SYNOPSIS
  1209.         dtg_CopyDir()
  1210.  
  1211.     FUNCTION
  1212.         Copies the directory of the selected file at the end
  1213.         of the string, that dtg_PathArray points to.
  1214.  
  1215.  
  1216.   dtg_CopyFile
  1217.  
  1218.     SYNOPSIS
  1219.          dtg_CopyFile()
  1220.  
  1221.     FUNCTION
  1222.         Copies the filename of the selected file at the end
  1223.         of the string, that dtg_PathArray points to.
  1224.  
  1225.  
  1226.   dtg_CopyString
  1227.  
  1228.     SYNOPSIS
  1229.         dtg_CopyString(string)
  1230.                                a0
  1231.  
  1232.     FUNCTION
  1233.         a0 contains the address of a string, which is copied at
  1234.         the end of the string that dtg_PathArray points to.
  1235.  
  1236.     INPUTS
  1237.         string - a0 contains the pointer to the string
  1238.  
  1239.  
  1240.   dtg_AudioAlloc
  1241.  
  1242.     SYNOPSIS
  1243.         success = dtg_AudioAlloc()
  1244.  
  1245.     FUNCTION
  1246.         Allocates the audiochannels
  1247.  
  1248.     RESULT
  1249.         success - if we got them: d0.l=0, else d0.l<>0.
  1250.  
  1251.  
  1252.   dtg_AudioFree
  1253.  
  1254.     SYNOPSIS
  1255.         dtg_AudioFree()
  1256.  
  1257.     FUNCTION
  1258.         Frees the audiochannels that were allocated with
  1259.         dtg_AudioAlloc.
  1260.  
  1261.  
  1262.   dtg_StartInt
  1263.  
  1264.     SYNOPSIS
  1265.         dtg_StartInt()
  1266.  
  1267.     FUNCTION
  1268.         Starts the soundinterrupt. If DTP_Interrupt exists,
  1269.         DeliTracker starts the internal timerinterrupt, else
  1270.         DTP_StartInt is called.
  1271.  
  1272.  
  1273.   dtg_StopInt
  1274.  
  1275.     SYNOPSIS
  1276.         dtg_StopInt()
  1277.  
  1278.     FUNCTION
  1279.         Stops the soundinterrupt. If DTP_Interrupt exists,
  1280.         DeliTracker stops the internal timerinterrupt, else
  1281.         DTP_StopInt is called.
  1282.  
  1283.  
  1284.   dtg_SongEnd
  1285.  
  1286.     SYNOPSIS
  1287.         dtg_SongEnd()
  1288.  
  1289.     FUNCTION
  1290.         Signals DeliTracker, that the module was played once.
  1291.         This function doesn't change any registers and is save
  1292.         to call from interrupts.
  1293.  
  1294.  
  1295.   dtg_CutSuffix
  1296.  
  1297.     SYNOPSIS
  1298.         dtg_CutSuffix()
  1299.  
  1300.     FUNCTION
  1301.         removes the suffix '.pp', '.im', '.xpk' at the end of the
  1302.         string, that dtg_PathArray points to.
  1303.  
  1304.  
  1305.   dtg_SetTimer
  1306.  
  1307.     SYNOPSIS
  1308.         dtg_SetTimer()
  1309.  
  1310.     FUNCTION
  1311.         programs the CIA-timer with the value that is stored in
  1312.         dtg_Timer(a5). This function doesn't change any registers
  1313.         and is save to call from interrupts.
  1314.  
  1315.  
  1316.   8.5 Hints and Tips
  1317.  
  1318.   The player should not change the LED condition because DeliTracker will
  1319.   handle it.
  1320.  
  1321.   This is a small list that you should match when you create your own
  1322.   player or custom module.
  1323.  
  1324.     [ ] checkroutine exact enough ?
  1325.     [ ] audiochannels allocated/freed correctly ?
  1326.     [ ] all allocated memory freed after playing?
  1327.     [ ] all locks unlocked after playing ?
  1328.     [ ] enforcer and mungwall proof ?
  1329.     [ ] viable error handling path taken for all possible errors ?
  1330.     [ ] player tested under 1.3 and 2.0 ?
  1331.     [ ] does the player work correct in all videomodes ?
  1332.  
  1333.  
  1334.   Problems
  1335.  
  1336.   Symptom    possible source                elimination
  1337.  
  1338.   crash        a5 trashed, other registers
  1339.         not saved, wrong stack usage
  1340.         initialization wrong or too late 
  1341.         module too new for the replayroutine    better check
  1342.  
  1343.   module sounds    audio data not in chipmem
  1344.   wrong        wrong initialization
  1345.         module too new for the replayroutine
  1346.         player needs some special values
  1347.         in some registers            extra init code
  1348.         wrong videomode
  1349.  
  1350.   no sound    Audio-DMA off                :-)
  1351.     >68000    player writes directly to processor    use OS routines to
  1352.         intvectors and VBR is not 0.        set IntVectors
  1353.  
  1354.   no free    wrong interrupt handling        VBlank-IRQ:
  1355.   CPU-time                        Z-Flag must be set
  1356.                             at the end of the 
  1357.                             interruptroutine.
  1358.  
  1359.  
  1360. 9. ACKNOWLEDGEMENTS
  1361.  
  1362. Our special thanks go to the following people:
  1363.  
  1364.   Our betatesters Stefan, Daniel, B÷rnie and Manfred for their
  1365.   bugreports and ideas.
  1366.  
  1367.   Armin Sander (Oktalyzer) and Carsten Schlote (Sonic Arranger) for
  1368.   creating DeliPlayers for their soundsystems.
  1369.  
  1370.   J÷rg W. Schmidt for the source code of PlayFTM.
  1371.  
  1372.   Tomas Partl for his player.
  1373.  
  1374.   DoIO for modules, demos and diskmag advertisement.
  1375.  
  1376.   All on IRC #amiga (Internet Relay Chat)
  1377.  
  1378.   Markus Illenseer and Christian Rattei for the correction of the
  1379.   german docs.
  1380.  
  1381.   Kevin Dackiw for the enhancement of the NoisePacker players and the
  1382.   correction of the english doc files.
  1383.   [Hope it is a little clearer...8-)  -- KD]
  1384.  
  1385.   Florian Vorberger for many nice Modules and the enhancement of 
  1386.   various players.
  1387.  
  1388.   U. Dominik Mⁿller for XPK.
  1389.  
  1390.   Colin Fox and Bruce Dawson for the incredibile req.library.
  1391.  
  1392.   Eric Kennedy for TstApp.rexx.
  1393.  
  1394.   and all others, who have send replays, modules or registrations.
  1395.  
  1396.  
  1397.  
  1398.  
  1399.