file_id.diz
#############################################
## Keys for changing octaves ##
#############################################
### A - visible octaves: 1-3
### B - visible octaves: 2-4
### C - visible octaves: 3-5
#############################################
## Supported effects in the sample-editor ##
#############################################
### Sample name format: "@xxx@ blah blah"
### where xxx - following sample effects:
### A - Anticlick
### S - High-quality portamento
### D - Distortion
### C - Simple cut-off
### W - Simple wah-wah
### Examples:
### @AD@samplename - sample with anticlick
and distortion
### samplename - just a sample
without effects
#############################################
## Supported effects in the pattern-editor ##
#############################################
.-------------------------------------------.
| Standart effects: |
`-------------------------------------------`
### Format: Exx (E - effect number;
xx - parameter)
### 1xx - Portamento Up
### 2xx - Portamento Down
### 3xx - TonePortamento
### 9xx - SampleOffset
### Axx - VolumeSlide
### Bxx - PositionJump
### Cxx - Set Volume
### Dxx - PatternBreak
### Exx - Extended effects
### Fxx - Set Speed
.-------------------------------------------.
| Extended effects: |
`-------------------------------------------`
### Format: ENx (E - E; N - effect number;
x - parameter)
### E1x - Fineslide Up
### E2x - Fineslide Down
### EAx - FineVol Up
### EBx - FineVol Down
.-------------------------------------------.
| PsyTexx1.x specific effects: |
`-------------------------------------------`
### 6xx - Wah-wah speed
### 7xx - Cut-off value
### 8xx - Super-pitch note (FF - reset)
Cmd 1. Portamento up [Speed:$00-$FF]
------------------------------------
Usage: $1 + portamento speed
Portamento up will simply slide the
sample pitch up. You can NOT slide
higher than B-3! (Period 113)
Example: C-300103 1 is the command,
3 is the portamentospeed.
NOTE: The portamento will be called as
many times as the speed of the song.
This means that you'll sometimes have
trouble sliding accuratly. If you
change the speed without changing the
sliderates, it will sound bad...
Cmd 2. Portamento down [Speed:$00-FF]
-------------------------------------
Usage: $2 + portamento speed
Just like command 1, except that this
one slides the pitch down instead.
(Adds to the period).
You can NOT slide lower than C-1!
(Period 856)
Example: C-300203 2 is the command,
3 is the portamentospeed.
Cmd 3. Tone-portamento [Speed:$00-$FF]
--------------------------------------
Usage: Dest-note + $3 + slidespeed
This command will automatically slide
from the old note to the new.
You don't have to worry about which
direction to slide, you need only set
the slide speed. To keep on sliding,
just select the command $3 + 00.
Example: A-200000 First play a note.
C-300305 C-3 is the note to
slide to, 3 the command,
and 5 the speed.
Cmd 9. Set SampleOffset [Offs:$00-$FF]
--------------------------------------
Usage: $9 + Sampleoffset
This command will play from a chosen
position in the sample, and not from
the beginning. The two numbers equal
the two first numbers in the length
of the sample. Handy for speech-
samples.
Example: C-300923 Play sample from
offset $2300.
Cmd A. Volumeslide [Speed:$0-$F/$0-$F]
--------------------------------------
Usage: $A + upspeed + downspeed
Example: C-300A05 5 is the speed to
turn the volume down.
C-300A40 4 is the speed to
slide it up.
NOTE: The slide will be called as
many times as the speed of the song.
The slower the song, the more the
volume will be changed on each note.
Cmd B. Position-jump [Pos:$00-$7F]
----------------------------------
Usage: $B + position to continue at
Example: C-300B01 B is the command,
1 is the position to
restart the song at.
This command will also perform a
pattern-break (see 2 pages below).
You can use this command instead of
restart as on noisetracker, but you
must enter the position in hex!
Cmd C. Set volume [Volume:$00-$40]
----------------------------------
Usage: $C + new volume
Well, this old familiar command will
set the current volume to your own
selected. The highest volume is $40.
All volumes are represented in hex.
(Programmers do it in hex, you know!)
Example: C-300C10 C is the command,
10 is the volume (16 decimal).
Cmd D. Pattern-break [Pattern-pos:00-63, decimal]
----------------------------
Usage: $D + pattern-position
This command just jumps to the next
song-position, and continues play
from the patternposition you specify.
Example: C-300D00 Jump to the next
song-position and continue play
from patternposition 00.
Or: C-300D32 Jump to the next
song-position and continue play
from patternposition 32 instead.
Cmd E1. Fineslide up [Range:$0-$F]
----------------------------------
Usage: $E1 + value
This command works just like the
normal portamento up, except that
it only slides up once. It does not
continue sliding during the length of
the note.
Example: C-300E11 Slide up 1 at the
beginning of the note.
(Great for creating chorus effects)
Cmd E2. Fineslide down [Range:$0-$F]
------------------------------------
Usage: $E2 + value
This command works just like the
normal portamento down, except that
it only slides down once. It does not
continue sliding during the length of
the note.
Example: C-300E26 Slide up 6 at the
beginning of the note.
Cmd EA. FineVolsl up [Range:$0-$F]
----------------------------------
Usage: $EA + value
This command works just like the
normal volumeslide up, except that
it only slides up once. It does not
continue sliding during the length of
the note.
Example: C-300EA3 Slide volume up 1
at the beginning of the note.
Cmd EB. FineVolsl down [Range:$0-$F]
------------------------------------
Usage: $EB + value
This command works just like the
normal volumeslide down, except that
it only slides down once. It does not
continue sliding during the length of
the note.
Example: C-300EB6 Slide volume down
6 at the beginning of the note.
Cmd F. Set speed [Speed:$00-$FF]
--------------------------------
Usage: $F + speed
This command will set the speed of the
song.26.05.02 14:03:51
Èòàê... Ïîæàëóé, âñåòàêè áóäó çàïèñûâàòü â êðàòöå õîä ðàáîòû íàä Psytexx.
Ñ ìîìåíòà ðåëèçà ïîñëåäíåé âåðñèè 0.4 îí óæå óñïåë ïðåâðàòèòüñÿ â íàñòîÿùèé òðåêåð. Íàêîíåö-òî...
Íî êîå-êàêèõ ôóíêöèé âñåæå åùå íå õâàòàåò... À èìåííî: êîïèðîâàíèÿ/âñòàâêè, î÷èñòêè ìîäóëÿ è çàïèñè. Êðîìå òîãî,
ýòî ÷óäî åùå íèêòî ïîêà íå âèäåë, è íå ðåøåí âîïðîñ ïî ïîâîäó åãî ðàñïðîñòðàíåíèÿ. Õîòåëîñü áû èçâëå÷ü õîòü êàêóþ-òî
ïðèáûëü, íî, ñ äðóãîé ñòîðîíû, íå õî÷åòñÿ çàðàíåå îòòàëêèâàòü îò ñåáÿ oldskool ìóçûêàíòîâ... Åñëè èì ýòî êîíå÷íî íàäî
áóäåò .) È åùå... Òóò ñåññèÿ êàê-òî íåçàìåòíî ïîäêðàëàñü... Òàê-÷òî íåêîòîðîå âðåìÿ ïðèäåòñÿ ïîòîðìîçèòü. Ïîêà âñå.
26.05.02 19:54:31
Äîáàâèë î÷èñòêó ïàëèòð.
30.05.02 17:35:04
Âðîäå äîäåëàë ôóíêöèþ çàïèñè â òåêóùèé îòêðûòûé ÌÎÄ-ôàéë... Ïîêà ðàáîòàåò .) Íî óæå âîçíèêëè ïðîáëåìû:
íå ïîëó÷àåòñÿ âûäåëèòü ðîâíî 64 êá ïàìÿòè :( Áóäåì ðàçáèðàòüñÿ.
31.05.02 17:27:40
Íå õî÷åò ðàáîòàòü ôóíêöèÿ âûâîäà òåêñòà â ïîëå... Òóäû åå :(
31.05.02 18:06:29
Ïîïðàâèë.
02.06.02 18:52:08
Èñïðàâèë îøèáêó ïðè çàïèñè òåêóùåãî ìîäóëÿ. Íå òåðïèòñÿ íàêîíåö äîäåëàòü ïåðâóþ âåðñèþ è
ïîïðîáûâàòü åå â äåëå...
16.06.02 14:58:44
Íó âñå... Ïåðâàÿ âåðñèÿ îêîí÷àòåëüíî äîäåëàíà... Âðîäå :) Íó ãëþêè îíè âñåãäà è âåçäå åñòü, òàê ÷òî ïîòèõîíüêó áóäåì
èñïðàâëÿòü.
17.03.03 00:18:00
Èíòåðåñíî, êàê ýòî ìåíÿ ñþäà ñíîâà çàíåñëî... :) Âîîáùåì ñäåëàë ïîääåðæêó Tungsten'à - òåïåðü ìîäû ìîæíî â íàóøíèêàõ ïèñàòü.
Êðîìå òîãî äîáàâèë íåñêîëüêî ïîëåçíîñòåé, à èìåííî 4 ôóíêöèè, âûçûâàåìûå èç îáëàñòè ãðàôôèòè:
1 - êëîíèðîâàíèå òåêóùåãî ýôôåêòà íà âåñü êàíàë
2 - ðàçìíîæåíèå òåêóùåãî áëîêà íà âåñü êàíàë (áëîêîì ñ÷èòàåòñÿ ïðîìåæóòîê îò íà÷àëà ïàëèòðû äî ïîëîæåíèÿ êóðñîðà âêëþ÷èòåëüíî)
3 - ýõî (îäíî- è äâóõêàíàëüíîå)
4 - ïîâûøåíèå/ïîíèæåíèå íà òîí âñåõ íîò â òåêóùåì êàíàëå
5 - ïëàâíîå èçìåíåíèå ãðîìêîñòè êàíàëà.
Íà ñåãîäíÿ õâàòèò :) Çàâòðà áóäåì èñïûòûâàòü...
20.03.03 23:49:23
Óôô... Âñåòàêè òàêèå ãëóïûå îøèáêè ïîðîé áûâàþò... Áóêâàëüíî èç çà îäíîãî ñèìâîëà âñÿ ïðîãà ðóøèòñÿ. Íåñêîëüêî äíåé èñêàë :( Íàäî áûòü âíèìàòåëüíåå. Ñîáñòâåííî ãîâîðÿ ÿ òàê è íå âðóáèëñÿ, êàê ìîæíî èç Tungsten'à âûãðóæàòü ïðîèçâîëüíóþ áàçó äàííûõ :) Ñòðàííî... Ïðèøëîñü óõèùðåíèå îäíî ñäåëàòü: òåïåðü ïîñëå âûõîäà èç òðåêåðà òåêóùàÿ êîìïîçèöèÿ ñîõðàíÿåòñÿ â BACKUP.MOD. Òîëüêî íå çàáóäüòå ýòîò BACKUP èíñòàëëèðîâàòü âìåñòå ñ ñàìîé ïðîãîé, è òîãäà ïîñëå êàæäîé ñèíõðîíèçàöèè ñ äåñêòîïîì ôàéëèê BACKUP_MOD.PDB áóäåò ëåæàòü â êàòàëîãå PALM/.../BACKUP. Îñòàíåòñÿ åãî ëèøü ñêîíâåðòèðîâàòü â íîðìàëüíûé MOD è ìîæíî áóäåò íàñëîæäàòüñÿ ìóçîíîì, êîòîðûé áûë çàãðóæåí â òðåêåðå ïåðåä ñàìûì âûõîäîì.
 áëèæàéøèõ ïëàíàõ - ðåäàêòîð ñåìïëîâ + çàïèñü ñ ìèêðîôîíà. PsyTexx ðóëèò :))
