home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
M.u.C.S. Disc 2000
/
MUCS2000.iso
/
anwend
/
luna121
/
module
/
beispiel.s
< prev
next >
Wrap
Text File
|
1999-06-03
|
3KB
|
110 lines
; Beipiel-(Block-)Filtermodul (*.FM)
; (c)1999 Richard Gordon Faika
; --------------------------------------------------------------------
; Parameter holen
; Hier werden die benötigten Parameter vom Stack geholt.
; --------------------------------------------------------------------
move 4(sp),d0 ; Funktionsnummer holen
move.l 6(sp),a1 ; String-Startadresse holen
move 14(sp),d1 ; Stringlänge holen
tst d0 ; Filtern?
beq filter
; --------------------------------------------------------------------
; Funktionsnummer auswerten
; --------------------------------------------------------------------
cmpi #1,d0
bne case1
bra GetInfo ; Info
case1: cmpi #2,d0
bne case2
bra ModInit ; Init
case2: cmpi #3,d0
bne noFunc
bra ModExit ; Exit
; --------------------------------------------------------------------
; Modul-Initialisierung
; --------------------------------------------------------------------
ModInit: clr.l d0
rts
; --------------------------------------------------------------------
; Modul-Deinitialisierung
; --------------------------------------------------------------------
ModExit: clr.l d0
rts
; --------------------------------------------------------------------
; Infotextzeiger zurückgeben
; Der Infotext wird im Modulinfo-Dialog von Luna angezeigt, wenn
; der Anwender eine Modulinformation zu diesem Modul wünscht.
; --------------------------------------------------------------------
GetInfo: lea.l info(pc),a0 ; Zeiger auf Infotext zurück.
move.l a0,d0
rts
; --------------------------------------------------------------------
; unbekannte Funktionsnummer
; --------------------------------------------------------------------
noFunc: moveq.l #-32,d0
rts
; --------------------------------------------------------------------
; Filterroutine
; Die eigentliche Filterroutine, mit der man den Text verändern kann.
; Bei Textlängenänderung o.Ä., ist in den Arbeitspuffer zu schreiben
; und eine 1 zurückzugeben.
; --------------------------------------------------------------------
filter: tst d1
beq exit
bra goin
loop:
move.b (a1),d0
rol.b #4,d0 ; Schwachsinn, aber Effektvoll =:)
move.b d0,(a1)+
goin:
dbra d1,loop
exit: clr.l d0 ; 0 = OK
rts
; --------------------------------------------------------------------
; Infotext
; Der Infotext mu₧ dieser Struktur folgen, weil immer 6 Strings nacheinander
; gelesen werden. Minimum ist also ein Nullbyte je Eintrag.
; --------------------------------------------------------------------
info: dc.b ' Beispielmodul',0 ; Modulinfo für Popup, max. 24 Zeichen+Nullbyte
dc.b 'Autorenname',0 ; Autorenname, max. 20 Zeichen+Nullbyte
dc.b 'Infotext Zeile 1',0 ; max. 40 Zeichen+Nullbyte
dc.b 'Infotext Zeile 2',0 ; ""
dc.b 'Infotext Zeile 3',0 ; ""
dc.b 'Infotext Zeile 4',0 ; ""