; FontDemo AmiGazette 15

; Allereerst een aantal library-routines die het programma gebruikt.

OpenLib=          -408                 ; Routine om library te openen.
CloseLib=         -414                 ; Routine om library te sluiten.
OpenScreen=       -198                 ; Routine om een scherm te openen.
CloseScreen=      -66                  ; Routine om een scherm te sluiten.
OpenWindow=       -204                 ; Routine om een venster te openen.
CloseWindow=      -72                  ; Routine om een venster te sluiten.
Text=             -60                  ; Routine om tekst af te drukken.
AddFont=          -480                 ; Routine om font toe te voegen.
RemFont=          -486                 ; Routine om font te verwijderen.
Execbase=         4                    ; Adres van de Exec.library.

; Wat variabelen die in het programma gebruikt worden.

HIRES=            $8000                ; Scherm-vlag.
CUSTOMSCREEN=     $000F                ; Scherm-vlag.
BACKDROP=         $0100                ; Scherm-vlag.
BORDERLESS=       $0800                ; Scherm-vlag.
ACTIVATE=         $1000                ; Scherm-vlag.
RMBTRAP=          $10000               ; Scherm-vlag.
NUMOFLINES=       9                    ; Aantal regels.

; Initialiseren van alle libraries en schermen.

Start:   move.l   ExecBase,a6          ; Offset naar de EXEC-library.
         lea      GfxNaam,a1           ; Adres van de naam van de library.
         jsr      OpenLib(a6)          ; Open de Graphics.library.
         move.l   d0,GfxBase           ; Sla de pointer naar de library op.
         Move.l   d0,a6                ; En ook in a6 voor de AddFont-routine.

         lea      font,a1              ; Pointer naar de font-struktuur.
         jsr      AddFont(a6)          ; Voeg de karakterset toe.

         move.l   ExecBase,a6          ; Offset naar de EXEC.library.
         lea      IntNaam,a1           ; Adres van de naam van de library.
         jsr      OpenLib(a6)          ; Open de Intuition.library.
         move.l   d0,IntBase           ; Sla de pointer naar de library op.

         lea      NewScreen,a0         ; Pointer naar de scherm-struktuur.
         move.l   d0,a6                ; Pointer naar de Intuition.library.
         jsr      OpenScreen(a6)       ; Open het scherm.
         move.l   d0,Screen            ; Sla de pointer naar het scherm op.
         beq.s    ScreenError          ; Geen scherm !!!

         lea      NewWindow,a0         ; Pointer naar de venster-struktuur.
         move.l   d0,30(a0)            ; Schermpointer in de struktuur zetten.
         jsr      OpenWindow(a6)       ; Open het venster.
         move.l   d0,Window            ; Sla de pointer naar het venster op.
         beq.s    WindowError          ; Geen venster !!!

; Nu gaan we wat teksten afdrukken in de nieuwe karakterset. Dat doen we in
; een lus om het programmastuk klein te houden. In het geheugen bij de vari-
; abele teksten staan de pointers naar de eigenlijke teksten en hun lengte.

         move.l   GfxBase,a6           ; Pointer naar de Graphics.library.
         lea      Teksten,a2           ; Pointer naar de tekst-adressen.
         move.l   d0,a3                ; Pointer naar het venster.
         move.l   50(a3),a3            ; Pointer naar de venster-rastport.
         moveq    #100,d2              ; X-Positie.
         moveq    #20,d3               ; Y-Positie.
         moveq    #NUMOFLINES-1,d4     ; Aantal regels tekst.

TLus:    move.w   d2,36(a3)            ; Sla de gegevens op in de rastport.
         move.w   d3,38(a3)
         move.l   (a2)+,a0             ; Volgende tekst-positie.
         move.l   (a2)+,d0             ; Lengte van die tekst.
         move.l   (a2)+,d5             ; Stijl van de tekst.
         move.b   d5,56(a3)            ; SetSoftStyle in de rastport.
         move.l   a3,a1                ; Pointer naar de rastport.
         jsr      Text(a6)             ; Druk de tekst af.
         add.w    #10,d3
         dbra     d4,TLus              ; Volgende tekst.

; Wachten op het drukken van een muisknop.

Wacht:   btst     #6,$BFE001           ; Test op linker-muisknop.
         bne.s    Wacht                ; Lus.

; Alles wat we geopend hebben moeten we nu ook weer sluiten.

