*****************************************************
*                                                   *
* This is a small test program for FastText         *
*                                                   *
* FastText is copyright 1988 by Darren M. Greenwald *
*                                                   *
* This implementation was written by                *
* E. Lenz                                           *
* Johann-Fichte-Strasse 11                          *
* 8 Munich 40                                       *
* Germany                                           *
*                                                   *
*****************************************************

_AbsExecBase        equ 4

**** exec *****

_LVOForbid       equ -$84
_LVOPermit       equ -$8a
_LVOGetMsg       equ -$174
_LVOReplyMsg     equ -$17a
_LVOWaitPort     equ -$180
_LVOCloseLibrary equ -$19e
_LVOOpenLibrary  equ -$228

**** intuition ******

_LVOCloseWindow     equ -$48
_LVOOpenWindow      equ -$cc
_LVOSetWindowTitles equ -$114

***** graphics ******

_LVOText            equ -$3c
_LVOMove            equ -$f0
_LVOSetAPen         equ -$156

wd_RPort         equ $32
rp_Font          equ $34
wd_UserPort      equ $56
pr_MsgPort       equ $5c
pr_CLI           equ $ac
ThisTask         equ $114
VBlankFrequency  equ $212

       XREF _InitFastText,_FastText,_FreeFastText
       XDEF _GfxBase

       movea.l _AbsExecBase,a6   test if WB or CLI
       movea.l ThisTask(a6),a0
       moveq   #0,d0
       tst.l   pr_CLI(a0)
       bne.s   isCLI

       lea     pr_MsgPort(a0),a0     for WB get WB Message
       jsr     _LVOWaitPort(a6)
       jsr     _LVOGetMsg(a6)

isCLI  move.l  d0,-(a7)

       cmpi.b  #60,VBlankFrequency(a6) test if PAL or NTSC
       beq.s   isNTSC
       move.w  #256,nw+6        for PAL at run time

isNTSC lea     GfxName(pc),a1   Open graphics.library
       moveq   #0,d0
       jsr     _LVOOpenLibrary(a6)
       movea.l d0,a4
       move.l  d0,_GfxBase
       beq.s   Gexit

       lea     IntName(pc),a1         open intuition library
       moveq   #0,d0
       jsr     _LVOOpenLibrary(a6)
       movea.l d0,a3
       tst.l   d0
       beq.s   Gexit

       movea.l d0,a6
       lea     nw(pc),a0              open window
       jsr     _LVOOpenWindow(a6)
       move.l  d0,window
Gexit  beq     exit

       movea.l d0,a0
       movea.l wd_RPort(a0),a5

       movea.l a5,a1
       moveq   #1,d0
       jsr     _LVOSetAPen(a6)

loop   movea.l _AbsExecBase,a6

       movea.l window(pc),a0
       movea.l wd_UserPort(a0),a0
       jsr     _LVOGetMsg(a6)
       tst.l   d0
       beq.s   loop             No message

       movea.l d0,a1
       move.l  $14(a1),d7       Message in a7
       jsr     _LVOReplyMsg(a6) Always reply

       cmpi.l  #$200,d7         Close window
       bne.s   loop

       movea.l a3,a6
       move.l  window(pc),a0
       lea     title1(pc),a1
       suba.l  a2,a2
       jsr     _LVOSetWindowTitles(a6)

       movea.l a4,a6
       movea.l a5,a1
       moveq   #1,d0
       jsr     _LVOSetAPen(a6)

       moveq   #20,d5
       moveq   #32,d7

lop1   moveq   #0,d6
       move.l  #199,d4

lop2   movea.l a5,a1
       move.l  d6,d0
       move.l  d7,d1
       jsr     _LVOMove(a6)

       movea.l a5,a1
       lea     Text(pc),a0
       moveq   #Tex-Text,d0
       jsr     _LVOText(a6)
       addq.l  #1,d6
       dbra    d4,lop2
       addq.l  #8,d7
       dbra    d5,lop1

       movem.l a3-a5,-(a7)
       move.l  rp_Font(a5),-(a7)
       jsr     _InitFastText
       addq.l  #4,a7
       movem.l (a7)+,a3-a5
       tst.l   d0
       beq.s   exit

       movea.l a3,a6
       move.l  window(pc),a0
       lea     title2(pc),a1
       suba.l  a2,a2
       jsr     _LVOSetWindowTitles(a6)

       movea.l a4,a6
       move.l  #'FAST',slo

       moveq   #20,d5
       moveq   #32,d7

lop3   moveq   #0,d6
       move.l  #199,d4

lop4   movea.l a5,a1
       move.l  d6,d0
       move.l  d7,d1
       jsr     _LVOMove(a6)

       movem.l d4-d7/a3-a6,-(a7)
       move.l  #Tex-Text,-(a7)
       lea     Text(pc),a0
       move.l  a0,-(a7)
       move.l  a5,-(a7)
       jsr     _FastText
       add.w   #12,a7
       movem.l (a7)+,d4-d7/a3-a6
       addq.l  #1,d6
       dbra    d4,lop4
       addq.l  #8,d7
       dbra    d5,lop3

       movem.l a3-a5,-(a7)
       jsr     _FreeFastText
       movem.l (a7)+,a3-a5

exit   movea.l a3,a6           close window
       move.l  window(pc),d0
       beq.s   noWin
       movea.l d0,a0
       jsr     _LVOCloseWindow(a6)

noWin  movea.l _AbsExecBase,a6
       move.l  (a7)+,d0
       beq.s   NoBenh
       jsr     _LVOForbid(a6)       reply to WB
       movea.l d0,a1
       jsr     _LVOReplyMsg(a6)
       jsr     _LVOPermit(a6)

NoBenh move.l  a3,d1           close intuition library
       beq.s   noInt
       movea.l d1,a1
       jsr     _LVOCloseLibrary(a6)

noInt  move.l  a4,d1               close graphics library
       beq.s   noGfx
       movea.l d1,a1
       jsr     _LVOCloseLibrary(a6)

noGfx  moveq   #0,d0                no error
       rts

Text   dc.b ' This is 36 characters of '
slo    dc.b 'SLOW text!'
Tex    even

title1 dc.b 'Drawing via Text()',0
       even

title2 dc.b 'Drawing via FastText()',0
       even

FfpName     dc.b 'mathffp.library',0

GfxName     dc.b 'graphics.library',0,0

IntName     dc.b 'intuition.library',0

window      dc.l 0
_GfxBase    dc.l 0

title       dc.b  'Fast Text Demo Rev 2.9 - Close me!',0
            even

***** Window definition *****

nw          dc.w 0,0           ;Position left,top
            dc.w 640,199       ;Size width,height
            dc.b 0,1           ;Colors detail-,block pen
            dc.l $344          ;IDCMP-Flags
            dc.l $144f         ;Window flags
            dc.l 0             ;^Gadget
            dc.l 0             ;^Menu check
            dc.l title         ;^Window name
nws         dc.l 0             ;^Screen structure,
            dc.l 0             ;^BitMap
            dc.w 10            ;MinWidth
            dc.w 10            ;MinHeight
            dc.w -1            ;MaxWidth
            dc.w -1,1          ;MaxHeight,Screen type
            end

