&&
------------------------------------------------------------------------------
               CURSUS ASSEMBLER  -  EIGEN FONTS IN PROGRAMMA'S
------------------------------------------------------------------------------

; 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

Meer in deel 3 van deze tekst....

- EINDE DEEL 2 ---------------------------------------------------------------
&&
