C-veneerK" GTZhcK" cGZqtmplayer8K"* ]8GȃZ/* qtmplayer.h * C veneer to QTMPlayer module * (c) Chris Rutter 1997 */ #ifndef _qtmplayer_H #define _qtmplayer_H #ifdef __cplusplus extern "C" { #endif /* all functions return type |qtmplayer_error *| which will either be an */ /* error block of the normal RISC OS form or zero if no error occured */ /* see !QTMPlay.Documents.QTMPlayer.SWIs for information on the SWIs */ #undef QTMPlayer_Recognise #define QTMPlayer_Recognise 0x4cEc0u #undef QTMPlayer_Load #define QTMPlayer_Load 0x4cec1u #undef QTMPlayer_Unload #define QTMPlayer_Unload 0x4cec2u #undef QTMPlayer_Pause #define QTMPlayer_Pause 0x4cec3u #undef QTMPlayer_Restart #define QTMPlayer_Restart 0x4cec4u #undef QTMPlayer_Stop #define QTMPlayer_Stop 0x4cec5u #undef QTMPlayer_Position #define QTMPlayer_Position 0x4cec6u #undef QTMPlayer_Sample #define QTMPlayer_Sample 0x4cec7u #undef QTMPlayer_Volume #define QTMPlayer_Volume 0x4cec8u #undef QTMPlayer_Quality #define QTMPlayer_Quality 0x4cec9u #undef QTMPlayer_SoundSystem #define QTMPlayer_SoundSystem 0x4cecau #undef QTMPlayer_SongInfo #define QTMPlayer_SongInfo 0x4cecbu #undef QTMPlayer_Info #define QTMPlayer_Info 0x4ceccu #undef QTMPlayer_Layer #define QTMPlayer_Layer 0x4cecdu #undef QTMPlayer_Clear #define QTMPlayer_Clear 0x4ceceu #undef QTMPlayer_CarouselInfo #define QTMPlayer_CarouselInfo 0x4cecfu #undef QTMPlayer_CarouselPlay #define QTMPlayer_CarouselPlay 0x4ced0u #undef QTMPlayer_CarouselStop #define QTMPlayer_CarouselStop 0x4ced1u #undef QTMPlayer_Poll #define QTMPlayer_Poll 0x4ced2u #undef QTMPlayer_Choices #define QTMPlayer_Choices 0x4ced3u #undef QTMPlayer_AddItem #define QTMPlayer_AddItem 0x4ced4u #undef QTMPlayer_DeleteItem #define QTMPlayer_DeleteItem 0x4ced5u #undef QTMPlayer_ReadItem #define QTMPlayer_ReadItem 0x4ced6u #undef QTMPlayer_SetItem #define QTMPlayer_SetItem 0x4ced7u #define qtmplayer_NOTRECOGNISED -1 #define qtmplayer_DURATION_UNAVAILABLE -1 #define qtmplayer_SUPPORTED_PLAYSAMPLE 1<<0 #define qtmplayer_SUPPORTED_SETSAMPLERATE 1<<1 #define qtmplayer_SUPPORTED_TSS 1<<2 #define qtmplayer_SUPPORTED_READSAMPLELENGTH 1<<3 #define qtmplayer_SUPPORTED_READSONGPOSITION 1<<4 #define qtmplayer_SUPPORTED_READSONGLENGTH 1<<5 #define qtmplayer_SUPPORTED_SETSONGPOSITION 1<<6 #define qtmplayer_SUPPORTED_READSONGAUTHOR 1<<7 #define qtmplayer_SUPPORTED_READSONGNAME 1<<8 #define qtmplayer_SUPPORTED_READSONGDURATION 1<<9 #define qtmplayer_SUPPORTED_PAUSESONG 1<<10 #define qtmplayer_SUPPORTED_RESTARTSONG 1<<11 #define qtmplayer_SUPPORTED_STOPSONG 1<<12 #define qtmplayer_SUPPORTED_SETVOLUME 1<<13 #define qtmplayer_SUPPORTED_READVOLUME 1<<14 #define qtmplayer_SUPPORTED_READSAMPLENAME 1<<15 /* change following line to whatever library-specific error you use */ #define qtmplayer_error os_error typedef int qtmplayer_bool; typedef unsigned int qtmplayer_vol; /* type used for volume (0--64) */ typedef unsigned int qtmplayer_pos; /* type used for position and event number */ typedef unsigned int qtmplayer_s; /* type used for sample number */ typedef unsigned int qtmplayer_q; /* type used for sample quality (in microseconds) */ typedef unsigned int qtmplayer_slen; /* type used for sample length (in bytes */ typedef unsigned int qtmplayer_p; /* type used for sample pitch */ typedef unsigned int qtmplayer_b; /* type used for bitmasks */ typedef int qtmplayer_dur; /* type used for song duration (in seconds) */ typedef int qtmplayer_l; /* type used for layer number */ qtmplayer_error *qtmplayer_recognise (char *pathname, qtmplayer_l *layer); qtmplayer_error *qtmplayer_load (char *pathname, qtmplayer_l layer); qtmplayer_error *qtmplayer_unload (void); qtmplayer_error *qtmplayer_restart (void); qtmplayer_error *qtmplayer_stop (void); qtmplayer_error *qtmplayer_position_read (qtmplayer_pos *position, qtmplayer_pos *event, unsigned int *number); qtmplayer_error *qtmplayer_position_set (qtmplayer_pos position, qtmplayer_pos event); qtmplayer_error *qtmplayer_sample_info (qtmplayer_s sample, char **name, qtmplayer_slen *length); qtmplayer_error *qtmplayer_sample_play (qtmplayer_s sample, qtmplayer_p pitch, qtmplayer_vol volume); qtmplayer_error *qtmplayer_volume_read (qtmplayer_vol *volume); qtmplayer_error *qtmplayer_volume_set (qtmplayer_vol volume); qtmplayer_error *qtmplayer_quality (qtmplayer_q rate); qtmplayer_error *qtmplayer_soundsystem_tss (qtmplayer_bool state); qtmplayer_error *qtmplayer_songinfo (char **name, char **author, char **info, qtmplayer_dur *duration); qtmplayer_error *qtmplayer_info_version (unsigned int *version); qtmplayer_error *qtmplayer_info_layers (unsigned int *number); qtmplayer_error *qtmplayer_info_layer (qtmplayer_l layer, char **name, char **author, unsigned int *version); qtmplayer_error *qtmplayer_info_internal (qtmplayer_l layer, char **code_area, char **workspace); qtmplayer_error *qtmplayer_layer_load (char *path); qtmplayer_error *qtmplayer_layer_call (void *r0, void *r1, void *r2, void *r3, qtmplayer_l layer, unsigned int jump_entry); qtmplayer_error *qtmplayer_layer_supported (qtmplayer_l layer, qtmplayer_b *bitmask); qtmplayer_error *qtmplayer_clear (void); #ifdef __cplusplus } #endif #endif o[ K" [ G&Zqtmplayer0 K"D C0 GۃZOBJ_HEAD ,OBJ_AREAOBJ_IDFNLDOBJ_SYMTOBJ_STRT0 ;  0 qtmplayer_position_read -L ]0 -0 [0 qtmplayer_sample_info -L ]0 -0 [qtmplayer_sample_play -L ]0 -0 T[0   0 qtmplayer_songinfo -L ] -0 {[0 t0 nqtmplayer_info_layer -L ]b-0 `\[qtmplayer_info_internal -L ]O0 -0 3G[0 Aqtmplayer_layer_call --L ]30 - 0-0 p%[qtmplayer_layer_supported -L ]0-0 [ d,p@( pPXH8(Norcroft RISC OS ARM C vsn 5.06 (Acorn Computers Ltd) [May 25 1995]  &50F@XPg|@x1D[0q`C$$codeqtmplayer_recognise_swixqtmplayer_loadqtmplayer_unloadqtmplayer_restartqtmplayer_stopqtmplayer_position_read__rt_stkovf_split_smallqtmplayer_position_setqtmplayer_sample_infoqtmplayer_sample_playqtmplayer_volume_readqtmplayer_volume_setqtmplayer_qualityqtmplayer_soundsystem_tssqtmplayer_songinfoqtmplayer_info_versionqtmplayer_info_layersqtmplayer_info_layerqtmplayer_info_internalqtmplayer_layer_loadqtmplayer_layer_callqtmplayer_layer_supportedqtmplayer_clear7"ReadMeK"R GZThese veneers are designed for use with any C compiler. They must be linked with a library providing the _swix () function (eg. C:o.stubs). Chris, 9 February 1997. DebugbK" bGZ3!SysLogK" GԛZ0!Boot[ d{_[Fs$Set SysLog$Dir Set SysLog$LogDir .Logs IconSprites .!Sprites!HelpQ!JOQG============================================================================= SysLog Documentation ---------------------------------------------------------------------------- Version: 0.16 Author: Jon Ribbens (c) DoggySoft Ltd., 1995, 1996 This program is Freeware and may be freely distributed so long as it is not charged for, and none of the files are changed or removed. It may be included with a commercial program which is charged for. There is no warranty, express or implied. DoggySoft Ltd. is not liable for any loss or damages caused by the use or misuse of this program. Things done: * facility to insert arbitrary line * considered format of datestamp * implemented backoff system for errors writing to logs (partly a bugfix) * fixed bug which left files open on errors (e.g. disk full) * added Indent/UnIndent/NoIndent * do 'temporary logs' thingy for Termite session logs * implement log truncation at specified maximum size * read once and once only at startup * do automatic tidy-up of 'temporary logs' * fixed bug which corrupted the very last line in the options file * get allocation for SWI chunk and module name and OS commands * user options to disable session logs * added "*" line in options file to specify default values * reserve disk space option * make entry point use two-layer task, so RMEnsuring works * add *SysLog ON|OFF and *SysLog * LogData routine to log a block of hex data (e.g. IP packets) * add debugf routine for assembler people * add C front-end for C people * added SysLog_ReadErrorMessage * added %p and %a to LogFormatted * fixed order of %a (it was backwards) * made log buffer size dependent on logging level * made log buffer get de-allocated after ten minutes * added SysLog_LogComplete * made buffer size be recalculated when log level is changed * made setting log level also apply to session logs of that log * fixed tidying up of stray session logs (sometimes missed some) * fixed a few problems with sessions * termination of strings is now by zero-byte or carriage return * add log_forget and call it in CloseSessionLog To do: * add expression evaluation to LogFormatted * add optional checking of pointer validity * add 'features flags' ============================================================================ Rationale ---------------------------------------------------------------------------- Termite is currently lacking in logging facilities. In fact, most communications software for the Arc is rather poor at logging. This module is designed to make it easy for comprehensive logging to be added to any RISC OS program. The logging level can be altered by the user for individual log files, and buffering is used to speed logging, so it is safe for programs to log large quantities of data, provided that they use sensible priorities for each type of message. The logs are also automatically kept to user-specified maximum lengths, so there is no need to worry about filling up the user's hard disk. Separate log files are used for each application, on the basis that such segregation of information makes it much easier for the user to find what they're looking for. A back-off system is used for dealing with errors when writing to logs. Each error is logged in the "SysLog" log, and the offending log is marked as "dead". SysLog will then not attempt to write to that log again for one second. If we again get an error writing to the log, we multiply the "back-off" time by 1.5, and again mark the log as dead. The back-off time is not allowed to grow longer than ten minutes. ============================================================================ Session logs ---------------------------------------------------------------------------- Usually, log entries are stored strictly chronologically. Sometimes, though, it may be more useful to store them grouped by 'session'. For example, NewsBite can have several incoming NNTP connections at once. It is nice to group the log messages that are coming from each separate connection together. This can be done using SysLog_OpenSessionLog. SysLog_OpenSessionLog creates a specially-named temporary log file. The log entries for the session are stored in this log file. When the temporary log file is closed using SysLog_CloseSessionLog, this data is appended in one chunk to the end of the main log. SysLog checks for stray temporary log files when it initialises and finalises, and appends them to the relevant logs. This copes with the situation where an application crashes or otherwise exits without calling SysLog_CloseSessionLog. ============================================================================ Priorities ---------------------------------------------------------------------------- Message priorities can be in the range 0 to 255, with 0 being the highest priority and 255 being the lowest. Unless otherwise specified by the user, only messages with priorities of less than 125 are stored in the log files. You should therefore think about what things the user is likely to want to have logged by default, and ensure that these things are logged at a priority of 124 or less. The priority of errors often depends on how significant the consequences of the error are, not what the cause of it is. e.g. sometimes "out of memory" will be an extremely important unrecoverable error (because the program can't start up), and sometimes it will be unimportant (because the program can use disk instead, or maybe try again later). ============================================================================ Log names ---------------------------------------------------------------------------- Log names are used as the leafnames to store the logs as, so they must comply with the rules for RISC OS leafnames. They must also not be longer than ten characters. It is intended that each application have its own log, so an obvious choice for the log name is the application name (without the '!'). Very large applications could have more than one log file - in which case the naming scheme is unspecified. Try and choose sensible log names. If your application is going to be distributed, you should write to support@doggysoft.co.uk, to request that your log name be formally allocated. This will hopefully avoid having more than one program using the same log file. The following log names are reserved for internal use: any name beginning with a '-' character any name beginning with "SysLog" "Old" ============================================================================ OS commands ---------------------------------------------------------------------------- *SysLog ------ Adds a time-stamped message to the log file, if and only if the specified log file is set up to log messages of this priority. The priority must be in the range 0-255. *SysLog ------ Temporarily (but with immediate effect) changes the logging priority of the specified log. The priority must be in the range 0-256. *SysLog ON|OFF ------ *SysLog OFF will temporary disable SysLog - all log messages received after this command is issued will be ignored. *SysLog ON resumes normal operation. *SysLog_Flush ON|OFF ------------ *SysLog_Flush with no paramaters flushes all currently open log files to disk. If it used with the parameter 'ON' then it causes all log files to be flushed immediately after each message is written to them. *SysLog_Flush OFF disables this behaviour. (This is intended for use when the a program is being debugged, and keeps crashing the computer. With SysLog_Flush ON, you're guaranteed that all the log information your program produces before it crashes will actually be available after a re-boot. It also makes logging *very slow*.) ============================================================================ SWIs ---------------------------------------------------------------------------- SysLog_LogMessage (&4C880) ----------------- R0-> log name, or = session log handle R1-> text to log R2 = priority Adds a time-stamped message to the log file, if and only if the specified log file is set up to log messages of this priority. The text to log must not be longer than 1024 bytes. The priority must be in the range 0-255. SysLog_GetLogLevel (&4C881) ------------------ R0-> log name, or = session log handle exit: R0 = priority Reads the logging level for the specified log. Messages of *less than* the returned priority are being logged. This can be used to avoid creation of logging information that is only going to be discarded by SysLog_LogMessage anyway. In some cases it could even be used to decide which version of a program to load (e.g. whether to load a debugging version of TermiteIP). SysLog_FlushLog (&4C882) --------------- R0-> log name, or = session log handle, or = 0 to flush all logs Ensures the specified log (or all logs) are fully written to disk, and the files closed. This can be useful to make sure that the user is immediately able to read data that has just been written to the log. SysLog_SetLogLevel (&4C883) ------------------ R0-> log name, or = session log handle R1 = new logging level Sets the logging level for the specified log. This SWI is provided for debugging and internal use only, and SHOULD NOT BE USED in distribution code. The logging level is the user's decision, not the programmer's. SysLog_LogUnstamped (&4C884) ------------------- R0-> log name, or = session log handle R1-> text to log R2 = priority Adds a message to the log file, if and only if the specified log file is set to log messages of this priority. The text to log must not be longer than 1024 bytes. The priority must be in the range 0-255. It is recommended that you use SysLog_LogMessage for all normal log entries. SysLog_Indent (&4C885) ------------- R0-> log name, or = session log handle Increments the log indent level. In log lines generated by SysLog_LogMessage, there are spaces in between the priority and the message. This can be useful to show the hierarchy of the functions which are producing logging output. The indent level is initially zero. SysLog_UnIndent (&4C886) --------------- R0-> log name, or = session log handle Decrements the log indent level. (If it is zero it is not decremented.) SysLog_NoIndent (&4C887) --------------- R0-> log name, or = session log handle Sets the log indent level to zero. This should be called when your program loads, if you are using SysLog_Indent/UnIndent. SysLog_OpenSessionLog (&4C888) --------------------- R0-> log name R1 = priority exit: R0 = session log handle (or 0) Creates a temporary session log file. When the session log is closed (using SysLog_CloseSessionLog, below), the session log is appended to the main log as specified in R0 on entry to this SWI. If the main log is set to ignore log entries of the priority specified then zero will be returned for the session log handle. This does not necessarily require special case code, as other SWIs which accept session log handles will accept a handle of zero and do nothing. SysLog_CloseSessionLog (&4C889) ---------------------- R0 = session log handle Closes the specified temporary session log and appends it to the appropriate main log file. The specified session log handle is no longer valid. SysLog_LogData (&4C88A) -------------- R0-> log name, or = session log handle R1 = priority R2-> data to log R3 = number of bytes to log R4 = value to report as block offset (-1 not to show block offset) Logs a block of data, in a hex-and-ASCII format similar to that produced by *Dump. The block offset is the value that is printed at the beginning of each line, which is equal to the value given on entry plus the number of bytes already displayed. If -1 is used as the block offset then the field will be omitted. Note that if the number of bytes to log is over 10KB then the SWI will return with an error - logging such a large amount of data in one go is almost certainly a bug, so SysLog faults it to prevent the computer going into a semi-infinite loop while it writes huge amounts of data to disk. SysLog_LogFormatted (&4C88B) ------------------- R0-> log name, or = session log handle R1-> format string R2 = priority R3-> block containing R0-R3,R8-R12,R14 R4-R7 = parameters Evaluates a formatted string using registers R4-R7, and R0-R3, R8-R12 and R14 from the block passed in R3, and logs the result. See the section "LogFormatted", below. SysLog_ReadErrorMessage (&4C88C) ----------------------- R0 = error number exit: R0-> error message Converts an error number as returned by the FreeNet/Internet/etc modules into a string describing the error. e.g. SysLog_ReadErrorMessage 60 would return "Connection timed out". SysLog_LogComplete (&4C88D) ------------------ R0-> log name Flushes the specified log, and de-allocates the buffer associated with it. This should only be called if the log is definitely not going to be used for a while (e.g. if your application is the only one which can be writing to the log, and it's exiting). If this isn't called explicity, SysLog automatically de-allocates the log buffer after ten minutes of inactivity in the log. ============================================================================ LogFormatted ---------------------------------------------------------------------------- SWI SysLog_LogFormatted provides C "printf"-style functionality for assembler programmers. A format string is passed in R1, which is a template for the output. The string is copied directly to the output, except for '%' characters, which inserts a string calculated when the SWI is called: %% - the literal '%' character %a - the network-byte-ordered IP address in register %c - the character in register %d - the signed decimal integer in register %e - the message for the FreeNet error number in register %f - the filename of the file handle in register %p - the object pointed to by register %s - the control-terminated string pointed to by register %x - the unsigned hexadecimal integer in register %z - the zero-terminated string pointed to by register where is a number which can be any of 0 to 12 or 14. Note that the %p type must be followed by another type indicator. For example, to log a character pointed to by register R3, use "%3pc". More than one 'p' can be used to indicate more than one level of indirection. Null pointers are explicitly checked for wherever used, and the string "(null)" is logged in place of whatever should have been output. Hence it is explicity defined that it is safe to allow null pointers to be in registers used by the format string. Registers R4-R7 are taken directly from the registers passed to the SWI. Registers R0-R3, R8-R12 and R14 are taken from the block passed in R3. It is expected that this SWI would be packaged in a macro in your assembler source code. For example: ... .stricmp FNlogf("stricmp: comparing %0z and %1z",200) ... DEF FNlogf(t$,p%) [OPT p STMFD R13!,{R0-R3,R8-R12,R14} ADR R0,txt_logname ADD R1,R15,#12 MOV R2,#p% MOV R3,R13 SWI "SysLog_LogFormatted" B P%+(LENt$+8)ANDNOT3 EQUS t$+STRING$(4-(LENt$AND3),CHR$0) LDMFD R13!,{R0-R3,R8-R12,R14} ] =p or the ObjAsm equivalent: MACRO LOGF $t,$p STMFD R13!,{R0-R3,R8-R12,R14} ADR R0,txt_logname ADR R1,%ft90 MOV R2,#$p MOV R3,R13 SWI SysLog_LogFormatted B %ft91 90 = "$t",0 ALIGN 91 LDMFD R13!,{R0-R3,R8-R12,R14} MEND ... stricmp ROUT LOGF "stricmp: comparing %0z and %1z",200 ... ============================================================================ Using SysLog from C programs ---------------------------------------------------------------------------- To make SysLog easy to use from C programs, I have written an APCS veneer for the module. This takes the form of a "syslog.h" header file which you should #include from your C source, and a "syslog.o" object file which you should link your program with. There are two calls for each SWI, one which uses the non-X form and one which uses the X form and returns a _kernel_oserror *. The non-X forms are generally nicer as values can be returned in the usual manner, rather than having to pass a pointer to a location to be filled in with the return code. I would suggest only using the X forms when you absolutely must - i.e. in module code, etc. There's also a bonus function "syslogf" (and "xsyslogf") which is like "printf" except it outputs to the log. The first two arguments are the logname and priority, and the rest are the usual printf arguments (i.e. the format string followed by a variable number of arguments). Note that a temporary buffer is used to hold the string before it is passed to the SysLog module and *THIS BUFFER IS ONLY 1024 BYTES LONG*. i.e. you must ensure that your format string cannot ever produce more than 1024 bytes of output. This is especially important in networking software where the input may be coming from a Bad Miscreant who is trying to hack into or crash your machine. The ObjAsm source to the veneer object file is provided. If you make any changes which you think people might find useful, or you find any bugs, please e-mail me and tell me about it. Thanks go to Stewart Brodie for assistance with vsprintf ;-). ============================================================================ Options ---------------------------------------------------------------------------- The options file is stored as !SysLog.Options. Each line of the options file specifies the options for a single log. This line is of the format: [Reserve |NoReserve] [Sessions|NoSessions] [ []] and are specified in kilobytes. An entry for log "*" is treated as the default values, which are used if the log doesn't have a specific entry in the Options file. So, for example, to specify "NoSessions" for every log except "NewsBite" you could use: * NoSessions NewsBite Sessions The options have the following meanings: Reserve SysLog will make sure that at least KB of disk space is free for this log, by padding the log file with zeros which are later overwritten by the real log data. NoReserve SysLog won't reserve disk space for this log as described above. This is the default. Sessions SysLog will use Session Logs for this log (as described above) where instructed. This is the default. NoSessions Session Logs are disabled for this log, and log entries will appear strictly in chronological order. SysLog will ignore log entries for this log which have a priority greater to or equal than this value. The default value is 125. The log will be moved to the "Old" directory when it becomes larger than this size. The default value is 256KB. ============================================================================ Usage guidelines ---------------------------------------------------------------------------- Previously in this section I recommended that programs should not fail to work if logging is not available. This is reasonable - however there are very few reasons that logging will fail, and all of these reasons are very likely to cause the main function of the program to fail. I would suggest therefore that programs should RMEnsure the SysLog module in their !Run files, and then use it as any other SWI. Errors from SysLog SWIs, while strictly speaking non-fatal for the main program, are indicative of something being badly wrong with the system. Use 'X' SWIs in situations such as modules where you have to, of course, but in application code where you have an error handler, you might as well use the non-'X' form and treat the errors as you would any other. Programs which use SysLog should RMEnsure it in their !Run files. The suggested lines to use are as follows: If ""="" then Error !SysLog application not seen by filer RMEnsure SysLog 0.16 Run .!Run RMEnsure SysLog 0.16 Error MyApp needs SysLog 0.16 or later Note that you should *not* just RMLoad the SysLog module, as it requires its Wimp task to be activated, and this will not happen if you just RMLoad the module. The module has a two-stage application entry point, so it will return immediately when you RMRun it, allowing the !Run file to continue as normal. !Run, VS,FHRun .!Boot RMRun .SysLog!Sprites b*F!syslog, BuwwwEtW#!Sw~u'w!1wwwwwww~v""""BstW#!TwwwwwwwwwBuwwwus~B4$ww~q}7s~DBww~q~wwwwww4Dr~ww~qw7s~wwACBww~q}s~wwwwwwwwwwwww!Sprites22 iFJ|!syslog!,Nwwws7s7rA'.qR%wrwwwwwww!q rREDDDD't.!!qwwwwwwwrB'rs7!s7'tGwwwwBDDww7sq}7sbmDAD7sAwwq15AADAsq}sq}sq}AAADsqwwwwwDAsQ]ww!'AD7sr}AAAA7ssw}w7sDAAD7sswwwwwr'twwwwwwwwwwwwwwr3337s r'r3333337sB'twwwwwwwwwwwwwwC-veneer!K" !GZc,K" ,GŜZtest!uG+=#include "syslog.h" int main(void) { int fred = 999; char logname[]="Test"; syslog_logmessage("Test","testing 123",123); syslogf(logname,23,"my %s are dim! %d", "eyes", 234); syslogf(logname,23,"log level = %d", syslog_getloglevel(logname)); syslogf(logname,23,"xgetlevel = %d", xsyslog_getloglevel(logname,&fred)); syslogf(logname,23,"log level = %d", fred); syslogf(logname,23,"error message = %s", syslog_readerrormessage(60)); syslog_logcomplete("Test"); return 0; } h K" GZsyslogv !єHv G =/* * syslog.h * * SysLog C header file * * (c) DoggySoft Ltd., 1996 * */ #ifndef _syslog_h #define _syslog_h #include "kernel.h" #define SYSLOG_MAX 1024 extern void syslog_logmessage(const char *logname, const char *text, int priority); extern int syslog_getloglevel(const char *logname); extern void syslog_flushlog(const char *logname); extern void syslog_setloglevel(const char *logname, int priority); extern void syslog_logunstamped(const char *logname, const char *text, int priority); extern void syslog_indent(const char *logname); extern void syslog_unindent(const char *logname); extern void syslog_noindent(const char *logname); extern const char *syslog_opensessionlog(const char *logname, int priority); extern void syslog_closesessionlog(const char *logname); extern void syslog_logdata(const char *logname, int priority, const void *data, unsigned int size, int offset); extern const char *syslog_readerrormessage(int errnum); extern void syslog_logcomplete(const char *logname); extern void syslogf(const char *logname, int priority, const char *format, ...); extern _kernel_oserror *xsyslog_logmessage(const char *logname, const char *text, int priority); extern _kernel_oserror *xsyslog_getloglevel(const char *logname, int *priority); extern _kernel_oserror *xsyslog_flushlog(const char *logname); extern _kernel_oserror *xsyslog_setloglevel(const char *logname, int priority); extern _kernel_oserror *xsyslog_logunstamped(const char *logname, const char *text, int priority); extern _kernel_oserror *xsyslog_indent(const char *logname); extern _kernel_oserror *xsyslog_unindent(const char *logname); extern _kernel_oserror *xsyslog_noindent(const char *logname); extern _kernel_oserror *xsyslog_opensessionlog(const char *logname, int priority, char **session); extern _kernel_oserror *xsyslog_closesessionlog(const char *logname); extern _kernel_oserror *xsyslog_logdata(const char *logname, int priority, const void *data, unsigned int size, int offset); extern _kernel_oserror *xsyslog_readerrormessage(int errnum, char **message); extern _kernel_oserror *xsyslog_logcomplete(const char *logname); extern _kernel_oserror *xsyslogf(const char *logname, int priority, const char *format, ...); #endif oKK" KG4Zsyslog !۔ G=OBJ_HEAD|@OBJ_AREAOBJ_SYMTOBJ_STRT(OBJ_IDFN4Unused Unused 7b          @-@  s us s s s s s s us s @-@sus s --L  - T H[ --L  -   s[# 6F$Y0m<{HT`lx):Ncr$8H\p (syslog$$codesyslog_logmessagesyslog_getloglevelsyslog_flushlogsyslog_setloglevelsyslog_logunstampedsyslog_indentsyslog_unindentsyslog_noindentsyslog_opensessionlogsyslog_closesessionlogsyslog_logdatasyslog_readerrormessagesyslog_logcompletexsyslog_logmessagexsyslog_getloglevelxsyslog_flushlogxsyslog_setloglevelxsyslog_logunstampedxsyslog_indentxsyslog_unindentxsyslog_noindentxsyslog_opensessionlogxsyslog_closesessionlogxsyslog_logdataxsyslog_readerrormessagexsyslog_logcompletevsprintfsyslogfxsyslogfsyslog$$zinitARM AOF Macro Assembler 3.06 (Acorn Computers Ltd)s K" GsZsyslog !e G= AREA |syslog$$code|,PIC,CODE,READONLY EXPORT syslog_logmessage syslog_logmessage MOV R12,R14 SWI &4C880 MOVS PC,R12 EXPORT syslog_getloglevel syslog_getloglevel MOV R12,R14 SWI &4C881 MOVS PC,R12 EXPORT syslog_flushlog syslog_flushlog MOV R12,R14 SWI &4C882 MOVS PC,R12 EXPORT syslog_setloglevel syslog_setloglevel MOV R12,R14 SWI &4C883 MOVS PC,R12 EXPORT syslog_logunstamped syslog_logunstamped MOV R12,R14 SWI &4C884 MOVS PC,R12 EXPORT syslog_indent syslog_indent MOV R12,R14 SWI &4C885 MOVS PC,R12 EXPORT syslog_unindent syslog_unindent MOV R12,R14 SWI &4C886 MOVS PC,R12 EXPORT syslog_noindent syslog_noindent MOV R12,R14 SWI &4C887 MOVS PC,R12 EXPORT syslog_opensessionlog syslog_opensessionlog MOV R12,R14 SWI &4C888 MOVS PC,R12 EXPORT syslog_closesessionlog syslog_closesessionlog MOV R12,R14 SWI &4C889 MOVS PC,R12 EXPORT syslog_logdata syslog_logdata STMFD R13!,{R4,R14} LDR R4,[R13,#8] SWI &4C88A LDMFD R13!,{R4,PC}^ EXPORT syslog_readerrormessage syslog_readerrormessage MOV R12,R14 SWI &4C88C MOVS PC,R12 EXPORT syslog_logcomplete syslog_logcomplete MOV R12,R14 SWI &4C88D MOVS PC,R12 EXPORT xsyslog_logmessage xsyslog_logmessage MOV R12,R14 SWI &6C880 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_getloglevel xsyslog_getloglevel MOV R12,R14 SWI &6C881 STRVC R0,[R1] MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_flushlog xsyslog_flushlog MOV R12,R14 SWI &6C882 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_setloglevel xsyslog_setloglevel MOV R12,R14 SWI &6C883 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_logunstamped xsyslog_logunstamped MOV R12,R14 SWI &6C884 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_indent xsyslog_indent MOV R12,R14 SWI &6C885 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_unindent xsyslog_unindent MOV R12,R14 SWI &6C886 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_noindent xsyslog_noindent MOV R12,R14 SWI &6C887 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_opensessionlog xsyslog_opensessionlog MOV R12,R14 SWI &6C888 STRVC R0,[R2] MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_closesessionlog xsyslog_closesessionlog MOV R12,R14 SWI &6C889 MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_logdata xsyslog_logdata STMFD R13!,{R4,R14} LDR R4,[R13,#8] SWI &6C88A MOVVC R0,#0 LDMFD R13!,{R4,PC}^ EXPORT xsyslog_readerrormessage xsyslog_readerrormessage MOV R12,R14 SWI &6C88C STRVC R0,[R1] MOVVC R0,#0 MOVS PC,R12 EXPORT xsyslog_logcomplete xsyslog_logcomplete MOV R12,R14 SWI &6C88D MOVVC R0,#0 MOVS PC,R12 IMPORT vsprintf EXPORT syslogf syslogf MOV R12,R13 STMDB R13!,{R3} STMDB R13!,{R0,R1,R11,R12,R14,PC} SUB R11,R12,#8 MOV R1,R2 ADD R2,R11,#4 STR R2,[R13,#-4]! MOV R2,R13 LDR R0,_syslogf_temp_adr BL vsprintf LDR R2,[R11,#-&10] LDR R1,_syslogf_temp_adr LDR R0,[R11,#-&14] SWI &4C880 LDMDB R11,{R11,R13,PC}^ EXPORT xsyslogf xsyslogf MOV R12,R13 STMDB R13!,{R3} STMDB R13!,{R0,R1,R11,R12,R14,PC} SUB R11,R12,#8 MOV R1,R2 ADD R2,R11,#4 STR R2,[R13,#-4]! MOV R2,R13 LDR R0,_syslogf_temp_adr BL vsprintf LDR R2,[R11,#-&10] LDR R1,_syslogf_temp_adr LDR R0,[R11,#-&14] SWI &6C880 MOVVC R0,#0 LDMDB R11,{R11,R13,PC}^ _syslogf_temp_adr & _syslogf_temp AREA |syslog$$zinit|,NOINIT _syslogf_temp % 1536 END LogsK" GZ0OptionsF"=4GGX# SysLog options file # Each line of this file is of the format: # [Reserve |NoReserve] [Sessions|NoSessions] # [ []] # The and are specified in kilobytes. # The following line is special - it specifies the default values, which # will be used if a log's options aren't specifically set. * NoReserve Sessions 125 256 # Options for specific logs now follow. Test 125 NewsBite 125 NewsBite-d 256 1024 Users 256 Fish 256 Termite NoSessions T-PPP NoSessions NFSServer 256 SysLog&!њ&G=0LTASK0 (n/{@0\p.@@-@0<h 0Sa{r'{1{{{{xP-___    Cusz0@h x'1I1J1S1@-'1 I1 J1 S1 >\~SysLogSysLog 0.16 (15 Dec 1996) DoggySoft Ltd., 1996Desktop_SysLogSysLog\[SysLog_Flushp[ 0 S])v_Unknown SysLog operationSysLogLogMessageGetLogLevelFlushLogSetLogLevelLogUnstampedIndentUnIndentNoIndentOpenSessionLogCloseSessionLogLogDataLogFormattedReadErrorMessageLogComplete@- rOxSyntax: *Desktop_SysLogSysLog provides System Logging facilities. Do not use *Desktop_SysLog, use *Desktop instead.@-1 1 0!P* 0*!h 0 xgcL_0!P* 0*, !qq{OxSyntax: *SysLog ON|OFFSyntax: *SysLog *SysLog enters a message into the specified system log file,enables or disables SysLog, or alters the log-level of a log. Syntax: *SysLog *SysLog ON|OFF *SysLog onoff1 @-$Oo 0Ok _Syntax: *SysLog_Flush ON|OFF*SysLog_Flush with no parameters flushes all currently active log files to disk. If used with the parameter 'ON' then it causes all log files to be flushed immediately after each message is written to them. Note that this makes logging *very slow*. *SysLog_Flush OFF disables this behaviour. Syntax: *SysLog_Flush ON|OFFB @000@- 0!R!S# :ARZr" "ASZs" 0"2 @!R!S3*@@- @-  ^:.>:>*>#>$>&>@>^>%>\> QЍ@ 1SysLog: Bad log name@-@ , ^$*. ^$*~@-@0~j\0BjP0S\!P$*H&@P ~_ _~Old..Options@-4O@,'8Or@rr,s'xЍ@-}428<,0 *NoSessionsNoReserve?@-P0@34?@S?(G S?( 0S?(!P* 0 0?S?( 0 00 0P9p"1*O+ ( O% " S?(!P*,,0S?(!P* 0 0?S?( 0 00 !?h%0 !?h4 0 0?Q?( 0 0 !?h%< 0 0?Q?( 0 0 !8 u?@- 2@-p@j00  j@0pqs0spu sw {x_ pp@- 0:@-`(1pM_  (u z_ . @Ps j(HL jHH 0I jL 7<R  ܍rx܍(1( H  s(u jp-0 M rs q,r)܍0  jM P >  , @Ѝz@-`@HP4    j0P@L@Ѝ~?@-P(X P0123? s jPL@HTH@%?HЍ>@-((1 xЍ@-0HPL@0 P( (  cH  @-0P^ @{{{s$uB@u x_PH$0dP!$B _ `@- >X>0 j 0> >  R+#P00TS+jX0P0@B@TѤä P00P0>xЍ@- d^ }^ ^ ^ ^ @-X040T0X uxЍ@-X 2XPxЍ%dy %m3 %24:%mi:%se@-@ h@2^: `0Oh% ^$*@-`P-<Pq.j+j@ ^* D0dRd B""*0 R B""*0 D00SĤ+ R> >Ws qPsx@ _Ѝ~0@->Yj4R;xЍ0@->Kj4R1;xЍError from log "@-0 OA;h0 X0O ^$* @@T ^$*": L@T ^$*0<O @(  @-  z_O @{@Ba0  0 $Q* @@Q*8Q*P>X>`0@-4ux0@-{x@- j@0 2hzЍ@-   4X0k{xЍ@-0 b{xЍ0@-ЍbhD ^2D50@-ЍbhD>ND0@-sDuxЍ@-M`p-Bppr sq qZ{sj0܍_ _Aߍ@-PM L -P4:1   j ^* @P +PЍrx_ P_Aߍ@->M.$j04Q#Ѝ"(,0Ѝ {j >4488<< r{s{rЍrxЍ0A-MP`pPjP->܍{POr{{Kj:s`qr q{qOs pq <R4* 3j1*!P$* q{{-j : !j:s ( jp r q{qsq{P j\ j `܍rxp_ e_ 5 < _܍SysLog: Can't read name of parent log from temporary log file-*Stray temporary session log file closed by SysLog@- M@ PN`O @ 0 jt Ѝ30O( O{z$Ѝ~ _$Ѝ~0@->Cj4Q;xЍ S;A-0MP`pW1* : t $ 9$7$53 :@ 0R4(; $$0S:0W4(;0S  az4Ѝ0Ѝ@-A_SysLog: Data block too big@-  ^027" ^027"@->. ^.30@->j4R(`p@ =>Q*%> > > %> >E 0^9~": 0N R:;R08$"  <><$p> g0 a>' c>q d>q e>Z f>; p> s>^ x>k z>Q w =>>Q*> > 2 xЍP SPNj.% SIGj.% SB@j.%  S;9juP U* C:j5m  PC- Abaj P*A\ CYzCPPQ*0P 'PdPQ * PG:C C@z CSSSSSSSSSSSSOe  7QsBc| "SS5BSNo errorBad descriptorNo more portsBad addressInvalid argumentOperation would blockOperation now in progressOperation already in progressSocket operation on non-socketDestination address requiredMessage too longProtocol wrong type for socketProtocol not availableProtocol not supportedSocket type not supportedOperation not supported on socketProtocol family not supportedAddress family not supported by protocol familyAddress already in useCan't assign requested addressNetwork is downNetwork is unreachableNetwork dropped connection on resetSoftware caused connection abortConnection reset by peerNo buffer space availableSocket is already connectedSocket is not connectedCan't send after socket shutdownToo many references: can't spliceConnection timed outConnection refusedHost is downNo route to hostUnknown ErrorQTMPlayer:VK" :VGZD  QTMPlay layer manager version 0.25.35-debug Compiled on Tue,11 Feb 1997.01:37:04 QTMPlayerQTMPlayer 0.25 (11 Feb 1997) debug Chris RutterQTMPlayerRecogniseLoadUnloadPauseRestartStopPositionSampleVolumeQualitySoundSystemSongInfoInfoLayerClearO--_-Bc@sJ } init: entered (version 0.25.35)0_;p?h -_-RcPsI  0init: workspace claimed, size=%3d, pointer=%12x, block @ %2x0_ 0 @${-_-Bc@sH ~ init: exiting0_耏O- -_-RcPslH } 0finalise: entered, fatal=%10d0_ p -_-RcPsH  0finalise: dismounting layer %0d0_ C-_-Bc@sG ~ finalise: exiting0_[ -_-RcPs<G  0swi_handler: called swi %11d0_ 0hH' QTMPlayer has received a bad SWI requestC-8 j0(3 Z " 0*p`P@ jg0P@p755@  j0F 4 pP60  ]j0Pp7  juC- -_-RcPs E  0_load: entering (%0z)0_ qjp1   22  15 q -_-Bc@stD  _load: dismounting current layer...0_ ej-_-Bc@s D  _load: mounting new layer0_ LjH_- -_-RcPsC  0enter_layer: entering current layer at stop_play() {r0-r12,r14}0_ @( hd t:-  e_<e-_-Bc@sB  enter_layer: exiting0_j  jQkj10-_-Bc@sHB  _load: locking heap0_ˣ "0 -_-RcPsA  0 _load: playing file %0z, buffer @ %1x, size = %2d0_ _- -_-RcPs`A  0enter_layer: entering current layer at play_file() {r1-r12,r14}0_ @( \d t:- B k_-_-Bc@s@  enter_layer: exiting0_Mj%pj -_-RcPs4@  0_load: buffer size=%0d0_ pW S/j-_-Bc@s?  _load: exiting0_x -_-RcPsx?  0** error ** %1z, r12=%12x0_  C0  -_-RcPs?  0 _load: error (%1z) attempting recovery...0_ w C -_-RcPs>  0 _load: recovery successful -- exiting0_ C-{_- -_-RcPs>  0enter_layer: entering current layer at stop_play() {r0-r12,r14}0_ @( hd t:-  e_<e-_-Bc@s<=  enter_layer: exiting0_x -_-RcPs<  0** error ** %1z, r12=%12x0_  C0C-{-_-Bc@s`<  _unload: entered0_ -_-Bc@s <  _unload: exiting0_x -_-RcPs;  0** error ** %1z, r12=%12x0_  C0C-{_- -_-RcPs0;  0enter_layer: entering current layer at pause_code() {r0-r12,r14}0_ @( `d t:-  e_<e-_-Bc@sd:  enter_layer: exiting0_x -_-RcPs:  0** error ** %1z, r12=%12x0_  C0C-{_- -_-RcPs9  0enter_layer: entering current layer at restart_play() {r0-r12,r14}0_ @( dd t:-  e_<e-_-Bc@s8  enter_layer: exiting0_x -_-RcPs\8  0** error ** %1z, r12=%12x0_  C0C-{pb _- -_-RcPs7  0enter_layer: entering current layer at set_position() {r1-r12,r14}0_ @( Ld t:- k_-_-Bc@s7  enter_layer: exiting0_x -_-RcPs6  0** error ** %1z, r12=%12x0_ C_-@( Dd t:- k_-_-Bc@s6  enter_layer: exiting0__- -_-RcPs5  0enter_layer: entering current layer at last_position() {r1-r12,r14}0_ @( Hd t:- Qk_-_-Bc@s4  enter_layer: exiting0_  x -_-RcPsp4  0** error ** %1z, r12=%12x0_ CC-pw_ PcPc_- -_-RcPs3  0enter_layer: entering current layer at soundquality_set() {r0-r12,r14}0_ @( 8d t:-  e_<e-_-Bc@s3  enter_layer: exiting0_x -_-RcPs2  0** error ** %1z, r12=%12x0_  C0C-0 pw 0 _- -_-RcPs2  0enter_layer: entering current layer at tss_set() {r0-r12,r14}0_ @( dynamicarea to memory.stable * created new type of memory (2, rma) * added str &base, [anchor] to memory->dynamicarea * removed memory type differentiation routines in kernel.stable (all memory accesses to song indirected through wk_anchor) * removed kernel->initialise.checkfatal * changed memory->finalise_dynamicarea mov r0,#0 str r0,[r12,#da_num] to mvn r0,#0 * changed ldm|stmfd r13!,{pc} to {r10,pc} in memory->finalise * moved memory->finalise to memory.stable * in kernel.unstable->layer_dismout changed wk_mem_type checking from teq rx,#1 beq skip to teq rx,#0 bne skip (rma type) * in kernel.unstable->layer_dismount moved layer indication register elsewhere to prevent trashing * kernel->layer_dismount now returns layer_stub_finalise errors * removed parameter passing to kernel->layer_dismount * added QTMPlayer_Layer.supported to kernel.unstable * changed layer register from r10 to r8 in kernel->layer_dismount * removed some return value replacement checking in kernel-> layer_dismount LayersvH!s &a4 == riscpc LdmVsFd r13!,{Pc} ;if error exit Cmp r1,#&a4 ;are we using a RiscPC? MovGt r1,#1 ;yes MovLe r1,#0 ;no Str r1,[r12,#3] ;store the results in workspace somewhere LdmFd r13!,{Pc} ;and exit ----------------------------------------------------------------------------- Initialise code (offset 4) Called when a song is about to be played using your layer On entry No parameters passed in registers On exit R0-R12 corrupted Use This stub is called when a song using your module is about to be played, and your layer is not currently playing a song. On entry, your module will be loaded (if present in the directory). ----------------------------------------------------------------------------- Finalise code (offset 8) Called when a song using your layer is about to be unloaded On entry No parameters passed in registers On exit R0-R12 corrupted Use This stub is called when a differnent layer is about to be used, or when QTMPlayer_Unload has been called. You should shut down any playing songs and release the sound system (your module is still loaded). ----------------------------------------------------------------------------- Recognise file code (offset 12) Determines whether a layer recognises a filetype On entry R0 = file type of file On exit R0 = recognition state (0 = not recognised, 1 = this layer plays that file type) R1-R12 corrupted Use This stub is called when QTMPlayer_Recognise has been called. QTMPlayer goes round all the layers, asking each one in turn if it recognises the file type. If you dont recognise this type of file, R0 should be set to zero on exit. You cannot rely on your module being loaded at this point. If your layer only recognises filetypes in the list pointed to by the layer code files header, you can leave the jump table word set to value zero to indicate to QTMPlayer that it should just search the list of file types. ----------------------------------------------------------------------------- Examine file code (offset 16) Called when two layers recognise the same file type On entry R0 = path of file R1 = file handle of song file (file is open for you to examine) On exit R0 = recognition state (0 = not recognised, 1 = this layer plays that file) R1-R12 corrupted Use If more than one layer recognise the same file type (eg. soundtracker and the commercial Tracker product) then this stub will be called for all the layers that recognise the file. You should examine the file bytes, if possible using the given file handle and return either zero or 1 depending on your recognition state. If you leave the branch word at zero for this stub, QTMPlayer will assume you will positively examine any file passed to you. Take this example: .examine_stub Mov r0,#1 ;reason code to set file pointer ;r1 already = file handle Mov r2,#0 ;beginning of file Swi XOS_Args LdmVsFd r13!,{Pc} ;if error, exit Mov r0,#4 ;reason code (read file) Mov r2,r12 ;r12=workspace address (256 bytes long) Mov r3,#4 ;read in one word Swi XOS_GBPB LdmVsFd r13!,{Pc} ;if error, exit Ldr r0,[r12] ;load in the word we just read from file Ldr r1,musx ;load in the value MUSX Teq r0,r1 ;was the first word MUSX MovEq r0,#1 ;if so, then our layer deals with this file MovNe r0,#0 ;if not, the file is nothing to do with us LdmFd r13!,{Pc} ;exit ----------------------------------------------------------------------------- Read file size code (offset 20) Reads the file size (in bytes) of a file On entry R0 = path of file On exit R0 = file size in bytes R1-R12 corrupted Use This stub is called to find out the amount of memory to reserve for a song file. Most layers will only want to reserve (the size of the file + 16K extra), and so they can leave the jump table word at value zero. However, Digital Symphony compresses its songs, and so this routine is enabled to allow layers like Digital Symphony to specify a much larger amount of memory to reserve. If a layer does not support loading into dynamic areas, then the layer should enable this routine, and return zero, so that QTMPlayer does not try to reserve memory in the sprite area or dynamic area only to find that the layer will not use the memory anyway. Your layers modules will be loaded by this point, and the initialise stub will have been called. Here is an example: .filesize_stub Mov r1,r0 Mov r0,#5 Swi XOS_File ;read files actual size MovVc r1,#14 ;only perform following if error flag is clear MulVc r0,r1,r4 ;r0=filesize*14 MovVc r0,r0,Lsr #3 ;r0=filesize*(14/8) LdmFd r13!,{Pc} ----------------------------------------------------------------------------- Play sample code (offset 24) Plays a sample On entry R0 = sample number R1 = pitch (an Amiga note value ranging 1-36) R2 = volume (linear, 0-64) On exit R0-R12 corrupted Use This stub is called to request that the layer play a sample from the current song. ----------------------------------------------------------------------------- Set soundquality code (offset 28) Sets the sample mixing rate On entry R0 = new sample rate in microseconds On exit R0-R12 corrupted Use If possible, set the sample mixing rate to the given value in microseconds. You will never be given rates below 16 s or above 99 s. ----------------------------------------------------------------------------- Set transparent sound system state code (offset 32) Sets the transparent sound system state On entry R0 = new transparent sound system state On exit R0-R12 corrupted Use This stub is called to change the usage of the transparent sound system feature. If your layer supports this, disable system beep sounds whilst song is playing is R0 is zero on entry, otherwise enable beep sounds whilst song is playing. (This is currently QTMTracker specific.) ---------------------------------------------------------------------------- Read sample length code (offset 36) Reads the sample length of a given sample On entry R0 = sample number On exit R0 = sample length in bytes R1-R12 corrupted Use If your layer supports this, return the sample length in bytes of the sample in the currently playing song. ----------------------------------------------------------------------------- Read current song position code (offset 40) Reads the current song position and event On entry No parameters passed in registers On exit R0 = current song position R1 = current event R2-R12 corrupted Use It is vital that you return a value that increases as the song progresses in R0, so that the carousel functions can work. An example for a CD layer would be to return the number of minutes in R0 and the number of seconds in R1. The value in R0 should ideally not change more than every three seconds. ----------------------------------------------------------------------------- Read last song position code (offset 44) Reads the last song position On entry No parameters passed in registers On exit R0 = maximum song position R1-R12 corrupted Use This stub should return one more than the highest numbered position that can be played. ----------------------------------------------------------------------------- Set current song position code (offset 48) Sets the current song position and event On entry R0 = song position R1 = event On exit R0-R12 corrupted Use This should set the song position and event according to the same scheme that read_current_position returns them by. ----------------------------------------------------------------------------- Read song author code (offset 52) Reads the current songs author On entry No parameters passed in registers On exit R0 = pointer to null-terminated string (zero if not supported or not found) R1-R12 corrupted Use This stub returns the current songs author. ----------------------------------------------------------------------------- Read song name code (offset 56) Reads the current songs name On entry No parameters passed in registers On exit R0 = pointer to null-terminated string (zero if not supported or not found) R1-R12 corrupted Use This stub returns the current songs name. ----------------------------------------------------------------------------- Read song duration code (offset 60) On entry No parameters passed in registers On exit R0 = number of seconds or -1 if not supported R1-R12 corrupted Use This call should return the duration of the song in seconds. ----------------------------------------------------------------------------- Load song code (offset 64) Loads a file into memory On entry R0 = pointer to filename R1 = pointer to block to load song into R2 = size of block in bytes R3 = size of your source file in bytes On exit R0 = amount of block actually used in bytes R1-R12 corrupted Use This stub is called only after calling initialise to initialise the layer. Your player module will have been loaded by this point if included in the layer directory. You should load the song into the block pointed whose address is contained in R1, and then find out how much of that block is being used, and return the correct amount in R0, or -1 if you are happy with the current block size. Any subsequent calls to the restart stub must start the song playing from the beginning, unless otherwise specified by calling the set position stub. ----------------------------------------------------------------------------- Pause song code (offset 68) Pauses the song On entry No parameters passed in registers On exit R0-R12 corrupted Use This stub is called to pause the song at the current position, so that it can be restarted from that position with restart. This stub may be called when the song is already paused, in which case it should do nothing. ----------------------------------------------------------------------------- Restart song code (offset 72) Restarts the song from its paused position On entry No parameters passed in registers On exit R0-R12 corrupted Use This stub is called to restart the song from the position it was paused at, or restart it from the beginning if the song had been stopped. This stub may be called while the song is playing, in which case it should do nothing. ----------------------------------------------------------------------------- Stop playing code (offset 76) Stops the song On entry No parameters passed in registers On exit R0-R12 corrupted Use This stub is called to stop the song, but not unload it from memory. It should restartable with the restart stub after this is called. You should if possible release the sound system when this stub is called, so long as it will be claimed again if necessary. This stub should be equivalent from QTMPlayers point of view to pausing the song and setting the song position to zero. ----------------------------------------------------------------------------- Set volume code (offset 80) Sets the volume On entry R0 = linearly scaled volume from 0-64 (inclusive) On exit R0-R12 corrupted Use This stub is called to set the volume to a linearly scaled one from 0- 64 (inclusive). Zero is silent and 64 is maximum volume. ----------------------------------------------------------------------------- Read volume code (offset 84) Reads current volume On entry No parameters passed in registers On exit R0 = linearly scaled volume from 0-64 (inclusive) R1-R12 corrupted Use This stub is called to read the volume. Zero is silent and 64 is maximum volume. ----------------------------------------------------------------------------- Read sample name code (offset 88) Reads a sample name On entry R0 = sample number On exit R0 = pointer to null-terminated string (or zero if not found or not supported) Use This stub is called to read the name of a sample in the current song. Overview<"GɰSQTMPlayer Overview document 0.04/9.3.96/Chris Rutter ============================================================================ 0. License QTMPlayer is freeware; it is licensed only for use in QTMPlay Chris Rutter 1995. To apply for a license to use it in your own programs, contact Chris Rutter. 1. Overview QTMPlayer is a media abstraction module. The idea of it is to allow several forms of media (mostly tracker songs) to be accessed under one common interface. The interface is similar in style to that of the QTMTracker module ( Stephen Harrison; Phoenix/QUANTUM), due to the fact that originally the program for which QTMPlayer was written only used the QTMTracker module. It also provides a carousel, which works under CallEvery, so that songs will be changed, _even_ when the computer is in a single-tasking mode. 2. Method The QTMPlayer module is, when it starts up, simply a dummy module with several SWIs available. Small ARM coded abstraction layers can then be loaded in to augment the system. Each abstraction layer contains essentially a veneer from the QTMPlayer SWIs to the native SWIs of the format that layer supports. 3. Result The result is that programs can use this module as though it were no more than QTMTracker or Digital Symphony with a few SWIs added on to validate files, while gaining the benefit of multi-format access at no (or little) cost. 4. Future The format has been left fairly open-ended. The idea is that eventually, it will be possible to combine many more types of media than just sound under this module. For now, however, the definition is fairly tailored towards tracker modules. 5. StrongARM QTMPlayer is fully RISC OS 3.7/StrongARM compatible. Problems <"ÙF GԩSQTMPlayer layer problems document 0.03/26.1.97/Chris Rutter ============================================================================ Xenakis8 layer - this layer will make a sudden jump in volume from max to the correct volume whenever the song is unpaused. Forwarding through patterns works slowly -- possibly a bug in the layer, but I think the module is just sluggish. matrixTRK layer - the end position is typically wrong. Digital Symphony - when opening the samples window, events can mysteriously get dropped. SWIspdJ"VmpdG0DZQTMPlayer SWIs document 0.12/0.2.97/Chris Rutter ============================================================================ This file documents the various SWIs than can be used to control QTMPlayers layer interface. The SWI chunk for QTMPlay is 0x4cec0, which is an Acorn allocated chunk. Note that QTMPlayer plays all its songs in dynamic area or on pre-RiscPC machines in a locked Dynamite area, to prevent fragmentation of the RMA. The re-entrancy of the SWI depends on the re-entrancy of the player module being used at the time of the call. Most player module SWIs (apart from ones associated with loading songs into memory) are re-entrant, but you will have to check the documentation for the player module. Note that the format of QTMPlayer SWIs has changed considerably since v0.12 ----------------------------------------------------------------------------- QTMPlayer_Recognise (SWI &4CEC0) Find out if QTMPlayer can cope with a song On entry R0 = pointer to pathname On exit R0 = -1 if file not recognised R0 = layer number (0-x) which deals with this type of file if recognised Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call would be most use in a desktop program, in order to intercept Message_DataOpen and check whether the contents are loadable by QTMPlayer. Related SWIs QTMPlayer_Load ----------------------------------------------------------------------------- QTMPlayer_Load (SWI &4CEC1) Loads a file into address space On entry R0 = pointer to pathname R1 = layer to play it with (returned by QTMPlayer_Recognise) or -1 to recognise on-the-fly On exit R0, R1 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call loads a file in. If R1 is -1 on entry, QTMPlayer_Load will recognise the file on the fly, and return an error if it was not recognised. Alternatively, you can do the process in two stages by reading the layer with QTMPlayer_Recognise necessary to play the file, and then using this call to load the file in. QTMPlayer_Restart must be called after this to start the track playing. Related SWIs QTMPlayer_Recognise, QTMPlayer_Unload ----------------------------------------------------------------------------- QTMPlayer_Unload (SWI &4CEC2) Unloads the currently playing song from memory On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call unloads the current song from memory and finishes use of the associated layer (quitting any play modules, etc.). ----------------------------------------------------------------------------- QTMPlayer_Pause (SWI &4CEC3) Pauses the currently playing song On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call pauses the song at the current position. Related SWIs QTMPlayer_Restart ----------------------------------------------------------------------------- QTMPlayer_Restart (SWI &4CEC4) Restarts a paused or stopped song On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call restarts a paused song from the position the song was paused at, and starts playing a stopped song from the beginning. Related SWIs QTMPlayer_Stop, QTMPlayer_Pause ----------------------------------------------------------------------------- QTMPlayer_Stop (SWI &4CEC5) Stops the currently playing song On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call stops the currently playing song, but does not unload it. Related SWIs QTMPlayer_Restart ----------------------------------------------------------------------------- QTMPlayer_Position (SWI &4CEC6) Sets and returns the current position in the song On entry R0 = new position, or -1 to leave position and event unchanged R1 = new event On exit If R0 was -1 on entry: R0 = current position (ranging from 0 up to R2-1) R1 = current event R2 = number of positions in the song Otherwise, R0-R2 corrupted Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call determines the length and progress through the current song, or sets the position. ----------------------------------------------------------------------------- QTMPlayer_Sample (SWI &4CEC7) Performs miscellaneous sample operations On entry R0 = reason code Other registers depend on reason code On exit Registers depend on reason code Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call performs miscellaneous sample operations. ----------------------------------------------------------------------------- QTMPlayer_Sample 0 (SWI &4CEC7) Reads information about a sample On entry R0 = 0 (reason code) R1 = sample number On exit R0 = pointer to null-terminated sample name R1 = length of sample in bytes Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call reads information about a sample. ----------------------------------------------------------------------------- QTMPlayer_Sample 1 (SWI &4CEC7) Plays a sample On entry R0 = 1 (reason code) R1 = sample number R2 = pitch (an Amiga note value ranging 1-36) R3 = volume (linear, 0-64) On exit R0-R2 corrupted Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call plays a sample on a layer-defined channel. ----------------------------------------------------------------------------- QTMPlayer_Volume (SWI &4CEC8) Reads and sets the current volume On entry R0 = new volume, or -1 to read On exit R0 = volume if R0 was -1 on entry Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call reads and sets the current volume. The volume is a value between 0 and 64 (including both 0 and 64), linearly scaled. ----------------------------------------------------------------------------- QTMPlayer_Quality (SWI &4CEC9) Sets the playback quality On entry R0 = new sample mixing rate (in microseconds) On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call reads and sets the sample mixing rate. Not all layers may support this call. ----------------------------------------------------------------------------- QTMPlayer_SoundSystem (SWI &4CECA) Performs miscellaneous sound system operations On entry R0 = reason code Other registers depend on reason code On exit Registers depend on reason code Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call is a multi-purpose sound system call. The currently supported reason codes are: reason code 0 -- R1 = new transparent sound system state This sets the state of the transparent sound system. If the transparent sound system is turned on, then system beeps can be heard whilst a song is playing. The only layer known to support this call currently is QTMTracker. ----------------------------------------------------------------------------- QTMPlayer_SongInfo (SWI &4CECB) Reads information about the currently loaded song On entry No parameters passed in registers On exit R0 = pointer to null-terminated song name string R1 = pointer to null-terminated song author string R2 = pointer to null-terminated extended song information string R3 = duration of song in seconds Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns miscellaneous information about the currently loaded song. ----------------------------------------------------------------------------- QTMPlayer_Info (SWI &4CECC) Returns miscellaneous information On entry R0 = reason code Other registers depend on reason code On exit R0 preserved Other registers depend on reason code Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns miscellaneous information about the state of the QTMPlayer module. ----------------------------------------------------------------------------- QTMPlayer_Info 0 (SWI &4CECC) Returns version of QTMPlayer module On entry R0 = 0 (reason code) On exit R0 preserved R1 = current QTMPlayer module version, multiplied by 100 Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns the current version of the QTMPlayer module. ----------------------------------------------------------------------------- QTMPlayer_Info 1 (SWI &4CECC) Returns number of layers loaded into QTMPlayer On entry R0 = 1 (reason code) On exit R0 preserved R1 = number of layers loaded into QTMPlayer Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use The call returns the number of layers that have been loaded in the QTMPlayer module using QTMPlayer_Layer. ----------------------------------------------------------------------------- QTMPlayer_Info 2 (SWI &4CECC) Returns information about a specific layer On entry R0 = 2 (reason code) R1 = layer number (0 <= layer number < number of layers returned by QTMPlayer_Info 1) On exit R0, R1 preserved R2 = pointer to null-terminated layer name string R3 = pointer to null-terminated author string R4 = version number of layer, multiplied by 100 Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns information about a specific layer. ----------------------------------------------------------------------------- QTMPlayer_Info 3 (SWI &4CECC) Returns internal information about a layer On entry R0 = 3 (reason code) R1 = layer number (0 <= layer number < number of layers) On exit R0, R1 preserved R2 = pointer to layers code area R3 = pointer to layers workspace area Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns internal information about a layer. The pathname with which the layer was loaded is stored at (R3 + 256). ----------------------------------------------------------------------------- QTMPlayer_Layer (SWI &4CECD) Loads in layers and performs other miscellaneous functions On entry R0 = reason code Other registers depend on R0 On exit Registers depend on entry value of R0 Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use The main function of this call is to load layers in. ----------------------------------------------------------------------------- QTMPlayer_Layer 0 (SWI &4CECD) Loads in a layer directory On entry R0 = 0 (reason code) R1 = pointer to null-terminated string (path of directory) On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call will load the layers sprites in to the WIMP sprite pool, load the layer code into workspace, and register the layer internally. ----------------------------------------------------------------------------- QTMPlayer_Layer 1 (SWI &4CECD) Calls an internal layer function On entry R0 = 1 (reason code) R1-R4 = R0-R3 on entry to layer stub R5 = layer to branch into (or -1 for current layer) R6 = jump table point Other registers depend on R0 On exit R0-R4 = returned registers from sub Registers depend on entry value of R0 Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call is provided so that an exterior module can branch into one of the jump table words in a layer. It could be used to branch to extension jump table words that perform extra functions (eg. the forthcoming CD layer uses it for communication). ----------------------------------------------------------------------------- QTMPlayer_Layer 2 (SWI &4CECD) Returns supported functions On entry R0 = 2 (reason code) R1 = layer number On exit R0 = bitmask R1 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call is provided so that desktop player programs can find out if a layer supports a certain call. Each bit in the returned bitmask is set if the layer supports a function. The bits are as follows: 0 supports play sample 8 supports read song name 1 supports set sample rate 9 supports read song duration 2 supports transparent sound system 10 supports pause song 3 supports read sample length 11 supports restart song 4 supports read song position 12 supports stop song 5 supports read song length 13 supports set volume 6 supports set song position 14 supports read volume 7 supports read song author 15 supports read sample name ----------------------------------------------------------------------------- QTMPlayer_Clear (SWI &4CECE) Returns the QTMPlayer module to its initial state On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call unloads any playing songs and removes all layers from workspace. It is the eqivalent of reloading QTMPlayer. The following SWIs are included in versions of QTMPlayer including carousel support (currently not those supplied with QTMPlay). ----------------------------------------------------------------------------- QTMPlayer_CarouselInfo (SWI &4CECF) Reads information about the carousel state On entry No parameters passed in registers On exit R0 = wrap state (0 = no wrap, 1 = wrap mode) R1 = currently playing item number (or -1 if not playing a carousel item) R2 = number of items in the carousel Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns various information on the state of the carousel. If wrap mode is engaged (check the return value of R0 to find out) then the carousel is advancing on to the next carousel item at the end of the currently playing one. ----------------------------------------------------------------------------- QTMPlayer_CarouselPlay (SWI &4CED0) Starts playing the carousel On entry R0 = carousel item to play On exit R0 corrupted Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call allows a carousel song to be loaded and played. The carousel will automatically play each song the number of times specified for that item, and fade out according to the flags. If errors occur under callback routines while trying to play songs in the carousel, QTMPlayer_Poll will be setup to return a pointer to the error block in R1 when it is next called, and the song that caused the error will be marked as failed. The carousel will then skip past the failed song and go onto the next song. If that fails, it goes on, and so on, until all the carousel songs are marked as failed at which point the carousel stops playing altogether. Related SWIs QTMPlayer_CarouselStop ----------------------------------------------------------------------------- QTMPlayer_CarouselStop (SWI &4CED1) Stops the carousel playing On entry No parameters passed in registers On exit Registers preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call turns off carousel wrap mode and stops the currently playing song (but does not unload it). Related SWIs QTMPlayer_CarouselPlay ----------------------------------------------------------------------------- QTMPlayer_Poll (SWI &4CED2) Returns information to indicate changed status On entry No parameters passed in registers On exit R0 = poll state word R1 = error indicator Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use Once QTMPlayer has started playing the carousel, use this call to find out whether it has changed song. If QTMPlayer has not changed song since the last time someone called QTMPlayer_Poll, the poll state word will be zero, otherwise it will be set to a value of 1. The error indicator is a pointer to an error block setup whenever errors occur inside callback routines. If it is zero, no error has occured since the last poll. Also, whenever QTMPlayer_Poll is called, the failed flags are cleared for all carousel items ----------------------------------------------------------------------------- QTMPlayer_Choices (SWI &4CED3) Sets up various aspects of the carousel On entry R0 = reason code of aspect to alter R1 = value On exit R0,R1 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call sets up various aspects of the carousel. ----------------------------------------------------------------------------- QTMPlayer_Choices 0 (SWI &4CED3) Sets the carousel fadeout speed On entry R0 = 0 (reason code) R1 = carousel fadeout speed On exit R0,R1 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call alters the delay in 1/50s of a second between successive alterations of the volume (it goes down by 1 volume unit every alteration). ----------------------------------------------------------------------------- QTMPlayer_Choices 2 (SWI &4CED3) Sets up various aspects of the carousel On entry R0 = 2 (reason code) R1 = whether to mask out system flags On exit R0,R1 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use QTMPlayer uses a whole word to store whether a song should fade out at the end, and obviously this is 32x more than necessary. Therefore, it uses some of the higher bits in the word to store system information (eg. the failed flag). Normally, when you call QTMPlayer_ReadItem these system bits are masked out, but should you want to read them, set R1 to zero and call this SWI. The system bits are currently bit 8 (bit 8 set means the item has failed since the last QTMPlayer_Poll). ----------------------------------------------------------------------------- QTMPlayer_AddItem (SWI &4CED4) Adds an item to the carousel On entry No parameters passed in registers On exit R0 = item number of new item Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call adds a blank item to the carousel, returning an error if there is not enough memory. All entries are nullified, apart from the repeats counter which is set to 1 (zero would make the song wrap continuously). Related SWIs QTMPlayer_DeleteItem ----------------------------------------------------------------------------- QTMPlayer_DeleteItem (SWI &4CED5) Deletes an item from the carousel On entry R0 = item number On exit R0 corrupted Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call deletes an item, returning an error if the item was out of range. Related SWIs QTMPlayer_AddItem ----------------------------------------------------------------------------- QTMPlayer_ReadItem (SWI &4CED6) Reads information about a carousel item On entry R0 = carousel item number On exit R0 preserved R1 = pointer to null-terminated string (pathname) R2 = pointer to null-terminated string (display name, typically leafname) R3 = number of times this carousel item repeats R4 = song fade out state (0 = do not fade out, 1 = fade out) Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call returns various information about a carousel item. The display name is a separate area that can be used at the users discretion. Various things it could be filled with are: the name of the song, the leafname of the song. Related SWIs QTMPlayer_SetItem ----------------------------------------------------------------------------- QTMPlayer_SetItem (SWI &4CED7) Sets information about a carousel item On entry R0 = carousel item R1 = reason code of value to set R2 depends on reason code On exit R0 corrupted R1,R2 preserved Interrupts Interrupts status not defined Fast interrupt status not defined Processor Mode Processor is in SVC mode Re-entrancy Not defined Use This call sets various bits of information about a carousel item. The reason codes are: 0 -- R2 = pointer to null-terminated path name 1 -- R2 = pointer to null-terminated display name 2 -- R2 = number of times this item repeats 3 -- R2 = item fade out statue (0 = do not fade out, 1 = fade out) Related SWIs QTMPlayer_ReadItem LayerskK"0 kGZ3Coconizer<K"3 <GZCode!qۧGUQTMLhx#""$#)(()-01245<=?CIJCoconizerPlayerCoconizerArmaxessModuleSpritesDe IHu@arqHrLHrDBhCsFGFEF$ `PM@_Module 6c @} 6Fu',<\@$ l CoconizerPlayerCoco Player 1.04 (24 Sep 1994)ClaimRMA ReleaseRMA LoadTrack SystemOn SystemOff PlayStart PlayStop, PlayCont4 MakeEffect< SAlterVoice` uPositionJump USetVolume zGeneralInfo"* reserves a fixed sized memory block in the RMA for coming tracks. Like all numeric parameters in this module, the amount parameter is treated as decimal number (if no base is given).  []* frees the currently used memory block in the RMA.* loads a Coconizer trackfile into memory. Either at the given address or into the reserved RMA block (no parameter). In case no RMA block does exist yet, a new block is claimed first.  []* enables Coconizer's soundsystem (linked to the given track). Useful for sound effects or to play the song by one's own. If the parameter is omitted, the trackfile in the RMA is used.  []* disables Coco's soundsystem (and a currently played music). On exit the OS is 'clean' from any Coconizer sound stuff.* enables Coconizer's soundsystem and starts to play the track. If the parameter is omitted, the trackfile in the RMA is used.  []* stops the playing song but lets the soundsystem enabled.* continues where a previous PlayStop halted the music.* makes an effect (tone information word) on a channel (1 to 8).  <&ppiieebb> * sets the status of a channel. 0 enables music, 1 halts the music until the tone/fx is over, 2 halts the music constantly.  <0 | 1 | 2> * jumps to a position in Sequence (0-max) and Patternrow (0-63).  [] []* sets the volume for Coco's soundsystem. In contrast to the internal logarithm LSB format this adjusts the volume lineary. Range is 0 (loud) to 255 (silent).  This is the stand alone player for the Coconizer Soundtracker. Long live the Archimedes. 1990-1994 Eduard Pfarr of Armaxess.O-`倏O-뀏HԟThe RMA block is too small to load the trackfile.The RMA block already exists. Please free it first.No RMA block has been reserved yet. Operation not performed.This is not a Coconizer trackfile, unable to continue.The soundtrack hasn't Coconizer format, unable to continue.File not found, can't be accessed, or is a directory.Can't access an out of range sample, tone number or channel.Position number isn't inside this song.sSoundsystem activated, but track has no sequence to play.@-`Too silly. Unknown operation. Plumpa Quatsch!яQ @-R@lяdяQ @-OF@<яQ @-=@яяQ @-2@ЏЏЏ@-(0&@Џ@-0@=ЏQH Q @-0@>@- @8DЏ@-@? !j  Q [ 00CRCocoClaimRMAReleaseRMALoadTrackSystemOnSystemOffPlayStartPlayStopPlayContReadInfoMakeEffectMakeFxAlterVoicePositionJumpSetVolume @-P TQ0j8!81 $Q  @- P  Pd+8+ j<@-P R 0P ?PP<dP \TrL T P  ,P 11 0^j  0 C-P Pt -6Z)Z P} @-  R6jC-HQ @-&C-  Q @- /*IDT 0@0C0@@TT@@- $Rm *" 8Sg ARd ,lRa***Q]P喿ϏˌÌ>Q> @-冿ϏˌÌ>Q> @-AZ:zϏˌÌ>P ?A-#R> *! P9*?Q7*ɯ⴩@-D ? YY |p0 0@@  0@@ Q ,Yp00B P P2 0v  0@@<<<ZmP@-\Wj0 0@@B@- Q{/+<6jP@- Pi =%j 徿@  a   %:47S   ?@0S ϏˌQʏdΜ@@-@勢S [AX`pA X `x@- 0@P@@@@@ CocoplexNoCache?m  >Q P!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `Q?@X?@`PV ``@ P!hS`V`Cp ` ` ` ` ` ` ` `pW  CocoplexCache?Y >Q< Pp!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `!hSQ1`V`C `pWQ?@X?@`PV ``@ P!hS`V`Cp ` ` ` ` ` ` ` `pWOO-eP#t*@@@@Mok]@[@Y@W@BokpW@pP䔏OO-ذP#*@@@@@@@@X`k&@$@"@ @@@@@ `kpW@pP倅蓏Q R> >Q  : `~ ! :`~ !%&'()*+/ ! OO@L \ @-B     ppIH" J0T0S  `,"$d("(T$",T  <#(.LRDF&.KO!PP"PP  a+QEU 3,QP a+QPEU 3,QUUUPQCPQQCQ@n7 4 t # oJ3*/DiF?g T"_$&(@+-0p369+=@DHMQV[aflysWzR|#MM3:"G4FZng\uI%Eh767gʛ Johln7q' 8 4 = t   """""$$$$$&&&&&((((****,,,,,....00022224444666888:::<<<>>>@@@BBDDDFFHHJJJLLNNPPRTTVVXZZ\^^`bddfhjlnprtvx|~ Sprites~ ٘F5!file_365,, wwwwwwwwwwwwwwwwwG4#""2CtG4#""2CtG4#""2CtG4#"14"2CtG4#""2CtG4("42CtG48"(!4(C3CtGA(8Cx30 "(8tGD3(14@1((CtG8#"!D"DtG4#"4"2CtG4#"C!"2CtG4#""2CtG4#""2CtwwwwwwwwwwwwwwwwwSprites22~ ☹Fe!file_365!,,wwwwwwwwwwwwwwwww73#""#3sG32"!!"23t73#""#3sG32"!!"23t73#""#3sG32"!!"23t73#"("#3sG32"!14!"23t73#"@ "#3sG32"!!"23t73#"C2#3sG38"!4!23t73("(C#3sG38"(!4(!C33t7CH"8184$3sGA!(83x7@((3x20 "(8tGD#8BC 0(4sGD2(14@1((CtG8#(8$8sG82"!D"4t78#"CC"3sG32"!4"23t73#""#3sG32"!C!"23t73#""#3sG32"!!"23t73#""#3sG32"!!"23t73#""#3sG32"!!"23twwwwwwwwwwwwwwwwwDSymphony:K"8 :GUZCode$:"+e$G֜RQTMLx$$&)*18;;BEFGHIKQRTXY[DSymphonyPlayerDigital SymphonyBASSModuleSpritesXX h 0@2P`XXsX 0P`XqXXX|(X0 @XXXXXXXNot supported @-@0 @ hPl O0 h` O0 h O0  O0 h`?6 O0 h0R` O hAO QTMPlayerModuleW!ڔG!H!D8HXD-DSymphonyPlayerDSymphonyPlayer 1.41 (23 Oct 1996) BASS 1991/96, FreewareDSym _-KO 0@衐‟ Q  1  2 2Ѝ_0 Q2 121 C/O X (~OGx_@-"1 -1`*!@hj-6 b 8oO"> ^@oO`p W _-'QL0<@-DpDpLOD@-\O_-&:![ 0 !,vxLvdj&\>Unknown Digital Symphony operationDSymLoadRestartSongVolStereoCutNotePlayInstrPackedPlayInstrResetParamsFlushOutputFreezeOutputUpCallVectorMaskVoiceSongPosTuneControlPauseVoicesWaitIntStateNoteInfoVuBarLoopBufferAddressVuGravitySampleRateConfigureParamsTuneInfoPlaySingleDefaultStereoInstrDataHardSpeedLoopTypeFillAddress@- 2$  @_-/`,U?B p @P@8Ϗ̌ L@Bo`lp @P>PPPR@TZX-Tďr! s3tDuRvnFneq`A-W.@-Pp pI| 1: : a P TP!d [ K [ቲK [ K [ቱK [ K [ተK [ K ! P^ㄾ@pp#pK%^1 0 :  :  :㰏G 1: Z ^!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0[[ CaA>!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0!UQ 0aA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!![r[ G!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Y% A Z! 60S3C "S3C "S2C "S2C "S1C `"S1C 0"S0C "S0C " Q :T !d [ K [ቲK [ K [ቱK [ K [ተK [ K !  Z " [ K [ቲK [ K [ቱK [ K [ተK [ K *"* &6c0# S*PPE!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0[[ CaA !UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0!UP3Q 0aA!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3[ [ G!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3!P3Y% A Z^ 60S3C "S3C "S2C "S2C "S1C "S1C P"S0C ("S0C ":Q8:TE!d [ K [ቲK [ K [ቱK [ K [ተK [ K !  Z! " [ K [ቲK [ K [ቱK [ K [ተK [ K *"* &6c0# S*PPEw ^@0 Z Z# ^?@-@`M10qB??@-L@001??@- ,0x@`M$PBP? @eeeeeeeeeeeeeH- <0`=" R  Q @-}@.@#_-ϏP͌ 6 (Q_-ϏP͌ 6 (QH-P0 0PZ[_-fΏ@͌_P]0ヒ0SZ 0@P`p U0O-ǿL 0@P`p耰LT尰0ヒ0SZ 30 _-sQT y u Ih@-l P-ePk@ /?H-p L0@\p @ Qp >n38^ 38$ 8SXaSX'X@-P<<>p 0qO8L- @-$p$@-QpdPc#@-/@-.q1?H-I-t000ptq x,@(?@-K,p,@-p@-J @-,>@@-VpJ7-\d T,P0`X.XP ZQ:`V X@@\Zx@ \PB8`], |Q]]Wb]] -ps\q7H-\Qdwp Bx @TT0_Sd guRkiR uR 7-O OΏOn`o KN‰0@=  _ 0+ x("P`0'xp`P U V: ` Pp[0p RZM<0.#x#8ML@0". $ $H@"2 ~O8xiR8<iRuR7"_p0i OQZ  KJ" 9OQZeKbKJPP ~bV3*6" Y႓I "YI "Y႒I "YI "Y႑I "YI P"Y႐I ("YI "A [Y႓I "YI "Y႒I "YI "Y႑I `"YI 0"Y႐I "YI "' [H-N@| DpX(\:}hS@. xqR"}Y7{eQ>, ~wqLxU3xcO<* }vpFtP/u`L:(}vo@oL+ r^J8&|un: kH'p[H5${tm4fD#mYE3"zsm.b?kVC1 yrlX(\:}hS@. xR"|Y7{eQ>, ~w~LxU3xcO<* }vwFtP/u`L:(}vq@oL+ r^J8&{uk: kH'p[H5${td4fD#mYE3"zs^.b?kVC1 yr  +@1JaxŴxaJ1tlf`ZTPLHFB@<:8420.,*(&&$"  _-O@L(1L X# 0:T02,@t:0@trLPL@38^ PH PEXxpL`(@A4 R@J *$ V $FAAPUZ@X * PUZH L0R0L褀LL 8> GLL  D``VZ8~,(0Q_㠐PEXxpL`(0V PUZ@X* PUZ㤀 4LS0 S00PL@38$ Q_H PEXxpL`(@A4 R@J *$ V $FAAPUZ@X* PUZ3> GLL D@@TZ8~0(04S00L_-O/L`Pprg?.LCIOCB~@?>=<;863('&%$#"    KJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!   p   - 1240#80HX) C娐Н TA7@#@@-C͞L2I⃓$0T*0S0SIǐѝ Q7#@[@T@@KT)  C@DqTq@C  TA7@#@ pC蟏@TOC  TA7@#@| p ^\1|B390Q03 \ 0CQ03 \ | ͞L⁓$@S*X0᳟ S170#0 |.0L 000 h?1 ܐY%>ܐ 00 . H@0LT@<@0> GLL PL@0> 0( DЌ_-~OPL/L`X@xP0j r  ^ࠣ. h KKKxK >ܒ ?@ $Y$? >  > >8 > ZOA ?  >+    Y 7#h┐尐^ 30Y ᠐ 0 NP0Ű0լ L!:X?!BASS   P_n{jut Y 7## 41K1X Y 7#b14 Y 7#Y01  Y 7#?L?@-ON$Y$ \ Y\  㜒 01 Y 7#?)& \\ Q  -#0 8<@x[@Q@üK0KK0@S<0qP 30 -#g 8-#^ 8|0| 01 102 -3 P U 1 E<<qP@L< 801 1 3 1?$^$( > 83 H0 8@-h┐尐^ 30Y ᠐0 NP0Ű0լ  -<# 8-4#} -=#8u-5#mH0 17ix[KK0K`?\ H0 18 UT81QPM|0| 8FD-#0*8>0@S<0qP 432 0 =O , OAB##QaB-0.^Qڨ0 Y 7#51p0 00HPU[-OpL pWp3X3Y3[3 〰x | [3|Wp3X3Y3 ူ 倛 pWp3X3Y3[3 | | [3|Wp3X3Y3 | 倛HN |_-pp4W <O⸐0T `2`@O0J0 j0 /.0uD3 0OAP0 1 A- P |`V V@-P UîʇO8P@ TçʈO@ȐO”I@Ma@ ~ PÕ @[ O\ PD< 000jOO07 .00  0Q;H+ M;D+0SZ\A,A( O0O(5 #POʋ 4o 0O 0^L0L R-O4 ĂO4 }T}P *OcᘵG4$@TO@M㽟O”I@ 0 ?0PP@@P@q@ZSDO7; P5& P P O- @pM$O- O`M 0-  OP-(    0m OLq@ZЍ OOLF O,&@-PPGUP@PЏO- O>PT@@((8Џ_-0O.N@-0(1 < {j@-L0` rj @0D 0  0@-0 _j#W* @-,p~`@F0S  ` @-,1@ ;j#3*T@-~@@6` @-1@- @- 0 @-> L j(  @D dd1 p0F S_@-Pt@|p` `2`PU0_-0 (0 0cj  ddt 000HHH\pShort fileNot enough roomNo room for buffersIllegal number of voicesIllegal number of patternsIncompatible Digital Symphony versionUnknown Digital Symphony formatToo many patternsUnpacking errorSample too longBad sample lengthToo many sequence positionsNot a Digital Symphony file_-RX0j SO~G`5 jP ```VPP`_@-@-@P(0@4@-@P(0@4@-WOA1x O-BA1AFO`A1$ O`-BAA1D0@@4@O@A00 0 0A08_- LLL ^OA Y?HI`p _pWc6eP>N D#;:#P8 @!80 #R:ۨ N^BQJQJQJQZ @#R!@0 N^'QJQJQJQZ @ ^!80#R^ SO UP > 堀<ᜐf,48 @ PX`pg6g pg- ; 0C@@O@H@ I^C_-;8  nDPD0 OA SE0CP `  [# <ɠp 1 [<ɠ3 ppG'P:9 I⨀1Q1U  k2ˠ kB- ; 0C@@a_O^E@ o0BCP∀@-B@BP_-p3 ݾO@KOD @yOLA A@P O@IB(P 0@@@AMOAMO2(?OLN O`PO@ @@㪟OLI9BPN Op0A,- @O@ .@_-Q-,!O:Z Z:JnO@lFm`O ` OpA?O`O@=C>O=C>O0C>O@=C[ GG[ [ G[[ G[ C[ C23 _-O OOOpO OP-OONOOPO\0.P O #x#80" O OP8OPNPO(@.$$H@"2 / @P0`X.XP ZQ:`V X@PZ< BPOQQAHOPK 0\\QONQONtlf`ZTPLHFB@<:8420.,*(&&$"  0HXdlt|}umeYI1  "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~}{ywusqomkigeca_][YWUSQOMKIGECA?=;97531/-+)'%#! _-OPA- R?vPZROhd_-P2  >M : R R Rp Rap Rap Ra:  R ^ ^ ^  p Ra 0^! 0^! 0^!  :  R @$H^H%XX&hh'xx( ) * + ,H  p Ra ,Ƞ Ƞ0^+Ȍ * ) ('x&xh%hX$X!Ƞ ~1_- OP-B 00Q0! $<D$<D$<D$<D%<T%<T%<T%<T&<d&<d&<d&<d'<t'<t'<t'<t^1_-k/OP-B 0 0 0Q0! ̠(<Ȉ ,( , D H L(<Ȉ ,( , T X \(<Ȉ ,( , d h l(<Ȉ ,( , t x |^,̠1_- ` 00S030Q! LTD3dDLTD3dDLTD3dDLTD3dD\UT3eT\UT3eT\UT3eT\UT3eTlVd3fdlVd3fdlVd3fdlVd3fd|Wt3gt|Wt3gt|Wt3gt|Wt3gt^@-iOvQvA0@-iO⒠NSpritesT  rF4zfile_10b,, wwwwwwwwwwwwwwwwww!ww!!!!!!!!!!!!!Cww4ww!!AHXXXXhh(!!Cww4ww!AHHHXXXhhh(!Cww%"4ww!XHHX"3"hhhh!Cww%"4ww!QXXXXXhhhh(!Cww4ww!!QXhhhhhh(!!Cww4ww!!!!!!!!!!!!!Cww!44444444444444wwwwwwwwwwwwwwwwwwSprites22T  R^Frfile_10b!,,wwwwwwwwwwwwwwwwwr t !!!!!!!!!!!!!Bs2t !!!!!!!!!!AsBHXXXh2t !!!!!!As2HHXXXhh2t !!!!AsBH8HXXXhhh2t !!AsHHH8HXhhhhh2t !"AsRXXXHahhhh2t 3&AsRXXXX1hhhh2t 1&AsRXXXX3xhhh2t 'Ashhhxhxxxxxx2t !!Ashhhhxxxxxxx2t !'!Ashhhxxxxxx2t !!'!!Ashhxxxxx2t !!!'!!!Asxxx2t !!!!!!!!!!!!!As 2tBCCCCCCCCCCCCCCs'444444444444444twwwwwwwwwwwwwwwwwmatrixTRKпK"9 пGZCode(<"(GwSQTMLxY5AAGGHHIKNRSTTabdefhmatrixTRKblackICe v0  c shk h}d STshhnWh14UYYq Y-T Qh1I@ZRSVVHI )@matrixTRK track validity error ( )D-   2.    2 matrixLinkmatrixTRKmatrixSQSHQTMPlayermatrixTRK failed to load a songmatrixLink !v GS= Dt,7d@matrixLinkmatrixLink 0.48 (15 Dec 1996) Marko LukatmatrixStatus, R@=hba 0L@ !R:Mp BzzO-0 @matrixLink: Unable to claim workspaceO- RP0 A`1@- [ 0')+D Z @- @ 8 cR 400C  RA@matrixLink: SWI currentlynotregisteredH RS-`P `P``@ P (@PU P (@PU?-  0 0 0@ P (@PU P (@PU?@ata$M ! j-      j;j ! $ЍqSWI's 31-00 : SWI's 63-32 : Prefix : matrix [&4BD40]@-FOJS0CR(:P@U U5  PU-  @q@b'Ѝ VSP U: R8R`@P P U R3Ѝ2~8R U P? ! uR(P PUmatrix_LinkVersionLinkStatusRegisterSWIDeregisterSWI ADPCMVersion ADPCMDecodeADPCMEncodeTRKVersionTRKLoadTRKLinkTRKUnlinkTRKReleaseTRKSamplePeriodTRKVolumeTRKValidityTRKControlChannelsTRKControlSequenceTRKPause@tFeK?Resources.matrixLink.matrixCSQSHFeKD䄹 aCA0&@H޴)#7.!N bH7!5ur*P@M0h @xH"FQje( ;Q=RbƢ@kD`Dp0APuu7/P7 ws;^ʌ ۅq̘/ˌaF j.h,Ѥ7a#g-ݍZяm/3g oYA@$6 hxP:F6ߘ7`{DV e0odEUXe:xWZ"i#"wOAhf` ! A&hP}I(@4 eJeQ:ytƞczg1nqeisxl?S'Fj)x}>'7h%`t5%g\")^F$IW` ¦EF=d*cpt 7fU]1*b6lW x,J! _8$=!-ښڶjٶ`v+ՒYGڧ+(!tb f Da,bpJI`pQ ;gY(pp'fWqi(1gB0g (8H:ܗ-;yƌڣ 3g #)i p+p̴t͌pouYuDKS3= եـYq6ETWĶvu-hCB-D4Q@5EM^m w`PbFt HQFlDg1BmatrixSQSH`! `G= d,7matrixSQSHmatrixSQSH 0.14 (15 Dec 1996) Marko Lukat RO- zh倏SquashO- ROmatrixSQSH: Service still locked@-`QQPQ@#^-tVVD83351'Dh ccea0ceh tp@ cjPpG p @}Ѝp000jpt @c @@c j#*0B scjPbg W ЍkSHV*S`!0 V?:`ajp -t0I @c@ @c(j#&*Y  0=cjP#*: 0FY 0AI @c@ @c j# *0B "cjP0 ` `Dcc``@-*@- c@- c@- 'PA@@!matrixTRK!/ˬG\= Th- R  @-50 ( P=L @-* @#-  AKL@- @`b#- A NQ0R:T1/B"T1/BT2.B"T2.B T3-B" T3-B T4,B" T4,BR: T5+B" T5+B T6*B" T6*B T7)B" T7)BT8(B"T8(B R:T9'B"T9'BT:&B"T:&BT;%B"T;%BT<$B"T<$BT0#B"T@0#BT 0"B"T0"BT0!B"T0!BT0 BT0 BmatrixTRKmatrixTRK 0.89 (15 Dec 1996) Michael Pohle & Marko Lukat [32 voices]LinkTRKlUnlinkTRKTRKVolume<H* links given track with sound system * unlinks current track from sound system * sets internal tracker volume (0..64 linear) Passing no parameter or values outside 0..64 results in providing current volume. 0..64] RO-. m?Bbh0=kh  0R: 7 h cj < 0@@R4*) @ 0@0+j )( 01 @@ @0:*B) t 00j  {[ 0 ܰ[<  s c0 * ܰ[$(,,$  p @ccaP@S0 T!pp@p0S0c0T!pp@p0S0c0RMEMCMEMLERRO-Oxx(  㪠K(: \0 chQ 0  ch 0 chQ  O@-  qQ0HXdlt|}umeYI10HXdlt|@-% ( <0@ 0- R$ R  R;@-0@&P<#$"P2@ R0c&@u@@u'P<#$"P2D R 0c'@uD@u%P|P;#<(PU@ P;#$"P2 R@0c@u@uPU1 < R0c%@u<@u  *;P@-P3RK ! @-D AR@ #D % AP(D ,LFILEMTRXCTRLNAMEAUTHSEQCPATTSAMPETRKMMRYO-`O cPT  l0e cj|0 00S Z 0S  H   0  9[ HXDX    P ~ zXU v  s  p $G@0~1Po1Pl Z1 ` [ C[JP^1S R  Y NPU JT%XQ P A!@UP@@@   6 #@0Al2@S ) $  \U PU  P X!@UP@@@    #03S 0  S  80@@@0 p 3e cj13   P #%(: ceh #%( pP@S0TO"pp@p0S0c0@-   MTRX@-  (0H 0@Q``"_`XA"3 1P  ({4 R 4  (@^0Ѝ@-uR ! }}}}}}}}{{{{{{{{yyyyyyyywwwwwwwwuuuuuuuussssssssqqqqqqqqoooooooommmmmmmmkkkkkkkkiiiiiiiiggggggggeeeeeeeeccccccccaaaa____]]]][[[[YYYYWWWWUUUUSSSSQQQQOOOOMMMMKKKKIIIIGGGGEEEECCCCAA??==;;9977553311//--++))''%%##!   ""$$&&((**,,..0022446688::<<>>@@BBBBDDDDFFFFHHHHJJJJLLLLNNNNPPPPRRRRTTTTVVVVXXXXZZZZ\\\\^^^^````bbbbbbbbddddddddffffffffhhhhhhhhjjjjjjjjllllllllnnnnnnnnpppppppprrrrrrrrttttttttvvvvvvvvxxxxxxxxzzzzzzzz||||||||~~~~~~~~ !#%')+-/26:>BFJNRVZ^bfjnt|{skc[SKC;3+#(8HXhxwgWG7' @`_? @`_?Po/Po/Po/Po/0O0 O0 O0 O0 O0 O0Ox@-CL< @mh@ +n 6@@--?[ J8Ə84崠p{H:$6T:Sჲ01C T:% ܀OHOI|` ``şT P :Pp*P>:Pm*Pp"S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S| Z*"PC  "Sr Zx*"PC  "Sh Zn*"PC  "S^ Zd*"PC  "ST ZZ*"PC  "SJ ZP*"PC  "S@ ZF*"PC  "S6 Z<*"PC  "S, Z2*"PC  "S" Z(*"PC  ^"S Z*"PC  "S  Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S{ Z*"PC  "So Zu*"PC  "Sc Zi*"PC  >"SP ZV*"PC  "SC ZI*"PC  "S6 Z<*"PC  "S) Z/*"PC  "S Z"*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  "S Z*"PC  . Z* @ Z* @ Z* @ Z~* @ Z{* @ Zx* @ Zu* @ Zr* @ Zo* @ Zl* @ Zi* @ Zf* @ Zc* @ Z`* @ Z]* @ ZZ* @ ZV*  ZQ*  ZL*  ZG*  ZB*  Z=*  Z8*  Z3*  Z.*  Z)*  Z$*  Z*  Z*  Z*  Z*  Z * 0S0@ Zx5-:PpP:L \*- O @- T P  0 \* \* \* \* \* \* \* \* \* \* \* \* \*MTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXMTRXlO LtOXT@0@L@L00S0H0`00S0C`0P#:< R P -PPLOY-P ` PPLOYP-- +P@A80S<0080<0S 0S<0P*,0S( $0 P` R #4Ћ%pW*00,000( P010@0@ R L 傂S  &  R 5   $ P @R @R; S P\  R((*PU_PGP`$`R R 1p{SS``@- (d`V@- c `>p=`:p9`S ```V``AS (-2@$H$6S>*$4%S(@#\ubp7DY_w$2@,+DCucbsS(J0CkR0! 0L@20#8 !Q!!!"5"1n( X PUT4@4@PUT3@3@(SJJ@Tq@@LZ(WPUT4@4@PUT3@3@(S@TkLNZ(>T2@2@` R(7$B@2u?PP` U`# VQ`VmnU#7$@7@(`, Vppp36p-@PU6PUT5@5@(, 0U JZ60ꄡZ!60%(70S 0P `P U#Z@:@-0@PU8P PP PP8PSpp: 90(#a`  aRf 8J[S<#<90ke@_ZTPK@G@C?<852/-`*(%#!X@0,` @ p hPLt4X(\:}hS@. xq2JbxŴbJ2PU@T@@@@0<@L00S0H0PU@0T00Ld"0C S0@S@0@0@L@L00S0H0PUT@@@@ SB0ST?@?@;0$B0S0C0@S@0;0 ,00@>@PU =0;@#a` bO aRf (@@T@@@T@Ch@@[S<#<=00ST@0ST\0#c B-X0T00SL 傂  &  R 5   R  ; 0;  (0S00TA@A@P0UPEP    $BT; 0;PPT0 "$ T  T  T  T03@D20 @D$@R@ R ; TB@B@P$2@U  PUPPU0ST0D0C0SC@ 0SC0D0000,0(00C(0 <00@8@P,`P$2@A@@T@#P01000,0P,`P@D(@0,0P,`P(0TLd"0C 000C(00,0PUTH@H@DPUPT@#F@TF1@580#&U@DT@D *F@@pWZ $pW:ZG'Z GZ~G'Z ~G Z}G' Z }G Z|G' Z |GW: Z{G' Z {G ZzG' Z zG ZyG' Z yGZxG'Z xG W:ZwG'Z wGZvG'Z vGZuG'Z uGZtG'Z tGZကsG'Z@ sGZ rG'Z rGZqG'Z qGZpGZ pG vnf`ZVRNJFB@>:86420.,*(&$""  @ Q ! MPAPRP0  P07Q7  Q7`.\0 0R TRKLink: Error code #TRKLoad: Error code LOAD.#TRKValidity: Error code MTRX.###@ RkP *" P07" P07 0   TRKRelease: Error code ###@*!jAR*(,s#{M q sЍqcurrent TRKVolume: Sprites0 ur0FF4file_00b wwwwwwUUUUUU333333DDUU%""""""""""""""""U333333333333333#U333333333333333#U3swwwwwwwwwwww3#U33wwwwwwwwwww73#U333333333333333#U333wwww3?33#U333swww7333#U333333w7?33333#U333333w7?swww7#U333333w7?33w33#U333333w7?33w33#U333333w7?33w33#U333333w7?33w33#U333333333333w33#U333333333333333#UUUUUUUUUUUUUUUUU$small_00b wwwwwwUUUUUU333333DDUU"""""""""53333333353wwwww7353DDwGD435333w73335333w73335333w73335333w7333533333333UUUUUUUUUSprites22 u"F:KTfile_00b!wwwwwwUUUUUU333333DDUU0!!"#3CCDEUee"2234DTTUV!!"#3CCDEUe"2234DTTUqwwwwwwwwwwwGUwwwwwwwwwwwTTwwwwwwwwwwwDEpwwwwwwwww7DT!!!"#3CCD"2234D"!qwww?CC"Bwwww434#"!uwwwO#3C2"Rwww/223##"!!ww!!"#332"rw"223##"!qwADDD$432"rwpwww7C3##"qwADwD$4432"rww"DC3##rww!!D4432rwwEDC3#sw!w!TD443rwwEEDC3sw"wUTD44sw"wUEEDC3##"!wVUTD4432"WeUEEDC3##"!VVUTD4432"swwwwwwwwwwwwwwwwsmall_00bwwwwwwUUUUUU333333DDUU0"3DUf!2CTeqwwwwwUqwwwwwTRUuwUUD"pw!2C#qw"33"qw!24#rw"D3rw!E4swUDswVEtwfUD3"swwwwwwwwQTMTrackerK": GZCodeTI"uTGYYQTMLxx-23>@DFGIJLTUVWXZQTMTrackerStephen HarrisonD~  h 0 h 0MUSX0 T~I~0  X~ X~R~F~cN~cF~E~qE~V~q3L@ 0@~sC~A~B~H~H~R~QTMTracker will crash if asked to load a zero-length file, so QTMPlayer has a work-around for thisModuleT VTF4!4("3"#@~d" <H\-TO㎠5e\scp|\-OU\scP-OPsc\-Oo\byofcopyright(c)#/M.K.FLT4_- 8@ b 뀟P-i] P Tu6q?@-PPW7h QPXPQRSTPP?\7̌ [ 07 e165*K@ZV}Unknown QTMTracker operationP-6̌FQ 'Q P-d6̌DDP-@6̌Y5 4 1PPP6T6`d5̌5̌5̌5̌k5̌@-XbjjR xh@-Q  R R xR@ Syntax: *QTMLoad [x] 5̌@-    ehSong name :   Author :   Position : G  Song type : RjRRR  Module length :   bytes Sound tracker 15 inst compatibleSound tracker 31 inst compatibleProtracker 31 inst (M.K.)Startrekker 4 channel (FLT4)@-?00O / PO3̌@-hQPosition :  -U0bjR !jxehSyntax: *QTMPos [ [x]]d2̌@-Q !q{xehOO Current volume level:   1̌@-Q! jjEffect disabled eh,@ R,A R% Effect(s) disabled are: 0@P`pO  ,p `V0`p  No effects disabled 0̌@-! jrjEffect enabled eht0̌@-th-No. Sample text Vol Length RepOff RepLen FTune --------------------------------------------------------- OFpQ`V: -    V-1< P      )                pW@-  PQ@- Q@-0C-P9 p? P ,jD0(j2 Y 0Vj@ 9`` H@0D`jO K{{P{{{xD 0@0D0CehD0\j `D0Tj P j 0j0S00Sۤ¤ @`@- \s0CrH0uc# (jK freeCNot enough memory in RMA to load song, requires at least K free@-D0k 3 /jpG  j0@0D0*eh@-D0R 3 p  jB0,@4)C20D0eh@-\@-k {suxh@-h-D0HI2 j jB,0D0eh?M-)☀R(?(?(⨀?(?(⨀?(?(⨀?(?(??H- 0@P??????????D-餠 0@P??????M-hP?䘀(?(?(⨀?(?(⨀?(?(⨀?(?(?D@-hOK-Q-E G0H@LP ` @-~ h 0pjqqq x @-PH@  \@-?Q4@Sequence number out of rangeEvent number out of range@-p>-!>hP@2 -?M.Q>@-p- h 0#03@?"=2@2 -.Q@-p- <@-p $< RH<@ 0$@RPPQPPR$P P<Effect number out of range@-h@-hPܥ^O @@ @-hD  @-{h@  0@PPE` N @- P se h0QʀqǕj1ˀ QQ,01PڕU1 O/ѱO/сK-Dh8\ 0@0\@ 0@P`~  ?@-"h pP<dP0@- 0d0`0@0s1Sample speed out of rangee@a-p@ 0@P?@-Q q{q{q{e@aK-钰 PR0@ < 0A } r qSa $[K1}p  @-Q -:@("#{q{q{e@aK-钰 P0@ l `T & b $UPE1}QP  Illegal address passed to QTM@-pPPPh@0 R  0QJbJ000P n0 / Bad number of channels|O @@-^hQ -:@(AO"#-P }rq 0 @P``偀-P }rq 偀@-jhP - ^ @Speed/tempo value out of rangei 00i0@-l0p@Q lp  X-lp [ࠡ PP Channel number out of rangeP@P Sample number out of rangeP@PVolume level out of rangeP$$PqPP Note number out of range-DNo song loadedX-䰏H Q@ -?M `Q @1-!=@P!a`PEUDQ@ $ @ @-h8-B,4 00D@C@, !8 R 8 8x8hOSong time could not be calculated or song lasts over 9 hours!@- /0O-}p@0P2#H0A 焰`Q P P'`VY Pϥ10#HP@1 0@To!T8X1pZ'(A:121(1@- % 0 P P P !$ 0 P P( A!?Q~ QQP P0QLPAç.)!P @-    @-Ph(P@@-pX@PH@ - 0pP hPPP hQ Bad VU controller stateR@-\ j xehR@- j@-P^M ^" ?-( "\"H@"40 @  BR C@00CS$@@@DT(@PPEU,( ?- (0@PP`VV V VP V P V`&b V V V VP PUPCP@@T-鼰\E@P@ 0 pp|gP|'t|gQx'x|gR t'||gS0Y 0 (忏QTMTrackerQTM Tracker 1.27 (30 Jul 1996) Phoenix/QUANTUMQTMLoadStartStopPauseClearInfoPosEffectControlVolumeSetSampleSpeedDMABufferRemoveChannelRestoreChannelStereoReadSongLengthReadSequenceTableVUBarControlReadVULevelsReadSampleTableReadSpeedPlaySampleSongStatusReadPlayingTimePlayRawSampleSoundControlSWITableAddressRegisterSampleSetSpeedMusicVolumeSampleVolumeMusicOptionsMusicInterruptQTMTracker%QTMLoad('QTMStartl?))QTMStopx+*)QTMPause)B)QTMClear((QTMInfo0d*.*QTMSamples+U+QTMVolume2-,QTMPos4E+g*QTMDisableLI,+QTMEnablex~,X,+--------------------------------------------------------------------------+ || |QTM-QueueTheMusic| || |The ultimate sound tracker player routine for the Arc!| || |v1.27 1993-6 Phoenix/QUANTUM| || +--------------------------------------------------------------------------+ * loads (and plays)specified 15/31 inst sound tracker module. If an 'x')placed after , thensound tracker module will be loaded butplay routine will not be started, use *QTMStart(startmodule playing.  [x]* stops song playingremoves it from memory, releasingRMA used(store it. * starts song playing, if it has been stopped or paused. * stops song playingresound channels(their previous owner (use *QTMStart(restartplayer). * acts as *QTMPause, but also song sequence posi (0defaultschannel/effect flags (this)equivalent(reloadingsong). * a variety of informa aboutly loaded song. * with no $s  posi insong's sequence table. If a  )specified, this will causeplayer(jump(that sequence posi . If an 'x')present after ,player will not resetevent count when jumping(that posi .  [x]]* lists s, lengths, repeats, etc. of&the samples used in song. * with no $s will list s ofly disabled effects. If an effect)specified, it will be disabled fromsong effect handlers. (enter 'E'-effects as '* E6' etc.) ]* reversesopera of *QTMDisable. effect  >* will setoverall output volume fromQTM play routine tospecified linear volume (0-64). Ifcommand)issued without a $, overall volume will be displayed. ]-QO- P P1U !(℀<倰 @<  ʯD 8@ !z pG }rqS$L @!t+ !m`V' PP(  P 1}pqPP p9` P P %')+a j Yp P ̥p'P@ppY xpYppppO-     0 @P0B\bhY!"$0@ @R0 @- ( 0 @P0(*,4=IOS[!$ 0 @P0{Q8Q0Q$  $Q(  ( Q22P`A@Q@ !?Qi  QQ  *@-@i s7@-@s7 P@qPq  PP 1% Q67PA7˥6)3Q,"3@P@ PC 45Q,"5@ P 3P3˥a4PJ4 5PJ5a0 Q 8P8  1mcb 0AT$S0P!2@0 @qPq  P , PQ 0 P AP, 1P P, 1P 1= @23AQ$P@w P,p! Pp $3  0O#=@$@@!<",' ];0c!@PC@P@ !@PC@P@ (3  0O#=@$##P@C@P@ !<",+ *;0c!@PC@P@ Bj_-_-QϏ[ }$0 0@P`dppp|  0  _- 0@P`pSϏOOOOP- 0@P`Ϗ pp}^>P- 0@P#Ώ>@>@>@>@>O/ѱO/1JaxŴxaJ1X(\:}hS@. xqR"}Y7{eQ>, ~wqLxU3xcO<* }vpFtP/u`L:(}vo@oL+ r^J8&|un: kH'p[H5${tm4fD#mYE3"zsm.b?kVC1 yrlX(\:}hS@. xR"|Y7{eQ>, ~w~LxU3xcO<* }vwFtP/u`L:(}vq@oL+ r^J8&{uk: kH'p[H5${td4fD#mYE3"zs^.b?kVC1 yr_- H[ZHZ p<LPgK6j4ju< Z,ڔ , J p`PPPP@@P@U@PLP040P $PU ѢPP%TP Jp`V_Sorry, I don't understand this song format, or it is too badly corrupted to play@-xQKOK<@ @* +0$Q@D@-0` Cbh@  0S@-/0SQ@-xPFxeh@-D  y?hbj[ @ y/J  M. K.8yHxNot enough space in RMA to correct song@- R0Ч0@- Q _-$Q]  .Č .Ȍ+̌  . .*  . .)..(..'p.t.x&|`.d.h%lP.T.X$\@.D.H#L$Q0Х0ҧ0@- P-- 0S S 00 R@- F0 ((( (((0S-0@PpW T `AV `zV `F@V 0ST`@ V.V:V@0S@-  0S S 00 R@- 8 DP HP FQ E @-G@- 8HA   !#%')+-/13579;=?CGKOSW[_cgkosw@- \ Q Q H Q xQv QR 0S RZ@TINF@-鬐IhPk `P\@`5$A`VpP-? qpWR<2}"#Af`V`C `8Af`V`C `2Af`V`C `,Af`V`C `&Af`V`C ` Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `~Af`V`C `xAf`V`C `rAf`V`C `lAf`V`C `fAf`V`C ``Af`V`C `ZAf`V`C `TAf`V`C `NAf`V`C `HAf`V`C `BAf`V`C `<Af`V`C `6Af`V`C `0Af`V`C `*Af`V`C `$Af`V`C `Af`V`C `Af`V`C `Af`V`C ` Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `|Af`V`C `vAf`V`C `pAf`V`C `jAf`V`C `dAf`V`C `^Af`V`C `XAf`V`C `RAf`V`C `LAf`V`C `FAf`V`C `@Af`V`C `:Af`V`C `4Af`V`C `.Af`V`C `(Af`V`C `"Af`V`C `Af`V`C `Af`V`C `Af`V`C ` Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `zAf`V`C `tAf`V`C `nAf`V`C `hAf`V`C `bAf`V`C `\Af`V`C `VAf`V`C `PAf`V`C `JAf`V`C `DAf`V`C `>Af`V`C `8Af`V`C `2Af`V`C `,Af`V`C `&Af`V`C ` Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `~Af`V`C `xAf`V`C `rAf`V`C `lAf`V`C `fAf`V`C ``Af`V`C `ZAf`V`C `TAf`V`C `NAf`V`C `HAf`V`C `BAf`V`C `<Af`V`C `6Af`V`C `0Af`V`C `*Af`V`C `$Af`V`C `Af`V`C `Af`V`C `Af`V`C ` Af`V`C `Af`V`C `p` ` \ `̶ \p[Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``Afз ``p pS%S Af`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `AAf`V`C `A@pAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `AAf `A@p` `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A `A@p@-` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `@S(pS Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `Af`V`C `pAf `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `Af `p@@p(``@\@P3P#F\@p@-Kq^\@@0@-G Q 0@@- _ 0@@- 0@@ O@-  Q ܥ0@@ 0@@@-P\1 @P`@-P@-hPO"q @"TO2k @2Ok @(Om @ @-0@ BP@-0@ABPڣH-地@@Q   0@@ C- 0@P`p@Q@-@  @T7RO-UXpXpXpXp XpXp+X pVX pX pVX p+X p`g 0 0 X@-OO1PPT 0@Pk f "fXPXT!\XPX_- `  ` ?@-B@?dQ Pd` dd``N ('+@ P#u,0 PbW* P]P RV]<0Sb<W0SPT?@-@?- @P:Q/@ Q/@Q.@ Q.@ Q- @ Q- @ Q, @P: Q, @ Q+ @ Q+ @ Q* @ Q* @ Q) @ Q) @Q(@ P: Q(@Q'@ Q'@Q&@ Q&@Q%@ Q%@Q$@ Q$@Q#@ Q#@Q"@ Q"@Q!@ Q!@Q @Q @@-00 0@O@0P@0Sprites !e F$Ěfile_cb6,, wwwwwwwwwwwwwwwwwwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwC{ww4wwww~wwwwwwwwCyww4wwwwzwwwwwwwwww"rwrw"""w'w'w'"wwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfile_001,, wwwwwwwwwwwwwwwwwwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwC{ww4wwww~wwwwwwwwCyww4wwwwzwwwwwwwwww"rwrw"""w'w'w'"wwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfile_cc5,, wwwwwwwwwwwwwwwwwwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwC{ww4wwww~wwwwwwwwCyww4wwwwzwwwwwwwwww"rwrw"""w'w'w'"wwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwfile_000,, wwwwwwwwwwwwwwwwwwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwC{ww4wwww~wwwwwwwwCyww4wwwwzwwwwwwwwww"rwrw"""w'w'w'"wwCCCCCCCCCCCCCCww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwCwwwww4wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwSprites22\ !v\ F` file_cb6!,,wwwwwwwwwwwwwwwwwGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwww{wwwwwwpGt{pGtwwww~wwwwwwpGtwwww~wwwwwwpGtypGtwwwwywwwwwwpGtwwwwzwwwwwwpGtzpGtwwww}wwwwwwpGtwwww}wwwwwwpGp'p'"''r"""""'rr"'"r'"r"''"""rr"'rr"rGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGp'pwwwwwwwwwwwwwwwwwfile_001!,,wwwwwwwwwwwwwwwwwGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwww{wwwwwwpGt{pGtwwww~wwwwwwpGtwwww~wwwwwwpGtypGtwwwwywwwwwwpGtwwwwzwwwwwwpGtzpGtwwww}wwwwwwpGtwwww}wwwwwwpGp'p'"''r"""""'rr"'"r'"r"''"""rr"'rr"rGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGp'pwwwwwwwwwwwwwwwwwfile_cc5!,,wwwwwwwwwwwwwwwwwGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwww{wwwwwwpGt{pGtwwww~wwwwwwpGtwwww~wwwwwwpGtypGtwwwwywwwwwwpGtwwwwzwwwwwwpGtzpGtwwww}wwwwwwpGtwwww}wwwwwwpGp'p'"''r"""""'rr"'"r'"r"''"""rr"'rr"rGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGp'pwwwwwwwwwwwwwwwwwfile_000!,,wwwwwwwwwwwwwwwwwGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwww{wwwwwwpGt{pGtwwww~wwwwwwpGtwwww~wwwwwwpGtypGtwwwwywwwwwwpGtwwwwzwwwwwwpGtzpGtwwww}wwwwwwpGtwwww}wwwwwwpGp'p'"''r"""""'rr"'"r'"r"''"""rr"'rr"rGDDDDDDDDDDDDDDDrGDDDDDDDDDDDDDD$pGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGtwwwpGtwwwwwwwwwwwwwpGtwwwwwwwwwwwwwpGp'pwwwwwwwwwwwwwwwwwTracker^K"; ^GZCode""xMGHFQTMLxx)023568:;GHIMUXTrackerModuletoFabrice Mercier  h 0 h 0MUSX-2 0  2 2q22q2 2q 2q-0 h 2s2222-2 22 2Module\""@8$\GHF@0,:2@TrackerModuleTrackerModule 4.09 (24 Feb 1993) [dev] (Mercier, Fiennes & Farrow)@-'Q @-# e@hc  0@@@-- AAPlayMod"PlayPause  PlayPoshz PlayStatus  u PlaySamples@ PlaySpeed lPlayStereoGS PlayStartPn , PlayStop PlayVolumeE*PlaySpeed will change the sample playback rate and therefore vary the approximate amount of CPU time taken up by the playroutine. Currently, the four options are: 0 - normal sample rate 1 - half sample rate 2 - normal sample rate (with VIDC enhancer) 3 - half sample rate (with VIDC enhancer) 4 - normal sample rate (with VGA modes) 5 - half sample rate (with VGA modes) If option 1, 3 or 5 is selected, the sample quality is reduced, but 8 channel tunes will take up only a little more time than 4 channel tunes originally. *PlaySpeed with no parameters will print the current speed setting. Syntax: *PlaySpeed [<0|1|2|3|4|5>]Syntax: *PlaySpeed [<0|1|2|3|4|5>]*PlayVolume changes the overall loudness of any [sound]tracker tunes playing. The scale is logarithmic and goes from 0 (silent) to 127 (full volume). *PlayVolume with no parameters displays the current volume. Syntax: *PlayVolume [<0-127>]_-,NPEEHP>Current sample speed = M M _-Q 0Q#JQ! PM XLla  , @-  @-#O__ 2Speed not implemented@-Q@(2Module already lockedQ 2TrackerModule in use@-l!Q@2Unlock failedPठ[ 0p]M^{3s"o![Unknown TrackerModule operationTrackerVersionLoadMemoryLoadPlayStopPauseStereoSetPosReadPosPlayNoteTuneInfoSoundInfoReadSampleTableLockUnlockMuteChannelRestoreChannelSpeedVolumeWriteSampleTableTranslateVolumeUpdateDataWorkspacePtrRepeatStateSequenceDecodeNotePatternInfoReadStateWriteState: A:LO @@-X@PAHP@8P 0P0   RJ0S 2Action not implemented*PlaySamples will list all the current samples. Syntax: *PlaySamples*Playstereo controls the stereo settings while old format soundtracker modules are playing, and will switch between five possible settings to cater for most configurations: 0 - Slightly off-centre left and right (normal) 1 - Fully left and right (amiga-style) 2 - Fully left 3 - Fully right 4 - Don't alter stereo settings *PlayStereo with no parameters returns the current state. Syntax: *PlayStereo [<0|1|2|3|4>]*PlayStatus will print information on the current tune. Syntax: *Playstatus*PlayPause will pause the currently playing tune until a *PlayStart command is issued. Syntax: *PlayPause*PlayStart will resume playing a tune after a *PlayPause command. Syntax: *PlayStartpG*PlayStop will stop and kill the currently playing tune, freeing the memory used to store the tune. Syntax: *PlayStop*PlayPos will set the current position in the sequence table, or if no parameter is used, simply return the current position. Syntax: *PlayPos [<0-127>]*PlayMod loads into memory and starts to play the specified Tracker or Soundtracker module, determining automatically which format it is. Syntax: *PlayMod _- PU_No. Sample name Length Volume -- ---------------------- ------ ------ p 2hPSp@--  Q O  - ) S-  ̠ZH:   2No tune loaded- @-P,OP P_ OQZ O$O @A: O @_-P   RP` A:O @ OO @_-P ?, RA:O @ Od,O @_-4P$t p?, R2Sequence position out of rangeA:O @@-D&R@XO @h0< PtO@   QS<$ ,fh_-%RO_Q _OlO @_-  ! ̌@@RO_00 0x<>\0 <Current sequence position : 7-q  Highest sequence number : c @-  B OO @@-@cZA:O @_- \,@A:O @_-jP x_0 z_2No room for module  +0z_tracker 36soundtracker [Blank] Channels : _-TrackerModule version 4.09 (24 Feb 1993) [dev]P  No tune playing currently訲 ̌[ Tune name : [ B  Q OP ([OJOp  instrument format)[  Author : aBQO Tune length : _O  patterns 0OoO Module length : sO  bytes Type *PlaySamples for the list of samples currently loaded. @- P R4@P\  4*  C  e_hc8`@-d @  RTINFMVOXSTERMLENPLENSEQUPNUMPATTSAMPMNAMANAMMUSX@- ̌L@ X@ d@ p@``L@ `Vʔ@-$p04PZPPpW A<Ǐ AA:<O @_-L[O @_PB?J̌@P9$RA6R3SK0SB-J1Q*Q'P@p|qP\Pp{r⠀- B OPp/ 8 @LQ__2Channel number out of range2Sample number out of range2Note number out of range@2Volume out of range_̐⇒V P hPUPhPUP@TJ`lA@@D⁃*(SZ`0C0Rf TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P \0C0` TXC P6 TXC P0 TXC P* TXC P$ TXC P TXC P TXC P TXC P  TXC P TXC P TXC P TXC P TXC P TXC P TXC P TXC P \0C0`@-GIO0:@  R@  R@- RuEvRuDr PG-p P*P$ `@@R   V `F@{G-Pp0 2Q'pQ01 TJO~pTpԇ@pATJ0S0pQ;O0 #(7;n00@OLD0S000O00O0@-$O @6@@@  > @ ̌0D 00S001010 @0DP ̌1̌ 1 P-$R00P𠁔0O;C1S0P@@aL Ta T@T@@ @TT@CT@DT@ @1P-"OO> @@-* !h@+?OO> @ @-* ! h0* ! h0c @p OQC Z pOB* @BC@-$O%AQA:pO? @_-P PO* @Ud O%,B pDOB+ @BKJpTO+ @GQO+ @CQO+ @? O%,B0RBp A: O @pAPH-3‱HO. @Pl ȰOKh@-hOA@-Current stereo state = 8O1A Q AOO @_-0QJQ P ⁱO/ @P9 OK5p__-/ OPP6 xY'O$,OJOH iPPUPCBYSyntax: *PlayStereo <0|1|2|3|4>@-O'L(@@@xTDD@O A0 PU0 R00    Z@@@M.K.[@O[E аOK@K0S -ZO1J( p*@T[R@P TQ @Q[DO␰[#l ⎱ 04Hdt@-@- 0@@@0S@@@0S@@@0S@@@0S@@@0S@@@0S0HXdlt|}umeYI1_-@(PO4O`&&( R^&J@@<ST #4T @T @ @0`&&( RF&J@@<ST #4T @T @ @0`&&( R.&J@@<ST #4T @T @ @0`&&( R&J@@<ST #4T @T @ @0XqOOR  R@Q@ R ! R  R  R  10/.-,+*)('&%$#"!     R-O6L\|O.L0O6ACDHIOTegmnXenakis16DeXedream ProductionsXenakis16¬ì h  h000 Ĭʬ uʬuuʬuɬʬrȬss ˬ sʬ00ˬ  ` 0Ƭʬ00ˬ  ` 0Ƭ  ` 0Ƭ ʬModule#& myk#F+y  (0 x4l     l _-OO R 0PP@@@P0Sl_-,$R@ T'R #System sprite operation invalid whilst Xenakis in useayNo song module loadedt Invalid info requestctiXenakis16-bit Player v0.9xXenakis Player 1.00 (04 Apr 1995) 16 Bit version Deedream productionsitsDXenStopPlayOnOffFxSkipChannelZeroMusicVolumeKillTrackLoadTrackGotoGetSongInfoPauseBitsSupportnot a known Xenakis swiC  [4OC- `\|X\L ` X,P(P @-@-PCsO5SCP P) P 褟ZC QQC ᘠ$XP@ClddDlD @0C@aC 4DC PCCᾺCSWI PLAY IS HERE!0cVϯOC `V`p`@-cs@  00(E$ 000000000@3Q83Q$@-P` < LOHOT%H5 Q@-P`PpOO  ;@-dO= @-aV` a@-0aV`@aAPRR"pCP𠡼AA$T H(A@D3`p \ @-B@-d!R!R D!4QCPCa R0aCh aa0@CCPP C6     2 02 R0( @@QU@@ ! !!!#Can't load a module while playing oneinNot a 16-bit 4 or 8-channel trackfileacCannot play song with this module mCan't load fileNot that many sequence positionssit 0 PCDO PQ@-poo  #!@@-X`O@ O0FFRAF E@-!E`O@pO@`p AA$T H(\ @U@PPRPe +%T!?^X-@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G@@8"$ؠЃ@8"] Ж ؠMؠP+(T*Y88G$ؠЃ] Ж ؠMؠp.(t,Y88G誥 ዲ+Š Ƞ.ȌQ @Ŀ~|{yxvutrqonmljihgfecba`_^]\[ZYXWVUUTSRQPOONMLKKJIHHGFEEDCCBAA@??>==<;;::98877655443322110//..--,,++**)))((''&&%%$$$##""!!!  P!@-ȼ C A # !@-Dh <0 ; P< <@- =,_-Ȱ0Ɵ R   P# *@@@@@@@@LLtpAU_ 5P0"$a  6P0"$a P d6P0"$a  6P0"$a  7P0"$a   T7P0"$a @ 7P0"$a  7P0"$a LK       @@   `@@@@@@ @ pW@pP倅! , ;8:08% R 40$0DL    (:  %=T  @ L , B000 8  P   (4PXlt|8 94L 0      0L <0C ppI$ D0     ! 000 0$0!@T0 N,"$X("($",0 ,"$("($",S 0 l,"$ 8 < S#$X( x t!PP"PP 1 QDf QPBPL%SL@DACQP8BPL%SL@DQP$"Q$$ BPL%SL@UTPQDP%P"U%% CPL%S@U08LTPQD&"Q&& pCPL%S@LUTPQDUTUPSPL%S@@@EDPL%SL@DQ@P@DP@DPDPL%SP`H00C@`X%XG@AT @EAD@hhG`@`@#@#"7g Jhn7 4 t # oJ3*/DiF?g T"_$&(@+-0p369+=@DHMQV[aflysWzR|#MM3:"G4FZng\uI%Eh767gʛ Johln7q' 8 4 = t ># Sprites cxF,&file_365,, wwwwwwwwwwwwwwwwwG4#""2CtG4#""2CtG4#""2CtG4#"14"2CtG4#""2CtG4("42CtG48"(!4(C3CtGA(8Cx30 "(8tGD3(14@1((CtG8#"!D"DtG4#"4"2CtG4#"C!"2CtG4#""2CtG4#""2Ctwwwwwwwwwwwwwwwwwsmall_365,,wwwwwwwwwDD47""sDD47" "sDD47"8"sDD478 8"sDD47((sDD47"08#sDD47"1"sDD4wwwwwwwwwDDTfile_31b wwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwww"""!"""""ww##""!"!"#ww#"2""!!ww"!"2"""ww"!""Sf5"""!!ww"""!Sf5""!"!ww"!"!"#!"!"ww$!""멏#!"!2wwD$"!"("BDwwDDD$"!ODDDwwEEEEEEEEEEEEEEEwwUUUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwsmall_31b wwwwwwUUUUUU333333DDUUwwwwwwww'!!!!!'" "7QW27313GCCOCCGDDDDDDDwwwwwwwwSprites22d fx)d F&h file_365,, wwwwwwwwwwwwwwwwwG4#""2CtG4#""2CtG4#""2CtG4#"14"2CtG4#""2CtG4("42CtG48"(!4(C3CtGA(8Cx30 "(8tGD3(14@1((CtG8#"!D"DtG4#"4"2CtG4#"C!"2CtG4#""2CtG4#""2Ctwwwwwwwwwwwwwwwwwsmall_365,,wwwwwwwwwDD47""sDD47" "sDD47"8"sDD478 8"sDD47((sDD47"08#sDD47"1"sDD4wwwwwwwwwDDfile_31b!TwwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww!!!!!!!!!!!!!!!wwww""""""""""""ww"""!"""""ww"""""!"""ww##""!"!"#ww2"""""2ww#"2""!!ww"""!""!"1ww"!"2"""ww"!"!""!!"!ww"!""Sf5"""!!ww"""!dfF""""""ww"""!Sf5""!"!ww"!"8"""!ww"!"!"#!"!"ww""("""Bww$!""멏#!"!2wwC!""""!"CwwD$"!"("BDwwDD$"""랩BDDwwDDD$"!ODDDwwTTTTT$"YTTTTTwwEEEEEEEEEEEEEEEwwTTTTTTTTTTTTTTTwwUUUUUUUUUUUUUUUwwUUUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDsmall_31bxwwwwwwUUUUUU333333DDUUwwwwwwww"+'+""'!""!!!.!'2/!'""Af"""'"!""7!"(""7"2GD""(DGDD$IDDGDDDDDDDWUUUUUUUwwwwwwwwXenakis8NDK"< NDG ZCodeD,!'DGէ QTMLxd##$$/0666:>ACDHIOTegmnXenakis8DeXedream ProductionsXenakis8¬ì h  h000 Ĭʬ uʬuuʬuɬʬrȬss ˬ sʬ00ˬ  ` 0Ƭʬ00ˬ  ` 0Ƭ  ` 0Ƭ ʬModule0 B$0FT.t`| `4d*h'x+)*d'd _-OXO R 0PP@@@P0S_-($Ro 'R  System sprite operation invalid whilst Xenakis in useleNo song module loaded]XInvalid info requestcesXenakis8-bit Player v0.9otXenakis Player 1.00 (04 Apr 1995) 8 Bit version Deedream productionsDXenStopPlayOnOffFxSkipChannelZeroMusicVolumeKillTrackLoadTrackGotoGetSongInfoPauseBitsSupport) ]not a known Xenakis swiC  [4OC- P4lT 0,P(P @-9 @- PCrOÀ5SCP P) P TZC QQC ᘠ$XP@CldDD @0C@aC 4C PCCᾺCSWI PLAY IS HERE!pos# Sprites cxF,&file_365,, wwwwwwwwwwwwwwwwwG4#""2CtG4#""2CtG4#""2CtG4#"14"2CtG4#""2CtG4("42CtG48"(!4(C3CtGA(8Cx30 "(8tGD3(14@1((CtG8#"!D"DtG4#"4"2CtG4#"C!"2CtG4#""2CtG4#""2Ctwwwwwwwwwwwwwwwwwsmall_365,,wwwwwwwwwDD47""sDD47" "sDD47"8"sDD478 8"sDD47((sDD47"08#sDD47"1"sDD4wwwwwwwwwDDTfile_31b wwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwww"""!"""""ww##""!"!"#ww#"2""!!ww"!"2"""ww"!""Sf5"""!!ww"""!Sf5""!"!ww"!"!"#!"!"ww$!""멏#!"!2wwD$"!"("BDwwDDD$"!ODDDwwEEEEEEEEEEEEEEEwwUUUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwsmall_31b wwwwwwUUUUUU333333DDUUwwwwwwww'!!!!!'" "7QW27313GCCOCCGDDDDDDDwwwwwwwwSprites22d fx)d F&h file_365,, wwwwwwwwwwwwwwwwwG4#""2CtG4#""2CtG4#""2CtG4#"14"2CtG4#""2CtG4("42CtG48"(!4(C3CtGA(8Cx30 "(8tGD3(14@1((CtG8#"!D"DtG4#"4"2CtG4#"C!"2CtG4#""2CtG4#""2Ctwwwwwwwwwwwwwwwwwsmall_365,,wwwwwwwwwDD47""sDD47" "sDD47"8"sDD478 8"sDD47((sDD47"08#sDD47"1"sDD4wwwwwwwwwDDfile_31b!TwwwwwwUUUUUU333333DDUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww!!!!!!!!!!!!!!!wwww""""""""""""ww"""!"""""ww"""""!"""ww##""!"!"#ww2"""""2ww#"2""!!ww"""!""!"1ww"!"2"""ww"!"!""!!"!ww"!""Sf5"""!!ww"""!dfF""""""ww"""!Sf5""!"!ww"!"8"""!ww"!"!"#!"!"ww""("""Bww$!""멏#!"!2wwC!""""!"CwwD$"!"("BDwwDD$"""랩BDDwwDDD$"!ODDDwwTTTTT$"YTTTTTwwEEEEEEEEEEEEEEEwwTTTTTTTTTTTTTTTwwUUUUUUUUUUUUUUUwwUUUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwDsmall_31bxwwwwwwUUUUUU333333DDUUwwwwwwww"+'+""'!""!!!.!'2/!'""Af"""'"!""7!"(""7"2GD""(DGDD$IDDGDDDDDDDWUUUUUUUwwwwwwwwQTMPlayer:K" r:G|Z4 QTMPlay layer manager version 0.25.34 Compiled on Tue,11 Feb 1997.01:36:49 QTMPlayerQTMPlayer 0.25 (11 Feb 1997) Chris RutterQTMPlayerRecogniseLoadUnloadPauseRestartStopPositionSampleVolumeQualitySoundSystemSongInfoInfoLayerClearO-;p?h 0 @$<{O-p -뀏[ 0h2Ww QTMPlayer has received a bad SWI requestC-8j0  " 0*p`P@ 1jg0P@p755@  uj0 { pP60  8ej0Pp7  \juC-qKjp  R  2H K 1 q :j E7j_-@( hd t:-  e_<e"j jkj10ˣ "0_-@( \d t:- k_ jjp jx C04C C-{_-@( hd t:-  e_<ex C0C-{x C0C-{_-@( `d t:-  e_<ex C0C-{_-@( dd t:-  e_<ex C0C-{p _-@( Ld t:- uk_xC_-@( Dd t:- `k__-@( Hd t:- Lk_  xCC-pw6 PcPc_-@( 8d t:-  e_<ex C0C-0 pw 0_-@(