Sluiten: move.l   IntBase,a6           ; Pointer naar de Intuition.library.
         move.l   Window,a0            ; Pointer naar het venster.
         jsr      CloseWindow(a6)      ; Venster sluiten.

WindowError:
         move.l   Screen,a0            ; Pointer naar het scherm.
         jsr      CloseScreen(a6)      ; Scherm sluiten.

ScreenError:
         move.l   GfxBase,a6           ; Pointer naar de Graphics.library.
         lea      Font,a1              ; Pointer naar de font-struktuur.
         jsr      RemFont(a6)          ; Karakterset sluiten.

         move.l   #4,a6                ; Pointer naar de EXEC.library.
         move.l   IntBase,a1           ; Pointer naar de Intuition.library.
         jsr      CloseLib(a6)         ; Intuition.library sluiten.
         move.l   GfxBase,a1           ; Pointer naar de Graphics.library.
         jsr      CloseLib(a6)         ; Graphics.library sluiten.
         rts                           ; Einde programma.

; Nu komen de diverse strukturen en teksten.

NewScreen:
         dc.w     0,0,640,256,1        ; Maten van het scherm.
         dc.b     4,1
         dc.w     HIRES,CUSTOMSCREEN   ; Mode van het scherm.
         dc.l     TextAttr,ScreenNaam,0,0

NewWindow:
         dc.w     0,0,640,256          ; Maten van het venster.
         dc.b     0,1
         dc.l     0
         dc.l     BACKDROP!BORDERLESS!ACTIVATE!RMBTRAP,0,0,0,0,0
         dc.w     0,0,640,256,CUSTOMSCREEN

ScreenNaam:                            ; De naam van het scherm.
         dc.b     "Font-Demo (Stop met de linker-muisknop)",0

; Nu de teksten.

even
Woord1:  dc.b     "             Een FONT-DEMO  van AmiGazette.             "
Woord2:  dc.b     "             De verschillende letters ---->             "
Woord3:  dc.b     "ABCDEFGHIJKLMNOPQRSTUVWXZY    abcdefghijklmnopqrstuvwxzy"
Woord4:  dc.b     "-----> 0123456789  !#$^%^&*()<>,.;'\=  9876543210 <-----"
Woord5:  dc.b     "In deze  karakterset zijn alleen  de tekens van  $20 tot"
Woord6:  dc.b     "$7F aanwezig. Speciale tekens zijn daarom niet aanwezig."
Woord7:  dc.b     "                 En dat was het weer...                 "
WoordEind:

; En nog wat geheugenplaatsen met namen en pointers die het programma ge-
; bruikt.

even
GfxNaam: dc.b     "graphics.library",0 ; Naam van de library.

even
IntNaam: dc.b     "intuition.library",0; Naam van de library.

even
GfxBase: dc.l     0                    ; Opslag Graphics-pointer.
IntBase: dc.l     0                    ; Opslag Intuition-pointer.
Screen:  dc.l     0                    ; Opslag Screen-pointer.
Window:  dc.l     0                    ; opslag Window-pointer.

; Nu een tabel met de pointers naar de teksten.
; 1. Pointer naar de tekst.
; 2. Lengte van de tekst.
; 3. Stijl van de tekst.

Teksten: dc.l     Woord1, Woord2-Woord1, 1
         dc.l     0,      0,             0
         dc.l     Woord2, Woord3-Woord2, 4
         dc.l     Woord3, Woord4-Woord3, 2
         dc.l     Woord4, Woord5-Woord4, 6
         dc.l     0,      0,             0
         dc.l     Woord5, Woord6-Woord5, 0
         dc.l     Woord6, Woord7-Woord6, 0
         dc.l     Woord7, WoordEind-Woord7, 0

; Vanaf hier komt de definitie van de karakterset.

Font:    dc.l     0                    ; Ln_Succ.
         dc.l     0                    ; Ln_Pred.
         dc.b     12                   ; Ln_Type.
         dc.b     0                    ; Ln_Pri.
         dc.l     FontNaam             ; Ln_Name.
         dc.l     0                    ; mn_ReplyPort.
         dc.w     FontEind-Font        ; Lengte.
         dc.w     8                    ; YSize.
         dc.b     0                    ; tf_Style.
         dc.b     128+1                ; REMOVED - ROMFONT.
         dc.w     8                    ; XSize.
         dc.w     6                    ; Baseline.
         dc.w     1                    ; BoldSmear.
         dc.w     0
         dc.b     $20                  ; LoChar = Spatie.
         dc.b     $7E                  ; HiChar.
         dc.l     CharData             ; De karakter-gegevens.
         dc.w     $60                  ; Modulo = 96.
         dc.l     CharLoc              ; Meer karakter-gegevens.
         dc.l     0
         dc.l     0


