Home » Archimedes archive » Acorn User » AU 1998-05 B.adf » PRMs » MiscSWIs

MiscSWIs

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn User » AU 1998-05 B.adf » PRMs
Filename: MiscSWIs
Read OK:
File size: 21B94 bytes
Load address: 0000
Exec address: 0000
File contents
HELP(�����,���@
$DIR$H
H
t
G����(GԄ3!Pre�
H����Ln'�!root�H���?��+,ABI_DH������+,ArcFSMemMan_@H�����+tArcFS_�H������+PARCTOOLS_H���ײ�+pAudioManager_t"H���̳�+,AWRender_d#H���3��+,Borders_�#H������+,CAIFS_�$H�����+,ColourExtend_h%H���{��+�CompressJPEG_�.G����_}�ECreateHelp�6H������+,Creator_�7H���+��+,Diss_�8H������+,DitherExtend_�;H���i��+,DocumentManager_P<H���幀+,DragAnObject_�<H���c��+$DSym_<bH����À+,Dynamite_dcH���Ā+,Euclid_pdH����Ā+,FileBuffer_@eH���Sŀ+�Filer_}E������Filter�H����ɀ+,FontDraw_(�H���ʀ+,FrontEnd_��H���Xʀ+pGdbm_�H����̀+,GDraw_ȍH���̀+,GSpriteExtend_x�H���m̀+,Hyphenator_p�H����̀+,ImageExtend_��H���΀+,Impulse_T�H���O΀+,Interface_\�H����΀+,IZipFS_��H����΀+�LineEditor_l�H���Sр+,LZWB_�H����р+PLZWD_,�H���3Ҁ+�LZW_0�H���%Ӏ+,MakeGIF_ȪH���UӀ+,MoDel_x�H����Ӏ+,NetMonitor_8�H����Ӏ+,NH_��H���Ԁ+,OLE_$�H���:Ԁ+,PocketFS_X�H���yԀ+,PocketLink_̰H����Ԁ+,PPADriver_p�H���
Հ+tQTM_TH���Gڀ+�ReadMail_H���Kۀ+,ROMCache_�H����ۀ+�SparkFS_ /H����܀+,Spch_�/H����܀+,Spell_�1H���݀+,StreamSquash_�2H���O݀+�Stream_tCH���M߀+�Tracker_�H���L�+Users_X�H���_�+,VProtect_ģH�����+,WimpHack_H�H�����+,WimpKey_ؤH���!�+,ABCLib_h�H���T�+Director_(�H�����+,EasyFS_��H�����+,HelixBasic_$�H���{�+,LargerSupport_h�H����+,PCDevHelp_D�H���Z�+,PCIO_<�H�����+,PCMem_аH�����+PCSupport_ܰH���-�+,Translator_0�H���k�+,ZapJRF_زH�����+,ZapRedraw_`�G�����E!rootold��H����+�about��H�����+�AppEngine_�
H���C�+�Speak_DATA�@-� ��XR���� ��!R� �xR �2R �6R��0��@������!��a��h������@ ��8��a�q���!x26DATA�Miscellaneous SWIs
#Parent StrongHelp:!Menu
#Postfix _
#Table Columns 4
<ABI>
<ABCLib>
<AEH=>AEHModule:!Root>
<AppEngine>
<ArcFS>
<ArcFSMemMan>
<ARCTOOLS>
<AudioManager>
<AWRender>
<Borders>
<CAIFS>
<ColourExtend>
<CompressJPEG>
<Creator>
<Director>
<Diss>
<DitherExtend>
<DocumentManager>
<DragAnObject>
<DSym>
<Dynamite>
<EasyFS>
<Euclid>
<FileBuffer>
<FontDraw>
<FrontEnd>
<GDBM>
<GDraw>
<GSpriteExtend>
<HelixBasic>
<Hyphenator>
<ImageExtend>
<Impulse>
<Interface>
<IZipFS>
<LargerSupport>
<LineEditor>
<LZW>
<LZWB>
<LZWD>
<MakeGIF>
<MoDel>
<NetMonitor>
<NH>
<OLE>
<PCIO>
<PCMem>
PCSupport
<PCDevHelp>
<PocketFS>
<PocketLink>
<PPADriver>
<ProFiler=>Filer_>
<QTM>
<ReadMail>
<ROMCache>
<SparkFS>
<Spch>
<Speak>
<Spell>
<Stream>
<StreamSquash>
<Translator>
<Tracker>
<Users>
<VProtect>
<WimpExt=>WimpExt:!Root>
<WimpHack>
<WimpKey>
<ZapJRF>
<ZapRedraw>
#EndTable
#Line
#align centre
{/}<Miscellaneous SWIs manual=>about>, v1.02{/}
DIR$,,�F�����qm!RootDATAmABI
#Parent !Root
#Prefix ABI_
#Table Columns 1
Initialise
CloseDown
RenderSlab
Reset
Kill
#EndTable
DIR$,,pF����хM�!RootDATA�ArcFSMemMan
#Parent !Root
#Prefix ArcFSMemMan_
#Table Columns 2
ClaimWorkspace
ResizeWorkspace
ReleaseWorkspace
ClaimFileCache
ResizeFileCache
ReleaseFileCache
Init
Final
Slide
LookupBlock
#EndTable
DIR$tt�F����G���!RootlF����Q��ArchiveInfopF���h���StatusF���;����OpenArchive�F���a����CloseArchive8F����ԋ�Encryption<F���x���Compression�F������]compresstypes\F���l"���CreateArchiveF���^5���CompactDATA�ArcFS
#Parent !Root
#Prefix ArcFS_
#Table Columns 2
<ArchiveInfo>
<Status>
<OpenArchive>
<CloseArchive>
<Encryption>
<Compression>
<CreateArchive>
<Compact>
ReadOptions
HourglassOn
HourglassOff
SetEncryption
SetCompression
AutoCompOn
AutoCompOff
ArcInfo
OpenArc
CloseArc
CreateArc
CompactArc
ObjectInfo
ReadBufferSizes
SetRDBSize
SetRABSize
SetHeaderGaps
NamedArcInfo
GetArcName
ReadCompressed
WriteCompressed
EnsureGaps
#EndTable
DATAArcFS_ArchiveInfo  (&437C0)
#Parent ArcFS_
=>	R0 =	archive number
<=	R0 =	archive name (or null if not open)
	R1 =	archive path
	R1 =	pointer to archive headers (internal use)

This SWI gives the name and pathname of the archive whose number is given.
DATA�ArcFS_Status  (&437C1)
#Parent ArcFS_
<=	R0 =	status in form &vvbbffee

This SWI returns the current status of ArcFS.

#Tab
byte	meaning
#Line
vv	FF for read/write, 00 for read only
bb	number of bits for crunch / compress (0 otherwise)
ff	<compression format=>ArcFS_compresstypes>
ee	<bits=>.bits>
#subpage bits
ArcFS_Status bits
bit	meaning if set
#Line
0	files will be garbled
1-7	reserved.DATA�ArcFS_OpenArchive  (&437C2)
#Parent ArcFS_
<=	R0 =	pointer to filename
	R1 =	pointer to reference name

This SWI opens an archive.DATA�ArcFS_CloseArchive  (&437C3)
#Parent ArcFS_
<=	R0 =	pointer to reference name

This SWI closes an archive, returning an error if no archive with that name was open.DATAArcFS_Encryption  (&437C4)
#Parent ArcFS_
<=	R0 =	<encryption method=>.types>
	R1 =	pointer to password (up to 32 bytes)

This SWI sets the encryption method and password used.
#Subpage types
Encryption types
value	meaning
0	no encryption
1	garbled
DATA�ArcFS_Compression  (&437C5)
#Parent ArcFS_
<=	R0 =	<compression format=>ArcFS_compresstypes>
	R1 =	number of bits (if applicable)

This SWI sets the data compression format to be used.DATA]ArcFS Compression formats
code	type
#Line
&82	Store
&83	Pack
&88	Crunch
&FF	Compress
DATA�ArcFS_CreateArchive  (&437C6)
#Parent ArcFS_
<=	R0 =	pathname for new archive

This SWI creates (but does not open) a new archive.

Note: Read/Write version only.DATA�ArcFS_Compact  (&437C7)
#Parent ArcFS_
<=	R0 =	archive name (or 0 for CSD)

This SWI compacts an archive to removed gaps left by deletions and file overwrites.

Note: Read/Write version only.DIR$PP G���tW!RootxG�����AssembleDATAWARCTOOLS
#Parent !Root
#Prefix ARCTOOLS_
#Table Columns 2
<Assemble>
#EndTable
DATA�ARCTOOLS_Assemble  (&DFFC0)
#Parent ARCTOOLS_
=>	R0 =	pointer to string to assemble
	R1 =	address where the instruction will be put

<=	R0 =	assembled instruction
	R1 =	length of string in R0 at start

This call is provided to assemble a instruction contained in the string pointed to by R0. The address in R1 is used to calculate the destination address in PC relative opcodes like ADR or B.
DIR$pp|F���
�Nt!Root�F���Nn�NAddEvent�F���73��}eventsDATAtAudioManager
#Parent !Root
#Prefix AudioManager_
#Table Columns 2
Info
Reset
ListDrivers
Defaults
Driver
SelectSampler
SamplerStatus
StartSampling
StopSampling
DeselectSampler
PlaySample
FillBuffer
ReturnCursor
KillSample
AdjustPlay
ConvertPitch
Stereo
AttachVoice
SoundPacked
Sound
ReadCCB
WriteCCB
PlaySampleFromFile
QueueEvent
<AddEvent>
RedirectVIDC
#EndTable
DATAAudioManager_AddEvent
#Parent !Root
=>	R0 = <event number=>AudioManager_events>
	R1 = Audioworks file
	R2 = 1 to cache in RMA

This SWI adds a sample to a particular desktop event; this means that whenever the event occurs the sample will be played.DATA}Event numbers
Number	Event
#Line
1	Application save file
3	Application load file
5	Filer double-click file
9	Palette change
10	Desktop save
-4	System beep
-7	Fatal wimp error
-8	Wimp error
-9	Keypress: Space
-10	Keypress: Return
-11	Keypress: Other
&400C1	Mode change
&400C2	Task starting
&400C3	Task quitting
&400CA	Iconise window
&FF000001	Media not present
&FF000002	Media not known
&FF000004	Media search end
&FFFF0006	Delete file
&FFFF0008	Create directory
&FFFF0101	Create a file
&FFFF0103	Close a file
&FFFF0105	Rename file
&FFFFFF02	Window moving
&FFFFFF03	Window closing
&FFFFFF07	Drag finished
&FFFFFF09	Menu selection
DIR$,,�"F����I��!RootDATA�AWRender
#Parent !Root
#Prefix AWRender_
#Table Columns 2
FileInitAddress
RenderAddress
DocBounds
SendDefs
ClaimVectors
ReleaseVectors
FindFirstFont
FindNextFont
MemoryNeeded
#EndTable
DIR$,,�#F���|��Y!RootDATAYBorders
#Parent !Root
#Prefix Borders_
TaskStart
TaskQuit
PlotFancyBorders
Poll0
DIR$,,$F����f��!RootDATA�CAIFS
#Parent !Root
#Prefix CAIFS_
#Table Columns 2
CreateArchive
CompactFreeSpace
CloseGaps
FreeSpace
DirSize
CompactionType
LZWBits
CacheFile
ScrapFile
DirCache
ReadFileInfo
FixRMA
#EndTable
DIR$,,%F���f��V!RootDATAVColourExtend
#Parent !Root
#Prefix ColourExtend_
Info
Control
InvalidateCache
DIR$���%G���q��q!Rootl&H���X��(Finish�'H������3Start�,G�������WriteLineDATAqCompressJPEG
#Parent !Root
#Prefix CompressJPEG_
#Table Columns 3
<Finish>
<Start>
<WriteLine>
#EndTable
DATA(CompressJPEG_Finish  (&4A502)
#Parent CompressJPEG_
=>	R0 =	JPEG tag
<=	R0 =	size of JPEG image within the buffer

This call finishes the JPEG compression process, returning the size of the complete image.  Any workspace claimed by the CompressJPEG module for the compression is released.DATA3CompressJPEG_Start  (&4A500)
#Parent CompressJPEG_
=>	R0 =	pointer to buffer for JPEG data
	R1 =	size of JPEG data buffer
	R2 =	pointer to block of <parameters=>.parameters>
	R3 =	pointer to workspace area, or 0 for the CompressJPEG module to allocate its own workspace from the RMA
	R4 =	size of workspace area (if R3 is not 0)
<=	R0 =	JPEG tag, to be passed to other CompressJPEG SWIs

This call starts the JPEG compression process, setting up various parameters for it.

The buffer for the JPEG data should be as large as possible, since the JPEG compression routines cannot guarantee to compress the image by a fixed amount.

If you wish to supply your own workspace area, its required size for a colour (24 bit) image is:
	20000 + ((image width rounded up to a multiple of 16) � 30)
and its required size for a greyscale (8 bit) image is:
	20000 + ((image width rounded up to a multiple of 16) � 9)

An error is returned if the workspace area becomes full.
#Subpage parameters
Compress JPEG parameter block
Offset	Contents
#Line
0	width of image in pixels
4	height of image in pixels
8	quality value (0 - 100): lower quality results in smaller image
12	number if 8 bit components in source: 3 => 24 bit colour, 1 => 8 bit greyscale
16	horizontal DPI of image, or 0 if unknown
20	vertical DPI of image, or 0 if unknown
DATA�CompressJPEG_WriteLine  (&4A501)
#Parent CompressJPEG_
=>	R0 =	JPEG tag
 	R1 =	pointer to a row of pixels:
 	 	 	For colour: a buffer of continuous RGB values - ie a byte stream of the format R, G, B, R, G, B...
 	 	 	For greyscale: a buffer of continuous 8 bit grey values
<= 	R0, R1 preserved

This call compresses one row of source pixels into the JPEG buffer.  It should be called once for each row of the source data.  An error is returned if the JPEG buffer becomes full.DATAE

&� Newer version than in StrongHelp
� � � � 0,�$+" at line "+Þ
2sh$="ADFS::Gerph.$.Apps.WProcess.!Manuals.SWI"
(� mem% 256
2!scraproot$="Scrap:StrongFile"
<o%=�("Scrap:NewAdded")
F �#o%,"Newly added SWI calls"
P�#o%,"#Parent !Root"
Z�#o%,"#Postfix _"
d�#o%,"#Table Columns 3"
nco%=0:coas$=""
xlast$=""
��I=&200�&100000 � 64
�  � (I � &20000)>0 �I+=&20000
� swi%=I
� �
�6  ș "XOS_SWINumberToString",swi%,mem%,256 � ,,len
�   mem%?(len-1)=13:swi$=$mem%
�B  � �swi$,"Undefined")>0 � swi$="User" � swi$="NULL" � swi$=""
�#  � �swi$,�(swi%-I))>0 �swi$=""
�  � swi$<>"" �
�   �swifound(swi%,swi$)
�  �
�
  swi%+=1
� � swi%=I+64 � swi$=""
�
� co%<>0 �
 �#co%,"#EndTable"
"
 �#co%
,6 �("Copy "+scraproot$+" "+sh$+"."+coas$+" D~C~VF")
6�
@�#o%,"#EndTable"
J�#o%
T4�("Copy Scrap:NewAdded "+sh$+".NewAdded D~C~VF")
^�
h:
r��swifound(swi%,c$)
|mod$=�c$,�c$,"_"))
�call$=�c$,�c$,"_")+1)
�ft=�filetype(sh$+"."+mod$)
�
� ft=-2 �
� � co%<>0 �
�  �#co%,"#EndTable":�#co%
�6  �("Copy "+scraproot$+" "+sh$+"."+coas$+" D~C~V")
�  co%=0
� �
� �("CDir "+sh$+"."+mod$)
� �#o%,"<"+�mod$)+">"
� coas$=mod$+".!Root"
� co%=�(scraproot$)
� �#co%,�mod$)
 �#co%,"#Parent !Root"
 �#co%,"#Prefix "+mod$
 �#co%,"#Table Columns 2"
& last$=mod$
0�
:,� last$=mod$ ��#co%,call$:�mod$,call$,ft
D�
N:
X(�  >>>>> Stolen from JFShared <<<<<<
b:
l7� ******** File information routines **************
v:
�1� FNfiletype : Return the file type of a file
�2� -2=not found, -1=untyped, &1000=dir or image
�"� �filetype(f$):� f%,type%,fl%
�+ș "XOS_File",20,f$ � type%,,,,,,f%;fl%
�Ȏ type% �
� � 0:type%=-2
� � 1:type%=f%
� � 2,3:type%=&1000
��
�� (fl%�1)=1 �type%=-2
�
=type%
�:
�?� FNbasetype : Return the file type of a directory or image
:� -2=not found, -1=file, &1000 for dir, type for image
"� �basetype(f$):� f%,type%,fl%
&ș "XOS_File",5,f$ � type%,,f%;fl%
 Ȏ type% �
* � 0:type%=-2
4 � 1:type%=-1
> � 2:type%=&1000
H � 3:type%=(f% � &FFF00)>>8
R�
\� (fl%�1)=1 �type%=-2
f
=type%
p
�DIR$,,$7F����v�!RootDATA�Creator
#Parent !Root
#Prefix Creator_
#Table Columns 2
SetVariable
ReadVariable
GIFCompress
TIFFCompress
AIMConvert
PBMConvert
TaskStart
TaskQuit
#EndTable
DIR$,,�7F����v�!RootDATA�Diss
#Parent !Root
#Prefix Diss_
#Table Columns 2
Disassemble
InitLabels
MakeLabelLookup
FindLabel
FindNamedLabel
AddLabel
AddLabelNoSort
RemoveLabel
Assemble
AddLibraryBlock
MergeLabels
RemoveInvalidLabels
RemoveSameNamedLabels
#EndTable
DIR$,,9F����F�u!RootDATAuDitherExtend
#Parent !Root
#Prefix DitherExtend_
#Table Columns 2
SelectTable
SelectGCOLTable
ReturnGCOL
SetGCOL
ReturnColourNumber
ReturnGCOLForMode
ReturnColourNumberForMode
ReturnOppGCOL
SetOppGCOL
ReturnOppColourNumber
ReturnOppGCOLForMode
ReturnOppColourNumberForMode
GCOLToColourNumber
ColourNumberToGCOL
Info
Control
ReturnColourPattern
ReturnColourPatternTable
InvalidatePalette
Antialias
ReadPalette
ReturnColourPatternArray
SetHalftone
ReturnHalftone
SetHalftoneOrigin
ReturnHalftoneOrigin
SelectHalftoneTable
ReturnHalftoneIntensity
ReturnHalftoneTable
SetScreen
CacheScreen
SelectColourPatternTable
#EndTable
DIR$,,�;F����"���!RootDATA�DocumentManager
#Parent !Root
#Prefix DocumentManager_
#Table Columns 3
Open
Close
File
Find
Args
GBPB
Compact
Reset
Stamp
#EndTable
DIR$,,|<F���?��D!RootDATADDragAnObject
#Parent !Root
#Prefix DragAnObject_
Start
Stop
DIR$$$�@G�����	�!RootxBG���u�BufferAddresspCG����I(Configure�DG�����#CutNote�EG���(t�DefaultStereo�FG����`
[FlushOutputGG������FreezeOutputHG�����
�IntState�HG�����	�Load@KG����	LoopLLG���r�MaskVoicehMG�����
'NoteInfo�OG����QParams�PG���x�
cPause�PG����U
�PlayInstr�RG����B
nPlayInstrPackedTG���a�[PlaySinglexUG���p[
�ResetParamsVG����
�RestartSong�VG���ّSampleRate�WG���Ѫ
fSongPosYG���h
�Stereo�ZG����6TuneControl�[G���F��TuneInfoh\G���R����upcallvector\]G�����Voices4^G���v�VolD_G����MVuBar�`G����~(VuGravity�aG���z�
~WaitDATA�DSym
#Parent !Root
#Prefix DSym_
#Table Columns 2
<Load>
<RestartSong>
<Vol>
<Stereo>
<CutNote>
<PlayInstrPacked>
<PlayInstr>
<ResetParams>
<FlushOutput>
<FreezeOutput>
<UpCallVector>
<MaskVoice>
<SongPos>
<TuneControl>
<Pause>
<Voices>
<Wait>
<IntState>
<NoteInfo>
<VuBar>
<Loop>
<BufferAddress>
<VuGravity>
<SampleRate>
<Configure>
<Params>
<TuneInfo>
<PlaySingle>
<DefaultStereo>
#EndTable
DATA�DSym_BufferAddress  (&45895)
#Parent Dsym_
<=	current system hardware buffer address (with output data interleaved)

This call gives the address where you would have to put sound data to, when the sound buffer fill request is broadcasted.DATA(DSym_Configure  (&45898)
#Parent DSym_
=>	R0 =	-1 to reinstall previous configuration
	 	other, to configure the system with new voices number, sample rate and VuGravity.

Note that this call is essential to the options declared with <DSym_Voices>, <DSym_VuGravity> and <DSym_SampleRate>.DATA#DSym_CutNote  (&45884)
#Parent DSym_
=>	R0 =	voice number (0-7)
	R1 =	-1 to read state, or \<>-1 to stop note

<=	R0 corrupted
	R1 =	previous note state (0 stopped, >0 playing)

This call either reads the state of a certain voice or stops the currently played sample on this channel.DATA�DSym_DefaultStereo  (&4589C)
#Parent DSym_
=>	R0 =	voice number (0-7)
	R1 =	new default stereo position, or 0 to read

<=	R1 =	previous default stereo position (1 to 7) for voice number R0

This call sets the default stereo position for a voice.DATA[DSym_FlushOutput  (&45588)
#Parent DSym_
The current notes on all channels are cut.DATA�DSym_FreezeOutput  (&45589)
#Parent DSym_
=>	R0 =	-1 to read output status
	 	other, to set

<=	R0 =	previous output state (0= off, \<>0= on)

This call controls, whether the current notes on all channels are played on or not.DATA�DSym_IntState  (&45891)
#Parent DSym_
This call checks, what the module does in the moment. C is set if the call has interrupted the playing or filling routines.DATA�DSym_Load (&45880)
#Parent DSym_
=>	R0 =	-1 to free RMA buffers
	 	0 to load from memory
	 	>0 pointer to filename
	R1 =	source start address (if R0 = 0)
	R2 =	0 to load to RMA
	 	>0 destination address
	R3 =	size of destination buffer (if R2 >0)
	R4 =	0 claim buffer in RMA
	 	>0 start address of buffer (32k space)

<=	R0 =	length of track in memory

This loads a DSym-Song either from memory or from a file to a buffer either claimed in RMA or a given destination buffer, the buffer in R4 is only needed, if the DSym-Song contains some packed data. If you save a Playermodule with song from DigitalSymphony, this SWI is disabled in the module.DATA	DSym_Loop  (&45894)
#Parent DSym_
=>	R0 =	-1 to read loop status
	 	other, to set

<=	R0 =	previous loop status (0 enabled, >0 disabled)
	R1 \<>	0 if the tune has looped

This call controls whether the song is automatically restarted at end of last pattern.DATADSym_MaskVoice  (&4588B)
#Parent DSym_
=>	R0 =	voice number (0-7)
	R1 =	-1 to read voice state
	 	other, to set voice status

<=	R0 =	previous voice status (0= off, \<>0=on)

This call makes a channel quiet on the speaker, ie it is still playing but not heard on the voice.DATA'DSym_NoteInfo  (&45892)
#Parent DSym_
<=	R0 =	address of current notes table (1 word per voice) note is 0 to 1023
	R1 =	address of current samples table (1 byte per voice) sample is 0 to 63
	R2 =	address of effects table (1 word per voice)
	 	bits 30-31 meaningless
	 	bits 16-21 effect nr
	 	bits  0-11 effect value
	R3 =	address of volumes table (1 byte per voice) volume is 0 to 64

This call gives the addresses of current note, sample, effect and volume table. You could use this informations for example to write your own VuBars routine.DATADSym_Params  (&45899)
#Parent DSym_
<=	R0 =	speed (1-&FFF)
	R1 =	tempo (1-&FFF)
	R2 =	counter (0-&FFE)

This call reads the current speed variables. The counter varies from 1 to speed-1 at a speed according to tempo (50 times a sec for default tempo).DATAcDSym_Pause  (&4588E)
#Parent DSym_
This call stops the current notes and cuts all channels.DATA�DSym_PlayInstr  (&45886)
#Parent DSym_
=>	R0 =	voice number (0-7)
	R1 =	note number (0-36)
	R2 =	sample number (0-63)
	R3 =	effect number (0-63)
	R4 =	effect value (0-&FFF)
	R5 =	minimum sustain time (in 1/50th sec)
	R6 \<>	0 to wait for buffer empty, else don't wait

<=	R0-R6 corrupted

The new note is put to the buffer and played. Setting sustain time means that the new note has priority on the tune notes during this time.DATAnDSym_PlayInstrPacked  (&45885)
#Parent Dsym_
=>	R0 =	voice number (0-7)
	R1 =	full note data
	R5 =	minimum sustain time (in 1/50th sec)
	R6 \<>	0 to wait for buffer empty, else don't wait

<=	R0-R6 corrupted

The new note is unpacked, put to the buffer and played. Setting sustain time means that the new note has priority on the tune notes during this time.DATA[DSym_PlaySingle  (&4589B)
#Parent DSym_
=>	R0 =	-1 then if R1 \<>-1 play pattern R1
	 	if R1 = -1 play normal
	 	other, -1 then play patterns from R0 to R1
	R2 =	-1 to not loop at end
		other, -1 to loop

The pattern pos is set to 0. In the case of playing a part of the sequence, the current position is set to the first pos in that part.DATA�DSym_ResetParams  (&45887)
#Parent DSym_
All parameters are reset (stereo, counter, effects) and  current notes cut on all channels.DATA�DSym_RestartSong  (&45881)
#Parent DSym_
This call resets all parameters, sets the tune position to 0 and starts the song again.DATADSym_SampleRate  (&45897)
#Parent DSym_
=>	R0 =	-1 to read sample rate
	 	other, to set

<=	R0 =	previous sample rate (0-99)

This call sets the sample output density. The lower the number is, the less time the DSym module needs to calculate, but the worse the quality is.DATAfDSym_SongPos  (&4588C)
#Parent DSym_
=>	R0 =	-1 to read sequence pos
		other, to set
	R1 =	-1 to read pattern pos
		other, to set

<=	R0 =	previous sequence pos
	R1 =	previous pattern pos (0-63)

This call reads or sets the pattern position in song and the note position in pattern. If the pattern position is changed, the current note is reset to 0.DATA�DSym_Stereo  (&45883)
#Parent DSym_
=>	R0 =	voice number (0-7)
	R1 =	new stereo position, or -128 to read

<=	R1 =	previous stereo position (-127 to 127) for voice number R0

This call sets the stereo position of one voice specified in R0. A position of zero means that the left and right speaker get both the half amplitude, -127 means the left speaker gets 100%, the right one nothing.DATA6DSym_TuneControl  (&4588D)
#Parent DSym_
=>	R0 =	-1 to read status
	 	other, to set (lower byte)

<=	R0 = previous tune status (0= off, \<>0= on)

This call controls the tune decoder. Off means the tune decoder won't let play notes anymore, you can still play custom notes. Current notes still playing.DATA�DSym_TuneInfo  (&4589A)
#Parent DSym_
<=	R0 =	tune length
	R1 =	number of patterns

This call reads some general informations about the song.DATA�DSym_UpcallVector  (&4588A)
#Parent DSym_
=>	R0 =	-1 to read upcall address
	 	-2 to set default
	 	address to set

<=	R0 =	previous upcall address

This call reads and writes the upcall vector address, information at <OS:OS_Upcall>.DATA�Dsym_Voices  (&4588F)
#Parent DSym_
=>	R0 =	-1 to read hardware voices number
	 	other, to set voices

<=	R0 =	previous hardware voices number (1,2,4 or 8)

This call changes the number of hardware channels. DATADSym_Vol  (&45882)
#Parent Dsym_
=>	R0 =	new overall volume, or -1 to read
<=	R0 =	previous overall volume

This call sets and/or reads the overall volume. The default is 64 which means, that the songs amplitude is not decreased. A volume of 0 means a quiet song.DATAMDSym_VuBar  (&45893)
#Parent DSym_
=>	R0 =	voice number (0-7)
<=	R1 =	Vu bar height (0-64)

This call gives you the current VuBar height. I consider this call not that good, because the information is not given on what you hear, but only on every played note, so you can't get eventual pitch bending or any effects and so on.DATA(DSym_VuGravity  (&45896)
#Parent DSym_
=>	R0 =	-1 to read VuGravity
	 	other, to set (lower byte)

<=	R0 =	previous gravity of VuBar (0-255)

This call sets, how long it takes until the VuBar slides down from 64 to 0, where 255 means highest speed, and 0 means longest time to slide down.DATA~DSym_Wait  (&45890)
#Parent DSym_
=>	R0 =	voice number (0-7)

C is set if custom note buffer is not empty, else clear.DIR$,,hbG���[�!�!RootDATA�Dynamite
#Parent !Root
#Prefix Dynamite_
#Table Columns 2
Alloc
Free
FreeWithID
BlockInfo
ChangeID
Resize
MidExtend
Save
Load
Reduce
Compact
Lock
Unlock
ClaimAnchor
ReleaseAnchor
ReadSpriteSize
Describe
IntegrityCheck
ChangeAnchor
#EndTable
DIR$,,�cF����L��!RootDATA�Euclid
#Parent !Root
#Prefix Euclid_
#Table Columns 2
Initialise
Draw
Load
Save
Append
Find
Create
Destroy
Set
Show
Insert
Delete
Translate
Zoom
Rotate
List
BoundingSphere
CloseDown
MiscOp
Compress
Expand
#EndTable
DIR$,,�dF���R��!RootDATA�FileBuffer
#Parent !Root
#Prefix FileBuffer_
#Table Columns 2
Open
Close
Clear
Read
ReadByte
Write
WriteByte
ReadPTR
WritePTR
TaskStart
TaskQuit
#EndTable
DIR$��4gG����^��3!Root(hG����f��3ObjectDescjG���mu�!3ObjectName,kG���H���3CreateSprite�kG������J3SetSpriteDnG���p��j3CopySprite�oG���j��M3ReadChoicespG���C��L3NewChoicesLpG������J3LoadKeys�pG�����83keyname�qG����d��3ViewerDescXsG����B�3Boot�sG�����3Select�yG����X�b3SpriteDATA�ProFiler (Thomas Olsson)
#Parent !Root
#Prefix Filer_
#Table Columns 3
<ObjectDesc>
<ObjectName>
<CreateSprite>
<SetSprite>
<CopySprite>
<ReadChoices>
<NewChoices>
<LoadKeys>
<KeyName>
<ViewerDesc>
<Boot>
<Select>
<Sprite>
#EndTable
DATA�Filer_ObjectDesc
#Parent Filer_
=>	R0 =	pointer to Object name (will be canonicalised)
<=	R2 =	pointer to Viewer description, or 0 if not visible
	R3 =	pointer to Object description, or 0 if not visible

This will return pointers to descriptions of the object and the viewer containing it if it is currently visible. If the viewer that should have contained the object is visible, but the object is not, R3 will be 0 on exit and R2 will point to the viewer description.
DATA!Filer_ObjectName
#Parent Filer_
=>	R0 =	pointer to buffer for name (256 bytes)
	R2 =	pointer to Viewer description, or 0 if not visible
	R3 =	pointer to Object description, or 0 if not visible
<=	all preserved

This will generate a full pathname for the file defined by R2 and R3.
DATA�Filer_CreateSprite
#Parent Filer_
=>	R0 =	pointer to sprite name
	R1 =	Sprite mode
<=	R1 =	pointer to sprite area
	R2 =	pointer to sprite

This will create a sprite in the Filer's sprite pool.
DATAJFiler_SetSprite
#Parent Filer_
=>	R0 =	pointer to sprite name validation (including leading 'S')
	R1 =	pointer to full pathname
<=	all preserved

This will use the given sprite for the object given in R1. If the directory is still open, the sprite will replace the one currently used, which will usually be 'file_wait'. If the object is not visible, nothing will happen.

You can also report an error with this SWI. The sprite will change to 'file_err', and the text will be shown in the infobox. The error number should have bits 24-30 clear in order to be recognised as such.
DATAjFiler_CopySprite
#Parent Filer_
=>	R0 =	pointer to sprite name
<=	all preserved

This will take a copy of the sprite and put it in the Filer's sprite pool. You should call this after completing your background process of drawing the sprite. After calling this SWI you can dispose of the sprite and call <Filer_SetSprite>.

*Note:* Not implemented yet :-(DATAMFiler_ReadChoices
#Parent Filer_
This call is for internal use only.
DATALFiler_NewChoices
#Parent Filer_
This call is for internal use only.
DATAJFiler_LoadKeys
#Parent Filer_
This call is for internal use only.
DATA8Filer_KeyName
#Parent Filer_
=>	R0 =	<key code=>Wimp:Wimp_Poll8a>
<=	R0 =	pointer to key name

This SWI should really have been provided by the Toolbox, but since it isn't, I've put it in ProFiler. The reason for this SWI is to get a consistent naming of keys. It returns the name of the given key code.
DATA�Filer_ViewerDesc
#Parent Filer_
=>	R0 =	pointer to canonical directory name
<=	R2 =	pointer to viewer description, or 0 if not visible

Converts a name to a viewer description. You need to know the format of the descriptor block to make use of it, and as that format can still change, it has not been documented here. At the moment is can be used to determine if the viewer is open.
DATA�Filer_Boot
#Parent Filer_
=>	R0 =	pointer to canonical directory name
<=	all preserved

Does exactly the same as the *Filer_Boot command.
DATA�Filer_Select
#Parent Filer_
=>	R0 =	<reason code=>.reasons>
	others dependent on reason code

This call can be used to read or control the selection. It is used by the variable Filer$Selected among other things. The 'current viewer' in this context means the one that has the input focus.
#subpage reasons
Filer_Select reasons
Reason	Meaning
#Line
0	<Select file=>.0>
1	<Add file to selection=>.1>
16	<Read current viewer=>.16>
17	<Read one selected file=>.17>
18	<Read multiple selected files=>.18>
#subpage 0
Filer_Select 0
=>	R0 =	0 (select file)
	R1 =	pointer to filename
<=	all preserved

Selects a single file, clearing the selection in that viewer.
#subpage 1
Filer_Select 1
=>	R0 =	1 (Add file)
	R1 =	pointer to file to add
<=	all preserved

Adds a file to the selection in the viewer it is in.
#subpage 16
Filer_Select 16
=>	R0 =	16 (Read current viewer)
<=	R1 =	pointer to viewer name, or 0 if none

Reads the viewer which has the current input focus.
#subpage 17
Filer_Select 17
=>	R0 =	17 (Read one file)
	R1 =	pointer to viewer name, or 0 for viewer with focus
<=	R1 =	object name, or 0 if none selected

Reads a single file from selection in a viewer.
#subpage 18
Filer_Select 18
=>	R0 =	18 (Read multiple files)
	R1 =	pointer to viewer name, or 0 for viewer with focus
	R3 =	context, or 0 for first call
<=	R1 =	pointer to object name, or 0 for first file
	R3 =	new context, or 0 if finished

Reads multiple files from the selection in a viewer.
DATAbFiler_Sprite
#Parent Filer_
=>	R0 =	desired sprite height (0=68 os units, 1=36 os units)
	R1 =	pointer to object name
	R2 =	task handle to reply to (0 for broadcast)
<=	R0 =	pointer to optional sprite to use in meantime

This call is the main interface to binding sprites to disc objects. Unlike earlier days where every application had its own view of these things, the filer provides this SWI to keep it in one place. The filer can be extended with programs like the Sprite Clients, and these extentions will also be considered when this SWI is called.

After calling this SWI, a message will be sent when the sprite has been found. Finding the sprite may mean that apps are booted and many other things, so there is no maximum reply delay. Indeed, if the object doesn't exist, there will be no reply at all. This issue may be addressed in later versions.
DATA�
� >SWI-filter

� code% 10*1024

� pass% = 0 � 2 � 2

      P% = code%

	[     OPT        pass%   


7      ; R0 = search word (Should never be modified)
8      ; R1 = buffer for storing modified search word

      ; R13 = small stack

G      ; Return ptr to search word in R0, or -1 to reject completely
I      ; (this can be initial R0 or R1 or a pointer into one of those)

      STMFD     R13!,{14}
      LDRB      R14,[R0]
      CMP       R14,#�"X"
      CMPne     R14,#�"x"
      ADDeq     R0,R0,#1
      LDMFD     R13!,{PC}^

]

�

)ș "OS_File",10,"!Pre",&FFC,,code%,P%
�
�DIR$,,�F���c��I!RootDATAIFontDraw
#Parent !Root
#Prefix FontDraw_
FindFont
LoseFont
Paint
DIR$,,T�F�����M!RootDATAMFrontEnd
#Parent !Root
#Prefix FrontEnd_
ExtendedCmdLine
FreeCmdLine
DIR$pp�G�����қ!Root��G���K����Open��G���o����Store`�G���;���Fetch��G���2����ExistsP�G���@����FirstKey<�G���F����NextKey�G������pClose|�G���-����DeleteX�G�����ҷClear�G���j���OpenInDATA�Gdbm
#Parent !Root
#Prefix Gdbm_
#Table Columns 2
<Open>
<Store>
<Fetch>
<Exists>
<FirstKey>
<NextKey>
<Close>
<Delete>
<Clear>
<OpenIn>
#EndTable
DATA�Gdbm_Open
#Parent Gdbm_
=>	R0 =	Pointer to filename
<=	R0 =	file handle

Opens a database file for reading and writing, returning the handle of the file so that it can be used in other calls. Returns 0 on failure.
DATA�Gdbm_Store
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>
	R1 =	pointer to keyword
	R2 =	length of keyword
	R3 =	buffer for data
	R4 =	length of data

Stores data under a keyword in the database.DATAGdbm_Fetch
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open> or <Gdbm_OpenIn>
	R1 =	pointer to keyword
	R2 =	length of keyword
	R3 =	buffer for data
	R4 =	length of buffer
<=	R0 =	length of data read, or 0 if key not found

Retrieves data filed under a keyword in the database.DATA�Gdbm_Exists
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>or <Gdbm_OpenIn>
	R1 =	pointer to keyword
	R2 =	length of keyword
<=	R0 =	1 if key exists, 0 otherwise

Checks whether a keyword exists.
DATA�Gdbm_FirstKey
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>or <Gdbm_OpenIn>
	R1 =	pointer to buffer
	R2 =	length of buffer
<=	R0 =	length of keyword, or -1 if no keywords exist

Returns the first keyword from the database.
DATA�Gdbm_NextKey
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>or <Gdbm_OpenIn>
	R1 =	pointer to last keyword
	R2 =	length of keyword
	R3 =	pointer to buffer
	R4 =	length of buffer
<=	R0 =	length of keyword, or -1 if no keywords exist

Returns the next keyword from the database.

NOTE: Keywords are ordered in a hash table order. This is not necessarily alphabetic, and should not be relied on if <Gdbm_Delete> is called in the midst of a NextKey loop.
DATApGdbm_Close
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open> or <Gdbm_OpenIn>

Closes a database file.
DATA�Gdbm_Delete
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>
	R1 =	pointer to last keyword
	R2 =	length of keyword

Deletes the specified key. If the file was opened with <Gdbm_OpenIn> this SWI has no effect.
DATA�Gdbm_Clear
#Parent Gdbm_
=>	R0 =	file handle from <Gdbm_Open>

Deletes all the entries in the database file. If the file was opened with <Gdbm_OpenIn> this SWI has no effect.
DATAGdbm_OpenIn
#Parent Gdbm_
=>	R0 =	Pointer to filename
<=	R0 =	file handle

This SWI is available from gdbm version 0.03. Opens a database file for reading only, returning the handle of the file so that it can be used in other calls. Returns 0 on failure.
DIR$,,D�F���F��!RootDATA�GDraw
#Parent !Root
#Prefix GDraw_
#Table Columns 2
ProcessPath
ProcessPathFP
Fill
FillFP
Stroke
StrokeFP
StrokePath
StrokePathFP
FlattenPath
FlattenPathFP
TransformPath
TransformPathFP
ProcessClipPath
ProcessClipPathFP
ClipPath
ClipPathFP
ClipPathToPath
ClipPathToPathFP
ClearClipRegion
SetClipRegion
SetFillStyle
FillRegion
SetPrintFlag
ReadFillStyle
GetClipRegion
#EndTable
DIR$,,�F����r�!RootDATA�GSpriteExtend
#Parent !Root
#Prefix GSpriteExtend_
#Table Columns 1
PlotSprite
SwitchOutputToSprite
ReadVariable
#EndTable
DIR$,,��F����M��!RootDATA�Hyphenator
#Parent !Root
#Prefix Hyphenator_
#Table Columns 2
ResetDictionary
CreateDictionary
CopyDictionary
EnquireDictionary
FindWord
AddWord
RemoveWord
Hyphenate
GetWords
EnumWord
#EndTable
DIR$,,��F���PM��!RootDATA�ImageExtend
#Parent !Root
#Prefix ImageExtend_
#Table Columns 2
Info
PutSpriteTransformed
PutSpriteToBufferTransformed
PutStringTransformed
GetBBox
GetImageBBox
MakeMatrix
MakeHalftoneTile
AddKernelToMatrix
MakeSimpleScreenTile
#EndTable
DIR$,,��F���.C��!RootDATA�Impulse
#Parent !Root
#Prefix Impulse_
#Table Columns 2
Initialise
Decode
SendMessage
TransmitData
FetchData
CloseDown
DeferReply
#EndTable
DIR$,,��F���
N��!RootDATA�Interface
#Parent !Root
#Prefix Interface_
#Table Columns 2
SlabButton
Render3dWindow
Initialise
CloseDown
SetWorkareaPointer
RemoveWorkareaPointer
Poll
SendHelp
PreProcessKey
Plot3dIcon
BoundingBox
#EndTable
DIR$,,��G����i}��!RootDATA�IZipFS
#Parent !Root
#Prefix IZipFS_
#Table Columns 2
Initialise
Eject
Lock
Unlock
SCSICommand
DeviceInquiry
Devices
Reset
ReadOp
WriteOp
DiscOp
MiscOp
Drives
FreeSpace
DescribeDisc
GetStatus
VerifyOp
WriteProtect
DiscFormat
BootChanged
#EndTable
DIR$��4�G���+0�־!Root�G������C3SetOptions8�G������73GetOptionsp�G������ 3CreateBuffer��G����O��m3DeleteBuffer�G���o��֓3AppendLine��G���&���q3DeleteLine�G�����ָ3GetLine��G������֎3GetPosP�G���8���3SetPos�G���n���Hflagsd�G������3cursorsDATA�LineEditor
#Parent !Root
#Prefix LineEditor_
#Table Columns 2
<SetOptions>
<GetOptions>
<CreateBuffer>
<DeleteBuffer>
<SetPos>
<GetPos>
<GetLine>
<AppendLine>
<DeleteLine>
#EndTable
DATACLineEditor_SetOptions
#Parent LineEditor_
=>	R0 =	buffer size in kilobytes, or 0 for default
	R1 =	<flags=>LineEditor_flags>
	R2 =	minimum length to record, or 0 for no minimum
	R3 =	maximum length to record, or 0 for no maximum
	R4 =	<cursors=>LineEditor_cursors>

Sets options for the global command line-editor.
DATA7LineEditor_GetOptions
#Parent LineEditor_
<=	R0 =	buffer size, or 0 for default
	R1 =	<flags=>LineEditor_Flags>
	R2 =	minimum length to record, or 0 for no minimum
	R3 =	maximum length to record, or 0 for no maximum
	R4 =	<cursors=>LineEditor_Cursors>

Reads options for the global command line-editor.
DATA LineEditor_CreateBuffer
#Parent LineEditor_
=>	R0 =	buffer size, or 0 for default
	R1 =	expansion word (0), or taskhandle for auto-delete, or -1 for none
	R2 =	expansion word if R1 is taskhandle, or none
<=	R0 =	handle, or 0 if can't create

Creates a new private history buffer.
DATAmLineEditor_DeleteBuffer
#Parent LineEditor_
<=	R0 =	buffer handle

Deletes a private history buffer.
DATA�LineEditor_AppendLine
#Parent LineEditor_
=>	R0 =	buffer handle
	R1 =	pointer to line to add, ctrl terminated

Adds a line to the history.
DATAqLineEditor_DeleteLine
#Parent LineEditor_
=>	R0 =	buffer handle

Deletes the last line from the history.
DATA�LineEditor_GetLine
#Parent LineEditor_
=>	R0 =	buffer handle
	R1 =	pointer to buffer
	R2 =	buffer length
<=	R2 =	actual length

Reads the position in a private history buffer.
DATA�LineEditor_GetPosition
#Parent LineEditor_
=>	R0 =	buffer handle
<=	R1 =	line number

Reads the position in a private history buffer.
DATA�LineEditor_SetPosition
#Parent LineEditor_
=>	R0 =	buffer handle
	R1 =	line number, or <'special'=>.special> codes

Sets the position in a private history buffer.
#Subpage special
Special position codes
Value		Position
#Line
-ve		Number of lines from end of history
&7FFFFFFF	End of buffer
&80000000	previous line, wrapping to end
&80000001	previous line, stopping at start
&80000002	next line, stopping at end
&80000003	next line, wrapping to start
DATAHLineEditor flags
#Parent LineEditor_SetOptions
Bit	Meaning if set
#Line
0	TaskWindows have local buffers
1	Trailing dots will be appended to directory completions
2	Default to overtype mode
3	Keep duplicate lines in history
4	Don't do ~ expansion
5	Don't de !-type events (eg !!)
6	Don't do ^two^three type replacements
DATALineEditor cursors
#Parent LineEditor_SetOptions
Byte	Contents
#Line
0	Normal cursor type
1	Overtype cursor type

Cursor types:

Bit	Meaning if set
#Line
0	cursor is a block, otherwise cursor is an underline
1	cursor is steady, otherwise cursor is cursor
DIR$,,��F������P!RootDATAPLZWB
#Parent !Root
#Prefix LZWB_
Compress
Decompress
TaskStart
TaskQuit
DIR$PP8�G����TQ!Root��G���T�DecompressDATAQLZWD
#Parent !Root
#Prefix LZWD_
#Table Columns 2
<Decompress>
#EndTable
DATA�LZWD_Decompress  (&CD100)
#Parent LZWD_
=>	R0 =	pointer to source filename
	R1 =	destination address
	R2 =	length of destination buffer

<=	R0 corrupted or error block pointer
	R2 =	length of bytes used in destination buffer
	all other registers preserved

This call is not provided in the main module but in the small, extra for demos or so written mini module LZWD. It is 25% faster than <LZW_Decompress>.
DIR$��ģG����ZL!Root�G���0
�CompressئG���$c�Decompress��G����?�CompressOnDATALLZW
#Parent !Root
#Prefix LZW_
<Compress>
<Decompress>
<CompressOn>
DATA�LZW_Compress  (&CD000)
#Parent LZW_
=>	R0 =	flags
	 	bit 0 =	1 source in memory
	 	 	0 source is a file
	 	bit 1 =	1 destination in memory
	 	 	0 destination is a file
	R1 =	address in memory if bit 0 = 1
	 	pointer to source name if bit 0 = 0
	R2 =	destination address if bit 1= 1
	 	pointer to destination name bit 1= 0
	R3 =	if bit 0= 1 length of source in bytes
	R4 =	if bit 1= 1 length of destination buffer

<=	R0 is corrupted or contains error pointer
	R5 = if bit 1= 1 number of bytes used
	all other register are preserved

This call compresses a file or a block of data in memory to a file or a block of data in memory using the LZW compressing algorithm. As buffer it uses the screen memory.DATA�LZW_Decompress  (&CD001)
#Parent LZW_
=>	R0 =	flags
	 	bit 0 =	1 source in memory
	 	 	0 source is a file
	 	bit 1 =	1 destination in memory
	 	 	0 destination is a file
	R1 =	address in memory if bit 0= 1
	 	pointer to source name if bit 0= 0
	R2 =	destination address if bit 1= 1
	 	pointer to destination name bit 1= 0
	R3 =	if bit 0= 1 length of source in bytes
	R4 =	if bit 1= 1 length of destination buffer

<=	R0 is corrupted or contains error pointer
	R5 =	if bit 1= 1 number of bytes used
	all other register are preserved

This call decompresses a file or a block of data in memory to a file or a block of data in memory packed using the LZW compressing algorithm. As buffer it uses the screen memory.DATA�LZW_CompressOn  (&CD002)
#Parent LZW_
Works as <LZW_Compress> but appends the compressed data to an existing destination file.DIR$,,\�F����vl!RootDATAlMakeGIF
#Parent !Root
#Prefix MakeGIF_
#Table Columns 2
SetVariable
ReadVariable
Compress
#EndTable
DIR$,,�G���:i}��!RootDATA�MoDel
#Parent !Root
#Prefix MoDel_
#Table Columns 2
On
Off
Address
WatchFiles
LoseFiles
IgnoreDiscs
WatchDiscs
#EndTable
DIR$,,��F���Cv�!RootDATA�NetMonitor
#Parent !Root
#Prefix NetMonitor_
#Table Columns 2
PrintChar
DefineTask
AbandonTask
ConvertFont
UseFont
RestoreFont
#EndTable
DIR$,,d�G������L!RootDATALNH
#Parent !Root
#Prefix NH_
#Table Columns 2
AntiTwitter
#EndTable
DIR$,,ܬG���j��G!rootDATAGOLE
#Parent !Root
#Prefix OLE_
#Table Columns2
Version
LinkFile
DeLinkFile
FileStatus
Invalidate
SimulateSession
#EndTable

Messages :
#Wrap off
#Indent 2
<80E1E OLE_FileChanged=>wimp:Msg_80E1E>
<80E21 OLE_OpenSession=>wimp:msg_80E21>
<80E22 OLE_OpenSessionAck=>wimp:msg_80E22>
<80E23 OLE_CloseSession=>wimp:msg_80E23>
DIR$,,P�F������U!RootDATAPocketFS
#Parent !Root
#Prefix PocketFS_
#Table Columns 2
Ticker
SerialOpen
SerialClose
SerialSetDTR
SerialSetRTS
SerialPrimeTX
GetCacheMem
FreeCacheMem
CacheInit
CacheFinal
DescribeCache
CacheBlock
FindCacheEntry
Status
Dismount
SoftDismount
#EndTable
DIR$,,��F���o��UE!RootDATAEPocketLink
#Parent !Root
#Prefix PocketLink_
#Table Columns 3
StartLink
CloseLink
p_open
p_close
p_read
p_write
p_iow
Enquire
ErrorConv
PanicConv
p_fparse
p_chdir
p_delete
p_rename
p_mkdir
p_sfstat
p_fdate
p_testpth
p_finfo
p_dinfo
p_ninfo
DateToPocket
ZapLink
DateFromPocket
NameFromHandle
p_seek
p_locchg
#EndTable
DIR$,,��G����k}�x!RootDATAxPPADriver
#Parent !Root
#Prefix PPADriver_
#Table Columns 2
Initialise
SCSICommand
SCSICommandRetries
#EndTable
DIR$tt�F����I���!Root��F���fu���Load��F���-Y���StartL�F���b^���StopH�F����c���Pause8�F����i��pClear��F���D}���Infod�F��������Pos��F����,���EffectControl��F������}VolumeX�F���D���SetSampleSpeed`�F�������HDMABuffer��F�������RemoveChannel��F���䮓�JRestoreChannel��F����ȓ�Stereo��F���(Γ��ReadSongLength��F����ғ�iReadSequenceTable��F����ⓥ�VUBarControl��F����ΐ�)ReadVULevels�F�����JReadSampleTableL�F��������ReadSpeed�F���4���PlaySample��F����XSongStatus��F������ReadPlayingTime�F�������PlayRawSample�F���I����SoundControlTF��������SWITableAddress�F���E���~RegisterSampletF����0���SetSpeed0F���)l��qeffects�
F���A7��e-effectsDATA�QTM
#Parent !Root
#Prefix QTM_
#Table Columns 2
<Load>
<Start>
<Stop>
<Pause>
<Clear>
<Info>
<Pos>
<EffectControl>
<Volume>
<SetSampleSpeed>
<DMABuffer>
<RemoveChannel>
<RestoreChannel>
<Stereo>
<ReadSongLength>
<ReadSequenceTable>
<VUBarControl>
<ReadVULevels>
<ReadSampleTable>
<ReadSpeed>
<PlaySample>
<SongStatus>
<ReadPlayingTime>
<PlayRawSample>
<SoundControl>
<SWITableAddress>
<RegisterSample>
<SetSpeed>
#EndTable
DATA�QTM_Load  (&47E40)
#Parent QTM_
There are three forms of this call :
=>	 	<Form 1=>.form1>		<Form 2=>.form2>	<Form 3=>.form3>
	R0 =	filename			0			-1
	R1 =	address, or 0 for QTM memory	address        			address to copy from

<=	R0, R1 preserved

The address and type of the loaded song can be read by <QTM_Info>.

Note: When a song is loaded (by any method) its sample data is converted into 8-bit logarithmic data, from signed linear data. 15 inst. format songs are converted to a 31 inst. format at the same time. The sample data CAN be converted back to signed linear, so the song can be saved or re-loaded etc. by calling <QTM_Clear> with R0=-1, although the song format will not be converted back, and will remain as 31 inst.

V flag set if there was not enough space in the RMA for the song, the file was not found, the music format was not understood, or an illegal memory address was specified.
#Subpage form1
QTM_Load form 1
Depending on the value in R1, QTM will either load the specified song file into QTM's own memory (R1=0), or to the memory address given in R1 (R1\<>0).
#Subpage form2
QTM_Load form 2
QTM will initialise the song pointed to by R1, at that address.
This enables a program to load a song into its own reserved memory (eg. application memory or its own RMA block) and get QTM to play it from there, rather than from a QTM-controlled RMA block.
#Subpage form3
QTM will COPY the song from the address given in R1, to its own memory (RMA) and use it from there.

Note: If the address in R1 is the START of an RMA block, QTM will take control of this block, and release it after transfering the song. This is done to reduce possible fragmentation of the RMA. The loader program must *NOT* access the old RMA address of the song, after this call.
DATA�QTM_Start  (&47E41)
#Parent QTM_
This SWI will start the current song playing (and start up the sound system), after loading, or being paused or stopped.

V flag set if no song is loaded
DATA�QTM_Stop  (&47E42)
#Parent QTM_
This SWI will stop the current song playing, switch off QTM's sound controllers and reset all the internal song variables, including the position counters - which it sets to 0.

V flag set if no song is loaded
DATA�QTM_Pause  (&47E43)
#Parent QTM_
This has the same effect as <QTM_Stop>, although it doesn't reset the internal variables, so when the song is re-started, it will continue from the same position.

V flag set if no song is loaded
DATApQTM_Clear  (&47E44)
#Parent QTM_
=>	R0 =	-1 to convert samples back to signed linear format
	 	other don't convert samples

<=	R0 is preserved

This SWI will switch off the QTM sound system and stop the current song playing, releasing any memory used for the song if it was loaded into RMA. The song cannot be restarted after this command, unless it is reloaded (from user-reserved memory, disc, etc.) using <QTM_Load>.

The CURRENT song can only be reloaded from user-reserved (not QTM's) memory
after calling <QTM_Clear>, if the samples have been converted back to
signed linear format (from the logarithmic format they were converted to
when the song was loaded). This can be done by setting R0 to -1 before
calling <QTM_Clear>. See <QTM_Load> for information on (re)loading a
song that is already stored in memory.

No error is reported if there is not a song loaded.
DATA�QTM_Info  (&47E45)
#Parent QTM_
<=	R0 =	pointer to track name (0 terminated)
	R1 =	pointer to author name (0 terminated) or 0 if none
	R2 =	<song origin=>.origins>
	R3 =	number of channels (currently only 4 channels)
	R4 =	file length (in bytes)
	R5 =	garbage data size (-ve if data missing)
	R6 =	address where song is loaded

This SWI returns general information about the current track loaded in QTM.

It also uses an 'intelligent author detector' routine, to search through the sample names (usually used by authors, to store their name or group) to see if it can find anything that resembles a name. If it succeeds, a pointer to the name is returned in R1, otherwise 0 is returned.

Note: The 'song origin' value (R2), corresponds to the original song type, NOT the format of the song in memory. After loading, QTM converts all songs to the 31 inst. ProTracker format. Future versions of QTM, however, may support different song types in memory. To avoid problems with new types being supported, it can be assumed that any song returning a value in R2 \< &10 (16), will be stored in memory as a 4 channel, 31 inst. ProTracker format song. Song editors and display programs should check this value, to ensure that the loaded song is in the expected format for the program.

V flag set if no song is loaded
#Subpage origins
QTM Song origins
value	origin
#Line
0	15 inst. Sound Tracker
1	31 inst. Sound Tracker
2	31 inst. ProTracker
3	31 inst. Startrekker
DATA�QTM_Pos  (&47E46)
#Parent QTM_
=>	R0 =	new sequence position (0-127), -1 to read current position
	R1 =	new event position (0-63), -1 to read

<=	R0 =	previous sequence position (0-127)
	R1 =	previous event position (0-63)

This SWI can be used to read or alter the current sequence or event position in the current song.

V flag set if no song is loaded or the position/event number is out of range
DATA�QTM_EffectControl  (&47E47)
#Parent QTM_
=>	R0 =	<effect number=>QTM_effects> (&0-&F,&E0-&EF for <'E' effects=>QTM_e-effects>) or -1 to read current state
	R1 =	new state of effect (0-off/1-on)

<=	R0 =	previous effect state word (&0-&F) 1 bit per effect, 16 bits
	R1 =	previous effect state word (&E0-&EF) as above

This SWI can be used to change the state of any effect (as seen by the QTM effect handlers). Disabling an effect will stop QTM taking any action over it. For example, disabling effect &F will not allow speed/tempo changes to take place, and the song may sound too fast or slow.

Once re-enabled, the effect(s) will be run as usual again.

The contents of R0 and R1 on exit are a copy of the effect words used by QTM - each has 16 bits used, with each bit representing the state of that effect 0-off, 1-on. R0 contains the flags for the normal effects (&0-&F), R1 contains the flags for the 'E' effects (&E0-&EF).

V flag set if the effect number was out of range
DATA}QTM_Volume  (&47E48)
#Parent QTM_
=>	R0 =	new overall volume (0-64) or -1 to read current volume
<=	R0 =	previous volume (0-64)

This SWI allows you set the overall output volume from the QTM sound handlers. The volume is in a linear form (0-64), as used for volumes in ProTracker songs. Gradual fades can be generated using this SWI.

V flag set if volume is out of range
DATAQTM_SetSampleSpeed  (&47E49)
#Parent QTM_
=>	R0 =	new sample speed (16-96�S) or -1 to read current speed
<=	R0 =	previous sample speed (16-96�S)

This SWI lets you set the time between sample outputs (ie. sample quality) to a value between 16�S and 96�S. Smaller speed values give better sample quality, but also use more processor time, slowing the computer down more. The default speed is 32�S.

Note: If 8 channels are enabled, the minimum sample speed is 24�S.

V flag set if sample speed is out of range
DATAHQTM_DMABuffer  (&47E4A)
#Parent QTM_
<=	R0 =	address of last used DMA sound buffer.

By using this SWI, it would be possible to implement sound output oscilloscopes, or volume activated (real) VU bars. The data in the DMA buffer is stored as: [c1],[c2],[c3],[c0],[c1],[c2]...etc, 1 byte for each channel. The DMA buffer size used by QTM is 208*\<no. of channels> long.

The address returned in R0 will only be accurate if the QTM sound system is currently active. To check whether this is the case, use <QTM_SoundControl>, to read the sound system state (number of channels).
DATA�QTM_RemoveChannel  (&47E4B)
#Parent QTM_
=>	R0 =	channel number to remove from song player (1-8)

<=	R0 =	previous state of that channel:	0 = already removed
	 	 				1 = QTM channel

This SWI has the effect of 'removing' the given channel from the QTM player routine. This means no samples from the song will be played through this channel, although it is still possible to play samples directly, using the PlaySample SWIs, or through the Transparent sound system (if active).

While the channel is 'removed', the player will continue to keep up to date the effects and sample information, so that when the channel is restored, the song will continue as if nothing had happened.

Note: QTM v1.22 does not use channels 5-8 for song playing, so although they can be 'removed', this will make no noticeable difference as they can only be used for sample playing anyway!

V flag set if channel number is out of range
Interrupts: IRQ interrupts disabled while QTM sound flags are altered.
DATAJQTM_RestoreChannel  (&47E4C)
#Parent QTM_
#Wrap off
=>	R0 =	channel number to restore (1-8)
<=	R0 =	previous state of that channel:	0 = previously removed
	 	 				1 = already a QTM channel
#Wrap

This SWI is used to restore channels previously removed by <QTM_RemoveChannel>.

V flag set if channel number is out of range
DATAQTM_Stereo  (&47E4D)
#Parent QTM_
=>	R0 =	<channel number=>.usrchannel> to alter
	 	or 0 for <pre-programmed settings=>.prgchannel>

<=	R0 is preserved
	If R0 = 1-8 then R1 = previous stereo position
	If R0 = 0 then R1 is corrupted

This SWI allows the stereo positions for each channel to be altered independently, or all together. If R0=1-8 on entry, then R1 must be either a valid stereo position (-127 to 127) or -128 to read the previous position. If R0=0 on entry, then R1 must be in the range 0-4 to alter all the channels to one of these pre-programmed values.
#Subpage usrchannel
User channel stereo settings
R0 =	1-8
R1 =	-127 (left) to 127 (right)
	or -128 to read current position
#Subpage prgchannel
R0 =	0
R1 =	0	<default stereo positions=>.default>
	1	Amiga (full) stereo positions
	2	centred (no stereo)
	3	full left
	4	full right
#Subpage default
Default stereo settings
Channels 1,5 Position: -79 (left)
Channels 2,6 Position:  79 (right)
Channels 3,7 Position:  47 (slightly right)
Channels 4,8 Position: -47 (slightly left)
DATA�QTM_ReadSongLength  (&47E4E)
#Parent QTM_
<=	R0 =	number of sequences in current song (1-128)
	R1 =	maximum pattern number in song (ie. number of patterns-1)

This SWI allows you to read the number of sequences and maximum pattern number in the current song. The maximum pattern number is ALWAYS the number of patterns present-1, since counting starts at 0, not 1.

V flag set if no song is loaded
DATAiQTM_ReadSequenceTable  (&47E4F)
#Parent QTM_
=>	R0 = sequence number to read (0-127)
<=	R0 = pattern number stored at that position

This SWI enables you to read the pattern to be played at a given position in the current song's sequence table.

V flag set if no song is loaded or if sequence number is larger than the song's maximum sequence position.
DATA�QTM_VUBarControl  (&47E50)
#Parent QTM_
=>	R0 =	<control value=>.control>
	R1 =	new VU gravity, or -1 to read

<=	R0 =	previous VU controller state
	R1 =	previous VU bar gravity

This SWI allows control of the highly accurate VU bar routine contained in the QTM module. The default settings for the VU bar routine are: gravity = 2 (lines per 50th of a second) and the VU bar controller off.

Note: Currently QTM VU bars are only available for channels 1-4.
#Subpage control
QTM VUBar control values
\#	meaning
#Line
0	switch the VU bar controllers off
1	set the VU bar controller to use 'fake' VU bars
2	set the VU bar controller to use 'effect' VU bars
3	set the VU bar controller to use 'real' VU bars
-1	read current setting
DATA)QTM_ReadVULevels  (&47E51)
#Parent QTM_
=>	R0 =	Channel number (1-4) or 0 for all channels

<=	If R0 = 1-4 on entry, then
	   R0 = VU bar height for the channel specified in R0 (0-64)
	If R0 = 0 on entry, then 
	   R0 = word containing 1 byte per channel of all the 4 channels' VU bar heights (0-64, each byte)

This SWI lets you read the current VU levels of the QTM VU bar handler. This call should only be used if the VU bar handler has been enabled using <QTM_VUBarControl>.

Note: Currently QTM VU bars are only available for channels 1-4.
DATAJQTM_ReadSampleTable  (&47E52)
#Parent QTM_
=>	R0 =	sample number (1-64)

<=	R0 =	pointer to 22 byte block (not terminated) containing sample name (or a 0 byte, if no sample name)
	R1 =	sample length (in bytes)
	R2 =	repeat offset (bytes from start of sample)
	R3 =	repeat length (in bytes)
	R4 =	default volume (0-64)
	R5 =	fine tuning value (-8 to +7)
	R6 =	address of raw sample data (logarithmic format)

This SWI allows you to read information from the QTM sample table, which contains up to 64 samples. Non-existent samples will return zero in R1-R6, and R0 will point to a 0 byte.

Note: Because only samples 1-31 are used by songs, samples 32-64 can be used for sound effects (in games etc.) and can be registered separately, using <QTM_RegisterSample>.

V flag set if sample number is out of the range 1-64 or song not loaded
DATA�QTM_ReadSpeed  (&47E53)
#Parent QTM_
<=	R0 =	current song speed (00-31)
	R1 =	current song CIA tempo setting (32-255)
	R2 =	speed counter value (01-speed)

This SWI returns information on the current speed, tempo and counter values of the current song. The speed value (R0) is the number of times the song controller has to be called, before it plays the next note, the default is 6 times. If a speed of 0 is returned, the song is not playing.

The CIA tempo setting controls how fast the song controller is called. The default is 50 times a second, tempo 125. (The name CIA tempo comes from Complex Interface Adaptor, which was used on the Amiga to control ProTracker's interrupt speed.)

The speed counter (R2) varies from 1 to the current speed (R0). It is decremented once every time the song controller is called, until it reaches 0, when the next note is played and the counter is reset to the speed.

V flag set if no song is loaded
DATA�QTM_PlaySample  (&47E54)
#Parent QTM_
=>	R0 = channel number (1-8)
	R1 = sample number (0,1-64), 0 to clear channel
	R2 = note number (1-36 for standard, 113-856 for amiga pitch)
	R3 = linear volume (0-64)

<=	R0-R3 preserved

This SWI allows you to play any of the 64 samples held in the QTM sample table on any of the 4 or 8 available channels. A sample can be played at any time, including while a song is playing, although the sample may be cut short if the song is playing. Playing a non-existent sample will result in nothing being played. The samples above 31 can be used after they are registered, using <QTM_RegisterSample>.

This SWI will also start up the QTM sound system if it is called while the
song is stopped or paused, though it will not switch the system off after
the sample finishes, use <QTM_SoundControl> to do this.

V flag set if any of the registers contain illegal values.
DATAXQTM_SongStatus  (&47E55)
#Parent QTM_
<=	R0 = <song status flags=>.flags>

This SWI allows you to read the current status of the QTM song controller.

No error is generated if there is no song loaded.
#Subpage flags
QTM Song status flags
Bit	meaning if set
#Line
0	song loaded
1	song loaded in RMA
2	song currentl playing
3-31	reserved
DATA�QTM_ReadPlayingTime  (&47E56)
#Parent QTM_
<=	R0 =	total playing time so far (seconds)
	R1 =	time since last <QTM_Start> (seconds)
	R2 =	total playing time of the whole song (seconds)

This SWI allows you to read the two QTM song timers and the total time of the current song. The contents of R0 and R1 on exit are calculated from the internal 100Hz timer, but the contents of R2 rely on a special 100% accurate, song length calculation routine...

The ** {*}QTM-Ultra-mega-time-worker-outer{*} ** is the first song time calculation routine on the Arc, and the only routine on any computer which can accurately work out times correctly with effects such as CIA tempos, pattern loops and pattern delays. The routine works by scanning through all the song's patterns, in the correct order, calculating the time of each event as it goes, and taking into account any speed, tempo, loop or delay settings that may be in use.

When this SWI is called for the first time after loading a song, the total length will be worked out using the special routine. On later calls to this SWI (while the same song is loaded), the total length will not be re-calculated, but the original calculation will used, to save time.

V flag set if no song is loaded
DATAQTM_PlayRawSample  (&47E57)
#Parent QTM_
=>	R0 = channel number (1-8)
	R1 = sample address (logarithmic sample data), or 0 to silence channel
	R2 = sample length (in bytes)
	R3 = repeat offset (bytes from start of sample)
	R4 = repeat length (in bytes)
	R5 = note number (1-36 for standard note, 113-856 for amiga pitch)
	R6 = linear volume (0-64)

<=	R0-R6 preserved

This SWI allows you to play a sample stored in any area of memory. The sample should be in 8-bit logarithmic format.

This SWI will also start up the QTM sound system if it is called while the song is stopped or paused, though it will not switch the system off after the sample finishes, use <QTM_SoundControl> to do this.

V flags set if the contents of the registers contain dangerous values!
DATA�QTM_SoundControl  (&47E58)
#Parent QTM_
=>	R0 =	number of channels to use (4, 8 or 0 to shutdown) -1 to read
	R1 =	transparent sound system flags 1-on, 0-off, -1 to read
	R2 =	transparent sound system channel handler address or -1

<=	R0 =	previous number of channels (0 if sound system was off)
	R1 =	previous transparent sound system flags
	R2 =	previous transparent sound system handler

This SWI allows control over the QTM sound DMA handler.

The QTM sound system switches on automatically when a song or a sample is played, but can also be switched on manually using this SWI, specifying 4 or 8 channels. Note: This sets the 'default' number of channels, so even after the sound system is next shut down, QTM will continue to use the number of channels specified whenever a song or sample causes the sound system to start up again.

If 0 channels are specified, the QTM sound system is shut down. If a song was playing at that time, the music handlers and position counters will continue to move through the song, although no sound will be heard from QTM.

Details of the Transparent Sound System can be found in the 'Technical' help file, but basically it allows joint control over the sound channels, by QTM and either the RiscOS sound handler (default) or any other RiscOS compatible sound channel handler. Switching the Transparent Sound System on (passing 1 in R1) will allow you to hear any RiscOS voice module sounds AS WELL as any QTM samples. For example, in its default state, the Transparent Sound System will allow you to hear the system 'beep', while a song or sample is being played through QTM.

V flag set if illegal values are passed to QTM.
DATA�QTM_SWITableAddress  (&47E59)
#Parent QTM_
<=	R0 = address of QTM's internal SWI jump table

This SWI returns the address of QTM's SWI jump table, so that user programs can call directly any QTM SWI, without going through the RiscOS SWI handler.

To call a QTM SWI via this address, the registers should be set up as required by the SWI, and the SWI number minus &47E40 should be placed in R11. The SWI can then be executed by branching to this SWI table address.

Note: all QTM SWIs can be called this way, from any PSR mode, although if the QTM sound system is active, <QTM_RemoveChannel> should be called from a non-User mode, to allow disabling of interrupts.
DATA~QTM_RegisterSample  (&47E5A)
#Parent QTM_
=>	R0 =	sample number to register as (1-64) (see notes below)
	R1 =	sample address (of logarithmic sample data) or 0 to blank the sample information
	If R1 \<> 0 then
	 	R2 = sample length (in bytes)
	 	R3 = repeat offset (bytes from start of sample, or 0)
	 	R4 = repeat length (or 0)
	 	R5 = default volume (0-64)
	 	R6 = fine tune value (-8 to +7)

<=	R0-R6 preserved

This SWI allows a program to register a sample loaded into it's own memory, as a QTM sample. The above information will be entered into QTM's 64 slot sample table and will allow the user program to play the sample using <QTM_PlaySample>. If the sample number is <=31, the current song will use this sample rather than its default sample.

It is good practice for non-desktop users of this call to blank their registered samples when returning to the desktop, by calling this SWI with R1=0.

Note: All samples in the range 1-31 are re-set when a new song is loaded, to allow space for the new song's own samples. If you are using this range for sound effects etc. you must re-register all required samples after every song load.
DATA�QTM_SetSpeed  (&47E5B)
#Parent QTM_
=>	R0 =	new song speed (01-31) or tempo (32-255)
	 	(speed (beats per note), fast 01-31  v. slow, default 06)
	 	(tempo (beat frequency), slow 32-255 v. fast, default 125)

<=	R0 preserved

This SWI provides user control over the speed of the currently playing song. This command has the same effect (and takes the same parameters) as the speed-change 'F' effect as used in ProTracker compatible songs. The only difference being that a value of 0 will NOT stop the song, use SWI QTM_Stop to do this.

After using this SWI, the song speed will remain at the new value until an 'F' effect is played, or the song is stopped. Note: if the 'F' effect is disabled, using <QTM_EffectControl>, the song will play at the new speed until it is stopped, or 'F' effects are enabled again.

The current speed and tempo can be read using <QTM_ReadSpeed>.

V flag set if no song loaded or the new speed/tempo is out of range.
DATAqStandard ProTracker commands/effects
#Table Columns 2
00 Arpegio
01 Pitch slide up
02 Pitch slide down
03 Tone portamento
04 Vibrato
05 Tone portamento + volume slide
06 Vibrato + volume slide
07 Tremelo
08 \<not used>
09 Set sample offset
0A Volume slide
0B Jump to sequence
0C Set volume
0D Pattern break
0E Various, see table 2
0F Set speed / tempo
#EndTableDATA�'E' commands/effects
#Table Columns 2
E0 Set filter *
E1 Fine pitch slide up
E2 Fine pitch slide down
E3 Glissando control
E4 Set vibrato waveform
E5 Set fine tuning
E6 Pattern loop
E7 Set tremelo waveform
E8 \<not used>
E9 Retrig note
EA Fine volume slide up
EB Fine volume slide down
EC Note cut
ED Note delay
EE Pattern delay
EF Invert loop
#EndTable

* The 'Set filter' command can't be implemented on the Archimedes.DIR$��,F����*Cw!Root�F���ȯMIFileInfo�F����هMMessage�F���vɇM�NewMessages�F���f��?roperationdF���sԇM�IsNewDATAwReadMail
#Parent !Root
#Prefix ReadMail_
#Table Columns 1
<FileInfo>
<Message>
<NewMessages>
<IsNew>
#EndTable
DATAIReadMail_FileInfo (&46800)
#Parent ReadMail_
\<=	R0 =	number of messages read, or -1 if file not seen
	R1 =	number of new messages read

This reads information about the ReadMail message base files which have been seen by the module. To notify the module that the List or New file has changed, use <ReadMail_NewMessages>.DATAReadMail_Message (&46801)
#Parent ReadMail_
=>	R0 =	file number to find
	R1 =	<operation code=>ReadMail_operation>
	R2 =	Unused
	R3 =	previous file in chain (or -1 to leave unchanged)
	R4 =	next file in chain (or -1 to leave unchanged)

\<=	R0 preserved
	R1 =	pointer to line in List file, or -1 if not found
	R2 =	real message number
	R3 =	previous file in chain
	R4 =	next file in chain

This call tries to find a particular file's information and returns it, or sets the information in the module's block.DATA�ReadMail_NewMessages (&46801)
#Parent ReadMail_
\<=	R0 =	Number of messages in base
	R1 =	Number of new files in base

This call notifies the ReadMail module that the message base List (or New) file has been altered and it needs to read it.
DATArOperation codes
#Wrap Off
Code	Meaning
#Line
-1	Delete message
0	Don't alter message
1	Set data as passed
DATA�ReadMail_IsNew (&46803)
#Parent ReadMail_
=>	R0 =	number of file to check
\<=	R0 =	0 if not new, -1 if new

This SWI checks the new files log to check if the file is there.DIR$,,DF���qL��!RootDATA�ROMCache
#Parent !Root
#Prefix ROMCache_
#Table Columns 2
Cache
Link
Load
Swap
Uncache
Save
SetState
Allocate
#EndTable
DIR$���G������v!Root(G���9@�code0G���Ꙙ��Info� G����ט�Link�"G����$��cMemory�$G����G�luser`*G���\���UtilDATAvSparkFS
#Parent !Root
#Prefix SparkFS_
#Table Columns 2
<Code>
<Info>
<Link>
<Memory>
<User>
<Util>
#EndTable
DATASparkFS_Code (&445C3)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<CRC 16 block=>.code0>
	 	  1	<CRC 32 block=>.code1>
	 	  2	<Open encrypt=>.code2>
	 	  3	<Encrypt block=>.code3>
	 	  4	<Decrypt block=>.code4>
	 	  5	<Close encrypt=>.code5>

This SWI is used to do different forms of encoding on data.
#Subpage code0
CRC 16 block (0)
=>	R0 =	0 (reason code)
	R1 =	CRC in
	R2 =	pointer to data block
	R3 =	length of data

<=	R1 =	CRC out

This call will calculate a 16-bit CRC value for a block of data.
#subpage code1
CRC 32 block (1)
=>	R0 =	1 (reason code)
	R1 =	CRC in
	R2 =	pointer to data block
	R3 =	length

<=	R1 = CRC out
This call will calculate a 32-bit CRC value for a block of data.
#subpage code2
Open Encrypt (2)
=>	R0 =	2 (reason code)
	R1 =	type (1 for Garble, 2 for DES)
	R2 =	pointer to password

This call is used to start an encrypt or decryptiong session.
#subpage code3
Encrypt block (3)
=>	R0 =	3 (reason code)
	R1 =	type (1 for Garble, 2 for DES)
	R2 =	pointer to data block
	R3 =	length

This call will encrypt a block of data using the password given in the previous call to <SparkFS_Code 2=>.code2>.
#subpage code4
Decrypt block (4)
=>	R0 =	4 (reason code)
	R1 =	type (1 for Garble, 2 for DES)
	R2 =	pointer to data block
	R3 =	length

This call will decrypt a previously encrypted block of data, if the password matches that given by <SparkFS_Code 2=>.code2>.
#subpage code5
Close Encrypt (5)
=>	R0 =	5 (reason code)
	R1 =	type (1 for Garble, 2 for DES)

This call will terminate an encrypt session.
DATA�SparkFS_Info (&445C2)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<Archive info=>.code0>
	 	  1	<Module info=>.code1>

This call is used to extract information from SparkFS.
#subpage code0
Archive info (0)
=>	R0 =	0 (reason code)
	R1 =	pointer to archive pathname
<=	R1 =	pointer to archive structure

This call is used to read information about an archive.
#subpage code1
Module info (1)
=>	R0 =	1 (reason code)
	R1 =	module number
<=	R0 =	0 no module, -1 no more modules
	R1 =	pointer to archive info
	R2 =	pointer to compression info
	R3 =	pointer to code info
	R4 =	pointer convert info
	R5 =	pointer module base

This call is used to extract information about modules registered with SparkFS.
DATA�SparkFS_Link (&445C0)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<Add new link=>.code0>
	 	  1	<Remove link=>.code1>

This call is used to perform operations on 'links'.
#subpage code0
Add new link (0)
=>	R0 =	0 (reason code)
	R1 =	pointer to flink
	R2 =	pointer to private workspace
	R3 =	compatibility level
#subpage code1
Remove link (1)
=>	R0 =	1 (reason code)
	R1 =	pointer to flink
DATAcSparkFS_Memory (&445C1)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<Allocate=>.code0>
	 	  1	<Extend=>.code1>
	 	  2	<Free=>.code2>
	 	  3	<Set=>.code3>

This call is used to manipulate SparkFS' memory manager.
#subpage code0
Allocate (0)
=>	R0 =	0 (reason code)
	R1 =	pointer to anchor
	R2 =	size
<=	R0 =	0 if failed
#subpage code1
Extend (1)
=>	R0 =	1 (reason code)
	R1 =	pointer to anchor
	R2 =	size
<=	R0 =	0 if failed
#subpage code2
Free (2)
=>	R0 =	2 (reason code)
	R1 =	pointer to anchor
#subpage code3
Set (3)
=>	R0 =	3 (reason code)
	R1 =	min
	R2 =	max

<=	R1 =	min
	R2 =	max
	R3 =	currDATAlSparkFS_User (&445C5)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<Identify archive=>.code0>
	 	  1	<Read archive entries=>.code1>

This call is used to perform miscellaneous user operations on archives.
#subpage code0
Identify archive (0)
=>	R0 =	0 (reason code)
	R1 =	pointer to archive path
<=	R0 =	type
#subpage code1
Read archive entries (1)
=>	R0 =	1 (reason code)
	R1 =	pointer to archive path i.e. path to archive file on external FS
	R2 =	pointer to <buffer=>.code1buffer> to write information to
	R3 =	number of objects to write
	R4 =	position in catalogue to start reading from
	R5 =	size of buffer
	R6 =	pointer to wild carded file name to match. Can be NULL to match all.
	R7 =	pointer to path to directory inside archive

<=	R4 =	position in catalogue to read from next
	R3 =	number of entries written to buffer

This is passed the path to an archive, and the path to a directory inside the archive. In addition a wildcarded filename can be used. 

Operation is similar in concept to <OS_GBPB=>OS:OS_GBPB> 10.
#subpage code1buffer
Format of entries in SparkFS catalogue
Offset	Purpose
#Line
0	load address
4	exec address
8	length		ie. real uncompressed size
12	size		ie. compressed size
16	header version	loosely related to the compression method
20	attributes
24	object type	1=file, 2=directory
28	object name	0 terminated, padded with 0's to word boundary.
DATA�SparkFS_Util (&445C4)
#Parent SparkFS_
=>	R0 =	reason code number
	 	  0	<Parent of directory=>.code0>
	 	  1	<Set number of files in directory=>.code1>
	 	  2	<Insert entry=>.code2>
	 	  3	<Remove entry=>.code3>
	 	  4	<Map extension to type=>.code4>
	 	  5	<Calculate directory length=>.code5>
	 	  6	<Open scrap file=>.code6>
	 	  7	<Close scrap file=>.code7>

This call is used to do things to archives (!).
#subpage code0
Parent of directory (0)
=>	R0 =	0 (reason code)
	R1 =	pointer to archive
	R2 =	child
<=	R0 =	parent
#subpage code1
Set number of files in directory (1)
=>	R0 =	1 (reason code)
	R1 =	no of files
#subpage code2
Insert entry (2)
=>	R0 =	2 (reason code)
	R1 =	pointer to archive
	R2 =	file number
	R3 =	directory
	R4 =	size
#subpage code3
Remove entry (3)
=>	R0 =	3 (reason code)
	R1 =	pointer to archive
	R2 =	file number
	R4 =	size
#subpage code4
Map extension to type (4)
=>	R0 =	4 (reason code)
	R1 =	pointer to extension
<=	R0 =	file type
#subpage code5
Calc dir lens (5)
=>	R0 =	5 (reason code)
	R1 =	pointer to archive
#subpage code6
Open scrap file (6)
=>	R0 =	6 (reason code)
	R1 =	mode
<=	R0 =	handle
#subpage code7
Close scrap file (7)
=>	R0 =	7 (reason code)
	R1 =	handleDIR$,,L/F����C��!RootDATA�Spch
#Parent !Root
#Prefix Spch_
#Table Columns 2
Ready?
Oldchannel
Error
Say
SayW
Speak
SpeakW
Pitch
Speed
Mouth
Tongue
GetDictionary
Reset
Level
#EndTable
DIR$,, 0F����K�e!RootDATAeSpell
#Parent !Root
#Prefix Spell_
#Table Columns 2
Typo
Anagram
Fuzzy
CheckWord
AddWord
GetWord
GetNextWord
EnumWord
CreateUser
LoadUser
SaveUser
UserToFile
FileToUser
GetDictionaryName
RemoveDictionary
DeleteWord
ResetIgnore
AddToIgnore
BrowseWindow
SpellOp
FindWord
ImpressionInfo
ImpressionQuickCheck
FileToFile
SaveDictionaryWithPath
#EndTable
DIR$,,�1F����F��!RootDATA�StreamSquash
#Parent !Root
#Prefix StreamSquash_
#Table Columns 2
Initialise
InfoCompress
OpenCompress
CompressBlock
CloseCompress
InfoDecompress
OpenDecompress
DecompressBlock
CloseDecompress
Exit
#EndTable
DIR$��(4F���1V� �!Root�6G���W��3enable,9F����Ѹ �Disable�9F���6� SKillH;F����1� eUnKill�;F���T�� �Intercept|<F����
� �NoIntercept8=F����&� tShowCodes�=F����6� �NoCodes8>F����E� mReset�?F���>K� �FlushText(@G����
�JdirectDATA�Stream
#Parent !Root
#Prefix Stream_
#Table Columns 2
<Enable>
<Disable>
<Kill>
<UnKill>
<Intercept>
<NoIntercept>
<ShowCodes>
<NoCodes>
<Reset>
<FlushText>
<WriteC=>Stream_direct>
<WriteS=>Stream_direct>
<Write0=>Stream_direct>
<WriteN=>Stream_direct>
<NewLine=>Stream_direct>
<WriteT32=>Stream_direct>
<WriteT24=>Stream_direct>
<WriteT16=>Stream_direct>
<WriteT8=>Stream_direct>
<WriteH32=>Stream_direct>
<WriteH24=>Stream_direct>
<WriteH16=>Stream_direct>
<WriteH8=>Stream_direct>
<WriteD32=>Stream_direct>
<WriteD24=>Stream_direct>
<WriteD16=>Stream_direct>
<WriteD8=>Stream_direct>
<WriteB32=>Stream_direct>
<WriteB24=>Stream_direct>
<WriteB16=>Stream_direct>
<WriteB8=>Stream_direct>
WriteRegs
#EndTable
DATA3Stream_Enable (&81940)
#Parent Stream_
No parameters

VDUStream will claim the Write character vector and sit around waiting for characters to be printed. These are stacked in the modules temporary RMA space until the main application is called via <Wimp_Poll=>Wimp:Wimp_Poll>. Characters found to have been written to the RMA buffer are squirted into VDUStreams resizable application memory during null events.

This call can be stacked to any level, but the stream will not be released until n <Stream_Disable>s have been called, or one <Stream_Reset>.
DATA�Stream_Disable (&81941)
#Parent Stream_
No parameters

This swi decrements the claim count and releases WrchV if it is zero. Subsequent text will appear as normal if the stream is released.
DATASStream_Kill (&81942)
#Parent Stream_
No parameters

Stream_Kill will set a flag internally to prevent <Stream_Enable> from being handled in the usual way. All calls to Stream_Enable will be ignored. This allows one piece of code which calls another routine or routines to prevent debugging being generated from the called routines.DATAeStream_UnKill (&81943)
#Parent Stream_
No parameters

Allows access to <Stream_Enable> again.DATA�Stream_Intercept (&81944)
#Parent Stream_
No parameters

All printable characters will be intercepted by VDUstream when the stream is enabled rather than being passed on to the default handler.DATA�Stream_NoIntercept (&81945)
#Parent Stream_
No parameters

Passes character codes on to the next interrupt handler on the WrchV as
normal. Reverses effect of <Stream_Intercept>.DATAtStream_ShowCodes (&81946)
#Parent Stream_
No parameters

Show control codes as [##] values when intercepted.DATA�Stream_NoCodes (&81947)
#Parent Stream_
No parameters

Ignore all control codes received. Reverses the effect of <Stream_ShowCodes>.DATAmStream_Reset (&81948)
#Parent Stream_
No parameters

Throws away all stacked calls to <Stream_Enable> and releases the WrchV. This should be used incase of emmergency. (ie when a client application has crashed and not called <Stream_Disable>. You will notice this by error boxes with no text in them appearing along with the desktop rendering sprites only)
DATA�Stream_FlushText (&81949)
#Parent Stream_
No parameters

Throws away the current text in the application space and RMA.
DATAJDirect stream drivers
#Parent Stream_
VduStream 1.09 onwards provides direct stream access so that applications can send text to the stream when the operating system <OS:OS_WriteC> is being intercepted by someone else earlier in the chain. eg during printing.

The following direct swis are provided:
#Indent 1
Stream_WriteC	: Write R0 charater to the stream
Stream_Write0	: Write null terminated string. R0=ptr
Stream_WriteS	: Write in line string.
Stream_WriteN	: Write counted string. R0=ptr, R1=number
Stream_NewLine	: Write newline

Stream_WriteTxx	: Write r0 as characters. "." replaces non-alphanumeric
Stream_WriteHxx	: Write hex conversion of R0
Stream_WriteDxx	: Write decimal conversion of R0
Stream_WriteBxx	: Write binary conversion of R0

#Indent
Where xx is 32, 24, 16, or 8 depending on the number of bits to display.
DIR$��(GF������!Root�HF����،�
Version�IF���C����Load�KF���=���memoryload`PF����⌥�PlayQF���^댥�Stop�RF���<_Pause@SF���6Ō��Stereo�WF����ˌ��SetPos�YF���kԌ��ReadPos4[F�������PlayNote�^F�����ETuneInfo<cF������<SoundInfoxgF�������ReadSampleTable$jF����ō�cWriteSampleTable�oF���L]��Lock�uF���8R��LUnlock�vF���"q���MuteChanneltxF���΁��/RestoreChannel�yF������Speed�{F������Volume�}F���Mٍ�DTranslateVolumeF����BUpdateDataH�F�������NoteTable@�F�������commands�F����G��ErrorsԔF���?�SoundBlockDATA�Tracker
#Parent !Root
#Prefix Tracker_
#Table Columns 2
<Version>
<Load>
<MemoryLoad>
<Play>
<Stop>
<Pause>
<Stereo>
<SetPos>
<ReadPos>
<PlayNote>
<TuneInfo>
<SoundInfo>
<ReadSampleTable>
<Lock>
<Unlock>
<MuteChannel>
<RestoreChannel>
<Speed>
<Volume>
<WriteSampleTable>
<TranslateVolume>
<UpdateData>
#EndTable

Other information :
#Indent 3
<Note translation table=>Tracker_NoteTable>
<Tracker commands=>Tracker_Commands>
<Errors>DATA
Tracker_Version  (&43200)
#Parent Tracker_
=>	R0 =	version number*100  (ie. for v1.23 = 123)

Use this call to ensure that the TrackerModule installed is a recent enough version to support the SWI's you wish to use. Versions 4.00 onwards incorporate the SWI's.
DATA�Tracker_Load  (&43201)
#Parent Tracker_
=>	R0 =	pointer to filename of soundtracker/tracker module
\<=	R0 preserved

This call will claim memory from the RMA and load the specified tune module, initialise the sound system, and set the playroutine in pause mode. You must then use <Tracker_Play> to start the tune playing. The command *PlayMod calls this routine, and then <Tracker_Play>.

An error will be generated if the module cannot be loaded or not enough memory can be claimed.
DATA�Tracker_MemoryLoad  (&43202)
#Parent Tracker_
=>	R0 =	pointer to first word of soundtracker/tracker module in memory (NB must be word-aligned)
	R1 =	length of module in bytes
\<=	R0 and R1 preserved

This call can be used by a non-multitasking application to specify an area of memory as a tune module, and thereby remove the need for a seperate file to hold a tune, and there is no need to claim a large amount of RMA space. Once this SWI is called, the module will be treated as if it was loaded in the module's own workspace.
When a soundtracker module is loaded, the pattern data is converted to Tracker format data (except for volumes which remain 0-64), so  for the purposes of editing, as long as <Tracker_ReadPos>/<Tracker_WriteSampleTable> are used, the module can be considered as a Tracker module. When <Tracker_Stop>/*PlayStop is called, the data is converted back.

Important: You must tell the TrackerModule to forget the module if the memory will be overwritten, otherwise the module may crash. (*PlayStop or <Tracker_Stop>)

NB: This call will not work for programs running under the desktop if the module is loaded in user memory.DATA�Tracker_Play  (&43203)
#Parent Tracker_
This call will restart a tune after it has been paused or loaded with the <Tracker_Load> or <Tracker_MemoryLoad> SWI.
DATA�Tracker_Stop  (&43204)
#Parent Tracker_
This performs the same actions as *PlayStop. Using *PlayStop or this SWI is the only way to get the trackermodule to release the memory taken up by the tune module, or to force it to forget the address of a module if it has been loaded with <Tracker_MemoryLoad>. If the module is soundtracker and has been loaded with <Tracker_MemoryLoad>, calling this SWI or *PlayStop will convert the data back to the original format.
DATA_Tracker_Pause  (&43205)
#Parent Tracker_
This performs the same actions as *PlayPause.
DATA�Tracker_Stereo  (&43206)
#Parent Tracker_
=>	R0 = Stereo setting (0-4) or -1 to read current setting

\<=	If R0>=0 on entry:
	  R0 preserved
	If R0=-1 on entry:
	  R0 = current PlayStereo setting
	  R1 = pointer to 8-byte stereo position table

This performs the same actions as *PlayStereo, with R0 passed as a parameter. If R0 is set to 4 on entry, then the stereo settings will be unaltered whenever a module is loaded or killed, and disables any stereo commands in tracker modules. This is to allow interfacing programs to provide their own stereo options, or to allow adjustment to the stereo positions while tracker tunes are playing (which have default stereo settings stored as part of the tune).

Alternatively, if R0=-1 on entry, R0 will be the last parameter passed to this SWI or the *PlayStereo command, and R1 points to an 8-byte table (one byte per channel) which is updated every time either a tune starts; this SWI or *PlayStereo is called with a parameter of 0-3; or if a stereo command is executed in a Tracker tune. The byte will be in the range of 1-7 (where 1 is full left, 7 is full right, and 4 is centre). Some Tracker tunes may contain stereo settings out of range.
DATA�Tracker_SetPos  (&43207)
#Parent Tracker_
=>	R0 = New sequence position (0-127 max)
	R1 = Event (0-63 max)
\<=	R0 preserved

This performs the same actions as *PlayPos, except that the event with the pattern can be specified (0-63 normally). If an event number higher than the number of events in the current pattern is specified, the pattern will begin at event 0.

If there is no tune currently loaded, an error is generated.
DATA�Tracker_ReadPos  (&43208)
#Parent Tracker_
=>	R0 =	Current position in sequence table (0-127 max)
	R1 =	Current position in pattern (0-63 max)
	R2 =	Maximum position in sequence table

This performs the same actions as *PlayPos with no parameters, but also returns the current position in the current pattern (in case some applications need to synchronize events with the tune being played).DATA�Tracker_PlayNote  (&43209)
#Parent Tracker_
=>	R0 =	Sound channel to sound note on (1-8 max)
	R1 =	Tracker format note number (1-36)
	R2 =	Sample to play (1-36)
	R3 =	Volume (0-255) [Tracker volume even if soundtracker tune loaded].
\<=	R0-R3 preserved
	If tune not paused then C flag set otherwise C flag cleared.

If there is no tune loaded, an error will be generated.

It plays one of the samples which are part of the paused tune at a given pitch (1=low, 36=high) and volume (0=silent, 255=loud). If any of the values are out of range, an error will be reported.
The number of sound channels that can be used depends on the module loaded (soundtracker modules will always use 4 voices, whereas Tracker modules can use up to 8). Use <Tracker_TuneInfo> to find out the maximum number of voices if you intend to play more than one note at a time.

NB: This call should be avoided if possible, unless the purpose is to hear each sample seperately.
DATAETracker_TuneInfo  (&4320A)
#Parent Tracker_
\<=	R0 =	Sequence table length (1-128)
	R1 =	Number of voices (1-8)
	R2 =	Current speed (1-15)
	R3 =	Pointer to tune name (terminated by 0, max length 32 chars)
	R4 =	Pointer to author's name (0 terminated, max length 32 chars) or zero if soundtracker format module (not applicable)
	R5 =	Address of currently loaded tune module
           
If the tune is paused, the C flag is set, otherwise the C flag is cleared. If there is no tune loaded, R0 is set to zero, and R1-R5 are preserved.

This call provides miscellaneous information about the tune currently loaded.

You should not need to directly access the tune module (using the address passed in R5), because all information is available via the various SWI's, and soundtracker format modules will have been converted partially to Tracker format when loaded (and therefore in an unknown format). This information is provided if, for example, multi-tasking players/editors need to know if the tune currently playing is running from ordinary RMA, or the player's/editor's own workspace.
DATA<Tracker_SoundInfo  (&4320B)
#Parent Tracker_
=>	R0 =	Pointer to word-aligned 256 byte block to hold <sound data=>Tracker_Soundblock>
\<=	R0 preserved

	If the tune is paused, the C flag will be set, otherwise the C flag will be cleared.

If there is no tune loaded an error will be generated.

This call is only provided for advanced uses of the trackermodule, and involves information of a highly technical nature. It is advised that you do not use this call if you can avoid it.

The call will transfer the current contents of the sound voice info table to the location pointed to by R0. 256 bytes (64 words) will be transferred in total (8 words per sound channel), regardless of the number of voices actually active.

When a note is played and then ends, word 6 of the appropriate channel is zeroed. The sound routines will only try and play the sample if this word is non-zero.

When a tune is paused, the block is saved and overwritten with zeros. When the tune is restarted, the old contents are restored, so that the samples will continue to play from the same point.
DATA�Tracker_ReadSampleTable  (&4320C)
#Parent Tracker_
=>	R0 =	Sample number (1-36)
\<=	R0 preserved
	R1 =	Pointer to sample name (0-terminated, max length 22 chars) 
	R2 =	Sample volume (0-255, 255=maximum volume, 0=silent) (or for sound tracker 0-64, 64=max vol.) 
	R3 =	Sample length (bytes)
	R4 =	Repeat offset (bytes)
	R5 =	Repeat length (bytes)
	R6 =	Address of raw sample data

This call returns all relevant information about the specified sample. 

If there is no tune loaded, an error will be generated.

If the sample number is out of range (for example, if reading sample 16 on a 15-instrument module), R1 and R6 will point to a zero, and R2-R5 will contain a zero.
DATAcTracker_WriteSampleTable  (&43213)
#Parent Tracker_
=>	R0 =	Sample number (1-36)
	R1 =	New sample volume (0-255/0-64) or -1 to leave unchanged.
	R2 =	Repeat offset (bytes) or -1 to leave unchanged.
	R3 =	Repeat length (bytes) or -1 to leave unchanged.

You should use this SWI if you wish to alter the sample data without needing to know the relevant module format. Sample length is not alterable, because the occasions when this is necessary (eg. loading new sample in) need direct manipulation of the module in memory anyway, and problems occur when the sample length is set above the actual length.

Versions between 3.00 and 4.05 copied the sample information into a more convenient format when the module was initialised, and so altering the data directly would have had no effect (causing problems for editors which needed to do this..).

Should you wish to alter any other aspect of the module directly which might affect the playroutine (ie. number of voices), you should call <Tracker_UpdateData>.

An error is generated if:
#Indent 2
#Tab
�	No module is loaded
�	The sample number to change exceeds the max. of the format (ie. 15/31/36)
�	The relevant information is out of range (ie. vol > [64 or 255])
�	A combination of repeat offset and repeat length would cause the player to loop outside the sample limit.
#Indent

This SWI is part of the locking system.
DATATracker_Lock  (&4320D)
#Parent Tracker_
=>	R0 =	locking code (passed in R4 to SWI's)

This SWI and the corresponding <Tracker_Unlock> SWI are provided to prevent user intervention with any of the features of the module when this would be undesirable for any multi-tasking applications using the module (for example issuing a *PlayStop command). By calling this SWI, an application can gain complete control of the module, but as a result, this feature must be used carefully, because the module cannot then be unlocked unless the code specified in the lock SWI is known (and if not, the module must be re-initialised).

When the module is locked, calling any commands or SWI's which alter anything (such as changing the current play position, loading or killing tunes, playing notes) will cause an error, but SWI's returning information will function as normal. For the application which is responsible for the locking to be able to use the affected SWI's, R4 must be set to the locking code (passed in R0) before any of the affected SWI's is called (no commands will work even if the locking code is known).

If the TrackerModule is already 'locked' when this SWI is called, an error will be generated. It is advisable to avoid using this call unless absolutely neccessary.

The restricted commands are:
*PlayMod, *PlayPause, *PlayStart, *PlayPos, *PlayStereo, *PlayStop, *PlayVolume.

The restricted SWI's :
<Tracker_Load>, <Tracker_MemoryLoad>, <Tracker_Play>, <Tracker_Stop>, <Tracker_Stereo>, <Tracker_SetPos>, <Tracker_PlayNote>, <Tracker_Volume>.
DATALTracker_Unlock  (&4320E)
#Parent Tracker_
=>	R0 =	locking code (specified in Tracker_Lock)

This SWI should be called to unlock the module after it has been locked with <Tracker_Lock>. If the value passed in R0 is different to the locking code given in the lock SWI, or the module has not been locked, an error is generated.DATA�Tracker_MuteChannel  (&4320F)
#Parent Tracker_
=>	R0 =	channel to mute (1-8)

This SWI allows you to turn off selected channels while leaving all the other channels unaffected. The channels can be turned back on by using the <Tracker_RestoreChannel> SWI.

No error is generated if the channel number is higher than the number of channels actually being used by the TrackerModule.DATA/Tracker_RestoreChannel  (&43210)
=>	R0 = channel to turn on (1-8)

This SWI will reverse the effect of a <Tracker_MuteChannel> SWI, and turn the selected channel back on.

No error is generated if the channel number is higher than the number of channels actually being used by the TrackerModule.DATATracker_Speed  (&43211)
#Parent Tracker_
=>	R0 =	new speed setting (0-3)

This SWI will select the future sample rate and overall pitch to cater for VIDC enhancers and 8-channel tunes, taking effect immediately if a tune is currently playing.

For details of the different options see the command *PlaySpeed. This SWI is not included in the locking system because it was only introduced in version 4.04, and some programs may have already been written which use the locking system but don't control the sample speed/pitch etc. DATATracker_Volume  (&43212)
#Parent Tracker_
=>	R0 =	new overall volume (0-127) or -1 to read volume
<=	R0 =	old volume

This SWI will set the overall volume of any tunes playing by subtracting (254-volume*2) from the volume of any sample playing. This takes effect immediately, and also affects samples which are in mid-play.  Calling the SWI with R0=-1 will return the current volume in R0. You can use this SWI to provide smooth fade-outs and fade-ins, for example.

This SWI is part of the locking system.
DATADTracker_TranslateVolume  (&43214)
#Parent Tracker_
=>	R0 =	Soundtracker volume to convert (0-64)
<=	R0 =	Logarithmic volume (0-255), 255=max.

This SWI will convert a soundtracker volume (as returned by <Tracker_ReadSampleTable> when a soundtracker tune is playing) into a Tracker format logarithmic volume (0-255).
DATABTracker_UpdateData  (&43215)
#Parent Tracker_
This is really an editor SWI which you should call whenever you alter one of the following, so that the module can update its data:-
#Indent 2
�	Number of voices (and therefore pattern length)
�	Sample length/load new sample
�	Music length
�	Stereo settings (Tracker)
DATA�Note translation table
\#	Note	Sample period
#LINE
1	C -1	&358
2	C#-1	&328
3	D -1	&2FA
4	D#-1	&2D0
5	E -1	&2A6
6	F -1	&280
7	F#-1	&25C
8	G -1	&23A
9	G#-1	&21A
10	A -1	&1FC
11	A#-1	&1E0
12	B -1	&1C5
13	C -2	&1AC
14	C#-2	&194
15	D -2	&17D
16	D#-2	&168
17	E -2	&153
18	F -2	&140
19	F#-2	&12E
20	G -2	&11D
21	G#-2	&10D
22	A -2	&FE
23	A#-2	&F0
24	B -2	&E2
25	C -3	&D6
26	C#-3	&CA
27	D -3	&BE
28	D#-3	&B4
29	E -3	&AA
30	F -3	&A0
31	F#-3	&97
32	G -3	&8F
33	G#-3	&87
34	A -3	&7F
35	A#-3	&78
36	B -3	&71
DATA�Tracker and Soundtracker commands
In all tunes, there are special commands which have a type (0-&F for amiga, 0-9 & A-Z for Tracker) and data (usually presented as a hex byte, ie. &XX), which is sometimes treated as two seperate nibbles (ie. arpeggio).
A list of the commands found in Tracker/STracker tunes is as follows:

Command	 Effect
#LINE
0 (both)	Arpeggio -
		note2=<base note=>Tracker_NoteTable>+(first digit of data) semitones
		note3= " " +(second ""	 ") "
	Play note3 for one vsync, then note2, base note, note3, note2 and then the base note to achieve a chord effect (ie. C-2 with command 0 data '&47' (hex) would play a major arpeggio of C-2, E-2, G-2.If the speed is less than 6, the arpeggio will be cut short.

1 (both)	Pitch slide (portamento up) -
	While the command is playing, DECREMENT the sample period by \<parameter> (0-15 usually). This has the effect of INCREASING the pitch smoothly without restarting the sample. Note that the pitch gained by a fixed change to the sample period is not constant over the 3 octaves.

2 (both)	Pitch slide (portamento down) -
	Like command 1 but slides the pitch down.

3 (amiga only)	Portamento -
	Sounds similar to commands 1 & 2, but behaves differently. When you use command 3 with a note specified, the note is not played, but the pitch of the note is set as the 'goal' of the portamento. Then, whenever a command 3 comes up, the pitch is automatically slided in the appropriate direction by the value last given as a parameter for command 3, until the 'goal' is met, and further command 3's will have no effect.

4 (amiga only)	Vibrato -
	This causes the volume to rise and fall in a warbling effect. The first digit gives the speed of the volume change (1=slow, &F=fast), and the second digit gives the magnitude of the vibrato. The vibrato is created by subtracting a sinusoidally varying amount from the volume of the channel.

5,6,7 (amiga)	Combinations of the volume and pitch slides (Not implemented)

9 (amiga only)	Set sample offset (Not implemented).

A (amiga)	Volume slide -
	If the first nibble is non-zero, add this value to the current volume every vsync, else subtract the second nibble in a similar fashion.

G, H (Tracker)	Volume slide up, down -
	These commands are the same as the A command on the amiga, but take a byte parameter.

B (amiga)	Position jump -
J (Tracker)	When this command is met, jump to position \<parameter> in song.

B (Tracker)	Break pattern -
	Equivalent to amiga command D

C (amiga)	Set volume -
V (Tracker)	Alters the current volume of the channel to the value specified (0-64 amiga, 0-255 arc). Volume 0 means mute sound.

D (amiga)	Break pattern -
B (Tracker)	When this command is encountered, the pattern is ended, and the next pattern jumped to.

E (amiga)	Various commands (ie. h/w filter commands) [Not implemented].

E (Tracker)	Set stereo -
	Set the stereo position (1-7) of the current sound channel
	(1-8).

F (amiga)	Set speed -
S (Tracker)	Sets the speed (number of vsyncs between events) to parameter.
DATA�Errors generated by TrackerModule
Error	Name	Meaning
#LINE
&43200	No tune loaded        	An operation was attempted which requires a tune to be loaded into memory before hand using *PlayMod or <Tracker_Load>.
&43201	Sequence position out of range	The sequence position given with *PlayPos or SWI <Tracker_SetPos> was higher than the actual number of patterns in the song.
&43202	No room for module    	The trackermodule could not claim enough RMA workspace to load the module. To get more memory, quit basic to the supervisor prompt, and retry. If you are using the desktop instead, remove an application and retry.
&43203	Channel number out of range	The sound channel number was not a value between 1 and the number of sound channels used for that particular tune.
&43204	Sample number out of range	The sample number was not within the range of 1-36.
&43205	Note number out of range	The note number was not within the range of 1-36.
&43206	Volume out of range	The volume was not within the range of 0-255
&43207	Module already locked	<Tracker_Lock> was called when the module was already locked. The module can only be unlocked when the application in control of the module issues <Tracker_Unlock>.
&43208	Unlock failed	<Tracker_Unlock> was called but either the wrong locking code was specified, or the module was not locked at the time.
&43209	TrackerModule in use	An attempt was made to execute one of the restricted commands or SWI's while the module was locked (see <Tracker_Lock>)
&4320A	Speed not implemented	<Tracker_Speed> was called with R0 outside the range of values currently accepted.
&4320B	Bad sample looping	Values of repeat offset/repeat length would cause sample to loop outside its limit.
DATATrackerModule sound data block
Offset	Data
#LINE
0	The current pitch accumulator. (shift right 16 bits to get the actual byte offset into the sample being played).
4	The current pitch increment (added to accumulator after every byte filled). This is obtained using internal tables given the sample period (word 7)
8	The sample loop offset (given in bytes). When the routine reaches the end of a sample or the sample length, the accumul- ator is loaded with this value shifted left 16 bits (ie. to give a byte offset). If this is a zero value, the sample will stop instead of looping.
12	The sample length / repeat length (in bytes). The routine checks every 4 bytes filled to see if the current accumulator exceeds this value when shifted right 16 bits. (See above)
16	The sample number (1-36).
20	The current volume (0-255). This value is subtracted from every byte filled, therefore 0 = maximum volume and 255 = silent. NB This is the reverse of the normal volume command.
24	This is the tracker format note number of the sample being played (1-36, 1=C octave 1 36=B octave 3). The arpeggio command makes use of this word. If this word is zero, no sound will be played.
28	This is a copy of the sample period (from which the pitch increment value is calculated), and is used by the portamento commands. The range of the sample period is from 1 to hex &400 (although the portamento commands have smaller limits in practice).
32	Word 0 of sound channel 2...
36	Word 1 of sound channel 2...  etc. 
     
etc until word 8 of sound channel 8
DIR$�G���Pn%�!Root�G����m%Validate�G�����m%�EncryptܞG����n%"WhoIs�G���~�m%userdata�G����9n%VSetUIDd�G���0�m%�ReadUID�G���n�m%cReadPIDDATA�Users
#Parent !Root
#Prefix Users_
#Table Columns 3
<Validate>
<WhoIs>
<Encrypt>
<SetUID>
<ReadUID>
<ReadPID>
#EndTable

This module is currently under development.
It provides various calls to allow a multi-user system on top of RiscOS.
DATAUsers_Validate
#Parent Users_
=>	R0 =	pointer to login name
	R1 =	block to hold <user data=>users_userdata> (1024 bytes recommended)
<=	block at R1 updated, or error if not known

This SWI is used to read the password database in {/}Unix:etc.passwd{/}.
DATA�Users_Encrypt
#Parent Users_
=>	R0 =	pointer to ctrl terminated string
<=	string at R0 updated

This SWI is used to encrypt a password. The encryption technique is not guarenteed secure and was thrown together very quickly.
DATA"Users_WhoIs
#Parent Users_
=>	R0 =	uid number
	R1 =	block to hold <user data=>users_userdata> (1024 bytes recommended)
<=	block at R1 updated, or error if not known

This SWI is used to read the password database in {/}Unix:etc.passwd{/} to convert a uid number to a block of data.
DATAUser data block
Offset	Contents
#Line
&0	user id (uid)
&4	group id (gid)
&8	pointer to shell name
&C	pointer to <encrypted=>Users_Encrypt> password
&10	pointer to login name
&14	pointer to user name
&18	pointer to home directory (asterisk translated to colon)
DATAVUsers_SetUID
#Parent Users_
=>	R0 =	uid number
	R1 =	pointer to password, or 0 to ignore password

This SWI is used to set the current process' uid. If the password is incorrect, or the user is not root then this call will cause an error, leaving the user in the previous uid. The {fCode}su{f} command uses this call to change uid's.
DATA�Users_ReadUID
#Parent Users_
<=	R0 =	uid number
	R1 =	current gid number

This SWI is used to read the current process' uid and gid.
DATAcUsers_ReadPID
#Parent Users_
<=	R0 =	pid number

This SWI is used to read the current pid.
DIR$,,��F���K��@!RootDATA@VProtect
#Parent !Root
#Prefix VProtect_
FI
OF
LU
MM
CF
DIR$,,�G����n}�W!RootDATAWWimpHack
#Parent !Root
#Prefix WimpHack_
#Table Columns 2
ResizeIcon
#EndTable
DIR$,,t�F���(�qd!RootDATAdWimpKey
#Parent !Root
#Prefix WimpKey_
#Table Columns 1
CodeToString
StringToCode
#EndTable
DIR$,,�F���M�b!RootDATAbABCLib
#Parent !Root
#Prefix ABCLib_
#Table Columns 2
Init
Register
Profile
WAC
#EndTable
DIR$x�F���(�M�!Root�F�������Menu��F�����MEndMenuȨF�����MOption�F����MDash�F���m�MCommand(�F���p_�MdEnumerate��F���0��M�MemoryDATA�Director
#Parent !Root
#Prefix Director_
#Table Columns 2
<Menu>
<EndMenu>
<Option>
<Dash>
<Command>
<Enumerate>
<Memory>
#EndTable
DATA�Director command SWI equivilents
#Parent Director_
=>	R0 = pointer to line

The SWIs :
#Indent 2
<Director_Menu>
<Director_EndMenu>
<Director_Option>
<Director_Dash>
<Director_Command>
#Indent

are directly equivilent to their OSCLI command counterparts.

These are defined because processing star commands is very slow and in dynamic menus especially it is important that items can be added to menus quickly.
DATA#Include Director_MenuDATA#Include Director_MenuDATA#Include Director_MenuDATA#Include Director_MenuDATAdDirector_Enumerate  (&4A105)
Enumerates lists held by director

=>	R0 =	pointer to block or to start use :
	 	  0 = stored menus
	 	  1 = displayed menus
	 	  2 = icons
	 	  3 = filters

<=	R0 = new pointer to block (0 for end)
	R1 = pointer to name of block

Dynamic menus to view these lists and act on them can be found on Director's main menu.
DATA�Director_Memory  (&4A106)
Returns the memory used by director

<=	R0 =	module size (constant)
	R1 =	main workspace size (constant)
	R2 =	total size of all allocated blocks
	R3 =	number of blocks allocated
	R4 =	dynamic area size (0 for no dynamic area)
	R5 =	bytes free in dynamic area
	R6 =	largest block in dynamic area

A dynamic menu to display this information can be found on Director's main menu.
DIR$,,T�G�����g!RootDATAgEasyFS
#Parent !Root
#Prefix EasyFS_
#Table Columns 2
LockerOp
SetFonts
MessageState
#EndTable
DIR$,,�F���9��;!RootDATA;HelixBasic
#Parent !Root
#Prefix HelixBasic_
Setup
DIR$,,P�F���f�!RootDATALargerSupport
#Parent !Root
#Prefix LargerSupport_
#Table Columns 2
WriteShift
ReadFastMove
EnableFilter
DisableFilter
ReadWindowsOpened
ReadPollWordAddress
Reorganise
FindLeft
FindRight
FindUp
FindDown
FindNone
CopySprite
ReadBackdropCommandTail
ReadRegister
#EndTable
DIR$,,��G�������!RootDATA�PCDevHelp
#Parent !Root
#Prefix PCDevHelp_
#Table Columns 2
Init
RegisterIO
RegisterMem
RegisterDMA
RegisterEvent
RegisterConfig
RegisterHPC
GetStructAddr
#EndTable
DIR$,,p�G�������!RootDATA�PCIO
#Parent !Root
#Prefix PCIO_
#Table Columns 2
LPTInit
LPTSetCallback
COMInit
COMSetCallback
COMSetRate
COMSetByteFormat
COMSetModem
COMTransmit
COMGetStatus
COMReceive
LPTReadPort
#EndTable
DIR$,,h�G������h!RootDATAhPCMem
#Parent !Root
#Prefix PCMem_
#Table Columns 2
SetMem
FillPTE
GetMemTbl
ShowInfo
#EndTable
DIR$DIR$,,�F���}��&!RootDATA&Translator
#Parent !Root
#Prefix Translator_
#Table Columns 2
MakeMaps
SetVariable
ReadVariable
UnpackPre
Unpack
SetPalette
Rotate
MirrorX
MirrorY
ClosestToRGB
DMA
PixelFreq
CalcTrans
Palette
MoveWords
ExchangeWords
WriteWords
TaskStart
TaskQuit
Heckbert
CorrectCol
CalcRange
#EndTable
DIR$,,\�G����l}�|!RootDATA|ZapJRF
#Parent !Root
#Prefix ZapJRF_
#Table Columns 2
RegisterScriptDirectives
DeRegisterScriptDirectives
#EndTable
DIR$,,�F���a��Z!RootDATAZZapRedraw
#Parent !Root
#Prefix ZapRedraw_
#Table Columns 2
RedrawArea
GetPaletteEntry
RedrawRaster
ConvertBitmap
PrepareDataLine
AddCursor
FindCharacter
MoveBytes
CachedCharSize
ConvBitmapChar
CreatePalette
InsertChar
ReadSystemChars
ReverseBitmaps
ReadVduVars
GetRectangle
AddVduBitmaps
CacheFontChars
SpriteSize
RedrawWindow
#EndTable
DATAEMiscellaneous SWIs
#Parent StrongHelp:!Menu
#Postfix _
Computer Concepts :
#Indent 2
#Table Columns 3
<ABI>
<ABCLib>
<AudioManager>
<AWRender>
<ColourExtend>
<DitherExtend>
<DocumentManager>
<FontDraw>
<GDraw>
<GSpriteExtend>
<Hyphenator>
<ImageExtend>
<Impulse>
<OLE>
<PocketFS>
<PocketLink>
<Spell>
<Stream>
<StreamSquash>
<WimpKey>
#EndTable

#Indent 0
Acorn utilities :
#Indent 3
#Table Columns 4
<CompressJPEG>
<DragAnObject>
<FrontEnd>
MakePSFont
RemotePrinterSupport
<ROMCache>
#EndTable

#Indent 0
John Kortink :
#Indent 3
#Table Columns 4
<Borders>
<Creator>
<FileBuffer>
<LZW>
<LZWB>
<LZWD>
<MakeGIF>
<Translator>
#EndTable

#Indent 0
Miscellaneous :
#Indent 3
#Table Columns 4
<AEH=>AEHModule:!Root>
<ArcFS>
<ArcFSMemMan>
<ARCTOOLS>
<CAIFS>
<Director>
<Diss>
<DSym>
<EasyFS>
<Euclid>
<ProFiler=>Filer_>
<Gdbm>
<HelixBasic>
<Interface>
<IZipFS>
<LargerSupport>
<LineEditor>
<NetMonitor>
<MoDel>
<NH>
PCSupport
<PCIO>
<PCMem>
<PCDevHelp>
<PPADriver>
<QTM>
<ReadMail>
<Spch>
<SparkFS>
<Tracker>
<VProtect>
<WimpExt=>WimpExt:!Root>
<WimpHack>
<ZapRedraw>
<ZapJRF>
#EndTable
0.99DATA�Misc SWIs manual
#Align Centre
{fh3}Miscellaneous SWIs manual{f}
#line
#Align Left
This manual is part of a collection comprising the main public domain programming reference. The other manuals in the series are :
#Indent 2
#Postfix :!Root
<OS>		The base operating system stuff
<Wimp>		The desktop part of the operating system
<InetSWIs>	Internet based SWIs
<InetSocket>	Internet socket calls
<MiscSWIs>	Miscellaneous SWIs
<VDU>		VDU commands
<Toolbox>	Toolbox (by Niel Bingham)
#Indent

For comments, suggestions and submissions for these, please mail Justin Fletcher <\<gerph@innocent.com\>=>#URL mailto:gerph@innocent.com> who is currently moderating the collection. The primary location for these manuals will be <http://freenet.barnet.ac.uk/manuals/=>#URL http://freenet.barnet.ac.uk/manuals/>.

Click <here=>.hist103> for history information.
#
#Subpage hist100
History for Misc v1.00
#Align Right
{/}10 Oct 1997{/}
#Align Left
�	Changed all the bits around so that the main window looks a little more like the other manuals
�	Added some LineEditor documentation

<Next history=>.hist101>
#Subpage hist101
History for Misc v1.01
#Align Right
{/}15 Nov 1997{/}
#Align Left
�	Lots of changes from Dave Thomas; some AppEngine docs, CompressJPEG and SparkFS SWIs from his own manuals
�	DDEUtils bug fixes

#Tab
<Previous history=>.hist100>	<Next history=>.hist102>
#Subpage hist102
History for Misc v1.02
#Align Right
{/}20 Dec 1997 - 15 Jan 1998{/}
#Align Left
�	Added some Speak SWIs
�	DDEUtils moved to Wimp
�	Added real Speak documentation from Johnathan Duddington.

#Tab
<Previous history=>.hist101>	<Next history=>.hist103>
#Subpage hist103
History for Misc v1.03
#Align Right
{/}22 Mar 1998{/}
#Align Left
�	Misc minor changes

#Tab
<Previous history=>.hist102>
DIR$��P�G����2��3!RootH�H�����+dCodecOp��H�����+�Heap��H���V�+�SocketOpx�H���o�+�StringOpDATA�AppEngine Module
#Prefix AppEngine_
#Sprite 0,0 !appengine
#Indent 5
{*}AppEngine Module{*}
0.06 (13 Sep 1997)
#Line
#Table Columns 2
ResourceOp
<StringOp>
WindowOp
IconOp
DateOp
<SocketOp>
<CodecOp>
URLOp
MemoryOp
<Heap>
#EndTable
#Indent
DIR$dd��G����_���3!Root��G����!��90��G������$1DATA�AppEngine_CodecOp  (&4D946)
#Wrap off
=>	R0 =	<reason code=>.reasons>
	other registers are reason code dependent

<=	R0 preserved
	other registers are reason code dependent
#Wrap

This call provides operations to encode and decode data into various encoded formats.
#Subpage reasons
AppEngine_CodecOp reason codes
#Wrap off
R0	Action
#Line
0	<Encode data into a Base64 string=>AppEngine_CodecOp0>
1	<Decode Base64 data into a string=>AppEngine_CodecOp1>
#Wrap
DATA9AppEngine_CodecOp 0  (&4D946)
#Parent AppEngine_CodecOp
=>	R0 =	0
	R1 =	pointer to input data
	R2 =	length of input data (no more than 189 bytes)

<=	R0, R1, R2 preserved
	R3 =	pointer to Base64-encoded string

Encodes data into a Base64 string.

This call is used to encode small amounts of data into the 7-bit MIME Base64 encoded format, for use in Internet applications.

Since the output is a string, limited to a maximum of 255 characters you must ensure that you supply no more than 189 bytes of input.  This is because for every three bytes of input, the encoder generates four bytes of output and also strings of certain lengths are suffixed with '=' characters which reduces the maximum input length more.

The exact method for detemining the output string length is: ( ( in_length * 4 / 3 ) + 3 ) AND NOT 3
DATA$AppEngine_CodecOp 1  (&4D946)
#Parent AppEngine_CodecOp
=>	R0 =	1
	R1 =	pointer to Base64-coded input data
	R2 =	length of input data (no more than 340 bytes)

<=	R0, R1, R2 preserved
	R3 =	pointer to decoded string

Decodes Base64 data into a string.

This call is used to decode small amounts of MIME Base64 encoded data into a string, for use in internet applications.

Since the output is a string, limited to a maximum of 255 characters you must ensure that you supply no more than 340 bytes of input.  This is because for every four bytes of input, the encoder generates three bytes of output.

The method for detemining the output string length is not detailed here as it cannot be easily calculated without access to the input data.

This SWI is not suitable for decoding non-ASCII data.
DIR$����G���%Q�M3!root�G����6���0��G���|4���1��G����1��;2�G����.��3,�G���4,��-4\�G���<F��'MainDATAMAppEngine_Heap  (&4D949)
#Wrap off
=>	R0 = <reason code=>.reasons>
	other registers are reason code dependent

<=	R0 preserved
	other registers are reason code dependent
#Wrap

This call provides a <garbage collecting heap manager=>appengine_heapmain>.
#Subpage reasons
AppEngine_Heap reason codes
#Wrap off
R0	Action
#Line
0	<creates a new heap=>AppEngine_Heap0>
1	<deletes a heap=>AppEngine_Heap1>
2	<claims a block of memory from a heap=>AppEngine_Heap2>
3	<releases a block of memory from a heap=>AppEngine_Heap3>
4	<resizes a block of memory in a heap=>AppEngine_Heap4>
#Wrap
DATA�AppEngine_Heap 0  (&4D949)
#Parent AppEngine_Heap
=>	R0 =	0
	R1 =	pointer to address to create heap at (usually =HIMEM),
	 	or zero to create a dynamic area for the heap
	R2 =	pointer to a name for the dynamic area (if R1=0)

<=	R1 =	pointer to heap

This call is used to create a new heap, either at the end of application memory or in a new dynamic area.

The heap manager will automatically claim the required amount of memory from the free pool to set up the heap structure.
DATA�AppEngine_Heap 1  (&4D949)
#Parent AppEngine_Heap
=>	R0 =	1
	R1 =	pointer to heap

<=	R1 =	0 (i.e. heap to return)

This call is used to delete the specified heap.  All memory associated with the heap is returned to the free pool.
DATA;AppEngine_Heap 2  (&4D949)
#Parent AppEngine_Heap
=>	R0 =	2
	R1 =	pointer to heap
	R2 =	size of block required (bytes)

<=	R1 =	pointer to anchor

This call is used to claim a block of memory from the heap.

The size of the block claimed will always be rounded up to at least the nearest multiple of four bytes.

The call returns a pointer to a word holding the address of the block, so in BASIC terms block_address%=!anchor%.  Blocks can move about in response to *any* heap operation, so you must ensure your block_address% is updated after any heap operation.
DATAAppEngine_Heap 3  (&4D949)
#Parent AppEngine_Heap
=>	R0 =	3
	R1 =	pointer to heap
	R2 =	pointer to anchor

<=	R1 =	0 (i.e. anchor to return)

This call is used to release a block of memory from the heap, and return the resultant free memory back to the free pool.
DATA-AppEngine_Heap 4  (&4D949)
#Parent AppEngine_Heap
=>	R0 =	4
	R1 =	pointer to heap
	R2 =	pointer to anchor
	R3 =	bytes to be added or removed from the end of the specified block (a signed integer)

<=	R1 =	-1 for success, 0 for failure

This call is used to add (R3 positive) or remove (R3 negative) memory to/from the end of the specified block.

If adding to a block, then on return R1 holds a value indicating whether the operation was successful or not.

If removing from a block, then the resultant free memory is returned back to the free pool.

Note that as with the claim operation, block sizes are rounded *up* to at least the nearest multiple of four bytes.  This means that if you try to remove, say, 3 bytes from a block (R3 = -3) then *nothing* will be removed since -3 is rounded up to zero.
DATA'AppEngine_Heap  (&4D949)
#Parent AppEngine_
Introduction

AppEngine provides a �garbage collecting� heap manager.  This is unlike RISC OS's own <OS_Heap=>OS:OS_Heap> heap manager in that it ensures any unused memory inside the heap is returned to the free memory pool.

This is achieved by allowing blocks claimed from the heap to �float� (move about within the heap) and by referencing each of the blocks indirectly via a fixed address known as an �anchor�.  Doing this allows the heap manager to squeeze out any free space from the heap without this affecting the client application.

Any heap operation can cause the blocks� position in memory to move.

One difference between this heap manager and others is that this one never allows gaps of free space to appear inbetween the blocks.  As soon as any free space is created, then the heap manager will rearrange the heap such that the block of free space is removed.  This means that the heap is always kept at its smallest possible size.

Anchors

Anchors are located at the base of the heap immediately before the blocks.  Initially the heap manager allocates enough space for eight anchors and hence eight heap-managed blocks.  If you claim a ninth block, then the heap manager will make space for eight more anchors, and so on.  However (in this version) this memory is *not* automatically returned to the free pool.

For this reason it is strongly recommended that you should maintain a �blocks_allocated� counter in your own heap interface code, and when it becomes zero, you should delete the heap.  When a claim for a block is made and blocks_allocated is zero, you should (re-)create the heap.

Warnings

i.	When the heap manager is active and is residing at the top of your application's slot, you should *never* use Wimp_SlotSize (or END= in	BASIC since that calls Wimp_SlotSize).  Neither should you attempt to store anything above the heap.

ii.	Executable code may not be contained in dynamic areas, so you should avoid keeping code in a heap-managed block.

iii.	The internal structure of the heap will not be documented here.  To ensure future compatibility you should only use the defined software interfaces.

Notes

i.	The heap manager is very frugal, it doesn�t align blocks or block sizes to 16-byte boundaries as some others do.

ii.	It is written in 100% hand-crafted assembler and I've optimised certain parts of it for the StrongARM, despite not owning one. (In fact it was written on my 2Mb ARM 2 A3000. :-)

iii.	It is coded to work if using memory above 2Gb, which I understand will happen if you have 128Mb or more memory (this remains untested).

Example
{fCode}
REM Create a heap residing above BASIC's workspace
SYS "AppEngine_Heap",0,HIMEM,"" TO ,heap%

REM Claim a 2000 byte block
SYS "AppEngine_Heap",2,heap%,2000 TO ,anchor%

REM Find the base address of the block
address%=!anchor%

REM Add 48 bytes to the end of the block
SYS "AppEngine_Heap",4,heap%,anchor%,48 TO ,success%

REM Delete the block
SYS "AppEngine_Heap",3,heap%,anchor% TO ,anchor%

REM Delete the heap
SYS "AppEngine_Heap",1,heap% TO ,heap%
{f}
DIR$��<�G���B��3!root��G����n��0��G���m��+1�G����k��	2 �G����j��3,�G���Y��I4DATA�AppEngine_SocketOp  (&4D945)
#Wrap off
=>	R0 = <reason code=>.reasons>
	other registers are reason code dependent

<=	R0 preserved
	other registers are reason code dependent
#Wrap

This call provides operations to control file descriptors, which are requried to use the <Socket_Select=>InetSocket:Socket_Select> SWI.

A file descriptor is a block of 32 bytes (256 bits) which indicates which sockets should be checked for activity.

Note: The Acorn C Socket library provides equivalents of this SWI in headerfile macros.
#Subpage reasons
AppEngine_SocketOp reason codes
#Wrap off
R0	Action
#Line
0	<clears a file descriptor=>AppEngine_SocketOp0>
1	<copies one file descriptor to another=>AppEngine_SocketOp1>
2	<sets a bit within a file descriptor=>AppEngine_SocketOp2>
3	<clears a bit within a file descriptor=>AppEngine_SocketOp3>
4	<tests whether a bit within a file descriptor is set=>AppEngine_SocketOp4>
#Wrap
DATAAppEngine_SocketOp 0  (&4D945)
#Parent AppEngine_SocketOp
=>	R0 =	0
	R1 =	pointer to block of 32 bytes to become a file descriptor

<=	R0, R1 preserved

This call is used to clear the specified block of 32 bytes so that it may be used as a file descriptor block.
DATA+AppEngine_SocketOp 1  (&4D945)
#Parent AppEngine_SocketOp
=>	R0 =	1
	R1 =	pointer to destination file descriptor
	R2 =	pointer to source file descriptor

<=	R0, R1, R2 preserved

This call is used to copy one file descriptor block to another (or memory to be used as a new file descriptor).
DATA	AppEngine_SocketOp 2  (&4D945)
#Parent AppEngine_SocketOp
=>	R0 =	2
	R1 =	bit to set (0-255)
	R2 =	pointer to file descriptor

<=	R0, R1, R2 preserved

This call is used to set a bit within a file descriptor indicating that the respective socket is active.
DATAAppEngine_SocketOp 3  (&4D945)
#Parent AppEngine_SocketOp
=>	R0 =	3
	R1 =	bit to set (0-255)
	R2 =	pointer to file descriptor

<=	R0, R1, R2 preserved

This call is used to clear a bit within a file descriptor indicating that the respective socket is active.
DATAIAppEngine_SocketOp 4  (&4D945)
#Parent AppEngine_SocketOp
=>	R0 =	4
	R1 =	bit to test (0-255)
	R2 =	pointer to file descriptor

<=	R0, R2 preserved
	R1 =	-1 if the bit was set, or 0 if it was not set

This call is used to test if a bit within a file descriptor is set, indicating whether the respective socket is active.
DIR$��,�G������ҋ3!Root��G������g0 �G����ё�X1x�G����	���10`�G���%��m12�G������13�G���G���\14DG���r���2G�������3�G���Q���}4@G������}5�G��������6�G�������[7�	G���!���8G���8~��9DATA�AppEngine_StringOp  (&4D941)
#Wrap off
=>	R0 = <reason code=>.reasons>
	other registers are reason code dependent

<=	R0 preserved
	other registers are reason code dependent
#Wrap

This call provides various operations to deal with ASCII strings.

<More info=>.more>.
#Subpage more
AppEngine_StringOp information
This call provides various operations to deal with ASCII strings.

Most (if not all) of the calls place their result within AppEngine's workspace and return a pointer to the string within the workspace.  For this reason, you must always copy the string to somewhere else before calling StringOp again - if you don't do that then further calls to StringOp will overwrite the workspace, destroying the string.

All strings are stored in the same style as BASIC, i.e. with CR (13) as the terminating character.  As with BASIC, they are limited to a maximum of 256 characters, including terminator (although this may change later on).  Typically you will use the operations in this way:
	
{fCode:SYS "AppEngine_StringOp",1,source% TO ,,string$}
	
Input strings can be terminated by any control character, unless otherwise stated.
#Subpage reasons
AppEngine_StringOp reason codes
#Wrap off
R0	Action
#Line
0	<reads a string from memory (LF terminated)=>AppEngine_StringOp0>
1	<reads a string from memory (control terminated)=>AppEngine_StringOp1>
2	<shortens a string, adding an ellipsis on the left=>AppEngine_StringOp2>
3	<shortens a string, adding an ellipsis on the right=>AppEngine_StringOp3>
4	<converts a string to lower-case characters=>AppEngine_StringOp4>
5	<converts a string to upper-case characters=>AppEngine_StringOp5>
6	<tests whether a string is a valid integer number=>AppEngine_StringOp6>
7	<strips leading spaces and tabs from a string=>AppEngine_StringOp7>
8	<compares two strings=>AppEngine_StringOp8>
9	<joins two strings=>AppEngine_StringOp9>
10	<returns the leafname from a path string=>AppEngine_StringOp10>
11	returns the branchname from a path string (not yet implemented)
12	<substitutes arguments into a string=>AppEngine_StringOp12>
13	<returns the length of a string=>AppEngine_StringOp13>
14	<copies a string=>AppEngine_StringOp14>
#Wrap
DATAgAppEngine_StringOp 0  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	0
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input�s terminator
	R2 =	pointer to read string (up to 255 chars)

This call converts an LF-terminated string in memory into a CR-terminated string in the module's internal workspace.
DATAXAppEngine_StringOp 1  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	1
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input�s terminator
	R2 =	pointer to read string (up to 255 chars)

This call converts a string in memory into a CR-terminated string in the module's internal workspace.
DATA�AppEngine_StringOp 10  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	10
	R1 =	pointer to address to read string from
	R2 =	directory separator character, typically '.' or '/' (ASCII code)

<=	R0, R2 preserved
	R1 =	pointer to character after the input's terminator
	R3 =	pointer to output string (up to 255 chars)

This call takes an input path string (e.g. �ADFS::HD4.$.Sounds.Wave�) and returns what follows the last instance of the separator character (in this case, �Wave�).
DATAmAppEngine_StringOp 12  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	12
	R1 =	pointer to template string, containing '%0' up to '%3'.
	R3 =	string to substitute for '%0' or 0 for no string
	R4 =	string to substitute for '%1' or 0 for no string
	R5 =	string to substitute for '%2' or 0 for no string
	R6 =	string to substitute for '%3' or 0 for no string

<=	R0, R3, R4, R5, R6 preserved
	R1 =	pointer to character after the template string's terminator
	R2 =	pointer to output string (up to 255 chars)

This call takes an input template string and substitutes another string where an identifier �%0�..�%3� appears.
DATAAppEngine_StringOp 13  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	13
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	length of string

This call determines the length of a string, in characters.
DATA\AppEngine_StringOp 14  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	14
	R1 =	pointer to address to read string from
	R2 =	pointer to address to copy string to

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to character after the output's terminator

This copies a string from one location to another.
DATA�AppEngine_StringOp 2  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	2
	R1 =	pointer to address to read string from
	R2 =	length of output string (maximum of 255, \<3 is undefined)

<=	R0, R2 preserved
	R1 =	pointer to character after the input�s terminator
	R3 =	pointer to output string (up to 255 chars)

This call copies a string, truncating the left-hand side and prefixing an ellipsis (�...�) if it's longer than the specified size.
DATA�AppEngine_StringOp 3  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	3
	R1 =	pointer to address to read string from
	R2 =	length of output string (maximum of 255, \<3 is undefined)

<=	R0, R2 preserved
	R1 =	pointer to character after the input�s terminator
	R3 =	pointer to output string (up to 255 chars)

This call copies a string, truncating the right-hand side and appending an ellipsis (�...�) if it�s longer than the specified size.
DATA}AppEngine_StringOp 4  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	4
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to output string (up to 255 chars)

This call converts a string in memory into a CR-terminated string, using only lower-case characters, in the module's internal workspace.
DATA}AppEngine_StringOp 5  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	5
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to output string (up to 255 chars)

This call converts a string in memory into a CR-terminated string, using only upper-case characters, in the module's internal workspace.
DATA�AppEngine_StringOp 6  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	6
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	TRUE (-1) or FALSE (0) for valid or invalid respectively

This call reads a string from memory, if it finds that the string contains non-numeric characters then it will return FALSE.  If it finds that the string contains only numeric characters, then it will return TRUE.
DATA[AppEngine_StringOp 7  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	7
	R1 =	pointer to address to read string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to output string (up to 255 chars)

This call converts an input string which contains leading space and tab characters to one without them.DATAAppEngine_StringOp 8  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	8
	R1 =	pointer to address to read string from
	R2 =	pointer to address to read second string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to character after the second input's terminator
	R3 =	-1 for string 1 \< string 2
	 	0 for string 1 = string 2
	 	1 for string 1 > string 2

This call compares two strings and returns an integer representing the relationship of the two strings (less than, equal, greater than).
DATA�AppEngine_StringOp 9  (&4D941)
#Parent AppEngine_StringOp
=>	R0 =	9
	R1 =	pointer to address to read first string from
	R2 =	pointer to address to read second string from

<=	R0 preserved
	R1 =	pointer to character after the input's terminator
	R2 =	pointer to character after the second input's terminator
	R3 =	pointer to output string (up to 255 chars)

This call takes two strings and returns the second string joined to the first.
DIR$���H���o���3!Root@H����<�3!InfoPH���'���3MiscH�������3Misc0�G����z�3Misc1�H���p��3Misc2�H������3Misc3�H���`��|3Misc4G���w���3Misc5�H����a��3Say�H���
m�k3SayWG�����a3StopdH���㨹�3ReadyH������3Misc6DATA�Speak
#Parent !Root
#Prefix Speak_
#Table Columns 2
<Ready>
<Misc>
<Say>
<SayW>
<Stop>
Pitch
Speed
WordGap
PitchRange
#EndTable
#Line
<Info on module=>Speak_!Info>
DATASpeak
#Parent Speak_
Module name:	Speak
Author:		Johnathan Duddington
Version:	2.09 (23 Jul 1997)
#Line
The Speak module provides facilities to make simple lines of text into spoken words. This documentation was provided with his permission. Many thanks to him.
DATA�Speak_Misc  (&4AD82)
#Parent Speak_
=>	R0 =	reason code
		  0	<return version=>Speak_Misc0>
		  1	<register=>Speak_Misc1>
		  2	<deregister=>Speak_Misc2>
		  3	<convert to phonemes=>Speak_Misc3>
		  4	<reload word dictionary=>Speak_Misc4>
		  5	<read voice names=>Speak_Misc5>
		  6	<set current voice=>Speak_Misc6>
<=	dependant on reason code

This SWI is called to perform miscellaneous operations on the Speak module.
DATA�Speak_Misc 0
#Parent Speak_Misc
=>	R0 =	0 (read version)
<=	R0 =	version major number as integer (eg 2)

This SWI returns the major part of the version of the Speak module.DATASpeak_Misc 1
#Parent Speak_Misc
=>	R0 =	1 (register)
<=	R0 =	number of registered clients

This SWI is used to register with the Speak module. All applications should use this to when they start to use the system and call <degregister=>Speak_Misc2> when they finish.DATA�Speak_Misc 2
#Parent Speak_Misc
=>	R0 =	2 (deregister)
<=	R0 =	number of registered clients

This SWI is used to deregister with the Speak module. If nobody else is using it, the module will be killed.
DATASpeak_Misc 3
#Parent Speak_Misc
=>	R0 =	3 (convert to phonemes)
	R1 =	pointer to zero terminated text string
<=	R0 =	pointer to string

This SWI is used to convert text into a list of phonemes. The returned buffer will be valid until the next call.
DATA|Speak_Misc 4
#Parent Speak_Misc
=>	R0 =	4 (reload word dictionary)

This SWI is used to reload the word dictionary.
DATA�Speak_Misc 4
#Parent Speak_Misc
=>	R0 =	4 (read voice names)
<=	R0 =	pointer to zero terminated array of name pointers

This SWI is used to read the names of the currently known voices which Speak can use.
DATA�Speak_Say  (&4AD83)
#Parent Speak_
=>	R0 =	pointer to zero terminated string
	R1 =	number of chracters to say, or 0 for all
	R2 =	bits 0-7 :	voice to use
	 	others		reserved

This SWI is called to speak a line of text. If an number of characters is given then it will be taken into account and if only a single word has been given then each individual letter spoken, otherwise the whole line will be spoken.
DATAkSpeak_SayW  (&4AD84)
#Parent Speak_
As <Speak_Say> but does not return until speech has completed.
DATAaSpeak_Stop  (&4AD85)
#Parent Speak_
This SWI is called to stop Speak from saying things.
DATA�Speak_Ready  (&4AD80)
#Parent Speak_
<=	R0 =	0 if still speaking, -1 if idle

This SWI is called to check whether speech is still being output or not.
DATA�Speak_Misc 4
#Parent Speak_Misc
=>	R0 =	4 (set current voice)
	R1 =	new voice number

This SWI is used to set the current voice number.
00000000  48 45 4c 50 28 00 00 00  fd 00 00 00 ff ff ff ff  |HELP(...........|
00000010  2c 00 00 00 00 fd ff ff  00 00 00 00 40 0a 00 00  |,...........@...|
00000020  00 01 00 00 00 00 00 00  24 00 00 00 44 49 52 24  |........$...DIR$|
00000030  48 0a 00 00 48 0a 00 00  74 0a 00 00 47 fc ff ff  |H...H...t...G...|
00000040  c9 28 47 d4 84 00 00 00  33 00 00 00 00 00 00 00  |.(G.....3.......|
00000050  21 50 72 65 00 00 00 00  f8 0a 00 00 48 fd ff ff  |!Pre........H...|
00000060  92 4c 6e 27 ad 03 00 00  13 00 00 00 00 00 00 00  |.Ln'............|
00000070  21 72 6f 6f 74 00 00 00  a8 0e 00 00 48 fd ff ff  |!root.......H...|
00000080  3f ae 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |?..+,...........|
00000090  41 42 49 5f 00 00 00 00  44 0f 00 00 48 fd ff ff  |ABI_....D...H...|
000000a0  94 ae 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
000000b0  41 72 63 46 53 4d 65 6d  4d 61 6e 5f 00 00 00 00  |ArcFSMemMan_....|
000000c0  40 10 00 00 48 fd ff ff  08 af 80 2b 74 01 00 00  |@...H......+t...|
000000d0  13 01 00 00 00 00 00 00  41 72 63 46 53 5f 00 00  |........ArcFS_..|
000000e0  d0 1a 00 00 48 fd ff ff  9b b1 80 2b 50 00 00 00  |....H......+P...|
000000f0  13 01 00 00 00 00 00 00  41 52 43 54 4f 4f 4c 53  |........ARCTOOLS|
00000100  5f 00 00 00 0c 1d 00 00  48 fd ff ff d7 b2 80 2b  |_.......H......+|
00000110  70 00 00 00 13 01 00 00  00 00 00 00 41 75 64 69  |p...........Audi|
00000120  6f 4d 61 6e 61 67 65 72  5f 00 00 00 74 22 00 00  |oManager_...t"..|
00000130  48 fd ff ff cc b3 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000140  00 00 00 00 41 57 52 65  6e 64 65 72 5f 00 00 00  |....AWRender_...|
00000150  64 23 00 00 48 fd ff ff  33 b4 80 2b 2c 00 00 00  |d#..H...3..+,...|
00000160  13 01 00 00 00 00 00 00  42 6f 72 64 65 72 73 5f  |........Borders_|
00000170  00 00 00 00 ec 23 00 00  48 fd ff ff 9d b4 80 2b  |.....#..H......+|
00000180  2c 00 00 00 13 01 00 00  00 00 00 00 43 41 49 46  |,...........CAIF|
00000190  53 5f 00 00 e4 24 00 00  48 fd ff ff 11 b5 80 2b  |S_...$..H......+|
000001a0  2c 00 00 00 13 01 00 00  00 00 00 00 43 6f 6c 6f  |,...........Colo|
000001b0  75 72 45 78 74 65 6e 64  5f 00 00 00 68 25 00 00  |urExtend_...h%..|
000001c0  48 fd ff ff 7b b5 80 2b  90 00 00 00 13 01 00 00  |H...{..+........|
000001d0  00 00 00 00 43 6f 6d 70  72 65 73 73 4a 50 45 47  |....CompressJPEG|
000001e0  5f 00 00 00 b0 2e 00 00  47 fb ff ff ca 5f 7d 82  |_.......G...._}.|
000001f0  45 08 00 00 13 00 00 00  00 00 00 00 43 72 65 61  |E...........Crea|
00000200  74 65 48 65 6c 70 00 00  f8 36 00 00 48 fd ff ff  |teHelp...6..H...|
00000210  af b7 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
00000220  43 72 65 61 74 6f 72 5f  00 00 00 00 cc 37 00 00  |Creator_.....7..|
00000230  48 fd ff ff 2b b8 80 2b  2c 00 00 00 13 01 00 00  |H...+..+,.......|
00000240  00 00 00 00 44 69 73 73  5f 00 00 00 f0 38 00 00  |....Diss_....8..|
00000250  48 fd ff ff 8b b8 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000260  00 00 00 00 44 69 74 68  65 72 45 78 74 65 6e 64  |....DitherExtend|
00000270  5f 00 00 00 94 3b 00 00  48 fd ff ff 69 b9 80 2b  |_....;..H...i..+|
00000280  2c 00 00 00 13 01 00 00  00 00 00 00 44 6f 63 75  |,...........Docu|
00000290  6d 65 6e 74 4d 61 6e 61  67 65 72 5f 00 00 00 00  |mentManager_....|
000002a0  50 3c 00 00 48 fd ff ff  e5 b9 80 2b 2c 00 00 00  |P<..H......+,...|
000002b0  13 01 00 00 00 00 00 00  44 72 61 67 41 6e 4f 62  |........DragAnOb|
000002c0  6a 65 63 74 5f 00 00 00  c0 3c 00 00 48 fd ff ff  |ject_....<..H...|
000002d0  63 ba 80 2b 24 04 00 00  13 01 00 00 00 00 00 00  |c..+$...........|
000002e0  44 53 79 6d 5f 00 00 00  3c 62 00 00 48 fd ff ff  |DSym_...<b..H...|
000002f0  aa c3 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
00000300  44 79 6e 61 6d 69 74 65  5f 00 00 00 64 63 00 00  |Dynamite_...dc..|
00000310  48 fd ff ff 1c c4 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000320  00 00 00 00 45 75 63 6c  69 64 5f 00 70 64 00 00  |....Euclid_.pd..|
00000330  48 fd ff ff e0 c4 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000340  00 00 00 00 46 69 6c 65  42 75 66 66 65 72 5f 00  |....FileBuffer_.|
00000350  40 65 00 00 48 fd ff ff  53 c5 80 2b f4 01 00 00  |@e..H...S..+....|
00000360  13 01 00 00 00 00 00 00  46 69 6c 65 72 5f 00 00  |........Filer_..|
00000370  10 7d 00 00 45 fb ff ff  f8 e7 0e e3 9f 02 00 00  |.}..E...........|
00000380  13 00 00 00 00 00 00 00  46 69 6c 74 65 72 00 00  |........Filter..|
00000390  b0 7f 00 00 48 fd ff ff  83 c9 80 2b 2c 00 00 00  |....H......+,...|
000003a0  13 01 00 00 00 00 00 00  46 6f 6e 74 44 72 61 77  |........FontDraw|
000003b0  5f 00 00 00 28 80 00 00  48 fd ff ff 02 ca 80 2b  |_...(...H......+|
000003c0  2c 00 00 00 13 01 00 00  00 00 00 00 46 72 6f 6e  |,...........Fron|
000003d0  74 45 6e 64 5f 00 00 00  a4 80 00 00 48 fd ff ff  |tEnd_.......H...|
000003e0  58 ca 80 2b 70 01 00 00  13 01 00 00 00 00 00 00  |X..+p...........|
000003f0  47 64 62 6d 5f 00 00 00  18 8c 00 00 48 fd ff ff  |Gdbm_.......H...|
00000400  84 cc 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
00000410  47 44 72 61 77 5f 00 00  c8 8d 00 00 48 fd ff ff  |GDraw_......H...|
00000420  17 cd 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
00000430  47 53 70 72 69 74 65 45  78 74 65 6e 64 5f 00 00  |GSpriteExtend_..|
00000440  78 8e 00 00 48 fd ff ff  6d cd 80 2b 2c 00 00 00  |x...H...m..+,...|
00000450  13 01 00 00 00 00 00 00  48 79 70 68 65 6e 61 74  |........Hyphenat|
00000460  6f 72 5f 00 70 8f 00 00  48 fd ff ff b3 cd 80 2b  |or_.p...H......+|
00000470  2c 00 00 00 13 01 00 00  00 00 00 00 49 6d 61 67  |,...........Imag|
00000480  65 45 78 74 65 6e 64 5f  00 00 00 00 94 90 00 00  |eExtend_........|
00000490  48 fd ff ff 06 ce 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
000004a0  00 00 00 00 49 6d 70 75  6c 73 65 5f 00 00 00 00  |....Impulse_....|
000004b0  54 91 00 00 48 fd ff ff  4f ce 80 2b 2c 00 00 00  |T...H...O..+,...|
000004c0  13 01 00 00 00 00 00 00  49 6e 74 65 72 66 61 63  |........Interfac|
000004d0  65 5f 00 00 5c 92 00 00  48 fd ff ff 94 ce 80 2b  |e_..\...H......+|
000004e0  2c 00 00 00 13 01 00 00  00 00 00 00 49 5a 69 70  |,...........IZip|
000004f0  46 53 5f 00 88 93 00 00  48 fd ff ff ed ce 80 2b  |FS_.....H......+|
00000500  ac 01 00 00 13 01 00 00  00 00 00 00 4c 69 6e 65  |............Line|
00000510  45 64 69 74 6f 72 5f 00  6c a0 00 00 48 fd ff ff  |Editor_.l...H...|
00000520  53 d1 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |S..+,...........|
00000530  4c 5a 57 42 5f 00 00 00  e8 a0 00 00 48 fd ff ff  |LZWB_.......H...|
00000540  9e d1 80 2b 50 00 00 00  13 01 00 00 00 00 00 00  |...+P...........|
00000550  4c 5a 57 44 5f 00 00 00  2c a3 00 00 48 fd ff ff  |LZWD_...,...H...|
00000560  33 d2 80 2b 98 00 00 00  13 01 00 00 00 00 00 00  |3..+............|
00000570  4c 5a 57 5f 00 00 00 00  30 aa 00 00 48 fd ff ff  |LZW_....0...H...|
00000580  25 d3 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |%..+,...........|
00000590  4d 61 6b 65 47 49 46 5f  00 00 00 00 c8 aa 00 00  |MakeGIF_........|
000005a0  48 fd ff ff 55 d3 80 2b  2c 00 00 00 13 01 00 00  |H...U..+,.......|
000005b0  00 00 00 00 4d 6f 44 65  6c 5f 00 00 78 ab 00 00  |....MoDel_..x...|
000005c0  48 fd ff ff 97 d3 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
000005d0  00 00 00 00 4e 65 74 4d  6f 6e 69 74 6f 72 5f 00  |....NetMonitor_.|
000005e0  38 ac 00 00 48 fd ff ff  d4 d3 80 2b 2c 00 00 00  |8...H......+,...|
000005f0  13 01 00 00 00 00 00 00  4e 48 5f 00 b0 ac 00 00  |........NH_.....|
00000600  48 fd ff ff 05 d4 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000610  00 00 00 00 4f 4c 45 5f  00 00 00 00 24 ae 00 00  |....OLE_....$...|
00000620  48 fd ff ff 3a d4 80 2b  2c 00 00 00 13 01 00 00  |H...:..+,.......|
00000630  00 00 00 00 50 6f 63 6b  65 74 46 53 5f 00 00 00  |....PocketFS_...|
00000640  58 af 00 00 48 fd ff ff  79 d4 80 2b 2c 00 00 00  |X...H...y..+,...|
00000650  13 01 00 00 00 00 00 00  50 6f 63 6b 65 74 4c 69  |........PocketLi|
00000660  6e 6b 5f 00 cc b0 00 00  48 fd ff ff cf d4 80 2b  |nk_.....H......+|
00000670  2c 00 00 00 13 01 00 00  00 00 00 00 50 50 41 44  |,...........PPAD|
00000680  72 69 76 65 72 5f 00 00  70 b1 00 00 48 fd ff ff  |river_..p...H...|
00000690  0d d5 80 2b 74 04 00 00  13 01 00 00 00 00 00 00  |...+t...........|
000006a0  51 54 4d 5f 00 00 00 00  54 0f 01 00 48 fd ff ff  |QTM_....T...H...|
000006b0  47 da 80 2b d8 00 00 00  13 01 00 00 00 00 00 00  |G..+............|
000006c0  52 65 61 64 4d 61 69 6c  5f 00 00 00 18 16 01 00  |ReadMail_.......|
000006d0  48 fd ff ff 4b db 80 2b  2c 00 00 00 13 01 00 00  |H...K..+,.......|
000006e0  00 00 00 00 52 4f 4d 43  61 63 68 65 5f 00 00 00  |....ROMCache_...|
000006f0  c4 16 01 00 48 fd ff ff  87 db 80 2b ec 00 00 00  |....H......+....|
00000700  13 01 00 00 00 00 00 00  53 70 61 72 6b 46 53 5f  |........SparkFS_|
00000710  00 00 00 00 20 2f 01 00  48 fd ff ff a1 dc 80 2b  |.... /..H......+|
00000720  2c 00 00 00 13 01 00 00  00 00 00 00 53 70 63 68  |,...........Spch|
00000730  5f 00 00 00 f4 2f 01 00  48 fd ff ff d6 dc 80 2b  |_..../..H......+|
00000740  2c 00 00 00 13 01 00 00  00 00 00 00 53 70 65 6c  |,...........Spel|
00000750  6c 5f 00 00 88 31 01 00  48 fd ff ff 15 dd 80 2b  |l_...1..H......+|
00000760  2c 00 00 00 13 01 00 00  00 00 00 00 53 74 72 65  |,...........Stre|
00000770  61 6d 53 71 75 61 73 68  5f 00 00 00 8c 32 01 00  |amSquash_....2..|
00000780  48 fd ff ff 4f dd 80 2b  9c 01 00 00 13 01 00 00  |H...O..+........|
00000790  00 00 00 00 53 74 72 65  61 6d 5f 00 74 43 01 00  |....Stream_.tC..|
000007a0  48 fd ff ff 4d df 80 2b  b4 03 00 00 13 01 00 00  |H...M..+........|
000007b0  00 00 00 00 54 72 61 63  6b 65 72 5f 00 00 00 00  |....Tracker_....|
000007c0  e0 9a 01 00 48 fd ff ff  4c e4 80 2b 14 01 00 00  |....H...L..+....|
000007d0  13 01 00 00 00 00 00 00  55 73 65 72 73 5f 00 00  |........Users_..|
000007e0  58 a3 01 00 48 fd ff ff  5f e5 80 2b 2c 00 00 00  |X...H..._..+,...|
000007f0  13 01 00 00 00 00 00 00  56 50 72 6f 74 65 63 74  |........VProtect|
00000800  5f 00 00 00 c4 a3 01 00  48 fd ff ff a5 e5 80 2b  |_.......H......+|
00000810  2c 00 00 00 13 01 00 00  00 00 00 00 57 69 6d 70  |,...........Wimp|
00000820  48 61 63 6b 5f 00 00 00  48 a4 01 00 48 fd ff ff  |Hack_...H...H...|
00000830  eb e5 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
00000840  57 69 6d 70 4b 65 79 5f  00 00 00 00 d8 a4 01 00  |WimpKey_........|
00000850  48 fd ff ff 21 e6 80 2b  2c 00 00 00 13 01 00 00  |H...!..+,.......|
00000860  00 00 00 00 41 42 43 4c  69 62 5f 00 68 a5 01 00  |....ABCLib_.h...|
00000870  48 fd ff ff 54 e6 80 2b  10 01 00 00 13 01 00 00  |H...T..+........|
00000880  00 00 00 00 44 69 72 65  63 74 6f 72 5f 00 00 00  |....Director_...|
00000890  28 ac 01 00 48 fd ff ff  8b e7 80 2b 2c 00 00 00  |(...H......+,...|
000008a0  13 01 00 00 00 00 00 00  45 61 73 79 46 53 5f 00  |........EasyFS_.|
000008b0  bc ac 01 00 48 fd ff ff  bc e7 80 2b 2c 00 00 00  |....H......+,...|
000008c0  13 01 00 00 00 00 00 00  48 65 6c 69 78 42 61 73  |........HelixBas|
000008d0  69 63 5f 00 24 ad 01 00  48 fd ff ff 7b e9 80 2b  |ic_.$...H...{..+|
000008e0  2c 00 00 00 13 01 00 00  00 00 00 00 4c 61 72 67  |,...........Larg|
000008f0  65 72 53 75 70 70 6f 72  74 5f 00 00 68 ae 01 00  |erSupport_..h...|
00000900  48 fd ff ff 15 ea 80 2b  2c 00 00 00 13 01 00 00  |H......+,.......|
00000910  00 00 00 00 50 43 44 65  76 48 65 6c 70 5f 00 00  |....PCDevHelp_..|
00000920  44 af 01 00 48 fd ff ff  5a ea 80 2b 2c 00 00 00  |D...H...Z..+,...|
00000930  13 01 00 00 00 00 00 00  50 43 49 4f 5f 00 00 00  |........PCIO_...|
00000940  3c b0 01 00 48 fd ff ff  b9 ea 80 2b 2c 00 00 00  |<...H......+,...|
00000950  13 01 00 00 00 00 00 00  50 43 4d 65 6d 5f 00 00  |........PCMem_..|
00000960  d0 b0 01 00 48 fd ff ff  f1 ea 80 2b 0c 00 00 00  |....H......+....|
00000970  13 01 00 00 00 00 00 00  50 43 53 75 70 70 6f 72  |........PCSuppor|
00000980  74 5f 00 00 dc b0 01 00  48 fd ff ff 2d eb 80 2b  |t_......H...-..+|
00000990  2c 00 00 00 13 01 00 00  00 00 00 00 54 72 61 6e  |,...........Tran|
000009a0  73 6c 61 74 6f 72 5f 00  30 b2 01 00 48 fd ff ff  |slator_.0...H...|
000009b0  6b eb 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |k..+,...........|
000009c0  5a 61 70 4a 52 46 5f 00  d8 b2 01 00 48 fd ff ff  |ZapJRF_.....H...|
000009d0  a0 eb 80 2b 2c 00 00 00  13 01 00 00 00 00 00 00  |...+,...........|
000009e0  5a 61 70 52 65 64 72 61  77 5f 00 00 60 b4 01 00  |ZapRedraw_..`...|
000009f0  47 fd ff ff b7 05 13 fd  45 04 00 00 13 00 00 00  |G.......E.......|
00000a00  00 00 00 00 21 72 6f 6f  74 6f 6c 64 00 00 00 00  |....!rootold....|
00000a10  a8 b8 01 00 48 fd ff ff  1e ff 7f 2b f4 06 00 00  |....H......+....|
00000a20  03 00 00 00 00 00 00 00  61 62 6f 75 74 00 00 00  |........about...|
00000a30  9c bf 01 00 48 fd ff ff  85 ec 80 2b b4 00 00 00  |....H......+....|
00000a40  13 01 00 00 00 00 00 00  41 70 70 45 6e 67 69 6e  |........AppEngin|
00000a50  65 5f 00 00 cc 0d 02 00  48 fd ff ff 43 f3 80 2b  |e_......H...C..+|
00000a60  c8 01 00 00 13 01 00 00  00 00 00 00 53 70 65 61  |............Spea|
00000a70  6b 5f 00 00 44 41 54 41  84 00 00 00 1e 40 2d e9  |k_..DATA.....@-.|
00000a80  00 20 d0 e5 58 00 52 e3  01 00 80 02 1e 80 fd 08  |. ..X.R.........|
00000a90  00 20 d0 e5 21 00 52 e3  01 20 d0 05 78 00 52 03  |. ..!.R.. ..x.R.|
00000aa0  02 20 d0 05 32 00 52 03  03 20 d0 05 36 00 52 03  |. ..2.R.. ..6.R.|
00000ab0  1e 80 fd 18 00 30 a0 e1  01 40 a0 e1 04 10 80 e2  |.....0...@......|
00000ac0  10 00 a0 e3 21 00 02 ef  03 00 a0 61 1e 80 fd 68  |....!......a...h|
00000ad0  02 00 a0 e1 02 08 c0 e3  04 10 a0 e1 40 20 a0 e3  |............@ ..|
00000ae0  38 00 02 ef 03 00 a0 61  01 00 a0 71 1e 80 fd e8  |8......a...q....|
00000af0  21 78 32 36 00 00 00 00  44 41 54 41 ad 03 00 00  |!x26....DATA....|
00000b00  4d 69 73 63 65 6c 6c 61  6e 65 6f 75 73 20 53 57  |Miscellaneous SW|
00000b10  49 73 0a 23 50 61 72 65  6e 74 20 53 74 72 6f 6e  |Is.#Parent Stron|
00000b20  67 48 65 6c 70 3a 21 4d  65 6e 75 0a 23 50 6f 73  |gHelp:!Menu.#Pos|
00000b30  74 66 69 78 20 5f 0a 23  54 61 62 6c 65 20 43 6f  |tfix _.#Table Co|
00000b40  6c 75 6d 6e 73 20 34 0a  3c 41 42 49 3e 0a 3c 41  |lumns 4.<ABI>.<A|
00000b50  42 43 4c 69 62 3e 0a 3c  41 45 48 3d 3e 41 45 48  |BCLib>.<AEH=>AEH|
00000b60  4d 6f 64 75 6c 65 3a 21  52 6f 6f 74 3e 0a 3c 41  |Module:!Root>.<A|
00000b70  70 70 45 6e 67 69 6e 65  3e 0a 3c 41 72 63 46 53  |ppEngine>.<ArcFS|
00000b80  3e 0a 3c 41 72 63 46 53  4d 65 6d 4d 61 6e 3e 0a  |>.<ArcFSMemMan>.|
00000b90  3c 41 52 43 54 4f 4f 4c  53 3e 0a 3c 41 75 64 69  |<ARCTOOLS>.<Audi|
00000ba0  6f 4d 61 6e 61 67 65 72  3e 0a 3c 41 57 52 65 6e  |oManager>.<AWRen|
00000bb0  64 65 72 3e 0a 3c 42 6f  72 64 65 72 73 3e 0a 3c  |der>.<Borders>.<|
00000bc0  43 41 49 46 53 3e 0a 3c  43 6f 6c 6f 75 72 45 78  |CAIFS>.<ColourEx|
00000bd0  74 65 6e 64 3e 0a 3c 43  6f 6d 70 72 65 73 73 4a  |tend>.<CompressJ|
00000be0  50 45 47 3e 0a 3c 43 72  65 61 74 6f 72 3e 0a 3c  |PEG>.<Creator>.<|
00000bf0  44 69 72 65 63 74 6f 72  3e 0a 3c 44 69 73 73 3e  |Director>.<Diss>|
00000c00  0a 3c 44 69 74 68 65 72  45 78 74 65 6e 64 3e 0a  |.<DitherExtend>.|
00000c10  3c 44 6f 63 75 6d 65 6e  74 4d 61 6e 61 67 65 72  |<DocumentManager|
00000c20  3e 0a 3c 44 72 61 67 41  6e 4f 62 6a 65 63 74 3e  |>.<DragAnObject>|
00000c30  0a 3c 44 53 79 6d 3e 0a  3c 44 79 6e 61 6d 69 74  |.<DSym>.<Dynamit|
00000c40  65 3e 0a 3c 45 61 73 79  46 53 3e 0a 3c 45 75 63  |e>.<EasyFS>.<Euc|
00000c50  6c 69 64 3e 0a 3c 46 69  6c 65 42 75 66 66 65 72  |lid>.<FileBuffer|
00000c60  3e 0a 3c 46 6f 6e 74 44  72 61 77 3e 0a 3c 46 72  |>.<FontDraw>.<Fr|
00000c70  6f 6e 74 45 6e 64 3e 0a  3c 47 44 42 4d 3e 0a 3c  |ontEnd>.<GDBM>.<|
00000c80  47 44 72 61 77 3e 0a 3c  47 53 70 72 69 74 65 45  |GDraw>.<GSpriteE|
00000c90  78 74 65 6e 64 3e 0a 3c  48 65 6c 69 78 42 61 73  |xtend>.<HelixBas|
00000ca0  69 63 3e 0a 3c 48 79 70  68 65 6e 61 74 6f 72 3e  |ic>.<Hyphenator>|
00000cb0  0a 3c 49 6d 61 67 65 45  78 74 65 6e 64 3e 0a 3c  |.<ImageExtend>.<|
00000cc0  49 6d 70 75 6c 73 65 3e  0a 3c 49 6e 74 65 72 66  |Impulse>.<Interf|
00000cd0  61 63 65 3e 0a 3c 49 5a  69 70 46 53 3e 0a 3c 4c  |ace>.<IZipFS>.<L|
00000ce0  61 72 67 65 72 53 75 70  70 6f 72 74 3e 0a 3c 4c  |argerSupport>.<L|
00000cf0  69 6e 65 45 64 69 74 6f  72 3e 0a 3c 4c 5a 57 3e  |ineEditor>.<LZW>|
00000d00  0a 3c 4c 5a 57 42 3e 0a  3c 4c 5a 57 44 3e 0a 3c  |.<LZWB>.<LZWD>.<|
00000d10  4d 61 6b 65 47 49 46 3e  0a 3c 4d 6f 44 65 6c 3e  |MakeGIF>.<MoDel>|
00000d20  0a 3c 4e 65 74 4d 6f 6e  69 74 6f 72 3e 0a 3c 4e  |.<NetMonitor>.<N|
00000d30  48 3e 0a 3c 4f 4c 45 3e  0a 3c 50 43 49 4f 3e 0a  |H>.<OLE>.<PCIO>.|
00000d40  3c 50 43 4d 65 6d 3e 0a  50 43 53 75 70 70 6f 72  |<PCMem>.PCSuppor|
00000d50  74 0a 3c 50 43 44 65 76  48 65 6c 70 3e 0a 3c 50  |t.<PCDevHelp>.<P|
00000d60  6f 63 6b 65 74 46 53 3e  0a 3c 50 6f 63 6b 65 74  |ocketFS>.<Pocket|
00000d70  4c 69 6e 6b 3e 0a 3c 50  50 41 44 72 69 76 65 72  |Link>.<PPADriver|
00000d80  3e 0a 3c 50 72 6f 46 69  6c 65 72 3d 3e 46 69 6c  |>.<ProFiler=>Fil|
00000d90  65 72 5f 3e 0a 3c 51 54  4d 3e 0a 3c 52 65 61 64  |er_>.<QTM>.<Read|
00000da0  4d 61 69 6c 3e 0a 3c 52  4f 4d 43 61 63 68 65 3e  |Mail>.<ROMCache>|
00000db0  0a 3c 53 70 61 72 6b 46  53 3e 0a 3c 53 70 63 68  |.<SparkFS>.<Spch|
00000dc0  3e 0a 3c 53 70 65 61 6b  3e 0a 3c 53 70 65 6c 6c  |>.<Speak>.<Spell|
00000dd0  3e 0a 3c 53 74 72 65 61  6d 3e 0a 3c 53 74 72 65  |>.<Stream>.<Stre|
00000de0  61 6d 53 71 75 61 73 68  3e 0a 3c 54 72 61 6e 73  |amSquash>.<Trans|
00000df0  6c 61 74 6f 72 3e 0a 3c  54 72 61 63 6b 65 72 3e  |lator>.<Tracker>|
00000e00  0a 3c 55 73 65 72 73 3e  0a 3c 56 50 72 6f 74 65  |.<Users>.<VProte|
00000e10  63 74 3e 0a 3c 57 69 6d  70 45 78 74 3d 3e 57 69  |ct>.<WimpExt=>Wi|
00000e20  6d 70 45 78 74 3a 21 52  6f 6f 74 3e 0a 3c 57 69  |mpExt:!Root>.<Wi|
00000e30  6d 70 48 61 63 6b 3e 0a  3c 57 69 6d 70 4b 65 79  |mpHack>.<WimpKey|
00000e40  3e 0a 3c 5a 61 70 4a 52  46 3e 0a 3c 5a 61 70 52  |>.<ZapJRF>.<ZapR|
00000e50  65 64 72 61 77 3e 0a 23  45 6e 64 54 61 62 6c 65  |edraw>.#EndTable|
00000e60  0a 23 4c 69 6e 65 0a 23  61 6c 69 67 6e 20 63 65  |.#Line.#align ce|
00000e70  6e 74 72 65 0a 7b 2f 7d  3c 4d 69 73 63 65 6c 6c  |ntre.{/}<Miscell|
00000e80  61 6e 65 6f 75 73 20 53  57 49 73 20 6d 61 6e 75  |aneous SWIs manu|
00000e90  61 6c 3d 3e 61 62 6f 75  74 3e 2c 20 76 31 2e 30  |al=>about>, v1.0|
00000ea0  32 7b 2f 7d 0a 00 00 00  44 49 52 24 2c 00 00 00  |2{/}....DIR$,...|
00000eb0  2c 00 00 00 d4 0e 00 00  46 fd ff ff a2 fd 71 18  |,.......F.....q.|
00000ec0  6d 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |m...........!Roo|
00000ed0  74 00 00 00 44 41 54 41  6d 00 00 00 41 42 49 0a  |t...DATAm...ABI.|
00000ee0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
00000ef0  72 65 66 69 78 20 41 42  49 5f 0a 23 54 61 62 6c  |refix ABI_.#Tabl|
00000f00  65 20 43 6f 6c 75 6d 6e  73 20 31 0a 49 6e 69 74  |e Columns 1.Init|
00000f10  69 61 6c 69 73 65 0a 43  6c 6f 73 65 44 6f 77 6e  |ialise.CloseDown|
00000f20  0a 52 65 6e 64 65 72 53  6c 61 62 0a 52 65 73 65  |.RenderSlab.Rese|
00000f30  74 0a 4b 69 6c 6c 0a 23  45 6e 64 54 61 62 6c 65  |t.Kill.#EndTable|
00000f40  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00000f50  70 0f 00 00 46 fd ff ff  d0 d1 85 4d cf 00 00 00  |p...F......M....|
00000f60  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00000f70  44 41 54 41 cf 00 00 00  41 72 63 46 53 4d 65 6d  |DATA....ArcFSMem|
00000f80  4d 61 6e 0a 23 50 61 72  65 6e 74 20 21 52 6f 6f  |Man.#Parent !Roo|
00000f90  74 0a 23 50 72 65 66 69  78 20 41 72 63 46 53 4d  |t.#Prefix ArcFSM|
00000fa0  65 6d 4d 61 6e 5f 0a 23  54 61 62 6c 65 20 43 6f  |emMan_.#Table Co|
00000fb0  6c 75 6d 6e 73 20 32 0a  43 6c 61 69 6d 57 6f 72  |lumns 2.ClaimWor|
00000fc0  6b 73 70 61 63 65 0a 52  65 73 69 7a 65 57 6f 72  |kspace.ResizeWor|
00000fd0  6b 73 70 61 63 65 0a 52  65 6c 65 61 73 65 57 6f  |kspace.ReleaseWo|
00000fe0  72 6b 73 70 61 63 65 0a  43 6c 61 69 6d 46 69 6c  |rkspace.ClaimFil|
00000ff0  65 43 61 63 68 65 0a 52  65 73 69 7a 65 46 69 6c  |eCache.ResizeFil|
00001000  65 43 61 63 68 65 0a 52  65 6c 65 61 73 65 46 69  |eCache.ReleaseFi|
00001010  6c 65 43 61 63 68 65 0a  49 6e 69 74 0a 46 69 6e  |leCache.Init.Fin|
00001020  61 6c 0a 53 6c 69 64 65  0a 4c 6f 6f 6b 75 70 42  |al.Slide.LookupB|
00001030  6c 6f 63 6b 0a 23 45 6e  64 54 61 62 6c 65 0a 00  |lock.#EndTable..|
00001040  44 49 52 24 74 01 00 00  74 01 00 00 b4 11 00 00  |DIR$t...t.......|
00001050  46 fd ff ff 82 47 8c a5  b7 01 00 00 13 00 00 00  |F....G..........|
00001060  00 00 00 00 21 52 6f 6f  74 00 00 00 6c 13 00 00  |....!Root...l...|
00001070  46 ff ff ff 8b 51 8c a5  04 01 00 00 13 00 00 00  |F....Q..........|
00001080  00 00 00 00 41 72 63 68  69 76 65 49 6e 66 6f 00  |....ArchiveInfo.|
00001090  70 14 00 00 46 ff ff ff  05 68 8c a5 90 01 00 00  |p...F....h......|
000010a0  13 00 00 00 00 00 00 00  53 74 61 74 75 73 00 00  |........Status..|
000010b0  00 16 00 00 46 ff ff ff  3b a4 8b a5 8a 00 00 00  |....F...;.......|
000010c0  13 00 00 00 00 00 00 00  4f 70 65 6e 41 72 63 68  |........OpenArch|
000010d0  69 76 65 00 8c 16 00 00  46 ff ff ff 61 b4 8b a5  |ive.....F...a...|
000010e0  ac 00 00 00 13 00 00 00  00 00 00 00 43 6c 6f 73  |............Clos|
000010f0  65 41 72 63 68 69 76 65  00 00 00 00 38 17 00 00  |eArchive....8...|
00001100  46 ff ff ff a4 d4 8b a5  01 01 00 00 13 00 00 00  |F...............|
00001110  00 00 00 00 45 6e 63 72  79 70 74 69 6f 6e 00 00  |....Encryption..|
00001120  3c 18 00 00 46 ff ff ff  78 07 8c a5 c0 00 00 00  |<...F...x.......|
00001130  13 00 00 00 00 00 00 00  43 6f 6d 70 72 65 73 73  |........Compress|
00001140  69 6f 6e 00 fc 18 00 00  46 fd ff ff d7 04 8c a5  |ion.....F.......|
00001150  5d 00 00 00 13 00 00 00  00 00 00 00 63 6f 6d 70  |]...........comp|
00001160  72 65 73 73 74 79 70 65  73 00 00 00 5c 19 00 00  |resstypes...\...|
00001170  46 ff ff ff 6c 22 8c a5  aa 00 00 00 13 00 00 00  |F...l"..........|
00001180  00 00 00 00 43 72 65 61  74 65 41 72 63 68 69 76  |....CreateArchiv|
00001190  65 00 00 00 08 1a 00 00  46 ff ff ff 5e 35 8c a5  |e.......F...^5..|
000011a0  c7 00 00 00 13 00 00 00  00 00 00 00 43 6f 6d 70  |............Comp|
000011b0  61 63 74 00 44 41 54 41  b7 01 00 00 41 72 63 46  |act.DATA....ArcF|
000011c0  53 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |S.#Parent !Root.|
000011d0  23 50 72 65 66 69 78 20  41 72 63 46 53 5f 0a 23  |#Prefix ArcFS_.#|
000011e0  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
000011f0  3c 41 72 63 68 69 76 65  49 6e 66 6f 3e 0a 3c 53  |<ArchiveInfo>.<S|
00001200  74 61 74 75 73 3e 0a 3c  4f 70 65 6e 41 72 63 68  |tatus>.<OpenArch|
00001210  69 76 65 3e 0a 3c 43 6c  6f 73 65 41 72 63 68 69  |ive>.<CloseArchi|
00001220  76 65 3e 0a 3c 45 6e 63  72 79 70 74 69 6f 6e 3e  |ve>.<Encryption>|
00001230  0a 3c 43 6f 6d 70 72 65  73 73 69 6f 6e 3e 0a 3c  |.<Compression>.<|
00001240  43 72 65 61 74 65 41 72  63 68 69 76 65 3e 0a 3c  |CreateArchive>.<|
00001250  43 6f 6d 70 61 63 74 3e  0a 52 65 61 64 4f 70 74  |Compact>.ReadOpt|
00001260  69 6f 6e 73 0a 48 6f 75  72 67 6c 61 73 73 4f 6e  |ions.HourglassOn|
00001270  0a 48 6f 75 72 67 6c 61  73 73 4f 66 66 0a 53 65  |.HourglassOff.Se|
00001280  74 45 6e 63 72 79 70 74  69 6f 6e 0a 53 65 74 43  |tEncryption.SetC|
00001290  6f 6d 70 72 65 73 73 69  6f 6e 0a 41 75 74 6f 43  |ompression.AutoC|
000012a0  6f 6d 70 4f 6e 0a 41 75  74 6f 43 6f 6d 70 4f 66  |ompOn.AutoCompOf|
000012b0  66 0a 41 72 63 49 6e 66  6f 0a 4f 70 65 6e 41 72  |f.ArcInfo.OpenAr|
000012c0  63 0a 43 6c 6f 73 65 41  72 63 0a 43 72 65 61 74  |c.CloseArc.Creat|
000012d0  65 41 72 63 0a 43 6f 6d  70 61 63 74 41 72 63 0a  |eArc.CompactArc.|
000012e0  4f 62 6a 65 63 74 49 6e  66 6f 0a 52 65 61 64 42  |ObjectInfo.ReadB|
000012f0  75 66 66 65 72 53 69 7a  65 73 0a 53 65 74 52 44  |ufferSizes.SetRD|
00001300  42 53 69 7a 65 0a 53 65  74 52 41 42 53 69 7a 65  |BSize.SetRABSize|
00001310  0a 53 65 74 48 65 61 64  65 72 47 61 70 73 0a 4e  |.SetHeaderGaps.N|
00001320  61 6d 65 64 41 72 63 49  6e 66 6f 0a 47 65 74 41  |amedArcInfo.GetA|
00001330  72 63 4e 61 6d 65 0a 52  65 61 64 43 6f 6d 70 72  |rcName.ReadCompr|
00001340  65 73 73 65 64 0a 57 72  69 74 65 43 6f 6d 70 72  |essed.WriteCompr|
00001350  65 73 73 65 64 0a 45 6e  73 75 72 65 47 61 70 73  |essed.EnsureGaps|
00001360  0a 23 45 6e 64 54 61 62  6c 65 0a 00 44 41 54 41  |.#EndTable..DATA|
00001370  04 01 00 00 41 72 63 46  53 5f 41 72 63 68 69 76  |....ArcFS_Archiv|
00001380  65 49 6e 66 6f 20 20 28  26 34 33 37 43 30 29 0a  |eInfo  (&437C0).|
00001390  23 50 61 72 65 6e 74 20  41 72 63 46 53 5f 0a 3d  |#Parent ArcFS_.=|
000013a0  3e 09 52 30 20 3d 09 61  72 63 68 69 76 65 20 6e  |>.R0 =.archive n|
000013b0  75 6d 62 65 72 0a 3c 3d  09 52 30 20 3d 09 61 72  |umber.<=.R0 =.ar|
000013c0  63 68 69 76 65 20 6e 61  6d 65 20 28 6f 72 20 6e  |chive name (or n|
000013d0  75 6c 6c 20 69 66 20 6e  6f 74 20 6f 70 65 6e 29  |ull if not open)|
000013e0  0a 09 52 31 20 3d 09 61  72 63 68 69 76 65 20 70  |..R1 =.archive p|
000013f0  61 74 68 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |ath..R1 =.pointe|
00001400  72 20 74 6f 20 61 72 63  68 69 76 65 20 68 65 61  |r to archive hea|
00001410  64 65 72 73 20 28 69 6e  74 65 72 6e 61 6c 20 75  |ders (internal u|
00001420  73 65 29 0a 0a 54 68 69  73 20 53 57 49 20 67 69  |se)..This SWI gi|
00001430  76 65 73 20 74 68 65 20  6e 61 6d 65 20 61 6e 64  |ves the name and|
00001440  20 70 61 74 68 6e 61 6d  65 20 6f 66 20 74 68 65  | pathname of the|
00001450  20 61 72 63 68 69 76 65  20 77 68 6f 73 65 20 6e  | archive whose n|
00001460  75 6d 62 65 72 20 69 73  20 67 69 76 65 6e 2e 0a  |umber is given..|
00001470  44 41 54 41 90 01 00 00  41 72 63 46 53 5f 53 74  |DATA....ArcFS_St|
00001480  61 74 75 73 20 20 28 26  34 33 37 43 31 29 0a 23  |atus  (&437C1).#|
00001490  50 61 72 65 6e 74 20 41  72 63 46 53 5f 0a 3c 3d  |Parent ArcFS_.<=|
000014a0  09 52 30 20 3d 09 73 74  61 74 75 73 20 69 6e 20  |.R0 =.status in |
000014b0  66 6f 72 6d 20 26 76 76  62 62 66 66 65 65 0a 0a  |form &vvbbffee..|
000014c0  54 68 69 73 20 53 57 49  20 72 65 74 75 72 6e 73  |This SWI returns|
000014d0  20 74 68 65 20 63 75 72  72 65 6e 74 20 73 74 61  | the current sta|
000014e0  74 75 73 20 6f 66 20 41  72 63 46 53 2e 0a 0a 23  |tus of ArcFS...#|
000014f0  54 61 62 0a 62 79 74 65  09 6d 65 61 6e 69 6e 67  |Tab.byte.meaning|
00001500  0a 23 4c 69 6e 65 0a 76  76 09 46 46 20 66 6f 72  |.#Line.vv.FF for|
00001510  20 72 65 61 64 2f 77 72  69 74 65 2c 20 30 30 20  | read/write, 00 |
00001520  66 6f 72 20 72 65 61 64  20 6f 6e 6c 79 0a 62 62  |for read only.bb|
00001530  09 6e 75 6d 62 65 72 20  6f 66 20 62 69 74 73 20  |.number of bits |
00001540  66 6f 72 20 63 72 75 6e  63 68 20 2f 20 63 6f 6d  |for crunch / com|
00001550  70 72 65 73 73 20 28 30  20 6f 74 68 65 72 77 69  |press (0 otherwi|
00001560  73 65 29 0a 66 66 09 3c  63 6f 6d 70 72 65 73 73  |se).ff.<compress|
00001570  69 6f 6e 20 66 6f 72 6d  61 74 3d 3e 41 72 63 46  |ion format=>ArcF|
00001580  53 5f 63 6f 6d 70 72 65  73 73 74 79 70 65 73 3e  |S_compresstypes>|
00001590  0a 65 65 09 3c 62 69 74  73 3d 3e 2e 62 69 74 73  |.ee.<bits=>.bits|
000015a0  3e 0a 23 73 75 62 70 61  67 65 20 62 69 74 73 0a  |>.#subpage bits.|
000015b0  41 72 63 46 53 5f 53 74  61 74 75 73 20 62 69 74  |ArcFS_Status bit|
000015c0  73 0a 62 69 74 09 6d 65  61 6e 69 6e 67 20 69 66  |s.bit.meaning if|
000015d0  20 73 65 74 0a 23 4c 69  6e 65 0a 30 09 66 69 6c  | set.#Line.0.fil|
000015e0  65 73 20 77 69 6c 6c 20  62 65 20 67 61 72 62 6c  |es will be garbl|
000015f0  65 64 0a 31 2d 37 09 72  65 73 65 72 76 65 64 2e  |ed.1-7.reserved.|
00001600  44 41 54 41 8a 00 00 00  41 72 63 46 53 5f 4f 70  |DATA....ArcFS_Op|
00001610  65 6e 41 72 63 68 69 76  65 20 20 28 26 34 33 37  |enArchive  (&437|
00001620  43 32 29 0a 23 50 61 72  65 6e 74 20 41 72 63 46  |C2).#Parent ArcF|
00001630  53 5f 0a 3c 3d 09 52 30  20 3d 09 70 6f 69 6e 74  |S_.<=.R0 =.point|
00001640  65 72 20 74 6f 20 66 69  6c 65 6e 61 6d 65 0a 09  |er to filename..|
00001650  52 31 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R1 =.pointer to |
00001660  72 65 66 65 72 65 6e 63  65 20 6e 61 6d 65 0a 0a  |reference name..|
00001670  54 68 69 73 20 53 57 49  20 6f 70 65 6e 73 20 61  |This SWI opens a|
00001680  6e 20 61 72 63 68 69 76  65 2e 00 00 44 41 54 41  |n archive...DATA|
00001690  ac 00 00 00 41 72 63 46  53 5f 43 6c 6f 73 65 41  |....ArcFS_CloseA|
000016a0  72 63 68 69 76 65 20 20  28 26 34 33 37 43 33 29  |rchive  (&437C3)|
000016b0  0a 23 50 61 72 65 6e 74  20 41 72 63 46 53 5f 0a  |.#Parent ArcFS_.|
000016c0  3c 3d 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |<=.R0 =.pointer |
000016d0  74 6f 20 72 65 66 65 72  65 6e 63 65 20 6e 61 6d  |to reference nam|
000016e0  65 0a 0a 54 68 69 73 20  53 57 49 20 63 6c 6f 73  |e..This SWI clos|
000016f0  65 73 20 61 6e 20 61 72  63 68 69 76 65 2c 20 72  |es an archive, r|
00001700  65 74 75 72 6e 69 6e 67  20 61 6e 20 65 72 72 6f  |eturning an erro|
00001710  72 20 69 66 20 6e 6f 20  61 72 63 68 69 76 65 20  |r if no archive |
00001720  77 69 74 68 20 74 68 61  74 20 6e 61 6d 65 20 77  |with that name w|
00001730  61 73 20 6f 70 65 6e 2e  44 41 54 41 01 01 00 00  |as open.DATA....|
00001740  41 72 63 46 53 5f 45 6e  63 72 79 70 74 69 6f 6e  |ArcFS_Encryption|
00001750  20 20 28 26 34 33 37 43  34 29 0a 23 50 61 72 65  |  (&437C4).#Pare|
00001760  6e 74 20 41 72 63 46 53  5f 0a 3c 3d 09 52 30 20  |nt ArcFS_.<=.R0 |
00001770  3d 09 3c 65 6e 63 72 79  70 74 69 6f 6e 20 6d 65  |=.<encryption me|
00001780  74 68 6f 64 3d 3e 2e 74  79 70 65 73 3e 0a 09 52  |thod=>.types>..R|
00001790  31 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 70  |1 =.pointer to p|
000017a0  61 73 73 77 6f 72 64 20  28 75 70 20 74 6f 20 33  |assword (up to 3|
000017b0  32 20 62 79 74 65 73 29  0a 0a 54 68 69 73 20 53  |2 bytes)..This S|
000017c0  57 49 20 73 65 74 73 20  74 68 65 20 65 6e 63 72  |WI sets the encr|
000017d0  79 70 74 69 6f 6e 20 6d  65 74 68 6f 64 20 61 6e  |yption method an|
000017e0  64 20 70 61 73 73 77 6f  72 64 20 75 73 65 64 2e  |d password used.|
000017f0  0a 23 53 75 62 70 61 67  65 20 74 79 70 65 73 0a  |.#Subpage types.|
00001800  45 6e 63 72 79 70 74 69  6f 6e 20 74 79 70 65 73  |Encryption types|
00001810  0a 76 61 6c 75 65 09 6d  65 61 6e 69 6e 67 0a 30  |.value.meaning.0|
00001820  09 6e 6f 20 65 6e 63 72  79 70 74 69 6f 6e 0a 31  |.no encryption.1|
00001830  09 67 61 72 62 6c 65 64  0a 00 00 00 44 41 54 41  |.garbled....DATA|
00001840  c0 00 00 00 41 72 63 46  53 5f 43 6f 6d 70 72 65  |....ArcFS_Compre|
00001850  73 73 69 6f 6e 20 20 28  26 34 33 37 43 35 29 0a  |ssion  (&437C5).|
00001860  23 50 61 72 65 6e 74 20  41 72 63 46 53 5f 0a 3c  |#Parent ArcFS_.<|
00001870  3d 09 52 30 20 3d 09 3c  63 6f 6d 70 72 65 73 73  |=.R0 =.<compress|
00001880  69 6f 6e 20 66 6f 72 6d  61 74 3d 3e 41 72 63 46  |ion format=>ArcF|
00001890  53 5f 63 6f 6d 70 72 65  73 73 74 79 70 65 73 3e  |S_compresstypes>|
000018a0  0a 09 52 31 20 3d 09 6e  75 6d 62 65 72 20 6f 66  |..R1 =.number of|
000018b0  20 62 69 74 73 20 28 69  66 20 61 70 70 6c 69 63  | bits (if applic|
000018c0  61 62 6c 65 29 0a 0a 54  68 69 73 20 53 57 49 20  |able)..This SWI |
000018d0  73 65 74 73 20 74 68 65  20 64 61 74 61 20 63 6f  |sets the data co|
000018e0  6d 70 72 65 73 73 69 6f  6e 20 66 6f 72 6d 61 74  |mpression format|
000018f0  20 74 6f 20 62 65 20 75  73 65 64 2e 44 41 54 41  | to be used.DATA|
00001900  5d 00 00 00 41 72 63 46  53 20 43 6f 6d 70 72 65  |]...ArcFS Compre|
00001910  73 73 69 6f 6e 20 66 6f  72 6d 61 74 73 0a 63 6f  |ssion formats.co|
00001920  64 65 09 74 79 70 65 0a  23 4c 69 6e 65 0a 26 38  |de.type.#Line.&8|
00001930  32 09 53 74 6f 72 65 0a  26 38 33 09 50 61 63 6b  |2.Store.&83.Pack|
00001940  0a 26 38 38 09 43 72 75  6e 63 68 0a 26 46 46 09  |.&88.Crunch.&FF.|
00001950  43 6f 6d 70 72 65 73 73  0a 00 00 00 44 41 54 41  |Compress....DATA|
00001960  aa 00 00 00 41 72 63 46  53 5f 43 72 65 61 74 65  |....ArcFS_Create|
00001970  41 72 63 68 69 76 65 20  20 28 26 34 33 37 43 36  |Archive  (&437C6|
00001980  29 0a 23 50 61 72 65 6e  74 20 41 72 63 46 53 5f  |).#Parent ArcFS_|
00001990  0a 3c 3d 09 52 30 20 3d  09 70 61 74 68 6e 61 6d  |.<=.R0 =.pathnam|
000019a0  65 20 66 6f 72 20 6e 65  77 20 61 72 63 68 69 76  |e for new archiv|
000019b0  65 0a 0a 54 68 69 73 20  53 57 49 20 63 72 65 61  |e..This SWI crea|
000019c0  74 65 73 20 28 62 75 74  20 64 6f 65 73 20 6e 6f  |tes (but does no|
000019d0  74 20 6f 70 65 6e 29 20  61 20 6e 65 77 20 61 72  |t open) a new ar|
000019e0  63 68 69 76 65 2e 0a 0a  4e 6f 74 65 3a 20 52 65  |chive...Note: Re|
000019f0  61 64 2f 57 72 69 74 65  20 76 65 72 73 69 6f 6e  |ad/Write version|
00001a00  20 6f 6e 6c 79 2e 00 00  44 41 54 41 c7 00 00 00  | only...DATA....|
00001a10  41 72 63 46 53 5f 43 6f  6d 70 61 63 74 20 20 28  |ArcFS_Compact  (|
00001a20  26 34 33 37 43 37 29 0a  23 50 61 72 65 6e 74 20  |&437C7).#Parent |
00001a30  41 72 63 46 53 5f 0a 3c  3d 09 52 30 20 3d 09 61  |ArcFS_.<=.R0 =.a|
00001a40  72 63 68 69 76 65 20 6e  61 6d 65 20 28 6f 72 20  |rchive name (or |
00001a50  30 20 66 6f 72 20 43 53  44 29 0a 0a 54 68 69 73  |0 for CSD)..This|
00001a60  20 53 57 49 20 63 6f 6d  70 61 63 74 73 20 61 6e  | SWI compacts an|
00001a70  20 61 72 63 68 69 76 65  20 74 6f 20 72 65 6d 6f  | archive to remo|
00001a80  76 65 64 20 67 61 70 73  20 6c 65 66 74 20 62 79  |ved gaps left by|
00001a90  20 64 65 6c 65 74 69 6f  6e 73 20 61 6e 64 20 66  | deletions and f|
00001aa0  69 6c 65 20 6f 76 65 72  77 72 69 74 65 73 2e 0a  |ile overwrites..|
00001ab0  0a 4e 6f 74 65 3a 20 52  65 61 64 2f 57 72 69 74  |.Note: Read/Writ|
00001ac0  65 20 76 65 72 73 69 6f  6e 20 6f 6e 6c 79 2e 00  |e version only..|
00001ad0  44 49 52 24 50 00 00 00  50 00 00 00 20 1b 00 00  |DIR$P...P... ...|
00001ae0  47 fd ff ff 12 74 06 0c  57 00 00 00 13 00 00 00  |G....t..W.......|
00001af0  00 00 00 00 21 52 6f 6f  74 00 00 00 78 1b 00 00  |....!Root...x...|
00001b00  47 ff ff ff 12 90 06 0c  91 01 00 00 13 00 00 00  |G...............|
00001b10  00 00 00 00 41 73 73 65  6d 62 6c 65 00 00 00 00  |....Assemble....|
00001b20  44 41 54 41 57 00 00 00  41 52 43 54 4f 4f 4c 53  |DATAW...ARCTOOLS|
00001b30  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00001b40  50 72 65 66 69 78 20 41  52 43 54 4f 4f 4c 53 5f  |Prefix ARCTOOLS_|
00001b50  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
00001b60  32 0a 3c 41 73 73 65 6d  62 6c 65 3e 0a 23 45 6e  |2.<Assemble>.#En|
00001b70  64 54 61 62 6c 65 0a 00  44 41 54 41 91 01 00 00  |dTable..DATA....|
00001b80  41 52 43 54 4f 4f 4c 53  5f 41 73 73 65 6d 62 6c  |ARCTOOLS_Assembl|
00001b90  65 20 20 28 26 44 46 46  43 30 29 0a 23 50 61 72  |e  (&DFFC0).#Par|
00001ba0  65 6e 74 20 41 52 43 54  4f 4f 4c 53 5f 0a 3d 3e  |ent ARCTOOLS_.=>|
00001bb0  09 52 30 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R0 =.pointer to|
00001bc0  20 73 74 72 69 6e 67 20  74 6f 20 61 73 73 65 6d  | string to assem|
00001bd0  62 6c 65 0a 09 52 31 20  3d 09 61 64 64 72 65 73  |ble..R1 =.addres|
00001be0  73 20 77 68 65 72 65 20  74 68 65 20 69 6e 73 74  |s where the inst|
00001bf0  72 75 63 74 69 6f 6e 20  77 69 6c 6c 20 62 65 20  |ruction will be |
00001c00  70 75 74 0a 0a 3c 3d 09  52 30 20 3d 09 61 73 73  |put..<=.R0 =.ass|
00001c10  65 6d 62 6c 65 64 20 69  6e 73 74 72 75 63 74 69  |embled instructi|
00001c20  6f 6e 0a 09 52 31 20 3d  09 6c 65 6e 67 74 68 20  |on..R1 =.length |
00001c30  6f 66 20 73 74 72 69 6e  67 20 69 6e 20 52 30 20  |of string in R0 |
00001c40  61 74 20 73 74 61 72 74  0a 0a 54 68 69 73 20 63  |at start..This c|
00001c50  61 6c 6c 20 69 73 20 70  72 6f 76 69 64 65 64 20  |all is provided |
00001c60  74 6f 20 61 73 73 65 6d  62 6c 65 20 61 20 69 6e  |to assemble a in|
00001c70  73 74 72 75 63 74 69 6f  6e 20 63 6f 6e 74 61 69  |struction contai|
00001c80  6e 65 64 20 69 6e 20 74  68 65 20 73 74 72 69 6e  |ned in the strin|
00001c90  67 20 70 6f 69 6e 74 65  64 20 74 6f 20 62 79 20  |g pointed to by |
00001ca0  52 30 2e 20 54 68 65 20  61 64 64 72 65 73 73 20  |R0. The address |
00001cb0  69 6e 20 52 31 20 69 73  20 75 73 65 64 20 74 6f  |in R1 is used to|
00001cc0  20 63 61 6c 63 75 6c 61  74 65 20 74 68 65 20 64  | calculate the d|
00001cd0  65 73 74 69 6e 61 74 69  6f 6e 20 61 64 64 72 65  |estination addre|
00001ce0  73 73 20 69 6e 20 50 43  20 72 65 6c 61 74 69 76  |ss in PC relativ|
00001cf0  65 20 6f 70 63 6f 64 65  73 20 6c 69 6b 65 20 41  |e opcodes like A|
00001d00  44 52 20 6f 72 20 42 2e  0a 00 00 00 44 49 52 24  |DR or B.....DIR$|
00001d10  70 00 00 00 70 00 00 00  7c 1d 00 00 46 fd ff ff  |p...p...|...F...|
00001d20  1d 0d ee 4e 74 01 00 00  13 00 00 00 00 00 00 00  |...Nt...........|
00001d30  21 52 6f 6f 74 00 00 00  f0 1e 00 00 46 ff ff ff  |!Root.......F...|
00001d40  4e 6e ee 4e 01 01 00 00  13 00 00 00 00 00 00 00  |Nn.N............|
00001d50  41 64 64 45 76 65 6e 74  00 00 00 00 f4 1f 00 00  |AddEvent........|
00001d60  46 fd ff ff 37 33 8e a5  7d 02 00 00 13 00 00 00  |F...73..}.......|
00001d70  00 00 00 00 65 76 65 6e  74 73 00 00 44 41 54 41  |....events..DATA|
00001d80  74 01 00 00 41 75 64 69  6f 4d 61 6e 61 67 65 72  |t...AudioManager|
00001d90  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00001da0  50 72 65 66 69 78 20 41  75 64 69 6f 4d 61 6e 61  |Prefix AudioMana|
00001db0  67 65 72 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |ger_.#Table Colu|
00001dc0  6d 6e 73 20 32 0a 49 6e  66 6f 0a 52 65 73 65 74  |mns 2.Info.Reset|
00001dd0  0a 4c 69 73 74 44 72 69  76 65 72 73 0a 44 65 66  |.ListDrivers.Def|
00001de0  61 75 6c 74 73 0a 44 72  69 76 65 72 0a 53 65 6c  |aults.Driver.Sel|
00001df0  65 63 74 53 61 6d 70 6c  65 72 0a 53 61 6d 70 6c  |ectSampler.Sampl|
00001e00  65 72 53 74 61 74 75 73  0a 53 74 61 72 74 53 61  |erStatus.StartSa|
00001e10  6d 70 6c 69 6e 67 0a 53  74 6f 70 53 61 6d 70 6c  |mpling.StopSampl|
00001e20  69 6e 67 0a 44 65 73 65  6c 65 63 74 53 61 6d 70  |ing.DeselectSamp|
00001e30  6c 65 72 0a 50 6c 61 79  53 61 6d 70 6c 65 0a 46  |ler.PlaySample.F|
00001e40  69 6c 6c 42 75 66 66 65  72 0a 52 65 74 75 72 6e  |illBuffer.Return|
00001e50  43 75 72 73 6f 72 0a 4b  69 6c 6c 53 61 6d 70 6c  |Cursor.KillSampl|
00001e60  65 0a 41 64 6a 75 73 74  50 6c 61 79 0a 43 6f 6e  |e.AdjustPlay.Con|
00001e70  76 65 72 74 50 69 74 63  68 0a 53 74 65 72 65 6f  |vertPitch.Stereo|
00001e80  0a 41 74 74 61 63 68 56  6f 69 63 65 0a 53 6f 75  |.AttachVoice.Sou|
00001e90  6e 64 50 61 63 6b 65 64  0a 53 6f 75 6e 64 0a 52  |ndPacked.Sound.R|
00001ea0  65 61 64 43 43 42 0a 57  72 69 74 65 43 43 42 0a  |eadCCB.WriteCCB.|
00001eb0  50 6c 61 79 53 61 6d 70  6c 65 46 72 6f 6d 46 69  |PlaySampleFromFi|
00001ec0  6c 65 0a 51 75 65 75 65  45 76 65 6e 74 0a 3c 41  |le.QueueEvent.<A|
00001ed0  64 64 45 76 65 6e 74 3e  0a 52 65 64 69 72 65 63  |ddEvent>.Redirec|
00001ee0  74 56 49 44 43 0a 23 45  6e 64 54 61 62 6c 65 0a  |tVIDC.#EndTable.|
00001ef0  44 41 54 41 01 01 00 00  41 75 64 69 6f 4d 61 6e  |DATA....AudioMan|
00001f00  61 67 65 72 5f 41 64 64  45 76 65 6e 74 0a 23 50  |ager_AddEvent.#P|
00001f10  61 72 65 6e 74 20 21 52  6f 6f 74 0a 3d 3e 09 52  |arent !Root.=>.R|
00001f20  30 20 3d 20 3c 65 76 65  6e 74 20 6e 75 6d 62 65  |0 = <event numbe|
00001f30  72 3d 3e 41 75 64 69 6f  4d 61 6e 61 67 65 72 5f  |r=>AudioManager_|
00001f40  65 76 65 6e 74 73 3e 0a  09 52 31 20 3d 20 41 75  |events>..R1 = Au|
00001f50  64 69 6f 77 6f 72 6b 73  20 66 69 6c 65 0a 09 52  |dioworks file..R|
00001f60  32 20 3d 20 31 20 74 6f  20 63 61 63 68 65 20 69  |2 = 1 to cache i|
00001f70  6e 20 52 4d 41 0a 0a 54  68 69 73 20 53 57 49 20  |n RMA..This SWI |
00001f80  61 64 64 73 20 61 20 73  61 6d 70 6c 65 20 74 6f  |adds a sample to|
00001f90  20 61 20 70 61 72 74 69  63 75 6c 61 72 20 64 65  | a particular de|
00001fa0  73 6b 74 6f 70 20 65 76  65 6e 74 3b 20 74 68 69  |sktop event; thi|
00001fb0  73 20 6d 65 61 6e 73 20  74 68 61 74 20 77 68 65  |s means that whe|
00001fc0  6e 65 76 65 72 20 74 68  65 20 65 76 65 6e 74 20  |never the event |
00001fd0  6f 63 63 75 72 73 20 74  68 65 20 73 61 6d 70 6c  |occurs the sampl|
00001fe0  65 20 77 69 6c 6c 20 62  65 20 70 6c 61 79 65 64  |e will be played|
00001ff0  2e 00 00 00 44 41 54 41  7d 02 00 00 45 76 65 6e  |....DATA}...Even|
00002000  74 20 6e 75 6d 62 65 72  73 0a 4e 75 6d 62 65 72  |t numbers.Number|
00002010  09 45 76 65 6e 74 0a 23  4c 69 6e 65 0a 31 09 41  |.Event.#Line.1.A|
00002020  70 70 6c 69 63 61 74 69  6f 6e 20 73 61 76 65 20  |pplication save |
00002030  66 69 6c 65 0a 33 09 41  70 70 6c 69 63 61 74 69  |file.3.Applicati|
00002040  6f 6e 20 6c 6f 61 64 20  66 69 6c 65 0a 35 09 46  |on load file.5.F|
00002050  69 6c 65 72 20 64 6f 75  62 6c 65 2d 63 6c 69 63  |iler double-clic|
00002060  6b 20 66 69 6c 65 0a 39  09 50 61 6c 65 74 74 65  |k file.9.Palette|
00002070  20 63 68 61 6e 67 65 0a  31 30 09 44 65 73 6b 74  | change.10.Deskt|
00002080  6f 70 20 73 61 76 65 0a  2d 34 09 53 79 73 74 65  |op save.-4.Syste|
00002090  6d 20 62 65 65 70 0a 2d  37 09 46 61 74 61 6c 20  |m beep.-7.Fatal |
000020a0  77 69 6d 70 20 65 72 72  6f 72 0a 2d 38 09 57 69  |wimp error.-8.Wi|
000020b0  6d 70 20 65 72 72 6f 72  0a 2d 39 09 4b 65 79 70  |mp error.-9.Keyp|
000020c0  72 65 73 73 3a 20 53 70  61 63 65 0a 2d 31 30 09  |ress: Space.-10.|
000020d0  4b 65 79 70 72 65 73 73  3a 20 52 65 74 75 72 6e  |Keypress: Return|
000020e0  0a 2d 31 31 09 4b 65 79  70 72 65 73 73 3a 20 4f  |.-11.Keypress: O|
000020f0  74 68 65 72 0a 26 34 30  30 43 31 09 4d 6f 64 65  |ther.&400C1.Mode|
00002100  20 63 68 61 6e 67 65 0a  26 34 30 30 43 32 09 54  | change.&400C2.T|
00002110  61 73 6b 20 73 74 61 72  74 69 6e 67 0a 26 34 30  |ask starting.&40|
00002120  30 43 33 09 54 61 73 6b  20 71 75 69 74 74 69 6e  |0C3.Task quittin|
00002130  67 0a 26 34 30 30 43 41  09 49 63 6f 6e 69 73 65  |g.&400CA.Iconise|
00002140  20 77 69 6e 64 6f 77 0a  26 46 46 30 30 30 30 30  | window.&FF00000|
00002150  31 09 4d 65 64 69 61 20  6e 6f 74 20 70 72 65 73  |1.Media not pres|
00002160  65 6e 74 0a 26 46 46 30  30 30 30 30 32 09 4d 65  |ent.&FF000002.Me|
00002170  64 69 61 20 6e 6f 74 20  6b 6e 6f 77 6e 0a 26 46  |dia not known.&F|
00002180  46 30 30 30 30 30 34 09  4d 65 64 69 61 20 73 65  |F000004.Media se|
00002190  61 72 63 68 20 65 6e 64  0a 26 46 46 46 46 30 30  |arch end.&FFFF00|
000021a0  30 36 09 44 65 6c 65 74  65 20 66 69 6c 65 0a 26  |06.Delete file.&|
000021b0  46 46 46 46 30 30 30 38  09 43 72 65 61 74 65 20  |FFFF0008.Create |
000021c0  64 69 72 65 63 74 6f 72  79 0a 26 46 46 46 46 30  |directory.&FFFF0|
000021d0  31 30 31 09 43 72 65 61  74 65 20 61 20 66 69 6c  |101.Create a fil|
000021e0  65 0a 26 46 46 46 46 30  31 30 33 09 43 6c 6f 73  |e.&FFFF0103.Clos|
000021f0  65 20 61 20 66 69 6c 65  0a 26 46 46 46 46 30 31  |e a file.&FFFF01|
00002200  30 35 09 52 65 6e 61 6d  65 20 66 69 6c 65 0a 26  |05.Rename file.&|
00002210  46 46 46 46 46 46 30 32  09 57 69 6e 64 6f 77 20  |FFFFFF02.Window |
00002220  6d 6f 76 69 6e 67 0a 26  46 46 46 46 46 46 30 33  |moving.&FFFFFF03|
00002230  09 57 69 6e 64 6f 77 20  63 6c 6f 73 69 6e 67 0a  |.Window closing.|
00002240  26 46 46 46 46 46 46 30  37 09 44 72 61 67 20 66  |&FFFFFF07.Drag f|
00002250  69 6e 69 73 68 65 64 0a  26 46 46 46 46 46 46 30  |inished.&FFFFFF0|
00002260  39 09 4d 65 6e 75 20 73  65 6c 65 63 74 69 6f 6e  |9.Menu selection|
00002270  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00002280  a0 22 00 00 46 fd ff ff  cd 49 c7 13 c1 00 00 00  |."..F....I......|
00002290  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
000022a0  44 41 54 41 c1 00 00 00  41 57 52 65 6e 64 65 72  |DATA....AWRender|
000022b0  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
000022c0  50 72 65 66 69 78 20 41  57 52 65 6e 64 65 72 5f  |Prefix AWRender_|
000022d0  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
000022e0  32 0a 46 69 6c 65 49 6e  69 74 41 64 64 72 65 73  |2.FileInitAddres|
000022f0  73 0a 52 65 6e 64 65 72  41 64 64 72 65 73 73 0a  |s.RenderAddress.|
00002300  44 6f 63 42 6f 75 6e 64  73 0a 53 65 6e 64 44 65  |DocBounds.SendDe|
00002310  66 73 0a 43 6c 61 69 6d  56 65 63 74 6f 72 73 0a  |fs.ClaimVectors.|
00002320  52 65 6c 65 61 73 65 56  65 63 74 6f 72 73 0a 46  |ReleaseVectors.F|
00002330  69 6e 64 46 69 72 73 74  46 6f 6e 74 0a 46 69 6e  |indFirstFont.Fin|
00002340  64 4e 65 78 74 46 6f 6e  74 0a 4d 65 6d 6f 72 79  |dNextFont.Memory|
00002350  4e 65 65 64 65 64 0a 23  45 6e 64 54 61 62 6c 65  |Needed.#EndTable|
00002360  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00002370  90 23 00 00 46 fd ff ff  7c e1 dc 14 59 00 00 00  |.#..F...|...Y...|
00002380  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00002390  44 41 54 41 59 00 00 00  42 6f 72 64 65 72 73 0a  |DATAY...Borders.|
000023a0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
000023b0  72 65 66 69 78 20 42 6f  72 64 65 72 73 5f 0a 54  |refix Borders_.T|
000023c0  61 73 6b 53 74 61 72 74  0a 54 61 73 6b 51 75 69  |askStart.TaskQui|
000023d0  74 0a 50 6c 6f 74 46 61  6e 63 79 42 6f 72 64 65  |t.PlotFancyBorde|
000023e0  72 73 0a 50 6f 6c 6c 30  0a 00 00 00 44 49 52 24  |rs.Poll0....DIR$|
000023f0  2c 00 00 00 2c 00 00 00  18 24 00 00 46 fd ff ff  |,...,....$..F...|
00002400  dc 66 ee 13 c9 00 00 00  13 00 00 00 00 00 00 00  |.f..............|
00002410  21 52 6f 6f 74 00 00 00  44 41 54 41 c9 00 00 00  |!Root...DATA....|
00002420  43 41 49 46 53 0a 23 50  61 72 65 6e 74 20 21 52  |CAIFS.#Parent !R|
00002430  6f 6f 74 0a 23 50 72 65  66 69 78 20 43 41 49 46  |oot.#Prefix CAIF|
00002440  53 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |S_.#Table Column|
00002450  73 20 32 0a 43 72 65 61  74 65 41 72 63 68 69 76  |s 2.CreateArchiv|
00002460  65 0a 43 6f 6d 70 61 63  74 46 72 65 65 53 70 61  |e.CompactFreeSpa|
00002470  63 65 0a 43 6c 6f 73 65  47 61 70 73 0a 46 72 65  |ce.CloseGaps.Fre|
00002480  65 53 70 61 63 65 0a 44  69 72 53 69 7a 65 0a 43  |eSpace.DirSize.C|
00002490  6f 6d 70 61 63 74 69 6f  6e 54 79 70 65 0a 4c 5a  |ompactionType.LZ|
000024a0  57 42 69 74 73 0a 43 61  63 68 65 46 69 6c 65 0a  |WBits.CacheFile.|
000024b0  53 63 72 61 70 46 69 6c  65 0a 44 69 72 43 61 63  |ScrapFile.DirCac|
000024c0  68 65 0a 52 65 61 64 46  69 6c 65 49 6e 66 6f 0a  |he.ReadFileInfo.|
000024d0  46 69 78 52 4d 41 0a 23  45 6e 64 54 61 62 6c 65  |FixRMA.#EndTable|
000024e0  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
000024f0  10 25 00 00 46 fd ff ff  66 9a dc 14 56 00 00 00  |.%..F...f...V...|
00002500  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00002510  44 41 54 41 56 00 00 00  43 6f 6c 6f 75 72 45 78  |DATAV...ColourEx|
00002520  74 65 6e 64 0a 23 50 61  72 65 6e 74 20 21 52 6f  |tend.#Parent !Ro|
00002530  6f 74 0a 23 50 72 65 66  69 78 20 43 6f 6c 6f 75  |ot.#Prefix Colou|
00002540  72 45 78 74 65 6e 64 5f  0a 49 6e 66 6f 0a 43 6f  |rExtend_.Info.Co|
00002550  6e 74 72 6f 6c 0a 49 6e  76 61 6c 69 64 61 74 65  |ntrol.Invalidate|
00002560  43 61 63 68 65 0a 00 00  44 49 52 24 90 00 00 00  |Cache...DIR$....|
00002570  90 00 00 00 f8 25 00 00  47 fd ff ff 71 03 95 e9  |.....%..G...q...|
00002580  71 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |q...........!Roo|
00002590  74 00 00 00 6c 26 00 00  48 ff ff ff 58 f7 c5 0f  |t...l&..H...X...|
000025a0  28 01 00 00 13 00 00 00  00 00 00 00 46 69 6e 69  |(...........Fini|
000025b0  73 68 00 00 94 27 00 00  48 ff ff ff a9 fd c5 0f  |sh...'..H.......|
000025c0  33 05 00 00 13 00 00 00  00 00 00 00 53 74 61 72  |3...........Star|
000025d0  74 00 00 00 c8 2c 00 00  47 ff ff ff d2 e1 95 e9  |t....,..G.......|
000025e0  e5 01 00 00 13 00 00 00  00 00 00 00 57 72 69 74  |............Writ|
000025f0  65 4c 69 6e 65 00 00 00  44 41 54 41 71 00 00 00  |eLine...DATAq...|
00002600  43 6f 6d 70 72 65 73 73  4a 50 45 47 0a 23 50 61  |CompressJPEG.#Pa|
00002610  72 65 6e 74 20 21 52 6f  6f 74 0a 23 50 72 65 66  |rent !Root.#Pref|
00002620  69 78 20 43 6f 6d 70 72  65 73 73 4a 50 45 47 5f  |ix CompressJPEG_|
00002630  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
00002640  33 0a 3c 46 69 6e 69 73  68 3e 0a 3c 53 74 61 72  |3.<Finish>.<Star|
00002650  74 3e 0a 3c 57 72 69 74  65 4c 69 6e 65 3e 0a 23  |t>.<WriteLine>.#|
00002660  45 6e 64 54 61 62 6c 65  0a 00 00 00 44 41 54 41  |EndTable....DATA|
00002670  28 01 00 00 43 6f 6d 70  72 65 73 73 4a 50 45 47  |(...CompressJPEG|
00002680  5f 46 69 6e 69 73 68 20  20 28 26 34 41 35 30 32  |_Finish  (&4A502|
00002690  29 0a 23 50 61 72 65 6e  74 20 43 6f 6d 70 72 65  |).#Parent Compre|
000026a0  73 73 4a 50 45 47 5f 0a  3d 3e 09 52 30 20 3d 09  |ssJPEG_.=>.R0 =.|
000026b0  4a 50 45 47 20 74 61 67  0a 3c 3d 09 52 30 20 3d  |JPEG tag.<=.R0 =|
000026c0  09 73 69 7a 65 20 6f 66  20 4a 50 45 47 20 69 6d  |.size of JPEG im|
000026d0  61 67 65 20 77 69 74 68  69 6e 20 74 68 65 20 62  |age within the b|
000026e0  75 66 66 65 72 0a 0a 54  68 69 73 20 63 61 6c 6c  |uffer..This call|
000026f0  20 66 69 6e 69 73 68 65  73 20 74 68 65 20 4a 50  | finishes the JP|
00002700  45 47 20 63 6f 6d 70 72  65 73 73 69 6f 6e 20 70  |EG compression p|
00002710  72 6f 63 65 73 73 2c 20  72 65 74 75 72 6e 69 6e  |rocess, returnin|
00002720  67 20 74 68 65 20 73 69  7a 65 20 6f 66 20 74 68  |g the size of th|
00002730  65 20 63 6f 6d 70 6c 65  74 65 20 69 6d 61 67 65  |e complete image|
00002740  2e 20 20 41 6e 79 20 77  6f 72 6b 73 70 61 63 65  |.  Any workspace|
00002750  20 63 6c 61 69 6d 65 64  20 62 79 20 74 68 65 20  | claimed by the |
00002760  43 6f 6d 70 72 65 73 73  4a 50 45 47 20 6d 6f 64  |CompressJPEG mod|
00002770  75 6c 65 20 66 6f 72 20  74 68 65 20 63 6f 6d 70  |ule for the comp|
00002780  72 65 73 73 69 6f 6e 20  69 73 20 72 65 6c 65 61  |ression is relea|
00002790  73 65 64 2e 44 41 54 41  33 05 00 00 43 6f 6d 70  |sed.DATA3...Comp|
000027a0  72 65 73 73 4a 50 45 47  5f 53 74 61 72 74 20 20  |ressJPEG_Start  |
000027b0  28 26 34 41 35 30 30 29  0a 23 50 61 72 65 6e 74  |(&4A500).#Parent|
000027c0  20 43 6f 6d 70 72 65 73  73 4a 50 45 47 5f 0a 3d  | CompressJPEG_.=|
000027d0  3e 09 52 30 20 3d 09 70  6f 69 6e 74 65 72 20 74  |>.R0 =.pointer t|
000027e0  6f 20 62 75 66 66 65 72  20 66 6f 72 20 4a 50 45  |o buffer for JPE|
000027f0  47 20 64 61 74 61 0a 09  52 31 20 3d 09 73 69 7a  |G data..R1 =.siz|
00002800  65 20 6f 66 20 4a 50 45  47 20 64 61 74 61 20 62  |e of JPEG data b|
00002810  75 66 66 65 72 0a 09 52  32 20 3d 09 70 6f 69 6e  |uffer..R2 =.poin|
00002820  74 65 72 20 74 6f 20 62  6c 6f 63 6b 20 6f 66 20  |ter to block of |
00002830  3c 70 61 72 61 6d 65 74  65 72 73 3d 3e 2e 70 61  |<parameters=>.pa|
00002840  72 61 6d 65 74 65 72 73  3e 0a 09 52 33 20 3d 09  |rameters>..R3 =.|
00002850  70 6f 69 6e 74 65 72 20  74 6f 20 77 6f 72 6b 73  |pointer to works|
00002860  70 61 63 65 20 61 72 65  61 2c 20 6f 72 20 30 20  |pace area, or 0 |
00002870  66 6f 72 20 74 68 65 20  43 6f 6d 70 72 65 73 73  |for the Compress|
00002880  4a 50 45 47 20 6d 6f 64  75 6c 65 20 74 6f 20 61  |JPEG module to a|
00002890  6c 6c 6f 63 61 74 65 20  69 74 73 20 6f 77 6e 20  |llocate its own |
000028a0  77 6f 72 6b 73 70 61 63  65 20 66 72 6f 6d 20 74  |workspace from t|
000028b0  68 65 20 52 4d 41 0a 09  52 34 20 3d 09 73 69 7a  |he RMA..R4 =.siz|
000028c0  65 20 6f 66 20 77 6f 72  6b 73 70 61 63 65 20 61  |e of workspace a|
000028d0  72 65 61 20 28 69 66 20  52 33 20 69 73 20 6e 6f  |rea (if R3 is no|
000028e0  74 20 30 29 0a 3c 3d 09  52 30 20 3d 09 4a 50 45  |t 0).<=.R0 =.JPE|
000028f0  47 20 74 61 67 2c 20 74  6f 20 62 65 20 70 61 73  |G tag, to be pas|
00002900  73 65 64 20 74 6f 20 6f  74 68 65 72 20 43 6f 6d  |sed to other Com|
00002910  70 72 65 73 73 4a 50 45  47 20 53 57 49 73 0a 0a  |pressJPEG SWIs..|
00002920  54 68 69 73 20 63 61 6c  6c 20 73 74 61 72 74 73  |This call starts|
00002930  20 74 68 65 20 4a 50 45  47 20 63 6f 6d 70 72 65  | the JPEG compre|
00002940  73 73 69 6f 6e 20 70 72  6f 63 65 73 73 2c 20 73  |ssion process, s|
00002950  65 74 74 69 6e 67 20 75  70 20 76 61 72 69 6f 75  |etting up variou|
00002960  73 20 70 61 72 61 6d 65  74 65 72 73 20 66 6f 72  |s parameters for|
00002970  20 69 74 2e 0a 0a 54 68  65 20 62 75 66 66 65 72  | it...The buffer|
00002980  20 66 6f 72 20 74 68 65  20 4a 50 45 47 20 64 61  | for the JPEG da|
00002990  74 61 20 73 68 6f 75 6c  64 20 62 65 20 61 73 20  |ta should be as |
000029a0  6c 61 72 67 65 20 61 73  20 70 6f 73 73 69 62 6c  |large as possibl|
000029b0  65 2c 20 73 69 6e 63 65  20 74 68 65 20 4a 50 45  |e, since the JPE|
000029c0  47 20 63 6f 6d 70 72 65  73 73 69 6f 6e 20 72 6f  |G compression ro|
000029d0  75 74 69 6e 65 73 20 63  61 6e 6e 6f 74 20 67 75  |utines cannot gu|
000029e0  61 72 61 6e 74 65 65 20  74 6f 20 63 6f 6d 70 72  |arantee to compr|
000029f0  65 73 73 20 74 68 65 20  69 6d 61 67 65 20 62 79  |ess the image by|
00002a00  20 61 20 66 69 78 65 64  20 61 6d 6f 75 6e 74 2e  | a fixed amount.|
00002a10  0a 0a 49 66 20 79 6f 75  20 77 69 73 68 20 74 6f  |..If you wish to|
00002a20  20 73 75 70 70 6c 79 20  79 6f 75 72 20 6f 77 6e  | supply your own|
00002a30  20 77 6f 72 6b 73 70 61  63 65 20 61 72 65 61 2c  | workspace area,|
00002a40  20 69 74 73 20 72 65 71  75 69 72 65 64 20 73 69  | its required si|
00002a50  7a 65 20 66 6f 72 20 61  20 63 6f 6c 6f 75 72 20  |ze for a colour |
00002a60  28 32 34 20 62 69 74 29  20 69 6d 61 67 65 20 69  |(24 bit) image i|
00002a70  73 3a 0a 09 32 30 30 30  30 20 2b 20 28 28 69 6d  |s:..20000 + ((im|
00002a80  61 67 65 20 77 69 64 74  68 20 72 6f 75 6e 64 65  |age width rounde|
00002a90  64 20 75 70 20 74 6f 20  61 20 6d 75 6c 74 69 70  |d up to a multip|
00002aa0  6c 65 20 6f 66 20 31 36  29 20 d7 20 33 30 29 0a  |le of 16) . 30).|
00002ab0  61 6e 64 20 69 74 73 20  72 65 71 75 69 72 65 64  |and its required|
00002ac0  20 73 69 7a 65 20 66 6f  72 20 61 20 67 72 65 79  | size for a grey|
00002ad0  73 63 61 6c 65 20 28 38  20 62 69 74 29 20 69 6d  |scale (8 bit) im|
00002ae0  61 67 65 20 69 73 3a 0a  09 32 30 30 30 30 20 2b  |age is:..20000 +|
00002af0  20 28 28 69 6d 61 67 65  20 77 69 64 74 68 20 72  | ((image width r|
00002b00  6f 75 6e 64 65 64 20 75  70 20 74 6f 20 61 20 6d  |ounded up to a m|
00002b10  75 6c 74 69 70 6c 65 20  6f 66 20 31 36 29 20 d7  |ultiple of 16) .|
00002b20  20 39 29 0a 0a 41 6e 20  65 72 72 6f 72 20 69 73  | 9)..An error is|
00002b30  20 72 65 74 75 72 6e 65  64 20 69 66 20 74 68 65  | returned if the|
00002b40  20 77 6f 72 6b 73 70 61  63 65 20 61 72 65 61 20  | workspace area |
00002b50  62 65 63 6f 6d 65 73 20  66 75 6c 6c 2e 0a 23 53  |becomes full..#S|
00002b60  75 62 70 61 67 65 20 70  61 72 61 6d 65 74 65 72  |ubpage parameter|
00002b70  73 0a 43 6f 6d 70 72 65  73 73 20 4a 50 45 47 20  |s.Compress JPEG |
00002b80  70 61 72 61 6d 65 74 65  72 20 62 6c 6f 63 6b 0a  |parameter block.|
00002b90  4f 66 66 73 65 74 09 43  6f 6e 74 65 6e 74 73 0a  |Offset.Contents.|
00002ba0  23 4c 69 6e 65 0a 30 09  77 69 64 74 68 20 6f 66  |#Line.0.width of|
00002bb0  20 69 6d 61 67 65 20 69  6e 20 70 69 78 65 6c 73  | image in pixels|
00002bc0  0a 34 09 68 65 69 67 68  74 20 6f 66 20 69 6d 61  |.4.height of ima|
00002bd0  67 65 20 69 6e 20 70 69  78 65 6c 73 0a 38 09 71  |ge in pixels.8.q|
00002be0  75 61 6c 69 74 79 20 76  61 6c 75 65 20 28 30 20  |uality value (0 |
00002bf0  2d 20 31 30 30 29 3a 20  6c 6f 77 65 72 20 71 75  |- 100): lower qu|
00002c00  61 6c 69 74 79 20 72 65  73 75 6c 74 73 20 69 6e  |ality results in|
00002c10  20 73 6d 61 6c 6c 65 72  20 69 6d 61 67 65 0a 31  | smaller image.1|
00002c20  32 09 6e 75 6d 62 65 72  20 69 66 20 38 20 62 69  |2.number if 8 bi|
00002c30  74 20 63 6f 6d 70 6f 6e  65 6e 74 73 20 69 6e 20  |t components in |
00002c40  73 6f 75 72 63 65 3a 20  33 20 3d 3e 20 32 34 20  |source: 3 => 24 |
00002c50  62 69 74 20 63 6f 6c 6f  75 72 2c 20 31 20 3d 3e  |bit colour, 1 =>|
00002c60  20 38 20 62 69 74 20 67  72 65 79 73 63 61 6c 65  | 8 bit greyscale|
00002c70  0a 31 36 09 68 6f 72 69  7a 6f 6e 74 61 6c 20 44  |.16.horizontal D|
00002c80  50 49 20 6f 66 20 69 6d  61 67 65 2c 20 6f 72 20  |PI of image, or |
00002c90  30 20 69 66 20 75 6e 6b  6e 6f 77 6e 0a 32 30 09  |0 if unknown.20.|
00002ca0  76 65 72 74 69 63 61 6c  20 44 50 49 20 6f 66 20  |vertical DPI of |
00002cb0  69 6d 61 67 65 2c 20 6f  72 20 30 20 69 66 20 75  |image, or 0 if u|
00002cc0  6e 6b 6e 6f 77 6e 0a 00  44 41 54 41 e5 01 00 00  |nknown..DATA....|
00002cd0  43 6f 6d 70 72 65 73 73  4a 50 45 47 5f 57 72 69  |CompressJPEG_Wri|
00002ce0  74 65 4c 69 6e 65 20 20  28 26 34 41 35 30 31 29  |teLine  (&4A501)|
00002cf0  0a 23 50 61 72 65 6e 74  20 43 6f 6d 70 72 65 73  |.#Parent Compres|
00002d00  73 4a 50 45 47 5f 0a 3d  3e 09 52 30 20 3d 09 4a  |sJPEG_.=>.R0 =.J|
00002d10  50 45 47 20 74 61 67 0a  20 09 52 31 20 3d 09 70  |PEG tag. .R1 =.p|
00002d20  6f 69 6e 74 65 72 20 74  6f 20 61 20 72 6f 77 20  |ointer to a row |
00002d30  6f 66 20 70 69 78 65 6c  73 3a 0a 20 09 20 09 20  |of pixels:. . . |
00002d40  09 46 6f 72 20 63 6f 6c  6f 75 72 3a 20 61 20 62  |.For colour: a b|
00002d50  75 66 66 65 72 20 6f 66  20 63 6f 6e 74 69 6e 75  |uffer of continu|
00002d60  6f 75 73 20 52 47 42 20  76 61 6c 75 65 73 20 2d  |ous RGB values -|
00002d70  20 69 65 20 61 20 62 79  74 65 20 73 74 72 65 61  | ie a byte strea|
00002d80  6d 20 6f 66 20 74 68 65  20 66 6f 72 6d 61 74 20  |m of the format |
00002d90  52 2c 20 47 2c 20 42 2c  20 52 2c 20 47 2c 20 42  |R, G, B, R, G, B|
00002da0  2e 2e 2e 0a 20 09 20 09  20 09 46 6f 72 20 67 72  |.... . . .For gr|
00002db0  65 79 73 63 61 6c 65 3a  20 61 20 62 75 66 66 65  |eyscale: a buffe|
00002dc0  72 20 6f 66 20 63 6f 6e  74 69 6e 75 6f 75 73 20  |r of continuous |
00002dd0  38 20 62 69 74 20 67 72  65 79 20 76 61 6c 75 65  |8 bit grey value|
00002de0  73 0a 3c 3d 20 09 52 30  2c 20 52 31 20 70 72 65  |s.<= .R0, R1 pre|
00002df0  73 65 72 76 65 64 0a 0a  54 68 69 73 20 63 61 6c  |served..This cal|
00002e00  6c 20 63 6f 6d 70 72 65  73 73 65 73 20 6f 6e 65  |l compresses one|
00002e10  20 72 6f 77 20 6f 66 20  73 6f 75 72 63 65 20 70  | row of source p|
00002e20  69 78 65 6c 73 20 69 6e  74 6f 20 74 68 65 20 4a  |ixels into the J|
00002e30  50 45 47 20 62 75 66 66  65 72 2e 20 20 49 74 20  |PEG buffer.  It |
00002e40  73 68 6f 75 6c 64 20 62  65 20 63 61 6c 6c 65 64  |should be called|
00002e50  20 6f 6e 63 65 20 66 6f  72 20 65 61 63 68 20 72  | once for each r|
00002e60  6f 77 20 6f 66 20 74 68  65 20 73 6f 75 72 63 65  |ow of the source|
00002e70  20 64 61 74 61 2e 20 20  41 6e 20 65 72 72 6f 72  | data.  An error|
00002e80  20 69 73 20 72 65 74 75  72 6e 65 64 20 69 66 20  | is returned if |
00002e90  74 68 65 20 4a 50 45 47  20 62 75 66 66 65 72 20  |the JPEG buffer |
00002ea0  62 65 63 6f 6d 65 73 20  66 75 6c 6c 2e 00 00 00  |becomes full....|
00002eb0  44 41 54 41 45 08 00 00  0d 00 0a 26 f4 20 4e 65  |DATAE......&. Ne|
00002ec0  77 65 72 20 76 65 72 73  69 6f 6e 20 74 68 61 6e  |wer version than|
00002ed0  20 69 6e 20 53 74 72 6f  6e 67 48 65 6c 70 0d 00  | in StrongHelp..|
00002ee0  14 1f ee 20 85 20 85 20  a2 20 30 2c f6 24 2b 22  |... . . . 0,.$+"|
00002ef0  20 61 74 20 6c 69 6e 65  20 22 2b c3 9e 0d 00 1e  | at line "+.....|
00002f00  32 73 68 24 3d 22 41 44  46 53 3a 3a 47 65 72 70  |2sh$="ADFS::Gerp|
00002f10  68 2e 24 2e 41 70 70 73  2e 57 50 72 6f 63 65 73  |h.$.Apps.WProces|
00002f20  73 2e 21 4d 61 6e 75 61  6c 73 2e 53 57 49 22 0d  |s.!Manuals.SWI".|
00002f30  00 28 0e de 20 6d 65 6d  25 20 32 35 36 0d 00 32  |.(.. mem% 256..2|
00002f40  21 73 63 72 61 70 72 6f  6f 74 24 3d 22 53 63 72  |!scraproot$="Scr|
00002f50  61 70 3a 53 74 72 6f 6e  67 46 69 6c 65 22 0d 00  |ap:StrongFile"..|
00002f60  3c 1a 6f 25 3d ae 28 22  53 63 72 61 70 3a 4e 65  |<.o%=.("Scrap:Ne|
00002f70  77 41 64 64 65 64 22 29  0d 00 46 20 d5 23 6f 25  |wAdded")..F .#o%|
00002f80  2c 22 4e 65 77 6c 79 20  61 64 64 65 64 20 53 57  |,"Newly added SW|
00002f90  49 20 63 61 6c 6c 73 22  0d 00 50 18 d5 23 6f 25  |I calls"..P..#o%|
00002fa0  2c 22 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 22  |,"#Parent !Root"|
00002fb0  0d 00 5a 15 d5 23 6f 25  2c 22 23 50 6f 73 74 66  |..Z..#o%,"#Postf|
00002fc0  69 78 20 5f 22 0d 00 64  1b d5 23 6f 25 2c 22 23  |ix _"..d..#o%,"#|
00002fd0  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 33 22  |Table Columns 3"|
00002fe0  0d 00 6e 12 63 6f 25 3d  30 3a 63 6f 61 73 24 3d  |..n.co%=0:coas$=|
00002ff0  22 22 0d 00 78 0c 6c 61  73 74 24 3d 22 22 0d 00  |""..x.last$=""..|
00003000  82 18 e3 49 3d 26 32 30  30 b8 26 31 30 30 30 30  |...I=&200.&10000|
00003010  30 20 88 20 36 34 0d 00  8c 20 20 e7 20 28 49 20  |0 . 64...  . (I |
00003020  80 20 26 32 30 30 30 30  29 3e 30 20 8c 49 2b 3d  |. &20000)>0 .I+=|
00003030  26 32 30 30 30 30 0d 00  96 0b 20 73 77 69 25 3d  |&20000.... swi%=|
00003040  49 0d 00 a0 06 20 f5 0d  00 aa 36 20 20 c8 99 20  |I.... ....6  .. |
00003050  22 58 4f 53 5f 53 57 49  4e 75 6d 62 65 72 54 6f  |"XOS_SWINumberTo|
00003060  53 74 72 69 6e 67 22 2c  73 77 69 25 2c 6d 65 6d  |String",swi%,mem|
00003070  25 2c 32 35 36 20 b8 20  2c 2c 6c 65 6e 0d 00 b4  |%,256 . ,,len...|
00003080  20 20 20 6d 65 6d 25 3f  28 6c 65 6e 2d 31 29 3d  |   mem%?(len-1)=|
00003090  31 33 3a 73 77 69 24 3d  24 6d 65 6d 25 0d 00 be  |13:swi$=$mem%...|
000030a0  42 20 20 e7 20 a7 73 77  69 24 2c 22 55 6e 64 65  |B  . .swi$,"Unde|
000030b0  66 69 6e 65 64 22 29 3e  30 20 84 20 73 77 69 24  |fined")>0 . swi$|
000030c0  3d 22 55 73 65 72 22 20  84 20 73 77 69 24 3d 22  |="User" . swi$="|
000030d0  4e 55 4c 4c 22 20 8c 20  73 77 69 24 3d 22 22 0d  |NULL" . swi$="".|
000030e0  00 c8 23 20 20 e7 20 a7  73 77 69 24 2c c3 28 73  |..#  . .swi$,.(s|
000030f0  77 69 25 2d 49 29 29 3e  30 20 8c 73 77 69 24 3d  |wi%-I))>0 .swi$=|
00003100  22 22 0d 00 d2 12 20 20  e7 20 73 77 69 24 3c 3e  |""....  . swi$<>|
00003110  22 22 20 8c 0d 00 dc 1b  20 20 20 f2 73 77 69 66  |"" .....   .swif|
00003120  6f 75 6e 64 28 73 77 69  25 2c 73 77 69 24 29 0d  |ound(swi%,swi$).|
00003130  00 e6 07 20 20 cd 0d 00  f0 0d 20 20 73 77 69 25  |...  .....  swi%|
00003140  2b 3d 31 0d 00 fa 1a 20  fd 20 73 77 69 25 3d 49  |+=1.... . swi%=I|
00003150  2b 36 34 20 84 20 73 77  69 24 3d 22 22 0d 01 04  |+64 . swi$=""...|
00003160  05 ed 0d 01 0e 0e e7 20  63 6f 25 3c 3e 30 20 8c  |....... co%<>0 .|
00003170  0d 01 18 16 20 d5 23 63  6f 25 2c 22 23 45 6e 64  |.... .#co%,"#End|
00003180  54 61 62 6c 65 22 0d 01  22 0a 20 d9 23 63 6f 25  |Table"..". .#co%|
00003190  0d 01 2c 36 20 ff 28 22  43 6f 70 79 20 22 2b 73  |..,6 .("Copy "+s|
000031a0  63 72 61 70 72 6f 6f 74  24 2b 22 20 22 2b 73 68  |craproot$+" "+sh|
000031b0  24 2b 22 2e 22 2b 63 6f  61 73 24 2b 22 20 44 7e  |$+"."+coas$+" D~|
000031c0  43 7e 56 46 22 29 0d 01  36 05 cd 0d 01 40 14 d5  |C~VF")..6....@..|
000031d0  23 6f 25 2c 22 23 45 6e  64 54 61 62 6c 65 22 0d  |#o%,"#EndTable".|
000031e0  01 4a 08 d9 23 6f 25 0d  01 54 34 ff 28 22 43 6f  |.J..#o%..T4.("Co|
000031f0  70 79 20 53 63 72 61 70  3a 4e 65 77 41 64 64 65  |py Scrap:NewAdde|
00003200  64 20 22 2b 73 68 24 2b  22 2e 4e 65 77 41 64 64  |d "+sh$+".NewAdd|
00003210  65 64 20 44 7e 43 7e 56  46 22 29 0d 01 5e 05 e0  |ed D~C~VF")..^..|
00003220  0d 01 68 05 3a 0d 01 72  17 dd f2 73 77 69 66 6f  |..h.:..r...swifo|
00003230  75 6e 64 28 73 77 69 25  2c 63 24 29 0d 01 7c 16  |und(swi%,c$)..|.|
00003240  6d 6f 64 24 3d c0 63 24  2c a7 63 24 2c 22 5f 22  |mod$=.c$,.c$,"_"|
00003250  29 29 0d 01 86 19 63 61  6c 6c 24 3d c1 63 24 2c  |))....call$=.c$,|
00003260  a7 63 24 2c 22 5f 22 29  2b 31 29 0d 01 90 1e 66  |.c$,"_")+1)....f|
00003270  74 3d a4 66 69 6c 65 74  79 70 65 28 73 68 24 2b  |t=.filetype(sh$+|
00003280  22 2e 22 2b 6d 6f 64 24  29 0d 01 9a 0d e7 20 66  |"."+mod$)..... f|
00003290  74 3d 2d 32 20 8c 0d 01  a4 0f 20 e7 20 63 6f 25  |t=-2 ..... . co%|
000032a0  3c 3e 30 20 8c 0d 01 ae  1d 20 20 d5 23 63 6f 25  |<>0 .....  .#co%|
000032b0  2c 22 23 45 6e 64 54 61  62 6c 65 22 3a d9 23 63  |,"#EndTable":.#c|
000032c0  6f 25 0d 01 b8 36 20 20  ff 28 22 43 6f 70 79 20  |o%...6  .("Copy |
000032d0  22 2b 73 63 72 61 70 72  6f 6f 74 24 2b 22 20 22  |"+scraproot$+" "|
000032e0  2b 73 68 24 2b 22 2e 22  2b 63 6f 61 73 24 2b 22  |+sh$+"."+coas$+"|
000032f0  20 44 7e 43 7e 56 22 29  0d 01 c2 0b 20 20 63 6f  | D~C~V")....  co|
00003300  25 3d 30 0d 01 cc 06 20  cd 0d 01 d6 1c 20 ff 28  |%=0.... ..... .(|
00003310  22 43 44 69 72 20 22 2b  73 68 24 2b 22 2e 22 2b  |"CDir "+sh$+"."+|
00003320  6d 6f 64 24 29 0d 01 e0  18 20 d5 23 6f 25 2c 22  |mod$).... .#o%,"|
00003330  3c 22 2b c0 6d 6f 64 24  29 2b 22 3e 22 0d 01 ea  |<"+.mod$)+">"...|
00003340  18 20 63 6f 61 73 24 3d  6d 6f 64 24 2b 22 2e 21  |. coas$=mod$+".!|
00003350  52 6f 6f 74 22 0d 01 f4  16 20 63 6f 25 3d ae 28  |Root".... co%=.(|
00003360  73 63 72 61 70 72 6f 6f  74 24 29 0d 01 fe 11 20  |scraproot$).... |
00003370  d5 23 63 6f 25 2c c0 6d  6f 64 24 29 0d 02 08 1a  |.#co%,.mod$)....|
00003380  20 d5 23 63 6f 25 2c 22  23 50 61 72 65 6e 74 20  | .#co%,"#Parent |
00003390  21 52 6f 6f 74 22 0d 02  12 1a 20 d5 23 63 6f 25  |!Root".... .#co%|
000033a0  2c 22 23 50 72 65 66 69  78 20 22 2b 6d 6f 64 24  |,"#Prefix "+mod$|
000033b0  0d 02 1c 1d 20 d5 23 63  6f 25 2c 22 23 54 61 62  |.... .#co%,"#Tab|
000033c0  6c 65 20 43 6f 6c 75 6d  6e 73 20 32 22 0d 02 26  |le Columns 2"..&|
000033d0  0f 20 6c 61 73 74 24 3d  6d 6f 64 24 0d 02 30 05  |. last$=mod$..0.|
000033e0  cd 0d 02 3a 2c e7 20 6c  61 73 74 24 3d 6d 6f 64  |...:,. last$=mod|
000033f0  24 20 8c d5 23 63 6f 25  2c 63 61 6c 6c 24 3a f1  |$ ..#co%,call$:.|
00003400  6d 6f 64 24 2c 63 61 6c  6c 24 2c 66 74 0d 02 44  |mod$,call$,ft..D|
00003410  05 e1 0d 02 4e 05 3a 0d  02 58 28 f4 20 20 3e 3e  |....N.:..X(.  >>|
00003420  3e 3e 3e 20 53 74 6f 6c  65 6e 20 66 72 6f 6d 20  |>>> Stolen from |
00003430  4a 46 53 68 61 72 65 64  20 3c 3c 3c 3c 3c 3c 0d  |JFShared <<<<<<.|
00003440  02 62 05 3a 0d 02 6c 37  f4 20 2a 2a 2a 2a 2a 2a  |.b.:..l7. ******|
00003450  2a 2a 20 46 69 6c 65 20  69 6e 66 6f 72 6d 61 74  |** File informat|
00003460  69 6f 6e 20 72 6f 75 74  69 6e 65 73 20 2a 2a 2a  |ion routines ***|
00003470  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 02 76 05 3a  |***********..v.:|
00003480  0d 02 80 31 f4 20 46 4e  66 69 6c 65 74 79 70 65  |...1. FNfiletype|
00003490  20 3a 20 52 65 74 75 72  6e 20 74 68 65 20 66 69  | : Return the fi|
000034a0  6c 65 20 74 79 70 65 20  6f 66 20 61 20 66 69 6c  |le type of a fil|
000034b0  65 0d 02 8a 32 f4 20 2d  32 3d 6e 6f 74 20 66 6f  |e...2. -2=not fo|
000034c0  75 6e 64 2c 20 2d 31 3d  75 6e 74 79 70 65 64 2c  |und, -1=untyped,|
000034d0  20 26 31 30 30 30 3d 64  69 72 20 6f 72 20 69 6d  | &1000=dir or im|
000034e0  61 67 65 0d 02 94 22 dd  20 a4 66 69 6c 65 74 79  |age...". .filety|
000034f0  70 65 28 66 24 29 3a ea  20 66 25 2c 74 79 70 65  |pe(f$):. f%,type|
00003500  25 2c 66 6c 25 0d 02 9e  2b c8 99 20 22 58 4f 53  |%,fl%...+.. "XOS|
00003510  5f 46 69 6c 65 22 2c 32  30 2c 66 24 20 b8 20 74  |_File",20,f$ . t|
00003520  79 70 65 25 2c 2c 2c 2c  2c 2c 66 25 3b 66 6c 25  |ype%,,,,,,f%;fl%|
00003530  0d 02 a8 0e c8 8e 20 74  79 70 65 25 20 ca 0d 02  |...... type% ...|
00003540  b2 11 20 c9 20 30 3a 74  79 70 65 25 3d 2d 32 0d  |.. . 0:type%=-2.|
00003550  02 bc 11 20 c9 20 31 3a  74 79 70 65 25 3d 66 25  |... . 1:type%=f%|
00003560  0d 02 c6 16 20 c9 20 32  2c 33 3a 74 79 70 65 25  |.... . 2,3:type%|
00003570  3d 26 31 30 30 30 0d 02  d0 05 cb 0d 02 da 19 e7  |=&1000..........|
00003580  20 28 66 6c 25 80 31 29  3d 31 20 8c 74 79 70 65  | (fl%.1)=1 .type|
00003590  25 3d 2d 32 0d 02 e4 0a  3d 74 79 70 65 25 0d 02  |%=-2....=type%..|
000035a0  ee 05 3a 0d 02 f8 3f f4  20 46 4e 62 61 73 65 74  |..:...?. FNbaset|
000035b0  79 70 65 20 3a 20 52 65  74 75 72 6e 20 74 68 65  |ype : Return the|
000035c0  20 66 69 6c 65 20 74 79  70 65 20 6f 66 20 61 20  | file type of a |
000035d0  64 69 72 65 63 74 6f 72  79 20 6f 72 20 69 6d 61  |directory or ima|
000035e0  67 65 0d 03 02 3a f4 20  2d 32 3d 6e 6f 74 20 66  |ge...:. -2=not f|
000035f0  6f 75 6e 64 2c 20 2d 31  3d 66 69 6c 65 2c 20 26  |ound, -1=file, &|
00003600  31 30 30 30 20 66 6f 72  20 64 69 72 2c 20 74 79  |1000 for dir, ty|
00003610  70 65 20 66 6f 72 20 69  6d 61 67 65 0d 03 0c 22  |pe for image..."|
00003620  dd 20 a4 62 61 73 65 74  79 70 65 28 66 24 29 3a  |. .basetype(f$):|
00003630  ea 20 66 25 2c 74 79 70  65 25 2c 66 6c 25 0d 03  |. f%,type%,fl%..|
00003640  16 26 c8 99 20 22 58 4f  53 5f 46 69 6c 65 22 2c  |.&.. "XOS_File",|
00003650  35 2c 66 24 20 b8 20 74  79 70 65 25 2c 2c 66 25  |5,f$ . type%,,f%|
00003660  3b 66 6c 25 0d 03 20 0e  c8 8e 20 74 79 70 65 25  |;fl%.. ... type%|
00003670  20 ca 0d 03 2a 11 20 c9  20 30 3a 74 79 70 65 25  | ...*. . 0:type%|
00003680  3d 2d 32 0d 03 34 11 20  c9 20 31 3a 74 79 70 65  |=-2..4. . 1:type|
00003690  25 3d 2d 31 0d 03 3e 14  20 c9 20 32 3a 74 79 70  |%=-1..>. . 2:typ|
000036a0  65 25 3d 26 31 30 30 30  0d 03 48 1f 20 c9 20 33  |e%=&1000..H. . 3|
000036b0  3a 74 79 70 65 25 3d 28  66 25 20 80 20 26 46 46  |:type%=(f% . &FF|
000036c0  46 30 30 29 3e 3e 38 0d  03 52 05 cb 0d 03 5c 19  |F00)>>8..R....\.|
000036d0  e7 20 28 66 6c 25 80 31  29 3d 31 20 8c 74 79 70  |. (fl%.1)=1 .typ|
000036e0  65 25 3d 2d 32 0d 03 66  0a 3d 74 79 70 65 25 0d  |e%=-2..f.=type%.|
000036f0  03 70 04 0d ff 00 00 00  44 49 52 24 2c 00 00 00  |.p......DIR$,...|
00003700  2c 00 00 00 24 37 00 00  46 fd ff ff e1 12 76 15  |,...$7..F.....v.|
00003710  a5 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
00003720  74 00 00 00 44 41 54 41  a5 00 00 00 43 72 65 61  |t...DATA....Crea|
00003730  74 6f 72 0a 23 50 61 72  65 6e 74 20 21 52 6f 6f  |tor.#Parent !Roo|
00003740  74 0a 23 50 72 65 66 69  78 20 43 72 65 61 74 6f  |t.#Prefix Creato|
00003750  72 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |r_.#Table Column|
00003760  73 20 32 0a 53 65 74 56  61 72 69 61 62 6c 65 0a  |s 2.SetVariable.|
00003770  52 65 61 64 56 61 72 69  61 62 6c 65 0a 47 49 46  |ReadVariable.GIF|
00003780  43 6f 6d 70 72 65 73 73  0a 54 49 46 46 43 6f 6d  |Compress.TIFFCom|
00003790  70 72 65 73 73 0a 41 49  4d 43 6f 6e 76 65 72 74  |press.AIMConvert|
000037a0  0a 50 42 4d 43 6f 6e 76  65 72 74 0a 54 61 73 6b  |.PBMConvert.Task|
000037b0  53 74 61 72 74 0a 54 61  73 6b 51 75 69 74 0a 23  |Start.TaskQuit.#|
000037c0  45 6e 64 54 61 62 6c 65  0a 00 00 00 44 49 52 24  |EndTable....DIR$|
000037d0  2c 00 00 00 2c 00 00 00  f8 37 00 00 46 fd ff ff  |,...,....7..F...|
000037e0  aa 11 76 15 f7 00 00 00  13 00 00 00 00 00 00 00  |..v.............|
000037f0  21 52 6f 6f 74 00 00 00  44 41 54 41 f7 00 00 00  |!Root...DATA....|
00003800  44 69 73 73 0a 23 50 61  72 65 6e 74 20 21 52 6f  |Diss.#Parent !Ro|
00003810  6f 74 0a 23 50 72 65 66  69 78 20 44 69 73 73 5f  |ot.#Prefix Diss_|
00003820  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
00003830  32 0a 44 69 73 61 73 73  65 6d 62 6c 65 0a 49 6e  |2.Disassemble.In|
00003840  69 74 4c 61 62 65 6c 73  0a 4d 61 6b 65 4c 61 62  |itLabels.MakeLab|
00003850  65 6c 4c 6f 6f 6b 75 70  0a 46 69 6e 64 4c 61 62  |elLookup.FindLab|
00003860  65 6c 0a 46 69 6e 64 4e  61 6d 65 64 4c 61 62 65  |el.FindNamedLabe|
00003870  6c 0a 41 64 64 4c 61 62  65 6c 0a 41 64 64 4c 61  |l.AddLabel.AddLa|
00003880  62 65 6c 4e 6f 53 6f 72  74 0a 52 65 6d 6f 76 65  |belNoSort.Remove|
00003890  4c 61 62 65 6c 0a 41 73  73 65 6d 62 6c 65 0a 41  |Label.Assemble.A|
000038a0  64 64 4c 69 62 72 61 72  79 42 6c 6f 63 6b 0a 4d  |ddLibraryBlock.M|
000038b0  65 72 67 65 4c 61 62 65  6c 73 0a 52 65 6d 6f 76  |ergeLabels.Remov|
000038c0  65 49 6e 76 61 6c 69 64  4c 61 62 65 6c 73 0a 52  |eInvalidLabels.R|
000038d0  65 6d 6f 76 65 53 61 6d  65 4e 61 6d 65 64 4c 61  |emoveSameNamedLa|
000038e0  62 65 6c 73 0a 23 45 6e  64 54 61 62 6c 65 0a 00  |bels.#EndTable..|
000038f0  44 49 52 24 2c 00 00 00  2c 00 00 00 1c 39 00 00  |DIR$,...,....9..|
00003900  46 fd ff ff 8e 46 c7 13  75 02 00 00 13 00 00 00  |F....F..u.......|
00003910  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
00003920  75 02 00 00 44 69 74 68  65 72 45 78 74 65 6e 64  |u...DitherExtend|
00003930  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00003940  50 72 65 66 69 78 20 44  69 74 68 65 72 45 78 74  |Prefix DitherExt|
00003950  65 6e 64 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |end_.#Table Colu|
00003960  6d 6e 73 20 32 0a 53 65  6c 65 63 74 54 61 62 6c  |mns 2.SelectTabl|
00003970  65 0a 53 65 6c 65 63 74  47 43 4f 4c 54 61 62 6c  |e.SelectGCOLTabl|
00003980  65 0a 52 65 74 75 72 6e  47 43 4f 4c 0a 53 65 74  |e.ReturnGCOL.Set|
00003990  47 43 4f 4c 0a 52 65 74  75 72 6e 43 6f 6c 6f 75  |GCOL.ReturnColou|
000039a0  72 4e 75 6d 62 65 72 0a  52 65 74 75 72 6e 47 43  |rNumber.ReturnGC|
000039b0  4f 4c 46 6f 72 4d 6f 64  65 0a 52 65 74 75 72 6e  |OLForMode.Return|
000039c0  43 6f 6c 6f 75 72 4e 75  6d 62 65 72 46 6f 72 4d  |ColourNumberForM|
000039d0  6f 64 65 0a 52 65 74 75  72 6e 4f 70 70 47 43 4f  |ode.ReturnOppGCO|
000039e0  4c 0a 53 65 74 4f 70 70  47 43 4f 4c 0a 52 65 74  |L.SetOppGCOL.Ret|
000039f0  75 72 6e 4f 70 70 43 6f  6c 6f 75 72 4e 75 6d 62  |urnOppColourNumb|
00003a00  65 72 0a 52 65 74 75 72  6e 4f 70 70 47 43 4f 4c  |er.ReturnOppGCOL|
00003a10  46 6f 72 4d 6f 64 65 0a  52 65 74 75 72 6e 4f 70  |ForMode.ReturnOp|
00003a20  70 43 6f 6c 6f 75 72 4e  75 6d 62 65 72 46 6f 72  |pColourNumberFor|
00003a30  4d 6f 64 65 0a 47 43 4f  4c 54 6f 43 6f 6c 6f 75  |Mode.GCOLToColou|
00003a40  72 4e 75 6d 62 65 72 0a  43 6f 6c 6f 75 72 4e 75  |rNumber.ColourNu|
00003a50  6d 62 65 72 54 6f 47 43  4f 4c 0a 49 6e 66 6f 0a  |mberToGCOL.Info.|
00003a60  43 6f 6e 74 72 6f 6c 0a  52 65 74 75 72 6e 43 6f  |Control.ReturnCo|
00003a70  6c 6f 75 72 50 61 74 74  65 72 6e 0a 52 65 74 75  |lourPattern.Retu|
00003a80  72 6e 43 6f 6c 6f 75 72  50 61 74 74 65 72 6e 54  |rnColourPatternT|
00003a90  61 62 6c 65 0a 49 6e 76  61 6c 69 64 61 74 65 50  |able.InvalidateP|
00003aa0  61 6c 65 74 74 65 0a 41  6e 74 69 61 6c 69 61 73  |alette.Antialias|
00003ab0  0a 52 65 61 64 50 61 6c  65 74 74 65 0a 52 65 74  |.ReadPalette.Ret|
00003ac0  75 72 6e 43 6f 6c 6f 75  72 50 61 74 74 65 72 6e  |urnColourPattern|
00003ad0  41 72 72 61 79 0a 53 65  74 48 61 6c 66 74 6f 6e  |Array.SetHalfton|
00003ae0  65 0a 52 65 74 75 72 6e  48 61 6c 66 74 6f 6e 65  |e.ReturnHalftone|
00003af0  0a 53 65 74 48 61 6c 66  74 6f 6e 65 4f 72 69 67  |.SetHalftoneOrig|
00003b00  69 6e 0a 52 65 74 75 72  6e 48 61 6c 66 74 6f 6e  |in.ReturnHalfton|
00003b10  65 4f 72 69 67 69 6e 0a  53 65 6c 65 63 74 48 61  |eOrigin.SelectHa|
00003b20  6c 66 74 6f 6e 65 54 61  62 6c 65 0a 52 65 74 75  |lftoneTable.Retu|
00003b30  72 6e 48 61 6c 66 74 6f  6e 65 49 6e 74 65 6e 73  |rnHalftoneIntens|
00003b40  69 74 79 0a 52 65 74 75  72 6e 48 61 6c 66 74 6f  |ity.ReturnHalfto|
00003b50  6e 65 54 61 62 6c 65 0a  53 65 74 53 63 72 65 65  |neTable.SetScree|
00003b60  6e 0a 43 61 63 68 65 53  63 72 65 65 6e 0a 53 65  |n.CacheScreen.Se|
00003b70  6c 65 63 74 43 6f 6c 6f  75 72 50 61 74 74 65 72  |lectColourPatter|
00003b80  6e 54 61 62 6c 65 0a 23  45 6e 64 54 61 62 6c 65  |nTable.#EndTable|
00003b90  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00003ba0  c0 3b 00 00 46 fd ff ff  b4 22 8e a5 8d 00 00 00  |.;..F...."......|
00003bb0  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00003bc0  44 41 54 41 8d 00 00 00  44 6f 63 75 6d 65 6e 74  |DATA....Document|
00003bd0  4d 61 6e 61 67 65 72 0a  23 50 61 72 65 6e 74 20  |Manager.#Parent |
00003be0  21 52 6f 6f 74 0a 23 50  72 65 66 69 78 20 44 6f  |!Root.#Prefix Do|
00003bf0  63 75 6d 65 6e 74 4d 61  6e 61 67 65 72 5f 0a 23  |cumentManager_.#|
00003c00  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 33 0a  |Table Columns 3.|
00003c10  4f 70 65 6e 0a 43 6c 6f  73 65 0a 46 69 6c 65 0a  |Open.Close.File.|
00003c20  46 69 6e 64 0a 41 72 67  73 0a 47 42 50 42 0a 43  |Find.Args.GBPB.C|
00003c30  6f 6d 70 61 63 74 0a 52  65 73 65 74 0a 53 74 61  |ompact.Reset.Sta|
00003c40  6d 70 0a 23 45 6e 64 54  61 62 6c 65 0a 00 00 00  |mp.#EndTable....|
00003c50  44 49 52 24 2c 00 00 00  2c 00 00 00 7c 3c 00 00  |DIR$,...,...|<..|
00003c60  46 fd ff ff 3f b7 dc 14  44 00 00 00 13 00 00 00  |F...?...D.......|
00003c70  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
00003c80  44 00 00 00 44 72 61 67  41 6e 4f 62 6a 65 63 74  |D...DragAnObject|
00003c90  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00003ca0  50 72 65 66 69 78 20 44  72 61 67 41 6e 4f 62 6a  |Prefix DragAnObj|
00003cb0  65 63 74 5f 0a 53 74 61  72 74 0a 53 74 6f 70 0a  |ect_.Start.Stop.|
00003cc0  44 49 52 24 24 04 00 00  24 04 00 00 e4 40 00 00  |DIR$$...$....@..|
00003cd0  47 fd ff ff 80 d3 09 0c  91 01 00 00 13 00 00 00  |G...............|
00003ce0  00 00 00 00 21 52 6f 6f  74 00 00 00 78 42 00 00  |....!Root...xB..|
00003cf0  47 ff ff ff 75 1c 0b 0c  f6 00 00 00 13 00 00 00  |G...u...........|
00003d00  00 00 00 00 42 75 66 66  65 72 41 64 64 72 65 73  |....BufferAddres|
00003d10  73 00 00 00 70 43 00 00  47 ff ff ff d6 49 0b 0c  |s...pC..G....I..|
00003d20  28 01 00 00 13 00 00 00  00 00 00 00 43 6f 6e 66  |(...........Conf|
00003d30  69 67 75 72 65 00 00 00  98 44 00 00 47 ff ff ff  |igure....D..G...|
00003d40  a6 ad 0b 0c 23 01 00 00  13 00 00 00 00 00 00 00  |....#...........|
00003d50  43 75 74 4e 6f 74 65 00  bc 45 00 00 47 ff ff ff  |CutNote..E..G...|
00003d60  28 74 0b 0c fd 00 00 00  13 00 00 00 00 00 00 00  |(t..............|
00003d70  44 65 66 61 75 6c 74 53  74 65 72 65 6f 00 00 00  |DefaultStereo...|
00003d80  bc 46 00 00 47 ff ff ff  f6 60 0a 0c 5b 00 00 00  |.F..G....`..[...|
00003d90  13 00 00 00 00 00 00 00  46 6c 75 73 68 4f 75 74  |........FlushOut|
00003da0  70 75 74 00 18 47 00 00  47 ff ff ff b0 a4 0b 0c  |put..G..G.......|
00003db0  ea 00 00 00 13 00 00 00  00 00 00 00 46 72 65 65  |............Free|
00003dc0  7a 65 4f 75 74 70 75 74  00 00 00 00 04 48 00 00  |zeOutput.....H..|
00003dd0  47 ff ff ff ef d9 0a 0c  a9 00 00 00 13 00 00 00  |G...............|
00003de0  00 00 00 00 49 6e 74 53  74 61 74 65 00 00 00 00  |....IntState....|
00003df0  b0 48 00 00 47 ff ff ff  a4 f5 09 0c 8e 02 00 00  |.H..G...........|
00003e00  13 00 00 00 00 00 00 00  4c 6f 61 64 00 00 00 00  |........Load....|
00003e10  40 4b 00 00 47 ff ff ff  fd 13 0b 0c 09 01 00 00  |@K..G...........|
00003e20  13 00 00 00 00 00 00 00  4c 6f 6f 70 00 00 00 00  |........Loop....|
00003e30  4c 4c 00 00 47 ff ff ff  72 9a 0b 0c 19 01 00 00  |LL..G...r.......|
00003e40  13 00 00 00 00 00 00 00  4d 61 73 6b 56 6f 69 63  |........MaskVoic|
00003e50  65 00 00 00 68 4d 00 00  47 ff ff ff ba ee 0a 0c  |e...hM..G.......|
00003e60  27 02 00 00 13 00 00 00  00 00 00 00 4e 6f 74 65  |'...........Note|
00003e70  49 6e 66 6f 00 00 00 00  90 4f 00 00 47 ff ff ff  |Info.....O..G...|
00003e80  db 51 0b 0c 03 01 00 00  13 00 00 00 00 00 00 00  |.Q..............|
00003e90  50 61 72 61 6d 73 00 00  94 50 00 00 47 ff ff ff  |Params...P..G...|
00003ea0  78 be 0a 0c 63 00 00 00  13 00 00 00 00 00 00 00  |x...c...........|
00003eb0  50 61 75 73 65 00 00 00  f8 50 00 00 47 ff ff ff  |Pause....P..G...|
00003ec0  87 55 0a 0c b4 01 00 00  13 00 00 00 00 00 00 00  |.U..............|
00003ed0  50 6c 61 79 49 6e 73 74  72 00 00 00 ac 52 00 00  |PlayInstr....R..|
00003ee0  47 ff ff ff fb 42 0a 0c  6e 01 00 00 13 00 00 00  |G....B..n.......|
00003ef0  00 00 00 00 50 6c 61 79  49 6e 73 74 72 50 61 63  |....PlayInstrPac|
00003f00  6b 65 64 00 1c 54 00 00  47 ff ff ff 61 95 0b 0c  |ked..T..G...a...|
00003f10  5b 01 00 00 13 00 00 00  00 00 00 00 50 6c 61 79  |[...........Play|
00003f20  53 69 6e 67 6c 65 00 00  78 55 00 00 47 ff ff ff  |Single..xU..G...|
00003f30  70 5b 0a 0c 8c 00 00 00  13 00 00 00 00 00 00 00  |p[..............|
00003f40  52 65 73 65 74 50 61 72  61 6d 73 00 04 56 00 00  |ResetParams..V..|
00003f50  47 ff ff ff ec 01 0a 0c  88 00 00 00 13 00 00 00  |G...............|
00003f60  00 00 00 00 52 65 73 74  61 72 74 53 6f 6e 67 00  |....RestartSong.|
00003f70  8c 56 00 00 47 ff ff ff  d9 91 0b 0c 18 01 00 00  |.V..G...........|
00003f80  13 00 00 00 00 00 00 00  53 61 6d 70 6c 65 52 61  |........SampleRa|
00003f90  74 65 00 00 a4 57 00 00  47 ff ff ff d1 aa 0a 0c  |te...W..G.......|
00003fa0  66 01 00 00 13 00 00 00  00 00 00 00 53 6f 6e 67  |f...........Song|
00003fb0  50 6f 73 00 0c 59 00 00  47 ff ff ff 68 1d 0a 0c  |Pos..Y..G...h...|
00003fc0  8b 01 00 00 13 00 00 00  00 00 00 00 53 74 65 72  |............Ster|
00003fd0  65 6f 00 00 98 5a 00 00  47 ff ff ff ea 8d 0b 0c  |eo...Z..G.......|
00003fe0  36 01 00 00 13 00 00 00  00 00 00 00 54 75 6e 65  |6...........Tune|
00003ff0  43 6f 6e 74 72 6f 6c 00  d0 5b 00 00 47 ff ff ff  |Control..[..G...|
00004000  46 88 0b 0c 95 00 00 00  13 00 00 00 00 00 00 00  |F...............|
00004010  54 75 6e 65 49 6e 66 6f  00 00 00 00 68 5c 00 00  |TuneInfo....h\..|
00004020  47 ff ff ff 52 a4 ac ca  f1 00 00 00 13 00 00 00  |G...R...........|
00004030  00 00 00 00 75 70 63 61  6c 6c 76 65 63 74 6f 72  |....upcallvector|
00004040  00 00 00 00 5c 5d 00 00  47 ff ff ff 11 85 0b 0c  |....\]..G.......|
00004050  d8 00 00 00 13 00 00 00  00 00 00 00 56 6f 69 63  |............Voic|
00004060  65 73 00 00 34 5e 00 00  47 ff ff ff 76 82 0b 0c  |es..4^..G...v...|
00004070  0f 01 00 00 13 00 00 00  00 00 00 00 56 6f 6c 00  |............Vol.|
00004080  44 5f 00 00 47 ff ff ff  d8 02 0b 0c 4d 01 00 00  |D_..G.......M...|
00004090  13 00 00 00 00 00 00 00  56 75 42 61 72 00 00 00  |........VuBar...|
000040a0  94 60 00 00 47 ff ff ff  c0 7e 0b 0c 28 01 00 00  |.`..G....~..(...|
000040b0  13 00 00 00 00 00 00 00  56 75 47 72 61 76 69 74  |........VuGravit|
000040c0  79 00 00 00 bc 61 00 00  47 ff ff ff 7a d0 0a 0c  |y....a..G...z...|
000040d0  7e 00 00 00 13 00 00 00  00 00 00 00 57 61 69 74  |~...........Wait|
000040e0  00 00 00 00 44 41 54 41  91 01 00 00 44 53 79 6d  |....DATA....DSym|
000040f0  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00004100  50 72 65 66 69 78 20 44  53 79 6d 5f 0a 23 54 61  |Prefix DSym_.#Ta|
00004110  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 3c 4c  |ble Columns 2.<L|
00004120  6f 61 64 3e 0a 3c 52 65  73 74 61 72 74 53 6f 6e  |oad>.<RestartSon|
00004130  67 3e 0a 3c 56 6f 6c 3e  0a 3c 53 74 65 72 65 6f  |g>.<Vol>.<Stereo|
00004140  3e 0a 3c 43 75 74 4e 6f  74 65 3e 0a 3c 50 6c 61  |>.<CutNote>.<Pla|
00004150  79 49 6e 73 74 72 50 61  63 6b 65 64 3e 0a 3c 50  |yInstrPacked>.<P|
00004160  6c 61 79 49 6e 73 74 72  3e 0a 3c 52 65 73 65 74  |layInstr>.<Reset|
00004170  50 61 72 61 6d 73 3e 0a  3c 46 6c 75 73 68 4f 75  |Params>.<FlushOu|
00004180  74 70 75 74 3e 0a 3c 46  72 65 65 7a 65 4f 75 74  |tput>.<FreezeOut|
00004190  70 75 74 3e 0a 3c 55 70  43 61 6c 6c 56 65 63 74  |put>.<UpCallVect|
000041a0  6f 72 3e 0a 3c 4d 61 73  6b 56 6f 69 63 65 3e 0a  |or>.<MaskVoice>.|
000041b0  3c 53 6f 6e 67 50 6f 73  3e 0a 3c 54 75 6e 65 43  |<SongPos>.<TuneC|
000041c0  6f 6e 74 72 6f 6c 3e 0a  3c 50 61 75 73 65 3e 0a  |ontrol>.<Pause>.|
000041d0  3c 56 6f 69 63 65 73 3e  0a 3c 57 61 69 74 3e 0a  |<Voices>.<Wait>.|
000041e0  3c 49 6e 74 53 74 61 74  65 3e 0a 3c 4e 6f 74 65  |<IntState>.<Note|
000041f0  49 6e 66 6f 3e 0a 3c 56  75 42 61 72 3e 0a 3c 4c  |Info>.<VuBar>.<L|
00004200  6f 6f 70 3e 0a 3c 42 75  66 66 65 72 41 64 64 72  |oop>.<BufferAddr|
00004210  65 73 73 3e 0a 3c 56 75  47 72 61 76 69 74 79 3e  |ess>.<VuGravity>|
00004220  0a 3c 53 61 6d 70 6c 65  52 61 74 65 3e 0a 3c 43  |.<SampleRate>.<C|
00004230  6f 6e 66 69 67 75 72 65  3e 0a 3c 50 61 72 61 6d  |onfigure>.<Param|
00004240  73 3e 0a 3c 54 75 6e 65  49 6e 66 6f 3e 0a 3c 50  |s>.<TuneInfo>.<P|
00004250  6c 61 79 53 69 6e 67 6c  65 3e 0a 3c 44 65 66 61  |laySingle>.<Defa|
00004260  75 6c 74 53 74 65 72 65  6f 3e 0a 23 45 6e 64 54  |ultStereo>.#EndT|
00004270  61 62 6c 65 0a 00 00 00  44 41 54 41 f6 00 00 00  |able....DATA....|
00004280  44 53 79 6d 5f 42 75 66  66 65 72 41 64 64 72 65  |DSym_BufferAddre|
00004290  73 73 20 20 28 26 34 35  38 39 35 29 0a 23 50 61  |ss  (&45895).#Pa|
000042a0  72 65 6e 74 20 44 73 79  6d 5f 0a 3c 3d 09 63 75  |rent Dsym_.<=.cu|
000042b0  72 72 65 6e 74 20 73 79  73 74 65 6d 20 68 61 72  |rrent system har|
000042c0  64 77 61 72 65 20 62 75  66 66 65 72 20 61 64 64  |dware buffer add|
000042d0  72 65 73 73 20 28 77 69  74 68 20 6f 75 74 70 75  |ress (with outpu|
000042e0  74 20 64 61 74 61 20 69  6e 74 65 72 6c 65 61 76  |t data interleav|
000042f0  65 64 29 0a 0a 54 68 69  73 20 63 61 6c 6c 20 67  |ed)..This call g|
00004300  69 76 65 73 20 74 68 65  20 61 64 64 72 65 73 73  |ives the address|
00004310  20 77 68 65 72 65 20 79  6f 75 20 77 6f 75 6c 64  | where you would|
00004320  20 68 61 76 65 20 74 6f  20 70 75 74 20 73 6f 75  | have to put sou|
00004330  6e 64 20 64 61 74 61 20  74 6f 2c 20 77 68 65 6e  |nd data to, when|
00004340  20 74 68 65 20 73 6f 75  6e 64 20 62 75 66 66 65  | the sound buffe|
00004350  72 20 66 69 6c 6c 20 72  65 71 75 65 73 74 20 69  |r fill request i|
00004360  73 20 62 72 6f 61 64 63  61 73 74 65 64 2e 00 00  |s broadcasted...|
00004370  44 41 54 41 28 01 00 00  44 53 79 6d 5f 43 6f 6e  |DATA(...DSym_Con|
00004380  66 69 67 75 72 65 20 20  28 26 34 35 38 39 38 29  |figure  (&45898)|
00004390  0a 23 50 61 72 65 6e 74  20 44 53 79 6d 5f 0a 3d  |.#Parent DSym_.=|
000043a0  3e 09 52 30 20 3d 09 2d  31 20 74 6f 20 72 65 69  |>.R0 =.-1 to rei|
000043b0  6e 73 74 61 6c 6c 20 70  72 65 76 69 6f 75 73 20  |nstall previous |
000043c0  63 6f 6e 66 69 67 75 72  61 74 69 6f 6e 0a 09 20  |configuration.. |
000043d0  09 6f 74 68 65 72 2c 20  74 6f 20 63 6f 6e 66 69  |.other, to confi|
000043e0  67 75 72 65 20 74 68 65  20 73 79 73 74 65 6d 20  |gure the system |
000043f0  77 69 74 68 20 6e 65 77  20 76 6f 69 63 65 73 20  |with new voices |
00004400  6e 75 6d 62 65 72 2c 20  73 61 6d 70 6c 65 20 72  |number, sample r|
00004410  61 74 65 20 61 6e 64 20  56 75 47 72 61 76 69 74  |ate and VuGravit|
00004420  79 2e 0a 0a 4e 6f 74 65  20 74 68 61 74 20 74 68  |y...Note that th|
00004430  69 73 20 63 61 6c 6c 20  69 73 20 65 73 73 65 6e  |is call is essen|
00004440  74 69 61 6c 20 74 6f 20  74 68 65 20 6f 70 74 69  |tial to the opti|
00004450  6f 6e 73 20 64 65 63 6c  61 72 65 64 20 77 69 74  |ons declared wit|
00004460  68 20 3c 44 53 79 6d 5f  56 6f 69 63 65 73 3e 2c  |h <DSym_Voices>,|
00004470  20 3c 44 53 79 6d 5f 56  75 47 72 61 76 69 74 79  | <DSym_VuGravity|
00004480  3e 20 61 6e 64 20 3c 44  53 79 6d 5f 53 61 6d 70  |> and <DSym_Samp|
00004490  6c 65 52 61 74 65 3e 2e  44 41 54 41 23 01 00 00  |leRate>.DATA#...|
000044a0  44 53 79 6d 5f 43 75 74  4e 6f 74 65 20 20 28 26  |DSym_CutNote  (&|
000044b0  34 35 38 38 34 29 0a 23  50 61 72 65 6e 74 20 44  |45884).#Parent D|
000044c0  53 79 6d 5f 0a 3d 3e 09  52 30 20 3d 09 76 6f 69  |Sym_.=>.R0 =.voi|
000044d0  63 65 20 6e 75 6d 62 65  72 20 28 30 2d 37 29 0a  |ce number (0-7).|
000044e0  09 52 31 20 3d 09 2d 31  20 74 6f 20 72 65 61 64  |.R1 =.-1 to read|
000044f0  20 73 74 61 74 65 2c 20  6f 72 20 5c 3c 3e 2d 31  | state, or \<>-1|
00004500  20 74 6f 20 73 74 6f 70  20 6e 6f 74 65 0a 0a 3c  | to stop note..<|
00004510  3d 09 52 30 20 63 6f 72  72 75 70 74 65 64 0a 09  |=.R0 corrupted..|
00004520  52 31 20 3d 09 70 72 65  76 69 6f 75 73 20 6e 6f  |R1 =.previous no|
00004530  74 65 20 73 74 61 74 65  20 28 30 20 73 74 6f 70  |te state (0 stop|
00004540  70 65 64 2c 20 3e 30 20  70 6c 61 79 69 6e 67 29  |ped, >0 playing)|
00004550  0a 0a 54 68 69 73 20 63  61 6c 6c 20 65 69 74 68  |..This call eith|
00004560  65 72 20 72 65 61 64 73  20 74 68 65 20 73 74 61  |er reads the sta|
00004570  74 65 20 6f 66 20 61 20  63 65 72 74 61 69 6e 20  |te of a certain |
00004580  76 6f 69 63 65 20 6f 72  20 73 74 6f 70 73 20 74  |voice or stops t|
00004590  68 65 20 63 75 72 72 65  6e 74 6c 79 20 70 6c 61  |he currently pla|
000045a0  79 65 64 20 73 61 6d 70  6c 65 20 6f 6e 20 74 68  |yed sample on th|
000045b0  69 73 20 63 68 61 6e 6e  65 6c 2e 00 44 41 54 41  |is channel..DATA|
000045c0  fd 00 00 00 44 53 79 6d  5f 44 65 66 61 75 6c 74  |....DSym_Default|
000045d0  53 74 65 72 65 6f 20 20  28 26 34 35 38 39 43 29  |Stereo  (&4589C)|
000045e0  0a 23 50 61 72 65 6e 74  20 44 53 79 6d 5f 0a 3d  |.#Parent DSym_.=|
000045f0  3e 09 52 30 20 3d 09 76  6f 69 63 65 20 6e 75 6d  |>.R0 =.voice num|
00004600  62 65 72 20 28 30 2d 37  29 0a 09 52 31 20 3d 09  |ber (0-7)..R1 =.|
00004610  6e 65 77 20 64 65 66 61  75 6c 74 20 73 74 65 72  |new default ster|
00004620  65 6f 20 70 6f 73 69 74  69 6f 6e 2c 20 6f 72 20  |eo position, or |
00004630  30 20 74 6f 20 72 65 61  64 0a 0a 3c 3d 09 52 31  |0 to read..<=.R1|
00004640  20 3d 09 70 72 65 76 69  6f 75 73 20 64 65 66 61  | =.previous defa|
00004650  75 6c 74 20 73 74 65 72  65 6f 20 70 6f 73 69 74  |ult stereo posit|
00004660  69 6f 6e 20 28 31 20 74  6f 20 37 29 20 66 6f 72  |ion (1 to 7) for|
00004670  20 76 6f 69 63 65 20 6e  75 6d 62 65 72 20 52 30  | voice number R0|
00004680  0a 0a 54 68 69 73 20 63  61 6c 6c 20 73 65 74 73  |..This call sets|
00004690  20 74 68 65 20 64 65 66  61 75 6c 74 20 73 74 65  | the default ste|
000046a0  72 65 6f 20 70 6f 73 69  74 69 6f 6e 20 66 6f 72  |reo position for|
000046b0  20 61 20 76 6f 69 63 65  2e 00 00 00 44 41 54 41  | a voice....DATA|
000046c0  5b 00 00 00 44 53 79 6d  5f 46 6c 75 73 68 4f 75  |[...DSym_FlushOu|
000046d0  74 70 75 74 20 20 28 26  34 35 35 38 38 29 0a 23  |tput  (&45588).#|
000046e0  50 61 72 65 6e 74 20 44  53 79 6d 5f 0a 54 68 65  |Parent DSym_.The|
000046f0  20 63 75 72 72 65 6e 74  20 6e 6f 74 65 73 20 6f  | current notes o|
00004700  6e 20 61 6c 6c 20 63 68  61 6e 6e 65 6c 73 20 61  |n all channels a|
00004710  72 65 20 63 75 74 2e 00  44 41 54 41 ea 00 00 00  |re cut..DATA....|
00004720  44 53 79 6d 5f 46 72 65  65 7a 65 4f 75 74 70 75  |DSym_FreezeOutpu|
00004730  74 20 20 28 26 34 35 35  38 39 29 0a 23 50 61 72  |t  (&45589).#Par|
00004740  65 6e 74 20 44 53 79 6d  5f 0a 3d 3e 09 52 30 20  |ent DSym_.=>.R0 |
00004750  3d 09 2d 31 20 74 6f 20  72 65 61 64 20 6f 75 74  |=.-1 to read out|
00004760  70 75 74 20 73 74 61 74  75 73 0a 09 20 09 6f 74  |put status.. .ot|
00004770  68 65 72 2c 20 74 6f 20  73 65 74 0a 0a 3c 3d 09  |her, to set..<=.|
00004780  52 30 20 3d 09 70 72 65  76 69 6f 75 73 20 6f 75  |R0 =.previous ou|
00004790  74 70 75 74 20 73 74 61  74 65 20 28 30 3d 20 6f  |tput state (0= o|
000047a0  66 66 2c 20 5c 3c 3e 30  3d 20 6f 6e 29 0a 0a 54  |ff, \<>0= on)..T|
000047b0  68 69 73 20 63 61 6c 6c  20 63 6f 6e 74 72 6f 6c  |his call control|
000047c0  73 2c 20 77 68 65 74 68  65 72 20 74 68 65 20 63  |s, whether the c|
000047d0  75 72 72 65 6e 74 20 6e  6f 74 65 73 20 6f 6e 20  |urrent notes on |
000047e0  61 6c 6c 20 63 68 61 6e  6e 65 6c 73 20 61 72 65  |all channels are|
000047f0  20 70 6c 61 79 65 64 20  6f 6e 20 6f 72 20 6e 6f  | played on or no|
00004800  74 2e 00 00 44 41 54 41  a9 00 00 00 44 53 79 6d  |t...DATA....DSym|
00004810  5f 49 6e 74 53 74 61 74  65 20 20 28 26 34 35 38  |_IntState  (&458|
00004820  39 31 29 0a 23 50 61 72  65 6e 74 20 44 53 79 6d  |91).#Parent DSym|
00004830  5f 0a 54 68 69 73 20 63  61 6c 6c 20 63 68 65 63  |_.This call chec|
00004840  6b 73 2c 20 77 68 61 74  20 74 68 65 20 6d 6f 64  |ks, what the mod|
00004850  75 6c 65 20 64 6f 65 73  20 69 6e 20 74 68 65 20  |ule does in the |
00004860  6d 6f 6d 65 6e 74 2e 20  43 20 69 73 20 73 65 74  |moment. C is set|
00004870  20 69 66 20 74 68 65 20  63 61 6c 6c 20 68 61 73  | if the call has|
00004880  20 69 6e 74 65 72 72 75  70 74 65 64 20 74 68 65  | interrupted the|
00004890  20 70 6c 61 79 69 6e 67  20 6f 72 20 66 69 6c 6c  | playing or fill|
000048a0  69 6e 67 20 72 6f 75 74  69 6e 65 73 2e 00 00 00  |ing routines....|
000048b0  44 41 54 41 8e 02 00 00  44 53 79 6d 5f 4c 6f 61  |DATA....DSym_Loa|
000048c0  64 20 28 26 34 35 38 38  30 29 0a 23 50 61 72 65  |d (&45880).#Pare|
000048d0  6e 74 20 44 53 79 6d 5f  0a 3d 3e 09 52 30 20 3d  |nt DSym_.=>.R0 =|
000048e0  09 2d 31 20 74 6f 20 66  72 65 65 20 52 4d 41 20  |.-1 to free RMA |
000048f0  62 75 66 66 65 72 73 0a  09 20 09 30 20 74 6f 20  |buffers.. .0 to |
00004900  6c 6f 61 64 20 66 72 6f  6d 20 6d 65 6d 6f 72 79  |load from memory|
00004910  0a 09 20 09 3e 30 20 70  6f 69 6e 74 65 72 20 74  |.. .>0 pointer t|
00004920  6f 20 66 69 6c 65 6e 61  6d 65 0a 09 52 31 20 3d  |o filename..R1 =|
00004930  09 73 6f 75 72 63 65 20  73 74 61 72 74 20 61 64  |.source start ad|
00004940  64 72 65 73 73 20 28 69  66 20 52 30 20 3d 20 30  |dress (if R0 = 0|
00004950  29 0a 09 52 32 20 3d 09  30 20 74 6f 20 6c 6f 61  |)..R2 =.0 to loa|
00004960  64 20 74 6f 20 52 4d 41  0a 09 20 09 3e 30 20 64  |d to RMA.. .>0 d|
00004970  65 73 74 69 6e 61 74 69  6f 6e 20 61 64 64 72 65  |estination addre|
00004980  73 73 0a 09 52 33 20 3d  09 73 69 7a 65 20 6f 66  |ss..R3 =.size of|
00004990  20 64 65 73 74 69 6e 61  74 69 6f 6e 20 62 75 66  | destination buf|
000049a0  66 65 72 20 28 69 66 20  52 32 20 3e 30 29 0a 09  |fer (if R2 >0)..|
000049b0  52 34 20 3d 09 30 20 63  6c 61 69 6d 20 62 75 66  |R4 =.0 claim buf|
000049c0  66 65 72 20 69 6e 20 52  4d 41 0a 09 20 09 3e 30  |fer in RMA.. .>0|
000049d0  20 73 74 61 72 74 20 61  64 64 72 65 73 73 20 6f  | start address o|
000049e0  66 20 62 75 66 66 65 72  20 28 33 32 6b 20 73 70  |f buffer (32k sp|
000049f0  61 63 65 29 0a 0a 3c 3d  09 52 30 20 3d 09 6c 65  |ace)..<=.R0 =.le|
00004a00  6e 67 74 68 20 6f 66 20  74 72 61 63 6b 20 69 6e  |ngth of track in|
00004a10  20 6d 65 6d 6f 72 79 0a  0a 54 68 69 73 20 6c 6f  | memory..This lo|
00004a20  61 64 73 20 61 20 44 53  79 6d 2d 53 6f 6e 67 20  |ads a DSym-Song |
00004a30  65 69 74 68 65 72 20 66  72 6f 6d 20 6d 65 6d 6f  |either from memo|
00004a40  72 79 20 6f 72 20 66 72  6f 6d 20 61 20 66 69 6c  |ry or from a fil|
00004a50  65 20 74 6f 20 61 20 62  75 66 66 65 72 20 65 69  |e to a buffer ei|
00004a60  74 68 65 72 20 63 6c 61  69 6d 65 64 20 69 6e 20  |ther claimed in |
00004a70  52 4d 41 20 6f 72 20 61  20 67 69 76 65 6e 20 64  |RMA or a given d|
00004a80  65 73 74 69 6e 61 74 69  6f 6e 20 62 75 66 66 65  |estination buffe|
00004a90  72 2c 20 74 68 65 20 62  75 66 66 65 72 20 69 6e  |r, the buffer in|
00004aa0  20 52 34 20 69 73 20 6f  6e 6c 79 20 6e 65 65 64  | R4 is only need|
00004ab0  65 64 2c 20 69 66 20 74  68 65 20 44 53 79 6d 2d  |ed, if the DSym-|
00004ac0  53 6f 6e 67 20 63 6f 6e  74 61 69 6e 73 20 73 6f  |Song contains so|
00004ad0  6d 65 20 70 61 63 6b 65  64 20 64 61 74 61 2e 20  |me packed data. |
00004ae0  49 66 20 79 6f 75 20 73  61 76 65 20 61 20 50 6c  |If you save a Pl|
00004af0  61 79 65 72 6d 6f 64 75  6c 65 20 77 69 74 68 20  |ayermodule with |
00004b00  73 6f 6e 67 20 66 72 6f  6d 20 44 69 67 69 74 61  |song from Digita|
00004b10  6c 53 79 6d 70 68 6f 6e  79 2c 20 74 68 69 73 20  |lSymphony, this |
00004b20  53 57 49 20 69 73 20 64  69 73 61 62 6c 65 64 20  |SWI is disabled |
00004b30  69 6e 20 74 68 65 20 6d  6f 64 75 6c 65 2e 00 00  |in the module...|
00004b40  44 41 54 41 09 01 00 00  44 53 79 6d 5f 4c 6f 6f  |DATA....DSym_Loo|
00004b50  70 20 20 28 26 34 35 38  39 34 29 0a 23 50 61 72  |p  (&45894).#Par|
00004b60  65 6e 74 20 44 53 79 6d  5f 0a 3d 3e 09 52 30 20  |ent DSym_.=>.R0 |
00004b70  3d 09 2d 31 20 74 6f 20  72 65 61 64 20 6c 6f 6f  |=.-1 to read loo|
00004b80  70 20 73 74 61 74 75 73  0a 09 20 09 6f 74 68 65  |p status.. .othe|
00004b90  72 2c 20 74 6f 20 73 65  74 0a 0a 3c 3d 09 52 30  |r, to set..<=.R0|
00004ba0  20 3d 09 70 72 65 76 69  6f 75 73 20 6c 6f 6f 70  | =.previous loop|
00004bb0  20 73 74 61 74 75 73 20  28 30 20 65 6e 61 62 6c  | status (0 enabl|
00004bc0  65 64 2c 20 3e 30 20 64  69 73 61 62 6c 65 64 29  |ed, >0 disabled)|
00004bd0  0a 09 52 31 20 5c 3c 3e  09 30 20 69 66 20 74 68  |..R1 \<>.0 if th|
00004be0  65 20 74 75 6e 65 20 68  61 73 20 6c 6f 6f 70 65  |e tune has loope|
00004bf0  64 0a 0a 54 68 69 73 20  63 61 6c 6c 20 63 6f 6e  |d..This call con|
00004c00  74 72 6f 6c 73 20 77 68  65 74 68 65 72 20 74 68  |trols whether th|
00004c10  65 20 73 6f 6e 67 20 69  73 20 61 75 74 6f 6d 61  |e song is automa|
00004c20  74 69 63 61 6c 6c 79 20  72 65 73 74 61 72 74 65  |tically restarte|
00004c30  64 20 61 74 20 65 6e 64  20 6f 66 20 6c 61 73 74  |d at end of last|
00004c40  20 70 61 74 74 65 72 6e  2e 00 00 00 44 41 54 41  | pattern....DATA|
00004c50  19 01 00 00 44 53 79 6d  5f 4d 61 73 6b 56 6f 69  |....DSym_MaskVoi|
00004c60  63 65 20 20 28 26 34 35  38 38 42 29 0a 23 50 61  |ce  (&4588B).#Pa|
00004c70  72 65 6e 74 20 44 53 79  6d 5f 0a 3d 3e 09 52 30  |rent DSym_.=>.R0|
00004c80  20 3d 09 76 6f 69 63 65  20 6e 75 6d 62 65 72 20  | =.voice number |
00004c90  28 30 2d 37 29 0a 09 52  31 20 3d 09 2d 31 20 74  |(0-7)..R1 =.-1 t|
00004ca0  6f 20 72 65 61 64 20 76  6f 69 63 65 20 73 74 61  |o read voice sta|
00004cb0  74 65 0a 09 20 09 6f 74  68 65 72 2c 20 74 6f 20  |te.. .other, to |
00004cc0  73 65 74 20 76 6f 69 63  65 20 73 74 61 74 75 73  |set voice status|
00004cd0  0a 0a 3c 3d 09 52 30 20  3d 09 70 72 65 76 69 6f  |..<=.R0 =.previo|
00004ce0  75 73 20 76 6f 69 63 65  20 73 74 61 74 75 73 20  |us voice status |
00004cf0  28 30 3d 20 6f 66 66 2c  20 5c 3c 3e 30 3d 6f 6e  |(0= off, \<>0=on|
00004d00  29 0a 0a 54 68 69 73 20  63 61 6c 6c 20 6d 61 6b  |)..This call mak|
00004d10  65 73 20 61 20 63 68 61  6e 6e 65 6c 20 71 75 69  |es a channel qui|
00004d20  65 74 20 6f 6e 20 74 68  65 20 73 70 65 61 6b 65  |et on the speake|
00004d30  72 2c 20 69 65 20 69 74  20 69 73 20 73 74 69 6c  |r, ie it is stil|
00004d40  6c 20 70 6c 61 79 69 6e  67 20 62 75 74 20 6e 6f  |l playing but no|
00004d50  74 20 68 65 61 72 64 20  6f 6e 20 74 68 65 20 76  |t heard on the v|
00004d60  6f 69 63 65 2e 00 00 00  44 41 54 41 27 02 00 00  |oice....DATA'...|
00004d70  44 53 79 6d 5f 4e 6f 74  65 49 6e 66 6f 20 20 28  |DSym_NoteInfo  (|
00004d80  26 34 35 38 39 32 29 0a  23 50 61 72 65 6e 74 20  |&45892).#Parent |
00004d90  44 53 79 6d 5f 0a 3c 3d  09 52 30 20 3d 09 61 64  |DSym_.<=.R0 =.ad|
00004da0  64 72 65 73 73 20 6f 66  20 63 75 72 72 65 6e 74  |dress of current|
00004db0  20 6e 6f 74 65 73 20 74  61 62 6c 65 20 28 31 20  | notes table (1 |
00004dc0  77 6f 72 64 20 70 65 72  20 76 6f 69 63 65 29 20  |word per voice) |
00004dd0  6e 6f 74 65 20 69 73 20  30 20 74 6f 20 31 30 32  |note is 0 to 102|
00004de0  33 0a 09 52 31 20 3d 09  61 64 64 72 65 73 73 20  |3..R1 =.address |
00004df0  6f 66 20 63 75 72 72 65  6e 74 20 73 61 6d 70 6c  |of current sampl|
00004e00  65 73 20 74 61 62 6c 65  20 28 31 20 62 79 74 65  |es table (1 byte|
00004e10  20 70 65 72 20 76 6f 69  63 65 29 20 73 61 6d 70  | per voice) samp|
00004e20  6c 65 20 69 73 20 30 20  74 6f 20 36 33 0a 09 52  |le is 0 to 63..R|
00004e30  32 20 3d 09 61 64 64 72  65 73 73 20 6f 66 20 65  |2 =.address of e|
00004e40  66 66 65 63 74 73 20 74  61 62 6c 65 20 28 31 20  |ffects table (1 |
00004e50  77 6f 72 64 20 70 65 72  20 76 6f 69 63 65 29 0a  |word per voice).|
00004e60  09 20 09 62 69 74 73 20  33 30 2d 33 31 20 6d 65  |. .bits 30-31 me|
00004e70  61 6e 69 6e 67 6c 65 73  73 0a 09 20 09 62 69 74  |aningless.. .bit|
00004e80  73 20 31 36 2d 32 31 20  65 66 66 65 63 74 20 6e  |s 16-21 effect n|
00004e90  72 0a 09 20 09 62 69 74  73 20 20 30 2d 31 31 20  |r.. .bits  0-11 |
00004ea0  65 66 66 65 63 74 20 76  61 6c 75 65 0a 09 52 33  |effect value..R3|
00004eb0  20 3d 09 61 64 64 72 65  73 73 20 6f 66 20 76 6f  | =.address of vo|
00004ec0  6c 75 6d 65 73 20 74 61  62 6c 65 20 28 31 20 62  |lumes table (1 b|
00004ed0  79 74 65 20 70 65 72 20  76 6f 69 63 65 29 20 76  |yte per voice) v|
00004ee0  6f 6c 75 6d 65 20 69 73  20 30 20 74 6f 20 36 34  |olume is 0 to 64|
00004ef0  0a 0a 54 68 69 73 20 63  61 6c 6c 20 67 69 76 65  |..This call give|
00004f00  73 20 74 68 65 20 61 64  64 72 65 73 73 65 73 20  |s the addresses |
00004f10  6f 66 20 63 75 72 72 65  6e 74 20 6e 6f 74 65 2c  |of current note,|
00004f20  20 73 61 6d 70 6c 65 2c  20 65 66 66 65 63 74 20  | sample, effect |
00004f30  61 6e 64 20 76 6f 6c 75  6d 65 20 74 61 62 6c 65  |and volume table|
00004f40  2e 20 59 6f 75 20 63 6f  75 6c 64 20 75 73 65 20  |. You could use |
00004f50  74 68 69 73 20 69 6e 66  6f 72 6d 61 74 69 6f 6e  |this information|
00004f60  73 20 66 6f 72 20 65 78  61 6d 70 6c 65 20 74 6f  |s for example to|
00004f70  20 77 72 69 74 65 20 79  6f 75 72 20 6f 77 6e 20  | write your own |
00004f80  56 75 42 61 72 73 20 72  6f 75 74 69 6e 65 2e 00  |VuBars routine..|
00004f90  44 41 54 41 03 01 00 00  44 53 79 6d 5f 50 61 72  |DATA....DSym_Par|
00004fa0  61 6d 73 20 20 28 26 34  35 38 39 39 29 0a 23 50  |ams  (&45899).#P|
00004fb0  61 72 65 6e 74 20 44 53  79 6d 5f 0a 3c 3d 09 52  |arent DSym_.<=.R|
00004fc0  30 20 3d 09 73 70 65 65  64 20 28 31 2d 26 46 46  |0 =.speed (1-&FF|
00004fd0  46 29 0a 09 52 31 20 3d  09 74 65 6d 70 6f 20 28  |F)..R1 =.tempo (|
00004fe0  31 2d 26 46 46 46 29 0a  09 52 32 20 3d 09 63 6f  |1-&FFF)..R2 =.co|
00004ff0  75 6e 74 65 72 20 28 30  2d 26 46 46 45 29 0a 0a  |unter (0-&FFE)..|
00005000  54 68 69 73 20 63 61 6c  6c 20 72 65 61 64 73 20  |This call reads |
00005010  74 68 65 20 63 75 72 72  65 6e 74 20 73 70 65 65  |the current spee|
00005020  64 20 76 61 72 69 61 62  6c 65 73 2e 20 54 68 65  |d variables. The|
00005030  20 63 6f 75 6e 74 65 72  20 76 61 72 69 65 73 20  | counter varies |
00005040  66 72 6f 6d 20 31 20 74  6f 20 73 70 65 65 64 2d  |from 1 to speed-|
00005050  31 20 61 74 20 61 20 73  70 65 65 64 20 61 63 63  |1 at a speed acc|
00005060  6f 72 64 69 6e 67 20 74  6f 20 74 65 6d 70 6f 20  |ording to tempo |
00005070  28 35 30 20 74 69 6d 65  73 20 61 20 73 65 63 20  |(50 times a sec |
00005080  66 6f 72 20 64 65 66 61  75 6c 74 20 74 65 6d 70  |for default temp|
00005090  6f 29 2e 00 44 41 54 41  63 00 00 00 44 53 79 6d  |o)..DATAc...DSym|
000050a0  5f 50 61 75 73 65 20 20  28 26 34 35 38 38 45 29  |_Pause  (&4588E)|
000050b0  0a 23 50 61 72 65 6e 74  20 44 53 79 6d 5f 0a 54  |.#Parent DSym_.T|
000050c0  68 69 73 20 63 61 6c 6c  20 73 74 6f 70 73 20 74  |his call stops t|
000050d0  68 65 20 63 75 72 72 65  6e 74 20 6e 6f 74 65 73  |he current notes|
000050e0  20 61 6e 64 20 63 75 74  73 20 61 6c 6c 20 63 68  | and cuts all ch|
000050f0  61 6e 6e 65 6c 73 2e 00  44 41 54 41 b4 01 00 00  |annels..DATA....|
00005100  44 53 79 6d 5f 50 6c 61  79 49 6e 73 74 72 20 20  |DSym_PlayInstr  |
00005110  28 26 34 35 38 38 36 29  0a 23 50 61 72 65 6e 74  |(&45886).#Parent|
00005120  20 44 53 79 6d 5f 0a 3d  3e 09 52 30 20 3d 09 76  | DSym_.=>.R0 =.v|
00005130  6f 69 63 65 20 6e 75 6d  62 65 72 20 28 30 2d 37  |oice number (0-7|
00005140  29 0a 09 52 31 20 3d 09  6e 6f 74 65 20 6e 75 6d  |)..R1 =.note num|
00005150  62 65 72 20 28 30 2d 33  36 29 0a 09 52 32 20 3d  |ber (0-36)..R2 =|
00005160  09 73 61 6d 70 6c 65 20  6e 75 6d 62 65 72 20 28  |.sample number (|
00005170  30 2d 36 33 29 0a 09 52  33 20 3d 09 65 66 66 65  |0-63)..R3 =.effe|
00005180  63 74 20 6e 75 6d 62 65  72 20 28 30 2d 36 33 29  |ct number (0-63)|
00005190  0a 09 52 34 20 3d 09 65  66 66 65 63 74 20 76 61  |..R4 =.effect va|
000051a0  6c 75 65 20 28 30 2d 26  46 46 46 29 0a 09 52 35  |lue (0-&FFF)..R5|
000051b0  20 3d 09 6d 69 6e 69 6d  75 6d 20 73 75 73 74 61  | =.minimum susta|
000051c0  69 6e 20 74 69 6d 65 20  28 69 6e 20 31 2f 35 30  |in time (in 1/50|
000051d0  74 68 20 73 65 63 29 0a  09 52 36 20 5c 3c 3e 09  |th sec)..R6 \<>.|
000051e0  30 20 74 6f 20 77 61 69  74 20 66 6f 72 20 62 75  |0 to wait for bu|
000051f0  66 66 65 72 20 65 6d 70  74 79 2c 20 65 6c 73 65  |ffer empty, else|
00005200  20 64 6f 6e 27 74 20 77  61 69 74 0a 0a 3c 3d 09  | don't wait..<=.|
00005210  52 30 2d 52 36 20 63 6f  72 72 75 70 74 65 64 0a  |R0-R6 corrupted.|
00005220  0a 54 68 65 20 6e 65 77  20 6e 6f 74 65 20 69 73  |.The new note is|
00005230  20 70 75 74 20 74 6f 20  74 68 65 20 62 75 66 66  | put to the buff|
00005240  65 72 20 61 6e 64 20 70  6c 61 79 65 64 2e 20 53  |er and played. S|
00005250  65 74 74 69 6e 67 20 73  75 73 74 61 69 6e 20 74  |etting sustain t|
00005260  69 6d 65 20 6d 65 61 6e  73 20 74 68 61 74 20 74  |ime means that t|
00005270  68 65 20 6e 65 77 20 6e  6f 74 65 20 68 61 73 20  |he new note has |
00005280  70 72 69 6f 72 69 74 79  20 6f 6e 20 74 68 65 20  |priority on the |
00005290  74 75 6e 65 20 6e 6f 74  65 73 20 64 75 72 69 6e  |tune notes durin|
000052a0  67 20 74 68 69 73 20 74  69 6d 65 2e 44 41 54 41  |g this time.DATA|
000052b0  6e 01 00 00 44 53 79 6d  5f 50 6c 61 79 49 6e 73  |n...DSym_PlayIns|
000052c0  74 72 50 61 63 6b 65 64  20 20 28 26 34 35 38 38  |trPacked  (&4588|
000052d0  35 29 0a 23 50 61 72 65  6e 74 20 44 73 79 6d 5f  |5).#Parent Dsym_|
000052e0  0a 3d 3e 09 52 30 20 3d  09 76 6f 69 63 65 20 6e  |.=>.R0 =.voice n|
000052f0  75 6d 62 65 72 20 28 30  2d 37 29 0a 09 52 31 20  |umber (0-7)..R1 |
00005300  3d 09 66 75 6c 6c 20 6e  6f 74 65 20 64 61 74 61  |=.full note data|
00005310  0a 09 52 35 20 3d 09 6d  69 6e 69 6d 75 6d 20 73  |..R5 =.minimum s|
00005320  75 73 74 61 69 6e 20 74  69 6d 65 20 28 69 6e 20  |ustain time (in |
00005330  31 2f 35 30 74 68 20 73  65 63 29 0a 09 52 36 20  |1/50th sec)..R6 |
00005340  5c 3c 3e 09 30 20 74 6f  20 77 61 69 74 20 66 6f  |\<>.0 to wait fo|
00005350  72 20 62 75 66 66 65 72  20 65 6d 70 74 79 2c 20  |r buffer empty, |
00005360  65 6c 73 65 20 64 6f 6e  27 74 20 77 61 69 74 0a  |else don't wait.|
00005370  0a 3c 3d 09 52 30 2d 52  36 20 63 6f 72 72 75 70  |.<=.R0-R6 corrup|
00005380  74 65 64 0a 0a 54 68 65  20 6e 65 77 20 6e 6f 74  |ted..The new not|
00005390  65 20 69 73 20 75 6e 70  61 63 6b 65 64 2c 20 70  |e is unpacked, p|
000053a0  75 74 20 74 6f 20 74 68  65 20 62 75 66 66 65 72  |ut to the buffer|
000053b0  20 61 6e 64 20 70 6c 61  79 65 64 2e 20 53 65 74  | and played. Set|
000053c0  74 69 6e 67 20 73 75 73  74 61 69 6e 20 74 69 6d  |ting sustain tim|
000053d0  65 20 6d 65 61 6e 73 20  74 68 61 74 20 74 68 65  |e means that the|
000053e0  20 6e 65 77 20 6e 6f 74  65 20 68 61 73 20 70 72  | new note has pr|
000053f0  69 6f 72 69 74 79 20 6f  6e 20 74 68 65 20 74 75  |iority on the tu|
00005400  6e 65 20 6e 6f 74 65 73  20 64 75 72 69 6e 67 20  |ne notes during |
00005410  74 68 69 73 20 74 69 6d  65 2e 00 00 44 41 54 41  |this time...DATA|
00005420  5b 01 00 00 44 53 79 6d  5f 50 6c 61 79 53 69 6e  |[...DSym_PlaySin|
00005430  67 6c 65 20 20 28 26 34  35 38 39 42 29 0a 23 50  |gle  (&4589B).#P|
00005440  61 72 65 6e 74 20 44 53  79 6d 5f 0a 3d 3e 09 52  |arent DSym_.=>.R|
00005450  30 20 3d 09 2d 31 20 74  68 65 6e 20 69 66 20 52  |0 =.-1 then if R|
00005460  31 20 5c 3c 3e 2d 31 20  70 6c 61 79 20 70 61 74  |1 \<>-1 play pat|
00005470  74 65 72 6e 20 52 31 0a  09 20 09 69 66 20 52 31  |tern R1.. .if R1|
00005480  20 3d 20 2d 31 20 70 6c  61 79 20 6e 6f 72 6d 61  | = -1 play norma|
00005490  6c 0a 09 20 09 6f 74 68  65 72 2c 20 2d 31 20 74  |l.. .other, -1 t|
000054a0  68 65 6e 20 70 6c 61 79  20 70 61 74 74 65 72 6e  |hen play pattern|
000054b0  73 20 66 72 6f 6d 20 52  30 20 74 6f 20 52 31 0a  |s from R0 to R1.|
000054c0  09 52 32 20 3d 09 2d 31  20 74 6f 20 6e 6f 74 20  |.R2 =.-1 to not |
000054d0  6c 6f 6f 70 20 61 74 20  65 6e 64 0a 09 09 6f 74  |loop at end...ot|
000054e0  68 65 72 2c 20 2d 31 20  74 6f 20 6c 6f 6f 70 0a  |her, -1 to loop.|
000054f0  0a 54 68 65 20 70 61 74  74 65 72 6e 20 70 6f 73  |.The pattern pos|
00005500  20 69 73 20 73 65 74 20  74 6f 20 30 2e 20 49 6e  | is set to 0. In|
00005510  20 74 68 65 20 63 61 73  65 20 6f 66 20 70 6c 61  | the case of pla|
00005520  79 69 6e 67 20 61 20 70  61 72 74 20 6f 66 20 74  |ying a part of t|
00005530  68 65 20 73 65 71 75 65  6e 63 65 2c 20 74 68 65  |he sequence, the|
00005540  20 63 75 72 72 65 6e 74  20 70 6f 73 69 74 69 6f  | current positio|
00005550  6e 20 69 73 20 73 65 74  20 74 6f 20 74 68 65 20  |n is set to the |
00005560  66 69 72 73 74 20 70 6f  73 20 69 6e 20 74 68 61  |first pos in tha|
00005570  74 20 70 61 72 74 2e 00  44 41 54 41 8c 00 00 00  |t part..DATA....|
00005580  44 53 79 6d 5f 52 65 73  65 74 50 61 72 61 6d 73  |DSym_ResetParams|
00005590  20 20 28 26 34 35 38 38  37 29 0a 23 50 61 72 65  |  (&45887).#Pare|
000055a0  6e 74 20 44 53 79 6d 5f  0a 41 6c 6c 20 70 61 72  |nt DSym_.All par|
000055b0  61 6d 65 74 65 72 73 20  61 72 65 20 72 65 73 65  |ameters are rese|
000055c0  74 20 28 73 74 65 72 65  6f 2c 20 63 6f 75 6e 74  |t (stereo, count|
000055d0  65 72 2c 20 65 66 66 65  63 74 73 29 20 61 6e 64  |er, effects) and|
000055e0  20 20 63 75 72 72 65 6e  74 20 6e 6f 74 65 73 20  |  current notes |
000055f0  63 75 74 20 6f 6e 20 61  6c 6c 20 63 68 61 6e 6e  |cut on all chann|
00005600  65 6c 73 2e 44 41 54 41  88 00 00 00 44 53 79 6d  |els.DATA....DSym|
00005610  5f 52 65 73 74 61 72 74  53 6f 6e 67 20 20 28 26  |_RestartSong  (&|
00005620  34 35 38 38 31 29 0a 23  50 61 72 65 6e 74 20 44  |45881).#Parent D|
00005630  53 79 6d 5f 0a 54 68 69  73 20 63 61 6c 6c 20 72  |Sym_.This call r|
00005640  65 73 65 74 73 20 61 6c  6c 20 70 61 72 61 6d 65  |esets all parame|
00005650  74 65 72 73 2c 20 73 65  74 73 20 74 68 65 20 74  |ters, sets the t|
00005660  75 6e 65 20 70 6f 73 69  74 69 6f 6e 20 74 6f 20  |une position to |
00005670  30 20 61 6e 64 20 73 74  61 72 74 73 20 74 68 65  |0 and starts the|
00005680  20 73 6f 6e 67 20 61 67  61 69 6e 2e 44 41 54 41  | song again.DATA|
00005690  18 01 00 00 44 53 79 6d  5f 53 61 6d 70 6c 65 52  |....DSym_SampleR|
000056a0  61 74 65 20 20 28 26 34  35 38 39 37 29 0a 23 50  |ate  (&45897).#P|
000056b0  61 72 65 6e 74 20 44 53  79 6d 5f 0a 3d 3e 09 52  |arent DSym_.=>.R|
000056c0  30 20 3d 09 2d 31 20 74  6f 20 72 65 61 64 20 73  |0 =.-1 to read s|
000056d0  61 6d 70 6c 65 20 72 61  74 65 0a 09 20 09 6f 74  |ample rate.. .ot|
000056e0  68 65 72 2c 20 74 6f 20  73 65 74 0a 0a 3c 3d 09  |her, to set..<=.|
000056f0  52 30 20 3d 09 70 72 65  76 69 6f 75 73 20 73 61  |R0 =.previous sa|
00005700  6d 70 6c 65 20 72 61 74  65 20 28 30 2d 39 39 29  |mple rate (0-99)|
00005710  0a 0a 54 68 69 73 20 63  61 6c 6c 20 73 65 74 73  |..This call sets|
00005720  20 74 68 65 20 73 61 6d  70 6c 65 20 6f 75 74 70  | the sample outp|
00005730  75 74 20 64 65 6e 73 69  74 79 2e 20 54 68 65 20  |ut density. The |
00005740  6c 6f 77 65 72 20 74 68  65 20 6e 75 6d 62 65 72  |lower the number|
00005750  20 69 73 2c 20 74 68 65  20 6c 65 73 73 20 74 69  | is, the less ti|
00005760  6d 65 20 74 68 65 20 44  53 79 6d 20 6d 6f 64 75  |me the DSym modu|
00005770  6c 65 20 6e 65 65 64 73  20 74 6f 20 63 61 6c 63  |le needs to calc|
00005780  75 6c 61 74 65 2c 20 62  75 74 20 74 68 65 20 77  |ulate, but the w|
00005790  6f 72 73 65 20 74 68 65  20 71 75 61 6c 69 74 79  |orse the quality|
000057a0  20 69 73 2e 44 41 54 41  66 01 00 00 44 53 79 6d  | is.DATAf...DSym|
000057b0  5f 53 6f 6e 67 50 6f 73  20 20 28 26 34 35 38 38  |_SongPos  (&4588|
000057c0  43 29 0a 23 50 61 72 65  6e 74 20 44 53 79 6d 5f  |C).#Parent DSym_|
000057d0  0a 3d 3e 09 52 30 20 3d  09 2d 31 20 74 6f 20 72  |.=>.R0 =.-1 to r|
000057e0  65 61 64 20 73 65 71 75  65 6e 63 65 20 70 6f 73  |ead sequence pos|
000057f0  0a 09 09 6f 74 68 65 72  2c 20 74 6f 20 73 65 74  |...other, to set|
00005800  0a 09 52 31 20 3d 09 2d  31 20 74 6f 20 72 65 61  |..R1 =.-1 to rea|
00005810  64 20 70 61 74 74 65 72  6e 20 70 6f 73 0a 09 09  |d pattern pos...|
00005820  6f 74 68 65 72 2c 20 74  6f 20 73 65 74 0a 0a 3c  |other, to set..<|
00005830  3d 09 52 30 20 3d 09 70  72 65 76 69 6f 75 73 20  |=.R0 =.previous |
00005840  73 65 71 75 65 6e 63 65  20 70 6f 73 0a 09 52 31  |sequence pos..R1|
00005850  20 3d 09 70 72 65 76 69  6f 75 73 20 70 61 74 74  | =.previous patt|
00005860  65 72 6e 20 70 6f 73 20  28 30 2d 36 33 29 0a 0a  |ern pos (0-63)..|
00005870  54 68 69 73 20 63 61 6c  6c 20 72 65 61 64 73 20  |This call reads |
00005880  6f 72 20 73 65 74 73 20  74 68 65 20 70 61 74 74  |or sets the patt|
00005890  65 72 6e 20 70 6f 73 69  74 69 6f 6e 20 69 6e 20  |ern position in |
000058a0  73 6f 6e 67 20 61 6e 64  20 74 68 65 20 6e 6f 74  |song and the not|
000058b0  65 20 70 6f 73 69 74 69  6f 6e 20 69 6e 20 70 61  |e position in pa|
000058c0  74 74 65 72 6e 2e 20 49  66 20 74 68 65 20 70 61  |ttern. If the pa|
000058d0  74 74 65 72 6e 20 70 6f  73 69 74 69 6f 6e 20 69  |ttern position i|
000058e0  73 20 63 68 61 6e 67 65  64 2c 20 74 68 65 20 63  |s changed, the c|
000058f0  75 72 72 65 6e 74 20 6e  6f 74 65 20 69 73 20 72  |urrent note is r|
00005900  65 73 65 74 20 74 6f 20  30 2e 00 00 44 41 54 41  |eset to 0...DATA|
00005910  8b 01 00 00 44 53 79 6d  5f 53 74 65 72 65 6f 20  |....DSym_Stereo |
00005920  20 28 26 34 35 38 38 33  29 0a 23 50 61 72 65 6e  | (&45883).#Paren|
00005930  74 20 44 53 79 6d 5f 0a  3d 3e 09 52 30 20 3d 09  |t DSym_.=>.R0 =.|
00005940  76 6f 69 63 65 20 6e 75  6d 62 65 72 20 28 30 2d  |voice number (0-|
00005950  37 29 0a 09 52 31 20 3d  09 6e 65 77 20 73 74 65  |7)..R1 =.new ste|
00005960  72 65 6f 20 70 6f 73 69  74 69 6f 6e 2c 20 6f 72  |reo position, or|
00005970  20 2d 31 32 38 20 74 6f  20 72 65 61 64 0a 0a 3c  | -128 to read..<|
00005980  3d 09 52 31 20 3d 09 70  72 65 76 69 6f 75 73 20  |=.R1 =.previous |
00005990  73 74 65 72 65 6f 20 70  6f 73 69 74 69 6f 6e 20  |stereo position |
000059a0  28 2d 31 32 37 20 74 6f  20 31 32 37 29 20 66 6f  |(-127 to 127) fo|
000059b0  72 20 76 6f 69 63 65 20  6e 75 6d 62 65 72 20 52  |r voice number R|
000059c0  30 0a 0a 54 68 69 73 20  63 61 6c 6c 20 73 65 74  |0..This call set|
000059d0  73 20 74 68 65 20 73 74  65 72 65 6f 20 70 6f 73  |s the stereo pos|
000059e0  69 74 69 6f 6e 20 6f 66  20 6f 6e 65 20 76 6f 69  |ition of one voi|
000059f0  63 65 20 73 70 65 63 69  66 69 65 64 20 69 6e 20  |ce specified in |
00005a00  52 30 2e 20 41 20 70 6f  73 69 74 69 6f 6e 20 6f  |R0. A position o|
00005a10  66 20 7a 65 72 6f 20 6d  65 61 6e 73 20 74 68 61  |f zero means tha|
00005a20  74 20 74 68 65 20 6c 65  66 74 20 61 6e 64 20 72  |t the left and r|
00005a30  69 67 68 74 20 73 70 65  61 6b 65 72 20 67 65 74  |ight speaker get|
00005a40  20 62 6f 74 68 20 74 68  65 20 68 61 6c 66 20 61  | both the half a|
00005a50  6d 70 6c 69 74 75 64 65  2c 20 2d 31 32 37 20 6d  |mplitude, -127 m|
00005a60  65 61 6e 73 20 74 68 65  20 6c 65 66 74 20 73 70  |eans the left sp|
00005a70  65 61 6b 65 72 20 67 65  74 73 20 31 30 30 25 2c  |eaker gets 100%,|
00005a80  20 74 68 65 20 72 69 67  68 74 20 6f 6e 65 20 6e  | the right one n|
00005a90  6f 74 68 69 6e 67 2e 00  44 41 54 41 36 01 00 00  |othing..DATA6...|
00005aa0  44 53 79 6d 5f 54 75 6e  65 43 6f 6e 74 72 6f 6c  |DSym_TuneControl|
00005ab0  20 20 28 26 34 35 38 38  44 29 0a 23 50 61 72 65  |  (&4588D).#Pare|
00005ac0  6e 74 20 44 53 79 6d 5f  0a 3d 3e 09 52 30 20 3d  |nt DSym_.=>.R0 =|
00005ad0  09 2d 31 20 74 6f 20 72  65 61 64 20 73 74 61 74  |.-1 to read stat|
00005ae0  75 73 0a 09 20 09 6f 74  68 65 72 2c 20 74 6f 20  |us.. .other, to |
00005af0  73 65 74 20 28 6c 6f 77  65 72 20 62 79 74 65 29  |set (lower byte)|
00005b00  0a 0a 3c 3d 09 52 30 20  3d 20 70 72 65 76 69 6f  |..<=.R0 = previo|
00005b10  75 73 20 74 75 6e 65 20  73 74 61 74 75 73 20 28  |us tune status (|
00005b20  30 3d 20 6f 66 66 2c 20  5c 3c 3e 30 3d 20 6f 6e  |0= off, \<>0= on|
00005b30  29 0a 0a 54 68 69 73 20  63 61 6c 6c 20 63 6f 6e  |)..This call con|
00005b40  74 72 6f 6c 73 20 74 68  65 20 74 75 6e 65 20 64  |trols the tune d|
00005b50  65 63 6f 64 65 72 2e 20  4f 66 66 20 6d 65 61 6e  |ecoder. Off mean|
00005b60  73 20 74 68 65 20 74 75  6e 65 20 64 65 63 6f 64  |s the tune decod|
00005b70  65 72 20 77 6f 6e 27 74  20 6c 65 74 20 70 6c 61  |er won't let pla|
00005b80  79 20 6e 6f 74 65 73 20  61 6e 79 6d 6f 72 65 2c  |y notes anymore,|
00005b90  20 79 6f 75 20 63 61 6e  20 73 74 69 6c 6c 20 70  | you can still p|
00005ba0  6c 61 79 20 63 75 73 74  6f 6d 20 6e 6f 74 65 73  |lay custom notes|
00005bb0  2e 20 43 75 72 72 65 6e  74 20 6e 6f 74 65 73 20  |. Current notes |
00005bc0  73 74 69 6c 6c 20 70 6c  61 79 69 6e 67 2e 00 00  |still playing...|
00005bd0  44 41 54 41 95 00 00 00  44 53 79 6d 5f 54 75 6e  |DATA....DSym_Tun|
00005be0  65 49 6e 66 6f 20 20 28  26 34 35 38 39 41 29 0a  |eInfo  (&4589A).|
00005bf0  23 50 61 72 65 6e 74 20  44 53 79 6d 5f 0a 3c 3d  |#Parent DSym_.<=|
00005c00  09 52 30 20 3d 09 74 75  6e 65 20 6c 65 6e 67 74  |.R0 =.tune lengt|
00005c10  68 0a 09 52 31 20 3d 09  6e 75 6d 62 65 72 20 6f  |h..R1 =.number o|
00005c20  66 20 70 61 74 74 65 72  6e 73 0a 0a 54 68 69 73  |f patterns..This|
00005c30  20 63 61 6c 6c 20 72 65  61 64 73 20 73 6f 6d 65  | call reads some|
00005c40  20 67 65 6e 65 72 61 6c  20 69 6e 66 6f 72 6d 61  | general informa|
00005c50  74 69 6f 6e 73 20 61 62  6f 75 74 20 74 68 65 20  |tions about the |
00005c60  73 6f 6e 67 2e 00 00 00  44 41 54 41 f1 00 00 00  |song....DATA....|
00005c70  44 53 79 6d 5f 55 70 63  61 6c 6c 56 65 63 74 6f  |DSym_UpcallVecto|
00005c80  72 20 20 28 26 34 35 38  38 41 29 0a 23 50 61 72  |r  (&4588A).#Par|
00005c90  65 6e 74 20 44 53 79 6d  5f 0a 3d 3e 09 52 30 20  |ent DSym_.=>.R0 |
00005ca0  3d 09 2d 31 20 74 6f 20  72 65 61 64 20 75 70 63  |=.-1 to read upc|
00005cb0  61 6c 6c 20 61 64 64 72  65 73 73 0a 09 20 09 2d  |all address.. .-|
00005cc0  32 20 74 6f 20 73 65 74  20 64 65 66 61 75 6c 74  |2 to set default|
00005cd0  0a 09 20 09 61 64 64 72  65 73 73 20 74 6f 20 73  |.. .address to s|
00005ce0  65 74 0a 0a 3c 3d 09 52  30 20 3d 09 70 72 65 76  |et..<=.R0 =.prev|
00005cf0  69 6f 75 73 20 75 70 63  61 6c 6c 20 61 64 64 72  |ious upcall addr|
00005d00  65 73 73 0a 0a 54 68 69  73 20 63 61 6c 6c 20 72  |ess..This call r|
00005d10  65 61 64 73 20 61 6e 64  20 77 72 69 74 65 73 20  |eads and writes |
00005d20  74 68 65 20 75 70 63 61  6c 6c 20 76 65 63 74 6f  |the upcall vecto|
00005d30  72 20 61 64 64 72 65 73  73 2c 20 69 6e 66 6f 72  |r address, infor|
00005d40  6d 61 74 69 6f 6e 20 61  74 20 3c 4f 53 3a 4f 53  |mation at <OS:OS|
00005d50  5f 55 70 63 61 6c 6c 3e  2e 00 00 00 44 41 54 41  |_Upcall>....DATA|
00005d60  d8 00 00 00 44 73 79 6d  5f 56 6f 69 63 65 73 20  |....Dsym_Voices |
00005d70  20 28 26 34 35 38 38 46  29 0a 23 50 61 72 65 6e  | (&4588F).#Paren|
00005d80  74 20 44 53 79 6d 5f 0a  3d 3e 09 52 30 20 3d 09  |t DSym_.=>.R0 =.|
00005d90  2d 31 20 74 6f 20 72 65  61 64 20 68 61 72 64 77  |-1 to read hardw|
00005da0  61 72 65 20 76 6f 69 63  65 73 20 6e 75 6d 62 65  |are voices numbe|
00005db0  72 0a 09 20 09 6f 74 68  65 72 2c 20 74 6f 20 73  |r.. .other, to s|
00005dc0  65 74 20 76 6f 69 63 65  73 0a 0a 3c 3d 09 52 30  |et voices..<=.R0|
00005dd0  20 3d 09 70 72 65 76 69  6f 75 73 20 68 61 72 64  | =.previous hard|
00005de0  77 61 72 65 20 76 6f 69  63 65 73 20 6e 75 6d 62  |ware voices numb|
00005df0  65 72 20 28 31 2c 32 2c  34 20 6f 72 20 38 29 0a  |er (1,2,4 or 8).|
00005e00  0a 54 68 69 73 20 63 61  6c 6c 20 63 68 61 6e 67  |.This call chang|
00005e10  65 73 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |es the number of|
00005e20  20 68 61 72 64 77 61 72  65 20 63 68 61 6e 6e 65  | hardware channe|
00005e30  6c 73 2e 20 44 41 54 41  0f 01 00 00 44 53 79 6d  |ls. DATA....DSym|
00005e40  5f 56 6f 6c 20 20 28 26  34 35 38 38 32 29 0a 23  |_Vol  (&45882).#|
00005e50  50 61 72 65 6e 74 20 44  73 79 6d 5f 0a 3d 3e 09  |Parent Dsym_.=>.|
00005e60  52 30 20 3d 09 6e 65 77  20 6f 76 65 72 61 6c 6c  |R0 =.new overall|
00005e70  20 76 6f 6c 75 6d 65 2c  20 6f 72 20 2d 31 20 74  | volume, or -1 t|
00005e80  6f 20 72 65 61 64 0a 3c  3d 09 52 30 20 3d 09 70  |o read.<=.R0 =.p|
00005e90  72 65 76 69 6f 75 73 20  6f 76 65 72 61 6c 6c 20  |revious overall |
00005ea0  76 6f 6c 75 6d 65 0a 0a  54 68 69 73 20 63 61 6c  |volume..This cal|
00005eb0  6c 20 73 65 74 73 20 61  6e 64 2f 6f 72 20 72 65  |l sets and/or re|
00005ec0  61 64 73 20 74 68 65 20  6f 76 65 72 61 6c 6c 20  |ads the overall |
00005ed0  76 6f 6c 75 6d 65 2e 20  54 68 65 20 64 65 66 61  |volume. The defa|
00005ee0  75 6c 74 20 69 73 20 36  34 20 77 68 69 63 68 20  |ult is 64 which |
00005ef0  6d 65 61 6e 73 2c 20 74  68 61 74 20 74 68 65 20  |means, that the |
00005f00  73 6f 6e 67 73 20 61 6d  70 6c 69 74 75 64 65 20  |songs amplitude |
00005f10  69 73 20 6e 6f 74 20 64  65 63 72 65 61 73 65 64  |is not decreased|
00005f20  2e 20 41 20 76 6f 6c 75  6d 65 20 6f 66 20 30 20  |. A volume of 0 |
00005f30  6d 65 61 6e 73 20 61 20  71 75 69 65 74 20 73 6f  |means a quiet so|
00005f40  6e 67 2e 00 44 41 54 41  4d 01 00 00 44 53 79 6d  |ng..DATAM...DSym|
00005f50  5f 56 75 42 61 72 20 20  28 26 34 35 38 39 33 29  |_VuBar  (&45893)|
00005f60  0a 23 50 61 72 65 6e 74  20 44 53 79 6d 5f 0a 3d  |.#Parent DSym_.=|
00005f70  3e 09 52 30 20 3d 09 76  6f 69 63 65 20 6e 75 6d  |>.R0 =.voice num|
00005f80  62 65 72 20 28 30 2d 37  29 0a 3c 3d 09 52 31 20  |ber (0-7).<=.R1 |
00005f90  3d 09 56 75 20 62 61 72  20 68 65 69 67 68 74 20  |=.Vu bar height |
00005fa0  28 30 2d 36 34 29 0a 0a  54 68 69 73 20 63 61 6c  |(0-64)..This cal|
00005fb0  6c 20 67 69 76 65 73 20  79 6f 75 20 74 68 65 20  |l gives you the |
00005fc0  63 75 72 72 65 6e 74 20  56 75 42 61 72 20 68 65  |current VuBar he|
00005fd0  69 67 68 74 2e 20 49 20  63 6f 6e 73 69 64 65 72  |ight. I consider|
00005fe0  20 74 68 69 73 20 63 61  6c 6c 20 6e 6f 74 20 74  | this call not t|
00005ff0  68 61 74 20 67 6f 6f 64  2c 20 62 65 63 61 75 73  |hat good, becaus|
00006000  65 20 74 68 65 20 69 6e  66 6f 72 6d 61 74 69 6f  |e the informatio|
00006010  6e 20 69 73 20 6e 6f 74  20 67 69 76 65 6e 20 6f  |n is not given o|
00006020  6e 20 77 68 61 74 20 79  6f 75 20 68 65 61 72 2c  |n what you hear,|
00006030  20 62 75 74 20 6f 6e 6c  79 20 6f 6e 20 65 76 65  | but only on eve|
00006040  72 79 20 70 6c 61 79 65  64 20 6e 6f 74 65 2c 20  |ry played note, |
00006050  73 6f 20 79 6f 75 20 63  61 6e 27 74 20 67 65 74  |so you can't get|
00006060  20 65 76 65 6e 74 75 61  6c 20 70 69 74 63 68 20  | eventual pitch |
00006070  62 65 6e 64 69 6e 67 20  6f 72 20 61 6e 79 20 65  |bending or any e|
00006080  66 66 65 63 74 73 20 61  6e 64 20 73 6f 20 6f 6e  |ffects and so on|
00006090  2e 00 00 00 44 41 54 41  28 01 00 00 44 53 79 6d  |....DATA(...DSym|
000060a0  5f 56 75 47 72 61 76 69  74 79 20 20 28 26 34 35  |_VuGravity  (&45|
000060b0  38 39 36 29 0a 23 50 61  72 65 6e 74 20 44 53 79  |896).#Parent DSy|
000060c0  6d 5f 0a 3d 3e 09 52 30  20 3d 09 2d 31 20 74 6f  |m_.=>.R0 =.-1 to|
000060d0  20 72 65 61 64 20 56 75  47 72 61 76 69 74 79 0a  | read VuGravity.|
000060e0  09 20 09 6f 74 68 65 72  2c 20 74 6f 20 73 65 74  |. .other, to set|
000060f0  20 28 6c 6f 77 65 72 20  62 79 74 65 29 0a 0a 3c  | (lower byte)..<|
00006100  3d 09 52 30 20 3d 09 70  72 65 76 69 6f 75 73 20  |=.R0 =.previous |
00006110  67 72 61 76 69 74 79 20  6f 66 20 56 75 42 61 72  |gravity of VuBar|
00006120  20 28 30 2d 32 35 35 29  0a 0a 54 68 69 73 20 63  | (0-255)..This c|
00006130  61 6c 6c 20 73 65 74 73  2c 20 68 6f 77 20 6c 6f  |all sets, how lo|
00006140  6e 67 20 69 74 20 74 61  6b 65 73 20 75 6e 74 69  |ng it takes unti|
00006150  6c 20 74 68 65 20 56 75  42 61 72 20 73 6c 69 64  |l the VuBar slid|
00006160  65 73 20 64 6f 77 6e 20  66 72 6f 6d 20 36 34 20  |es down from 64 |
00006170  74 6f 20 30 2c 20 77 68  65 72 65 20 32 35 35 20  |to 0, where 255 |
00006180  6d 65 61 6e 73 20 68 69  67 68 65 73 74 20 73 70  |means highest sp|
00006190  65 65 64 2c 20 61 6e 64  20 30 20 6d 65 61 6e 73  |eed, and 0 means|
000061a0  20 6c 6f 6e 67 65 73 74  20 74 69 6d 65 20 74 6f  | longest time to|
000061b0  20 73 6c 69 64 65 20 64  6f 77 6e 2e 44 41 54 41  | slide down.DATA|
000061c0  7e 00 00 00 44 53 79 6d  5f 57 61 69 74 20 20 28  |~...DSym_Wait  (|
000061d0  26 34 35 38 39 30 29 0a  23 50 61 72 65 6e 74 20  |&45890).#Parent |
000061e0  44 53 79 6d 5f 0a 3d 3e  09 52 30 20 3d 09 76 6f  |DSym_.=>.R0 =.vo|
000061f0  69 63 65 20 6e 75 6d 62  65 72 20 28 30 2d 37 29  |ice number (0-7)|
00006200  0a 0a 43 20 69 73 20 73  65 74 20 69 66 20 63 75  |..C is set if cu|
00006210  73 74 6f 6d 20 6e 6f 74  65 20 62 75 66 66 65 72  |stom note buffer|
00006220  20 69 73 20 6e 6f 74 20  65 6d 70 74 79 2c 20 65  | is not empty, e|
00006230  6c 73 65 20 63 6c 65 61  72 2e 00 00 44 49 52 24  |lse clear...DIR$|
00006240  2c 00 00 00 2c 00 00 00  68 62 00 00 47 fd ff ff  |,...,...hb..G...|
00006250  05 5b bc 21 f9 00 00 00  13 00 00 00 00 00 00 00  |.[.!............|
00006260  21 52 6f 6f 74 00 00 00  44 41 54 41 f9 00 00 00  |!Root...DATA....|
00006270  44 79 6e 61 6d 69 74 65  0a 23 50 61 72 65 6e 74  |Dynamite.#Parent|
00006280  20 21 52 6f 6f 74 0a 23  50 72 65 66 69 78 20 44  | !Root.#Prefix D|
00006290  79 6e 61 6d 69 74 65 5f  0a 23 54 61 62 6c 65 20  |ynamite_.#Table |
000062a0  43 6f 6c 75 6d 6e 73 20  32 0a 41 6c 6c 6f 63 0a  |Columns 2.Alloc.|
000062b0  46 72 65 65 0a 46 72 65  65 57 69 74 68 49 44 0a  |Free.FreeWithID.|
000062c0  42 6c 6f 63 6b 49 6e 66  6f 0a 43 68 61 6e 67 65  |BlockInfo.Change|
000062d0  49 44 0a 52 65 73 69 7a  65 0a 4d 69 64 45 78 74  |ID.Resize.MidExt|
000062e0  65 6e 64 0a 53 61 76 65  0a 4c 6f 61 64 0a 52 65  |end.Save.Load.Re|
000062f0  64 75 63 65 0a 43 6f 6d  70 61 63 74 0a 4c 6f 63  |duce.Compact.Loc|
00006300  6b 0a 55 6e 6c 6f 63 6b  0a 43 6c 61 69 6d 41 6e  |k.Unlock.ClaimAn|
00006310  63 68 6f 72 0a 52 65 6c  65 61 73 65 41 6e 63 68  |chor.ReleaseAnch|
00006320  6f 72 0a 52 65 61 64 53  70 72 69 74 65 53 69 7a  |or.ReadSpriteSiz|
00006330  65 0a 44 65 73 63 72 69  62 65 0a 49 6e 74 65 67  |e.Describe.Integ|
00006340  72 69 74 79 43 68 65 63  6b 0a 43 68 61 6e 67 65  |rityCheck.Change|
00006350  41 6e 63 68 6f 72 0a 23  45 6e 64 54 61 62 6c 65  |Anchor.#EndTable|
00006360  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00006370  90 63 00 00 46 fd ff ff  cd 4c c7 13 df 00 00 00  |.c..F....L......|
00006380  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00006390  44 41 54 41 df 00 00 00  45 75 63 6c 69 64 0a 23  |DATA....Euclid.#|
000063a0  50 61 72 65 6e 74 20 21  52 6f 6f 74 0a 23 50 72  |Parent !Root.#Pr|
000063b0  65 66 69 78 20 45 75 63  6c 69 64 5f 0a 23 54 61  |efix Euclid_.#Ta|
000063c0  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 49 6e  |ble Columns 2.In|
000063d0  69 74 69 61 6c 69 73 65  0a 44 72 61 77 0a 4c 6f  |itialise.Draw.Lo|
000063e0  61 64 0a 53 61 76 65 0a  41 70 70 65 6e 64 0a 46  |ad.Save.Append.F|
000063f0  69 6e 64 0a 43 72 65 61  74 65 0a 44 65 73 74 72  |ind.Create.Destr|
00006400  6f 79 0a 53 65 74 0a 53  68 6f 77 0a 49 6e 73 65  |oy.Set.Show.Inse|
00006410  72 74 0a 44 65 6c 65 74  65 0a 54 72 61 6e 73 6c  |rt.Delete.Transl|
00006420  61 74 65 0a 5a 6f 6f 6d  0a 52 6f 74 61 74 65 0a  |ate.Zoom.Rotate.|
00006430  4c 69 73 74 0a 42 6f 75  6e 64 69 6e 67 53 70 68  |List.BoundingSph|
00006440  65 72 65 0a 43 6c 6f 73  65 44 6f 77 6e 0a 4d 69  |ere.CloseDown.Mi|
00006450  73 63 4f 70 0a 43 6f 6d  70 72 65 73 73 0a 45 78  |scOp.Compress.Ex|
00006460  70 61 6e 64 0a 23 45 6e  64 54 61 62 6c 65 0a 00  |pand.#EndTable..|
00006470  44 49 52 24 2c 00 00 00  2c 00 00 00 9c 64 00 00  |DIR$,...,....d..|
00006480  46 fd ff ff 0c 52 c7 13  a3 00 00 00 13 00 00 00  |F....R..........|
00006490  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
000064a0  a3 00 00 00 46 69 6c 65  42 75 66 66 65 72 0a 23  |....FileBuffer.#|
000064b0  50 61 72 65 6e 74 20 21  52 6f 6f 74 0a 23 50 72  |Parent !Root.#Pr|
000064c0  65 66 69 78 20 46 69 6c  65 42 75 66 66 65 72 5f  |efix FileBuffer_|
000064d0  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
000064e0  32 0a 4f 70 65 6e 0a 43  6c 6f 73 65 0a 43 6c 65  |2.Open.Close.Cle|
000064f0  61 72 0a 52 65 61 64 0a  52 65 61 64 42 79 74 65  |ar.Read.ReadByte|
00006500  0a 57 72 69 74 65 0a 57  72 69 74 65 42 79 74 65  |.Write.WriteByte|
00006510  0a 52 65 61 64 50 54 52  0a 57 72 69 74 65 50 54  |.ReadPTR.WritePT|
00006520  52 0a 54 61 73 6b 53 74  61 72 74 0a 54 61 73 6b  |R.TaskStart.Task|
00006530  51 75 69 74 0a 23 45 6e  64 54 61 62 6c 65 0a 00  |Quit.#EndTable..|
00006540  44 49 52 24 f4 01 00 00  f4 01 00 00 34 67 00 00  |DIR$........4g..|
00006550  47 fd ff ff 86 5e f3 91  f1 00 00 00 33 00 00 00  |G....^......3...|
00006560  00 00 00 00 21 52 6f 6f  74 00 00 00 28 68 00 00  |....!Root...(h..|
00006570  47 ff ff ff bf 66 f1 91  de 01 00 00 33 00 00 00  |G....f......3...|
00006580  00 00 00 00 4f 62 6a 65  63 74 44 65 73 63 00 00  |....ObjectDesc..|
00006590  08 6a 00 00 47 ff ff ff  6d 75 f1 91 21 01 00 00  |.j..G...mu..!...|
000065a0  33 00 00 00 00 00 00 00  4f 62 6a 65 63 74 4e 61  |3.......ObjectNa|
000065b0  6d 65 00 00 2c 6b 00 00  47 ff ff ff 48 8b f1 91  |me..,k..G...H...|
000065c0  c9 00 00 00 33 00 00 00  00 00 00 00 43 72 65 61  |....3.......Crea|
000065d0  74 65 53 70 72 69 74 65  00 00 00 00 f8 6b 00 00  |teSprite.....k..|
000065e0  47 ff ff ff 92 b5 f1 91  4a 02 00 00 33 00 00 00  |G.......J...3...|
000065f0  00 00 00 00 53 65 74 53  70 72 69 74 65 00 00 00  |....SetSprite...|
00006600  44 6e 00 00 47 ff ff ff  70 dd f1 91 6a 01 00 00  |Dn..G...p...j...|
00006610  33 00 00 00 00 00 00 00  43 6f 70 79 53 70 72 69  |3.......CopySpri|
00006620  74 65 00 00 b0 6f 00 00  47 ff ff ff 6a e9 f1 91  |te...o..G...j...|
00006630  4d 00 00 00 33 00 00 00  00 00 00 00 52 65 61 64  |M...3.......Read|
00006640  43 68 6f 69 63 65 73 00  00 70 00 00 47 ff ff ff  |Choices..p..G...|
00006650  43 ed f1 91 4c 00 00 00  33 00 00 00 00 00 00 00  |C...L...3.......|
00006660  4e 65 77 43 68 6f 69 63  65 73 00 00 4c 70 00 00  |NewChoices..Lp..|
00006670  47 ff ff ff fc f0 f1 91  4a 00 00 00 33 00 00 00  |G.......J...3...|
00006680  00 00 00 00 4c 6f 61 64  4b 65 79 73 00 00 00 00  |....LoadKeys....|
00006690  98 70 00 00 47 ff ff ff  ca ce ac ca 38 01 00 00  |.p..G.......8...|
000066a0  33 00 00 00 00 00 00 00  6b 65 79 6e 61 6d 65 00  |3.......keyname.|
000066b0  d0 71 00 00 47 ff ff ff  f1 64 81 e9 87 01 00 00  |.q..G....d......|
000066c0  33 00 00 00 00 00 00 00  56 69 65 77 65 72 44 65  |3.......ViewerDe|
000066d0  73 63 00 00 58 73 00 00  47 ff ff ff e8 42 f2 91  |sc..Xs..G....B..|
000066e0  92 00 00 00 33 00 00 00  00 00 00 00 42 6f 6f 74  |....3.......Boot|
000066f0  00 00 00 00 ec 73 00 00  47 ff ff ff 95 14 f3 91  |.....s..G.......|
00006700  bd 05 00 00 33 00 00 00  00 00 00 00 53 65 6c 65  |....3.......Sele|
00006710  63 74 00 00 ac 79 00 00  47 ff ff ff e3 58 f3 91  |ct...y..G....X..|
00006720  62 03 00 00 33 00 00 00  00 00 00 00 53 70 72 69  |b...3.......Spri|
00006730  74 65 00 00 44 41 54 41  f1 00 00 00 50 72 6f 46  |te..DATA....ProF|
00006740  69 6c 65 72 20 28 54 68  6f 6d 61 73 20 4f 6c 73  |iler (Thomas Ols|
00006750  73 6f 6e 29 0a 23 50 61  72 65 6e 74 20 21 52 6f  |son).#Parent !Ro|
00006760  6f 74 0a 23 50 72 65 66  69 78 20 46 69 6c 65 72  |ot.#Prefix Filer|
00006770  5f 0a 23 54 61 62 6c 65  20 43 6f 6c 75 6d 6e 73  |_.#Table Columns|
00006780  20 33 0a 3c 4f 62 6a 65  63 74 44 65 73 63 3e 0a  | 3.<ObjectDesc>.|
00006790  3c 4f 62 6a 65 63 74 4e  61 6d 65 3e 0a 3c 43 72  |<ObjectName>.<Cr|
000067a0  65 61 74 65 53 70 72 69  74 65 3e 0a 3c 53 65 74  |eateSprite>.<Set|
000067b0  53 70 72 69 74 65 3e 0a  3c 43 6f 70 79 53 70 72  |Sprite>.<CopySpr|
000067c0  69 74 65 3e 0a 3c 52 65  61 64 43 68 6f 69 63 65  |ite>.<ReadChoice|
000067d0  73 3e 0a 3c 4e 65 77 43  68 6f 69 63 65 73 3e 0a  |s>.<NewChoices>.|
000067e0  3c 4c 6f 61 64 4b 65 79  73 3e 0a 3c 4b 65 79 4e  |<LoadKeys>.<KeyN|
000067f0  61 6d 65 3e 0a 3c 56 69  65 77 65 72 44 65 73 63  |ame>.<ViewerDesc|
00006800  3e 0a 3c 42 6f 6f 74 3e  0a 3c 53 65 6c 65 63 74  |>.<Boot>.<Select|
00006810  3e 0a 3c 53 70 72 69 74  65 3e 0a 23 45 6e 64 54  |>.<Sprite>.#EndT|
00006820  61 62 6c 65 0a 00 00 00  44 41 54 41 de 01 00 00  |able....DATA....|
00006830  46 69 6c 65 72 5f 4f 62  6a 65 63 74 44 65 73 63  |Filer_ObjectDesc|
00006840  0a 23 50 61 72 65 6e 74  20 46 69 6c 65 72 5f 0a  |.#Parent Filer_.|
00006850  3d 3e 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |=>.R0 =.pointer |
00006860  74 6f 20 4f 62 6a 65 63  74 20 6e 61 6d 65 20 28  |to Object name (|
00006870  77 69 6c 6c 20 62 65 20  63 61 6e 6f 6e 69 63 61  |will be canonica|
00006880  6c 69 73 65 64 29 0a 3c  3d 09 52 32 20 3d 09 70  |lised).<=.R2 =.p|
00006890  6f 69 6e 74 65 72 20 74  6f 20 56 69 65 77 65 72  |ointer to Viewer|
000068a0  20 64 65 73 63 72 69 70  74 69 6f 6e 2c 20 6f 72  | description, or|
000068b0  20 30 20 69 66 20 6e 6f  74 20 76 69 73 69 62 6c  | 0 if not visibl|
000068c0  65 0a 09 52 33 20 3d 09  70 6f 69 6e 74 65 72 20  |e..R3 =.pointer |
000068d0  74 6f 20 4f 62 6a 65 63  74 20 64 65 73 63 72 69  |to Object descri|
000068e0  70 74 69 6f 6e 2c 20 6f  72 20 30 20 69 66 20 6e  |ption, or 0 if n|
000068f0  6f 74 20 76 69 73 69 62  6c 65 0a 0a 54 68 69 73  |ot visible..This|
00006900  20 77 69 6c 6c 20 72 65  74 75 72 6e 20 70 6f 69  | will return poi|
00006910  6e 74 65 72 73 20 74 6f  20 64 65 73 63 72 69 70  |nters to descrip|
00006920  74 69 6f 6e 73 20 6f 66  20 74 68 65 20 6f 62 6a  |tions of the obj|
00006930  65 63 74 20 61 6e 64 20  74 68 65 20 76 69 65 77  |ect and the view|
00006940  65 72 20 63 6f 6e 74 61  69 6e 69 6e 67 20 69 74  |er containing it|
00006950  20 69 66 20 69 74 20 69  73 20 63 75 72 72 65 6e  | if it is curren|
00006960  74 6c 79 20 76 69 73 69  62 6c 65 2e 20 49 66 20  |tly visible. If |
00006970  74 68 65 20 76 69 65 77  65 72 20 74 68 61 74 20  |the viewer that |
00006980  73 68 6f 75 6c 64 20 68  61 76 65 20 63 6f 6e 74  |should have cont|
00006990  61 69 6e 65 64 20 74 68  65 20 6f 62 6a 65 63 74  |ained the object|
000069a0  20 69 73 20 76 69 73 69  62 6c 65 2c 20 62 75 74  | is visible, but|
000069b0  20 74 68 65 20 6f 62 6a  65 63 74 20 69 73 20 6e  | the object is n|
000069c0  6f 74 2c 20 52 33 20 77  69 6c 6c 20 62 65 20 30  |ot, R3 will be 0|
000069d0  20 6f 6e 20 65 78 69 74  20 61 6e 64 20 52 32 20  | on exit and R2 |
000069e0  77 69 6c 6c 20 70 6f 69  6e 74 20 74 6f 20 74 68  |will point to th|
000069f0  65 20 76 69 65 77 65 72  20 64 65 73 63 72 69 70  |e viewer descrip|
00006a00  74 69 6f 6e 2e 0a 00 00  44 41 54 41 21 01 00 00  |tion....DATA!...|
00006a10  46 69 6c 65 72 5f 4f 62  6a 65 63 74 4e 61 6d 65  |Filer_ObjectName|
00006a20  0a 23 50 61 72 65 6e 74  20 46 69 6c 65 72 5f 0a  |.#Parent Filer_.|
00006a30  3d 3e 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |=>.R0 =.pointer |
00006a40  74 6f 20 62 75 66 66 65  72 20 66 6f 72 20 6e 61  |to buffer for na|
00006a50  6d 65 20 28 32 35 36 20  62 79 74 65 73 29 0a 09  |me (256 bytes)..|
00006a60  52 32 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R2 =.pointer to |
00006a70  56 69 65 77 65 72 20 64  65 73 63 72 69 70 74 69  |Viewer descripti|
00006a80  6f 6e 2c 20 6f 72 20 30  20 69 66 20 6e 6f 74 20  |on, or 0 if not |
00006a90  76 69 73 69 62 6c 65 0a  09 52 33 20 3d 09 70 6f  |visible..R3 =.po|
00006aa0  69 6e 74 65 72 20 74 6f  20 4f 62 6a 65 63 74 20  |inter to Object |
00006ab0  64 65 73 63 72 69 70 74  69 6f 6e 2c 20 6f 72 20  |description, or |
00006ac0  30 20 69 66 20 6e 6f 74  20 76 69 73 69 62 6c 65  |0 if not visible|
00006ad0  0a 3c 3d 09 61 6c 6c 20  70 72 65 73 65 72 76 65  |.<=.all preserve|
00006ae0  64 0a 0a 54 68 69 73 20  77 69 6c 6c 20 67 65 6e  |d..This will gen|
00006af0  65 72 61 74 65 20 61 20  66 75 6c 6c 20 70 61 74  |erate a full pat|
00006b00  68 6e 61 6d 65 20 66 6f  72 20 74 68 65 20 66 69  |hname for the fi|
00006b10  6c 65 20 64 65 66 69 6e  65 64 20 62 79 20 52 32  |le defined by R2|
00006b20  20 61 6e 64 20 52 33 2e  0a 00 00 00 44 41 54 41  | and R3.....DATA|
00006b30  c9 00 00 00 46 69 6c 65  72 5f 43 72 65 61 74 65  |....Filer_Create|
00006b40  53 70 72 69 74 65 0a 23  50 61 72 65 6e 74 20 46  |Sprite.#Parent F|
00006b50  69 6c 65 72 5f 0a 3d 3e  09 52 30 20 3d 09 70 6f  |iler_.=>.R0 =.po|
00006b60  69 6e 74 65 72 20 74 6f  20 73 70 72 69 74 65 20  |inter to sprite |
00006b70  6e 61 6d 65 0a 09 52 31  20 3d 09 53 70 72 69 74  |name..R1 =.Sprit|
00006b80  65 20 6d 6f 64 65 0a 3c  3d 09 52 31 20 3d 09 70  |e mode.<=.R1 =.p|
00006b90  6f 69 6e 74 65 72 20 74  6f 20 73 70 72 69 74 65  |ointer to sprite|
00006ba0  20 61 72 65 61 0a 09 52  32 20 3d 09 70 6f 69 6e  | area..R2 =.poin|
00006bb0  74 65 72 20 74 6f 20 73  70 72 69 74 65 0a 0a 54  |ter to sprite..T|
00006bc0  68 69 73 20 77 69 6c 6c  20 63 72 65 61 74 65 20  |his will create |
00006bd0  61 20 73 70 72 69 74 65  20 69 6e 20 74 68 65 20  |a sprite in the |
00006be0  46 69 6c 65 72 27 73 20  73 70 72 69 74 65 20 70  |Filer's sprite p|
00006bf0  6f 6f 6c 2e 0a 00 00 00  44 41 54 41 4a 02 00 00  |ool.....DATAJ...|
00006c00  46 69 6c 65 72 5f 53 65  74 53 70 72 69 74 65 0a  |Filer_SetSprite.|
00006c10  23 50 61 72 65 6e 74 20  46 69 6c 65 72 5f 0a 3d  |#Parent Filer_.=|
00006c20  3e 09 52 30 20 3d 09 70  6f 69 6e 74 65 72 20 74  |>.R0 =.pointer t|
00006c30  6f 20 73 70 72 69 74 65  20 6e 61 6d 65 20 76 61  |o sprite name va|
00006c40  6c 69 64 61 74 69 6f 6e  20 28 69 6e 63 6c 75 64  |lidation (includ|
00006c50  69 6e 67 20 6c 65 61 64  69 6e 67 20 27 53 27 29  |ing leading 'S')|
00006c60  0a 09 52 31 20 3d 09 70  6f 69 6e 74 65 72 20 74  |..R1 =.pointer t|
00006c70  6f 20 66 75 6c 6c 20 70  61 74 68 6e 61 6d 65 0a  |o full pathname.|
00006c80  3c 3d 09 61 6c 6c 20 70  72 65 73 65 72 76 65 64  |<=.all preserved|
00006c90  0a 0a 54 68 69 73 20 77  69 6c 6c 20 75 73 65 20  |..This will use |
00006ca0  74 68 65 20 67 69 76 65  6e 20 73 70 72 69 74 65  |the given sprite|
00006cb0  20 66 6f 72 20 74 68 65  20 6f 62 6a 65 63 74 20  | for the object |
00006cc0  67 69 76 65 6e 20 69 6e  20 52 31 2e 20 49 66 20  |given in R1. If |
00006cd0  74 68 65 20 64 69 72 65  63 74 6f 72 79 20 69 73  |the directory is|
00006ce0  20 73 74 69 6c 6c 20 6f  70 65 6e 2c 20 74 68 65  | still open, the|
00006cf0  20 73 70 72 69 74 65 20  77 69 6c 6c 20 72 65 70  | sprite will rep|
00006d00  6c 61 63 65 20 74 68 65  20 6f 6e 65 20 63 75 72  |lace the one cur|
00006d10  72 65 6e 74 6c 79 20 75  73 65 64 2c 20 77 68 69  |rently used, whi|
00006d20  63 68 20 77 69 6c 6c 20  75 73 75 61 6c 6c 79 20  |ch will usually |
00006d30  62 65 20 27 66 69 6c 65  5f 77 61 69 74 27 2e 20  |be 'file_wait'. |
00006d40  49 66 20 74 68 65 20 6f  62 6a 65 63 74 20 69 73  |If the object is|
00006d50  20 6e 6f 74 20 76 69 73  69 62 6c 65 2c 20 6e 6f  | not visible, no|
00006d60  74 68 69 6e 67 20 77 69  6c 6c 20 68 61 70 70 65  |thing will happe|
00006d70  6e 2e 0a 0a 59 6f 75 20  63 61 6e 20 61 6c 73 6f  |n...You can also|
00006d80  20 72 65 70 6f 72 74 20  61 6e 20 65 72 72 6f 72  | report an error|
00006d90  20 77 69 74 68 20 74 68  69 73 20 53 57 49 2e 20  | with this SWI. |
00006da0  54 68 65 20 73 70 72 69  74 65 20 77 69 6c 6c 20  |The sprite will |
00006db0  63 68 61 6e 67 65 20 74  6f 20 27 66 69 6c 65 5f  |change to 'file_|
00006dc0  65 72 72 27 2c 20 61 6e  64 20 74 68 65 20 74 65  |err', and the te|
00006dd0  78 74 20 77 69 6c 6c 20  62 65 20 73 68 6f 77 6e  |xt will be shown|
00006de0  20 69 6e 20 74 68 65 20  69 6e 66 6f 62 6f 78 2e  | in the infobox.|
00006df0  20 54 68 65 20 65 72 72  6f 72 20 6e 75 6d 62 65  | The error numbe|
00006e00  72 20 73 68 6f 75 6c 64  20 68 61 76 65 20 62 69  |r should have bi|
00006e10  74 73 20 32 34 2d 33 30  20 63 6c 65 61 72 20 69  |ts 24-30 clear i|
00006e20  6e 20 6f 72 64 65 72 20  74 6f 20 62 65 20 72 65  |n order to be re|
00006e30  63 6f 67 6e 69 73 65 64  20 61 73 20 73 75 63 68  |cognised as such|
00006e40  2e 0a 00 00 44 41 54 41  6a 01 00 00 46 69 6c 65  |....DATAj...File|
00006e50  72 5f 43 6f 70 79 53 70  72 69 74 65 0a 23 50 61  |r_CopySprite.#Pa|
00006e60  72 65 6e 74 20 46 69 6c  65 72 5f 0a 3d 3e 09 52  |rent Filer_.=>.R|
00006e70  30 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 73  |0 =.pointer to s|
00006e80  70 72 69 74 65 20 6e 61  6d 65 0a 3c 3d 09 61 6c  |prite name.<=.al|
00006e90  6c 20 70 72 65 73 65 72  76 65 64 0a 0a 54 68 69  |l preserved..Thi|
00006ea0  73 20 77 69 6c 6c 20 74  61 6b 65 20 61 20 63 6f  |s will take a co|
00006eb0  70 79 20 6f 66 20 74 68  65 20 73 70 72 69 74 65  |py of the sprite|
00006ec0  20 61 6e 64 20 70 75 74  20 69 74 20 69 6e 20 74  | and put it in t|
00006ed0  68 65 20 46 69 6c 65 72  27 73 20 73 70 72 69 74  |he Filer's sprit|
00006ee0  65 20 70 6f 6f 6c 2e 20  59 6f 75 20 73 68 6f 75  |e pool. You shou|
00006ef0  6c 64 20 63 61 6c 6c 20  74 68 69 73 20 61 66 74  |ld call this aft|
00006f00  65 72 20 63 6f 6d 70 6c  65 74 69 6e 67 20 79 6f  |er completing yo|
00006f10  75 72 20 62 61 63 6b 67  72 6f 75 6e 64 20 70 72  |ur background pr|
00006f20  6f 63 65 73 73 20 6f 66  20 64 72 61 77 69 6e 67  |ocess of drawing|
00006f30  20 74 68 65 20 73 70 72  69 74 65 2e 20 41 66 74  | the sprite. Aft|
00006f40  65 72 20 63 61 6c 6c 69  6e 67 20 74 68 69 73 20  |er calling this |
00006f50  53 57 49 20 79 6f 75 20  63 61 6e 20 64 69 73 70  |SWI you can disp|
00006f60  6f 73 65 20 6f 66 20 74  68 65 20 73 70 72 69 74  |ose of the sprit|
00006f70  65 20 61 6e 64 20 63 61  6c 6c 20 3c 46 69 6c 65  |e and call <File|
00006f80  72 5f 53 65 74 53 70 72  69 74 65 3e 2e 0a 0a 2a  |r_SetSprite>...*|
00006f90  4e 6f 74 65 3a 2a 20 4e  6f 74 20 69 6d 70 6c 65  |Note:* Not imple|
00006fa0  6d 65 6e 74 65 64 20 79  65 74 20 3a 2d 28 00 00  |mented yet :-(..|
00006fb0  44 41 54 41 4d 00 00 00  46 69 6c 65 72 5f 52 65  |DATAM...Filer_Re|
00006fc0  61 64 43 68 6f 69 63 65  73 0a 23 50 61 72 65 6e  |adChoices.#Paren|
00006fd0  74 20 46 69 6c 65 72 5f  0a 54 68 69 73 20 63 61  |t Filer_.This ca|
00006fe0  6c 6c 20 69 73 20 66 6f  72 20 69 6e 74 65 72 6e  |ll is for intern|
00006ff0  61 6c 20 75 73 65 20 6f  6e 6c 79 2e 0a 00 00 00  |al use only.....|
00007000  44 41 54 41 4c 00 00 00  46 69 6c 65 72 5f 4e 65  |DATAL...Filer_Ne|
00007010  77 43 68 6f 69 63 65 73  0a 23 50 61 72 65 6e 74  |wChoices.#Parent|
00007020  20 46 69 6c 65 72 5f 0a  54 68 69 73 20 63 61 6c  | Filer_.This cal|
00007030  6c 20 69 73 20 66 6f 72  20 69 6e 74 65 72 6e 61  |l is for interna|
00007040  6c 20 75 73 65 20 6f 6e  6c 79 2e 0a 44 41 54 41  |l use only..DATA|
00007050  4a 00 00 00 46 69 6c 65  72 5f 4c 6f 61 64 4b 65  |J...Filer_LoadKe|
00007060  79 73 0a 23 50 61 72 65  6e 74 20 46 69 6c 65 72  |ys.#Parent Filer|
00007070  5f 0a 54 68 69 73 20 63  61 6c 6c 20 69 73 20 66  |_.This call is f|
00007080  6f 72 20 69 6e 74 65 72  6e 61 6c 20 75 73 65 20  |or internal use |
00007090  6f 6e 6c 79 2e 0a 00 00  44 41 54 41 38 01 00 00  |only....DATA8...|
000070a0  46 69 6c 65 72 5f 4b 65  79 4e 61 6d 65 0a 23 50  |Filer_KeyName.#P|
000070b0  61 72 65 6e 74 20 46 69  6c 65 72 5f 0a 3d 3e 09  |arent Filer_.=>.|
000070c0  52 30 20 3d 09 3c 6b 65  79 20 63 6f 64 65 3d 3e  |R0 =.<key code=>|
000070d0  57 69 6d 70 3a 57 69 6d  70 5f 50 6f 6c 6c 38 61  |Wimp:Wimp_Poll8a|
000070e0  3e 0a 3c 3d 09 52 30 20  3d 09 70 6f 69 6e 74 65  |>.<=.R0 =.pointe|
000070f0  72 20 74 6f 20 6b 65 79  20 6e 61 6d 65 0a 0a 54  |r to key name..T|
00007100  68 69 73 20 53 57 49 20  73 68 6f 75 6c 64 20 72  |his SWI should r|
00007110  65 61 6c 6c 79 20 68 61  76 65 20 62 65 65 6e 20  |eally have been |
00007120  70 72 6f 76 69 64 65 64  20 62 79 20 74 68 65 20  |provided by the |
00007130  54 6f 6f 6c 62 6f 78 2c  20 62 75 74 20 73 69 6e  |Toolbox, but sin|
00007140  63 65 20 69 74 20 69 73  6e 27 74 2c 20 49 27 76  |ce it isn't, I'v|
00007150  65 20 70 75 74 20 69 74  20 69 6e 20 50 72 6f 46  |e put it in ProF|
00007160  69 6c 65 72 2e 20 54 68  65 20 72 65 61 73 6f 6e  |iler. The reason|
00007170  20 66 6f 72 20 74 68 69  73 20 53 57 49 20 69 73  | for this SWI is|
00007180  20 74 6f 20 67 65 74 20  61 20 63 6f 6e 73 69 73  | to get a consis|
00007190  74 65 6e 74 20 6e 61 6d  69 6e 67 20 6f 66 20 6b  |tent naming of k|
000071a0  65 79 73 2e 20 49 74 20  72 65 74 75 72 6e 73 20  |eys. It returns |
000071b0  74 68 65 20 6e 61 6d 65  20 6f 66 20 74 68 65 20  |the name of the |
000071c0  67 69 76 65 6e 20 6b 65  79 20 63 6f 64 65 2e 0a  |given key code..|
000071d0  44 41 54 41 87 01 00 00  46 69 6c 65 72 5f 56 69  |DATA....Filer_Vi|
000071e0  65 77 65 72 44 65 73 63  0a 23 50 61 72 65 6e 74  |ewerDesc.#Parent|
000071f0  20 46 69 6c 65 72 5f 0a  3d 3e 09 52 30 20 3d 09  | Filer_.=>.R0 =.|
00007200  70 6f 69 6e 74 65 72 20  74 6f 20 63 61 6e 6f 6e  |pointer to canon|
00007210  69 63 61 6c 20 64 69 72  65 63 74 6f 72 79 20 6e  |ical directory n|
00007220  61 6d 65 0a 3c 3d 09 52  32 20 3d 09 70 6f 69 6e  |ame.<=.R2 =.poin|
00007230  74 65 72 20 74 6f 20 76  69 65 77 65 72 20 64 65  |ter to viewer de|
00007240  73 63 72 69 70 74 69 6f  6e 2c 20 6f 72 20 30 20  |scription, or 0 |
00007250  69 66 20 6e 6f 74 20 76  69 73 69 62 6c 65 0a 0a  |if not visible..|
00007260  43 6f 6e 76 65 72 74 73  20 61 20 6e 61 6d 65 20  |Converts a name |
00007270  74 6f 20 61 20 76 69 65  77 65 72 20 64 65 73 63  |to a viewer desc|
00007280  72 69 70 74 69 6f 6e 2e  20 59 6f 75 20 6e 65 65  |ription. You nee|
00007290  64 20 74 6f 20 6b 6e 6f  77 20 74 68 65 20 66 6f  |d to know the fo|
000072a0  72 6d 61 74 20 6f 66 20  74 68 65 20 64 65 73 63  |rmat of the desc|
000072b0  72 69 70 74 6f 72 20 62  6c 6f 63 6b 20 74 6f 20  |riptor block to |
000072c0  6d 61 6b 65 20 75 73 65  20 6f 66 20 69 74 2c 20  |make use of it, |
000072d0  61 6e 64 20 61 73 20 74  68 61 74 20 66 6f 72 6d  |and as that form|
000072e0  61 74 20 63 61 6e 20 73  74 69 6c 6c 20 63 68 61  |at can still cha|
000072f0  6e 67 65 2c 20 69 74 20  68 61 73 20 6e 6f 74 20  |nge, it has not |
00007300  62 65 65 6e 20 64 6f 63  75 6d 65 6e 74 65 64 20  |been documented |
00007310  68 65 72 65 2e 20 41 74  20 74 68 65 20 6d 6f 6d  |here. At the mom|
00007320  65 6e 74 20 69 73 20 63  61 6e 20 62 65 20 75 73  |ent is can be us|
00007330  65 64 20 74 6f 20 64 65  74 65 72 6d 69 6e 65 20  |ed to determine |
00007340  69 66 20 74 68 65 20 76  69 65 77 65 72 20 69 73  |if the viewer is|
00007350  20 6f 70 65 6e 2e 0a 00  44 41 54 41 92 00 00 00  | open...DATA....|
00007360  46 69 6c 65 72 5f 42 6f  6f 74 0a 23 50 61 72 65  |Filer_Boot.#Pare|
00007370  6e 74 20 46 69 6c 65 72  5f 0a 3d 3e 09 52 30 20  |nt Filer_.=>.R0 |
00007380  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 63 61 6e  |=.pointer to can|
00007390  6f 6e 69 63 61 6c 20 64  69 72 65 63 74 6f 72 79  |onical directory|
000073a0  20 6e 61 6d 65 0a 3c 3d  09 61 6c 6c 20 70 72 65  | name.<=.all pre|
000073b0  73 65 72 76 65 64 0a 0a  44 6f 65 73 20 65 78 61  |served..Does exa|
000073c0  63 74 6c 79 20 74 68 65  20 73 61 6d 65 20 61 73  |ctly the same as|
000073d0  20 74 68 65 20 2a 46 69  6c 65 72 5f 42 6f 6f 74  | the *Filer_Boot|
000073e0  20 63 6f 6d 6d 61 6e 64  2e 0a 00 00 44 41 54 41  | command....DATA|
000073f0  bd 05 00 00 46 69 6c 65  72 5f 53 65 6c 65 63 74  |....Filer_Select|
00007400  0a 23 50 61 72 65 6e 74  20 46 69 6c 65 72 5f 0a  |.#Parent Filer_.|
00007410  3d 3e 09 52 30 20 3d 09  3c 72 65 61 73 6f 6e 20  |=>.R0 =.<reason |
00007420  63 6f 64 65 3d 3e 2e 72  65 61 73 6f 6e 73 3e 0a  |code=>.reasons>.|
00007430  09 6f 74 68 65 72 73 20  64 65 70 65 6e 64 65 6e  |.others dependen|
00007440  74 20 6f 6e 20 72 65 61  73 6f 6e 20 63 6f 64 65  |t on reason code|
00007450  0a 0a 54 68 69 73 20 63  61 6c 6c 20 63 61 6e 20  |..This call can |
00007460  62 65 20 75 73 65 64 20  74 6f 20 72 65 61 64 20  |be used to read |
00007470  6f 72 20 63 6f 6e 74 72  6f 6c 20 74 68 65 20 73  |or control the s|
00007480  65 6c 65 63 74 69 6f 6e  2e 20 49 74 20 69 73 20  |election. It is |
00007490  75 73 65 64 20 62 79 20  74 68 65 20 76 61 72 69  |used by the vari|
000074a0  61 62 6c 65 20 46 69 6c  65 72 24 53 65 6c 65 63  |able Filer$Selec|
000074b0  74 65 64 20 61 6d 6f 6e  67 20 6f 74 68 65 72 20  |ted among other |
000074c0  74 68 69 6e 67 73 2e 20  54 68 65 20 27 63 75 72  |things. The 'cur|
000074d0  72 65 6e 74 20 76 69 65  77 65 72 27 20 69 6e 20  |rent viewer' in |
000074e0  74 68 69 73 20 63 6f 6e  74 65 78 74 20 6d 65 61  |this context mea|
000074f0  6e 73 20 74 68 65 20 6f  6e 65 20 74 68 61 74 20  |ns the one that |
00007500  68 61 73 20 74 68 65 20  69 6e 70 75 74 20 66 6f  |has the input fo|
00007510  63 75 73 2e 0a 23 73 75  62 70 61 67 65 20 72 65  |cus..#subpage re|
00007520  61 73 6f 6e 73 0a 46 69  6c 65 72 5f 53 65 6c 65  |asons.Filer_Sele|
00007530  63 74 20 72 65 61 73 6f  6e 73 0a 52 65 61 73 6f  |ct reasons.Reaso|
00007540  6e 09 4d 65 61 6e 69 6e  67 0a 23 4c 69 6e 65 0a  |n.Meaning.#Line.|
00007550  30 09 3c 53 65 6c 65 63  74 20 66 69 6c 65 3d 3e  |0.<Select file=>|
00007560  2e 30 3e 0a 31 09 3c 41  64 64 20 66 69 6c 65 20  |.0>.1.<Add file |
00007570  74 6f 20 73 65 6c 65 63  74 69 6f 6e 3d 3e 2e 31  |to selection=>.1|
00007580  3e 0a 31 36 09 3c 52 65  61 64 20 63 75 72 72 65  |>.16.<Read curre|
00007590  6e 74 20 76 69 65 77 65  72 3d 3e 2e 31 36 3e 0a  |nt viewer=>.16>.|
000075a0  31 37 09 3c 52 65 61 64  20 6f 6e 65 20 73 65 6c  |17.<Read one sel|
000075b0  65 63 74 65 64 20 66 69  6c 65 3d 3e 2e 31 37 3e  |ected file=>.17>|
000075c0  0a 31 38 09 3c 52 65 61  64 20 6d 75 6c 74 69 70  |.18.<Read multip|
000075d0  6c 65 20 73 65 6c 65 63  74 65 64 20 66 69 6c 65  |le selected file|
000075e0  73 3d 3e 2e 31 38 3e 0a  23 73 75 62 70 61 67 65  |s=>.18>.#subpage|
000075f0  20 30 0a 46 69 6c 65 72  5f 53 65 6c 65 63 74 20  | 0.Filer_Select |
00007600  30 0a 3d 3e 09 52 30 20  3d 09 30 20 28 73 65 6c  |0.=>.R0 =.0 (sel|
00007610  65 63 74 20 66 69 6c 65  29 0a 09 52 31 20 3d 09  |ect file)..R1 =.|
00007620  70 6f 69 6e 74 65 72 20  74 6f 20 66 69 6c 65 6e  |pointer to filen|
00007630  61 6d 65 0a 3c 3d 09 61  6c 6c 20 70 72 65 73 65  |ame.<=.all prese|
00007640  72 76 65 64 0a 0a 53 65  6c 65 63 74 73 20 61 20  |rved..Selects a |
00007650  73 69 6e 67 6c 65 20 66  69 6c 65 2c 20 63 6c 65  |single file, cle|
00007660  61 72 69 6e 67 20 74 68  65 20 73 65 6c 65 63 74  |aring the select|
00007670  69 6f 6e 20 69 6e 20 74  68 61 74 20 76 69 65 77  |ion in that view|
00007680  65 72 2e 0a 23 73 75 62  70 61 67 65 20 31 0a 46  |er..#subpage 1.F|
00007690  69 6c 65 72 5f 53 65 6c  65 63 74 20 31 0a 3d 3e  |iler_Select 1.=>|
000076a0  09 52 30 20 3d 09 31 20  28 41 64 64 20 66 69 6c  |.R0 =.1 (Add fil|
000076b0  65 29 0a 09 52 31 20 3d  09 70 6f 69 6e 74 65 72  |e)..R1 =.pointer|
000076c0  20 74 6f 20 66 69 6c 65  20 74 6f 20 61 64 64 0a  | to file to add.|
000076d0  3c 3d 09 61 6c 6c 20 70  72 65 73 65 72 76 65 64  |<=.all preserved|
000076e0  0a 0a 41 64 64 73 20 61  20 66 69 6c 65 20 74 6f  |..Adds a file to|
000076f0  20 74 68 65 20 73 65 6c  65 63 74 69 6f 6e 20 69  | the selection i|
00007700  6e 20 74 68 65 20 76 69  65 77 65 72 20 69 74 20  |n the viewer it |
00007710  69 73 20 69 6e 2e 0a 23  73 75 62 70 61 67 65 20  |is in..#subpage |
00007720  31 36 0a 46 69 6c 65 72  5f 53 65 6c 65 63 74 20  |16.Filer_Select |
00007730  31 36 0a 3d 3e 09 52 30  20 3d 09 31 36 20 28 52  |16.=>.R0 =.16 (R|
00007740  65 61 64 20 63 75 72 72  65 6e 74 20 76 69 65 77  |ead current view|
00007750  65 72 29 0a 3c 3d 09 52  31 20 3d 09 70 6f 69 6e  |er).<=.R1 =.poin|
00007760  74 65 72 20 74 6f 20 76  69 65 77 65 72 20 6e 61  |ter to viewer na|
00007770  6d 65 2c 20 6f 72 20 30  20 69 66 20 6e 6f 6e 65  |me, or 0 if none|
00007780  0a 0a 52 65 61 64 73 20  74 68 65 20 76 69 65 77  |..Reads the view|
00007790  65 72 20 77 68 69 63 68  20 68 61 73 20 74 68 65  |er which has the|
000077a0  20 63 75 72 72 65 6e 74  20 69 6e 70 75 74 20 66  | current input f|
000077b0  6f 63 75 73 2e 0a 23 73  75 62 70 61 67 65 20 31  |ocus..#subpage 1|
000077c0  37 0a 46 69 6c 65 72 5f  53 65 6c 65 63 74 20 31  |7.Filer_Select 1|
000077d0  37 0a 3d 3e 09 52 30 20  3d 09 31 37 20 28 52 65  |7.=>.R0 =.17 (Re|
000077e0  61 64 20 6f 6e 65 20 66  69 6c 65 29 0a 09 52 31  |ad one file)..R1|
000077f0  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 76 69  | =.pointer to vi|
00007800  65 77 65 72 20 6e 61 6d  65 2c 20 6f 72 20 30 20  |ewer name, or 0 |
00007810  66 6f 72 20 76 69 65 77  65 72 20 77 69 74 68 20  |for viewer with |
00007820  66 6f 63 75 73 0a 3c 3d  09 52 31 20 3d 09 6f 62  |focus.<=.R1 =.ob|
00007830  6a 65 63 74 20 6e 61 6d  65 2c 20 6f 72 20 30 20  |ject name, or 0 |
00007840  69 66 20 6e 6f 6e 65 20  73 65 6c 65 63 74 65 64  |if none selected|
00007850  0a 0a 52 65 61 64 73 20  61 20 73 69 6e 67 6c 65  |..Reads a single|
00007860  20 66 69 6c 65 20 66 72  6f 6d 20 73 65 6c 65 63  | file from selec|
00007870  74 69 6f 6e 20 69 6e 20  61 20 76 69 65 77 65 72  |tion in a viewer|
00007880  2e 0a 23 73 75 62 70 61  67 65 20 31 38 0a 46 69  |..#subpage 18.Fi|
00007890  6c 65 72 5f 53 65 6c 65  63 74 20 31 38 0a 3d 3e  |ler_Select 18.=>|
000078a0  09 52 30 20 3d 09 31 38  20 28 52 65 61 64 20 6d  |.R0 =.18 (Read m|
000078b0  75 6c 74 69 70 6c 65 20  66 69 6c 65 73 29 0a 09  |ultiple files)..|
000078c0  52 31 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R1 =.pointer to |
000078d0  76 69 65 77 65 72 20 6e  61 6d 65 2c 20 6f 72 20  |viewer name, or |
000078e0  30 20 66 6f 72 20 76 69  65 77 65 72 20 77 69 74  |0 for viewer wit|
000078f0  68 20 66 6f 63 75 73 0a  09 52 33 20 3d 09 63 6f  |h focus..R3 =.co|
00007900  6e 74 65 78 74 2c 20 6f  72 20 30 20 66 6f 72 20  |ntext, or 0 for |
00007910  66 69 72 73 74 20 63 61  6c 6c 0a 3c 3d 09 52 31  |first call.<=.R1|
00007920  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 6f 62  | =.pointer to ob|
00007930  6a 65 63 74 20 6e 61 6d  65 2c 20 6f 72 20 30 20  |ject name, or 0 |
00007940  66 6f 72 20 66 69 72 73  74 20 66 69 6c 65 0a 09  |for first file..|
00007950  52 33 20 3d 09 6e 65 77  20 63 6f 6e 74 65 78 74  |R3 =.new context|
00007960  2c 20 6f 72 20 30 20 69  66 20 66 69 6e 69 73 68  |, or 0 if finish|
00007970  65 64 0a 0a 52 65 61 64  73 20 6d 75 6c 74 69 70  |ed..Reads multip|
00007980  6c 65 20 66 69 6c 65 73  20 66 72 6f 6d 20 74 68  |le files from th|
00007990  65 20 73 65 6c 65 63 74  69 6f 6e 20 69 6e 20 61  |e selection in a|
000079a0  20 76 69 65 77 65 72 2e  0a 00 00 00 44 41 54 41  | viewer.....DATA|
000079b0  62 03 00 00 46 69 6c 65  72 5f 53 70 72 69 74 65  |b...Filer_Sprite|
000079c0  0a 23 50 61 72 65 6e 74  20 46 69 6c 65 72 5f 0a  |.#Parent Filer_.|
000079d0  3d 3e 09 52 30 20 3d 09  64 65 73 69 72 65 64 20  |=>.R0 =.desired |
000079e0  73 70 72 69 74 65 20 68  65 69 67 68 74 20 28 30  |sprite height (0|
000079f0  3d 36 38 20 6f 73 20 75  6e 69 74 73 2c 20 31 3d  |=68 os units, 1=|
00007a00  33 36 20 6f 73 20 75 6e  69 74 73 29 0a 09 52 31  |36 os units)..R1|
00007a10  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 6f 62  | =.pointer to ob|
00007a20  6a 65 63 74 20 6e 61 6d  65 0a 09 52 32 20 3d 09  |ject name..R2 =.|
00007a30  74 61 73 6b 20 68 61 6e  64 6c 65 20 74 6f 20 72  |task handle to r|
00007a40  65 70 6c 79 20 74 6f 20  28 30 20 66 6f 72 20 62  |eply to (0 for b|
00007a50  72 6f 61 64 63 61 73 74  29 0a 3c 3d 09 52 30 20  |roadcast).<=.R0 |
00007a60  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 6f 70 74  |=.pointer to opt|
00007a70  69 6f 6e 61 6c 20 73 70  72 69 74 65 20 74 6f 20  |ional sprite to |
00007a80  75 73 65 20 69 6e 20 6d  65 61 6e 74 69 6d 65 0a  |use in meantime.|
00007a90  0a 54 68 69 73 20 63 61  6c 6c 20 69 73 20 74 68  |.This call is th|
00007aa0  65 20 6d 61 69 6e 20 69  6e 74 65 72 66 61 63 65  |e main interface|
00007ab0  20 74 6f 20 62 69 6e 64  69 6e 67 20 73 70 72 69  | to binding spri|
00007ac0  74 65 73 20 74 6f 20 64  69 73 63 20 6f 62 6a 65  |tes to disc obje|
00007ad0  63 74 73 2e 20 55 6e 6c  69 6b 65 20 65 61 72 6c  |cts. Unlike earl|
00007ae0  69 65 72 20 64 61 79 73  20 77 68 65 72 65 20 65  |ier days where e|
00007af0  76 65 72 79 20 61 70 70  6c 69 63 61 74 69 6f 6e  |very application|
00007b00  20 68 61 64 20 69 74 73  20 6f 77 6e 20 76 69 65  | had its own vie|
00007b10  77 20 6f 66 20 74 68 65  73 65 20 74 68 69 6e 67  |w of these thing|
00007b20  73 2c 20 74 68 65 20 66  69 6c 65 72 20 70 72 6f  |s, the filer pro|
00007b30  76 69 64 65 73 20 74 68  69 73 20 53 57 49 20 74  |vides this SWI t|
00007b40  6f 20 6b 65 65 70 20 69  74 20 69 6e 20 6f 6e 65  |o keep it in one|
00007b50  20 70 6c 61 63 65 2e 20  54 68 65 20 66 69 6c 65  | place. The file|
00007b60  72 20 63 61 6e 20 62 65  20 65 78 74 65 6e 64 65  |r can be extende|
00007b70  64 20 77 69 74 68 20 70  72 6f 67 72 61 6d 73 20  |d with programs |
00007b80  6c 69 6b 65 20 74 68 65  20 53 70 72 69 74 65 20  |like the Sprite |
00007b90  43 6c 69 65 6e 74 73 2c  20 61 6e 64 20 74 68 65  |Clients, and the|
00007ba0  73 65 20 65 78 74 65 6e  74 69 6f 6e 73 20 77 69  |se extentions wi|
00007bb0  6c 6c 20 61 6c 73 6f 20  62 65 20 63 6f 6e 73 69  |ll also be consi|
00007bc0  64 65 72 65 64 20 77 68  65 6e 20 74 68 69 73 20  |dered when this |
00007bd0  53 57 49 20 69 73 20 63  61 6c 6c 65 64 2e 0a 0a  |SWI is called...|
00007be0  41 66 74 65 72 20 63 61  6c 6c 69 6e 67 20 74 68  |After calling th|
00007bf0  69 73 20 53 57 49 2c 20  61 20 6d 65 73 73 61 67  |is SWI, a messag|
00007c00  65 20 77 69 6c 6c 20 62  65 20 73 65 6e 74 20 77  |e will be sent w|
00007c10  68 65 6e 20 74 68 65 20  73 70 72 69 74 65 20 68  |hen the sprite h|
00007c20  61 73 20 62 65 65 6e 20  66 6f 75 6e 64 2e 20 46  |as been found. F|
00007c30  69 6e 64 69 6e 67 20 74  68 65 20 73 70 72 69 74  |inding the sprit|
00007c40  65 20 6d 61 79 20 6d 65  61 6e 20 74 68 61 74 20  |e may mean that |
00007c50  61 70 70 73 20 61 72 65  20 62 6f 6f 74 65 64 20  |apps are booted |
00007c60  61 6e 64 20 6d 61 6e 79  20 6f 74 68 65 72 20 74  |and many other t|
00007c70  68 69 6e 67 73 2c 20 73  6f 20 74 68 65 72 65 20  |hings, so there |
00007c80  69 73 20 6e 6f 20 6d 61  78 69 6d 75 6d 20 72 65  |is no maximum re|
00007c90  70 6c 79 20 64 65 6c 61  79 2e 20 49 6e 64 65 65  |ply delay. Indee|
00007ca0  64 2c 20 69 66 20 74 68  65 20 6f 62 6a 65 63 74  |d, if the object|
00007cb0  20 64 6f 65 73 6e 27 74  20 65 78 69 73 74 2c 20  | doesn't exist, |
00007cc0  74 68 65 72 65 20 77 69  6c 6c 20 62 65 20 6e 6f  |there will be no|
00007cd0  20 72 65 70 6c 79 20 61  74 20 61 6c 6c 2e 20 54  | reply at all. T|
00007ce0  68 69 73 20 69 73 73 75  65 20 6d 61 79 20 62 65  |his issue may be|
00007cf0  20 61 64 64 72 65 73 73  65 64 20 69 6e 20 6c 61  | addressed in la|
00007d00  74 65 72 20 76 65 72 73  69 6f 6e 73 2e 0a 00 00  |ter versions....|
00007d10  44 41 54 41 9f 02 00 00  0d 00 01 11 f4 20 3e 53  |DATA......... >S|
00007d20  57 49 2d 66 69 6c 74 65  72 0d 00 02 04 0d 00 03  |WI-filter.......|
00007d30  13 de 20 63 6f 64 65 25  20 31 30 2a 31 30 32 34  |.. code% 10*1024|
00007d40  0d 00 04 04 0d 00 05 17  e3 20 70 61 73 73 25 20  |......... pass% |
00007d50  3d 20 30 20 b8 20 32 20  88 20 32 0d 00 06 04 0d  |= 0 . 2 . 2.....|
00007d60  00 07 14 20 20 20 20 20  20 50 25 20 3d 20 63 6f  |...      P% = co|
00007d70  64 65 25 0d 00 08 04 0d  00 09 1d 5b 20 20 20 20  |de%........[    |
00007d80  20 4f 50 54 20 20 20 20  20 20 20 20 70 61 73 73  | OPT        pass|
00007d90  25 20 20 20 0d 00 0a 04  0d 00 0b 37 20 20 20 20  |%   .......7    |
00007da0  20 20 3b 20 52 30 20 3d  20 73 65 61 72 63 68 20  |  ; R0 = search |
00007db0  77 6f 72 64 20 28 53 68  6f 75 6c 64 20 6e 65 76  |word (Should nev|
00007dc0  65 72 20 62 65 20 6d 6f  64 69 66 69 65 64 29 0d  |er be modified).|
00007dd0  00 0c 38 20 20 20 20 20  20 3b 20 52 31 20 3d 20  |..8      ; R1 = |
00007de0  62 75 66 66 65 72 20 66  6f 72 20 73 74 6f 72 69  |buffer for stori|
00007df0  6e 67 20 6d 6f 64 69 66  69 65 64 20 73 65 61 72  |ng modified sear|
00007e00  63 68 20 77 6f 72 64 0d  00 0d 1d 20 20 20 20 20  |ch word....     |
00007e10  20 3b 20 52 31 33 20 3d  20 73 6d 61 6c 6c 20 73  | ; R13 = small s|
00007e20  74 61 63 6b 0d 00 0e 04  0d 00 0f 47 20 20 20 20  |tack.......G    |
00007e30  20 20 3b 20 52 65 74 75  72 6e 20 70 74 72 20 74  |  ; Return ptr t|
00007e40  6f 20 73 65 61 72 63 68  20 77 6f 72 64 20 69 6e  |o search word in|
00007e50  20 52 30 2c 20 6f 72 20  2d 31 20 74 6f 20 72 65  | R0, or -1 to re|
00007e60  6a 65 63 74 20 63 6f 6d  70 6c 65 74 65 6c 79 0d  |ject completely.|
00007e70  00 10 49 20 20 20 20 20  20 3b 20 28 74 68 69 73  |..I      ; (this|
00007e80  20 63 61 6e 20 62 65 20  69 6e 69 74 69 61 6c 20  | can be initial |
00007e90  52 30 20 6f 72 20 52 31  20 6f 72 20 61 20 70 6f  |R0 or R1 or a po|
00007ea0  69 6e 74 65 72 20 69 6e  74 6f 20 6f 6e 65 20 6f  |inter into one o|
00007eb0  66 20 74 68 6f 73 65 29  0d 00 11 04 0d 00 12 1d  |f those)........|
00007ec0  20 20 20 20 20 20 53 54  4d 46 44 20 20 20 20 20  |      STMFD     |
00007ed0  52 31 33 21 2c 7b 31 34  7d 0d 00 13 1c 20 20 20  |R13!,{14}....   |
00007ee0  20 20 20 4c 44 52 42 20  20 20 20 20 20 52 31 34  |   LDRB      R14|
00007ef0  2c 5b 52 30 5d 0d 00 14  1d 20 20 20 20 20 20 43  |,[R0]....      C|
00007f00  4d 50 20 20 20 20 20 20  20 52 31 34 2c 23 97 22  |MP       R14,#."|
00007f10  58 22 0d 00 15 1d 20 20  20 20 20 20 43 4d 50 6e  |X"....      CMPn|
00007f20  65 20 20 20 20 20 52 31  34 2c 23 97 22 78 22 0d  |e     R14,#."x".|
00007f30  00 16 1c 20 20 20 20 20  20 41 44 44 65 71 20 20  |...      ADDeq  |
00007f40  20 20 20 52 30 2c 52 30  2c 23 31 0d 00 17 1e 20  |   R0,R0,#1.... |
00007f50  20 20 20 20 20 4c 44 4d  46 44 20 20 20 20 20 52  |     LDMFD     R|
00007f60  31 33 21 2c 7b 50 43 7d  5e 0d 00 18 04 0d 00 19  |13!,{PC}^.......|
00007f70  05 5d 0d 00 1a 04 0d 00  1b 05 ed 0d 00 1c 04 0d  |.]..............|
00007f80  00 1d 29 c8 99 20 22 4f  53 5f 46 69 6c 65 22 2c  |..).. "OS_File",|
00007f90  31 30 2c 22 21 50 72 65  22 2c 26 46 46 43 2c 2c  |10,"!Pre",&FFC,,|
00007fa0  63 6f 64 65 25 2c 50 25  0d 00 1e 05 e0 0d ff 00  |code%,P%........|
00007fb0  44 49 52 24 2c 00 00 00  2c 00 00 00 dc 7f 00 00  |DIR$,...,.......|
00007fc0  46 fd ff ff 63 bf dc 14  49 00 00 00 13 00 00 00  |F...c...I.......|
00007fd0  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
00007fe0  49 00 00 00 46 6f 6e 74  44 72 61 77 0a 23 50 61  |I...FontDraw.#Pa|
00007ff0  72 65 6e 74 20 21 52 6f  6f 74 0a 23 50 72 65 66  |rent !Root.#Pref|
00008000  69 78 20 46 6f 6e 74 44  72 61 77 5f 0a 46 69 6e  |ix FontDraw_.Fin|
00008010  64 46 6f 6e 74 0a 4c 6f  73 65 46 6f 6e 74 0a 50  |dFont.LoseFont.P|
00008020  61 69 6e 74 0a 00 00 00  44 49 52 24 2c 00 00 00  |aint....DIR$,...|
00008030  2c 00 00 00 54 80 00 00  46 fd ff ff 02 cc dc 14  |,...T...F.......|
00008040  4d 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |M...........!Roo|
00008050  74 00 00 00 44 41 54 41  4d 00 00 00 46 72 6f 6e  |t...DATAM...Fron|
00008060  74 45 6e 64 0a 23 50 61  72 65 6e 74 20 21 52 6f  |tEnd.#Parent !Ro|
00008070  6f 74 0a 23 50 72 65 66  69 78 20 46 72 6f 6e 74  |ot.#Prefix Front|
00008080  45 6e 64 5f 0a 45 78 74  65 6e 64 65 64 43 6d 64  |End_.ExtendedCmd|
00008090  4c 69 6e 65 0a 46 72 65  65 43 6d 64 4c 69 6e 65  |Line.FreeCmdLine|
000080a0  0a 00 00 00 44 49 52 24  70 01 00 00 70 01 00 00  |....DIR$p...p...|
000080b0  14 82 00 00 47 fd ff ff  01 ad c0 d2 9b 00 00 00  |....G...........|
000080c0  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
000080d0  b0 82 00 00 47 ff ff ff  4b ad c0 d2 de 00 00 00  |....G...K.......|
000080e0  13 00 00 00 00 00 00 00  4f 70 65 6e 00 00 00 00  |........Open....|
000080f0  90 83 00 00 47 ff ff ff  6f ad c0 d2 cf 00 00 00  |....G...o.......|
00008100  13 00 00 00 00 00 00 00  53 74 6f 72 65 00 00 00  |........Store...|
00008110  60 84 00 00 47 ff ff ff  3b ad c0 d2 1e 01 00 00  |`...G...;.......|
00008120  13 00 00 00 00 00 00 00  46 65 74 63 68 00 00 00  |........Fetch...|
00008130  80 85 00 00 47 ff ff ff  32 ad c0 d2 cf 00 00 00  |....G...2.......|
00008140  13 00 00 00 00 00 00 00  45 78 69 73 74 73 00 00  |........Exists..|
00008150  50 86 00 00 47 ff ff ff  40 ad c0 d2 ec 00 00 00  |P...G...@.......|
00008160  13 00 00 00 00 00 00 00  46 69 72 73 74 4b 65 79  |........FirstKey|
00008170  00 00 00 00 3c 87 00 00  47 ff ff ff 46 ad c0 d2  |....<...G...F...|
00008180  ce 01 00 00 13 00 00 00  00 00 00 00 4e 65 78 74  |............Next|
00008190  4b 65 79 00 0c 89 00 00  47 ff ff ff 07 ad c0 d2  |Key.....G.......|
000081a0  70 00 00 00 13 00 00 00  00 00 00 00 43 6c 6f 73  |p...........Clos|
000081b0  65 00 00 00 7c 89 00 00  47 ff ff ff 2d ad c0 d2  |e...|...G...-...|
000081c0  db 00 00 00 13 00 00 00  00 00 00 00 44 65 6c 65  |............Dele|
000081d0  74 65 00 00 58 8a 00 00  47 ff ff ff 04 ad c0 d2  |te..X...G.......|
000081e0  b7 00 00 00 13 00 00 00  00 00 00 00 43 6c 65 61  |............Clea|
000081f0  72 00 00 00 10 8b 00 00  47 ff ff ff 6a ad c0 d2  |r.......G...j...|
00008200  07 01 00 00 13 00 00 00  00 00 00 00 4f 70 65 6e  |............Open|
00008210  49 6e 00 00 44 41 54 41  9b 00 00 00 47 64 62 6d  |In..DATA....Gdbm|
00008220  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
00008230  50 72 65 66 69 78 20 47  64 62 6d 5f 0a 23 54 61  |Prefix Gdbm_.#Ta|
00008240  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 3c 4f  |ble Columns 2.<O|
00008250  70 65 6e 3e 0a 3c 53 74  6f 72 65 3e 0a 3c 46 65  |pen>.<Store>.<Fe|
00008260  74 63 68 3e 0a 3c 45 78  69 73 74 73 3e 0a 3c 46  |tch>.<Exists>.<F|
00008270  69 72 73 74 4b 65 79 3e  0a 3c 4e 65 78 74 4b 65  |irstKey>.<NextKe|
00008280  79 3e 0a 3c 43 6c 6f 73  65 3e 0a 3c 44 65 6c 65  |y>.<Close>.<Dele|
00008290  74 65 3e 0a 3c 43 6c 65  61 72 3e 0a 3c 4f 70 65  |te>.<Clear>.<Ope|
000082a0  6e 49 6e 3e 0a 23 45 6e  64 54 61 62 6c 65 0a 00  |nIn>.#EndTable..|
000082b0  44 41 54 41 de 00 00 00  47 64 62 6d 5f 4f 70 65  |DATA....Gdbm_Ope|
000082c0  6e 0a 23 50 61 72 65 6e  74 20 47 64 62 6d 5f 0a  |n.#Parent Gdbm_.|
000082d0  3d 3e 09 52 30 20 3d 09  50 6f 69 6e 74 65 72 20  |=>.R0 =.Pointer |
000082e0  74 6f 20 66 69 6c 65 6e  61 6d 65 0a 3c 3d 09 52  |to filename.<=.R|
000082f0  30 20 3d 09 66 69 6c 65  20 68 61 6e 64 6c 65 0a  |0 =.file handle.|
00008300  0a 4f 70 65 6e 73 20 61  20 64 61 74 61 62 61 73  |.Opens a databas|
00008310  65 20 66 69 6c 65 20 66  6f 72 20 72 65 61 64 69  |e file for readi|
00008320  6e 67 20 61 6e 64 20 77  72 69 74 69 6e 67 2c 20  |ng and writing, |
00008330  72 65 74 75 72 6e 69 6e  67 20 74 68 65 20 68 61  |returning the ha|
00008340  6e 64 6c 65 20 6f 66 20  74 68 65 20 66 69 6c 65  |ndle of the file|
00008350  20 73 6f 20 74 68 61 74  20 69 74 20 63 61 6e 20  | so that it can |
00008360  62 65 20 75 73 65 64 20  69 6e 20 6f 74 68 65 72  |be used in other|
00008370  20 63 61 6c 6c 73 2e 20  52 65 74 75 72 6e 73 20  | calls. Returns |
00008380  30 20 6f 6e 20 66 61 69  6c 75 72 65 2e 0a 00 00  |0 on failure....|
00008390  44 41 54 41 cf 00 00 00  47 64 62 6d 5f 53 74 6f  |DATA....Gdbm_Sto|
000083a0  72 65 0a 23 50 61 72 65  6e 74 20 47 64 62 6d 5f  |re.#Parent Gdbm_|
000083b0  0a 3d 3e 09 52 30 20 3d  09 66 69 6c 65 20 68 61  |.=>.R0 =.file ha|
000083c0  6e 64 6c 65 20 66 72 6f  6d 20 3c 47 64 62 6d 5f  |ndle from <Gdbm_|
000083d0  4f 70 65 6e 3e 0a 09 52  31 20 3d 09 70 6f 69 6e  |Open>..R1 =.poin|
000083e0  74 65 72 20 74 6f 20 6b  65 79 77 6f 72 64 0a 09  |ter to keyword..|
000083f0  52 32 20 3d 09 6c 65 6e  67 74 68 20 6f 66 20 6b  |R2 =.length of k|
00008400  65 79 77 6f 72 64 0a 09  52 33 20 3d 09 62 75 66  |eyword..R3 =.buf|
00008410  66 65 72 20 66 6f 72 20  64 61 74 61 0a 09 52 34  |fer for data..R4|
00008420  20 3d 09 6c 65 6e 67 74  68 20 6f 66 20 64 61 74  | =.length of dat|
00008430  61 0a 0a 53 74 6f 72 65  73 20 64 61 74 61 20 75  |a..Stores data u|
00008440  6e 64 65 72 20 61 20 6b  65 79 77 6f 72 64 20 69  |nder a keyword i|
00008450  6e 20 74 68 65 20 64 61  74 61 62 61 73 65 2e 00  |n the database..|
00008460  44 41 54 41 1e 01 00 00  47 64 62 6d 5f 46 65 74  |DATA....Gdbm_Fet|
00008470  63 68 0a 23 50 61 72 65  6e 74 20 47 64 62 6d 5f  |ch.#Parent Gdbm_|
00008480  0a 3d 3e 09 52 30 20 3d  09 66 69 6c 65 20 68 61  |.=>.R0 =.file ha|
00008490  6e 64 6c 65 20 66 72 6f  6d 20 3c 47 64 62 6d 5f  |ndle from <Gdbm_|
000084a0  4f 70 65 6e 3e 20 6f 72  20 3c 47 64 62 6d 5f 4f  |Open> or <Gdbm_O|
000084b0  70 65 6e 49 6e 3e 0a 09  52 31 20 3d 09 70 6f 69  |penIn>..R1 =.poi|
000084c0  6e 74 65 72 20 74 6f 20  6b 65 79 77 6f 72 64 0a  |nter to keyword.|
000084d0  09 52 32 20 3d 09 6c 65  6e 67 74 68 20 6f 66 20  |.R2 =.length of |
000084e0  6b 65 79 77 6f 72 64 0a  09 52 33 20 3d 09 62 75  |keyword..R3 =.bu|
000084f0  66 66 65 72 20 66 6f 72  20 64 61 74 61 0a 09 52  |ffer for data..R|
00008500  34 20 3d 09 6c 65 6e 67  74 68 20 6f 66 20 62 75  |4 =.length of bu|
00008510  66 66 65 72 0a 3c 3d 09  52 30 20 3d 09 6c 65 6e  |ffer.<=.R0 =.len|
00008520  67 74 68 20 6f 66 20 64  61 74 61 20 72 65 61 64  |gth of data read|
00008530  2c 20 6f 72 20 30 20 69  66 20 6b 65 79 20 6e 6f  |, or 0 if key no|
00008540  74 20 66 6f 75 6e 64 0a  0a 52 65 74 72 69 65 76  |t found..Retriev|
00008550  65 73 20 64 61 74 61 20  66 69 6c 65 64 20 75 6e  |es data filed un|
00008560  64 65 72 20 61 20 6b 65  79 77 6f 72 64 20 69 6e  |der a keyword in|
00008570  20 74 68 65 20 64 61 74  61 62 61 73 65 2e 00 00  | the database...|
00008580  44 41 54 41 cf 00 00 00  47 64 62 6d 5f 45 78 69  |DATA....Gdbm_Exi|
00008590  73 74 73 0a 23 50 61 72  65 6e 74 20 47 64 62 6d  |sts.#Parent Gdbm|
000085a0  5f 0a 3d 3e 09 52 30 20  3d 09 66 69 6c 65 20 68  |_.=>.R0 =.file h|
000085b0  61 6e 64 6c 65 20 66 72  6f 6d 20 3c 47 64 62 6d  |andle from <Gdbm|
000085c0  5f 4f 70 65 6e 3e 6f 72  20 3c 47 64 62 6d 5f 4f  |_Open>or <Gdbm_O|
000085d0  70 65 6e 49 6e 3e 0a 09  52 31 20 3d 09 70 6f 69  |penIn>..R1 =.poi|
000085e0  6e 74 65 72 20 74 6f 20  6b 65 79 77 6f 72 64 0a  |nter to keyword.|
000085f0  09 52 32 20 3d 09 6c 65  6e 67 74 68 20 6f 66 20  |.R2 =.length of |
00008600  6b 65 79 77 6f 72 64 0a  3c 3d 09 52 30 20 3d 09  |keyword.<=.R0 =.|
00008610  31 20 69 66 20 6b 65 79  20 65 78 69 73 74 73 2c  |1 if key exists,|
00008620  20 30 20 6f 74 68 65 72  77 69 73 65 0a 0a 43 68  | 0 otherwise..Ch|
00008630  65 63 6b 73 20 77 68 65  74 68 65 72 20 61 20 6b  |ecks whether a k|
00008640  65 79 77 6f 72 64 20 65  78 69 73 74 73 2e 0a 00  |eyword exists...|
00008650  44 41 54 41 ec 00 00 00  47 64 62 6d 5f 46 69 72  |DATA....Gdbm_Fir|
00008660  73 74 4b 65 79 0a 23 50  61 72 65 6e 74 20 47 64  |stKey.#Parent Gd|
00008670  62 6d 5f 0a 3d 3e 09 52  30 20 3d 09 66 69 6c 65  |bm_.=>.R0 =.file|
00008680  20 68 61 6e 64 6c 65 20  66 72 6f 6d 20 3c 47 64  | handle from <Gd|
00008690  62 6d 5f 4f 70 65 6e 3e  6f 72 20 3c 47 64 62 6d  |bm_Open>or <Gdbm|
000086a0  5f 4f 70 65 6e 49 6e 3e  0a 09 52 31 20 3d 09 70  |_OpenIn>..R1 =.p|
000086b0  6f 69 6e 74 65 72 20 74  6f 20 62 75 66 66 65 72  |ointer to buffer|
000086c0  0a 09 52 32 20 3d 09 6c  65 6e 67 74 68 20 6f 66  |..R2 =.length of|
000086d0  20 62 75 66 66 65 72 0a  3c 3d 09 52 30 20 3d 09  | buffer.<=.R0 =.|
000086e0  6c 65 6e 67 74 68 20 6f  66 20 6b 65 79 77 6f 72  |length of keywor|
000086f0  64 2c 20 6f 72 20 2d 31  20 69 66 20 6e 6f 20 6b  |d, or -1 if no k|
00008700  65 79 77 6f 72 64 73 20  65 78 69 73 74 0a 0a 52  |eywords exist..R|
00008710  65 74 75 72 6e 73 20 74  68 65 20 66 69 72 73 74  |eturns the first|
00008720  20 6b 65 79 77 6f 72 64  20 66 72 6f 6d 20 74 68  | keyword from th|
00008730  65 20 64 61 74 61 62 61  73 65 2e 0a 44 41 54 41  |e database..DATA|
00008740  ce 01 00 00 47 64 62 6d  5f 4e 65 78 74 4b 65 79  |....Gdbm_NextKey|
00008750  0a 23 50 61 72 65 6e 74  20 47 64 62 6d 5f 0a 3d  |.#Parent Gdbm_.=|
00008760  3e 09 52 30 20 3d 09 66  69 6c 65 20 68 61 6e 64  |>.R0 =.file hand|
00008770  6c 65 20 66 72 6f 6d 20  3c 47 64 62 6d 5f 4f 70  |le from <Gdbm_Op|
00008780  65 6e 3e 6f 72 20 3c 47  64 62 6d 5f 4f 70 65 6e  |en>or <Gdbm_Open|
00008790  49 6e 3e 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |In>..R1 =.pointe|
000087a0  72 20 74 6f 20 6c 61 73  74 20 6b 65 79 77 6f 72  |r to last keywor|
000087b0  64 0a 09 52 32 20 3d 09  6c 65 6e 67 74 68 20 6f  |d..R2 =.length o|
000087c0  66 20 6b 65 79 77 6f 72  64 0a 09 52 33 20 3d 09  |f keyword..R3 =.|
000087d0  70 6f 69 6e 74 65 72 20  74 6f 20 62 75 66 66 65  |pointer to buffe|
000087e0  72 0a 09 52 34 20 3d 09  6c 65 6e 67 74 68 20 6f  |r..R4 =.length o|
000087f0  66 20 62 75 66 66 65 72  0a 3c 3d 09 52 30 20 3d  |f buffer.<=.R0 =|
00008800  09 6c 65 6e 67 74 68 20  6f 66 20 6b 65 79 77 6f  |.length of keywo|
00008810  72 64 2c 20 6f 72 20 2d  31 20 69 66 20 6e 6f 20  |rd, or -1 if no |
00008820  6b 65 79 77 6f 72 64 73  20 65 78 69 73 74 0a 0a  |keywords exist..|
00008830  52 65 74 75 72 6e 73 20  74 68 65 20 6e 65 78 74  |Returns the next|
00008840  20 6b 65 79 77 6f 72 64  20 66 72 6f 6d 20 74 68  | keyword from th|
00008850  65 20 64 61 74 61 62 61  73 65 2e 0a 0a 4e 4f 54  |e database...NOT|
00008860  45 3a 20 4b 65 79 77 6f  72 64 73 20 61 72 65 20  |E: Keywords are |
00008870  6f 72 64 65 72 65 64 20  69 6e 20 61 20 68 61 73  |ordered in a has|
00008880  68 20 74 61 62 6c 65 20  6f 72 64 65 72 2e 20 54  |h table order. T|
00008890  68 69 73 20 69 73 20 6e  6f 74 20 6e 65 63 65 73  |his is not neces|
000088a0  73 61 72 69 6c 79 20 61  6c 70 68 61 62 65 74 69  |sarily alphabeti|
000088b0  63 2c 20 61 6e 64 20 73  68 6f 75 6c 64 20 6e 6f  |c, and should no|
000088c0  74 20 62 65 20 72 65 6c  69 65 64 20 6f 6e 20 69  |t be relied on i|
000088d0  66 20 3c 47 64 62 6d 5f  44 65 6c 65 74 65 3e 20  |f <Gdbm_Delete> |
000088e0  69 73 20 63 61 6c 6c 65  64 20 69 6e 20 74 68 65  |is called in the|
000088f0  20 6d 69 64 73 74 20 6f  66 20 61 20 4e 65 78 74  | midst of a Next|
00008900  4b 65 79 20 6c 6f 6f 70  2e 0a 00 00 44 41 54 41  |Key loop....DATA|
00008910  70 00 00 00 47 64 62 6d  5f 43 6c 6f 73 65 0a 23  |p...Gdbm_Close.#|
00008920  50 61 72 65 6e 74 20 47  64 62 6d 5f 0a 3d 3e 09  |Parent Gdbm_.=>.|
00008930  52 30 20 3d 09 66 69 6c  65 20 68 61 6e 64 6c 65  |R0 =.file handle|
00008940  20 66 72 6f 6d 20 3c 47  64 62 6d 5f 4f 70 65 6e  | from <Gdbm_Open|
00008950  3e 20 6f 72 20 3c 47 64  62 6d 5f 4f 70 65 6e 49  |> or <Gdbm_OpenI|
00008960  6e 3e 0a 0a 43 6c 6f 73  65 73 20 61 20 64 61 74  |n>..Closes a dat|
00008970  61 62 61 73 65 20 66 69  6c 65 2e 0a 44 41 54 41  |abase file..DATA|
00008980  db 00 00 00 47 64 62 6d  5f 44 65 6c 65 74 65 0a  |....Gdbm_Delete.|
00008990  23 50 61 72 65 6e 74 20  47 64 62 6d 5f 0a 3d 3e  |#Parent Gdbm_.=>|
000089a0  09 52 30 20 3d 09 66 69  6c 65 20 68 61 6e 64 6c  |.R0 =.file handl|
000089b0  65 20 66 72 6f 6d 20 3c  47 64 62 6d 5f 4f 70 65  |e from <Gdbm_Ope|
000089c0  6e 3e 0a 09 52 31 20 3d  09 70 6f 69 6e 74 65 72  |n>..R1 =.pointer|
000089d0  20 74 6f 20 6c 61 73 74  20 6b 65 79 77 6f 72 64  | to last keyword|
000089e0  0a 09 52 32 20 3d 09 6c  65 6e 67 74 68 20 6f 66  |..R2 =.length of|
000089f0  20 6b 65 79 77 6f 72 64  0a 0a 44 65 6c 65 74 65  | keyword..Delete|
00008a00  73 20 74 68 65 20 73 70  65 63 69 66 69 65 64 20  |s the specified |
00008a10  6b 65 79 2e 20 49 66 20  74 68 65 20 66 69 6c 65  |key. If the file|
00008a20  20 77 61 73 20 6f 70 65  6e 65 64 20 77 69 74 68  | was opened with|
00008a30  20 3c 47 64 62 6d 5f 4f  70 65 6e 49 6e 3e 20 74  | <Gdbm_OpenIn> t|
00008a40  68 69 73 20 53 57 49 20  68 61 73 20 6e 6f 20 65  |his SWI has no e|
00008a50  66 66 65 63 74 2e 0a 00  44 41 54 41 b7 00 00 00  |ffect...DATA....|
00008a60  47 64 62 6d 5f 43 6c 65  61 72 0a 23 50 61 72 65  |Gdbm_Clear.#Pare|
00008a70  6e 74 20 47 64 62 6d 5f  0a 3d 3e 09 52 30 20 3d  |nt Gdbm_.=>.R0 =|
00008a80  09 66 69 6c 65 20 68 61  6e 64 6c 65 20 66 72 6f  |.file handle fro|
00008a90  6d 20 3c 47 64 62 6d 5f  4f 70 65 6e 3e 0a 0a 44  |m <Gdbm_Open>..D|
00008aa0  65 6c 65 74 65 73 20 61  6c 6c 20 74 68 65 20 65  |eletes all the e|
00008ab0  6e 74 72 69 65 73 20 69  6e 20 74 68 65 20 64 61  |ntries in the da|
00008ac0  74 61 62 61 73 65 20 66  69 6c 65 2e 20 49 66 20  |tabase file. If |
00008ad0  74 68 65 20 66 69 6c 65  20 77 61 73 20 6f 70 65  |the file was ope|
00008ae0  6e 65 64 20 77 69 74 68  20 3c 47 64 62 6d 5f 4f  |ned with <Gdbm_O|
00008af0  70 65 6e 49 6e 3e 20 74  68 69 73 20 53 57 49 20  |penIn> this SWI |
00008b00  68 61 73 20 6e 6f 20 65  66 66 65 63 74 2e 0a 00  |has no effect...|
00008b10  44 41 54 41 07 01 00 00  47 64 62 6d 5f 4f 70 65  |DATA....Gdbm_Ope|
00008b20  6e 49 6e 0a 23 50 61 72  65 6e 74 20 47 64 62 6d  |nIn.#Parent Gdbm|
00008b30  5f 0a 3d 3e 09 52 30 20  3d 09 50 6f 69 6e 74 65  |_.=>.R0 =.Pointe|
00008b40  72 20 74 6f 20 66 69 6c  65 6e 61 6d 65 0a 3c 3d  |r to filename.<=|
00008b50  09 52 30 20 3d 09 66 69  6c 65 20 68 61 6e 64 6c  |.R0 =.file handl|
00008b60  65 0a 0a 54 68 69 73 20  53 57 49 20 69 73 20 61  |e..This SWI is a|
00008b70  76 61 69 6c 61 62 6c 65  20 66 72 6f 6d 20 67 64  |vailable from gd|
00008b80  62 6d 20 76 65 72 73 69  6f 6e 20 30 2e 30 33 2e  |bm version 0.03.|
00008b90  20 4f 70 65 6e 73 20 61  20 64 61 74 61 62 61 73  | Opens a databas|
00008ba0  65 20 66 69 6c 65 20 66  6f 72 20 72 65 61 64 69  |e file for readi|
00008bb0  6e 67 20 6f 6e 6c 79 2c  20 72 65 74 75 72 6e 69  |ng only, returni|
00008bc0  6e 67 20 74 68 65 20 68  61 6e 64 6c 65 20 6f 66  |ng the handle of|
00008bd0  20 74 68 65 20 66 69 6c  65 20 73 6f 20 74 68 61  | the file so tha|
00008be0  74 20 69 74 20 63 61 6e  20 62 65 20 75 73 65 64  |t it can be used|
00008bf0  20 69 6e 20 6f 74 68 65  72 20 63 61 6c 6c 73 2e  | in other calls.|
00008c00  20 52 65 74 75 72 6e 73  20 30 20 6f 6e 20 66 61  | Returns 0 on fa|
00008c10  69 6c 75 72 65 2e 0a 00  44 49 52 24 2c 00 00 00  |ilure...DIR$,...|
00008c20  2c 00 00 00 44 8c 00 00  46 fd ff ff 15 46 c7 13  |,...D...F....F..|
00008c30  81 01 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
00008c40  74 00 00 00 44 41 54 41  81 01 00 00 47 44 72 61  |t...DATA....GDra|
00008c50  77 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |w.#Parent !Root.|
00008c60  23 50 72 65 66 69 78 20  47 44 72 61 77 5f 0a 23  |#Prefix GDraw_.#|
00008c70  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
00008c80  50 72 6f 63 65 73 73 50  61 74 68 0a 50 72 6f 63  |ProcessPath.Proc|
00008c90  65 73 73 50 61 74 68 46  50 0a 46 69 6c 6c 0a 46  |essPathFP.Fill.F|
00008ca0  69 6c 6c 46 50 0a 53 74  72 6f 6b 65 0a 53 74 72  |illFP.Stroke.Str|
00008cb0  6f 6b 65 46 50 0a 53 74  72 6f 6b 65 50 61 74 68  |okeFP.StrokePath|
00008cc0  0a 53 74 72 6f 6b 65 50  61 74 68 46 50 0a 46 6c  |.StrokePathFP.Fl|
00008cd0  61 74 74 65 6e 50 61 74  68 0a 46 6c 61 74 74 65  |attenPath.Flatte|
00008ce0  6e 50 61 74 68 46 50 0a  54 72 61 6e 73 66 6f 72  |nPathFP.Transfor|
00008cf0  6d 50 61 74 68 0a 54 72  61 6e 73 66 6f 72 6d 50  |mPath.TransformP|
00008d00  61 74 68 46 50 0a 50 72  6f 63 65 73 73 43 6c 69  |athFP.ProcessCli|
00008d10  70 50 61 74 68 0a 50 72  6f 63 65 73 73 43 6c 69  |pPath.ProcessCli|
00008d20  70 50 61 74 68 46 50 0a  43 6c 69 70 50 61 74 68  |pPathFP.ClipPath|
00008d30  0a 43 6c 69 70 50 61 74  68 46 50 0a 43 6c 69 70  |.ClipPathFP.Clip|
00008d40  50 61 74 68 54 6f 50 61  74 68 0a 43 6c 69 70 50  |PathToPath.ClipP|
00008d50  61 74 68 54 6f 50 61 74  68 46 50 0a 43 6c 65 61  |athToPathFP.Clea|
00008d60  72 43 6c 69 70 52 65 67  69 6f 6e 0a 53 65 74 43  |rClipRegion.SetC|
00008d70  6c 69 70 52 65 67 69 6f  6e 0a 53 65 74 46 69 6c  |lipRegion.SetFil|
00008d80  6c 53 74 79 6c 65 0a 46  69 6c 6c 52 65 67 69 6f  |lStyle.FillRegio|
00008d90  6e 0a 53 65 74 50 72 69  6e 74 46 6c 61 67 0a 52  |n.SetPrintFlag.R|
00008da0  65 61 64 46 69 6c 6c 53  74 79 6c 65 0a 47 65 74  |eadFillStyle.Get|
00008db0  43 6c 69 70 52 65 67 69  6f 6e 0a 23 45 6e 64 54  |ClipRegion.#EndT|
00008dc0  61 62 6c 65 0a 00 00 00  44 49 52 24 2c 00 00 00  |able....DIR$,...|
00008dd0  2c 00 00 00 f4 8d 00 00  46 fd ff ff b8 06 72 18  |,.......F.....r.|
00008de0  83 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
00008df0  74 00 00 00 44 41 54 41  83 00 00 00 47 53 70 72  |t...DATA....GSpr|
00008e00  69 74 65 45 78 74 65 6e  64 0a 23 50 61 72 65 6e  |iteExtend.#Paren|
00008e10  74 20 21 52 6f 6f 74 0a  23 50 72 65 66 69 78 20  |t !Root.#Prefix |
00008e20  47 53 70 72 69 74 65 45  78 74 65 6e 64 5f 0a 23  |GSpriteExtend_.#|
00008e30  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 31 0a  |Table Columns 1.|
00008e40  50 6c 6f 74 53 70 72 69  74 65 0a 53 77 69 74 63  |PlotSprite.Switc|
00008e50  68 4f 75 74 70 75 74 54  6f 53 70 72 69 74 65 0a  |hOutputToSprite.|
00008e60  52 65 61 64 56 61 72 69  61 62 6c 65 0a 23 45 6e  |ReadVariable.#En|
00008e70  64 54 61 62 6c 65 0a 00  44 49 52 24 2c 00 00 00  |dTable..DIR$,...|
00008e80  2c 00 00 00 a4 8e 00 00  46 fd ff ff 92 4d c7 13  |,.......F....M..|
00008e90  ca 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
00008ea0  74 00 00 00 44 41 54 41  ca 00 00 00 48 79 70 68  |t...DATA....Hyph|
00008eb0  65 6e 61 74 6f 72 0a 23  50 61 72 65 6e 74 20 21  |enator.#Parent !|
00008ec0  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 48 79 70  |Root.#Prefix Hyp|
00008ed0  68 65 6e 61 74 6f 72 5f  0a 23 54 61 62 6c 65 20  |henator_.#Table |
00008ee0  43 6f 6c 75 6d 6e 73 20  32 0a 52 65 73 65 74 44  |Columns 2.ResetD|
00008ef0  69 63 74 69 6f 6e 61 72  79 0a 43 72 65 61 74 65  |ictionary.Create|
00008f00  44 69 63 74 69 6f 6e 61  72 79 0a 43 6f 70 79 44  |Dictionary.CopyD|
00008f10  69 63 74 69 6f 6e 61 72  79 0a 45 6e 71 75 69 72  |ictionary.Enquir|
00008f20  65 44 69 63 74 69 6f 6e  61 72 79 0a 46 69 6e 64  |eDictionary.Find|
00008f30  57 6f 72 64 0a 41 64 64  57 6f 72 64 0a 52 65 6d  |Word.AddWord.Rem|
00008f40  6f 76 65 57 6f 72 64 0a  48 79 70 68 65 6e 61 74  |oveWord.Hyphenat|
00008f50  65 0a 47 65 74 57 6f 72  64 73 0a 45 6e 75 6d 57  |e.GetWords.EnumW|
00008f60  6f 72 64 0a 23 45 6e 64  54 61 62 6c 65 0a 00 00  |ord.#EndTable...|
00008f70  44 49 52 24 2c 00 00 00  2c 00 00 00 9c 8f 00 00  |DIR$,...,.......|
00008f80  46 fd ff ff 50 4d c7 13  f6 00 00 00 13 00 00 00  |F...PM..........|
00008f90  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
00008fa0  f6 00 00 00 49 6d 61 67  65 45 78 74 65 6e 64 0a  |....ImageExtend.|
00008fb0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
00008fc0  72 65 66 69 78 20 49 6d  61 67 65 45 78 74 65 6e  |refix ImageExten|
00008fd0  64 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |d_.#Table Column|
00008fe0  73 20 32 0a 49 6e 66 6f  0a 50 75 74 53 70 72 69  |s 2.Info.PutSpri|
00008ff0  74 65 54 72 61 6e 73 66  6f 72 6d 65 64 0a 50 75  |teTransformed.Pu|
00009000  74 53 70 72 69 74 65 54  6f 42 75 66 66 65 72 54  |tSpriteToBufferT|
00009010  72 61 6e 73 66 6f 72 6d  65 64 0a 50 75 74 53 74  |ransformed.PutSt|
00009020  72 69 6e 67 54 72 61 6e  73 66 6f 72 6d 65 64 0a  |ringTransformed.|
00009030  47 65 74 42 42 6f 78 0a  47 65 74 49 6d 61 67 65  |GetBBox.GetImage|
00009040  42 42 6f 78 0a 4d 61 6b  65 4d 61 74 72 69 78 0a  |BBox.MakeMatrix.|
00009050  4d 61 6b 65 48 61 6c 66  74 6f 6e 65 54 69 6c 65  |MakeHalftoneTile|
00009060  0a 41 64 64 4b 65 72 6e  65 6c 54 6f 4d 61 74 72  |.AddKernelToMatr|
00009070  69 78 0a 4d 61 6b 65 53  69 6d 70 6c 65 53 63 72  |ix.MakeSimpleScr|
00009080  65 65 6e 54 69 6c 65 0a  23 45 6e 64 54 61 62 6c  |eenTile.#EndTabl|
00009090  65 0a 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |e...DIR$,...,...|
000090a0  c0 90 00 00 46 fd ff ff  2e 43 c7 13 94 00 00 00  |....F....C......|
000090b0  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
000090c0  44 41 54 41 94 00 00 00  49 6d 70 75 6c 73 65 0a  |DATA....Impulse.|
000090d0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
000090e0  72 65 66 69 78 20 49 6d  70 75 6c 73 65 5f 0a 23  |refix Impulse_.#|
000090f0  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
00009100  49 6e 69 74 69 61 6c 69  73 65 0a 44 65 63 6f 64  |Initialise.Decod|
00009110  65 0a 53 65 6e 64 4d 65  73 73 61 67 65 0a 54 72  |e.SendMessage.Tr|
00009120  61 6e 73 6d 69 74 44 61  74 61 0a 46 65 74 63 68  |ansmitData.Fetch|
00009130  44 61 74 61 0a 43 6c 6f  73 65 44 6f 77 6e 0a 44  |Data.CloseDown.D|
00009140  65 66 65 72 52 65 70 6c  79 0a 23 45 6e 64 54 61  |eferReply.#EndTa|
00009150  62 6c 65 0a 44 49 52 24  2c 00 00 00 2c 00 00 00  |ble.DIR$,...,...|
00009160  80 91 00 00 46 fd ff ff  0a 4e c7 13 d9 00 00 00  |....F....N......|
00009170  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00009180  44 41 54 41 d9 00 00 00  49 6e 74 65 72 66 61 63  |DATA....Interfac|
00009190  65 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |e.#Parent !Root.|
000091a0  23 50 72 65 66 69 78 20  49 6e 74 65 72 66 61 63  |#Prefix Interfac|
000091b0  65 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |e_.#Table Column|
000091c0  73 20 32 0a 53 6c 61 62  42 75 74 74 6f 6e 0a 52  |s 2.SlabButton.R|
000091d0  65 6e 64 65 72 33 64 57  69 6e 64 6f 77 0a 49 6e  |ender3dWindow.In|
000091e0  69 74 69 61 6c 69 73 65  0a 43 6c 6f 73 65 44 6f  |itialise.CloseDo|
000091f0  77 6e 0a 53 65 74 57 6f  72 6b 61 72 65 61 50 6f  |wn.SetWorkareaPo|
00009200  69 6e 74 65 72 0a 52 65  6d 6f 76 65 57 6f 72 6b  |inter.RemoveWork|
00009210  61 72 65 61 50 6f 69 6e  74 65 72 0a 50 6f 6c 6c  |areaPointer.Poll|
00009220  0a 53 65 6e 64 48 65 6c  70 0a 50 72 65 50 72 6f  |.SendHelp.PrePro|
00009230  63 65 73 73 4b 65 79 0a  50 6c 6f 74 33 64 49 63  |cessKey.Plot3dIc|
00009240  6f 6e 0a 42 6f 75 6e 64  69 6e 67 42 6f 78 0a 23  |on.BoundingBox.#|
00009250  45 6e 64 54 61 62 6c 65  0a 00 00 00 44 49 52 24  |EndTable....DIR$|
00009260  2c 00 00 00 2c 00 00 00  88 92 00 00 47 fd ff ff  |,...,.......G...|
00009270  83 69 7d 82 ff 00 00 00  03 00 00 00 00 00 00 00  |.i}.............|
00009280  21 52 6f 6f 74 00 00 00  44 41 54 41 ff 00 00 00  |!Root...DATA....|
00009290  49 5a 69 70 46 53 0a 23  50 61 72 65 6e 74 20 21  |IZipFS.#Parent !|
000092a0  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 49 5a 69  |Root.#Prefix IZi|
000092b0  70 46 53 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |pFS_.#Table Colu|
000092c0  6d 6e 73 20 32 0a 49 6e  69 74 69 61 6c 69 73 65  |mns 2.Initialise|
000092d0  0a 45 6a 65 63 74 0a 4c  6f 63 6b 0a 55 6e 6c 6f  |.Eject.Lock.Unlo|
000092e0  63 6b 0a 53 43 53 49 43  6f 6d 6d 61 6e 64 0a 44  |ck.SCSICommand.D|
000092f0  65 76 69 63 65 49 6e 71  75 69 72 79 0a 44 65 76  |eviceInquiry.Dev|
00009300  69 63 65 73 0a 52 65 73  65 74 0a 52 65 61 64 4f  |ices.Reset.ReadO|
00009310  70 0a 57 72 69 74 65 4f  70 0a 44 69 73 63 4f 70  |p.WriteOp.DiscOp|
00009320  0a 4d 69 73 63 4f 70 0a  44 72 69 76 65 73 0a 46  |.MiscOp.Drives.F|
00009330  72 65 65 53 70 61 63 65  0a 44 65 73 63 72 69 62  |reeSpace.Describ|
00009340  65 44 69 73 63 0a 47 65  74 53 74 61 74 75 73 0a  |eDisc.GetStatus.|
00009350  56 65 72 69 66 79 4f 70  0a 57 72 69 74 65 50 72  |VerifyOp.WritePr|
00009360  6f 74 65 63 74 0a 44 69  73 63 46 6f 72 6d 61 74  |otect.DiscFormat|
00009370  0a 42 6f 6f 74 43 68 61  6e 67 65 64 0a 23 45 6e  |.BootChanged.#En|
00009380  64 54 61 62 6c 65 0a 00  44 49 52 24 ac 01 00 00  |dTable..DIR$....|
00009390  ac 01 00 00 34 95 00 00  47 fd ff ff 2b 30 f2 d6  |....4...G...+0..|
000093a0  be 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
000093b0  74 00 00 00 f4 95 00 00  47 ff ff ff eb c6 f5 d6  |t.......G.......|
000093c0  43 01 00 00 33 00 00 00  00 00 00 00 53 65 74 4f  |C...3.......SetO|
000093d0  70 74 69 6f 6e 73 00 00  38 97 00 00 47 ff ff ff  |ptions..8...G...|
000093e0  82 d3 f5 d6 37 01 00 00  33 00 00 00 00 00 00 00  |....7...3.......|
000093f0  47 65 74 4f 70 74 69 6f  6e 73 00 00 70 98 00 00  |GetOptions..p...|
00009400  47 ff ff ff 12 fe f3 d6  20 01 00 00 33 00 00 00  |G....... ...3...|
00009410  00 00 00 00 43 72 65 61  74 65 42 75 66 66 65 72  |....CreateBuffer|
00009420  00 00 00 00 90 99 00 00  47 ff ff ff b8 4f f1 d6  |........G....O..|
00009430  6d 00 00 00 33 00 00 00  00 00 00 00 44 65 6c 65  |m...3.......Dele|
00009440  74 65 42 75 66 66 65 72  00 00 00 00 00 9a 00 00  |teBuffer........|
00009450  47 ff ff ff 6f ee f1 d6  93 00 00 00 33 00 00 00  |G...o.......3...|
00009460  00 00 00 00 41 70 70 65  6e 64 4c 69 6e 65 00 00  |....AppendLine..|
00009470  94 9a 00 00 47 ff ff ff  26 fc f1 d6 71 00 00 00  |....G...&...q...|
00009480  33 00 00 00 00 00 00 00  44 65 6c 65 74 65 4c 69  |3.......DeleteLi|
00009490  6e 65 00 00 08 9b 00 00  47 ff ff ff bd 16 f4 d6  |ne......G.......|
000094a0  b8 00 00 00 33 00 00 00  00 00 00 00 47 65 74 4c  |....3.......GetL|
000094b0  69 6e 65 00 c0 9b 00 00  47 ff ff ff d4 d9 f1 d6  |ine.....G.......|
000094c0  8e 00 00 00 33 00 00 00  00 00 00 00 47 65 74 50  |....3.......GetP|
000094d0  6f 73 00 00 50 9c 00 00  47 ff ff ff 02 38 f2 d6  |os..P...G....8..|
000094e0  ca 01 00 00 33 00 00 00  00 00 00 00 53 65 74 50  |....3.......SetP|
000094f0  6f 73 00 00 1c 9e 00 00  47 fd ff ff 6e bf f5 d6  |os......G...n...|
00009500  48 01 00 00 13 00 00 00  00 00 00 00 66 6c 61 67  |H...........flag|
00009510  73 00 00 00 64 9f 00 00  47 fd ff ff de c1 f5 d6  |s...d...G.......|
00009520  07 01 00 00 33 00 00 00  00 00 00 00 63 75 72 73  |....3.......curs|
00009530  6f 72 73 00 44 41 54 41  be 00 00 00 4c 69 6e 65  |ors.DATA....Line|
00009540  45 64 69 74 6f 72 0a 23  50 61 72 65 6e 74 20 21  |Editor.#Parent !|
00009550  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 4c 69 6e  |Root.#Prefix Lin|
00009560  65 45 64 69 74 6f 72 5f  0a 23 54 61 62 6c 65 20  |eEditor_.#Table |
00009570  43 6f 6c 75 6d 6e 73 20  32 0a 3c 53 65 74 4f 70  |Columns 2.<SetOp|
00009580  74 69 6f 6e 73 3e 0a 3c  47 65 74 4f 70 74 69 6f  |tions>.<GetOptio|
00009590  6e 73 3e 0a 3c 43 72 65  61 74 65 42 75 66 66 65  |ns>.<CreateBuffe|
000095a0  72 3e 0a 3c 44 65 6c 65  74 65 42 75 66 66 65 72  |r>.<DeleteBuffer|
000095b0  3e 0a 3c 53 65 74 50 6f  73 3e 0a 3c 47 65 74 50  |>.<SetPos>.<GetP|
000095c0  6f 73 3e 0a 3c 47 65 74  4c 69 6e 65 3e 0a 3c 41  |os>.<GetLine>.<A|
000095d0  70 70 65 6e 64 4c 69 6e  65 3e 0a 3c 44 65 6c 65  |ppendLine>.<Dele|
000095e0  74 65 4c 69 6e 65 3e 0a  23 45 6e 64 54 61 62 6c  |teLine>.#EndTabl|
000095f0  65 0a 00 00 44 41 54 41  43 01 00 00 4c 69 6e 65  |e...DATAC...Line|
00009600  45 64 69 74 6f 72 5f 53  65 74 4f 70 74 69 6f 6e  |Editor_SetOption|
00009610  73 0a 23 50 61 72 65 6e  74 20 4c 69 6e 65 45 64  |s.#Parent LineEd|
00009620  69 74 6f 72 5f 0a 3d 3e  09 52 30 20 3d 09 62 75  |itor_.=>.R0 =.bu|
00009630  66 66 65 72 20 73 69 7a  65 20 69 6e 20 6b 69 6c  |ffer size in kil|
00009640  6f 62 79 74 65 73 2c 20  6f 72 20 30 20 66 6f 72  |obytes, or 0 for|
00009650  20 64 65 66 61 75 6c 74  0a 09 52 31 20 3d 09 3c  | default..R1 =.<|
00009660  66 6c 61 67 73 3d 3e 4c  69 6e 65 45 64 69 74 6f  |flags=>LineEdito|
00009670  72 5f 66 6c 61 67 73 3e  0a 09 52 32 20 3d 09 6d  |r_flags>..R2 =.m|
00009680  69 6e 69 6d 75 6d 20 6c  65 6e 67 74 68 20 74 6f  |inimum length to|
00009690  20 72 65 63 6f 72 64 2c  20 6f 72 20 30 20 66 6f  | record, or 0 fo|
000096a0  72 20 6e 6f 20 6d 69 6e  69 6d 75 6d 0a 09 52 33  |r no minimum..R3|
000096b0  20 3d 09 6d 61 78 69 6d  75 6d 20 6c 65 6e 67 74  | =.maximum lengt|
000096c0  68 20 74 6f 20 72 65 63  6f 72 64 2c 20 6f 72 20  |h to record, or |
000096d0  30 20 66 6f 72 20 6e 6f  20 6d 61 78 69 6d 75 6d  |0 for no maximum|
000096e0  0a 09 52 34 20 3d 09 3c  63 75 72 73 6f 72 73 3d  |..R4 =.<cursors=|
000096f0  3e 4c 69 6e 65 45 64 69  74 6f 72 5f 63 75 72 73  |>LineEditor_curs|
00009700  6f 72 73 3e 0a 0a 53 65  74 73 20 6f 70 74 69 6f  |ors>..Sets optio|
00009710  6e 73 20 66 6f 72 20 74  68 65 20 67 6c 6f 62 61  |ns for the globa|
00009720  6c 20 63 6f 6d 6d 61 6e  64 20 6c 69 6e 65 2d 65  |l command line-e|
00009730  64 69 74 6f 72 2e 0a 00  44 41 54 41 37 01 00 00  |ditor...DATA7...|
00009740  4c 69 6e 65 45 64 69 74  6f 72 5f 47 65 74 4f 70  |LineEditor_GetOp|
00009750  74 69 6f 6e 73 0a 23 50  61 72 65 6e 74 20 4c 69  |tions.#Parent Li|
00009760  6e 65 45 64 69 74 6f 72  5f 0a 3c 3d 09 52 30 20  |neEditor_.<=.R0 |
00009770  3d 09 62 75 66 66 65 72  20 73 69 7a 65 2c 20 6f  |=.buffer size, o|
00009780  72 20 30 20 66 6f 72 20  64 65 66 61 75 6c 74 0a  |r 0 for default.|
00009790  09 52 31 20 3d 09 3c 66  6c 61 67 73 3d 3e 4c 69  |.R1 =.<flags=>Li|
000097a0  6e 65 45 64 69 74 6f 72  5f 46 6c 61 67 73 3e 0a  |neEditor_Flags>.|
000097b0  09 52 32 20 3d 09 6d 69  6e 69 6d 75 6d 20 6c 65  |.R2 =.minimum le|
000097c0  6e 67 74 68 20 74 6f 20  72 65 63 6f 72 64 2c 20  |ngth to record, |
000097d0  6f 72 20 30 20 66 6f 72  20 6e 6f 20 6d 69 6e 69  |or 0 for no mini|
000097e0  6d 75 6d 0a 09 52 33 20  3d 09 6d 61 78 69 6d 75  |mum..R3 =.maximu|
000097f0  6d 20 6c 65 6e 67 74 68  20 74 6f 20 72 65 63 6f  |m length to reco|
00009800  72 64 2c 20 6f 72 20 30  20 66 6f 72 20 6e 6f 20  |rd, or 0 for no |
00009810  6d 61 78 69 6d 75 6d 0a  09 52 34 20 3d 09 3c 63  |maximum..R4 =.<c|
00009820  75 72 73 6f 72 73 3d 3e  4c 69 6e 65 45 64 69 74  |ursors=>LineEdit|
00009830  6f 72 5f 43 75 72 73 6f  72 73 3e 0a 0a 52 65 61  |or_Cursors>..Rea|
00009840  64 73 20 6f 70 74 69 6f  6e 73 20 66 6f 72 20 74  |ds options for t|
00009850  68 65 20 67 6c 6f 62 61  6c 20 63 6f 6d 6d 61 6e  |he global comman|
00009860  64 20 6c 69 6e 65 2d 65  64 69 74 6f 72 2e 0a 00  |d line-editor...|
00009870  44 41 54 41 20 01 00 00  4c 69 6e 65 45 64 69 74  |DATA ...LineEdit|
00009880  6f 72 5f 43 72 65 61 74  65 42 75 66 66 65 72 0a  |or_CreateBuffer.|
00009890  23 50 61 72 65 6e 74 20  4c 69 6e 65 45 64 69 74  |#Parent LineEdit|
000098a0  6f 72 5f 0a 3d 3e 09 52  30 20 3d 09 62 75 66 66  |or_.=>.R0 =.buff|
000098b0  65 72 20 73 69 7a 65 2c  20 6f 72 20 30 20 66 6f  |er size, or 0 fo|
000098c0  72 20 64 65 66 61 75 6c  74 0a 09 52 31 20 3d 09  |r default..R1 =.|
000098d0  65 78 70 61 6e 73 69 6f  6e 20 77 6f 72 64 20 28  |expansion word (|
000098e0  30 29 2c 20 6f 72 20 74  61 73 6b 68 61 6e 64 6c  |0), or taskhandl|
000098f0  65 20 66 6f 72 20 61 75  74 6f 2d 64 65 6c 65 74  |e for auto-delet|
00009900  65 2c 20 6f 72 20 2d 31  20 66 6f 72 20 6e 6f 6e  |e, or -1 for non|
00009910  65 0a 09 52 32 20 3d 09  65 78 70 61 6e 73 69 6f  |e..R2 =.expansio|
00009920  6e 20 77 6f 72 64 20 69  66 20 52 31 20 69 73 20  |n word if R1 is |
00009930  74 61 73 6b 68 61 6e 64  6c 65 2c 20 6f 72 20 6e  |taskhandle, or n|
00009940  6f 6e 65 0a 3c 3d 09 52  30 20 3d 09 68 61 6e 64  |one.<=.R0 =.hand|
00009950  6c 65 2c 20 6f 72 20 30  20 69 66 20 63 61 6e 27  |le, or 0 if can'|
00009960  74 20 63 72 65 61 74 65  0a 0a 43 72 65 61 74 65  |t create..Create|
00009970  73 20 61 20 6e 65 77 20  70 72 69 76 61 74 65 20  |s a new private |
00009980  68 69 73 74 6f 72 79 20  62 75 66 66 65 72 2e 0a  |history buffer..|
00009990  44 41 54 41 6d 00 00 00  4c 69 6e 65 45 64 69 74  |DATAm...LineEdit|
000099a0  6f 72 5f 44 65 6c 65 74  65 42 75 66 66 65 72 0a  |or_DeleteBuffer.|
000099b0  23 50 61 72 65 6e 74 20  4c 69 6e 65 45 64 69 74  |#Parent LineEdit|
000099c0  6f 72 5f 0a 3c 3d 09 52  30 20 3d 09 62 75 66 66  |or_.<=.R0 =.buff|
000099d0  65 72 20 68 61 6e 64 6c  65 0a 0a 44 65 6c 65 74  |er handle..Delet|
000099e0  65 73 20 61 20 70 72 69  76 61 74 65 20 68 69 73  |es a private his|
000099f0  74 6f 72 79 20 62 75 66  66 65 72 2e 0a 00 00 00  |tory buffer.....|
00009a00  44 41 54 41 93 00 00 00  4c 69 6e 65 45 64 69 74  |DATA....LineEdit|
00009a10  6f 72 5f 41 70 70 65 6e  64 4c 69 6e 65 0a 23 50  |or_AppendLine.#P|
00009a20  61 72 65 6e 74 20 4c 69  6e 65 45 64 69 74 6f 72  |arent LineEditor|
00009a30  5f 0a 3d 3e 09 52 30 20  3d 09 62 75 66 66 65 72  |_.=>.R0 =.buffer|
00009a40  20 68 61 6e 64 6c 65 0a  09 52 31 20 3d 09 70 6f  | handle..R1 =.po|
00009a50  69 6e 74 65 72 20 74 6f  20 6c 69 6e 65 20 74 6f  |inter to line to|
00009a60  20 61 64 64 2c 20 63 74  72 6c 20 74 65 72 6d 69  | add, ctrl termi|
00009a70  6e 61 74 65 64 0a 0a 41  64 64 73 20 61 20 6c 69  |nated..Adds a li|
00009a80  6e 65 20 74 6f 20 74 68  65 20 68 69 73 74 6f 72  |ne to the histor|
00009a90  79 2e 0a 00 44 41 54 41  71 00 00 00 4c 69 6e 65  |y...DATAq...Line|
00009aa0  45 64 69 74 6f 72 5f 44  65 6c 65 74 65 4c 69 6e  |Editor_DeleteLin|
00009ab0  65 0a 23 50 61 72 65 6e  74 20 4c 69 6e 65 45 64  |e.#Parent LineEd|
00009ac0  69 74 6f 72 5f 0a 3d 3e  09 52 30 20 3d 09 62 75  |itor_.=>.R0 =.bu|
00009ad0  66 66 65 72 20 68 61 6e  64 6c 65 0a 0a 44 65 6c  |ffer handle..Del|
00009ae0  65 74 65 73 20 74 68 65  20 6c 61 73 74 20 6c 69  |etes the last li|
00009af0  6e 65 20 66 72 6f 6d 20  74 68 65 20 68 69 73 74  |ne from the hist|
00009b00  6f 72 79 2e 0a 00 00 00  44 41 54 41 b8 00 00 00  |ory.....DATA....|
00009b10  4c 69 6e 65 45 64 69 74  6f 72 5f 47 65 74 4c 69  |LineEditor_GetLi|
00009b20  6e 65 0a 23 50 61 72 65  6e 74 20 4c 69 6e 65 45  |ne.#Parent LineE|
00009b30  64 69 74 6f 72 5f 0a 3d  3e 09 52 30 20 3d 09 62  |ditor_.=>.R0 =.b|
00009b40  75 66 66 65 72 20 68 61  6e 64 6c 65 0a 09 52 31  |uffer handle..R1|
00009b50  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 62 75  | =.pointer to bu|
00009b60  66 66 65 72 0a 09 52 32  20 3d 09 62 75 66 66 65  |ffer..R2 =.buffe|
00009b70  72 20 6c 65 6e 67 74 68  0a 3c 3d 09 52 32 20 3d  |r length.<=.R2 =|
00009b80  09 61 63 74 75 61 6c 20  6c 65 6e 67 74 68 0a 0a  |.actual length..|
00009b90  52 65 61 64 73 20 74 68  65 20 70 6f 73 69 74 69  |Reads the positi|
00009ba0  6f 6e 20 69 6e 20 61 20  70 72 69 76 61 74 65 20  |on in a private |
00009bb0  68 69 73 74 6f 72 79 20  62 75 66 66 65 72 2e 0a  |history buffer..|
00009bc0  44 41 54 41 8e 00 00 00  4c 69 6e 65 45 64 69 74  |DATA....LineEdit|
00009bd0  6f 72 5f 47 65 74 50 6f  73 69 74 69 6f 6e 0a 23  |or_GetPosition.#|
00009be0  50 61 72 65 6e 74 20 4c  69 6e 65 45 64 69 74 6f  |Parent LineEdito|
00009bf0  72 5f 0a 3d 3e 09 52 30  20 3d 09 62 75 66 66 65  |r_.=>.R0 =.buffe|
00009c00  72 20 68 61 6e 64 6c 65  0a 3c 3d 09 52 31 20 3d  |r handle.<=.R1 =|
00009c10  09 6c 69 6e 65 20 6e 75  6d 62 65 72 0a 0a 52 65  |.line number..Re|
00009c20  61 64 73 20 74 68 65 20  70 6f 73 69 74 69 6f 6e  |ads the position|
00009c30  20 69 6e 20 61 20 70 72  69 76 61 74 65 20 68 69  | in a private hi|
00009c40  73 74 6f 72 79 20 62 75  66 66 65 72 2e 0a 00 00  |story buffer....|
00009c50  44 41 54 41 ca 01 00 00  4c 69 6e 65 45 64 69 74  |DATA....LineEdit|
00009c60  6f 72 5f 53 65 74 50 6f  73 69 74 69 6f 6e 0a 23  |or_SetPosition.#|
00009c70  50 61 72 65 6e 74 20 4c  69 6e 65 45 64 69 74 6f  |Parent LineEdito|
00009c80  72 5f 0a 3d 3e 09 52 30  20 3d 09 62 75 66 66 65  |r_.=>.R0 =.buffe|
00009c90  72 20 68 61 6e 64 6c 65  0a 09 52 31 20 3d 09 6c  |r handle..R1 =.l|
00009ca0  69 6e 65 20 6e 75 6d 62  65 72 2c 20 6f 72 20 3c  |ine number, or <|
00009cb0  27 73 70 65 63 69 61 6c  27 3d 3e 2e 73 70 65 63  |'special'=>.spec|
00009cc0  69 61 6c 3e 20 63 6f 64  65 73 0a 0a 53 65 74 73  |ial> codes..Sets|
00009cd0  20 74 68 65 20 70 6f 73  69 74 69 6f 6e 20 69 6e  | the position in|
00009ce0  20 61 20 70 72 69 76 61  74 65 20 68 69 73 74 6f  | a private histo|
00009cf0  72 79 20 62 75 66 66 65  72 2e 0a 23 53 75 62 70  |ry buffer..#Subp|
00009d00  61 67 65 20 73 70 65 63  69 61 6c 0a 53 70 65 63  |age special.Spec|
00009d10  69 61 6c 20 70 6f 73 69  74 69 6f 6e 20 63 6f 64  |ial position cod|
00009d20  65 73 0a 56 61 6c 75 65  09 09 50 6f 73 69 74 69  |es.Value..Positi|
00009d30  6f 6e 0a 23 4c 69 6e 65  0a 2d 76 65 09 09 4e 75  |on.#Line.-ve..Nu|
00009d40  6d 62 65 72 20 6f 66 20  6c 69 6e 65 73 20 66 72  |mber of lines fr|
00009d50  6f 6d 20 65 6e 64 20 6f  66 20 68 69 73 74 6f 72  |om end of histor|
00009d60  79 0a 26 37 46 46 46 46  46 46 46 09 45 6e 64 20  |y.&7FFFFFFF.End |
00009d70  6f 66 20 62 75 66 66 65  72 0a 26 38 30 30 30 30  |of buffer.&80000|
00009d80  30 30 30 09 70 72 65 76  69 6f 75 73 20 6c 69 6e  |000.previous lin|
00009d90  65 2c 20 77 72 61 70 70  69 6e 67 20 74 6f 20 65  |e, wrapping to e|
00009da0  6e 64 0a 26 38 30 30 30  30 30 30 31 09 70 72 65  |nd.&80000001.pre|
00009db0  76 69 6f 75 73 20 6c 69  6e 65 2c 20 73 74 6f 70  |vious line, stop|
00009dc0  70 69 6e 67 20 61 74 20  73 74 61 72 74 0a 26 38  |ping at start.&8|
00009dd0  30 30 30 30 30 30 32 09  6e 65 78 74 20 6c 69 6e  |0000002.next lin|
00009de0  65 2c 20 73 74 6f 70 70  69 6e 67 20 61 74 20 65  |e, stopping at e|
00009df0  6e 64 0a 26 38 30 30 30  30 30 30 33 09 6e 65 78  |nd.&80000003.nex|
00009e00  74 20 6c 69 6e 65 2c 20  77 72 61 70 70 69 6e 67  |t line, wrapping|
00009e10  20 74 6f 20 73 74 61 72  74 0a 00 00 44 41 54 41  | to start...DATA|
00009e20  48 01 00 00 4c 69 6e 65  45 64 69 74 6f 72 20 66  |H...LineEditor f|
00009e30  6c 61 67 73 0a 23 50 61  72 65 6e 74 20 4c 69 6e  |lags.#Parent Lin|
00009e40  65 45 64 69 74 6f 72 5f  53 65 74 4f 70 74 69 6f  |eEditor_SetOptio|
00009e50  6e 73 0a 42 69 74 09 4d  65 61 6e 69 6e 67 20 69  |ns.Bit.Meaning i|
00009e60  66 20 73 65 74 0a 23 4c  69 6e 65 0a 30 09 54 61  |f set.#Line.0.Ta|
00009e70  73 6b 57 69 6e 64 6f 77  73 20 68 61 76 65 20 6c  |skWindows have l|
00009e80  6f 63 61 6c 20 62 75 66  66 65 72 73 0a 31 09 54  |ocal buffers.1.T|
00009e90  72 61 69 6c 69 6e 67 20  64 6f 74 73 20 77 69 6c  |railing dots wil|
00009ea0  6c 20 62 65 20 61 70 70  65 6e 64 65 64 20 74 6f  |l be appended to|
00009eb0  20 64 69 72 65 63 74 6f  72 79 20 63 6f 6d 70 6c  | directory compl|
00009ec0  65 74 69 6f 6e 73 0a 32  09 44 65 66 61 75 6c 74  |etions.2.Default|
00009ed0  20 74 6f 20 6f 76 65 72  74 79 70 65 20 6d 6f 64  | to overtype mod|
00009ee0  65 0a 33 09 4b 65 65 70  20 64 75 70 6c 69 63 61  |e.3.Keep duplica|
00009ef0  74 65 20 6c 69 6e 65 73  20 69 6e 20 68 69 73 74  |te lines in hist|
00009f00  6f 72 79 0a 34 09 44 6f  6e 27 74 20 64 6f 20 7e  |ory.4.Don't do ~|
00009f10  20 65 78 70 61 6e 73 69  6f 6e 0a 35 09 44 6f 6e  | expansion.5.Don|
00009f20  27 74 20 64 65 20 21 2d  74 79 70 65 20 65 76 65  |'t de !-type eve|
00009f30  6e 74 73 20 28 65 67 20  21 21 29 0a 36 09 44 6f  |nts (eg !!).6.Do|
00009f40  6e 27 74 20 64 6f 20 5e  74 77 6f 5e 74 68 72 65  |n't do ^two^thre|
00009f50  65 20 74 79 70 65 20 72  65 70 6c 61 63 65 6d 65  |e type replaceme|
00009f60  6e 74 73 0a 44 41 54 41  07 01 00 00 4c 69 6e 65  |nts.DATA....Line|
00009f70  45 64 69 74 6f 72 20 63  75 72 73 6f 72 73 0a 23  |Editor cursors.#|
00009f80  50 61 72 65 6e 74 20 4c  69 6e 65 45 64 69 74 6f  |Parent LineEdito|
00009f90  72 5f 53 65 74 4f 70 74  69 6f 6e 73 0a 42 79 74  |r_SetOptions.Byt|
00009fa0  65 09 43 6f 6e 74 65 6e  74 73 0a 23 4c 69 6e 65  |e.Contents.#Line|
00009fb0  0a 30 09 4e 6f 72 6d 61  6c 20 63 75 72 73 6f 72  |.0.Normal cursor|
00009fc0  20 74 79 70 65 0a 31 09  4f 76 65 72 74 79 70 65  | type.1.Overtype|
00009fd0  20 63 75 72 73 6f 72 20  74 79 70 65 0a 0a 43 75  | cursor type..Cu|
00009fe0  72 73 6f 72 20 74 79 70  65 73 3a 0a 0a 42 69 74  |rsor types:..Bit|
00009ff0  09 4d 65 61 6e 69 6e 67  20 69 66 20 73 65 74 0a  |.Meaning if set.|
0000a000  23 4c 69 6e 65 0a 30 09  63 75 72 73 6f 72 20 69  |#Line.0.cursor i|
0000a010  73 20 61 20 62 6c 6f 63  6b 2c 20 6f 74 68 65 72  |s a block, other|
0000a020  77 69 73 65 20 63 75 72  73 6f 72 20 69 73 20 61  |wise cursor is a|
0000a030  6e 20 75 6e 64 65 72 6c  69 6e 65 0a 31 09 63 75  |n underline.1.cu|
0000a040  72 73 6f 72 20 69 73 20  73 74 65 61 64 79 2c 20  |rsor is steady, |
0000a050  6f 74 68 65 72 77 69 73  65 20 63 75 72 73 6f 72  |otherwise cursor|
0000a060  20 69 73 20 63 75 72 73  6f 72 0a 00 44 49 52 24  | is cursor..DIR$|
0000a070  2c 00 00 00 2c 00 00 00  98 a0 00 00 46 fd ff ff  |,...,.......F...|
0000a080  9c e4 dc 14 50 00 00 00  13 00 00 00 00 00 00 00  |....P...........|
0000a090  21 52 6f 6f 74 00 00 00  44 41 54 41 50 00 00 00  |!Root...DATAP...|
0000a0a0  4c 5a 57 42 0a 23 50 61  72 65 6e 74 20 21 52 6f  |LZWB.#Parent !Ro|
0000a0b0  6f 74 0a 23 50 72 65 66  69 78 20 4c 5a 57 42 5f  |ot.#Prefix LZWB_|
0000a0c0  0a 43 6f 6d 70 72 65 73  73 0a 44 65 63 6f 6d 70  |.Compress.Decomp|
0000a0d0  72 65 73 73 0a 54 61 73  6b 53 74 61 72 74 0a 54  |ress.TaskStart.T|
0000a0e0  61 73 6b 51 75 69 74 0a  44 49 52 24 50 00 00 00  |askQuit.DIR$P...|
0000a0f0  50 00 00 00 38 a1 00 00  47 fd ff ff f8 54 07 0c  |P...8...G....T..|
0000a100  51 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |Q...........!Roo|
0000a110  74 00 00 00 8c a1 00 00  47 ff ff ff 10 54 07 0c  |t.......G....T..|
0000a120  a0 01 00 00 13 00 00 00  00 00 00 00 44 65 63 6f  |............Deco|
0000a130  6d 70 72 65 73 73 00 00  44 41 54 41 51 00 00 00  |mpress..DATAQ...|
0000a140  4c 5a 57 44 0a 23 50 61  72 65 6e 74 20 21 52 6f  |LZWD.#Parent !Ro|
0000a150  6f 74 0a 23 50 72 65 66  69 78 20 4c 5a 57 44 5f  |ot.#Prefix LZWD_|
0000a160  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
0000a170  32 0a 3c 44 65 63 6f 6d  70 72 65 73 73 3e 0a 23  |2.<Decompress>.#|
0000a180  45 6e 64 54 61 62 6c 65  0a 00 00 00 44 41 54 41  |EndTable....DATA|
0000a190  a0 01 00 00 4c 5a 57 44  5f 44 65 63 6f 6d 70 72  |....LZWD_Decompr|
0000a1a0  65 73 73 20 20 28 26 43  44 31 30 30 29 0a 23 50  |ess  (&CD100).#P|
0000a1b0  61 72 65 6e 74 20 4c 5a  57 44 5f 0a 3d 3e 09 52  |arent LZWD_.=>.R|
0000a1c0  30 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 73  |0 =.pointer to s|
0000a1d0  6f 75 72 63 65 20 66 69  6c 65 6e 61 6d 65 0a 09  |ource filename..|
0000a1e0  52 31 20 3d 09 64 65 73  74 69 6e 61 74 69 6f 6e  |R1 =.destination|
0000a1f0  20 61 64 64 72 65 73 73  0a 09 52 32 20 3d 09 6c  | address..R2 =.l|
0000a200  65 6e 67 74 68 20 6f 66  20 64 65 73 74 69 6e 61  |ength of destina|
0000a210  74 69 6f 6e 20 62 75 66  66 65 72 0a 0a 3c 3d 09  |tion buffer..<=.|
0000a220  52 30 20 63 6f 72 72 75  70 74 65 64 20 6f 72 20  |R0 corrupted or |
0000a230  65 72 72 6f 72 20 62 6c  6f 63 6b 20 70 6f 69 6e  |error block poin|
0000a240  74 65 72 0a 09 52 32 20  3d 09 6c 65 6e 67 74 68  |ter..R2 =.length|
0000a250  20 6f 66 20 62 79 74 65  73 20 75 73 65 64 20 69  | of bytes used i|
0000a260  6e 20 64 65 73 74 69 6e  61 74 69 6f 6e 20 62 75  |n destination bu|
0000a270  66 66 65 72 0a 09 61 6c  6c 20 6f 74 68 65 72 20  |ffer..all other |
0000a280  72 65 67 69 73 74 65 72  73 20 70 72 65 73 65 72  |registers preser|
0000a290  76 65 64 0a 0a 54 68 69  73 20 63 61 6c 6c 20 69  |ved..This call i|
0000a2a0  73 20 6e 6f 74 20 70 72  6f 76 69 64 65 64 20 69  |s not provided i|
0000a2b0  6e 20 74 68 65 20 6d 61  69 6e 20 6d 6f 64 75 6c  |n the main modul|
0000a2c0  65 20 62 75 74 20 69 6e  20 74 68 65 20 73 6d 61  |e but in the sma|
0000a2d0  6c 6c 2c 20 65 78 74 72  61 20 66 6f 72 20 64 65  |ll, extra for de|
0000a2e0  6d 6f 73 20 6f 72 20 73  6f 20 77 72 69 74 74 65  |mos or so writte|
0000a2f0  6e 20 6d 69 6e 69 20 6d  6f 64 75 6c 65 20 4c 5a  |n mini module LZ|
0000a300  57 44 2e 20 49 74 20 69  73 20 32 35 25 20 66 61  |WD. It is 25% fa|
0000a310  73 74 65 72 20 74 68 61  6e 20 3c 4c 5a 57 5f 44  |ster than <LZW_D|
0000a320  65 63 6f 6d 70 72 65 73  73 3e 2e 0a 44 49 52 24  |ecompress>..DIR$|
0000a330  98 00 00 00 98 00 00 00  c4 a3 00 00 47 fd ff ff  |............G...|
0000a340  cf 5a 07 0c 4c 00 00 00  13 00 00 00 00 00 00 00  |.Z..L...........|
0000a350  21 52 6f 6f 74 00 00 00  10 a4 00 00 47 ff ff ff  |!Root.......G...|
0000a360  30 0d 07 0c c6 02 00 00  13 00 00 00 00 00 00 00  |0...............|
0000a370  43 6f 6d 70 72 65 73 73  00 00 00 00 d8 a6 00 00  |Compress........|
0000a380  47 ff ff ff 24 63 07 0c  cf 02 00 00 13 00 00 00  |G...$c..........|
0000a390  00 00 00 00 44 65 63 6f  6d 70 72 65 73 73 00 00  |....Decompress..|
0000a3a0  a8 a9 00 00 47 ff ff ff  f7 3f 07 0c 86 00 00 00  |....G....?......|
0000a3b0  13 00 00 00 00 00 00 00  43 6f 6d 70 72 65 73 73  |........Compress|
0000a3c0  4f 6e 00 00 44 41 54 41  4c 00 00 00 4c 5a 57 0a  |On..DATAL...LZW.|
0000a3d0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
0000a3e0  72 65 66 69 78 20 4c 5a  57 5f 0a 3c 43 6f 6d 70  |refix LZW_.<Comp|
0000a3f0  72 65 73 73 3e 0a 3c 44  65 63 6f 6d 70 72 65 73  |ress>.<Decompres|
0000a400  73 3e 0a 3c 43 6f 6d 70  72 65 73 73 4f 6e 3e 0a  |s>.<CompressOn>.|
0000a410  44 41 54 41 c6 02 00 00  4c 5a 57 5f 43 6f 6d 70  |DATA....LZW_Comp|
0000a420  72 65 73 73 20 20 28 26  43 44 30 30 30 29 0a 23  |ress  (&CD000).#|
0000a430  50 61 72 65 6e 74 20 4c  5a 57 5f 0a 3d 3e 09 52  |Parent LZW_.=>.R|
0000a440  30 20 3d 09 66 6c 61 67  73 0a 09 20 09 62 69 74  |0 =.flags.. .bit|
0000a450  20 30 20 3d 09 31 20 73  6f 75 72 63 65 20 69 6e  | 0 =.1 source in|
0000a460  20 6d 65 6d 6f 72 79 0a  09 20 09 20 09 30 20 73  | memory.. . .0 s|
0000a470  6f 75 72 63 65 20 69 73  20 61 20 66 69 6c 65 0a  |ource is a file.|
0000a480  09 20 09 62 69 74 20 31  20 3d 09 31 20 64 65 73  |. .bit 1 =.1 des|
0000a490  74 69 6e 61 74 69 6f 6e  20 69 6e 20 6d 65 6d 6f  |tination in memo|
0000a4a0  72 79 0a 09 20 09 20 09  30 20 64 65 73 74 69 6e  |ry.. . .0 destin|
0000a4b0  61 74 69 6f 6e 20 69 73  20 61 20 66 69 6c 65 0a  |ation is a file.|
0000a4c0  09 52 31 20 3d 09 61 64  64 72 65 73 73 20 69 6e  |.R1 =.address in|
0000a4d0  20 6d 65 6d 6f 72 79 20  69 66 20 62 69 74 20 30  | memory if bit 0|
0000a4e0  20 3d 20 31 0a 09 20 09  70 6f 69 6e 74 65 72 20  | = 1.. .pointer |
0000a4f0  74 6f 20 73 6f 75 72 63  65 20 6e 61 6d 65 20 69  |to source name i|
0000a500  66 20 62 69 74 20 30 20  3d 20 30 0a 09 52 32 20  |f bit 0 = 0..R2 |
0000a510  3d 09 64 65 73 74 69 6e  61 74 69 6f 6e 20 61 64  |=.destination ad|
0000a520  64 72 65 73 73 20 69 66  20 62 69 74 20 31 3d 20  |dress if bit 1= |
0000a530  31 0a 09 20 09 70 6f 69  6e 74 65 72 20 74 6f 20  |1.. .pointer to |
0000a540  64 65 73 74 69 6e 61 74  69 6f 6e 20 6e 61 6d 65  |destination name|
0000a550  20 62 69 74 20 31 3d 20  30 0a 09 52 33 20 3d 09  | bit 1= 0..R3 =.|
0000a560  69 66 20 62 69 74 20 30  3d 20 31 20 6c 65 6e 67  |if bit 0= 1 leng|
0000a570  74 68 20 6f 66 20 73 6f  75 72 63 65 20 69 6e 20  |th of source in |
0000a580  62 79 74 65 73 0a 09 52  34 20 3d 09 69 66 20 62  |bytes..R4 =.if b|
0000a590  69 74 20 31 3d 20 31 20  6c 65 6e 67 74 68 20 6f  |it 1= 1 length o|
0000a5a0  66 20 64 65 73 74 69 6e  61 74 69 6f 6e 20 62 75  |f destination bu|
0000a5b0  66 66 65 72 0a 0a 3c 3d  09 52 30 20 69 73 20 63  |ffer..<=.R0 is c|
0000a5c0  6f 72 72 75 70 74 65 64  20 6f 72 20 63 6f 6e 74  |orrupted or cont|
0000a5d0  61 69 6e 73 20 65 72 72  6f 72 20 70 6f 69 6e 74  |ains error point|
0000a5e0  65 72 0a 09 52 35 20 3d  20 69 66 20 62 69 74 20  |er..R5 = if bit |
0000a5f0  31 3d 20 31 20 6e 75 6d  62 65 72 20 6f 66 20 62  |1= 1 number of b|
0000a600  79 74 65 73 20 75 73 65  64 0a 09 61 6c 6c 20 6f  |ytes used..all o|
0000a610  74 68 65 72 20 72 65 67  69 73 74 65 72 20 61 72  |ther register ar|
0000a620  65 20 70 72 65 73 65 72  76 65 64 0a 0a 54 68 69  |e preserved..Thi|
0000a630  73 20 63 61 6c 6c 20 63  6f 6d 70 72 65 73 73 65  |s call compresse|
0000a640  73 20 61 20 66 69 6c 65  20 6f 72 20 61 20 62 6c  |s a file or a bl|
0000a650  6f 63 6b 20 6f 66 20 64  61 74 61 20 69 6e 20 6d  |ock of data in m|
0000a660  65 6d 6f 72 79 20 74 6f  20 61 20 66 69 6c 65 20  |emory to a file |
0000a670  6f 72 20 61 20 62 6c 6f  63 6b 20 6f 66 20 64 61  |or a block of da|
0000a680  74 61 20 69 6e 20 6d 65  6d 6f 72 79 20 75 73 69  |ta in memory usi|
0000a690  6e 67 20 74 68 65 20 4c  5a 57 20 63 6f 6d 70 72  |ng the LZW compr|
0000a6a0  65 73 73 69 6e 67 20 61  6c 67 6f 72 69 74 68 6d  |essing algorithm|
0000a6b0  2e 20 41 73 20 62 75 66  66 65 72 20 69 74 20 75  |. As buffer it u|
0000a6c0  73 65 73 20 74 68 65 20  73 63 72 65 65 6e 20 6d  |ses the screen m|
0000a6d0  65 6d 6f 72 79 2e 00 00  44 41 54 41 cf 02 00 00  |emory...DATA....|
0000a6e0  4c 5a 57 5f 44 65 63 6f  6d 70 72 65 73 73 20 20  |LZW_Decompress  |
0000a6f0  28 26 43 44 30 30 31 29  0a 23 50 61 72 65 6e 74  |(&CD001).#Parent|
0000a700  20 4c 5a 57 5f 0a 3d 3e  09 52 30 20 3d 09 66 6c  | LZW_.=>.R0 =.fl|
0000a710  61 67 73 0a 09 20 09 62  69 74 20 30 20 3d 09 31  |ags.. .bit 0 =.1|
0000a720  20 73 6f 75 72 63 65 20  69 6e 20 6d 65 6d 6f 72  | source in memor|
0000a730  79 0a 09 20 09 20 09 30  20 73 6f 75 72 63 65 20  |y.. . .0 source |
0000a740  69 73 20 61 20 66 69 6c  65 0a 09 20 09 62 69 74  |is a file.. .bit|
0000a750  20 31 20 3d 09 31 20 64  65 73 74 69 6e 61 74 69  | 1 =.1 destinati|
0000a760  6f 6e 20 69 6e 20 6d 65  6d 6f 72 79 0a 09 20 09  |on in memory.. .|
0000a770  20 09 30 20 64 65 73 74  69 6e 61 74 69 6f 6e 20  | .0 destination |
0000a780  69 73 20 61 20 66 69 6c  65 0a 09 52 31 20 3d 09  |is a file..R1 =.|
0000a790  61 64 64 72 65 73 73 20  69 6e 20 6d 65 6d 6f 72  |address in memor|
0000a7a0  79 20 69 66 20 62 69 74  20 30 3d 20 31 0a 09 20  |y if bit 0= 1.. |
0000a7b0  09 70 6f 69 6e 74 65 72  20 74 6f 20 73 6f 75 72  |.pointer to sour|
0000a7c0  63 65 20 6e 61 6d 65 20  69 66 20 62 69 74 20 30  |ce name if bit 0|
0000a7d0  3d 20 30 0a 09 52 32 20  3d 09 64 65 73 74 69 6e  |= 0..R2 =.destin|
0000a7e0  61 74 69 6f 6e 20 61 64  64 72 65 73 73 20 69 66  |ation address if|
0000a7f0  20 62 69 74 20 31 3d 20  31 0a 09 20 09 70 6f 69  | bit 1= 1.. .poi|
0000a800  6e 74 65 72 20 74 6f 20  64 65 73 74 69 6e 61 74  |nter to destinat|
0000a810  69 6f 6e 20 6e 61 6d 65  20 62 69 74 20 31 3d 20  |ion name bit 1= |
0000a820  30 0a 09 52 33 20 3d 09  69 66 20 62 69 74 20 30  |0..R3 =.if bit 0|
0000a830  3d 20 31 20 6c 65 6e 67  74 68 20 6f 66 20 73 6f  |= 1 length of so|
0000a840  75 72 63 65 20 69 6e 20  62 79 74 65 73 0a 09 52  |urce in bytes..R|
0000a850  34 20 3d 09 69 66 20 62  69 74 20 31 3d 20 31 20  |4 =.if bit 1= 1 |
0000a860  6c 65 6e 67 74 68 20 6f  66 20 64 65 73 74 69 6e  |length of destin|
0000a870  61 74 69 6f 6e 20 62 75  66 66 65 72 0a 0a 3c 3d  |ation buffer..<=|
0000a880  09 52 30 20 69 73 20 63  6f 72 72 75 70 74 65 64  |.R0 is corrupted|
0000a890  20 6f 72 20 63 6f 6e 74  61 69 6e 73 20 65 72 72  | or contains err|
0000a8a0  6f 72 20 70 6f 69 6e 74  65 72 0a 09 52 35 20 3d  |or pointer..R5 =|
0000a8b0  09 69 66 20 62 69 74 20  31 3d 20 31 20 6e 75 6d  |.if bit 1= 1 num|
0000a8c0  62 65 72 20 6f 66 20 62  79 74 65 73 20 75 73 65  |ber of bytes use|
0000a8d0  64 0a 09 61 6c 6c 20 6f  74 68 65 72 20 72 65 67  |d..all other reg|
0000a8e0  69 73 74 65 72 20 61 72  65 20 70 72 65 73 65 72  |ister are preser|
0000a8f0  76 65 64 0a 0a 54 68 69  73 20 63 61 6c 6c 20 64  |ved..This call d|
0000a900  65 63 6f 6d 70 72 65 73  73 65 73 20 61 20 66 69  |ecompresses a fi|
0000a910  6c 65 20 6f 72 20 61 20  62 6c 6f 63 6b 20 6f 66  |le or a block of|
0000a920  20 64 61 74 61 20 69 6e  20 6d 65 6d 6f 72 79 20  | data in memory |
0000a930  74 6f 20 61 20 66 69 6c  65 20 6f 72 20 61 20 62  |to a file or a b|
0000a940  6c 6f 63 6b 20 6f 66 20  64 61 74 61 20 69 6e 20  |lock of data in |
0000a950  6d 65 6d 6f 72 79 20 70  61 63 6b 65 64 20 75 73  |memory packed us|
0000a960  69 6e 67 20 74 68 65 20  4c 5a 57 20 63 6f 6d 70  |ing the LZW comp|
0000a970  72 65 73 73 69 6e 67 20  61 6c 67 6f 72 69 74 68  |ressing algorith|
0000a980  6d 2e 20 41 73 20 62 75  66 66 65 72 20 69 74 20  |m. As buffer it |
0000a990  75 73 65 73 20 74 68 65  20 73 63 72 65 65 6e 20  |uses the screen |
0000a9a0  6d 65 6d 6f 72 79 2e 00  44 41 54 41 86 00 00 00  |memory..DATA....|
0000a9b0  4c 5a 57 5f 43 6f 6d 70  72 65 73 73 4f 6e 20 20  |LZW_CompressOn  |
0000a9c0  28 26 43 44 30 30 32 29  0a 23 50 61 72 65 6e 74  |(&CD002).#Parent|
0000a9d0  20 4c 5a 57 5f 0a 57 6f  72 6b 73 20 61 73 20 3c  | LZW_.Works as <|
0000a9e0  4c 5a 57 5f 43 6f 6d 70  72 65 73 73 3e 20 62 75  |LZW_Compress> bu|
0000a9f0  74 20 61 70 70 65 6e 64  73 20 74 68 65 20 63 6f  |t appends the co|
0000aa00  6d 70 72 65 73 73 65 64  20 64 61 74 61 20 74 6f  |mpressed data to|
0000aa10  20 61 6e 20 65 78 69 73  74 69 6e 67 20 64 65 73  | an existing des|
0000aa20  74 69 6e 61 74 69 6f 6e  20 66 69 6c 65 2e 00 00  |tination file...|
0000aa30  44 49 52 24 2c 00 00 00  2c 00 00 00 5c aa 00 00  |DIR$,...,...\...|
0000aa40  46 fd ff ff ef 11 76 15  6c 00 00 00 13 00 00 00  |F.....v.l.......|
0000aa50  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
0000aa60  6c 00 00 00 4d 61 6b 65  47 49 46 0a 23 50 61 72  |l...MakeGIF.#Par|
0000aa70  65 6e 74 20 21 52 6f 6f  74 0a 23 50 72 65 66 69  |ent !Root.#Prefi|
0000aa80  78 20 4d 61 6b 65 47 49  46 5f 0a 23 54 61 62 6c  |x MakeGIF_.#Tabl|
0000aa90  65 20 43 6f 6c 75 6d 6e  73 20 32 0a 53 65 74 56  |e Columns 2.SetV|
0000aaa0  61 72 69 61 62 6c 65 0a  52 65 61 64 56 61 72 69  |ariable.ReadVari|
0000aab0  61 62 6c 65 0a 43 6f 6d  70 72 65 73 73 0a 23 45  |able.Compress.#E|
0000aac0  6e 64 54 61 62 6c 65 0a  44 49 52 24 2c 00 00 00  |ndTable.DIR$,...|
0000aad0  2c 00 00 00 f4 aa 00 00  47 fd ff ff 3a 69 7d 82  |,.......G...:i}.|
0000aae0  81 00 00 00 03 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
0000aaf0  74 00 00 00 44 41 54 41  81 00 00 00 4d 6f 44 65  |t...DATA....MoDe|
0000ab00  6c 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |l.#Parent !Root.|
0000ab10  23 50 72 65 66 69 78 20  4d 6f 44 65 6c 5f 0a 23  |#Prefix MoDel_.#|
0000ab20  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
0000ab30  4f 6e 0a 4f 66 66 0a 41  64 64 72 65 73 73 0a 57  |On.Off.Address.W|
0000ab40  61 74 63 68 46 69 6c 65  73 0a 4c 6f 73 65 46 69  |atchFiles.LoseFi|
0000ab50  6c 65 73 0a 49 67 6e 6f  72 65 44 69 73 63 73 0a  |les.IgnoreDiscs.|
0000ab60  57 61 74 63 68 44 69 73  63 73 0a 23 45 6e 64 54  |WatchDiscs.#EndT|
0000ab70  61 62 6c 65 0a 00 00 00  44 49 52 24 2c 00 00 00  |able....DIR$,...|
0000ab80  2c 00 00 00 a4 ab 00 00  46 fd ff ff 43 11 76 15  |,.......F...C.v.|
0000ab90  91 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
0000aba0  74 00 00 00 44 41 54 41  91 00 00 00 4e 65 74 4d  |t...DATA....NetM|
0000abb0  6f 6e 69 74 6f 72 0a 23  50 61 72 65 6e 74 20 21  |onitor.#Parent !|
0000abc0  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 4e 65 74  |Root.#Prefix Net|
0000abd0  4d 6f 6e 69 74 6f 72 5f  0a 23 54 61 62 6c 65 20  |Monitor_.#Table |
0000abe0  43 6f 6c 75 6d 6e 73 20  32 0a 50 72 69 6e 74 43  |Columns 2.PrintC|
0000abf0  68 61 72 0a 44 65 66 69  6e 65 54 61 73 6b 0a 41  |har.DefineTask.A|
0000ac00  62 61 6e 64 6f 6e 54 61  73 6b 0a 43 6f 6e 76 65  |bandonTask.Conve|
0000ac10  72 74 46 6f 6e 74 0a 55  73 65 46 6f 6e 74 0a 52  |rtFont.UseFont.R|
0000ac20  65 73 74 6f 72 65 46 6f  6e 74 0a 23 45 6e 64 54  |estoreFont.#EndT|
0000ac30  61 62 6c 65 0a 00 00 00  44 49 52 24 2c 00 00 00  |able....DIR$,...|
0000ac40  2c 00 00 00 64 ac 00 00  47 fd ff ff dc 10 84 82  |,...d...G.......|
0000ac50  4c 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |L...........!Roo|
0000ac60  74 00 00 00 44 41 54 41  4c 00 00 00 4e 48 0a 23  |t...DATAL...NH.#|
0000ac70  50 61 72 65 6e 74 20 21  52 6f 6f 74 0a 23 50 72  |Parent !Root.#Pr|
0000ac80  65 66 69 78 20 4e 48 5f  0a 23 54 61 62 6c 65 20  |efix NH_.#Table |
0000ac90  43 6f 6c 75 6d 6e 73 20  32 0a 41 6e 74 69 54 77  |Columns 2.AntiTw|
0000aca0  69 74 74 65 72 0a 23 45  6e 64 54 61 62 6c 65 0a  |itter.#EndTable.|
0000acb0  44 49 52 24 2c 00 00 00  2c 00 00 00 dc ac 00 00  |DIR$,...,.......|
0000acc0  47 fd ff ff 1b 6a ab ca  47 01 00 00 13 00 00 00  |G....j..G.......|
0000acd0  00 00 00 00 21 72 6f 6f  74 00 00 00 44 41 54 41  |....!root...DATA|
0000ace0  47 01 00 00 4f 4c 45 0a  23 50 61 72 65 6e 74 20  |G...OLE.#Parent |
0000acf0  21 52 6f 6f 74 0a 23 50  72 65 66 69 78 20 4f 4c  |!Root.#Prefix OL|
0000ad00  45 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |E_.#Table Column|
0000ad10  73 32 0a 56 65 72 73 69  6f 6e 0a 4c 69 6e 6b 46  |s2.Version.LinkF|
0000ad20  69 6c 65 0a 44 65 4c 69  6e 6b 46 69 6c 65 0a 46  |ile.DeLinkFile.F|
0000ad30  69 6c 65 53 74 61 74 75  73 0a 49 6e 76 61 6c 69  |ileStatus.Invali|
0000ad40  64 61 74 65 0a 53 69 6d  75 6c 61 74 65 53 65 73  |date.SimulateSes|
0000ad50  73 69 6f 6e 0a 23 45 6e  64 54 61 62 6c 65 0a 0a  |sion.#EndTable..|
0000ad60  4d 65 73 73 61 67 65 73  20 3a 0a 23 57 72 61 70  |Messages :.#Wrap|
0000ad70  20 6f 66 66 0a 23 49 6e  64 65 6e 74 20 32 0a 3c  | off.#Indent 2.<|
0000ad80  38 30 45 31 45 20 4f 4c  45 5f 46 69 6c 65 43 68  |80E1E OLE_FileCh|
0000ad90  61 6e 67 65 64 3d 3e 77  69 6d 70 3a 4d 73 67 5f  |anged=>wimp:Msg_|
0000ada0  38 30 45 31 45 3e 0a 3c  38 30 45 32 31 20 4f 4c  |80E1E>.<80E21 OL|
0000adb0  45 5f 4f 70 65 6e 53 65  73 73 69 6f 6e 3d 3e 77  |E_OpenSession=>w|
0000adc0  69 6d 70 3a 6d 73 67 5f  38 30 45 32 31 3e 0a 3c  |imp:msg_80E21>.<|
0000add0  38 30 45 32 32 20 4f 4c  45 5f 4f 70 65 6e 53 65  |80E22 OLE_OpenSe|
0000ade0  73 73 69 6f 6e 41 63 6b  3d 3e 77 69 6d 70 3a 6d  |ssionAck=>wimp:m|
0000adf0  73 67 5f 38 30 45 32 32  3e 0a 3c 38 30 45 32 33  |sg_80E22>.<80E23|
0000ae00  20 4f 4c 45 5f 43 6c 6f  73 65 53 65 73 73 69 6f  | OLE_CloseSessio|
0000ae10  6e 3d 3e 77 69 6d 70 3a  6d 73 67 5f 38 30 45 32  |n=>wimp:msg_80E2|
0000ae20  33 3e 0a 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |3>..DIR$,...,...|
0000ae30  50 ae 00 00 46 fd ff ff  fd b3 c4 55 05 01 00 00  |P...F......U....|
0000ae40  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
0000ae50  44 41 54 41 05 01 00 00  50 6f 63 6b 65 74 46 53  |DATA....PocketFS|
0000ae60  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
0000ae70  50 72 65 66 69 78 20 50  6f 63 6b 65 74 46 53 5f  |Prefix PocketFS_|
0000ae80  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
0000ae90  32 0a 54 69 63 6b 65 72  0a 53 65 72 69 61 6c 4f  |2.Ticker.SerialO|
0000aea0  70 65 6e 0a 53 65 72 69  61 6c 43 6c 6f 73 65 0a  |pen.SerialClose.|
0000aeb0  53 65 72 69 61 6c 53 65  74 44 54 52 0a 53 65 72  |SerialSetDTR.Ser|
0000aec0  69 61 6c 53 65 74 52 54  53 0a 53 65 72 69 61 6c  |ialSetRTS.Serial|
0000aed0  50 72 69 6d 65 54 58 0a  47 65 74 43 61 63 68 65  |PrimeTX.GetCache|
0000aee0  4d 65 6d 0a 46 72 65 65  43 61 63 68 65 4d 65 6d  |Mem.FreeCacheMem|
0000aef0  0a 43 61 63 68 65 49 6e  69 74 0a 43 61 63 68 65  |.CacheInit.Cache|
0000af00  46 69 6e 61 6c 0a 44 65  73 63 72 69 62 65 43 61  |Final.DescribeCa|
0000af10  63 68 65 0a 43 61 63 68  65 42 6c 6f 63 6b 0a 46  |che.CacheBlock.F|
0000af20  69 6e 64 43 61 63 68 65  45 6e 74 72 79 0a 53 74  |indCacheEntry.St|
0000af30  61 74 75 73 0a 44 69 73  6d 6f 75 6e 74 0a 53 6f  |atus.Dismount.So|
0000af40  66 74 44 69 73 6d 6f 75  6e 74 0a 23 45 6e 64 54  |ftDismount.#EndT|
0000af50  61 62 6c 65 0a 00 00 00  44 49 52 24 2c 00 00 00  |able....DIR$,...|
0000af60  2c 00 00 00 84 af 00 00  46 fd ff ff 6f f5 c4 55  |,.......F...o..U|
0000af70  45 01 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |E...........!Roo|
0000af80  74 00 00 00 44 41 54 41  45 01 00 00 50 6f 63 6b  |t...DATAE...Pock|
0000af90  65 74 4c 69 6e 6b 0a 23  50 61 72 65 6e 74 20 21  |etLink.#Parent !|
0000afa0  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 50 6f 63  |Root.#Prefix Poc|
0000afb0  6b 65 74 4c 69 6e 6b 5f  0a 23 54 61 62 6c 65 20  |ketLink_.#Table |
0000afc0  43 6f 6c 75 6d 6e 73 20  33 0a 53 74 61 72 74 4c  |Columns 3.StartL|
0000afd0  69 6e 6b 0a 43 6c 6f 73  65 4c 69 6e 6b 0a 70 5f  |ink.CloseLink.p_|
0000afe0  6f 70 65 6e 0a 70 5f 63  6c 6f 73 65 0a 70 5f 72  |open.p_close.p_r|
0000aff0  65 61 64 0a 70 5f 77 72  69 74 65 0a 70 5f 69 6f  |ead.p_write.p_io|
0000b000  77 0a 45 6e 71 75 69 72  65 0a 45 72 72 6f 72 43  |w.Enquire.ErrorC|
0000b010  6f 6e 76 0a 50 61 6e 69  63 43 6f 6e 76 0a 70 5f  |onv.PanicConv.p_|
0000b020  66 70 61 72 73 65 0a 70  5f 63 68 64 69 72 0a 70  |fparse.p_chdir.p|
0000b030  5f 64 65 6c 65 74 65 0a  70 5f 72 65 6e 61 6d 65  |_delete.p_rename|
0000b040  0a 70 5f 6d 6b 64 69 72  0a 70 5f 73 66 73 74 61  |.p_mkdir.p_sfsta|
0000b050  74 0a 70 5f 66 64 61 74  65 0a 70 5f 74 65 73 74  |t.p_fdate.p_test|
0000b060  70 74 68 0a 70 5f 66 69  6e 66 6f 0a 70 5f 64 69  |pth.p_finfo.p_di|
0000b070  6e 66 6f 0a 70 5f 6e 69  6e 66 6f 0a 44 61 74 65  |nfo.p_ninfo.Date|
0000b080  54 6f 50 6f 63 6b 65 74  0a 5a 61 70 4c 69 6e 6b  |ToPocket.ZapLink|
0000b090  0a 44 61 74 65 46 72 6f  6d 50 6f 63 6b 65 74 0a  |.DateFromPocket.|
0000b0a0  4e 61 6d 65 46 72 6f 6d  48 61 6e 64 6c 65 0a 70  |NameFromHandle.p|
0000b0b0  5f 73 65 65 6b 0a 70 5f  6c 6f 63 63 68 67 0a 23  |_seek.p_locchg.#|
0000b0c0  45 6e 64 54 61 62 6c 65  0a 00 00 00 44 49 52 24  |EndTable....DIR$|
0000b0d0  2c 00 00 00 2c 00 00 00  f8 b0 00 00 47 fd ff ff  |,...,.......G...|
0000b0e0  de 6b 7d 82 78 00 00 00  03 00 00 00 00 00 00 00  |.k}.x...........|
0000b0f0  21 52 6f 6f 74 00 00 00  44 41 54 41 78 00 00 00  |!Root...DATAx...|
0000b100  50 50 41 44 72 69 76 65  72 0a 23 50 61 72 65 6e  |PPADriver.#Paren|
0000b110  74 20 21 52 6f 6f 74 0a  23 50 72 65 66 69 78 20  |t !Root.#Prefix |
0000b120  50 50 41 44 72 69 76 65  72 5f 0a 23 54 61 62 6c  |PPADriver_.#Tabl|
0000b130  65 20 43 6f 6c 75 6d 6e  73 20 32 0a 49 6e 69 74  |e Columns 2.Init|
0000b140  69 61 6c 69 73 65 0a 53  43 53 49 43 6f 6d 6d 61  |ialise.SCSIComma|
0000b150  6e 64 0a 53 43 53 49 43  6f 6d 6d 61 6e 64 52 65  |nd.SCSICommandRe|
0000b160  74 72 69 65 73 0a 23 45  6e 64 54 61 62 6c 65 0a  |tries.#EndTable.|
0000b170  44 49 52 24 74 04 00 00  74 04 00 00 e4 b5 00 00  |DIR$t...t.......|
0000b180  46 fd ff ff 9e 49 93 a5  af 01 00 00 13 00 00 00  |F....I..........|
0000b190  00 00 00 00 21 52 6f 6f  74 00 00 00 94 b7 00 00  |....!Root.......|
0000b1a0  46 ff ff ff 66 75 e0 d0  f4 06 00 00 13 00 00 00  |F...fu..........|
0000b1b0  00 00 00 00 4c 6f 61 64  00 00 00 00 88 be 00 00  |....Load........|
0000b1c0  46 ff ff ff 2d 59 93 a5  c3 00 00 00 13 00 00 00  |F...-Y..........|
0000b1d0  00 00 00 00 53 74 61 72  74 00 00 00 4c bf 00 00  |....Start...L...|
0000b1e0  46 ff ff ff 62 5e 93 a5  fa 00 00 00 13 00 00 00  |F...b^..........|
0000b1f0  00 00 00 00 53 74 6f 70  00 00 00 00 48 c0 00 00  |....Stop....H...|
0000b200  46 ff ff ff c0 63 93 a5  ed 00 00 00 13 00 00 00  |F....c..........|
0000b210  00 00 00 00 50 61 75 73  65 00 00 00 38 c1 00 00  |....Pause...8...|
0000b220  46 ff ff ff 80 69 93 a5  70 03 00 00 13 00 00 00  |F....i..p.......|
0000b230  00 00 00 00 43 6c 65 61  72 00 00 00 a8 c4 00 00  |....Clear.......|
0000b240  46 ff ff ff 44 7d 93 a5  ba 05 00 00 13 00 00 00  |F...D}..........|
0000b250  00 00 00 00 49 6e 66 6f  00 00 00 00 64 ca 00 00  |....Info....d...|
0000b260  46 ff ff ff a4 84 93 a5  98 01 00 00 13 00 00 00  |F...............|
0000b270  00 00 00 00 50 6f 73 00  fc cb 00 00 46 ff ff ff  |....Pos.....F...|
0000b280  f4 2c 98 a5 dc 03 00 00  13 00 00 00 00 00 00 00  |.,..............|
0000b290  45 66 66 65 63 74 43 6f  6e 74 72 6f 6c 00 00 00  |EffectControl...|
0000b2a0  d8 cf 00 00 46 ff ff ff  08 94 93 a5 7d 01 00 00  |....F.......}...|
0000b2b0  13 00 00 00 00 00 00 00  56 6f 6c 75 6d 65 00 00  |........Volume..|
0000b2c0  58 d1 00 00 46 ff ff ff  44 90 93 a5 05 02 00 00  |X...F...D.......|
0000b2d0  13 00 00 00 00 00 00 00  53 65 74 53 61 6d 70 6c  |........SetSampl|
0000b2e0  65 53 70 65 65 64 00 00  60 d3 00 00 46 ff ff ff  |eSpeed..`...F...|
0000b2f0  b2 99 93 a5 48 02 00 00  13 00 00 00 00 00 00 00  |....H...........|
0000b300  44 4d 41 42 75 66 66 65  72 00 00 00 a8 d5 00 00  |DMABuffer.......|
0000b310  46 ff ff ff 18 a3 93 a5  e0 03 00 00 13 00 00 00  |F...............|
0000b320  00 00 00 00 52 65 6d 6f  76 65 43 68 61 6e 6e 65  |....RemoveChanne|
0000b330  6c 00 00 00 88 d9 00 00  46 ff ff ff e4 ae 93 a5  |l.......F.......|
0000b340  4a 01 00 00 13 00 00 00  00 00 00 00 52 65 73 74  |J...........Rest|
0000b350  6f 72 65 43 68 61 6e 6e  65 6c 00 00 d4 da 00 00  |oreChannel......|
0000b360  46 ff ff ff d4 c8 93 a5  1c 04 00 00 13 00 00 00  |F...............|
0000b370  00 00 00 00 53 74 65 72  65 6f 00 00 f0 de 00 00  |....Stereo......|
0000b380  46 ff ff ff 28 ce 93 a5  96 01 00 00 13 00 00 00  |F...(...........|
0000b390  00 00 00 00 52 65 61 64  53 6f 6e 67 4c 65 6e 67  |....ReadSongLeng|
0000b3a0  74 68 00 00 88 e0 00 00  46 ff ff ff bf d2 93 a5  |th......F.......|
0000b3b0  69 01 00 00 13 00 00 00  00 00 00 00 52 65 61 64  |i...........Read|
0000b3c0  53 65 71 75 65 6e 63 65  54 61 62 6c 65 00 00 00  |SequenceTable...|
0000b3d0  f4 e1 00 00 46 ff ff ff  b8 e2 93 a5 e0 02 00 00  |....F...........|
0000b3e0  13 00 00 00 00 00 00 00  56 55 42 61 72 43 6f 6e  |........VUBarCon|
0000b3f0  74 72 6f 6c 00 00 00 00  d4 e4 00 00 46 ff ff ff  |trol........F...|
0000b400  a5 ce 90 a5 29 02 00 00  13 00 00 00 00 00 00 00  |....)...........|
0000b410  52 65 61 64 56 55 4c 65  76 65 6c 73 00 00 00 00  |ReadVULevels....|
0000b420  00 e7 00 00 46 ff ff ff  81 f1 93 a5 4a 03 00 00  |....F.......J...|
0000b430  13 00 00 00 00 00 00 00  52 65 61 64 53 61 6d 70  |........ReadSamp|
0000b440  6c 65 54 61 62 6c 65 00  4c ea 00 00 46 ff ff ff  |leTable.L...F...|
0000b450  80 f9 93 a5 b4 03 00 00  13 00 00 00 00 00 00 00  |................|
0000b460  52 65 61 64 53 70 65 65  64 00 00 00 00 ee 00 00  |ReadSpeed.......|
0000b470  46 ff ff ff 34 04 94 a5  8c 03 00 00 13 00 00 00  |F...4...........|
0000b480  00 00 00 00 50 6c 61 79  53 61 6d 70 6c 65 00 00  |....PlaySample..|
0000b490  8c f1 00 00 46 ff ff ff  ee af 96 a5 58 01 00 00  |....F.......X...|
0000b4a0  13 00 00 00 00 00 00 00  53 6f 6e 67 53 74 61 74  |........SongStat|
0000b4b0  75 73 00 00 e4 f2 00 00  46 ff ff ff 88 f1 96 a5  |us......F.......|
0000b4c0  e0 04 00 00 13 00 00 00  00 00 00 00 52 65 61 64  |............Read|
0000b4d0  50 6c 61 79 69 6e 67 54  69 6d 65 00 c4 f7 00 00  |PlayingTime.....|
0000b4e0  46 ff ff ff fc f9 96 a5  04 03 00 00 13 00 00 00  |F...............|
0000b4f0  00 00 00 00 50 6c 61 79  52 61 77 53 61 6d 70 6c  |....PlayRawSampl|
0000b500  65 00 00 00 c8 fa 00 00  46 ff ff ff 49 ff 96 a5  |e.......F...I...|
0000b510  89 06 00 00 13 00 00 00  00 00 00 00 53 6f 75 6e  |............Soun|
0000b520  64 43 6f 6e 74 72 6f 6c  00 00 00 00 54 01 01 00  |dControl....T...|
0000b530  46 ff ff ff b4 9f 91 a5  a0 02 00 00 13 00 00 00  |F...............|
0000b540  00 00 00 00 53 57 49 54  61 62 6c 65 41 64 64 72  |....SWITableAddr|
0000b550  65 73 73 00 f4 03 01 00  46 ff ff ff 45 a8 e0 d0  |ess.....F...E...|
0000b560  7e 04 00 00 13 00 00 00  00 00 00 00 52 65 67 69  |~...........Regi|
0000b570  73 74 65 72 53 61 6d 70  6c 65 00 00 74 08 01 00  |sterSample..t...|
0000b580  46 ff ff ff 83 30 97 a5  bb 03 00 00 13 00 00 00  |F....0..........|
0000b590  00 00 00 00 53 65 74 53  70 65 65 64 00 00 00 00  |....SetSpeed....|
0000b5a0  30 0c 01 00 46 fd ff ff  29 6c 98 a5 71 01 00 00  |0...F...)l..q...|
0000b5b0  13 00 00 00 00 00 00 00  65 66 66 65 63 74 73 00  |........effects.|
0000b5c0  a4 0d 01 00 46 fd ff ff  41 37 7f f5 ad 01 00 00  |....F...A7......|
0000b5d0  13 00 00 00 00 00 00 00  65 2d 65 66 66 65 63 74  |........e-effect|
0000b5e0  73 00 00 00 44 41 54 41  af 01 00 00 51 54 4d 0a  |s...DATA....QTM.|
0000b5f0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
0000b600  72 65 66 69 78 20 51 54  4d 5f 0a 23 54 61 62 6c  |refix QTM_.#Tabl|
0000b610  65 20 43 6f 6c 75 6d 6e  73 20 32 0a 3c 4c 6f 61  |e Columns 2.<Loa|
0000b620  64 3e 0a 3c 53 74 61 72  74 3e 0a 3c 53 74 6f 70  |d>.<Start>.<Stop|
0000b630  3e 0a 3c 50 61 75 73 65  3e 0a 3c 43 6c 65 61 72  |>.<Pause>.<Clear|
0000b640  3e 0a 3c 49 6e 66 6f 3e  0a 3c 50 6f 73 3e 0a 3c  |>.<Info>.<Pos>.<|
0000b650  45 66 66 65 63 74 43 6f  6e 74 72 6f 6c 3e 0a 3c  |EffectControl>.<|
0000b660  56 6f 6c 75 6d 65 3e 0a  3c 53 65 74 53 61 6d 70  |Volume>.<SetSamp|
0000b670  6c 65 53 70 65 65 64 3e  0a 3c 44 4d 41 42 75 66  |leSpeed>.<DMABuf|
0000b680  66 65 72 3e 0a 3c 52 65  6d 6f 76 65 43 68 61 6e  |fer>.<RemoveChan|
0000b690  6e 65 6c 3e 0a 3c 52 65  73 74 6f 72 65 43 68 61  |nel>.<RestoreCha|
0000b6a0  6e 6e 65 6c 3e 0a 3c 53  74 65 72 65 6f 3e 0a 3c  |nnel>.<Stereo>.<|
0000b6b0  52 65 61 64 53 6f 6e 67  4c 65 6e 67 74 68 3e 0a  |ReadSongLength>.|
0000b6c0  3c 52 65 61 64 53 65 71  75 65 6e 63 65 54 61 62  |<ReadSequenceTab|
0000b6d0  6c 65 3e 0a 3c 56 55 42  61 72 43 6f 6e 74 72 6f  |le>.<VUBarContro|
0000b6e0  6c 3e 0a 3c 52 65 61 64  56 55 4c 65 76 65 6c 73  |l>.<ReadVULevels|
0000b6f0  3e 0a 3c 52 65 61 64 53  61 6d 70 6c 65 54 61 62  |>.<ReadSampleTab|
0000b700  6c 65 3e 0a 3c 52 65 61  64 53 70 65 65 64 3e 0a  |le>.<ReadSpeed>.|
0000b710  3c 50 6c 61 79 53 61 6d  70 6c 65 3e 0a 3c 53 6f  |<PlaySample>.<So|
0000b720  6e 67 53 74 61 74 75 73  3e 0a 3c 52 65 61 64 50  |ngStatus>.<ReadP|
0000b730  6c 61 79 69 6e 67 54 69  6d 65 3e 0a 3c 50 6c 61  |layingTime>.<Pla|
0000b740  79 52 61 77 53 61 6d 70  6c 65 3e 0a 3c 53 6f 75  |yRawSample>.<Sou|
0000b750  6e 64 43 6f 6e 74 72 6f  6c 3e 0a 3c 53 57 49 54  |ndControl>.<SWIT|
0000b760  61 62 6c 65 41 64 64 72  65 73 73 3e 0a 3c 52 65  |ableAddress>.<Re|
0000b770  67 69 73 74 65 72 53 61  6d 70 6c 65 3e 0a 3c 53  |gisterSample>.<S|
0000b780  65 74 53 70 65 65 64 3e  0a 23 45 6e 64 54 61 62  |etSpeed>.#EndTab|
0000b790  6c 65 0a 00 44 41 54 41  f4 06 00 00 51 54 4d 5f  |le..DATA....QTM_|
0000b7a0  4c 6f 61 64 20 20 28 26  34 37 45 34 30 29 0a 23  |Load  (&47E40).#|
0000b7b0  50 61 72 65 6e 74 20 51  54 4d 5f 0a 54 68 65 72  |Parent QTM_.Ther|
0000b7c0  65 20 61 72 65 20 74 68  72 65 65 20 66 6f 72 6d  |e are three form|
0000b7d0  73 20 6f 66 20 74 68 69  73 20 63 61 6c 6c 20 3a  |s of this call :|
0000b7e0  0a 3d 3e 09 20 09 3c 46  6f 72 6d 20 31 3d 3e 2e  |.=>. .<Form 1=>.|
0000b7f0  66 6f 72 6d 31 3e 09 09  3c 46 6f 72 6d 20 32 3d  |form1>..<Form 2=|
0000b800  3e 2e 66 6f 72 6d 32 3e  09 3c 46 6f 72 6d 20 33  |>.form2>.<Form 3|
0000b810  3d 3e 2e 66 6f 72 6d 33  3e 0a 09 52 30 20 3d 09  |=>.form3>..R0 =.|
0000b820  66 69 6c 65 6e 61 6d 65  09 09 09 30 09 09 09 2d  |filename...0...-|
0000b830  31 0a 09 52 31 20 3d 09  61 64 64 72 65 73 73 2c  |1..R1 =.address,|
0000b840  20 6f 72 20 30 20 66 6f  72 20 51 54 4d 20 6d 65  | or 0 for QTM me|
0000b850  6d 6f 72 79 09 61 64 64  72 65 73 73 20 20 20 20  |mory.address    |
0000b860  20 20 20 20 09 09 09 61  64 64 72 65 73 73 20 74  |    ...address t|
0000b870  6f 20 63 6f 70 79 20 66  72 6f 6d 0a 0a 3c 3d 09  |o copy from..<=.|
0000b880  52 30 2c 20 52 31 20 70  72 65 73 65 72 76 65 64  |R0, R1 preserved|
0000b890  0a 0a 54 68 65 20 61 64  64 72 65 73 73 20 61 6e  |..The address an|
0000b8a0  64 20 74 79 70 65 20 6f  66 20 74 68 65 20 6c 6f  |d type of the lo|
0000b8b0  61 64 65 64 20 73 6f 6e  67 20 63 61 6e 20 62 65  |aded song can be|
0000b8c0  20 72 65 61 64 20 62 79  20 3c 51 54 4d 5f 49 6e  | read by <QTM_In|
0000b8d0  66 6f 3e 2e 0a 0a 4e 6f  74 65 3a 20 57 68 65 6e  |fo>...Note: When|
0000b8e0  20 61 20 73 6f 6e 67 20  69 73 20 6c 6f 61 64 65  | a song is loade|
0000b8f0  64 20 28 62 79 20 61 6e  79 20 6d 65 74 68 6f 64  |d (by any method|
0000b900  29 20 69 74 73 20 73 61  6d 70 6c 65 20 64 61 74  |) its sample dat|
0000b910  61 20 69 73 20 63 6f 6e  76 65 72 74 65 64 20 69  |a is converted i|
0000b920  6e 74 6f 20 38 2d 62 69  74 20 6c 6f 67 61 72 69  |nto 8-bit logari|
0000b930  74 68 6d 69 63 20 64 61  74 61 2c 20 66 72 6f 6d  |thmic data, from|
0000b940  20 73 69 67 6e 65 64 20  6c 69 6e 65 61 72 20 64  | signed linear d|
0000b950  61 74 61 2e 20 31 35 20  69 6e 73 74 2e 20 66 6f  |ata. 15 inst. fo|
0000b960  72 6d 61 74 20 73 6f 6e  67 73 20 61 72 65 20 63  |rmat songs are c|
0000b970  6f 6e 76 65 72 74 65 64  20 74 6f 20 61 20 33 31  |onverted to a 31|
0000b980  20 69 6e 73 74 2e 20 66  6f 72 6d 61 74 20 61 74  | inst. format at|
0000b990  20 74 68 65 20 73 61 6d  65 20 74 69 6d 65 2e 20  | the same time. |
0000b9a0  54 68 65 20 73 61 6d 70  6c 65 20 64 61 74 61 20  |The sample data |
0000b9b0  43 41 4e 20 62 65 20 63  6f 6e 76 65 72 74 65 64  |CAN be converted|
0000b9c0  20 62 61 63 6b 20 74 6f  20 73 69 67 6e 65 64 20  | back to signed |
0000b9d0  6c 69 6e 65 61 72 2c 20  73 6f 20 74 68 65 20 73  |linear, so the s|
0000b9e0  6f 6e 67 20 63 61 6e 20  62 65 20 73 61 76 65 64  |ong can be saved|
0000b9f0  20 6f 72 20 72 65 2d 6c  6f 61 64 65 64 20 65 74  | or re-loaded et|
0000ba00  63 2e 20 62 79 20 63 61  6c 6c 69 6e 67 20 3c 51  |c. by calling <Q|
0000ba10  54 4d 5f 43 6c 65 61 72  3e 20 77 69 74 68 20 52  |TM_Clear> with R|
0000ba20  30 3d 2d 31 2c 20 61 6c  74 68 6f 75 67 68 20 74  |0=-1, although t|
0000ba30  68 65 20 73 6f 6e 67 20  66 6f 72 6d 61 74 20 77  |he song format w|
0000ba40  69 6c 6c 20 6e 6f 74 20  62 65 20 63 6f 6e 76 65  |ill not be conve|
0000ba50  72 74 65 64 20 62 61 63  6b 2c 20 61 6e 64 20 77  |rted back, and w|
0000ba60  69 6c 6c 20 72 65 6d 61  69 6e 20 61 73 20 33 31  |ill remain as 31|
0000ba70  20 69 6e 73 74 2e 0a 0a  56 20 66 6c 61 67 20 73  | inst...V flag s|
0000ba80  65 74 20 69 66 20 74 68  65 72 65 20 77 61 73 20  |et if there was |
0000ba90  6e 6f 74 20 65 6e 6f 75  67 68 20 73 70 61 63 65  |not enough space|
0000baa0  20 69 6e 20 74 68 65 20  52 4d 41 20 66 6f 72 20  | in the RMA for |
0000bab0  74 68 65 20 73 6f 6e 67  2c 20 74 68 65 20 66 69  |the song, the fi|
0000bac0  6c 65 20 77 61 73 20 6e  6f 74 20 66 6f 75 6e 64  |le was not found|
0000bad0  2c 20 74 68 65 20 6d 75  73 69 63 20 66 6f 72 6d  |, the music form|
0000bae0  61 74 20 77 61 73 20 6e  6f 74 20 75 6e 64 65 72  |at was not under|
0000baf0  73 74 6f 6f 64 2c 20 6f  72 20 61 6e 20 69 6c 6c  |stood, or an ill|
0000bb00  65 67 61 6c 20 6d 65 6d  6f 72 79 20 61 64 64 72  |egal memory addr|
0000bb10  65 73 73 20 77 61 73 20  73 70 65 63 69 66 69 65  |ess was specifie|
0000bb20  64 2e 0a 23 53 75 62 70  61 67 65 20 66 6f 72 6d  |d..#Subpage form|
0000bb30  31 0a 51 54 4d 5f 4c 6f  61 64 20 66 6f 72 6d 20  |1.QTM_Load form |
0000bb40  31 0a 44 65 70 65 6e 64  69 6e 67 20 6f 6e 20 74  |1.Depending on t|
0000bb50  68 65 20 76 61 6c 75 65  20 69 6e 20 52 31 2c 20  |he value in R1, |
0000bb60  51 54 4d 20 77 69 6c 6c  20 65 69 74 68 65 72 20  |QTM will either |
0000bb70  6c 6f 61 64 20 74 68 65  20 73 70 65 63 69 66 69  |load the specifi|
0000bb80  65 64 20 73 6f 6e 67 20  66 69 6c 65 20 69 6e 74  |ed song file int|
0000bb90  6f 20 51 54 4d 27 73 20  6f 77 6e 20 6d 65 6d 6f  |o QTM's own memo|
0000bba0  72 79 20 28 52 31 3d 30  29 2c 20 6f 72 20 74 6f  |ry (R1=0), or to|
0000bbb0  20 74 68 65 20 6d 65 6d  6f 72 79 20 61 64 64 72  | the memory addr|
0000bbc0  65 73 73 20 67 69 76 65  6e 20 69 6e 20 52 31 20  |ess given in R1 |
0000bbd0  28 52 31 5c 3c 3e 30 29  2e 0a 23 53 75 62 70 61  |(R1\<>0)..#Subpa|
0000bbe0  67 65 20 66 6f 72 6d 32  0a 51 54 4d 5f 4c 6f 61  |ge form2.QTM_Loa|
0000bbf0  64 20 66 6f 72 6d 20 32  0a 51 54 4d 20 77 69 6c  |d form 2.QTM wil|
0000bc00  6c 20 69 6e 69 74 69 61  6c 69 73 65 20 74 68 65  |l initialise the|
0000bc10  20 73 6f 6e 67 20 70 6f  69 6e 74 65 64 20 74 6f  | song pointed to|
0000bc20  20 62 79 20 52 31 2c 20  61 74 20 74 68 61 74 20  | by R1, at that |
0000bc30  61 64 64 72 65 73 73 2e  0a 54 68 69 73 20 65 6e  |address..This en|
0000bc40  61 62 6c 65 73 20 61 20  70 72 6f 67 72 61 6d 20  |ables a program |
0000bc50  74 6f 20 6c 6f 61 64 20  61 20 73 6f 6e 67 20 69  |to load a song i|
0000bc60  6e 74 6f 20 69 74 73 20  6f 77 6e 20 72 65 73 65  |nto its own rese|
0000bc70  72 76 65 64 20 6d 65 6d  6f 72 79 20 28 65 67 2e  |rved memory (eg.|
0000bc80  20 61 70 70 6c 69 63 61  74 69 6f 6e 20 6d 65 6d  | application mem|
0000bc90  6f 72 79 20 6f 72 20 69  74 73 20 6f 77 6e 20 52  |ory or its own R|
0000bca0  4d 41 20 62 6c 6f 63 6b  29 20 61 6e 64 20 67 65  |MA block) and ge|
0000bcb0  74 20 51 54 4d 20 74 6f  20 70 6c 61 79 20 69 74  |t QTM to play it|
0000bcc0  20 66 72 6f 6d 20 74 68  65 72 65 2c 20 72 61 74  | from there, rat|
0000bcd0  68 65 72 20 74 68 61 6e  20 66 72 6f 6d 20 61 20  |her than from a |
0000bce0  51 54 4d 2d 63 6f 6e 74  72 6f 6c 6c 65 64 20 52  |QTM-controlled R|
0000bcf0  4d 41 20 62 6c 6f 63 6b  2e 0a 23 53 75 62 70 61  |MA block..#Subpa|
0000bd00  67 65 20 66 6f 72 6d 33  0a 51 54 4d 20 77 69 6c  |ge form3.QTM wil|
0000bd10  6c 20 43 4f 50 59 20 74  68 65 20 73 6f 6e 67 20  |l COPY the song |
0000bd20  66 72 6f 6d 20 74 68 65  20 61 64 64 72 65 73 73  |from the address|
0000bd30  20 67 69 76 65 6e 20 69  6e 20 52 31 2c 20 74 6f  | given in R1, to|
0000bd40  20 69 74 73 20 6f 77 6e  20 6d 65 6d 6f 72 79 20  | its own memory |
0000bd50  28 52 4d 41 29 20 61 6e  64 20 75 73 65 20 69 74  |(RMA) and use it|
0000bd60  20 66 72 6f 6d 20 74 68  65 72 65 2e 0a 0a 4e 6f  | from there...No|
0000bd70  74 65 3a 20 49 66 20 74  68 65 20 61 64 64 72 65  |te: If the addre|
0000bd80  73 73 20 69 6e 20 52 31  20 69 73 20 74 68 65 20  |ss in R1 is the |
0000bd90  53 54 41 52 54 20 6f 66  20 61 6e 20 52 4d 41 20  |START of an RMA |
0000bda0  62 6c 6f 63 6b 2c 20 51  54 4d 20 77 69 6c 6c 20  |block, QTM will |
0000bdb0  74 61 6b 65 20 63 6f 6e  74 72 6f 6c 20 6f 66 20  |take control of |
0000bdc0  74 68 69 73 20 62 6c 6f  63 6b 2c 20 61 6e 64 20  |this block, and |
0000bdd0  72 65 6c 65 61 73 65 20  69 74 20 61 66 74 65 72  |release it after|
0000bde0  20 74 72 61 6e 73 66 65  72 69 6e 67 20 74 68 65  | transfering the|
0000bdf0  20 73 6f 6e 67 2e 20 54  68 69 73 20 69 73 20 64  | song. This is d|
0000be00  6f 6e 65 20 74 6f 20 72  65 64 75 63 65 20 70 6f  |one to reduce po|
0000be10  73 73 69 62 6c 65 20 66  72 61 67 6d 65 6e 74 61  |ssible fragmenta|
0000be20  74 69 6f 6e 20 6f 66 20  74 68 65 20 52 4d 41 2e  |tion of the RMA.|
0000be30  20 54 68 65 20 6c 6f 61  64 65 72 20 70 72 6f 67  | The loader prog|
0000be40  72 61 6d 20 6d 75 73 74  20 2a 4e 4f 54 2a 20 61  |ram must *NOT* a|
0000be50  63 63 65 73 73 20 74 68  65 20 6f 6c 64 20 52 4d  |ccess the old RM|
0000be60  41 20 61 64 64 72 65 73  73 20 6f 66 20 74 68 65  |A address of the|
0000be70  20 73 6f 6e 67 2c 20 61  66 74 65 72 20 74 68 69  | song, after thi|
0000be80  73 20 63 61 6c 6c 2e 0a  44 41 54 41 c3 00 00 00  |s call..DATA....|
0000be90  51 54 4d 5f 53 74 61 72  74 20 20 28 26 34 37 45  |QTM_Start  (&47E|
0000bea0  34 31 29 0a 23 50 61 72  65 6e 74 20 51 54 4d 5f  |41).#Parent QTM_|
0000beb0  0a 54 68 69 73 20 53 57  49 20 77 69 6c 6c 20 73  |.This SWI will s|
0000bec0  74 61 72 74 20 74 68 65  20 63 75 72 72 65 6e 74  |tart the current|
0000bed0  20 73 6f 6e 67 20 70 6c  61 79 69 6e 67 20 28 61  | song playing (a|
0000bee0  6e 64 20 73 74 61 72 74  20 75 70 20 74 68 65 20  |nd start up the |
0000bef0  73 6f 75 6e 64 20 73 79  73 74 65 6d 29 2c 20 61  |sound system), a|
0000bf00  66 74 65 72 20 6c 6f 61  64 69 6e 67 2c 20 6f 72  |fter loading, or|
0000bf10  20 62 65 69 6e 67 20 70  61 75 73 65 64 20 6f 72  | being paused or|
0000bf20  20 73 74 6f 70 70 65 64  2e 0a 0a 56 20 66 6c 61  | stopped...V fla|
0000bf30  67 20 73 65 74 20 69 66  20 6e 6f 20 73 6f 6e 67  |g set if no song|
0000bf40  20 69 73 20 6c 6f 61 64  65 64 0a 00 44 41 54 41  | is loaded..DATA|
0000bf50  fa 00 00 00 51 54 4d 5f  53 74 6f 70 20 20 28 26  |....QTM_Stop  (&|
0000bf60  34 37 45 34 32 29 0a 23  50 61 72 65 6e 74 20 51  |47E42).#Parent Q|
0000bf70  54 4d 5f 0a 54 68 69 73  20 53 57 49 20 77 69 6c  |TM_.This SWI wil|
0000bf80  6c 20 73 74 6f 70 20 74  68 65 20 63 75 72 72 65  |l stop the curre|
0000bf90  6e 74 20 73 6f 6e 67 20  70 6c 61 79 69 6e 67 2c  |nt song playing,|
0000bfa0  20 73 77 69 74 63 68 20  6f 66 66 20 51 54 4d 27  | switch off QTM'|
0000bfb0  73 20 73 6f 75 6e 64 20  63 6f 6e 74 72 6f 6c 6c  |s sound controll|
0000bfc0  65 72 73 20 61 6e 64 20  72 65 73 65 74 20 61 6c  |ers and reset al|
0000bfd0  6c 20 74 68 65 20 69 6e  74 65 72 6e 61 6c 20 73  |l the internal s|
0000bfe0  6f 6e 67 20 76 61 72 69  61 62 6c 65 73 2c 20 69  |ong variables, i|
0000bff0  6e 63 6c 75 64 69 6e 67  20 74 68 65 20 70 6f 73  |ncluding the pos|
0000c000  69 74 69 6f 6e 20 63 6f  75 6e 74 65 72 73 20 2d  |ition counters -|
0000c010  20 77 68 69 63 68 20 69  74 20 73 65 74 73 20 74  | which it sets t|
0000c020  6f 20 30 2e 0a 0a 56 20  66 6c 61 67 20 73 65 74  |o 0...V flag set|
0000c030  20 69 66 20 6e 6f 20 73  6f 6e 67 20 69 73 20 6c  | if no song is l|
0000c040  6f 61 64 65 64 0a 00 00  44 41 54 41 ed 00 00 00  |oaded...DATA....|
0000c050  51 54 4d 5f 50 61 75 73  65 20 20 28 26 34 37 45  |QTM_Pause  (&47E|
0000c060  34 33 29 0a 23 50 61 72  65 6e 74 20 51 54 4d 5f  |43).#Parent QTM_|
0000c070  0a 54 68 69 73 20 68 61  73 20 74 68 65 20 73 61  |.This has the sa|
0000c080  6d 65 20 65 66 66 65 63  74 20 61 73 20 3c 51 54  |me effect as <QT|
0000c090  4d 5f 53 74 6f 70 3e 2c  20 61 6c 74 68 6f 75 67  |M_Stop>, althoug|
0000c0a0  68 20 69 74 20 64 6f 65  73 6e 27 74 20 72 65 73  |h it doesn't res|
0000c0b0  65 74 20 74 68 65 20 69  6e 74 65 72 6e 61 6c 20  |et the internal |
0000c0c0  76 61 72 69 61 62 6c 65  73 2c 20 73 6f 20 77 68  |variables, so wh|
0000c0d0  65 6e 20 74 68 65 20 73  6f 6e 67 20 69 73 20 72  |en the song is r|
0000c0e0  65 2d 73 74 61 72 74 65  64 2c 20 69 74 20 77 69  |e-started, it wi|
0000c0f0  6c 6c 20 63 6f 6e 74 69  6e 75 65 20 66 72 6f 6d  |ll continue from|
0000c100  20 74 68 65 20 73 61 6d  65 20 70 6f 73 69 74 69  | the same positi|
0000c110  6f 6e 2e 0a 0a 56 20 66  6c 61 67 20 73 65 74 20  |on...V flag set |
0000c120  69 66 20 6e 6f 20 73 6f  6e 67 20 69 73 20 6c 6f  |if no song is lo|
0000c130  61 64 65 64 0a 00 00 00  44 41 54 41 70 03 00 00  |aded....DATAp...|
0000c140  51 54 4d 5f 43 6c 65 61  72 20 20 28 26 34 37 45  |QTM_Clear  (&47E|
0000c150  34 34 29 0a 23 50 61 72  65 6e 74 20 51 54 4d 5f  |44).#Parent QTM_|
0000c160  0a 3d 3e 09 52 30 20 3d  09 2d 31 20 74 6f 20 63  |.=>.R0 =.-1 to c|
0000c170  6f 6e 76 65 72 74 20 73  61 6d 70 6c 65 73 20 62  |onvert samples b|
0000c180  61 63 6b 20 74 6f 20 73  69 67 6e 65 64 20 6c 69  |ack to signed li|
0000c190  6e 65 61 72 20 66 6f 72  6d 61 74 0a 09 20 09 6f  |near format.. .o|
0000c1a0  74 68 65 72 20 64 6f 6e  27 74 20 63 6f 6e 76 65  |ther don't conve|
0000c1b0  72 74 20 73 61 6d 70 6c  65 73 0a 0a 3c 3d 09 52  |rt samples..<=.R|
0000c1c0  30 20 69 73 20 70 72 65  73 65 72 76 65 64 0a 0a  |0 is preserved..|
0000c1d0  54 68 69 73 20 53 57 49  20 77 69 6c 6c 20 73 77  |This SWI will sw|
0000c1e0  69 74 63 68 20 6f 66 66  20 74 68 65 20 51 54 4d  |itch off the QTM|
0000c1f0  20 73 6f 75 6e 64 20 73  79 73 74 65 6d 20 61 6e  | sound system an|
0000c200  64 20 73 74 6f 70 20 74  68 65 20 63 75 72 72 65  |d stop the curre|
0000c210  6e 74 20 73 6f 6e 67 20  70 6c 61 79 69 6e 67 2c  |nt song playing,|
0000c220  20 72 65 6c 65 61 73 69  6e 67 20 61 6e 79 20 6d  | releasing any m|
0000c230  65 6d 6f 72 79 20 75 73  65 64 20 66 6f 72 20 74  |emory used for t|
0000c240  68 65 20 73 6f 6e 67 20  69 66 20 69 74 20 77 61  |he song if it wa|
0000c250  73 20 6c 6f 61 64 65 64  20 69 6e 74 6f 20 52 4d  |s loaded into RM|
0000c260  41 2e 20 54 68 65 20 73  6f 6e 67 20 63 61 6e 6e  |A. The song cann|
0000c270  6f 74 20 62 65 20 72 65  73 74 61 72 74 65 64 20  |ot be restarted |
0000c280  61 66 74 65 72 20 74 68  69 73 20 63 6f 6d 6d 61  |after this comma|
0000c290  6e 64 2c 20 75 6e 6c 65  73 73 20 69 74 20 69 73  |nd, unless it is|
0000c2a0  20 72 65 6c 6f 61 64 65  64 20 28 66 72 6f 6d 20  | reloaded (from |
0000c2b0  75 73 65 72 2d 72 65 73  65 72 76 65 64 20 6d 65  |user-reserved me|
0000c2c0  6d 6f 72 79 2c 20 64 69  73 63 2c 20 65 74 63 2e  |mory, disc, etc.|
0000c2d0  29 20 75 73 69 6e 67 20  3c 51 54 4d 5f 4c 6f 61  |) using <QTM_Loa|
0000c2e0  64 3e 2e 0a 0a 54 68 65  20 43 55 52 52 45 4e 54  |d>...The CURRENT|
0000c2f0  20 73 6f 6e 67 20 63 61  6e 20 6f 6e 6c 79 20 62  | song can only b|
0000c300  65 20 72 65 6c 6f 61 64  65 64 20 66 72 6f 6d 20  |e reloaded from |
0000c310  75 73 65 72 2d 72 65 73  65 72 76 65 64 20 28 6e  |user-reserved (n|
0000c320  6f 74 20 51 54 4d 27 73  29 20 6d 65 6d 6f 72 79  |ot QTM's) memory|
0000c330  0a 61 66 74 65 72 20 63  61 6c 6c 69 6e 67 20 3c  |.after calling <|
0000c340  51 54 4d 5f 43 6c 65 61  72 3e 2c 20 69 66 20 74  |QTM_Clear>, if t|
0000c350  68 65 20 73 61 6d 70 6c  65 73 20 68 61 76 65 20  |he samples have |
0000c360  62 65 65 6e 20 63 6f 6e  76 65 72 74 65 64 20 62  |been converted b|
0000c370  61 63 6b 20 74 6f 0a 73  69 67 6e 65 64 20 6c 69  |ack to.signed li|
0000c380  6e 65 61 72 20 66 6f 72  6d 61 74 20 28 66 72 6f  |near format (fro|
0000c390  6d 20 74 68 65 20 6c 6f  67 61 72 69 74 68 6d 69  |m the logarithmi|
0000c3a0  63 20 66 6f 72 6d 61 74  20 74 68 65 79 20 77 65  |c format they we|
0000c3b0  72 65 20 63 6f 6e 76 65  72 74 65 64 20 74 6f 0a  |re converted to.|
0000c3c0  77 68 65 6e 20 74 68 65  20 73 6f 6e 67 20 77 61  |when the song wa|
0000c3d0  73 20 6c 6f 61 64 65 64  29 2e 20 54 68 69 73 20  |s loaded). This |
0000c3e0  63 61 6e 20 62 65 20 64  6f 6e 65 20 62 79 20 73  |can be done by s|
0000c3f0  65 74 74 69 6e 67 20 52  30 20 74 6f 20 2d 31 20  |etting R0 to -1 |
0000c400  62 65 66 6f 72 65 0a 63  61 6c 6c 69 6e 67 20 3c  |before.calling <|
0000c410  51 54 4d 5f 43 6c 65 61  72 3e 2e 20 53 65 65 20  |QTM_Clear>. See |
0000c420  3c 51 54 4d 5f 4c 6f 61  64 3e 20 66 6f 72 20 69  |<QTM_Load> for i|
0000c430  6e 66 6f 72 6d 61 74 69  6f 6e 20 6f 6e 20 28 72  |nformation on (r|
0000c440  65 29 6c 6f 61 64 69 6e  67 20 61 0a 73 6f 6e 67  |e)loading a.song|
0000c450  20 74 68 61 74 20 69 73  20 61 6c 72 65 61 64 79  | that is already|
0000c460  20 73 74 6f 72 65 64 20  69 6e 20 6d 65 6d 6f 72  | stored in memor|
0000c470  79 2e 0a 0a 4e 6f 20 65  72 72 6f 72 20 69 73 20  |y...No error is |
0000c480  72 65 70 6f 72 74 65 64  20 69 66 20 74 68 65 72  |reported if ther|
0000c490  65 20 69 73 20 6e 6f 74  20 61 20 73 6f 6e 67 20  |e is not a song |
0000c4a0  6c 6f 61 64 65 64 2e 0a  44 41 54 41 ba 05 00 00  |loaded..DATA....|
0000c4b0  51 54 4d 5f 49 6e 66 6f  20 20 28 26 34 37 45 34  |QTM_Info  (&47E4|
0000c4c0  35 29 0a 23 50 61 72 65  6e 74 20 51 54 4d 5f 0a  |5).#Parent QTM_.|
0000c4d0  3c 3d 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |<=.R0 =.pointer |
0000c4e0  74 6f 20 74 72 61 63 6b  20 6e 61 6d 65 20 28 30  |to track name (0|
0000c4f0  20 74 65 72 6d 69 6e 61  74 65 64 29 0a 09 52 31  | terminated)..R1|
0000c500  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 61 75  | =.pointer to au|
0000c510  74 68 6f 72 20 6e 61 6d  65 20 28 30 20 74 65 72  |thor name (0 ter|
0000c520  6d 69 6e 61 74 65 64 29  20 6f 72 20 30 20 69 66  |minated) or 0 if|
0000c530  20 6e 6f 6e 65 0a 09 52  32 20 3d 09 3c 73 6f 6e  | none..R2 =.<son|
0000c540  67 20 6f 72 69 67 69 6e  3d 3e 2e 6f 72 69 67 69  |g origin=>.origi|
0000c550  6e 73 3e 0a 09 52 33 20  3d 09 6e 75 6d 62 65 72  |ns>..R3 =.number|
0000c560  20 6f 66 20 63 68 61 6e  6e 65 6c 73 20 28 63 75  | of channels (cu|
0000c570  72 72 65 6e 74 6c 79 20  6f 6e 6c 79 20 34 20 63  |rrently only 4 c|
0000c580  68 61 6e 6e 65 6c 73 29  0a 09 52 34 20 3d 09 66  |hannels)..R4 =.f|
0000c590  69 6c 65 20 6c 65 6e 67  74 68 20 28 69 6e 20 62  |ile length (in b|
0000c5a0  79 74 65 73 29 0a 09 52  35 20 3d 09 67 61 72 62  |ytes)..R5 =.garb|
0000c5b0  61 67 65 20 64 61 74 61  20 73 69 7a 65 20 28 2d  |age data size (-|
0000c5c0  76 65 20 69 66 20 64 61  74 61 20 6d 69 73 73 69  |ve if data missi|
0000c5d0  6e 67 29 0a 09 52 36 20  3d 09 61 64 64 72 65 73  |ng)..R6 =.addres|
0000c5e0  73 20 77 68 65 72 65 20  73 6f 6e 67 20 69 73 20  |s where song is |
0000c5f0  6c 6f 61 64 65 64 0a 0a  54 68 69 73 20 53 57 49  |loaded..This SWI|
0000c600  20 72 65 74 75 72 6e 73  20 67 65 6e 65 72 61 6c  | returns general|
0000c610  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 20 61 62 6f  | information abo|
0000c620  75 74 20 74 68 65 20 63  75 72 72 65 6e 74 20 74  |ut the current t|
0000c630  72 61 63 6b 20 6c 6f 61  64 65 64 20 69 6e 20 51  |rack loaded in Q|
0000c640  54 4d 2e 0a 0a 49 74 20  61 6c 73 6f 20 75 73 65  |TM...It also use|
0000c650  73 20 61 6e 20 27 69 6e  74 65 6c 6c 69 67 65 6e  |s an 'intelligen|
0000c660  74 20 61 75 74 68 6f 72  20 64 65 74 65 63 74 6f  |t author detecto|
0000c670  72 27 20 72 6f 75 74 69  6e 65 2c 20 74 6f 20 73  |r' routine, to s|
0000c680  65 61 72 63 68 20 74 68  72 6f 75 67 68 20 74 68  |earch through th|
0000c690  65 20 73 61 6d 70 6c 65  20 6e 61 6d 65 73 20 28  |e sample names (|
0000c6a0  75 73 75 61 6c 6c 79 20  75 73 65 64 20 62 79 20  |usually used by |
0000c6b0  61 75 74 68 6f 72 73 2c  20 74 6f 20 73 74 6f 72  |authors, to stor|
0000c6c0  65 20 74 68 65 69 72 20  6e 61 6d 65 20 6f 72 20  |e their name or |
0000c6d0  67 72 6f 75 70 29 20 74  6f 20 73 65 65 20 69 66  |group) to see if|
0000c6e0  20 69 74 20 63 61 6e 20  66 69 6e 64 20 61 6e 79  | it can find any|
0000c6f0  74 68 69 6e 67 20 74 68  61 74 20 72 65 73 65 6d  |thing that resem|
0000c700  62 6c 65 73 20 61 20 6e  61 6d 65 2e 20 49 66 20  |bles a name. If |
0000c710  69 74 20 73 75 63 63 65  65 64 73 2c 20 61 20 70  |it succeeds, a p|
0000c720  6f 69 6e 74 65 72 20 74  6f 20 74 68 65 20 6e 61  |ointer to the na|
0000c730  6d 65 20 69 73 20 72 65  74 75 72 6e 65 64 20 69  |me is returned i|
0000c740  6e 20 52 31 2c 20 6f 74  68 65 72 77 69 73 65 20  |n R1, otherwise |
0000c750  30 20 69 73 20 72 65 74  75 72 6e 65 64 2e 0a 0a  |0 is returned...|
0000c760  4e 6f 74 65 3a 20 54 68  65 20 27 73 6f 6e 67 20  |Note: The 'song |
0000c770  6f 72 69 67 69 6e 27 20  76 61 6c 75 65 20 28 52  |origin' value (R|
0000c780  32 29 2c 20 63 6f 72 72  65 73 70 6f 6e 64 73 20  |2), corresponds |
0000c790  74 6f 20 74 68 65 20 6f  72 69 67 69 6e 61 6c 20  |to the original |
0000c7a0  73 6f 6e 67 20 74 79 70  65 2c 20 4e 4f 54 20 74  |song type, NOT t|
0000c7b0  68 65 20 66 6f 72 6d 61  74 20 6f 66 20 74 68 65  |he format of the|
0000c7c0  20 73 6f 6e 67 20 69 6e  20 6d 65 6d 6f 72 79 2e  | song in memory.|
0000c7d0  20 41 66 74 65 72 20 6c  6f 61 64 69 6e 67 2c 20  | After loading, |
0000c7e0  51 54 4d 20 63 6f 6e 76  65 72 74 73 20 61 6c 6c  |QTM converts all|
0000c7f0  20 73 6f 6e 67 73 20 74  6f 20 74 68 65 20 33 31  | songs to the 31|
0000c800  20 69 6e 73 74 2e 20 50  72 6f 54 72 61 63 6b 65  | inst. ProTracke|
0000c810  72 20 66 6f 72 6d 61 74  2e 20 46 75 74 75 72 65  |r format. Future|
0000c820  20 76 65 72 73 69 6f 6e  73 20 6f 66 20 51 54 4d  | versions of QTM|
0000c830  2c 20 68 6f 77 65 76 65  72 2c 20 6d 61 79 20 73  |, however, may s|
0000c840  75 70 70 6f 72 74 20 64  69 66 66 65 72 65 6e 74  |upport different|
0000c850  20 73 6f 6e 67 20 74 79  70 65 73 20 69 6e 20 6d  | song types in m|
0000c860  65 6d 6f 72 79 2e 20 54  6f 20 61 76 6f 69 64 20  |emory. To avoid |
0000c870  70 72 6f 62 6c 65 6d 73  20 77 69 74 68 20 6e 65  |problems with ne|
0000c880  77 20 74 79 70 65 73 20  62 65 69 6e 67 20 73 75  |w types being su|
0000c890  70 70 6f 72 74 65 64 2c  20 69 74 20 63 61 6e 20  |pported, it can |
0000c8a0  62 65 20 61 73 73 75 6d  65 64 20 74 68 61 74 20  |be assumed that |
0000c8b0  61 6e 79 20 73 6f 6e 67  20 72 65 74 75 72 6e 69  |any song returni|
0000c8c0  6e 67 20 61 20 76 61 6c  75 65 20 69 6e 20 52 32  |ng a value in R2|
0000c8d0  20 5c 3c 20 26 31 30 20  28 31 36 29 2c 20 77 69  | \< &10 (16), wi|
0000c8e0  6c 6c 20 62 65 20 73 74  6f 72 65 64 20 69 6e 20  |ll be stored in |
0000c8f0  6d 65 6d 6f 72 79 20 61  73 20 61 20 34 20 63 68  |memory as a 4 ch|
0000c900  61 6e 6e 65 6c 2c 20 33  31 20 69 6e 73 74 2e 20  |annel, 31 inst. |
0000c910  50 72 6f 54 72 61 63 6b  65 72 20 66 6f 72 6d 61  |ProTracker forma|
0000c920  74 20 73 6f 6e 67 2e 20  53 6f 6e 67 20 65 64 69  |t song. Song edi|
0000c930  74 6f 72 73 20 61 6e 64  20 64 69 73 70 6c 61 79  |tors and display|
0000c940  20 70 72 6f 67 72 61 6d  73 20 73 68 6f 75 6c 64  | programs should|
0000c950  20 63 68 65 63 6b 20 74  68 69 73 20 76 61 6c 75  | check this valu|
0000c960  65 2c 20 74 6f 20 65 6e  73 75 72 65 20 74 68 61  |e, to ensure tha|
0000c970  74 20 74 68 65 20 6c 6f  61 64 65 64 20 73 6f 6e  |t the loaded son|
0000c980  67 20 69 73 20 69 6e 20  74 68 65 20 65 78 70 65  |g is in the expe|
0000c990  63 74 65 64 20 66 6f 72  6d 61 74 20 66 6f 72 20  |cted format for |
0000c9a0  74 68 65 20 70 72 6f 67  72 61 6d 2e 0a 0a 56 20  |the program...V |
0000c9b0  66 6c 61 67 20 73 65 74  20 69 66 20 6e 6f 20 73  |flag set if no s|
0000c9c0  6f 6e 67 20 69 73 20 6c  6f 61 64 65 64 0a 23 53  |ong is loaded.#S|
0000c9d0  75 62 70 61 67 65 20 6f  72 69 67 69 6e 73 0a 51  |ubpage origins.Q|
0000c9e0  54 4d 20 53 6f 6e 67 20  6f 72 69 67 69 6e 73 0a  |TM Song origins.|
0000c9f0  76 61 6c 75 65 09 6f 72  69 67 69 6e 0a 23 4c 69  |value.origin.#Li|
0000ca00  6e 65 0a 30 09 31 35 20  69 6e 73 74 2e 20 53 6f  |ne.0.15 inst. So|
0000ca10  75 6e 64 20 54 72 61 63  6b 65 72 0a 31 09 33 31  |und Tracker.1.31|
0000ca20  20 69 6e 73 74 2e 20 53  6f 75 6e 64 20 54 72 61  | inst. Sound Tra|
0000ca30  63 6b 65 72 0a 32 09 33  31 20 69 6e 73 74 2e 20  |cker.2.31 inst. |
0000ca40  50 72 6f 54 72 61 63 6b  65 72 0a 33 09 33 31 20  |ProTracker.3.31 |
0000ca50  69 6e 73 74 2e 20 53 74  61 72 74 72 65 6b 6b 65  |inst. Startrekke|
0000ca60  72 0a 00 00 44 41 54 41  98 01 00 00 51 54 4d 5f  |r...DATA....QTM_|
0000ca70  50 6f 73 20 20 28 26 34  37 45 34 36 29 0a 23 50  |Pos  (&47E46).#P|
0000ca80  61 72 65 6e 74 20 51 54  4d 5f 0a 3d 3e 09 52 30  |arent QTM_.=>.R0|
0000ca90  20 3d 09 6e 65 77 20 73  65 71 75 65 6e 63 65 20  | =.new sequence |
0000caa0  70 6f 73 69 74 69 6f 6e  20 28 30 2d 31 32 37 29  |position (0-127)|
0000cab0  2c 20 2d 31 20 74 6f 20  72 65 61 64 20 63 75 72  |, -1 to read cur|
0000cac0  72 65 6e 74 20 70 6f 73  69 74 69 6f 6e 0a 09 52  |rent position..R|
0000cad0  31 20 3d 09 6e 65 77 20  65 76 65 6e 74 20 70 6f  |1 =.new event po|
0000cae0  73 69 74 69 6f 6e 20 28  30 2d 36 33 29 2c 20 2d  |sition (0-63), -|
0000caf0  31 20 74 6f 20 72 65 61  64 0a 0a 3c 3d 09 52 30  |1 to read..<=.R0|
0000cb00  20 3d 09 70 72 65 76 69  6f 75 73 20 73 65 71 75  | =.previous sequ|
0000cb10  65 6e 63 65 20 70 6f 73  69 74 69 6f 6e 20 28 30  |ence position (0|
0000cb20  2d 31 32 37 29 0a 09 52  31 20 3d 09 70 72 65 76  |-127)..R1 =.prev|
0000cb30  69 6f 75 73 20 65 76 65  6e 74 20 70 6f 73 69 74  |ious event posit|
0000cb40  69 6f 6e 20 28 30 2d 36  33 29 0a 0a 54 68 69 73  |ion (0-63)..This|
0000cb50  20 53 57 49 20 63 61 6e  20 62 65 20 75 73 65 64  | SWI can be used|
0000cb60  20 74 6f 20 72 65 61 64  20 6f 72 20 61 6c 74 65  | to read or alte|
0000cb70  72 20 74 68 65 20 63 75  72 72 65 6e 74 20 73 65  |r the current se|
0000cb80  71 75 65 6e 63 65 20 6f  72 20 65 76 65 6e 74 20  |quence or event |
0000cb90  70 6f 73 69 74 69 6f 6e  20 69 6e 20 74 68 65 20  |position in the |
0000cba0  63 75 72 72 65 6e 74 20  73 6f 6e 67 2e 0a 0a 56  |current song...V|
0000cbb0  20 66 6c 61 67 20 73 65  74 20 69 66 20 6e 6f 20  | flag set if no |
0000cbc0  73 6f 6e 67 20 69 73 20  6c 6f 61 64 65 64 20 6f  |song is loaded o|
0000cbd0  72 20 74 68 65 20 70 6f  73 69 74 69 6f 6e 2f 65  |r the position/e|
0000cbe0  76 65 6e 74 20 6e 75 6d  62 65 72 20 69 73 20 6f  |vent number is o|
0000cbf0  75 74 20 6f 66 20 72 61  6e 67 65 0a 44 41 54 41  |ut of range.DATA|
0000cc00  dc 03 00 00 51 54 4d 5f  45 66 66 65 63 74 43 6f  |....QTM_EffectCo|
0000cc10  6e 74 72 6f 6c 20 20 28  26 34 37 45 34 37 29 0a  |ntrol  (&47E47).|
0000cc20  23 50 61 72 65 6e 74 20  51 54 4d 5f 0a 3d 3e 09  |#Parent QTM_.=>.|
0000cc30  52 30 20 3d 09 3c 65 66  66 65 63 74 20 6e 75 6d  |R0 =.<effect num|
0000cc40  62 65 72 3d 3e 51 54 4d  5f 65 66 66 65 63 74 73  |ber=>QTM_effects|
0000cc50  3e 20 28 26 30 2d 26 46  2c 26 45 30 2d 26 45 46  |> (&0-&F,&E0-&EF|
0000cc60  20 66 6f 72 20 3c 27 45  27 20 65 66 66 65 63 74  | for <'E' effect|
0000cc70  73 3d 3e 51 54 4d 5f 65  2d 65 66 66 65 63 74 73  |s=>QTM_e-effects|
0000cc80  3e 29 20 6f 72 20 2d 31  20 74 6f 20 72 65 61 64  |>) or -1 to read|
0000cc90  20 63 75 72 72 65 6e 74  20 73 74 61 74 65 0a 09  | current state..|
0000cca0  52 31 20 3d 09 6e 65 77  20 73 74 61 74 65 20 6f  |R1 =.new state o|
0000ccb0  66 20 65 66 66 65 63 74  20 28 30 2d 6f 66 66 2f  |f effect (0-off/|
0000ccc0  31 2d 6f 6e 29 0a 0a 3c  3d 09 52 30 20 3d 09 70  |1-on)..<=.R0 =.p|
0000ccd0  72 65 76 69 6f 75 73 20  65 66 66 65 63 74 20 73  |revious effect s|
0000cce0  74 61 74 65 20 77 6f 72  64 20 28 26 30 2d 26 46  |tate word (&0-&F|
0000ccf0  29 20 31 20 62 69 74 20  70 65 72 20 65 66 66 65  |) 1 bit per effe|
0000cd00  63 74 2c 20 31 36 20 62  69 74 73 0a 09 52 31 20  |ct, 16 bits..R1 |
0000cd10  3d 09 70 72 65 76 69 6f  75 73 20 65 66 66 65 63  |=.previous effec|
0000cd20  74 20 73 74 61 74 65 20  77 6f 72 64 20 28 26 45  |t state word (&E|
0000cd30  30 2d 26 45 46 29 20 61  73 20 61 62 6f 76 65 0a  |0-&EF) as above.|
0000cd40  0a 54 68 69 73 20 53 57  49 20 63 61 6e 20 62 65  |.This SWI can be|
0000cd50  20 75 73 65 64 20 74 6f  20 63 68 61 6e 67 65 20  | used to change |
0000cd60  74 68 65 20 73 74 61 74  65 20 6f 66 20 61 6e 79  |the state of any|
0000cd70  20 65 66 66 65 63 74 20  28 61 73 20 73 65 65 6e  | effect (as seen|
0000cd80  20 62 79 20 74 68 65 20  51 54 4d 20 65 66 66 65  | by the QTM effe|
0000cd90  63 74 20 68 61 6e 64 6c  65 72 73 29 2e 20 44 69  |ct handlers). Di|
0000cda0  73 61 62 6c 69 6e 67 20  61 6e 20 65 66 66 65 63  |sabling an effec|
0000cdb0  74 20 77 69 6c 6c 20 73  74 6f 70 20 51 54 4d 20  |t will stop QTM |
0000cdc0  74 61 6b 69 6e 67 20 61  6e 79 20 61 63 74 69 6f  |taking any actio|
0000cdd0  6e 20 6f 76 65 72 20 69  74 2e 20 46 6f 72 20 65  |n over it. For e|
0000cde0  78 61 6d 70 6c 65 2c 20  64 69 73 61 62 6c 69 6e  |xample, disablin|
0000cdf0  67 20 65 66 66 65 63 74  20 26 46 20 77 69 6c 6c  |g effect &F will|
0000ce00  20 6e 6f 74 20 61 6c 6c  6f 77 20 73 70 65 65 64  | not allow speed|
0000ce10  2f 74 65 6d 70 6f 20 63  68 61 6e 67 65 73 20 74  |/tempo changes t|
0000ce20  6f 20 74 61 6b 65 20 70  6c 61 63 65 2c 20 61 6e  |o take place, an|
0000ce30  64 20 74 68 65 20 73 6f  6e 67 20 6d 61 79 20 73  |d the song may s|
0000ce40  6f 75 6e 64 20 74 6f 6f  20 66 61 73 74 20 6f 72  |ound too fast or|
0000ce50  20 73 6c 6f 77 2e 0a 0a  4f 6e 63 65 20 72 65 2d  | slow...Once re-|
0000ce60  65 6e 61 62 6c 65 64 2c  20 74 68 65 20 65 66 66  |enabled, the eff|
0000ce70  65 63 74 28 73 29 20 77  69 6c 6c 20 62 65 20 72  |ect(s) will be r|
0000ce80  75 6e 20 61 73 20 75 73  75 61 6c 20 61 67 61 69  |un as usual agai|
0000ce90  6e 2e 0a 0a 54 68 65 20  63 6f 6e 74 65 6e 74 73  |n...The contents|
0000cea0  20 6f 66 20 52 30 20 61  6e 64 20 52 31 20 6f 6e  | of R0 and R1 on|
0000ceb0  20 65 78 69 74 20 61 72  65 20 61 20 63 6f 70 79  | exit are a copy|
0000cec0  20 6f 66 20 74 68 65 20  65 66 66 65 63 74 20 77  | of the effect w|
0000ced0  6f 72 64 73 20 75 73 65  64 20 62 79 20 51 54 4d  |ords used by QTM|
0000cee0  20 2d 20 65 61 63 68 20  68 61 73 20 31 36 20 62  | - each has 16 b|
0000cef0  69 74 73 20 75 73 65 64  2c 20 77 69 74 68 20 65  |its used, with e|
0000cf00  61 63 68 20 62 69 74 20  72 65 70 72 65 73 65 6e  |ach bit represen|
0000cf10  74 69 6e 67 20 74 68 65  20 73 74 61 74 65 20 6f  |ting the state o|
0000cf20  66 20 74 68 61 74 20 65  66 66 65 63 74 20 30 2d  |f that effect 0-|
0000cf30  6f 66 66 2c 20 31 2d 6f  6e 2e 20 52 30 20 63 6f  |off, 1-on. R0 co|
0000cf40  6e 74 61 69 6e 73 20 74  68 65 20 66 6c 61 67 73  |ntains the flags|
0000cf50  20 66 6f 72 20 74 68 65  20 6e 6f 72 6d 61 6c 20  | for the normal |
0000cf60  65 66 66 65 63 74 73 20  28 26 30 2d 26 46 29 2c  |effects (&0-&F),|
0000cf70  20 52 31 20 63 6f 6e 74  61 69 6e 73 20 74 68 65  | R1 contains the|
0000cf80  20 66 6c 61 67 73 20 66  6f 72 20 74 68 65 20 27  | flags for the '|
0000cf90  45 27 20 65 66 66 65 63  74 73 20 28 26 45 30 2d  |E' effects (&E0-|
0000cfa0  26 45 46 29 2e 0a 0a 56  20 66 6c 61 67 20 73 65  |&EF)...V flag se|
0000cfb0  74 20 69 66 20 74 68 65  20 65 66 66 65 63 74 20  |t if the effect |
0000cfc0  6e 75 6d 62 65 72 20 77  61 73 20 6f 75 74 20 6f  |number was out o|
0000cfd0  66 20 72 61 6e 67 65 0a  44 41 54 41 7d 01 00 00  |f range.DATA}...|
0000cfe0  51 54 4d 5f 56 6f 6c 75  6d 65 20 20 28 26 34 37  |QTM_Volume  (&47|
0000cff0  45 34 38 29 0a 23 50 61  72 65 6e 74 20 51 54 4d  |E48).#Parent QTM|
0000d000  5f 0a 3d 3e 09 52 30 20  3d 09 6e 65 77 20 6f 76  |_.=>.R0 =.new ov|
0000d010  65 72 61 6c 6c 20 76 6f  6c 75 6d 65 20 28 30 2d  |erall volume (0-|
0000d020  36 34 29 20 6f 72 20 2d  31 20 74 6f 20 72 65 61  |64) or -1 to rea|
0000d030  64 20 63 75 72 72 65 6e  74 20 76 6f 6c 75 6d 65  |d current volume|
0000d040  0a 3c 3d 09 52 30 20 3d  09 70 72 65 76 69 6f 75  |.<=.R0 =.previou|
0000d050  73 20 76 6f 6c 75 6d 65  20 28 30 2d 36 34 29 0a  |s volume (0-64).|
0000d060  0a 54 68 69 73 20 53 57  49 20 61 6c 6c 6f 77 73  |.This SWI allows|
0000d070  20 79 6f 75 20 73 65 74  20 74 68 65 20 6f 76 65  | you set the ove|
0000d080  72 61 6c 6c 20 6f 75 74  70 75 74 20 76 6f 6c 75  |rall output volu|
0000d090  6d 65 20 66 72 6f 6d 20  74 68 65 20 51 54 4d 20  |me from the QTM |
0000d0a0  73 6f 75 6e 64 20 68 61  6e 64 6c 65 72 73 2e 20  |sound handlers. |
0000d0b0  54 68 65 20 76 6f 6c 75  6d 65 20 69 73 20 69 6e  |The volume is in|
0000d0c0  20 61 20 6c 69 6e 65 61  72 20 66 6f 72 6d 20 28  | a linear form (|
0000d0d0  30 2d 36 34 29 2c 20 61  73 20 75 73 65 64 20 66  |0-64), as used f|
0000d0e0  6f 72 20 76 6f 6c 75 6d  65 73 20 69 6e 20 50 72  |or volumes in Pr|
0000d0f0  6f 54 72 61 63 6b 65 72  20 73 6f 6e 67 73 2e 20  |oTracker songs. |
0000d100  47 72 61 64 75 61 6c 20  66 61 64 65 73 20 63 61  |Gradual fades ca|
0000d110  6e 20 62 65 20 67 65 6e  65 72 61 74 65 64 20 75  |n be generated u|
0000d120  73 69 6e 67 20 74 68 69  73 20 53 57 49 2e 0a 0a  |sing this SWI...|
0000d130  56 20 66 6c 61 67 20 73  65 74 20 69 66 20 76 6f  |V flag set if vo|
0000d140  6c 75 6d 65 20 69 73 20  6f 75 74 20 6f 66 20 72  |lume is out of r|
0000d150  61 6e 67 65 0a 00 00 00  44 41 54 41 05 02 00 00  |ange....DATA....|
0000d160  51 54 4d 5f 53 65 74 53  61 6d 70 6c 65 53 70 65  |QTM_SetSampleSpe|
0000d170  65 64 20 20 28 26 34 37  45 34 39 29 0a 23 50 61  |ed  (&47E49).#Pa|
0000d180  72 65 6e 74 20 51 54 4d  5f 0a 3d 3e 09 52 30 20  |rent QTM_.=>.R0 |
0000d190  3d 09 6e 65 77 20 73 61  6d 70 6c 65 20 73 70 65  |=.new sample spe|
0000d1a0  65 64 20 28 31 36 2d 39  36 b5 53 29 20 6f 72 20  |ed (16-96.S) or |
0000d1b0  2d 31 20 74 6f 20 72 65  61 64 20 63 75 72 72 65  |-1 to read curre|
0000d1c0  6e 74 20 73 70 65 65 64  0a 3c 3d 09 52 30 20 3d  |nt speed.<=.R0 =|
0000d1d0  09 70 72 65 76 69 6f 75  73 20 73 61 6d 70 6c 65  |.previous sample|
0000d1e0  20 73 70 65 65 64 20 28  31 36 2d 39 36 b5 53 29  | speed (16-96.S)|
0000d1f0  0a 0a 54 68 69 73 20 53  57 49 20 6c 65 74 73 20  |..This SWI lets |
0000d200  79 6f 75 20 73 65 74 20  74 68 65 20 74 69 6d 65  |you set the time|
0000d210  20 62 65 74 77 65 65 6e  20 73 61 6d 70 6c 65 20  | between sample |
0000d220  6f 75 74 70 75 74 73 20  28 69 65 2e 20 73 61 6d  |outputs (ie. sam|
0000d230  70 6c 65 20 71 75 61 6c  69 74 79 29 20 74 6f 20  |ple quality) to |
0000d240  61 20 76 61 6c 75 65 20  62 65 74 77 65 65 6e 20  |a value between |
0000d250  31 36 b5 53 20 61 6e 64  20 39 36 b5 53 2e 20 53  |16.S and 96.S. S|
0000d260  6d 61 6c 6c 65 72 20 73  70 65 65 64 20 76 61 6c  |maller speed val|
0000d270  75 65 73 20 67 69 76 65  20 62 65 74 74 65 72 20  |ues give better |
0000d280  73 61 6d 70 6c 65 20 71  75 61 6c 69 74 79 2c 20  |sample quality, |
0000d290  62 75 74 20 61 6c 73 6f  20 75 73 65 20 6d 6f 72  |but also use mor|
0000d2a0  65 20 70 72 6f 63 65 73  73 6f 72 20 74 69 6d 65  |e processor time|
0000d2b0  2c 20 73 6c 6f 77 69 6e  67 20 74 68 65 20 63 6f  |, slowing the co|
0000d2c0  6d 70 75 74 65 72 20 64  6f 77 6e 20 6d 6f 72 65  |mputer down more|
0000d2d0  2e 20 54 68 65 20 64 65  66 61 75 6c 74 20 73 70  |. The default sp|
0000d2e0  65 65 64 20 69 73 20 33  32 b5 53 2e 0a 0a 4e 6f  |eed is 32.S...No|
0000d2f0  74 65 3a 20 49 66 20 38  20 63 68 61 6e 6e 65 6c  |te: If 8 channel|
0000d300  73 20 61 72 65 20 65 6e  61 62 6c 65 64 2c 20 74  |s are enabled, t|
0000d310  68 65 20 6d 69 6e 69 6d  75 6d 20 73 61 6d 70 6c  |he minimum sampl|
0000d320  65 20 73 70 65 65 64 20  69 73 20 32 34 b5 53 2e  |e speed is 24.S.|
0000d330  0a 0a 56 20 66 6c 61 67  20 73 65 74 20 69 66 20  |..V flag set if |
0000d340  73 61 6d 70 6c 65 20 73  70 65 65 64 20 69 73 20  |sample speed is |
0000d350  6f 75 74 20 6f 66 20 72  61 6e 67 65 0a 00 00 00  |out of range....|
0000d360  44 41 54 41 48 02 00 00  51 54 4d 5f 44 4d 41 42  |DATAH...QTM_DMAB|
0000d370  75 66 66 65 72 20 20 28  26 34 37 45 34 41 29 0a  |uffer  (&47E4A).|
0000d380  23 50 61 72 65 6e 74 20  51 54 4d 5f 0a 3c 3d 09  |#Parent QTM_.<=.|
0000d390  52 30 20 3d 09 61 64 64  72 65 73 73 20 6f 66 20  |R0 =.address of |
0000d3a0  6c 61 73 74 20 75 73 65  64 20 44 4d 41 20 73 6f  |last used DMA so|
0000d3b0  75 6e 64 20 62 75 66 66  65 72 2e 0a 0a 42 79 20  |und buffer...By |
0000d3c0  75 73 69 6e 67 20 74 68  69 73 20 53 57 49 2c 20  |using this SWI, |
0000d3d0  69 74 20 77 6f 75 6c 64  20 62 65 20 70 6f 73 73  |it would be poss|
0000d3e0  69 62 6c 65 20 74 6f 20  69 6d 70 6c 65 6d 65 6e  |ible to implemen|
0000d3f0  74 20 73 6f 75 6e 64 20  6f 75 74 70 75 74 20 6f  |t sound output o|
0000d400  73 63 69 6c 6c 6f 73 63  6f 70 65 73 2c 20 6f 72  |scilloscopes, or|
0000d410  20 76 6f 6c 75 6d 65 20  61 63 74 69 76 61 74 65  | volume activate|
0000d420  64 20 28 72 65 61 6c 29  20 56 55 20 62 61 72 73  |d (real) VU bars|
0000d430  2e 20 54 68 65 20 64 61  74 61 20 69 6e 20 74 68  |. The data in th|
0000d440  65 20 44 4d 41 20 62 75  66 66 65 72 20 69 73 20  |e DMA buffer is |
0000d450  73 74 6f 72 65 64 20 61  73 3a 20 5b 63 31 5d 2c  |stored as: [c1],|
0000d460  5b 63 32 5d 2c 5b 63 33  5d 2c 5b 63 30 5d 2c 5b  |[c2],[c3],[c0],[|
0000d470  63 31 5d 2c 5b 63 32 5d  2e 2e 2e 65 74 63 2c 20  |c1],[c2]...etc, |
0000d480  31 20 62 79 74 65 20 66  6f 72 20 65 61 63 68 20  |1 byte for each |
0000d490  63 68 61 6e 6e 65 6c 2e  20 54 68 65 20 44 4d 41  |channel. The DMA|
0000d4a0  20 62 75 66 66 65 72 20  73 69 7a 65 20 75 73 65  | buffer size use|
0000d4b0  64 20 62 79 20 51 54 4d  20 69 73 20 32 30 38 2a  |d by QTM is 208*|
0000d4c0  5c 3c 6e 6f 2e 20 6f 66  20 63 68 61 6e 6e 65 6c  |\<no. of channel|
0000d4d0  73 3e 20 6c 6f 6e 67 2e  0a 0a 54 68 65 20 61 64  |s> long...The ad|
0000d4e0  64 72 65 73 73 20 72 65  74 75 72 6e 65 64 20 69  |dress returned i|
0000d4f0  6e 20 52 30 20 77 69 6c  6c 20 6f 6e 6c 79 20 62  |n R0 will only b|
0000d500  65 20 61 63 63 75 72 61  74 65 20 69 66 20 74 68  |e accurate if th|
0000d510  65 20 51 54 4d 20 73 6f  75 6e 64 20 73 79 73 74  |e QTM sound syst|
0000d520  65 6d 20 69 73 20 63 75  72 72 65 6e 74 6c 79 20  |em is currently |
0000d530  61 63 74 69 76 65 2e 20  54 6f 20 63 68 65 63 6b  |active. To check|
0000d540  20 77 68 65 74 68 65 72  20 74 68 69 73 20 69 73  | whether this is|
0000d550  20 74 68 65 20 63 61 73  65 2c 20 75 73 65 20 3c  | the case, use <|
0000d560  51 54 4d 5f 53 6f 75 6e  64 43 6f 6e 74 72 6f 6c  |QTM_SoundControl|
0000d570  3e 2c 20 74 6f 20 72 65  61 64 20 74 68 65 20 73  |>, to read the s|
0000d580  6f 75 6e 64 20 73 79 73  74 65 6d 20 73 74 61 74  |ound system stat|
0000d590  65 20 28 6e 75 6d 62 65  72 20 6f 66 20 63 68 61  |e (number of cha|
0000d5a0  6e 6e 65 6c 73 29 2e 0a  44 41 54 41 e0 03 00 00  |nnels)..DATA....|
0000d5b0  51 54 4d 5f 52 65 6d 6f  76 65 43 68 61 6e 6e 65  |QTM_RemoveChanne|
0000d5c0  6c 20 20 28 26 34 37 45  34 42 29 0a 23 50 61 72  |l  (&47E4B).#Par|
0000d5d0  65 6e 74 20 51 54 4d 5f  0a 3d 3e 09 52 30 20 3d  |ent QTM_.=>.R0 =|
0000d5e0  09 63 68 61 6e 6e 65 6c  20 6e 75 6d 62 65 72 20  |.channel number |
0000d5f0  74 6f 20 72 65 6d 6f 76  65 20 66 72 6f 6d 20 73  |to remove from s|
0000d600  6f 6e 67 20 70 6c 61 79  65 72 20 28 31 2d 38 29  |ong player (1-8)|
0000d610  0a 0a 3c 3d 09 52 30 20  3d 09 70 72 65 76 69 6f  |..<=.R0 =.previo|
0000d620  75 73 20 73 74 61 74 65  20 6f 66 20 74 68 61 74  |us state of that|
0000d630  20 63 68 61 6e 6e 65 6c  3a 09 30 20 3d 20 61 6c  | channel:.0 = al|
0000d640  72 65 61 64 79 20 72 65  6d 6f 76 65 64 0a 09 20  |ready removed.. |
0000d650  09 20 09 09 09 09 31 20  3d 20 51 54 4d 20 63 68  |. ....1 = QTM ch|
0000d660  61 6e 6e 65 6c 0a 0a 54  68 69 73 20 53 57 49 20  |annel..This SWI |
0000d670  68 61 73 20 74 68 65 20  65 66 66 65 63 74 20 6f  |has the effect o|
0000d680  66 20 27 72 65 6d 6f 76  69 6e 67 27 20 74 68 65  |f 'removing' the|
0000d690  20 67 69 76 65 6e 20 63  68 61 6e 6e 65 6c 20 66  | given channel f|
0000d6a0  72 6f 6d 20 74 68 65 20  51 54 4d 20 70 6c 61 79  |rom the QTM play|
0000d6b0  65 72 20 72 6f 75 74 69  6e 65 2e 20 54 68 69 73  |er routine. This|
0000d6c0  20 6d 65 61 6e 73 20 6e  6f 20 73 61 6d 70 6c 65  | means no sample|
0000d6d0  73 20 66 72 6f 6d 20 74  68 65 20 73 6f 6e 67 20  |s from the song |
0000d6e0  77 69 6c 6c 20 62 65 20  70 6c 61 79 65 64 20 74  |will be played t|
0000d6f0  68 72 6f 75 67 68 20 74  68 69 73 20 63 68 61 6e  |hrough this chan|
0000d700  6e 65 6c 2c 20 61 6c 74  68 6f 75 67 68 20 69 74  |nel, although it|
0000d710  20 69 73 20 73 74 69 6c  6c 20 70 6f 73 73 69 62  | is still possib|
0000d720  6c 65 20 74 6f 20 70 6c  61 79 20 73 61 6d 70 6c  |le to play sampl|
0000d730  65 73 20 64 69 72 65 63  74 6c 79 2c 20 75 73 69  |es directly, usi|
0000d740  6e 67 20 74 68 65 20 50  6c 61 79 53 61 6d 70 6c  |ng the PlaySampl|
0000d750  65 20 53 57 49 73 2c 20  6f 72 20 74 68 72 6f 75  |e SWIs, or throu|
0000d760  67 68 20 74 68 65 20 54  72 61 6e 73 70 61 72 65  |gh the Transpare|
0000d770  6e 74 20 73 6f 75 6e 64  20 73 79 73 74 65 6d 20  |nt sound system |
0000d780  28 69 66 20 61 63 74 69  76 65 29 2e 0a 0a 57 68  |(if active)...Wh|
0000d790  69 6c 65 20 74 68 65 20  63 68 61 6e 6e 65 6c 20  |ile the channel |
0000d7a0  69 73 20 27 72 65 6d 6f  76 65 64 27 2c 20 74 68  |is 'removed', th|
0000d7b0  65 20 70 6c 61 79 65 72  20 77 69 6c 6c 20 63 6f  |e player will co|
0000d7c0  6e 74 69 6e 75 65 20 74  6f 20 6b 65 65 70 20 75  |ntinue to keep u|
0000d7d0  70 20 74 6f 20 64 61 74  65 20 74 68 65 20 65 66  |p to date the ef|
0000d7e0  66 65 63 74 73 20 61 6e  64 20 73 61 6d 70 6c 65  |fects and sample|
0000d7f0  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 2c 20 73 6f  | information, so|
0000d800  20 74 68 61 74 20 77 68  65 6e 20 74 68 65 20 63  | that when the c|
0000d810  68 61 6e 6e 65 6c 20 69  73 20 72 65 73 74 6f 72  |hannel is restor|
0000d820  65 64 2c 20 74 68 65 20  73 6f 6e 67 20 77 69 6c  |ed, the song wil|
0000d830  6c 20 63 6f 6e 74 69 6e  75 65 20 61 73 20 69 66  |l continue as if|
0000d840  20 6e 6f 74 68 69 6e 67  20 68 61 64 20 68 61 70  | nothing had hap|
0000d850  70 65 6e 65 64 2e 0a 0a  4e 6f 74 65 3a 20 51 54  |pened...Note: QT|
0000d860  4d 20 76 31 2e 32 32 20  64 6f 65 73 20 6e 6f 74  |M v1.22 does not|
0000d870  20 75 73 65 20 63 68 61  6e 6e 65 6c 73 20 35 2d  | use channels 5-|
0000d880  38 20 66 6f 72 20 73 6f  6e 67 20 70 6c 61 79 69  |8 for song playi|
0000d890  6e 67 2c 20 73 6f 20 61  6c 74 68 6f 75 67 68 20  |ng, so although |
0000d8a0  74 68 65 79 20 63 61 6e  20 62 65 20 27 72 65 6d  |they can be 'rem|
0000d8b0  6f 76 65 64 27 2c 20 74  68 69 73 20 77 69 6c 6c  |oved', this will|
0000d8c0  20 6d 61 6b 65 20 6e 6f  20 6e 6f 74 69 63 65 61  | make no noticea|
0000d8d0  62 6c 65 20 64 69 66 66  65 72 65 6e 63 65 20 61  |ble difference a|
0000d8e0  73 20 74 68 65 79 20 63  61 6e 20 6f 6e 6c 79 20  |s they can only |
0000d8f0  62 65 20 75 73 65 64 20  66 6f 72 20 73 61 6d 70  |be used for samp|
0000d900  6c 65 20 70 6c 61 79 69  6e 67 20 61 6e 79 77 61  |le playing anywa|
0000d910  79 21 0a 0a 56 20 66 6c  61 67 20 73 65 74 20 69  |y!..V flag set i|
0000d920  66 20 63 68 61 6e 6e 65  6c 20 6e 75 6d 62 65 72  |f channel number|
0000d930  20 69 73 20 6f 75 74 20  6f 66 20 72 61 6e 67 65  | is out of range|
0000d940  0a 49 6e 74 65 72 72 75  70 74 73 3a 20 49 52 51  |.Interrupts: IRQ|
0000d950  20 69 6e 74 65 72 72 75  70 74 73 20 64 69 73 61  | interrupts disa|
0000d960  62 6c 65 64 20 77 68 69  6c 65 20 51 54 4d 20 73  |bled while QTM s|
0000d970  6f 75 6e 64 20 66 6c 61  67 73 20 61 72 65 20 61  |ound flags are a|
0000d980  6c 74 65 72 65 64 2e 0a  44 41 54 41 4a 01 00 00  |ltered..DATAJ...|
0000d990  51 54 4d 5f 52 65 73 74  6f 72 65 43 68 61 6e 6e  |QTM_RestoreChann|
0000d9a0  65 6c 20 20 28 26 34 37  45 34 43 29 0a 23 50 61  |el  (&47E4C).#Pa|
0000d9b0  72 65 6e 74 20 51 54 4d  5f 0a 23 57 72 61 70 20  |rent QTM_.#Wrap |
0000d9c0  6f 66 66 0a 3d 3e 09 52  30 20 3d 09 63 68 61 6e  |off.=>.R0 =.chan|
0000d9d0  6e 65 6c 20 6e 75 6d 62  65 72 20 74 6f 20 72 65  |nel number to re|
0000d9e0  73 74 6f 72 65 20 28 31  2d 38 29 0a 3c 3d 09 52  |store (1-8).<=.R|
0000d9f0  30 20 3d 09 70 72 65 76  69 6f 75 73 20 73 74 61  |0 =.previous sta|
0000da00  74 65 20 6f 66 20 74 68  61 74 20 63 68 61 6e 6e  |te of that chann|
0000da10  65 6c 3a 09 30 20 3d 20  70 72 65 76 69 6f 75 73  |el:.0 = previous|
0000da20  6c 79 20 72 65 6d 6f 76  65 64 0a 09 20 09 20 09  |ly removed.. . .|
0000da30  09 09 09 31 20 3d 20 61  6c 72 65 61 64 79 20 61  |...1 = already a|
0000da40  20 51 54 4d 20 63 68 61  6e 6e 65 6c 0a 23 57 72  | QTM channel.#Wr|
0000da50  61 70 0a 0a 54 68 69 73  20 53 57 49 20 69 73 20  |ap..This SWI is |
0000da60  75 73 65 64 20 74 6f 20  72 65 73 74 6f 72 65 20  |used to restore |
0000da70  63 68 61 6e 6e 65 6c 73  20 70 72 65 76 69 6f 75  |channels previou|
0000da80  73 6c 79 20 72 65 6d 6f  76 65 64 20 62 79 20 3c  |sly removed by <|
0000da90  51 54 4d 5f 52 65 6d 6f  76 65 43 68 61 6e 6e 65  |QTM_RemoveChanne|
0000daa0  6c 3e 2e 0a 0a 56 20 66  6c 61 67 20 73 65 74 20  |l>...V flag set |
0000dab0  69 66 20 63 68 61 6e 6e  65 6c 20 6e 75 6d 62 65  |if channel numbe|
0000dac0  72 20 69 73 20 6f 75 74  20 6f 66 20 72 61 6e 67  |r is out of rang|
0000dad0  65 0a 00 00 44 41 54 41  1c 04 00 00 51 54 4d 5f  |e...DATA....QTM_|
0000dae0  53 74 65 72 65 6f 20 20  28 26 34 37 45 34 44 29  |Stereo  (&47E4D)|
0000daf0  0a 23 50 61 72 65 6e 74  20 51 54 4d 5f 0a 3d 3e  |.#Parent QTM_.=>|
0000db00  09 52 30 20 3d 09 3c 63  68 61 6e 6e 65 6c 20 6e  |.R0 =.<channel n|
0000db10  75 6d 62 65 72 3d 3e 2e  75 73 72 63 68 61 6e 6e  |umber=>.usrchann|
0000db20  65 6c 3e 20 74 6f 20 61  6c 74 65 72 0a 09 20 09  |el> to alter.. .|
0000db30  6f 72 20 30 20 66 6f 72  20 3c 70 72 65 2d 70 72  |or 0 for <pre-pr|
0000db40  6f 67 72 61 6d 6d 65 64  20 73 65 74 74 69 6e 67  |ogrammed setting|
0000db50  73 3d 3e 2e 70 72 67 63  68 61 6e 6e 65 6c 3e 0a  |s=>.prgchannel>.|
0000db60  0a 3c 3d 09 52 30 20 69  73 20 70 72 65 73 65 72  |.<=.R0 is preser|
0000db70  76 65 64 0a 09 49 66 20  52 30 20 3d 20 31 2d 38  |ved..If R0 = 1-8|
0000db80  20 74 68 65 6e 20 52 31  20 3d 20 70 72 65 76 69  | then R1 = previ|
0000db90  6f 75 73 20 73 74 65 72  65 6f 20 70 6f 73 69 74  |ous stereo posit|
0000dba0  69 6f 6e 0a 09 49 66 20  52 30 20 3d 20 30 20 74  |ion..If R0 = 0 t|
0000dbb0  68 65 6e 20 52 31 20 69  73 20 63 6f 72 72 75 70  |hen R1 is corrup|
0000dbc0  74 65 64 0a 0a 54 68 69  73 20 53 57 49 20 61 6c  |ted..This SWI al|
0000dbd0  6c 6f 77 73 20 74 68 65  20 73 74 65 72 65 6f 20  |lows the stereo |
0000dbe0  70 6f 73 69 74 69 6f 6e  73 20 66 6f 72 20 65 61  |positions for ea|
0000dbf0  63 68 20 63 68 61 6e 6e  65 6c 20 74 6f 20 62 65  |ch channel to be|
0000dc00  20 61 6c 74 65 72 65 64  20 69 6e 64 65 70 65 6e  | altered indepen|
0000dc10  64 65 6e 74 6c 79 2c 20  6f 72 20 61 6c 6c 20 74  |dently, or all t|
0000dc20  6f 67 65 74 68 65 72 2e  20 49 66 20 52 30 3d 31  |ogether. If R0=1|
0000dc30  2d 38 20 6f 6e 20 65 6e  74 72 79 2c 20 74 68 65  |-8 on entry, the|
0000dc40  6e 20 52 31 20 6d 75 73  74 20 62 65 20 65 69 74  |n R1 must be eit|
0000dc50  68 65 72 20 61 20 76 61  6c 69 64 20 73 74 65 72  |her a valid ster|
0000dc60  65 6f 20 70 6f 73 69 74  69 6f 6e 20 28 2d 31 32  |eo position (-12|
0000dc70  37 20 74 6f 20 31 32 37  29 20 6f 72 20 2d 31 32  |7 to 127) or -12|
0000dc80  38 20 74 6f 20 72 65 61  64 20 74 68 65 20 70 72  |8 to read the pr|
0000dc90  65 76 69 6f 75 73 20 70  6f 73 69 74 69 6f 6e 2e  |evious position.|
0000dca0  20 49 66 20 52 30 3d 30  20 6f 6e 20 65 6e 74 72  | If R0=0 on entr|
0000dcb0  79 2c 20 74 68 65 6e 20  52 31 20 6d 75 73 74 20  |y, then R1 must |
0000dcc0  62 65 20 69 6e 20 74 68  65 20 72 61 6e 67 65 20  |be in the range |
0000dcd0  30 2d 34 20 74 6f 20 61  6c 74 65 72 20 61 6c 6c  |0-4 to alter all|
0000dce0  20 74 68 65 20 63 68 61  6e 6e 65 6c 73 20 74 6f  | the channels to|
0000dcf0  20 6f 6e 65 20 6f 66 20  74 68 65 73 65 20 70 72  | one of these pr|
0000dd00  65 2d 70 72 6f 67 72 61  6d 6d 65 64 20 76 61 6c  |e-programmed val|
0000dd10  75 65 73 2e 0a 23 53 75  62 70 61 67 65 20 75 73  |ues..#Subpage us|
0000dd20  72 63 68 61 6e 6e 65 6c  0a 55 73 65 72 20 63 68  |rchannel.User ch|
0000dd30  61 6e 6e 65 6c 20 73 74  65 72 65 6f 20 73 65 74  |annel stereo set|
0000dd40  74 69 6e 67 73 0a 52 30  20 3d 09 31 2d 38 0a 52  |tings.R0 =.1-8.R|
0000dd50  31 20 3d 09 2d 31 32 37  20 28 6c 65 66 74 29 20  |1 =.-127 (left) |
0000dd60  74 6f 20 31 32 37 20 28  72 69 67 68 74 29 0a 09  |to 127 (right)..|
0000dd70  6f 72 20 2d 31 32 38 20  74 6f 20 72 65 61 64 20  |or -128 to read |
0000dd80  63 75 72 72 65 6e 74 20  70 6f 73 69 74 69 6f 6e  |current position|
0000dd90  0a 23 53 75 62 70 61 67  65 20 70 72 67 63 68 61  |.#Subpage prgcha|
0000dda0  6e 6e 65 6c 0a 52 30 20  3d 09 30 0a 52 31 20 3d  |nnel.R0 =.0.R1 =|
0000ddb0  09 30 09 3c 64 65 66 61  75 6c 74 20 73 74 65 72  |.0.<default ster|
0000ddc0  65 6f 20 70 6f 73 69 74  69 6f 6e 73 3d 3e 2e 64  |eo positions=>.d|
0000ddd0  65 66 61 75 6c 74 3e 0a  09 31 09 41 6d 69 67 61  |efault>..1.Amiga|
0000dde0  20 28 66 75 6c 6c 29 20  73 74 65 72 65 6f 20 70  | (full) stereo p|
0000ddf0  6f 73 69 74 69 6f 6e 73  0a 09 32 09 63 65 6e 74  |ositions..2.cent|
0000de00  72 65 64 20 28 6e 6f 20  73 74 65 72 65 6f 29 0a  |red (no stereo).|
0000de10  09 33 09 66 75 6c 6c 20  6c 65 66 74 0a 09 34 09  |.3.full left..4.|
0000de20  66 75 6c 6c 20 72 69 67  68 74 0a 23 53 75 62 70  |full right.#Subp|
0000de30  61 67 65 20 64 65 66 61  75 6c 74 0a 44 65 66 61  |age default.Defa|
0000de40  75 6c 74 20 73 74 65 72  65 6f 20 73 65 74 74 69  |ult stereo setti|
0000de50  6e 67 73 0a 43 68 61 6e  6e 65 6c 73 20 31 2c 35  |ngs.Channels 1,5|
0000de60  20 50 6f 73 69 74 69 6f  6e 3a 20 2d 37 39 20 28  | Position: -79 (|
0000de70  6c 65 66 74 29 0a 43 68  61 6e 6e 65 6c 73 20 32  |left).Channels 2|
0000de80  2c 36 20 50 6f 73 69 74  69 6f 6e 3a 20 20 37 39  |,6 Position:  79|
0000de90  20 28 72 69 67 68 74 29  0a 43 68 61 6e 6e 65 6c  | (right).Channel|
0000dea0  73 20 33 2c 37 20 50 6f  73 69 74 69 6f 6e 3a 20  |s 3,7 Position: |
0000deb0  20 34 37 20 28 73 6c 69  67 68 74 6c 79 20 72 69  | 47 (slightly ri|
0000dec0  67 68 74 29 0a 43 68 61  6e 6e 65 6c 73 20 34 2c  |ght).Channels 4,|
0000ded0  38 20 50 6f 73 69 74 69  6f 6e 3a 20 2d 34 37 20  |8 Position: -47 |
0000dee0  28 73 6c 69 67 68 74 6c  79 20 6c 65 66 74 29 0a  |(slightly left).|
0000def0  44 41 54 41 96 01 00 00  51 54 4d 5f 52 65 61 64  |DATA....QTM_Read|
0000df00  53 6f 6e 67 4c 65 6e 67  74 68 20 20 28 26 34 37  |SongLength  (&47|
0000df10  45 34 45 29 0a 23 50 61  72 65 6e 74 20 51 54 4d  |E4E).#Parent QTM|
0000df20  5f 0a 3c 3d 09 52 30 20  3d 09 6e 75 6d 62 65 72  |_.<=.R0 =.number|
0000df30  20 6f 66 20 73 65 71 75  65 6e 63 65 73 20 69 6e  | of sequences in|
0000df40  20 63 75 72 72 65 6e 74  20 73 6f 6e 67 20 28 31  | current song (1|
0000df50  2d 31 32 38 29 0a 09 52  31 20 3d 09 6d 61 78 69  |-128)..R1 =.maxi|
0000df60  6d 75 6d 20 70 61 74 74  65 72 6e 20 6e 75 6d 62  |mum pattern numb|
0000df70  65 72 20 69 6e 20 73 6f  6e 67 20 28 69 65 2e 20  |er in song (ie. |
0000df80  6e 75 6d 62 65 72 20 6f  66 20 70 61 74 74 65 72  |number of patter|
0000df90  6e 73 2d 31 29 0a 0a 54  68 69 73 20 53 57 49 20  |ns-1)..This SWI |
0000dfa0  61 6c 6c 6f 77 73 20 79  6f 75 20 74 6f 20 72 65  |allows you to re|
0000dfb0  61 64 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |ad the number of|
0000dfc0  20 73 65 71 75 65 6e 63  65 73 20 61 6e 64 20 6d  | sequences and m|
0000dfd0  61 78 69 6d 75 6d 20 70  61 74 74 65 72 6e 20 6e  |aximum pattern n|
0000dfe0  75 6d 62 65 72 20 69 6e  20 74 68 65 20 63 75 72  |umber in the cur|
0000dff0  72 65 6e 74 20 73 6f 6e  67 2e 20 54 68 65 20 6d  |rent song. The m|
0000e000  61 78 69 6d 75 6d 20 70  61 74 74 65 72 6e 20 6e  |aximum pattern n|
0000e010  75 6d 62 65 72 20 69 73  20 41 4c 57 41 59 53 20  |umber is ALWAYS |
0000e020  74 68 65 20 6e 75 6d 62  65 72 20 6f 66 20 70 61  |the number of pa|
0000e030  74 74 65 72 6e 73 20 70  72 65 73 65 6e 74 2d 31  |tterns present-1|
0000e040  2c 20 73 69 6e 63 65 20  63 6f 75 6e 74 69 6e 67  |, since counting|
0000e050  20 73 74 61 72 74 73 20  61 74 20 30 2c 20 6e 6f  | starts at 0, no|
0000e060  74 20 31 2e 0a 0a 56 20  66 6c 61 67 20 73 65 74  |t 1...V flag set|
0000e070  20 69 66 20 6e 6f 20 73  6f 6e 67 20 69 73 20 6c  | if no song is l|
0000e080  6f 61 64 65 64 0a 00 00  44 41 54 41 69 01 00 00  |oaded...DATAi...|
0000e090  51 54 4d 5f 52 65 61 64  53 65 71 75 65 6e 63 65  |QTM_ReadSequence|
0000e0a0  54 61 62 6c 65 20 20 28  26 34 37 45 34 46 29 0a  |Table  (&47E4F).|
0000e0b0  23 50 61 72 65 6e 74 20  51 54 4d 5f 0a 3d 3e 09  |#Parent QTM_.=>.|
0000e0c0  52 30 20 3d 20 73 65 71  75 65 6e 63 65 20 6e 75  |R0 = sequence nu|
0000e0d0  6d 62 65 72 20 74 6f 20  72 65 61 64 20 28 30 2d  |mber to read (0-|
0000e0e0  31 32 37 29 0a 3c 3d 09  52 30 20 3d 20 70 61 74  |127).<=.R0 = pat|
0000e0f0  74 65 72 6e 20 6e 75 6d  62 65 72 20 73 74 6f 72  |tern number stor|
0000e100  65 64 20 61 74 20 74 68  61 74 20 70 6f 73 69 74  |ed at that posit|
0000e110  69 6f 6e 0a 0a 54 68 69  73 20 53 57 49 20 65 6e  |ion..This SWI en|
0000e120  61 62 6c 65 73 20 79 6f  75 20 74 6f 20 72 65 61  |ables you to rea|
0000e130  64 20 74 68 65 20 70 61  74 74 65 72 6e 20 74 6f  |d the pattern to|
0000e140  20 62 65 20 70 6c 61 79  65 64 20 61 74 20 61 20  | be played at a |
0000e150  67 69 76 65 6e 20 70 6f  73 69 74 69 6f 6e 20 69  |given position i|
0000e160  6e 20 74 68 65 20 63 75  72 72 65 6e 74 20 73 6f  |n the current so|
0000e170  6e 67 27 73 20 73 65 71  75 65 6e 63 65 20 74 61  |ng's sequence ta|
0000e180  62 6c 65 2e 0a 0a 56 20  66 6c 61 67 20 73 65 74  |ble...V flag set|
0000e190  20 69 66 20 6e 6f 20 73  6f 6e 67 20 69 73 20 6c  | if no song is l|
0000e1a0  6f 61 64 65 64 20 6f 72  20 69 66 20 73 65 71 75  |oaded or if sequ|
0000e1b0  65 6e 63 65 20 6e 75 6d  62 65 72 20 69 73 20 6c  |ence number is l|
0000e1c0  61 72 67 65 72 20 74 68  61 6e 20 74 68 65 20 73  |arger than the s|
0000e1d0  6f 6e 67 27 73 20 6d 61  78 69 6d 75 6d 20 73 65  |ong's maximum se|
0000e1e0  71 75 65 6e 63 65 20 70  6f 73 69 74 69 6f 6e 2e  |quence position.|
0000e1f0  0a 00 00 00 44 41 54 41  e0 02 00 00 51 54 4d 5f  |....DATA....QTM_|
0000e200  56 55 42 61 72 43 6f 6e  74 72 6f 6c 20 20 28 26  |VUBarControl  (&|
0000e210  34 37 45 35 30 29 0a 23  50 61 72 65 6e 74 20 51  |47E50).#Parent Q|
0000e220  54 4d 5f 0a 3d 3e 09 52  30 20 3d 09 3c 63 6f 6e  |TM_.=>.R0 =.<con|
0000e230  74 72 6f 6c 20 76 61 6c  75 65 3d 3e 2e 63 6f 6e  |trol value=>.con|
0000e240  74 72 6f 6c 3e 0a 09 52  31 20 3d 09 6e 65 77 20  |trol>..R1 =.new |
0000e250  56 55 20 67 72 61 76 69  74 79 2c 20 6f 72 20 2d  |VU gravity, or -|
0000e260  31 20 74 6f 20 72 65 61  64 0a 0a 3c 3d 09 52 30  |1 to read..<=.R0|
0000e270  20 3d 09 70 72 65 76 69  6f 75 73 20 56 55 20 63  | =.previous VU c|
0000e280  6f 6e 74 72 6f 6c 6c 65  72 20 73 74 61 74 65 0a  |ontroller state.|
0000e290  09 52 31 20 3d 09 70 72  65 76 69 6f 75 73 20 56  |.R1 =.previous V|
0000e2a0  55 20 62 61 72 20 67 72  61 76 69 74 79 0a 0a 54  |U bar gravity..T|
0000e2b0  68 69 73 20 53 57 49 20  61 6c 6c 6f 77 73 20 63  |his SWI allows c|
0000e2c0  6f 6e 74 72 6f 6c 20 6f  66 20 74 68 65 20 68 69  |ontrol of the hi|
0000e2d0  67 68 6c 79 20 61 63 63  75 72 61 74 65 20 56 55  |ghly accurate VU|
0000e2e0  20 62 61 72 20 72 6f 75  74 69 6e 65 20 63 6f 6e  | bar routine con|
0000e2f0  74 61 69 6e 65 64 20 69  6e 20 74 68 65 20 51 54  |tained in the QT|
0000e300  4d 20 6d 6f 64 75 6c 65  2e 20 54 68 65 20 64 65  |M module. The de|
0000e310  66 61 75 6c 74 20 73 65  74 74 69 6e 67 73 20 66  |fault settings f|
0000e320  6f 72 20 74 68 65 20 56  55 20 62 61 72 20 72 6f  |or the VU bar ro|
0000e330  75 74 69 6e 65 20 61 72  65 3a 20 67 72 61 76 69  |utine are: gravi|
0000e340  74 79 20 3d 20 32 20 28  6c 69 6e 65 73 20 70 65  |ty = 2 (lines pe|
0000e350  72 20 35 30 74 68 20 6f  66 20 61 20 73 65 63 6f  |r 50th of a seco|
0000e360  6e 64 29 20 61 6e 64 20  74 68 65 20 56 55 20 62  |nd) and the VU b|
0000e370  61 72 20 63 6f 6e 74 72  6f 6c 6c 65 72 20 6f 66  |ar controller of|
0000e380  66 2e 0a 0a 4e 6f 74 65  3a 20 43 75 72 72 65 6e  |f...Note: Curren|
0000e390  74 6c 79 20 51 54 4d 20  56 55 20 62 61 72 73 20  |tly QTM VU bars |
0000e3a0  61 72 65 20 6f 6e 6c 79  20 61 76 61 69 6c 61 62  |are only availab|
0000e3b0  6c 65 20 66 6f 72 20 63  68 61 6e 6e 65 6c 73 20  |le for channels |
0000e3c0  31 2d 34 2e 0a 23 53 75  62 70 61 67 65 20 63 6f  |1-4..#Subpage co|
0000e3d0  6e 74 72 6f 6c 0a 51 54  4d 20 56 55 42 61 72 20  |ntrol.QTM VUBar |
0000e3e0  63 6f 6e 74 72 6f 6c 20  76 61 6c 75 65 73 0a 5c  |control values.\|
0000e3f0  23 09 6d 65 61 6e 69 6e  67 0a 23 4c 69 6e 65 0a  |#.meaning.#Line.|
0000e400  30 09 73 77 69 74 63 68  20 74 68 65 20 56 55 20  |0.switch the VU |
0000e410  62 61 72 20 63 6f 6e 74  72 6f 6c 6c 65 72 73 20  |bar controllers |
0000e420  6f 66 66 0a 31 09 73 65  74 20 74 68 65 20 56 55  |off.1.set the VU|
0000e430  20 62 61 72 20 63 6f 6e  74 72 6f 6c 6c 65 72 20  | bar controller |
0000e440  74 6f 20 75 73 65 20 27  66 61 6b 65 27 20 56 55  |to use 'fake' VU|
0000e450  20 62 61 72 73 0a 32 09  73 65 74 20 74 68 65 20  | bars.2.set the |
0000e460  56 55 20 62 61 72 20 63  6f 6e 74 72 6f 6c 6c 65  |VU bar controlle|
0000e470  72 20 74 6f 20 75 73 65  20 27 65 66 66 65 63 74  |r to use 'effect|
0000e480  27 20 56 55 20 62 61 72  73 0a 33 09 73 65 74 20  |' VU bars.3.set |
0000e490  74 68 65 20 56 55 20 62  61 72 20 63 6f 6e 74 72  |the VU bar contr|
0000e4a0  6f 6c 6c 65 72 20 74 6f  20 75 73 65 20 27 72 65  |oller to use 're|
0000e4b0  61 6c 27 20 56 55 20 62  61 72 73 0a 2d 31 09 72  |al' VU bars.-1.r|
0000e4c0  65 61 64 20 63 75 72 72  65 6e 74 20 73 65 74 74  |ead current sett|
0000e4d0  69 6e 67 0a 44 41 54 41  29 02 00 00 51 54 4d 5f  |ing.DATA)...QTM_|
0000e4e0  52 65 61 64 56 55 4c 65  76 65 6c 73 20 20 28 26  |ReadVULevels  (&|
0000e4f0  34 37 45 35 31 29 0a 23  50 61 72 65 6e 74 20 51  |47E51).#Parent Q|
0000e500  54 4d 5f 0a 3d 3e 09 52  30 20 3d 09 43 68 61 6e  |TM_.=>.R0 =.Chan|
0000e510  6e 65 6c 20 6e 75 6d 62  65 72 20 28 31 2d 34 29  |nel number (1-4)|
0000e520  20 6f 72 20 30 20 66 6f  72 20 61 6c 6c 20 63 68  | or 0 for all ch|
0000e530  61 6e 6e 65 6c 73 0a 0a  3c 3d 09 49 66 20 52 30  |annels..<=.If R0|
0000e540  20 3d 20 31 2d 34 20 6f  6e 20 65 6e 74 72 79 2c  | = 1-4 on entry,|
0000e550  20 74 68 65 6e 0a 09 20  20 20 52 30 20 3d 20 56  | then..   R0 = V|
0000e560  55 20 62 61 72 20 68 65  69 67 68 74 20 66 6f 72  |U bar height for|
0000e570  20 74 68 65 20 63 68 61  6e 6e 65 6c 20 73 70 65  | the channel spe|
0000e580  63 69 66 69 65 64 20 69  6e 20 52 30 20 28 30 2d  |cified in R0 (0-|
0000e590  36 34 29 0a 09 49 66 20  52 30 20 3d 20 30 20 6f  |64)..If R0 = 0 o|
0000e5a0  6e 20 65 6e 74 72 79 2c  20 74 68 65 6e 20 0a 09  |n entry, then ..|
0000e5b0  20 20 20 52 30 20 3d 20  77 6f 72 64 20 63 6f 6e  |   R0 = word con|
0000e5c0  74 61 69 6e 69 6e 67 20  31 20 62 79 74 65 20 70  |taining 1 byte p|
0000e5d0  65 72 20 63 68 61 6e 6e  65 6c 20 6f 66 20 61 6c  |er channel of al|
0000e5e0  6c 20 74 68 65 20 34 20  63 68 61 6e 6e 65 6c 73  |l the 4 channels|
0000e5f0  27 20 56 55 20 62 61 72  20 68 65 69 67 68 74 73  |' VU bar heights|
0000e600  20 28 30 2d 36 34 2c 20  65 61 63 68 20 62 79 74  | (0-64, each byt|
0000e610  65 29 0a 0a 54 68 69 73  20 53 57 49 20 6c 65 74  |e)..This SWI let|
0000e620  73 20 79 6f 75 20 72 65  61 64 20 74 68 65 20 63  |s you read the c|
0000e630  75 72 72 65 6e 74 20 56  55 20 6c 65 76 65 6c 73  |urrent VU levels|
0000e640  20 6f 66 20 74 68 65 20  51 54 4d 20 56 55 20 62  | of the QTM VU b|
0000e650  61 72 20 68 61 6e 64 6c  65 72 2e 20 54 68 69 73  |ar handler. This|
0000e660  20 63 61 6c 6c 20 73 68  6f 75 6c 64 20 6f 6e 6c  | call should onl|
0000e670  79 20 62 65 20 75 73 65  64 20 69 66 20 74 68 65  |y be used if the|
0000e680  20 56 55 20 62 61 72 20  68 61 6e 64 6c 65 72 20  | VU bar handler |
0000e690  68 61 73 20 62 65 65 6e  20 65 6e 61 62 6c 65 64  |has been enabled|
0000e6a0  20 75 73 69 6e 67 20 3c  51 54 4d 5f 56 55 42 61  | using <QTM_VUBa|
0000e6b0  72 43 6f 6e 74 72 6f 6c  3e 2e 0a 0a 4e 6f 74 65  |rControl>...Note|
0000e6c0  3a 20 43 75 72 72 65 6e  74 6c 79 20 51 54 4d 20  |: Currently QTM |
0000e6d0  56 55 20 62 61 72 73 20  61 72 65 20 6f 6e 6c 79  |VU bars are only|
0000e6e0  20 61 76 61 69 6c 61 62  6c 65 20 66 6f 72 20 63  | available for c|
0000e6f0  68 61 6e 6e 65 6c 73 20  31 2d 34 2e 0a 00 00 00  |hannels 1-4.....|
0000e700  44 41 54 41 4a 03 00 00  51 54 4d 5f 52 65 61 64  |DATAJ...QTM_Read|
0000e710  53 61 6d 70 6c 65 54 61  62 6c 65 20 20 28 26 34  |SampleTable  (&4|
0000e720  37 45 35 32 29 0a 23 50  61 72 65 6e 74 20 51 54  |7E52).#Parent QT|
0000e730  4d 5f 0a 3d 3e 09 52 30  20 3d 09 73 61 6d 70 6c  |M_.=>.R0 =.sampl|
0000e740  65 20 6e 75 6d 62 65 72  20 28 31 2d 36 34 29 0a  |e number (1-64).|
0000e750  0a 3c 3d 09 52 30 20 3d  09 70 6f 69 6e 74 65 72  |.<=.R0 =.pointer|
0000e760  20 74 6f 20 32 32 20 62  79 74 65 20 62 6c 6f 63  | to 22 byte bloc|
0000e770  6b 20 28 6e 6f 74 20 74  65 72 6d 69 6e 61 74 65  |k (not terminate|
0000e780  64 29 20 63 6f 6e 74 61  69 6e 69 6e 67 20 73 61  |d) containing sa|
0000e790  6d 70 6c 65 20 6e 61 6d  65 20 28 6f 72 20 61 20  |mple name (or a |
0000e7a0  30 20 62 79 74 65 2c 20  69 66 20 6e 6f 20 73 61  |0 byte, if no sa|
0000e7b0  6d 70 6c 65 20 6e 61 6d  65 29 0a 09 52 31 20 3d  |mple name)..R1 =|
0000e7c0  09 73 61 6d 70 6c 65 20  6c 65 6e 67 74 68 20 28  |.sample length (|
0000e7d0  69 6e 20 62 79 74 65 73  29 0a 09 52 32 20 3d 09  |in bytes)..R2 =.|
0000e7e0  72 65 70 65 61 74 20 6f  66 66 73 65 74 20 28 62  |repeat offset (b|
0000e7f0  79 74 65 73 20 66 72 6f  6d 20 73 74 61 72 74 20  |ytes from start |
0000e800  6f 66 20 73 61 6d 70 6c  65 29 0a 09 52 33 20 3d  |of sample)..R3 =|
0000e810  09 72 65 70 65 61 74 20  6c 65 6e 67 74 68 20 28  |.repeat length (|
0000e820  69 6e 20 62 79 74 65 73  29 0a 09 52 34 20 3d 09  |in bytes)..R4 =.|
0000e830  64 65 66 61 75 6c 74 20  76 6f 6c 75 6d 65 20 28  |default volume (|
0000e840  30 2d 36 34 29 0a 09 52  35 20 3d 09 66 69 6e 65  |0-64)..R5 =.fine|
0000e850  20 74 75 6e 69 6e 67 20  76 61 6c 75 65 20 28 2d  | tuning value (-|
0000e860  38 20 74 6f 20 2b 37 29  0a 09 52 36 20 3d 09 61  |8 to +7)..R6 =.a|
0000e870  64 64 72 65 73 73 20 6f  66 20 72 61 77 20 73 61  |ddress of raw sa|
0000e880  6d 70 6c 65 20 64 61 74  61 20 28 6c 6f 67 61 72  |mple data (logar|
0000e890  69 74 68 6d 69 63 20 66  6f 72 6d 61 74 29 0a 0a  |ithmic format)..|
0000e8a0  54 68 69 73 20 53 57 49  20 61 6c 6c 6f 77 73 20  |This SWI allows |
0000e8b0  79 6f 75 20 74 6f 20 72  65 61 64 20 69 6e 66 6f  |you to read info|
0000e8c0  72 6d 61 74 69 6f 6e 20  66 72 6f 6d 20 74 68 65  |rmation from the|
0000e8d0  20 51 54 4d 20 73 61 6d  70 6c 65 20 74 61 62 6c  | QTM sample tabl|
0000e8e0  65 2c 20 77 68 69 63 68  20 63 6f 6e 74 61 69 6e  |e, which contain|
0000e8f0  73 20 75 70 20 74 6f 20  36 34 20 73 61 6d 70 6c  |s up to 64 sampl|
0000e900  65 73 2e 20 4e 6f 6e 2d  65 78 69 73 74 65 6e 74  |es. Non-existent|
0000e910  20 73 61 6d 70 6c 65 73  20 77 69 6c 6c 20 72 65  | samples will re|
0000e920  74 75 72 6e 20 7a 65 72  6f 20 69 6e 20 52 31 2d  |turn zero in R1-|
0000e930  52 36 2c 20 61 6e 64 20  52 30 20 77 69 6c 6c 20  |R6, and R0 will |
0000e940  70 6f 69 6e 74 20 74 6f  20 61 20 30 20 62 79 74  |point to a 0 byt|
0000e950  65 2e 0a 0a 4e 6f 74 65  3a 20 42 65 63 61 75 73  |e...Note: Becaus|
0000e960  65 20 6f 6e 6c 79 20 73  61 6d 70 6c 65 73 20 31  |e only samples 1|
0000e970  2d 33 31 20 61 72 65 20  75 73 65 64 20 62 79 20  |-31 are used by |
0000e980  73 6f 6e 67 73 2c 20 73  61 6d 70 6c 65 73 20 33  |songs, samples 3|
0000e990  32 2d 36 34 20 63 61 6e  20 62 65 20 75 73 65 64  |2-64 can be used|
0000e9a0  20 66 6f 72 20 73 6f 75  6e 64 20 65 66 66 65 63  | for sound effec|
0000e9b0  74 73 20 28 69 6e 20 67  61 6d 65 73 20 65 74 63  |ts (in games etc|
0000e9c0  2e 29 20 61 6e 64 20 63  61 6e 20 62 65 20 72 65  |.) and can be re|
0000e9d0  67 69 73 74 65 72 65 64  20 73 65 70 61 72 61 74  |gistered separat|
0000e9e0  65 6c 79 2c 20 75 73 69  6e 67 20 3c 51 54 4d 5f  |ely, using <QTM_|
0000e9f0  52 65 67 69 73 74 65 72  53 61 6d 70 6c 65 3e 2e  |RegisterSample>.|
0000ea00  0a 0a 56 20 66 6c 61 67  20 73 65 74 20 69 66 20  |..V flag set if |
0000ea10  73 61 6d 70 6c 65 20 6e  75 6d 62 65 72 20 69 73  |sample number is|
0000ea20  20 6f 75 74 20 6f 66 20  74 68 65 20 72 61 6e 67  | out of the rang|
0000ea30  65 20 31 2d 36 34 20 6f  72 20 73 6f 6e 67 20 6e  |e 1-64 or song n|
0000ea40  6f 74 20 6c 6f 61 64 65  64 0a 00 00 44 41 54 41  |ot loaded...DATA|
0000ea50  b4 03 00 00 51 54 4d 5f  52 65 61 64 53 70 65 65  |....QTM_ReadSpee|
0000ea60  64 20 20 28 26 34 37 45  35 33 29 0a 23 50 61 72  |d  (&47E53).#Par|
0000ea70  65 6e 74 20 51 54 4d 5f  0a 3c 3d 09 52 30 20 3d  |ent QTM_.<=.R0 =|
0000ea80  09 63 75 72 72 65 6e 74  20 73 6f 6e 67 20 73 70  |.current song sp|
0000ea90  65 65 64 20 28 30 30 2d  33 31 29 0a 09 52 31 20  |eed (00-31)..R1 |
0000eaa0  3d 09 63 75 72 72 65 6e  74 20 73 6f 6e 67 20 43  |=.current song C|
0000eab0  49 41 20 74 65 6d 70 6f  20 73 65 74 74 69 6e 67  |IA tempo setting|
0000eac0  20 28 33 32 2d 32 35 35  29 0a 09 52 32 20 3d 09  | (32-255)..R2 =.|
0000ead0  73 70 65 65 64 20 63 6f  75 6e 74 65 72 20 76 61  |speed counter va|
0000eae0  6c 75 65 20 28 30 31 2d  73 70 65 65 64 29 0a 0a  |lue (01-speed)..|
0000eaf0  54 68 69 73 20 53 57 49  20 72 65 74 75 72 6e 73  |This SWI returns|
0000eb00  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 20 6f 6e 20  | information on |
0000eb10  74 68 65 20 63 75 72 72  65 6e 74 20 73 70 65 65  |the current spee|
0000eb20  64 2c 20 74 65 6d 70 6f  20 61 6e 64 20 63 6f 75  |d, tempo and cou|
0000eb30  6e 74 65 72 20 76 61 6c  75 65 73 20 6f 66 20 74  |nter values of t|
0000eb40  68 65 20 63 75 72 72 65  6e 74 20 73 6f 6e 67 2e  |he current song.|
0000eb50  20 54 68 65 20 73 70 65  65 64 20 76 61 6c 75 65  | The speed value|
0000eb60  20 28 52 30 29 20 69 73  20 74 68 65 20 6e 75 6d  | (R0) is the num|
0000eb70  62 65 72 20 6f 66 20 74  69 6d 65 73 20 74 68 65  |ber of times the|
0000eb80  20 73 6f 6e 67 20 63 6f  6e 74 72 6f 6c 6c 65 72  | song controller|
0000eb90  20 68 61 73 20 74 6f 20  62 65 20 63 61 6c 6c 65  | has to be calle|
0000eba0  64 2c 20 62 65 66 6f 72  65 20 69 74 20 70 6c 61  |d, before it pla|
0000ebb0  79 73 20 74 68 65 20 6e  65 78 74 20 6e 6f 74 65  |ys the next note|
0000ebc0  2c 20 74 68 65 20 64 65  66 61 75 6c 74 20 69 73  |, the default is|
0000ebd0  20 36 20 74 69 6d 65 73  2e 20 49 66 20 61 20 73  | 6 times. If a s|
0000ebe0  70 65 65 64 20 6f 66 20  30 20 69 73 20 72 65 74  |peed of 0 is ret|
0000ebf0  75 72 6e 65 64 2c 20 74  68 65 20 73 6f 6e 67 20  |urned, the song |
0000ec00  69 73 20 6e 6f 74 20 70  6c 61 79 69 6e 67 2e 0a  |is not playing..|
0000ec10  0a 54 68 65 20 43 49 41  20 74 65 6d 70 6f 20 73  |.The CIA tempo s|
0000ec20  65 74 74 69 6e 67 20 63  6f 6e 74 72 6f 6c 73 20  |etting controls |
0000ec30  68 6f 77 20 66 61 73 74  20 74 68 65 20 73 6f 6e  |how fast the son|
0000ec40  67 20 63 6f 6e 74 72 6f  6c 6c 65 72 20 69 73 20  |g controller is |
0000ec50  63 61 6c 6c 65 64 2e 20  54 68 65 20 64 65 66 61  |called. The defa|
0000ec60  75 6c 74 20 69 73 20 35  30 20 74 69 6d 65 73 20  |ult is 50 times |
0000ec70  61 20 73 65 63 6f 6e 64  2c 20 74 65 6d 70 6f 20  |a second, tempo |
0000ec80  31 32 35 2e 20 28 54 68  65 20 6e 61 6d 65 20 43  |125. (The name C|
0000ec90  49 41 20 74 65 6d 70 6f  20 63 6f 6d 65 73 20 66  |IA tempo comes f|
0000eca0  72 6f 6d 20 43 6f 6d 70  6c 65 78 20 49 6e 74 65  |rom Complex Inte|
0000ecb0  72 66 61 63 65 20 41 64  61 70 74 6f 72 2c 20 77  |rface Adaptor, w|
0000ecc0  68 69 63 68 20 77 61 73  20 75 73 65 64 20 6f 6e  |hich was used on|
0000ecd0  20 74 68 65 20 41 6d 69  67 61 20 74 6f 20 63 6f  | the Amiga to co|
0000ece0  6e 74 72 6f 6c 20 50 72  6f 54 72 61 63 6b 65 72  |ntrol ProTracker|
0000ecf0  27 73 20 69 6e 74 65 72  72 75 70 74 20 73 70 65  |'s interrupt spe|
0000ed00  65 64 2e 29 0a 0a 54 68  65 20 73 70 65 65 64 20  |ed.)..The speed |
0000ed10  63 6f 75 6e 74 65 72 20  28 52 32 29 20 76 61 72  |counter (R2) var|
0000ed20  69 65 73 20 66 72 6f 6d  20 31 20 74 6f 20 74 68  |ies from 1 to th|
0000ed30  65 20 63 75 72 72 65 6e  74 20 73 70 65 65 64 20  |e current speed |
0000ed40  28 52 30 29 2e 20 49 74  20 69 73 20 64 65 63 72  |(R0). It is decr|
0000ed50  65 6d 65 6e 74 65 64 20  6f 6e 63 65 20 65 76 65  |emented once eve|
0000ed60  72 79 20 74 69 6d 65 20  74 68 65 20 73 6f 6e 67  |ry time the song|
0000ed70  20 63 6f 6e 74 72 6f 6c  6c 65 72 20 69 73 20 63  | controller is c|
0000ed80  61 6c 6c 65 64 2c 20 75  6e 74 69 6c 20 69 74 20  |alled, until it |
0000ed90  72 65 61 63 68 65 73 20  30 2c 20 77 68 65 6e 20  |reaches 0, when |
0000eda0  74 68 65 20 6e 65 78 74  20 6e 6f 74 65 20 69 73  |the next note is|
0000edb0  20 70 6c 61 79 65 64 20  61 6e 64 20 74 68 65 20  | played and the |
0000edc0  63 6f 75 6e 74 65 72 20  69 73 20 72 65 73 65 74  |counter is reset|
0000edd0  20 74 6f 20 74 68 65 20  73 70 65 65 64 2e 0a 0a  | to the speed...|
0000ede0  56 20 66 6c 61 67 20 73  65 74 20 69 66 20 6e 6f  |V flag set if no|
0000edf0  20 73 6f 6e 67 20 69 73  20 6c 6f 61 64 65 64 0a  | song is loaded.|
0000ee00  44 41 54 41 8c 03 00 00  51 54 4d 5f 50 6c 61 79  |DATA....QTM_Play|
0000ee10  53 61 6d 70 6c 65 20 20  28 26 34 37 45 35 34 29  |Sample  (&47E54)|
0000ee20  0a 23 50 61 72 65 6e 74  20 51 54 4d 5f 0a 3d 3e  |.#Parent QTM_.=>|
0000ee30  09 52 30 20 3d 20 63 68  61 6e 6e 65 6c 20 6e 75  |.R0 = channel nu|
0000ee40  6d 62 65 72 20 28 31 2d  38 29 0a 09 52 31 20 3d  |mber (1-8)..R1 =|
0000ee50  20 73 61 6d 70 6c 65 20  6e 75 6d 62 65 72 20 28  | sample number (|
0000ee60  30 2c 31 2d 36 34 29 2c  20 30 20 74 6f 20 63 6c  |0,1-64), 0 to cl|
0000ee70  65 61 72 20 63 68 61 6e  6e 65 6c 0a 09 52 32 20  |ear channel..R2 |
0000ee80  3d 20 6e 6f 74 65 20 6e  75 6d 62 65 72 20 28 31  |= note number (1|
0000ee90  2d 33 36 20 66 6f 72 20  73 74 61 6e 64 61 72 64  |-36 for standard|
0000eea0  2c 20 31 31 33 2d 38 35  36 20 66 6f 72 20 61 6d  |, 113-856 for am|
0000eeb0  69 67 61 20 70 69 74 63  68 29 0a 09 52 33 20 3d  |iga pitch)..R3 =|
0000eec0  20 6c 69 6e 65 61 72 20  76 6f 6c 75 6d 65 20 28  | linear volume (|
0000eed0  30 2d 36 34 29 0a 0a 3c  3d 09 52 30 2d 52 33 20  |0-64)..<=.R0-R3 |
0000eee0  70 72 65 73 65 72 76 65  64 0a 0a 54 68 69 73 20  |preserved..This |
0000eef0  53 57 49 20 61 6c 6c 6f  77 73 20 79 6f 75 20 74  |SWI allows you t|
0000ef00  6f 20 70 6c 61 79 20 61  6e 79 20 6f 66 20 74 68  |o play any of th|
0000ef10  65 20 36 34 20 73 61 6d  70 6c 65 73 20 68 65 6c  |e 64 samples hel|
0000ef20  64 20 69 6e 20 74 68 65  20 51 54 4d 20 73 61 6d  |d in the QTM sam|
0000ef30  70 6c 65 20 74 61 62 6c  65 20 6f 6e 20 61 6e 79  |ple table on any|
0000ef40  20 6f 66 20 74 68 65 20  34 20 6f 72 20 38 20 61  | of the 4 or 8 a|
0000ef50  76 61 69 6c 61 62 6c 65  20 63 68 61 6e 6e 65 6c  |vailable channel|
0000ef60  73 2e 20 41 20 73 61 6d  70 6c 65 20 63 61 6e 20  |s. A sample can |
0000ef70  62 65 20 70 6c 61 79 65  64 20 61 74 20 61 6e 79  |be played at any|
0000ef80  20 74 69 6d 65 2c 20 69  6e 63 6c 75 64 69 6e 67  | time, including|
0000ef90  20 77 68 69 6c 65 20 61  20 73 6f 6e 67 20 69 73  | while a song is|
0000efa0  20 70 6c 61 79 69 6e 67  2c 20 61 6c 74 68 6f 75  | playing, althou|
0000efb0  67 68 20 74 68 65 20 73  61 6d 70 6c 65 20 6d 61  |gh the sample ma|
0000efc0  79 20 62 65 20 63 75 74  20 73 68 6f 72 74 20 69  |y be cut short i|
0000efd0  66 20 74 68 65 20 73 6f  6e 67 20 69 73 20 70 6c  |f the song is pl|
0000efe0  61 79 69 6e 67 2e 20 50  6c 61 79 69 6e 67 20 61  |aying. Playing a|
0000eff0  20 6e 6f 6e 2d 65 78 69  73 74 65 6e 74 20 73 61  | non-existent sa|
0000f000  6d 70 6c 65 20 77 69 6c  6c 20 72 65 73 75 6c 74  |mple will result|
0000f010  20 69 6e 20 6e 6f 74 68  69 6e 67 20 62 65 69 6e  | in nothing bein|
0000f020  67 20 70 6c 61 79 65 64  2e 20 54 68 65 20 73 61  |g played. The sa|
0000f030  6d 70 6c 65 73 20 61 62  6f 76 65 20 33 31 20 63  |mples above 31 c|
0000f040  61 6e 20 62 65 20 75 73  65 64 20 61 66 74 65 72  |an be used after|
0000f050  20 74 68 65 79 20 61 72  65 20 72 65 67 69 73 74  | they are regist|
0000f060  65 72 65 64 2c 20 75 73  69 6e 67 20 3c 51 54 4d  |ered, using <QTM|
0000f070  5f 52 65 67 69 73 74 65  72 53 61 6d 70 6c 65 3e  |_RegisterSample>|
0000f080  2e 0a 0a 54 68 69 73 20  53 57 49 20 77 69 6c 6c  |...This SWI will|
0000f090  20 61 6c 73 6f 20 73 74  61 72 74 20 75 70 20 74  | also start up t|
0000f0a0  68 65 20 51 54 4d 20 73  6f 75 6e 64 20 73 79 73  |he QTM sound sys|
0000f0b0  74 65 6d 20 69 66 20 69  74 20 69 73 20 63 61 6c  |tem if it is cal|
0000f0c0  6c 65 64 20 77 68 69 6c  65 20 74 68 65 0a 73 6f  |led while the.so|
0000f0d0  6e 67 20 69 73 20 73 74  6f 70 70 65 64 20 6f 72  |ng is stopped or|
0000f0e0  20 70 61 75 73 65 64 2c  20 74 68 6f 75 67 68 20  | paused, though |
0000f0f0  69 74 20 77 69 6c 6c 20  6e 6f 74 20 73 77 69 74  |it will not swit|
0000f100  63 68 20 74 68 65 20 73  79 73 74 65 6d 20 6f 66  |ch the system of|
0000f110  66 20 61 66 74 65 72 0a  74 68 65 20 73 61 6d 70  |f after.the samp|
0000f120  6c 65 20 66 69 6e 69 73  68 65 73 2c 20 75 73 65  |le finishes, use|
0000f130  20 3c 51 54 4d 5f 53 6f  75 6e 64 43 6f 6e 74 72  | <QTM_SoundContr|
0000f140  6f 6c 3e 20 74 6f 20 64  6f 20 74 68 69 73 2e 0a  |ol> to do this..|
0000f150  0a 56 20 66 6c 61 67 20  73 65 74 20 69 66 20 61  |.V flag set if a|
0000f160  6e 79 20 6f 66 20 74 68  65 20 72 65 67 69 73 74  |ny of the regist|
0000f170  65 72 73 20 63 6f 6e 74  61 69 6e 20 69 6c 6c 65  |ers contain ille|
0000f180  67 61 6c 20 76 61 6c 75  65 73 2e 0a 44 41 54 41  |gal values..DATA|
0000f190  58 01 00 00 51 54 4d 5f  53 6f 6e 67 53 74 61 74  |X...QTM_SongStat|
0000f1a0  75 73 20 20 28 26 34 37  45 35 35 29 0a 23 50 61  |us  (&47E55).#Pa|
0000f1b0  72 65 6e 74 20 51 54 4d  5f 0a 3c 3d 09 52 30 20  |rent QTM_.<=.R0 |
0000f1c0  3d 20 3c 73 6f 6e 67 20  73 74 61 74 75 73 20 66  |= <song status f|
0000f1d0  6c 61 67 73 3d 3e 2e 66  6c 61 67 73 3e 0a 0a 54  |lags=>.flags>..T|
0000f1e0  68 69 73 20 53 57 49 20  61 6c 6c 6f 77 73 20 79  |his SWI allows y|
0000f1f0  6f 75 20 74 6f 20 72 65  61 64 20 74 68 65 20 63  |ou to read the c|
0000f200  75 72 72 65 6e 74 20 73  74 61 74 75 73 20 6f 66  |urrent status of|
0000f210  20 74 68 65 20 51 54 4d  20 73 6f 6e 67 20 63 6f  | the QTM song co|
0000f220  6e 74 72 6f 6c 6c 65 72  2e 0a 0a 4e 6f 20 65 72  |ntroller...No er|
0000f230  72 6f 72 20 69 73 20 67  65 6e 65 72 61 74 65 64  |ror is generated|
0000f240  20 69 66 20 74 68 65 72  65 20 69 73 20 6e 6f 20  | if there is no |
0000f250  73 6f 6e 67 20 6c 6f 61  64 65 64 2e 0a 23 53 75  |song loaded..#Su|
0000f260  62 70 61 67 65 20 66 6c  61 67 73 0a 51 54 4d 20  |bpage flags.QTM |
0000f270  53 6f 6e 67 20 73 74 61  74 75 73 20 66 6c 61 67  |Song status flag|
0000f280  73 0a 42 69 74 09 6d 65  61 6e 69 6e 67 20 69 66  |s.Bit.meaning if|
0000f290  20 73 65 74 0a 23 4c 69  6e 65 0a 30 09 73 6f 6e  | set.#Line.0.son|
0000f2a0  67 20 6c 6f 61 64 65 64  0a 31 09 73 6f 6e 67 20  |g loaded.1.song |
0000f2b0  6c 6f 61 64 65 64 20 69  6e 20 52 4d 41 0a 32 09  |loaded in RMA.2.|
0000f2c0  73 6f 6e 67 20 63 75 72  72 65 6e 74 6c 20 70 6c  |song currentl pl|
0000f2d0  61 79 69 6e 67 0a 33 2d  33 31 09 72 65 73 65 72  |aying.3-31.reser|
0000f2e0  76 65 64 0a 44 41 54 41  e0 04 00 00 51 54 4d 5f  |ved.DATA....QTM_|
0000f2f0  52 65 61 64 50 6c 61 79  69 6e 67 54 69 6d 65 20  |ReadPlayingTime |
0000f300  20 28 26 34 37 45 35 36  29 0a 23 50 61 72 65 6e  | (&47E56).#Paren|
0000f310  74 20 51 54 4d 5f 0a 3c  3d 09 52 30 20 3d 09 74  |t QTM_.<=.R0 =.t|
0000f320  6f 74 61 6c 20 70 6c 61  79 69 6e 67 20 74 69 6d  |otal playing tim|
0000f330  65 20 73 6f 20 66 61 72  20 28 73 65 63 6f 6e 64  |e so far (second|
0000f340  73 29 0a 09 52 31 20 3d  09 74 69 6d 65 20 73 69  |s)..R1 =.time si|
0000f350  6e 63 65 20 6c 61 73 74  20 3c 51 54 4d 5f 53 74  |nce last <QTM_St|
0000f360  61 72 74 3e 20 28 73 65  63 6f 6e 64 73 29 0a 09  |art> (seconds)..|
0000f370  52 32 20 3d 09 74 6f 74  61 6c 20 70 6c 61 79 69  |R2 =.total playi|
0000f380  6e 67 20 74 69 6d 65 20  6f 66 20 74 68 65 20 77  |ng time of the w|
0000f390  68 6f 6c 65 20 73 6f 6e  67 20 28 73 65 63 6f 6e  |hole song (secon|
0000f3a0  64 73 29 0a 0a 54 68 69  73 20 53 57 49 20 61 6c  |ds)..This SWI al|
0000f3b0  6c 6f 77 73 20 79 6f 75  20 74 6f 20 72 65 61 64  |lows you to read|
0000f3c0  20 74 68 65 20 74 77 6f  20 51 54 4d 20 73 6f 6e  | the two QTM son|
0000f3d0  67 20 74 69 6d 65 72 73  20 61 6e 64 20 74 68 65  |g timers and the|
0000f3e0  20 74 6f 74 61 6c 20 74  69 6d 65 20 6f 66 20 74  | total time of t|
0000f3f0  68 65 20 63 75 72 72 65  6e 74 20 73 6f 6e 67 2e  |he current song.|
0000f400  20 54 68 65 20 63 6f 6e  74 65 6e 74 73 20 6f 66  | The contents of|
0000f410  20 52 30 20 61 6e 64 20  52 31 20 6f 6e 20 65 78  | R0 and R1 on ex|
0000f420  69 74 20 61 72 65 20 63  61 6c 63 75 6c 61 74 65  |it are calculate|
0000f430  64 20 66 72 6f 6d 20 74  68 65 20 69 6e 74 65 72  |d from the inter|
0000f440  6e 61 6c 20 31 30 30 48  7a 20 74 69 6d 65 72 2c  |nal 100Hz timer,|
0000f450  20 62 75 74 20 74 68 65  20 63 6f 6e 74 65 6e 74  | but the content|
0000f460  73 20 6f 66 20 52 32 20  72 65 6c 79 20 6f 6e 20  |s of R2 rely on |
0000f470  61 20 73 70 65 63 69 61  6c 20 31 30 30 25 20 61  |a special 100% a|
0000f480  63 63 75 72 61 74 65 2c  20 73 6f 6e 67 20 6c 65  |ccurate, song le|
0000f490  6e 67 74 68 20 63 61 6c  63 75 6c 61 74 69 6f 6e  |ngth calculation|
0000f4a0  20 72 6f 75 74 69 6e 65  2e 2e 2e 0a 0a 54 68 65  | routine.....The|
0000f4b0  20 2a 2a 20 7b 2a 7d 51  54 4d 2d 55 6c 74 72 61  | ** {*}QTM-Ultra|
0000f4c0  2d 6d 65 67 61 2d 74 69  6d 65 2d 77 6f 72 6b 65  |-mega-time-worke|
0000f4d0  72 2d 6f 75 74 65 72 7b  2a 7d 20 2a 2a 20 69 73  |r-outer{*} ** is|
0000f4e0  20 74 68 65 20 66 69 72  73 74 20 73 6f 6e 67 20  | the first song |
0000f4f0  74 69 6d 65 20 63 61 6c  63 75 6c 61 74 69 6f 6e  |time calculation|
0000f500  20 72 6f 75 74 69 6e 65  20 6f 6e 20 74 68 65 20  | routine on the |
0000f510  41 72 63 2c 20 61 6e 64  20 74 68 65 20 6f 6e 6c  |Arc, and the onl|
0000f520  79 20 72 6f 75 74 69 6e  65 20 6f 6e 20 61 6e 79  |y routine on any|
0000f530  20 63 6f 6d 70 75 74 65  72 20 77 68 69 63 68 20  | computer which |
0000f540  63 61 6e 20 61 63 63 75  72 61 74 65 6c 79 20 77  |can accurately w|
0000f550  6f 72 6b 20 6f 75 74 20  74 69 6d 65 73 20 63 6f  |ork out times co|
0000f560  72 72 65 63 74 6c 79 20  77 69 74 68 20 65 66 66  |rrectly with eff|
0000f570  65 63 74 73 20 73 75 63  68 20 61 73 20 43 49 41  |ects such as CIA|
0000f580  20 74 65 6d 70 6f 73 2c  20 70 61 74 74 65 72 6e  | tempos, pattern|
0000f590  20 6c 6f 6f 70 73 20 61  6e 64 20 70 61 74 74 65  | loops and patte|
0000f5a0  72 6e 20 64 65 6c 61 79  73 2e 20 54 68 65 20 72  |rn delays. The r|
0000f5b0  6f 75 74 69 6e 65 20 77  6f 72 6b 73 20 62 79 20  |outine works by |
0000f5c0  73 63 61 6e 6e 69 6e 67  20 74 68 72 6f 75 67 68  |scanning through|
0000f5d0  20 61 6c 6c 20 74 68 65  20 73 6f 6e 67 27 73 20  | all the song's |
0000f5e0  70 61 74 74 65 72 6e 73  2c 20 69 6e 20 74 68 65  |patterns, in the|
0000f5f0  20 63 6f 72 72 65 63 74  20 6f 72 64 65 72 2c 20  | correct order, |
0000f600  63 61 6c 63 75 6c 61 74  69 6e 67 20 74 68 65 20  |calculating the |
0000f610  74 69 6d 65 20 6f 66 20  65 61 63 68 20 65 76 65  |time of each eve|
0000f620  6e 74 20 61 73 20 69 74  20 67 6f 65 73 2c 20 61  |nt as it goes, a|
0000f630  6e 64 20 74 61 6b 69 6e  67 20 69 6e 74 6f 20 61  |nd taking into a|
0000f640  63 63 6f 75 6e 74 20 61  6e 79 20 73 70 65 65 64  |ccount any speed|
0000f650  2c 20 74 65 6d 70 6f 2c  20 6c 6f 6f 70 20 6f 72  |, tempo, loop or|
0000f660  20 64 65 6c 61 79 20 73  65 74 74 69 6e 67 73 20  | delay settings |
0000f670  74 68 61 74 20 6d 61 79  20 62 65 20 69 6e 20 75  |that may be in u|
0000f680  73 65 2e 0a 0a 57 68 65  6e 20 74 68 69 73 20 53  |se...When this S|
0000f690  57 49 20 69 73 20 63 61  6c 6c 65 64 20 66 6f 72  |WI is called for|
0000f6a0  20 74 68 65 20 66 69 72  73 74 20 74 69 6d 65 20  | the first time |
0000f6b0  61 66 74 65 72 20 6c 6f  61 64 69 6e 67 20 61 20  |after loading a |
0000f6c0  73 6f 6e 67 2c 20 74 68  65 20 74 6f 74 61 6c 20  |song, the total |
0000f6d0  6c 65 6e 67 74 68 20 77  69 6c 6c 20 62 65 20 77  |length will be w|
0000f6e0  6f 72 6b 65 64 20 6f 75  74 20 75 73 69 6e 67 20  |orked out using |
0000f6f0  74 68 65 20 73 70 65 63  69 61 6c 20 72 6f 75 74  |the special rout|
0000f700  69 6e 65 2e 20 4f 6e 20  6c 61 74 65 72 20 63 61  |ine. On later ca|
0000f710  6c 6c 73 20 74 6f 20 74  68 69 73 20 53 57 49 20  |lls to this SWI |
0000f720  28 77 68 69 6c 65 20 74  68 65 20 73 61 6d 65 20  |(while the same |
0000f730  73 6f 6e 67 20 69 73 20  6c 6f 61 64 65 64 29 2c  |song is loaded),|
0000f740  20 74 68 65 20 74 6f 74  61 6c 20 6c 65 6e 67 74  | the total lengt|
0000f750  68 20 77 69 6c 6c 20 6e  6f 74 20 62 65 20 72 65  |h will not be re|
0000f760  2d 63 61 6c 63 75 6c 61  74 65 64 2c 20 62 75 74  |-calculated, but|
0000f770  20 74 68 65 20 6f 72 69  67 69 6e 61 6c 20 63 61  | the original ca|
0000f780  6c 63 75 6c 61 74 69 6f  6e 20 77 69 6c 6c 20 75  |lculation will u|
0000f790  73 65 64 2c 20 74 6f 20  73 61 76 65 20 74 69 6d  |sed, to save tim|
0000f7a0  65 2e 0a 0a 56 20 66 6c  61 67 20 73 65 74 20 69  |e...V flag set i|
0000f7b0  66 20 6e 6f 20 73 6f 6e  67 20 69 73 20 6c 6f 61  |f no song is loa|
0000f7c0  64 65 64 0a 44 41 54 41  04 03 00 00 51 54 4d 5f  |ded.DATA....QTM_|
0000f7d0  50 6c 61 79 52 61 77 53  61 6d 70 6c 65 20 20 28  |PlayRawSample  (|
0000f7e0  26 34 37 45 35 37 29 0a  23 50 61 72 65 6e 74 20  |&47E57).#Parent |
0000f7f0  51 54 4d 5f 0a 3d 3e 09  52 30 20 3d 20 63 68 61  |QTM_.=>.R0 = cha|
0000f800  6e 6e 65 6c 20 6e 75 6d  62 65 72 20 28 31 2d 38  |nnel number (1-8|
0000f810  29 0a 09 52 31 20 3d 20  73 61 6d 70 6c 65 20 61  |)..R1 = sample a|
0000f820  64 64 72 65 73 73 20 28  6c 6f 67 61 72 69 74 68  |ddress (logarith|
0000f830  6d 69 63 20 73 61 6d 70  6c 65 20 64 61 74 61 29  |mic sample data)|
0000f840  2c 20 6f 72 20 30 20 74  6f 20 73 69 6c 65 6e 63  |, or 0 to silenc|
0000f850  65 20 63 68 61 6e 6e 65  6c 0a 09 52 32 20 3d 20  |e channel..R2 = |
0000f860  73 61 6d 70 6c 65 20 6c  65 6e 67 74 68 20 28 69  |sample length (i|
0000f870  6e 20 62 79 74 65 73 29  0a 09 52 33 20 3d 20 72  |n bytes)..R3 = r|
0000f880  65 70 65 61 74 20 6f 66  66 73 65 74 20 28 62 79  |epeat offset (by|
0000f890  74 65 73 20 66 72 6f 6d  20 73 74 61 72 74 20 6f  |tes from start o|
0000f8a0  66 20 73 61 6d 70 6c 65  29 0a 09 52 34 20 3d 20  |f sample)..R4 = |
0000f8b0  72 65 70 65 61 74 20 6c  65 6e 67 74 68 20 28 69  |repeat length (i|
0000f8c0  6e 20 62 79 74 65 73 29  0a 09 52 35 20 3d 20 6e  |n bytes)..R5 = n|
0000f8d0  6f 74 65 20 6e 75 6d 62  65 72 20 28 31 2d 33 36  |ote number (1-36|
0000f8e0  20 66 6f 72 20 73 74 61  6e 64 61 72 64 20 6e 6f  | for standard no|
0000f8f0  74 65 2c 20 31 31 33 2d  38 35 36 20 66 6f 72 20  |te, 113-856 for |
0000f900  61 6d 69 67 61 20 70 69  74 63 68 29 0a 09 52 36  |amiga pitch)..R6|
0000f910  20 3d 20 6c 69 6e 65 61  72 20 76 6f 6c 75 6d 65  | = linear volume|
0000f920  20 28 30 2d 36 34 29 0a  0a 3c 3d 09 52 30 2d 52  | (0-64)..<=.R0-R|
0000f930  36 20 70 72 65 73 65 72  76 65 64 0a 0a 54 68 69  |6 preserved..Thi|
0000f940  73 20 53 57 49 20 61 6c  6c 6f 77 73 20 79 6f 75  |s SWI allows you|
0000f950  20 74 6f 20 70 6c 61 79  20 61 20 73 61 6d 70 6c  | to play a sampl|
0000f960  65 20 73 74 6f 72 65 64  20 69 6e 20 61 6e 79 20  |e stored in any |
0000f970  61 72 65 61 20 6f 66 20  6d 65 6d 6f 72 79 2e 20  |area of memory. |
0000f980  54 68 65 20 73 61 6d 70  6c 65 20 73 68 6f 75 6c  |The sample shoul|
0000f990  64 20 62 65 20 69 6e 20  38 2d 62 69 74 20 6c 6f  |d be in 8-bit lo|
0000f9a0  67 61 72 69 74 68 6d 69  63 20 66 6f 72 6d 61 74  |garithmic format|
0000f9b0  2e 0a 0a 54 68 69 73 20  53 57 49 20 77 69 6c 6c  |...This SWI will|
0000f9c0  20 61 6c 73 6f 20 73 74  61 72 74 20 75 70 20 74  | also start up t|
0000f9d0  68 65 20 51 54 4d 20 73  6f 75 6e 64 20 73 79 73  |he QTM sound sys|
0000f9e0  74 65 6d 20 69 66 20 69  74 20 69 73 20 63 61 6c  |tem if it is cal|
0000f9f0  6c 65 64 20 77 68 69 6c  65 20 74 68 65 20 73 6f  |led while the so|
0000fa00  6e 67 20 69 73 20 73 74  6f 70 70 65 64 20 6f 72  |ng is stopped or|
0000fa10  20 70 61 75 73 65 64 2c  20 74 68 6f 75 67 68 20  | paused, though |
0000fa20  69 74 20 77 69 6c 6c 20  6e 6f 74 20 73 77 69 74  |it will not swit|
0000fa30  63 68 20 74 68 65 20 73  79 73 74 65 6d 20 6f 66  |ch the system of|
0000fa40  66 20 61 66 74 65 72 20  74 68 65 20 73 61 6d 70  |f after the samp|
0000fa50  6c 65 20 66 69 6e 69 73  68 65 73 2c 20 75 73 65  |le finishes, use|
0000fa60  20 3c 51 54 4d 5f 53 6f  75 6e 64 43 6f 6e 74 72  | <QTM_SoundContr|
0000fa70  6f 6c 3e 20 74 6f 20 64  6f 20 74 68 69 73 2e 0a  |ol> to do this..|
0000fa80  0a 56 20 66 6c 61 67 73  20 73 65 74 20 69 66 20  |.V flags set if |
0000fa90  74 68 65 20 63 6f 6e 74  65 6e 74 73 20 6f 66 20  |the contents of |
0000faa0  74 68 65 20 72 65 67 69  73 74 65 72 73 20 63 6f  |the registers co|
0000fab0  6e 74 61 69 6e 20 64 61  6e 67 65 72 6f 75 73 20  |ntain dangerous |
0000fac0  76 61 6c 75 65 73 21 0a  44 41 54 41 89 06 00 00  |values!.DATA....|
0000fad0  51 54 4d 5f 53 6f 75 6e  64 43 6f 6e 74 72 6f 6c  |QTM_SoundControl|
0000fae0  20 20 28 26 34 37 45 35  38 29 0a 23 50 61 72 65  |  (&47E58).#Pare|
0000faf0  6e 74 20 51 54 4d 5f 0a  3d 3e 09 52 30 20 3d 09  |nt QTM_.=>.R0 =.|
0000fb00  6e 75 6d 62 65 72 20 6f  66 20 63 68 61 6e 6e 65  |number of channe|
0000fb10  6c 73 20 74 6f 20 75 73  65 20 28 34 2c 20 38 20  |ls to use (4, 8 |
0000fb20  6f 72 20 30 20 74 6f 20  73 68 75 74 64 6f 77 6e  |or 0 to shutdown|
0000fb30  29 20 2d 31 20 74 6f 20  72 65 61 64 0a 09 52 31  |) -1 to read..R1|
0000fb40  20 3d 09 74 72 61 6e 73  70 61 72 65 6e 74 20 73  | =.transparent s|
0000fb50  6f 75 6e 64 20 73 79 73  74 65 6d 20 66 6c 61 67  |ound system flag|
0000fb60  73 20 31 2d 6f 6e 2c 20  30 2d 6f 66 66 2c 20 2d  |s 1-on, 0-off, -|
0000fb70  31 20 74 6f 20 72 65 61  64 0a 09 52 32 20 3d 09  |1 to read..R2 =.|
0000fb80  74 72 61 6e 73 70 61 72  65 6e 74 20 73 6f 75 6e  |transparent soun|
0000fb90  64 20 73 79 73 74 65 6d  20 63 68 61 6e 6e 65 6c  |d system channel|
0000fba0  20 68 61 6e 64 6c 65 72  20 61 64 64 72 65 73 73  | handler address|
0000fbb0  20 6f 72 20 2d 31 0a 0a  3c 3d 09 52 30 20 3d 09  | or -1..<=.R0 =.|
0000fbc0  70 72 65 76 69 6f 75 73  20 6e 75 6d 62 65 72 20  |previous number |
0000fbd0  6f 66 20 63 68 61 6e 6e  65 6c 73 20 28 30 20 69  |of channels (0 i|
0000fbe0  66 20 73 6f 75 6e 64 20  73 79 73 74 65 6d 20 77  |f sound system w|
0000fbf0  61 73 20 6f 66 66 29 0a  09 52 31 20 3d 09 70 72  |as off)..R1 =.pr|
0000fc00  65 76 69 6f 75 73 20 74  72 61 6e 73 70 61 72 65  |evious transpare|
0000fc10  6e 74 20 73 6f 75 6e 64  20 73 79 73 74 65 6d 20  |nt sound system |
0000fc20  66 6c 61 67 73 0a 09 52  32 20 3d 09 70 72 65 76  |flags..R2 =.prev|
0000fc30  69 6f 75 73 20 74 72 61  6e 73 70 61 72 65 6e 74  |ious transparent|
0000fc40  20 73 6f 75 6e 64 20 73  79 73 74 65 6d 20 68 61  | sound system ha|
0000fc50  6e 64 6c 65 72 0a 0a 54  68 69 73 20 53 57 49 20  |ndler..This SWI |
0000fc60  61 6c 6c 6f 77 73 20 63  6f 6e 74 72 6f 6c 20 6f  |allows control o|
0000fc70  76 65 72 20 74 68 65 20  51 54 4d 20 73 6f 75 6e  |ver the QTM soun|
0000fc80  64 20 44 4d 41 20 68 61  6e 64 6c 65 72 2e 0a 0a  |d DMA handler...|
0000fc90  54 68 65 20 51 54 4d 20  73 6f 75 6e 64 20 73 79  |The QTM sound sy|
0000fca0  73 74 65 6d 20 73 77 69  74 63 68 65 73 20 6f 6e  |stem switches on|
0000fcb0  20 61 75 74 6f 6d 61 74  69 63 61 6c 6c 79 20 77  | automatically w|
0000fcc0  68 65 6e 20 61 20 73 6f  6e 67 20 6f 72 20 61 20  |hen a song or a |
0000fcd0  73 61 6d 70 6c 65 20 69  73 20 70 6c 61 79 65 64  |sample is played|
0000fce0  2c 20 62 75 74 20 63 61  6e 20 61 6c 73 6f 20 62  |, but can also b|
0000fcf0  65 20 73 77 69 74 63 68  65 64 20 6f 6e 20 6d 61  |e switched on ma|
0000fd00  6e 75 61 6c 6c 79 20 75  73 69 6e 67 20 74 68 69  |nually using thi|
0000fd10  73 20 53 57 49 2c 20 73  70 65 63 69 66 79 69 6e  |s SWI, specifyin|
0000fd20  67 20 34 20 6f 72 20 38  20 63 68 61 6e 6e 65 6c  |g 4 or 8 channel|
0000fd30  73 2e 20 4e 6f 74 65 3a  20 54 68 69 73 20 73 65  |s. Note: This se|
0000fd40  74 73 20 74 68 65 20 27  64 65 66 61 75 6c 74 27  |ts the 'default'|
0000fd50  20 6e 75 6d 62 65 72 20  6f 66 20 63 68 61 6e 6e  | number of chann|
0000fd60  65 6c 73 2c 20 73 6f 20  65 76 65 6e 20 61 66 74  |els, so even aft|
0000fd70  65 72 20 74 68 65 20 73  6f 75 6e 64 20 73 79 73  |er the sound sys|
0000fd80  74 65 6d 20 69 73 20 6e  65 78 74 20 73 68 75 74  |tem is next shut|
0000fd90  20 64 6f 77 6e 2c 20 51  54 4d 20 77 69 6c 6c 20  | down, QTM will |
0000fda0  63 6f 6e 74 69 6e 75 65  20 74 6f 20 75 73 65 20  |continue to use |
0000fdb0  74 68 65 20 6e 75 6d 62  65 72 20 6f 66 20 63 68  |the number of ch|
0000fdc0  61 6e 6e 65 6c 73 20 73  70 65 63 69 66 69 65 64  |annels specified|
0000fdd0  20 77 68 65 6e 65 76 65  72 20 61 20 73 6f 6e 67  | whenever a song|
0000fde0  20 6f 72 20 73 61 6d 70  6c 65 20 63 61 75 73 65  | or sample cause|
0000fdf0  73 20 74 68 65 20 73 6f  75 6e 64 20 73 79 73 74  |s the sound syst|
0000fe00  65 6d 20 74 6f 20 73 74  61 72 74 20 75 70 20 61  |em to start up a|
0000fe10  67 61 69 6e 2e 0a 0a 49  66 20 30 20 63 68 61 6e  |gain...If 0 chan|
0000fe20  6e 65 6c 73 20 61 72 65  20 73 70 65 63 69 66 69  |nels are specifi|
0000fe30  65 64 2c 20 74 68 65 20  51 54 4d 20 73 6f 75 6e  |ed, the QTM soun|
0000fe40  64 20 73 79 73 74 65 6d  20 69 73 20 73 68 75 74  |d system is shut|
0000fe50  20 64 6f 77 6e 2e 20 49  66 20 61 20 73 6f 6e 67  | down. If a song|
0000fe60  20 77 61 73 20 70 6c 61  79 69 6e 67 20 61 74 20  | was playing at |
0000fe70  74 68 61 74 20 74 69 6d  65 2c 20 74 68 65 20 6d  |that time, the m|
0000fe80  75 73 69 63 20 68 61 6e  64 6c 65 72 73 20 61 6e  |usic handlers an|
0000fe90  64 20 70 6f 73 69 74 69  6f 6e 20 63 6f 75 6e 74  |d position count|
0000fea0  65 72 73 20 77 69 6c 6c  20 63 6f 6e 74 69 6e 75  |ers will continu|
0000feb0  65 20 74 6f 20 6d 6f 76  65 20 74 68 72 6f 75 67  |e to move throug|
0000fec0  68 20 74 68 65 20 73 6f  6e 67 2c 20 61 6c 74 68  |h the song, alth|
0000fed0  6f 75 67 68 20 6e 6f 20  73 6f 75 6e 64 20 77 69  |ough no sound wi|
0000fee0  6c 6c 20 62 65 20 68 65  61 72 64 20 66 72 6f 6d  |ll be heard from|
0000fef0  20 51 54 4d 2e 0a 0a 44  65 74 61 69 6c 73 20 6f  | QTM...Details o|
0000ff00  66 20 74 68 65 20 54 72  61 6e 73 70 61 72 65 6e  |f the Transparen|
0000ff10  74 20 53 6f 75 6e 64 20  53 79 73 74 65 6d 20 63  |t Sound System c|
0000ff20  61 6e 20 62 65 20 66 6f  75 6e 64 20 69 6e 20 74  |an be found in t|
0000ff30  68 65 20 27 54 65 63 68  6e 69 63 61 6c 27 20 68  |he 'Technical' h|
0000ff40  65 6c 70 20 66 69 6c 65  2c 20 62 75 74 20 62 61  |elp file, but ba|
0000ff50  73 69 63 61 6c 6c 79 20  69 74 20 61 6c 6c 6f 77  |sically it allow|
0000ff60  73 20 6a 6f 69 6e 74 20  63 6f 6e 74 72 6f 6c 20  |s joint control |
0000ff70  6f 76 65 72 20 74 68 65  20 73 6f 75 6e 64 20 63  |over the sound c|
0000ff80  68 61 6e 6e 65 6c 73 2c  20 62 79 20 51 54 4d 20  |hannels, by QTM |
0000ff90  61 6e 64 20 65 69 74 68  65 72 20 74 68 65 20 52  |and either the R|
0000ffa0  69 73 63 4f 53 20 73 6f  75 6e 64 20 68 61 6e 64  |iscOS sound hand|
0000ffb0  6c 65 72 20 28 64 65 66  61 75 6c 74 29 20 6f 72  |ler (default) or|
0000ffc0  20 61 6e 79 20 6f 74 68  65 72 20 52 69 73 63 4f  | any other RiscO|
0000ffd0  53 20 63 6f 6d 70 61 74  69 62 6c 65 20 73 6f 75  |S compatible sou|
0000ffe0  6e 64 20 63 68 61 6e 6e  65 6c 20 68 61 6e 64 6c  |nd channel handl|
0000fff0  65 72 2e 20 53 77 69 74  63 68 69 6e 67 20 74 68  |er. Switching th|
00010000  65 20 54 72 61 6e 73 70  61 72 65 6e 74 20 53 6f  |e Transparent So|
00010010  75 6e 64 20 53 79 73 74  65 6d 20 6f 6e 20 28 70  |und System on (p|
00010020  61 73 73 69 6e 67 20 31  20 69 6e 20 52 31 29 20  |assing 1 in R1) |
00010030  77 69 6c 6c 20 61 6c 6c  6f 77 20 79 6f 75 20 74  |will allow you t|
00010040  6f 20 68 65 61 72 20 61  6e 79 20 52 69 73 63 4f  |o hear any RiscO|
00010050  53 20 76 6f 69 63 65 20  6d 6f 64 75 6c 65 20 73  |S voice module s|
00010060  6f 75 6e 64 73 20 41 53  20 57 45 4c 4c 20 61 73  |ounds AS WELL as|
00010070  20 61 6e 79 20 51 54 4d  20 73 61 6d 70 6c 65 73  | any QTM samples|
00010080  2e 20 46 6f 72 20 65 78  61 6d 70 6c 65 2c 20 69  |. For example, i|
00010090  6e 20 69 74 73 20 64 65  66 61 75 6c 74 20 73 74  |n its default st|
000100a0  61 74 65 2c 20 74 68 65  20 54 72 61 6e 73 70 61  |ate, the Transpa|
000100b0  72 65 6e 74 20 53 6f 75  6e 64 20 53 79 73 74 65  |rent Sound Syste|
000100c0  6d 20 77 69 6c 6c 20 61  6c 6c 6f 77 20 79 6f 75  |m will allow you|
000100d0  20 74 6f 20 68 65 61 72  20 74 68 65 20 73 79 73  | to hear the sys|
000100e0  74 65 6d 20 27 62 65 65  70 27 2c 20 77 68 69 6c  |tem 'beep', whil|
000100f0  65 20 61 20 73 6f 6e 67  20 6f 72 20 73 61 6d 70  |e a song or samp|
00010100  6c 65 20 69 73 20 62 65  69 6e 67 20 70 6c 61 79  |le is being play|
00010110  65 64 20 74 68 72 6f 75  67 68 20 51 54 4d 2e 0a  |ed through QTM..|
00010120  0a 56 20 66 6c 61 67 20  73 65 74 20 69 66 20 69  |.V flag set if i|
00010130  6c 6c 65 67 61 6c 20 76  61 6c 75 65 73 20 61 72  |llegal values ar|
00010140  65 20 70 61 73 73 65 64  20 74 6f 20 51 54 4d 2e  |e passed to QTM.|
00010150  0a 00 00 00 44 41 54 41  a0 02 00 00 51 54 4d 5f  |....DATA....QTM_|
00010160  53 57 49 54 61 62 6c 65  41 64 64 72 65 73 73 20  |SWITableAddress |
00010170  20 28 26 34 37 45 35 39  29 0a 23 50 61 72 65 6e  | (&47E59).#Paren|
00010180  74 20 51 54 4d 5f 0a 3c  3d 09 52 30 20 3d 20 61  |t QTM_.<=.R0 = a|
00010190  64 64 72 65 73 73 20 6f  66 20 51 54 4d 27 73 20  |ddress of QTM's |
000101a0  69 6e 74 65 72 6e 61 6c  20 53 57 49 20 6a 75 6d  |internal SWI jum|
000101b0  70 20 74 61 62 6c 65 0a  0a 54 68 69 73 20 53 57  |p table..This SW|
000101c0  49 20 72 65 74 75 72 6e  73 20 74 68 65 20 61 64  |I returns the ad|
000101d0  64 72 65 73 73 20 6f 66  20 51 54 4d 27 73 20 53  |dress of QTM's S|
000101e0  57 49 20 6a 75 6d 70 20  74 61 62 6c 65 2c 20 73  |WI jump table, s|
000101f0  6f 20 74 68 61 74 20 75  73 65 72 20 70 72 6f 67  |o that user prog|
00010200  72 61 6d 73 20 63 61 6e  20 63 61 6c 6c 20 64 69  |rams can call di|
00010210  72 65 63 74 6c 79 20 61  6e 79 20 51 54 4d 20 53  |rectly any QTM S|
00010220  57 49 2c 20 77 69 74 68  6f 75 74 20 67 6f 69 6e  |WI, without goin|
00010230  67 20 74 68 72 6f 75 67  68 20 74 68 65 20 52 69  |g through the Ri|
00010240  73 63 4f 53 20 53 57 49  20 68 61 6e 64 6c 65 72  |scOS SWI handler|
00010250  2e 0a 0a 54 6f 20 63 61  6c 6c 20 61 20 51 54 4d  |...To call a QTM|
00010260  20 53 57 49 20 76 69 61  20 74 68 69 73 20 61 64  | SWI via this ad|
00010270  64 72 65 73 73 2c 20 74  68 65 20 72 65 67 69 73  |dress, the regis|
00010280  74 65 72 73 20 73 68 6f  75 6c 64 20 62 65 20 73  |ters should be s|
00010290  65 74 20 75 70 20 61 73  20 72 65 71 75 69 72 65  |et up as require|
000102a0  64 20 62 79 20 74 68 65  20 53 57 49 2c 20 61 6e  |d by the SWI, an|
000102b0  64 20 74 68 65 20 53 57  49 20 6e 75 6d 62 65 72  |d the SWI number|
000102c0  20 6d 69 6e 75 73 20 26  34 37 45 34 30 20 73 68  | minus &47E40 sh|
000102d0  6f 75 6c 64 20 62 65 20  70 6c 61 63 65 64 20 69  |ould be placed i|
000102e0  6e 20 52 31 31 2e 20 54  68 65 20 53 57 49 20 63  |n R11. The SWI c|
000102f0  61 6e 20 74 68 65 6e 20  62 65 20 65 78 65 63 75  |an then be execu|
00010300  74 65 64 20 62 79 20 62  72 61 6e 63 68 69 6e 67  |ted by branching|
00010310  20 74 6f 20 74 68 69 73  20 53 57 49 20 74 61 62  | to this SWI tab|
00010320  6c 65 20 61 64 64 72 65  73 73 2e 0a 0a 4e 6f 74  |le address...Not|
00010330  65 3a 20 61 6c 6c 20 51  54 4d 20 53 57 49 73 20  |e: all QTM SWIs |
00010340  63 61 6e 20 62 65 20 63  61 6c 6c 65 64 20 74 68  |can be called th|
00010350  69 73 20 77 61 79 2c 20  66 72 6f 6d 20 61 6e 79  |is way, from any|
00010360  20 50 53 52 20 6d 6f 64  65 2c 20 61 6c 74 68 6f  | PSR mode, altho|
00010370  75 67 68 20 69 66 20 74  68 65 20 51 54 4d 20 73  |ugh if the QTM s|
00010380  6f 75 6e 64 20 73 79 73  74 65 6d 20 69 73 20 61  |ound system is a|
00010390  63 74 69 76 65 2c 20 3c  51 54 4d 5f 52 65 6d 6f  |ctive, <QTM_Remo|
000103a0  76 65 43 68 61 6e 6e 65  6c 3e 20 73 68 6f 75 6c  |veChannel> shoul|
000103b0  64 20 62 65 20 63 61 6c  6c 65 64 20 66 72 6f 6d  |d be called from|
000103c0  20 61 20 6e 6f 6e 2d 55  73 65 72 20 6d 6f 64 65  | a non-User mode|
000103d0  2c 20 74 6f 20 61 6c 6c  6f 77 20 64 69 73 61 62  |, to allow disab|
000103e0  6c 69 6e 67 20 6f 66 20  69 6e 74 65 72 72 75 70  |ling of interrup|
000103f0  74 73 2e 0a 44 41 54 41  7e 04 00 00 51 54 4d 5f  |ts..DATA~...QTM_|
00010400  52 65 67 69 73 74 65 72  53 61 6d 70 6c 65 20 20  |RegisterSample  |
00010410  28 26 34 37 45 35 41 29  0a 23 50 61 72 65 6e 74  |(&47E5A).#Parent|
00010420  20 51 54 4d 5f 0a 3d 3e  09 52 30 20 3d 09 73 61  | QTM_.=>.R0 =.sa|
00010430  6d 70 6c 65 20 6e 75 6d  62 65 72 20 74 6f 20 72  |mple number to r|
00010440  65 67 69 73 74 65 72 20  61 73 20 28 31 2d 36 34  |egister as (1-64|
00010450  29 20 28 73 65 65 20 6e  6f 74 65 73 20 62 65 6c  |) (see notes bel|
00010460  6f 77 29 0a 09 52 31 20  3d 09 73 61 6d 70 6c 65  |ow)..R1 =.sample|
00010470  20 61 64 64 72 65 73 73  20 28 6f 66 20 6c 6f 67  | address (of log|
00010480  61 72 69 74 68 6d 69 63  20 73 61 6d 70 6c 65 20  |arithmic sample |
00010490  64 61 74 61 29 20 6f 72  20 30 20 74 6f 20 62 6c  |data) or 0 to bl|
000104a0  61 6e 6b 20 74 68 65 20  73 61 6d 70 6c 65 20 69  |ank the sample i|
000104b0  6e 66 6f 72 6d 61 74 69  6f 6e 0a 09 49 66 20 52  |nformation..If R|
000104c0  31 20 5c 3c 3e 20 30 20  74 68 65 6e 0a 09 20 09  |1 \<> 0 then.. .|
000104d0  52 32 20 3d 20 73 61 6d  70 6c 65 20 6c 65 6e 67  |R2 = sample leng|
000104e0  74 68 20 28 69 6e 20 62  79 74 65 73 29 0a 09 20  |th (in bytes).. |
000104f0  09 52 33 20 3d 20 72 65  70 65 61 74 20 6f 66 66  |.R3 = repeat off|
00010500  73 65 74 20 28 62 79 74  65 73 20 66 72 6f 6d 20  |set (bytes from |
00010510  73 74 61 72 74 20 6f 66  20 73 61 6d 70 6c 65 2c  |start of sample,|
00010520  20 6f 72 20 30 29 0a 09  20 09 52 34 20 3d 20 72  | or 0).. .R4 = r|
00010530  65 70 65 61 74 20 6c 65  6e 67 74 68 20 28 6f 72  |epeat length (or|
00010540  20 30 29 0a 09 20 09 52  35 20 3d 20 64 65 66 61  | 0).. .R5 = defa|
00010550  75 6c 74 20 76 6f 6c 75  6d 65 20 28 30 2d 36 34  |ult volume (0-64|
00010560  29 0a 09 20 09 52 36 20  3d 20 66 69 6e 65 20 74  |).. .R6 = fine t|
00010570  75 6e 65 20 76 61 6c 75  65 20 28 2d 38 20 74 6f  |une value (-8 to|
00010580  20 2b 37 29 0a 0a 3c 3d  09 52 30 2d 52 36 20 70  | +7)..<=.R0-R6 p|
00010590  72 65 73 65 72 76 65 64  0a 0a 54 68 69 73 20 53  |reserved..This S|
000105a0  57 49 20 61 6c 6c 6f 77  73 20 61 20 70 72 6f 67  |WI allows a prog|
000105b0  72 61 6d 20 74 6f 20 72  65 67 69 73 74 65 72 20  |ram to register |
000105c0  61 20 73 61 6d 70 6c 65  20 6c 6f 61 64 65 64 20  |a sample loaded |
000105d0  69 6e 74 6f 20 69 74 27  73 20 6f 77 6e 20 6d 65  |into it's own me|
000105e0  6d 6f 72 79 2c 20 61 73  20 61 20 51 54 4d 20 73  |mory, as a QTM s|
000105f0  61 6d 70 6c 65 2e 20 54  68 65 20 61 62 6f 76 65  |ample. The above|
00010600  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 20 77 69 6c  | information wil|
00010610  6c 20 62 65 20 65 6e 74  65 72 65 64 20 69 6e 74  |l be entered int|
00010620  6f 20 51 54 4d 27 73 20  36 34 20 73 6c 6f 74 20  |o QTM's 64 slot |
00010630  73 61 6d 70 6c 65 20 74  61 62 6c 65 20 61 6e 64  |sample table and|
00010640  20 77 69 6c 6c 20 61 6c  6c 6f 77 20 74 68 65 20  | will allow the |
00010650  75 73 65 72 20 70 72 6f  67 72 61 6d 20 74 6f 20  |user program to |
00010660  70 6c 61 79 20 74 68 65  20 73 61 6d 70 6c 65 20  |play the sample |
00010670  75 73 69 6e 67 20 3c 51  54 4d 5f 50 6c 61 79 53  |using <QTM_PlayS|
00010680  61 6d 70 6c 65 3e 2e 20  49 66 20 74 68 65 20 73  |ample>. If the s|
00010690  61 6d 70 6c 65 20 6e 75  6d 62 65 72 20 69 73 20  |ample number is |
000106a0  3c 3d 33 31 2c 20 74 68  65 20 63 75 72 72 65 6e  |<=31, the curren|
000106b0  74 20 73 6f 6e 67 20 77  69 6c 6c 20 75 73 65 20  |t song will use |
000106c0  74 68 69 73 20 73 61 6d  70 6c 65 20 72 61 74 68  |this sample rath|
000106d0  65 72 20 74 68 61 6e 20  69 74 73 20 64 65 66 61  |er than its defa|
000106e0  75 6c 74 20 73 61 6d 70  6c 65 2e 0a 0a 49 74 20  |ult sample...It |
000106f0  69 73 20 67 6f 6f 64 20  70 72 61 63 74 69 63 65  |is good practice|
00010700  20 66 6f 72 20 6e 6f 6e  2d 64 65 73 6b 74 6f 70  | for non-desktop|
00010710  20 75 73 65 72 73 20 6f  66 20 74 68 69 73 20 63  | users of this c|
00010720  61 6c 6c 20 74 6f 20 62  6c 61 6e 6b 20 74 68 65  |all to blank the|
00010730  69 72 20 72 65 67 69 73  74 65 72 65 64 20 73 61  |ir registered sa|
00010740  6d 70 6c 65 73 20 77 68  65 6e 20 72 65 74 75 72  |mples when retur|
00010750  6e 69 6e 67 20 74 6f 20  74 68 65 20 64 65 73 6b  |ning to the desk|
00010760  74 6f 70 2c 20 62 79 20  63 61 6c 6c 69 6e 67 20  |top, by calling |
00010770  74 68 69 73 20 53 57 49  20 77 69 74 68 20 52 31  |this SWI with R1|
00010780  3d 30 2e 0a 0a 4e 6f 74  65 3a 20 41 6c 6c 20 73  |=0...Note: All s|
00010790  61 6d 70 6c 65 73 20 69  6e 20 74 68 65 20 72 61  |amples in the ra|
000107a0  6e 67 65 20 31 2d 33 31  20 61 72 65 20 72 65 2d  |nge 1-31 are re-|
000107b0  73 65 74 20 77 68 65 6e  20 61 20 6e 65 77 20 73  |set when a new s|
000107c0  6f 6e 67 20 69 73 20 6c  6f 61 64 65 64 2c 20 74  |ong is loaded, t|
000107d0  6f 20 61 6c 6c 6f 77 20  73 70 61 63 65 20 66 6f  |o allow space fo|
000107e0  72 20 74 68 65 20 6e 65  77 20 73 6f 6e 67 27 73  |r the new song's|
000107f0  20 6f 77 6e 20 73 61 6d  70 6c 65 73 2e 20 49 66  | own samples. If|
00010800  20 79 6f 75 20 61 72 65  20 75 73 69 6e 67 20 74  | you are using t|
00010810  68 69 73 20 72 61 6e 67  65 20 66 6f 72 20 73 6f  |his range for so|
00010820  75 6e 64 20 65 66 66 65  63 74 73 20 65 74 63 2e  |und effects etc.|
00010830  20 79 6f 75 20 6d 75 73  74 20 72 65 2d 72 65 67  | you must re-reg|
00010840  69 73 74 65 72 20 61 6c  6c 20 72 65 71 75 69 72  |ister all requir|
00010850  65 64 20 73 61 6d 70 6c  65 73 20 61 66 74 65 72  |ed samples after|
00010860  20 65 76 65 72 79 20 73  6f 6e 67 20 6c 6f 61 64  | every song load|
00010870  2e 0a 00 00 44 41 54 41  bb 03 00 00 51 54 4d 5f  |....DATA....QTM_|
00010880  53 65 74 53 70 65 65 64  20 20 28 26 34 37 45 35  |SetSpeed  (&47E5|
00010890  42 29 0a 23 50 61 72 65  6e 74 20 51 54 4d 5f 0a  |B).#Parent QTM_.|
000108a0  3d 3e 09 52 30 20 3d 09  6e 65 77 20 73 6f 6e 67  |=>.R0 =.new song|
000108b0  20 73 70 65 65 64 20 28  30 31 2d 33 31 29 20 6f  | speed (01-31) o|
000108c0  72 20 74 65 6d 70 6f 20  28 33 32 2d 32 35 35 29  |r tempo (32-255)|
000108d0  0a 09 20 09 28 73 70 65  65 64 20 28 62 65 61 74  |.. .(speed (beat|
000108e0  73 20 70 65 72 20 6e 6f  74 65 29 2c 20 66 61 73  |s per note), fas|
000108f0  74 20 30 31 2d 33 31 20  20 76 2e 20 73 6c 6f 77  |t 01-31  v. slow|
00010900  2c 20 64 65 66 61 75 6c  74 20 30 36 29 0a 09 20  |, default 06).. |
00010910  09 28 74 65 6d 70 6f 20  28 62 65 61 74 20 66 72  |.(tempo (beat fr|
00010920  65 71 75 65 6e 63 79 29  2c 20 73 6c 6f 77 20 33  |equency), slow 3|
00010930  32 2d 32 35 35 20 76 2e  20 66 61 73 74 2c 20 64  |2-255 v. fast, d|
00010940  65 66 61 75 6c 74 20 31  32 35 29 0a 0a 3c 3d 09  |efault 125)..<=.|
00010950  52 30 20 70 72 65 73 65  72 76 65 64 0a 0a 54 68  |R0 preserved..Th|
00010960  69 73 20 53 57 49 20 70  72 6f 76 69 64 65 73 20  |is SWI provides |
00010970  75 73 65 72 20 63 6f 6e  74 72 6f 6c 20 6f 76 65  |user control ove|
00010980  72 20 74 68 65 20 73 70  65 65 64 20 6f 66 20 74  |r the speed of t|
00010990  68 65 20 63 75 72 72 65  6e 74 6c 79 20 70 6c 61  |he currently pla|
000109a0  79 69 6e 67 20 73 6f 6e  67 2e 20 54 68 69 73 20  |ying song. This |
000109b0  63 6f 6d 6d 61 6e 64 20  68 61 73 20 74 68 65 20  |command has the |
000109c0  73 61 6d 65 20 65 66 66  65 63 74 20 28 61 6e 64  |same effect (and|
000109d0  20 74 61 6b 65 73 20 74  68 65 20 73 61 6d 65 20  | takes the same |
000109e0  70 61 72 61 6d 65 74 65  72 73 29 20 61 73 20 74  |parameters) as t|
000109f0  68 65 20 73 70 65 65 64  2d 63 68 61 6e 67 65 20  |he speed-change |
00010a00  27 46 27 20 65 66 66 65  63 74 20 61 73 20 75 73  |'F' effect as us|
00010a10  65 64 20 69 6e 20 50 72  6f 54 72 61 63 6b 65 72  |ed in ProTracker|
00010a20  20 63 6f 6d 70 61 74 69  62 6c 65 20 73 6f 6e 67  | compatible song|
00010a30  73 2e 20 54 68 65 20 6f  6e 6c 79 20 64 69 66 66  |s. The only diff|
00010a40  65 72 65 6e 63 65 20 62  65 69 6e 67 20 74 68 61  |erence being tha|
00010a50  74 20 61 20 76 61 6c 75  65 20 6f 66 20 30 20 77  |t a value of 0 w|
00010a60  69 6c 6c 20 4e 4f 54 20  73 74 6f 70 20 74 68 65  |ill NOT stop the|
00010a70  20 73 6f 6e 67 2c 20 75  73 65 20 53 57 49 20 51  | song, use SWI Q|
00010a80  54 4d 5f 53 74 6f 70 20  74 6f 20 64 6f 20 74 68  |TM_Stop to do th|
00010a90  69 73 2e 0a 0a 41 66 74  65 72 20 75 73 69 6e 67  |is...After using|
00010aa0  20 74 68 69 73 20 53 57  49 2c 20 74 68 65 20 73  | this SWI, the s|
00010ab0  6f 6e 67 20 73 70 65 65  64 20 77 69 6c 6c 20 72  |ong speed will r|
00010ac0  65 6d 61 69 6e 20 61 74  20 74 68 65 20 6e 65 77  |emain at the new|
00010ad0  20 76 61 6c 75 65 20 75  6e 74 69 6c 20 61 6e 20  | value until an |
00010ae0  27 46 27 20 65 66 66 65  63 74 20 69 73 20 70 6c  |'F' effect is pl|
00010af0  61 79 65 64 2c 20 6f 72  20 74 68 65 20 73 6f 6e  |ayed, or the son|
00010b00  67 20 69 73 20 73 74 6f  70 70 65 64 2e 20 4e 6f  |g is stopped. No|
00010b10  74 65 3a 20 69 66 20 74  68 65 20 27 46 27 20 65  |te: if the 'F' e|
00010b20  66 66 65 63 74 20 69 73  20 64 69 73 61 62 6c 65  |ffect is disable|
00010b30  64 2c 20 75 73 69 6e 67  20 3c 51 54 4d 5f 45 66  |d, using <QTM_Ef|
00010b40  66 65 63 74 43 6f 6e 74  72 6f 6c 3e 2c 20 74 68  |fectControl>, th|
00010b50  65 20 73 6f 6e 67 20 77  69 6c 6c 20 70 6c 61 79  |e song will play|
00010b60  20 61 74 20 74 68 65 20  6e 65 77 20 73 70 65 65  | at the new spee|
00010b70  64 20 75 6e 74 69 6c 20  69 74 20 69 73 20 73 74  |d until it is st|
00010b80  6f 70 70 65 64 2c 20 6f  72 20 27 46 27 20 65 66  |opped, or 'F' ef|
00010b90  66 65 63 74 73 20 61 72  65 20 65 6e 61 62 6c 65  |fects are enable|
00010ba0  64 20 61 67 61 69 6e 2e  0a 0a 54 68 65 20 63 75  |d again...The cu|
00010bb0  72 72 65 6e 74 20 73 70  65 65 64 20 61 6e 64 20  |rrent speed and |
00010bc0  74 65 6d 70 6f 20 63 61  6e 20 62 65 20 72 65 61  |tempo can be rea|
00010bd0  64 20 75 73 69 6e 67 20  3c 51 54 4d 5f 52 65 61  |d using <QTM_Rea|
00010be0  64 53 70 65 65 64 3e 2e  0a 0a 56 20 66 6c 61 67  |dSpeed>...V flag|
00010bf0  20 73 65 74 20 69 66 20  6e 6f 20 73 6f 6e 67 20  | set if no song |
00010c00  6c 6f 61 64 65 64 20 6f  72 20 74 68 65 20 6e 65  |loaded or the ne|
00010c10  77 20 73 70 65 65 64 2f  74 65 6d 70 6f 20 69 73  |w speed/tempo is|
00010c20  20 6f 75 74 20 6f 66 20  72 61 6e 67 65 2e 0a 00  | out of range...|
00010c30  44 41 54 41 71 01 00 00  53 74 61 6e 64 61 72 64  |DATAq...Standard|
00010c40  20 50 72 6f 54 72 61 63  6b 65 72 20 63 6f 6d 6d  | ProTracker comm|
00010c50  61 6e 64 73 2f 65 66 66  65 63 74 73 0a 23 54 61  |ands/effects.#Ta|
00010c60  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 30 30  |ble Columns 2.00|
00010c70  20 41 72 70 65 67 69 6f  0a 30 31 20 50 69 74 63  | Arpegio.01 Pitc|
00010c80  68 20 73 6c 69 64 65 20  75 70 0a 30 32 20 50 69  |h slide up.02 Pi|
00010c90  74 63 68 20 73 6c 69 64  65 20 64 6f 77 6e 0a 30  |tch slide down.0|
00010ca0  33 20 54 6f 6e 65 20 70  6f 72 74 61 6d 65 6e 74  |3 Tone portament|
00010cb0  6f 0a 30 34 20 56 69 62  72 61 74 6f 0a 30 35 20  |o.04 Vibrato.05 |
00010cc0  54 6f 6e 65 20 70 6f 72  74 61 6d 65 6e 74 6f 20  |Tone portamento |
00010cd0  2b 20 76 6f 6c 75 6d 65  20 73 6c 69 64 65 0a 30  |+ volume slide.0|
00010ce0  36 20 56 69 62 72 61 74  6f 20 2b 20 76 6f 6c 75  |6 Vibrato + volu|
00010cf0  6d 65 20 73 6c 69 64 65  0a 30 37 20 54 72 65 6d  |me slide.07 Trem|
00010d00  65 6c 6f 0a 30 38 20 5c  3c 6e 6f 74 20 75 73 65  |elo.08 \<not use|
00010d10  64 3e 0a 30 39 20 53 65  74 20 73 61 6d 70 6c 65  |d>.09 Set sample|
00010d20  20 6f 66 66 73 65 74 0a  30 41 20 56 6f 6c 75 6d  | offset.0A Volum|
00010d30  65 20 73 6c 69 64 65 0a  30 42 20 4a 75 6d 70 20  |e slide.0B Jump |
00010d40  74 6f 20 73 65 71 75 65  6e 63 65 0a 30 43 20 53  |to sequence.0C S|
00010d50  65 74 20 76 6f 6c 75 6d  65 0a 30 44 20 50 61 74  |et volume.0D Pat|
00010d60  74 65 72 6e 20 62 72 65  61 6b 0a 30 45 20 56 61  |tern break.0E Va|
00010d70  72 69 6f 75 73 2c 20 73  65 65 20 74 61 62 6c 65  |rious, see table|
00010d80  20 32 0a 30 46 20 53 65  74 20 73 70 65 65 64 20  | 2.0F Set speed |
00010d90  2f 20 74 65 6d 70 6f 0a  23 45 6e 64 54 61 62 6c  |/ tempo.#EndTabl|
00010da0  65 00 00 00 44 41 54 41  ad 01 00 00 27 45 27 20  |e...DATA....'E' |
00010db0  63 6f 6d 6d 61 6e 64 73  2f 65 66 66 65 63 74 73  |commands/effects|
00010dc0  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
00010dd0  32 0a 45 30 20 53 65 74  20 66 69 6c 74 65 72 20  |2.E0 Set filter |
00010de0  2a 0a 45 31 20 46 69 6e  65 20 70 69 74 63 68 20  |*.E1 Fine pitch |
00010df0  73 6c 69 64 65 20 75 70  0a 45 32 20 46 69 6e 65  |slide up.E2 Fine|
00010e00  20 70 69 74 63 68 20 73  6c 69 64 65 20 64 6f 77  | pitch slide dow|
00010e10  6e 0a 45 33 20 47 6c 69  73 73 61 6e 64 6f 20 63  |n.E3 Glissando c|
00010e20  6f 6e 74 72 6f 6c 0a 45  34 20 53 65 74 20 76 69  |ontrol.E4 Set vi|
00010e30  62 72 61 74 6f 20 77 61  76 65 66 6f 72 6d 0a 45  |brato waveform.E|
00010e40  35 20 53 65 74 20 66 69  6e 65 20 74 75 6e 69 6e  |5 Set fine tunin|
00010e50  67 0a 45 36 20 50 61 74  74 65 72 6e 20 6c 6f 6f  |g.E6 Pattern loo|
00010e60  70 0a 45 37 20 53 65 74  20 74 72 65 6d 65 6c 6f  |p.E7 Set tremelo|
00010e70  20 77 61 76 65 66 6f 72  6d 0a 45 38 20 5c 3c 6e  | waveform.E8 \<n|
00010e80  6f 74 20 75 73 65 64 3e  0a 45 39 20 52 65 74 72  |ot used>.E9 Retr|
00010e90  69 67 20 6e 6f 74 65 0a  45 41 20 46 69 6e 65 20  |ig note.EA Fine |
00010ea0  76 6f 6c 75 6d 65 20 73  6c 69 64 65 20 75 70 0a  |volume slide up.|
00010eb0  45 42 20 46 69 6e 65 20  76 6f 6c 75 6d 65 20 73  |EB Fine volume s|
00010ec0  6c 69 64 65 20 64 6f 77  6e 0a 45 43 20 4e 6f 74  |lide down.EC Not|
00010ed0  65 20 63 75 74 0a 45 44  20 4e 6f 74 65 20 64 65  |e cut.ED Note de|
00010ee0  6c 61 79 0a 45 45 20 50  61 74 74 65 72 6e 20 64  |lay.EE Pattern d|
00010ef0  65 6c 61 79 0a 45 46 20  49 6e 76 65 72 74 20 6c  |elay.EF Invert l|
00010f00  6f 6f 70 0a 23 45 6e 64  54 61 62 6c 65 0a 0a 2a  |oop.#EndTable..*|
00010f10  20 54 68 65 20 27 53 65  74 20 66 69 6c 74 65 72  | The 'Set filter|
00010f20  27 20 63 6f 6d 6d 61 6e  64 20 63 61 6e 27 74 20  |' command can't |
00010f30  62 65 20 69 6d 70 6c 65  6d 65 6e 74 65 64 20 6f  |be implemented o|
00010f40  6e 20 74 68 65 20 41 72  63 68 69 6d 65 64 65 73  |n the Archimedes|
00010f50  2e 00 00 00 44 49 52 24  d8 00 00 00 d8 00 00 00  |....DIR$........|
00010f60  2c 10 01 00 46 fd ff ff  e1 05 2a 43 77 00 00 00  |,...F.....*Cw...|
00010f70  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00010f80  a4 10 01 00 46 ff ff ff  6f cc 87 4d 49 01 00 00  |....F...o..MI...|
00010f90  13 00 00 00 00 00 00 00  46 69 6c 65 49 6e 66 6f  |........FileInfo|
00010fa0  00 00 00 00 f0 11 01 00  46 ff ff ff bb d9 87 4d  |........F......M|
00010fb0  04 02 00 00 13 00 00 00  00 00 00 00 4d 65 73 73  |............Mess|
00010fc0  61 67 65 00 f4 13 01 00  46 ff ff ff 76 c9 87 4d  |age.....F...v..M|
00010fd0  f9 00 00 00 13 00 00 00  00 00 00 00 4e 65 77 4d  |............NewM|
00010fe0  65 73 73 61 67 65 73 00  f0 14 01 00 46 fd ff ff  |essages.....F...|
00010ff0  66 a2 b0 3f 72 00 00 00  13 00 00 00 00 00 00 00  |f..?r...........|
00011000  6f 70 65 72 61 74 69 6f  6e 00 00 00 64 15 01 00  |operation...d...|
00011010  46 ff ff ff 73 d4 87 4d  b4 00 00 00 13 00 00 00  |F...s..M........|
00011020  00 00 00 00 49 73 4e 65  77 00 00 00 44 41 54 41  |....IsNew...DATA|
00011030  77 00 00 00 52 65 61 64  4d 61 69 6c 0a 23 50 61  |w...ReadMail.#Pa|
00011040  72 65 6e 74 20 21 52 6f  6f 74 0a 23 50 72 65 66  |rent !Root.#Pref|
00011050  69 78 20 52 65 61 64 4d  61 69 6c 5f 0a 23 54 61  |ix ReadMail_.#Ta|
00011060  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 31 0a 3c 46  |ble Columns 1.<F|
00011070  69 6c 65 49 6e 66 6f 3e  0a 3c 4d 65 73 73 61 67  |ileInfo>.<Messag|
00011080  65 3e 0a 3c 4e 65 77 4d  65 73 73 61 67 65 73 3e  |e>.<NewMessages>|
00011090  0a 3c 49 73 4e 65 77 3e  0a 23 45 6e 64 54 61 62  |.<IsNew>.#EndTab|
000110a0  6c 65 0a 00 44 41 54 41  49 01 00 00 52 65 61 64  |le..DATAI...Read|
000110b0  4d 61 69 6c 5f 46 69 6c  65 49 6e 66 6f 20 28 26  |Mail_FileInfo (&|
000110c0  34 36 38 30 30 29 0a 23  50 61 72 65 6e 74 20 52  |46800).#Parent R|
000110d0  65 61 64 4d 61 69 6c 5f  0a 5c 3c 3d 09 52 30 20  |eadMail_.\<=.R0 |
000110e0  3d 09 6e 75 6d 62 65 72  20 6f 66 20 6d 65 73 73  |=.number of mess|
000110f0  61 67 65 73 20 72 65 61  64 2c 20 6f 72 20 2d 31  |ages read, or -1|
00011100  20 69 66 20 66 69 6c 65  20 6e 6f 74 20 73 65 65  | if file not see|
00011110  6e 0a 09 52 31 20 3d 09  6e 75 6d 62 65 72 20 6f  |n..R1 =.number o|
00011120  66 20 6e 65 77 20 6d 65  73 73 61 67 65 73 20 72  |f new messages r|
00011130  65 61 64 0a 0a 54 68 69  73 20 72 65 61 64 73 20  |ead..This reads |
00011140  69 6e 66 6f 72 6d 61 74  69 6f 6e 20 61 62 6f 75  |information abou|
00011150  74 20 74 68 65 20 52 65  61 64 4d 61 69 6c 20 6d  |t the ReadMail m|
00011160  65 73 73 61 67 65 20 62  61 73 65 20 66 69 6c 65  |essage base file|
00011170  73 20 77 68 69 63 68 20  68 61 76 65 20 62 65 65  |s which have bee|
00011180  6e 20 73 65 65 6e 20 62  79 20 74 68 65 20 6d 6f  |n seen by the mo|
00011190  64 75 6c 65 2e 20 54 6f  20 6e 6f 74 69 66 79 20  |dule. To notify |
000111a0  74 68 65 20 6d 6f 64 75  6c 65 20 74 68 61 74 20  |the module that |
000111b0  74 68 65 20 4c 69 73 74  20 6f 72 20 4e 65 77 20  |the List or New |
000111c0  66 69 6c 65 20 68 61 73  20 63 68 61 6e 67 65 64  |file has changed|
000111d0  2c 20 75 73 65 20 3c 52  65 61 64 4d 61 69 6c 5f  |, use <ReadMail_|
000111e0  4e 65 77 4d 65 73 73 61  67 65 73 3e 2e 00 00 00  |NewMessages>....|
000111f0  44 41 54 41 04 02 00 00  52 65 61 64 4d 61 69 6c  |DATA....ReadMail|
00011200  5f 4d 65 73 73 61 67 65  20 28 26 34 36 38 30 31  |_Message (&46801|
00011210  29 0a 23 50 61 72 65 6e  74 20 52 65 61 64 4d 61  |).#Parent ReadMa|
00011220  69 6c 5f 0a 3d 3e 09 52  30 20 3d 09 66 69 6c 65  |il_.=>.R0 =.file|
00011230  20 6e 75 6d 62 65 72 20  74 6f 20 66 69 6e 64 0a  | number to find.|
00011240  09 52 31 20 3d 09 3c 6f  70 65 72 61 74 69 6f 6e  |.R1 =.<operation|
00011250  20 63 6f 64 65 3d 3e 52  65 61 64 4d 61 69 6c 5f  | code=>ReadMail_|
00011260  6f 70 65 72 61 74 69 6f  6e 3e 0a 09 52 32 20 3d  |operation>..R2 =|
00011270  09 55 6e 75 73 65 64 0a  09 52 33 20 3d 09 70 72  |.Unused..R3 =.pr|
00011280  65 76 69 6f 75 73 20 66  69 6c 65 20 69 6e 20 63  |evious file in c|
00011290  68 61 69 6e 20 28 6f 72  20 2d 31 20 74 6f 20 6c  |hain (or -1 to l|
000112a0  65 61 76 65 20 75 6e 63  68 61 6e 67 65 64 29 0a  |eave unchanged).|
000112b0  09 52 34 20 3d 09 6e 65  78 74 20 66 69 6c 65 20  |.R4 =.next file |
000112c0  69 6e 20 63 68 61 69 6e  20 28 6f 72 20 2d 31 20  |in chain (or -1 |
000112d0  74 6f 20 6c 65 61 76 65  20 75 6e 63 68 61 6e 67  |to leave unchang|
000112e0  65 64 29 0a 0a 5c 3c 3d  09 52 30 20 70 72 65 73  |ed)..\<=.R0 pres|
000112f0  65 72 76 65 64 0a 09 52  31 20 3d 09 70 6f 69 6e  |erved..R1 =.poin|
00011300  74 65 72 20 74 6f 20 6c  69 6e 65 20 69 6e 20 4c  |ter to line in L|
00011310  69 73 74 20 66 69 6c 65  2c 20 6f 72 20 2d 31 20  |ist file, or -1 |
00011320  69 66 20 6e 6f 74 20 66  6f 75 6e 64 0a 09 52 32  |if not found..R2|
00011330  20 3d 09 72 65 61 6c 20  6d 65 73 73 61 67 65 20  | =.real message |
00011340  6e 75 6d 62 65 72 0a 09  52 33 20 3d 09 70 72 65  |number..R3 =.pre|
00011350  76 69 6f 75 73 20 66 69  6c 65 20 69 6e 20 63 68  |vious file in ch|
00011360  61 69 6e 0a 09 52 34 20  3d 09 6e 65 78 74 20 66  |ain..R4 =.next f|
00011370  69 6c 65 20 69 6e 20 63  68 61 69 6e 0a 0a 54 68  |ile in chain..Th|
00011380  69 73 20 63 61 6c 6c 20  74 72 69 65 73 20 74 6f  |is call tries to|
00011390  20 66 69 6e 64 20 61 20  70 61 72 74 69 63 75 6c  | find a particul|
000113a0  61 72 20 66 69 6c 65 27  73 20 69 6e 66 6f 72 6d  |ar file's inform|
000113b0  61 74 69 6f 6e 20 61 6e  64 20 72 65 74 75 72 6e  |ation and return|
000113c0  73 20 69 74 2c 20 6f 72  20 73 65 74 73 20 74 68  |s it, or sets th|
000113d0  65 20 69 6e 66 6f 72 6d  61 74 69 6f 6e 20 69 6e  |e information in|
000113e0  20 74 68 65 20 6d 6f 64  75 6c 65 27 73 20 62 6c  | the module's bl|
000113f0  6f 63 6b 2e 44 41 54 41  f9 00 00 00 52 65 61 64  |ock.DATA....Read|
00011400  4d 61 69 6c 5f 4e 65 77  4d 65 73 73 61 67 65 73  |Mail_NewMessages|
00011410  20 28 26 34 36 38 30 31  29 0a 23 50 61 72 65 6e  | (&46801).#Paren|
00011420  74 20 52 65 61 64 4d 61  69 6c 5f 0a 5c 3c 3d 09  |t ReadMail_.\<=.|
00011430  52 30 20 3d 09 4e 75 6d  62 65 72 20 6f 66 20 6d  |R0 =.Number of m|
00011440  65 73 73 61 67 65 73 20  69 6e 20 62 61 73 65 0a  |essages in base.|
00011450  09 52 31 20 3d 09 4e 75  6d 62 65 72 20 6f 66 20  |.R1 =.Number of |
00011460  6e 65 77 20 66 69 6c 65  73 20 69 6e 20 62 61 73  |new files in bas|
00011470  65 0a 0a 54 68 69 73 20  63 61 6c 6c 20 6e 6f 74  |e..This call not|
00011480  69 66 69 65 73 20 74 68  65 20 52 65 61 64 4d 61  |ifies the ReadMa|
00011490  69 6c 20 6d 6f 64 75 6c  65 20 74 68 61 74 20 74  |il module that t|
000114a0  68 65 20 6d 65 73 73 61  67 65 20 62 61 73 65 20  |he message base |
000114b0  4c 69 73 74 20 28 6f 72  20 4e 65 77 29 20 66 69  |List (or New) fi|
000114c0  6c 65 20 68 61 73 20 62  65 65 6e 20 61 6c 74 65  |le has been alte|
000114d0  72 65 64 20 61 6e 64 20  69 74 20 6e 65 65 64 73  |red and it needs|
000114e0  20 74 6f 20 72 65 61 64  20 69 74 2e 0a 00 00 00  | to read it.....|
000114f0  44 41 54 41 72 00 00 00  4f 70 65 72 61 74 69 6f  |DATAr...Operatio|
00011500  6e 20 63 6f 64 65 73 0a  23 57 72 61 70 20 4f 66  |n codes.#Wrap Of|
00011510  66 0a 43 6f 64 65 09 4d  65 61 6e 69 6e 67 0a 23  |f.Code.Meaning.#|
00011520  4c 69 6e 65 0a 2d 31 09  44 65 6c 65 74 65 20 6d  |Line.-1.Delete m|
00011530  65 73 73 61 67 65 0a 30  09 44 6f 6e 27 74 20 61  |essage.0.Don't a|
00011540  6c 74 65 72 20 6d 65 73  73 61 67 65 0a 31 09 53  |lter message.1.S|
00011550  65 74 20 64 61 74 61 20  61 73 20 70 61 73 73 65  |et data as passe|
00011560  64 0a 00 00 44 41 54 41  b4 00 00 00 52 65 61 64  |d...DATA....Read|
00011570  4d 61 69 6c 5f 49 73 4e  65 77 20 28 26 34 36 38  |Mail_IsNew (&468|
00011580  30 33 29 0a 23 50 61 72  65 6e 74 20 52 65 61 64  |03).#Parent Read|
00011590  4d 61 69 6c 5f 0a 3d 3e  09 52 30 20 3d 09 6e 75  |Mail_.=>.R0 =.nu|
000115a0  6d 62 65 72 20 6f 66 20  66 69 6c 65 20 74 6f 20  |mber of file to |
000115b0  63 68 65 63 6b 0a 5c 3c  3d 09 52 30 20 3d 09 30  |check.\<=.R0 =.0|
000115c0  20 69 66 20 6e 6f 74 20  6e 65 77 2c 20 2d 31 20  | if not new, -1 |
000115d0  69 66 20 6e 65 77 0a 0a  54 68 69 73 20 53 57 49  |if new..This SWI|
000115e0  20 63 68 65 63 6b 73 20  74 68 65 20 6e 65 77 20  | checks the new |
000115f0  66 69 6c 65 73 20 6c 6f  67 20 74 6f 20 63 68 65  |files log to che|
00011600  63 6b 20 69 66 20 74 68  65 20 66 69 6c 65 20 69  |ck if the file i|
00011610  73 20 74 68 65 72 65 2e  44 49 52 24 2c 00 00 00  |s there.DIR$,...|
00011620  2c 00 00 00 44 16 01 00  46 fd ff ff 71 4c c7 13  |,...D...F...qL..|
00011630  80 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
00011640  74 00 00 00 44 41 54 41  80 00 00 00 52 4f 4d 43  |t...DATA....ROMC|
00011650  61 63 68 65 0a 23 50 61  72 65 6e 74 20 21 52 6f  |ache.#Parent !Ro|
00011660  6f 74 0a 23 50 72 65 66  69 78 20 52 4f 4d 43 61  |ot.#Prefix ROMCa|
00011670  63 68 65 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |che_.#Table Colu|
00011680  6d 6e 73 20 32 0a 43 61  63 68 65 0a 4c 69 6e 6b  |mns 2.Cache.Link|
00011690  0a 4c 6f 61 64 0a 53 77  61 70 0a 55 6e 63 61 63  |.Load.Swap.Uncac|
000116a0  68 65 0a 53 61 76 65 0a  53 65 74 53 74 61 74 65  |he.Save.SetState|
000116b0  0a 41 6c 6c 6f 63 61 74  65 0a 23 45 6e 64 54 61  |.Allocate.#EndTa|
000116c0  62 6c 65 0a 44 49 52 24  ec 00 00 00 ec 00 00 00  |ble.DIR$........|
000116d0  b0 17 01 00 47 fd ff ff  1b 8d 97 e9 76 00 00 00  |....G.......v...|
000116e0  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
000116f0  28 18 01 00 47 ff ff ff  39 40 13 fd 08 06 00 00  |(...G...9@......|
00011700  13 00 00 00 00 00 00 00  63 6f 64 65 00 00 00 00  |........code....|
00011710  30 1e 01 00 47 ff ff ff  ea 99 98 e9 c9 02 00 00  |0...G...........|
00011720  13 00 00 00 00 00 00 00  49 6e 66 6f 00 00 00 00  |........Info....|
00011730  fc 20 01 00 47 ff ff ff  a7 d7 98 e9 94 01 00 00  |. ..G...........|
00011740  13 00 00 00 00 00 00 00  4c 69 6e 6b 00 00 00 00  |........Link....|
00011750  90 22 01 00 47 ff ff ff  ec 24 99 e9 63 02 00 00  |."..G....$..c...|
00011760  13 00 00 00 00 00 00 00  4d 65 6d 6f 72 79 00 00  |........Memory..|
00011770  f4 24 01 00 47 ff ff ff  bb 47 13 fd 6c 05 00 00  |.$..G....G..l...|
00011780  13 00 00 00 00 00 00 00  75 73 65 72 00 00 00 00  |........user....|
00011790  60 2a 01 00 47 ff ff ff  5c f5 99 e9 be 04 00 00  |`*..G...\.......|
000117a0  13 00 00 00 00 00 00 00  55 74 69 6c 00 00 00 00  |........Util....|
000117b0  44 41 54 41 76 00 00 00  53 70 61 72 6b 46 53 0a  |DATAv...SparkFS.|
000117c0  23 50 61 72 65 6e 74 20  21 52 6f 6f 74 0a 23 50  |#Parent !Root.#P|
000117d0  72 65 66 69 78 20 53 70  61 72 6b 46 53 5f 0a 23  |refix SparkFS_.#|
000117e0  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
000117f0  3c 43 6f 64 65 3e 0a 3c  49 6e 66 6f 3e 0a 3c 4c  |<Code>.<Info>.<L|
00011800  69 6e 6b 3e 0a 3c 4d 65  6d 6f 72 79 3e 0a 3c 55  |ink>.<Memory>.<U|
00011810  73 65 72 3e 0a 3c 55 74  69 6c 3e 0a 23 45 6e 64  |ser>.<Util>.#End|
00011820  54 61 62 6c 65 0a 00 00  44 41 54 41 08 06 00 00  |Table...DATA....|
00011830  53 70 61 72 6b 46 53 5f  43 6f 64 65 20 28 26 34  |SparkFS_Code (&4|
00011840  34 35 43 33 29 0a 23 50  61 72 65 6e 74 20 53 70  |45C3).#Parent Sp|
00011850  61 72 6b 46 53 5f 0a 3d  3e 09 52 30 20 3d 09 72  |arkFS_.=>.R0 =.r|
00011860  65 61 73 6f 6e 20 63 6f  64 65 20 6e 75 6d 62 65  |eason code numbe|
00011870  72 0a 09 20 09 20 20 30  09 3c 43 52 43 20 31 36  |r.. .  0.<CRC 16|
00011880  20 62 6c 6f 63 6b 3d 3e  2e 63 6f 64 65 30 3e 0a  | block=>.code0>.|
00011890  09 20 09 20 20 31 09 3c  43 52 43 20 33 32 20 62  |. .  1.<CRC 32 b|
000118a0  6c 6f 63 6b 3d 3e 2e 63  6f 64 65 31 3e 0a 09 20  |lock=>.code1>.. |
000118b0  09 20 20 32 09 3c 4f 70  65 6e 20 65 6e 63 72 79  |.  2.<Open encry|
000118c0  70 74 3d 3e 2e 63 6f 64  65 32 3e 0a 09 20 09 20  |pt=>.code2>.. . |
000118d0  20 33 09 3c 45 6e 63 72  79 70 74 20 62 6c 6f 63  | 3.<Encrypt bloc|
000118e0  6b 3d 3e 2e 63 6f 64 65  33 3e 0a 09 20 09 20 20  |k=>.code3>.. .  |
000118f0  34 09 3c 44 65 63 72 79  70 74 20 62 6c 6f 63 6b  |4.<Decrypt block|
00011900  3d 3e 2e 63 6f 64 65 34  3e 0a 09 20 09 20 20 35  |=>.code4>.. .  5|
00011910  09 3c 43 6c 6f 73 65 20  65 6e 63 72 79 70 74 3d  |.<Close encrypt=|
00011920  3e 2e 63 6f 64 65 35 3e  0a 0a 54 68 69 73 20 53  |>.code5>..This S|
00011930  57 49 20 69 73 20 75 73  65 64 20 74 6f 20 64 6f  |WI is used to do|
00011940  20 64 69 66 66 65 72 65  6e 74 20 66 6f 72 6d 73  | different forms|
00011950  20 6f 66 20 65 6e 63 6f  64 69 6e 67 20 6f 6e 20  | of encoding on |
00011960  64 61 74 61 2e 0a 23 53  75 62 70 61 67 65 20 63  |data..#Subpage c|
00011970  6f 64 65 30 0a 43 52 43  20 31 36 20 62 6c 6f 63  |ode0.CRC 16 bloc|
00011980  6b 20 28 30 29 0a 3d 3e  09 52 30 20 3d 09 30 20  |k (0).=>.R0 =.0 |
00011990  28 72 65 61 73 6f 6e 20  63 6f 64 65 29 0a 09 52  |(reason code)..R|
000119a0  31 20 3d 09 43 52 43 20  69 6e 0a 09 52 32 20 3d  |1 =.CRC in..R2 =|
000119b0  09 70 6f 69 6e 74 65 72  20 74 6f 20 64 61 74 61  |.pointer to data|
000119c0  20 62 6c 6f 63 6b 0a 09  52 33 20 3d 09 6c 65 6e  | block..R3 =.len|
000119d0  67 74 68 20 6f 66 20 64  61 74 61 0a 0a 3c 3d 09  |gth of data..<=.|
000119e0  52 31 20 3d 09 43 52 43  20 6f 75 74 0a 0a 54 68  |R1 =.CRC out..Th|
000119f0  69 73 20 63 61 6c 6c 20  77 69 6c 6c 20 63 61 6c  |is call will cal|
00011a00  63 75 6c 61 74 65 20 61  20 31 36 2d 62 69 74 20  |culate a 16-bit |
00011a10  43 52 43 20 76 61 6c 75  65 20 66 6f 72 20 61 20  |CRC value for a |
00011a20  62 6c 6f 63 6b 20 6f 66  20 64 61 74 61 2e 0a 23  |block of data..#|
00011a30  73 75 62 70 61 67 65 20  63 6f 64 65 31 0a 43 52  |subpage code1.CR|
00011a40  43 20 33 32 20 62 6c 6f  63 6b 20 28 31 29 0a 3d  |C 32 block (1).=|
00011a50  3e 09 52 30 20 3d 09 31  20 28 72 65 61 73 6f 6e  |>.R0 =.1 (reason|
00011a60  20 63 6f 64 65 29 0a 09  52 31 20 3d 09 43 52 43  | code)..R1 =.CRC|
00011a70  20 69 6e 0a 09 52 32 20  3d 09 70 6f 69 6e 74 65  | in..R2 =.pointe|
00011a80  72 20 74 6f 20 64 61 74  61 20 62 6c 6f 63 6b 0a  |r to data block.|
00011a90  09 52 33 20 3d 09 6c 65  6e 67 74 68 0a 0a 3c 3d  |.R3 =.length..<=|
00011aa0  09 52 31 20 3d 20 43 52  43 20 6f 75 74 0a 54 68  |.R1 = CRC out.Th|
00011ab0  69 73 20 63 61 6c 6c 20  77 69 6c 6c 20 63 61 6c  |is call will cal|
00011ac0  63 75 6c 61 74 65 20 61  20 33 32 2d 62 69 74 20  |culate a 32-bit |
00011ad0  43 52 43 20 76 61 6c 75  65 20 66 6f 72 20 61 20  |CRC value for a |
00011ae0  62 6c 6f 63 6b 20 6f 66  20 64 61 74 61 2e 0a 23  |block of data..#|
00011af0  73 75 62 70 61 67 65 20  63 6f 64 65 32 0a 4f 70  |subpage code2.Op|
00011b00  65 6e 20 45 6e 63 72 79  70 74 20 28 32 29 0a 3d  |en Encrypt (2).=|
00011b10  3e 09 52 30 20 3d 09 32  20 28 72 65 61 73 6f 6e  |>.R0 =.2 (reason|
00011b20  20 63 6f 64 65 29 0a 09  52 31 20 3d 09 74 79 70  | code)..R1 =.typ|
00011b30  65 20 28 31 20 66 6f 72  20 47 61 72 62 6c 65 2c  |e (1 for Garble,|
00011b40  20 32 20 66 6f 72 20 44  45 53 29 0a 09 52 32 20  | 2 for DES)..R2 |
00011b50  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 70 61 73  |=.pointer to pas|
00011b60  73 77 6f 72 64 0a 0a 54  68 69 73 20 63 61 6c 6c  |sword..This call|
00011b70  20 69 73 20 75 73 65 64  20 74 6f 20 73 74 61 72  | is used to star|
00011b80  74 20 61 6e 20 65 6e 63  72 79 70 74 20 6f 72 20  |t an encrypt or |
00011b90  64 65 63 72 79 70 74 69  6f 6e 67 20 73 65 73 73  |decryptiong sess|
00011ba0  69 6f 6e 2e 0a 23 73 75  62 70 61 67 65 20 63 6f  |ion..#subpage co|
00011bb0  64 65 33 0a 45 6e 63 72  79 70 74 20 62 6c 6f 63  |de3.Encrypt bloc|
00011bc0  6b 20 28 33 29 0a 3d 3e  09 52 30 20 3d 09 33 20  |k (3).=>.R0 =.3 |
00011bd0  28 72 65 61 73 6f 6e 20  63 6f 64 65 29 0a 09 52  |(reason code)..R|
00011be0  31 20 3d 09 74 79 70 65  20 28 31 20 66 6f 72 20  |1 =.type (1 for |
00011bf0  47 61 72 62 6c 65 2c 20  32 20 66 6f 72 20 44 45  |Garble, 2 for DE|
00011c00  53 29 0a 09 52 32 20 3d  09 70 6f 69 6e 74 65 72  |S)..R2 =.pointer|
00011c10  20 74 6f 20 64 61 74 61  20 62 6c 6f 63 6b 0a 09  | to data block..|
00011c20  52 33 20 3d 09 6c 65 6e  67 74 68 0a 0a 54 68 69  |R3 =.length..Thi|
00011c30  73 20 63 61 6c 6c 20 77  69 6c 6c 20 65 6e 63 72  |s call will encr|
00011c40  79 70 74 20 61 20 62 6c  6f 63 6b 20 6f 66 20 64  |ypt a block of d|
00011c50  61 74 61 20 75 73 69 6e  67 20 74 68 65 20 70 61  |ata using the pa|
00011c60  73 73 77 6f 72 64 20 67  69 76 65 6e 20 69 6e 20  |ssword given in |
00011c70  74 68 65 20 70 72 65 76  69 6f 75 73 20 63 61 6c  |the previous cal|
00011c80  6c 20 74 6f 20 3c 53 70  61 72 6b 46 53 5f 43 6f  |l to <SparkFS_Co|
00011c90  64 65 20 32 3d 3e 2e 63  6f 64 65 32 3e 2e 0a 23  |de 2=>.code2>..#|
00011ca0  73 75 62 70 61 67 65 20  63 6f 64 65 34 0a 44 65  |subpage code4.De|
00011cb0  63 72 79 70 74 20 62 6c  6f 63 6b 20 28 34 29 0a  |crypt block (4).|
00011cc0  3d 3e 09 52 30 20 3d 09  34 20 28 72 65 61 73 6f  |=>.R0 =.4 (reaso|
00011cd0  6e 20 63 6f 64 65 29 0a  09 52 31 20 3d 09 74 79  |n code)..R1 =.ty|
00011ce0  70 65 20 28 31 20 66 6f  72 20 47 61 72 62 6c 65  |pe (1 for Garble|
00011cf0  2c 20 32 20 66 6f 72 20  44 45 53 29 0a 09 52 32  |, 2 for DES)..R2|
00011d00  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 64 61  | =.pointer to da|
00011d10  74 61 20 62 6c 6f 63 6b  0a 09 52 33 20 3d 09 6c  |ta block..R3 =.l|
00011d20  65 6e 67 74 68 0a 0a 54  68 69 73 20 63 61 6c 6c  |ength..This call|
00011d30  20 77 69 6c 6c 20 64 65  63 72 79 70 74 20 61 20  | will decrypt a |
00011d40  70 72 65 76 69 6f 75 73  6c 79 20 65 6e 63 72 79  |previously encry|
00011d50  70 74 65 64 20 62 6c 6f  63 6b 20 6f 66 20 64 61  |pted block of da|
00011d60  74 61 2c 20 69 66 20 74  68 65 20 70 61 73 73 77  |ta, if the passw|
00011d70  6f 72 64 20 6d 61 74 63  68 65 73 20 74 68 61 74  |ord matches that|
00011d80  20 67 69 76 65 6e 20 62  79 20 3c 53 70 61 72 6b  | given by <Spark|
00011d90  46 53 5f 43 6f 64 65 20  32 3d 3e 2e 63 6f 64 65  |FS_Code 2=>.code|
00011da0  32 3e 2e 0a 23 73 75 62  70 61 67 65 20 63 6f 64  |2>..#subpage cod|
00011db0  65 35 0a 43 6c 6f 73 65  20 45 6e 63 72 79 70 74  |e5.Close Encrypt|
00011dc0  20 28 35 29 0a 3d 3e 09  52 30 20 3d 09 35 20 28  | (5).=>.R0 =.5 (|
00011dd0  72 65 61 73 6f 6e 20 63  6f 64 65 29 0a 09 52 31  |reason code)..R1|
00011de0  20 3d 09 74 79 70 65 20  28 31 20 66 6f 72 20 47  | =.type (1 for G|
00011df0  61 72 62 6c 65 2c 20 32  20 66 6f 72 20 44 45 53  |arble, 2 for DES|
00011e00  29 0a 0a 54 68 69 73 20  63 61 6c 6c 20 77 69 6c  |)..This call wil|
00011e10  6c 20 74 65 72 6d 69 6e  61 74 65 20 61 6e 20 65  |l terminate an e|
00011e20  6e 63 72 79 70 74 20 73  65 73 73 69 6f 6e 2e 0a  |ncrypt session..|
00011e30  44 41 54 41 c9 02 00 00  53 70 61 72 6b 46 53 5f  |DATA....SparkFS_|
00011e40  49 6e 66 6f 20 28 26 34  34 35 43 32 29 0a 23 50  |Info (&445C2).#P|
00011e50  61 72 65 6e 74 20 53 70  61 72 6b 46 53 5f 0a 3d  |arent SparkFS_.=|
00011e60  3e 09 52 30 20 3d 09 72  65 61 73 6f 6e 20 63 6f  |>.R0 =.reason co|
00011e70  64 65 20 6e 75 6d 62 65  72 0a 09 20 09 20 20 30  |de number.. .  0|
00011e80  09 3c 41 72 63 68 69 76  65 20 69 6e 66 6f 3d 3e  |.<Archive info=>|
00011e90  2e 63 6f 64 65 30 3e 0a  09 20 09 20 20 31 09 3c  |.code0>.. .  1.<|
00011ea0  4d 6f 64 75 6c 65 20 69  6e 66 6f 3d 3e 2e 63 6f  |Module info=>.co|
00011eb0  64 65 31 3e 0a 0a 54 68  69 73 20 63 61 6c 6c 20  |de1>..This call |
00011ec0  69 73 20 75 73 65 64 20  74 6f 20 65 78 74 72 61  |is used to extra|
00011ed0  63 74 20 69 6e 66 6f 72  6d 61 74 69 6f 6e 20 66  |ct information f|
00011ee0  72 6f 6d 20 53 70 61 72  6b 46 53 2e 0a 23 73 75  |rom SparkFS..#su|
00011ef0  62 70 61 67 65 20 63 6f  64 65 30 0a 41 72 63 68  |bpage code0.Arch|
00011f00  69 76 65 20 69 6e 66 6f  20 28 30 29 0a 3d 3e 09  |ive info (0).=>.|
00011f10  52 30 20 3d 09 30 20 28  72 65 61 73 6f 6e 20 63  |R0 =.0 (reason c|
00011f20  6f 64 65 29 0a 09 52 31  20 3d 09 70 6f 69 6e 74  |ode)..R1 =.point|
00011f30  65 72 20 74 6f 20 61 72  63 68 69 76 65 20 70 61  |er to archive pa|
00011f40  74 68 6e 61 6d 65 0a 3c  3d 09 52 31 20 3d 09 70  |thname.<=.R1 =.p|
00011f50  6f 69 6e 74 65 72 20 74  6f 20 61 72 63 68 69 76  |ointer to archiv|
00011f60  65 20 73 74 72 75 63 74  75 72 65 0a 0a 54 68 69  |e structure..Thi|
00011f70  73 20 63 61 6c 6c 20 69  73 20 75 73 65 64 20 74  |s call is used t|
00011f80  6f 20 72 65 61 64 20 69  6e 66 6f 72 6d 61 74 69  |o read informati|
00011f90  6f 6e 20 61 62 6f 75 74  20 61 6e 20 61 72 63 68  |on about an arch|
00011fa0  69 76 65 2e 0a 23 73 75  62 70 61 67 65 20 63 6f  |ive..#subpage co|
00011fb0  64 65 31 0a 4d 6f 64 75  6c 65 20 69 6e 66 6f 20  |de1.Module info |
00011fc0  28 31 29 0a 3d 3e 09 52  30 20 3d 09 31 20 28 72  |(1).=>.R0 =.1 (r|
00011fd0  65 61 73 6f 6e 20 63 6f  64 65 29 0a 09 52 31 20  |eason code)..R1 |
00011fe0  3d 09 6d 6f 64 75 6c 65  20 6e 75 6d 62 65 72 0a  |=.module number.|
00011ff0  3c 3d 09 52 30 20 3d 09  30 20 6e 6f 20 6d 6f 64  |<=.R0 =.0 no mod|
00012000  75 6c 65 2c 20 2d 31 20  6e 6f 20 6d 6f 72 65 20  |ule, -1 no more |
00012010  6d 6f 64 75 6c 65 73 0a  09 52 31 20 3d 09 70 6f  |modules..R1 =.po|
00012020  69 6e 74 65 72 20 74 6f  20 61 72 63 68 69 76 65  |inter to archive|
00012030  20 69 6e 66 6f 0a 09 52  32 20 3d 09 70 6f 69 6e  | info..R2 =.poin|
00012040  74 65 72 20 74 6f 20 63  6f 6d 70 72 65 73 73 69  |ter to compressi|
00012050  6f 6e 20 69 6e 66 6f 0a  09 52 33 20 3d 09 70 6f  |on info..R3 =.po|
00012060  69 6e 74 65 72 20 74 6f  20 63 6f 64 65 20 69 6e  |inter to code in|
00012070  66 6f 0a 09 52 34 20 3d  09 70 6f 69 6e 74 65 72  |fo..R4 =.pointer|
00012080  20 63 6f 6e 76 65 72 74  20 69 6e 66 6f 0a 09 52  | convert info..R|
00012090  35 20 3d 09 70 6f 69 6e  74 65 72 20 6d 6f 64 75  |5 =.pointer modu|
000120a0  6c 65 20 62 61 73 65 0a  0a 54 68 69 73 20 63 61  |le base..This ca|
000120b0  6c 6c 20 69 73 20 75 73  65 64 20 74 6f 20 65 78  |ll is used to ex|
000120c0  74 72 61 63 74 20 69 6e  66 6f 72 6d 61 74 69 6f  |tract informatio|
000120d0  6e 20 61 62 6f 75 74 20  6d 6f 64 75 6c 65 73 20  |n about modules |
000120e0  72 65 67 69 73 74 65 72  65 64 20 77 69 74 68 20  |registered with |
000120f0  53 70 61 72 6b 46 53 2e  0a 00 00 00 44 41 54 41  |SparkFS.....DATA|
00012100  94 01 00 00 53 70 61 72  6b 46 53 5f 4c 69 6e 6b  |....SparkFS_Link|
00012110  20 28 26 34 34 35 43 30  29 0a 23 50 61 72 65 6e  | (&445C0).#Paren|
00012120  74 20 53 70 61 72 6b 46  53 5f 0a 3d 3e 09 52 30  |t SparkFS_.=>.R0|
00012130  20 3d 09 72 65 61 73 6f  6e 20 63 6f 64 65 20 6e  | =.reason code n|
00012140  75 6d 62 65 72 0a 09 20  09 20 20 30 09 3c 41 64  |umber.. .  0.<Ad|
00012150  64 20 6e 65 77 20 6c 69  6e 6b 3d 3e 2e 63 6f 64  |d new link=>.cod|
00012160  65 30 3e 0a 09 20 09 20  20 31 09 3c 52 65 6d 6f  |e0>.. .  1.<Remo|
00012170  76 65 20 6c 69 6e 6b 3d  3e 2e 63 6f 64 65 31 3e  |ve link=>.code1>|
00012180  0a 0a 54 68 69 73 20 63  61 6c 6c 20 69 73 20 75  |..This call is u|
00012190  73 65 64 20 74 6f 20 70  65 72 66 6f 72 6d 20 6f  |sed to perform o|
000121a0  70 65 72 61 74 69 6f 6e  73 20 6f 6e 20 27 6c 69  |perations on 'li|
000121b0  6e 6b 73 27 2e 0a 23 73  75 62 70 61 67 65 20 63  |nks'..#subpage c|
000121c0  6f 64 65 30 0a 41 64 64  20 6e 65 77 20 6c 69 6e  |ode0.Add new lin|
000121d0  6b 20 28 30 29 0a 3d 3e  09 52 30 20 3d 09 30 20  |k (0).=>.R0 =.0 |
000121e0  28 72 65 61 73 6f 6e 20  63 6f 64 65 29 0a 09 52  |(reason code)..R|
000121f0  31 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 66  |1 =.pointer to f|
00012200  6c 69 6e 6b 0a 09 52 32  20 3d 09 70 6f 69 6e 74  |link..R2 =.point|
00012210  65 72 20 74 6f 20 70 72  69 76 61 74 65 20 77 6f  |er to private wo|
00012220  72 6b 73 70 61 63 65 0a  09 52 33 20 3d 09 63 6f  |rkspace..R3 =.co|
00012230  6d 70 61 74 69 62 69 6c  69 74 79 20 6c 65 76 65  |mpatibility leve|
00012240  6c 0a 23 73 75 62 70 61  67 65 20 63 6f 64 65 31  |l.#subpage code1|
00012250  0a 52 65 6d 6f 76 65 20  6c 69 6e 6b 20 28 31 29  |.Remove link (1)|
00012260  0a 3d 3e 09 52 30 20 3d  09 31 20 28 72 65 61 73  |.=>.R0 =.1 (reas|
00012270  6f 6e 20 63 6f 64 65 29  0a 09 52 31 20 3d 09 70  |on code)..R1 =.p|
00012280  6f 69 6e 74 65 72 20 74  6f 20 66 6c 69 6e 6b 0a  |ointer to flink.|
00012290  44 41 54 41 63 02 00 00  53 70 61 72 6b 46 53 5f  |DATAc...SparkFS_|
000122a0  4d 65 6d 6f 72 79 20 28  26 34 34 35 43 31 29 0a  |Memory (&445C1).|
000122b0  23 50 61 72 65 6e 74 20  53 70 61 72 6b 46 53 5f  |#Parent SparkFS_|
000122c0  0a 3d 3e 09 52 30 20 3d  09 72 65 61 73 6f 6e 20  |.=>.R0 =.reason |
000122d0  63 6f 64 65 20 6e 75 6d  62 65 72 0a 09 20 09 20  |code number.. . |
000122e0  20 30 09 3c 41 6c 6c 6f  63 61 74 65 3d 3e 2e 63  | 0.<Allocate=>.c|
000122f0  6f 64 65 30 3e 0a 09 20  09 20 20 31 09 3c 45 78  |ode0>.. .  1.<Ex|
00012300  74 65 6e 64 3d 3e 2e 63  6f 64 65 31 3e 0a 09 20  |tend=>.code1>.. |
00012310  09 20 20 32 09 3c 46 72  65 65 3d 3e 2e 63 6f 64  |.  2.<Free=>.cod|
00012320  65 32 3e 0a 09 20 09 20  20 33 09 3c 53 65 74 3d  |e2>.. .  3.<Set=|
00012330  3e 2e 63 6f 64 65 33 3e  0a 0a 54 68 69 73 20 63  |>.code3>..This c|
00012340  61 6c 6c 20 69 73 20 75  73 65 64 20 74 6f 20 6d  |all is used to m|
00012350  61 6e 69 70 75 6c 61 74  65 20 53 70 61 72 6b 46  |anipulate SparkF|
00012360  53 27 20 6d 65 6d 6f 72  79 20 6d 61 6e 61 67 65  |S' memory manage|
00012370  72 2e 0a 23 73 75 62 70  61 67 65 20 63 6f 64 65  |r..#subpage code|
00012380  30 0a 41 6c 6c 6f 63 61  74 65 20 28 30 29 0a 3d  |0.Allocate (0).=|
00012390  3e 09 52 30 20 3d 09 30  20 28 72 65 61 73 6f 6e  |>.R0 =.0 (reason|
000123a0  20 63 6f 64 65 29 0a 09  52 31 20 3d 09 70 6f 69  | code)..R1 =.poi|
000123b0  6e 74 65 72 20 74 6f 20  61 6e 63 68 6f 72 0a 09  |nter to anchor..|
000123c0  52 32 20 3d 09 73 69 7a  65 0a 3c 3d 09 52 30 20  |R2 =.size.<=.R0 |
000123d0  3d 09 30 20 69 66 20 66  61 69 6c 65 64 0a 23 73  |=.0 if failed.#s|
000123e0  75 62 70 61 67 65 20 63  6f 64 65 31 0a 45 78 74  |ubpage code1.Ext|
000123f0  65 6e 64 20 28 31 29 0a  3d 3e 09 52 30 20 3d 09  |end (1).=>.R0 =.|
00012400  31 20 28 72 65 61 73 6f  6e 20 63 6f 64 65 29 0a  |1 (reason code).|
00012410  09 52 31 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R1 =.pointer to|
00012420  20 61 6e 63 68 6f 72 0a  09 52 32 20 3d 09 73 69  | anchor..R2 =.si|
00012430  7a 65 0a 3c 3d 09 52 30  20 3d 09 30 20 69 66 20  |ze.<=.R0 =.0 if |
00012440  66 61 69 6c 65 64 0a 23  73 75 62 70 61 67 65 20  |failed.#subpage |
00012450  63 6f 64 65 32 0a 46 72  65 65 20 28 32 29 0a 3d  |code2.Free (2).=|
00012460  3e 09 52 30 20 3d 09 32  20 28 72 65 61 73 6f 6e  |>.R0 =.2 (reason|
00012470  20 63 6f 64 65 29 0a 09  52 31 20 3d 09 70 6f 69  | code)..R1 =.poi|
00012480  6e 74 65 72 20 74 6f 20  61 6e 63 68 6f 72 0a 23  |nter to anchor.#|
00012490  73 75 62 70 61 67 65 20  63 6f 64 65 33 0a 53 65  |subpage code3.Se|
000124a0  74 20 28 33 29 0a 3d 3e  09 52 30 20 3d 09 33 20  |t (3).=>.R0 =.3 |
000124b0  28 72 65 61 73 6f 6e 20  63 6f 64 65 29 0a 09 52  |(reason code)..R|
000124c0  31 20 3d 09 6d 69 6e 0a  09 52 32 20 3d 09 6d 61  |1 =.min..R2 =.ma|
000124d0  78 0a 0a 3c 3d 09 52 31  20 3d 09 6d 69 6e 0a 09  |x..<=.R1 =.min..|
000124e0  52 32 20 3d 09 6d 61 78  0a 09 52 33 20 3d 09 63  |R2 =.max..R3 =.c|
000124f0  75 72 72 00 44 41 54 41  6c 05 00 00 53 70 61 72  |urr.DATAl...Spar|
00012500  6b 46 53 5f 55 73 65 72  20 28 26 34 34 35 43 35  |kFS_User (&445C5|
00012510  29 0a 23 50 61 72 65 6e  74 20 53 70 61 72 6b 46  |).#Parent SparkF|
00012520  53 5f 0a 3d 3e 09 52 30  20 3d 09 72 65 61 73 6f  |S_.=>.R0 =.reaso|
00012530  6e 20 63 6f 64 65 20 6e  75 6d 62 65 72 0a 09 20  |n code number.. |
00012540  09 20 20 30 09 3c 49 64  65 6e 74 69 66 79 20 61  |.  0.<Identify a|
00012550  72 63 68 69 76 65 3d 3e  2e 63 6f 64 65 30 3e 0a  |rchive=>.code0>.|
00012560  09 20 09 20 20 31 09 3c  52 65 61 64 20 61 72 63  |. .  1.<Read arc|
00012570  68 69 76 65 20 65 6e 74  72 69 65 73 3d 3e 2e 63  |hive entries=>.c|
00012580  6f 64 65 31 3e 0a 0a 54  68 69 73 20 63 61 6c 6c  |ode1>..This call|
00012590  20 69 73 20 75 73 65 64  20 74 6f 20 70 65 72 66  | is used to perf|
000125a0  6f 72 6d 20 6d 69 73 63  65 6c 6c 61 6e 65 6f 75  |orm miscellaneou|
000125b0  73 20 75 73 65 72 20 6f  70 65 72 61 74 69 6f 6e  |s user operation|
000125c0  73 20 6f 6e 20 61 72 63  68 69 76 65 73 2e 0a 23  |s on archives..#|
000125d0  73 75 62 70 61 67 65 20  63 6f 64 65 30 0a 49 64  |subpage code0.Id|
000125e0  65 6e 74 69 66 79 20 61  72 63 68 69 76 65 20 28  |entify archive (|
000125f0  30 29 0a 3d 3e 09 52 30  20 3d 09 30 20 28 72 65  |0).=>.R0 =.0 (re|
00012600  61 73 6f 6e 20 63 6f 64  65 29 0a 09 52 31 20 3d  |ason code)..R1 =|
00012610  09 70 6f 69 6e 74 65 72  20 74 6f 20 61 72 63 68  |.pointer to arch|
00012620  69 76 65 20 70 61 74 68  0a 3c 3d 09 52 30 20 3d  |ive path.<=.R0 =|
00012630  09 74 79 70 65 0a 23 73  75 62 70 61 67 65 20 63  |.type.#subpage c|
00012640  6f 64 65 31 0a 52 65 61  64 20 61 72 63 68 69 76  |ode1.Read archiv|
00012650  65 20 65 6e 74 72 69 65  73 20 28 31 29 0a 3d 3e  |e entries (1).=>|
00012660  09 52 30 20 3d 09 31 20  28 72 65 61 73 6f 6e 20  |.R0 =.1 (reason |
00012670  63 6f 64 65 29 0a 09 52  31 20 3d 09 70 6f 69 6e  |code)..R1 =.poin|
00012680  74 65 72 20 74 6f 20 61  72 63 68 69 76 65 20 70  |ter to archive p|
00012690  61 74 68 20 69 2e 65 2e  20 70 61 74 68 20 74 6f  |ath i.e. path to|
000126a0  20 61 72 63 68 69 76 65  20 66 69 6c 65 20 6f 6e  | archive file on|
000126b0  20 65 78 74 65 72 6e 61  6c 20 46 53 0a 09 52 32  | external FS..R2|
000126c0  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 3c 62  | =.pointer to <b|
000126d0  75 66 66 65 72 3d 3e 2e  63 6f 64 65 31 62 75 66  |uffer=>.code1buf|
000126e0  66 65 72 3e 20 74 6f 20  77 72 69 74 65 20 69 6e  |fer> to write in|
000126f0  66 6f 72 6d 61 74 69 6f  6e 20 74 6f 0a 09 52 33  |formation to..R3|
00012700  20 3d 09 6e 75 6d 62 65  72 20 6f 66 20 6f 62 6a  | =.number of obj|
00012710  65 63 74 73 20 74 6f 20  77 72 69 74 65 0a 09 52  |ects to write..R|
00012720  34 20 3d 09 70 6f 73 69  74 69 6f 6e 20 69 6e 20  |4 =.position in |
00012730  63 61 74 61 6c 6f 67 75  65 20 74 6f 20 73 74 61  |catalogue to sta|
00012740  72 74 20 72 65 61 64 69  6e 67 20 66 72 6f 6d 0a  |rt reading from.|
00012750  09 52 35 20 3d 09 73 69  7a 65 20 6f 66 20 62 75  |.R5 =.size of bu|
00012760  66 66 65 72 0a 09 52 36  20 3d 09 70 6f 69 6e 74  |ffer..R6 =.point|
00012770  65 72 20 74 6f 20 77 69  6c 64 20 63 61 72 64 65  |er to wild carde|
00012780  64 20 66 69 6c 65 20 6e  61 6d 65 20 74 6f 20 6d  |d file name to m|
00012790  61 74 63 68 2e 20 43 61  6e 20 62 65 20 4e 55 4c  |atch. Can be NUL|
000127a0  4c 20 74 6f 20 6d 61 74  63 68 20 61 6c 6c 2e 0a  |L to match all..|
000127b0  09 52 37 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R7 =.pointer to|
000127c0  20 70 61 74 68 20 74 6f  20 64 69 72 65 63 74 6f  | path to directo|
000127d0  72 79 20 69 6e 73 69 64  65 20 61 72 63 68 69 76  |ry inside archiv|
000127e0  65 0a 0a 3c 3d 09 52 34  20 3d 09 70 6f 73 69 74  |e..<=.R4 =.posit|
000127f0  69 6f 6e 20 69 6e 20 63  61 74 61 6c 6f 67 75 65  |ion in catalogue|
00012800  20 74 6f 20 72 65 61 64  20 66 72 6f 6d 20 6e 65  | to read from ne|
00012810  78 74 0a 09 52 33 20 3d  09 6e 75 6d 62 65 72 20  |xt..R3 =.number |
00012820  6f 66 20 65 6e 74 72 69  65 73 20 77 72 69 74 74  |of entries writt|
00012830  65 6e 20 74 6f 20 62 75  66 66 65 72 0a 0a 54 68  |en to buffer..Th|
00012840  69 73 20 69 73 20 70 61  73 73 65 64 20 74 68 65  |is is passed the|
00012850  20 70 61 74 68 20 74 6f  20 61 6e 20 61 72 63 68  | path to an arch|
00012860  69 76 65 2c 20 61 6e 64  20 74 68 65 20 70 61 74  |ive, and the pat|
00012870  68 20 74 6f 20 61 20 64  69 72 65 63 74 6f 72 79  |h to a directory|
00012880  20 69 6e 73 69 64 65 20  74 68 65 20 61 72 63 68  | inside the arch|
00012890  69 76 65 2e 20 49 6e 20  61 64 64 69 74 69 6f 6e  |ive. In addition|
000128a0  20 61 20 77 69 6c 64 63  61 72 64 65 64 20 66 69  | a wildcarded fi|
000128b0  6c 65 6e 61 6d 65 20 63  61 6e 20 62 65 20 75 73  |lename can be us|
000128c0  65 64 2e 20 0a 0a 4f 70  65 72 61 74 69 6f 6e 20  |ed. ..Operation |
000128d0  69 73 20 73 69 6d 69 6c  61 72 20 69 6e 20 63 6f  |is similar in co|
000128e0  6e 63 65 70 74 20 74 6f  20 3c 4f 53 5f 47 42 50  |ncept to <OS_GBP|
000128f0  42 3d 3e 4f 53 3a 4f 53  5f 47 42 50 42 3e 20 31  |B=>OS:OS_GBPB> 1|
00012900  30 2e 0a 23 73 75 62 70  61 67 65 20 63 6f 64 65  |0..#subpage code|
00012910  31 62 75 66 66 65 72 0a  46 6f 72 6d 61 74 20 6f  |1buffer.Format o|
00012920  66 20 65 6e 74 72 69 65  73 20 69 6e 20 53 70 61  |f entries in Spa|
00012930  72 6b 46 53 20 63 61 74  61 6c 6f 67 75 65 0a 4f  |rkFS catalogue.O|
00012940  66 66 73 65 74 09 50 75  72 70 6f 73 65 0a 23 4c  |ffset.Purpose.#L|
00012950  69 6e 65 0a 30 09 6c 6f  61 64 20 61 64 64 72 65  |ine.0.load addre|
00012960  73 73 0a 34 09 65 78 65  63 20 61 64 64 72 65 73  |ss.4.exec addres|
00012970  73 0a 38 09 6c 65 6e 67  74 68 09 09 69 65 2e 20  |s.8.length..ie. |
00012980  72 65 61 6c 20 75 6e 63  6f 6d 70 72 65 73 73 65  |real uncompresse|
00012990  64 20 73 69 7a 65 0a 31  32 09 73 69 7a 65 09 09  |d size.12.size..|
000129a0  69 65 2e 20 63 6f 6d 70  72 65 73 73 65 64 20 73  |ie. compressed s|
000129b0  69 7a 65 0a 31 36 09 68  65 61 64 65 72 20 76 65  |ize.16.header ve|
000129c0  72 73 69 6f 6e 09 6c 6f  6f 73 65 6c 79 20 72 65  |rsion.loosely re|
000129d0  6c 61 74 65 64 20 74 6f  20 74 68 65 20 63 6f 6d  |lated to the com|
000129e0  70 72 65 73 73 69 6f 6e  20 6d 65 74 68 6f 64 0a  |pression method.|
000129f0  32 30 09 61 74 74 72 69  62 75 74 65 73 0a 32 34  |20.attributes.24|
00012a00  09 6f 62 6a 65 63 74 20  74 79 70 65 09 31 3d 66  |.object type.1=f|
00012a10  69 6c 65 2c 20 32 3d 64  69 72 65 63 74 6f 72 79  |ile, 2=directory|
00012a20  0a 32 38 09 6f 62 6a 65  63 74 20 6e 61 6d 65 09  |.28.object name.|
00012a30  30 20 74 65 72 6d 69 6e  61 74 65 64 2c 20 70 61  |0 terminated, pa|
00012a40  64 64 65 64 20 77 69 74  68 20 30 27 73 20 74 6f  |dded with 0's to|
00012a50  20 77 6f 72 64 20 62 6f  75 6e 64 61 72 79 2e 0a  | word boundary..|
00012a60  44 41 54 41 be 04 00 00  53 70 61 72 6b 46 53 5f  |DATA....SparkFS_|
00012a70  55 74 69 6c 20 28 26 34  34 35 43 34 29 0a 23 50  |Util (&445C4).#P|
00012a80  61 72 65 6e 74 20 53 70  61 72 6b 46 53 5f 0a 3d  |arent SparkFS_.=|
00012a90  3e 09 52 30 20 3d 09 72  65 61 73 6f 6e 20 63 6f  |>.R0 =.reason co|
00012aa0  64 65 20 6e 75 6d 62 65  72 0a 09 20 09 20 20 30  |de number.. .  0|
00012ab0  09 3c 50 61 72 65 6e 74  20 6f 66 20 64 69 72 65  |.<Parent of dire|
00012ac0  63 74 6f 72 79 3d 3e 2e  63 6f 64 65 30 3e 0a 09  |ctory=>.code0>..|
00012ad0  20 09 20 20 31 09 3c 53  65 74 20 6e 75 6d 62 65  | .  1.<Set numbe|
00012ae0  72 20 6f 66 20 66 69 6c  65 73 20 69 6e 20 64 69  |r of files in di|
00012af0  72 65 63 74 6f 72 79 3d  3e 2e 63 6f 64 65 31 3e  |rectory=>.code1>|
00012b00  0a 09 20 09 20 20 32 09  3c 49 6e 73 65 72 74 20  |.. .  2.<Insert |
00012b10  65 6e 74 72 79 3d 3e 2e  63 6f 64 65 32 3e 0a 09  |entry=>.code2>..|
00012b20  20 09 20 20 33 09 3c 52  65 6d 6f 76 65 20 65 6e  | .  3.<Remove en|
00012b30  74 72 79 3d 3e 2e 63 6f  64 65 33 3e 0a 09 20 09  |try=>.code3>.. .|
00012b40  20 20 34 09 3c 4d 61 70  20 65 78 74 65 6e 73 69  |  4.<Map extensi|
00012b50  6f 6e 20 74 6f 20 74 79  70 65 3d 3e 2e 63 6f 64  |on to type=>.cod|
00012b60  65 34 3e 0a 09 20 09 20  20 35 09 3c 43 61 6c 63  |e4>.. .  5.<Calc|
00012b70  75 6c 61 74 65 20 64 69  72 65 63 74 6f 72 79 20  |ulate directory |
00012b80  6c 65 6e 67 74 68 3d 3e  2e 63 6f 64 65 35 3e 0a  |length=>.code5>.|
00012b90  09 20 09 20 20 36 09 3c  4f 70 65 6e 20 73 63 72  |. .  6.<Open scr|
00012ba0  61 70 20 66 69 6c 65 3d  3e 2e 63 6f 64 65 36 3e  |ap file=>.code6>|
00012bb0  0a 09 20 09 20 20 37 09  3c 43 6c 6f 73 65 20 73  |.. .  7.<Close s|
00012bc0  63 72 61 70 20 66 69 6c  65 3d 3e 2e 63 6f 64 65  |crap file=>.code|
00012bd0  37 3e 0a 0a 54 68 69 73  20 63 61 6c 6c 20 69 73  |7>..This call is|
00012be0  20 75 73 65 64 20 74 6f  20 64 6f 20 74 68 69 6e  | used to do thin|
00012bf0  67 73 20 74 6f 20 61 72  63 68 69 76 65 73 20 28  |gs to archives (|
00012c00  21 29 2e 0a 23 73 75 62  70 61 67 65 20 63 6f 64  |!)..#subpage cod|
00012c10  65 30 0a 50 61 72 65 6e  74 20 6f 66 20 64 69 72  |e0.Parent of dir|
00012c20  65 63 74 6f 72 79 20 28  30 29 0a 3d 3e 09 52 30  |ectory (0).=>.R0|
00012c30  20 3d 09 30 20 28 72 65  61 73 6f 6e 20 63 6f 64  | =.0 (reason cod|
00012c40  65 29 0a 09 52 31 20 3d  09 70 6f 69 6e 74 65 72  |e)..R1 =.pointer|
00012c50  20 74 6f 20 61 72 63 68  69 76 65 0a 09 52 32 20  | to archive..R2 |
00012c60  3d 09 63 68 69 6c 64 0a  3c 3d 09 52 30 20 3d 09  |=.child.<=.R0 =.|
00012c70  70 61 72 65 6e 74 0a 23  73 75 62 70 61 67 65 20  |parent.#subpage |
00012c80  63 6f 64 65 31 0a 53 65  74 20 6e 75 6d 62 65 72  |code1.Set number|
00012c90  20 6f 66 20 66 69 6c 65  73 20 69 6e 20 64 69 72  | of files in dir|
00012ca0  65 63 74 6f 72 79 20 28  31 29 0a 3d 3e 09 52 30  |ectory (1).=>.R0|
00012cb0  20 3d 09 31 20 28 72 65  61 73 6f 6e 20 63 6f 64  | =.1 (reason cod|
00012cc0  65 29 0a 09 52 31 20 3d  09 6e 6f 20 6f 66 20 66  |e)..R1 =.no of f|
00012cd0  69 6c 65 73 0a 23 73 75  62 70 61 67 65 20 63 6f  |iles.#subpage co|
00012ce0  64 65 32 0a 49 6e 73 65  72 74 20 65 6e 74 72 79  |de2.Insert entry|
00012cf0  20 28 32 29 0a 3d 3e 09  52 30 20 3d 09 32 20 28  | (2).=>.R0 =.2 (|
00012d00  72 65 61 73 6f 6e 20 63  6f 64 65 29 0a 09 52 31  |reason code)..R1|
00012d10  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 61 72  | =.pointer to ar|
00012d20  63 68 69 76 65 0a 09 52  32 20 3d 09 66 69 6c 65  |chive..R2 =.file|
00012d30  20 6e 75 6d 62 65 72 0a  09 52 33 20 3d 09 64 69  | number..R3 =.di|
00012d40  72 65 63 74 6f 72 79 0a  09 52 34 20 3d 09 73 69  |rectory..R4 =.si|
00012d50  7a 65 0a 23 73 75 62 70  61 67 65 20 63 6f 64 65  |ze.#subpage code|
00012d60  33 0a 52 65 6d 6f 76 65  20 65 6e 74 72 79 20 28  |3.Remove entry (|
00012d70  33 29 0a 3d 3e 09 52 30  20 3d 09 33 20 28 72 65  |3).=>.R0 =.3 (re|
00012d80  61 73 6f 6e 20 63 6f 64  65 29 0a 09 52 31 20 3d  |ason code)..R1 =|
00012d90  09 70 6f 69 6e 74 65 72  20 74 6f 20 61 72 63 68  |.pointer to arch|
00012da0  69 76 65 0a 09 52 32 20  3d 09 66 69 6c 65 20 6e  |ive..R2 =.file n|
00012db0  75 6d 62 65 72 0a 09 52  34 20 3d 09 73 69 7a 65  |umber..R4 =.size|
00012dc0  0a 23 73 75 62 70 61 67  65 20 63 6f 64 65 34 0a  |.#subpage code4.|
00012dd0  4d 61 70 20 65 78 74 65  6e 73 69 6f 6e 20 74 6f  |Map extension to|
00012de0  20 74 79 70 65 20 28 34  29 0a 3d 3e 09 52 30 20  | type (4).=>.R0 |
00012df0  3d 09 34 20 28 72 65 61  73 6f 6e 20 63 6f 64 65  |=.4 (reason code|
00012e00  29 0a 09 52 31 20 3d 09  70 6f 69 6e 74 65 72 20  |)..R1 =.pointer |
00012e10  74 6f 20 65 78 74 65 6e  73 69 6f 6e 0a 3c 3d 09  |to extension.<=.|
00012e20  52 30 20 3d 09 66 69 6c  65 20 74 79 70 65 0a 23  |R0 =.file type.#|
00012e30  73 75 62 70 61 67 65 20  63 6f 64 65 35 0a 43 61  |subpage code5.Ca|
00012e40  6c 63 20 64 69 72 20 6c  65 6e 73 20 28 35 29 0a  |lc dir lens (5).|
00012e50  3d 3e 09 52 30 20 3d 09  35 20 28 72 65 61 73 6f  |=>.R0 =.5 (reaso|
00012e60  6e 20 63 6f 64 65 29 0a  09 52 31 20 3d 09 70 6f  |n code)..R1 =.po|
00012e70  69 6e 74 65 72 20 74 6f  20 61 72 63 68 69 76 65  |inter to archive|
00012e80  0a 23 73 75 62 70 61 67  65 20 63 6f 64 65 36 0a  |.#subpage code6.|
00012e90  4f 70 65 6e 20 73 63 72  61 70 20 66 69 6c 65 20  |Open scrap file |
00012ea0  28 36 29 0a 3d 3e 09 52  30 20 3d 09 36 20 28 72  |(6).=>.R0 =.6 (r|
00012eb0  65 61 73 6f 6e 20 63 6f  64 65 29 0a 09 52 31 20  |eason code)..R1 |
00012ec0  3d 09 6d 6f 64 65 0a 3c  3d 09 52 30 20 3d 09 68  |=.mode.<=.R0 =.h|
00012ed0  61 6e 64 6c 65 0a 23 73  75 62 70 61 67 65 20 63  |andle.#subpage c|
00012ee0  6f 64 65 37 0a 43 6c 6f  73 65 20 73 63 72 61 70  |ode7.Close scrap|
00012ef0  20 66 69 6c 65 20 28 37  29 0a 3d 3e 09 52 30 20  | file (7).=>.R0 |
00012f00  3d 09 37 20 28 72 65 61  73 6f 6e 20 63 6f 64 65  |=.7 (reason code|
00012f10  29 0a 09 52 31 20 3d 09  68 61 6e 64 6c 65 00 00  |)..R1 =.handle..|
00012f20  44 49 52 24 2c 00 00 00  2c 00 00 00 4c 2f 01 00  |DIR$,...,...L/..|
00012f30  46 fd ff ff b5 43 c7 13  a5 00 00 00 13 00 00 00  |F....C..........|
00012f40  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
00012f50  a5 00 00 00 53 70 63 68  0a 23 50 61 72 65 6e 74  |....Spch.#Parent|
00012f60  20 21 52 6f 6f 74 0a 23  50 72 65 66 69 78 20 53  | !Root.#Prefix S|
00012f70  70 63 68 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |pch_.#Table Colu|
00012f80  6d 6e 73 20 32 0a 52 65  61 64 79 3f 0a 4f 6c 64  |mns 2.Ready?.Old|
00012f90  63 68 61 6e 6e 65 6c 0a  45 72 72 6f 72 0a 53 61  |channel.Error.Sa|
00012fa0  79 0a 53 61 79 57 0a 53  70 65 61 6b 0a 53 70 65  |y.SayW.Speak.Spe|
00012fb0  61 6b 57 0a 50 69 74 63  68 0a 53 70 65 65 64 0a  |akW.Pitch.Speed.|
00012fc0  4d 6f 75 74 68 0a 54 6f  6e 67 75 65 0a 47 65 74  |Mouth.Tongue.Get|
00012fd0  44 69 63 74 69 6f 6e 61  72 79 0a 52 65 73 65 74  |Dictionary.Reset|
00012fe0  0a 4c 65 76 65 6c 0a 23  45 6e 64 54 61 62 6c 65  |.Level.#EndTable|
00012ff0  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
00013000  20 30 01 00 46 fd ff ff  b3 4b c7 13 65 01 00 00  | 0..F....K..e...|
00013010  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
00013020  44 41 54 41 65 01 00 00  53 70 65 6c 6c 0a 23 50  |DATAe...Spell.#P|
00013030  61 72 65 6e 74 20 21 52  6f 6f 74 0a 23 50 72 65  |arent !Root.#Pre|
00013040  66 69 78 20 53 70 65 6c  6c 5f 0a 23 54 61 62 6c  |fix Spell_.#Tabl|
00013050  65 20 43 6f 6c 75 6d 6e  73 20 32 0a 54 79 70 6f  |e Columns 2.Typo|
00013060  0a 41 6e 61 67 72 61 6d  0a 46 75 7a 7a 79 0a 43  |.Anagram.Fuzzy.C|
00013070  68 65 63 6b 57 6f 72 64  0a 41 64 64 57 6f 72 64  |heckWord.AddWord|
00013080  0a 47 65 74 57 6f 72 64  0a 47 65 74 4e 65 78 74  |.GetWord.GetNext|
00013090  57 6f 72 64 0a 45 6e 75  6d 57 6f 72 64 0a 43 72  |Word.EnumWord.Cr|
000130a0  65 61 74 65 55 73 65 72  0a 4c 6f 61 64 55 73 65  |eateUser.LoadUse|
000130b0  72 0a 53 61 76 65 55 73  65 72 0a 55 73 65 72 54  |r.SaveUser.UserT|
000130c0  6f 46 69 6c 65 0a 46 69  6c 65 54 6f 55 73 65 72  |oFile.FileToUser|
000130d0  0a 47 65 74 44 69 63 74  69 6f 6e 61 72 79 4e 61  |.GetDictionaryNa|
000130e0  6d 65 0a 52 65 6d 6f 76  65 44 69 63 74 69 6f 6e  |me.RemoveDiction|
000130f0  61 72 79 0a 44 65 6c 65  74 65 57 6f 72 64 0a 52  |ary.DeleteWord.R|
00013100  65 73 65 74 49 67 6e 6f  72 65 0a 41 64 64 54 6f  |esetIgnore.AddTo|
00013110  49 67 6e 6f 72 65 0a 42  72 6f 77 73 65 57 69 6e  |Ignore.BrowseWin|
00013120  64 6f 77 0a 53 70 65 6c  6c 4f 70 0a 46 69 6e 64  |dow.SpellOp.Find|
00013130  57 6f 72 64 0a 49 6d 70  72 65 73 73 69 6f 6e 49  |Word.ImpressionI|
00013140  6e 66 6f 0a 49 6d 70 72  65 73 73 69 6f 6e 51 75  |nfo.ImpressionQu|
00013150  69 63 6b 43 68 65 63 6b  0a 46 69 6c 65 54 6f 46  |ickCheck.FileToF|
00013160  69 6c 65 0a 53 61 76 65  44 69 63 74 69 6f 6e 61  |ile.SaveDictiona|
00013170  72 79 57 69 74 68 50 61  74 68 0a 23 45 6e 64 54  |ryWithPath.#EndT|
00013180  61 62 6c 65 0a 00 00 00  44 49 52 24 2c 00 00 00  |able....DIR$,...|
00013190  2c 00 00 00 b4 31 01 00  46 fd ff ff d1 46 c7 13  |,....1..F....F..|
000131a0  d8 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
000131b0  74 00 00 00 44 41 54 41  d8 00 00 00 53 74 72 65  |t...DATA....Stre|
000131c0  61 6d 53 71 75 61 73 68  0a 23 50 61 72 65 6e 74  |amSquash.#Parent|
000131d0  20 21 52 6f 6f 74 0a 23  50 72 65 66 69 78 20 53  | !Root.#Prefix S|
000131e0  74 72 65 61 6d 53 71 75  61 73 68 5f 0a 23 54 61  |treamSquash_.#Ta|
000131f0  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 49 6e  |ble Columns 2.In|
00013200  69 74 69 61 6c 69 73 65  0a 49 6e 66 6f 43 6f 6d  |itialise.InfoCom|
00013210  70 72 65 73 73 0a 4f 70  65 6e 43 6f 6d 70 72 65  |press.OpenCompre|
00013220  73 73 0a 43 6f 6d 70 72  65 73 73 42 6c 6f 63 6b  |ss.CompressBlock|
00013230  0a 43 6c 6f 73 65 43 6f  6d 70 72 65 73 73 0a 49  |.CloseCompress.I|
00013240  6e 66 6f 44 65 63 6f 6d  70 72 65 73 73 0a 4f 70  |nfoDecompress.Op|
00013250  65 6e 44 65 63 6f 6d 70  72 65 73 73 0a 44 65 63  |enDecompress.Dec|
00013260  6f 6d 70 72 65 73 73 42  6c 6f 63 6b 0a 43 6c 6f  |ompressBlock.Clo|
00013270  73 65 44 65 63 6f 6d 70  72 65 73 73 0a 45 78 69  |seDecompress.Exi|
00013280  74 0a 23 45 6e 64 54 61  62 6c 65 0a 44 49 52 24  |t.#EndTable.DIR$|
00013290  9c 01 00 00 9c 01 00 00  28 34 01 00 46 fd ff ff  |........(4..F...|
000132a0  31 56 ba 20 ce 02 00 00  13 00 00 00 00 00 00 00  |1V. ............|
000132b0  21 52 6f 6f 74 00 00 00  f8 36 01 00 47 ff ff ff  |!Root....6..G...|
000132c0  57 80 13 fd 33 02 00 00  13 00 00 00 00 00 00 00  |W...3...........|
000132d0  65 6e 61 62 6c 65 00 00  2c 39 01 00 46 ff ff ff  |enable..,9..F...|
000132e0  a0 d1 b8 20 c6 00 00 00  13 00 00 00 00 00 00 00  |... ............|
000132f0  44 69 73 61 62 6c 65 00  f4 39 01 00 46 ff ff ff  |Disable..9..F...|
00013300  36 e0 b8 20 53 01 00 00  13 00 00 00 00 00 00 00  |6.. S...........|
00013310  4b 69 6c 6c 00 00 00 00  48 3b 01 00 46 ff ff ff  |Kill....H;..F...|
00013320  ef 31 ba 20 65 00 00 00  13 00 00 00 00 00 00 00  |.1. e...........|
00013330  55 6e 4b 69 6c 6c 00 00  b0 3b 01 00 46 ff ff ff  |UnKill...;..F...|
00013340  54 f9 b8 20 c9 00 00 00  13 00 00 00 00 00 00 00  |T.. ............|
00013350  49 6e 74 65 72 63 65 70  74 00 00 00 7c 3c 01 00  |Intercept...|<..|
00013360  46 ff ff ff fc 0a b9 20  b9 00 00 00 13 00 00 00  |F...... ........|
00013370  00 00 00 00 4e 6f 49 6e  74 65 72 63 65 70 74 00  |....NoIntercept.|
00013380  38 3d 01 00 46 ff ff ff  e0 26 b9 20 74 00 00 00  |8=..F....&. t...|
00013390  13 00 00 00 00 00 00 00  53 68 6f 77 43 6f 64 65  |........ShowCode|
000133a0  73 00 00 00 ac 3d 01 00  46 ff ff ff c2 36 b9 20  |s....=..F....6. |
000133b0  8c 00 00 00 13 00 00 00  00 00 00 00 4e 6f 43 6f  |............NoCo|
000133c0  64 65 73 00 38 3e 01 00  46 ff ff ff 98 45 ba 20  |des.8>..F....E. |
000133d0  6d 01 00 00 13 00 00 00  00 00 00 00 52 65 73 65  |m...........Rese|
000133e0  74 00 00 00 a8 3f 01 00  46 ff ff ff 3e 4b ba 20  |t....?..F...>K. |
000133f0  80 00 00 00 13 00 00 00  00 00 00 00 46 6c 75 73  |............Flus|
00013400  68 54 65 78 74 00 00 00  28 40 01 00 47 fd ff ff  |hText...(@..G...|
00013410  a7 0d 01 d7 4a 03 00 00  13 00 00 00 00 00 00 00  |....J...........|
00013420  64 69 72 65 63 74 00 00  44 41 54 41 ce 02 00 00  |direct..DATA....|
00013430  53 74 72 65 61 6d 0a 23  50 61 72 65 6e 74 20 21  |Stream.#Parent !|
00013440  52 6f 6f 74 0a 23 50 72  65 66 69 78 20 53 74 72  |Root.#Prefix Str|
00013450  65 61 6d 5f 0a 23 54 61  62 6c 65 20 43 6f 6c 75  |eam_.#Table Colu|
00013460  6d 6e 73 20 32 0a 3c 45  6e 61 62 6c 65 3e 0a 3c  |mns 2.<Enable>.<|
00013470  44 69 73 61 62 6c 65 3e  0a 3c 4b 69 6c 6c 3e 0a  |Disable>.<Kill>.|
00013480  3c 55 6e 4b 69 6c 6c 3e  0a 3c 49 6e 74 65 72 63  |<UnKill>.<Interc|
00013490  65 70 74 3e 0a 3c 4e 6f  49 6e 74 65 72 63 65 70  |ept>.<NoIntercep|
000134a0  74 3e 0a 3c 53 68 6f 77  43 6f 64 65 73 3e 0a 3c  |t>.<ShowCodes>.<|
000134b0  4e 6f 43 6f 64 65 73 3e  0a 3c 52 65 73 65 74 3e  |NoCodes>.<Reset>|
000134c0  0a 3c 46 6c 75 73 68 54  65 78 74 3e 0a 3c 57 72  |.<FlushText>.<Wr|
000134d0  69 74 65 43 3d 3e 53 74  72 65 61 6d 5f 64 69 72  |iteC=>Stream_dir|
000134e0  65 63 74 3e 0a 3c 57 72  69 74 65 53 3d 3e 53 74  |ect>.<WriteS=>St|
000134f0  72 65 61 6d 5f 64 69 72  65 63 74 3e 0a 3c 57 72  |ream_direct>.<Wr|
00013500  69 74 65 30 3d 3e 53 74  72 65 61 6d 5f 64 69 72  |ite0=>Stream_dir|
00013510  65 63 74 3e 0a 3c 57 72  69 74 65 4e 3d 3e 53 74  |ect>.<WriteN=>St|
00013520  72 65 61 6d 5f 64 69 72  65 63 74 3e 0a 3c 4e 65  |ream_direct>.<Ne|
00013530  77 4c 69 6e 65 3d 3e 53  74 72 65 61 6d 5f 64 69  |wLine=>Stream_di|
00013540  72 65 63 74 3e 0a 3c 57  72 69 74 65 54 33 32 3d  |rect>.<WriteT32=|
00013550  3e 53 74 72 65 61 6d 5f  64 69 72 65 63 74 3e 0a  |>Stream_direct>.|
00013560  3c 57 72 69 74 65 54 32  34 3d 3e 53 74 72 65 61  |<WriteT24=>Strea|
00013570  6d 5f 64 69 72 65 63 74  3e 0a 3c 57 72 69 74 65  |m_direct>.<Write|
00013580  54 31 36 3d 3e 53 74 72  65 61 6d 5f 64 69 72 65  |T16=>Stream_dire|
00013590  63 74 3e 0a 3c 57 72 69  74 65 54 38 3d 3e 53 74  |ct>.<WriteT8=>St|
000135a0  72 65 61 6d 5f 64 69 72  65 63 74 3e 0a 3c 57 72  |ream_direct>.<Wr|
000135b0  69 74 65 48 33 32 3d 3e  53 74 72 65 61 6d 5f 64  |iteH32=>Stream_d|
000135c0  69 72 65 63 74 3e 0a 3c  57 72 69 74 65 48 32 34  |irect>.<WriteH24|
000135d0  3d 3e 53 74 72 65 61 6d  5f 64 69 72 65 63 74 3e  |=>Stream_direct>|
000135e0  0a 3c 57 72 69 74 65 48  31 36 3d 3e 53 74 72 65  |.<WriteH16=>Stre|
000135f0  61 6d 5f 64 69 72 65 63  74 3e 0a 3c 57 72 69 74  |am_direct>.<Writ|
00013600  65 48 38 3d 3e 53 74 72  65 61 6d 5f 64 69 72 65  |eH8=>Stream_dire|
00013610  63 74 3e 0a 3c 57 72 69  74 65 44 33 32 3d 3e 53  |ct>.<WriteD32=>S|
00013620  74 72 65 61 6d 5f 64 69  72 65 63 74 3e 0a 3c 57  |tream_direct>.<W|
00013630  72 69 74 65 44 32 34 3d  3e 53 74 72 65 61 6d 5f  |riteD24=>Stream_|
00013640  64 69 72 65 63 74 3e 0a  3c 57 72 69 74 65 44 31  |direct>.<WriteD1|
00013650  36 3d 3e 53 74 72 65 61  6d 5f 64 69 72 65 63 74  |6=>Stream_direct|
00013660  3e 0a 3c 57 72 69 74 65  44 38 3d 3e 53 74 72 65  |>.<WriteD8=>Stre|
00013670  61 6d 5f 64 69 72 65 63  74 3e 0a 3c 57 72 69 74  |am_direct>.<Writ|
00013680  65 42 33 32 3d 3e 53 74  72 65 61 6d 5f 64 69 72  |eB32=>Stream_dir|
00013690  65 63 74 3e 0a 3c 57 72  69 74 65 42 32 34 3d 3e  |ect>.<WriteB24=>|
000136a0  53 74 72 65 61 6d 5f 64  69 72 65 63 74 3e 0a 3c  |Stream_direct>.<|
000136b0  57 72 69 74 65 42 31 36  3d 3e 53 74 72 65 61 6d  |WriteB16=>Stream|
000136c0  5f 64 69 72 65 63 74 3e  0a 3c 57 72 69 74 65 42  |_direct>.<WriteB|
000136d0  38 3d 3e 53 74 72 65 61  6d 5f 64 69 72 65 63 74  |8=>Stream_direct|
000136e0  3e 0a 57 72 69 74 65 52  65 67 73 0a 23 45 6e 64  |>.WriteRegs.#End|
000136f0  54 61 62 6c 65 0a 00 00  44 41 54 41 33 02 00 00  |Table...DATA3...|
00013700  53 74 72 65 61 6d 5f 45  6e 61 62 6c 65 20 28 26  |Stream_Enable (&|
00013710  38 31 39 34 30 29 0a 23  50 61 72 65 6e 74 20 53  |81940).#Parent S|
00013720  74 72 65 61 6d 5f 0a 4e  6f 20 70 61 72 61 6d 65  |tream_.No parame|
00013730  74 65 72 73 0a 0a 56 44  55 53 74 72 65 61 6d 20  |ters..VDUStream |
00013740  77 69 6c 6c 20 63 6c 61  69 6d 20 74 68 65 20 57  |will claim the W|
00013750  72 69 74 65 20 63 68 61  72 61 63 74 65 72 20 76  |rite character v|
00013760  65 63 74 6f 72 20 61 6e  64 20 73 69 74 20 61 72  |ector and sit ar|
00013770  6f 75 6e 64 20 77 61 69  74 69 6e 67 20 66 6f 72  |ound waiting for|
00013780  20 63 68 61 72 61 63 74  65 72 73 20 74 6f 20 62  | characters to b|
00013790  65 20 70 72 69 6e 74 65  64 2e 20 54 68 65 73 65  |e printed. These|
000137a0  20 61 72 65 20 73 74 61  63 6b 65 64 20 69 6e 20  | are stacked in |
000137b0  74 68 65 20 6d 6f 64 75  6c 65 73 20 74 65 6d 70  |the modules temp|
000137c0  6f 72 61 72 79 20 52 4d  41 20 73 70 61 63 65 20  |orary RMA space |
000137d0  75 6e 74 69 6c 20 74 68  65 20 6d 61 69 6e 20 61  |until the main a|
000137e0  70 70 6c 69 63 61 74 69  6f 6e 20 69 73 20 63 61  |pplication is ca|
000137f0  6c 6c 65 64 20 76 69 61  20 3c 57 69 6d 70 5f 50  |lled via <Wimp_P|
00013800  6f 6c 6c 3d 3e 57 69 6d  70 3a 57 69 6d 70 5f 50  |oll=>Wimp:Wimp_P|
00013810  6f 6c 6c 3e 2e 20 43 68  61 72 61 63 74 65 72 73  |oll>. Characters|
00013820  20 66 6f 75 6e 64 20 74  6f 20 68 61 76 65 20 62  | found to have b|
00013830  65 65 6e 20 77 72 69 74  74 65 6e 20 74 6f 20 74  |een written to t|
00013840  68 65 20 52 4d 41 20 62  75 66 66 65 72 20 61 72  |he RMA buffer ar|
00013850  65 20 73 71 75 69 72 74  65 64 20 69 6e 74 6f 20  |e squirted into |
00013860  56 44 55 53 74 72 65 61  6d 73 20 72 65 73 69 7a  |VDUStreams resiz|
00013870  61 62 6c 65 20 61 70 70  6c 69 63 61 74 69 6f 6e  |able application|
00013880  20 6d 65 6d 6f 72 79 20  64 75 72 69 6e 67 20 6e  | memory during n|
00013890  75 6c 6c 20 65 76 65 6e  74 73 2e 0a 0a 54 68 69  |ull events...Thi|
000138a0  73 20 63 61 6c 6c 20 63  61 6e 20 62 65 20 73 74  |s call can be st|
000138b0  61 63 6b 65 64 20 74 6f  20 61 6e 79 20 6c 65 76  |acked to any lev|
000138c0  65 6c 2c 20 62 75 74 20  74 68 65 20 73 74 72 65  |el, but the stre|
000138d0  61 6d 20 77 69 6c 6c 20  6e 6f 74 20 62 65 20 72  |am will not be r|
000138e0  65 6c 65 61 73 65 64 20  75 6e 74 69 6c 20 6e 20  |eleased until n |
000138f0  3c 53 74 72 65 61 6d 5f  44 69 73 61 62 6c 65 3e  |<Stream_Disable>|
00013900  73 20 68 61 76 65 20 62  65 65 6e 20 63 61 6c 6c  |s have been call|
00013910  65 64 2c 20 6f 72 20 6f  6e 65 20 3c 53 74 72 65  |ed, or one <Stre|
00013920  61 6d 5f 52 65 73 65 74  3e 2e 0a 00 44 41 54 41  |am_Reset>...DATA|
00013930  c6 00 00 00 53 74 72 65  61 6d 5f 44 69 73 61 62  |....Stream_Disab|
00013940  6c 65 20 28 26 38 31 39  34 31 29 0a 23 50 61 72  |le (&81941).#Par|
00013950  65 6e 74 20 53 74 72 65  61 6d 5f 0a 4e 6f 20 70  |ent Stream_.No p|
00013960  61 72 61 6d 65 74 65 72  73 0a 0a 54 68 69 73 20  |arameters..This |
00013970  73 77 69 20 64 65 63 72  65 6d 65 6e 74 73 20 74  |swi decrements t|
00013980  68 65 20 63 6c 61 69 6d  20 63 6f 75 6e 74 20 61  |he claim count a|
00013990  6e 64 20 72 65 6c 65 61  73 65 73 20 57 72 63 68  |nd releases Wrch|
000139a0  56 20 69 66 20 69 74 20  69 73 20 7a 65 72 6f 2e  |V if it is zero.|
000139b0  20 53 75 62 73 65 71 75  65 6e 74 20 74 65 78 74  | Subsequent text|
000139c0  20 77 69 6c 6c 20 61 70  70 65 61 72 20 61 73 20  | will appear as |
000139d0  6e 6f 72 6d 61 6c 20 69  66 20 74 68 65 20 73 74  |normal if the st|
000139e0  72 65 61 6d 20 69 73 20  72 65 6c 65 61 73 65 64  |ream is released|
000139f0  2e 0a 00 00 44 41 54 41  53 01 00 00 53 74 72 65  |....DATAS...Stre|
00013a00  61 6d 5f 4b 69 6c 6c 20  28 26 38 31 39 34 32 29  |am_Kill (&81942)|
00013a10  0a 23 50 61 72 65 6e 74  20 53 74 72 65 61 6d 5f  |.#Parent Stream_|
00013a20  0a 4e 6f 20 70 61 72 61  6d 65 74 65 72 73 0a 0a  |.No parameters..|
00013a30  53 74 72 65 61 6d 5f 4b  69 6c 6c 20 77 69 6c 6c  |Stream_Kill will|
00013a40  20 73 65 74 20 61 20 66  6c 61 67 20 69 6e 74 65  | set a flag inte|
00013a50  72 6e 61 6c 6c 79 20 74  6f 20 70 72 65 76 65 6e  |rnally to preven|
00013a60  74 20 3c 53 74 72 65 61  6d 5f 45 6e 61 62 6c 65  |t <Stream_Enable|
00013a70  3e 20 66 72 6f 6d 20 62  65 69 6e 67 20 68 61 6e  |> from being han|
00013a80  64 6c 65 64 20 69 6e 20  74 68 65 20 75 73 75 61  |dled in the usua|
00013a90  6c 20 77 61 79 2e 20 41  6c 6c 20 63 61 6c 6c 73  |l way. All calls|
00013aa0  20 74 6f 20 53 74 72 65  61 6d 5f 45 6e 61 62 6c  | to Stream_Enabl|
00013ab0  65 20 77 69 6c 6c 20 62  65 20 69 67 6e 6f 72 65  |e will be ignore|
00013ac0  64 2e 20 54 68 69 73 20  61 6c 6c 6f 77 73 20 6f  |d. This allows o|
00013ad0  6e 65 20 70 69 65 63 65  20 6f 66 20 63 6f 64 65  |ne piece of code|
00013ae0  20 77 68 69 63 68 20 63  61 6c 6c 73 20 61 6e 6f  | which calls ano|
00013af0  74 68 65 72 20 72 6f 75  74 69 6e 65 20 6f 72 20  |ther routine or |
00013b00  72 6f 75 74 69 6e 65 73  20 74 6f 20 70 72 65 76  |routines to prev|
00013b10  65 6e 74 20 64 65 62 75  67 67 69 6e 67 20 62 65  |ent debugging be|
00013b20  69 6e 67 20 67 65 6e 65  72 61 74 65 64 20 66 72  |ing generated fr|
00013b30  6f 6d 20 74 68 65 20 63  61 6c 6c 65 64 20 72 6f  |om the called ro|
00013b40  75 74 69 6e 65 73 2e 00  44 41 54 41 65 00 00 00  |utines..DATAe...|
00013b50  53 74 72 65 61 6d 5f 55  6e 4b 69 6c 6c 20 28 26  |Stream_UnKill (&|
00013b60  38 31 39 34 33 29 0a 23  50 61 72 65 6e 74 20 53  |81943).#Parent S|
00013b70  74 72 65 61 6d 5f 0a 4e  6f 20 70 61 72 61 6d 65  |tream_.No parame|
00013b80  74 65 72 73 0a 0a 41 6c  6c 6f 77 73 20 61 63 63  |ters..Allows acc|
00013b90  65 73 73 20 74 6f 20 3c  53 74 72 65 61 6d 5f 45  |ess to <Stream_E|
00013ba0  6e 61 62 6c 65 3e 20 61  67 61 69 6e 2e 00 00 00  |nable> again....|
00013bb0  44 41 54 41 c9 00 00 00  53 74 72 65 61 6d 5f 49  |DATA....Stream_I|
00013bc0  6e 74 65 72 63 65 70 74  20 28 26 38 31 39 34 34  |ntercept (&81944|
00013bd0  29 0a 23 50 61 72 65 6e  74 20 53 74 72 65 61 6d  |).#Parent Stream|
00013be0  5f 0a 4e 6f 20 70 61 72  61 6d 65 74 65 72 73 0a  |_.No parameters.|
00013bf0  0a 41 6c 6c 20 70 72 69  6e 74 61 62 6c 65 20 63  |.All printable c|
00013c00  68 61 72 61 63 74 65 72  73 20 77 69 6c 6c 20 62  |haracters will b|
00013c10  65 20 69 6e 74 65 72 63  65 70 74 65 64 20 62 79  |e intercepted by|
00013c20  20 56 44 55 73 74 72 65  61 6d 20 77 68 65 6e 20  | VDUstream when |
00013c30  74 68 65 20 73 74 72 65  61 6d 20 69 73 20 65 6e  |the stream is en|
00013c40  61 62 6c 65 64 20 72 61  74 68 65 72 20 74 68 61  |abled rather tha|
00013c50  6e 20 62 65 69 6e 67 20  70 61 73 73 65 64 20 6f  |n being passed o|
00013c60  6e 20 74 6f 20 74 68 65  20 64 65 66 61 75 6c 74  |n to the default|
00013c70  20 68 61 6e 64 6c 65 72  2e 00 00 00 44 41 54 41  | handler....DATA|
00013c80  b9 00 00 00 53 74 72 65  61 6d 5f 4e 6f 49 6e 74  |....Stream_NoInt|
00013c90  65 72 63 65 70 74 20 28  26 38 31 39 34 35 29 0a  |ercept (&81945).|
00013ca0  23 50 61 72 65 6e 74 20  53 74 72 65 61 6d 5f 0a  |#Parent Stream_.|
00013cb0  4e 6f 20 70 61 72 61 6d  65 74 65 72 73 0a 0a 50  |No parameters..P|
00013cc0  61 73 73 65 73 20 63 68  61 72 61 63 74 65 72 20  |asses character |
00013cd0  63 6f 64 65 73 20 6f 6e  20 74 6f 20 74 68 65 20  |codes on to the |
00013ce0  6e 65 78 74 20 69 6e 74  65 72 72 75 70 74 20 68  |next interrupt h|
00013cf0  61 6e 64 6c 65 72 20 6f  6e 20 74 68 65 20 57 72  |andler on the Wr|
00013d00  63 68 56 20 61 73 0a 6e  6f 72 6d 61 6c 2e 20 52  |chV as.normal. R|
00013d10  65 76 65 72 73 65 73 20  65 66 66 65 63 74 20 6f  |everses effect o|
00013d20  66 20 3c 53 74 72 65 61  6d 5f 49 6e 74 65 72 63  |f <Stream_Interc|
00013d30  65 70 74 3e 2e 00 00 00  44 41 54 41 74 00 00 00  |ept>....DATAt...|
00013d40  53 74 72 65 61 6d 5f 53  68 6f 77 43 6f 64 65 73  |Stream_ShowCodes|
00013d50  20 28 26 38 31 39 34 36  29 0a 23 50 61 72 65 6e  | (&81946).#Paren|
00013d60  74 20 53 74 72 65 61 6d  5f 0a 4e 6f 20 70 61 72  |t Stream_.No par|
00013d70  61 6d 65 74 65 72 73 0a  0a 53 68 6f 77 20 63 6f  |ameters..Show co|
00013d80  6e 74 72 6f 6c 20 63 6f  64 65 73 20 61 73 20 5b  |ntrol codes as [|
00013d90  23 23 5d 20 76 61 6c 75  65 73 20 77 68 65 6e 20  |##] values when |
00013da0  69 6e 74 65 72 63 65 70  74 65 64 2e 44 41 54 41  |intercepted.DATA|
00013db0  8c 00 00 00 53 74 72 65  61 6d 5f 4e 6f 43 6f 64  |....Stream_NoCod|
00013dc0  65 73 20 28 26 38 31 39  34 37 29 0a 23 50 61 72  |es (&81947).#Par|
00013dd0  65 6e 74 20 53 74 72 65  61 6d 5f 0a 4e 6f 20 70  |ent Stream_.No p|
00013de0  61 72 61 6d 65 74 65 72  73 0a 0a 49 67 6e 6f 72  |arameters..Ignor|
00013df0  65 20 61 6c 6c 20 63 6f  6e 74 72 6f 6c 20 63 6f  |e all control co|
00013e00  64 65 73 20 72 65 63 65  69 76 65 64 2e 20 52 65  |des received. Re|
00013e10  76 65 72 73 65 73 20 74  68 65 20 65 66 66 65 63  |verses the effec|
00013e20  74 20 6f 66 20 3c 53 74  72 65 61 6d 5f 53 68 6f  |t of <Stream_Sho|
00013e30  77 43 6f 64 65 73 3e 2e  44 41 54 41 6d 01 00 00  |wCodes>.DATAm...|
00013e40  53 74 72 65 61 6d 5f 52  65 73 65 74 20 28 26 38  |Stream_Reset (&8|
00013e50  31 39 34 38 29 0a 23 50  61 72 65 6e 74 20 53 74  |1948).#Parent St|
00013e60  72 65 61 6d 5f 0a 4e 6f  20 70 61 72 61 6d 65 74  |ream_.No paramet|
00013e70  65 72 73 0a 0a 54 68 72  6f 77 73 20 61 77 61 79  |ers..Throws away|
00013e80  20 61 6c 6c 20 73 74 61  63 6b 65 64 20 63 61 6c  | all stacked cal|
00013e90  6c 73 20 74 6f 20 3c 53  74 72 65 61 6d 5f 45 6e  |ls to <Stream_En|
00013ea0  61 62 6c 65 3e 20 61 6e  64 20 72 65 6c 65 61 73  |able> and releas|
00013eb0  65 73 20 74 68 65 20 57  72 63 68 56 2e 20 54 68  |es the WrchV. Th|
00013ec0  69 73 20 73 68 6f 75 6c  64 20 62 65 20 75 73 65  |is should be use|
00013ed0  64 20 69 6e 63 61 73 65  20 6f 66 20 65 6d 6d 65  |d incase of emme|
00013ee0  72 67 65 6e 63 79 2e 20  28 69 65 20 77 68 65 6e  |rgency. (ie when|
00013ef0  20 61 20 63 6c 69 65 6e  74 20 61 70 70 6c 69 63  | a client applic|
00013f00  61 74 69 6f 6e 20 68 61  73 20 63 72 61 73 68 65  |ation has crashe|
00013f10  64 20 61 6e 64 20 6e 6f  74 20 63 61 6c 6c 65 64  |d and not called|
00013f20  20 3c 53 74 72 65 61 6d  5f 44 69 73 61 62 6c 65  | <Stream_Disable|
00013f30  3e 2e 20 59 6f 75 20 77  69 6c 6c 20 6e 6f 74 69  |>. You will noti|
00013f40  63 65 20 74 68 69 73 20  62 79 20 65 72 72 6f 72  |ce this by error|
00013f50  20 62 6f 78 65 73 20 77  69 74 68 20 6e 6f 20 74  | boxes with no t|
00013f60  65 78 74 20 69 6e 20 74  68 65 6d 20 61 70 70 65  |ext in them appe|
00013f70  61 72 69 6e 67 20 61 6c  6f 6e 67 20 77 69 74 68  |aring along with|
00013f80  20 74 68 65 20 64 65 73  6b 74 6f 70 20 72 65 6e  | the desktop ren|
00013f90  64 65 72 69 6e 67 20 73  70 72 69 74 65 73 20 6f  |dering sprites o|
00013fa0  6e 6c 79 29 0a 00 00 00  44 41 54 41 80 00 00 00  |nly)....DATA....|
00013fb0  53 74 72 65 61 6d 5f 46  6c 75 73 68 54 65 78 74  |Stream_FlushText|
00013fc0  20 28 26 38 31 39 34 39  29 0a 23 50 61 72 65 6e  | (&81949).#Paren|
00013fd0  74 20 53 74 72 65 61 6d  5f 0a 4e 6f 20 70 61 72  |t Stream_.No par|
00013fe0  61 6d 65 74 65 72 73 0a  0a 54 68 72 6f 77 73 20  |ameters..Throws |
00013ff0  61 77 61 79 20 74 68 65  20 63 75 72 72 65 6e 74  |away the current|
00014000  20 74 65 78 74 20 69 6e  20 74 68 65 20 61 70 70  | text in the app|
00014010  6c 69 63 61 74 69 6f 6e  20 73 70 61 63 65 20 61  |lication space a|
00014020  6e 64 20 52 4d 41 2e 0a  44 41 54 41 4a 03 00 00  |nd RMA..DATAJ...|
00014030  44 69 72 65 63 74 20 73  74 72 65 61 6d 20 64 72  |Direct stream dr|
00014040  69 76 65 72 73 0a 23 50  61 72 65 6e 74 20 53 74  |ivers.#Parent St|
00014050  72 65 61 6d 5f 0a 56 64  75 53 74 72 65 61 6d 20  |ream_.VduStream |
00014060  31 2e 30 39 20 6f 6e 77  61 72 64 73 20 70 72 6f  |1.09 onwards pro|
00014070  76 69 64 65 73 20 64 69  72 65 63 74 20 73 74 72  |vides direct str|
00014080  65 61 6d 20 61 63 63 65  73 73 20 73 6f 20 74 68  |eam access so th|
00014090  61 74 20 61 70 70 6c 69  63 61 74 69 6f 6e 73 20  |at applications |
000140a0  63 61 6e 20 73 65 6e 64  20 74 65 78 74 20 74 6f  |can send text to|
000140b0  20 74 68 65 20 73 74 72  65 61 6d 20 77 68 65 6e  | the stream when|
000140c0  20 74 68 65 20 6f 70 65  72 61 74 69 6e 67 20 73  | the operating s|
000140d0  79 73 74 65 6d 20 3c 4f  53 3a 4f 53 5f 57 72 69  |ystem <OS:OS_Wri|
000140e0  74 65 43 3e 20 69 73 20  62 65 69 6e 67 20 69 6e  |teC> is being in|
000140f0  74 65 72 63 65 70 74 65  64 20 62 79 20 73 6f 6d  |tercepted by som|
00014100  65 6f 6e 65 20 65 6c 73  65 20 65 61 72 6c 69 65  |eone else earlie|
00014110  72 20 69 6e 20 74 68 65  20 63 68 61 69 6e 2e 20  |r in the chain. |
00014120  65 67 20 64 75 72 69 6e  67 20 70 72 69 6e 74 69  |eg during printi|
00014130  6e 67 2e 0a 0a 54 68 65  20 66 6f 6c 6c 6f 77 69  |ng...The followi|
00014140  6e 67 20 64 69 72 65 63  74 20 73 77 69 73 20 61  |ng direct swis a|
00014150  72 65 20 70 72 6f 76 69  64 65 64 3a 0a 23 49 6e  |re provided:.#In|
00014160  64 65 6e 74 20 31 0a 53  74 72 65 61 6d 5f 57 72  |dent 1.Stream_Wr|
00014170  69 74 65 43 09 3a 20 57  72 69 74 65 20 52 30 20  |iteC.: Write R0 |
00014180  63 68 61 72 61 74 65 72  20 74 6f 20 74 68 65 20  |charater to the |
00014190  73 74 72 65 61 6d 0a 53  74 72 65 61 6d 5f 57 72  |stream.Stream_Wr|
000141a0  69 74 65 30 09 3a 20 57  72 69 74 65 20 6e 75 6c  |ite0.: Write nul|
000141b0  6c 20 74 65 72 6d 69 6e  61 74 65 64 20 73 74 72  |l terminated str|
000141c0  69 6e 67 2e 20 52 30 3d  70 74 72 0a 53 74 72 65  |ing. R0=ptr.Stre|
000141d0  61 6d 5f 57 72 69 74 65  53 09 3a 20 57 72 69 74  |am_WriteS.: Writ|
000141e0  65 20 69 6e 20 6c 69 6e  65 20 73 74 72 69 6e 67  |e in line string|
000141f0  2e 0a 53 74 72 65 61 6d  5f 57 72 69 74 65 4e 09  |..Stream_WriteN.|
00014200  3a 20 57 72 69 74 65 20  63 6f 75 6e 74 65 64 20  |: Write counted |
00014210  73 74 72 69 6e 67 2e 20  52 30 3d 70 74 72 2c 20  |string. R0=ptr, |
00014220  52 31 3d 6e 75 6d 62 65  72 0a 53 74 72 65 61 6d  |R1=number.Stream|
00014230  5f 4e 65 77 4c 69 6e 65  09 3a 20 57 72 69 74 65  |_NewLine.: Write|
00014240  20 6e 65 77 6c 69 6e 65  0a 0a 53 74 72 65 61 6d  | newline..Stream|
00014250  5f 57 72 69 74 65 54 78  78 09 3a 20 57 72 69 74  |_WriteTxx.: Writ|
00014260  65 20 72 30 20 61 73 20  63 68 61 72 61 63 74 65  |e r0 as characte|
00014270  72 73 2e 20 22 2e 22 20  72 65 70 6c 61 63 65 73  |rs. "." replaces|
00014280  20 6e 6f 6e 2d 61 6c 70  68 61 6e 75 6d 65 72 69  | non-alphanumeri|
00014290  63 0a 53 74 72 65 61 6d  5f 57 72 69 74 65 48 78  |c.Stream_WriteHx|
000142a0  78 09 3a 20 57 72 69 74  65 20 68 65 78 20 63 6f  |x.: Write hex co|
000142b0  6e 76 65 72 73 69 6f 6e  20 6f 66 20 52 30 0a 53  |nversion of R0.S|
000142c0  74 72 65 61 6d 5f 57 72  69 74 65 44 78 78 09 3a  |tream_WriteDxx.:|
000142d0  20 57 72 69 74 65 20 64  65 63 69 6d 61 6c 20 63  | Write decimal c|
000142e0  6f 6e 76 65 72 73 69 6f  6e 20 6f 66 20 52 30 0a  |onversion of R0.|
000142f0  53 74 72 65 61 6d 5f 57  72 69 74 65 42 78 78 09  |Stream_WriteBxx.|
00014300  3a 20 57 72 69 74 65 20  62 69 6e 61 72 79 20 63  |: Write binary c|
00014310  6f 6e 76 65 72 73 69 6f  6e 20 6f 66 20 52 30 0a  |onversion of R0.|
00014320  0a 23 49 6e 64 65 6e 74  0a 57 68 65 72 65 20 78  |.#Indent.Where x|
00014330  78 20 69 73 20 33 32 2c  20 32 34 2c 20 31 36 2c  |x is 32, 24, 16,|
00014340  20 6f 72 20 38 20 64 65  70 65 6e 64 69 6e 67 20  | or 8 depending |
00014350  6f 6e 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |on the number of|
00014360  20 62 69 74 73 20 74 6f  20 64 69 73 70 6c 61 79  | bits to display|
00014370  2e 0a 00 00 44 49 52 24  b4 03 00 00 b4 03 00 00  |....DIR$........|
00014380  28 47 01 00 46 fd ff ff  04 fc ec 13 b8 01 00 00  |(G..F...........|
00014390  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
000143a0  e0 48 01 00 46 ff ff ff  d1 d8 8c a5 0d 01 00 00  |.H..F...........|
000143b0  13 00 00 00 00 00 00 00  56 65 72 73 69 6f 6e 00  |........Version.|
000143c0  f0 49 01 00 46 ff ff ff  43 88 8c a5 ec 01 00 00  |.I..F...C.......|
000143d0  13 00 00 00 00 00 00 00  4c 6f 61 64 00 00 00 00  |........Load....|
000143e0  dc 4b 01 00 46 ff ff ff  3d 91 0e fb 83 04 00 00  |.K..F...=.......|
000143f0  13 00 00 00 00 00 00 00  6d 65 6d 6f 72 79 6c 6f  |........memorylo|
00014400  61 64 00 00 60 50 01 00  46 ff ff ff 84 e2 8c a5  |ad..`P..F.......|
00014410  a6 00 00 00 13 00 00 00  00 00 00 00 50 6c 61 79  |............Play|
00014420  00 00 00 00 08 51 01 00  46 ff ff ff 5e eb 8c a5  |.....Q..F...^...|
00014430  d5 01 00 00 13 00 00 00  00 00 00 00 53 74 6f 70  |............Stop|
00014440  00 00 00 00 e0 52 01 00  46 ff ff ff 3c ef 8c a5  |.....R..F...<...|
00014450  5f 00 00 00 13 00 00 00  00 00 00 00 50 61 75 73  |_...........Paus|
00014460  65 00 00 00 40 53 01 00  46 ff ff ff 36 c5 8c a5  |e...@S..F...6...|
00014470  b0 04 00 00 13 00 00 00  00 00 00 00 53 74 65 72  |............Ster|
00014480  65 6f 00 00 f0 57 01 00  46 ff ff ff fb cb 8c a5  |eo...W..F.......|
00014490  b4 01 00 00 13 00 00 00  00 00 00 00 53 65 74 50  |............SetP|
000144a0  6f 73 00 00 a4 59 01 00  46 ff ff ff 6b d4 8c a5  |os...Y..F...k...|
000144b0  8f 01 00 00 13 00 00 00  00 00 00 00 52 65 61 64  |............Read|
000144c0  50 6f 73 00 34 5b 01 00  46 ff ff ff d4 01 8d a5  |Pos.4[..F.......|
000144d0  bd 03 00 00 13 00 00 00  00 00 00 00 50 6c 61 79  |............Play|
000144e0  4e 6f 74 65 00 00 00 00  f4 5e 01 00 46 ff ff ff  |Note.....^..F...|
000144f0  08 08 8d a5 45 04 00 00  13 00 00 00 00 00 00 00  |....E...........|
00014500  54 75 6e 65 49 6e 66 6f  00 00 00 00 3c 63 01 00  |TuneInfo....<c..|
00014510  46 ff ff ff ef 0e 8d a5  3c 04 00 00 13 00 00 00  |F.......<.......|
00014520  00 00 00 00 53 6f 75 6e  64 49 6e 66 6f 00 00 00  |....SoundInfo...|
00014530  78 67 01 00 46 ff ff ff  f0 19 8d a5 aa 02 00 00  |xg..F...........|
00014540  13 00 00 00 00 00 00 00  52 65 61 64 53 61 6d 70  |........ReadSamp|
00014550  6c 65 54 61 62 6c 65 00  24 6a 01 00 46 ff ff ff  |leTable.$j..F...|
00014560  b0 c5 8d a5 63 05 00 00  13 00 00 00 00 00 00 00  |....c...........|
00014570  57 72 69 74 65 53 61 6d  70 6c 65 54 61 62 6c 65  |WriteSampleTable|
00014580  00 00 00 00 88 6f 01 00  46 ff ff ff 4c 5d 8d a5  |.....o..F...L]..|
00014590  1a 06 00 00 13 00 00 00  00 00 00 00 4c 6f 63 6b  |............Lock|
000145a0  00 00 00 00 a4 75 01 00  46 ff ff ff 38 52 8d a5  |.....u..F...8R..|
000145b0  4c 01 00 00 13 00 00 00  00 00 00 00 55 6e 6c 6f  |L...........Unlo|
000145c0  63 6b 00 00 f0 76 01 00  46 ff ff ff 22 71 8d a5  |ck...v..F..."q..|
000145d0  83 01 00 00 13 00 00 00  00 00 00 00 4d 75 74 65  |............Mute|
000145e0  43 68 61 6e 6e 65 6c 00  74 78 01 00 46 ff ff ff  |Channel.tx..F...|
000145f0  ce 81 8d a5 2f 01 00 00  13 00 00 00 00 00 00 00  |..../...........|
00014600  52 65 73 74 6f 72 65 43  68 61 6e 6e 65 6c 00 00  |RestoreChannel..|
00014610  a4 79 01 00 46 ff ff ff  1d 92 8d a5 17 02 00 00  |.y..F...........|
00014620  13 00 00 00 00 00 00 00  53 70 65 65 64 00 00 00  |........Speed...|
00014630  bc 7b 01 00 46 ff ff ff  19 a4 8d a5 03 02 00 00  |.{..F...........|
00014640  13 00 00 00 00 00 00 00  56 6f 6c 75 6d 65 00 00  |........Volume..|
00014650  c0 7d 01 00 46 ff ff ff  4d d9 8d a5 44 01 00 00  |.}..F...M...D...|
00014660  13 00 00 00 00 00 00 00  54 72 61 6e 73 6c 61 74  |........Translat|
00014670  65 56 6f 6c 75 6d 65 00  04 7f 01 00 46 ff ff ff  |eVolume.....F...|
00014680  d3 ee 8d a5 42 01 00 00  13 00 00 00 00 00 00 00  |....B...........|
00014690  55 70 64 61 74 65 44 61  74 61 00 00 48 80 01 00  |UpdateData..H...|
000146a0  46 fd ff ff f4 d7 c7 13  f7 01 00 00 13 00 00 00  |F...............|
000146b0  00 00 00 00 4e 6f 74 65  54 61 62 6c 65 00 00 00  |....NoteTable...|
000146c0  40 82 01 00 46 fd ff ff  9e a1 0e fb d9 0b 00 00  |@...F...........|
000146d0  13 00 00 00 00 00 00 00  63 6f 6d 6d 61 6e 64 73  |........commands|
000146e0  00 00 00 00 1c 8e 01 00  46 fd ff ff 8d 47 c9 13  |........F....G..|
000146f0  b6 06 00 00 13 00 00 00  00 00 00 00 45 72 72 6f  |............Erro|
00014700  72 73 00 00 d4 94 01 00  46 fd ff ff 3f 16 cb 13  |rs......F...?...|
00014710  0b 06 00 00 13 00 00 00  00 00 00 00 53 6f 75 6e  |............Soun|
00014720  64 42 6c 6f 63 6b 00 00  44 41 54 41 b8 01 00 00  |dBlock..DATA....|
00014730  54 72 61 63 6b 65 72 0a  23 50 61 72 65 6e 74 20  |Tracker.#Parent |
00014740  21 52 6f 6f 74 0a 23 50  72 65 66 69 78 20 54 72  |!Root.#Prefix Tr|
00014750  61 63 6b 65 72 5f 0a 23  54 61 62 6c 65 20 43 6f  |acker_.#Table Co|
00014760  6c 75 6d 6e 73 20 32 0a  3c 56 65 72 73 69 6f 6e  |lumns 2.<Version|
00014770  3e 0a 3c 4c 6f 61 64 3e  0a 3c 4d 65 6d 6f 72 79  |>.<Load>.<Memory|
00014780  4c 6f 61 64 3e 0a 3c 50  6c 61 79 3e 0a 3c 53 74  |Load>.<Play>.<St|
00014790  6f 70 3e 0a 3c 50 61 75  73 65 3e 0a 3c 53 74 65  |op>.<Pause>.<Ste|
000147a0  72 65 6f 3e 0a 3c 53 65  74 50 6f 73 3e 0a 3c 52  |reo>.<SetPos>.<R|
000147b0  65 61 64 50 6f 73 3e 0a  3c 50 6c 61 79 4e 6f 74  |eadPos>.<PlayNot|
000147c0  65 3e 0a 3c 54 75 6e 65  49 6e 66 6f 3e 0a 3c 53  |e>.<TuneInfo>.<S|
000147d0  6f 75 6e 64 49 6e 66 6f  3e 0a 3c 52 65 61 64 53  |oundInfo>.<ReadS|
000147e0  61 6d 70 6c 65 54 61 62  6c 65 3e 0a 3c 4c 6f 63  |ampleTable>.<Loc|
000147f0  6b 3e 0a 3c 55 6e 6c 6f  63 6b 3e 0a 3c 4d 75 74  |k>.<Unlock>.<Mut|
00014800  65 43 68 61 6e 6e 65 6c  3e 0a 3c 52 65 73 74 6f  |eChannel>.<Resto|
00014810  72 65 43 68 61 6e 6e 65  6c 3e 0a 3c 53 70 65 65  |reChannel>.<Spee|
00014820  64 3e 0a 3c 56 6f 6c 75  6d 65 3e 0a 3c 57 72 69  |d>.<Volume>.<Wri|
00014830  74 65 53 61 6d 70 6c 65  54 61 62 6c 65 3e 0a 3c  |teSampleTable>.<|
00014840  54 72 61 6e 73 6c 61 74  65 56 6f 6c 75 6d 65 3e  |TranslateVolume>|
00014850  0a 3c 55 70 64 61 74 65  44 61 74 61 3e 0a 23 45  |.<UpdateData>.#E|
00014860  6e 64 54 61 62 6c 65 0a  0a 4f 74 68 65 72 20 69  |ndTable..Other i|
00014870  6e 66 6f 72 6d 61 74 69  6f 6e 20 3a 0a 23 49 6e  |nformation :.#In|
00014880  64 65 6e 74 20 33 0a 3c  4e 6f 74 65 20 74 72 61  |dent 3.<Note tra|
00014890  6e 73 6c 61 74 69 6f 6e  20 74 61 62 6c 65 3d 3e  |nslation table=>|
000148a0  54 72 61 63 6b 65 72 5f  4e 6f 74 65 54 61 62 6c  |Tracker_NoteTabl|
000148b0  65 3e 0a 3c 54 72 61 63  6b 65 72 20 63 6f 6d 6d  |e>.<Tracker comm|
000148c0  61 6e 64 73 3d 3e 54 72  61 63 6b 65 72 5f 43 6f  |ands=>Tracker_Co|
000148d0  6d 6d 61 6e 64 73 3e 0a  3c 45 72 72 6f 72 73 3e  |mmands>.<Errors>|
000148e0  44 41 54 41 0d 01 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
000148f0  56 65 72 73 69 6f 6e 20  20 28 26 34 33 32 30 30  |Version  (&43200|
00014900  29 0a 23 50 61 72 65 6e  74 20 54 72 61 63 6b 65  |).#Parent Tracke|
00014910  72 5f 0a 3d 3e 09 52 30  20 3d 09 76 65 72 73 69  |r_.=>.R0 =.versi|
00014920  6f 6e 20 6e 75 6d 62 65  72 2a 31 30 30 20 20 28  |on number*100  (|
00014930  69 65 2e 20 66 6f 72 20  76 31 2e 32 33 20 3d 20  |ie. for v1.23 = |
00014940  31 32 33 29 0a 0a 55 73  65 20 74 68 69 73 20 63  |123)..Use this c|
00014950  61 6c 6c 20 74 6f 20 65  6e 73 75 72 65 20 74 68  |all to ensure th|
00014960  61 74 20 74 68 65 20 54  72 61 63 6b 65 72 4d 6f  |at the TrackerMo|
00014970  64 75 6c 65 20 69 6e 73  74 61 6c 6c 65 64 20 69  |dule installed i|
00014980  73 20 61 20 72 65 63 65  6e 74 20 65 6e 6f 75 67  |s a recent enoug|
00014990  68 20 76 65 72 73 69 6f  6e 20 74 6f 20 73 75 70  |h version to sup|
000149a0  70 6f 72 74 20 74 68 65  20 53 57 49 27 73 20 79  |port the SWI's y|
000149b0  6f 75 20 77 69 73 68 20  74 6f 20 75 73 65 2e 20  |ou wish to use. |
000149c0  56 65 72 73 69 6f 6e 73  20 34 2e 30 30 20 6f 6e  |Versions 4.00 on|
000149d0  77 61 72 64 73 20 69 6e  63 6f 72 70 6f 72 61 74  |wards incorporat|
000149e0  65 20 74 68 65 20 53 57  49 27 73 2e 0a 00 00 00  |e the SWI's.....|
000149f0  44 41 54 41 ec 01 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
00014a00  4c 6f 61 64 20 20 28 26  34 33 32 30 31 29 0a 23  |Load  (&43201).#|
00014a10  50 61 72 65 6e 74 20 54  72 61 63 6b 65 72 5f 0a  |Parent Tracker_.|
00014a20  3d 3e 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |=>.R0 =.pointer |
00014a30  74 6f 20 66 69 6c 65 6e  61 6d 65 20 6f 66 20 73  |to filename of s|
00014a40  6f 75 6e 64 74 72 61 63  6b 65 72 2f 74 72 61 63  |oundtracker/trac|
00014a50  6b 65 72 20 6d 6f 64 75  6c 65 0a 5c 3c 3d 09 52  |ker module.\<=.R|
00014a60  30 20 70 72 65 73 65 72  76 65 64 0a 0a 54 68 69  |0 preserved..Thi|
00014a70  73 20 63 61 6c 6c 20 77  69 6c 6c 20 63 6c 61 69  |s call will clai|
00014a80  6d 20 6d 65 6d 6f 72 79  20 66 72 6f 6d 20 74 68  |m memory from th|
00014a90  65 20 52 4d 41 20 61 6e  64 20 6c 6f 61 64 20 74  |e RMA and load t|
00014aa0  68 65 20 73 70 65 63 69  66 69 65 64 20 74 75 6e  |he specified tun|
00014ab0  65 20 6d 6f 64 75 6c 65  2c 20 69 6e 69 74 69 61  |e module, initia|
00014ac0  6c 69 73 65 20 74 68 65  20 73 6f 75 6e 64 20 73  |lise the sound s|
00014ad0  79 73 74 65 6d 2c 20 61  6e 64 20 73 65 74 20 74  |ystem, and set t|
00014ae0  68 65 20 70 6c 61 79 72  6f 75 74 69 6e 65 20 69  |he playroutine i|
00014af0  6e 20 70 61 75 73 65 20  6d 6f 64 65 2e 20 59 6f  |n pause mode. Yo|
00014b00  75 20 6d 75 73 74 20 74  68 65 6e 20 75 73 65 20  |u must then use |
00014b10  3c 54 72 61 63 6b 65 72  5f 50 6c 61 79 3e 20 74  |<Tracker_Play> t|
00014b20  6f 20 73 74 61 72 74 20  74 68 65 20 74 75 6e 65  |o start the tune|
00014b30  20 70 6c 61 79 69 6e 67  2e 20 54 68 65 20 63 6f  | playing. The co|
00014b40  6d 6d 61 6e 64 20 2a 50  6c 61 79 4d 6f 64 20 63  |mmand *PlayMod c|
00014b50  61 6c 6c 73 20 74 68 69  73 20 72 6f 75 74 69 6e  |alls this routin|
00014b60  65 2c 20 61 6e 64 20 74  68 65 6e 20 3c 54 72 61  |e, and then <Tra|
00014b70  63 6b 65 72 5f 50 6c 61  79 3e 2e 0a 0a 41 6e 20  |cker_Play>...An |
00014b80  65 72 72 6f 72 20 77 69  6c 6c 20 62 65 20 67 65  |error will be ge|
00014b90  6e 65 72 61 74 65 64 20  69 66 20 74 68 65 20 6d  |nerated if the m|
00014ba0  6f 64 75 6c 65 20 63 61  6e 6e 6f 74 20 62 65 20  |odule cannot be |
00014bb0  6c 6f 61 64 65 64 20 6f  72 20 6e 6f 74 20 65 6e  |loaded or not en|
00014bc0  6f 75 67 68 20 6d 65 6d  6f 72 79 20 63 61 6e 20  |ough memory can |
00014bd0  62 65 20 63 6c 61 69 6d  65 64 2e 0a 44 41 54 41  |be claimed..DATA|
00014be0  83 04 00 00 54 72 61 63  6b 65 72 5f 4d 65 6d 6f  |....Tracker_Memo|
00014bf0  72 79 4c 6f 61 64 20 20  28 26 34 33 32 30 32 29  |ryLoad  (&43202)|
00014c00  0a 23 50 61 72 65 6e 74  20 54 72 61 63 6b 65 72  |.#Parent Tracker|
00014c10  5f 0a 3d 3e 09 52 30 20  3d 09 70 6f 69 6e 74 65  |_.=>.R0 =.pointe|
00014c20  72 20 74 6f 20 66 69 72  73 74 20 77 6f 72 64 20  |r to first word |
00014c30  6f 66 20 73 6f 75 6e 64  74 72 61 63 6b 65 72 2f  |of soundtracker/|
00014c40  74 72 61 63 6b 65 72 20  6d 6f 64 75 6c 65 20 69  |tracker module i|
00014c50  6e 20 6d 65 6d 6f 72 79  20 28 4e 42 20 6d 75 73  |n memory (NB mus|
00014c60  74 20 62 65 20 77 6f 72  64 2d 61 6c 69 67 6e 65  |t be word-aligne|
00014c70  64 29 0a 09 52 31 20 3d  09 6c 65 6e 67 74 68 20  |d)..R1 =.length |
00014c80  6f 66 20 6d 6f 64 75 6c  65 20 69 6e 20 62 79 74  |of module in byt|
00014c90  65 73 0a 5c 3c 3d 09 52  30 20 61 6e 64 20 52 31  |es.\<=.R0 and R1|
00014ca0  20 70 72 65 73 65 72 76  65 64 0a 0a 54 68 69 73  | preserved..This|
00014cb0  20 63 61 6c 6c 20 63 61  6e 20 62 65 20 75 73 65  | call can be use|
00014cc0  64 20 62 79 20 61 20 6e  6f 6e 2d 6d 75 6c 74 69  |d by a non-multi|
00014cd0  74 61 73 6b 69 6e 67 20  61 70 70 6c 69 63 61 74  |tasking applicat|
00014ce0  69 6f 6e 20 74 6f 20 73  70 65 63 69 66 79 20 61  |ion to specify a|
00014cf0  6e 20 61 72 65 61 20 6f  66 20 6d 65 6d 6f 72 79  |n area of memory|
00014d00  20 61 73 20 61 20 74 75  6e 65 20 6d 6f 64 75 6c  | as a tune modul|
00014d10  65 2c 20 61 6e 64 20 74  68 65 72 65 62 79 20 72  |e, and thereby r|
00014d20  65 6d 6f 76 65 20 74 68  65 20 6e 65 65 64 20 66  |emove the need f|
00014d30  6f 72 20 61 20 73 65 70  65 72 61 74 65 20 66 69  |or a seperate fi|
00014d40  6c 65 20 74 6f 20 68 6f  6c 64 20 61 20 74 75 6e  |le to hold a tun|
00014d50  65 2c 20 61 6e 64 20 74  68 65 72 65 20 69 73 20  |e, and there is |
00014d60  6e 6f 20 6e 65 65 64 20  74 6f 20 63 6c 61 69 6d  |no need to claim|
00014d70  20 61 20 6c 61 72 67 65  20 61 6d 6f 75 6e 74 20  | a large amount |
00014d80  6f 66 20 52 4d 41 20 73  70 61 63 65 2e 20 4f 6e  |of RMA space. On|
00014d90  63 65 20 74 68 69 73 20  53 57 49 20 69 73 20 63  |ce this SWI is c|
00014da0  61 6c 6c 65 64 2c 20 74  68 65 20 6d 6f 64 75 6c  |alled, the modul|
00014db0  65 20 77 69 6c 6c 20 62  65 20 74 72 65 61 74 65  |e will be treate|
00014dc0  64 20 61 73 20 69 66 20  69 74 20 77 61 73 20 6c  |d as if it was l|
00014dd0  6f 61 64 65 64 20 69 6e  20 74 68 65 20 6d 6f 64  |oaded in the mod|
00014de0  75 6c 65 27 73 20 6f 77  6e 20 77 6f 72 6b 73 70  |ule's own worksp|
00014df0  61 63 65 2e 0a 57 68 65  6e 20 61 20 73 6f 75 6e  |ace..When a soun|
00014e00  64 74 72 61 63 6b 65 72  20 6d 6f 64 75 6c 65 20  |dtracker module |
00014e10  69 73 20 6c 6f 61 64 65  64 2c 20 74 68 65 20 70  |is loaded, the p|
00014e20  61 74 74 65 72 6e 20 64  61 74 61 20 69 73 20 63  |attern data is c|
00014e30  6f 6e 76 65 72 74 65 64  20 74 6f 20 54 72 61 63  |onverted to Trac|
00014e40  6b 65 72 20 66 6f 72 6d  61 74 20 64 61 74 61 20  |ker format data |
00014e50  28 65 78 63 65 70 74 20  66 6f 72 20 76 6f 6c 75  |(except for volu|
00014e60  6d 65 73 20 77 68 69 63  68 20 72 65 6d 61 69 6e  |mes which remain|
00014e70  20 30 2d 36 34 29 2c 20  73 6f 20 20 66 6f 72 20  | 0-64), so  for |
00014e80  74 68 65 20 70 75 72 70  6f 73 65 73 20 6f 66 20  |the purposes of |
00014e90  65 64 69 74 69 6e 67 2c  20 61 73 20 6c 6f 6e 67  |editing, as long|
00014ea0  20 61 73 20 3c 54 72 61  63 6b 65 72 5f 52 65 61  | as <Tracker_Rea|
00014eb0  64 50 6f 73 3e 2f 3c 54  72 61 63 6b 65 72 5f 57  |dPos>/<Tracker_W|
00014ec0  72 69 74 65 53 61 6d 70  6c 65 54 61 62 6c 65 3e  |riteSampleTable>|
00014ed0  20 61 72 65 20 75 73 65  64 2c 20 74 68 65 20 6d  | are used, the m|
00014ee0  6f 64 75 6c 65 20 63 61  6e 20 62 65 20 63 6f 6e  |odule can be con|
00014ef0  73 69 64 65 72 65 64 20  61 73 20 61 20 54 72 61  |sidered as a Tra|
00014f00  63 6b 65 72 20 6d 6f 64  75 6c 65 2e 20 57 68 65  |cker module. Whe|
00014f10  6e 20 3c 54 72 61 63 6b  65 72 5f 53 74 6f 70 3e  |n <Tracker_Stop>|
00014f20  2f 2a 50 6c 61 79 53 74  6f 70 20 69 73 20 63 61  |/*PlayStop is ca|
00014f30  6c 6c 65 64 2c 20 74 68  65 20 64 61 74 61 20 69  |lled, the data i|
00014f40  73 20 63 6f 6e 76 65 72  74 65 64 20 62 61 63 6b  |s converted back|
00014f50  2e 0a 0a 49 6d 70 6f 72  74 61 6e 74 3a 20 59 6f  |...Important: Yo|
00014f60  75 20 6d 75 73 74 20 74  65 6c 6c 20 74 68 65 20  |u must tell the |
00014f70  54 72 61 63 6b 65 72 4d  6f 64 75 6c 65 20 74 6f  |TrackerModule to|
00014f80  20 66 6f 72 67 65 74 20  74 68 65 20 6d 6f 64 75  | forget the modu|
00014f90  6c 65 20 69 66 20 74 68  65 20 6d 65 6d 6f 72 79  |le if the memory|
00014fa0  20 77 69 6c 6c 20 62 65  20 6f 76 65 72 77 72 69  | will be overwri|
00014fb0  74 74 65 6e 2c 20 6f 74  68 65 72 77 69 73 65 20  |tten, otherwise |
00014fc0  74 68 65 20 6d 6f 64 75  6c 65 20 6d 61 79 20 63  |the module may c|
00014fd0  72 61 73 68 2e 20 28 2a  50 6c 61 79 53 74 6f 70  |rash. (*PlayStop|
00014fe0  20 6f 72 20 3c 54 72 61  63 6b 65 72 5f 53 74 6f  | or <Tracker_Sto|
00014ff0  70 3e 29 0a 0a 4e 42 3a  20 54 68 69 73 20 63 61  |p>)..NB: This ca|
00015000  6c 6c 20 77 69 6c 6c 20  6e 6f 74 20 77 6f 72 6b  |ll will not work|
00015010  20 66 6f 72 20 70 72 6f  67 72 61 6d 73 20 72 75  | for programs ru|
00015020  6e 6e 69 6e 67 20 75 6e  64 65 72 20 74 68 65 20  |nning under the |
00015030  64 65 73 6b 74 6f 70 20  69 66 20 74 68 65 20 6d  |desktop if the m|
00015040  6f 64 75 6c 65 20 69 73  20 6c 6f 61 64 65 64 20  |odule is loaded |
00015050  69 6e 20 75 73 65 72 20  6d 65 6d 6f 72 79 2e 00  |in user memory..|
00015060  44 41 54 41 a6 00 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
00015070  50 6c 61 79 20 20 28 26  34 33 32 30 33 29 0a 23  |Play  (&43203).#|
00015080  50 61 72 65 6e 74 20 54  72 61 63 6b 65 72 5f 0a  |Parent Tracker_.|
00015090  54 68 69 73 20 63 61 6c  6c 20 77 69 6c 6c 20 72  |This call will r|
000150a0  65 73 74 61 72 74 20 61  20 74 75 6e 65 20 61 66  |estart a tune af|
000150b0  74 65 72 20 69 74 20 68  61 73 20 62 65 65 6e 20  |ter it has been |
000150c0  70 61 75 73 65 64 20 6f  72 20 6c 6f 61 64 65 64  |paused or loaded|
000150d0  20 77 69 74 68 20 74 68  65 20 3c 54 72 61 63 6b  | with the <Track|
000150e0  65 72 5f 4c 6f 61 64 3e  20 6f 72 20 3c 54 72 61  |er_Load> or <Tra|
000150f0  63 6b 65 72 5f 4d 65 6d  6f 72 79 4c 6f 61 64 3e  |cker_MemoryLoad>|
00015100  20 53 57 49 2e 0a 00 00  44 41 54 41 d5 01 00 00  | SWI....DATA....|
00015110  54 72 61 63 6b 65 72 5f  53 74 6f 70 20 20 28 26  |Tracker_Stop  (&|
00015120  34 33 32 30 34 29 0a 23  50 61 72 65 6e 74 20 54  |43204).#Parent T|
00015130  72 61 63 6b 65 72 5f 0a  54 68 69 73 20 70 65 72  |racker_.This per|
00015140  66 6f 72 6d 73 20 74 68  65 20 73 61 6d 65 20 61  |forms the same a|
00015150  63 74 69 6f 6e 73 20 61  73 20 2a 50 6c 61 79 53  |ctions as *PlayS|
00015160  74 6f 70 2e 20 55 73 69  6e 67 20 2a 50 6c 61 79  |top. Using *Play|
00015170  53 74 6f 70 20 6f 72 20  74 68 69 73 20 53 57 49  |Stop or this SWI|
00015180  20 69 73 20 74 68 65 20  6f 6e 6c 79 20 77 61 79  | is the only way|
00015190  20 74 6f 20 67 65 74 20  74 68 65 20 74 72 61 63  | to get the trac|
000151a0  6b 65 72 6d 6f 64 75 6c  65 20 74 6f 20 72 65 6c  |kermodule to rel|
000151b0  65 61 73 65 20 74 68 65  20 6d 65 6d 6f 72 79 20  |ease the memory |
000151c0  74 61 6b 65 6e 20 75 70  20 62 79 20 74 68 65 20  |taken up by the |
000151d0  74 75 6e 65 20 6d 6f 64  75 6c 65 2c 20 6f 72 20  |tune module, or |
000151e0  74 6f 20 66 6f 72 63 65  20 69 74 20 74 6f 20 66  |to force it to f|
000151f0  6f 72 67 65 74 20 74 68  65 20 61 64 64 72 65 73  |orget the addres|
00015200  73 20 6f 66 20 61 20 6d  6f 64 75 6c 65 20 69 66  |s of a module if|
00015210  20 69 74 20 68 61 73 20  62 65 65 6e 20 6c 6f 61  | it has been loa|
00015220  64 65 64 20 77 69 74 68  20 3c 54 72 61 63 6b 65  |ded with <Tracke|
00015230  72 5f 4d 65 6d 6f 72 79  4c 6f 61 64 3e 2e 20 49  |r_MemoryLoad>. I|
00015240  66 20 74 68 65 20 6d 6f  64 75 6c 65 20 69 73 20  |f the module is |
00015250  73 6f 75 6e 64 74 72 61  63 6b 65 72 20 61 6e 64  |soundtracker and|
00015260  20 68 61 73 20 62 65 65  6e 20 6c 6f 61 64 65 64  | has been loaded|
00015270  20 77 69 74 68 20 3c 54  72 61 63 6b 65 72 5f 4d  | with <Tracker_M|
00015280  65 6d 6f 72 79 4c 6f 61  64 3e 2c 20 63 61 6c 6c  |emoryLoad>, call|
00015290  69 6e 67 20 74 68 69 73  20 53 57 49 20 6f 72 20  |ing this SWI or |
000152a0  2a 50 6c 61 79 53 74 6f  70 20 77 69 6c 6c 20 63  |*PlayStop will c|
000152b0  6f 6e 76 65 72 74 20 74  68 65 20 64 61 74 61 20  |onvert the data |
000152c0  62 61 63 6b 20 74 6f 20  74 68 65 20 6f 72 69 67  |back to the orig|
000152d0  69 6e 61 6c 20 66 6f 72  6d 61 74 2e 0a 00 00 00  |inal format.....|
000152e0  44 41 54 41 5f 00 00 00  54 72 61 63 6b 65 72 5f  |DATA_...Tracker_|
000152f0  50 61 75 73 65 20 20 28  26 34 33 32 30 35 29 0a  |Pause  (&43205).|
00015300  23 50 61 72 65 6e 74 20  54 72 61 63 6b 65 72 5f  |#Parent Tracker_|
00015310  0a 54 68 69 73 20 70 65  72 66 6f 72 6d 73 20 74  |.This performs t|
00015320  68 65 20 73 61 6d 65 20  61 63 74 69 6f 6e 73 20  |he same actions |
00015330  61 73 20 2a 50 6c 61 79  50 61 75 73 65 2e 0a 00  |as *PlayPause...|
00015340  44 41 54 41 b0 04 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
00015350  53 74 65 72 65 6f 20 20  28 26 34 33 32 30 36 29  |Stereo  (&43206)|
00015360  0a 23 50 61 72 65 6e 74  20 54 72 61 63 6b 65 72  |.#Parent Tracker|
00015370  5f 0a 3d 3e 09 52 30 20  3d 20 53 74 65 72 65 6f  |_.=>.R0 = Stereo|
00015380  20 73 65 74 74 69 6e 67  20 28 30 2d 34 29 20 6f  | setting (0-4) o|
00015390  72 20 2d 31 20 74 6f 20  72 65 61 64 20 63 75 72  |r -1 to read cur|
000153a0  72 65 6e 74 20 73 65 74  74 69 6e 67 0a 0a 5c 3c  |rent setting..\<|
000153b0  3d 09 49 66 20 52 30 3e  3d 30 20 6f 6e 20 65 6e  |=.If R0>=0 on en|
000153c0  74 72 79 3a 0a 09 20 20  52 30 20 70 72 65 73 65  |try:..  R0 prese|
000153d0  72 76 65 64 0a 09 49 66  20 52 30 3d 2d 31 20 6f  |rved..If R0=-1 o|
000153e0  6e 20 65 6e 74 72 79 3a  0a 09 20 20 52 30 20 3d  |n entry:..  R0 =|
000153f0  20 63 75 72 72 65 6e 74  20 50 6c 61 79 53 74 65  | current PlaySte|
00015400  72 65 6f 20 73 65 74 74  69 6e 67 0a 09 20 20 52  |reo setting..  R|
00015410  31 20 3d 20 70 6f 69 6e  74 65 72 20 74 6f 20 38  |1 = pointer to 8|
00015420  2d 62 79 74 65 20 73 74  65 72 65 6f 20 70 6f 73  |-byte stereo pos|
00015430  69 74 69 6f 6e 20 74 61  62 6c 65 0a 0a 54 68 69  |ition table..Thi|
00015440  73 20 70 65 72 66 6f 72  6d 73 20 74 68 65 20 73  |s performs the s|
00015450  61 6d 65 20 61 63 74 69  6f 6e 73 20 61 73 20 2a  |ame actions as *|
00015460  50 6c 61 79 53 74 65 72  65 6f 2c 20 77 69 74 68  |PlayStereo, with|
00015470  20 52 30 20 70 61 73 73  65 64 20 61 73 20 61 20  | R0 passed as a |
00015480  70 61 72 61 6d 65 74 65  72 2e 20 49 66 20 52 30  |parameter. If R0|
00015490  20 69 73 20 73 65 74 20  74 6f 20 34 20 6f 6e 20  | is set to 4 on |
000154a0  65 6e 74 72 79 2c 20 74  68 65 6e 20 74 68 65 20  |entry, then the |
000154b0  73 74 65 72 65 6f 20 73  65 74 74 69 6e 67 73 20  |stereo settings |
000154c0  77 69 6c 6c 20 62 65 20  75 6e 61 6c 74 65 72 65  |will be unaltere|
000154d0  64 20 77 68 65 6e 65 76  65 72 20 61 20 6d 6f 64  |d whenever a mod|
000154e0  75 6c 65 20 69 73 20 6c  6f 61 64 65 64 20 6f 72  |ule is loaded or|
000154f0  20 6b 69 6c 6c 65 64 2c  20 61 6e 64 20 64 69 73  | killed, and dis|
00015500  61 62 6c 65 73 20 61 6e  79 20 73 74 65 72 65 6f  |ables any stereo|
00015510  20 63 6f 6d 6d 61 6e 64  73 20 69 6e 20 74 72 61  | commands in tra|
00015520  63 6b 65 72 20 6d 6f 64  75 6c 65 73 2e 20 54 68  |cker modules. Th|
00015530  69 73 20 69 73 20 74 6f  20 61 6c 6c 6f 77 20 69  |is is to allow i|
00015540  6e 74 65 72 66 61 63 69  6e 67 20 70 72 6f 67 72  |nterfacing progr|
00015550  61 6d 73 20 74 6f 20 70  72 6f 76 69 64 65 20 74  |ams to provide t|
00015560  68 65 69 72 20 6f 77 6e  20 73 74 65 72 65 6f 20  |heir own stereo |
00015570  6f 70 74 69 6f 6e 73 2c  20 6f 72 20 74 6f 20 61  |options, or to a|
00015580  6c 6c 6f 77 20 61 64 6a  75 73 74 6d 65 6e 74 20  |llow adjustment |
00015590  74 6f 20 74 68 65 20 73  74 65 72 65 6f 20 70 6f  |to the stereo po|
000155a0  73 69 74 69 6f 6e 73 20  77 68 69 6c 65 20 74 72  |sitions while tr|
000155b0  61 63 6b 65 72 20 74 75  6e 65 73 20 61 72 65 20  |acker tunes are |
000155c0  70 6c 61 79 69 6e 67 20  28 77 68 69 63 68 20 68  |playing (which h|
000155d0  61 76 65 20 64 65 66 61  75 6c 74 20 73 74 65 72  |ave default ster|
000155e0  65 6f 20 73 65 74 74 69  6e 67 73 20 73 74 6f 72  |eo settings stor|
000155f0  65 64 20 61 73 20 70 61  72 74 20 6f 66 20 74 68  |ed as part of th|
00015600  65 20 74 75 6e 65 29 2e  0a 0a 41 6c 74 65 72 6e  |e tune)...Altern|
00015610  61 74 69 76 65 6c 79 2c  20 69 66 20 52 30 3d 2d  |atively, if R0=-|
00015620  31 20 6f 6e 20 65 6e 74  72 79 2c 20 52 30 20 77  |1 on entry, R0 w|
00015630  69 6c 6c 20 62 65 20 74  68 65 20 6c 61 73 74 20  |ill be the last |
00015640  70 61 72 61 6d 65 74 65  72 20 70 61 73 73 65 64  |parameter passed|
00015650  20 74 6f 20 74 68 69 73  20 53 57 49 20 6f 72 20  | to this SWI or |
00015660  74 68 65 20 2a 50 6c 61  79 53 74 65 72 65 6f 20  |the *PlayStereo |
00015670  63 6f 6d 6d 61 6e 64 2c  20 61 6e 64 20 52 31 20  |command, and R1 |
00015680  70 6f 69 6e 74 73 20 74  6f 20 61 6e 20 38 2d 62  |points to an 8-b|
00015690  79 74 65 20 74 61 62 6c  65 20 28 6f 6e 65 20 62  |yte table (one b|
000156a0  79 74 65 20 70 65 72 20  63 68 61 6e 6e 65 6c 29  |yte per channel)|
000156b0  20 77 68 69 63 68 20 69  73 20 75 70 64 61 74 65  | which is update|
000156c0  64 20 65 76 65 72 79 20  74 69 6d 65 20 65 69 74  |d every time eit|
000156d0  68 65 72 20 61 20 74 75  6e 65 20 73 74 61 72 74  |her a tune start|
000156e0  73 3b 20 74 68 69 73 20  53 57 49 20 6f 72 20 2a  |s; this SWI or *|
000156f0  50 6c 61 79 53 74 65 72  65 6f 20 69 73 20 63 61  |PlayStereo is ca|
00015700  6c 6c 65 64 20 77 69 74  68 20 61 20 70 61 72 61  |lled with a para|
00015710  6d 65 74 65 72 20 6f 66  20 30 2d 33 3b 20 6f 72  |meter of 0-3; or|
00015720  20 69 66 20 61 20 73 74  65 72 65 6f 20 63 6f 6d  | if a stereo com|
00015730  6d 61 6e 64 20 69 73 20  65 78 65 63 75 74 65 64  |mand is executed|
00015740  20 69 6e 20 61 20 54 72  61 63 6b 65 72 20 74 75  | in a Tracker tu|
00015750  6e 65 2e 20 54 68 65 20  62 79 74 65 20 77 69 6c  |ne. The byte wil|
00015760  6c 20 62 65 20 69 6e 20  74 68 65 20 72 61 6e 67  |l be in the rang|
00015770  65 20 6f 66 20 31 2d 37  20 28 77 68 65 72 65 20  |e of 1-7 (where |
00015780  31 20 69 73 20 66 75 6c  6c 20 6c 65 66 74 2c 20  |1 is full left, |
00015790  37 20 69 73 20 66 75 6c  6c 20 72 69 67 68 74 2c  |7 is full right,|
000157a0  20 61 6e 64 20 34 20 69  73 20 63 65 6e 74 72 65  | and 4 is centre|
000157b0  29 2e 20 53 6f 6d 65 20  54 72 61 63 6b 65 72 20  |). Some Tracker |
000157c0  74 75 6e 65 73 20 6d 61  79 20 63 6f 6e 74 61 69  |tunes may contai|
000157d0  6e 20 73 74 65 72 65 6f  20 73 65 74 74 69 6e 67  |n stereo setting|
000157e0  73 20 6f 75 74 20 6f 66  20 72 61 6e 67 65 2e 0a  |s out of range..|
000157f0  44 41 54 41 b4 01 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
00015800  53 65 74 50 6f 73 20 20  28 26 34 33 32 30 37 29  |SetPos  (&43207)|
00015810  0a 23 50 61 72 65 6e 74  20 54 72 61 63 6b 65 72  |.#Parent Tracker|
00015820  5f 0a 3d 3e 09 52 30 20  3d 20 4e 65 77 20 73 65  |_.=>.R0 = New se|
00015830  71 75 65 6e 63 65 20 70  6f 73 69 74 69 6f 6e 20  |quence position |
00015840  28 30 2d 31 32 37 20 6d  61 78 29 0a 09 52 31 20  |(0-127 max)..R1 |
00015850  3d 20 45 76 65 6e 74 20  28 30 2d 36 33 20 6d 61  |= Event (0-63 ma|
00015860  78 29 0a 5c 3c 3d 09 52  30 20 70 72 65 73 65 72  |x).\<=.R0 preser|
00015870  76 65 64 0a 0a 54 68 69  73 20 70 65 72 66 6f 72  |ved..This perfor|
00015880  6d 73 20 74 68 65 20 73  61 6d 65 20 61 63 74 69  |ms the same acti|
00015890  6f 6e 73 20 61 73 20 2a  50 6c 61 79 50 6f 73 2c  |ons as *PlayPos,|
000158a0  20 65 78 63 65 70 74 20  74 68 61 74 20 74 68 65  | except that the|
000158b0  20 65 76 65 6e 74 20 77  69 74 68 20 74 68 65 20  | event with the |
000158c0  70 61 74 74 65 72 6e 20  63 61 6e 20 62 65 20 73  |pattern can be s|
000158d0  70 65 63 69 66 69 65 64  20 28 30 2d 36 33 20 6e  |pecified (0-63 n|
000158e0  6f 72 6d 61 6c 6c 79 29  2e 20 49 66 20 61 6e 20  |ormally). If an |
000158f0  65 76 65 6e 74 20 6e 75  6d 62 65 72 20 68 69 67  |event number hig|
00015900  68 65 72 20 74 68 61 6e  20 74 68 65 20 6e 75 6d  |her than the num|
00015910  62 65 72 20 6f 66 20 65  76 65 6e 74 73 20 69 6e  |ber of events in|
00015920  20 74 68 65 20 63 75 72  72 65 6e 74 20 70 61 74  | the current pat|
00015930  74 65 72 6e 20 69 73 20  73 70 65 63 69 66 69 65  |tern is specifie|
00015940  64 2c 20 74 68 65 20 70  61 74 74 65 72 6e 20 77  |d, the pattern w|
00015950  69 6c 6c 20 62 65 67 69  6e 20 61 74 20 65 76 65  |ill begin at eve|
00015960  6e 74 20 30 2e 0a 0a 49  66 20 74 68 65 72 65 20  |nt 0...If there |
00015970  69 73 20 6e 6f 20 74 75  6e 65 20 63 75 72 72 65  |is no tune curre|
00015980  6e 74 6c 79 20 6c 6f 61  64 65 64 2c 20 61 6e 20  |ntly loaded, an |
00015990  65 72 72 6f 72 20 69 73  20 67 65 6e 65 72 61 74  |error is generat|
000159a0  65 64 2e 0a 44 41 54 41  8f 01 00 00 54 72 61 63  |ed..DATA....Trac|
000159b0  6b 65 72 5f 52 65 61 64  50 6f 73 20 20 28 26 34  |ker_ReadPos  (&4|
000159c0  33 32 30 38 29 0a 23 50  61 72 65 6e 74 20 54 72  |3208).#Parent Tr|
000159d0  61 63 6b 65 72 5f 0a 3d  3e 09 52 30 20 3d 09 43  |acker_.=>.R0 =.C|
000159e0  75 72 72 65 6e 74 20 70  6f 73 69 74 69 6f 6e 20  |urrent position |
000159f0  69 6e 20 73 65 71 75 65  6e 63 65 20 74 61 62 6c  |in sequence tabl|
00015a00  65 20 28 30 2d 31 32 37  20 6d 61 78 29 0a 09 52  |e (0-127 max)..R|
00015a10  31 20 3d 09 43 75 72 72  65 6e 74 20 70 6f 73 69  |1 =.Current posi|
00015a20  74 69 6f 6e 20 69 6e 20  70 61 74 74 65 72 6e 20  |tion in pattern |
00015a30  28 30 2d 36 33 20 6d 61  78 29 0a 09 52 32 20 3d  |(0-63 max)..R2 =|
00015a40  09 4d 61 78 69 6d 75 6d  20 70 6f 73 69 74 69 6f  |.Maximum positio|
00015a50  6e 20 69 6e 20 73 65 71  75 65 6e 63 65 20 74 61  |n in sequence ta|
00015a60  62 6c 65 0a 0a 54 68 69  73 20 70 65 72 66 6f 72  |ble..This perfor|
00015a70  6d 73 20 74 68 65 20 73  61 6d 65 20 61 63 74 69  |ms the same acti|
00015a80  6f 6e 73 20 61 73 20 2a  50 6c 61 79 50 6f 73 20  |ons as *PlayPos |
00015a90  77 69 74 68 20 6e 6f 20  70 61 72 61 6d 65 74 65  |with no paramete|
00015aa0  72 73 2c 20 62 75 74 20  61 6c 73 6f 20 72 65 74  |rs, but also ret|
00015ab0  75 72 6e 73 20 74 68 65  20 63 75 72 72 65 6e 74  |urns the current|
00015ac0  20 70 6f 73 69 74 69 6f  6e 20 69 6e 20 74 68 65  | position in the|
00015ad0  20 63 75 72 72 65 6e 74  20 70 61 74 74 65 72 6e  | current pattern|
00015ae0  20 28 69 6e 20 63 61 73  65 20 73 6f 6d 65 20 61  | (in case some a|
00015af0  70 70 6c 69 63 61 74 69  6f 6e 73 20 6e 65 65 64  |pplications need|
00015b00  20 74 6f 20 73 79 6e 63  68 72 6f 6e 69 7a 65 20  | to synchronize |
00015b10  65 76 65 6e 74 73 20 77  69 74 68 20 74 68 65 20  |events with the |
00015b20  74 75 6e 65 20 62 65 69  6e 67 20 70 6c 61 79 65  |tune being playe|
00015b30  64 29 2e 00 44 41 54 41  bd 03 00 00 54 72 61 63  |d)..DATA....Trac|
00015b40  6b 65 72 5f 50 6c 61 79  4e 6f 74 65 20 20 28 26  |ker_PlayNote  (&|
00015b50  34 33 32 30 39 29 0a 23  50 61 72 65 6e 74 20 54  |43209).#Parent T|
00015b60  72 61 63 6b 65 72 5f 0a  3d 3e 09 52 30 20 3d 09  |racker_.=>.R0 =.|
00015b70  53 6f 75 6e 64 20 63 68  61 6e 6e 65 6c 20 74 6f  |Sound channel to|
00015b80  20 73 6f 75 6e 64 20 6e  6f 74 65 20 6f 6e 20 28  | sound note on (|
00015b90  31 2d 38 20 6d 61 78 29  0a 09 52 31 20 3d 09 54  |1-8 max)..R1 =.T|
00015ba0  72 61 63 6b 65 72 20 66  6f 72 6d 61 74 20 6e 6f  |racker format no|
00015bb0  74 65 20 6e 75 6d 62 65  72 20 28 31 2d 33 36 29  |te number (1-36)|
00015bc0  0a 09 52 32 20 3d 09 53  61 6d 70 6c 65 20 74 6f  |..R2 =.Sample to|
00015bd0  20 70 6c 61 79 20 28 31  2d 33 36 29 0a 09 52 33  | play (1-36)..R3|
00015be0  20 3d 09 56 6f 6c 75 6d  65 20 28 30 2d 32 35 35  | =.Volume (0-255|
00015bf0  29 20 5b 54 72 61 63 6b  65 72 20 76 6f 6c 75 6d  |) [Tracker volum|
00015c00  65 20 65 76 65 6e 20 69  66 20 73 6f 75 6e 64 74  |e even if soundt|
00015c10  72 61 63 6b 65 72 20 74  75 6e 65 20 6c 6f 61 64  |racker tune load|
00015c20  65 64 5d 2e 0a 5c 3c 3d  09 52 30 2d 52 33 20 70  |ed]..\<=.R0-R3 p|
00015c30  72 65 73 65 72 76 65 64  0a 09 49 66 20 74 75 6e  |reserved..If tun|
00015c40  65 20 6e 6f 74 20 70 61  75 73 65 64 20 74 68 65  |e not paused the|
00015c50  6e 20 43 20 66 6c 61 67  20 73 65 74 20 6f 74 68  |n C flag set oth|
00015c60  65 72 77 69 73 65 20 43  20 66 6c 61 67 20 63 6c  |erwise C flag cl|
00015c70  65 61 72 65 64 2e 0a 0a  49 66 20 74 68 65 72 65  |eared...If there|
00015c80  20 69 73 20 6e 6f 20 74  75 6e 65 20 6c 6f 61 64  | is no tune load|
00015c90  65 64 2c 20 61 6e 20 65  72 72 6f 72 20 77 69 6c  |ed, an error wil|
00015ca0  6c 20 62 65 20 67 65 6e  65 72 61 74 65 64 2e 0a  |l be generated..|
00015cb0  0a 49 74 20 70 6c 61 79  73 20 6f 6e 65 20 6f 66  |.It plays one of|
00015cc0  20 74 68 65 20 73 61 6d  70 6c 65 73 20 77 68 69  | the samples whi|
00015cd0  63 68 20 61 72 65 20 70  61 72 74 20 6f 66 20 74  |ch are part of t|
00015ce0  68 65 20 70 61 75 73 65  64 20 74 75 6e 65 20 61  |he paused tune a|
00015cf0  74 20 61 20 67 69 76 65  6e 20 70 69 74 63 68 20  |t a given pitch |
00015d00  28 31 3d 6c 6f 77 2c 20  33 36 3d 68 69 67 68 29  |(1=low, 36=high)|
00015d10  20 61 6e 64 20 76 6f 6c  75 6d 65 20 28 30 3d 73  | and volume (0=s|
00015d20  69 6c 65 6e 74 2c 20 32  35 35 3d 6c 6f 75 64 29  |ilent, 255=loud)|
00015d30  2e 20 49 66 20 61 6e 79  20 6f 66 20 74 68 65 20  |. If any of the |
00015d40  76 61 6c 75 65 73 20 61  72 65 20 6f 75 74 20 6f  |values are out o|
00015d50  66 20 72 61 6e 67 65 2c  20 61 6e 20 65 72 72 6f  |f range, an erro|
00015d60  72 20 77 69 6c 6c 20 62  65 20 72 65 70 6f 72 74  |r will be report|
00015d70  65 64 2e 0a 54 68 65 20  6e 75 6d 62 65 72 20 6f  |ed..The number o|
00015d80  66 20 73 6f 75 6e 64 20  63 68 61 6e 6e 65 6c 73  |f sound channels|
00015d90  20 74 68 61 74 20 63 61  6e 20 62 65 20 75 73 65  | that can be use|
00015da0  64 20 64 65 70 65 6e 64  73 20 6f 6e 20 74 68 65  |d depends on the|
00015db0  20 6d 6f 64 75 6c 65 20  6c 6f 61 64 65 64 20 28  | module loaded (|
00015dc0  73 6f 75 6e 64 74 72 61  63 6b 65 72 20 6d 6f 64  |soundtracker mod|
00015dd0  75 6c 65 73 20 77 69 6c  6c 20 61 6c 77 61 79 73  |ules will always|
00015de0  20 75 73 65 20 34 20 76  6f 69 63 65 73 2c 20 77  | use 4 voices, w|
00015df0  68 65 72 65 61 73 20 54  72 61 63 6b 65 72 20 6d  |hereas Tracker m|
00015e00  6f 64 75 6c 65 73 20 63  61 6e 20 75 73 65 20 75  |odules can use u|
00015e10  70 20 74 6f 20 38 29 2e  20 55 73 65 20 3c 54 72  |p to 8). Use <Tr|
00015e20  61 63 6b 65 72 5f 54 75  6e 65 49 6e 66 6f 3e 20  |acker_TuneInfo> |
00015e30  74 6f 20 66 69 6e 64 20  6f 75 74 20 74 68 65 20  |to find out the |
00015e40  6d 61 78 69 6d 75 6d 20  6e 75 6d 62 65 72 20 6f  |maximum number o|
00015e50  66 20 76 6f 69 63 65 73  20 69 66 20 79 6f 75 20  |f voices if you |
00015e60  69 6e 74 65 6e 64 20 74  6f 20 70 6c 61 79 20 6d  |intend to play m|
00015e70  6f 72 65 20 74 68 61 6e  20 6f 6e 65 20 6e 6f 74  |ore than one not|
00015e80  65 20 61 74 20 61 20 74  69 6d 65 2e 0a 0a 4e 42  |e at a time...NB|
00015e90  3a 20 54 68 69 73 20 63  61 6c 6c 20 73 68 6f 75  |: This call shou|
00015ea0  6c 64 20 62 65 20 61 76  6f 69 64 65 64 20 69 66  |ld be avoided if|
00015eb0  20 70 6f 73 73 69 62 6c  65 2c 20 75 6e 6c 65 73  | possible, unles|
00015ec0  73 20 74 68 65 20 70 75  72 70 6f 73 65 20 69 73  |s the purpose is|
00015ed0  20 74 6f 20 68 65 61 72  20 65 61 63 68 20 73 61  | to hear each sa|
00015ee0  6d 70 6c 65 20 73 65 70  65 72 61 74 65 6c 79 2e  |mple seperately.|
00015ef0  0a 00 00 00 44 41 54 41  45 04 00 00 54 72 61 63  |....DATAE...Trac|
00015f00  6b 65 72 5f 54 75 6e 65  49 6e 66 6f 20 20 28 26  |ker_TuneInfo  (&|
00015f10  34 33 32 30 41 29 0a 23  50 61 72 65 6e 74 20 54  |4320A).#Parent T|
00015f20  72 61 63 6b 65 72 5f 0a  5c 3c 3d 09 52 30 20 3d  |racker_.\<=.R0 =|
00015f30  09 53 65 71 75 65 6e 63  65 20 74 61 62 6c 65 20  |.Sequence table |
00015f40  6c 65 6e 67 74 68 20 28  31 2d 31 32 38 29 0a 09  |length (1-128)..|
00015f50  52 31 20 3d 09 4e 75 6d  62 65 72 20 6f 66 20 76  |R1 =.Number of v|
00015f60  6f 69 63 65 73 20 28 31  2d 38 29 0a 09 52 32 20  |oices (1-8)..R2 |
00015f70  3d 09 43 75 72 72 65 6e  74 20 73 70 65 65 64 20  |=.Current speed |
00015f80  28 31 2d 31 35 29 0a 09  52 33 20 3d 09 50 6f 69  |(1-15)..R3 =.Poi|
00015f90  6e 74 65 72 20 74 6f 20  74 75 6e 65 20 6e 61 6d  |nter to tune nam|
00015fa0  65 20 28 74 65 72 6d 69  6e 61 74 65 64 20 62 79  |e (terminated by|
00015fb0  20 30 2c 20 6d 61 78 20  6c 65 6e 67 74 68 20 33  | 0, max length 3|
00015fc0  32 20 63 68 61 72 73 29  0a 09 52 34 20 3d 09 50  |2 chars)..R4 =.P|
00015fd0  6f 69 6e 74 65 72 20 74  6f 20 61 75 74 68 6f 72  |ointer to author|
00015fe0  27 73 20 6e 61 6d 65 20  28 30 20 74 65 72 6d 69  |'s name (0 termi|
00015ff0  6e 61 74 65 64 2c 20 6d  61 78 20 6c 65 6e 67 74  |nated, max lengt|
00016000  68 20 33 32 20 63 68 61  72 73 29 20 6f 72 20 7a  |h 32 chars) or z|
00016010  65 72 6f 20 69 66 20 73  6f 75 6e 64 74 72 61 63  |ero if soundtrac|
00016020  6b 65 72 20 66 6f 72 6d  61 74 20 6d 6f 64 75 6c  |ker format modul|
00016030  65 20 28 6e 6f 74 20 61  70 70 6c 69 63 61 62 6c  |e (not applicabl|
00016040  65 29 0a 09 52 35 20 3d  09 41 64 64 72 65 73 73  |e)..R5 =.Address|
00016050  20 6f 66 20 63 75 72 72  65 6e 74 6c 79 20 6c 6f  | of currently lo|
00016060  61 64 65 64 20 74 75 6e  65 20 6d 6f 64 75 6c 65  |aded tune module|
00016070  0a 20 20 20 20 20 20 20  20 20 20 20 0a 49 66 20  |.           .If |
00016080  74 68 65 20 74 75 6e 65  20 69 73 20 70 61 75 73  |the tune is paus|
00016090  65 64 2c 20 74 68 65 20  43 20 66 6c 61 67 20 69  |ed, the C flag i|
000160a0  73 20 73 65 74 2c 20 6f  74 68 65 72 77 69 73 65  |s set, otherwise|
000160b0  20 74 68 65 20 43 20 66  6c 61 67 20 69 73 20 63  | the C flag is c|
000160c0  6c 65 61 72 65 64 2e 20  49 66 20 74 68 65 72 65  |leared. If there|
000160d0  20 69 73 20 6e 6f 20 74  75 6e 65 20 6c 6f 61 64  | is no tune load|
000160e0  65 64 2c 20 52 30 20 69  73 20 73 65 74 20 74 6f  |ed, R0 is set to|
000160f0  20 7a 65 72 6f 2c 20 61  6e 64 20 52 31 2d 52 35  | zero, and R1-R5|
00016100  20 61 72 65 20 70 72 65  73 65 72 76 65 64 2e 0a  | are preserved..|
00016110  0a 54 68 69 73 20 63 61  6c 6c 20 70 72 6f 76 69  |.This call provi|
00016120  64 65 73 20 6d 69 73 63  65 6c 6c 61 6e 65 6f 75  |des miscellaneou|
00016130  73 20 69 6e 66 6f 72 6d  61 74 69 6f 6e 20 61 62  |s information ab|
00016140  6f 75 74 20 74 68 65 20  74 75 6e 65 20 63 75 72  |out the tune cur|
00016150  72 65 6e 74 6c 79 20 6c  6f 61 64 65 64 2e 0a 0a  |rently loaded...|
00016160  59 6f 75 20 73 68 6f 75  6c 64 20 6e 6f 74 20 6e  |You should not n|
00016170  65 65 64 20 74 6f 20 64  69 72 65 63 74 6c 79 20  |eed to directly |
00016180  61 63 63 65 73 73 20 74  68 65 20 74 75 6e 65 20  |access the tune |
00016190  6d 6f 64 75 6c 65 20 28  75 73 69 6e 67 20 74 68  |module (using th|
000161a0  65 20 61 64 64 72 65 73  73 20 70 61 73 73 65 64  |e address passed|
000161b0  20 69 6e 20 52 35 29 2c  20 62 65 63 61 75 73 65  | in R5), because|
000161c0  20 61 6c 6c 20 69 6e 66  6f 72 6d 61 74 69 6f 6e  | all information|
000161d0  20 69 73 20 61 76 61 69  6c 61 62 6c 65 20 76 69  | is available vi|
000161e0  61 20 74 68 65 20 76 61  72 69 6f 75 73 20 53 57  |a the various SW|
000161f0  49 27 73 2c 20 61 6e 64  20 73 6f 75 6e 64 74 72  |I's, and soundtr|
00016200  61 63 6b 65 72 20 66 6f  72 6d 61 74 20 6d 6f 64  |acker format mod|
00016210  75 6c 65 73 20 77 69 6c  6c 20 68 61 76 65 20 62  |ules will have b|
00016220  65 65 6e 20 63 6f 6e 76  65 72 74 65 64 20 70 61  |een converted pa|
00016230  72 74 69 61 6c 6c 79 20  74 6f 20 54 72 61 63 6b  |rtially to Track|
00016240  65 72 20 66 6f 72 6d 61  74 20 77 68 65 6e 20 6c  |er format when l|
00016250  6f 61 64 65 64 20 28 61  6e 64 20 74 68 65 72 65  |oaded (and there|
00016260  66 6f 72 65 20 69 6e 20  61 6e 20 75 6e 6b 6e 6f  |fore in an unkno|
00016270  77 6e 20 66 6f 72 6d 61  74 29 2e 20 54 68 69 73  |wn format). This|
00016280  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 20 69 73 20  | information is |
00016290  70 72 6f 76 69 64 65 64  20 69 66 2c 20 66 6f 72  |provided if, for|
000162a0  20 65 78 61 6d 70 6c 65  2c 20 6d 75 6c 74 69 2d  | example, multi-|
000162b0  74 61 73 6b 69 6e 67 20  70 6c 61 79 65 72 73 2f  |tasking players/|
000162c0  65 64 69 74 6f 72 73 20  6e 65 65 64 20 74 6f 20  |editors need to |
000162d0  6b 6e 6f 77 20 69 66 20  74 68 65 20 74 75 6e 65  |know if the tune|
000162e0  20 63 75 72 72 65 6e 74  6c 79 20 70 6c 61 79 69  | currently playi|
000162f0  6e 67 20 69 73 20 72 75  6e 6e 69 6e 67 20 66 72  |ng is running fr|
00016300  6f 6d 20 6f 72 64 69 6e  61 72 79 20 52 4d 41 2c  |om ordinary RMA,|
00016310  20 6f 72 20 74 68 65 20  70 6c 61 79 65 72 27 73  | or the player's|
00016320  2f 65 64 69 74 6f 72 27  73 20 6f 77 6e 20 77 6f  |/editor's own wo|
00016330  72 6b 73 70 61 63 65 2e  0a 00 00 00 44 41 54 41  |rkspace.....DATA|
00016340  3c 04 00 00 54 72 61 63  6b 65 72 5f 53 6f 75 6e  |<...Tracker_Soun|
00016350  64 49 6e 66 6f 20 20 28  26 34 33 32 30 42 29 0a  |dInfo  (&4320B).|
00016360  23 50 61 72 65 6e 74 20  54 72 61 63 6b 65 72 5f  |#Parent Tracker_|
00016370  0a 3d 3e 09 52 30 20 3d  09 50 6f 69 6e 74 65 72  |.=>.R0 =.Pointer|
00016380  20 74 6f 20 77 6f 72 64  2d 61 6c 69 67 6e 65 64  | to word-aligned|
00016390  20 32 35 36 20 62 79 74  65 20 62 6c 6f 63 6b 20  | 256 byte block |
000163a0  74 6f 20 68 6f 6c 64 20  3c 73 6f 75 6e 64 20 64  |to hold <sound d|
000163b0  61 74 61 3d 3e 54 72 61  63 6b 65 72 5f 53 6f 75  |ata=>Tracker_Sou|
000163c0  6e 64 62 6c 6f 63 6b 3e  0a 5c 3c 3d 09 52 30 20  |ndblock>.\<=.R0 |
000163d0  70 72 65 73 65 72 76 65  64 0a 0a 09 49 66 20 74  |preserved...If t|
000163e0  68 65 20 74 75 6e 65 20  69 73 20 70 61 75 73 65  |he tune is pause|
000163f0  64 2c 20 74 68 65 20 43  20 66 6c 61 67 20 77 69  |d, the C flag wi|
00016400  6c 6c 20 62 65 20 73 65  74 2c 20 6f 74 68 65 72  |ll be set, other|
00016410  77 69 73 65 20 74 68 65  20 43 20 66 6c 61 67 20  |wise the C flag |
00016420  77 69 6c 6c 20 62 65 20  63 6c 65 61 72 65 64 2e  |will be cleared.|
00016430  0a 0a 49 66 20 74 68 65  72 65 20 69 73 20 6e 6f  |..If there is no|
00016440  20 74 75 6e 65 20 6c 6f  61 64 65 64 20 61 6e 20  | tune loaded an |
00016450  65 72 72 6f 72 20 77 69  6c 6c 20 62 65 20 67 65  |error will be ge|
00016460  6e 65 72 61 74 65 64 2e  0a 0a 54 68 69 73 20 63  |nerated...This c|
00016470  61 6c 6c 20 69 73 20 6f  6e 6c 79 20 70 72 6f 76  |all is only prov|
00016480  69 64 65 64 20 66 6f 72  20 61 64 76 61 6e 63 65  |ided for advance|
00016490  64 20 75 73 65 73 20 6f  66 20 74 68 65 20 74 72  |d uses of the tr|
000164a0  61 63 6b 65 72 6d 6f 64  75 6c 65 2c 20 61 6e 64  |ackermodule, and|
000164b0  20 69 6e 76 6f 6c 76 65  73 20 69 6e 66 6f 72 6d  | involves inform|
000164c0  61 74 69 6f 6e 20 6f 66  20 61 20 68 69 67 68 6c  |ation of a highl|
000164d0  79 20 74 65 63 68 6e 69  63 61 6c 20 6e 61 74 75  |y technical natu|
000164e0  72 65 2e 20 49 74 20 69  73 20 61 64 76 69 73 65  |re. It is advise|
000164f0  64 20 74 68 61 74 20 79  6f 75 20 64 6f 20 6e 6f  |d that you do no|
00016500  74 20 75 73 65 20 74 68  69 73 20 63 61 6c 6c 20  |t use this call |
00016510  69 66 20 79 6f 75 20 63  61 6e 20 61 76 6f 69 64  |if you can avoid|
00016520  20 69 74 2e 0a 0a 54 68  65 20 63 61 6c 6c 20 77  | it...The call w|
00016530  69 6c 6c 20 74 72 61 6e  73 66 65 72 20 74 68 65  |ill transfer the|
00016540  20 63 75 72 72 65 6e 74  20 63 6f 6e 74 65 6e 74  | current content|
00016550  73 20 6f 66 20 74 68 65  20 73 6f 75 6e 64 20 76  |s of the sound v|
00016560  6f 69 63 65 20 69 6e 66  6f 20 74 61 62 6c 65 20  |oice info table |
00016570  74 6f 20 74 68 65 20 6c  6f 63 61 74 69 6f 6e 20  |to the location |
00016580  70 6f 69 6e 74 65 64 20  74 6f 20 62 79 20 52 30  |pointed to by R0|
00016590  2e 20 32 35 36 20 62 79  74 65 73 20 28 36 34 20  |. 256 bytes (64 |
000165a0  77 6f 72 64 73 29 20 77  69 6c 6c 20 62 65 20 74  |words) will be t|
000165b0  72 61 6e 73 66 65 72 72  65 64 20 69 6e 20 74 6f  |ransferred in to|
000165c0  74 61 6c 20 28 38 20 77  6f 72 64 73 20 70 65 72  |tal (8 words per|
000165d0  20 73 6f 75 6e 64 20 63  68 61 6e 6e 65 6c 29 2c  | sound channel),|
000165e0  20 72 65 67 61 72 64 6c  65 73 73 20 6f 66 20 74  | regardless of t|
000165f0  68 65 20 6e 75 6d 62 65  72 20 6f 66 20 76 6f 69  |he number of voi|
00016600  63 65 73 20 61 63 74 75  61 6c 6c 79 20 61 63 74  |ces actually act|
00016610  69 76 65 2e 0a 0a 57 68  65 6e 20 61 20 6e 6f 74  |ive...When a not|
00016620  65 20 69 73 20 70 6c 61  79 65 64 20 61 6e 64 20  |e is played and |
00016630  74 68 65 6e 20 65 6e 64  73 2c 20 77 6f 72 64 20  |then ends, word |
00016640  36 20 6f 66 20 74 68 65  20 61 70 70 72 6f 70 72  |6 of the appropr|
00016650  69 61 74 65 20 63 68 61  6e 6e 65 6c 20 69 73 20  |iate channel is |
00016660  7a 65 72 6f 65 64 2e 20  54 68 65 20 73 6f 75 6e  |zeroed. The soun|
00016670  64 20 72 6f 75 74 69 6e  65 73 20 77 69 6c 6c 20  |d routines will |
00016680  6f 6e 6c 79 20 74 72 79  20 61 6e 64 20 70 6c 61  |only try and pla|
00016690  79 20 74 68 65 20 73 61  6d 70 6c 65 20 69 66 20  |y the sample if |
000166a0  74 68 69 73 20 77 6f 72  64 20 69 73 20 6e 6f 6e  |this word is non|
000166b0  2d 7a 65 72 6f 2e 0a 0a  57 68 65 6e 20 61 20 74  |-zero...When a t|
000166c0  75 6e 65 20 69 73 20 70  61 75 73 65 64 2c 20 74  |une is paused, t|
000166d0  68 65 20 62 6c 6f 63 6b  20 69 73 20 73 61 76 65  |he block is save|
000166e0  64 20 61 6e 64 20 6f 76  65 72 77 72 69 74 74 65  |d and overwritte|
000166f0  6e 20 77 69 74 68 20 7a  65 72 6f 73 2e 20 57 68  |n with zeros. Wh|
00016700  65 6e 20 74 68 65 20 74  75 6e 65 20 69 73 20 72  |en the tune is r|
00016710  65 73 74 61 72 74 65 64  2c 20 74 68 65 20 6f 6c  |estarted, the ol|
00016720  64 20 63 6f 6e 74 65 6e  74 73 20 61 72 65 20 72  |d contents are r|
00016730  65 73 74 6f 72 65 64 2c  20 73 6f 20 74 68 61 74  |estored, so that|
00016740  20 74 68 65 20 73 61 6d  70 6c 65 73 20 77 69 6c  | the samples wil|
00016750  6c 20 63 6f 6e 74 69 6e  75 65 20 74 6f 20 70 6c  |l continue to pl|
00016760  61 79 20 66 72 6f 6d 20  74 68 65 20 73 61 6d 65  |ay from the same|
00016770  20 70 6f 69 6e 74 2e 0a  44 41 54 41 aa 02 00 00  | point..DATA....|
00016780  54 72 61 63 6b 65 72 5f  52 65 61 64 53 61 6d 70  |Tracker_ReadSamp|
00016790  6c 65 54 61 62 6c 65 20  20 28 26 34 33 32 30 43  |leTable  (&4320C|
000167a0  29 0a 23 50 61 72 65 6e  74 20 54 72 61 63 6b 65  |).#Parent Tracke|
000167b0  72 5f 0a 3d 3e 09 52 30  20 3d 09 53 61 6d 70 6c  |r_.=>.R0 =.Sampl|
000167c0  65 20 6e 75 6d 62 65 72  20 28 31 2d 33 36 29 0a  |e number (1-36).|
000167d0  5c 3c 3d 09 52 30 20 70  72 65 73 65 72 76 65 64  |\<=.R0 preserved|
000167e0  0a 09 52 31 20 3d 09 50  6f 69 6e 74 65 72 20 74  |..R1 =.Pointer t|
000167f0  6f 20 73 61 6d 70 6c 65  20 6e 61 6d 65 20 28 30  |o sample name (0|
00016800  2d 74 65 72 6d 69 6e 61  74 65 64 2c 20 6d 61 78  |-terminated, max|
00016810  20 6c 65 6e 67 74 68 20  32 32 20 63 68 61 72 73  | length 22 chars|
00016820  29 20 0a 09 52 32 20 3d  09 53 61 6d 70 6c 65 20  |) ..R2 =.Sample |
00016830  76 6f 6c 75 6d 65 20 28  30 2d 32 35 35 2c 20 32  |volume (0-255, 2|
00016840  35 35 3d 6d 61 78 69 6d  75 6d 20 76 6f 6c 75 6d  |55=maximum volum|
00016850  65 2c 20 30 3d 73 69 6c  65 6e 74 29 20 28 6f 72  |e, 0=silent) (or|
00016860  20 66 6f 72 20 73 6f 75  6e 64 20 74 72 61 63 6b  | for sound track|
00016870  65 72 20 30 2d 36 34 2c  20 36 34 3d 6d 61 78 20  |er 0-64, 64=max |
00016880  76 6f 6c 2e 29 20 0a 09  52 33 20 3d 09 53 61 6d  |vol.) ..R3 =.Sam|
00016890  70 6c 65 20 6c 65 6e 67  74 68 20 28 62 79 74 65  |ple length (byte|
000168a0  73 29 0a 09 52 34 20 3d  09 52 65 70 65 61 74 20  |s)..R4 =.Repeat |
000168b0  6f 66 66 73 65 74 20 28  62 79 74 65 73 29 0a 09  |offset (bytes)..|
000168c0  52 35 20 3d 09 52 65 70  65 61 74 20 6c 65 6e 67  |R5 =.Repeat leng|
000168d0  74 68 20 28 62 79 74 65  73 29 0a 09 52 36 20 3d  |th (bytes)..R6 =|
000168e0  09 41 64 64 72 65 73 73  20 6f 66 20 72 61 77 20  |.Address of raw |
000168f0  73 61 6d 70 6c 65 20 64  61 74 61 0a 0a 54 68 69  |sample data..Thi|
00016900  73 20 63 61 6c 6c 20 72  65 74 75 72 6e 73 20 61  |s call returns a|
00016910  6c 6c 20 72 65 6c 65 76  61 6e 74 20 69 6e 66 6f  |ll relevant info|
00016920  72 6d 61 74 69 6f 6e 20  61 62 6f 75 74 20 74 68  |rmation about th|
00016930  65 20 73 70 65 63 69 66  69 65 64 20 73 61 6d 70  |e specified samp|
00016940  6c 65 2e 20 0a 0a 49 66  20 74 68 65 72 65 20 69  |le. ..If there i|
00016950  73 20 6e 6f 20 74 75 6e  65 20 6c 6f 61 64 65 64  |s no tune loaded|
00016960  2c 20 61 6e 20 65 72 72  6f 72 20 77 69 6c 6c 20  |, an error will |
00016970  62 65 20 67 65 6e 65 72  61 74 65 64 2e 0a 0a 49  |be generated...I|
00016980  66 20 74 68 65 20 73 61  6d 70 6c 65 20 6e 75 6d  |f the sample num|
00016990  62 65 72 20 69 73 20 6f  75 74 20 6f 66 20 72 61  |ber is out of ra|
000169a0  6e 67 65 20 28 66 6f 72  20 65 78 61 6d 70 6c 65  |nge (for example|
000169b0  2c 20 69 66 20 72 65 61  64 69 6e 67 20 73 61 6d  |, if reading sam|
000169c0  70 6c 65 20 31 36 20 6f  6e 20 61 20 31 35 2d 69  |ple 16 on a 15-i|
000169d0  6e 73 74 72 75 6d 65 6e  74 20 6d 6f 64 75 6c 65  |nstrument module|
000169e0  29 2c 20 52 31 20 61 6e  64 20 52 36 20 77 69 6c  |), R1 and R6 wil|
000169f0  6c 20 70 6f 69 6e 74 20  74 6f 20 61 20 7a 65 72  |l point to a zer|
00016a00  6f 2c 20 61 6e 64 20 52  32 2d 52 35 20 77 69 6c  |o, and R2-R5 wil|
00016a10  6c 20 63 6f 6e 74 61 69  6e 20 61 20 7a 65 72 6f  |l contain a zero|
00016a20  2e 0a 00 00 44 41 54 41  63 05 00 00 54 72 61 63  |....DATAc...Trac|
00016a30  6b 65 72 5f 57 72 69 74  65 53 61 6d 70 6c 65 54  |ker_WriteSampleT|
00016a40  61 62 6c 65 20 20 28 26  34 33 32 31 33 29 0a 23  |able  (&43213).#|
00016a50  50 61 72 65 6e 74 20 54  72 61 63 6b 65 72 5f 0a  |Parent Tracker_.|
00016a60  3d 3e 09 52 30 20 3d 09  53 61 6d 70 6c 65 20 6e  |=>.R0 =.Sample n|
00016a70  75 6d 62 65 72 20 28 31  2d 33 36 29 0a 09 52 31  |umber (1-36)..R1|
00016a80  20 3d 09 4e 65 77 20 73  61 6d 70 6c 65 20 76 6f  | =.New sample vo|
00016a90  6c 75 6d 65 20 28 30 2d  32 35 35 2f 30 2d 36 34  |lume (0-255/0-64|
00016aa0  29 20 6f 72 20 2d 31 20  74 6f 20 6c 65 61 76 65  |) or -1 to leave|
00016ab0  20 75 6e 63 68 61 6e 67  65 64 2e 0a 09 52 32 20  | unchanged...R2 |
00016ac0  3d 09 52 65 70 65 61 74  20 6f 66 66 73 65 74 20  |=.Repeat offset |
00016ad0  28 62 79 74 65 73 29 20  6f 72 20 2d 31 20 74 6f  |(bytes) or -1 to|
00016ae0  20 6c 65 61 76 65 20 75  6e 63 68 61 6e 67 65 64  | leave unchanged|
00016af0  2e 0a 09 52 33 20 3d 09  52 65 70 65 61 74 20 6c  |...R3 =.Repeat l|
00016b00  65 6e 67 74 68 20 28 62  79 74 65 73 29 20 6f 72  |ength (bytes) or|
00016b10  20 2d 31 20 74 6f 20 6c  65 61 76 65 20 75 6e 63  | -1 to leave unc|
00016b20  68 61 6e 67 65 64 2e 0a  0a 59 6f 75 20 73 68 6f  |hanged...You sho|
00016b30  75 6c 64 20 75 73 65 20  74 68 69 73 20 53 57 49  |uld use this SWI|
00016b40  20 69 66 20 79 6f 75 20  77 69 73 68 20 74 6f 20  | if you wish to |
00016b50  61 6c 74 65 72 20 74 68  65 20 73 61 6d 70 6c 65  |alter the sample|
00016b60  20 64 61 74 61 20 77 69  74 68 6f 75 74 20 6e 65  | data without ne|
00016b70  65 64 69 6e 67 20 74 6f  20 6b 6e 6f 77 20 74 68  |eding to know th|
00016b80  65 20 72 65 6c 65 76 61  6e 74 20 6d 6f 64 75 6c  |e relevant modul|
00016b90  65 20 66 6f 72 6d 61 74  2e 20 53 61 6d 70 6c 65  |e format. Sample|
00016ba0  20 6c 65 6e 67 74 68 20  69 73 20 6e 6f 74 20 61  | length is not a|
00016bb0  6c 74 65 72 61 62 6c 65  2c 20 62 65 63 61 75 73  |lterable, becaus|
00016bc0  65 20 74 68 65 20 6f 63  63 61 73 69 6f 6e 73 20  |e the occasions |
00016bd0  77 68 65 6e 20 74 68 69  73 20 69 73 20 6e 65 63  |when this is nec|
00016be0  65 73 73 61 72 79 20 28  65 67 2e 20 6c 6f 61 64  |essary (eg. load|
00016bf0  69 6e 67 20 6e 65 77 20  73 61 6d 70 6c 65 20 69  |ing new sample i|
00016c00  6e 29 20 6e 65 65 64 20  64 69 72 65 63 74 20 6d  |n) need direct m|
00016c10  61 6e 69 70 75 6c 61 74  69 6f 6e 20 6f 66 20 74  |anipulation of t|
00016c20  68 65 20 6d 6f 64 75 6c  65 20 69 6e 20 6d 65 6d  |he module in mem|
00016c30  6f 72 79 20 61 6e 79 77  61 79 2c 20 61 6e 64 20  |ory anyway, and |
00016c40  70 72 6f 62 6c 65 6d 73  20 6f 63 63 75 72 20 77  |problems occur w|
00016c50  68 65 6e 20 74 68 65 20  73 61 6d 70 6c 65 20 6c  |hen the sample l|
00016c60  65 6e 67 74 68 20 69 73  20 73 65 74 20 61 62 6f  |ength is set abo|
00016c70  76 65 20 74 68 65 20 61  63 74 75 61 6c 20 6c 65  |ve the actual le|
00016c80  6e 67 74 68 2e 0a 0a 56  65 72 73 69 6f 6e 73 20  |ngth...Versions |
00016c90  62 65 74 77 65 65 6e 20  33 2e 30 30 20 61 6e 64  |between 3.00 and|
00016ca0  20 34 2e 30 35 20 63 6f  70 69 65 64 20 74 68 65  | 4.05 copied the|
00016cb0  20 73 61 6d 70 6c 65 20  69 6e 66 6f 72 6d 61 74  | sample informat|
00016cc0  69 6f 6e 20 69 6e 74 6f  20 61 20 6d 6f 72 65 20  |ion into a more |
00016cd0  63 6f 6e 76 65 6e 69 65  6e 74 20 66 6f 72 6d 61  |convenient forma|
00016ce0  74 20 77 68 65 6e 20 74  68 65 20 6d 6f 64 75 6c  |t when the modul|
00016cf0  65 20 77 61 73 20 69 6e  69 74 69 61 6c 69 73 65  |e was initialise|
00016d00  64 2c 20 61 6e 64 20 73  6f 20 61 6c 74 65 72 69  |d, and so alteri|
00016d10  6e 67 20 74 68 65 20 64  61 74 61 20 64 69 72 65  |ng the data dire|
00016d20  63 74 6c 79 20 77 6f 75  6c 64 20 68 61 76 65 20  |ctly would have |
00016d30  68 61 64 20 6e 6f 20 65  66 66 65 63 74 20 28 63  |had no effect (c|
00016d40  61 75 73 69 6e 67 20 70  72 6f 62 6c 65 6d 73 20  |ausing problems |
00016d50  66 6f 72 20 65 64 69 74  6f 72 73 20 77 68 69 63  |for editors whic|
00016d60  68 20 6e 65 65 64 65 64  20 74 6f 20 64 6f 20 74  |h needed to do t|
00016d70  68 69 73 2e 2e 29 2e 0a  0a 53 68 6f 75 6c 64 20  |his..)...Should |
00016d80  79 6f 75 20 77 69 73 68  20 74 6f 20 61 6c 74 65  |you wish to alte|
00016d90  72 20 61 6e 79 20 6f 74  68 65 72 20 61 73 70 65  |r any other aspe|
00016da0  63 74 20 6f 66 20 74 68  65 20 6d 6f 64 75 6c 65  |ct of the module|
00016db0  20 64 69 72 65 63 74 6c  79 20 77 68 69 63 68 20  | directly which |
00016dc0  6d 69 67 68 74 20 61 66  66 65 63 74 20 74 68 65  |might affect the|
00016dd0  20 70 6c 61 79 72 6f 75  74 69 6e 65 20 28 69 65  | playroutine (ie|
00016de0  2e 20 6e 75 6d 62 65 72  20 6f 66 20 76 6f 69 63  |. number of voic|
00016df0  65 73 29 2c 20 79 6f 75  20 73 68 6f 75 6c 64 20  |es), you should |
00016e00  63 61 6c 6c 20 3c 54 72  61 63 6b 65 72 5f 55 70  |call <Tracker_Up|
00016e10  64 61 74 65 44 61 74 61  3e 2e 0a 0a 41 6e 20 65  |dateData>...An e|
00016e20  72 72 6f 72 20 69 73 20  67 65 6e 65 72 61 74 65  |rror is generate|
00016e30  64 20 69 66 3a 0a 23 49  6e 64 65 6e 74 20 32 0a  |d if:.#Indent 2.|
00016e40  23 54 61 62 0a 8f 09 4e  6f 20 6d 6f 64 75 6c 65  |#Tab...No module|
00016e50  20 69 73 20 6c 6f 61 64  65 64 0a 8f 09 54 68 65  | is loaded...The|
00016e60  20 73 61 6d 70 6c 65 20  6e 75 6d 62 65 72 20 74  | sample number t|
00016e70  6f 20 63 68 61 6e 67 65  20 65 78 63 65 65 64 73  |o change exceeds|
00016e80  20 74 68 65 20 6d 61 78  2e 20 6f 66 20 74 68 65  | the max. of the|
00016e90  20 66 6f 72 6d 61 74 20  28 69 65 2e 20 31 35 2f  | format (ie. 15/|
00016ea0  33 31 2f 33 36 29 0a 8f  09 54 68 65 20 72 65 6c  |31/36)...The rel|
00016eb0  65 76 61 6e 74 20 69 6e  66 6f 72 6d 61 74 69 6f  |evant informatio|
00016ec0  6e 20 69 73 20 6f 75 74  20 6f 66 20 72 61 6e 67  |n is out of rang|
00016ed0  65 20 28 69 65 2e 20 76  6f 6c 20 3e 20 5b 36 34  |e (ie. vol > [64|
00016ee0  20 6f 72 20 32 35 35 5d  29 0a 8f 09 41 20 63 6f  | or 255])...A co|
00016ef0  6d 62 69 6e 61 74 69 6f  6e 20 6f 66 20 72 65 70  |mbination of rep|
00016f00  65 61 74 20 6f 66 66 73  65 74 20 61 6e 64 20 72  |eat offset and r|
00016f10  65 70 65 61 74 20 6c 65  6e 67 74 68 20 77 6f 75  |epeat length wou|
00016f20  6c 64 20 63 61 75 73 65  20 74 68 65 20 70 6c 61  |ld cause the pla|
00016f30  79 65 72 20 74 6f 20 6c  6f 6f 70 20 6f 75 74 73  |yer to loop outs|
00016f40  69 64 65 20 74 68 65 20  73 61 6d 70 6c 65 20 6c  |ide the sample l|
00016f50  69 6d 69 74 2e 0a 23 49  6e 64 65 6e 74 0a 0a 54  |imit..#Indent..T|
00016f60  68 69 73 20 53 57 49 20  69 73 20 70 61 72 74 20  |his SWI is part |
00016f70  6f 66 20 74 68 65 20 6c  6f 63 6b 69 6e 67 20 73  |of the locking s|
00016f80  79 73 74 65 6d 2e 0a 00  44 41 54 41 1a 06 00 00  |ystem...DATA....|
00016f90  54 72 61 63 6b 65 72 5f  4c 6f 63 6b 20 20 28 26  |Tracker_Lock  (&|
00016fa0  34 33 32 30 44 29 0a 23  50 61 72 65 6e 74 20 54  |4320D).#Parent T|
00016fb0  72 61 63 6b 65 72 5f 0a  3d 3e 09 52 30 20 3d 09  |racker_.=>.R0 =.|
00016fc0  6c 6f 63 6b 69 6e 67 20  63 6f 64 65 20 28 70 61  |locking code (pa|
00016fd0  73 73 65 64 20 69 6e 20  52 34 20 74 6f 20 53 57  |ssed in R4 to SW|
00016fe0  49 27 73 29 0a 0a 54 68  69 73 20 53 57 49 20 61  |I's)..This SWI a|
00016ff0  6e 64 20 74 68 65 20 63  6f 72 72 65 73 70 6f 6e  |nd the correspon|
00017000  64 69 6e 67 20 3c 54 72  61 63 6b 65 72 5f 55 6e  |ding <Tracker_Un|
00017010  6c 6f 63 6b 3e 20 53 57  49 20 61 72 65 20 70 72  |lock> SWI are pr|
00017020  6f 76 69 64 65 64 20 74  6f 20 70 72 65 76 65 6e  |ovided to preven|
00017030  74 20 75 73 65 72 20 69  6e 74 65 72 76 65 6e 74  |t user intervent|
00017040  69 6f 6e 20 77 69 74 68  20 61 6e 79 20 6f 66 20  |ion with any of |
00017050  74 68 65 20 66 65 61 74  75 72 65 73 20 6f 66 20  |the features of |
00017060  74 68 65 20 6d 6f 64 75  6c 65 20 77 68 65 6e 20  |the module when |
00017070  74 68 69 73 20 77 6f 75  6c 64 20 62 65 20 75 6e  |this would be un|
00017080  64 65 73 69 72 61 62 6c  65 20 66 6f 72 20 61 6e  |desirable for an|
00017090  79 20 6d 75 6c 74 69 2d  74 61 73 6b 69 6e 67 20  |y multi-tasking |
000170a0  61 70 70 6c 69 63 61 74  69 6f 6e 73 20 75 73 69  |applications usi|
000170b0  6e 67 20 74 68 65 20 6d  6f 64 75 6c 65 20 28 66  |ng the module (f|
000170c0  6f 72 20 65 78 61 6d 70  6c 65 20 69 73 73 75 69  |or example issui|
000170d0  6e 67 20 61 20 2a 50 6c  61 79 53 74 6f 70 20 63  |ng a *PlayStop c|
000170e0  6f 6d 6d 61 6e 64 29 2e  20 42 79 20 63 61 6c 6c  |ommand). By call|
000170f0  69 6e 67 20 74 68 69 73  20 53 57 49 2c 20 61 6e  |ing this SWI, an|
00017100  20 61 70 70 6c 69 63 61  74 69 6f 6e 20 63 61 6e  | application can|
00017110  20 67 61 69 6e 20 63 6f  6d 70 6c 65 74 65 20 63  | gain complete c|
00017120  6f 6e 74 72 6f 6c 20 6f  66 20 74 68 65 20 6d 6f  |ontrol of the mo|
00017130  64 75 6c 65 2c 20 62 75  74 20 61 73 20 61 20 72  |dule, but as a r|
00017140  65 73 75 6c 74 2c 20 74  68 69 73 20 66 65 61 74  |esult, this feat|
00017150  75 72 65 20 6d 75 73 74  20 62 65 20 75 73 65 64  |ure must be used|
00017160  20 63 61 72 65 66 75 6c  6c 79 2c 20 62 65 63 61  | carefully, beca|
00017170  75 73 65 20 74 68 65 20  6d 6f 64 75 6c 65 20 63  |use the module c|
00017180  61 6e 6e 6f 74 20 74 68  65 6e 20 62 65 20 75 6e  |annot then be un|
00017190  6c 6f 63 6b 65 64 20 75  6e 6c 65 73 73 20 74 68  |locked unless th|
000171a0  65 20 63 6f 64 65 20 73  70 65 63 69 66 69 65 64  |e code specified|
000171b0  20 69 6e 20 74 68 65 20  6c 6f 63 6b 20 53 57 49  | in the lock SWI|
000171c0  20 69 73 20 6b 6e 6f 77  6e 20 28 61 6e 64 20 69  | is known (and i|
000171d0  66 20 6e 6f 74 2c 20 74  68 65 20 6d 6f 64 75 6c  |f not, the modul|
000171e0  65 20 6d 75 73 74 20 62  65 20 72 65 2d 69 6e 69  |e must be re-ini|
000171f0  74 69 61 6c 69 73 65 64  29 2e 0a 0a 57 68 65 6e  |tialised)...When|
00017200  20 74 68 65 20 6d 6f 64  75 6c 65 20 69 73 20 6c  | the module is l|
00017210  6f 63 6b 65 64 2c 20 63  61 6c 6c 69 6e 67 20 61  |ocked, calling a|
00017220  6e 79 20 63 6f 6d 6d 61  6e 64 73 20 6f 72 20 53  |ny commands or S|
00017230  57 49 27 73 20 77 68 69  63 68 20 61 6c 74 65 72  |WI's which alter|
00017240  20 61 6e 79 74 68 69 6e  67 20 28 73 75 63 68 20  | anything (such |
00017250  61 73 20 63 68 61 6e 67  69 6e 67 20 74 68 65 20  |as changing the |
00017260  63 75 72 72 65 6e 74 20  70 6c 61 79 20 70 6f 73  |current play pos|
00017270  69 74 69 6f 6e 2c 20 6c  6f 61 64 69 6e 67 20 6f  |ition, loading o|
00017280  72 20 6b 69 6c 6c 69 6e  67 20 74 75 6e 65 73 2c  |r killing tunes,|
00017290  20 70 6c 61 79 69 6e 67  20 6e 6f 74 65 73 29 20  | playing notes) |
000172a0  77 69 6c 6c 20 63 61 75  73 65 20 61 6e 20 65 72  |will cause an er|
000172b0  72 6f 72 2c 20 62 75 74  20 53 57 49 27 73 20 72  |ror, but SWI's r|
000172c0  65 74 75 72 6e 69 6e 67  20 69 6e 66 6f 72 6d 61  |eturning informa|
000172d0  74 69 6f 6e 20 77 69 6c  6c 20 66 75 6e 63 74 69  |tion will functi|
000172e0  6f 6e 20 61 73 20 6e 6f  72 6d 61 6c 2e 20 46 6f  |on as normal. Fo|
000172f0  72 20 74 68 65 20 61 70  70 6c 69 63 61 74 69 6f  |r the applicatio|
00017300  6e 20 77 68 69 63 68 20  69 73 20 72 65 73 70 6f  |n which is respo|
00017310  6e 73 69 62 6c 65 20 66  6f 72 20 74 68 65 20 6c  |nsible for the l|
00017320  6f 63 6b 69 6e 67 20 74  6f 20 62 65 20 61 62 6c  |ocking to be abl|
00017330  65 20 74 6f 20 75 73 65  20 74 68 65 20 61 66 66  |e to use the aff|
00017340  65 63 74 65 64 20 53 57  49 27 73 2c 20 52 34 20  |ected SWI's, R4 |
00017350  6d 75 73 74 20 62 65 20  73 65 74 20 74 6f 20 74  |must be set to t|
00017360  68 65 20 6c 6f 63 6b 69  6e 67 20 63 6f 64 65 20  |he locking code |
00017370  28 70 61 73 73 65 64 20  69 6e 20 52 30 29 20 62  |(passed in R0) b|
00017380  65 66 6f 72 65 20 61 6e  79 20 6f 66 20 74 68 65  |efore any of the|
00017390  20 61 66 66 65 63 74 65  64 20 53 57 49 27 73 20  | affected SWI's |
000173a0  69 73 20 63 61 6c 6c 65  64 20 28 6e 6f 20 63 6f  |is called (no co|
000173b0  6d 6d 61 6e 64 73 20 77  69 6c 6c 20 77 6f 72 6b  |mmands will work|
000173c0  20 65 76 65 6e 20 69 66  20 74 68 65 20 6c 6f 63  | even if the loc|
000173d0  6b 69 6e 67 20 63 6f 64  65 20 69 73 20 6b 6e 6f  |king code is kno|
000173e0  77 6e 29 2e 0a 0a 49 66  20 74 68 65 20 54 72 61  |wn)...If the Tra|
000173f0  63 6b 65 72 4d 6f 64 75  6c 65 20 69 73 20 61 6c  |ckerModule is al|
00017400  72 65 61 64 79 20 27 6c  6f 63 6b 65 64 27 20 77  |ready 'locked' w|
00017410  68 65 6e 20 74 68 69 73  20 53 57 49 20 69 73 20  |hen this SWI is |
00017420  63 61 6c 6c 65 64 2c 20  61 6e 20 65 72 72 6f 72  |called, an error|
00017430  20 77 69 6c 6c 20 62 65  20 67 65 6e 65 72 61 74  | will be generat|
00017440  65 64 2e 20 49 74 20 69  73 20 61 64 76 69 73 61  |ed. It is advisa|
00017450  62 6c 65 20 74 6f 20 61  76 6f 69 64 20 75 73 69  |ble to avoid usi|
00017460  6e 67 20 74 68 69 73 20  63 61 6c 6c 20 75 6e 6c  |ng this call unl|
00017470  65 73 73 20 61 62 73 6f  6c 75 74 65 6c 79 20 6e  |ess absolutely n|
00017480  65 63 63 65 73 73 61 72  79 2e 0a 0a 54 68 65 20  |eccessary...The |
00017490  72 65 73 74 72 69 63 74  65 64 20 63 6f 6d 6d 61  |restricted comma|
000174a0  6e 64 73 20 61 72 65 3a  0a 2a 50 6c 61 79 4d 6f  |nds are:.*PlayMo|
000174b0  64 2c 20 2a 50 6c 61 79  50 61 75 73 65 2c 20 2a  |d, *PlayPause, *|
000174c0  50 6c 61 79 53 74 61 72  74 2c 20 2a 50 6c 61 79  |PlayStart, *Play|
000174d0  50 6f 73 2c 20 2a 50 6c  61 79 53 74 65 72 65 6f  |Pos, *PlayStereo|
000174e0  2c 20 2a 50 6c 61 79 53  74 6f 70 2c 20 2a 50 6c  |, *PlayStop, *Pl|
000174f0  61 79 56 6f 6c 75 6d 65  2e 0a 0a 54 68 65 20 72  |ayVolume...The r|
00017500  65 73 74 72 69 63 74 65  64 20 53 57 49 27 73 20  |estricted SWI's |
00017510  3a 0a 3c 54 72 61 63 6b  65 72 5f 4c 6f 61 64 3e  |:.<Tracker_Load>|
00017520  2c 20 3c 54 72 61 63 6b  65 72 5f 4d 65 6d 6f 72  |, <Tracker_Memor|
00017530  79 4c 6f 61 64 3e 2c 20  3c 54 72 61 63 6b 65 72  |yLoad>, <Tracker|
00017540  5f 50 6c 61 79 3e 2c 20  3c 54 72 61 63 6b 65 72  |_Play>, <Tracker|
00017550  5f 53 74 6f 70 3e 2c 20  3c 54 72 61 63 6b 65 72  |_Stop>, <Tracker|
00017560  5f 53 74 65 72 65 6f 3e  2c 20 3c 54 72 61 63 6b  |_Stereo>, <Track|
00017570  65 72 5f 53 65 74 50 6f  73 3e 2c 20 3c 54 72 61  |er_SetPos>, <Tra|
00017580  63 6b 65 72 5f 50 6c 61  79 4e 6f 74 65 3e 2c 20  |cker_PlayNote>, |
00017590  3c 54 72 61 63 6b 65 72  5f 56 6f 6c 75 6d 65 3e  |<Tracker_Volume>|
000175a0  2e 0a 00 00 44 41 54 41  4c 01 00 00 54 72 61 63  |....DATAL...Trac|
000175b0  6b 65 72 5f 55 6e 6c 6f  63 6b 20 20 28 26 34 33  |ker_Unlock  (&43|
000175c0  32 30 45 29 0a 23 50 61  72 65 6e 74 20 54 72 61  |20E).#Parent Tra|
000175d0  63 6b 65 72 5f 0a 3d 3e  09 52 30 20 3d 09 6c 6f  |cker_.=>.R0 =.lo|
000175e0  63 6b 69 6e 67 20 63 6f  64 65 20 28 73 70 65 63  |cking code (spec|
000175f0  69 66 69 65 64 20 69 6e  20 54 72 61 63 6b 65 72  |ified in Tracker|
00017600  5f 4c 6f 63 6b 29 0a 0a  54 68 69 73 20 53 57 49  |_Lock)..This SWI|
00017610  20 73 68 6f 75 6c 64 20  62 65 20 63 61 6c 6c 65  | should be calle|
00017620  64 20 74 6f 20 75 6e 6c  6f 63 6b 20 74 68 65 20  |d to unlock the |
00017630  6d 6f 64 75 6c 65 20 61  66 74 65 72 20 69 74 20  |module after it |
00017640  68 61 73 20 62 65 65 6e  20 6c 6f 63 6b 65 64 20  |has been locked |
00017650  77 69 74 68 20 3c 54 72  61 63 6b 65 72 5f 4c 6f  |with <Tracker_Lo|
00017660  63 6b 3e 2e 20 49 66 20  74 68 65 20 76 61 6c 75  |ck>. If the valu|
00017670  65 20 70 61 73 73 65 64  20 69 6e 20 52 30 20 69  |e passed in R0 i|
00017680  73 20 64 69 66 66 65 72  65 6e 74 20 74 6f 20 74  |s different to t|
00017690  68 65 20 6c 6f 63 6b 69  6e 67 20 63 6f 64 65 20  |he locking code |
000176a0  67 69 76 65 6e 20 69 6e  20 74 68 65 20 6c 6f 63  |given in the loc|
000176b0  6b 20 53 57 49 2c 20 6f  72 20 74 68 65 20 6d 6f  |k SWI, or the mo|
000176c0  64 75 6c 65 20 68 61 73  20 6e 6f 74 20 62 65 65  |dule has not bee|
000176d0  6e 20 6c 6f 63 6b 65 64  2c 20 61 6e 20 65 72 72  |n locked, an err|
000176e0  6f 72 20 69 73 20 67 65  6e 65 72 61 74 65 64 2e  |or is generated.|
000176f0  44 41 54 41 83 01 00 00  54 72 61 63 6b 65 72 5f  |DATA....Tracker_|
00017700  4d 75 74 65 43 68 61 6e  6e 65 6c 20 20 28 26 34  |MuteChannel  (&4|
00017710  33 32 30 46 29 0a 23 50  61 72 65 6e 74 20 54 72  |320F).#Parent Tr|
00017720  61 63 6b 65 72 5f 0a 3d  3e 09 52 30 20 3d 09 63  |acker_.=>.R0 =.c|
00017730  68 61 6e 6e 65 6c 20 74  6f 20 6d 75 74 65 20 28  |hannel to mute (|
00017740  31 2d 38 29 0a 0a 54 68  69 73 20 53 57 49 20 61  |1-8)..This SWI a|
00017750  6c 6c 6f 77 73 20 79 6f  75 20 74 6f 20 74 75 72  |llows you to tur|
00017760  6e 20 6f 66 66 20 73 65  6c 65 63 74 65 64 20 63  |n off selected c|
00017770  68 61 6e 6e 65 6c 73 20  77 68 69 6c 65 20 6c 65  |hannels while le|
00017780  61 76 69 6e 67 20 61 6c  6c 20 74 68 65 20 6f 74  |aving all the ot|
00017790  68 65 72 20 63 68 61 6e  6e 65 6c 73 20 75 6e 61  |her channels una|
000177a0  66 66 65 63 74 65 64 2e  20 54 68 65 20 63 68 61  |ffected. The cha|
000177b0  6e 6e 65 6c 73 20 63 61  6e 20 62 65 20 74 75 72  |nnels can be tur|
000177c0  6e 65 64 20 62 61 63 6b  20 6f 6e 20 62 79 20 75  |ned back on by u|
000177d0  73 69 6e 67 20 74 68 65  20 3c 54 72 61 63 6b 65  |sing the <Tracke|
000177e0  72 5f 52 65 73 74 6f 72  65 43 68 61 6e 6e 65 6c  |r_RestoreChannel|
000177f0  3e 20 53 57 49 2e 0a 0a  4e 6f 20 65 72 72 6f 72  |> SWI...No error|
00017800  20 69 73 20 67 65 6e 65  72 61 74 65 64 20 69 66  | is generated if|
00017810  20 74 68 65 20 63 68 61  6e 6e 65 6c 20 6e 75 6d  | the channel num|
00017820  62 65 72 20 69 73 20 68  69 67 68 65 72 20 74 68  |ber is higher th|
00017830  61 6e 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |an the number of|
00017840  20 63 68 61 6e 6e 65 6c  73 20 61 63 74 75 61 6c  | channels actual|
00017850  6c 79 20 62 65 69 6e 67  20 75 73 65 64 20 62 79  |ly being used by|
00017860  20 74 68 65 20 54 72 61  63 6b 65 72 4d 6f 64 75  | the TrackerModu|
00017870  6c 65 2e 00 44 41 54 41  2f 01 00 00 54 72 61 63  |le..DATA/...Trac|
00017880  6b 65 72 5f 52 65 73 74  6f 72 65 43 68 61 6e 6e  |ker_RestoreChann|
00017890  65 6c 20 20 28 26 34 33  32 31 30 29 0a 3d 3e 09  |el  (&43210).=>.|
000178a0  52 30 20 3d 20 63 68 61  6e 6e 65 6c 20 74 6f 20  |R0 = channel to |
000178b0  74 75 72 6e 20 6f 6e 20  28 31 2d 38 29 0a 0a 54  |turn on (1-8)..T|
000178c0  68 69 73 20 53 57 49 20  77 69 6c 6c 20 72 65 76  |his SWI will rev|
000178d0  65 72 73 65 20 74 68 65  20 65 66 66 65 63 74 20  |erse the effect |
000178e0  6f 66 20 61 20 3c 54 72  61 63 6b 65 72 5f 4d 75  |of a <Tracker_Mu|
000178f0  74 65 43 68 61 6e 6e 65  6c 3e 20 53 57 49 2c 20  |teChannel> SWI, |
00017900  61 6e 64 20 74 75 72 6e  20 74 68 65 20 73 65 6c  |and turn the sel|
00017910  65 63 74 65 64 20 63 68  61 6e 6e 65 6c 20 62 61  |ected channel ba|
00017920  63 6b 20 6f 6e 2e 0a 0a  4e 6f 20 65 72 72 6f 72  |ck on...No error|
00017930  20 69 73 20 67 65 6e 65  72 61 74 65 64 20 69 66  | is generated if|
00017940  20 74 68 65 20 63 68 61  6e 6e 65 6c 20 6e 75 6d  | the channel num|
00017950  62 65 72 20 69 73 20 68  69 67 68 65 72 20 74 68  |ber is higher th|
00017960  61 6e 20 74 68 65 20 6e  75 6d 62 65 72 20 6f 66  |an the number of|
00017970  20 63 68 61 6e 6e 65 6c  73 20 61 63 74 75 61 6c  | channels actual|
00017980  6c 79 20 62 65 69 6e 67  20 75 73 65 64 20 62 79  |ly being used by|
00017990  20 74 68 65 20 54 72 61  63 6b 65 72 4d 6f 64 75  | the TrackerModu|
000179a0  6c 65 2e 00 44 41 54 41  17 02 00 00 54 72 61 63  |le..DATA....Trac|
000179b0  6b 65 72 5f 53 70 65 65  64 20 20 28 26 34 33 32  |ker_Speed  (&432|
000179c0  31 31 29 0a 23 50 61 72  65 6e 74 20 54 72 61 63  |11).#Parent Trac|
000179d0  6b 65 72 5f 0a 3d 3e 09  52 30 20 3d 09 6e 65 77  |ker_.=>.R0 =.new|
000179e0  20 73 70 65 65 64 20 73  65 74 74 69 6e 67 20 28  | speed setting (|
000179f0  30 2d 33 29 0a 0a 54 68  69 73 20 53 57 49 20 77  |0-3)..This SWI w|
00017a00  69 6c 6c 20 73 65 6c 65  63 74 20 74 68 65 20 66  |ill select the f|
00017a10  75 74 75 72 65 20 73 61  6d 70 6c 65 20 72 61 74  |uture sample rat|
00017a20  65 20 61 6e 64 20 6f 76  65 72 61 6c 6c 20 70 69  |e and overall pi|
00017a30  74 63 68 20 74 6f 20 63  61 74 65 72 20 66 6f 72  |tch to cater for|
00017a40  20 56 49 44 43 20 65 6e  68 61 6e 63 65 72 73 20  | VIDC enhancers |
00017a50  61 6e 64 20 38 2d 63 68  61 6e 6e 65 6c 20 74 75  |and 8-channel tu|
00017a60  6e 65 73 2c 20 74 61 6b  69 6e 67 20 65 66 66 65  |nes, taking effe|
00017a70  63 74 20 69 6d 6d 65 64  69 61 74 65 6c 79 20 69  |ct immediately i|
00017a80  66 20 61 20 74 75 6e 65  20 69 73 20 63 75 72 72  |f a tune is curr|
00017a90  65 6e 74 6c 79 20 70 6c  61 79 69 6e 67 2e 0a 0a  |ently playing...|
00017aa0  46 6f 72 20 64 65 74 61  69 6c 73 20 6f 66 20 74  |For details of t|
00017ab0  68 65 20 64 69 66 66 65  72 65 6e 74 20 6f 70 74  |he different opt|
00017ac0  69 6f 6e 73 20 73 65 65  20 74 68 65 20 63 6f 6d  |ions see the com|
00017ad0  6d 61 6e 64 20 2a 50 6c  61 79 53 70 65 65 64 2e  |mand *PlaySpeed.|
00017ae0  20 54 68 69 73 20 53 57  49 20 69 73 20 6e 6f 74  | This SWI is not|
00017af0  20 69 6e 63 6c 75 64 65  64 20 69 6e 20 74 68 65  | included in the|
00017b00  20 6c 6f 63 6b 69 6e 67  20 73 79 73 74 65 6d 20  | locking system |
00017b10  62 65 63 61 75 73 65 20  69 74 20 77 61 73 20 6f  |because it was o|
00017b20  6e 6c 79 20 69 6e 74 72  6f 64 75 63 65 64 20 69  |nly introduced i|
00017b30  6e 20 76 65 72 73 69 6f  6e 20 34 2e 30 34 2c 20  |n version 4.04, |
00017b40  61 6e 64 20 73 6f 6d 65  20 70 72 6f 67 72 61 6d  |and some program|
00017b50  73 20 6d 61 79 20 68 61  76 65 20 61 6c 72 65 61  |s may have alrea|
00017b60  64 79 20 62 65 65 6e 20  77 72 69 74 74 65 6e 20  |dy been written |
00017b70  77 68 69 63 68 20 75 73  65 20 74 68 65 20 6c 6f  |which use the lo|
00017b80  63 6b 69 6e 67 20 73 79  73 74 65 6d 20 62 75 74  |cking system but|
00017b90  20 64 6f 6e 27 74 20 63  6f 6e 74 72 6f 6c 20 74  | don't control t|
00017ba0  68 65 20 73 61 6d 70 6c  65 20 73 70 65 65 64 2f  |he sample speed/|
00017bb0  70 69 74 63 68 20 65 74  63 2e 20 00 44 41 54 41  |pitch etc. .DATA|
00017bc0  03 02 00 00 54 72 61 63  6b 65 72 5f 56 6f 6c 75  |....Tracker_Volu|
00017bd0  6d 65 20 20 28 26 34 33  32 31 32 29 0a 23 50 61  |me  (&43212).#Pa|
00017be0  72 65 6e 74 20 54 72 61  63 6b 65 72 5f 0a 3d 3e  |rent Tracker_.=>|
00017bf0  09 52 30 20 3d 09 6e 65  77 20 6f 76 65 72 61 6c  |.R0 =.new overal|
00017c00  6c 20 76 6f 6c 75 6d 65  20 28 30 2d 31 32 37 29  |l volume (0-127)|
00017c10  20 6f 72 20 2d 31 20 74  6f 20 72 65 61 64 20 76  | or -1 to read v|
00017c20  6f 6c 75 6d 65 0a 3c 3d  09 52 30 20 3d 09 6f 6c  |olume.<=.R0 =.ol|
00017c30  64 20 76 6f 6c 75 6d 65  0a 0a 54 68 69 73 20 53  |d volume..This S|
00017c40  57 49 20 77 69 6c 6c 20  73 65 74 20 74 68 65 20  |WI will set the |
00017c50  6f 76 65 72 61 6c 6c 20  76 6f 6c 75 6d 65 20 6f  |overall volume o|
00017c60  66 20 61 6e 79 20 74 75  6e 65 73 20 70 6c 61 79  |f any tunes play|
00017c70  69 6e 67 20 62 79 20 73  75 62 74 72 61 63 74 69  |ing by subtracti|
00017c80  6e 67 20 28 32 35 34 2d  76 6f 6c 75 6d 65 2a 32  |ng (254-volume*2|
00017c90  29 20 66 72 6f 6d 20 74  68 65 20 76 6f 6c 75 6d  |) from the volum|
00017ca0  65 20 6f 66 20 61 6e 79  20 73 61 6d 70 6c 65 20  |e of any sample |
00017cb0  70 6c 61 79 69 6e 67 2e  20 54 68 69 73 20 74 61  |playing. This ta|
00017cc0  6b 65 73 20 65 66 66 65  63 74 20 69 6d 6d 65 64  |kes effect immed|
00017cd0  69 61 74 65 6c 79 2c 20  61 6e 64 20 61 6c 73 6f  |iately, and also|
00017ce0  20 61 66 66 65 63 74 73  20 73 61 6d 70 6c 65 73  | affects samples|
00017cf0  20 77 68 69 63 68 20 61  72 65 20 69 6e 20 6d 69  | which are in mi|
00017d00  64 2d 70 6c 61 79 2e 20  20 43 61 6c 6c 69 6e 67  |d-play.  Calling|
00017d10  20 74 68 65 20 53 57 49  20 77 69 74 68 20 52 30  | the SWI with R0|
00017d20  3d 2d 31 20 77 69 6c 6c  20 72 65 74 75 72 6e 20  |=-1 will return |
00017d30  74 68 65 20 63 75 72 72  65 6e 74 20 76 6f 6c 75  |the current volu|
00017d40  6d 65 20 69 6e 20 52 30  2e 20 59 6f 75 20 63 61  |me in R0. You ca|
00017d50  6e 20 75 73 65 20 74 68  69 73 20 53 57 49 20 74  |n use this SWI t|
00017d60  6f 20 70 72 6f 76 69 64  65 20 73 6d 6f 6f 74 68  |o provide smooth|
00017d70  20 66 61 64 65 2d 6f 75  74 73 20 61 6e 64 20 66  | fade-outs and f|
00017d80  61 64 65 2d 69 6e 73 2c  20 66 6f 72 20 65 78 61  |ade-ins, for exa|
00017d90  6d 70 6c 65 2e 0a 0a 54  68 69 73 20 53 57 49 20  |mple...This SWI |
00017da0  69 73 20 70 61 72 74 20  6f 66 20 74 68 65 20 6c  |is part of the l|
00017db0  6f 63 6b 69 6e 67 20 73  79 73 74 65 6d 2e 0a 00  |ocking system...|
00017dc0  44 41 54 41 44 01 00 00  54 72 61 63 6b 65 72 5f  |DATAD...Tracker_|
00017dd0  54 72 61 6e 73 6c 61 74  65 56 6f 6c 75 6d 65 20  |TranslateVolume |
00017de0  20 28 26 34 33 32 31 34  29 0a 23 50 61 72 65 6e  | (&43214).#Paren|
00017df0  74 20 54 72 61 63 6b 65  72 5f 0a 3d 3e 09 52 30  |t Tracker_.=>.R0|
00017e00  20 3d 09 53 6f 75 6e 64  74 72 61 63 6b 65 72 20  | =.Soundtracker |
00017e10  76 6f 6c 75 6d 65 20 74  6f 20 63 6f 6e 76 65 72  |volume to conver|
00017e20  74 20 28 30 2d 36 34 29  0a 3c 3d 09 52 30 20 3d  |t (0-64).<=.R0 =|
00017e30  09 4c 6f 67 61 72 69 74  68 6d 69 63 20 76 6f 6c  |.Logarithmic vol|
00017e40  75 6d 65 20 28 30 2d 32  35 35 29 2c 20 32 35 35  |ume (0-255), 255|
00017e50  3d 6d 61 78 2e 0a 0a 54  68 69 73 20 53 57 49 20  |=max...This SWI |
00017e60  77 69 6c 6c 20 63 6f 6e  76 65 72 74 20 61 20 73  |will convert a s|
00017e70  6f 75 6e 64 74 72 61 63  6b 65 72 20 76 6f 6c 75  |oundtracker volu|
00017e80  6d 65 20 28 61 73 20 72  65 74 75 72 6e 65 64 20  |me (as returned |
00017e90  62 79 20 3c 54 72 61 63  6b 65 72 5f 52 65 61 64  |by <Tracker_Read|
00017ea0  53 61 6d 70 6c 65 54 61  62 6c 65 3e 20 77 68 65  |SampleTable> whe|
00017eb0  6e 20 61 20 73 6f 75 6e  64 74 72 61 63 6b 65 72  |n a soundtracker|
00017ec0  20 74 75 6e 65 20 69 73  20 70 6c 61 79 69 6e 67  | tune is playing|
00017ed0  29 20 69 6e 74 6f 20 61  20 54 72 61 63 6b 65 72  |) into a Tracker|
00017ee0  20 66 6f 72 6d 61 74 20  6c 6f 67 61 72 69 74 68  | format logarith|
00017ef0  6d 69 63 20 76 6f 6c 75  6d 65 20 28 30 2d 32 35  |mic volume (0-25|
00017f00  35 29 2e 0a 44 41 54 41  42 01 00 00 54 72 61 63  |5)..DATAB...Trac|
00017f10  6b 65 72 5f 55 70 64 61  74 65 44 61 74 61 20 20  |ker_UpdateData  |
00017f20  28 26 34 33 32 31 35 29  0a 23 50 61 72 65 6e 74  |(&43215).#Parent|
00017f30  20 54 72 61 63 6b 65 72  5f 0a 54 68 69 73 20 69  | Tracker_.This i|
00017f40  73 20 72 65 61 6c 6c 79  20 61 6e 20 65 64 69 74  |s really an edit|
00017f50  6f 72 20 53 57 49 20 77  68 69 63 68 20 79 6f 75  |or SWI which you|
00017f60  20 73 68 6f 75 6c 64 20  63 61 6c 6c 20 77 68 65  | should call whe|
00017f70  6e 65 76 65 72 20 79 6f  75 20 61 6c 74 65 72 20  |never you alter |
00017f80  6f 6e 65 20 6f 66 20 74  68 65 20 66 6f 6c 6c 6f  |one of the follo|
00017f90  77 69 6e 67 2c 20 73 6f  20 74 68 61 74 20 74 68  |wing, so that th|
00017fa0  65 20 6d 6f 64 75 6c 65  20 63 61 6e 20 75 70 64  |e module can upd|
00017fb0  61 74 65 20 69 74 73 20  64 61 74 61 3a 2d 0a 23  |ate its data:-.#|
00017fc0  49 6e 64 65 6e 74 20 32  0a 8f 09 4e 75 6d 62 65  |Indent 2...Numbe|
00017fd0  72 20 6f 66 20 76 6f 69  63 65 73 20 28 61 6e 64  |r of voices (and|
00017fe0  20 74 68 65 72 65 66 6f  72 65 20 70 61 74 74 65  | therefore patte|
00017ff0  72 6e 20 6c 65 6e 67 74  68 29 0a 8f 09 53 61 6d  |rn length)...Sam|
00018000  70 6c 65 20 6c 65 6e 67  74 68 2f 6c 6f 61 64 20  |ple length/load |
00018010  6e 65 77 20 73 61 6d 70  6c 65 0a 8f 09 4d 75 73  |new sample...Mus|
00018020  69 63 20 6c 65 6e 67 74  68 0a 8f 09 53 74 65 72  |ic length...Ster|
00018030  65 6f 20 73 65 74 74 69  6e 67 73 20 28 54 72 61  |eo settings (Tra|
00018040  63 6b 65 72 29 0a 00 00  44 41 54 41 f7 01 00 00  |cker)...DATA....|
00018050  4e 6f 74 65 20 74 72 61  6e 73 6c 61 74 69 6f 6e  |Note translation|
00018060  20 74 61 62 6c 65 0a 5c  23 09 4e 6f 74 65 09 53  | table.\#.Note.S|
00018070  61 6d 70 6c 65 20 70 65  72 69 6f 64 0a 23 4c 49  |ample period.#LI|
00018080  4e 45 0a 31 09 43 20 2d  31 09 26 33 35 38 0a 32  |NE.1.C -1.&358.2|
00018090  09 43 23 2d 31 09 26 33  32 38 0a 33 09 44 20 2d  |.C#-1.&328.3.D -|
000180a0  31 09 26 32 46 41 0a 34  09 44 23 2d 31 09 26 32  |1.&2FA.4.D#-1.&2|
000180b0  44 30 0a 35 09 45 20 2d  31 09 26 32 41 36 0a 36  |D0.5.E -1.&2A6.6|
000180c0  09 46 20 2d 31 09 26 32  38 30 0a 37 09 46 23 2d  |.F -1.&280.7.F#-|
000180d0  31 09 26 32 35 43 0a 38  09 47 20 2d 31 09 26 32  |1.&25C.8.G -1.&2|
000180e0  33 41 0a 39 09 47 23 2d  31 09 26 32 31 41 0a 31  |3A.9.G#-1.&21A.1|
000180f0  30 09 41 20 2d 31 09 26  31 46 43 0a 31 31 09 41  |0.A -1.&1FC.11.A|
00018100  23 2d 31 09 26 31 45 30  0a 31 32 09 42 20 2d 31  |#-1.&1E0.12.B -1|
00018110  09 26 31 43 35 0a 31 33  09 43 20 2d 32 09 26 31  |.&1C5.13.C -2.&1|
00018120  41 43 0a 31 34 09 43 23  2d 32 09 26 31 39 34 0a  |AC.14.C#-2.&194.|
00018130  31 35 09 44 20 2d 32 09  26 31 37 44 0a 31 36 09  |15.D -2.&17D.16.|
00018140  44 23 2d 32 09 26 31 36  38 0a 31 37 09 45 20 2d  |D#-2.&168.17.E -|
00018150  32 09 26 31 35 33 0a 31  38 09 46 20 2d 32 09 26  |2.&153.18.F -2.&|
00018160  31 34 30 0a 31 39 09 46  23 2d 32 09 26 31 32 45  |140.19.F#-2.&12E|
00018170  0a 32 30 09 47 20 2d 32  09 26 31 31 44 0a 32 31  |.20.G -2.&11D.21|
00018180  09 47 23 2d 32 09 26 31  30 44 0a 32 32 09 41 20  |.G#-2.&10D.22.A |
00018190  2d 32 09 26 46 45 0a 32  33 09 41 23 2d 32 09 26  |-2.&FE.23.A#-2.&|
000181a0  46 30 0a 32 34 09 42 20  2d 32 09 26 45 32 0a 32  |F0.24.B -2.&E2.2|
000181b0  35 09 43 20 2d 33 09 26  44 36 0a 32 36 09 43 23  |5.C -3.&D6.26.C#|
000181c0  2d 33 09 26 43 41 0a 32  37 09 44 20 2d 33 09 26  |-3.&CA.27.D -3.&|
000181d0  42 45 0a 32 38 09 44 23  2d 33 09 26 42 34 0a 32  |BE.28.D#-3.&B4.2|
000181e0  39 09 45 20 2d 33 09 26  41 41 0a 33 30 09 46 20  |9.E -3.&AA.30.F |
000181f0  2d 33 09 26 41 30 0a 33  31 09 46 23 2d 33 09 26  |-3.&A0.31.F#-3.&|
00018200  39 37 0a 33 32 09 47 20  2d 33 09 26 38 46 0a 33  |97.32.G -3.&8F.3|
00018210  33 09 47 23 2d 33 09 26  38 37 0a 33 34 09 41 20  |3.G#-3.&87.34.A |
00018220  2d 33 09 26 37 46 0a 33  35 09 41 23 2d 33 09 26  |-3.&7F.35.A#-3.&|
00018230  37 38 0a 33 36 09 42 20  2d 33 09 26 37 31 0a 00  |78.36.B -3.&71..|
00018240  44 41 54 41 d9 0b 00 00  54 72 61 63 6b 65 72 20  |DATA....Tracker |
00018250  61 6e 64 20 53 6f 75 6e  64 74 72 61 63 6b 65 72  |and Soundtracker|
00018260  20 63 6f 6d 6d 61 6e 64  73 0a 49 6e 20 61 6c 6c  | commands.In all|
00018270  20 74 75 6e 65 73 2c 20  74 68 65 72 65 20 61 72  | tunes, there ar|
00018280  65 20 73 70 65 63 69 61  6c 20 63 6f 6d 6d 61 6e  |e special comman|
00018290  64 73 20 77 68 69 63 68  20 68 61 76 65 20 61 20  |ds which have a |
000182a0  74 79 70 65 20 28 30 2d  26 46 20 66 6f 72 20 61  |type (0-&F for a|
000182b0  6d 69 67 61 2c 20 30 2d  39 20 26 20 41 2d 5a 20  |miga, 0-9 & A-Z |
000182c0  66 6f 72 20 54 72 61 63  6b 65 72 29 20 61 6e 64  |for Tracker) and|
000182d0  20 64 61 74 61 20 28 75  73 75 61 6c 6c 79 20 70  | data (usually p|
000182e0  72 65 73 65 6e 74 65 64  20 61 73 20 61 20 68 65  |resented as a he|
000182f0  78 20 62 79 74 65 2c 20  69 65 2e 20 26 58 58 29  |x byte, ie. &XX)|
00018300  2c 20 77 68 69 63 68 20  69 73 20 73 6f 6d 65 74  |, which is somet|
00018310  69 6d 65 73 20 74 72 65  61 74 65 64 20 61 73 20  |imes treated as |
00018320  74 77 6f 20 73 65 70 65  72 61 74 65 20 6e 69 62  |two seperate nib|
00018330  62 6c 65 73 20 28 69 65  2e 20 61 72 70 65 67 67  |bles (ie. arpegg|
00018340  69 6f 29 2e 0a 41 20 6c  69 73 74 20 6f 66 20 74  |io)..A list of t|
00018350  68 65 20 63 6f 6d 6d 61  6e 64 73 20 66 6f 75 6e  |he commands foun|
00018360  64 20 69 6e 20 54 72 61  63 6b 65 72 2f 53 54 72  |d in Tracker/STr|
00018370  61 63 6b 65 72 20 74 75  6e 65 73 20 69 73 20 61  |acker tunes is a|
00018380  73 20 66 6f 6c 6c 6f 77  73 3a 0a 0a 43 6f 6d 6d  |s follows:..Comm|
00018390  61 6e 64 09 20 45 66 66  65 63 74 0a 23 4c 49 4e  |and. Effect.#LIN|
000183a0  45 0a 30 20 28 62 6f 74  68 29 09 41 72 70 65 67  |E.0 (both).Arpeg|
000183b0  67 69 6f 20 2d 0a 09 09  6e 6f 74 65 32 3d 3c 62  |gio -...note2=<b|
000183c0  61 73 65 20 6e 6f 74 65  3d 3e 54 72 61 63 6b 65  |ase note=>Tracke|
000183d0  72 5f 4e 6f 74 65 54 61  62 6c 65 3e 2b 28 66 69  |r_NoteTable>+(fi|
000183e0  72 73 74 20 64 69 67 69  74 20 6f 66 20 64 61 74  |rst digit of dat|
000183f0  61 29 20 73 65 6d 69 74  6f 6e 65 73 0a 09 09 6e  |a) semitones...n|
00018400  6f 74 65 33 3d 20 22 20  22 20 2b 28 73 65 63 6f  |ote3= " " +(seco|
00018410  6e 64 20 22 22 09 20 22  29 20 22 0a 09 50 6c 61  |nd "". ") "..Pla|
00018420  79 20 6e 6f 74 65 33 20  66 6f 72 20 6f 6e 65 20  |y note3 for one |
00018430  76 73 79 6e 63 2c 20 74  68 65 6e 20 6e 6f 74 65  |vsync, then note|
00018440  32 2c 20 62 61 73 65 20  6e 6f 74 65 2c 20 6e 6f  |2, base note, no|
00018450  74 65 33 2c 20 6e 6f 74  65 32 20 61 6e 64 20 74  |te3, note2 and t|
00018460  68 65 6e 20 74 68 65 20  62 61 73 65 20 6e 6f 74  |hen the base not|
00018470  65 20 74 6f 20 61 63 68  69 65 76 65 20 61 20 63  |e to achieve a c|
00018480  68 6f 72 64 20 65 66 66  65 63 74 20 28 69 65 2e  |hord effect (ie.|
00018490  20 43 2d 32 20 77 69 74  68 20 63 6f 6d 6d 61 6e  | C-2 with comman|
000184a0  64 20 30 20 64 61 74 61  20 27 26 34 37 27 20 28  |d 0 data '&47' (|
000184b0  68 65 78 29 20 77 6f 75  6c 64 20 70 6c 61 79 20  |hex) would play |
000184c0  61 20 6d 61 6a 6f 72 20  61 72 70 65 67 67 69 6f  |a major arpeggio|
000184d0  20 6f 66 20 43 2d 32 2c  20 45 2d 32 2c 20 47 2d  | of C-2, E-2, G-|
000184e0  32 2e 49 66 20 74 68 65  20 73 70 65 65 64 20 69  |2.If the speed i|
000184f0  73 20 6c 65 73 73 20 74  68 61 6e 20 36 2c 20 74  |s less than 6, t|
00018500  68 65 20 61 72 70 65 67  67 69 6f 20 77 69 6c 6c  |he arpeggio will|
00018510  20 62 65 20 63 75 74 20  73 68 6f 72 74 2e 0a 0a  | be cut short...|
00018520  31 20 28 62 6f 74 68 29  09 50 69 74 63 68 20 73  |1 (both).Pitch s|
00018530  6c 69 64 65 20 28 70 6f  72 74 61 6d 65 6e 74 6f  |lide (portamento|
00018540  20 75 70 29 20 2d 0a 09  57 68 69 6c 65 20 74 68  | up) -..While th|
00018550  65 20 63 6f 6d 6d 61 6e  64 20 69 73 20 70 6c 61  |e command is pla|
00018560  79 69 6e 67 2c 20 44 45  43 52 45 4d 45 4e 54 20  |ying, DECREMENT |
00018570  74 68 65 20 73 61 6d 70  6c 65 20 70 65 72 69 6f  |the sample perio|
00018580  64 20 62 79 20 5c 3c 70  61 72 61 6d 65 74 65 72  |d by \<parameter|
00018590  3e 20 28 30 2d 31 35 20  75 73 75 61 6c 6c 79 29  |> (0-15 usually)|
000185a0  2e 20 54 68 69 73 20 68  61 73 20 74 68 65 20 65  |. This has the e|
000185b0  66 66 65 63 74 20 6f 66  20 49 4e 43 52 45 41 53  |ffect of INCREAS|
000185c0  49 4e 47 20 74 68 65 20  70 69 74 63 68 20 73 6d  |ING the pitch sm|
000185d0  6f 6f 74 68 6c 79 20 77  69 74 68 6f 75 74 20 72  |oothly without r|
000185e0  65 73 74 61 72 74 69 6e  67 20 74 68 65 20 73 61  |estarting the sa|
000185f0  6d 70 6c 65 2e 20 4e 6f  74 65 20 74 68 61 74 20  |mple. Note that |
00018600  74 68 65 20 70 69 74 63  68 20 67 61 69 6e 65 64  |the pitch gained|
00018610  20 62 79 20 61 20 66 69  78 65 64 20 63 68 61 6e  | by a fixed chan|
00018620  67 65 20 74 6f 20 74 68  65 20 73 61 6d 70 6c 65  |ge to the sample|
00018630  20 70 65 72 69 6f 64 20  69 73 20 6e 6f 74 20 63  | period is not c|
00018640  6f 6e 73 74 61 6e 74 20  6f 76 65 72 20 74 68 65  |onstant over the|
00018650  20 33 20 6f 63 74 61 76  65 73 2e 0a 0a 32 20 28  | 3 octaves...2 (|
00018660  62 6f 74 68 29 09 50 69  74 63 68 20 73 6c 69 64  |both).Pitch slid|
00018670  65 20 28 70 6f 72 74 61  6d 65 6e 74 6f 20 64 6f  |e (portamento do|
00018680  77 6e 29 20 2d 0a 09 4c  69 6b 65 20 63 6f 6d 6d  |wn) -..Like comm|
00018690  61 6e 64 20 31 20 62 75  74 20 73 6c 69 64 65 73  |and 1 but slides|
000186a0  20 74 68 65 20 70 69 74  63 68 20 64 6f 77 6e 2e  | the pitch down.|
000186b0  0a 0a 33 20 28 61 6d 69  67 61 20 6f 6e 6c 79 29  |..3 (amiga only)|
000186c0  09 50 6f 72 74 61 6d 65  6e 74 6f 20 2d 0a 09 53  |.Portamento -..S|
000186d0  6f 75 6e 64 73 20 73 69  6d 69 6c 61 72 20 74 6f  |ounds similar to|
000186e0  20 63 6f 6d 6d 61 6e 64  73 20 31 20 26 20 32 2c  | commands 1 & 2,|
000186f0  20 62 75 74 20 62 65 68  61 76 65 73 20 64 69 66  | but behaves dif|
00018700  66 65 72 65 6e 74 6c 79  2e 20 57 68 65 6e 20 79  |ferently. When y|
00018710  6f 75 20 75 73 65 20 63  6f 6d 6d 61 6e 64 20 33  |ou use command 3|
00018720  20 77 69 74 68 20 61 20  6e 6f 74 65 20 73 70 65  | with a note spe|
00018730  63 69 66 69 65 64 2c 20  74 68 65 20 6e 6f 74 65  |cified, the note|
00018740  20 69 73 20 6e 6f 74 20  70 6c 61 79 65 64 2c 20  | is not played, |
00018750  62 75 74 20 74 68 65 20  70 69 74 63 68 20 6f 66  |but the pitch of|
00018760  20 74 68 65 20 6e 6f 74  65 20 69 73 20 73 65 74  | the note is set|
00018770  20 61 73 20 74 68 65 20  27 67 6f 61 6c 27 20 6f  | as the 'goal' o|
00018780  66 20 74 68 65 20 70 6f  72 74 61 6d 65 6e 74 6f  |f the portamento|
00018790  2e 20 54 68 65 6e 2c 20  77 68 65 6e 65 76 65 72  |. Then, whenever|
000187a0  20 61 20 63 6f 6d 6d 61  6e 64 20 33 20 63 6f 6d  | a command 3 com|
000187b0  65 73 20 75 70 2c 20 74  68 65 20 70 69 74 63 68  |es up, the pitch|
000187c0  20 69 73 20 61 75 74 6f  6d 61 74 69 63 61 6c 6c  | is automaticall|
000187d0  79 20 73 6c 69 64 65 64  20 69 6e 20 74 68 65 20  |y slided in the |
000187e0  61 70 70 72 6f 70 72 69  61 74 65 20 64 69 72 65  |appropriate dire|
000187f0  63 74 69 6f 6e 20 62 79  20 74 68 65 20 76 61 6c  |ction by the val|
00018800  75 65 20 6c 61 73 74 20  67 69 76 65 6e 20 61 73  |ue last given as|
00018810  20 61 20 70 61 72 61 6d  65 74 65 72 20 66 6f 72  | a parameter for|
00018820  20 63 6f 6d 6d 61 6e 64  20 33 2c 20 75 6e 74 69  | command 3, unti|
00018830  6c 20 74 68 65 20 27 67  6f 61 6c 27 20 69 73 20  |l the 'goal' is |
00018840  6d 65 74 2c 20 61 6e 64  20 66 75 72 74 68 65 72  |met, and further|
00018850  20 63 6f 6d 6d 61 6e 64  20 33 27 73 20 77 69 6c  | command 3's wil|
00018860  6c 20 68 61 76 65 20 6e  6f 20 65 66 66 65 63 74  |l have no effect|
00018870  2e 0a 0a 34 20 28 61 6d  69 67 61 20 6f 6e 6c 79  |...4 (amiga only|
00018880  29 09 56 69 62 72 61 74  6f 20 2d 0a 09 54 68 69  |).Vibrato -..Thi|
00018890  73 20 63 61 75 73 65 73  20 74 68 65 20 76 6f 6c  |s causes the vol|
000188a0  75 6d 65 20 74 6f 20 72  69 73 65 20 61 6e 64 20  |ume to rise and |
000188b0  66 61 6c 6c 20 69 6e 20  61 20 77 61 72 62 6c 69  |fall in a warbli|
000188c0  6e 67 20 65 66 66 65 63  74 2e 20 54 68 65 20 66  |ng effect. The f|
000188d0  69 72 73 74 20 64 69 67  69 74 20 67 69 76 65 73  |irst digit gives|
000188e0  20 74 68 65 20 73 70 65  65 64 20 6f 66 20 74 68  | the speed of th|
000188f0  65 20 76 6f 6c 75 6d 65  20 63 68 61 6e 67 65 20  |e volume change |
00018900  28 31 3d 73 6c 6f 77 2c  20 26 46 3d 66 61 73 74  |(1=slow, &F=fast|
00018910  29 2c 20 61 6e 64 20 74  68 65 20 73 65 63 6f 6e  |), and the secon|
00018920  64 20 64 69 67 69 74 20  67 69 76 65 73 20 74 68  |d digit gives th|
00018930  65 20 6d 61 67 6e 69 74  75 64 65 20 6f 66 20 74  |e magnitude of t|
00018940  68 65 20 76 69 62 72 61  74 6f 2e 20 54 68 65 20  |he vibrato. The |
00018950  76 69 62 72 61 74 6f 20  69 73 20 63 72 65 61 74  |vibrato is creat|
00018960  65 64 20 62 79 20 73 75  62 74 72 61 63 74 69 6e  |ed by subtractin|
00018970  67 20 61 20 73 69 6e 75  73 6f 69 64 61 6c 6c 79  |g a sinusoidally|
00018980  20 76 61 72 79 69 6e 67  20 61 6d 6f 75 6e 74 20  | varying amount |
00018990  66 72 6f 6d 20 74 68 65  20 76 6f 6c 75 6d 65 20  |from the volume |
000189a0  6f 66 20 74 68 65 20 63  68 61 6e 6e 65 6c 2e 0a  |of the channel..|
000189b0  0a 35 2c 36 2c 37 20 28  61 6d 69 67 61 29 09 43  |.5,6,7 (amiga).C|
000189c0  6f 6d 62 69 6e 61 74 69  6f 6e 73 20 6f 66 20 74  |ombinations of t|
000189d0  68 65 20 76 6f 6c 75 6d  65 20 61 6e 64 20 70 69  |he volume and pi|
000189e0  74 63 68 20 73 6c 69 64  65 73 20 28 4e 6f 74 20  |tch slides (Not |
000189f0  69 6d 70 6c 65 6d 65 6e  74 65 64 29 0a 0a 39 20  |implemented)..9 |
00018a00  28 61 6d 69 67 61 20 6f  6e 6c 79 29 09 53 65 74  |(amiga only).Set|
00018a10  20 73 61 6d 70 6c 65 20  6f 66 66 73 65 74 20 28  | sample offset (|
00018a20  4e 6f 74 20 69 6d 70 6c  65 6d 65 6e 74 65 64 29  |Not implemented)|
00018a30  2e 0a 0a 41 20 28 61 6d  69 67 61 29 09 56 6f 6c  |...A (amiga).Vol|
00018a40  75 6d 65 20 73 6c 69 64  65 20 2d 0a 09 49 66 20  |ume slide -..If |
00018a50  74 68 65 20 66 69 72 73  74 20 6e 69 62 62 6c 65  |the first nibble|
00018a60  20 69 73 20 6e 6f 6e 2d  7a 65 72 6f 2c 20 61 64  | is non-zero, ad|
00018a70  64 20 74 68 69 73 20 76  61 6c 75 65 20 74 6f 20  |d this value to |
00018a80  74 68 65 20 63 75 72 72  65 6e 74 20 76 6f 6c 75  |the current volu|
00018a90  6d 65 20 65 76 65 72 79  20 76 73 79 6e 63 2c 20  |me every vsync, |
00018aa0  65 6c 73 65 20 73 75 62  74 72 61 63 74 20 74 68  |else subtract th|
00018ab0  65 20 73 65 63 6f 6e 64  20 6e 69 62 62 6c 65 20  |e second nibble |
00018ac0  69 6e 20 61 20 73 69 6d  69 6c 61 72 20 66 61 73  |in a similar fas|
00018ad0  68 69 6f 6e 2e 0a 0a 47  2c 20 48 20 28 54 72 61  |hion...G, H (Tra|
00018ae0  63 6b 65 72 29 09 56 6f  6c 75 6d 65 20 73 6c 69  |cker).Volume sli|
00018af0  64 65 20 75 70 2c 20 64  6f 77 6e 20 2d 0a 09 54  |de up, down -..T|
00018b00  68 65 73 65 20 63 6f 6d  6d 61 6e 64 73 20 61 72  |hese commands ar|
00018b10  65 20 74 68 65 20 73 61  6d 65 20 61 73 20 74 68  |e the same as th|
00018b20  65 20 41 20 63 6f 6d 6d  61 6e 64 20 6f 6e 20 74  |e A command on t|
00018b30  68 65 20 61 6d 69 67 61  2c 20 62 75 74 20 74 61  |he amiga, but ta|
00018b40  6b 65 20 61 20 62 79 74  65 20 70 61 72 61 6d 65  |ke a byte parame|
00018b50  74 65 72 2e 0a 0a 42 20  28 61 6d 69 67 61 29 09  |ter...B (amiga).|
00018b60  50 6f 73 69 74 69 6f 6e  20 6a 75 6d 70 20 2d 0a  |Position jump -.|
00018b70  4a 20 28 54 72 61 63 6b  65 72 29 09 57 68 65 6e  |J (Tracker).When|
00018b80  20 74 68 69 73 20 63 6f  6d 6d 61 6e 64 20 69 73  | this command is|
00018b90  20 6d 65 74 2c 20 6a 75  6d 70 20 74 6f 20 70 6f  | met, jump to po|
00018ba0  73 69 74 69 6f 6e 20 5c  3c 70 61 72 61 6d 65 74  |sition \<paramet|
00018bb0  65 72 3e 20 69 6e 20 73  6f 6e 67 2e 0a 0a 42 20  |er> in song...B |
00018bc0  28 54 72 61 63 6b 65 72  29 09 42 72 65 61 6b 20  |(Tracker).Break |
00018bd0  70 61 74 74 65 72 6e 20  2d 0a 09 45 71 75 69 76  |pattern -..Equiv|
00018be0  61 6c 65 6e 74 20 74 6f  20 61 6d 69 67 61 20 63  |alent to amiga c|
00018bf0  6f 6d 6d 61 6e 64 20 44  0a 0a 43 20 28 61 6d 69  |ommand D..C (ami|
00018c00  67 61 29 09 53 65 74 20  76 6f 6c 75 6d 65 20 2d  |ga).Set volume -|
00018c10  0a 56 20 28 54 72 61 63  6b 65 72 29 09 41 6c 74  |.V (Tracker).Alt|
00018c20  65 72 73 20 74 68 65 20  63 75 72 72 65 6e 74 20  |ers the current |
00018c30  76 6f 6c 75 6d 65 20 6f  66 20 74 68 65 20 63 68  |volume of the ch|
00018c40  61 6e 6e 65 6c 20 74 6f  20 74 68 65 20 76 61 6c  |annel to the val|
00018c50  75 65 20 73 70 65 63 69  66 69 65 64 20 28 30 2d  |ue specified (0-|
00018c60  36 34 20 61 6d 69 67 61  2c 20 30 2d 32 35 35 20  |64 amiga, 0-255 |
00018c70  61 72 63 29 2e 20 56 6f  6c 75 6d 65 20 30 20 6d  |arc). Volume 0 m|
00018c80  65 61 6e 73 20 6d 75 74  65 20 73 6f 75 6e 64 2e  |eans mute sound.|
00018c90  0a 0a 44 20 28 61 6d 69  67 61 29 09 42 72 65 61  |..D (amiga).Brea|
00018ca0  6b 20 70 61 74 74 65 72  6e 20 2d 0a 42 20 28 54  |k pattern -.B (T|
00018cb0  72 61 63 6b 65 72 29 09  57 68 65 6e 20 74 68 69  |racker).When thi|
00018cc0  73 20 63 6f 6d 6d 61 6e  64 20 69 73 20 65 6e 63  |s command is enc|
00018cd0  6f 75 6e 74 65 72 65 64  2c 20 74 68 65 20 70 61  |ountered, the pa|
00018ce0  74 74 65 72 6e 20 69 73  20 65 6e 64 65 64 2c 20  |ttern is ended, |
00018cf0  61 6e 64 20 74 68 65 20  6e 65 78 74 20 70 61 74  |and the next pat|
00018d00  74 65 72 6e 20 6a 75 6d  70 65 64 20 74 6f 2e 0a  |tern jumped to..|
00018d10  0a 45 20 28 61 6d 69 67  61 29 09 56 61 72 69 6f  |.E (amiga).Vario|
00018d20  75 73 20 63 6f 6d 6d 61  6e 64 73 20 28 69 65 2e  |us commands (ie.|
00018d30  20 68 2f 77 20 66 69 6c  74 65 72 20 63 6f 6d 6d  | h/w filter comm|
00018d40  61 6e 64 73 29 20 5b 4e  6f 74 20 69 6d 70 6c 65  |ands) [Not imple|
00018d50  6d 65 6e 74 65 64 5d 2e  0a 0a 45 20 28 54 72 61  |mented]...E (Tra|
00018d60  63 6b 65 72 29 09 53 65  74 20 73 74 65 72 65 6f  |cker).Set stereo|
00018d70  20 2d 0a 09 53 65 74 20  74 68 65 20 73 74 65 72  | -..Set the ster|
00018d80  65 6f 20 70 6f 73 69 74  69 6f 6e 20 28 31 2d 37  |eo position (1-7|
00018d90  29 20 6f 66 20 74 68 65  20 63 75 72 72 65 6e 74  |) of the current|
00018da0  20 73 6f 75 6e 64 20 63  68 61 6e 6e 65 6c 0a 09  | sound channel..|
00018db0  28 31 2d 38 29 2e 0a 0a  46 20 28 61 6d 69 67 61  |(1-8)...F (amiga|
00018dc0  29 09 53 65 74 20 73 70  65 65 64 20 2d 0a 53 20  |).Set speed -.S |
00018dd0  28 54 72 61 63 6b 65 72  29 09 53 65 74 73 20 74  |(Tracker).Sets t|
00018de0  68 65 20 73 70 65 65 64  20 28 6e 75 6d 62 65 72  |he speed (number|
00018df0  20 6f 66 20 76 73 79 6e  63 73 20 62 65 74 77 65  | of vsyncs betwe|
00018e00  65 6e 20 65 76 65 6e 74  73 29 20 74 6f 20 70 61  |en events) to pa|
00018e10  72 61 6d 65 74 65 72 2e  0a 00 00 00 44 41 54 41  |rameter.....DATA|
00018e20  b6 06 00 00 45 72 72 6f  72 73 20 67 65 6e 65 72  |....Errors gener|
00018e30  61 74 65 64 20 62 79 20  54 72 61 63 6b 65 72 4d  |ated by TrackerM|
00018e40  6f 64 75 6c 65 0a 45 72  72 6f 72 09 4e 61 6d 65  |odule.Error.Name|
00018e50  09 4d 65 61 6e 69 6e 67  0a 23 4c 49 4e 45 0a 26  |.Meaning.#LINE.&|
00018e60  34 33 32 30 30 09 4e 6f  20 74 75 6e 65 20 6c 6f  |43200.No tune lo|
00018e70  61 64 65 64 20 20 20 20  20 20 20 20 09 41 6e 20  |aded        .An |
00018e80  6f 70 65 72 61 74 69 6f  6e 20 77 61 73 20 61 74  |operation was at|
00018e90  74 65 6d 70 74 65 64 20  77 68 69 63 68 20 72 65  |tempted which re|
00018ea0  71 75 69 72 65 73 20 61  20 74 75 6e 65 20 74 6f  |quires a tune to|
00018eb0  20 62 65 20 6c 6f 61 64  65 64 20 69 6e 74 6f 20  | be loaded into |
00018ec0  6d 65 6d 6f 72 79 20 62  65 66 6f 72 65 20 68 61  |memory before ha|
00018ed0  6e 64 20 75 73 69 6e 67  20 2a 50 6c 61 79 4d 6f  |nd using *PlayMo|
00018ee0  64 20 6f 72 20 3c 54 72  61 63 6b 65 72 5f 4c 6f  |d or <Tracker_Lo|
00018ef0  61 64 3e 2e 0a 26 34 33  32 30 31 09 53 65 71 75  |ad>..&43201.Sequ|
00018f00  65 6e 63 65 20 70 6f 73  69 74 69 6f 6e 20 6f 75  |ence position ou|
00018f10  74 20 6f 66 20 72 61 6e  67 65 09 54 68 65 20 73  |t of range.The s|
00018f20  65 71 75 65 6e 63 65 20  70 6f 73 69 74 69 6f 6e  |equence position|
00018f30  20 67 69 76 65 6e 20 77  69 74 68 20 2a 50 6c 61  | given with *Pla|
00018f40  79 50 6f 73 20 6f 72 20  53 57 49 20 3c 54 72 61  |yPos or SWI <Tra|
00018f50  63 6b 65 72 5f 53 65 74  50 6f 73 3e 20 77 61 73  |cker_SetPos> was|
00018f60  20 68 69 67 68 65 72 20  74 68 61 6e 20 74 68 65  | higher than the|
00018f70  20 61 63 74 75 61 6c 20  6e 75 6d 62 65 72 20 6f  | actual number o|
00018f80  66 20 70 61 74 74 65 72  6e 73 20 69 6e 20 74 68  |f patterns in th|
00018f90  65 20 73 6f 6e 67 2e 0a  26 34 33 32 30 32 09 4e  |e song..&43202.N|
00018fa0  6f 20 72 6f 6f 6d 20 66  6f 72 20 6d 6f 64 75 6c  |o room for modul|
00018fb0  65 20 20 20 20 09 54 68  65 20 74 72 61 63 6b 65  |e    .The tracke|
00018fc0  72 6d 6f 64 75 6c 65 20  63 6f 75 6c 64 20 6e 6f  |rmodule could no|
00018fd0  74 20 63 6c 61 69 6d 20  65 6e 6f 75 67 68 20 52  |t claim enough R|
00018fe0  4d 41 20 77 6f 72 6b 73  70 61 63 65 20 74 6f 20  |MA workspace to |
00018ff0  6c 6f 61 64 20 74 68 65  20 6d 6f 64 75 6c 65 2e  |load the module.|
00019000  20 54 6f 20 67 65 74 20  6d 6f 72 65 20 6d 65 6d  | To get more mem|
00019010  6f 72 79 2c 20 71 75 69  74 20 62 61 73 69 63 20  |ory, quit basic |
00019020  74 6f 20 74 68 65 20 73  75 70 65 72 76 69 73 6f  |to the superviso|
00019030  72 20 70 72 6f 6d 70 74  2c 20 61 6e 64 20 72 65  |r prompt, and re|
00019040  74 72 79 2e 20 49 66 20  79 6f 75 20 61 72 65 20  |try. If you are |
00019050  75 73 69 6e 67 20 74 68  65 20 64 65 73 6b 74 6f  |using the deskto|
00019060  70 20 69 6e 73 74 65 61  64 2c 20 72 65 6d 6f 76  |p instead, remov|
00019070  65 20 61 6e 20 61 70 70  6c 69 63 61 74 69 6f 6e  |e an application|
00019080  20 61 6e 64 20 72 65 74  72 79 2e 0a 26 34 33 32  | and retry..&432|
00019090  30 33 09 43 68 61 6e 6e  65 6c 20 6e 75 6d 62 65  |03.Channel numbe|
000190a0  72 20 6f 75 74 20 6f 66  20 72 61 6e 67 65 09 54  |r out of range.T|
000190b0  68 65 20 73 6f 75 6e 64  20 63 68 61 6e 6e 65 6c  |he sound channel|
000190c0  20 6e 75 6d 62 65 72 20  77 61 73 20 6e 6f 74 20  | number was not |
000190d0  61 20 76 61 6c 75 65 20  62 65 74 77 65 65 6e 20  |a value between |
000190e0  31 20 61 6e 64 20 74 68  65 20 6e 75 6d 62 65 72  |1 and the number|
000190f0  20 6f 66 20 73 6f 75 6e  64 20 63 68 61 6e 6e 65  | of sound channe|
00019100  6c 73 20 75 73 65 64 20  66 6f 72 20 74 68 61 74  |ls used for that|
00019110  20 70 61 72 74 69 63 75  6c 61 72 20 74 75 6e 65  | particular tune|
00019120  2e 0a 26 34 33 32 30 34  09 53 61 6d 70 6c 65 20  |..&43204.Sample |
00019130  6e 75 6d 62 65 72 20 6f  75 74 20 6f 66 20 72 61  |number out of ra|
00019140  6e 67 65 09 54 68 65 20  73 61 6d 70 6c 65 20 6e  |nge.The sample n|
00019150  75 6d 62 65 72 20 77 61  73 20 6e 6f 74 20 77 69  |umber was not wi|
00019160  74 68 69 6e 20 74 68 65  20 72 61 6e 67 65 20 6f  |thin the range o|
00019170  66 20 31 2d 33 36 2e 0a  26 34 33 32 30 35 09 4e  |f 1-36..&43205.N|
00019180  6f 74 65 20 6e 75 6d 62  65 72 20 6f 75 74 20 6f  |ote number out o|
00019190  66 20 72 61 6e 67 65 09  54 68 65 20 6e 6f 74 65  |f range.The note|
000191a0  20 6e 75 6d 62 65 72 20  77 61 73 20 6e 6f 74 20  | number was not |
000191b0  77 69 74 68 69 6e 20 74  68 65 20 72 61 6e 67 65  |within the range|
000191c0  20 6f 66 20 31 2d 33 36  2e 0a 26 34 33 32 30 36  | of 1-36..&43206|
000191d0  09 56 6f 6c 75 6d 65 20  6f 75 74 20 6f 66 20 72  |.Volume out of r|
000191e0  61 6e 67 65 09 54 68 65  20 76 6f 6c 75 6d 65 20  |ange.The volume |
000191f0  77 61 73 20 6e 6f 74 20  77 69 74 68 69 6e 20 74  |was not within t|
00019200  68 65 20 72 61 6e 67 65  20 6f 66 20 30 2d 32 35  |he range of 0-25|
00019210  35 0a 26 34 33 32 30 37  09 4d 6f 64 75 6c 65 20  |5.&43207.Module |
00019220  61 6c 72 65 61 64 79 20  6c 6f 63 6b 65 64 09 3c  |already locked.<|
00019230  54 72 61 63 6b 65 72 5f  4c 6f 63 6b 3e 20 77 61  |Tracker_Lock> wa|
00019240  73 20 63 61 6c 6c 65 64  20 77 68 65 6e 20 74 68  |s called when th|
00019250  65 20 6d 6f 64 75 6c 65  20 77 61 73 20 61 6c 72  |e module was alr|
00019260  65 61 64 79 20 6c 6f 63  6b 65 64 2e 20 54 68 65  |eady locked. The|
00019270  20 6d 6f 64 75 6c 65 20  63 61 6e 20 6f 6e 6c 79  | module can only|
00019280  20 62 65 20 75 6e 6c 6f  63 6b 65 64 20 77 68 65  | be unlocked whe|
00019290  6e 20 74 68 65 20 61 70  70 6c 69 63 61 74 69 6f  |n the applicatio|
000192a0  6e 20 69 6e 20 63 6f 6e  74 72 6f 6c 20 6f 66 20  |n in control of |
000192b0  74 68 65 20 6d 6f 64 75  6c 65 20 69 73 73 75 65  |the module issue|
000192c0  73 20 3c 54 72 61 63 6b  65 72 5f 55 6e 6c 6f 63  |s <Tracker_Unloc|
000192d0  6b 3e 2e 0a 26 34 33 32  30 38 09 55 6e 6c 6f 63  |k>..&43208.Unloc|
000192e0  6b 20 66 61 69 6c 65 64  09 3c 54 72 61 63 6b 65  |k failed.<Tracke|
000192f0  72 5f 55 6e 6c 6f 63 6b  3e 20 77 61 73 20 63 61  |r_Unlock> was ca|
00019300  6c 6c 65 64 20 62 75 74  20 65 69 74 68 65 72 20  |lled but either |
00019310  74 68 65 20 77 72 6f 6e  67 20 6c 6f 63 6b 69 6e  |the wrong lockin|
00019320  67 20 63 6f 64 65 20 77  61 73 20 73 70 65 63 69  |g code was speci|
00019330  66 69 65 64 2c 20 6f 72  20 74 68 65 20 6d 6f 64  |fied, or the mod|
00019340  75 6c 65 20 77 61 73 20  6e 6f 74 20 6c 6f 63 6b  |ule was not lock|
00019350  65 64 20 61 74 20 74 68  65 20 74 69 6d 65 2e 0a  |ed at the time..|
00019360  26 34 33 32 30 39 09 54  72 61 63 6b 65 72 4d 6f  |&43209.TrackerMo|
00019370  64 75 6c 65 20 69 6e 20  75 73 65 09 41 6e 20 61  |dule in use.An a|
00019380  74 74 65 6d 70 74 20 77  61 73 20 6d 61 64 65 20  |ttempt was made |
00019390  74 6f 20 65 78 65 63 75  74 65 20 6f 6e 65 20 6f  |to execute one o|
000193a0  66 20 74 68 65 20 72 65  73 74 72 69 63 74 65 64  |f the restricted|
000193b0  20 63 6f 6d 6d 61 6e 64  73 20 6f 72 20 53 57 49  | commands or SWI|
000193c0  27 73 20 77 68 69 6c 65  20 74 68 65 20 6d 6f 64  |'s while the mod|
000193d0  75 6c 65 20 77 61 73 20  6c 6f 63 6b 65 64 20 28  |ule was locked (|
000193e0  73 65 65 20 3c 54 72 61  63 6b 65 72 5f 4c 6f 63  |see <Tracker_Loc|
000193f0  6b 3e 29 0a 26 34 33 32  30 41 09 53 70 65 65 64  |k>).&4320A.Speed|
00019400  20 6e 6f 74 20 69 6d 70  6c 65 6d 65 6e 74 65 64  | not implemented|
00019410  09 3c 54 72 61 63 6b 65  72 5f 53 70 65 65 64 3e  |.<Tracker_Speed>|
00019420  20 77 61 73 20 63 61 6c  6c 65 64 20 77 69 74 68  | was called with|
00019430  20 52 30 20 6f 75 74 73  69 64 65 20 74 68 65 20  | R0 outside the |
00019440  72 61 6e 67 65 20 6f 66  20 76 61 6c 75 65 73 20  |range of values |
00019450  63 75 72 72 65 6e 74 6c  79 20 61 63 63 65 70 74  |currently accept|
00019460  65 64 2e 0a 26 34 33 32  30 42 09 42 61 64 20 73  |ed..&4320B.Bad s|
00019470  61 6d 70 6c 65 20 6c 6f  6f 70 69 6e 67 09 56 61  |ample looping.Va|
00019480  6c 75 65 73 20 6f 66 20  72 65 70 65 61 74 20 6f  |lues of repeat o|
00019490  66 66 73 65 74 2f 72 65  70 65 61 74 20 6c 65 6e  |ffset/repeat len|
000194a0  67 74 68 20 77 6f 75 6c  64 20 63 61 75 73 65 20  |gth would cause |
000194b0  73 61 6d 70 6c 65 20 74  6f 20 6c 6f 6f 70 20 6f  |sample to loop o|
000194c0  75 74 73 69 64 65 20 69  74 73 20 6c 69 6d 69 74  |utside its limit|
000194d0  2e 0a 00 00 44 41 54 41  0b 06 00 00 54 72 61 63  |....DATA....Trac|
000194e0  6b 65 72 4d 6f 64 75 6c  65 20 73 6f 75 6e 64 20  |kerModule sound |
000194f0  64 61 74 61 20 62 6c 6f  63 6b 0a 4f 66 66 73 65  |data block.Offse|
00019500  74 09 44 61 74 61 0a 23  4c 49 4e 45 0a 30 09 54  |t.Data.#LINE.0.T|
00019510  68 65 20 63 75 72 72 65  6e 74 20 70 69 74 63 68  |he current pitch|
00019520  20 61 63 63 75 6d 75 6c  61 74 6f 72 2e 20 28 73  | accumulator. (s|
00019530  68 69 66 74 20 72 69 67  68 74 20 31 36 20 62 69  |hift right 16 bi|
00019540  74 73 20 74 6f 20 67 65  74 20 74 68 65 20 61 63  |ts to get the ac|
00019550  74 75 61 6c 20 62 79 74  65 20 6f 66 66 73 65 74  |tual byte offset|
00019560  20 69 6e 74 6f 20 74 68  65 20 73 61 6d 70 6c 65  | into the sample|
00019570  20 62 65 69 6e 67 20 70  6c 61 79 65 64 29 2e 0a  | being played)..|
00019580  34 09 54 68 65 20 63 75  72 72 65 6e 74 20 70 69  |4.The current pi|
00019590  74 63 68 20 69 6e 63 72  65 6d 65 6e 74 20 28 61  |tch increment (a|
000195a0  64 64 65 64 20 74 6f 20  61 63 63 75 6d 75 6c 61  |dded to accumula|
000195b0  74 6f 72 20 61 66 74 65  72 20 65 76 65 72 79 20  |tor after every |
000195c0  62 79 74 65 20 66 69 6c  6c 65 64 29 2e 20 54 68  |byte filled). Th|
000195d0  69 73 20 69 73 20 6f 62  74 61 69 6e 65 64 20 75  |is is obtained u|
000195e0  73 69 6e 67 20 69 6e 74  65 72 6e 61 6c 20 74 61  |sing internal ta|
000195f0  62 6c 65 73 20 67 69 76  65 6e 20 74 68 65 20 73  |bles given the s|
00019600  61 6d 70 6c 65 20 70 65  72 69 6f 64 20 28 77 6f  |ample period (wo|
00019610  72 64 20 37 29 0a 38 09  54 68 65 20 73 61 6d 70  |rd 7).8.The samp|
00019620  6c 65 20 6c 6f 6f 70 20  6f 66 66 73 65 74 20 28  |le loop offset (|
00019630  67 69 76 65 6e 20 69 6e  20 62 79 74 65 73 29 2e  |given in bytes).|
00019640  20 57 68 65 6e 20 74 68  65 20 72 6f 75 74 69 6e  | When the routin|
00019650  65 20 72 65 61 63 68 65  73 20 74 68 65 20 65 6e  |e reaches the en|
00019660  64 20 6f 66 20 61 20 73  61 6d 70 6c 65 20 6f 72  |d of a sample or|
00019670  20 74 68 65 20 73 61 6d  70 6c 65 20 6c 65 6e 67  | the sample leng|
00019680  74 68 2c 20 74 68 65 20  61 63 63 75 6d 75 6c 2d  |th, the accumul-|
00019690  20 61 74 6f 72 20 69 73  20 6c 6f 61 64 65 64 20  | ator is loaded |
000196a0  77 69 74 68 20 74 68 69  73 20 76 61 6c 75 65 20  |with this value |
000196b0  73 68 69 66 74 65 64 20  6c 65 66 74 20 31 36 20  |shifted left 16 |
000196c0  62 69 74 73 20 28 69 65  2e 20 74 6f 20 67 69 76  |bits (ie. to giv|
000196d0  65 20 61 20 62 79 74 65  20 6f 66 66 73 65 74 29  |e a byte offset)|
000196e0  2e 20 49 66 20 74 68 69  73 20 69 73 20 61 20 7a  |. If this is a z|
000196f0  65 72 6f 20 76 61 6c 75  65 2c 20 74 68 65 20 73  |ero value, the s|
00019700  61 6d 70 6c 65 20 77 69  6c 6c 20 73 74 6f 70 20  |ample will stop |
00019710  69 6e 73 74 65 61 64 20  6f 66 20 6c 6f 6f 70 69  |instead of loopi|
00019720  6e 67 2e 0a 31 32 09 54  68 65 20 73 61 6d 70 6c  |ng..12.The sampl|
00019730  65 20 6c 65 6e 67 74 68  20 2f 20 72 65 70 65 61  |e length / repea|
00019740  74 20 6c 65 6e 67 74 68  20 28 69 6e 20 62 79 74  |t length (in byt|
00019750  65 73 29 2e 20 54 68 65  20 72 6f 75 74 69 6e 65  |es). The routine|
00019760  20 63 68 65 63 6b 73 20  65 76 65 72 79 20 34 20  | checks every 4 |
00019770  62 79 74 65 73 20 66 69  6c 6c 65 64 20 74 6f 20  |bytes filled to |
00019780  73 65 65 20 69 66 20 74  68 65 20 63 75 72 72 65  |see if the curre|
00019790  6e 74 20 61 63 63 75 6d  75 6c 61 74 6f 72 20 65  |nt accumulator e|
000197a0  78 63 65 65 64 73 20 74  68 69 73 20 76 61 6c 75  |xceeds this valu|
000197b0  65 20 77 68 65 6e 20 73  68 69 66 74 65 64 20 72  |e when shifted r|
000197c0  69 67 68 74 20 31 36 20  62 69 74 73 2e 20 28 53  |ight 16 bits. (S|
000197d0  65 65 20 61 62 6f 76 65  29 0a 31 36 09 54 68 65  |ee above).16.The|
000197e0  20 73 61 6d 70 6c 65 20  6e 75 6d 62 65 72 20 28  | sample number (|
000197f0  31 2d 33 36 29 2e 0a 32  30 09 54 68 65 20 63 75  |1-36)..20.The cu|
00019800  72 72 65 6e 74 20 76 6f  6c 75 6d 65 20 28 30 2d  |rrent volume (0-|
00019810  32 35 35 29 2e 20 54 68  69 73 20 76 61 6c 75 65  |255). This value|
00019820  20 69 73 20 73 75 62 74  72 61 63 74 65 64 20 66  | is subtracted f|
00019830  72 6f 6d 20 65 76 65 72  79 20 62 79 74 65 20 66  |rom every byte f|
00019840  69 6c 6c 65 64 2c 20 74  68 65 72 65 66 6f 72 65  |illed, therefore|
00019850  20 30 20 3d 20 6d 61 78  69 6d 75 6d 20 76 6f 6c  | 0 = maximum vol|
00019860  75 6d 65 20 61 6e 64 20  32 35 35 20 3d 20 73 69  |ume and 255 = si|
00019870  6c 65 6e 74 2e 20 4e 42  20 54 68 69 73 20 69 73  |lent. NB This is|
00019880  20 74 68 65 20 72 65 76  65 72 73 65 20 6f 66 20  | the reverse of |
00019890  74 68 65 20 6e 6f 72 6d  61 6c 20 76 6f 6c 75 6d  |the normal volum|
000198a0  65 20 63 6f 6d 6d 61 6e  64 2e 0a 32 34 09 54 68  |e command..24.Th|
000198b0  69 73 20 69 73 20 74 68  65 20 74 72 61 63 6b 65  |is is the tracke|
000198c0  72 20 66 6f 72 6d 61 74  20 6e 6f 74 65 20 6e 75  |r format note nu|
000198d0  6d 62 65 72 20 6f 66 20  74 68 65 20 73 61 6d 70  |mber of the samp|
000198e0  6c 65 20 62 65 69 6e 67  20 70 6c 61 79 65 64 20  |le being played |
000198f0  28 31 2d 33 36 2c 20 31  3d 43 20 6f 63 74 61 76  |(1-36, 1=C octav|
00019900  65 20 31 20 33 36 3d 42  20 6f 63 74 61 76 65 20  |e 1 36=B octave |
00019910  33 29 2e 20 54 68 65 20  61 72 70 65 67 67 69 6f  |3). The arpeggio|
00019920  20 63 6f 6d 6d 61 6e 64  20 6d 61 6b 65 73 20 75  | command makes u|
00019930  73 65 20 6f 66 20 74 68  69 73 20 77 6f 72 64 2e  |se of this word.|
00019940  20 49 66 20 74 68 69 73  20 77 6f 72 64 20 69 73  | If this word is|
00019950  20 7a 65 72 6f 2c 20 6e  6f 20 73 6f 75 6e 64 20  | zero, no sound |
00019960  77 69 6c 6c 20 62 65 20  70 6c 61 79 65 64 2e 0a  |will be played..|
00019970  32 38 09 54 68 69 73 20  69 73 20 61 20 63 6f 70  |28.This is a cop|
00019980  79 20 6f 66 20 74 68 65  20 73 61 6d 70 6c 65 20  |y of the sample |
00019990  70 65 72 69 6f 64 20 28  66 72 6f 6d 20 77 68 69  |period (from whi|
000199a0  63 68 20 74 68 65 20 70  69 74 63 68 20 69 6e 63  |ch the pitch inc|
000199b0  72 65 6d 65 6e 74 20 76  61 6c 75 65 20 69 73 20  |rement value is |
000199c0  63 61 6c 63 75 6c 61 74  65 64 29 2c 20 61 6e 64  |calculated), and|
000199d0  20 69 73 20 75 73 65 64  20 62 79 20 74 68 65 20  | is used by the |
000199e0  70 6f 72 74 61 6d 65 6e  74 6f 20 63 6f 6d 6d 61  |portamento comma|
000199f0  6e 64 73 2e 20 54 68 65  20 72 61 6e 67 65 20 6f  |nds. The range o|
00019a00  66 20 74 68 65 20 73 61  6d 70 6c 65 20 70 65 72  |f the sample per|
00019a10  69 6f 64 20 69 73 20 66  72 6f 6d 20 31 20 74 6f  |iod is from 1 to|
00019a20  20 68 65 78 20 26 34 30  30 20 28 61 6c 74 68 6f  | hex &400 (altho|
00019a30  75 67 68 20 74 68 65 20  70 6f 72 74 61 6d 65 6e  |ugh the portamen|
00019a40  74 6f 20 63 6f 6d 6d 61  6e 64 73 20 68 61 76 65  |to commands have|
00019a50  20 73 6d 61 6c 6c 65 72  20 6c 69 6d 69 74 73 20  | smaller limits |
00019a60  69 6e 20 70 72 61 63 74  69 63 65 29 2e 0a 33 32  |in practice)..32|
00019a70  09 57 6f 72 64 20 30 20  6f 66 20 73 6f 75 6e 64  |.Word 0 of sound|
00019a80  20 63 68 61 6e 6e 65 6c  20 32 2e 2e 2e 0a 33 36  | channel 2....36|
00019a90  09 57 6f 72 64 20 31 20  6f 66 20 73 6f 75 6e 64  |.Word 1 of sound|
00019aa0  20 63 68 61 6e 6e 65 6c  20 32 2e 2e 2e 20 20 65  | channel 2...  e|
00019ab0  74 63 2e 20 0a 20 20 20  20 20 0a 65 74 63 20 75  |tc. .     .etc u|
00019ac0  6e 74 69 6c 20 77 6f 72  64 20 38 20 6f 66 20 73  |ntil word 8 of s|
00019ad0  6f 75 6e 64 20 63 68 61  6e 6e 65 6c 20 38 0a 00  |ound channel 8..|
00019ae0  44 49 52 24 14 01 00 00  14 01 00 00 f4 9b 01 00  |DIR$............|
00019af0  47 fd ff ff 50 16 6e 25  f6 00 00 00 13 00 00 00  |G...P.n%........|
00019b00  00 00 00 00 21 52 6f 6f  74 00 00 00 ec 9c 01 00  |....!Root.......|
00019b10  47 ff ff ff 1f ff 6d 25  05 01 00 00 13 00 00 00  |G.....m%........|
00019b20  00 00 00 00 56 61 6c 69  64 61 74 65 00 00 00 00  |....Validate....|
00019b30  f4 9d 01 00 47 ff ff ff  87 f9 6d 25 e8 00 00 00  |....G.....m%....|
00019b40  13 00 00 00 00 00 00 00  45 6e 63 72 79 70 74 00  |........Encrypt.|
00019b50  dc 9e 01 00 47 ff ff ff  84 00 6e 25 22 01 00 00  |....G.....n%"...|
00019b60  13 00 00 00 00 00 00 00  57 68 6f 49 73 00 00 00  |........WhoIs...|
00019b70  00 a0 01 00 47 fd ff ff  7e 88 6d 25 0c 01 00 00  |....G...~.m%....|
00019b80  13 00 00 00 00 00 00 00  75 73 65 72 64 61 74 61  |........userdata|
00019b90  00 00 00 00 0c a1 01 00  47 ff ff ff ec 39 6e 25  |........G....9n%|
00019ba0  56 01 00 00 13 00 00 00  00 00 00 00 53 65 74 55  |V...........SetU|
00019bb0  49 44 00 00 64 a2 01 00  47 ff ff ff 30 ec 6d 25  |ID..d...G...0.m%|
00019bc0  8d 00 00 00 13 00 00 00  00 00 00 00 52 65 61 64  |............Read|
00019bd0  55 49 44 00 f4 a2 01 00  47 ff ff ff 6e f7 6d 25  |UID.....G...n.m%|
00019be0  63 00 00 00 13 00 00 00  00 00 00 00 52 65 61 64  |c...........Read|
00019bf0  50 49 44 00 44 41 54 41  f6 00 00 00 55 73 65 72  |PID.DATA....User|
00019c00  73 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |s.#Parent !Root.|
00019c10  23 50 72 65 66 69 78 20  55 73 65 72 73 5f 0a 23  |#Prefix Users_.#|
00019c20  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 33 0a  |Table Columns 3.|
00019c30  3c 56 61 6c 69 64 61 74  65 3e 0a 3c 57 68 6f 49  |<Validate>.<WhoI|
00019c40  73 3e 0a 3c 45 6e 63 72  79 70 74 3e 0a 3c 53 65  |s>.<Encrypt>.<Se|
00019c50  74 55 49 44 3e 0a 3c 52  65 61 64 55 49 44 3e 0a  |tUID>.<ReadUID>.|
00019c60  3c 52 65 61 64 50 49 44  3e 0a 23 45 6e 64 54 61  |<ReadPID>.#EndTa|
00019c70  62 6c 65 0a 0a 54 68 69  73 20 6d 6f 64 75 6c 65  |ble..This module|
00019c80  20 69 73 20 63 75 72 72  65 6e 74 6c 79 20 75 6e  | is currently un|
00019c90  64 65 72 20 64 65 76 65  6c 6f 70 6d 65 6e 74 2e  |der development.|
00019ca0  0a 49 74 20 70 72 6f 76  69 64 65 73 20 76 61 72  |.It provides var|
00019cb0  69 6f 75 73 20 63 61 6c  6c 73 20 74 6f 20 61 6c  |ious calls to al|
00019cc0  6c 6f 77 20 61 20 6d 75  6c 74 69 2d 75 73 65 72  |low a multi-user|
00019cd0  20 73 79 73 74 65 6d 20  6f 6e 20 74 6f 70 20 6f  | system on top o|
00019ce0  66 20 52 69 73 63 4f 53  2e 0a 00 00 44 41 54 41  |f RiscOS....DATA|
00019cf0  05 01 00 00 55 73 65 72  73 5f 56 61 6c 69 64 61  |....Users_Valida|
00019d00  74 65 0a 23 50 61 72 65  6e 74 20 55 73 65 72 73  |te.#Parent Users|
00019d10  5f 0a 3d 3e 09 52 30 20  3d 09 70 6f 69 6e 74 65  |_.=>.R0 =.pointe|
00019d20  72 20 74 6f 20 6c 6f 67  69 6e 20 6e 61 6d 65 0a  |r to login name.|
00019d30  09 52 31 20 3d 09 62 6c  6f 63 6b 20 74 6f 20 68  |.R1 =.block to h|
00019d40  6f 6c 64 20 3c 75 73 65  72 20 64 61 74 61 3d 3e  |old <user data=>|
00019d50  75 73 65 72 73 5f 75 73  65 72 64 61 74 61 3e 20  |users_userdata> |
00019d60  28 31 30 32 34 20 62 79  74 65 73 20 72 65 63 6f  |(1024 bytes reco|
00019d70  6d 6d 65 6e 64 65 64 29  0a 3c 3d 09 62 6c 6f 63  |mmended).<=.bloc|
00019d80  6b 20 61 74 20 52 31 20  75 70 64 61 74 65 64 2c  |k at R1 updated,|
00019d90  20 6f 72 20 65 72 72 6f  72 20 69 66 20 6e 6f 74  | or error if not|
00019da0  20 6b 6e 6f 77 6e 0a 0a  54 68 69 73 20 53 57 49  | known..This SWI|
00019db0  20 69 73 20 75 73 65 64  20 74 6f 20 72 65 61 64  | is used to read|
00019dc0  20 74 68 65 20 70 61 73  73 77 6f 72 64 20 64 61  | the password da|
00019dd0  74 61 62 61 73 65 20 69  6e 20 7b 2f 7d 55 6e 69  |tabase in {/}Uni|
00019de0  78 3a 65 74 63 2e 70 61  73 73 77 64 7b 2f 7d 2e  |x:etc.passwd{/}.|
00019df0  0a 00 00 00 44 41 54 41  e8 00 00 00 55 73 65 72  |....DATA....User|
00019e00  73 5f 45 6e 63 72 79 70  74 0a 23 50 61 72 65 6e  |s_Encrypt.#Paren|
00019e10  74 20 55 73 65 72 73 5f  0a 3d 3e 09 52 30 20 3d  |t Users_.=>.R0 =|
00019e20  09 70 6f 69 6e 74 65 72  20 74 6f 20 63 74 72 6c  |.pointer to ctrl|
00019e30  20 74 65 72 6d 69 6e 61  74 65 64 20 73 74 72 69  | terminated stri|
00019e40  6e 67 0a 3c 3d 09 73 74  72 69 6e 67 20 61 74 20  |ng.<=.string at |
00019e50  52 30 20 75 70 64 61 74  65 64 0a 0a 54 68 69 73  |R0 updated..This|
00019e60  20 53 57 49 20 69 73 20  75 73 65 64 20 74 6f 20  | SWI is used to |
00019e70  65 6e 63 72 79 70 74 20  61 20 70 61 73 73 77 6f  |encrypt a passwo|
00019e80  72 64 2e 20 54 68 65 20  65 6e 63 72 79 70 74 69  |rd. The encrypti|
00019e90  6f 6e 20 74 65 63 68 6e  69 71 75 65 20 69 73 20  |on technique is |
00019ea0  6e 6f 74 20 67 75 61 72  65 6e 74 65 65 64 20 73  |not guarenteed s|
00019eb0  65 63 75 72 65 20 61 6e  64 20 77 61 73 20 74 68  |ecure and was th|
00019ec0  72 6f 77 6e 20 74 6f 67  65 74 68 65 72 20 76 65  |rown together ve|
00019ed0  72 79 20 71 75 69 63 6b  6c 79 2e 0a 44 41 54 41  |ry quickly..DATA|
00019ee0  22 01 00 00 55 73 65 72  73 5f 57 68 6f 49 73 0a  |"...Users_WhoIs.|
00019ef0  23 50 61 72 65 6e 74 20  55 73 65 72 73 5f 0a 3d  |#Parent Users_.=|
00019f00  3e 09 52 30 20 3d 09 75  69 64 20 6e 75 6d 62 65  |>.R0 =.uid numbe|
00019f10  72 0a 09 52 31 20 3d 09  62 6c 6f 63 6b 20 74 6f  |r..R1 =.block to|
00019f20  20 68 6f 6c 64 20 3c 75  73 65 72 20 64 61 74 61  | hold <user data|
00019f30  3d 3e 75 73 65 72 73 5f  75 73 65 72 64 61 74 61  |=>users_userdata|
00019f40  3e 20 28 31 30 32 34 20  62 79 74 65 73 20 72 65  |> (1024 bytes re|
00019f50  63 6f 6d 6d 65 6e 64 65  64 29 0a 3c 3d 09 62 6c  |commended).<=.bl|
00019f60  6f 63 6b 20 61 74 20 52  31 20 75 70 64 61 74 65  |ock at R1 update|
00019f70  64 2c 20 6f 72 20 65 72  72 6f 72 20 69 66 20 6e  |d, or error if n|
00019f80  6f 74 20 6b 6e 6f 77 6e  0a 0a 54 68 69 73 20 53  |ot known..This S|
00019f90  57 49 20 69 73 20 75 73  65 64 20 74 6f 20 72 65  |WI is used to re|
00019fa0  61 64 20 74 68 65 20 70  61 73 73 77 6f 72 64 20  |ad the password |
00019fb0  64 61 74 61 62 61 73 65  20 69 6e 20 7b 2f 7d 55  |database in {/}U|
00019fc0  6e 69 78 3a 65 74 63 2e  70 61 73 73 77 64 7b 2f  |nix:etc.passwd{/|
00019fd0  7d 20 74 6f 20 63 6f 6e  76 65 72 74 20 61 20 75  |} to convert a u|
00019fe0  69 64 20 6e 75 6d 62 65  72 20 74 6f 20 61 20 62  |id number to a b|
00019ff0  6c 6f 63 6b 20 6f 66 20  64 61 74 61 2e 0a 00 00  |lock of data....|
0001a000  44 41 54 41 0c 01 00 00  55 73 65 72 20 64 61 74  |DATA....User dat|
0001a010  61 20 62 6c 6f 63 6b 0a  4f 66 66 73 65 74 09 43  |a block.Offset.C|
0001a020  6f 6e 74 65 6e 74 73 0a  23 4c 69 6e 65 0a 26 30  |ontents.#Line.&0|
0001a030  09 75 73 65 72 20 69 64  20 28 75 69 64 29 0a 26  |.user id (uid).&|
0001a040  34 09 67 72 6f 75 70 20  69 64 20 28 67 69 64 29  |4.group id (gid)|
0001a050  0a 26 38 09 70 6f 69 6e  74 65 72 20 74 6f 20 73  |.&8.pointer to s|
0001a060  68 65 6c 6c 20 6e 61 6d  65 0a 26 43 09 70 6f 69  |hell name.&C.poi|
0001a070  6e 74 65 72 20 74 6f 20  3c 65 6e 63 72 79 70 74  |nter to <encrypt|
0001a080  65 64 3d 3e 55 73 65 72  73 5f 45 6e 63 72 79 70  |ed=>Users_Encryp|
0001a090  74 3e 20 70 61 73 73 77  6f 72 64 0a 26 31 30 09  |t> password.&10.|
0001a0a0  70 6f 69 6e 74 65 72 20  74 6f 20 6c 6f 67 69 6e  |pointer to login|
0001a0b0  20 6e 61 6d 65 0a 26 31  34 09 70 6f 69 6e 74 65  | name.&14.pointe|
0001a0c0  72 20 74 6f 20 75 73 65  72 20 6e 61 6d 65 0a 26  |r to user name.&|
0001a0d0  31 38 09 70 6f 69 6e 74  65 72 20 74 6f 20 68 6f  |18.pointer to ho|
0001a0e0  6d 65 20 64 69 72 65 63  74 6f 72 79 20 28 61 73  |me directory (as|
0001a0f0  74 65 72 69 73 6b 20 74  72 61 6e 73 6c 61 74 65  |terisk translate|
0001a100  64 20 74 6f 20 63 6f 6c  6f 6e 29 0a 44 41 54 41  |d to colon).DATA|
0001a110  56 01 00 00 55 73 65 72  73 5f 53 65 74 55 49 44  |V...Users_SetUID|
0001a120  0a 23 50 61 72 65 6e 74  20 55 73 65 72 73 5f 0a  |.#Parent Users_.|
0001a130  3d 3e 09 52 30 20 3d 09  75 69 64 20 6e 75 6d 62  |=>.R0 =.uid numb|
0001a140  65 72 0a 09 52 31 20 3d  09 70 6f 69 6e 74 65 72  |er..R1 =.pointer|
0001a150  20 74 6f 20 70 61 73 73  77 6f 72 64 2c 20 6f 72  | to password, or|
0001a160  20 30 20 74 6f 20 69 67  6e 6f 72 65 20 70 61 73  | 0 to ignore pas|
0001a170  73 77 6f 72 64 0a 0a 54  68 69 73 20 53 57 49 20  |sword..This SWI |
0001a180  69 73 20 75 73 65 64 20  74 6f 20 73 65 74 20 74  |is used to set t|
0001a190  68 65 20 63 75 72 72 65  6e 74 20 70 72 6f 63 65  |he current proce|
0001a1a0  73 73 27 20 75 69 64 2e  20 49 66 20 74 68 65 20  |ss' uid. If the |
0001a1b0  70 61 73 73 77 6f 72 64  20 69 73 20 69 6e 63 6f  |password is inco|
0001a1c0  72 72 65 63 74 2c 20 6f  72 20 74 68 65 20 75 73  |rrect, or the us|
0001a1d0  65 72 20 69 73 20 6e 6f  74 20 72 6f 6f 74 20 74  |er is not root t|
0001a1e0  68 65 6e 20 74 68 69 73  20 63 61 6c 6c 20 77 69  |hen this call wi|
0001a1f0  6c 6c 20 63 61 75 73 65  20 61 6e 20 65 72 72 6f  |ll cause an erro|
0001a200  72 2c 20 6c 65 61 76 69  6e 67 20 74 68 65 20 75  |r, leaving the u|
0001a210  73 65 72 20 69 6e 20 74  68 65 20 70 72 65 76 69  |ser in the previ|
0001a220  6f 75 73 20 75 69 64 2e  20 54 68 65 20 7b 66 43  |ous uid. The {fC|
0001a230  6f 64 65 7d 73 75 7b 66  7d 20 63 6f 6d 6d 61 6e  |ode}su{f} comman|
0001a240  64 20 75 73 65 73 20 74  68 69 73 20 63 61 6c 6c  |d uses this call|
0001a250  20 74 6f 20 63 68 61 6e  67 65 20 75 69 64 27 73  | to change uid's|
0001a260  2e 0a 00 00 44 41 54 41  8d 00 00 00 55 73 65 72  |....DATA....User|
0001a270  73 5f 52 65 61 64 55 49  44 0a 23 50 61 72 65 6e  |s_ReadUID.#Paren|
0001a280  74 20 55 73 65 72 73 5f  0a 3c 3d 09 52 30 20 3d  |t Users_.<=.R0 =|
0001a290  09 75 69 64 20 6e 75 6d  62 65 72 0a 09 52 31 20  |.uid number..R1 |
0001a2a0  3d 09 63 75 72 72 65 6e  74 20 67 69 64 20 6e 75  |=.current gid nu|
0001a2b0  6d 62 65 72 0a 0a 54 68  69 73 20 53 57 49 20 69  |mber..This SWI i|
0001a2c0  73 20 75 73 65 64 20 74  6f 20 72 65 61 64 20 74  |s used to read t|
0001a2d0  68 65 20 63 75 72 72 65  6e 74 20 70 72 6f 63 65  |he current proce|
0001a2e0  73 73 27 20 75 69 64 20  61 6e 64 20 67 69 64 2e  |ss' uid and gid.|
0001a2f0  0a 00 00 00 44 41 54 41  63 00 00 00 55 73 65 72  |....DATAc...User|
0001a300  73 5f 52 65 61 64 50 49  44 0a 23 50 61 72 65 6e  |s_ReadPID.#Paren|
0001a310  74 20 55 73 65 72 73 5f  0a 3c 3d 09 52 30 20 3d  |t Users_.<=.R0 =|
0001a320  09 70 69 64 20 6e 75 6d  62 65 72 0a 0a 54 68 69  |.pid number..Thi|
0001a330  73 20 53 57 49 20 69 73  20 75 73 65 64 20 74 6f  |s SWI is used to|
0001a340  20 72 65 61 64 20 74 68  65 20 63 75 72 72 65 6e  | read the curren|
0001a350  74 20 70 69 64 2e 0a 00  44 49 52 24 2c 00 00 00  |t pid...DIR$,...|
0001a360  2c 00 00 00 84 a3 01 00  46 fd ff ff 4b f4 dc 14  |,.......F...K...|
0001a370  40 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |@...........!Roo|
0001a380  74 00 00 00 44 41 54 41  40 00 00 00 56 50 72 6f  |t...DATA@...VPro|
0001a390  74 65 63 74 0a 23 50 61  72 65 6e 74 20 21 52 6f  |tect.#Parent !Ro|
0001a3a0  6f 74 0a 23 50 72 65 66  69 78 20 56 50 72 6f 74  |ot.#Prefix VProt|
0001a3b0  65 63 74 5f 0a 46 49 0a  4f 46 0a 4c 55 0a 4d 4d  |ect_.FI.OF.LU.MM|
0001a3c0  0a 43 46 0a 44 49 52 24  2c 00 00 00 2c 00 00 00  |.CF.DIR$,...,...|
0001a3d0  f0 a3 01 00 47 fd ff ff  de 6e 7d 82 57 00 00 00  |....G....n}.W...|
0001a3e0  03 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
0001a3f0  44 41 54 41 57 00 00 00  57 69 6d 70 48 61 63 6b  |DATAW...WimpHack|
0001a400  0a 23 50 61 72 65 6e 74  20 21 52 6f 6f 74 0a 23  |.#Parent !Root.#|
0001a410  50 72 65 66 69 78 20 57  69 6d 70 48 61 63 6b 5f  |Prefix WimpHack_|
0001a420  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
0001a430  32 0a 52 65 73 69 7a 65  49 63 6f 6e 0a 23 45 6e  |2.ResizeIcon.#En|
0001a440  64 54 61 62 6c 65 0a 00  44 49 52 24 2c 00 00 00  |dTable..DIR$,...|
0001a450  2c 00 00 00 74 a4 01 00  46 fd ff ff 28 f7 71 18  |,...t...F...(.q.|
0001a460  64 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |d...........!Roo|
0001a470  74 00 00 00 44 41 54 41  64 00 00 00 57 69 6d 70  |t...DATAd...Wimp|
0001a480  4b 65 79 0a 23 50 61 72  65 6e 74 20 21 52 6f 6f  |Key.#Parent !Roo|
0001a490  74 0a 23 50 72 65 66 69  78 20 57 69 6d 70 4b 65  |t.#Prefix WimpKe|
0001a4a0  79 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |y_.#Table Column|
0001a4b0  73 20 31 0a 43 6f 64 65  54 6f 53 74 72 69 6e 67  |s 1.CodeToString|
0001a4c0  0a 53 74 72 69 6e 67 54  6f 43 6f 64 65 0a 23 45  |.StringToCode.#E|
0001a4d0  6e 64 54 61 62 6c 65 0a  44 49 52 24 2c 00 00 00  |ndTable.DIR$,...|
0001a4e0  2c 00 00 00 04 a5 01 00  46 fd ff ff 05 4d c7 13  |,.......F....M..|
0001a4f0  62 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |b...........!Roo|
0001a500  74 00 00 00 44 41 54 41  62 00 00 00 41 42 43 4c  |t...DATAb...ABCL|
0001a510  69 62 0a 23 50 61 72 65  6e 74 20 21 52 6f 6f 74  |ib.#Parent !Root|
0001a520  0a 23 50 72 65 66 69 78  20 41 42 43 4c 69 62 5f  |.#Prefix ABCLib_|
0001a530  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
0001a540  32 0a 49 6e 69 74 0a 52  65 67 69 73 74 65 72 0a  |2.Init.Register.|
0001a550  50 72 6f 66 69 6c 65 0a  57 41 43 0a 23 45 6e 64  |Profile.WAC.#End|
0001a560  54 61 62 6c 65 0a 00 00  44 49 52 24 10 01 00 00  |Table...DIR$....|
0001a570  10 01 00 00 78 a6 01 00  46 fd ff ff 28 e5 87 4d  |....x...F...(..M|
0001a580  8c 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
0001a590  74 00 00 00 04 a7 01 00  46 ff ff ff 00 bb 98 a5  |t.......F.......|
0001a5a0  a2 01 00 00 13 00 00 00  00 00 00 00 4d 65 6e 75  |............Menu|
0001a5b0  00 00 00 00 a8 a8 01 00  46 ff ff ff e2 f3 86 4d  |........F......M|
0001a5c0  1e 00 00 00 13 00 00 00  00 00 00 00 45 6e 64 4d  |............EndM|
0001a5d0  65 6e 75 00 c8 a8 01 00  46 ff ff ff 01 ff 86 4d  |enu.....F......M|
0001a5e0  1e 00 00 00 13 00 00 00  00 00 00 00 4f 70 74 69  |............Opti|
0001a5f0  6f 6e 00 00 e8 a8 01 00  46 ff ff ff 16 04 87 4d  |on......F......M|
0001a600  1e 00 00 00 13 00 00 00  00 00 00 00 44 61 73 68  |............Dash|
0001a610  00 00 00 00 08 a9 01 00  46 ff ff ff 6d 05 87 4d  |........F...m..M|
0001a620  1e 00 00 00 13 00 00 00  00 00 00 00 43 6f 6d 6d  |............Comm|
0001a630  61 6e 64 00 28 a9 01 00  46 ff ff ff 70 5f 87 4d  |and.(...F...p_.M|
0001a640  64 01 00 00 13 00 00 00  00 00 00 00 45 6e 75 6d  |d...........Enum|
0001a650  65 72 61 74 65 00 00 00  8c aa 01 00 46 ff ff ff  |erate.......F...|
0001a660  30 80 87 4d 9c 01 00 00  13 00 00 00 00 00 00 00  |0..M............|
0001a670  4d 65 6d 6f 72 79 00 00  44 41 54 41 8c 00 00 00  |Memory..DATA....|
0001a680  44 69 72 65 63 74 6f 72  0a 23 50 61 72 65 6e 74  |Director.#Parent|
0001a690  20 21 52 6f 6f 74 0a 23  50 72 65 66 69 78 20 44  | !Root.#Prefix D|
0001a6a0  69 72 65 63 74 6f 72 5f  0a 23 54 61 62 6c 65 20  |irector_.#Table |
0001a6b0  43 6f 6c 75 6d 6e 73 20  32 0a 3c 4d 65 6e 75 3e  |Columns 2.<Menu>|
0001a6c0  0a 3c 45 6e 64 4d 65 6e  75 3e 0a 3c 4f 70 74 69  |.<EndMenu>.<Opti|
0001a6d0  6f 6e 3e 0a 3c 44 61 73  68 3e 0a 3c 43 6f 6d 6d  |on>.<Dash>.<Comm|
0001a6e0  61 6e 64 3e 0a 3c 45 6e  75 6d 65 72 61 74 65 3e  |and>.<Enumerate>|
0001a6f0  0a 3c 4d 65 6d 6f 72 79  3e 0a 23 45 6e 64 54 61  |.<Memory>.#EndTa|
0001a700  62 6c 65 0a 44 41 54 41  a2 01 00 00 44 69 72 65  |ble.DATA....Dire|
0001a710  63 74 6f 72 20 63 6f 6d  6d 61 6e 64 20 53 57 49  |ctor command SWI|
0001a720  20 65 71 75 69 76 69 6c  65 6e 74 73 0a 23 50 61  | equivilents.#Pa|
0001a730  72 65 6e 74 20 44 69 72  65 63 74 6f 72 5f 0a 3d  |rent Director_.=|
0001a740  3e 09 52 30 20 3d 20 70  6f 69 6e 74 65 72 20 74  |>.R0 = pointer t|
0001a750  6f 20 6c 69 6e 65 0a 0a  54 68 65 20 53 57 49 73  |o line..The SWIs|
0001a760  20 3a 0a 23 49 6e 64 65  6e 74 20 32 0a 3c 44 69  | :.#Indent 2.<Di|
0001a770  72 65 63 74 6f 72 5f 4d  65 6e 75 3e 0a 3c 44 69  |rector_Menu>.<Di|
0001a780  72 65 63 74 6f 72 5f 45  6e 64 4d 65 6e 75 3e 0a  |rector_EndMenu>.|
0001a790  3c 44 69 72 65 63 74 6f  72 5f 4f 70 74 69 6f 6e  |<Director_Option|
0001a7a0  3e 0a 3c 44 69 72 65 63  74 6f 72 5f 44 61 73 68  |>.<Director_Dash|
0001a7b0  3e 0a 3c 44 69 72 65 63  74 6f 72 5f 43 6f 6d 6d  |>.<Director_Comm|
0001a7c0  61 6e 64 3e 0a 23 49 6e  64 65 6e 74 0a 0a 61 72  |and>.#Indent..ar|
0001a7d0  65 20 64 69 72 65 63 74  6c 79 20 65 71 75 69 76  |e directly equiv|
0001a7e0  69 6c 65 6e 74 20 74 6f  20 74 68 65 69 72 20 4f  |ilent to their O|
0001a7f0  53 43 4c 49 20 63 6f 6d  6d 61 6e 64 20 63 6f 75  |SCLI command cou|
0001a800  6e 74 65 72 70 61 72 74  73 2e 0a 0a 54 68 65 73  |nterparts...Thes|
0001a810  65 20 61 72 65 20 64 65  66 69 6e 65 64 20 62 65  |e are defined be|
0001a820  63 61 75 73 65 20 70 72  6f 63 65 73 73 69 6e 67  |cause processing|
0001a830  20 73 74 61 72 20 63 6f  6d 6d 61 6e 64 73 20 69  | star commands i|
0001a840  73 20 76 65 72 79 20 73  6c 6f 77 20 61 6e 64 20  |s very slow and |
0001a850  69 6e 20 64 79 6e 61 6d  69 63 20 6d 65 6e 75 73  |in dynamic menus|
0001a860  20 65 73 70 65 63 69 61  6c 6c 79 20 69 74 20 69  | especially it i|
0001a870  73 20 69 6d 70 6f 72 74  61 6e 74 20 74 68 61 74  |s important that|
0001a880  20 69 74 65 6d 73 20 63  61 6e 20 62 65 20 61 64  | items can be ad|
0001a890  64 65 64 20 74 6f 20 6d  65 6e 75 73 20 71 75 69  |ded to menus qui|
0001a8a0  63 6b 6c 79 2e 0a 00 00  44 41 54 41 1e 00 00 00  |ckly....DATA....|
0001a8b0  23 49 6e 63 6c 75 64 65  20 44 69 72 65 63 74 6f  |#Include Directo|
0001a8c0  72 5f 4d 65 6e 75 00 00  44 41 54 41 1e 00 00 00  |r_Menu..DATA....|
0001a8d0  23 49 6e 63 6c 75 64 65  20 44 69 72 65 63 74 6f  |#Include Directo|
0001a8e0  72 5f 4d 65 6e 75 00 00  44 41 54 41 1e 00 00 00  |r_Menu..DATA....|
0001a8f0  23 49 6e 63 6c 75 64 65  20 44 69 72 65 63 74 6f  |#Include Directo|
0001a900  72 5f 4d 65 6e 75 00 00  44 41 54 41 1e 00 00 00  |r_Menu..DATA....|
0001a910  23 49 6e 63 6c 75 64 65  20 44 69 72 65 63 74 6f  |#Include Directo|
0001a920  72 5f 4d 65 6e 75 00 00  44 41 54 41 64 01 00 00  |r_Menu..DATAd...|
0001a930  44 69 72 65 63 74 6f 72  5f 45 6e 75 6d 65 72 61  |Director_Enumera|
0001a940  74 65 20 20 28 26 34 41  31 30 35 29 0a 45 6e 75  |te  (&4A105).Enu|
0001a950  6d 65 72 61 74 65 73 20  6c 69 73 74 73 20 68 65  |merates lists he|
0001a960  6c 64 20 62 79 20 64 69  72 65 63 74 6f 72 0a 0a  |ld by director..|
0001a970  3d 3e 09 52 30 20 3d 09  70 6f 69 6e 74 65 72 20  |=>.R0 =.pointer |
0001a980  74 6f 20 62 6c 6f 63 6b  20 6f 72 20 74 6f 20 73  |to block or to s|
0001a990  74 61 72 74 20 75 73 65  20 3a 0a 09 20 09 20 20  |tart use :.. .  |
0001a9a0  30 20 3d 20 73 74 6f 72  65 64 20 6d 65 6e 75 73  |0 = stored menus|
0001a9b0  0a 09 20 09 20 20 31 20  3d 20 64 69 73 70 6c 61  |.. .  1 = displa|
0001a9c0  79 65 64 20 6d 65 6e 75  73 0a 09 20 09 20 20 32  |yed menus.. .  2|
0001a9d0  20 3d 20 69 63 6f 6e 73  0a 09 20 09 20 20 33 20  | = icons.. .  3 |
0001a9e0  3d 20 66 69 6c 74 65 72  73 0a 0a 3c 3d 09 52 30  |= filters..<=.R0|
0001a9f0  20 3d 20 6e 65 77 20 70  6f 69 6e 74 65 72 20 74  | = new pointer t|
0001aa00  6f 20 62 6c 6f 63 6b 20  28 30 20 66 6f 72 20 65  |o block (0 for e|
0001aa10  6e 64 29 0a 09 52 31 20  3d 20 70 6f 69 6e 74 65  |nd)..R1 = pointe|
0001aa20  72 20 74 6f 20 6e 61 6d  65 20 6f 66 20 62 6c 6f  |r to name of blo|
0001aa30  63 6b 0a 0a 44 79 6e 61  6d 69 63 20 6d 65 6e 75  |ck..Dynamic menu|
0001aa40  73 20 74 6f 20 76 69 65  77 20 74 68 65 73 65 20  |s to view these |
0001aa50  6c 69 73 74 73 20 61 6e  64 20 61 63 74 20 6f 6e  |lists and act on|
0001aa60  20 74 68 65 6d 20 63 61  6e 20 62 65 20 66 6f 75  | them can be fou|
0001aa70  6e 64 20 6f 6e 20 44 69  72 65 63 74 6f 72 27 73  |nd on Director's|
0001aa80  20 6d 61 69 6e 20 6d 65  6e 75 2e 0a 44 41 54 41  | main menu..DATA|
0001aa90  9c 01 00 00 44 69 72 65  63 74 6f 72 5f 4d 65 6d  |....Director_Mem|
0001aaa0  6f 72 79 20 20 28 26 34  41 31 30 36 29 0a 52 65  |ory  (&4A106).Re|
0001aab0  74 75 72 6e 73 20 74 68  65 20 6d 65 6d 6f 72 79  |turns the memory|
0001aac0  20 75 73 65 64 20 62 79  20 64 69 72 65 63 74 6f  | used by directo|
0001aad0  72 0a 0a 3c 3d 09 52 30  20 3d 09 6d 6f 64 75 6c  |r..<=.R0 =.modul|
0001aae0  65 20 73 69 7a 65 20 28  63 6f 6e 73 74 61 6e 74  |e size (constant|
0001aaf0  29 0a 09 52 31 20 3d 09  6d 61 69 6e 20 77 6f 72  |)..R1 =.main wor|
0001ab00  6b 73 70 61 63 65 20 73  69 7a 65 20 28 63 6f 6e  |kspace size (con|
0001ab10  73 74 61 6e 74 29 0a 09  52 32 20 3d 09 74 6f 74  |stant)..R2 =.tot|
0001ab20  61 6c 20 73 69 7a 65 20  6f 66 20 61 6c 6c 20 61  |al size of all a|
0001ab30  6c 6c 6f 63 61 74 65 64  20 62 6c 6f 63 6b 73 0a  |llocated blocks.|
0001ab40  09 52 33 20 3d 09 6e 75  6d 62 65 72 20 6f 66 20  |.R3 =.number of |
0001ab50  62 6c 6f 63 6b 73 20 61  6c 6c 6f 63 61 74 65 64  |blocks allocated|
0001ab60  0a 09 52 34 20 3d 09 64  79 6e 61 6d 69 63 20 61  |..R4 =.dynamic a|
0001ab70  72 65 61 20 73 69 7a 65  20 28 30 20 66 6f 72 20  |rea size (0 for |
0001ab80  6e 6f 20 64 79 6e 61 6d  69 63 20 61 72 65 61 29  |no dynamic area)|
0001ab90  0a 09 52 35 20 3d 09 62  79 74 65 73 20 66 72 65  |..R5 =.bytes fre|
0001aba0  65 20 69 6e 20 64 79 6e  61 6d 69 63 20 61 72 65  |e in dynamic are|
0001abb0  61 0a 09 52 36 20 3d 09  6c 61 72 67 65 73 74 20  |a..R6 =.largest |
0001abc0  62 6c 6f 63 6b 20 69 6e  20 64 79 6e 61 6d 69 63  |block in dynamic|
0001abd0  20 61 72 65 61 0a 0a 41  20 64 79 6e 61 6d 69 63  | area..A dynamic|
0001abe0  20 6d 65 6e 75 20 74 6f  20 64 69 73 70 6c 61 79  | menu to display|
0001abf0  20 74 68 69 73 20 69 6e  66 6f 72 6d 61 74 69 6f  | this informatio|
0001ac00  6e 20 63 61 6e 20 62 65  20 66 6f 75 6e 64 20 6f  |n can be found o|
0001ac10  6e 20 44 69 72 65 63 74  6f 72 27 73 20 6d 61 69  |n Director's mai|
0001ac20  6e 20 6d 65 6e 75 2e 0a  44 49 52 24 2c 00 00 00  |n menu..DIR$,...|
0001ac30  2c 00 00 00 54 ac 01 00  47 fd ff ff 19 0f 84 82  |,...T...G.......|
0001ac40  67 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |g...........!Roo|
0001ac50  74 00 00 00 44 41 54 41  67 00 00 00 45 61 73 79  |t...DATAg...Easy|
0001ac60  46 53 0a 23 50 61 72 65  6e 74 20 21 52 6f 6f 74  |FS.#Parent !Root|
0001ac70  0a 23 50 72 65 66 69 78  20 45 61 73 79 46 53 5f  |.#Prefix EasyFS_|
0001ac80  0a 23 54 61 62 6c 65 20  43 6f 6c 75 6d 6e 73 20  |.#Table Columns |
0001ac90  32 0a 4c 6f 63 6b 65 72  4f 70 0a 53 65 74 46 6f  |2.LockerOp.SetFo|
0001aca0  6e 74 73 0a 4d 65 73 73  61 67 65 53 74 61 74 65  |nts.MessageState|
0001acb0  0a 23 45 6e 64 54 61 62  6c 65 0a 00 44 49 52 24  |.#EndTable..DIR$|
0001acc0  2c 00 00 00 2c 00 00 00  e8 ac 01 00 46 fd ff ff  |,...,.......F...|
0001acd0  39 ed dc 14 3b 00 00 00  13 00 00 00 00 00 00 00  |9...;...........|
0001ace0  21 52 6f 6f 74 00 00 00  44 41 54 41 3b 00 00 00  |!Root...DATA;...|
0001acf0  48 65 6c 69 78 42 61 73  69 63 0a 23 50 61 72 65  |HelixBasic.#Pare|
0001ad00  6e 74 20 21 52 6f 6f 74  0a 23 50 72 65 66 69 78  |nt !Root.#Prefix|
0001ad10  20 48 65 6c 69 78 42 61  73 69 63 5f 0a 53 65 74  | HelixBasic_.Set|
0001ad20  75 70 0a 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |up..DIR$,...,...|
0001ad30  50 ad 01 00 46 fd ff ff  19 66 ee 13 16 01 00 00  |P...F....f......|
0001ad40  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
0001ad50  44 41 54 41 16 01 00 00  4c 61 72 67 65 72 53 75  |DATA....LargerSu|
0001ad60  70 70 6f 72 74 0a 23 50  61 72 65 6e 74 20 21 52  |pport.#Parent !R|
0001ad70  6f 6f 74 0a 23 50 72 65  66 69 78 20 4c 61 72 67  |oot.#Prefix Larg|
0001ad80  65 72 53 75 70 70 6f 72  74 5f 0a 23 54 61 62 6c  |erSupport_.#Tabl|
0001ad90  65 20 43 6f 6c 75 6d 6e  73 20 32 0a 57 72 69 74  |e Columns 2.Writ|
0001ada0  65 53 68 69 66 74 0a 52  65 61 64 46 61 73 74 4d  |eShift.ReadFastM|
0001adb0  6f 76 65 0a 45 6e 61 62  6c 65 46 69 6c 74 65 72  |ove.EnableFilter|
0001adc0  0a 44 69 73 61 62 6c 65  46 69 6c 74 65 72 0a 52  |.DisableFilter.R|
0001add0  65 61 64 57 69 6e 64 6f  77 73 4f 70 65 6e 65 64  |eadWindowsOpened|
0001ade0  0a 52 65 61 64 50 6f 6c  6c 57 6f 72 64 41 64 64  |.ReadPollWordAdd|
0001adf0  72 65 73 73 0a 52 65 6f  72 67 61 6e 69 73 65 0a  |ress.Reorganise.|
0001ae00  46 69 6e 64 4c 65 66 74  0a 46 69 6e 64 52 69 67  |FindLeft.FindRig|
0001ae10  68 74 0a 46 69 6e 64 55  70 0a 46 69 6e 64 44 6f  |ht.FindUp.FindDo|
0001ae20  77 6e 0a 46 69 6e 64 4e  6f 6e 65 0a 43 6f 70 79  |wn.FindNone.Copy|
0001ae30  53 70 72 69 74 65 0a 52  65 61 64 42 61 63 6b 64  |Sprite.ReadBackd|
0001ae40  72 6f 70 43 6f 6d 6d 61  6e 64 54 61 69 6c 0a 52  |ropCommandTail.R|
0001ae50  65 61 64 52 65 67 69 73  74 65 72 0a 23 45 6e 64  |eadRegister.#End|
0001ae60  54 61 62 6c 65 0a 00 00  44 49 52 24 2c 00 00 00  |Table...DIR$,...|
0001ae70  2c 00 00 00 94 ae 01 00  47 fd ff ff 8e 10 84 82  |,.......G.......|
0001ae80  ad 00 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |............!Roo|
0001ae90  74 00 00 00 44 41 54 41  ad 00 00 00 50 43 44 65  |t...DATA....PCDe|
0001aea0  76 48 65 6c 70 0a 23 50  61 72 65 6e 74 20 21 52  |vHelp.#Parent !R|
0001aeb0  6f 6f 74 0a 23 50 72 65  66 69 78 20 50 43 44 65  |oot.#Prefix PCDe|
0001aec0  76 48 65 6c 70 5f 0a 23  54 61 62 6c 65 20 43 6f  |vHelp_.#Table Co|
0001aed0  6c 75 6d 6e 73 20 32 0a  49 6e 69 74 0a 52 65 67  |lumns 2.Init.Reg|
0001aee0  69 73 74 65 72 49 4f 0a  52 65 67 69 73 74 65 72  |isterIO.Register|
0001aef0  4d 65 6d 0a 52 65 67 69  73 74 65 72 44 4d 41 0a  |Mem.RegisterDMA.|
0001af00  52 65 67 69 73 74 65 72  45 76 65 6e 74 0a 52 65  |RegisterEvent.Re|
0001af10  67 69 73 74 65 72 43 6f  6e 66 69 67 0a 52 65 67  |gisterConfig.Reg|
0001af20  69 73 74 65 72 48 50 43  0a 47 65 74 53 74 72 75  |isterHPC.GetStru|
0001af30  63 74 41 64 64 72 0a 23  45 6e 64 54 61 62 6c 65  |ctAddr.#EndTable|
0001af40  0a 00 00 00 44 49 52 24  2c 00 00 00 2c 00 00 00  |....DIR$,...,...|
0001af50  70 af 01 00 47 fd ff ff  e3 0e 84 82 ca 00 00 00  |p...G...........|
0001af60  13 00 00 00 00 00 00 00  21 52 6f 6f 74 00 00 00  |........!Root...|
0001af70  44 41 54 41 ca 00 00 00  50 43 49 4f 0a 23 50 61  |DATA....PCIO.#Pa|
0001af80  72 65 6e 74 20 21 52 6f  6f 74 0a 23 50 72 65 66  |rent !Root.#Pref|
0001af90  69 78 20 50 43 49 4f 5f  0a 23 54 61 62 6c 65 20  |ix PCIO_.#Table |
0001afa0  43 6f 6c 75 6d 6e 73 20  32 0a 4c 50 54 49 6e 69  |Columns 2.LPTIni|
0001afb0  74 0a 4c 50 54 53 65 74  43 61 6c 6c 62 61 63 6b  |t.LPTSetCallback|
0001afc0  0a 43 4f 4d 49 6e 69 74  0a 43 4f 4d 53 65 74 43  |.COMInit.COMSetC|
0001afd0  61 6c 6c 62 61 63 6b 0a  43 4f 4d 53 65 74 52 61  |allback.COMSetRa|
0001afe0  74 65 0a 43 4f 4d 53 65  74 42 79 74 65 46 6f 72  |te.COMSetByteFor|
0001aff0  6d 61 74 0a 43 4f 4d 53  65 74 4d 6f 64 65 6d 0a  |mat.COMSetModem.|
0001b000  43 4f 4d 54 72 61 6e 73  6d 69 74 0a 43 4f 4d 47  |COMTransmit.COMG|
0001b010  65 74 53 74 61 74 75 73  0a 43 4f 4d 52 65 63 65  |etStatus.COMRece|
0001b020  69 76 65 0a 4c 50 54 52  65 61 64 50 6f 72 74 0a  |ive.LPTReadPort.|
0001b030  23 45 6e 64 54 61 62 6c  65 0a 00 00 44 49 52 24  |#EndTable...DIR$|
0001b040  2c 00 00 00 2c 00 00 00  68 b0 01 00 47 fd ff ff  |,...,...h...G...|
0001b050  9a 0f 84 82 68 00 00 00  13 00 00 00 00 00 00 00  |....h...........|
0001b060  21 52 6f 6f 74 00 00 00  44 41 54 41 68 00 00 00  |!Root...DATAh...|
0001b070  50 43 4d 65 6d 0a 23 50  61 72 65 6e 74 20 21 52  |PCMem.#Parent !R|
0001b080  6f 6f 74 0a 23 50 72 65  66 69 78 20 50 43 4d 65  |oot.#Prefix PCMe|
0001b090  6d 5f 0a 23 54 61 62 6c  65 20 43 6f 6c 75 6d 6e  |m_.#Table Column|
0001b0a0  73 20 32 0a 53 65 74 4d  65 6d 0a 46 69 6c 6c 50  |s 2.SetMem.FillP|
0001b0b0  54 45 0a 47 65 74 4d 65  6d 54 62 6c 0a 53 68 6f  |TE.GetMemTbl.Sho|
0001b0c0  77 49 6e 66 6f 0a 23 45  6e 64 54 61 62 6c 65 0a  |wInfo.#EndTable.|
0001b0d0  44 49 52 24 0c 00 00 00  0c 00 00 00 44 49 52 24  |DIR$........DIR$|
0001b0e0  2c 00 00 00 2c 00 00 00  08 b1 01 00 46 fd ff ff  |,...,.......F...|
0001b0f0  7d 90 db 14 26 01 00 00  13 00 00 00 00 00 00 00  |}...&...........|
0001b100  21 52 6f 6f 74 00 00 00  44 41 54 41 26 01 00 00  |!Root...DATA&...|
0001b110  54 72 61 6e 73 6c 61 74  6f 72 0a 23 50 61 72 65  |Translator.#Pare|
0001b120  6e 74 20 21 52 6f 6f 74  0a 23 50 72 65 66 69 78  |nt !Root.#Prefix|
0001b130  20 54 72 61 6e 73 6c 61  74 6f 72 5f 0a 23 54 61  | Translator_.#Ta|
0001b140  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 4d 61  |ble Columns 2.Ma|
0001b150  6b 65 4d 61 70 73 0a 53  65 74 56 61 72 69 61 62  |keMaps.SetVariab|
0001b160  6c 65 0a 52 65 61 64 56  61 72 69 61 62 6c 65 0a  |le.ReadVariable.|
0001b170  55 6e 70 61 63 6b 50 72  65 0a 55 6e 70 61 63 6b  |UnpackPre.Unpack|
0001b180  0a 53 65 74 50 61 6c 65  74 74 65 0a 52 6f 74 61  |.SetPalette.Rota|
0001b190  74 65 0a 4d 69 72 72 6f  72 58 0a 4d 69 72 72 6f  |te.MirrorX.Mirro|
0001b1a0  72 59 0a 43 6c 6f 73 65  73 74 54 6f 52 47 42 0a  |rY.ClosestToRGB.|
0001b1b0  44 4d 41 0a 50 69 78 65  6c 46 72 65 71 0a 43 61  |DMA.PixelFreq.Ca|
0001b1c0  6c 63 54 72 61 6e 73 0a  50 61 6c 65 74 74 65 0a  |lcTrans.Palette.|
0001b1d0  4d 6f 76 65 57 6f 72 64  73 0a 45 78 63 68 61 6e  |MoveWords.Exchan|
0001b1e0  67 65 57 6f 72 64 73 0a  57 72 69 74 65 57 6f 72  |geWords.WriteWor|
0001b1f0  64 73 0a 54 61 73 6b 53  74 61 72 74 0a 54 61 73  |ds.TaskStart.Tas|
0001b200  6b 51 75 69 74 0a 48 65  63 6b 62 65 72 74 0a 43  |kQuit.Heckbert.C|
0001b210  6f 72 72 65 63 74 43 6f  6c 0a 43 61 6c 63 52 61  |orrectCol.CalcRa|
0001b220  6e 67 65 0a 23 45 6e 64  54 61 62 6c 65 0a 00 00  |nge.#EndTable...|
0001b230  44 49 52 24 2c 00 00 00  2c 00 00 00 5c b2 01 00  |DIR$,...,...\...|
0001b240  47 fd ff ff f7 6c 7d 82  7c 00 00 00 03 00 00 00  |G....l}.|.......|
0001b250  00 00 00 00 21 52 6f 6f  74 00 00 00 44 41 54 41  |....!Root...DATA|
0001b260  7c 00 00 00 5a 61 70 4a  52 46 0a 23 50 61 72 65  ||...ZapJRF.#Pare|
0001b270  6e 74 20 21 52 6f 6f 74  0a 23 50 72 65 66 69 78  |nt !Root.#Prefix|
0001b280  20 5a 61 70 4a 52 46 5f  0a 23 54 61 62 6c 65 20  | ZapJRF_.#Table |
0001b290  43 6f 6c 75 6d 6e 73 20  32 0a 52 65 67 69 73 74  |Columns 2.Regist|
0001b2a0  65 72 53 63 72 69 70 74  44 69 72 65 63 74 69 76  |erScriptDirectiv|
0001b2b0  65 73 0a 44 65 52 65 67  69 73 74 65 72 53 63 72  |es.DeRegisterScr|
0001b2c0  69 70 74 44 69 72 65 63  74 69 76 65 73 0a 23 45  |iptDirectives.#E|
0001b2d0  6e 64 54 61 62 6c 65 0a  44 49 52 24 2c 00 00 00  |ndTable.DIR$,...|
0001b2e0  2c 00 00 00 04 b3 01 00  46 fd ff ff 61 8e db 14  |,.......F...a...|
0001b2f0  5a 01 00 00 13 00 00 00  00 00 00 00 21 52 6f 6f  |Z...........!Roo|
0001b300  74 00 00 00 44 41 54 41  5a 01 00 00 5a 61 70 52  |t...DATAZ...ZapR|
0001b310  65 64 72 61 77 0a 23 50  61 72 65 6e 74 20 21 52  |edraw.#Parent !R|
0001b320  6f 6f 74 0a 23 50 72 65  66 69 78 20 5a 61 70 52  |oot.#Prefix ZapR|
0001b330  65 64 72 61 77 5f 0a 23  54 61 62 6c 65 20 43 6f  |edraw_.#Table Co|
0001b340  6c 75 6d 6e 73 20 32 0a  52 65 64 72 61 77 41 72  |lumns 2.RedrawAr|
0001b350  65 61 0a 47 65 74 50 61  6c 65 74 74 65 45 6e 74  |ea.GetPaletteEnt|
0001b360  72 79 0a 52 65 64 72 61  77 52 61 73 74 65 72 0a  |ry.RedrawRaster.|
0001b370  43 6f 6e 76 65 72 74 42  69 74 6d 61 70 0a 50 72  |ConvertBitmap.Pr|
0001b380  65 70 61 72 65 44 61 74  61 4c 69 6e 65 0a 41 64  |epareDataLine.Ad|
0001b390  64 43 75 72 73 6f 72 0a  46 69 6e 64 43 68 61 72  |dCursor.FindChar|
0001b3a0  61 63 74 65 72 0a 4d 6f  76 65 42 79 74 65 73 0a  |acter.MoveBytes.|
0001b3b0  43 61 63 68 65 64 43 68  61 72 53 69 7a 65 0a 43  |CachedCharSize.C|
0001b3c0  6f 6e 76 42 69 74 6d 61  70 43 68 61 72 0a 43 72  |onvBitmapChar.Cr|
0001b3d0  65 61 74 65 50 61 6c 65  74 74 65 0a 49 6e 73 65  |eatePalette.Inse|
0001b3e0  72 74 43 68 61 72 0a 52  65 61 64 53 79 73 74 65  |rtChar.ReadSyste|
0001b3f0  6d 43 68 61 72 73 0a 52  65 76 65 72 73 65 42 69  |mChars.ReverseBi|
0001b400  74 6d 61 70 73 0a 52 65  61 64 56 64 75 56 61 72  |tmaps.ReadVduVar|
0001b410  73 0a 47 65 74 52 65 63  74 61 6e 67 6c 65 0a 41  |s.GetRectangle.A|
0001b420  64 64 56 64 75 42 69 74  6d 61 70 73 0a 43 61 63  |ddVduBitmaps.Cac|
0001b430  68 65 46 6f 6e 74 43 68  61 72 73 0a 53 70 72 69  |heFontChars.Spri|
0001b440  74 65 53 69 7a 65 0a 52  65 64 72 61 77 57 69 6e  |teSize.RedrawWin|
0001b450  64 6f 77 0a 23 45 6e 64  54 61 62 6c 65 0a 00 00  |dow.#EndTable...|
0001b460  44 41 54 41 45 04 00 00  4d 69 73 63 65 6c 6c 61  |DATAE...Miscella|
0001b470  6e 65 6f 75 73 20 53 57  49 73 0a 23 50 61 72 65  |neous SWIs.#Pare|
0001b480  6e 74 20 53 74 72 6f 6e  67 48 65 6c 70 3a 21 4d  |nt StrongHelp:!M|
0001b490  65 6e 75 0a 23 50 6f 73  74 66 69 78 20 5f 0a 43  |enu.#Postfix _.C|
0001b4a0  6f 6d 70 75 74 65 72 20  43 6f 6e 63 65 70 74 73  |omputer Concepts|
0001b4b0  20 3a 0a 23 49 6e 64 65  6e 74 20 32 0a 23 54 61  | :.#Indent 2.#Ta|
0001b4c0  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 33 0a 3c 41  |ble Columns 3.<A|
0001b4d0  42 49 3e 0a 3c 41 42 43  4c 69 62 3e 0a 3c 41 75  |BI>.<ABCLib>.<Au|
0001b4e0  64 69 6f 4d 61 6e 61 67  65 72 3e 0a 3c 41 57 52  |dioManager>.<AWR|
0001b4f0  65 6e 64 65 72 3e 0a 3c  43 6f 6c 6f 75 72 45 78  |ender>.<ColourEx|
0001b500  74 65 6e 64 3e 0a 3c 44  69 74 68 65 72 45 78 74  |tend>.<DitherExt|
0001b510  65 6e 64 3e 0a 3c 44 6f  63 75 6d 65 6e 74 4d 61  |end>.<DocumentMa|
0001b520  6e 61 67 65 72 3e 0a 3c  46 6f 6e 74 44 72 61 77  |nager>.<FontDraw|
0001b530  3e 0a 3c 47 44 72 61 77  3e 0a 3c 47 53 70 72 69  |>.<GDraw>.<GSpri|
0001b540  74 65 45 78 74 65 6e 64  3e 0a 3c 48 79 70 68 65  |teExtend>.<Hyphe|
0001b550  6e 61 74 6f 72 3e 0a 3c  49 6d 61 67 65 45 78 74  |nator>.<ImageExt|
0001b560  65 6e 64 3e 0a 3c 49 6d  70 75 6c 73 65 3e 0a 3c  |end>.<Impulse>.<|
0001b570  4f 4c 45 3e 0a 3c 50 6f  63 6b 65 74 46 53 3e 0a  |OLE>.<PocketFS>.|
0001b580  3c 50 6f 63 6b 65 74 4c  69 6e 6b 3e 0a 3c 53 70  |<PocketLink>.<Sp|
0001b590  65 6c 6c 3e 0a 3c 53 74  72 65 61 6d 3e 0a 3c 53  |ell>.<Stream>.<S|
0001b5a0  74 72 65 61 6d 53 71 75  61 73 68 3e 0a 3c 57 69  |treamSquash>.<Wi|
0001b5b0  6d 70 4b 65 79 3e 0a 23  45 6e 64 54 61 62 6c 65  |mpKey>.#EndTable|
0001b5c0  0a 0a 23 49 6e 64 65 6e  74 20 30 0a 41 63 6f 72  |..#Indent 0.Acor|
0001b5d0  6e 20 75 74 69 6c 69 74  69 65 73 20 3a 0a 23 49  |n utilities :.#I|
0001b5e0  6e 64 65 6e 74 20 33 0a  23 54 61 62 6c 65 20 43  |ndent 3.#Table C|
0001b5f0  6f 6c 75 6d 6e 73 20 34  0a 3c 43 6f 6d 70 72 65  |olumns 4.<Compre|
0001b600  73 73 4a 50 45 47 3e 0a  3c 44 72 61 67 41 6e 4f  |ssJPEG>.<DragAnO|
0001b610  62 6a 65 63 74 3e 0a 3c  46 72 6f 6e 74 45 6e 64  |bject>.<FrontEnd|
0001b620  3e 0a 4d 61 6b 65 50 53  46 6f 6e 74 0a 52 65 6d  |>.MakePSFont.Rem|
0001b630  6f 74 65 50 72 69 6e 74  65 72 53 75 70 70 6f 72  |otePrinterSuppor|
0001b640  74 0a 3c 52 4f 4d 43 61  63 68 65 3e 0a 23 45 6e  |t.<ROMCache>.#En|
0001b650  64 54 61 62 6c 65 0a 0a  23 49 6e 64 65 6e 74 20  |dTable..#Indent |
0001b660  30 0a 4a 6f 68 6e 20 4b  6f 72 74 69 6e 6b 20 3a  |0.John Kortink :|
0001b670  0a 23 49 6e 64 65 6e 74  20 33 0a 23 54 61 62 6c  |.#Indent 3.#Tabl|
0001b680  65 20 43 6f 6c 75 6d 6e  73 20 34 0a 3c 42 6f 72  |e Columns 4.<Bor|
0001b690  64 65 72 73 3e 0a 3c 43  72 65 61 74 6f 72 3e 0a  |ders>.<Creator>.|
0001b6a0  3c 46 69 6c 65 42 75 66  66 65 72 3e 0a 3c 4c 5a  |<FileBuffer>.<LZ|
0001b6b0  57 3e 0a 3c 4c 5a 57 42  3e 0a 3c 4c 5a 57 44 3e  |W>.<LZWB>.<LZWD>|
0001b6c0  0a 3c 4d 61 6b 65 47 49  46 3e 0a 3c 54 72 61 6e  |.<MakeGIF>.<Tran|
0001b6d0  73 6c 61 74 6f 72 3e 0a  23 45 6e 64 54 61 62 6c  |slator>.#EndTabl|
0001b6e0  65 0a 0a 23 49 6e 64 65  6e 74 20 30 0a 4d 69 73  |e..#Indent 0.Mis|
0001b6f0  63 65 6c 6c 61 6e 65 6f  75 73 20 3a 0a 23 49 6e  |cellaneous :.#In|
0001b700  64 65 6e 74 20 33 0a 23  54 61 62 6c 65 20 43 6f  |dent 3.#Table Co|
0001b710  6c 75 6d 6e 73 20 34 0a  3c 41 45 48 3d 3e 41 45  |lumns 4.<AEH=>AE|
0001b720  48 4d 6f 64 75 6c 65 3a  21 52 6f 6f 74 3e 0a 3c  |HModule:!Root>.<|
0001b730  41 72 63 46 53 3e 0a 3c  41 72 63 46 53 4d 65 6d  |ArcFS>.<ArcFSMem|
0001b740  4d 61 6e 3e 0a 3c 41 52  43 54 4f 4f 4c 53 3e 0a  |Man>.<ARCTOOLS>.|
0001b750  3c 43 41 49 46 53 3e 0a  3c 44 69 72 65 63 74 6f  |<CAIFS>.<Directo|
0001b760  72 3e 0a 3c 44 69 73 73  3e 0a 3c 44 53 79 6d 3e  |r>.<Diss>.<DSym>|
0001b770  0a 3c 45 61 73 79 46 53  3e 0a 3c 45 75 63 6c 69  |.<EasyFS>.<Eucli|
0001b780  64 3e 0a 3c 50 72 6f 46  69 6c 65 72 3d 3e 46 69  |d>.<ProFiler=>Fi|
0001b790  6c 65 72 5f 3e 0a 3c 47  64 62 6d 3e 0a 3c 48 65  |ler_>.<Gdbm>.<He|
0001b7a0  6c 69 78 42 61 73 69 63  3e 0a 3c 49 6e 74 65 72  |lixBasic>.<Inter|
0001b7b0  66 61 63 65 3e 0a 3c 49  5a 69 70 46 53 3e 0a 3c  |face>.<IZipFS>.<|
0001b7c0  4c 61 72 67 65 72 53 75  70 70 6f 72 74 3e 0a 3c  |LargerSupport>.<|
0001b7d0  4c 69 6e 65 45 64 69 74  6f 72 3e 0a 3c 4e 65 74  |LineEditor>.<Net|
0001b7e0  4d 6f 6e 69 74 6f 72 3e  0a 3c 4d 6f 44 65 6c 3e  |Monitor>.<MoDel>|
0001b7f0  0a 3c 4e 48 3e 0a 50 43  53 75 70 70 6f 72 74 0a  |.<NH>.PCSupport.|
0001b800  3c 50 43 49 4f 3e 0a 3c  50 43 4d 65 6d 3e 0a 3c  |<PCIO>.<PCMem>.<|
0001b810  50 43 44 65 76 48 65 6c  70 3e 0a 3c 50 50 41 44  |PCDevHelp>.<PPAD|
0001b820  72 69 76 65 72 3e 0a 3c  51 54 4d 3e 0a 3c 52 65  |river>.<QTM>.<Re|
0001b830  61 64 4d 61 69 6c 3e 0a  3c 53 70 63 68 3e 0a 3c  |adMail>.<Spch>.<|
0001b840  53 70 61 72 6b 46 53 3e  0a 3c 54 72 61 63 6b 65  |SparkFS>.<Tracke|
0001b850  72 3e 0a 3c 56 50 72 6f  74 65 63 74 3e 0a 3c 57  |r>.<VProtect>.<W|
0001b860  69 6d 70 45 78 74 3d 3e  57 69 6d 70 45 78 74 3a  |impExt=>WimpExt:|
0001b870  21 52 6f 6f 74 3e 0a 3c  57 69 6d 70 48 61 63 6b  |!Root>.<WimpHack|
0001b880  3e 0a 3c 5a 61 70 52 65  64 72 61 77 3e 0a 3c 5a  |>.<ZapRedraw>.<Z|
0001b890  61 70 4a 52 46 3e 0a 23  45 6e 64 54 61 62 6c 65  |apJRF>.#EndTable|
0001b8a0  0a 30 2e 39 39 00 00 00  44 41 54 41 f4 06 00 00  |.0.99...DATA....|
0001b8b0  4d 69 73 63 20 53 57 49  73 20 6d 61 6e 75 61 6c  |Misc SWIs manual|
0001b8c0  0a 23 41 6c 69 67 6e 20  43 65 6e 74 72 65 0a 7b  |.#Align Centre.{|
0001b8d0  66 68 33 7d 4d 69 73 63  65 6c 6c 61 6e 65 6f 75  |fh3}Miscellaneou|
0001b8e0  73 20 53 57 49 73 20 6d  61 6e 75 61 6c 7b 66 7d  |s SWIs manual{f}|
0001b8f0  0a 23 6c 69 6e 65 0a 23  41 6c 69 67 6e 20 4c 65  |.#line.#Align Le|
0001b900  66 74 0a 54 68 69 73 20  6d 61 6e 75 61 6c 20 69  |ft.This manual i|
0001b910  73 20 70 61 72 74 20 6f  66 20 61 20 63 6f 6c 6c  |s part of a coll|
0001b920  65 63 74 69 6f 6e 20 63  6f 6d 70 72 69 73 69 6e  |ection comprisin|
0001b930  67 20 74 68 65 20 6d 61  69 6e 20 70 75 62 6c 69  |g the main publi|
0001b940  63 20 64 6f 6d 61 69 6e  20 70 72 6f 67 72 61 6d  |c domain program|
0001b950  6d 69 6e 67 20 72 65 66  65 72 65 6e 63 65 2e 20  |ming reference. |
0001b960  54 68 65 20 6f 74 68 65  72 20 6d 61 6e 75 61 6c  |The other manual|
0001b970  73 20 69 6e 20 74 68 65  20 73 65 72 69 65 73 20  |s in the series |
0001b980  61 72 65 20 3a 0a 23 49  6e 64 65 6e 74 20 32 0a  |are :.#Indent 2.|
0001b990  23 50 6f 73 74 66 69 78  20 3a 21 52 6f 6f 74 0a  |#Postfix :!Root.|
0001b9a0  3c 4f 53 3e 09 09 54 68  65 20 62 61 73 65 20 6f  |<OS>..The base o|
0001b9b0  70 65 72 61 74 69 6e 67  20 73 79 73 74 65 6d 20  |perating system |
0001b9c0  73 74 75 66 66 0a 3c 57  69 6d 70 3e 09 09 54 68  |stuff.<Wimp>..Th|
0001b9d0  65 20 64 65 73 6b 74 6f  70 20 70 61 72 74 20 6f  |e desktop part o|
0001b9e0  66 20 74 68 65 20 6f 70  65 72 61 74 69 6e 67 20  |f the operating |
0001b9f0  73 79 73 74 65 6d 0a 3c  49 6e 65 74 53 57 49 73  |system.<InetSWIs|
0001ba00  3e 09 49 6e 74 65 72 6e  65 74 20 62 61 73 65 64  |>.Internet based|
0001ba10  20 53 57 49 73 0a 3c 49  6e 65 74 53 6f 63 6b 65  | SWIs.<InetSocke|
0001ba20  74 3e 09 49 6e 74 65 72  6e 65 74 20 73 6f 63 6b  |t>.Internet sock|
0001ba30  65 74 20 63 61 6c 6c 73  0a 3c 4d 69 73 63 53 57  |et calls.<MiscSW|
0001ba40  49 73 3e 09 4d 69 73 63  65 6c 6c 61 6e 65 6f 75  |Is>.Miscellaneou|
0001ba50  73 20 53 57 49 73 0a 3c  56 44 55 3e 09 09 56 44  |s SWIs.<VDU>..VD|
0001ba60  55 20 63 6f 6d 6d 61 6e  64 73 0a 3c 54 6f 6f 6c  |U commands.<Tool|
0001ba70  62 6f 78 3e 09 54 6f 6f  6c 62 6f 78 20 28 62 79  |box>.Toolbox (by|
0001ba80  20 4e 69 65 6c 20 42 69  6e 67 68 61 6d 29 0a 23  | Niel Bingham).#|
0001ba90  49 6e 64 65 6e 74 0a 0a  46 6f 72 20 63 6f 6d 6d  |Indent..For comm|
0001baa0  65 6e 74 73 2c 20 73 75  67 67 65 73 74 69 6f 6e  |ents, suggestion|
0001bab0  73 20 61 6e 64 20 73 75  62 6d 69 73 73 69 6f 6e  |s and submission|
0001bac0  73 20 66 6f 72 20 74 68  65 73 65 2c 20 70 6c 65  |s for these, ple|
0001bad0  61 73 65 20 6d 61 69 6c  20 4a 75 73 74 69 6e 20  |ase mail Justin |
0001bae0  46 6c 65 74 63 68 65 72  20 3c 5c 3c 67 65 72 70  |Fletcher <\<gerp|
0001baf0  68 40 69 6e 6e 6f 63 65  6e 74 2e 63 6f 6d 5c 3e  |h@innocent.com\>|
0001bb00  3d 3e 23 55 52 4c 20 6d  61 69 6c 74 6f 3a 67 65  |=>#URL mailto:ge|
0001bb10  72 70 68 40 69 6e 6e 6f  63 65 6e 74 2e 63 6f 6d  |rph@innocent.com|
0001bb20  3e 20 77 68 6f 20 69 73  20 63 75 72 72 65 6e 74  |> who is current|
0001bb30  6c 79 20 6d 6f 64 65 72  61 74 69 6e 67 20 74 68  |ly moderating th|
0001bb40  65 20 63 6f 6c 6c 65 63  74 69 6f 6e 2e 20 54 68  |e collection. Th|
0001bb50  65 20 70 72 69 6d 61 72  79 20 6c 6f 63 61 74 69  |e primary locati|
0001bb60  6f 6e 20 66 6f 72 20 74  68 65 73 65 20 6d 61 6e  |on for these man|
0001bb70  75 61 6c 73 20 77 69 6c  6c 20 62 65 20 3c 68 74  |uals will be <ht|
0001bb80  74 70 3a 2f 2f 66 72 65  65 6e 65 74 2e 62 61 72  |tp://freenet.bar|
0001bb90  6e 65 74 2e 61 63 2e 75  6b 2f 6d 61 6e 75 61 6c  |net.ac.uk/manual|
0001bba0  73 2f 3d 3e 23 55 52 4c  20 68 74 74 70 3a 2f 2f  |s/=>#URL http://|
0001bbb0  66 72 65 65 6e 65 74 2e  62 61 72 6e 65 74 2e 61  |freenet.barnet.a|
0001bbc0  63 2e 75 6b 2f 6d 61 6e  75 61 6c 73 2f 3e 2e 0a  |c.uk/manuals/>..|
0001bbd0  0a 43 6c 69 63 6b 20 3c  68 65 72 65 3d 3e 2e 68  |.Click <here=>.h|
0001bbe0  69 73 74 31 30 33 3e 20  66 6f 72 20 68 69 73 74  |ist103> for hist|
0001bbf0  6f 72 79 20 69 6e 66 6f  72 6d 61 74 69 6f 6e 2e  |ory information.|
0001bc00  0a 23 0a 23 53 75 62 70  61 67 65 20 68 69 73 74  |.#.#Subpage hist|
0001bc10  31 30 30 0a 48 69 73 74  6f 72 79 20 66 6f 72 20  |100.History for |
0001bc20  4d 69 73 63 20 76 31 2e  30 30 0a 23 41 6c 69 67  |Misc v1.00.#Alig|
0001bc30  6e 20 52 69 67 68 74 0a  7b 2f 7d 31 30 20 4f 63  |n Right.{/}10 Oc|
0001bc40  74 20 31 39 39 37 7b 2f  7d 0a 23 41 6c 69 67 6e  |t 1997{/}.#Align|
0001bc50  20 4c 65 66 74 0a 8f 09  43 68 61 6e 67 65 64 20  | Left...Changed |
0001bc60  61 6c 6c 20 74 68 65 20  62 69 74 73 20 61 72 6f  |all the bits aro|
0001bc70  75 6e 64 20 73 6f 20 74  68 61 74 20 74 68 65 20  |und so that the |
0001bc80  6d 61 69 6e 20 77 69 6e  64 6f 77 20 6c 6f 6f 6b  |main window look|
0001bc90  73 20 61 20 6c 69 74 74  6c 65 20 6d 6f 72 65 20  |s a little more |
0001bca0  6c 69 6b 65 20 74 68 65  20 6f 74 68 65 72 20 6d  |like the other m|
0001bcb0  61 6e 75 61 6c 73 0a 8f  09 41 64 64 65 64 20 73  |anuals...Added s|
0001bcc0  6f 6d 65 20 4c 69 6e 65  45 64 69 74 6f 72 20 64  |ome LineEditor d|
0001bcd0  6f 63 75 6d 65 6e 74 61  74 69 6f 6e 0a 0a 3c 4e  |ocumentation..<N|
0001bce0  65 78 74 20 68 69 73 74  6f 72 79 3d 3e 2e 68 69  |ext history=>.hi|
0001bcf0  73 74 31 30 31 3e 0a 23  53 75 62 70 61 67 65 20  |st101>.#Subpage |
0001bd00  68 69 73 74 31 30 31 0a  48 69 73 74 6f 72 79 20  |hist101.History |
0001bd10  66 6f 72 20 4d 69 73 63  20 76 31 2e 30 31 0a 23  |for Misc v1.01.#|
0001bd20  41 6c 69 67 6e 20 52 69  67 68 74 0a 7b 2f 7d 31  |Align Right.{/}1|
0001bd30  35 20 4e 6f 76 20 31 39  39 37 7b 2f 7d 0a 23 41  |5 Nov 1997{/}.#A|
0001bd40  6c 69 67 6e 20 4c 65 66  74 0a 8f 09 4c 6f 74 73  |lign Left...Lots|
0001bd50  20 6f 66 20 63 68 61 6e  67 65 73 20 66 72 6f 6d  | of changes from|
0001bd60  20 44 61 76 65 20 54 68  6f 6d 61 73 3b 20 73 6f  | Dave Thomas; so|
0001bd70  6d 65 20 41 70 70 45 6e  67 69 6e 65 20 64 6f 63  |me AppEngine doc|
0001bd80  73 2c 20 43 6f 6d 70 72  65 73 73 4a 50 45 47 20  |s, CompressJPEG |
0001bd90  61 6e 64 20 53 70 61 72  6b 46 53 20 53 57 49 73  |and SparkFS SWIs|
0001bda0  20 66 72 6f 6d 20 68 69  73 20 6f 77 6e 20 6d 61  | from his own ma|
0001bdb0  6e 75 61 6c 73 0a 8f 09  44 44 45 55 74 69 6c 73  |nuals...DDEUtils|
0001bdc0  20 62 75 67 20 66 69 78  65 73 0a 0a 23 54 61 62  | bug fixes..#Tab|
0001bdd0  0a 3c 50 72 65 76 69 6f  75 73 20 68 69 73 74 6f  |.<Previous histo|
0001bde0  72 79 3d 3e 2e 68 69 73  74 31 30 30 3e 09 3c 4e  |ry=>.hist100>.<N|
0001bdf0  65 78 74 20 68 69 73 74  6f 72 79 3d 3e 2e 68 69  |ext history=>.hi|
0001be00  73 74 31 30 32 3e 0a 23  53 75 62 70 61 67 65 20  |st102>.#Subpage |
0001be10  68 69 73 74 31 30 32 0a  48 69 73 74 6f 72 79 20  |hist102.History |
0001be20  66 6f 72 20 4d 69 73 63  20 76 31 2e 30 32 0a 23  |for Misc v1.02.#|
0001be30  41 6c 69 67 6e 20 52 69  67 68 74 0a 7b 2f 7d 32  |Align Right.{/}2|
0001be40  30 20 44 65 63 20 31 39  39 37 20 2d 20 31 35 20  |0 Dec 1997 - 15 |
0001be50  4a 61 6e 20 31 39 39 38  7b 2f 7d 0a 23 41 6c 69  |Jan 1998{/}.#Ali|
0001be60  67 6e 20 4c 65 66 74 0a  8f 09 41 64 64 65 64 20  |gn Left...Added |
0001be70  73 6f 6d 65 20 53 70 65  61 6b 20 53 57 49 73 0a  |some Speak SWIs.|
0001be80  8f 09 44 44 45 55 74 69  6c 73 20 6d 6f 76 65 64  |..DDEUtils moved|
0001be90  20 74 6f 20 57 69 6d 70  0a 8f 09 41 64 64 65 64  | to Wimp...Added|
0001bea0  20 72 65 61 6c 20 53 70  65 61 6b 20 64 6f 63 75  | real Speak docu|
0001beb0  6d 65 6e 74 61 74 69 6f  6e 20 66 72 6f 6d 20 4a  |mentation from J|
0001bec0  6f 68 6e 61 74 68 61 6e  20 44 75 64 64 69 6e 67  |ohnathan Dudding|
0001bed0  74 6f 6e 2e 0a 0a 23 54  61 62 0a 3c 50 72 65 76  |ton...#Tab.<Prev|
0001bee0  69 6f 75 73 20 68 69 73  74 6f 72 79 3d 3e 2e 68  |ious history=>.h|
0001bef0  69 73 74 31 30 31 3e 09  3c 4e 65 78 74 20 68 69  |ist101>.<Next hi|
0001bf00  73 74 6f 72 79 3d 3e 2e  68 69 73 74 31 30 33 3e  |story=>.hist103>|
0001bf10  0a 23 53 75 62 70 61 67  65 20 68 69 73 74 31 30  |.#Subpage hist10|
0001bf20  33 0a 48 69 73 74 6f 72  79 20 66 6f 72 20 4d 69  |3.History for Mi|
0001bf30  73 63 20 76 31 2e 30 33  0a 23 41 6c 69 67 6e 20  |sc v1.03.#Align |
0001bf40  52 69 67 68 74 0a 7b 2f  7d 32 32 20 4d 61 72 20  |Right.{/}22 Mar |
0001bf50  31 39 39 38 7b 2f 7d 0a  23 41 6c 69 67 6e 20 4c  |1998{/}.#Align L|
0001bf60  65 66 74 0a 8f 09 4d 69  73 63 20 6d 69 6e 6f 72  |eft...Misc minor|
0001bf70  20 63 68 61 6e 67 65 73  0a 0a 23 54 61 62 0a 3c  | changes..#Tab.<|
0001bf80  50 72 65 76 69 6f 75 73  20 68 69 73 74 6f 72 79  |Previous history|
0001bf90  3d 3e 2e 68 69 73 74 31  30 32 3e 0a 44 49 52 24  |=>.hist102>.DIR$|
0001bfa0  b4 00 00 00 b4 00 00 00  50 c0 01 00 47 fd ff ff  |........P...G...|
0001bfb0  cd 32 e3 d1 f8 00 00 00  33 00 00 00 00 00 00 00  |.2......3.......|
0001bfc0  21 52 6f 6f 74 00 00 00  48 c1 01 00 48 fd ff ff  |!Root...H...H...|
0001bfd0  c2 ec 80 2b 64 00 00 00  13 01 00 00 00 00 00 00  |...+d...........|
0001bfe0  43 6f 64 65 63 4f 70 00  e0 c9 01 00 48 fd ff ff  |CodecOp.....H...|
0001bff0  8b ed 80 2b d8 00 00 00  13 01 00 00 00 00 00 00  |...+............|
0001c000  48 65 61 70 00 00 00 00  84 e2 01 00 48 fd ff ff  |Heap........H...|
0001c010  56 ef 80 2b b8 00 00 00  13 01 00 00 00 00 00 00  |V..+............|
0001c020  53 6f 63 6b 65 74 4f 70  00 00 00 00 78 ec 01 00  |SocketOp....x...|
0001c030  48 fd ff ff 6f f0 80 2b  b4 01 00 00 13 01 00 00  |H...o..+........|
0001c040  00 00 00 00 53 74 72 69  6e 67 4f 70 00 00 00 00  |....StringOp....|
0001c050  44 41 54 41 f8 00 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
0001c060  65 20 4d 6f 64 75 6c 65  0a 23 50 72 65 66 69 78  |e Module.#Prefix|
0001c070  20 41 70 70 45 6e 67 69  6e 65 5f 0a 23 53 70 72  | AppEngine_.#Spr|
0001c080  69 74 65 20 30 2c 30 20  21 61 70 70 65 6e 67 69  |ite 0,0 !appengi|
0001c090  6e 65 0a 23 49 6e 64 65  6e 74 20 35 0a 7b 2a 7d  |ne.#Indent 5.{*}|
0001c0a0  41 70 70 45 6e 67 69 6e  65 20 4d 6f 64 75 6c 65  |AppEngine Module|
0001c0b0  7b 2a 7d 0a 30 2e 30 36  20 28 31 33 20 53 65 70  |{*}.0.06 (13 Sep|
0001c0c0  20 31 39 39 37 29 0a 23  4c 69 6e 65 0a 23 54 61  | 1997).#Line.#Ta|
0001c0d0  62 6c 65 20 43 6f 6c 75  6d 6e 73 20 32 0a 52 65  |ble Columns 2.Re|
0001c0e0  73 6f 75 72 63 65 4f 70  0a 3c 53 74 72 69 6e 67  |sourceOp.<String|
0001c0f0  4f 70 3e 0a 57 69 6e 64  6f 77 4f 70 0a 49 63 6f  |Op>.WindowOp.Ico|
0001c100  6e 4f 70 0a 44 61 74 65  4f 70 0a 3c 53 6f 63 6b  |nOp.DateOp.<Sock|
0001c110  65 74 4f 70 3e 0a 3c 43  6f 64 65 63 4f 70 3e 0a  |etOp>.<CodecOp>.|
0001c120  55 52 4c 4f 70 0a 4d 65  6d 6f 72 79 4f 70 0a 3c  |URLOp.MemoryOp.<|
0001c130  48 65 61 70 3e 0a 23 45  6e 64 54 61 62 6c 65 0a  |Heap>.#EndTable.|
0001c140  23 49 6e 64 65 6e 74 0a  44 49 52 24 64 00 00 00  |#Indent.DIR$d...|
0001c150  64 00 00 00 ac c1 01 00  47 ff ff ff e1 5f 90 e9  |d.......G...._..|
0001c160  d4 01 00 00 33 00 00 00  00 00 00 00 21 52 6f 6f  |....3.......!Roo|
0001c170  74 00 00 00 80 c3 01 00  47 fd ff ff c2 21 91 e9  |t.......G....!..|
0001c180  39 03 00 00 03 00 00 00  00 00 00 00 30 00 00 00  |9...........0...|
0001c190  bc c6 01 00 47 fd ff ff  98 1a 91 e9 24 03 00 00  |....G.......$...|
0001c1a0  03 00 00 00 00 00 00 00  31 00 00 00 44 41 54 41  |........1...DATA|
0001c1b0  d4 01 00 00 41 70 70 45  6e 67 69 6e 65 5f 43 6f  |....AppEngine_Co|
0001c1c0  64 65 63 4f 70 20 20 28  26 34 44 39 34 36 29 0a  |decOp  (&4D946).|
0001c1d0  23 57 72 61 70 20 6f 66  66 0a 3d 3e 09 52 30 20  |#Wrap off.=>.R0 |
0001c1e0  3d 09 3c 72 65 61 73 6f  6e 20 63 6f 64 65 3d 3e  |=.<reason code=>|
0001c1f0  2e 72 65 61 73 6f 6e 73  3e 0a 09 6f 74 68 65 72  |.reasons>..other|
0001c200  20 72 65 67 69 73 74 65  72 73 20 61 72 65 20 72  | registers are r|
0001c210  65 61 73 6f 6e 20 63 6f  64 65 20 64 65 70 65 6e  |eason code depen|
0001c220  64 65 6e 74 0a 0a 3c 3d  09 52 30 20 70 72 65 73  |dent..<=.R0 pres|
0001c230  65 72 76 65 64 0a 09 6f  74 68 65 72 20 72 65 67  |erved..other reg|
0001c240  69 73 74 65 72 73 20 61  72 65 20 72 65 61 73 6f  |isters are reaso|
0001c250  6e 20 63 6f 64 65 20 64  65 70 65 6e 64 65 6e 74  |n code dependent|
0001c260  0a 23 57 72 61 70 0a 0a  54 68 69 73 20 63 61 6c  |.#Wrap..This cal|
0001c270  6c 20 70 72 6f 76 69 64  65 73 20 6f 70 65 72 61  |l provides opera|
0001c280  74 69 6f 6e 73 20 74 6f  20 65 6e 63 6f 64 65 20  |tions to encode |
0001c290  61 6e 64 20 64 65 63 6f  64 65 20 64 61 74 61 20  |and decode data |
0001c2a0  69 6e 74 6f 20 76 61 72  69 6f 75 73 20 65 6e 63  |into various enc|
0001c2b0  6f 64 65 64 20 66 6f 72  6d 61 74 73 2e 0a 23 53  |oded formats..#S|
0001c2c0  75 62 70 61 67 65 20 72  65 61 73 6f 6e 73 0a 41  |ubpage reasons.A|
0001c2d0  70 70 45 6e 67 69 6e 65  5f 43 6f 64 65 63 4f 70  |ppEngine_CodecOp|
0001c2e0  20 72 65 61 73 6f 6e 20  63 6f 64 65 73 0a 23 57  | reason codes.#W|
0001c2f0  72 61 70 20 6f 66 66 0a  52 30 09 41 63 74 69 6f  |rap off.R0.Actio|
0001c300  6e 0a 23 4c 69 6e 65 0a  30 09 3c 45 6e 63 6f 64  |n.#Line.0.<Encod|
0001c310  65 20 64 61 74 61 20 69  6e 74 6f 20 61 20 42 61  |e data into a Ba|
0001c320  73 65 36 34 20 73 74 72  69 6e 67 3d 3e 41 70 70  |se64 string=>App|
0001c330  45 6e 67 69 6e 65 5f 43  6f 64 65 63 4f 70 30 3e  |Engine_CodecOp0>|
0001c340  0a 31 09 3c 44 65 63 6f  64 65 20 42 61 73 65 36  |.1.<Decode Base6|
0001c350  34 20 64 61 74 61 20 69  6e 74 6f 20 61 20 73 74  |4 data into a st|
0001c360  72 69 6e 67 3d 3e 41 70  70 45 6e 67 69 6e 65 5f  |ring=>AppEngine_|
0001c370  43 6f 64 65 63 4f 70 31  3e 0a 23 57 72 61 70 0a  |CodecOp1>.#Wrap.|
0001c380  44 41 54 41 39 03 00 00  41 70 70 45 6e 67 69 6e  |DATA9...AppEngin|
0001c390  65 5f 43 6f 64 65 63 4f  70 20 30 20 20 28 26 34  |e_CodecOp 0  (&4|
0001c3a0  44 39 34 36 29 0a 23 50  61 72 65 6e 74 20 41 70  |D946).#Parent Ap|
0001c3b0  70 45 6e 67 69 6e 65 5f  43 6f 64 65 63 4f 70 0a  |pEngine_CodecOp.|
0001c3c0  3d 3e 09 52 30 20 3d 09  30 0a 09 52 31 20 3d 09  |=>.R0 =.0..R1 =.|
0001c3d0  70 6f 69 6e 74 65 72 20  74 6f 20 69 6e 70 75 74  |pointer to input|
0001c3e0  20 64 61 74 61 0a 09 52  32 20 3d 09 6c 65 6e 67  | data..R2 =.leng|
0001c3f0  74 68 20 6f 66 20 69 6e  70 75 74 20 64 61 74 61  |th of input data|
0001c400  20 28 6e 6f 20 6d 6f 72  65 20 74 68 61 6e 20 31  | (no more than 1|
0001c410  38 39 20 62 79 74 65 73  29 0a 0a 3c 3d 09 52 30  |89 bytes)..<=.R0|
0001c420  2c 20 52 31 2c 20 52 32  20 70 72 65 73 65 72 76  |, R1, R2 preserv|
0001c430  65 64 0a 09 52 33 20 3d  09 70 6f 69 6e 74 65 72  |ed..R3 =.pointer|
0001c440  20 74 6f 20 42 61 73 65  36 34 2d 65 6e 63 6f 64  | to Base64-encod|
0001c450  65 64 20 73 74 72 69 6e  67 0a 0a 45 6e 63 6f 64  |ed string..Encod|
0001c460  65 73 20 64 61 74 61 20  69 6e 74 6f 20 61 20 42  |es data into a B|
0001c470  61 73 65 36 34 20 73 74  72 69 6e 67 2e 0a 0a 54  |ase64 string...T|
0001c480  68 69 73 20 63 61 6c 6c  20 69 73 20 75 73 65 64  |his call is used|
0001c490  20 74 6f 20 65 6e 63 6f  64 65 20 73 6d 61 6c 6c  | to encode small|
0001c4a0  20 61 6d 6f 75 6e 74 73  20 6f 66 20 64 61 74 61  | amounts of data|
0001c4b0  20 69 6e 74 6f 20 74 68  65 20 37 2d 62 69 74 20  | into the 7-bit |
0001c4c0  4d 49 4d 45 20 42 61 73  65 36 34 20 65 6e 63 6f  |MIME Base64 enco|
0001c4d0  64 65 64 20 66 6f 72 6d  61 74 2c 20 66 6f 72 20  |ded format, for |
0001c4e0  75 73 65 20 69 6e 20 49  6e 74 65 72 6e 65 74 20  |use in Internet |
0001c4f0  61 70 70 6c 69 63 61 74  69 6f 6e 73 2e 0a 0a 53  |applications...S|
0001c500  69 6e 63 65 20 74 68 65  20 6f 75 74 70 75 74 20  |ince the output |
0001c510  69 73 20 61 20 73 74 72  69 6e 67 2c 20 6c 69 6d  |is a string, lim|
0001c520  69 74 65 64 20 74 6f 20  61 20 6d 61 78 69 6d 75  |ited to a maximu|
0001c530  6d 20 6f 66 20 32 35 35  20 63 68 61 72 61 63 74  |m of 255 charact|
0001c540  65 72 73 20 79 6f 75 20  6d 75 73 74 20 65 6e 73  |ers you must ens|
0001c550  75 72 65 20 74 68 61 74  20 79 6f 75 20 73 75 70  |ure that you sup|
0001c560  70 6c 79 20 6e 6f 20 6d  6f 72 65 20 74 68 61 6e  |ply no more than|
0001c570  20 31 38 39 20 62 79 74  65 73 20 6f 66 20 69 6e  | 189 bytes of in|
0001c580  70 75 74 2e 20 20 54 68  69 73 20 69 73 20 62 65  |put.  This is be|
0001c590  63 61 75 73 65 20 66 6f  72 20 65 76 65 72 79 20  |cause for every |
0001c5a0  74 68 72 65 65 20 62 79  74 65 73 20 6f 66 20 69  |three bytes of i|
0001c5b0  6e 70 75 74 2c 20 74 68  65 20 65 6e 63 6f 64 65  |nput, the encode|
0001c5c0  72 20 67 65 6e 65 72 61  74 65 73 20 66 6f 75 72  |r generates four|
0001c5d0  20 62 79 74 65 73 20 6f  66 20 6f 75 74 70 75 74  | bytes of output|
0001c5e0  20 61 6e 64 20 61 6c 73  6f 20 73 74 72 69 6e 67  | and also string|
0001c5f0  73 20 6f 66 20 63 65 72  74 61 69 6e 20 6c 65 6e  |s of certain len|
0001c600  67 74 68 73 20 61 72 65  20 73 75 66 66 69 78 65  |gths are suffixe|
0001c610  64 20 77 69 74 68 20 27  3d 27 20 63 68 61 72 61  |d with '=' chara|
0001c620  63 74 65 72 73 20 77 68  69 63 68 20 72 65 64 75  |cters which redu|
0001c630  63 65 73 20 74 68 65 20  6d 61 78 69 6d 75 6d 20  |ces the maximum |
0001c640  69 6e 70 75 74 20 6c 65  6e 67 74 68 20 6d 6f 72  |input length mor|
0001c650  65 2e 0a 0a 54 68 65 20  65 78 61 63 74 20 6d 65  |e...The exact me|
0001c660  74 68 6f 64 20 66 6f 72  20 64 65 74 65 6d 69 6e  |thod for detemin|
0001c670  69 6e 67 20 74 68 65 20  6f 75 74 70 75 74 20 73  |ing the output s|
0001c680  74 72 69 6e 67 20 6c 65  6e 67 74 68 20 69 73 3a  |tring length is:|
0001c690  20 28 20 28 20 69 6e 5f  6c 65 6e 67 74 68 20 2a  | ( ( in_length *|
0001c6a0  20 34 20 2f 20 33 20 29  20 2b 20 33 20 29 20 41  | 4 / 3 ) + 3 ) A|
0001c6b0  4e 44 20 4e 4f 54 20 33  0a 00 00 00 44 41 54 41  |ND NOT 3....DATA|
0001c6c0  24 03 00 00 41 70 70 45  6e 67 69 6e 65 5f 43 6f  |$...AppEngine_Co|
0001c6d0  64 65 63 4f 70 20 31 20  20 28 26 34 44 39 34 36  |decOp 1  (&4D946|
0001c6e0  29 0a 23 50 61 72 65 6e  74 20 41 70 70 45 6e 67  |).#Parent AppEng|
0001c6f0  69 6e 65 5f 43 6f 64 65  63 4f 70 0a 3d 3e 09 52  |ine_CodecOp.=>.R|
0001c700  30 20 3d 09 31 0a 09 52  31 20 3d 09 70 6f 69 6e  |0 =.1..R1 =.poin|
0001c710  74 65 72 20 74 6f 20 42  61 73 65 36 34 2d 63 6f  |ter to Base64-co|
0001c720  64 65 64 20 69 6e 70 75  74 20 64 61 74 61 0a 09  |ded input data..|
0001c730  52 32 20 3d 09 6c 65 6e  67 74 68 20 6f 66 20 69  |R2 =.length of i|
0001c740  6e 70 75 74 20 64 61 74  61 20 28 6e 6f 20 6d 6f  |nput data (no mo|
0001c750  72 65 20 74 68 61 6e 20  33 34 30 20 62 79 74 65  |re than 340 byte|
0001c760  73 29 0a 0a 3c 3d 09 52  30 2c 20 52 31 2c 20 52  |s)..<=.R0, R1, R|
0001c770  32 20 70 72 65 73 65 72  76 65 64 0a 09 52 33 20  |2 preserved..R3 |
0001c780  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 64 65 63  |=.pointer to dec|
0001c790  6f 64 65 64 20 73 74 72  69 6e 67 0a 0a 44 65 63  |oded string..Dec|
0001c7a0  6f 64 65 73 20 42 61 73  65 36 34 20 64 61 74 61  |odes Base64 data|
0001c7b0  20 69 6e 74 6f 20 61 20  73 74 72 69 6e 67 2e 0a  | into a string..|
0001c7c0  0a 54 68 69 73 20 63 61  6c 6c 20 69 73 20 75 73  |.This call is us|
0001c7d0  65 64 20 74 6f 20 64 65  63 6f 64 65 20 73 6d 61  |ed to decode sma|
0001c7e0  6c 6c 20 61 6d 6f 75 6e  74 73 20 6f 66 20 4d 49  |ll amounts of MI|
0001c7f0  4d 45 20 42 61 73 65 36  34 20 65 6e 63 6f 64 65  |ME Base64 encode|
0001c800  64 20 64 61 74 61 20 69  6e 74 6f 20 61 20 73 74  |d data into a st|
0001c810  72 69 6e 67 2c 20 66 6f  72 20 75 73 65 20 69 6e  |ring, for use in|
0001c820  20 69 6e 74 65 72 6e 65  74 20 61 70 70 6c 69 63  | internet applic|
0001c830  61 74 69 6f 6e 73 2e 0a  0a 53 69 6e 63 65 20 74  |ations...Since t|
0001c840  68 65 20 6f 75 74 70 75  74 20 69 73 20 61 20 73  |he output is a s|
0001c850  74 72 69 6e 67 2c 20 6c  69 6d 69 74 65 64 20 74  |tring, limited t|
0001c860  6f 20 61 20 6d 61 78 69  6d 75 6d 20 6f 66 20 32  |o a maximum of 2|
0001c870  35 35 20 63 68 61 72 61  63 74 65 72 73 20 79 6f  |55 characters yo|
0001c880  75 20 6d 75 73 74 20 65  6e 73 75 72 65 20 74 68  |u must ensure th|
0001c890  61 74 20 79 6f 75 20 73  75 70 70 6c 79 20 6e 6f  |at you supply no|
0001c8a0  20 6d 6f 72 65 20 74 68  61 6e 20 33 34 30 20 62  | more than 340 b|
0001c8b0  79 74 65 73 20 6f 66 20  69 6e 70 75 74 2e 20 20  |ytes of input.  |
0001c8c0  54 68 69 73 20 69 73 20  62 65 63 61 75 73 65 20  |This is because |
0001c8d0  66 6f 72 20 65 76 65 72  79 20 66 6f 75 72 20 62  |for every four b|
0001c8e0  79 74 65 73 20 6f 66 20  69 6e 70 75 74 2c 20 74  |ytes of input, t|
0001c8f0  68 65 20 65 6e 63 6f 64  65 72 20 67 65 6e 65 72  |he encoder gener|
0001c900  61 74 65 73 20 74 68 72  65 65 20 62 79 74 65 73  |ates three bytes|
0001c910  20 6f 66 20 6f 75 74 70  75 74 2e 0a 0a 54 68 65  | of output...The|
0001c920  20 6d 65 74 68 6f 64 20  66 6f 72 20 64 65 74 65  | method for dete|
0001c930  6d 69 6e 69 6e 67 20 74  68 65 20 6f 75 74 70 75  |mining the outpu|
0001c940  74 20 73 74 72 69 6e 67  20 6c 65 6e 67 74 68 20  |t string length |
0001c950  69 73 20 6e 6f 74 20 64  65 74 61 69 6c 65 64 20  |is not detailed |
0001c960  68 65 72 65 20 61 73 20  69 74 20 63 61 6e 6e 6f  |here as it canno|
0001c970  74 20 62 65 20 65 61 73  69 6c 79 20 63 61 6c 63  |t be easily calc|
0001c980  75 6c 61 74 65 64 20 77  69 74 68 6f 75 74 20 61  |ulated without a|
0001c990  63 63 65 73 73 20 74 6f  20 74 68 65 20 69 6e 70  |ccess to the inp|
0001c9a0  75 74 20 64 61 74 61 2e  0a 0a 54 68 69 73 20 53  |ut data...This S|
0001c9b0  57 49 20 69 73 20 6e 6f  74 20 73 75 69 74 61 62  |WI is not suitab|
0001c9c0  6c 65 20 66 6f 72 20 64  65 63 6f 64 69 6e 67 20  |le for decoding |
0001c9d0  6e 6f 6e 2d 41 53 43 49  49 20 64 61 74 61 2e 0a  |non-ASCII data..|
0001c9e0  44 49 52 24 d8 00 00 00  d8 00 00 00 b8 ca 01 00  |DIR$............|
0001c9f0  47 ff ff ff 25 51 13 fd  4d 02 00 00 33 00 00 00  |G...%Q..M...3...|
0001ca00  00 00 00 00 21 72 6f 6f  74 00 00 00 08 cd 01 00  |....!root.......|
0001ca10  47 fd ff ff b5 36 91 e9  e7 01 00 00 03 00 00 00  |G....6..........|
0001ca20  00 00 00 00 30 00 00 00  f0 ce 01 00 47 fd ff ff  |....0.......G...|
0001ca30  7c 34 91 e9 ef 00 00 00  03 00 00 00 00 00 00 00  ||4..............|
0001ca40  31 00 00 00 e0 cf 01 00  47 fd ff ff bb 31 91 e9  |1.......G....1..|
0001ca50  3b 02 00 00 03 00 00 00  00 00 00 00 32 00 00 00  |;...........2...|
0001ca60  1c d2 01 00 47 fd ff ff  a2 2e 91 e9 10 01 00 00  |....G...........|
0001ca70  03 00 00 00 00 00 00 00  33 00 00 00 2c d3 01 00  |........3...,...|
0001ca80  47 fd ff ff 34 2c 91 e9  2d 03 00 00 03 00 00 00  |G...4,..-.......|
0001ca90  00 00 00 00 34 00 00 00  5c d6 01 00 47 fd ff ff  |....4...\...G...|
0001caa0  3c 46 91 e9 27 0c 00 00  03 00 00 00 00 00 00 00  |<F..'...........|
0001cab0  4d 61 69 6e 00 00 00 00  44 41 54 41 4d 02 00 00  |Main....DATAM...|
0001cac0  41 70 70 45 6e 67 69 6e  65 5f 48 65 61 70 20 20  |AppEngine_Heap  |
0001cad0  28 26 34 44 39 34 39 29  0a 23 57 72 61 70 20 6f  |(&4D949).#Wrap o|
0001cae0  66 66 0a 3d 3e 09 52 30  20 3d 20 3c 72 65 61 73  |ff.=>.R0 = <reas|
0001caf0  6f 6e 20 63 6f 64 65 3d  3e 2e 72 65 61 73 6f 6e  |on code=>.reason|
0001cb00  73 3e 0a 09 6f 74 68 65  72 20 72 65 67 69 73 74  |s>..other regist|
0001cb10  65 72 73 20 61 72 65 20  72 65 61 73 6f 6e 20 63  |ers are reason c|
0001cb20  6f 64 65 20 64 65 70 65  6e 64 65 6e 74 0a 0a 3c  |ode dependent..<|
0001cb30  3d 09 52 30 20 70 72 65  73 65 72 76 65 64 0a 09  |=.R0 preserved..|
0001cb40  6f 74 68 65 72 20 72 65  67 69 73 74 65 72 73 20  |other registers |
0001cb50  61 72 65 20 72 65 61 73  6f 6e 20 63 6f 64 65 20  |are reason code |
0001cb60  64 65 70 65 6e 64 65 6e  74 0a 23 57 72 61 70 0a  |dependent.#Wrap.|
0001cb70  0a 54 68 69 73 20 63 61  6c 6c 20 70 72 6f 76 69  |.This call provi|
0001cb80  64 65 73 20 61 20 3c 67  61 72 62 61 67 65 20 63  |des a <garbage c|
0001cb90  6f 6c 6c 65 63 74 69 6e  67 20 68 65 61 70 20 6d  |ollecting heap m|
0001cba0  61 6e 61 67 65 72 3d 3e  61 70 70 65 6e 67 69 6e  |anager=>appengin|
0001cbb0  65 5f 68 65 61 70 6d 61  69 6e 3e 2e 0a 23 53 75  |e_heapmain>..#Su|
0001cbc0  62 70 61 67 65 20 72 65  61 73 6f 6e 73 0a 41 70  |bpage reasons.Ap|
0001cbd0  70 45 6e 67 69 6e 65 5f  48 65 61 70 20 72 65 61  |pEngine_Heap rea|
0001cbe0  73 6f 6e 20 63 6f 64 65  73 0a 23 57 72 61 70 20  |son codes.#Wrap |
0001cbf0  6f 66 66 0a 52 30 09 41  63 74 69 6f 6e 0a 23 4c  |off.R0.Action.#L|
0001cc00  69 6e 65 0a 30 09 3c 63  72 65 61 74 65 73 20 61  |ine.0.<creates a|
0001cc10  20 6e 65 77 20 68 65 61  70 3d 3e 41 70 70 45 6e  | new heap=>AppEn|
0001cc20  67 69 6e 65 5f 48 65 61  70 30 3e 0a 31 09 3c 64  |gine_Heap0>.1.<d|
0001cc30  65 6c 65 74 65 73 20 61  20 68 65 61 70 3d 3e 41  |eletes a heap=>A|
0001cc40  70 70 45 6e 67 69 6e 65  5f 48 65 61 70 31 3e 0a  |ppEngine_Heap1>.|
0001cc50  32 09 3c 63 6c 61 69 6d  73 20 61 20 62 6c 6f 63  |2.<claims a bloc|
0001cc60  6b 20 6f 66 20 6d 65 6d  6f 72 79 20 66 72 6f 6d  |k of memory from|
0001cc70  20 61 20 68 65 61 70 3d  3e 41 70 70 45 6e 67 69  | a heap=>AppEngi|
0001cc80  6e 65 5f 48 65 61 70 32  3e 0a 33 09 3c 72 65 6c  |ne_Heap2>.3.<rel|
0001cc90  65 61 73 65 73 20 61 20  62 6c 6f 63 6b 20 6f 66  |eases a block of|
0001cca0  20 6d 65 6d 6f 72 79 20  66 72 6f 6d 20 61 20 68  | memory from a h|
0001ccb0  65 61 70 3d 3e 41 70 70  45 6e 67 69 6e 65 5f 48  |eap=>AppEngine_H|
0001ccc0  65 61 70 33 3e 0a 34 09  3c 72 65 73 69 7a 65 73  |eap3>.4.<resizes|
0001ccd0  20 61 20 62 6c 6f 63 6b  20 6f 66 20 6d 65 6d 6f  | a block of memo|
0001cce0  72 79 20 69 6e 20 61 20  68 65 61 70 3d 3e 41 70  |ry in a heap=>Ap|
0001ccf0  70 45 6e 67 69 6e 65 5f  48 65 61 70 34 3e 0a 23  |pEngine_Heap4>.#|
0001cd00  57 72 61 70 0a 00 00 00  44 41 54 41 e7 01 00 00  |Wrap....DATA....|
0001cd10  41 70 70 45 6e 67 69 6e  65 5f 48 65 61 70 20 30  |AppEngine_Heap 0|
0001cd20  20 20 28 26 34 44 39 34  39 29 0a 23 50 61 72 65  |  (&4D949).#Pare|
0001cd30  6e 74 20 41 70 70 45 6e  67 69 6e 65 5f 48 65 61  |nt AppEngine_Hea|
0001cd40  70 0a 3d 3e 09 52 30 20  3d 09 30 0a 09 52 31 20  |p.=>.R0 =.0..R1 |
0001cd50  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
0001cd60  72 65 73 73 20 74 6f 20  63 72 65 61 74 65 20 68  |ress to create h|
0001cd70  65 61 70 20 61 74 20 28  75 73 75 61 6c 6c 79 20  |eap at (usually |
0001cd80  3d 48 49 4d 45 4d 29 2c  0a 09 20 09 6f 72 20 7a  |=HIMEM),.. .or z|
0001cd90  65 72 6f 20 74 6f 20 63  72 65 61 74 65 20 61 20  |ero to create a |
0001cda0  64 79 6e 61 6d 69 63 20  61 72 65 61 20 66 6f 72  |dynamic area for|
0001cdb0  20 74 68 65 20 68 65 61  70 0a 09 52 32 20 3d 09  | the heap..R2 =.|
0001cdc0  70 6f 69 6e 74 65 72 20  74 6f 20 61 20 6e 61 6d  |pointer to a nam|
0001cdd0  65 20 66 6f 72 20 74 68  65 20 64 79 6e 61 6d 69  |e for the dynami|
0001cde0  63 20 61 72 65 61 20 28  69 66 20 52 31 3d 30 29  |c area (if R1=0)|
0001cdf0  0a 0a 3c 3d 09 52 31 20  3d 09 70 6f 69 6e 74 65  |..<=.R1 =.pointe|
0001ce00  72 20 74 6f 20 68 65 61  70 0a 0a 54 68 69 73 20  |r to heap..This |
0001ce10  63 61 6c 6c 20 69 73 20  75 73 65 64 20 74 6f 20  |call is used to |
0001ce20  63 72 65 61 74 65 20 61  20 6e 65 77 20 68 65 61  |create a new hea|
0001ce30  70 2c 20 65 69 74 68 65  72 20 61 74 20 74 68 65  |p, either at the|
0001ce40  20 65 6e 64 20 6f 66 20  61 70 70 6c 69 63 61 74  | end of applicat|
0001ce50  69 6f 6e 20 6d 65 6d 6f  72 79 20 6f 72 20 69 6e  |ion memory or in|
0001ce60  20 61 20 6e 65 77 20 64  79 6e 61 6d 69 63 20 61  | a new dynamic a|
0001ce70  72 65 61 2e 0a 0a 54 68  65 20 68 65 61 70 20 6d  |rea...The heap m|
0001ce80  61 6e 61 67 65 72 20 77  69 6c 6c 20 61 75 74 6f  |anager will auto|
0001ce90  6d 61 74 69 63 61 6c 6c  79 20 63 6c 61 69 6d 20  |matically claim |
0001cea0  74 68 65 20 72 65 71 75  69 72 65 64 20 61 6d 6f  |the required amo|
0001ceb0  75 6e 74 20 6f 66 20 6d  65 6d 6f 72 79 20 66 72  |unt of memory fr|
0001cec0  6f 6d 20 74 68 65 20 66  72 65 65 20 70 6f 6f 6c  |om the free pool|
0001ced0  20 74 6f 20 73 65 74 20  75 70 20 74 68 65 20 68  | to set up the h|
0001cee0  65 61 70 20 73 74 72 75  63 74 75 72 65 2e 0a 00  |eap structure...|
0001cef0  44 41 54 41 ef 00 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
0001cf00  65 5f 48 65 61 70 20 31  20 20 28 26 34 44 39 34  |e_Heap 1  (&4D94|
0001cf10  39 29 0a 23 50 61 72 65  6e 74 20 41 70 70 45 6e  |9).#Parent AppEn|
0001cf20  67 69 6e 65 5f 48 65 61  70 0a 3d 3e 09 52 30 20  |gine_Heap.=>.R0 |
0001cf30  3d 09 31 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.1..R1 =.pointe|
0001cf40  72 20 74 6f 20 68 65 61  70 0a 0a 3c 3d 09 52 31  |r to heap..<=.R1|
0001cf50  20 3d 09 30 20 28 69 2e  65 2e 20 68 65 61 70 20  | =.0 (i.e. heap |
0001cf60  74 6f 20 72 65 74 75 72  6e 29 0a 0a 54 68 69 73  |to return)..This|
0001cf70  20 63 61 6c 6c 20 69 73  20 75 73 65 64 20 74 6f  | call is used to|
0001cf80  20 64 65 6c 65 74 65 20  74 68 65 20 73 70 65 63  | delete the spec|
0001cf90  69 66 69 65 64 20 68 65  61 70 2e 20 20 41 6c 6c  |ified heap.  All|
0001cfa0  20 6d 65 6d 6f 72 79 20  61 73 73 6f 63 69 61 74  | memory associat|
0001cfb0  65 64 20 77 69 74 68 20  74 68 65 20 68 65 61 70  |ed with the heap|
0001cfc0  20 69 73 20 72 65 74 75  72 6e 65 64 20 74 6f 20  | is returned to |
0001cfd0  74 68 65 20 66 72 65 65  20 70 6f 6f 6c 2e 0a 00  |the free pool...|
0001cfe0  44 41 54 41 3b 02 00 00  41 70 70 45 6e 67 69 6e  |DATA;...AppEngin|
0001cff0  65 5f 48 65 61 70 20 32  20 20 28 26 34 44 39 34  |e_Heap 2  (&4D94|
0001d000  39 29 0a 23 50 61 72 65  6e 74 20 41 70 70 45 6e  |9).#Parent AppEn|
0001d010  67 69 6e 65 5f 48 65 61  70 0a 3d 3e 09 52 30 20  |gine_Heap.=>.R0 |
0001d020  3d 09 32 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.2..R1 =.pointe|
0001d030  72 20 74 6f 20 68 65 61  70 0a 09 52 32 20 3d 09  |r to heap..R2 =.|
0001d040  73 69 7a 65 20 6f 66 20  62 6c 6f 63 6b 20 72 65  |size of block re|
0001d050  71 75 69 72 65 64 20 28  62 79 74 65 73 29 0a 0a  |quired (bytes)..|
0001d060  3c 3d 09 52 31 20 3d 09  70 6f 69 6e 74 65 72 20  |<=.R1 =.pointer |
0001d070  74 6f 20 61 6e 63 68 6f  72 0a 0a 54 68 69 73 20  |to anchor..This |
0001d080  63 61 6c 6c 20 69 73 20  75 73 65 64 20 74 6f 20  |call is used to |
0001d090  63 6c 61 69 6d 20 61 20  62 6c 6f 63 6b 20 6f 66  |claim a block of|
0001d0a0  20 6d 65 6d 6f 72 79 20  66 72 6f 6d 20 74 68 65  | memory from the|
0001d0b0  20 68 65 61 70 2e 0a 0a  54 68 65 20 73 69 7a 65  | heap...The size|
0001d0c0  20 6f 66 20 74 68 65 20  62 6c 6f 63 6b 20 63 6c  | of the block cl|
0001d0d0  61 69 6d 65 64 20 77 69  6c 6c 20 61 6c 77 61 79  |aimed will alway|
0001d0e0  73 20 62 65 20 72 6f 75  6e 64 65 64 20 75 70 20  |s be rounded up |
0001d0f0  74 6f 20 61 74 20 6c 65  61 73 74 20 74 68 65 20  |to at least the |
0001d100  6e 65 61 72 65 73 74 20  6d 75 6c 74 69 70 6c 65  |nearest multiple|
0001d110  20 6f 66 20 66 6f 75 72  20 62 79 74 65 73 2e 0a  | of four bytes..|
0001d120  0a 54 68 65 20 63 61 6c  6c 20 72 65 74 75 72 6e  |.The call return|
0001d130  73 20 61 20 70 6f 69 6e  74 65 72 20 74 6f 20 61  |s a pointer to a|
0001d140  20 77 6f 72 64 20 68 6f  6c 64 69 6e 67 20 74 68  | word holding th|
0001d150  65 20 61 64 64 72 65 73  73 20 6f 66 20 74 68 65  |e address of the|
0001d160  20 62 6c 6f 63 6b 2c 20  73 6f 20 69 6e 20 42 41  | block, so in BA|
0001d170  53 49 43 20 74 65 72 6d  73 20 62 6c 6f 63 6b 5f  |SIC terms block_|
0001d180  61 64 64 72 65 73 73 25  3d 21 61 6e 63 68 6f 72  |address%=!anchor|
0001d190  25 2e 20 20 42 6c 6f 63  6b 73 20 63 61 6e 20 6d  |%.  Blocks can m|
0001d1a0  6f 76 65 20 61 62 6f 75  74 20 69 6e 20 72 65 73  |ove about in res|
0001d1b0  70 6f 6e 73 65 20 74 6f  20 2a 61 6e 79 2a 20 68  |ponse to *any* h|
0001d1c0  65 61 70 20 6f 70 65 72  61 74 69 6f 6e 2c 20 73  |eap operation, s|
0001d1d0  6f 20 79 6f 75 20 6d 75  73 74 20 65 6e 73 75 72  |o you must ensur|
0001d1e0  65 20 79 6f 75 72 20 62  6c 6f 63 6b 5f 61 64 64  |e your block_add|
0001d1f0  72 65 73 73 25 20 69 73  20 75 70 64 61 74 65 64  |ress% is updated|
0001d200  20 61 66 74 65 72 20 61  6e 79 20 68 65 61 70 20  | after any heap |
0001d210  6f 70 65 72 61 74 69 6f  6e 2e 0a 00 44 41 54 41  |operation...DATA|
0001d220  10 01 00 00 41 70 70 45  6e 67 69 6e 65 5f 48 65  |....AppEngine_He|
0001d230  61 70 20 33 20 20 28 26  34 44 39 34 39 29 0a 23  |ap 3  (&4D949).#|
0001d240  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
0001d250  5f 48 65 61 70 0a 3d 3e  09 52 30 20 3d 09 33 0a  |_Heap.=>.R0 =.3.|
0001d260  09 52 31 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R1 =.pointer to|
0001d270  20 68 65 61 70 0a 09 52  32 20 3d 09 70 6f 69 6e  | heap..R2 =.poin|
0001d280  74 65 72 20 74 6f 20 61  6e 63 68 6f 72 0a 0a 3c  |ter to anchor..<|
0001d290  3d 09 52 31 20 3d 09 30  20 28 69 2e 65 2e 20 61  |=.R1 =.0 (i.e. a|
0001d2a0  6e 63 68 6f 72 20 74 6f  20 72 65 74 75 72 6e 29  |nchor to return)|
0001d2b0  0a 0a 54 68 69 73 20 63  61 6c 6c 20 69 73 20 75  |..This call is u|
0001d2c0  73 65 64 20 74 6f 20 72  65 6c 65 61 73 65 20 61  |sed to release a|
0001d2d0  20 62 6c 6f 63 6b 20 6f  66 20 6d 65 6d 6f 72 79  | block of memory|
0001d2e0  20 66 72 6f 6d 20 74 68  65 20 68 65 61 70 2c 20  | from the heap, |
0001d2f0  61 6e 64 20 72 65 74 75  72 6e 20 74 68 65 20 72  |and return the r|
0001d300  65 73 75 6c 74 61 6e 74  20 66 72 65 65 20 6d 65  |esultant free me|
0001d310  6d 6f 72 79 20 62 61 63  6b 20 74 6f 20 74 68 65  |mory back to the|
0001d320  20 66 72 65 65 20 70 6f  6f 6c 2e 0a 44 41 54 41  | free pool..DATA|
0001d330  2d 03 00 00 41 70 70 45  6e 67 69 6e 65 5f 48 65  |-...AppEngine_He|
0001d340  61 70 20 34 20 20 28 26  34 44 39 34 39 29 0a 23  |ap 4  (&4D949).#|
0001d350  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
0001d360  5f 48 65 61 70 0a 3d 3e  09 52 30 20 3d 09 34 0a  |_Heap.=>.R0 =.4.|
0001d370  09 52 31 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R1 =.pointer to|
0001d380  20 68 65 61 70 0a 09 52  32 20 3d 09 70 6f 69 6e  | heap..R2 =.poin|
0001d390  74 65 72 20 74 6f 20 61  6e 63 68 6f 72 0a 09 52  |ter to anchor..R|
0001d3a0  33 20 3d 09 62 79 74 65  73 20 74 6f 20 62 65 20  |3 =.bytes to be |
0001d3b0  61 64 64 65 64 20 6f 72  20 72 65 6d 6f 76 65 64  |added or removed|
0001d3c0  20 66 72 6f 6d 20 74 68  65 20 65 6e 64 20 6f 66  | from the end of|
0001d3d0  20 74 68 65 20 73 70 65  63 69 66 69 65 64 20 62  | the specified b|
0001d3e0  6c 6f 63 6b 20 28 61 20  73 69 67 6e 65 64 20 69  |lock (a signed i|
0001d3f0  6e 74 65 67 65 72 29 0a  0a 3c 3d 09 52 31 20 3d  |nteger)..<=.R1 =|
0001d400  09 2d 31 20 66 6f 72 20  73 75 63 63 65 73 73 2c  |.-1 for success,|
0001d410  20 30 20 66 6f 72 20 66  61 69 6c 75 72 65 0a 0a  | 0 for failure..|
0001d420  54 68 69 73 20 63 61 6c  6c 20 69 73 20 75 73 65  |This call is use|
0001d430  64 20 74 6f 20 61 64 64  20 28 52 33 20 70 6f 73  |d to add (R3 pos|
0001d440  69 74 69 76 65 29 20 6f  72 20 72 65 6d 6f 76 65  |itive) or remove|
0001d450  20 28 52 33 20 6e 65 67  61 74 69 76 65 29 20 6d  | (R3 negative) m|
0001d460  65 6d 6f 72 79 20 74 6f  2f 66 72 6f 6d 20 74 68  |emory to/from th|
0001d470  65 20 65 6e 64 20 6f 66  20 74 68 65 20 73 70 65  |e end of the spe|
0001d480  63 69 66 69 65 64 20 62  6c 6f 63 6b 2e 0a 0a 49  |cified block...I|
0001d490  66 20 61 64 64 69 6e 67  20 74 6f 20 61 20 62 6c  |f adding to a bl|
0001d4a0  6f 63 6b 2c 20 74 68 65  6e 20 6f 6e 20 72 65 74  |ock, then on ret|
0001d4b0  75 72 6e 20 52 31 20 68  6f 6c 64 73 20 61 20 76  |urn R1 holds a v|
0001d4c0  61 6c 75 65 20 69 6e 64  69 63 61 74 69 6e 67 20  |alue indicating |
0001d4d0  77 68 65 74 68 65 72 20  74 68 65 20 6f 70 65 72  |whether the oper|
0001d4e0  61 74 69 6f 6e 20 77 61  73 20 73 75 63 63 65 73  |ation was succes|
0001d4f0  73 66 75 6c 20 6f 72 20  6e 6f 74 2e 0a 0a 49 66  |sful or not...If|
0001d500  20 72 65 6d 6f 76 69 6e  67 20 66 72 6f 6d 20 61  | removing from a|
0001d510  20 62 6c 6f 63 6b 2c 20  74 68 65 6e 20 74 68 65  | block, then the|
0001d520  20 72 65 73 75 6c 74 61  6e 74 20 66 72 65 65 20  | resultant free |
0001d530  6d 65 6d 6f 72 79 20 69  73 20 72 65 74 75 72 6e  |memory is return|
0001d540  65 64 20 62 61 63 6b 20  74 6f 20 74 68 65 20 66  |ed back to the f|
0001d550  72 65 65 20 70 6f 6f 6c  2e 0a 0a 4e 6f 74 65 20  |ree pool...Note |
0001d560  74 68 61 74 20 61 73 20  77 69 74 68 20 74 68 65  |that as with the|
0001d570  20 63 6c 61 69 6d 20 6f  70 65 72 61 74 69 6f 6e  | claim operation|
0001d580  2c 20 62 6c 6f 63 6b 20  73 69 7a 65 73 20 61 72  |, block sizes ar|
0001d590  65 20 72 6f 75 6e 64 65  64 20 2a 75 70 2a 20 74  |e rounded *up* t|
0001d5a0  6f 20 61 74 20 6c 65 61  73 74 20 74 68 65 20 6e  |o at least the n|
0001d5b0  65 61 72 65 73 74 20 6d  75 6c 74 69 70 6c 65 20  |earest multiple |
0001d5c0  6f 66 20 66 6f 75 72 20  62 79 74 65 73 2e 20 20  |of four bytes.  |
0001d5d0  54 68 69 73 20 6d 65 61  6e 73 20 74 68 61 74 20  |This means that |
0001d5e0  69 66 20 79 6f 75 20 74  72 79 20 74 6f 20 72 65  |if you try to re|
0001d5f0  6d 6f 76 65 2c 20 73 61  79 2c 20 33 20 62 79 74  |move, say, 3 byt|
0001d600  65 73 20 66 72 6f 6d 20  61 20 62 6c 6f 63 6b 20  |es from a block |
0001d610  28 52 33 20 3d 20 2d 33  29 20 74 68 65 6e 20 2a  |(R3 = -3) then *|
0001d620  6e 6f 74 68 69 6e 67 2a  20 77 69 6c 6c 20 62 65  |nothing* will be|
0001d630  20 72 65 6d 6f 76 65 64  20 73 69 6e 63 65 20 2d  | removed since -|
0001d640  33 20 69 73 20 72 6f 75  6e 64 65 64 20 75 70 20  |3 is rounded up |
0001d650  74 6f 20 7a 65 72 6f 2e  0a 00 00 00 44 41 54 41  |to zero.....DATA|
0001d660  27 0c 00 00 41 70 70 45  6e 67 69 6e 65 5f 48 65  |'...AppEngine_He|
0001d670  61 70 20 20 28 26 34 44  39 34 39 29 0a 23 50 61  |ap  (&4D949).#Pa|
0001d680  72 65 6e 74 20 41 70 70  45 6e 67 69 6e 65 5f 0a  |rent AppEngine_.|
0001d690  49 6e 74 72 6f 64 75 63  74 69 6f 6e 0a 0a 41 70  |Introduction..Ap|
0001d6a0  70 45 6e 67 69 6e 65 20  70 72 6f 76 69 64 65 73  |pEngine provides|
0001d6b0  20 61 20 90 67 61 72 62  61 67 65 20 63 6f 6c 6c  | a .garbage coll|
0001d6c0  65 63 74 69 6e 67 91 20  68 65 61 70 20 6d 61 6e  |ecting. heap man|
0001d6d0  61 67 65 72 2e 20 20 54  68 69 73 20 69 73 20 75  |ager.  This is u|
0001d6e0  6e 6c 69 6b 65 20 52 49  53 43 20 4f 53 27 73 20  |nlike RISC OS's |
0001d6f0  6f 77 6e 20 3c 4f 53 5f  48 65 61 70 3d 3e 4f 53  |own <OS_Heap=>OS|
0001d700  3a 4f 53 5f 48 65 61 70  3e 20 68 65 61 70 20 6d  |:OS_Heap> heap m|
0001d710  61 6e 61 67 65 72 20 69  6e 20 74 68 61 74 20 69  |anager in that i|
0001d720  74 20 65 6e 73 75 72 65  73 20 61 6e 79 20 75 6e  |t ensures any un|
0001d730  75 73 65 64 20 6d 65 6d  6f 72 79 20 69 6e 73 69  |used memory insi|
0001d740  64 65 20 74 68 65 20 68  65 61 70 20 69 73 20 72  |de the heap is r|
0001d750  65 74 75 72 6e 65 64 20  74 6f 20 74 68 65 20 66  |eturned to the f|
0001d760  72 65 65 20 6d 65 6d 6f  72 79 20 70 6f 6f 6c 2e  |ree memory pool.|
0001d770  0a 0a 54 68 69 73 20 69  73 20 61 63 68 69 65 76  |..This is achiev|
0001d780  65 64 20 62 79 20 61 6c  6c 6f 77 69 6e 67 20 62  |ed by allowing b|
0001d790  6c 6f 63 6b 73 20 63 6c  61 69 6d 65 64 20 66 72  |locks claimed fr|
0001d7a0  6f 6d 20 74 68 65 20 68  65 61 70 20 74 6f 20 90  |om the heap to .|
0001d7b0  66 6c 6f 61 74 91 20 28  6d 6f 76 65 20 61 62 6f  |float. (move abo|
0001d7c0  75 74 20 77 69 74 68 69  6e 20 74 68 65 20 68 65  |ut within the he|
0001d7d0  61 70 29 20 61 6e 64 20  62 79 20 72 65 66 65 72  |ap) and by refer|
0001d7e0  65 6e 63 69 6e 67 20 65  61 63 68 20 6f 66 20 74  |encing each of t|
0001d7f0  68 65 20 62 6c 6f 63 6b  73 20 69 6e 64 69 72 65  |he blocks indire|
0001d800  63 74 6c 79 20 76 69 61  20 61 20 66 69 78 65 64  |ctly via a fixed|
0001d810  20 61 64 64 72 65 73 73  20 6b 6e 6f 77 6e 20 61  | address known a|
0001d820  73 20 61 6e 20 90 61 6e  63 68 6f 72 91 2e 20 20  |s an .anchor..  |
0001d830  44 6f 69 6e 67 20 74 68  69 73 20 61 6c 6c 6f 77  |Doing this allow|
0001d840  73 20 74 68 65 20 68 65  61 70 20 6d 61 6e 61 67  |s the heap manag|
0001d850  65 72 20 74 6f 20 73 71  75 65 65 7a 65 20 6f 75  |er to squeeze ou|
0001d860  74 20 61 6e 79 20 66 72  65 65 20 73 70 61 63 65  |t any free space|
0001d870  20 66 72 6f 6d 20 74 68  65 20 68 65 61 70 20 77  | from the heap w|
0001d880  69 74 68 6f 75 74 20 74  68 69 73 20 61 66 66 65  |ithout this affe|
0001d890  63 74 69 6e 67 20 74 68  65 20 63 6c 69 65 6e 74  |cting the client|
0001d8a0  20 61 70 70 6c 69 63 61  74 69 6f 6e 2e 0a 0a 41  | application...A|
0001d8b0  6e 79 20 68 65 61 70 20  6f 70 65 72 61 74 69 6f  |ny heap operatio|
0001d8c0  6e 20 63 61 6e 20 63 61  75 73 65 20 74 68 65 20  |n can cause the |
0001d8d0  62 6c 6f 63 6b 73 91 20  70 6f 73 69 74 69 6f 6e  |blocks. position|
0001d8e0  20 69 6e 20 6d 65 6d 6f  72 79 20 74 6f 20 6d 6f  | in memory to mo|
0001d8f0  76 65 2e 0a 0a 4f 6e 65  20 64 69 66 66 65 72 65  |ve...One differe|
0001d900  6e 63 65 20 62 65 74 77  65 65 6e 20 74 68 69 73  |nce between this|
0001d910  20 68 65 61 70 20 6d 61  6e 61 67 65 72 20 61 6e  | heap manager an|
0001d920  64 20 6f 74 68 65 72 73  20 69 73 20 74 68 61 74  |d others is that|
0001d930  20 74 68 69 73 20 6f 6e  65 20 6e 65 76 65 72 20  | this one never |
0001d940  61 6c 6c 6f 77 73 20 67  61 70 73 20 6f 66 20 66  |allows gaps of f|
0001d950  72 65 65 20 73 70 61 63  65 20 74 6f 20 61 70 70  |ree space to app|
0001d960  65 61 72 20 69 6e 62 65  74 77 65 65 6e 20 74 68  |ear inbetween th|
0001d970  65 20 62 6c 6f 63 6b 73  2e 20 20 41 73 20 73 6f  |e blocks.  As so|
0001d980  6f 6e 20 61 73 20 61 6e  79 20 66 72 65 65 20 73  |on as any free s|
0001d990  70 61 63 65 20 69 73 20  63 72 65 61 74 65 64 2c  |pace is created,|
0001d9a0  20 74 68 65 6e 20 74 68  65 20 68 65 61 70 20 6d  | then the heap m|
0001d9b0  61 6e 61 67 65 72 20 77  69 6c 6c 20 72 65 61 72  |anager will rear|
0001d9c0  72 61 6e 67 65 20 74 68  65 20 68 65 61 70 20 73  |range the heap s|
0001d9d0  75 63 68 20 74 68 61 74  20 74 68 65 20 62 6c 6f  |uch that the blo|
0001d9e0  63 6b 20 6f 66 20 66 72  65 65 20 73 70 61 63 65  |ck of free space|
0001d9f0  20 69 73 20 72 65 6d 6f  76 65 64 2e 20 20 54 68  | is removed.  Th|
0001da00  69 73 20 6d 65 61 6e 73  20 74 68 61 74 20 74 68  |is means that th|
0001da10  65 20 68 65 61 70 20 69  73 20 61 6c 77 61 79 73  |e heap is always|
0001da20  20 6b 65 70 74 20 61 74  20 69 74 73 20 73 6d 61  | kept at its sma|
0001da30  6c 6c 65 73 74 20 70 6f  73 73 69 62 6c 65 20 73  |llest possible s|
0001da40  69 7a 65 2e 0a 0a 41 6e  63 68 6f 72 73 0a 0a 41  |ize...Anchors..A|
0001da50  6e 63 68 6f 72 73 20 61  72 65 20 6c 6f 63 61 74  |nchors are locat|
0001da60  65 64 20 61 74 20 74 68  65 20 62 61 73 65 20 6f  |ed at the base o|
0001da70  66 20 74 68 65 20 68 65  61 70 20 69 6d 6d 65 64  |f the heap immed|
0001da80  69 61 74 65 6c 79 20 62  65 66 6f 72 65 20 74 68  |iately before th|
0001da90  65 20 62 6c 6f 63 6b 73  2e 20 20 49 6e 69 74 69  |e blocks.  Initi|
0001daa0  61 6c 6c 79 20 74 68 65  20 68 65 61 70 20 6d 61  |ally the heap ma|
0001dab0  6e 61 67 65 72 20 61 6c  6c 6f 63 61 74 65 73 20  |nager allocates |
0001dac0  65 6e 6f 75 67 68 20 73  70 61 63 65 20 66 6f 72  |enough space for|
0001dad0  20 65 69 67 68 74 20 61  6e 63 68 6f 72 73 20 61  | eight anchors a|
0001dae0  6e 64 20 68 65 6e 63 65  20 65 69 67 68 74 20 68  |nd hence eight h|
0001daf0  65 61 70 2d 6d 61 6e 61  67 65 64 20 62 6c 6f 63  |eap-managed bloc|
0001db00  6b 73 2e 20 20 49 66 20  79 6f 75 20 63 6c 61 69  |ks.  If you clai|
0001db10  6d 20 61 20 6e 69 6e 74  68 20 62 6c 6f 63 6b 2c  |m a ninth block,|
0001db20  20 74 68 65 6e 20 74 68  65 20 68 65 61 70 20 6d  | then the heap m|
0001db30  61 6e 61 67 65 72 20 77  69 6c 6c 20 6d 61 6b 65  |anager will make|
0001db40  20 73 70 61 63 65 20 66  6f 72 20 65 69 67 68 74  | space for eight|
0001db50  20 6d 6f 72 65 20 61 6e  63 68 6f 72 73 2c 20 61  | more anchors, a|
0001db60  6e 64 20 73 6f 20 6f 6e  2e 20 20 48 6f 77 65 76  |nd so on.  Howev|
0001db70  65 72 20 28 69 6e 20 74  68 69 73 20 76 65 72 73  |er (in this vers|
0001db80  69 6f 6e 29 20 74 68 69  73 20 6d 65 6d 6f 72 79  |ion) this memory|
0001db90  20 69 73 20 2a 6e 6f 74  2a 20 61 75 74 6f 6d 61  | is *not* automa|
0001dba0  74 69 63 61 6c 6c 79 20  72 65 74 75 72 6e 65 64  |tically returned|
0001dbb0  20 74 6f 20 74 68 65 20  66 72 65 65 20 70 6f 6f  | to the free poo|
0001dbc0  6c 2e 0a 0a 46 6f 72 20  74 68 69 73 20 72 65 61  |l...For this rea|
0001dbd0  73 6f 6e 20 69 74 20 69  73 20 73 74 72 6f 6e 67  |son it is strong|
0001dbe0  6c 79 20 72 65 63 6f 6d  6d 65 6e 64 65 64 20 74  |ly recommended t|
0001dbf0  68 61 74 20 79 6f 75 20  73 68 6f 75 6c 64 20 6d  |hat you should m|
0001dc00  61 69 6e 74 61 69 6e 20  61 20 90 62 6c 6f 63 6b  |aintain a .block|
0001dc10  73 5f 61 6c 6c 6f 63 61  74 65 64 91 20 63 6f 75  |s_allocated. cou|
0001dc20  6e 74 65 72 20 69 6e 20  79 6f 75 72 20 6f 77 6e  |nter in your own|
0001dc30  20 68 65 61 70 20 69 6e  74 65 72 66 61 63 65 20  | heap interface |
0001dc40  63 6f 64 65 2c 20 61 6e  64 20 77 68 65 6e 20 69  |code, and when i|
0001dc50  74 20 62 65 63 6f 6d 65  73 20 7a 65 72 6f 2c 20  |t becomes zero, |
0001dc60  79 6f 75 20 73 68 6f 75  6c 64 20 64 65 6c 65 74  |you should delet|
0001dc70  65 20 74 68 65 20 68 65  61 70 2e 20 20 57 68 65  |e the heap.  Whe|
0001dc80  6e 20 61 20 63 6c 61 69  6d 20 66 6f 72 20 61 20  |n a claim for a |
0001dc90  62 6c 6f 63 6b 20 69 73  20 6d 61 64 65 20 61 6e  |block is made an|
0001dca0  64 20 62 6c 6f 63 6b 73  5f 61 6c 6c 6f 63 61 74  |d blocks_allocat|
0001dcb0  65 64 20 69 73 20 7a 65  72 6f 2c 20 79 6f 75 20  |ed is zero, you |
0001dcc0  73 68 6f 75 6c 64 20 28  72 65 2d 29 63 72 65 61  |should (re-)crea|
0001dcd0  74 65 20 74 68 65 20 68  65 61 70 2e 0a 0a 57 61  |te the heap...Wa|
0001dce0  72 6e 69 6e 67 73 0a 0a  69 2e 09 57 68 65 6e 20  |rnings..i..When |
0001dcf0  74 68 65 20 68 65 61 70  20 6d 61 6e 61 67 65 72  |the heap manager|
0001dd00  20 69 73 20 61 63 74 69  76 65 20 61 6e 64 20 69  | is active and i|
0001dd10  73 20 72 65 73 69 64 69  6e 67 20 61 74 20 74 68  |s residing at th|
0001dd20  65 20 74 6f 70 20 6f 66  20 79 6f 75 72 20 61 70  |e top of your ap|
0001dd30  70 6c 69 63 61 74 69 6f  6e 27 73 20 73 6c 6f 74  |plication's slot|
0001dd40  2c 20 79 6f 75 20 73 68  6f 75 6c 64 20 2a 6e 65  |, you should *ne|
0001dd50  76 65 72 2a 20 75 73 65  20 57 69 6d 70 5f 53 6c  |ver* use Wimp_Sl|
0001dd60  6f 74 53 69 7a 65 20 28  6f 72 20 45 4e 44 3d 20  |otSize (or END= |
0001dd70  69 6e 09 42 41 53 49 43  20 73 69 6e 63 65 20 74  |in.BASIC since t|
0001dd80  68 61 74 20 63 61 6c 6c  73 20 57 69 6d 70 5f 53  |hat calls Wimp_S|
0001dd90  6c 6f 74 53 69 7a 65 29  2e 20 20 4e 65 69 74 68  |lotSize).  Neith|
0001dda0  65 72 20 73 68 6f 75 6c  64 20 79 6f 75 20 61 74  |er should you at|
0001ddb0  74 65 6d 70 74 20 74 6f  20 73 74 6f 72 65 20 61  |tempt to store a|
0001ddc0  6e 79 74 68 69 6e 67 20  61 62 6f 76 65 20 74 68  |nything above th|
0001ddd0  65 20 68 65 61 70 2e 0a  0a 69 69 2e 09 45 78 65  |e heap...ii..Exe|
0001dde0  63 75 74 61 62 6c 65 20  63 6f 64 65 20 6d 61 79  |cutable code may|
0001ddf0  20 6e 6f 74 20 62 65 20  63 6f 6e 74 61 69 6e 65  | not be containe|
0001de00  64 20 69 6e 20 64 79 6e  61 6d 69 63 20 61 72 65  |d in dynamic are|
0001de10  61 73 2c 20 73 6f 20 79  6f 75 20 73 68 6f 75 6c  |as, so you shoul|
0001de20  64 20 61 76 6f 69 64 20  6b 65 65 70 69 6e 67 20  |d avoid keeping |
0001de30  63 6f 64 65 20 69 6e 20  61 20 68 65 61 70 2d 6d  |code in a heap-m|
0001de40  61 6e 61 67 65 64 20 62  6c 6f 63 6b 2e 0a 0a 69  |anaged block...i|
0001de50  69 69 2e 09 54 68 65 20  69 6e 74 65 72 6e 61 6c  |ii..The internal|
0001de60  20 73 74 72 75 63 74 75  72 65 20 6f 66 20 74 68  | structure of th|
0001de70  65 20 68 65 61 70 20 77  69 6c 6c 20 6e 6f 74 20  |e heap will not |
0001de80  62 65 20 64 6f 63 75 6d  65 6e 74 65 64 20 68 65  |be documented he|
0001de90  72 65 2e 20 20 54 6f 20  65 6e 73 75 72 65 20 66  |re.  To ensure f|
0001dea0  75 74 75 72 65 20 63 6f  6d 70 61 74 69 62 69 6c  |uture compatibil|
0001deb0  69 74 79 20 79 6f 75 20  73 68 6f 75 6c 64 20 6f  |ity you should o|
0001dec0  6e 6c 79 20 75 73 65 20  74 68 65 20 64 65 66 69  |nly use the defi|
0001ded0  6e 65 64 20 73 6f 66 74  77 61 72 65 20 69 6e 74  |ned software int|
0001dee0  65 72 66 61 63 65 73 2e  0a 0a 4e 6f 74 65 73 0a  |erfaces...Notes.|
0001def0  0a 69 2e 09 54 68 65 20  68 65 61 70 20 6d 61 6e  |.i..The heap man|
0001df00  61 67 65 72 20 69 73 20  76 65 72 79 20 66 72 75  |ager is very fru|
0001df10  67 61 6c 2c 20 69 74 20  64 6f 65 73 6e 91 74 20  |gal, it doesn.t |
0001df20  61 6c 69 67 6e 20 62 6c  6f 63 6b 73 20 6f 72 20  |align blocks or |
0001df30  62 6c 6f 63 6b 20 73 69  7a 65 73 20 74 6f 20 31  |block sizes to 1|
0001df40  36 2d 62 79 74 65 20 62  6f 75 6e 64 61 72 69 65  |6-byte boundarie|
0001df50  73 20 61 73 20 73 6f 6d  65 20 6f 74 68 65 72 73  |s as some others|
0001df60  20 64 6f 2e 0a 0a 69 69  2e 09 49 74 20 69 73 20  | do...ii..It is |
0001df70  77 72 69 74 74 65 6e 20  69 6e 20 31 30 30 25 20  |written in 100% |
0001df80  68 61 6e 64 2d 63 72 61  66 74 65 64 20 61 73 73  |hand-crafted ass|
0001df90  65 6d 62 6c 65 72 20 61  6e 64 20 49 27 76 65 20  |embler and I've |
0001dfa0  6f 70 74 69 6d 69 73 65  64 20 63 65 72 74 61 69  |optimised certai|
0001dfb0  6e 20 70 61 72 74 73 20  6f 66 20 69 74 20 66 6f  |n parts of it fo|
0001dfc0  72 20 74 68 65 20 53 74  72 6f 6e 67 41 52 4d 2c  |r the StrongARM,|
0001dfd0  20 64 65 73 70 69 74 65  20 6e 6f 74 20 6f 77 6e  | despite not own|
0001dfe0  69 6e 67 20 6f 6e 65 2e  20 28 49 6e 20 66 61 63  |ing one. (In fac|
0001dff0  74 20 69 74 20 77 61 73  20 77 72 69 74 74 65 6e  |t it was written|
0001e000  20 6f 6e 20 6d 79 20 32  4d 62 20 41 52 4d 20 32  | on my 2Mb ARM 2|
0001e010  20 41 33 30 30 30 2e 20  3a 2d 29 0a 0a 69 69 69  | A3000. :-)..iii|
0001e020  2e 09 49 74 20 69 73 20  63 6f 64 65 64 20 74 6f  |..It is coded to|
0001e030  20 77 6f 72 6b 20 69 66  20 75 73 69 6e 67 20 6d  | work if using m|
0001e040  65 6d 6f 72 79 20 61 62  6f 76 65 20 32 47 62 2c  |emory above 2Gb,|
0001e050  20 77 68 69 63 68 20 49  20 75 6e 64 65 72 73 74  | which I underst|
0001e060  61 6e 64 20 77 69 6c 6c  20 68 61 70 70 65 6e 20  |and will happen |
0001e070  69 66 20 79 6f 75 20 68  61 76 65 20 31 32 38 4d  |if you have 128M|
0001e080  62 20 6f 72 20 6d 6f 72  65 20 6d 65 6d 6f 72 79  |b or more memory|
0001e090  20 28 74 68 69 73 20 72  65 6d 61 69 6e 73 20 75  | (this remains u|
0001e0a0  6e 74 65 73 74 65 64 29  2e 0a 0a 45 78 61 6d 70  |ntested)...Examp|
0001e0b0  6c 65 0a 7b 66 43 6f 64  65 7d 0a 52 45 4d 20 43  |le.{fCode}.REM C|
0001e0c0  72 65 61 74 65 20 61 20  68 65 61 70 20 72 65 73  |reate a heap res|
0001e0d0  69 64 69 6e 67 20 61 62  6f 76 65 20 42 41 53 49  |iding above BASI|
0001e0e0  43 27 73 20 77 6f 72 6b  73 70 61 63 65 0a 53 59  |C's workspace.SY|
0001e0f0  53 20 22 41 70 70 45 6e  67 69 6e 65 5f 48 65 61  |S "AppEngine_Hea|
0001e100  70 22 2c 30 2c 48 49 4d  45 4d 2c 22 22 20 54 4f  |p",0,HIMEM,"" TO|
0001e110  20 2c 68 65 61 70 25 0a  0a 52 45 4d 20 43 6c 61  | ,heap%..REM Cla|
0001e120  69 6d 20 61 20 32 30 30  30 20 62 79 74 65 20 62  |im a 2000 byte b|
0001e130  6c 6f 63 6b 0a 53 59 53  20 22 41 70 70 45 6e 67  |lock.SYS "AppEng|
0001e140  69 6e 65 5f 48 65 61 70  22 2c 32 2c 68 65 61 70  |ine_Heap",2,heap|
0001e150  25 2c 32 30 30 30 20 54  4f 20 2c 61 6e 63 68 6f  |%,2000 TO ,ancho|
0001e160  72 25 0a 0a 52 45 4d 20  46 69 6e 64 20 74 68 65  |r%..REM Find the|
0001e170  20 62 61 73 65 20 61 64  64 72 65 73 73 20 6f 66  | base address of|
0001e180  20 74 68 65 20 62 6c 6f  63 6b 0a 61 64 64 72 65  | the block.addre|
0001e190  73 73 25 3d 21 61 6e 63  68 6f 72 25 0a 0a 52 45  |ss%=!anchor%..RE|
0001e1a0  4d 20 41 64 64 20 34 38  20 62 79 74 65 73 20 74  |M Add 48 bytes t|
0001e1b0  6f 20 74 68 65 20 65 6e  64 20 6f 66 20 74 68 65  |o the end of the|
0001e1c0  20 62 6c 6f 63 6b 0a 53  59 53 20 22 41 70 70 45  | block.SYS "AppE|
0001e1d0  6e 67 69 6e 65 5f 48 65  61 70 22 2c 34 2c 68 65  |ngine_Heap",4,he|
0001e1e0  61 70 25 2c 61 6e 63 68  6f 72 25 2c 34 38 20 54  |ap%,anchor%,48 T|
0001e1f0  4f 20 2c 73 75 63 63 65  73 73 25 0a 0a 52 45 4d  |O ,success%..REM|
0001e200  20 44 65 6c 65 74 65 20  74 68 65 20 62 6c 6f 63  | Delete the bloc|
0001e210  6b 0a 53 59 53 20 22 41  70 70 45 6e 67 69 6e 65  |k.SYS "AppEngine|
0001e220  5f 48 65 61 70 22 2c 33  2c 68 65 61 70 25 2c 61  |_Heap",3,heap%,a|
0001e230  6e 63 68 6f 72 25 20 54  4f 20 2c 61 6e 63 68 6f  |nchor% TO ,ancho|
0001e240  72 25 0a 0a 52 45 4d 20  44 65 6c 65 74 65 20 74  |r%..REM Delete t|
0001e250  68 65 20 68 65 61 70 0a  53 59 53 20 22 41 70 70  |he heap.SYS "App|
0001e260  45 6e 67 69 6e 65 5f 48  65 61 70 22 2c 31 2c 68  |Engine_Heap",1,h|
0001e270  65 61 70 25 20 54 4f 20  2c 68 65 61 70 25 0a 7b  |eap% TO ,heap%.{|
0001e280  66 7d 0a 00 44 49 52 24  b8 00 00 00 b8 00 00 00  |f}..DIR$........|
0001e290  3c e3 01 00 47 ff ff ff  42 0b 13 fd 9c 03 00 00  |<...G...B.......|
0001e2a0  33 00 00 00 00 00 00 00  21 72 6f 6f 74 00 00 00  |3.......!root...|
0001e2b0  d8 e6 01 00 47 fd ff ff  9f 6e 91 e9 0f 01 00 00  |....G....n......|
0001e2c0  03 00 00 00 00 00 00 00  30 00 00 00 e8 e7 01 00  |........0.......|
0001e2d0  47 fd ff ff 1a 6d 91 e9  2b 01 00 00 03 00 00 00  |G....m..+.......|
0001e2e0  00 00 00 00 31 00 00 00  14 e9 01 00 47 fd ff ff  |....1.......G...|
0001e2f0  d5 6b 91 e9 09 01 00 00  03 00 00 00 00 00 00 00  |.k..............|
0001e300  32 00 00 00 20 ea 01 00  47 fd ff ff 9f 6a 91 e9  |2... ...G....j..|
0001e310  0b 01 00 00 03 00 00 00  00 00 00 00 33 00 00 00  |............3...|
0001e320  2c eb 01 00 47 fd ff ff  08 59 91 e9 49 01 00 00  |,...G....Y..I...|
0001e330  03 00 00 00 00 00 00 00  34 00 00 00 44 41 54 41  |........4...DATA|
0001e340  9c 03 00 00 41 70 70 45  6e 67 69 6e 65 5f 53 6f  |....AppEngine_So|
0001e350  63 6b 65 74 4f 70 20 20  28 26 34 44 39 34 35 29  |cketOp  (&4D945)|
0001e360  0a 23 57 72 61 70 20 6f  66 66 0a 3d 3e 09 52 30  |.#Wrap off.=>.R0|
0001e370  20 3d 20 3c 72 65 61 73  6f 6e 20 63 6f 64 65 3d  | = <reason code=|
0001e380  3e 2e 72 65 61 73 6f 6e  73 3e 0a 09 6f 74 68 65  |>.reasons>..othe|
0001e390  72 20 72 65 67 69 73 74  65 72 73 20 61 72 65 20  |r registers are |
0001e3a0  72 65 61 73 6f 6e 20 63  6f 64 65 20 64 65 70 65  |reason code depe|
0001e3b0  6e 64 65 6e 74 0a 0a 3c  3d 09 52 30 20 70 72 65  |ndent..<=.R0 pre|
0001e3c0  73 65 72 76 65 64 0a 09  6f 74 68 65 72 20 72 65  |served..other re|
0001e3d0  67 69 73 74 65 72 73 20  61 72 65 20 72 65 61 73  |gisters are reas|
0001e3e0  6f 6e 20 63 6f 64 65 20  64 65 70 65 6e 64 65 6e  |on code dependen|
0001e3f0  74 0a 23 57 72 61 70 0a  0a 54 68 69 73 20 63 61  |t.#Wrap..This ca|
0001e400  6c 6c 20 70 72 6f 76 69  64 65 73 20 6f 70 65 72  |ll provides oper|
0001e410  61 74 69 6f 6e 73 20 74  6f 20 63 6f 6e 74 72 6f  |ations to contro|
0001e420  6c 20 66 69 6c 65 20 64  65 73 63 72 69 70 74 6f  |l file descripto|
0001e430  72 73 2c 20 77 68 69 63  68 20 61 72 65 20 72 65  |rs, which are re|
0001e440  71 75 72 69 65 64 20 74  6f 20 75 73 65 20 74 68  |quried to use th|
0001e450  65 20 3c 53 6f 63 6b 65  74 5f 53 65 6c 65 63 74  |e <Socket_Select|
0001e460  3d 3e 49 6e 65 74 53 6f  63 6b 65 74 3a 53 6f 63  |=>InetSocket:Soc|
0001e470  6b 65 74 5f 53 65 6c 65  63 74 3e 20 53 57 49 2e  |ket_Select> SWI.|
0001e480  0a 0a 41 20 66 69 6c 65  20 64 65 73 63 72 69 70  |..A file descrip|
0001e490  74 6f 72 20 69 73 20 61  20 62 6c 6f 63 6b 20 6f  |tor is a block o|
0001e4a0  66 20 33 32 20 62 79 74  65 73 20 28 32 35 36 20  |f 32 bytes (256 |
0001e4b0  62 69 74 73 29 20 77 68  69 63 68 20 69 6e 64 69  |bits) which indi|
0001e4c0  63 61 74 65 73 20 77 68  69 63 68 20 73 6f 63 6b  |cates which sock|
0001e4d0  65 74 73 20 73 68 6f 75  6c 64 20 62 65 20 63 68  |ets should be ch|
0001e4e0  65 63 6b 65 64 20 66 6f  72 20 61 63 74 69 76 69  |ecked for activi|
0001e4f0  74 79 2e 0a 0a 4e 6f 74  65 3a 20 54 68 65 20 41  |ty...Note: The A|
0001e500  63 6f 72 6e 20 43 20 53  6f 63 6b 65 74 20 6c 69  |corn C Socket li|
0001e510  62 72 61 72 79 20 70 72  6f 76 69 64 65 73 20 65  |brary provides e|
0001e520  71 75 69 76 61 6c 65 6e  74 73 20 6f 66 20 74 68  |quivalents of th|
0001e530  69 73 20 53 57 49 20 69  6e 20 68 65 61 64 65 72  |is SWI in header|
0001e540  66 69 6c 65 20 6d 61 63  72 6f 73 2e 0a 23 53 75  |file macros..#Su|
0001e550  62 70 61 67 65 20 72 65  61 73 6f 6e 73 0a 41 70  |bpage reasons.Ap|
0001e560  70 45 6e 67 69 6e 65 5f  53 6f 63 6b 65 74 4f 70  |pEngine_SocketOp|
0001e570  20 72 65 61 73 6f 6e 20  63 6f 64 65 73 0a 23 57  | reason codes.#W|
0001e580  72 61 70 20 6f 66 66 0a  52 30 09 41 63 74 69 6f  |rap off.R0.Actio|
0001e590  6e 0a 23 4c 69 6e 65 0a  30 09 3c 63 6c 65 61 72  |n.#Line.0.<clear|
0001e5a0  73 20 61 20 66 69 6c 65  20 64 65 73 63 72 69 70  |s a file descrip|
0001e5b0  74 6f 72 3d 3e 41 70 70  45 6e 67 69 6e 65 5f 53  |tor=>AppEngine_S|
0001e5c0  6f 63 6b 65 74 4f 70 30  3e 0a 31 09 3c 63 6f 70  |ocketOp0>.1.<cop|
0001e5d0  69 65 73 20 6f 6e 65 20  66 69 6c 65 20 64 65 73  |ies one file des|
0001e5e0  63 72 69 70 74 6f 72 20  74 6f 20 61 6e 6f 74 68  |criptor to anoth|
0001e5f0  65 72 3d 3e 41 70 70 45  6e 67 69 6e 65 5f 53 6f  |er=>AppEngine_So|
0001e600  63 6b 65 74 4f 70 31 3e  0a 32 09 3c 73 65 74 73  |cketOp1>.2.<sets|
0001e610  20 61 20 62 69 74 20 77  69 74 68 69 6e 20 61 20  | a bit within a |
0001e620  66 69 6c 65 20 64 65 73  63 72 69 70 74 6f 72 3d  |file descriptor=|
0001e630  3e 41 70 70 45 6e 67 69  6e 65 5f 53 6f 63 6b 65  |>AppEngine_Socke|
0001e640  74 4f 70 32 3e 0a 33 09  3c 63 6c 65 61 72 73 20  |tOp2>.3.<clears |
0001e650  61 20 62 69 74 20 77 69  74 68 69 6e 20 61 20 66  |a bit within a f|
0001e660  69 6c 65 20 64 65 73 63  72 69 70 74 6f 72 3d 3e  |ile descriptor=>|
0001e670  41 70 70 45 6e 67 69 6e  65 5f 53 6f 63 6b 65 74  |AppEngine_Socket|
0001e680  4f 70 33 3e 0a 34 09 3c  74 65 73 74 73 20 77 68  |Op3>.4.<tests wh|
0001e690  65 74 68 65 72 20 61 20  62 69 74 20 77 69 74 68  |ether a bit with|
0001e6a0  69 6e 20 61 20 66 69 6c  65 20 64 65 73 63 72 69  |in a file descri|
0001e6b0  70 74 6f 72 20 69 73 20  73 65 74 3d 3e 41 70 70  |ptor is set=>App|
0001e6c0  45 6e 67 69 6e 65 5f 53  6f 63 6b 65 74 4f 70 34  |Engine_SocketOp4|
0001e6d0  3e 0a 23 57 72 61 70 0a  44 41 54 41 0f 01 00 00  |>.#Wrap.DATA....|
0001e6e0  41 70 70 45 6e 67 69 6e  65 5f 53 6f 63 6b 65 74  |AppEngine_Socket|
0001e6f0  4f 70 20 30 20 20 28 26  34 44 39 34 35 29 0a 23  |Op 0  (&4D945).#|
0001e700  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
0001e710  5f 53 6f 63 6b 65 74 4f  70 0a 3d 3e 09 52 30 20  |_SocketOp.=>.R0 |
0001e720  3d 09 30 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.0..R1 =.pointe|
0001e730  72 20 74 6f 20 62 6c 6f  63 6b 20 6f 66 20 33 32  |r to block of 32|
0001e740  20 62 79 74 65 73 20 74  6f 20 62 65 63 6f 6d 65  | bytes to become|
0001e750  20 61 20 66 69 6c 65 20  64 65 73 63 72 69 70 74  | a file descript|
0001e760  6f 72 0a 0a 3c 3d 09 52  30 2c 20 52 31 20 70 72  |or..<=.R0, R1 pr|
0001e770  65 73 65 72 76 65 64 0a  0a 54 68 69 73 20 63 61  |eserved..This ca|
0001e780  6c 6c 20 69 73 20 75 73  65 64 20 74 6f 20 63 6c  |ll is used to cl|
0001e790  65 61 72 20 74 68 65 20  73 70 65 63 69 66 69 65  |ear the specifie|
0001e7a0  64 20 62 6c 6f 63 6b 20  6f 66 20 33 32 20 62 79  |d block of 32 by|
0001e7b0  74 65 73 20 73 6f 20 74  68 61 74 20 69 74 20 6d  |tes so that it m|
0001e7c0  61 79 20 62 65 20 75 73  65 64 20 61 73 20 61 20  |ay be used as a |
0001e7d0  66 69 6c 65 20 64 65 73  63 72 69 70 74 6f 72 20  |file descriptor |
0001e7e0  62 6c 6f 63 6b 2e 0a 00  44 41 54 41 2b 01 00 00  |block...DATA+...|
0001e7f0  41 70 70 45 6e 67 69 6e  65 5f 53 6f 63 6b 65 74  |AppEngine_Socket|
0001e800  4f 70 20 31 20 20 28 26  34 44 39 34 35 29 0a 23  |Op 1  (&4D945).#|
0001e810  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
0001e820  5f 53 6f 63 6b 65 74 4f  70 0a 3d 3e 09 52 30 20  |_SocketOp.=>.R0 |
0001e830  3d 09 31 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.1..R1 =.pointe|
0001e840  72 20 74 6f 20 64 65 73  74 69 6e 61 74 69 6f 6e  |r to destination|
0001e850  20 66 69 6c 65 20 64 65  73 63 72 69 70 74 6f 72  | file descriptor|
0001e860  0a 09 52 32 20 3d 09 70  6f 69 6e 74 65 72 20 74  |..R2 =.pointer t|
0001e870  6f 20 73 6f 75 72 63 65  20 66 69 6c 65 20 64 65  |o source file de|
0001e880  73 63 72 69 70 74 6f 72  0a 0a 3c 3d 09 52 30 2c  |scriptor..<=.R0,|
0001e890  20 52 31 2c 20 52 32 20  70 72 65 73 65 72 76 65  | R1, R2 preserve|
0001e8a0  64 0a 0a 54 68 69 73 20  63 61 6c 6c 20 69 73 20  |d..This call is |
0001e8b0  75 73 65 64 20 74 6f 20  63 6f 70 79 20 6f 6e 65  |used to copy one|
0001e8c0  20 66 69 6c 65 20 64 65  73 63 72 69 70 74 6f 72  | file descriptor|
0001e8d0  20 62 6c 6f 63 6b 20 74  6f 20 61 6e 6f 74 68 65  | block to anothe|
0001e8e0  72 20 28 6f 72 20 6d 65  6d 6f 72 79 20 74 6f 20  |r (or memory to |
0001e8f0  62 65 20 75 73 65 64 20  61 73 20 61 20 6e 65 77  |be used as a new|
0001e900  20 66 69 6c 65 20 64 65  73 63 72 69 70 74 6f 72  | file descriptor|
0001e910  29 2e 0a 00 44 41 54 41  09 01 00 00 41 70 70 45  |)...DATA....AppE|
0001e920  6e 67 69 6e 65 5f 53 6f  63 6b 65 74 4f 70 20 32  |ngine_SocketOp 2|
0001e930  20 20 28 26 34 44 39 34  35 29 0a 23 50 61 72 65  |  (&4D945).#Pare|
0001e940  6e 74 20 41 70 70 45 6e  67 69 6e 65 5f 53 6f 63  |nt AppEngine_Soc|
0001e950  6b 65 74 4f 70 0a 3d 3e  09 52 30 20 3d 09 32 0a  |ketOp.=>.R0 =.2.|
0001e960  09 52 31 20 3d 09 62 69  74 20 74 6f 20 73 65 74  |.R1 =.bit to set|
0001e970  20 28 30 2d 32 35 35 29  0a 09 52 32 20 3d 09 70  | (0-255)..R2 =.p|
0001e980  6f 69 6e 74 65 72 20 74  6f 20 66 69 6c 65 20 64  |ointer to file d|
0001e990  65 73 63 72 69 70 74 6f  72 0a 0a 3c 3d 09 52 30  |escriptor..<=.R0|
0001e9a0  2c 20 52 31 2c 20 52 32  20 70 72 65 73 65 72 76  |, R1, R2 preserv|
0001e9b0  65 64 0a 0a 54 68 69 73  20 63 61 6c 6c 20 69 73  |ed..This call is|
0001e9c0  20 75 73 65 64 20 74 6f  20 73 65 74 20 61 20 62  | used to set a b|
0001e9d0  69 74 20 77 69 74 68 69  6e 20 61 20 66 69 6c 65  |it within a file|
0001e9e0  20 64 65 73 63 72 69 70  74 6f 72 20 69 6e 64 69  | descriptor indi|
0001e9f0  63 61 74 69 6e 67 20 74  68 61 74 20 74 68 65 20  |cating that the |
0001ea00  72 65 73 70 65 63 74 69  76 65 20 73 6f 63 6b 65  |respective socke|
0001ea10  74 20 69 73 20 61 63 74  69 76 65 2e 0a 00 00 00  |t is active.....|
0001ea20  44 41 54 41 0b 01 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
0001ea30  65 5f 53 6f 63 6b 65 74  4f 70 20 33 20 20 28 26  |e_SocketOp 3  (&|
0001ea40  34 44 39 34 35 29 0a 23  50 61 72 65 6e 74 20 41  |4D945).#Parent A|
0001ea50  70 70 45 6e 67 69 6e 65  5f 53 6f 63 6b 65 74 4f  |ppEngine_SocketO|
0001ea60  70 0a 3d 3e 09 52 30 20  3d 09 33 0a 09 52 31 20  |p.=>.R0 =.3..R1 |
0001ea70  3d 09 62 69 74 20 74 6f  20 73 65 74 20 28 30 2d  |=.bit to set (0-|
0001ea80  32 35 35 29 0a 09 52 32  20 3d 09 70 6f 69 6e 74  |255)..R2 =.point|
0001ea90  65 72 20 74 6f 20 66 69  6c 65 20 64 65 73 63 72  |er to file descr|
0001eaa0  69 70 74 6f 72 0a 0a 3c  3d 09 52 30 2c 20 52 31  |iptor..<=.R0, R1|
0001eab0  2c 20 52 32 20 70 72 65  73 65 72 76 65 64 0a 0a  |, R2 preserved..|
0001eac0  54 68 69 73 20 63 61 6c  6c 20 69 73 20 75 73 65  |This call is use|
0001ead0  64 20 74 6f 20 63 6c 65  61 72 20 61 20 62 69 74  |d to clear a bit|
0001eae0  20 77 69 74 68 69 6e 20  61 20 66 69 6c 65 20 64  | within a file d|
0001eaf0  65 73 63 72 69 70 74 6f  72 20 69 6e 64 69 63 61  |escriptor indica|
0001eb00  74 69 6e 67 20 74 68 61  74 20 74 68 65 20 72 65  |ting that the re|
0001eb10  73 70 65 63 74 69 76 65  20 73 6f 63 6b 65 74 20  |spective socket |
0001eb20  69 73 20 61 63 74 69 76  65 2e 0a 00 44 41 54 41  |is active...DATA|
0001eb30  49 01 00 00 41 70 70 45  6e 67 69 6e 65 5f 53 6f  |I...AppEngine_So|
0001eb40  63 6b 65 74 4f 70 20 34  20 20 28 26 34 44 39 34  |cketOp 4  (&4D94|
0001eb50  35 29 0a 23 50 61 72 65  6e 74 20 41 70 70 45 6e  |5).#Parent AppEn|
0001eb60  67 69 6e 65 5f 53 6f 63  6b 65 74 4f 70 0a 3d 3e  |gine_SocketOp.=>|
0001eb70  09 52 30 20 3d 09 34 0a  09 52 31 20 3d 09 62 69  |.R0 =.4..R1 =.bi|
0001eb80  74 20 74 6f 20 74 65 73  74 20 28 30 2d 32 35 35  |t to test (0-255|
0001eb90  29 0a 09 52 32 20 3d 09  70 6f 69 6e 74 65 72 20  |)..R2 =.pointer |
0001eba0  74 6f 20 66 69 6c 65 20  64 65 73 63 72 69 70 74  |to file descript|
0001ebb0  6f 72 0a 0a 3c 3d 09 52  30 2c 20 52 32 20 70 72  |or..<=.R0, R2 pr|
0001ebc0  65 73 65 72 76 65 64 0a  09 52 31 20 3d 09 2d 31  |eserved..R1 =.-1|
0001ebd0  20 69 66 20 74 68 65 20  62 69 74 20 77 61 73 20  | if the bit was |
0001ebe0  73 65 74 2c 20 6f 72 20  30 20 69 66 20 69 74 20  |set, or 0 if it |
0001ebf0  77 61 73 20 6e 6f 74 20  73 65 74 0a 0a 54 68 69  |was not set..Thi|
0001ec00  73 20 63 61 6c 6c 20 69  73 20 75 73 65 64 20 74  |s call is used t|
0001ec10  6f 20 74 65 73 74 20 69  66 20 61 20 62 69 74 20  |o test if a bit |
0001ec20  77 69 74 68 69 6e 20 61  20 66 69 6c 65 20 64 65  |within a file de|
0001ec30  73 63 72 69 70 74 6f 72  20 69 73 20 73 65 74 2c  |scriptor is set,|
0001ec40  20 69 6e 64 69 63 61 74  69 6e 67 20 77 68 65 74  | indicating whet|
0001ec50  68 65 72 20 74 68 65 20  72 65 73 70 65 63 74 69  |her the respecti|
0001ec60  76 65 20 73 6f 63 6b 65  74 20 69 73 20 61 63 74  |ve socket is act|
0001ec70  69 76 65 2e 0a 00 00 00  44 49 52 24 b4 01 00 00  |ive.....DIR$....|
0001ec80  b4 01 00 00 2c ee 01 00  47 ff ff ff b5 94 df d2  |....,...G.......|
0001ec90  8b 08 00 00 33 00 00 00  00 00 00 00 21 52 6f 6f  |....3.......!Roo|
0001eca0  74 00 00 00 b8 f6 01 00  47 fd ff ff e8 10 91 e9  |t.......G.......|
0001ecb0  67 01 00 00 03 00 00 00  00 00 00 00 30 00 00 00  |g...........0...|
0001ecc0  20 f8 01 00 47 fd ff ff  fa d1 91 e9 58 01 00 00  | ...G.......X...|
0001ecd0  03 00 00 00 00 00 00 00  31 00 00 00 78 f9 01 00  |........1...x...|
0001ece0  47 fd ff ff f8 09 91 e9  e5 01 00 00 03 00 00 00  |G...............|
0001ecf0  00 00 00 00 31 30 00 00  60 fb 01 00 47 fd ff ff  |....10..`...G...|
0001ed00  25 05 91 e9 6d 02 00 00  03 00 00 00 00 00 00 00  |%...m...........|
0001ed10  31 32 00 00 d0 fd 01 00  47 fd ff ff d3 00 91 e9  |12......G.......|
0001ed20  18 01 00 00 03 00 00 00  00 00 00 00 31 33 00 00  |............13..|
0001ed30  e8 fe 01 00 47 fd ff ff  47 fd 90 e9 5c 01 00 00  |....G...G...\...|
0001ed40  03 00 00 00 00 00 00 00  31 34 00 00 44 00 02 00  |........14..D...|
0001ed50  47 fd ff ff 72 8e 91 e9  bc 01 00 00 03 00 00 00  |G...r...........|
0001ed60  00 00 00 00 32 00 00 00  00 02 02 00 47 fd ff ff  |....2.......G...|
0001ed70  c1 8a 91 e9 bd 01 00 00  03 00 00 00 00 00 00 00  |................|
0001ed80  33 00 00 00 c0 03 02 00  47 fd ff ff 51 89 91 e9  |3.......G...Q...|
0001ed90  7d 01 00 00 03 00 00 00  00 00 00 00 34 00 00 00  |}...........4...|
0001eda0  40 05 02 00 47 fd ff ff  01 86 91 e9 7d 01 00 00  |@...G.......}...|
0001edb0  03 00 00 00 00 00 00 00  35 00 00 00 c0 06 02 00  |........5.......|
0001edc0  47 fd ff ff b4 84 91 e9  d8 01 00 00 03 00 00 00  |G...............|
0001edd0  00 00 00 00 36 00 00 00  98 08 02 00 47 fd ff ff  |....6.......G...|
0001ede0  f7 81 91 e9 5b 01 00 00  03 00 00 00 00 00 00 00  |....[...........|
0001edf0  37 00 00 00 f4 09 02 00  47 fd ff ff 21 80 91 e9  |7.......G...!...|
0001ee00  1b 02 00 00 03 00 00 00  00 00 00 00 38 00 00 00  |............8...|
0001ee10  10 0c 02 00 47 fd ff ff  38 7e 91 e9 bc 01 00 00  |....G...8~......|
0001ee20  03 00 00 00 00 00 00 00  39 00 00 00 44 41 54 41  |........9...DATA|
0001ee30  8b 08 00 00 41 70 70 45  6e 67 69 6e 65 5f 53 74  |....AppEngine_St|
0001ee40  72 69 6e 67 4f 70 20 20  28 26 34 44 39 34 31 29  |ringOp  (&4D941)|
0001ee50  0a 23 57 72 61 70 20 6f  66 66 0a 3d 3e 09 52 30  |.#Wrap off.=>.R0|
0001ee60  20 3d 20 3c 72 65 61 73  6f 6e 20 63 6f 64 65 3d  | = <reason code=|
0001ee70  3e 2e 72 65 61 73 6f 6e  73 3e 0a 09 6f 74 68 65  |>.reasons>..othe|
0001ee80  72 20 72 65 67 69 73 74  65 72 73 20 61 72 65 20  |r registers are |
0001ee90  72 65 61 73 6f 6e 20 63  6f 64 65 20 64 65 70 65  |reason code depe|
0001eea0  6e 64 65 6e 74 0a 0a 3c  3d 09 52 30 20 70 72 65  |ndent..<=.R0 pre|
0001eeb0  73 65 72 76 65 64 0a 09  6f 74 68 65 72 20 72 65  |served..other re|
0001eec0  67 69 73 74 65 72 73 20  61 72 65 20 72 65 61 73  |gisters are reas|
0001eed0  6f 6e 20 63 6f 64 65 20  64 65 70 65 6e 64 65 6e  |on code dependen|
0001eee0  74 0a 23 57 72 61 70 0a  0a 54 68 69 73 20 63 61  |t.#Wrap..This ca|
0001eef0  6c 6c 20 70 72 6f 76 69  64 65 73 20 76 61 72 69  |ll provides vari|
0001ef00  6f 75 73 20 6f 70 65 72  61 74 69 6f 6e 73 20 74  |ous operations t|
0001ef10  6f 20 64 65 61 6c 20 77  69 74 68 20 41 53 43 49  |o deal with ASCI|
0001ef20  49 20 73 74 72 69 6e 67  73 2e 0a 0a 3c 4d 6f 72  |I strings...<Mor|
0001ef30  65 20 69 6e 66 6f 3d 3e  2e 6d 6f 72 65 3e 2e 0a  |e info=>.more>..|
0001ef40  23 53 75 62 70 61 67 65  20 6d 6f 72 65 0a 41 70  |#Subpage more.Ap|
0001ef50  70 45 6e 67 69 6e 65 5f  53 74 72 69 6e 67 4f 70  |pEngine_StringOp|
0001ef60  20 69 6e 66 6f 72 6d 61  74 69 6f 6e 0a 54 68 69  | information.Thi|
0001ef70  73 20 63 61 6c 6c 20 70  72 6f 76 69 64 65 73 20  |s call provides |
0001ef80  76 61 72 69 6f 75 73 20  6f 70 65 72 61 74 69 6f  |various operatio|
0001ef90  6e 73 20 74 6f 20 64 65  61 6c 20 77 69 74 68 20  |ns to deal with |
0001efa0  41 53 43 49 49 20 73 74  72 69 6e 67 73 2e 0a 0a  |ASCII strings...|
0001efb0  4d 6f 73 74 20 28 69 66  20 6e 6f 74 20 61 6c 6c  |Most (if not all|
0001efc0  29 20 6f 66 20 74 68 65  20 63 61 6c 6c 73 20 70  |) of the calls p|
0001efd0  6c 61 63 65 20 74 68 65  69 72 20 72 65 73 75 6c  |lace their resul|
0001efe0  74 20 77 69 74 68 69 6e  20 41 70 70 45 6e 67 69  |t within AppEngi|
0001eff0  6e 65 27 73 20 77 6f 72  6b 73 70 61 63 65 20 61  |ne's workspace a|
0001f000  6e 64 20 72 65 74 75 72  6e 20 61 20 70 6f 69 6e  |nd return a poin|
0001f010  74 65 72 20 74 6f 20 74  68 65 20 73 74 72 69 6e  |ter to the strin|
0001f020  67 20 77 69 74 68 69 6e  20 74 68 65 20 77 6f 72  |g within the wor|
0001f030  6b 73 70 61 63 65 2e 20  20 46 6f 72 20 74 68 69  |kspace.  For thi|
0001f040  73 20 72 65 61 73 6f 6e  2c 20 79 6f 75 20 6d 75  |s reason, you mu|
0001f050  73 74 20 61 6c 77 61 79  73 20 63 6f 70 79 20 74  |st always copy t|
0001f060  68 65 20 73 74 72 69 6e  67 20 74 6f 20 73 6f 6d  |he string to som|
0001f070  65 77 68 65 72 65 20 65  6c 73 65 20 62 65 66 6f  |ewhere else befo|
0001f080  72 65 20 63 61 6c 6c 69  6e 67 20 53 74 72 69 6e  |re calling Strin|
0001f090  67 4f 70 20 61 67 61 69  6e 20 2d 20 69 66 20 79  |gOp again - if y|
0001f0a0  6f 75 20 64 6f 6e 27 74  20 64 6f 20 74 68 61 74  |ou don't do that|
0001f0b0  20 74 68 65 6e 20 66 75  72 74 68 65 72 20 63 61  | then further ca|
0001f0c0  6c 6c 73 20 74 6f 20 53  74 72 69 6e 67 4f 70 20  |lls to StringOp |
0001f0d0  77 69 6c 6c 20 6f 76 65  72 77 72 69 74 65 20 74  |will overwrite t|
0001f0e0  68 65 20 77 6f 72 6b 73  70 61 63 65 2c 20 64 65  |he workspace, de|
0001f0f0  73 74 72 6f 79 69 6e 67  20 74 68 65 20 73 74 72  |stroying the str|
0001f100  69 6e 67 2e 0a 0a 41 6c  6c 20 73 74 72 69 6e 67  |ing...All string|
0001f110  73 20 61 72 65 20 73 74  6f 72 65 64 20 69 6e 20  |s are stored in |
0001f120  74 68 65 20 73 61 6d 65  20 73 74 79 6c 65 20 61  |the same style a|
0001f130  73 20 42 41 53 49 43 2c  20 69 2e 65 2e 20 77 69  |s BASIC, i.e. wi|
0001f140  74 68 20 43 52 20 28 31  33 29 20 61 73 20 74 68  |th CR (13) as th|
0001f150  65 20 74 65 72 6d 69 6e  61 74 69 6e 67 20 63 68  |e terminating ch|
0001f160  61 72 61 63 74 65 72 2e  20 20 41 73 20 77 69 74  |aracter.  As wit|
0001f170  68 20 42 41 53 49 43 2c  20 74 68 65 79 20 61 72  |h BASIC, they ar|
0001f180  65 20 6c 69 6d 69 74 65  64 20 74 6f 20 61 20 6d  |e limited to a m|
0001f190  61 78 69 6d 75 6d 20 6f  66 20 32 35 36 20 63 68  |aximum of 256 ch|
0001f1a0  61 72 61 63 74 65 72 73  2c 20 69 6e 63 6c 75 64  |aracters, includ|
0001f1b0  69 6e 67 20 74 65 72 6d  69 6e 61 74 6f 72 20 28  |ing terminator (|
0001f1c0  61 6c 74 68 6f 75 67 68  20 74 68 69 73 20 6d 61  |although this ma|
0001f1d0  79 20 63 68 61 6e 67 65  20 6c 61 74 65 72 20 6f  |y change later o|
0001f1e0  6e 29 2e 20 20 54 79 70  69 63 61 6c 6c 79 20 79  |n).  Typically y|
0001f1f0  6f 75 20 77 69 6c 6c 20  75 73 65 20 74 68 65 20  |ou will use the |
0001f200  6f 70 65 72 61 74 69 6f  6e 73 20 69 6e 20 74 68  |operations in th|
0001f210  69 73 20 77 61 79 3a 0a  09 0a 7b 66 43 6f 64 65  |is way:...{fCode|
0001f220  3a 53 59 53 20 22 41 70  70 45 6e 67 69 6e 65 5f  |:SYS "AppEngine_|
0001f230  53 74 72 69 6e 67 4f 70  22 2c 31 2c 73 6f 75 72  |StringOp",1,sour|
0001f240  63 65 25 20 54 4f 20 2c  2c 73 74 72 69 6e 67 24  |ce% TO ,,string$|
0001f250  7d 0a 09 0a 49 6e 70 75  74 20 73 74 72 69 6e 67  |}...Input string|
0001f260  73 20 63 61 6e 20 62 65  20 74 65 72 6d 69 6e 61  |s can be termina|
0001f270  74 65 64 20 62 79 20 61  6e 79 20 63 6f 6e 74 72  |ted by any contr|
0001f280  6f 6c 20 63 68 61 72 61  63 74 65 72 2c 20 75 6e  |ol character, un|
0001f290  6c 65 73 73 20 6f 74 68  65 72 77 69 73 65 20 73  |less otherwise s|
0001f2a0  74 61 74 65 64 2e 0a 23  53 75 62 70 61 67 65 20  |tated..#Subpage |
0001f2b0  72 65 61 73 6f 6e 73 0a  41 70 70 45 6e 67 69 6e  |reasons.AppEngin|
0001f2c0  65 5f 53 74 72 69 6e 67  4f 70 20 72 65 61 73 6f  |e_StringOp reaso|
0001f2d0  6e 20 63 6f 64 65 73 0a  23 57 72 61 70 20 6f 66  |n codes.#Wrap of|
0001f2e0  66 0a 52 30 09 41 63 74  69 6f 6e 0a 23 4c 69 6e  |f.R0.Action.#Lin|
0001f2f0  65 0a 30 09 3c 72 65 61  64 73 20 61 20 73 74 72  |e.0.<reads a str|
0001f300  69 6e 67 20 66 72 6f 6d  20 6d 65 6d 6f 72 79 20  |ing from memory |
0001f310  28 4c 46 20 74 65 72 6d  69 6e 61 74 65 64 29 3d  |(LF terminated)=|
0001f320  3e 41 70 70 45 6e 67 69  6e 65 5f 53 74 72 69 6e  |>AppEngine_Strin|
0001f330  67 4f 70 30 3e 0a 31 09  3c 72 65 61 64 73 20 61  |gOp0>.1.<reads a|
0001f340  20 73 74 72 69 6e 67 20  66 72 6f 6d 20 6d 65 6d  | string from mem|
0001f350  6f 72 79 20 28 63 6f 6e  74 72 6f 6c 20 74 65 72  |ory (control ter|
0001f360  6d 69 6e 61 74 65 64 29  3d 3e 41 70 70 45 6e 67  |minated)=>AppEng|
0001f370  69 6e 65 5f 53 74 72 69  6e 67 4f 70 31 3e 0a 32  |ine_StringOp1>.2|
0001f380  09 3c 73 68 6f 72 74 65  6e 73 20 61 20 73 74 72  |.<shortens a str|
0001f390  69 6e 67 2c 20 61 64 64  69 6e 67 20 61 6e 20 65  |ing, adding an e|
0001f3a0  6c 6c 69 70 73 69 73 20  6f 6e 20 74 68 65 20 6c  |llipsis on the l|
0001f3b0  65 66 74 3d 3e 41 70 70  45 6e 67 69 6e 65 5f 53  |eft=>AppEngine_S|
0001f3c0  74 72 69 6e 67 4f 70 32  3e 0a 33 09 3c 73 68 6f  |tringOp2>.3.<sho|
0001f3d0  72 74 65 6e 73 20 61 20  73 74 72 69 6e 67 2c 20  |rtens a string, |
0001f3e0  61 64 64 69 6e 67 20 61  6e 20 65 6c 6c 69 70 73  |adding an ellips|
0001f3f0  69 73 20 6f 6e 20 74 68  65 20 72 69 67 68 74 3d  |is on the right=|
0001f400  3e 41 70 70 45 6e 67 69  6e 65 5f 53 74 72 69 6e  |>AppEngine_Strin|
0001f410  67 4f 70 33 3e 0a 34 09  3c 63 6f 6e 76 65 72 74  |gOp3>.4.<convert|
0001f420  73 20 61 20 73 74 72 69  6e 67 20 74 6f 20 6c 6f  |s a string to lo|
0001f430  77 65 72 2d 63 61 73 65  20 63 68 61 72 61 63 74  |wer-case charact|
0001f440  65 72 73 3d 3e 41 70 70  45 6e 67 69 6e 65 5f 53  |ers=>AppEngine_S|
0001f450  74 72 69 6e 67 4f 70 34  3e 0a 35 09 3c 63 6f 6e  |tringOp4>.5.<con|
0001f460  76 65 72 74 73 20 61 20  73 74 72 69 6e 67 20 74  |verts a string t|
0001f470  6f 20 75 70 70 65 72 2d  63 61 73 65 20 63 68 61  |o upper-case cha|
0001f480  72 61 63 74 65 72 73 3d  3e 41 70 70 45 6e 67 69  |racters=>AppEngi|
0001f490  6e 65 5f 53 74 72 69 6e  67 4f 70 35 3e 0a 36 09  |ne_StringOp5>.6.|
0001f4a0  3c 74 65 73 74 73 20 77  68 65 74 68 65 72 20 61  |<tests whether a|
0001f4b0  20 73 74 72 69 6e 67 20  69 73 20 61 20 76 61 6c  | string is a val|
0001f4c0  69 64 20 69 6e 74 65 67  65 72 20 6e 75 6d 62 65  |id integer numbe|
0001f4d0  72 3d 3e 41 70 70 45 6e  67 69 6e 65 5f 53 74 72  |r=>AppEngine_Str|
0001f4e0  69 6e 67 4f 70 36 3e 0a  37 09 3c 73 74 72 69 70  |ingOp6>.7.<strip|
0001f4f0  73 20 6c 65 61 64 69 6e  67 20 73 70 61 63 65 73  |s leading spaces|
0001f500  20 61 6e 64 20 74 61 62  73 20 66 72 6f 6d 20 61  | and tabs from a|
0001f510  20 73 74 72 69 6e 67 3d  3e 41 70 70 45 6e 67 69  | string=>AppEngi|
0001f520  6e 65 5f 53 74 72 69 6e  67 4f 70 37 3e 0a 38 09  |ne_StringOp7>.8.|
0001f530  3c 63 6f 6d 70 61 72 65  73 20 74 77 6f 20 73 74  |<compares two st|
0001f540  72 69 6e 67 73 3d 3e 41  70 70 45 6e 67 69 6e 65  |rings=>AppEngine|
0001f550  5f 53 74 72 69 6e 67 4f  70 38 3e 0a 39 09 3c 6a  |_StringOp8>.9.<j|
0001f560  6f 69 6e 73 20 74 77 6f  20 73 74 72 69 6e 67 73  |oins two strings|
0001f570  3d 3e 41 70 70 45 6e 67  69 6e 65 5f 53 74 72 69  |=>AppEngine_Stri|
0001f580  6e 67 4f 70 39 3e 0a 31  30 09 3c 72 65 74 75 72  |ngOp9>.10.<retur|
0001f590  6e 73 20 74 68 65 20 6c  65 61 66 6e 61 6d 65 20  |ns the leafname |
0001f5a0  66 72 6f 6d 20 61 20 70  61 74 68 20 73 74 72 69  |from a path stri|
0001f5b0  6e 67 3d 3e 41 70 70 45  6e 67 69 6e 65 5f 53 74  |ng=>AppEngine_St|
0001f5c0  72 69 6e 67 4f 70 31 30  3e 0a 31 31 09 72 65 74  |ringOp10>.11.ret|
0001f5d0  75 72 6e 73 20 74 68 65  20 62 72 61 6e 63 68 6e  |urns the branchn|
0001f5e0  61 6d 65 20 66 72 6f 6d  20 61 20 70 61 74 68 20  |ame from a path |
0001f5f0  73 74 72 69 6e 67 20 28  6e 6f 74 20 79 65 74 20  |string (not yet |
0001f600  69 6d 70 6c 65 6d 65 6e  74 65 64 29 0a 31 32 09  |implemented).12.|
0001f610  3c 73 75 62 73 74 69 74  75 74 65 73 20 61 72 67  |<substitutes arg|
0001f620  75 6d 65 6e 74 73 20 69  6e 74 6f 20 61 20 73 74  |uments into a st|
0001f630  72 69 6e 67 3d 3e 41 70  70 45 6e 67 69 6e 65 5f  |ring=>AppEngine_|
0001f640  53 74 72 69 6e 67 4f 70  31 32 3e 0a 31 33 09 3c  |StringOp12>.13.<|
0001f650  72 65 74 75 72 6e 73 20  74 68 65 20 6c 65 6e 67  |returns the leng|
0001f660  74 68 20 6f 66 20 61 20  73 74 72 69 6e 67 3d 3e  |th of a string=>|
0001f670  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001f680  4f 70 31 33 3e 0a 31 34  09 3c 63 6f 70 69 65 73  |Op13>.14.<copies|
0001f690  20 61 20 73 74 72 69 6e  67 3d 3e 41 70 70 45 6e  | a string=>AppEn|
0001f6a0  67 69 6e 65 5f 53 74 72  69 6e 67 4f 70 31 34 3e  |gine_StringOp14>|
0001f6b0  0a 23 57 72 61 70 0a 00  44 41 54 41 67 01 00 00  |.#Wrap..DATAg...|
0001f6c0  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001f6d0  4f 70 20 30 20 20 28 26  34 44 39 34 31 29 0a 23  |Op 0  (&4D941).#|
0001f6e0  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
0001f6f0  5f 53 74 72 69 6e 67 4f  70 0a 3d 3e 09 52 30 20  |_StringOp.=>.R0 |
0001f700  3d 09 30 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.0..R1 =.pointe|
0001f710  72 20 74 6f 20 61 64 64  72 65 73 73 20 74 6f 20  |r to address to |
0001f720  72 65 61 64 20 73 74 72  69 6e 67 20 66 72 6f 6d  |read string from|
0001f730  0a 0a 3c 3d 09 52 30 20  70 72 65 73 65 72 76 65  |..<=.R0 preserve|
0001f740  64 0a 09 52 31 20 3d 09  70 6f 69 6e 74 65 72 20  |d..R1 =.pointer |
0001f750  74 6f 20 63 68 61 72 61  63 74 65 72 20 61 66 74  |to character aft|
0001f760  65 72 20 74 68 65 20 69  6e 70 75 74 91 73 20 74  |er the input.s t|
0001f770  65 72 6d 69 6e 61 74 6f  72 0a 09 52 32 20 3d 09  |erminator..R2 =.|
0001f780  70 6f 69 6e 74 65 72 20  74 6f 20 72 65 61 64 20  |pointer to read |
0001f790  73 74 72 69 6e 67 20 28  75 70 20 74 6f 20 32 35  |string (up to 25|
0001f7a0  35 20 63 68 61 72 73 29  0a 0a 54 68 69 73 20 63  |5 chars)..This c|
0001f7b0  61 6c 6c 20 63 6f 6e 76  65 72 74 73 20 61 6e 20  |all converts an |
0001f7c0  4c 46 2d 74 65 72 6d 69  6e 61 74 65 64 20 73 74  |LF-terminated st|
0001f7d0  72 69 6e 67 20 69 6e 20  6d 65 6d 6f 72 79 20 69  |ring in memory i|
0001f7e0  6e 74 6f 20 61 20 43 52  2d 74 65 72 6d 69 6e 61  |nto a CR-termina|
0001f7f0  74 65 64 20 73 74 72 69  6e 67 20 69 6e 20 74 68  |ted string in th|
0001f800  65 20 6d 6f 64 75 6c 65  27 73 20 69 6e 74 65 72  |e module's inter|
0001f810  6e 61 6c 20 77 6f 72 6b  73 70 61 63 65 2e 0a 00  |nal workspace...|
0001f820  44 41 54 41 58 01 00 00  41 70 70 45 6e 67 69 6e  |DATAX...AppEngin|
0001f830  65 5f 53 74 72 69 6e 67  4f 70 20 31 20 20 28 26  |e_StringOp 1  (&|
0001f840  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
0001f850  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
0001f860  70 0a 3d 3e 09 52 30 20  3d 09 31 0a 09 52 31 20  |p.=>.R0 =.1..R1 |
0001f870  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
0001f880  72 65 73 73 20 74 6f 20  72 65 61 64 20 73 74 72  |ress to read str|
0001f890  69 6e 67 20 66 72 6f 6d  0a 0a 3c 3d 09 52 30 20  |ing from..<=.R0 |
0001f8a0  70 72 65 73 65 72 76 65  64 0a 09 52 31 20 3d 09  |preserved..R1 =.|
0001f8b0  70 6f 69 6e 74 65 72 20  74 6f 20 63 68 61 72 61  |pointer to chara|
0001f8c0  63 74 65 72 20 61 66 74  65 72 20 74 68 65 20 69  |cter after the i|
0001f8d0  6e 70 75 74 91 73 20 74  65 72 6d 69 6e 61 74 6f  |nput.s terminato|
0001f8e0  72 0a 09 52 32 20 3d 09  70 6f 69 6e 74 65 72 20  |r..R2 =.pointer |
0001f8f0  74 6f 20 72 65 61 64 20  73 74 72 69 6e 67 20 28  |to read string (|
0001f900  75 70 20 74 6f 20 32 35  35 20 63 68 61 72 73 29  |up to 255 chars)|
0001f910  0a 0a 54 68 69 73 20 63  61 6c 6c 20 63 6f 6e 76  |..This call conv|
0001f920  65 72 74 73 20 61 20 73  74 72 69 6e 67 20 69 6e  |erts a string in|
0001f930  20 6d 65 6d 6f 72 79 20  69 6e 74 6f 20 61 20 43  | memory into a C|
0001f940  52 2d 74 65 72 6d 69 6e  61 74 65 64 20 73 74 72  |R-terminated str|
0001f950  69 6e 67 20 69 6e 20 74  68 65 20 6d 6f 64 75 6c  |ing in the modul|
0001f960  65 27 73 20 69 6e 74 65  72 6e 61 6c 20 77 6f 72  |e's internal wor|
0001f970  6b 73 70 61 63 65 2e 0a  44 41 54 41 e5 01 00 00  |kspace..DATA....|
0001f980  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001f990  4f 70 20 31 30 20 20 28  26 34 44 39 34 31 29 0a  |Op 10  (&4D941).|
0001f9a0  23 50 61 72 65 6e 74 20  41 70 70 45 6e 67 69 6e  |#Parent AppEngin|
0001f9b0  65 5f 53 74 72 69 6e 67  4f 70 0a 3d 3e 09 52 30  |e_StringOp.=>.R0|
0001f9c0  20 3d 09 31 30 0a 09 52  31 20 3d 09 70 6f 69 6e  | =.10..R1 =.poin|
0001f9d0  74 65 72 20 74 6f 20 61  64 64 72 65 73 73 20 74  |ter to address t|
0001f9e0  6f 20 72 65 61 64 20 73  74 72 69 6e 67 20 66 72  |o read string fr|
0001f9f0  6f 6d 0a 09 52 32 20 3d  09 64 69 72 65 63 74 6f  |om..R2 =.directo|
0001fa00  72 79 20 73 65 70 61 72  61 74 6f 72 20 63 68 61  |ry separator cha|
0001fa10  72 61 63 74 65 72 2c 20  74 79 70 69 63 61 6c 6c  |racter, typicall|
0001fa20  79 20 27 2e 27 20 6f 72  20 27 2f 27 20 28 41 53  |y '.' or '/' (AS|
0001fa30  43 49 49 20 63 6f 64 65  29 0a 0a 3c 3d 09 52 30  |CII code)..<=.R0|
0001fa40  2c 20 52 32 20 70 72 65  73 65 72 76 65 64 0a 09  |, R2 preserved..|
0001fa50  52 31 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R1 =.pointer to |
0001fa60  63 68 61 72 61 63 74 65  72 20 61 66 74 65 72 20  |character after |
0001fa70  74 68 65 20 69 6e 70 75  74 27 73 20 74 65 72 6d  |the input's term|
0001fa80  69 6e 61 74 6f 72 0a 09  52 33 20 3d 09 70 6f 69  |inator..R3 =.poi|
0001fa90  6e 74 65 72 20 74 6f 20  6f 75 74 70 75 74 20 73  |nter to output s|
0001faa0  74 72 69 6e 67 20 28 75  70 20 74 6f 20 32 35 35  |tring (up to 255|
0001fab0  20 63 68 61 72 73 29 0a  0a 54 68 69 73 20 63 61  | chars)..This ca|
0001fac0  6c 6c 20 74 61 6b 65 73  20 61 6e 20 69 6e 70 75  |ll takes an inpu|
0001fad0  74 20 70 61 74 68 20 73  74 72 69 6e 67 20 28 65  |t path string (e|
0001fae0  2e 67 2e 20 90 41 44 46  53 3a 3a 48 44 34 2e 24  |.g. .ADFS::HD4.$|
0001faf0  2e 53 6f 75 6e 64 73 2e  57 61 76 65 91 29 20 61  |.Sounds.Wave.) a|
0001fb00  6e 64 20 72 65 74 75 72  6e 73 20 77 68 61 74 20  |nd returns what |
0001fb10  66 6f 6c 6c 6f 77 73 20  74 68 65 20 6c 61 73 74  |follows the last|
0001fb20  20 69 6e 73 74 61 6e 63  65 20 6f 66 20 74 68 65  | instance of the|
0001fb30  20 73 65 70 61 72 61 74  6f 72 20 63 68 61 72 61  | separator chara|
0001fb40  63 74 65 72 20 28 69 6e  20 74 68 69 73 20 63 61  |cter (in this ca|
0001fb50  73 65 2c 20 90 57 61 76  65 91 29 2e 0a 00 00 00  |se, .Wave.).....|
0001fb60  44 41 54 41 6d 02 00 00  41 70 70 45 6e 67 69 6e  |DATAm...AppEngin|
0001fb70  65 5f 53 74 72 69 6e 67  4f 70 20 31 32 20 20 28  |e_StringOp 12  (|
0001fb80  26 34 44 39 34 31 29 0a  23 50 61 72 65 6e 74 20  |&4D941).#Parent |
0001fb90  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001fba0  4f 70 0a 3d 3e 09 52 30  20 3d 09 31 32 0a 09 52  |Op.=>.R0 =.12..R|
0001fbb0  31 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 74  |1 =.pointer to t|
0001fbc0  65 6d 70 6c 61 74 65 20  73 74 72 69 6e 67 2c 20  |emplate string, |
0001fbd0  63 6f 6e 74 61 69 6e 69  6e 67 20 27 25 30 27 20  |containing '%0' |
0001fbe0  75 70 20 74 6f 20 27 25  33 27 2e 0a 09 52 33 20  |up to '%3'...R3 |
0001fbf0  3d 09 73 74 72 69 6e 67  20 74 6f 20 73 75 62 73  |=.string to subs|
0001fc00  74 69 74 75 74 65 20 66  6f 72 20 27 25 30 27 20  |titute for '%0' |
0001fc10  6f 72 20 30 20 66 6f 72  20 6e 6f 20 73 74 72 69  |or 0 for no stri|
0001fc20  6e 67 0a 09 52 34 20 3d  09 73 74 72 69 6e 67 20  |ng..R4 =.string |
0001fc30  74 6f 20 73 75 62 73 74  69 74 75 74 65 20 66 6f  |to substitute fo|
0001fc40  72 20 27 25 31 27 20 6f  72 20 30 20 66 6f 72 20  |r '%1' or 0 for |
0001fc50  6e 6f 20 73 74 72 69 6e  67 0a 09 52 35 20 3d 09  |no string..R5 =.|
0001fc60  73 74 72 69 6e 67 20 74  6f 20 73 75 62 73 74 69  |string to substi|
0001fc70  74 75 74 65 20 66 6f 72  20 27 25 32 27 20 6f 72  |tute for '%2' or|
0001fc80  20 30 20 66 6f 72 20 6e  6f 20 73 74 72 69 6e 67  | 0 for no string|
0001fc90  0a 09 52 36 20 3d 09 73  74 72 69 6e 67 20 74 6f  |..R6 =.string to|
0001fca0  20 73 75 62 73 74 69 74  75 74 65 20 66 6f 72 20  | substitute for |
0001fcb0  27 25 33 27 20 6f 72 20  30 20 66 6f 72 20 6e 6f  |'%3' or 0 for no|
0001fcc0  20 73 74 72 69 6e 67 0a  0a 3c 3d 09 52 30 2c 20  | string..<=.R0, |
0001fcd0  52 33 2c 20 52 34 2c 20  52 35 2c 20 52 36 20 70  |R3, R4, R5, R6 p|
0001fce0  72 65 73 65 72 76 65 64  0a 09 52 31 20 3d 09 70  |reserved..R1 =.p|
0001fcf0  6f 69 6e 74 65 72 20 74  6f 20 63 68 61 72 61 63  |ointer to charac|
0001fd00  74 65 72 20 61 66 74 65  72 20 74 68 65 20 74 65  |ter after the te|
0001fd10  6d 70 6c 61 74 65 20 73  74 72 69 6e 67 27 73 20  |mplate string's |
0001fd20  74 65 72 6d 69 6e 61 74  6f 72 0a 09 52 32 20 3d  |terminator..R2 =|
0001fd30  09 70 6f 69 6e 74 65 72  20 74 6f 20 6f 75 74 70  |.pointer to outp|
0001fd40  75 74 20 73 74 72 69 6e  67 20 28 75 70 20 74 6f  |ut string (up to|
0001fd50  20 32 35 35 20 63 68 61  72 73 29 0a 0a 54 68 69  | 255 chars)..Thi|
0001fd60  73 20 63 61 6c 6c 20 74  61 6b 65 73 20 61 6e 20  |s call takes an |
0001fd70  69 6e 70 75 74 20 74 65  6d 70 6c 61 74 65 20 73  |input template s|
0001fd80  74 72 69 6e 67 20 61 6e  64 20 73 75 62 73 74 69  |tring and substi|
0001fd90  74 75 74 65 73 20 61 6e  6f 74 68 65 72 20 73 74  |tutes another st|
0001fda0  72 69 6e 67 20 77 68 65  72 65 20 61 6e 20 69 64  |ring where an id|
0001fdb0  65 6e 74 69 66 69 65 72  20 90 25 30 91 2e 2e 90  |entifier .%0....|
0001fdc0  25 33 91 20 61 70 70 65  61 72 73 2e 0a 00 00 00  |%3. appears.....|
0001fdd0  44 41 54 41 18 01 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
0001fde0  65 5f 53 74 72 69 6e 67  4f 70 20 31 33 20 20 28  |e_StringOp 13  (|
0001fdf0  26 34 44 39 34 31 29 0a  23 50 61 72 65 6e 74 20  |&4D941).#Parent |
0001fe00  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001fe10  4f 70 0a 3d 3e 09 52 30  20 3d 09 31 33 0a 09 52  |Op.=>.R0 =.13..R|
0001fe20  31 20 3d 09 70 6f 69 6e  74 65 72 20 74 6f 20 61  |1 =.pointer to a|
0001fe30  64 64 72 65 73 73 20 74  6f 20 72 65 61 64 20 73  |ddress to read s|
0001fe40  74 72 69 6e 67 20 66 72  6f 6d 0a 0a 3c 3d 09 52  |tring from..<=.R|
0001fe50  30 20 70 72 65 73 65 72  76 65 64 0a 09 52 31 20  |0 preserved..R1 |
0001fe60  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 63 68 61  |=.pointer to cha|
0001fe70  72 61 63 74 65 72 20 61  66 74 65 72 20 74 68 65  |racter after the|
0001fe80  20 69 6e 70 75 74 27 73  20 74 65 72 6d 69 6e 61  | input's termina|
0001fe90  74 6f 72 0a 09 52 32 20  3d 09 6c 65 6e 67 74 68  |tor..R2 =.length|
0001fea0  20 6f 66 20 73 74 72 69  6e 67 0a 0a 54 68 69 73  | of string..This|
0001feb0  20 63 61 6c 6c 20 64 65  74 65 72 6d 69 6e 65 73  | call determines|
0001fec0  20 74 68 65 20 6c 65 6e  67 74 68 20 6f 66 20 61  | the length of a|
0001fed0  20 73 74 72 69 6e 67 2c  20 69 6e 20 63 68 61 72  | string, in char|
0001fee0  61 63 74 65 72 73 2e 0a  44 41 54 41 5c 01 00 00  |acters..DATA\...|
0001fef0  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
0001ff00  4f 70 20 31 34 20 20 28  26 34 44 39 34 31 29 0a  |Op 14  (&4D941).|
0001ff10  23 50 61 72 65 6e 74 20  41 70 70 45 6e 67 69 6e  |#Parent AppEngin|
0001ff20  65 5f 53 74 72 69 6e 67  4f 70 0a 3d 3e 09 52 30  |e_StringOp.=>.R0|
0001ff30  20 3d 09 31 34 0a 09 52  31 20 3d 09 70 6f 69 6e  | =.14..R1 =.poin|
0001ff40  74 65 72 20 74 6f 20 61  64 64 72 65 73 73 20 74  |ter to address t|
0001ff50  6f 20 72 65 61 64 20 73  74 72 69 6e 67 20 66 72  |o read string fr|
0001ff60  6f 6d 0a 09 52 32 20 3d  09 70 6f 69 6e 74 65 72  |om..R2 =.pointer|
0001ff70  20 74 6f 20 61 64 64 72  65 73 73 20 74 6f 20 63  | to address to c|
0001ff80  6f 70 79 20 73 74 72 69  6e 67 20 74 6f 0a 0a 3c  |opy string to..<|
0001ff90  3d 09 52 30 20 70 72 65  73 65 72 76 65 64 0a 09  |=.R0 preserved..|
0001ffa0  52 31 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R1 =.pointer to |
0001ffb0  63 68 61 72 61 63 74 65  72 20 61 66 74 65 72 20  |character after |
0001ffc0  74 68 65 20 69 6e 70 75  74 27 73 20 74 65 72 6d  |the input's term|
0001ffd0  69 6e 61 74 6f 72 0a 09  52 32 20 3d 09 70 6f 69  |inator..R2 =.poi|
0001ffe0  6e 74 65 72 20 74 6f 20  63 68 61 72 61 63 74 65  |nter to characte|
0001fff0  72 20 61 66 74 65 72 20  74 68 65 20 6f 75 74 70  |r after the outp|
00020000  75 74 27 73 20 74 65 72  6d 69 6e 61 74 6f 72 0a  |ut's terminator.|
00020010  0a 54 68 69 73 20 63 6f  70 69 65 73 20 61 20 73  |.This copies a s|
00020020  74 72 69 6e 67 20 66 72  6f 6d 20 6f 6e 65 20 6c  |tring from one l|
00020030  6f 63 61 74 69 6f 6e 20  74 6f 20 61 6e 6f 74 68  |ocation to anoth|
00020040  65 72 2e 0a 44 41 54 41  bc 01 00 00 41 70 70 45  |er..DATA....AppE|
00020050  6e 67 69 6e 65 5f 53 74  72 69 6e 67 4f 70 20 32  |ngine_StringOp 2|
00020060  20 20 28 26 34 44 39 34  31 29 0a 23 50 61 72 65  |  (&4D941).#Pare|
00020070  6e 74 20 41 70 70 45 6e  67 69 6e 65 5f 53 74 72  |nt AppEngine_Str|
00020080  69 6e 67 4f 70 0a 3d 3e  09 52 30 20 3d 09 32 0a  |ingOp.=>.R0 =.2.|
00020090  09 52 31 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R1 =.pointer to|
000200a0  20 61 64 64 72 65 73 73  20 74 6f 20 72 65 61 64  | address to read|
000200b0  20 73 74 72 69 6e 67 20  66 72 6f 6d 0a 09 52 32  | string from..R2|
000200c0  20 3d 09 6c 65 6e 67 74  68 20 6f 66 20 6f 75 74  | =.length of out|
000200d0  70 75 74 20 73 74 72 69  6e 67 20 28 6d 61 78 69  |put string (maxi|
000200e0  6d 75 6d 20 6f 66 20 32  35 35 2c 20 5c 3c 33 20  |mum of 255, \<3 |
000200f0  69 73 20 75 6e 64 65 66  69 6e 65 64 29 0a 0a 3c  |is undefined)..<|
00020100  3d 09 52 30 2c 20 52 32  20 70 72 65 73 65 72 76  |=.R0, R2 preserv|
00020110  65 64 0a 09 52 31 20 3d  09 70 6f 69 6e 74 65 72  |ed..R1 =.pointer|
00020120  20 74 6f 20 63 68 61 72  61 63 74 65 72 20 61 66  | to character af|
00020130  74 65 72 20 74 68 65 20  69 6e 70 75 74 91 73 20  |ter the input.s |
00020140  74 65 72 6d 69 6e 61 74  6f 72 0a 09 52 33 20 3d  |terminator..R3 =|
00020150  09 70 6f 69 6e 74 65 72  20 74 6f 20 6f 75 74 70  |.pointer to outp|
00020160  75 74 20 73 74 72 69 6e  67 20 28 75 70 20 74 6f  |ut string (up to|
00020170  20 32 35 35 20 63 68 61  72 73 29 0a 0a 54 68 69  | 255 chars)..Thi|
00020180  73 20 63 61 6c 6c 20 63  6f 70 69 65 73 20 61 20  |s call copies a |
00020190  73 74 72 69 6e 67 2c 20  74 72 75 6e 63 61 74 69  |string, truncati|
000201a0  6e 67 20 74 68 65 20 6c  65 66 74 2d 68 61 6e 64  |ng the left-hand|
000201b0  20 73 69 64 65 20 61 6e  64 20 70 72 65 66 69 78  | side and prefix|
000201c0  69 6e 67 20 61 6e 20 65  6c 6c 69 70 73 69 73 20  |ing an ellipsis |
000201d0  28 90 2e 2e 2e 91 29 20  69 66 20 69 74 27 73 20  |(.....) if it's |
000201e0  6c 6f 6e 67 65 72 20 74  68 61 6e 20 74 68 65 20  |longer than the |
000201f0  73 70 65 63 69 66 69 65  64 20 73 69 7a 65 2e 0a  |specified size..|
00020200  44 41 54 41 bd 01 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
00020210  65 5f 53 74 72 69 6e 67  4f 70 20 33 20 20 28 26  |e_StringOp 3  (&|
00020220  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
00020230  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
00020240  70 0a 3d 3e 09 52 30 20  3d 09 33 0a 09 52 31 20  |p.=>.R0 =.3..R1 |
00020250  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
00020260  72 65 73 73 20 74 6f 20  72 65 61 64 20 73 74 72  |ress to read str|
00020270  69 6e 67 20 66 72 6f 6d  0a 09 52 32 20 3d 09 6c  |ing from..R2 =.l|
00020280  65 6e 67 74 68 20 6f 66  20 6f 75 74 70 75 74 20  |ength of output |
00020290  73 74 72 69 6e 67 20 28  6d 61 78 69 6d 75 6d 20  |string (maximum |
000202a0  6f 66 20 32 35 35 2c 20  5c 3c 33 20 69 73 20 75  |of 255, \<3 is u|
000202b0  6e 64 65 66 69 6e 65 64  29 0a 0a 3c 3d 09 52 30  |ndefined)..<=.R0|
000202c0  2c 20 52 32 20 70 72 65  73 65 72 76 65 64 0a 09  |, R2 preserved..|
000202d0  52 31 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R1 =.pointer to |
000202e0  63 68 61 72 61 63 74 65  72 20 61 66 74 65 72 20  |character after |
000202f0  74 68 65 20 69 6e 70 75  74 91 73 20 74 65 72 6d  |the input.s term|
00020300  69 6e 61 74 6f 72 0a 09  52 33 20 3d 09 70 6f 69  |inator..R3 =.poi|
00020310  6e 74 65 72 20 74 6f 20  6f 75 74 70 75 74 20 73  |nter to output s|
00020320  74 72 69 6e 67 20 28 75  70 20 74 6f 20 32 35 35  |tring (up to 255|
00020330  20 63 68 61 72 73 29 0a  0a 54 68 69 73 20 63 61  | chars)..This ca|
00020340  6c 6c 20 63 6f 70 69 65  73 20 61 20 73 74 72 69  |ll copies a stri|
00020350  6e 67 2c 20 74 72 75 6e  63 61 74 69 6e 67 20 74  |ng, truncating t|
00020360  68 65 20 72 69 67 68 74  2d 68 61 6e 64 20 73 69  |he right-hand si|
00020370  64 65 20 61 6e 64 20 61  70 70 65 6e 64 69 6e 67  |de and appending|
00020380  20 61 6e 20 65 6c 6c 69  70 73 69 73 20 28 90 2e  | an ellipsis (..|
00020390  2e 2e 91 29 20 69 66 20  69 74 91 73 20 6c 6f 6e  |...) if it.s lon|
000203a0  67 65 72 20 74 68 61 6e  20 74 68 65 20 73 70 65  |ger than the spe|
000203b0  63 69 66 69 65 64 20 73  69 7a 65 2e 0a 00 00 00  |cified size.....|
000203c0  44 41 54 41 7d 01 00 00  41 70 70 45 6e 67 69 6e  |DATA}...AppEngin|
000203d0  65 5f 53 74 72 69 6e 67  4f 70 20 34 20 20 28 26  |e_StringOp 4  (&|
000203e0  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
000203f0  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
00020400  70 0a 3d 3e 09 52 30 20  3d 09 34 0a 09 52 31 20  |p.=>.R0 =.4..R1 |
00020410  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
00020420  72 65 73 73 20 74 6f 20  72 65 61 64 20 73 74 72  |ress to read str|
00020430  69 6e 67 20 66 72 6f 6d  0a 0a 3c 3d 09 52 30 20  |ing from..<=.R0 |
00020440  70 72 65 73 65 72 76 65  64 0a 09 52 31 20 3d 09  |preserved..R1 =.|
00020450  70 6f 69 6e 74 65 72 20  74 6f 20 63 68 61 72 61  |pointer to chara|
00020460  63 74 65 72 20 61 66 74  65 72 20 74 68 65 20 69  |cter after the i|
00020470  6e 70 75 74 27 73 20 74  65 72 6d 69 6e 61 74 6f  |nput's terminato|
00020480  72 0a 09 52 32 20 3d 09  70 6f 69 6e 74 65 72 20  |r..R2 =.pointer |
00020490  74 6f 20 6f 75 74 70 75  74 20 73 74 72 69 6e 67  |to output string|
000204a0  20 28 75 70 20 74 6f 20  32 35 35 20 63 68 61 72  | (up to 255 char|
000204b0  73 29 0a 0a 54 68 69 73  20 63 61 6c 6c 20 63 6f  |s)..This call co|
000204c0  6e 76 65 72 74 73 20 61  20 73 74 72 69 6e 67 20  |nverts a string |
000204d0  69 6e 20 6d 65 6d 6f 72  79 20 69 6e 74 6f 20 61  |in memory into a|
000204e0  20 43 52 2d 74 65 72 6d  69 6e 61 74 65 64 20 73  | CR-terminated s|
000204f0  74 72 69 6e 67 2c 20 75  73 69 6e 67 20 6f 6e 6c  |tring, using onl|
00020500  79 20 6c 6f 77 65 72 2d  63 61 73 65 20 63 68 61  |y lower-case cha|
00020510  72 61 63 74 65 72 73 2c  20 69 6e 20 74 68 65 20  |racters, in the |
00020520  6d 6f 64 75 6c 65 27 73  20 69 6e 74 65 72 6e 61  |module's interna|
00020530  6c 20 77 6f 72 6b 73 70  61 63 65 2e 0a 00 00 00  |l workspace.....|
00020540  44 41 54 41 7d 01 00 00  41 70 70 45 6e 67 69 6e  |DATA}...AppEngin|
00020550  65 5f 53 74 72 69 6e 67  4f 70 20 35 20 20 28 26  |e_StringOp 5  (&|
00020560  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
00020570  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
00020580  70 0a 3d 3e 09 52 30 20  3d 09 35 0a 09 52 31 20  |p.=>.R0 =.5..R1 |
00020590  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
000205a0  72 65 73 73 20 74 6f 20  72 65 61 64 20 73 74 72  |ress to read str|
000205b0  69 6e 67 20 66 72 6f 6d  0a 0a 3c 3d 09 52 30 20  |ing from..<=.R0 |
000205c0  70 72 65 73 65 72 76 65  64 0a 09 52 31 20 3d 09  |preserved..R1 =.|
000205d0  70 6f 69 6e 74 65 72 20  74 6f 20 63 68 61 72 61  |pointer to chara|
000205e0  63 74 65 72 20 61 66 74  65 72 20 74 68 65 20 69  |cter after the i|
000205f0  6e 70 75 74 27 73 20 74  65 72 6d 69 6e 61 74 6f  |nput's terminato|
00020600  72 0a 09 52 32 20 3d 09  70 6f 69 6e 74 65 72 20  |r..R2 =.pointer |
00020610  74 6f 20 6f 75 74 70 75  74 20 73 74 72 69 6e 67  |to output string|
00020620  20 28 75 70 20 74 6f 20  32 35 35 20 63 68 61 72  | (up to 255 char|
00020630  73 29 0a 0a 54 68 69 73  20 63 61 6c 6c 20 63 6f  |s)..This call co|
00020640  6e 76 65 72 74 73 20 61  20 73 74 72 69 6e 67 20  |nverts a string |
00020650  69 6e 20 6d 65 6d 6f 72  79 20 69 6e 74 6f 20 61  |in memory into a|
00020660  20 43 52 2d 74 65 72 6d  69 6e 61 74 65 64 20 73  | CR-terminated s|
00020670  74 72 69 6e 67 2c 20 75  73 69 6e 67 20 6f 6e 6c  |tring, using onl|
00020680  79 20 75 70 70 65 72 2d  63 61 73 65 20 63 68 61  |y upper-case cha|
00020690  72 61 63 74 65 72 73 2c  20 69 6e 20 74 68 65 20  |racters, in the |
000206a0  6d 6f 64 75 6c 65 27 73  20 69 6e 74 65 72 6e 61  |module's interna|
000206b0  6c 20 77 6f 72 6b 73 70  61 63 65 2e 0a 00 00 00  |l workspace.....|
000206c0  44 41 54 41 d8 01 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
000206d0  65 5f 53 74 72 69 6e 67  4f 70 20 36 20 20 28 26  |e_StringOp 6  (&|
000206e0  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
000206f0  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
00020700  70 0a 3d 3e 09 52 30 20  3d 09 36 0a 09 52 31 20  |p.=>.R0 =.6..R1 |
00020710  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
00020720  72 65 73 73 20 74 6f 20  72 65 61 64 20 73 74 72  |ress to read str|
00020730  69 6e 67 20 66 72 6f 6d  0a 0a 3c 3d 09 52 30 20  |ing from..<=.R0 |
00020740  70 72 65 73 65 72 76 65  64 0a 09 52 31 20 3d 09  |preserved..R1 =.|
00020750  70 6f 69 6e 74 65 72 20  74 6f 20 63 68 61 72 61  |pointer to chara|
00020760  63 74 65 72 20 61 66 74  65 72 20 74 68 65 20 69  |cter after the i|
00020770  6e 70 75 74 27 73 20 74  65 72 6d 69 6e 61 74 6f  |nput's terminato|
00020780  72 0a 09 52 32 20 3d 09  54 52 55 45 20 28 2d 31  |r..R2 =.TRUE (-1|
00020790  29 20 6f 72 20 46 41 4c  53 45 20 28 30 29 20 66  |) or FALSE (0) f|
000207a0  6f 72 20 76 61 6c 69 64  20 6f 72 20 69 6e 76 61  |or valid or inva|
000207b0  6c 69 64 20 72 65 73 70  65 63 74 69 76 65 6c 79  |lid respectively|
000207c0  0a 0a 54 68 69 73 20 63  61 6c 6c 20 72 65 61 64  |..This call read|
000207d0  73 20 61 20 73 74 72 69  6e 67 20 66 72 6f 6d 20  |s a string from |
000207e0  6d 65 6d 6f 72 79 2c 20  69 66 20 69 74 20 66 69  |memory, if it fi|
000207f0  6e 64 73 20 74 68 61 74  20 74 68 65 20 73 74 72  |nds that the str|
00020800  69 6e 67 20 63 6f 6e 74  61 69 6e 73 20 6e 6f 6e  |ing contains non|
00020810  2d 6e 75 6d 65 72 69 63  20 63 68 61 72 61 63 74  |-numeric charact|
00020820  65 72 73 20 74 68 65 6e  20 69 74 20 77 69 6c 6c  |ers then it will|
00020830  20 72 65 74 75 72 6e 20  46 41 4c 53 45 2e 20 20  | return FALSE.  |
00020840  49 66 20 69 74 20 66 69  6e 64 73 20 74 68 61 74  |If it finds that|
00020850  20 74 68 65 20 73 74 72  69 6e 67 20 63 6f 6e 74  | the string cont|
00020860  61 69 6e 73 20 6f 6e 6c  79 20 6e 75 6d 65 72 69  |ains only numeri|
00020870  63 20 63 68 61 72 61 63  74 65 72 73 2c 20 74 68  |c characters, th|
00020880  65 6e 20 69 74 20 77 69  6c 6c 20 72 65 74 75 72  |en it will retur|
00020890  6e 20 54 52 55 45 2e 0a  44 41 54 41 5b 01 00 00  |n TRUE..DATA[...|
000208a0  41 70 70 45 6e 67 69 6e  65 5f 53 74 72 69 6e 67  |AppEngine_String|
000208b0  4f 70 20 37 20 20 28 26  34 44 39 34 31 29 0a 23  |Op 7  (&4D941).#|
000208c0  50 61 72 65 6e 74 20 41  70 70 45 6e 67 69 6e 65  |Parent AppEngine|
000208d0  5f 53 74 72 69 6e 67 4f  70 0a 3d 3e 09 52 30 20  |_StringOp.=>.R0 |
000208e0  3d 09 37 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |=.7..R1 =.pointe|
000208f0  72 20 74 6f 20 61 64 64  72 65 73 73 20 74 6f 20  |r to address to |
00020900  72 65 61 64 20 73 74 72  69 6e 67 20 66 72 6f 6d  |read string from|
00020910  0a 0a 3c 3d 09 52 30 20  70 72 65 73 65 72 76 65  |..<=.R0 preserve|
00020920  64 0a 09 52 31 20 3d 09  70 6f 69 6e 74 65 72 20  |d..R1 =.pointer |
00020930  74 6f 20 63 68 61 72 61  63 74 65 72 20 61 66 74  |to character aft|
00020940  65 72 20 74 68 65 20 69  6e 70 75 74 27 73 20 74  |er the input's t|
00020950  65 72 6d 69 6e 61 74 6f  72 0a 09 52 32 20 3d 09  |erminator..R2 =.|
00020960  70 6f 69 6e 74 65 72 20  74 6f 20 6f 75 74 70 75  |pointer to outpu|
00020970  74 20 73 74 72 69 6e 67  20 28 75 70 20 74 6f 20  |t string (up to |
00020980  32 35 35 20 63 68 61 72  73 29 0a 0a 54 68 69 73  |255 chars)..This|
00020990  20 63 61 6c 6c 20 63 6f  6e 76 65 72 74 73 20 61  | call converts a|
000209a0  6e 20 69 6e 70 75 74 20  73 74 72 69 6e 67 20 77  |n input string w|
000209b0  68 69 63 68 20 63 6f 6e  74 61 69 6e 73 20 6c 65  |hich contains le|
000209c0  61 64 69 6e 67 20 73 70  61 63 65 20 61 6e 64 20  |ading space and |
000209d0  74 61 62 20 63 68 61 72  61 63 74 65 72 73 20 74  |tab characters t|
000209e0  6f 20 6f 6e 65 20 77 69  74 68 6f 75 74 20 74 68  |o one without th|
000209f0  65 6d 2e 00 44 41 54 41  1b 02 00 00 41 70 70 45  |em..DATA....AppE|
00020a00  6e 67 69 6e 65 5f 53 74  72 69 6e 67 4f 70 20 38  |ngine_StringOp 8|
00020a10  20 20 28 26 34 44 39 34  31 29 0a 23 50 61 72 65  |  (&4D941).#Pare|
00020a20  6e 74 20 41 70 70 45 6e  67 69 6e 65 5f 53 74 72  |nt AppEngine_Str|
00020a30  69 6e 67 4f 70 0a 3d 3e  09 52 30 20 3d 09 38 0a  |ingOp.=>.R0 =.8.|
00020a40  09 52 31 20 3d 09 70 6f  69 6e 74 65 72 20 74 6f  |.R1 =.pointer to|
00020a50  20 61 64 64 72 65 73 73  20 74 6f 20 72 65 61 64  | address to read|
00020a60  20 73 74 72 69 6e 67 20  66 72 6f 6d 0a 09 52 32  | string from..R2|
00020a70  20 3d 09 70 6f 69 6e 74  65 72 20 74 6f 20 61 64  | =.pointer to ad|
00020a80  64 72 65 73 73 20 74 6f  20 72 65 61 64 20 73 65  |dress to read se|
00020a90  63 6f 6e 64 20 73 74 72  69 6e 67 20 66 72 6f 6d  |cond string from|
00020aa0  0a 0a 3c 3d 09 52 30 20  70 72 65 73 65 72 76 65  |..<=.R0 preserve|
00020ab0  64 0a 09 52 31 20 3d 09  70 6f 69 6e 74 65 72 20  |d..R1 =.pointer |
00020ac0  74 6f 20 63 68 61 72 61  63 74 65 72 20 61 66 74  |to character aft|
00020ad0  65 72 20 74 68 65 20 69  6e 70 75 74 27 73 20 74  |er the input's t|
00020ae0  65 72 6d 69 6e 61 74 6f  72 0a 09 52 32 20 3d 09  |erminator..R2 =.|
00020af0  70 6f 69 6e 74 65 72 20  74 6f 20 63 68 61 72 61  |pointer to chara|
00020b00  63 74 65 72 20 61 66 74  65 72 20 74 68 65 20 73  |cter after the s|
00020b10  65 63 6f 6e 64 20 69 6e  70 75 74 27 73 20 74 65  |econd input's te|
00020b20  72 6d 69 6e 61 74 6f 72  0a 09 52 33 20 3d 09 2d  |rminator..R3 =.-|
00020b30  31 20 66 6f 72 20 73 74  72 69 6e 67 20 31 20 5c  |1 for string 1 \|
00020b40  3c 20 73 74 72 69 6e 67  20 32 0a 09 20 09 30 20  |< string 2.. .0 |
00020b50  66 6f 72 20 73 74 72 69  6e 67 20 31 20 3d 20 73  |for string 1 = s|
00020b60  74 72 69 6e 67 20 32 0a  09 20 09 31 20 66 6f 72  |tring 2.. .1 for|
00020b70  20 73 74 72 69 6e 67 20  31 20 3e 20 73 74 72 69  | string 1 > stri|
00020b80  6e 67 20 32 0a 0a 54 68  69 73 20 63 61 6c 6c 20  |ng 2..This call |
00020b90  63 6f 6d 70 61 72 65 73  20 74 77 6f 20 73 74 72  |compares two str|
00020ba0  69 6e 67 73 20 61 6e 64  20 72 65 74 75 72 6e 73  |ings and returns|
00020bb0  20 61 6e 20 69 6e 74 65  67 65 72 20 72 65 70 72  | an integer repr|
00020bc0  65 73 65 6e 74 69 6e 67  20 74 68 65 20 72 65 6c  |esenting the rel|
00020bd0  61 74 69 6f 6e 73 68 69  70 20 6f 66 20 74 68 65  |ationship of the|
00020be0  20 74 77 6f 20 73 74 72  69 6e 67 73 20 28 6c 65  | two strings (le|
00020bf0  73 73 20 74 68 61 6e 2c  20 65 71 75 61 6c 2c 20  |ss than, equal, |
00020c00  67 72 65 61 74 65 72 20  74 68 61 6e 29 2e 0a 00  |greater than)...|
00020c10  44 41 54 41 bc 01 00 00  41 70 70 45 6e 67 69 6e  |DATA....AppEngin|
00020c20  65 5f 53 74 72 69 6e 67  4f 70 20 39 20 20 28 26  |e_StringOp 9  (&|
00020c30  34 44 39 34 31 29 0a 23  50 61 72 65 6e 74 20 41  |4D941).#Parent A|
00020c40  70 70 45 6e 67 69 6e 65  5f 53 74 72 69 6e 67 4f  |ppEngine_StringO|
00020c50  70 0a 3d 3e 09 52 30 20  3d 09 39 0a 09 52 31 20  |p.=>.R0 =.9..R1 |
00020c60  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 61 64 64  |=.pointer to add|
00020c70  72 65 73 73 20 74 6f 20  72 65 61 64 20 66 69 72  |ress to read fir|
00020c80  73 74 20 73 74 72 69 6e  67 20 66 72 6f 6d 0a 09  |st string from..|
00020c90  52 32 20 3d 09 70 6f 69  6e 74 65 72 20 74 6f 20  |R2 =.pointer to |
00020ca0  61 64 64 72 65 73 73 20  74 6f 20 72 65 61 64 20  |address to read |
00020cb0  73 65 63 6f 6e 64 20 73  74 72 69 6e 67 20 66 72  |second string fr|
00020cc0  6f 6d 0a 0a 3c 3d 09 52  30 20 70 72 65 73 65 72  |om..<=.R0 preser|
00020cd0  76 65 64 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |ved..R1 =.pointe|
00020ce0  72 20 74 6f 20 63 68 61  72 61 63 74 65 72 20 61  |r to character a|
00020cf0  66 74 65 72 20 74 68 65  20 69 6e 70 75 74 27 73  |fter the input's|
00020d00  20 74 65 72 6d 69 6e 61  74 6f 72 0a 09 52 32 20  | terminator..R2 |
00020d10  3d 09 70 6f 69 6e 74 65  72 20 74 6f 20 63 68 61  |=.pointer to cha|
00020d20  72 61 63 74 65 72 20 61  66 74 65 72 20 74 68 65  |racter after the|
00020d30  20 73 65 63 6f 6e 64 20  69 6e 70 75 74 27 73 20  | second input's |
00020d40  74 65 72 6d 69 6e 61 74  6f 72 0a 09 52 33 20 3d  |terminator..R3 =|
00020d50  09 70 6f 69 6e 74 65 72  20 74 6f 20 6f 75 74 70  |.pointer to outp|
00020d60  75 74 20 73 74 72 69 6e  67 20 28 75 70 20 74 6f  |ut string (up to|
00020d70  20 32 35 35 20 63 68 61  72 73 29 0a 0a 54 68 69  | 255 chars)..Thi|
00020d80  73 20 63 61 6c 6c 20 74  61 6b 65 73 20 74 77 6f  |s call takes two|
00020d90  20 73 74 72 69 6e 67 73  20 61 6e 64 20 72 65 74  | strings and ret|
00020da0  75 72 6e 73 20 74 68 65  20 73 65 63 6f 6e 64 20  |urns the second |
00020db0  73 74 72 69 6e 67 20 6a  6f 69 6e 65 64 20 74 6f  |string joined to|
00020dc0  20 74 68 65 20 66 69 72  73 74 2e 0a 44 49 52 24  | the first..DIR$|
00020dd0  c8 01 00 00 c8 01 00 00  94 0f 02 00 48 fd ff ff  |............H...|
00020de0  6f 92 b9 04 ac 00 00 00  33 00 00 00 00 00 00 00  |o.......3.......|
00020df0  21 52 6f 6f 74 00 00 00  40 10 02 00 48 fd ff ff  |!Root...@...H...|
00020e00  87 3c d3 08 0e 01 00 00  33 00 00 00 00 00 00 00  |.<......3.......|
00020e10  21 49 6e 66 6f 00 00 00  50 11 02 00 48 ff ff ff  |!Info...P...H...|
00020e20  27 fa d2 08 ad 01 00 00  33 00 00 00 00 00 00 00  |'.......3.......|
00020e30  4d 69 73 63 00 00 00 00  00 13 02 00 48 fd ff ff  |Misc........H...|
00020e40  d4 db d2 08 b4 00 00 00  33 00 00 00 00 00 00 00  |........3.......|
00020e50  4d 69 73 63 30 00 00 00  b4 13 02 00 47 fd ff ff  |Misc0.......G...|
00020e60  9a 7a 16 fb 12 01 00 00  33 00 00 00 00 00 00 00  |.z......3.......|
00020e70  4d 69 73 63 31 00 00 00  c8 14 02 00 48 fd ff ff  |Misc1.......H...|
00020e80  70 18 ba 04 d2 00 00 00  33 00 00 00 00 00 00 00  |p.......3.......|
00020e90  4d 69 73 63 32 00 00 00  9c 15 02 00 48 fd ff ff  |Misc2.......H...|
00020ea0  91 e6 d2 08 01 01 00 00  33 00 00 00 00 00 00 00  |........3.......|
00020eb0  4d 69 73 63 33 00 00 00  a0 16 02 00 48 fd ff ff  |Misc3.......H...|
00020ec0  60 f4 d2 08 7c 00 00 00  33 00 00 00 00 00 00 00  |`...|...3.......|
00020ed0  4d 69 73 63 34 00 00 00  1c 17 02 00 47 fd ff ff  |Misc4.......G...|
00020ee0  77 b6 16 fb d6 00 00 00  33 00 00 00 00 00 00 00  |w.......3.......|
00020ef0  4d 69 73 63 35 00 00 00  f4 17 02 00 48 ff ff ff  |Misc5.......H...|
00020f00  e4 61 ba 04 a0 01 00 00  33 00 00 00 00 00 00 00  |.a......3.......|
00020f10  53 61 79 00 94 19 02 00  48 ff ff ff 0a 6d ba 04  |Say.....H....m..|
00020f20  6b 00 00 00 33 00 00 00  00 00 00 00 53 61 79 57  |k...3.......SayW|
00020f30  00 00 00 00 00 1a 02 00  47 ff ff ff eb 18 17 fb  |........G.......|
00020f40  61 00 00 00 33 00 00 00  00 00 00 00 53 74 6f 70  |a...3.......Stop|
00020f50  00 00 00 00 64 1a 02 00  48 ff ff ff e3 a8 b9 04  |....d...H.......|
00020f60  9f 00 00 00 33 00 00 00  00 00 00 00 52 65 61 64  |....3.......Read|
00020f70  79 00 00 00 04 1b 02 00  48 fd ff ff 9d 0f d3 08  |y.......H.......|
00020f80  90 00 00 00 33 00 00 00  00 00 00 00 4d 69 73 63  |....3.......Misc|
00020f90  36 00 00 00 44 41 54 41  ac 00 00 00 53 70 65 61  |6...DATA....Spea|
00020fa0  6b 0a 23 50 61 72 65 6e  74 20 21 52 6f 6f 74 0a  |k.#Parent !Root.|
00020fb0  23 50 72 65 66 69 78 20  53 70 65 61 6b 5f 0a 23  |#Prefix Speak_.#|
00020fc0  54 61 62 6c 65 20 43 6f  6c 75 6d 6e 73 20 32 0a  |Table Columns 2.|
00020fd0  3c 52 65 61 64 79 3e 0a  3c 4d 69 73 63 3e 0a 3c  |<Ready>.<Misc>.<|
00020fe0  53 61 79 3e 0a 3c 53 61  79 57 3e 0a 3c 53 74 6f  |Say>.<SayW>.<Sto|
00020ff0  70 3e 0a 50 69 74 63 68  0a 53 70 65 65 64 0a 57  |p>.Pitch.Speed.W|
00021000  6f 72 64 47 61 70 0a 50  69 74 63 68 52 61 6e 67  |ordGap.PitchRang|
00021010  65 0a 23 45 6e 64 54 61  62 6c 65 0a 23 4c 69 6e  |e.#EndTable.#Lin|
00021020  65 0a 3c 49 6e 66 6f 20  6f 6e 20 6d 6f 64 75 6c  |e.<Info on modul|
00021030  65 3d 3e 53 70 65 61 6b  5f 21 49 6e 66 6f 3e 0a  |e=>Speak_!Info>.|
00021040  44 41 54 41 0e 01 00 00  53 70 65 61 6b 0a 23 50  |DATA....Speak.#P|
00021050  61 72 65 6e 74 20 53 70  65 61 6b 5f 0a 4d 6f 64  |arent Speak_.Mod|
00021060  75 6c 65 20 6e 61 6d 65  3a 09 53 70 65 61 6b 0a  |ule name:.Speak.|
00021070  41 75 74 68 6f 72 3a 09  09 4a 6f 68 6e 61 74 68  |Author:..Johnath|
00021080  61 6e 20 44 75 64 64 69  6e 67 74 6f 6e 0a 56 65  |an Duddington.Ve|
00021090  72 73 69 6f 6e 3a 09 32  2e 30 39 20 28 32 33 20  |rsion:.2.09 (23 |
000210a0  4a 75 6c 20 31 39 39 37  29 0a 23 4c 69 6e 65 0a  |Jul 1997).#Line.|
000210b0  54 68 65 20 53 70 65 61  6b 20 6d 6f 64 75 6c 65  |The Speak module|
000210c0  20 70 72 6f 76 69 64 65  73 20 66 61 63 69 6c 69  | provides facili|
000210d0  74 69 65 73 20 74 6f 20  6d 61 6b 65 20 73 69 6d  |ties to make sim|
000210e0  70 6c 65 20 6c 69 6e 65  73 20 6f 66 20 74 65 78  |ple lines of tex|
000210f0  74 20 69 6e 74 6f 20 73  70 6f 6b 65 6e 20 77 6f  |t into spoken wo|
00021100  72 64 73 2e 20 54 68 69  73 20 64 6f 63 75 6d 65  |rds. This docume|
00021110  6e 74 61 74 69 6f 6e 20  77 61 73 20 70 72 6f 76  |ntation was prov|
00021120  69 64 65 64 20 77 69 74  68 20 68 69 73 20 70 65  |ided with his pe|
00021130  72 6d 69 73 73 69 6f 6e  2e 20 4d 61 6e 79 20 74  |rmission. Many t|
00021140  68 61 6e 6b 73 20 74 6f  20 68 69 6d 2e 0a 00 00  |hanks to him....|
00021150  44 41 54 41 ad 01 00 00  53 70 65 61 6b 5f 4d 69  |DATA....Speak_Mi|
00021160  73 63 20 20 28 26 34 41  44 38 32 29 0a 23 50 61  |sc  (&4AD82).#Pa|
00021170  72 65 6e 74 20 53 70 65  61 6b 5f 0a 3d 3e 09 52  |rent Speak_.=>.R|
00021180  30 20 3d 09 72 65 61 73  6f 6e 20 63 6f 64 65 0a  |0 =.reason code.|
00021190  09 09 20 20 30 09 3c 72  65 74 75 72 6e 20 76 65  |..  0.<return ve|
000211a0  72 73 69 6f 6e 3d 3e 53  70 65 61 6b 5f 4d 69 73  |rsion=>Speak_Mis|
000211b0  63 30 3e 0a 09 09 20 20  31 09 3c 72 65 67 69 73  |c0>...  1.<regis|
000211c0  74 65 72 3d 3e 53 70 65  61 6b 5f 4d 69 73 63 31  |ter=>Speak_Misc1|
000211d0  3e 0a 09 09 20 20 32 09  3c 64 65 72 65 67 69 73  |>...  2.<deregis|
000211e0  74 65 72 3d 3e 53 70 65  61 6b 5f 4d 69 73 63 32  |ter=>Speak_Misc2|
000211f0  3e 0a 09 09 20 20 33 09  3c 63 6f 6e 76 65 72 74  |>...  3.<convert|
00021200  20 74 6f 20 70 68 6f 6e  65 6d 65 73 3d 3e 53 70  | to phonemes=>Sp|
00021210  65 61 6b 5f 4d 69 73 63  33 3e 0a 09 09 20 20 34  |eak_Misc3>...  4|
00021220  09 3c 72 65 6c 6f 61 64  20 77 6f 72 64 20 64 69  |.<reload word di|
00021230  63 74 69 6f 6e 61 72 79  3d 3e 53 70 65 61 6b 5f  |ctionary=>Speak_|
00021240  4d 69 73 63 34 3e 0a 09  09 20 20 35 09 3c 72 65  |Misc4>...  5.<re|
00021250  61 64 20 76 6f 69 63 65  20 6e 61 6d 65 73 3d 3e  |ad voice names=>|
00021260  53 70 65 61 6b 5f 4d 69  73 63 35 3e 0a 09 09 20  |Speak_Misc5>... |
00021270  20 36 09 3c 73 65 74 20  63 75 72 72 65 6e 74 20  | 6.<set current |
00021280  76 6f 69 63 65 3d 3e 53  70 65 61 6b 5f 4d 69 73  |voice=>Speak_Mis|
00021290  63 36 3e 0a 3c 3d 09 64  65 70 65 6e 64 61 6e 74  |c6>.<=.dependant|
000212a0  20 6f 6e 20 72 65 61 73  6f 6e 20 63 6f 64 65 0a  | on reason code.|
000212b0  0a 54 68 69 73 20 53 57  49 20 69 73 20 63 61 6c  |.This SWI is cal|
000212c0  6c 65 64 20 74 6f 20 70  65 72 66 6f 72 6d 20 6d  |led to perform m|
000212d0  69 73 63 65 6c 6c 61 6e  65 6f 75 73 20 6f 70 65  |iscellaneous ope|
000212e0  72 61 74 69 6f 6e 73 20  6f 6e 20 74 68 65 20 53  |rations on the S|
000212f0  70 65 61 6b 20 6d 6f 64  75 6c 65 2e 0a 00 00 00  |peak module.....|
00021300  44 41 54 41 b4 00 00 00  53 70 65 61 6b 5f 4d 69  |DATA....Speak_Mi|
00021310  73 63 20 30 0a 23 50 61  72 65 6e 74 20 53 70 65  |sc 0.#Parent Spe|
00021320  61 6b 5f 4d 69 73 63 0a  3d 3e 09 52 30 20 3d 09  |ak_Misc.=>.R0 =.|
00021330  30 20 28 72 65 61 64 20  76 65 72 73 69 6f 6e 29  |0 (read version)|
00021340  0a 3c 3d 09 52 30 20 3d  09 76 65 72 73 69 6f 6e  |.<=.R0 =.version|
00021350  20 6d 61 6a 6f 72 20 6e  75 6d 62 65 72 20 61 73  | major number as|
00021360  20 69 6e 74 65 67 65 72  20 28 65 67 20 32 29 0a  | integer (eg 2).|
00021370  0a 54 68 69 73 20 53 57  49 20 72 65 74 75 72 6e  |.This SWI return|
00021380  73 20 74 68 65 20 6d 61  6a 6f 72 20 70 61 72 74  |s the major part|
00021390  20 6f 66 20 74 68 65 20  76 65 72 73 69 6f 6e 20  | of the version |
000213a0  6f 66 20 74 68 65 20 53  70 65 61 6b 20 6d 6f 64  |of the Speak mod|
000213b0  75 6c 65 2e 44 41 54 41  12 01 00 00 53 70 65 61  |ule.DATA....Spea|
000213c0  6b 5f 4d 69 73 63 20 31  0a 23 50 61 72 65 6e 74  |k_Misc 1.#Parent|
000213d0  20 53 70 65 61 6b 5f 4d  69 73 63 0a 3d 3e 09 52  | Speak_Misc.=>.R|
000213e0  30 20 3d 09 31 20 28 72  65 67 69 73 74 65 72 29  |0 =.1 (register)|
000213f0  0a 3c 3d 09 52 30 20 3d  09 6e 75 6d 62 65 72 20  |.<=.R0 =.number |
00021400  6f 66 20 72 65 67 69 73  74 65 72 65 64 20 63 6c  |of registered cl|
00021410  69 65 6e 74 73 0a 0a 54  68 69 73 20 53 57 49 20  |ients..This SWI |
00021420  69 73 20 75 73 65 64 20  74 6f 20 72 65 67 69 73  |is used to regis|
00021430  74 65 72 20 77 69 74 68  20 74 68 65 20 53 70 65  |ter with the Spe|
00021440  61 6b 20 6d 6f 64 75 6c  65 2e 20 41 6c 6c 20 61  |ak module. All a|
00021450  70 70 6c 69 63 61 74 69  6f 6e 73 20 73 68 6f 75  |pplications shou|
00021460  6c 64 20 75 73 65 20 74  68 69 73 20 74 6f 20 77  |ld use this to w|
00021470  68 65 6e 20 74 68 65 79  20 73 74 61 72 74 20 74  |hen they start t|
00021480  6f 20 75 73 65 20 74 68  65 20 73 79 73 74 65 6d  |o use the system|
00021490  20 61 6e 64 20 63 61 6c  6c 20 3c 64 65 67 72 65  | and call <degre|
000214a0  67 69 73 74 65 72 3d 3e  53 70 65 61 6b 5f 4d 69  |gister=>Speak_Mi|
000214b0  73 63 32 3e 20 77 68 65  6e 20 74 68 65 79 20 66  |sc2> when they f|
000214c0  69 6e 69 73 68 2e 00 00  44 41 54 41 d2 00 00 00  |inish...DATA....|
000214d0  53 70 65 61 6b 5f 4d 69  73 63 20 32 0a 23 50 61  |Speak_Misc 2.#Pa|
000214e0  72 65 6e 74 20 53 70 65  61 6b 5f 4d 69 73 63 0a  |rent Speak_Misc.|
000214f0  3d 3e 09 52 30 20 3d 09  32 20 28 64 65 72 65 67  |=>.R0 =.2 (dereg|
00021500  69 73 74 65 72 29 0a 3c  3d 09 52 30 20 3d 09 6e  |ister).<=.R0 =.n|
00021510  75 6d 62 65 72 20 6f 66  20 72 65 67 69 73 74 65  |umber of registe|
00021520  72 65 64 20 63 6c 69 65  6e 74 73 0a 0a 54 68 69  |red clients..Thi|
00021530  73 20 53 57 49 20 69 73  20 75 73 65 64 20 74 6f  |s SWI is used to|
00021540  20 64 65 72 65 67 69 73  74 65 72 20 77 69 74 68  | deregister with|
00021550  20 74 68 65 20 53 70 65  61 6b 20 6d 6f 64 75 6c  | the Speak modul|
00021560  65 2e 20 49 66 20 6e 6f  62 6f 64 79 20 65 6c 73  |e. If nobody els|
00021570  65 20 69 73 20 75 73 69  6e 67 20 69 74 2c 20 74  |e is using it, t|
00021580  68 65 20 6d 6f 64 75 6c  65 20 77 69 6c 6c 20 62  |he module will b|
00021590  65 20 6b 69 6c 6c 65 64  2e 0a 00 00 44 41 54 41  |e killed....DATA|
000215a0  01 01 00 00 53 70 65 61  6b 5f 4d 69 73 63 20 33  |....Speak_Misc 3|
000215b0  0a 23 50 61 72 65 6e 74  20 53 70 65 61 6b 5f 4d  |.#Parent Speak_M|
000215c0  69 73 63 0a 3d 3e 09 52  30 20 3d 09 33 20 28 63  |isc.=>.R0 =.3 (c|
000215d0  6f 6e 76 65 72 74 20 74  6f 20 70 68 6f 6e 65 6d  |onvert to phonem|
000215e0  65 73 29 0a 09 52 31 20  3d 09 70 6f 69 6e 74 65  |es)..R1 =.pointe|
000215f0  72 20 74 6f 20 7a 65 72  6f 20 74 65 72 6d 69 6e  |r to zero termin|
00021600  61 74 65 64 20 74 65 78  74 20 73 74 72 69 6e 67  |ated text string|
00021610  0a 3c 3d 09 52 30 20 3d  09 70 6f 69 6e 74 65 72  |.<=.R0 =.pointer|
00021620  20 74 6f 20 73 74 72 69  6e 67 0a 0a 54 68 69 73  | to string..This|
00021630  20 53 57 49 20 69 73 20  75 73 65 64 20 74 6f 20  | SWI is used to |
00021640  63 6f 6e 76 65 72 74 20  74 65 78 74 20 69 6e 74  |convert text int|
00021650  6f 20 61 20 6c 69 73 74  20 6f 66 20 70 68 6f 6e  |o a list of phon|
00021660  65 6d 65 73 2e 20 54 68  65 20 72 65 74 75 72 6e  |emes. The return|
00021670  65 64 20 62 75 66 66 65  72 20 77 69 6c 6c 20 62  |ed buffer will b|
00021680  65 20 76 61 6c 69 64 20  75 6e 74 69 6c 20 74 68  |e valid until th|
00021690  65 20 6e 65 78 74 20 63  61 6c 6c 2e 0a 00 00 00  |e next call.....|
000216a0  44 41 54 41 7c 00 00 00  53 70 65 61 6b 5f 4d 69  |DATA|...Speak_Mi|
000216b0  73 63 20 34 0a 23 50 61  72 65 6e 74 20 53 70 65  |sc 4.#Parent Spe|
000216c0  61 6b 5f 4d 69 73 63 0a  3d 3e 09 52 30 20 3d 09  |ak_Misc.=>.R0 =.|
000216d0  34 20 28 72 65 6c 6f 61  64 20 77 6f 72 64 20 64  |4 (reload word d|
000216e0  69 63 74 69 6f 6e 61 72  79 29 0a 0a 54 68 69 73  |ictionary)..This|
000216f0  20 53 57 49 20 69 73 20  75 73 65 64 20 74 6f 20  | SWI is used to |
00021700  72 65 6c 6f 61 64 20 74  68 65 20 77 6f 72 64 20  |reload the word |
00021710  64 69 63 74 69 6f 6e 61  72 79 2e 0a 44 41 54 41  |dictionary..DATA|
00021720  d6 00 00 00 53 70 65 61  6b 5f 4d 69 73 63 20 34  |....Speak_Misc 4|
00021730  0a 23 50 61 72 65 6e 74  20 53 70 65 61 6b 5f 4d  |.#Parent Speak_M|
00021740  69 73 63 0a 3d 3e 09 52  30 20 3d 09 34 20 28 72  |isc.=>.R0 =.4 (r|
00021750  65 61 64 20 76 6f 69 63  65 20 6e 61 6d 65 73 29  |ead voice names)|
00021760  0a 3c 3d 09 52 30 20 3d  09 70 6f 69 6e 74 65 72  |.<=.R0 =.pointer|
00021770  20 74 6f 20 7a 65 72 6f  20 74 65 72 6d 69 6e 61  | to zero termina|
00021780  74 65 64 20 61 72 72 61  79 20 6f 66 20 6e 61 6d  |ted array of nam|
00021790  65 20 70 6f 69 6e 74 65  72 73 0a 0a 54 68 69 73  |e pointers..This|
000217a0  20 53 57 49 20 69 73 20  75 73 65 64 20 74 6f 20  | SWI is used to |
000217b0  72 65 61 64 20 74 68 65  20 6e 61 6d 65 73 20 6f  |read the names o|
000217c0  66 20 74 68 65 20 63 75  72 72 65 6e 74 6c 79 20  |f the currently |
000217d0  6b 6e 6f 77 6e 20 76 6f  69 63 65 73 20 77 68 69  |known voices whi|
000217e0  63 68 20 53 70 65 61 6b  20 63 61 6e 20 75 73 65  |ch Speak can use|
000217f0  2e 0a 00 00 44 41 54 41  a0 01 00 00 53 70 65 61  |....DATA....Spea|
00021800  6b 5f 53 61 79 20 20 28  26 34 41 44 38 33 29 0a  |k_Say  (&4AD83).|
00021810  23 50 61 72 65 6e 74 20  53 70 65 61 6b 5f 0a 3d  |#Parent Speak_.=|
00021820  3e 09 52 30 20 3d 09 70  6f 69 6e 74 65 72 20 74  |>.R0 =.pointer t|
00021830  6f 20 7a 65 72 6f 20 74  65 72 6d 69 6e 61 74 65  |o zero terminate|
00021840  64 20 73 74 72 69 6e 67  0a 09 52 31 20 3d 09 6e  |d string..R1 =.n|
00021850  75 6d 62 65 72 20 6f 66  20 63 68 72 61 63 74 65  |umber of chracte|
00021860  72 73 20 74 6f 20 73 61  79 2c 20 6f 72 20 30 20  |rs to say, or 0 |
00021870  66 6f 72 20 61 6c 6c 0a  09 52 32 20 3d 09 62 69  |for all..R2 =.bi|
00021880  74 73 20 30 2d 37 20 3a  09 76 6f 69 63 65 20 74  |ts 0-7 :.voice t|
00021890  6f 20 75 73 65 0a 09 20  09 6f 74 68 65 72 73 09  |o use.. .others.|
000218a0  09 72 65 73 65 72 76 65  64 0a 0a 54 68 69 73 20  |.reserved..This |
000218b0  53 57 49 20 69 73 20 63  61 6c 6c 65 64 20 74 6f  |SWI is called to|
000218c0  20 73 70 65 61 6b 20 61  20 6c 69 6e 65 20 6f 66  | speak a line of|
000218d0  20 74 65 78 74 2e 20 49  66 20 61 6e 20 6e 75 6d  | text. If an num|
000218e0  62 65 72 20 6f 66 20 63  68 61 72 61 63 74 65 72  |ber of character|
000218f0  73 20 69 73 20 67 69 76  65 6e 20 74 68 65 6e 20  |s is given then |
00021900  69 74 20 77 69 6c 6c 20  62 65 20 74 61 6b 65 6e  |it will be taken|
00021910  20 69 6e 74 6f 20 61 63  63 6f 75 6e 74 20 61 6e  | into account an|
00021920  64 20 69 66 20 6f 6e 6c  79 20 61 20 73 69 6e 67  |d if only a sing|
00021930  6c 65 20 77 6f 72 64 20  68 61 73 20 62 65 65 6e  |le word has been|
00021940  20 67 69 76 65 6e 20 74  68 65 6e 20 65 61 63 68  | given then each|
00021950  20 69 6e 64 69 76 69 64  75 61 6c 20 6c 65 74 74  | individual lett|
00021960  65 72 20 73 70 6f 6b 65  6e 2c 20 6f 74 68 65 72  |er spoken, other|
00021970  77 69 73 65 20 74 68 65  20 77 68 6f 6c 65 20 6c  |wise the whole l|
00021980  69 6e 65 20 77 69 6c 6c  20 62 65 20 73 70 6f 6b  |ine will be spok|
00021990  65 6e 2e 0a 44 41 54 41  6b 00 00 00 53 70 65 61  |en..DATAk...Spea|
000219a0  6b 5f 53 61 79 57 20 20  28 26 34 41 44 38 34 29  |k_SayW  (&4AD84)|
000219b0  0a 23 50 61 72 65 6e 74  20 53 70 65 61 6b 5f 0a  |.#Parent Speak_.|
000219c0  41 73 20 3c 53 70 65 61  6b 5f 53 61 79 3e 20 62  |As <Speak_Say> b|
000219d0  75 74 20 64 6f 65 73 20  6e 6f 74 20 72 65 74 75  |ut does not retu|
000219e0  72 6e 20 75 6e 74 69 6c  20 73 70 65 65 63 68 20  |rn until speech |
000219f0  68 61 73 20 63 6f 6d 70  6c 65 74 65 64 2e 0a 00  |has completed...|
00021a00  44 41 54 41 61 00 00 00  53 70 65 61 6b 5f 53 74  |DATAa...Speak_St|
00021a10  6f 70 20 20 28 26 34 41  44 38 35 29 0a 23 50 61  |op  (&4AD85).#Pa|
00021a20  72 65 6e 74 20 53 70 65  61 6b 5f 0a 54 68 69 73  |rent Speak_.This|
00021a30  20 53 57 49 20 69 73 20  63 61 6c 6c 65 64 20 74  | SWI is called t|
00021a40  6f 20 73 74 6f 70 20 53  70 65 61 6b 20 66 72 6f  |o stop Speak fro|
00021a50  6d 20 73 61 79 69 6e 67  20 74 68 69 6e 67 73 2e  |m saying things.|
00021a60  0a 00 00 00 44 41 54 41  9f 00 00 00 53 70 65 61  |....DATA....Spea|
00021a70  6b 5f 52 65 61 64 79 20  20 28 26 34 41 44 38 30  |k_Ready  (&4AD80|
00021a80  29 0a 23 50 61 72 65 6e  74 20 53 70 65 61 6b 5f  |).#Parent Speak_|
00021a90  0a 3c 3d 09 52 30 20 3d  09 30 20 69 66 20 73 74  |.<=.R0 =.0 if st|
00021aa0  69 6c 6c 20 73 70 65 61  6b 69 6e 67 2c 20 2d 31  |ill speaking, -1|
00021ab0  20 69 66 20 69 64 6c 65  0a 0a 54 68 69 73 20 53  | if idle..This S|
00021ac0  57 49 20 69 73 20 63 61  6c 6c 65 64 20 74 6f 20  |WI is called to |
00021ad0  63 68 65 63 6b 20 77 68  65 74 68 65 72 20 73 70  |check whether sp|
00021ae0  65 65 63 68 20 69 73 20  73 74 69 6c 6c 20 62 65  |eech is still be|
00021af0  69 6e 67 20 6f 75 74 70  75 74 20 6f 72 20 6e 6f  |ing output or no|
00021b00  74 2e 0a 00 44 41 54 41  90 00 00 00 53 70 65 61  |t...DATA....Spea|
00021b10  6b 5f 4d 69 73 63 20 34  0a 23 50 61 72 65 6e 74  |k_Misc 4.#Parent|
00021b20  20 53 70 65 61 6b 5f 4d  69 73 63 0a 3d 3e 09 52  | Speak_Misc.=>.R|
00021b30  30 20 3d 09 34 20 28 73  65 74 20 63 75 72 72 65  |0 =.4 (set curre|
00021b40  6e 74 20 76 6f 69 63 65  29 0a 09 52 31 20 3d 09  |nt voice)..R1 =.|
00021b50  6e 65 77 20 76 6f 69 63  65 20 6e 75 6d 62 65 72  |new voice number|
00021b60  0a 0a 54 68 69 73 20 53  57 49 20 69 73 20 75 73  |..This SWI is us|
00021b70  65 64 20 74 6f 20 73 65  74 20 74 68 65 20 63 75  |ed to set the cu|
00021b80  72 72 65 6e 74 20 76 6f  69 63 65 20 6e 75 6d 62  |rrent voice numb|
00021b90  65 72 2e 0a                                       |er..|
00021b94