À òåïåðü... ãì... ñïàòü? :)
07.04.03 00:38:48
Ïåðâàÿ âåðñèÿ ðåäàêòîðà ñåìïëîâ óäà÷íî ñòàðòîâàëà :) Ðàáîòàåò çàïèñü èç ïàëèòð è ñ ìèêðîôîíà.
26.08.03 18:24:00
Êàðòèíà "Íå æäàëè". Íåñêîëüêî äíåé íàçàä îêàçàëîñü, ÷òî ÿ âñ¸ ýòî âðåìÿ íåïðàâèëüíî ðàáîòàë ñî çâóêîâîé
ñèñòåìîé Ïàëüìà .( Æóòü... Ýòîæ ñêîëüêî áûëî ëèøíèõ ïðîáëåì èç çà îäíîé òîëüêî íåäîðàáîòêè. Ïðè÷åì
íà ìî¸ì TungstenT òàêîé ñïîñîá ñðàáàòûâàë, à âîò íà íîâåíüêèõ Zire è T|C âîçíèêëè ñåðüåçíûå ïðîáëåìû.
Òåïåðü äóìàþ, êàê ïîä ýòî ïîäñòðîèòü ArmZX. À âîò PsyTexx, êàæèñü, ñåãîäíÿ óæå ïåðåäåëàë íà íîâûé ëàä .)
Åñëè âñ¸ ïîéäåò òàê êàê íàäî, òî èãðàòü îí áóäåò îáñîëþòíî íà ëþáîé ìàøèíêå.
22.04.04 23:49:00
Óô... Îáíîâêà â âèäå âîñüìè êàíàëîâ :) Íî ñêîëüêî áàãîâ... íåïîíÿòíîãî ïðîèñõîæäåíèÿ... Ïðàâèì.
24.04.04 09:49:00
Âñ¸ êðóòî :) 8 êàíàëîâ, ñòåðåî, 16 áèò. Äâèãàþ ïàðó, îïòèìèçèðóþ ðåíäåð ïîä ARM. Ñëàâíîå íà÷àëî äíÿ. Åùå ìàëîñòü ïîääåëàþ è íà÷íó ðàáîòó íàä ñàéòîì "Palm Music Central" - ïåðâûé â ìèðå, íàñêîëüêî ÿ ïîíèìàþ. Äàâíî ïîðà.
Ïðîáåæàëñÿ ïî âñåìó êîäó òðåêåðà... :) Ýòî êàê NightRadio: øóì ýôèðà, ñêâîçü êîòîðûé ïðîáèâàþòñÿ êàêèå-òî î÷åíü êðàñèâûå çâóêè. Äóìàë íàä îòêðûòèåì èñõîäíèêîâ - ãëàâíîå íàðîä íå ñïóãíóòü :)
25.04.04 19:00:00
Ïðîöåññ èä¸ò :) Êðîìå XM-äâèæêà... ÷òî-òî òàì íå ëàäèòñÿ. Íó íè÷åãî, ïîïðàâèì. À â íàðîä ïîêà MOD äâèãàòü áóäåì.
27.05.04 20:13:00
Gjcnb xnj ktnj yfcnegbkj - cjkysir.... fuck.. :( translit is no so good.
Voobshem poporjadku:
1) XM player is working now!
2) It's working in Windows, Linux and PalmOS (!!)
3) It has high-end frequency interpolation! It's much better than standart XM-quality!
ToDo:
1) Some XM-effects
2) Multiplatform GUI (with text mode support)
3) Multiplatform XM-tracker! PsyTexx 2
Path: pdxgate!usenet.ee.pdx.edu!ogicse!network.ucsd.edu!usc!wupost!uunet!pipex!marble.uknet.ac.uk!uknet!edcastle!iantw
From: iantw@castle.ed.ac.uk (Ian Tweedie)
Newsgroups: comp.sys.ibm.pc.demos
Subject: Re: Does anyone have the MOD file format?
Message-ID: <33868@castle.ed.ac.uk>
Date: 5 Apr 93 11:48:50 GMT
References: <lru8ebINN79h@earth.cs.utexas.edu> <LESHER.93Apr4142851@vega.cs.bucknell.edu>
Organization: Edinburgh University
Lines: 542
lesher@vega.cs.bucknell.edu (Tim Lesher) writes:
>I don't have it, but I seem to remember that there's a really good
>tutorial packaged with the Mac mod player "The Sound Trecker". You
>can get if from wuarchive.wustl.edu, /mirrors/info-mac/sound/st.
Here is the Amiga (ProTracker) module format document. The first part
I got from a BBS, the second part I got from Mark Cox (author of
ModPlay, etc).
*********************************************************************
Protracker 1.1B Song/Module Format:
Offset Bytes Description
0 20 Songname. Remember to put trailing null bytes at the end...
Information for sample 1-31:
Offset Bytes Description
20 22 Samplename for sample 1. Pad with null bytes.
42 2 Samplelength for sample 1. Stored as number of words.
Multiply by two to get real sample length in bytes.
44 1 Lower four bits are the finetune value, stored as a signed
four bit number. The upper four bits are not used, and
should be set to zero.
Value: Finetune:
0 0
1 +1
2 +2
3 +3
4 +4
5 +5
6 +6
7 +7
8 -8
9 -7
A -6
B -5
C -4
D -3
E -2
F -1
45 1 Volume for sample 1. Range is $00-$40, or 0-64 decimal.
46 2 Repeat point for sample 1. Stored as number of words offset
from start of sample. Multiply by two to get offset in bytes.
48 2 Repeat Length for sample 1. Stored as number of words in
loop. Multiply by two to get replen in bytes.
Information for the next 30 samples starts here. It's just like the info for
sample 1.
Offset Bytes Description
50 30 Sample 2...
80 30 Sample 3...
.
.
.
890 30 Sample 30...
920 30 Sample 31...
Offset Bytes Description
950 1 Songlength. Range is 1-128.
951 1 Well... this little byte here is set to 127, so that old
trackers will search through all patterns when loading.
Noisetracker uses this byte for restart, but we don't.
952 128 Song positions 0-127. Each hold a number from 0-63 that
tells the tracker what pattern to play at that position.
1080 4 The four letters "M.K." - This is something Mahoney & Kaktus
inserted when they increased the number of samples from
15 to 31. If it's not there, the module/song uses 15 samples
or the text has been removed to make the module harder to
rip. Startrekker puts "FLT4" or "FLT8" there instead.
Offset Bytes Description
1084 1024 Data for pattern 00.
.
.
.
xxxx Number of patterns stored is equal to the highest patternnumber
in the song position table (at offset 952-1079).
Each note is stored as 4 bytes, and all four notes at each position in
the pattern are stored after each other.
00 - chan1 chan2 chan3 chan4
01 - chan1 chan2 chan3 chan4
02 - chan1 chan2 chan3 chan4
etc.
Info for each note:
_____byte 1_____ byte2_ _____byte 3_____ byte4_
/ / / /
0000 0000-00000000 0000 0000-00000000
Upper four 12 bits for Lower four Effect command.
bits of sam- note period. bits of sam-
ple number. ple number.
Periodtable for Tuning 0, Normal
C-1 to B-1 : 856,808,762,720,678,640,604,570,538,508,480,453
C-2 to B-2 : 428,404,381,360,339,320,302,285,269,254,240,226
C-3 to B-3 : 214,202,190,180,170,160,151,143,135,127,120,113
To determine what note to show, scan through the table until you find
the same period as the one stored in byte 1-2. Use the index to look
up in a notenames table.
This is the data stored in a normal song. A packed song starts with the
four letters "PACK", but i don't know how the song is packed: You can
get the source code for the cruncher/decruncher from us if you need it,
but I don't understand it; I've just ripped it from another tracker...
In a module, all the samples are stored right after the patterndata.
To determine where a sample starts and stops, you use the sampleinfo
structures in the beginning of the file (from offset 20). Take a look
at the mt_init routine in the playroutine, and you'll see just how it
is done.
Lars "ZAP" Hamre/Amiga Freelancers
--------------------------
Found that document...
Mark J Cox ------------------------------------------- m.j.h.cox@bradford.ac.uk
University of Bradford ---------------------------- bc732@cleveland.freenet.edu
Mark
EFFECT COMMANDS
---------------
Effect commands on protracker should
be compatible with all other trackers.
0 - None/Arpeggio 8 - * NOT USED *
1 - Portamento Up 9 - SampleOffset
2 - Portamento Down A - VolumeSlide
3 - TonePortamento B - PositionJump
4 - Vibrato C - Set Volume
5 - ToneP + VolSlide D - PatternBreak
6 - Vibra + VolSlide E - Misc. Cmds
7 - Tremolo F - Set Speed
E - COMMANDS
------------
The E command has been altered to
contain more commands than one.
E0- Filter On/Off E8- * NOT USED *
E1- Fineslide Up E9- Retrig Note
E2- Fineslide Down EA- FineVol Up
E3- Glissando Control EB- FineVol Down
E4- Vibrato Control EC- NoteCut
E5- Set Finetune ED- NoteDelay
E6- Patternloop EE- PatternDelay
E7- Tremolo Control EF- Invert Loop
Cmd 0. Arpeggio [Range:$0-$F/$0-$F]
-----------------------------------
Usage: $0 + 1st halfnote add
+ 2nd halfnote add
Arpeggio is used to simulate chords.
This is done by rapidly changing the
pitch between 3(or 2) different notes.
It sounds very noisy and grainy on
most samples, but ok on monotone ones.
Example: C-300047 C-major chord:
(C+E+G or C+4+7 halfnotes)
C-300037 C-minor chord:
(C+D#+G or C+3+7 halfnotes)
Cmd 1. Portamento up [Speed:$00-$FF]
------------------------------------
Usage: $1 + portamento speed
Portamento up will simply slide the
sample pitch up. You can NOT slide
higher than B-3! (Period 113)
Example: C-300103 1 is the command,
3 is the portamentospeed.
NOTE: The portamento will be called as
many times as the speed of the song.
This means that you'll sometimes have
trouble sliding accuratly. If you
change the speed without changing the
sliderates, it will sound bad...
Cmd 2. Portamento down [Speed:$00-FF]
-------------------------------------
Usage: $2 + portamento speed
Just like command 1, except that this
one slides the pitch down instead.
(Adds to the period).
You can NOT slide lower than C-1!
(Period 856)
Example: C-300203 2 is the command,
3 is the portamentospeed.
Cmd 3. Tone-portamento [Speed:$00-$FF]
--------------------------------------
Usage: Dest-note + $3 + slidespeed
This command will automatically slide
from the old note to the new.
You don't have to worry about which
direction to slide, you need only set
the slide speed. To keep on sliding,
just select the command $3 + 00.
Example: A-200000 First play a note.
C-300305 C-3 is the note to
slide to, 3 the command,
and 5 the speed.
Cmd 4. Vibrato [Rate:$0-$F,Dpth:$0-$F]
--------------------------------------
Usage: $4 + vibratorate + vibratodepth
Example: C-300481 4 is the command,
8 is the speed of the vibrato,
and 1 is the depth of the vibrato.
To keep on vibrating, just select
the command $4 + 00. To change the
vibrato, you can alter the rate,
depth or both. Use command E4- to
change the vibrato-waveform.
Cmd 5. ToneP + Volsl [Spd:$0-$F/$0-$F]
--------------------------------------
Usage: $5 + upspeed + downspeed
This command will continue the current
toneportamento and slide the volume
at the same time. Stolen from NT2.0.
Example: C-300503 3 is the speed to
turn the volume down.
C-300540 4 is the speed to
slide it up.
Cmd 6. Vibra + Volsl [Spd:$0-$F/$0-$F]
--------------------------------------
Usage: $6 + upspeed + downspeed
This command will continue the current
vibrato and slide the volume at the
same time. Stolen from NT2.0.
Example: C-300605 5 is the speed to
turn the volume down.
C-300640 4 is the speed to
slide it up.
Cmd 7. Tremolo [Rate:$0-$F,Dpth:$0-$F]
--------------------------------------
Usage: $7 + tremolorate + tremolodepth
Tremolo vibrates the volume.
Example: C-300794 7 is the command,
9 is the speed of the tremolo,
and 4 is the depth of the tremolo.
To keep on tremoling, just select
the command $7 + 00. To change the
tremolo, you can alter the rate,
depth or both. Use command E7- to
change the tremolo-waveform.
Cmd 9. Set SampleOffset [Offs:$00-$FF]
--------------------------------------
Usage: $9 + Sampleoffset
This command will play from a chosen
position in the sample, and not from
the beginning. The two numbers equal
the two first numbers in the length
of the sample. Handy for speech-
samples.
Example: C-300923 Play sample from
offset $2300.
Cmd A. Volumeslide [Speed:$0-$F/$0-$F]
--------------------------------------
Usage: $A + upspeed + downspeed
Example: C-300A05 5 is the speed to
turn the volume down.
C-300A40 4 is the speed to
slide it up.
NOTE: The slide will be called as
many times as the speed of the song.
The slower the song, the more the
volume will be changed on each note.
Cmd B. Position-jump [Pos:$00-$7F]
----------------------------------
Usage: $B + position to continue at
Example: C-300B01 B is the command,
1 is the position to
restart the song at.
This command will also perform a
pattern-break (see 2 pages below).
You can use this command instead of
restart as on noisetracker, but you
must enter the position in hex!
Cmd C. Set volume [Volume:$00-$40]
----------------------------------
Usage: $C + new volume
Well, this old familiar command will
set the current volume to your own
selected. The highest volume is $40.
All volumes are represented in hex.
(Programmers do it in hex, you know!)
Example: C-300C10 C is the command,
10 is the volume (16 decimal).
Cmd D. Pattern-break
[Pattern-pos:00-63, decimal]
----------------------------
Usage: $D + pattern-position
This command just jumps to the next
song-position, and continues play
from the patternposition you specify.
Example: C-300D00 Jump to the next
song-position and continue play
from patternposition 00.
Or: C-300D32 Jump to the next
song-position and continue play
from patternposition 32 instead.
Cmd E0. Set filter [Range:$0-$1]
--------------------------------
Usage: $E0 + filter-status
This command jerks around with the
sound-filter on some A500 + A2000.
All other Amiga-users should keep out
of playing around with it.
Example: C-300E01 disconnects filter
(turns power LED off)
C-300E00 connects filter
(turns power LED on)
Cmd E1. Fineslide up [Range:$0-$F]
----------------------------------
Usage: $E1 + value
This command works just like the
normal portamento up, except that
it only slides up once. It does not
continue sliding during the length of
the note.
Example: C-300E11 Slide up 1 at the
beginning of the note.
(Great for creating chorus effects)
Cmd E2. Fineslide down [Range:$0-$F]
------------------------------------
Usage: $E2 + value
This command works just like the
normal portamento down, except that
it only slides down once. It does not
continue sliding during the length of
the note.
Example: C-300E26 Slide up 6 at the
beginning of the note.
Cmd E3. Glissando Ctrl [Range:$0-$1]
------------------------------------
Usage: $E3 + Glissando-Status
Glissando must be used with the tone-
portamento command. When glissando is
activated, toneportamento will slide
a halfnote at a time, instead of a
straight slide.
Example: C-300E31 Turn Glissando on.
C-300E30 Turn Glissando off.
Cmd E4. Set vibrato waveform
[Range:$0-$3]
----------------------------
Usage: $E4 + vibrato-waveform
Example: C-300E40 Set sine(default)
E44 Don't retrig WF
C-300E41 Set Ramp Down
E45 Don't retrig WF
C-300E42 Set Squarewave
E46 Don't retrig WF
C-300E43 Set Random
E47 Don't retrig WF
Cmd E5. Set finetune [Range:$0-$F]
----------------------------------
Usage: $E5 + finetune-value
Example: C-300E51 Set finetune to 1.
Use these tables to figure out the
finetune-value.
Finetune: +7 +6 +5 +4 +3 +2 +1 0
Value: 7 6 5 4 3 2 1 0
Finetune: -1 -2 -3 -4 -5 -6 -7 -8
Value: F E D C B A 9 8
Cmd E6. PatternLoop [Loops:$0-$F]
----------------------------------
Usage: $E6 + number of loops
This command will loop a part of a
pattern.
Example: C-300E60 Set loopstart.
C-300E63 Jump to loop 3
times before playing on.
Cmd E7. Set tremolo waveform
[Range:$0-$3]
----------------------------
Usage: $E7 + tremolo-waveform
Example: C-300E70 Set sine(default)
E74 Don't retrig WF
C-300E71 Set Ramp Down
E75 Don't retrig WF
C-300E72 Set Squarewave
E76 Don't retrig WF
C-300E73 Set Random
E77 Don't retrig WF
Cmd E9. Retrig note [Value:$0-$F]
---------------------------------
Usage: $E9 + Tick to Retrig note at.
This command will retrig the same note
before playing the next. Where to
retrig depends on the speed of the
song. If you retrig with 1 in speed 6
that note will be trigged 6 times in
one note slot. Retrig on hi-hats!
Example: C-300F06 Set speed to 6.
C-300E93 Retrig at tick 3
out of 6.
Cmd EA. FineVolsl up [Range:$0-$F]
----------------------------------
Usage: $EA + value
This command works just like the
normal volumeslide up, except that
it only slides up once. It does not
continue sliding during the length of
the note.
Example: C-300EA3 Slide volume up 1
at the beginning of the note.
Cmd EB. FineVolsl down [Range:$0-$F]
------------------------------------
Usage: $EB + value
This command works just like the
normal volumeslide down, except that
it only slides down once. It does not
continue sliding during the length of
the note.
Example: C-300EB6 Slide volume down
6 at the beginning of the note.
Cmd EC. Cut note [Value:$0-$F]
------------------------------
Usage: $EC + Tick to Cut note at.
This command will cut the note
at the selected tick, creating
extremely short notes.
Example: C-300F06 Set speed to 6.
C-300EC3 Cut at tick 3 out
of 6.
Note that the note is not really cut,
the volume is just turned down.
Cmd ED. NoteDelay [Value:$0-$F]
-------------------------------
Usage: $ED + ticks to delay note.
This command will delay the note
to the selected tick.
Example: C-300F06 Set speed to 6.
C-300ED3 Play note at tick
3 out of 6.
Cmd EE. PatternDelay [Notes:$0-$F]
----------------------------------
Usage: $EE + notes to delay pattern.
This command will delay the pattern
the selected numbers of notes.
Example: C-300EE8 Delay pattern 8
notes before playing on.
All other effects are still active
when the pattern is being delayed.
Cmd EF. Invert Loop [Speed:$0-$F]
---------------------------------
Usage: $EF + Invertspeed
This command will need a short loop
($10,20,40,80 etc. bytes) to work.
It will invert the loop byte by byte.
Sounds better than funkrepeat...
Example: C-300EF8 Set invspeed to 8.
To turn off the inverting, set
invspeed to 0, or press ctrl + Z.
Cmd F. Set speed [Speed:$00-$FF]
--------------------------------
Usage: $F + speed
This command will set the speed of the
song.
---------------------------end forwarded message----------------------------
--
--Jeff Hartung--
Disclaimer: My opinions only, etc., etc., BLAH! BLAH! BLAH!...
InterNet - hartung@crl.ucsd.edu BITNET - hartung@ucsd
UUCP - ucsd!crl.ucsd.edu!hartung
This is a reposting for an earlier one.
Enjoy.....
ian
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
Public file MODFIL10.TXT - Version 1.0 - by Thunder
Introduction
_______________________________
What this file attempts to do is describe the MOD format in detail and
elaborate on the 'effects' that are possible. This is the first version
of this file, so if there are mistakes (and I expect at least a couple),
please let me know. This information was compiled from a variety of
sources, many of them anonymous, so I will thank them all, and they
hopefully know who they are. I would like to keep this file up to date.
It will be posted as 'MODFILxx.TXT' or 'MODFILxx.ZIP', where 'xx' is the
version number (MODFIL10.TXT being the first release).
I assume that you have some prior knowledge of some 'technical' terms,
including: sample, channel (or voice), frequency, logarithmic vs. linear
volume, byte, word, long integer, and hexadecimal format. It also
assumes that you know something about the machine that you are
programming on. If you do not know these things, this file will NOT
teach you them. Refer to other sources before going further.
I am a PC programmer, so I cannot elaborate on particular procedures,
routines, methodologies, or tricks that can be performed on other
architechtures. I have written routines for the Gravis UltraSound,
which is probably the easiest sound card (on the PC anyway) to write MOD
routines for.
I disclaim everything in this file. This information is for your use
personally, but I don't care if you give it to everyone else on the
planet. I would like the file to stay intact, and if you use the
information a 'hello' to me in your program's credits would be nice. If
the information is wrong or gives you problems or damages your equipment
or person, tough luck. I am not responsible for anything you DO with
this information.
If you have additions, corrections, clarification or questions about this
information or this file, you can send them to me through the internet to
'kurt.kennett@gravis.com' or 'kurtt@sfu.ca'.
Here is an overview of what is in this file:
1 General
2 File Format
2.1 Song Name
2.2 Sample Information
2.3 Number of patterns in song
2.4 Song end jump position
2.5 Pattern table
2.6 File format tag
2.7 Patterns
2.8 Sample data
_______________________________________________________________________
1
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
3 Playing the files
3.1 Timing
3.2 Periods
3.3 Fine-Tuning
3.4 Effects
3.5 Other information
4 Period and Volume tables
1.0 General
___________________________________________
Files with the extension '.MOD' are sequenced music files. The file
format has it's roots in the Commodore Amiga computer (ugh!). These
files use different digital 'samples' played at various frequencies to
create three octaves of 'notes' for that sample. In addition to
different 'notes', there are a large number of 'effects' which can be
done to produce variations on the different notes.
There are many variations on the MOD format. Since the format originated
on the Commodore Amiga computer, the files were geared towards a machine
with 4 voices. These days, with a GUS (Gravis UltraSound), you have 32
independent voices. If you are programming for a sound board or device
that has only 1 or 2 digital voices, you will have to mix together the 4
to 8 output channels into those voices. I will not go into this process
here, since I do not have experience with it (you don't need to mix on
the GUS). If someone would like to mail me a TEXT explaination of how to
do the mixing, I will include it in this file. I DO NOT WANT CODE --
learn how to write english.
The earliest versions of the MOD format used a maximum of 15 instruments
and had 4 channels. Through some modifications in format, a 'newer'
standard emerged, with a maximum of 31 instruments and up to 8 channels.
You can tell what format of file you are working with by a four-character
tag field. The programs that are used to play these files on the Amiga
are called 'Noisetracker', 'Soundtracker', and 'Protracker'.
2.0 File Format
_______________________________
What follows is a description of a file broken down in a field-by-field
format. This is just a general description. Please see the following
subsections for a detailed description of what each field is and what it
means.
'Big-End Word' refers to the word format on the Amiga. A 2-byte integer
value is a word. On the Amiga, this value has the internal
representation HHLL, where HH means the high-order byte and LL means the
low-order byte. The Intel chips (inside PCs) use a LLHH format for their
words. This means that if you are writing routines for the PC, you have
to flip the high and low order bytes to retrieve meaningful values.
_______________________________________________________________________
2
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
Just to piss off all the C programmers, I'm going to start the file
offset at 1 instead of 0.
Offset Length Format Description
======== ======== ========= =============
1 20 Chars Title of the song. If the title is not a
full 20 chars in length, it will be null-
terminated.
21 22 Chars Sample 1 name. If the name is not a full
22 chars in length, it will be null
terminated.
43 2 Big-End Sample 1 length in 2-byte words. Multiply
Word this value by 2 to get the length of the
sample in bytes.
45 1 SNibble Sample 1 finetune.
46 1 Byte Sample 1 linear volume.
47 2 Big-End Sample 1 repeat offset in 2-byte words.
Word Multiply this value by 2 to get the position
in bytes.
49 2 Big-End Sample 1 repeat length in 2-byte words.
Word Multiply this value by 2 to get the length
in bytes.
51 30 Sample 2 information. Same format.
81 30 Sample 3 information Same format.
. There will either be 15 or 31 sample information blocks.
. See the format tag field below for a description of how
. to find out how many instruments there are. We'll go on
. the assumption that there are 31 instruments in the file.
921 30 Sample 31 information.
951 1 Byte Number of patterns in SONG as played.
952 1 Byte Song end jump position.
953 128 Bytes Pattern Table. These list up to 128
pattern numbers and the order they should
be played in.
1081 4 Chars File format tag.
1085 ... Pattern and Sample data. Please see pattern section and
sample section for more information.
_______________________________________________________________________
3
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
2.1 Song Name
_______________________________
This data is pretty self-representative. This is a C 'string' that is
null-terminated (i.e. ASCII character 0 is put at the end of the text is
the text does not fill up the entire field). Some module writers use
this field and the instrument name fields to write 'hello' messages to
their friends or dedications instead of giving names to the song or it's
samples. I in no way discourage this.
2.2 Sample Information
_______________________________
Based on the format tag field, there can be 15 or 31 sampled instruments
for the song. These days it is rare to run into an 'older' format song
with only 15 instruments. Please see the 'File format tag' field for
more information on how to determine how many samples there are in a
file.
The first field in a sample information block is the sample's name. As
was mentioned above, these names are frequently used by the composer to
say hello to his or her friends. Again, I in no way discourage this. If
the sample name begins with a '#' character (ASCII $23 (35)) then this is
assumed not to be an instrument name, and is probably a message.
The second field is the sample length in words. Once again, since this
is a 680x0 word, the bytes have the order HHLL, and you have to swap them
to use the word on PCs. The first 2 bytes of the sample are used by the
Amiga players for repeat information, and therefore are NOT part of the
playable data. Therefore, if this field is evaluated to a length of less
than 3 bytes, there is NO sample.
The third field is the sample's initial finetune value. The lower four
bits represent a signed nibble (-8..7). Each finetune step changes the
note 1/8th of a semitone. This is implemented by switching to a
different table of period-values for each finetune value. See section
3.2 for a discussion of fine-tuning.
The fourth field is the sample's playback volume. These are LINEAR
values that range from 0 to 64, with 64 being maximum volume. If you are
implementing a MOD player, remember to check if you need to use
logarithmic volumes. 'Decibel' is a logrithmical unit, which represents
how we feel sound intensity. The volume and decibel value table for
conversions is on the next page.
_______________________________________________________________________
4
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
Volume Decibel Value Volume Decibel Value
------------------------- ------------------------
64 0.0 32 -6.0
63 -0.1 31 -6.3
62 -0.3 30 -6.6
61 -0.4 29 -6.9
60 -0.6 28 -7.2
59 -0.7 27 -7.5
58 -0.9 26 -7.8
57 -1.0 25 -8.2
56 -1.2 24 -8.5
55 -1.3 23 -8.9
54 -1.5 22 -9.3
53 -1.6 21 -9.7
52 -1.8 20 -10.1
51 -2.0 19 -10.5
50 -2.1 18 -11.0
49 -2.3 17 -11.5
48 -2.5 16 -12.0
47 -2.7 15 -12.6
46 -2.9 14 -13.2
45 -3.1 13 -13.8
44 -3.3 12 -14.5
43 -3.5 11 -15.3
42 -3.7 10 -16.1
41 -3.9 9 -17.0
40 -4.1 8 -18.1
39 -4.3 7 -19.2
38 -4.5 6 -20.6
37 -4.8 5 -22.1
36 -5.0 4 -24.1
35 -5.2 3 -26.6
34 -5.5 2 -30.1
33 -5.8 1 -36.1
0 Minus infinity
The reason for the table starting at 0 dB as the convention from
taperecorders of having 0 dB as the optimal recording condition, and
displaying anything worse as a negative number. Please see section 4.0
for a complete linear volume format for Gravis' UltraSound.
The fifth field in the sample information block is the sample repeat
start offset. Once this sample has been played completely from beginning
to end, if the repeat length (next field) is greater than two bytes it
will loop back to this position in the sample and continue playing. Once
it has played for the repeat length, it continues to loop back to the
repeat start offset. This means the sample continues playing until it is
told to stop.
The last, or sixth field in the sample information is the repeat length.
A sample is only looped if this value is greater than 2 bytes. See the
preceeding paragraph for more information on looping.
_______________________________________________________________________
5
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
2.3 Number of patterns in song
_______________________________
This byte represents the number of patterns which are played in the entire
SONG. This is NOT the number of patterns in the FILE. The file may
contain (theoretically) up to 256 patterns, whereas the song is just a
selection of those patterns. If I have 30 patterns in my file, and I just
want to play patterns 6, 12, 3, 7, and 8 in that order, this byte will have
the value 5.
2.4 Song end jump position
_______________________________
Historically, this byte has been used for many purposes. Most commonly
in the newer format it has been used to signify if a song is to be
repeated indefinitely. Some game programs have background music which
never ends. If this byte is less than 127, then it specifies the
position in the pattern table to jump to when the last pattern has been
played. If this byte is greater than or equal to 127, the song ends.
2.5 Pattern table
_______________________________
This 128 byte block lists the order that patterns in the file should be
played in. Only the number of bytes specified by the number of patterns
in the song (see section 2.3) can be considered valid. If the song is to
play patterns 6, 0, 12, 11, 21, and 10 in that order, then the table will
have those 6 values as the first 6 bytes:
Pattern Table
Position ---> 0 1 2 3 4 5 6 ---------> 127
|---|---|---|---|---|---|---|---...---|---|
|006|000|012|011|021|010| ????????? |
|---|---|---|---|---|---|---|---...---|---|
One of the effects which is possible (see section 3.4) is a position
jump. The argument to this effect is where to jump to in the PATTERN
TABLE. This does NOT specify which PATTERN to jump to.
In a particular pattern there are 64 lines. These lines are played in
order from 0 to 63. When the end of a pattern is reached, playing
continues with the next pattern in the pattern table, unless the current
pattern is the last one. If the current pattern IS the last one, check
the song end jump position (see section 2.4) to see if the song loops to
a certain position in the pattern table. Another one of the effects
which is possible (see section 3.4) is a pattern break. If this effect
is encountered, playing immediately jumps to the first line of the next
pattern.
_______________________________________________________________________
6
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
2.6 File format tag
_______________________________
This is the most controversial field in the file. This field has been
the most 'ravaged', with many people using it in non-standard ways for
their own purposes. There are a few standard tags which you can find
here which tell you DEFINITELY what file format the file is, but there
are many more non-standard tags. This makes the job of deciding what
format a MOD is a difficult one. I will attempt to describe the known
formats below. If you know of one I miss, please let me know.
'M.K.', 'FLT4',
'M!K!', '4CHN' : 4 channels, 31 instruments
'6CHN' : 6 channels, 31 instruments
'8CHN', 'OCTA' : 8 channels, 31 instruments
Other information that is found in this field can be assumed to be
somebody's attempt at protection, or some other information that was used
in the 'older' file format. If you can't find any of the above
information, it is best to assume that it's a 4 channel file. As for how
many instruments there are, check the bytes at location 471 in the file.
If there is text there (ASCII $20-$7E (32-126)), then you can probably
assume it's a 31-instrument file. Otherwise, it's an older 15 instrument
file.
2.7 Patterns
_______________________________
There can be any number of patterns in the file. They are stored after
the file header and before the sample data. There are USUALLY less than
64, but the maximum is not limited - if the file tag is 'M!K!' there are
definitely more than 64 patterns.
The patterns are stored sequentially (i.e. the first pattern is #0, the
second pattern is #1, etc.). An individual pattern is made up of 64
'lines', stored sequentially (i.e. line 0 to line 63). Each 'line' is
comprised of a note for each channel. Each 'note' is made up of 4 bytes,
so depending on the number of channels in the file, there are 16, 24, or
32 bytes per line.
For a four-channel file there are (4 bytes * 4 channels * 64 lines) =1024
bytes of information per pattern. To find out the number of patterns in
a particular file, calculate the length of 'header' information and add
to it the lengths of all samples that are mentioned in the sample
information blocks. Subtract this number from the file's total size and
divide by the number just computed (1024) to get the number of patterns
in the file.
_______________________________________________________________________
7
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
As mentioned above, each note is stored as 4 bytes. The information held
by these bytes has format shown below. How you display the contents of
the 4 bytes in a player is up to you. There is NO standard way to do
this.
Byte 1 Byte 2 Byte 3 Byte 4
--------- --------- --------- ---------
7654-3210 7654-3210 7654-3210 7654-3210
wwww XXXX xxxxxxxxx yyyy ZZZZ zzzzzzzzz
wwwwyyyy ( 8 bits) : sample number
XXXXxxxxxxxx (12 bits) : sample 'period'
ZZZZzzzzzzzz (12 bits) : effect and argument
The sample number refers to a sample specified in the sample information
block. Please see sections 2.2 and 2.8 for more information on the
samples.
The sample 'period' corresponds to a delay value on an Amiga computer.
Note that on an Intel processor, you have to order these 12 bits as
'xxxxxxxx0000XXXX' to read the value as a word. Please see sections 3.2
and 3.3 for more information on how to use these values.
The effect is an effect number and an argument for the effect. Please
see section 3.4 for a discussion of the effects and how to implement
them.
2.8 Sample data
_______________________________
The sample data follows all of the patterns. After you have finished
reading the pattern data, there will be just enough data left in the file
for all of the instruments specified in the sample information section.
The samples are stored sequentially from sample 1 to sample 31. The
sample's data is in 8-bit two's compliment format, so if it needs to be
in another format for your sound device to play it, don't forget to
convert (UltraSound users: you don't need to convert the data when
downloading).
As was mentioned in section 2.2, the first 2 bytes of the sample are used
by the Amiga MOD players for repeat information, and therefore are NOT
part of the playable data. PC users do not have to do anything with
these two bytes.
_______________________________________________________________________
8
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
3.0 Playing the files
_______________________________
Section 3 deals with playing MOD files. Specifically, it deals with
playing them on PC hardware - hopefully a Gravis UltraSound. The
Ultrasound is ideal for this and many other types of sound and song
processing, and is exceptionally easy to program. Gravis makes available
an SDK (Software Development Kit) which has both C, C++, and (by the end
of November) Borland Pascal versions. If you are programming a MOD
player for other hardware, you may still be able to use this information
for reference.
3.1 Timing
_______________________________
If lines are played sequentially, then how long should the player wait
between successive lines? On the Amiga, the amount of time a note spends
on a channel before the next note is started is calculated by using some
complex formulas based on the PAL color carrier frequency. I will not
try to bore you with the details of these calculations here, and if you
wan't them, email me.
A song can be played at a speed ranging from 1 to 127, where the speed
specifies how many 'ticks' before playing the next sample. A tick is
supposed to happen every .02 seconds, which gives 50 ticks per second.
At the start of a line all samples specified on that line are started,
samples playing are modified, speed is changed, etc. Some effects
require that changes be made to a sample playing on a channel during the
course of a line. For example, the retrigger effect re-starts a sample
at a certain tick within a line. If the song is playing at speed 6 and
the effect specifies a retrigger on the 4th tick:
Time Tick
0.00 1 - start all samples and effects
0.02 2
0.04 3
0.06 4 - retrigger sample here
0.08 5
0.10 6
------------
0.00 1 - start next line
.
.
Unless a speed is specified on the first line of the first pattern, the
song should start playing at speed 6. Please see section 3.4, effect $F,
for more information on changes in speed.
_______________________________________________________________________
9
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
3.2 Periods
_______________________________
MOD players use a technique called frequency shifting to produce
different 'notes' of the same sample. If I play a sample at 10 KHz, it
will sound one octave higher if I double the frequency to 20 KHz, and one
octave lower if I halve the frequency to 5 KHz. Since there are 12 notes
per octave on a keyboard (these are called half-steps), each frequency
corresponds to one twelfth root of two (~1.05946) times the frequency of
it's predecessor (to the left). Therefore, if the C-1 frequency (the
note of C in octave 1) is 4144 Hz then:
Note: C-1 C#1 D-1 ... C-2 ...
Freq: 4144 4390 4651 ... 8288 ...
The Amiga playing routines were written to run off different interrupts
for different Amiga computers, based on whether the machine was a PAL or
NTSC machine. The 'period' values are measures which are used in
calculating how much data to send to each of the 4 Amiga channels per
second (thereby specifying the frequency or pitch of the output).
For PC programmers, you don't have to worry about this that much. The
thing to remember is that a 'magic number' divided by twice the period
value will give the rate (frequency) to play the sample at. Here are the
magic numbers and the corresponding formulae. I don't know which number
is better to use - It doesn't make a huge difference.
PAL Value NTSC Value
=========== ============
7093789.2 7159090.5
SampleRate = -------------- SampleRate = --------------
Period * 2 Period * 2
To determine what frequency to play a sample at, look up the specified
period value in a table based on the finetune setting (see section 3.3
for more information on fine-tuning). If the period is 0, then the
previous period used on that channel is used.
As an example, let's look at the period table for finetune 0. The notes
that are possible in each octave are:
C C# D D# E F F# G G# A A# B
Octave 1: 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453
Octave 2: 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226
Octave 3: 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113
Octave 0:1712,1616,1525,1440,1357,1281,1209,1141,1077,1017, 961, 907
Octave 4: 107, 101, 95, 90, 85, 80, 76, 71, 67, 64, 60, 57
If I was requested to play a sample at period 302, I would scan through
the period table until I hit that value. At that point, I know that the
note is called 'F#2', F-sharp in octave 2. I calculate the playback
frequency by doing the calculations on the next page.
_______________________________________________________________________
10
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
PAL Value NTSC Value
=========== ============
7093789.2 7159090.5
----------- = 11745 Hz ----------- = 11853 Hz
302 * 2 302 * 2
There are normally only three octaves (1 to 3) used in playing songs.
Octaves 0 and 4 are NOT standard. Some songs may use the values though,
and it's nice if your player can handle them. Full period tables for all
finetunes are listed in section 4.
If you wish to sample sounds to include in MOD files, remember that the
data must be stored in 8-bit 2's complement format. There is NO standard
sample rate when creating the samples. Most often the samples are done
on the rate corresponding to period C-3 (around 16.5 KHz), and sometimes
drums are sampled at A-3 (around 28 KHz).
If sample number is specified on a channel (sample #0), then the last
sample used on that channel will be remembered if new notes come along.
Only one sample may play on a channel at a time, so playing a new sample
will cancel an old one - even if there is no actual sample data for the
new sample (a 'silent' sample). However, if you are constructing a MOD
file of your own and you use a "silent" sample it is polite to set its
default volume to 0.
If you have some memory (around 2k or so) to spare, you could make up a
table of words indexed by period value. The value of the word at the
index of a period is the corresponding frequency that the sample should
be played at. This saves you from having to calculate the frequencies
over and over again. If you still don't get what I'm talking about here:
I have a array of words, one for each period from the lowest (around 50)
to the highest (around 1712). I precalculate the contents of this table
so that at index 302 (the period for note F#2), there is the value 11853,
the frequency to use to get the note F#2. Therefore, when my player runs
accross this value and needs to know what frequency to play the sample
at, I simply look up the value in the table directly - no calculations.
If you still don't get what I'm talking about, you're screwed.
3.3 Fine-Tuning
_______________________________
Fine-tuning is a minor adjustment on how an instrument sounds. This is
implemented by small changes in the period values. The finetune value
for a sample specifies the adjustment on the period values for that
instrument. A fine-tune can also be specified for a specific instrument
by an effect, at which point the value in the effect will override the
one in the sample information block.
_______________________________________________________________________
11
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
The value in the sample information block is a signed nibble (4 bits,
signed 2's complement). Therefore, the values that can be found have the
following corresponding finetunes:
Value: 0 1 2 3 4 5 6 7 8 9 A B C D E F
Finetune: 0 +1 +2 +3 +4 +5 +6 +7 -8 -7 -6 -5 -4 -3 -2 -1
Section 4.0 specifies period values for all finetunes for octaves 1 to 3.
You could use these values in creating your array of frequency words (see
the end of section 3.2).
3.4 Effects
_______________________________
As was mentioned in section 2.7, the 4 bytes for a note have the
following format:
Byte 1 Byte 2 Byte 3 Byte 4
--------- --------- --------- ---------
7654-3210 7654-3210 7654-3210 7654-3210
wwww XXXX xxxxxxxxx yyyy ZZZZ zzzzzzzzz
wwwwyyyy ( 8 bits) : sample number
XXXXxxxxxxxx (12 bits) : sample 'period'
ZZZZzzzzzzzz (12 bits) : effect and argument
Again, how you display this information in a player is up to you. I have
seen a zillion different formats. I have described what the sample
number and period refer to. Here, we will look at the effects that are
possible.
At this point in time, the Amiga Protracker MOD player (version 2.3A/
3.01) has 28 effects. Some of these effects are redundant or not
possible on some PC sound cards. I will describe the effects and how
they are implemented on the Amiga. PC programmers will have to adapt the
effects they wish to implement on their own. All numbers are stated in
hexadecimal.
For the discussion of the effects, we will look at the 'effect and
argument' part of the 4 bytes in the following way:
Bit number: $CBA987654321
Mentioned above as: ZZZZzzzzzzzz
We will use: ZZZZxxxxyyyy
There are two types of effects, standard and extended. All effects use
the ZZZZ portion to declare the effect number. Standard effects use the
xxxx and yyyy portions as one or two arguments, either as an 8-bit value
when taken together in the form xxxxyyyy or as 2 nibbles xxxx and yyyy.
Extended effects have the ZZZZ effect number $E. They use the xxxx
portion to declare the extended effect number and the only the yyyy
portion as an argument.
_______________________________________________________________________
12
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
Here are the possible standard effects:
-----------------------------------------------------------------------
# Effect name Uses Arguments as
-----------------------------------------------------------------------
0 Arpeggio xxxx yyyy
1 Slide Up xxxxyyyy
2 Slide Down xxxxyyyy
3 Tone Portamento xxxxyyyy
4 Vibrato xxxx yyyy
5 Tone Portamento + Volume Slide xxxx yyyy
6 Vibrato + Volume Slide xxxx yyyy
7 Tremolo xxxx yyyy
8 NOT USED n/a
9 Set SampleOffset xxxxyyyy
A VolumeSlide xxxx yyyy
B Position Jump xxxxyyyy
C Set Volume xxxxyyyy
D Pattern Break xxxxyyyy
E *Extended Effects see below
F Set Speed xxxxyyyy
And here are the possible extended effects:
---------------------------------
# Effect name
---------------------------------
E0 Set Filter
E1 FineSlide Up
E2 FineSlide Down
E3 Glissando Control
E4 Set Vibrato Waveform
E5 Set FineTune
E6 Set/Jump to Loop
E7 Set Tremolo Waveform
E8 NOT USED
E9 Retrig Note
EA Fine VolumeSlide Up
EB Fine VolumeSlide Down
EC NoteCut
ED NoteDelay
EE PatternDelay
EF Invert Loop
A description of each effect and how it is implemented is given on the
following pages. Once again, all values are given in hexadecimal unless
otherwise stated.
_______________________________________________________________________
13
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
0: Arpeggio
-----------------------------------------------------------------------
If a note as an effect number of 0, it is only an arpeggio if there is at
least one non-zero argument. When there is at least one valid argument,
this effect means to play the note specified, then the note+xxxx half-
steps, then the note+yyyy half-steps, and then return to the original
note. These changes are evenly spaced within the time for a line to be
played at the current speed.
This effect is usually used to simulate chords (where a major chord is
the note+4 half steps and the note+7 half-steps). This does not work
very well on most samples. This can also be used to produce a heavy
vibrato. Here is an example of this effect:
Note C-3, xxxx=4, yyyy=7
this will attempt to produce a C-major chord. At the beginning of a line
the C-3 note is played, then at 1/3 of the way through the line the note
is retriggered at E-3, 2/3 of the way through it is retriggered at G-3,
and at the beginning of the next line (if there are no new notes to be
played on the channel), it is retriggered at C-3 again.
This presents a minor problem for timing, since you have to keep track of
the arpeggio during the course of playing a line. What you could do is
use a timer differently, or set up another timer that independently
tracks the timing of the arpeggio.
-----------------------------------------------------------------------
1: Slide up (Portamento Up)
-----------------------------------------------------------------------
This effect will slide up the frequency (decrease the period) of the
sample being played on the channel by xxxxyyyy notes for every tick that
occurs during the line. You usually cannot slide past note B-3 unless
you have implemented octave 4 (NON-STANDARD!). The number of ticks that
occur per line is set with effect $F, the set speed command. Since the
slide rate depends on the speed, be careful if you set are composing a
MOD when you change the speed. An example of this effect is:
Note C-3, xxxxyyyy = 2, playing at speed 3.
At the beginning of the line the sample is started at period C-3. At the
first tick, the period is decremented by 2 (the frequency is increased).
At the second tick, the period is again decremented by 2. At the
beginning of the next line, if there is not a new note to be played the
period is again decremented by 2.
_______________________________________________________________________
14
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
2: Slide down (Portamento Down)
-----------------------------------------------------------------------
This effect will slide down the frequency (increase the period) of the
sample being played on the channel by xxxxyyyy tones for every tick that
occurs during the line. You usually cannot slide below note C-1 unless
you have implemented octave 0 (NON-STANDARD!). The number of ticks that
occur per line is set with effect $F, the set speed command. Since the
slide rate depends on the speed, be careful if you set are composing a
MOD when you change the speed. An example of this effect is:
Note C-3, xxxxyyyy = 2, playing at speed 3.
At the beginning of the line the sample is started at period C-3. At the
first tick, the period is incremented by 2 (the frequency is decreased).
At the second tick, the period is again incremented by 2. At the
beginning of the next line, if there is not a new note to be played the
period is again incremented by 2.
-----------------------------------------------------------------------
3: Slide to note
-----------------------------------------------------------------------
This effect will slide a note being played on a channel to a specified
note. The parameter xxxxyyyy will states the speed at which a slide will
occur. For each tick that occurs during the line, the period currently
being played is altered by the number of notes specified. The number of
ticks that occur per line is set with effect $F, the set speed command.
Since the slide rate depends on the speed, be careful if you set are
composing a MOD when you change the speed. An example of this effect is:
Slide to note C-2, xxxxyyyy = 2, playing at speed 3.
At the beginning of the line the current frequency for the sample is
altered to be 2 notes closer to C-2. At the first tick, the same
alteration occurs, changing the period to form a note even closer to C-2.
The same occurs for each tick after that. This effect continues until
another effect is started or the specified frequency is reached.
If a slide rate is not specified (xxxxyyyy is zero) then the last slide
rate used on the channel is used again.
-----------------------------------------------------------------------
4: Vibrato
-----------------------------------------------------------------------
Vibrato means to "oscillate the sample pitch using a particular waveform
with amplitude yyyy notes, such that (xxxx * speed)/64 full oscillations
occur in the line". The waveform to use in vibrating is set using effect
E4 (see below). By placing vibrato effects on consecutive lines, the
vibrato effect can be sustained for any length of time. If either xxxx
or yyyy are 0, then values from the most recent prior vibrato will be
used.
_______________________________________________________________________
15
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
An example is: Note C-3, with xxxx=8 and yyyy=1 when speed=6. This will
play tones around C-3, vibrating through D-3 and B-2 to C-3 again
(amplitude - yyyy - is 1), with (8*6)/64 = 3/4 of a full oscillation per
line. Please see effect E4 for the waveform to use for vibrating.
-----------------------------------------------------------------------
5: Continue effect 3:'Slide to note', but also do Volume slide
-----------------------------------------------------------------------
This effect will change the volume of a channel while a tone portamento
(effect 3) is taking place. The values xxxx or yyyy specify the speed of
the volume change. If xxxx is nonzero the volume is increased, and if
yyyy is nonzero the volume is decreased. It is illegal for both xxxx and
yyyy to be non-zero. You cannot slide past 64 or below 0.
As an example, take the xxxx to be set to 3. This means that at the
beginning of the line, the current volume of the channel is increased by
3. The volume is increased again for every tick on this line and the
lines following (until there is a new effect). Once again, the volume
cannot slide up past 64.
-----------------------------------------------------------------------
6: Continue effect 4:'Vibrato', but also do Volume slide
-----------------------------------------------------------------------
This effect will change the volume of a channel while a vibrato (effect
4) is taking place. The values xxxx or yyyy specify the speed of the
volume change. If xxxx is nonzero the volume is increased, and if yyyy
is nonzero the volume is decreased. It is illegal for both xxxx and yyyy
to be non-zero. You cannot slide past 64 or below 0.
As an example, take the yyyy to be set to 2. This means that at the
beginning of the line, the current volume of the channel is decreased by
2. The volume is decreased again for every tick on this line and the
lines following (until there is a new effect). Once again, the volume
cannot slide down below 0.
-----------------------------------------------------------------------
7: Tremolo
-----------------------------------------------------------------------
Temolo means to "oscillate the sample volume using a particular waveform
with amplitude yyyy*(speed-1), such that (xxxx*speed)/64 full
oscillations occur in the line". The waveform to use to oscillate is set
using the effect E7 (see below). By placing tremolo effects on
consecutive lines, the tremolo effect can be sustained for any length of
time. If either xxxx or yyyy are 0, then values from the most recent
prior tremolo will be used.
The usage of this effect is similar to that of effect 4:Vibrato.
-----------------------------------------------------------------------
8: This effect is not used.
-----------------------------------------------------------------------
_______________________________________________________________________
16
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
9: Set sample offset
-----------------------------------------------------------------------
This effect allows you to start a sample from a specified position rather
than the normal beginning position. Multiply the value xxxxyyyy by 512
to get the position in bytes from the beginning of the sample where
playback should start. If no sample is specified with the effect, but
one is currently playing on the channel, then the sample currently
playing is retriggered to offset specified.
An example is instrument 2 being played at note C-3, with xxxxyyyy=$23.
This would make playback of the sample start at offset $23*$200 = $4600.
This effect gives a rough range to play the sample from.
-----------------------------------------------------------------------
A: Volume slide
-----------------------------------------------------------------------
This effect will change the volume of all samples being played on a
channel. The values xxxx or yyyy specify the speed of the volume change.
If xxxx is nonzero the volume is increased, and if yyyy is nonzero the
volume is decreased. It is illegal for both xxxx and yyyy to be non-
zero. You cannot slide past 64 or below 0.
As an example, take the yyyy to be set to 3. This means that at the
beginning of the line, the current volume of the channel is decreased by
3. The volume is decreased by 3 again for every tick on this line and
the lines following (until there is a new effect). Once again, the
volume cannot slide down below 0.
-----------------------------------------------------------------------
B: Position Jump
-----------------------------------------------------------------------
This effect xxxxyyyy parameter specifies a position in the pattern table
that playback should jump to after this line. Legal values are in the
range of the number of patters that are supposed to be in the song (see
section 2.3). Values outside this range should be ignored.
-----------------------------------------------------------------------
C: Set volume
-----------------------------------------------------------------------
Effect C will set the volume on a channel to the setting specified by the
xxxxyyyy value. Legal volumes are in the range of 0 to 64. An attempt
to set the volume to a higher value than 64 will just set it to 64.
I don't think we really need an example for this effect.
_______________________________________________________________________
17
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
D: Pattern Break
-----------------------------------------------------------------------
This effect is equivalent to a position jump to the next pattern in the
pattern table, with the arguments xxxx*10+yyyy specifying the line within
that pattern to start playing at. Note that this is NOT xxxx*16+yyyy.
For example, the effect with arguments xxxx=0, yyyy=0 would simply jump
to the first line in the next pattern in the pattern table after playing
the current line. With arguments xxxx=1 and yyyy=6 would jump to the
16th line of the next pattern in the pattern table after playing the
current line.
-----------------------------------------------------------------------
E0: Set filter on/off
-----------------------------------------------------------------------
This sets a hardware sound filter to ON (if yyyy is 0) or OFF (if xxxx is
nonzero). If your sound device has built-in filters, you should ignore
this effect command. This effect is primarily used on Amiga 500 and 2000
computers to dick around with the hardware filter.
-----------------------------------------------------------------------
E1: Fineslide up
-----------------------------------------------------------------------
This effect functions just like effect 1, except that the frequency of
the sample is only modified once. At the beginning of a line, whatever
frequency is being played on a channel is incremented by yyyy notes.
This effect does NOT continue on the lines following. You cannot slide
the frequency above the note B-3 (unless you implement octave 4 : NON-
STANDARD!).
An example here would be effect E, xxxx=1 (the extended effect number),
yyyy=3. This would slide the current frequency up three notes at the
beginning of the line.
-----------------------------------------------------------------------
E2: Fineslide down
-----------------------------------------------------------------------
This effect functions just like effect 2, except that the frequency of
the sample is only modified once. At the beginning of a line, whatever
frequency is being played on a channel is decremented by yyyy notes.
This effect does NOT continue on the lines following. You cannot slide
the frequency below the note C-1 (unless you implement octave 0 : NON-
STANDARD!).
An example here would be effect E, xxxx=1 (the extended effect number),
yyyy=2. This would slide the current frequency down two notes at the
beginning of the line.
_______________________________________________________________________
18
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
E3: Set glissando on/off
-----------------------------------------------------------------------
The argument yyyy to this effect specifies whether the glissando effect
is ON (yyyy is 1) or OFF (yyyy is 0). If glissando is on, then the
'Slide to note' will slide a half note at a time. Otherwise, it will
perform the default smooth slide.
-----------------------------------------------------------------------
E4: Set vibrato waveform
-----------------------------------------------------------------------
This effect means to set the waveform appearance for succeeding 'vibrato'
effects. There are currently four possible appearances for the wave,
each with a possible 'retrigger'. Two cycles are shown below for each
type of waveform:
yyyy
Waveform Name Retriggered No Retrigger
---------- ------------------- ----------- ------------
/\ /\ Sine (default) 0 4
\/ \/
|\ |\ Ramp down 1 5
\| \|
,-, ,-, Square 2 6
'-' '-'
????????? Random 3 7
A "retriggered" waveform will be reset to the start of a cycle at the
beginning of each new note. If a wave is selected "without retrigger",
the previous waveform will be continued. Waveforms are usually
retriggered.
-----------------------------------------------------------------------
E5: Set finetune value
-----------------------------------------------------------------------
This effect command sets the finetune value for the current instrument to
the signed nibble value yyyy. This value overrides the value found in
the sample information block at the beginning of the MOD file. The new
finetune remains until changed by another E5 effect.
Value: 7 6 5 4 3 2 1 0 F E D C B A 9 8
Finetune to set: +7 +6 +5 +4 +3 +2 +1 0 -1 -2 -3 -4 -5 -6 -7 -8
This effect is implemented by storing period values for all possible
finetunes, and simply switching to a different table of periods when this
effect is encountered. See section 3.3 for more information. Section 4
lists the period tables for finetunes for octaves 1 to 3.
_______________________________________________________________________
19
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
E6: Loop pattern
-----------------------------------------------------------------------
This effect allows a section of a pattern to be 'looped', or played
through, a certain number of times in succession. If the effect argument
yyyy is zero, the effect specifies the loop's start point. Otherwise, it
specifies the number of times to play this line and the preceeding lines
from the start point. If no start point was specified in the current
pattern being played, the loop start defaults to the first line in the
pattern. Therefore, you cannot loop through multiple patterns.
An example:
On line 3, the effect E6 is encountered, with yyyy=0. This specifies
that line 3 is the beginning of a loop in this pattern.
Down on line 52, the effect E6 is encountered again, with yyyy=2. This
means to jump back and play the lines from line 3 to line 52 again twice
more before continuing with the rest of the pattern.
-----------------------------------------------------------------------
E7: Set tremolo waveform
-----------------------------------------------------------------------
Line command E4, this sets the waveform appearance for succeeding
'tremolo' (volume) effects. There are currently four possible
appearances for the wave, each with a possible 'retrigger'. Two cycles
are shown below for each type of waveform:
yyyy
Waveform Name Retriggered No Retrigger
---------- ------------------- ----------- ------------
/\ /\ Sine (default) 0 4
\/ \/
|\ |\ Ramp down 1 5
\| \|
,-, ,-, Square 2 6
'-' '-'
????????? Random 3 7
A "retriggered" waveform will be reset to the start of a cycle at the
beginning of each new note. If a wave is selected "without retrigger",
the previous waveform will be continued. Waveforms are usually
retriggered.
-----------------------------------------------------------------------
E8: This effect is not used.
-----------------------------------------------------------------------
_______________________________________________________________________
20
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
E9: Retrigger sample
-----------------------------------------------------------------------
Effect E9 allows you to re-trigger a specified sample at a particular
note after yyyy ticks during the line. For example, say note C-3 is
specified, with yyyy=2 when the speed is currently 6. This would mean
that at the beginning of the line the specified sample is started, and
after two ticks it is restarted. This continues until the beginning of
the next line. This effect is used mostly with samples of hi-hats.
-----------------------------------------------------------------------
EA: Fine volume slide up
-----------------------------------------------------------------------
This effect increments the volume of a particular channel once at the
beginning of the line by yyyy points. There is no continuation of the
slide on successive lines or for other notes. You cannot slide above
volume 64.
-----------------------------------------------------------------------
EB: Fine volume slide down
-----------------------------------------------------------------------
This effect is just like effect EA, except the volume is decremented
rather than incremented by the value yyyy. There is no continuation of
the slide on successive lines or for other notes. You cannot slide below
volume 0.
-----------------------------------------------------------------------
EC: Cut sample
-----------------------------------------------------------------------
This effect sets the volume of the sample which is playing to 0 after
yyyy ticks in the current line. This has the effect of stopping a sample
abruptly. An example here is to play the note C-2, with effect EC and
argument yyyy=3, when the speed is 6. The sample is started at note C-2
at the beginning of the line, and after the third tick of 6 in that line,
the volume on the channel is set to 0 (cutting it off). Note that if
yyyy is 0, nothing will be heard.
-----------------------------------------------------------------------
ED: Delay sample
-----------------------------------------------------------------------
This effect delays the start of a sample until tick yyyy in the current
line. For example, if note C-2 is played, with effect ED and argument
yyyy=3 when the speed is 6. The note C-2 will be triggered at the 3rd
tick after the start of the line. The purpose of this effect is to delay
the start of a sample for a VERY short amount of time.
_______________________________________________________________________
21
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
-----------------------------------------------------------------------
EE: Delay pattern
-----------------------------------------------------------------------
This effect forces a small delay in a pattern in between successive
lines. All notes and effects continue during this delay. The argument
yyyy specified the number of line-equivalent time slices to wait before
resuming playback. For example, if effect EE is encountered with speed
being 6 and argument yyyy=4, then the next line will be delayed 24 ticks
before it is executed.
-----------------------------------------------------------------------
EF: Invert loop
-----------------------------------------------------------------------
This effect is used on the Amiga to play samples backward at a specified
speed. It is not really feasible to implement on other architechtures,
and it is not used that often.
-----------------------------------------------------------------------
F: Set speed
-----------------------------------------------------------------------
This effect changes the speed of playback so that xxxxyyyy ticks occur
during every line, starting on the NEXT line. The initial speed (before
any 'set speed' effects are encountered) should be set to 6. A value of
xxxxyyyy=0 should technically cause playback to stop, but this value is
commonly ignored as garbage.
Valid values for speed setting in this manner are 1 to 31. If a value is
read that is above 31, it means to set a modified speed based on beats
per minute, where 4 lines are 1 beat. This means that if I try to set
the speed to 42, I am specifying 42 beats per minute, or 42*4=168 lines
per minute. You then have to figure out how long to spend on a
particular line.
If multiple set speed effects are performed on a single line, then the
effects on the higher-numbered channels have precedence over the effects
on the lower-numbered channels.
This effect has the largest number of implementations and is particular
to the number of effects that a particular file player supports.
3.5 Other information
_______________________________
If you're sound device is able to provide stereo output (like the
UltraSound), then you need to know what the balance for each channel
should be. Channels 1 and 4 are left, and 2 and 3 are right.
If you are programming for the UltraSound, it is best not to shove the
balances all the way over to the left or to the right. Try a value of 2
for channels 1 and 4 and a value of 13 for channels 2 and 3. If you
don't like it - change it.
_______________________________________________________________________
22
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
4.0 Period and Volume tables
_______________________________
Here are the period tables for the different fine-tune values:
856,808,762,720,678,640,604,570,538,508,480,453 : C-1 to B-1 Finetune 0
428,404,381,360,339,320,302,285,269,254,240,226 : C-2 to B-2 Finetune 0
214,202,190,180,170,160,151,143,135,127,120,113 : C-3 to B-3 Finetune 0
850,802,757,715,674,637,601,567,535,505,477,450 : C-1 to B-1 Finetune +1
425,401,379,357,337,318,300,284,268,253,239,225 : C-2 to B-2 Finetune +1
213,201,189,179,169,159,150,142,134,126,119,113 : C-3 to B-3 Finetune +1
844,796,752,709,670,632,597,563,532,502,474,447 : C-1 to B-1 Finetune +2
422,398,376,355,335,316,298,282,266,251,237,224 : C-2 to B-2 Finetune +2
211,199,188,177,167,158,149,141,133,125,118,112 : C-3 to B-3 Finetune +2
838,791,746,704,665,628,592,559,528,498,470,444 : C-1 to B-1 Finetune +3
419,395,373,352,332,314,296,280,264,249,235,222 : C-2 to B-2 Finetune +3
209,198,187,176,166,157,148,140,132,125,118,111 : C-3 to B-3 Finetune +3
832,785,741,699,660,623,588,555,524,495,467,441 : C-1 to B-1 Finetune +4
416,392,370,350,330,312,294,278,262,247,233,220 : C-2 to B-2 Finetune +4
208,196,185,175,165,156,147,139,131,124,117,110 : C-3 to B-3 Finetune +4
826,779,736,694,655,619,584,551,520,491,463,437 : C-1 to B-1 Finetune +5
413,390,368,347,328,309,292,276,260,245,232,219 : C-2 to B-2 Finetune +5
206,195,184,174,164,155,146,138,130,123,116,109 : C-3 to B-3 Finetune +5
820,774,730,689,651,614,580,547,516,487,460,434 : C-1 to B-1 Finetune +6
410,387,365,345,325,307,290,274,258,244,230,217 : C-2 to B-2 Finetune +6
205,193,183,172,163,154,145,137,129,122,115,109 : C-3 to B-3 Finetune +6
814,768,725,684,646,610,575,543,513,484,457,431 : C-1 to B-1 Finetune +7
407,384,363,342,323,305,288,272,256,242,228,216 : C-2 to B-2 Finetune +7
204,192,181,171,161,152,144,136,128,121,114,108 : C-3 to B-3 Finetune +7
907,856,808,762,720,678,640,604,570,538,504,480 : C-1 to B-1 Finetune -8
453,428,404,381,360,339,320,302,285,269,254,240 : C-2 to B-2 Finetune -8
226,214,202,190,180,170,160,151,143,135,127,120 : C-3 to B-3 Finetune -8
900,850,802,757,715,675,636,601,567,535,505,477 : C-1 to B-1 Finetune -7
450,425,401,379,357,337,318,300,284,268,253,238 : C-2 to B-2 Finetune -7
225,212,200,189,179,169,159,150,142,134,126,119 : C-3 to B-3 Finetune -7
894,844,796,752,709,670,632,597,563,532,502,474 : C-1 to B-1 Finetune -6
447,422,398,376,355,335,316,298,282,266,251,237 : C-2 to B-2 Finetune -6
223,211,199,188,177,167,158,149,141,133,125,118 : C-3 to B-3 Finetune -6
887,838,791,746,704,665,628,592,559,528,498,470 : C-1 to B-1 Finetune -5
444,419,395,373,352,332,314,296,280,264,249,235 : C-2 to B-2 Finetune -5
222,209,198,187,176,166,157,148,140,132,125,118 : C-3 to B-3 Finetune -5
...continues on next page...
_______________________________________________________________________
23
MODFIL10.TXT THUNDER (kurtt@sfu.ca)
________________________________________________________________________
881,832,785,741,699,660,623,588,555,524,494,467 : C-1 to B-1 Finetune -4
441,416,392,370,350,330,312,294,278,262,247,233 : C-2 to B-2 Finetune -4
220,208,196,185,175,165,156,147,139,131,123,117 : C-3 to B-3 Finetune -4
875,826,779,736,694,655,619,584,551,520,491,463 : C-1 to B-1 Finetune -3
437,413,390,368,347,338,309,292,276,260,245,232 : C-2 to B-2 Finetune -3
219,206,195,184,174,164,155,146,138,130,123,116 : C-3 to B-3 Finetune -3
868,820,774,730,689,651,614,580,547,516,487,460 : C-1 to B-1 Finetune -2
434,410,387,365,345,325,307,290,274,258,244,230 : C-2 to B-2 Finetune -2
217,205,193,183,172,163,154,145,137,129,122,115 : C-3 to B-3 Finetune -2
862,814,768,725,684,646,610,575,543,513,484,457 : C-1 to B-1 Finetune -1
431,407,384,363,342,323,305,288,272,256,242,228 : C-2 to B-2 Finetune -1
216,203,192,181,171,161,152,144,136,128,121,114 : C-3 to B-3 Finetune -1
The Amiga uses linear volumes from 0 to 64. The volume table specified
below lists the logarithmic volume to use on the UltraSound for each of
the 65 settings in order to get a linear spread. If you need volumes for
another sound device, you will have to find them elsewhere.
0 | 0
1 | 1750 17 | 2332 33 | 3469 49 | 3528
2 | 2503 18 | 3240 34 | 3473 50 | 3532
3 | 2701 19 | 3248 35 | 3478 51 | 3534
4 | 2741 20 | 3256 36 | 3481 52 | 3538
5 | 2781 21 | 3263 37 | 3484 53 | 3543
6 | 2944 22 | 3271 38 | 3489 54 | 3545
7 | 2964 23 | 3279 39 | 3492 55 | 3549
8 | 2981 24 | 3287 40 | 3495 56 | 3552
9 | 3000 25 | 3294 41 | 3499 57 | 3556
10 | 3017 26 | 3303 42 | 3502 58 | 3558
11 | 3034 27 | 3310 43 | 3506 59 | 3563
12 | 3052 28 | 3317 44 | 3509 60 | 3565
13 | 3070 29 | 3325 45 | 3513 61 | 3570
14 | 3207 30 | 3458 46 | 3517 62 | 3573
15 | 3215 31 | 3462 47 | 3520 63 | 3577
16 | 3224 32 | 3466 48 | 3524 64 | 3580
Happy coding!
-Thunder
_______________________________________________________________________
24
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
********************************************
*** PsyTexx Amiga MOD Tracker for PalmOS ***
********************************************
*** THIS PROGRAM IS FREE ***
*** USE IT AT YOUR OWN RISK! ***
*** Send comments to: ***
*** observer_page@mail.ru ***
*** Official website: ***
*** www.warmplace.ru ***
********************************************
At the moment there are two problems:
1) I have middling english :)
2) PsyTexx sources are old and they have difficult unreasoned structure
with bugs (may be) and many gcc "warnings". The PsyTexx2 will be fully
rewrited and it'll be without aforesaid problems.
PsyTexx was writed in the Windows environment with the Cygwin (linux emulator).
So it is needs for the latest PRC-Tools with the PilRC resource compiler.
Just run the makefile.bat (in the parent directory) for compiling
MOD2PDB/PDB2MOD convertrer has not multiplatform sources. It was writed
in the Win32 Sphinx C-- compiler (sheker.chat.ru). All these files are
in the PDB_converter folder:
C--.EXE
MOD2PDB.c--
PDB2MOD.C--
Use makefile.bat for fast compiling.
Sources of all pictures are in *.AUR files. You need the NewTek Aura
for edit it.
RESULTED FILES: psytexx.prc backup.pdb
enjoy :) and waiting for the PsyTexx2 - XM Tracker.
// ------------------------------------------------------------------- //
// STRING32.TXT for Sphinx C-- (STRING32.H--) //
// Function for work with lines under Win32 //
// The offers and ¯«¥¢ª¨ send on hd_keeper@mail.ru //
// ------------------------------------------------------------------- //
The description of functions from STRING32.H-- is indicated below,
intended for, work with ASCIIZ-lines and areas of memory under Win32. As it
is accepted in C--, all functions are dynamic and do not increase a size of a
code, if are not used. The functions are optimized under Pentium and 32-bit
segments code. Though the functions also were intended for work under Windows
in memory model FLAT, they will work under any other operational system for
want of observance the following conditions:
1) The 32-bit operands contain correct displacements
2) The segment registers DS and ES are equal
3) The flag of a direction is dropped: DF = 0
The 32-bit segments of a code are desirable (for maintenance of maximum
Productivity), but not mandatory condition of application.
The size of functions is given for want of their introduction in a code of
the program (@). In case Call of functions (CALL) it is necessary to add 1
byte on the instruction RET.
--------------- Function for work with ASCIIZ-lines ---------------
strlen
Definition of length of a line
:DWORD strlen (LPSTR str);
str - pointer on a line
Returns: length of a line, not including, finishing 0,
Size: 12 bytes
WinAPI analog: lstrlen
strend
Definition of an extremity of a line
:LPSTR strend (LPSTR str);
str - pointer on a line
Returns: the pointer on an extremity of a line (on, finishing 0),
Size: 10 bytes
strcpy
Copying of a line
:LPSTR strcpy (LPSTR dest, src);
src - pointer on an initial line
Dest - pointer on the buffer, where will be copied src
Returns: dest
Size: 32 bytes
WinAPI analog: lstrcpy
strcpyn, strncpy
Copying of a line with restriction on length
:LPSTR strcpyn (LPSTR dest, src; DWORD max);
src - pointer on an initial line
dest - pointer on the buffer, where will be copied src
max - maxima of numerals, how many to copy from src
Returns: dest
Size: 40 bytes
WinAPI analog: lstrcpyn
strmov
Copying of a line (for overlapped lines)
:LPSTR strmov (LPSTR dest, src);
src - pointer on an initial line
dest - pointer on the buffer, where will be copied src
Returns: dest
Size: 73 bytes
strmovn, strnmov
Copying of a line with restriction on length (for overlapped lines)
:LPSTR strmovn (LPSTR dest, src; DWORD max);
src - pointer on an initial line
dest - pointer on the buffer, where will be copied src
max - maxima of numerals, how many to copy from src
Returns: dest
Size: 79 bytes
strcat
Concatenation of lines (dest = dest + src)
:LPSTR strcat (LPSTR dest, src);
src - pointer on a line, which will be attributed to dest
dest - pointer on a line, to which will be attributed src
Returns: dest
Size: 44 bytes
WinAPI analog: lstrcat
strcmp
Comparison of lines
:LONG strcmp (LPSTR str1, str2);
str1, str2 - pointers on compared lines
Returns: 0, if str1 = str2
< 0, if str1 < str2
> 0, if str1 > str2
Size: 26 bytes
WinAPI analog: lstrcmp
strcmpi, stricmp
Comparison of lines with ignoring of the register
:LONG strcmpi (LPSTR str1, str2);
str1, str2 - pointers on compared lines
Returns: 0, if str1 = str2
< 0, if str1 < str2
> 0, if str1 > str2
Size: 53 bytes
WinAPI analog: lstrcmpi
strcmpn, strncmp
Comparison of lines with restriction on length
:LONG strcmpn (LPSTR str1, str2; DWORD max);
str1, str2 - pointers on compared lines
max - maxima of numerals, how many to compare
Returns: 0, if str1 = str2
< 0, if str1 < str2
> 0, if str1 > str2
Size: 30 bytes
WinAPI analog: CompareString
strcmpni, strcmpin, strncmpi, stricmpn, strnicmp, strincmp
Comparison of lines with restriction on length and ignoring of the register
:LONG strcmpni (LPSTR str1, str2; DWORD max);
str1, str2 - pointers on compared lines
max - maxima of numerals, how many to compare
Returns: 0, if str1 = str2
< 0, if str1 < str2
> 0, if str1 > str2
Size: 57 bytes
WinAPI analog: CompareString
strchr
Search of a numeral in a line
:LPSTR strchr (LPSTR str; CHAR chr);
str - pointer on a line
chr - required numeral
Returns: the pointer on the first found numeral
Size: 27 bytes
strchrr, strrchr
Search of a numeral in a line from an extremity
:LPSTR strchrr (LPSTR str; CHAR chr);
str - pointer on a line
chr - required numeral
Returns: the pointer on the last found numeral
Size: 26 bytes
strstr
Search of a substring in a line
:LPSTR strstr (LPSTR str, substr);
str - pointer on a line, in which is made search
substr - pointer on a required substring
Returns: the pointer on the first numeral of the found substring in str
(0, if not is found)
Size: 63 bytes
strupr
Reduction of a line to the upper case
:LPSTR strupr (LPSTR str);
str - pointer on a line
Returns: str
Size: 24 bytes
WinAPI analog: CharUpper
strlwr
Reduction of a line to a lower cascading
:LPSTR strlwr (LPSTR str);
str - pointer on a line
Returns: str
Size: 24 bytes
WinAPI analog: CharLower
strtok
Partition of a line on words
:LPSTR strtok (LPSTR dest, src, divs);
src - pointer on an initial line or outcome of the previous call
dest - pointer on the buffer, where will be copied a word
divs - pointer on a line, containing a numeral - separators
Returns: 0, if the words more are not present
Not 0, if the word is copied in dest (transmit this significance
In quality src for consequent search)
Size: 50 bytes
--------------- Function for work with areas of memory ---------------
memsetz, memzset, memset0, mem0set
¡ã«¥¨¥ of area of memory
:void memsetz (LPVOID mem; DWORD size);
mem - pointer on area of memory
size - size of area in bytes
Returns: anything
Size: 16 bytes
WinAPI analog: ZeroMemory
memset
Filling of area of memory
:void memset (LPVOID mem; DWORD size; BYTE value);
mem - pointer on area of memory
size - size of area in bytes
value - significance of byte of filling
Returns: anything
Size: 24 bytes
WinAPI analog: FillMemory
memcpy
Copying of area of memory
:void memcpy (LPVOID dest, src; DWORD size);
src - pointer on area, whence to copy datas
dest - pointer on area where to copy datas
size - amount byte, how many to copy
Returns: anything
Size: 14 bytes
WinAPI analog: CopyMemory
memsetd, memset32
Fast filling of area of memory
:void memsetd (LPVOID mem; DWORD size, value);
mem - pointer on area of memory
size - size of area in double words (not in bytes!)
value - significance of a double word of filling
Returns: anything
Size: 2 bytes
memcpyd, memcpy32
Fast copying of area of memory
:void memcpyd (LPVOID dest, src; DWORD size);
src - pointer on area, whence to copy datas
dest - pointer on area where to copy datas
size - amount of double words (not byte!), how many to copy
Returns: anything
Size: 2 bytes
memmov
Copying of area of memory (for overlapped areas)
:void memmov (LPVOID dest, src; DWORD size);
src - pointer on area, whence to copy datas
dest - pointer on area where to copy datas
size - amount byte, how many to copy
Returns: anything
Size: 57 bytes
WinAPI analog: MoveMemory
memcmp
Comparison of areas of memory
:LONG memcmp (LPVOID mem1, mem2; DWORD size);
mem1, mem2 - pointers on compared areas
size - amount byte, how many to compare (0 - any)
Returns: 0, if mem1 = mem2
< 0, if mem1 < mem2
> 0, if mem1 > mem2
Size: 26 bytes
--------------------------------------- --------------------------
In total of functions: 24
Total size: 811 bytes (835 bytes)
// ------------------------------------------------------------------- //
// Libraries Win32 API //
// for Sphinx C-- 0.229+ //
// ------------------------------------------------------------------- //
From what ALL BEGAN
... By undertaking for programming on C-- under Windows, I have come across
absence of libraries satisfying to my requests. Here and it was necessary
before of writing of the programs to undertake development of these
libraries.
This package was written because of of analogs, taken from Borland Delphi
and C++ Builder. From source codes were eliminated little use in practice of
a structure and constant. Quite probably, in the consequent versions of
library will be extended and are supplemented.
Despite of a significant diminution of volume of an initial code on a
comparison with analogs C++, the libraries are still too great for the
version of the compiler C-under DOS. For example, on compilation WINUSER.H--
any more there is no memory. However, it can easily be bypassed, by taking
advantage the version of the compiler C--32 under a cantilever mode Windows.
I do not see in it of a large problem: time you have undertaken to program
under Windows - use the compiler under Windows.
The libraries Win32 API, realized for C++ Builder and C-- 0.229, are
connected as follows: constants at first are declared, and then one file is
connected:
#define _WINBASE_ TRUE
#define _WINGDI_ TRUE
#include "windows.h--"
I like a method of connection of several files more:
#include "winbase.h--"
#include "wingdi.h--"
#include "winuser.h--"
The former method is still supported and will be supported. The WINDOWS.H--
file exists just for assuring compatibility with this method.
// ------------------------------------------------------------------- //
THAT IS ALREADY MADE
The given realization includes the following files:
ADVAPI H-- Work with the register
CCANIM H-- Service functions for animation
CCHEADER H-- Service functions for separators
CCLIST H-- Service functions for the lists
CCPRSHT H-- Service functions for multipage boards
CCTAB H-- Service functions for bookmarks
CCTREE H-- Service functions for trees
COMMCTRL H-- Lists, trees, ¯à®£à¥ááë, bookmark, status bar...
COMMDLG H-- Dialogues of discovery of the file, preservation, printing,
search.
LZEXPAND H-- Unpacking of files, wrapped up COMPRESS.EXE
SHELLAPI H-- Work with âàí©¥¬, drag and drop, documents...
STRING32 H-- Classical functions of work with lines under Win32
WINBASE H-- Work with memory, files, DLL, console, lines...
WINDEF H-- Main declarations of types, structures and ¬ ªà®á®¢
WINDOWS H-- Is for compatibility at a level of source codes
WINERROR H-- Codes of errors Windows
WINGDI H-- Work with contexts of systems(devices), graphics and fonts
WINUSER H-- Event, messages, resources(safe lifes) and other interface
README32 TXT This file
STRING32 TXT the Description of functions STRING32.H--
Now is a little bit more detailed about all these files. At once I shall
tell, that at me is not present slightest desire to describe ALL or even some
functions Win32 API. For the sake of study of the mechanism of programming
under Windows I can only advise to read a pair of the good books, and as
reference "on-line" of a manual - well-known MS SDK Help.
WINDEF.H--
Contains the descriptions of main data types, constants and structures.
Some macros also are circumscribed. You hardly need to connect this file to
the program obviously, as it will be connected for want of use WINDOWS.H-- or
WINBASE.H--.
WINDOWS.H--
Is intended for compatibility with a "classical" method of connection of
libraries. Using this file, you should up to its connection declare
appropriate constants.
WINBASE.H--
Is for import of functions from KERNEL32.DLL, also contains the
descriptions of constants and structures necessary for work with these
functions. In this and in all remaining libraries the preference is given up
to functions and structures for work with ANSI-lines, the UNICODE-functions
are not realized by virtue of their extremely rare application.
The functions of a Windows kernel are used for a memory allocation and
other system resources, management of processes and streams, work with files,
and ASCIIZ-lines, loading DLL, cantilever input-output... Perhaps, any
program under Windows will use functions of this library.
WINGDI.H--
Imports functions from GDI32.DLL, destination for work with such graphic
objects, as contexts of devices (DC), fonts (Font), paintbrushes (Brush),
pens (Pen), figures (Bitmap, Metafile), and also graphic objects. The
functions of the interface of graphic devices (GDI) will be useful first of
all to the one who attends to creation of own interface elements of the
window, and also founders graphic demo.
WINUSER.H--
Will realize functions USER32.DLL, which are used for work with windows,
buttons, menu, text, icons, fields of input and other main elements of dialog
boxes. Also contains the descriptions of functions, structures and constants
for work with events and messages, there are functions for transformation and
formatting of ASCIIZ-lines. The programs using the graphic user interface
(GUI), necessarily should use this library. Three above named DLL - KERNEL,
GDI, USER - make basis as well as most operational system Windows, and any
program under it.
WINERROR.H--
Contains the descriptions of constants - codes of errors Windows. The
library can be useful at the stage of a program debugging.
COMMCTRL.H--
Contains imported from COMCTL32.DLL of function, and also description of
structures and constants for the messages. The animation (Animation),
various lists is used for creation of such interface elements, as ( Drag
List, Image List, List View, Tree View), bookmark (Tab Control), multipage
dialogues (Property Sheets), status bar and progress (Status Bar, Progress
Bar), (Toolbar) toolbar, movable indicators (Trackbar), pop-pup of the helps
(Tooltip), titles and separators (Header Control). With the purposes of a
diminution of volume of a target code the auxiliary service functions
engaging in the sum about 4K of an object code, are born in files CC*.H--. If
you do not want to use them, you can send the appropriate messages by
API-function SendMessage.
COMMDLG.H--
Will realize the interface with COMDLG32.DLL, is used for work with
standard dialog boxes: discovery of the file, preservation of the file,
search and replacement of the text, choice of colour, choice of the font,
preparation for listing.
ADVAPI.H--
Is for import of functions from ADVAPI32.DLL, which are applied to work
with the system register both modes of safety and access (ACL, ACE, SID). If
somebody knows, what favour can be extracted from structures of a type ACL
and SID - write.
SHELLAPI.H--
Imports functions from SHELL32.DLL - extension an envelope. You can use
this library for work with protocol Drag and Drop, tram of a board of
problems, extraction of icons from the programs and libraries, discovery of
the documents and appendices, working with them, and much other.
LZEXPAND.H--
Will realize functions LZ32.DLL - library of unpacking of datas. Allows
to unpack datas packed by the program COMPRESS. You can use this library, by
creating the file with a graphics and - or by music for demo and then by
packing it by the program COMPRESS.
STRING32.H--
Contains realization classical for C of functions of processing of
ASCIIZ-lines and simply of lines under Win32. Certainly, you can quite do
without by use appropriate WinAPI of functions, but if for you the velocity
has critical significance - these functions for you. For the detail
description of functions look the file STRING32.TXT.
CCANIM.H-- _CCANIM _
CCHEADER.H-- _CCHEADER_
CCLIST.H-- _CCLIST_
CCPRSHT.H-- _CCPRSHT_
CCTAB.H-- _CCTAB_
CCTREE.H-- _CCTREE_
Contains the description of service functions for the following interface
elements accordingly: animation (Animation Control), separators (Header
Control), lists (List View), multipage dialogue boards (Property Sheet),
bookmark (Tab Control) and trees (Tree View). By virtue of impossibility of
call of API-functions of dynamic procedures all service functions should be
made static, and for a diminution of volume of an object code to bear them in
"own" libraries.
COMPRESS.EXE
The program of compression of datas from Microsoft. Uses algorithm LZ.
The serious restriction - in one archive can be only one file (catalogue is
not present). Can be applied to compression of the file with datas for
consequent unpacking by functions of library LZEXPAND.H--.
// ------------------------------------------------------------------- //
WHAT STILL IT WOULD BE DESIRABLE TO MAKE
By unique restriction of development of libraries of a possibility of the
C-- compiler. Many things under Windows (like indirect calls or work with
structures under the reference) are rather complicated for organizing without
a normal model of the pointers. The development of libraries will be
conducted in parallel to development of the compiler.
In the consequent versions of libraries the support is planned:
1) WinSocket and WinInet
2) DirectX (in particular, DirectDraw and DirectInput)
3) Interfaces of objects an envelope (Shell Library Object)
// ------------------------------------------------------------------- //
HOW TO CONTACT to the AUTHOR
You can write to me on E-Mail or in FIDO:
E-Mail: hd_keeper@mail.ru
FIDO: 2:5024/22.13@fidonet
Send me your offers, note, and especially messages on detected errors. I
should know, in what direction to work further. You can freely modify
libraries, if the introduced modifications can, under your judgement, to
reduce in their improving. Only do not overlook then to inform me on the most
successful updatings. I do not promise, that I shall answer all letters, but
necessarily I shall read and I shall take part to an information.
Have a nice coding!
Anton Kopeev AKA Keeper
// ------------------------------------------------------------------- //
// ¨¡«¨®â¥ª¨ Win32 API //
// ¤«ï Sphinx C-- 0.229+ //
// ------------------------------------------------------------------- //
...§ï¢è¨áì § ¯à®£à ¬¬¨à®¢ ¨¥ C-- ¯®¤ Windows, ï ⮫ªã«áï
®âáãâá⢨¥ ¡¨¡«¨®â¥ª, 㤮¢«¥â¢®àïîé¨å ¬®¨¬ § ¯à®á ¬. ®â â ª ¨ ¯à¨è«®áì
¯à¥¦¤¥ ¯¨á ¨ï ¯à®£à ¬¬ ¢§ïâìáï § à §à ¡®âªã íâ¨å ¡¨¡«¨®â¥ª.
â®â ¯ ª¥â ¡ë« ¯¨á ®á®¢¥ «®£®¢, ¢§ïâëå ¨§ Borland Delphi ¨
C++ Builder. § ¨á室ëå ⥪á⮢ ¡ë«¨ ¨áª«îç¥ë ¬ «®¨á¯®«ì§ã¥¬ë¥ ¯à ªâ¨ª¥
áâàãªâãàë ¨ ª®áâ âë. ¯®«¥ ¢®§¬®¦®, ¢ ¯®á«¥¤ãîé¨å ¢¥àá¨ïå ¡¨¡«¨®â¥ª¨
¡ã¤ãâ à áè¨à¥ë ¨ ¤®¯®«¥ë.
¥á¬®âàï § ç¨â¥«ì®¥ 㬥ì襨¥ ®¡ê¥¬ ¨á室®£® ª®¤ ¯® áà ¢¥¨î á
«®£ ¬¨ C++, ¡¨¡«¨®â¥ª¨ ¢á¥ ¥é¥ ᫨誮¬ ¢¥«¨ª¨ ¤«ï ¢¥àᨨ ª®¬¯¨«ïâ®à C--
¯®¤ DOS. ¯à¨¬¥à, ª®¬¯¨«ïæ¨î WINUSER.H-- 㦥 ¥ å¢ â ¥â ¯ ¬ïâ¨. ¯à®ç¥¬,
íâ® ¬®¦® «¥£ª® ®¡®©â¨, ¢®á¯®«ì§®¢ ¢è¨áì ¢¥àᨥ© ª®¬¯¨«ïâ®à C--32 ¯®¤
ª®á®«ìë© à¥¦¨¬ Windows. ¥ ¢¨¦ã ¢ í⮬ ¡®«ì让 ¯à®¡«¥¬ë: à § ¢ë ¢§ï«¨áì
¯à®£à ¬¬¨à®¢ âì ¯®¤ Windows - ¨á¯®«ì§ã©â¥ ª®¬¯¨«ïâ®à ¯®¤ Windows.
¨¡«¨®â¥ª¨ Win32 API, ॠ«¨§®¢ ë¥ ¤«ï C++ Builder ¨ C-- 0.229,
¯®¤ª«îç îâáï á«¥¤ãî騬 ®¡à §®¬: á ç « ®¡êïîâáï ª®áâ âë, § ⥬
¯®¤ª«îç ¥âáï ®¤¨ ä ©«:
#define _WINBASE_ TRUE
#define _WINGDI_ TRUE
#include "windows.h--"
¥ ¦¥ ¡®«ìè¥ à ¢¨âáï ᯮᮡ ¯®¤ª«îç¥¨ï ¥áª®«ìª¨å ä ©«®¢:
#include "winbase.h--"
#include "wingdi.h--"
#include "winuser.h--"
०¨© ᯮᮡ ¯®-¯à¥¦¥¬ã ¯®¤¤¥à¦¨¢ ¥âáï ¨ ¡ã¤¥â ¯®¤¤¥à¦¨¢ âìáï. ©«
WINDOWS.H-- áãé¥áâ¢ã¥â ¨¬¥® ¤«ï ®¡¥á¯¥ç¥¨ï ᮢ¬¥á⨬®á⨠á í⨬ ᯮᮡ®¬.
// ------------------------------------------------------------------- //
ï ॠ«¨§ æ¨ï ¢ª«îç ¥â ¢ ᥡï á«¥¤ãî騥 ä ©«ë:
ADVAPI H-- ¡®â á ॥áâ஬
CCANIM H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï ¨¬ 樨
CCHEADER H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï à §¤¥«¨â¥«¥©
CCLIST H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï ᯨ᪮¢
CCPRSHT H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï ¬®£®áâà ¨çëå ¯ ¥«¥©
CCTAB H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï § ª« ¤®ª
CCTREE H-- ¥à¢¨áë¥ äãªæ¨¨ ¤«ï ¤¥à¥¢ì¥¢
COMMCTRL H-- ¯¨áª¨, ¤¥à¥¢ìï, ¯à®£à¥ááë, § ª« ¤ª¨, áâப¨ á®áâ®ï¨ï...
COMMDLG H-- ¨ «®£¨ ®âªàëâ¨ï ä ©« , á®åà ¥¨ï, ¯¥ç â¨, ¯®¨áª .
LZEXPAND H-- ᯠª®¢ª ä ©«®¢, § ¯ ª®¢ ëå COMPRESS.EXE
SHELLAPI H-- ¡®â á âàí©¥¬, drag&drop, ¤®ªã¬¥â ¬¨...
STRING32 H-- « áá¨ç¥áª¨¥ äãªæ¨¨ à ¡®âë á® áâப ¬¨ ¯®¤ Win32
WINBASE H-- ¡®â á ¯ ¬ïâìî, ä ©« ¬¨, DLL, ª®á®«ìî, áâப ¬¨...
WINDEF H-- á®¢ë¥ ®¡ê¥¨ï ⨯®¢, áâàãªâãà ¨ ¬ ªà®á®¢
WINDOWS H-- «ã¦¨â ¤«ï ᮢ¬¥á⨬®á⨠ã஢¥ ¨á室ëå ⥪á⮢
WINERROR H-- ®¤ë ®è¨¡®ª Windows
WINGDI H-- ¡®â á ª®â¥ªáâ ¬¨ ãáâனáâ¢, £à 䨪®© ¨ èà¨äâ ¬¨
WINUSER H-- ®¡ëâ¨ï, á®®¡é¥¨ï, à¥áãàáë ¨ ¯à®ç¨© ¨â¥à䥩á
README32 TXT â®â ä ©«
STRING32 TXT ¯¨á ¨¥ äãªæ¨© STRING32.H--
¥¯¥àì ¥áª®«ìª® ¯®¯®¤à®¡¥¥ ®¡® ¢á¥å íâ¨å ä ©« å. à §ã ᪠¦ã, çâ® ã
¬¥ï ¥â ¨ ¬ «¥©è¥£® ¦¥« ¨ï ®¯¨áë¢ âì
¨«¨ å®âï ¡ë ¥ª®â®àë¥ äãªæ¨¨
Win32 API. ¤¨ ¨§ãç¥¨ï ¬¥å ¨§¬ ¯à®£à ¬¬¨à®¢ ¨ï ¯®¤ Windows ï ¬®£ã «¨èì
¯®á®¢¥â®¢ âì ¯à®ç¨â âì ¯ àã å®à®è¨å ª¨£, ¢ ª ç¥á⢥ á¯à ¢®ç®£® "on-line"
à㪮¢®¤á⢠- ¥¡¥§ë§¢¥áâë© MS SDK Help.
WINDEF.H--
®¤¥à¦¨â ®¯¨á ¨ï ®á®¢ëå ⨯®¢ ¤ ëå, ª®áâ â ¨ áâàãªâãà. ª¦¥
®¯¨á ë ¥ª®â®àë¥ ¬ ªà®ª®¬ ¤ë. ¬ ¢àï¤ «¨ ¯® ¤®¡¨âáï ¯®¤ª«îç âì íâ®â
ä ©« ª ᢮¥© ¯à®£à ¬¬¥ , â ª ª ª ® ¡ã¤¥â ¯®¤ª«îç¥ ¯à¨ ¨á¯®«ì§®¢ ¨¨
WINDOWS.H-- ¨«¨ WINBASE.H--.
WINDOWS.H--
। § ç¥ ¤«ï ᮢ¬¥á⨬®á⨠á "ª« áá¨ç¥áª¨¬" ᯮᮡ®¬ ¯®¤ª«î票ï
¡¨¡«¨®â¥ª. ᯮ«ì§ãï íâ®â ä ©«, ¢ë ¤®«¦ë ¤® ¥£® ¯®¤ª«îç¥¨ï ®¡êâì
ᮮ⢥âáâ¢ãî騥 ª®áâ âë.
WINBASE.H-- _WINBASE_
«ã¦¨â ¤«ï ¨¬¯®àâ äãªæ¨© ¨§ KERNEL32.DLL, â ª¦¥ ᮤ¥à¦¨â ®¯¨á ¨ï
ª®áâ â ¨ áâàãªâãà, ¥®¡å®¤¨¬ëå ¤«ï à ¡®âë á í⨬¨ äãªæ¨ï¬¨. í⮩ ¨
¢® ¢á¥å ®áâ «ìëå ¡¨¡«¨®â¥ª å ¯à¥¤¯®ç⥨¥ ®â¤ ® äãªæ¨ï¬ ¨ áâàãªâãà ¬
¤«ï à ¡®âë á ANSI-áâப ¬¨, UNICODE-äãªæ¨¨ ¥ ॠ«¨§®¢ ë ¢ á¨«ã ¨å ªà ©¥
।ª®£® ¯à¨¬¥¥¨ï.
ãªæ¨¨ ï¤à Windows ¨á¯®«ì§ãîâáï ¤«ï à á¯à¥¤¥«¥¨ï ¯ ¬ï⨠¨ ¯à®ç¨å
á¨á⥬ëå à¥áãàᮢ, ã¯à ¢«¥¨ï ¯à®æ¥áá ¬¨ ¨ ¯®â®ª ¬¨, à ¡®âë á ä ©« ¬¨,
¨ ASCIIZ-áâப ¬¨, § £à㧪¨ DLL, ª®á®«ì®£® ¢¢®¤ -¢ë¢®¤ ... ®¦ «ã©,
«î¡ ï ¯à®£à ¬¬ ¯®¤ Windows ¡ã¤¥â ¨á¯®«ì§®¢ âì äãªæ¨¨ í⮩ ¡¨¡«¨®â¥ª¨.
WINGDI.H-- _WINGDI_
¬¯®àâ¨àã¥â äãªæ¨¨ ¨§ GDI32.DLL, ¯à¥¤ ç ç¥ë¥ ¤«ï à ¡®âë á â ª¨¬¨
£à ä¨ç¥áª¨¬¨ ®¡ê¥ªâ ¬¨, ª ª ª®â¥ªáâë ãáâனá⢠(DC), èà¨äâë (Font),
ª¨á⨠(Brush), ¯¥àìï (Pen), à¨á㪨 (Bitmap, Metafile), â ª¦¥ £à ä¨ç¥áª¨¬¨
¯à¨¬¨â¨¢ ¬¨. ãªæ¨¨ ¨â¥àä¥©á £à ä¨ç¥áª¨å ãáâனá⢠(GDI) ¡ã¤ãâ ¯®«¥§ë
¢ ¯¥à¢ãî ®ç¥à¥¤ì ⥬, ªâ® § ¨¬ ¥âáï ᮧ¤ ¨¥¬ ᮡá⢥ëå ¨â¥à䥩áëå
í«¥¬¥â®¢ ®ª , â ª¦¥ ᮧ¤ â¥«ï¬ £à ä¨ç¥áª¨å ¤¥¬®.
WINUSER.H-- _WINUSER_
¥ «¨§ã¥â äãªæ¨¨ USER32.DLL, ª®â®àë¥ ¨á¯®«ì§ãîâáï ¤«ï à ¡®âë á ®ª ¬¨,
ª®¯ª ¬¨, ¬¥î, ⥪á⮬, ¨ª®ª ¬¨, ¯®«ï¬¨ ¢¢®¤ ¨ ¯à®ç¨¬¨ ®á®¢ë¬¨ í«¥¬¥â ¬¨
¤¨ «®£®¢ëå ®ª®. ª¦¥ ᮤ¥à¦¨â ®¯¨á ¨ï äãªæ¨©, áâàãªâãà ¨ ª®áâ â ¤«ï
à ¡®âë á ᮡëâ¨ï¬¨ ¨ á®®¡é¥¨ï¬¨, ¥áâì äãªæ¨¨ ¤«ï ¯à¥®¡à §®¢ ¨ï ¨
ä®à¬ â¨à®¢ ¨ï ASCIIZ-áâப. à®£à ¬¬ë, ¨á¯®«ì§ãî騥 £à ä¨ç¥áª¨© ¨â¥à䥩á
¯®«ì§®¢ ⥫ï (GUI), ®¡ï§ â¥«ì® ¤®«¦ë ¨á¯®«ì§®¢ âì íâã ¡¨¡«¨®â¥ªã.
ਠ¢ëè¥ §¢ ë¥ DLL - KERNEL, GDI, USER - á®áâ ¢«ïîâ ¡ §ã ª ª ¨ á ¬®©
®¯¥à 樮®© á¨á⥬ë Windows, â ª ¨ «î¡®© ¯à®£à ¬¬ë ¯®¤ ¥¥.
WINERROR.H-- _WINERROR_
®¤¥à¦¨â ®¯¨á ¨ï ª®áâ â - ª®¤®¢ ®è¨¡®ª Windows. ¨¡«¨®â¥ª ¬®¦¥â
¡ëâì ¯®«¥§ áâ ¤¨¨ ®â« ¤ª¨ ¯à®£à ¬¬ë.
COMMCTRL.H-- _COMMCTRL_
®¤¥à¦¨â ¨¬¯®àâ¨àã¥¬ë¥ ¨§ COMCTL32.DLL äãªæ¨¨, â ª¦¥ ®¯¨á ¨ï
áâàãªâãà ¨ ª®áâ â ¤«ï á®®¡é¥¨©. ᯮ«ì§ã¥âáï ¤«ï ᮧ¤ ¨ï â ª¨å
¨â¥à䥩áëå í«¥¬¥â®¢, ª ª ¨¬ æ¨ï (Animation), à §«¨çë¥ á¯¨áª¨
(Drag List, Image List, List View, Tree View), § ª« ¤ª¨ (Tab Control),
¬®£®áâà ¨çë¥ ¤¨ «®£¨ (Property Sheets), áâப¨ á®áâ®ï¨ï ¨ ¯à®£à¥áá
(Status Bar, Progress Bar), ¯ ¥«¨ ¨áâà㬥⮢ (Toolbar), ¯®«§ãª®¢
(Trackbar), ¢á¯«ë¢ë îé¨å ¯®¤áª §®ª (Tooltip), § £®«®¢ª®¢ ¨ à §¤¥«¨â¥«¥©
(Header Control). 楫ïå 㬥ìè¥¨ï ®¡ê¥¬ ¢ë室®£® ª®¤ ¢á¯®¬®£ ⥫ìë¥
á¥à¢¨áë¥ äãªæ¨¨, § ¨¬ î騥 ¢ á㬬¥ ®ª®«® 4K ®¡ê¥ªâ®£® ª®¤ , ¢ë¥á¥ë ¢
ä ©«ë CC*.H--.
᫨ ¢ë ¥ å®â¨â¥ ¨á¯®«ì§®¢ âì ¨å, ¢ë ¬®¦¥â¥ á ¬¨ ¯®áë« âì
ᮮ⢥âáâ¢ãî騥 á®®¡é¥¨ï API-äãªæ¨¥© SendMessage.
COMMDLG.H-- _COMMDLG_
¥ «¨§ã¥â ¨â¥à䥩á á COMDLG32.DLL, ¨á¯®«ì§ã¥âáï ¤«ï à ¡®âë á®
áâ ¤ àâ묨 ¤¨ «®£®¢ë¬¨ ®ª ¬¨: ®âªàë⨥ ä ©« , á®åà ¥¨¥ ä ©« ,
¯®¨áª ¨ § ¬¥ ⥪áâ , ¢ë¡®à 梥â , ¢ë¡®à èà¨äâ , ¯®¤£®â®¢ª ª à ᯥç ⪥.
ADVAPI.H-- _ADVAPI_
«ã¦¨â ¤«ï ¨¬¯®àâ äãªæ¨© ¨§ ADVAPI32.DLL, ª®â®àë¥ ¯à¨¬¥ïîâáï ¤«ï
à ¡®âë á á¨áâ¥¬ë¬ à¥¥áâ஬ ¨ ०¨¬ ¬¨ ¡¥§®¯ á®á⨠¨ ¤®áâ㯠(ACL, ACE,
SID).
᫨ ªâ®-¨¡ã¤ì § ¥â, ª ªãî ¯®«ì§ã ¬®¦® ¨§¢«¥çì ¨§ áâàãªâãà ⨯
ACL ¨ SID - ¯¨è¨â¥.
SHELLAPI.H-- _SHELLAPI_
¬¯®àâ¨àã¥â äãªæ¨¨ ¨§ SHELL32.DLL - à áè¨à¥¨ï ®¡®«®çª¨. ë ᬮ¦¥â¥
¨á¯®«ì§®¢ âì íâã ¡¨¡«¨®â¥ªã ¤«ï à ¡®âë á ¯à®â®ª®«®¬ Drag&Drop, âàí©¥¬
¯ ¥«¨ § ¤ ç, ¨§¢«¥ç¥¨ï ¨ª®®ª ¨§ ¯à®£à ¬¬ ¨ ¡¨¡«¨®â¥ª, ®âªàëâ¨ï ¤®ªã¬¥â®¢
¨ à ¡®â îé¨å á ¨¬¨ ¯à¨«®¦¥¨© ¨ ¬®£®£® ¤à㣮£®.
LZEXPAND.H-- _LZEXPAND_
¥ «¨§ã¥â äãªæ¨¨ LZ32.DLL - ¡¨¡«¨®â¥ª¨ à ᯠª®¢ª¨ ¤ ëå. ®§¢®«ï¥â
à ᯠª®¢ë¢ âì ¤ ë¥, 㯠ª®¢ ë¥ ¯à®£à ¬¬®© COMPRESS. ë ¬®¦¥â¥
¨á¯®«ì§®¢ âì íâã ¡¨¡«¨®â¥ªã, ᮧ¤ ¢ ä ©« á £à 䨪®© ¨/¨«¨ ¬ã§ëª®© ¤«ï
᢮¥© ¤¥¬ª¨ ¨ § ⥬ 㯠ª®¢ ¢ ¥£® ¯à®£à ¬¬®© COMPRESS.
STRING32.H-- _STRING32_
®¤¥à¦¨â ॠ«¨§ æ¨î ª« áá¨ç¥áª¨å ¤«ï ¨ äãªæ¨© ®¡à ¡®âª¨ ASCIIZ-áâப ¨
¯à®áâ® áâப ¯®¤ Win32. ®¥ç®, ¢ë ¬®¦¥â¥ ¢¯®«¥ ®¡®©â¨áì ¨á¯®«ì§®¢ ¨¥¬
ᮮ⢥âáâ¢ãîé¨å WinAPI äãªæ¨©, ® ¥á«¨ ¤«ï ¢ á ᪮à®áâì ¨¬¥¥â ªà¨â¨ç¥áª®¥
§ 票¥ - í⨠äãªæ¨¨ ¤«ï ¢ á. «ï ¤¥â «ì®£® ®¯¨á ¨ï äãªæ¨© ᬮâà¨â¥
ä ©« STRING32.TXT.
CCANIM.H-- _CCANIM_
CCHEADER.H-- _CCHEADER_
CCLIST.H-- _CCLIST_
CCPRSHT.H-- _CCPRSHT_
CCTAB.H-- _CCTAB_
CCTREE.H-- _CCTREE_
®¤¥à¦¨â ®¯¨á ¨¥ á¥à¢¨áëå äãªæ¨© ¤«ï á«¥¤ãîé¨å ¨â¥à䥩áëå í«¥¬¥â®¢
ᮮ⢥âá⢥®: ¨¬ æ¨ï (Animation Control), à §¤¥«¨â¥«¨ (Header Control),
ᯨ᪨ (List View), ¬®£®áâà ¨çë¥ ¤¨ «®£®¢ë¥ ¯ ¥«¨ (Property Sheet),
§ ª« ¤ª¨ (Tab Control) ¨ ¤¥à¥¢ìï (Tree View). ᨫ㠥¢®§¬®¦®á⨠¢ë§®¢
API-äãªæ¨© ¨§ ¤¨ ¬¨ç¥áª¨å ¯à®æ¥¤ãà ¢á¥ á¥à¢¨áë¥ äãªæ¨¨ ¯à¨è«®áì ᤥ« âì
áâ â¨ç¥áª¨¬¨, ¤«ï 㬥ìè¥¨ï ®¡ê¥¬ ®¡ê¥ªâ®£® ª®¤ ¢ë¥á⨠¨å ¢
"ᮡá⢥ë¥" ¡¨¡«¨®â¥ª¨.
COMPRESS.EXE
à®£à ¬¬ ᦠâ¨ï ¤ ëå ®â Microsoft. ᯮ«ì§ã¥â «£®à¨â¬ ¥¬¯¥«ï-¨¢
(LZ). ¥à쥧®¥ ®£à ¨ç¥¨¥ - ¢ ®¤®¬ à娢¥ ¬®¦¥â ¡ëâì ⮫쪮 ®¤¨ ä ©«
(ª â «®£ ¥â). ®¦¥â ¯à¨¬¥ïâìáï ¤«ï ᦠâ¨ï ä ©« á ¤ 묨 ¤«ï ¯®á«¥¤ãî饩
à ᯠª®¢ª¨ äãªæ¨ï¬¨ ¡¨¡«¨®â¥ª¨ LZEXPAND.H--.
// ------------------------------------------------------------------- //
¤¨áâ¢¥ë¬ ®£à ¨ç¥¨¥¬ à §¢¨â¨ï ¡¨¡«¨®â¥ª ¢®§¬®¦®á⨠ª®¬¯¨«ïâ®à
C--. ®£¨¥ ¢¥é¨ ¯®¤ Windows ( ¯®¤®¡¨¥ ª®á¢¥ëå ¢ë§®¢®¢ ¨«¨ à ¡®âë á®
áâàãªâãà ¬¨ ¯® áá뫪¥) ¢¥áì¬ á«®¦® ®à£ ¨§®¢ âì ¡¥§ ®à¬ «ì®© ¬®¤¥«¨
㪠§ ⥫¥©. §¢¨â¨¥ ¡¨¡«¨®â¥ª ¡ã¤¥â ¢¥áâ¨áì ¯ à ««¥«ì® à §¢¨â¨î
ª®¬¯¨«ïâ®à .
¯®á«¥¤ãîé¨å ¢¥àá¨ïå ¡¨¡«¨®â¥ª ¯« ¨àã¥âáï ¯®¤¤¥à¦ª :
1) WinSocket ¨ WinInet
2) DirectX (¢ ç áâ®áâ¨, DirectDraw ¨ DirectInput)
3) ¨â¥à䥩ᮢ ®¡ê¥ªâ®¢ ®¡®«®çª¨ (Shell Library Object)
// ------------------------------------------------------------------- //
ë ¬®¦¥â¥ ¯¨á âì ¬¥ E-Mail ¨«¨ ¢ FIDO:
E-Mail: hd_keeper@mail.ru
FIDO: 2:5024/22.13@fidonet
à¨áë« ©â¥ ¬¥ ¢ è¨ ¯à¥¤«®¦¥¨ï, § ¬¥ç ¨ï, ¨ ®á®¡¥® á®®¡é¥¨ï
®¡ ®¡ à㦥ëå ®è¨¡ª å. ¥ ¤® § âì, ¢ ª ª®¬ ¯à ¢«¥¨¨ à ¡®â âì
¤ «ìè¥. ë ¬®¦¥â¥ ᢮¡®¤® ¬®¤¨ä¨æ¨à®¢ âì ¡¨¡«¨®â¥ª¨, ¥á«¨ ¢®á¨¬ë¥
¨§¬¥¥¨ï ¬®£ãâ, ¯® ¢ 襬㠬¥¨î, ¯à¨¢¥á⨠ª ¨å ã«ãç襨î. ®«ìª® ¥
§ ¡ã¤ì⥠¯®â®¬ á®®¡é¨âì ¬¥ ® ¨¡®«¥¥ 㤠çëå ¬®¤¨ä¨ª æ¨ïå. ¥ ®¡¥é î,
çâ® ®â¢¥ç㠢ᥠ¯¨áì¬ , ® ®¡ï§ â¥«ì® ¯à®çâã ¨ ¯à¨¬ã ª ᢥ¤¥¨î.
Have a nice coding!
â® ®¯ì¥¢ AKA Keeper
// ------------------------------------------------------------------- //
// STRING32.TXT ¤«ï Sphinx C-- (STRING32.H--) //
// ãªæ¨¨ ¤«ï à ¡®âë á® áâப ¬¨ ¯®¤ Win32 //
// ।«®¦¥¨ï ¨ ¯«¥¢ª¨ ®â¯à ¢«ï©â¥ hd_keeper@mail.ru //
// ------------------------------------------------------------------- //
¨¦¥ ¯à¨¢¥¤¥® ®¯¨á ¨¥ äãªæ¨© ¨§ STRING32.H--, ¯à¥¤ § ç¥ë¥ ¤«ï
à ¡®âë á ASCIIZ-áâப ¬¨ ¨ ®¡« áâﬨ ¯ ¬ï⨠¯®¤ Win32. ª íâ® ¯à¨ïâ® ¢
C--, ¢á¥ äãªæ¨¨ ïîâáï ¤¨ ¬¨ç¥áª¨¬¨ ¨ ¥ 㢥«¨ç¨¢ îâ à §¬¥à ª®¤ , ¥á«¨
¥ ¨á¯®«ì§ãîâáï. ãªæ¨¨ ®¯â¨¬¨§¨à®¢ ë ¯®¤ Pentium ¨ 32-¡¨âë¥ á¥£¬¥âë
ª®¤ . ®âì äãªæ¨¨ ¨ ¯à¥¤ § ç «¨áì ¤«ï à ¡®âë ¯®¤ Windows ¢ ¬®¤¥«¨ ¯ ¬ïâ¨
FLAT, ®¨ ¡ã¤ãâ à ¡®â âì ¯®¤ «î¡ãî ¤àã£ãî ®¯¥à 樮ãî á¨á⥬㠯ਠᮡ«î¤¥¨¨
á«¥¤ãîé¨å ãá«®¢¨©:
1) 32-¡¨âë¥ ®¯¥à ¤ë ᮤ¥à¦ â ª®à४âë¥ á¬¥é¥¨ï
2) ¥£¬¥âë¥ à¥£¨áâàë DS ¨ ES à ¢ë
3) « £ ¯à ¢«¥¨ï á¡à®è¥: DF=0
32-¡¨âë¥ á¥£¬¥âë ª®¤ ïîâáï ¦¥« ⥫ìë¬ (¤«ï ®¡¥á¯¥ç¥¨ï ¬ ªá¨¬ «ì®©
¯à®¨§¢®¤¨â¥«ì®áâ¨), ® ¥ ®¡ï§ ⥫ìë¬ ãá«®¢¨¥¬ ¯à¨¬¥¥¨ï.
§¬¥à äãªæ¨© ¤ ¯à¨ ¨å ¢¥¤à¥¨¨ ¢ ª®¤ ¯à®£à ¬¬ë (@). á«ãç ¥
¢ë§®¢ äãªæ¨© (CALL) á«¥¤ã¥â ¤®¡ ¢¨âì 1 ¡ ©â ¨áâàãªæ¨î RET.
--------------- ãªæ¨¨ ¤«ï à ¡®âë á ASCIIZ-áâப ¬¨ ---------------
strlen
¯à¥¤¥«¥¨¥ ¤«¨ë áâப¨
:DWORD strlen( LPSTR str);
str - 㪠§ ⥫ì áâபã
®§¢à é ¥â: ¤«¨ã áâப¨, ¥ ¢ª«îç ï § ¢¥àè î騩 0
§¬¥à: 12 ¡ ©â
WinAPI «®£: lstrlen
strend
¯à¥¤¥«¥¨¥ ª®æ áâப¨
:LPSTR strend( LPSTR str);
str - 㪠§ ⥫ì áâபã
®§¢à é ¥â: 㪠§ â¥«ì ª®¥æ áâப¨ ( § ¢¥àè î騩 0)
§¬¥à: 10 ¡ ©â
strcpy
®¯¨à®¢ ¨¥ áâப¨
:LPSTR strcpy( LPSTR dest, src);
src - 㪠§ â¥«ì ¨á室ãî áâபã
dest - 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤¥â ᪮¯¨à®¢ src
®§¢à é ¥â: dest
§¬¥à: 32 ¡ ©â
WinAPI «®£: lstrcpy
strcpyn, strncpy
®¯¨à®¢ ¨¥ áâப¨ á ®£à ¨ç¥¨¥¬ ¯® ¤«¨¥
:LPSTR strcpyn( LPSTR dest, src; DWORD max);
src - 㪠§ â¥«ì ¨á室ãî áâபã
dest - 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤¥â ᪮¯¨à®¢ src
max - ¬ ªá¨¬ã¬ ᨬ¢®«®¢, ᪮«ìª® ª®¯¨à®¢ âì ¨§ src
®§¢à é ¥â: dest
§¬¥à: 40 ¡ ©â
WinAPI «®£: lstrcpyn
strmov
®¯¨à®¢ ¨¥ áâப¨ (¤«ï ¯¥à¥ªàë¢ îé¨åáï áâப)
:LPSTR strmov( LPSTR dest, src);
src - 㪠§ â¥«ì ¨á室ãî áâபã
dest - 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤¥â ᪮¯¨à®¢ src
®§¢à é ¥â: dest
§¬¥à: 73 ¡ ©â
strmovn, strnmov
®¯¨à®¢ ¨¥ áâப¨ á ®£à ¨ç¥¨¥¬ ¯® ¤«¨¥ (¤«ï ¯¥à¥ªàë¢ îé¨åáï áâப)
:LPSTR strmovn( LPSTR dest, src; DWORD max);
src - 㪠§ â¥«ì ¨á室ãî áâபã
dest - 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤¥â ᪮¯¨à®¢ src
max - ¬ ªá¨¬ã¬ ᨬ¢®«®¢, ᪮«ìª® ª®¯¨à®¢ âì ¨§ src
®§¢à é ¥â: dest
§¬¥à: 79 ¡ ©â
strcat
®ª ⥠æ¨ï áâப (dest = dest + src)
:LPSTR strcat( LPSTR dest, src);
src - 㪠§ ⥫ì áâபã, ª®â®à ï ¡ã¤¥â ¯à¨¯¨á ª dest
dest - 㪠§ ⥫ì áâபã, ª ª®â®à®© ¡ã¤¥â ¯à¨¯¨á src
®§¢à é ¥â: dest
§¬¥à: 44 ¡ ©â
WinAPI «®£: lstrcat
strcmp
à ¢¥¨¥ áâப
:LONG strcmp( LPSTR str1, str2);
str1, str2 - 㪠§ ⥫¨ áà ¢¨¢ ¥¬ë¥ áâப¨
®§¢à é ¥â: 0, ¥á«¨ str1 = str2
< 0, ¥á«¨ str1 < str2
> 0, ¥á«¨ str1 > str2
§¬¥à: 26 ¡ ©â
WinAPI «®£: lstrcmp
strcmpi, stricmp
à ¢¥¨¥ áâப á ¨£®à¨à®¢ ¨¥¬ ॣ¨áâà
:LONG strcmpi( LPSTR str1, str2);
str1, str2 - 㪠§ ⥫¨ áà ¢¨¢ ¥¬ë¥ áâப¨
®§¢à é ¥â: 0, ¥á«¨ str1 = str2
< 0, ¥á«¨ str1 < str2
> 0, ¥á«¨ str1 > str2
§¬¥à: 53 ¡ ©â
WinAPI «®£: lstrcmpi
strcmpn, strncmp
à ¢¥¨¥ áâப á ®£à ¨ç¥¨¥¬ ¯® ¤«¨¥
:LONG strcmpn( LPSTR str1, str2; DWORD max);
str1, str2 - 㪠§ ⥫¨ áà ¢¨¢ ¥¬ë¥ áâப¨
max - ¬ ªá¨¬ã¬ ᨬ¢®«®¢, ᪮«ìª® áà ¢¨¢ âì
®§¢à é ¥â: 0, ¥á«¨ str1 = str2
< 0, ¥á«¨ str1 < str2
> 0, ¥á«¨ str1 > str2
§¬¥à: 30 ¡ ©â
WinAPI «®£: CompareString
strcmpni, strcmpin, strncmpi, stricmpn, strnicmp, strincmp
à ¢¥¨¥ áâப á ®£à ¨ç¥¨¥¬ ¯® ¤«¨¥ ¨ ¨£®à¨à®¢ ¨¥¬ ॣ¨áâà
:LONG strcmpni( LPSTR str1, str2; DWORD max);
str1, str2 - 㪠§ ⥫¨ áà ¢¨¢ ¥¬ë¥ áâப¨
max - ¬ ªá¨¬ã¬ ᨬ¢®«®¢, ᪮«ìª® áà ¢¨¢ âì
®§¢à é ¥â: 0, ¥á«¨ str1 = str2
< 0, ¥á«¨ str1 < str2
> 0, ¥á«¨ str1 > str2
§¬¥à: 57 ¡ ©â
WinAPI «®£: CompareString
strchr
®¨áª ᨬ¢®« ¢ áâப¥
:LPSTR strchr( LPSTR str; CHAR chr);
str - 㪠§ ⥫ì áâபã
chr - ¨áª®¬ë© ᨬ¢®«
®§¢à é ¥â: 㪠§ â¥«ì ¯¥à¢ë© ©¤¥ë© ᨬ¢®«
§¬¥à: 27 ¡ ©â
strchrr, strrchr
®¨áª ᨬ¢®« ¢ áâப¥ á ª®æ
:LPSTR strchrr( LPSTR str; CHAR chr);
str - 㪠§ ⥫ì áâபã
chr - ¨áª®¬ë© ᨬ¢®«
®§¢à é ¥â: 㪠§ â¥«ì ¯®á«¥¤¨© ©¤¥ë© ᨬ¢®«
§¬¥à: 26 ¡ ©â
strstr
®¨áª ¯®¤áâப¨ ¢ áâப¥
:LPSTR strstr( LPSTR str, substr);
str - 㪠§ ⥫ì áâபã, ¢ ª®â®à®© ¯à®¨§¢®¤¨âáï ¯®¨áª
substr - 㪠§ â¥«ì ¨áª®¬ãî ¯®¤áâபã
®§¢à é ¥â: 㪠§ â¥«ì ¯¥à¢ë© ᨬ¢®« ©¤¥®© ¯®¤áâப¨ ¢ str
(0, ¥á«¨ ¥ ©¤¥ )
§¬¥à: 63 ¡ ©â
strupr
ਢ¥¤¥¨¥ áâப¨ ª ¢¥à奬ã ॣ¨áâàã
:LPSTR strupr( LPSTR str);
str - 㪠§ ⥫ì áâபã
®§¢à é ¥â: str
§¬¥à: 24 ¡ ©â
WinAPI «®£: CharUpper
strlwr
ਢ¥¤¥¨¥ áâப¨ ª ¨¦¥¬ã ॣ¨áâàã
:LPSTR strlwr( LPSTR str);
str - 㪠§ ⥫ì áâபã
®§¢à é ¥â: str
§¬¥à: 24 ¡ ©â
WinAPI «®£: CharLower
strtok
§¡¨¥¨¥ áâப¨ á«®¢
:LPSTR strtok( LPSTR dest, src, divs);
src - 㪠§ â¥«ì ¨á室ãî áâப㠨«¨ १ã«ìâ ⠯।ë¤ã饣® ¢ë§®¢
dest - 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤¥â ᪮¯¨à®¢ ® á«®¢®
divs - 㪠§ ⥫ì áâபã, ᮤ¥à¦ éãî ᨬ¢®«ë-à §¤¥«¨â¥«¨
®§¢à é ¥â: 0, ¥á«¨ á«®¢ ¡®«ìè¥ ¥â
¥ 0, ¥á«¨ á«®¢® ᪮¯¨à®¢ ® ¢ dest (¯¥à¥¤ ©â¥ íâ® § 票¥
¢ ª ç¥á⢥ src ¤«ï ¯®á«¥¤ãî饣® ¯®¨áª )
§¬¥à: 50 ¡ ©â
--------------- ãªæ¨¨ ¤«ï à ¡®âë á ®¡« áâﬨ ¯ ¬ï⨠---------------
memsetz, memzset, memset0, mem0set
¡ã«¥¨¥ ®¡« á⨠¯ ¬ïâ¨
:void memsetz( LPVOID mem; DWORD size);
mem - 㪠§ â¥«ì ®¡« áâì ¯ ¬ïâ¨
size - à §¬¥à ®¡« á⨠¢ ¡ ©â å
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 16 ¡ ©â
WinAPI «®£: ZeroMemory
memset
¯®«¥¨¥ ®¡« á⨠¯ ¬ïâ¨
:void memset( LPVOID mem; DWORD size; BYTE value);
mem - 㪠§ â¥«ì ®¡« áâì ¯ ¬ïâ¨
size - à §¬¥à ®¡« á⨠¢ ¡ ©â å
value - § 票¥ ¡ ©â § ¯®«¥¨ï
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 24 ¡ ©â
WinAPI «®£: FillMemory
memcpy
®¯¨à®¢ ¨¥ ®¡« á⨠¯ ¬ïâ¨
:void memcpy( LPVOID dest, src; DWORD size);
src - 㪠§ â¥«ì ®¡« áâì, ®âªã¤ ª®¯¨à®¢ âì ¤ ë¥
dest - 㪠§ â¥«ì ®¡« áâì, ªã¤ ª®¯¨à®¢ âì ¤ ë¥
size - ª®«¨ç¥á⢮ ¡ ©â, ᪮«ìª® ª®¯¨à®¢ âì
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 14 ¡ ©â
WinAPI «®£: CopyMemory
memsetd, memset32
ëáâ஥ § ¯®«¥¨¥ ®¡« á⨠¯ ¬ïâ¨
:void memsetd( LPVOID mem; DWORD size, value);
mem - 㪠§ â¥«ì ®¡« áâì ¯ ¬ïâ¨
size - à §¬¥à ®¡« á⨠¢ ¤¢®©ëå á«®¢ å (¥ ¢ ¡ ©â å!)
value - § 票¥ ¤¢®©®£® á«®¢ § ¯®«¥¨ï
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 2 ¡ ©â
memcpyd, memcpy32
ëáâ஥ ª®¯¨à®¢ ¨¥ ®¡« á⨠¯ ¬ïâ¨
:void memcpyd( LPVOID dest, src; DWORD size);
src - 㪠§ â¥«ì ®¡« áâì, ®âªã¤ ª®¯¨à®¢ âì ¤ ë¥
dest - 㪠§ â¥«ì ®¡« áâì, ªã¤ ª®¯¨à®¢ âì ¤ ë¥
size - ª®«¨ç¥á⢮ ¤¢®©ëå á«®¢ (¥ ¡ ©â!), ᪮«ìª® ª®¯¨à®¢ âì
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 2 ¡ ©â
memmov
®¯¨à®¢ ¨¥ ®¡« á⨠¯ ¬ï⨠(¤«ï ¯¥à¥ªàë¢ îé¨åáï ®¡« á⥩)
:void memmov( LPVOID dest, src; DWORD size);
src - 㪠§ â¥«ì ®¡« áâì, ®âªã¤ ª®¯¨à®¢ âì ¤ ë¥
dest - 㪠§ â¥«ì ®¡« áâì, ªã¤ ª®¯¨à®¢ âì ¤ ë¥
size - ª®«¨ç¥á⢮ ¡ ©â, ᪮«ìª® ª®¯¨à®¢ âì
®§¢à é ¥â: ¨ç¥£®
§¬¥à: 57 ¡ ©â
WinAPI «®£: MoveMemory
memcmp
à ¢¥¨¥ ®¡« á⥩ ¯ ¬ïâ¨
:LONG memcmp( LPVOID mem1, mem2; DWORD size);
mem1, mem2 - 㪠§ ⥫¨ áà ¢¨¢ ¥¬ë¥ ®¡« áâ¨
size - ª®«¨ç¥á⢮ ¡ ©â, ᪮«ìª® áà ¢¨¢ âì (0 - ¨ ®¤®£®)
®§¢à é ¥â: 0, ¥á«¨ mem1 = mem2
< 0, ¥á«¨ mem1 < mem2
> 0, ¥á«¨ mem1 > mem2
§¬¥à: 26 ¡ ©â
-----------------------------------------------------------------
ᥣ® äãªæ¨©: 24
㬬 àë© à §¬¥à: 811 ¡ ©â (835 ¡ ©â)
--------------------------PsyTexx---------------------------
---------------------Amiga MOD Tracker----------------------
for PalmOS5
----------------------------v1.8----------------------------
--------------------by Alexandr Zolotov---------------------
New in version 1.8 (19 jan 2005):
* five octaves instead of three (use a following keys: A,B,C);
* sample effects: anticlick, HQ-portamento, distortion, simple cut-off and wah-wah;
* additional pattern effects: 6xx, 7xx, 8xx;
* internal help;
* 12 channels;
* new sample interpolation.
New in version 1.5:
* surround echo (you can play MODs with echo in the PsyTexx only!);
* auto properties saving;
* new effects: E1x E2x EAx EBx;
* much more powerfull sample editor (use menu for the new features);
* playing to the copy-buffer (for sample editor);
* 16bit linear interpolation;
* now you can play MODs in Palm SIMULATOR: just put win32DLL.dll file to the folder with Simulator and use psytexx_sim.prc;
* if you want to play MOD without additional effects (like an echo) press the CLASSIC MOD PLAYING button.
New in version 1.3:
* 8 channels support;
* 16 bit mixing;
* stereo sound;
* fixed some bugs in player;
* changed gui;
* new supported effects: Axx;
* and other small improvements... :)
www.warmplace.ru
2004. Ekaterinburg. Russia.