; Nu komt het vervelende deel, de data die de karakters maken. Tussen elke
; regel van 96 karakters zit een spatie-regel. De 96 bytes van 1 zo'n regel
; vormen samen 1 scherm-regel.

CharData:
         dc.b $00,$1c,$6c,$00,$10,$42,$30,$18,$1c,$70,$44,$00,$00,$00,$00,$06
         dc.b $78,$30,$78,$78,$1c,$fc,$38,$fc,$78,$78,$00,$00,$0c,$00,$60,$3c
         dc.b $7c,$78,$f8,$78,$f0,$78,$78,$78,$cc,$fc,$0c,$cc,$c0,$cc,$cc,$78
         dc.b $f8,$78,$f8,$78,$fc,$cc,$cc,$cc,$cc,$cc,$fc,$3e,$60,$7c,$10,$00
         dc.b $18,$00,$c0,$00,$0c,$00,$38,$00,$c0,$30,$0c,$c0,$30,$00,$00,$00
         dc.b $00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00,$0e,$18,$70,$00,$00

         dc.b $00,$1c,$6c,$24,$3c,$a4,$48,$18,$38,$38,$38,$10,$00,$00,$00,$0e
         dc.b $cc,$70,$cc,$cc,$3c,$c0,$60,$cc,$cc,$cc,$18,$18,$18,$00,$30,$66
         dc.b $82,$cc,$cc,$cc,$d8,$cc,$cc,$cc,$cc,$30,$0c,$d8,$c0,$fc,$cc,$cc
         dc.b $cc,$cc,$cc,$cc,$30,$cc,$cc,$cc,$cc,$cc,$0c,$30,$70,$0c,$38,$00
         dc.b $18,$00,$c0,$00,$0c,$00,$6c,$00,$c0,$00,$00,$c0,$30,$00,$00,$00
         dc.b $00,$00,$00,$00,$60,$00,$00,$00,$00,$00,$00,$18,$18,$18,$66,$66

         dc.b $00,$1c,$24,$7e,$40,$48,$50,$08,$70,$1c,$6c,$10,$00,$00,$00,$1c
         dc.b $dc,$f0,$0c,$0c,$6c,$c0,$c0,$18,$cc,$cc,$18,$18,$30,$7e,$18,$06
         dc.b $9a,$cc,$cc,$c0,$cc,$c0,$c0,$c0,$cc,$30,$0c,$f0,$c0,$cc,$ec,$cc
         dc.b $cc,$cc,$cc,$c0,$30,$cc,$cc,$cc,$78,$cc,$18,$30,$38,$0c,$6c,$00
         dc.b $10,$78,$f8,$78,$7c,$78,$60,$78,$f8,$30,$0c,$cc,$30,$7c,$78,$78
         dc.b $78,$78,$78,$7c,$f8,$cc,$cc,$c6,$cc,$cc,$fc,$18,$18,$18,$00,$00

         dc.b $00,$1c,$48,$24,$38,$10,$20,$10,$70,$1c,$38,$7c,$00,$7e,$00,$38
         dc.b $fc,$30,$18,$38,$cc,$f8,$f8,$30,$78,$7c,$00,$00,$60,$00,$0c,$0c
         dc.b $a2,$fc,$f8,$c0,$cc,$f8,$f8,$dc,$fc,$30,$0c,$e0,$c0,$cc,$dc,$cc
         dc.b $f8,$ec,$f8,$78,$30,$cc,$cc,$cc,$30,$78,$30,$30,$1c,$0c,$c6,$00
         dc.b $08,$0c,$cc,$cc,$cc,$cc,$f8,$cc,$cc,$30,$0c,$d8,$30,$d6,$cc,$cc
         dc.b $cc,$cc,$cc,$c0,$60,$cc,$cc,$c6,$78,$cc,$18,$38,$18,$1c,$18,$18

         dc.b $00,$00,$00,$7e,$04,$24,$54,$00,$70,$1c,$44,$10,$18,$00,$18,$70
         dc.b $ec,$30,$30,$0c,$fc,$0c,$cc,$30,$cc,$0c,$18,$18,$30,$7e,$18,$18
         dc.b $9a,$cc,$cc,$c0,$cc,$c0,$c0,$cc,$cc,$30,$cc,$f0,$c0,$cc,$cc,$cc
         dc.b $c0,$dc,$f0,$0c,$30,$cc,$cc,$cc,$78,$30,$60,$30,$0e,$0c,$00,$00
         dc.b $00,$7c,$cc,$c0,$cc,$fc,$60,$cc,$cc,$30,$0c,$f0,$30,$d6,$cc,$cc
         dc.b $cc,$cc,$c0,$78,$60,$cc,$cc,$d6,$30,$cc,$30,$18,$18,$18,$00,$00

         dc.b $00,$1c,$00,$24,$78,$4a,$48,$00,$38,$38,$00,$10,$18,$00,$18,$60
         dc.b $cc,$30,$60,$cc,$0c,$cc,$cc,$30,$cc,$18,$18,$18,$18,$00,$30,$00
         dc.b $82,$cc,$cc,$cc,$d8,$cc,$c0,$cc,$cc,$30,$cc,$d8,$c0,$cc,$cc,$cc
         dc.b $c0,$cc,$d8,$cc,$30,$cc,$78,$fc,$cc,$30,$c0,$30,$06,$0c,$00,$00
         dc.b $00,$cc,$cc,$cc,$cc,$c0,$60,$7c,$cc,$30,$0c,$d8,$30,$c6,$cc,$cc
         dc.b $f8,$7c,$c0,$0c,$6c,$cc,$78,$d6,$78,$7c,$60,$18,$18,$18,$66,$3c

         dc.b $00,$00,$00,$00,$10,$84,$34,$00,$1c,$70,$00,$00,$08,$00,$00,$00
         dc.b $78,$fc,$fc,$78,$0c,$78,$78,$30,$78,$30,$00,$08,$0c,$00,$60,$18
         dc.b $7c,$cc,$f8,$78,$f0,$78,$c0,$78,$cc,$fc,$78,$cc,$fc,$cc,$cc,$78
         dc.b $c0,$7a,$cc,$78,$30,$78,$30,$cc,$cc,$30,$fc,$3e,$00,$7c,$00,$fe
         dc.b $00,$7c,$f8,$78,$7c,$78,$60,$0c,$cc,$30,$cc,$cc,$30,$c6,$cc,$78
         dc.b $c0,$0c,$c0,$f8,$38,$78,$30,$7c,$cc,$0c,$fc,$0e,$18,$70,$3c,$66

         dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00
         dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00
         dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
         dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
         dc.b $00,$00,$00,$00,$00,$00,$00,$78,$00,$00,$78,$00,$00,$00,$00,$00
         dc.b $c0,$0c,$00,$00,$00,$00,$00,$00,$00,$78,$00,$00,$00,$00,$00,$00

