home *** CD-ROM | disk | FTP | other *** search
- opt l- ;nicht linken
-
- * ZScrollASCII V1.00
- * 1991-09-03 by Mark Zeindlinger
- * Sprache: DEVPAC-Assembler
-
- _ExecBase equ 4 ;Basisadresse EXEC-Lib
-
- _LVOOpenLibrary equ -552 ;Offsets EXEC-Library
- _LVOCloseLibrary equ -414
- _LVOGetMsg equ -372
- _LVOReplyMsg equ -378
- _LVOAllocMem equ -198
- _LVOFreeMem equ -210
-
- _LVOOpenWindow equ -204 ;Offsets INTUITION-Library
- _LVOCloseWindow equ -72
-
- _LVOMove equ -240 ;Offsets GRAPHICS-Library
- _LVOText equ -60
- _LVOScrollRaster equ -396
- _LVOSetAPen equ -342
-
- _LVOOpen equ -30 ;Offsets DOS-Library
- _LVOClose equ -36
- _LVORead equ -42
- _LVOLock equ -84
- _LVOUnLock equ -90
- _LVOExamine equ -102
- _LVODelay equ -198
- _LVOOutput equ -60
- _LVOWrite equ -48
-
- Begin movem.l d0-d7/a0-a6,-(sp) ;Alle Regs retten (sauber, sauber!!)
- move.l a0,Parameter ;Adresse d. CLI Params retten
- subq #1,d0 ;Parameterlaenge minus 1
- add.l d0,a0 ;Parameterende --> a0
- move.b #" ",(a0) ;Steuerzeichen durch Space ersetzen
-
- move.l Parameter,a0 ;Parameteradresse --> a0
- Loop cmp.b #" ",(a0)+ ;Leerzeichen => Filename Ende ?
- bne.s Loop ;Nein? => weitersuchen
- move.b #0,-(a0) ;Ja! => mit Null stopfen
- addq.l #1,a0 ;Eine Stelle weiter
- cmp.b #"-",(a0)+ ;Ist Zeichen ein "-"?
- bne.s FixSpeed ;Nein? => Default-Geschwindigkeit
- SetSpeed
- sub.b #48,(a0) ;ASCII Zahl in Geschw. umrechnen
- cmp.b #-1,(a0) ;Kleiner als -1?
- blt.s FixSpeed ;Ja! => Default-Geschw. setzen
- cmp.b #9,(a0) ;Groesser als 9?
- bgt.s FixSpeed ;Ja! => Default-Geschw. setzen
- move.b (a0),Speed ;Geschw. setzen (0-9)
- bra.s OpenLibs
- FixSpeed
- move.b #1,Speed ;Default-Geschwindigkeit = 1
-
- OpenLibs
- move.l _ExecBase,a6 ;Exec-Basis -> a6
- lea intname(pc),a1 ;Adresse d. Lib-Namen -> a1
- moveq #0,d0 ;Version is uns wurst...
- jsr _LVOOpenLibrary(a6) ;Library oeffnen
- tst.l d0 ;Was hamma in d0?
- beq close ;Keine Lib => Ende
- move.l d0,_IntuitionBase ;Library-Basis sichern
-
- lea gfxname(pc),a1 ;wie oben, nur Graphics-Lib
- moveq #0,d0
- jsr _LVOOpenLibrary(a6)
- tst.l d0
- beq intclose
- move.l d0,_GfxBase
-
- lea dosname(pc),a1 ;und weil`s so schoen war...
- moveq #0,d0 ;(Dos-Lib)
- jsr _LVOOpenLibrary(a6)
- tst.l d0
- beq gfxclose
- move.l d0,_DosBase
-
- move.l #260,d0 ;260 Bytes reservieren
- moveq #2,d1 ;Chip-Ram
- jsr _LVOAllocMem(a6) ;Speicher allokieren
- tst.l d0 ;Hat alles geklappt?
- beq dosclose ;Nein? => Ende
- move.l d0,FileInfoBlock ;Startadresse d. Speichers retten
-
- move.l _DosBase,a6 ;Dos-Basis -> a6
- move.l Parameter,d1 ;Zu ladendes File -> d1
- moveq #-2,d2 ;Lesezugriff
- jsr _LVOLock(a6) ;Lock auf Datei holen
- tst.l d0 ;Gefunden?
- beq errlock ;Nein? => Fehlermeldung
- move.l d0,TextLock ;Ja! => Sichern
-
- move.l d0,d1 ;Lock auf Datei -> d1
- move.l FileInfoBlock,d2 ;Speicherbereich f. fib -> d2
- jsr _LVOExamine(a6) ;FileInfoBlock holen
- tst.l d0 ;Gefunden?
- beq fibclose ;Nein? => Ende
-
- move.l TextLock,d1 ;Lock auf Datei -> d1
- jsr _LVOUnLock(a6) ;Datei entLOCKen...
-
- move.l FileInfoBlock,a0 ;Adresse d. fib -> a0
- move.l 124(a0),TextLength ;Dateilaenge ermitteln
- addq #4,TextLength ;plus 4 - als Reserve
-
- move.l _ExecBase,a6 ;Dat kenne ma aber jetz...
- move.l TextLength,d0 ;Dateilaenge -> d0
- move.l #$10000,d1 ;Geloeschten Speicherbereich
- jsr _LVOAllocMem(a6) ;Speicher f. Text anfordern
- tst.l d0 ;Bekommen?
- beq errmem ;Nein? => Fehlermeldung
- move.l d0,TextMem ;Ja! => Adresse sichern
-
- move.l _DosBase,a6 ;...
- move.l Parameter,d1 ;Dateiname -> d1
- move.l #1005,d2 ;Bestehendes File oeffnen
- jsr _LVOOpen(a6) ;Textdatei oeffnen
- tst.l d0 ;Geklappt?
- beq errfile ;Nein? => Fehlermeldung
- move.l d0,TextHandle ;Datei-Identifikation sichern
-
- move.l d0,d1 ;Datei-Identifikation -> d1
- move.l TextMem,d2 ;Reservierter Speicher -> d2
- move.l TextLength,d3 ;Zu lesende Bytes (Textlaenge) -> d3
- jsr _LVORead(a6) ;Endlich!! Text einlesen
- tst.l d0 ;Alles OK?
- bmi errread ;Nein? => Fehlermeldung
-
- bsr CloseText ;Ja! => Textdatei schliessen
-
- move.l _IntuitionBase,a6 ;...
- lea Display(pc),a0 ;Adresse d. Fensterdaten -> a0
- jsr _LVOOpenWindow(a6) ;Scrollfenster oeffnen
- tst.l d0 ;Fenster offen?
- beq memclose ;Nein? => Ende
- move.l d0,WindowPtr ;Ja! => Zeiger auf Fenster sichern
-
- move.l WindowPtr,a0 ;Zeiger auf Fenster -> a0
- move.l 50(a0),_RastPort ;Adresse d. RastPort ermitteln
- move.l 86(a0),a5 ;UserPort ermitteln und -> a5
-
- move.l TextMem,TextPointer ;Textbeginn -> TextPointer
-
- move.l _GfxBase,a6 ;...
- move.l _RastPort,a1 ;RastPort -> a1
- moveq #1,d0 ;Farbregister Nr.1 verwenden
- jsr _LVOSetAPen(a6) ;Farbe setzen
-
- Heart ;das Herzstückl
- move.l _ExecBase,a6 ;...
- move.l a5,a0 ;UserPort -> a0
- jsr _LVOGetMsg(a6) ;Checken, ob jemand Message schickt
- tst.l d0 ;Is Post da?
- bne Message ;Ja! => Message auswerten
-
- move.l _GfxBase,a6 ;...
- move.l _RastPort,a1 ;RastPort -> a1
- move.l #619,d0 ;X-Position v. Grafikcursor
- move.l #18,d1 ;Y-Position v. Gc (relativ zum Window)
- jsr _LVOMove(a6) ;Grafikcursor setzen
-
- move.l TextPointer,a0 ;Zeiger auf aktuelle Textposition -> a0
- tst.l (a0) ;Ist noch Text da?
- beq SetPointer ;Nein? => Zeiger auf Textbeginn
- move.w (a0),d2 ;2 Zeichen -> d2
- bsr Check ;Zeichen ueberpruefen
-
- move.l TextPointer,a0 ;Zeiger auf aktuelle Textpos -> a0
- moveq #2,d0 ;Textlaenge = 2 Zeichen
- jsr _LVOText(a6) ;2 Zeichen ausgeben
- addq.l #2,TextPointer ;Zeiger um 2 erhoehen
-
- Scroll
- move.l #15,d6 ;Schleife: 15 x 1 Pixel scrollen
-
- DoIt move.l _GfxBase,a6
- move.l _RastPort,a1 ;RastPort -> a1
- moveq #1,d0 ;1 Pixel nach links
- moveq #0,d1 ;0 Pixel nach oben/unten
- moveq #6,d2 ;linke obere Ecke
- moveq #12,d3 ;des Scrollbereichs
- move.l #637,d4 ;rechte untere Ecke
- move.l #19,d5 ;des Scrollbereichs
- jsr _LVOScrollRaster(a6) ;Es rollt und rollt und rollt...
-
- move.l _DosBase,a6
- moveq #0,d1 ;d1 loeschen
- move.b Speed,d1 ;Geschwindigkeit/Pause -> d1
- jsr _LVODelay(a6) ;Bitte Warten! - Verzoegerung
-
- dbf d6,DoIt ;wenn nicht -1 => weiterscrollen
- bra Heart ;weiter Zeichen schreiben
-
- Check
- ror.w #8,d2 ;Zeichen in d2 vertauschen
- bsr Splunch ;Ueberpruefen
- addq #1,a0 ;Ein Zeichen im Text weiter
- rol.w #8,d2 ;Wieder vertauschen
- bsr Splunch ;Zweites Zeichen vertauschen
- rts ;All right -> back again!
- Splunch ;Dedicated to RAY!
- cmp.b #31,d2 ;ASCII-Code < 32?
- bls.s SetSpace ;Ja! => Durch Space ersetzen
- cmp.b #159,d2 ;ASCII-Code > 159?
- bhi.s Jump ;Ja! => Ruecksprung
- cmp.b #127,d2 ;ASCII-Code > 127?
- bhi.s SetSpace ;Ja! => Durch Space ersetzen
- Jump rts
-
- SetSpace
- move.b #32,(a0) ;mit ASCII fuer Space ersetzen
- bra.s Jump
-
- SetPointer
- move.l TextMem,TextPointer ;Textanfang -> Textpointer
- bra Heart
-
- Message
- move.l d0,a1 ;Anfangsadr. Message -> a1
- jsr _LVOReplyMsg(a6) ;Msg zurueckschicken
-
- wndclose ;Window schliessen
- move.l _IntuitionBase,a6
- move.l WindowPtr,a0
- jsr _LVOCloseWindow(a6)
- bra.s memclose
- txtclose ;Textdatei (bei Fehler) schliessen
- bsr CloseText
- memclose ;Textspeicher freigeben
- move.l _ExecBase,a6
- move.l TextMem,a1
- move.l TextLength,d0
- jsr _LVOFreeMem(a6)
- fibclose ;FileInfoBlock-Speicher freigeben
- move.l _ExecBase,a6
- move.l FileInfoBlock,a1
- move.l #240,d0
- jsr _LVOFreeMem(a6)
- dosclose ;DOS-Lib schliessen
- move.l _ExecBase,a6
- move.l _DosBase,a1
- jsr _LVOCloseLibrary(a6)
- gfxclose ;Grafics-Lib schliessen
- move.l _GfxBase,a1
- jsr _LVOCloseLibrary(a6)
- intclose ;Intuition-Lib schliessen
- move.l _IntuitionBase,a1
- jsr _LVOCloseLibrary(a6)
- close
- movem.l (sp)+,d0-d7/a0-a6 ;Alle Regs. zurückschreiben
- moveq #0,d0 ;evtl. Fehlercode loeschen
- rts ;Finito. Schluss. Aus. Basta.
-
- * --------------------------------------------------------------
-
- errlock ;Keinen Lock bekommen
- move.l #locktxt,d2 ;Adr. Fehlertext -> d2
- moveq #32,d3 ;Textlaenge -> d3
- bsr GetHandle ;Ausgabe-Handle holen
- bra.s fibclose ;alles Geoeffnete schliessen
-
- locktxt dc.b "--- Datei nicht gefunden!!! ---",10
- even
- errmem ;Kein Speicher fuer Text
- move.l #memtxt,d2
- moveq #29,d3
- bsr GetHandle
- bra fibclose
-
- memtxt dc.b "--- Zu wenig Speicher!!! ---",10
- even
- errfile
- move.l #filetxt,d2
- moveq #46,d3
- bsr GetHandle
- bra memclose
-
- filetxt dc.b "--- Datei konnte nicht geöffnet werden!!! ---",10
- even
- errread
- move.l #readtxt,d2
- moveq #19,d3
- bsr GetHandle
- bra txtclose
-
- readtxt dc.b "--- Lesefehler ---",10
- even
-
- * --------------------------------------------------------------
-
- CloseText
- move.l _DosBase,a6
- move.l TextHandle,d1
- jsr _LVOClose(a6)
- rts
-
- * --------------------------------------------------------------
-
- GetHandle
- move.l _DosBase,a6
- jsr _LVOOutput(a6) ;Ausgabe-Handle ermitteln
- move.l d0,d1
- Print jsr _LVOWrite(a6) ;Text ins CLI schicken
- rts
-
- * --------------------------------------------------------------
-
- intname dc.b "intuition.library",0
- gfxname dc.b "graphics.library",0
- dosname dc.b "dos.library",0
-
- _IntuitionBase dc.l 0
- _DosBase dc.l 0
- _GfxBase dc.l 0
-
- _RastPort dc.l 0
- TextPointer dc.l 0
- FileInfoBlock dc.l 0
- TextLock dc.l 0
- TextMem dc.l 0
- TextHandle dc.l 0
- TextLength dc.l 0
- Parameter dc.l 0
- WindowPtr dc.l 0
- Speed dc.b 0
- even
- SignalBit dc.b 0
- even
-
- DisplayTitle dc.b "ZScrollASCII V1.00",0
- even
-
- Display dc.w 0,234
- dc.w 640,22
- dc.b -1,-1
- dc.l 512
- dc.l 4110
- dc.l 0,0
- dc.l DisplayTitle
- dc.l 0,0
- dc.w 640,22
- dc.w 640,22
- dc.w $0001
- even
-
- * -------------- End of Z --------------------------------------
-
-