; En nu de posities van de verschillende karakters in de data. Na de positie
; staat de breedte van elke karakter. In dit voorbeeld is die altijd 8.

CharLoc: dc.w       0,8,  8,8, 16,8, 24,8, 32,8, 40,8, 48,8, 56,8, 64,8
         dc.w      72,8, 80,8, 88,8, 96,8,104,8,112,8,120,8,128,8,136,8
         dc.w     144,8,152,8,160,8,168,8,176,8,184,8,192,8,200,8,208,8
         dc.w     216,8,224,8,232,8,240,8,248,8,256,8,264,8,272,8,280,8
         dc.w     288,8,296,8,304,8,312,8,320,8,328,8,336,8,344,8,352,8
         dc.w     360,8,368,8,376,8,384,8,392,8,400,8,408,8,416,8,424,8
         dc.w     432,8,440,8,448,8,456,8,464,8,472,8,480,8,488,8,496,8
         dc.w     504,8,512,8,520,8,528,8,536,8,544,8,552,8,560,8,568,8
         dc.w     576,8,584,8,592,8,600,8,608,8,616,8,624,8,632,8,640,8
         dc.w     648,8,656,8,664,8,672,8,680,8,688,8,696,8,704,8,712,8
         dc.w     720,8,728,8,736,8,744,8,752,8,760,8
FontEind:

; Als laatste de teksten die nog bij het font horen.

TextAttr:
         dc.l     FontNaam             ; Adres van de naam van de karakterset.
         dc.w     8                    ; Karakter-hoogte.
         dc.b     0                    ; Style.
         dc.b     1                    ; ROMFONT.

FontNaam:
         dc.b     "Amiga.font",0       ; Naam van de karakterset.

; Einde
