Metropoli BBS
VIEWER: message.asm MODE: TEXT (ASCII)
Data    segment para public 'Data'

include Small.FNT

MessageNumLines equ     48
Message         db      '                                    ',0
                db      '        BBS ADVERTISEMENT BY        ',0
                db      '           FRED NIETZCHE            ',0
                db      '                                    ',0
                db      '         FONTS SNAGGED FROM         ',0
                db      '        THG''S INTROMAKER 3.0        ',0
                db      '                                    ',0
                db      '                                    ',1
                db      '                                    ',0
                db      '                                    ',0
                db      '           - SKYNET BBS -           ',0
                db      '           (301) 890-2972           ',0
                db      '                                    ',0
                db      '   SYSOPS: VIPER * THE ROCKETEER    ',0
                db      '                                    ',0
                db      '                                    ',1
                db      '                                    ',0
                db      '                                    ',0
                db      '    FEATURING...                    ',0
                db      '      * 1.7 GIGS ONLINE!            ',0
                db      '      * SEARCHLIGHT V3.0 BBS        ',0
                db      '      * 14400 V.32/BIS,V.42/BIS     ',0
                db      '                                    ',0
                db      '                                    ',1
                db      '                                    ',0
                db      '                                    ',0
                db      '    SPECIALIZING IN...              ',0
                db      '      * SB/VGA DEMOS/FILES          ',0
                db      '      * .MOD/.MID MUSIC FILES       ',0
                db      '      * LIVELY DISCUSSIONS (HA!)    ',0
                db      '                                    ',0
                db      '                                    ',1
                db      '                                    ',0
                db      '                                    ',0
                db      '   ...AND OF COURSE, THE LATEST     ',0
                db      '   AND GREATEST IN 0-7 DAY WAREZ    ',0
                db      '                                    ',0
                db      '           CALL TODAY!              ',0
                db      '                                    ',0
                db      '                                    ',1
                db      '                                    ',0
                db      '                                    ',0
                db      '                                    ',0
                db      '              OH.....               ',0
                db      '     DID I MENTION 9600+ ONLY?      ',0
                db      '                                    ',0
                db      '                                    ',0
                db      '                                    ',1



MessagePtr      dw      offset Message
MessageLine     dw      0

Data    ends


DisplayNextLine proc    near
; This procedure displays the next message line 'slice' onto the bottom of the
; split screen window.  Assumes ES = 0a000h, and write mode is 0

        mov     dx,03c4h
        mov     ax,0f02h
        out     dx,ax
        mov     al,CurrentLine
        add     al,129
        mov     di,StartAddr
        add     di,SplitHeight*80 + 4
        mov     cx,72
        rep     stosb

        mov     si,MessagePtr
        mov     di,StartAddr
        add     di,SplitHeight*80 + 4   ; (Xstart,Ystart) = (32,SplitHeight)
        mov     cl,3
DNL1:
        lodsb
        cmp     al,1
        jbe     Finished
        sub     al,32
        xor     bx,bx
        mov     bl,al
        shl     bx,6
        xor     ah,ah
        shl     ax,4
        add     bx,ax
        add     bx,MessageLine
        mov     ah,8
DNL2:
        mov     al,[offset Font + bx]
        cmp     al,0
        jz      DNL3

        mov     bp,ax
        mov     ax,0802h
        shr     ah,cl
        mov     dx,03c4h
        out     dx,ax
        mov     ax,bp

        mov     byte ptr es:[di],al

DNL3:
        dec     cl
        jns     DNL4
        inc     di
        mov     cl,3
DNL4:
        inc     bx
        dec     ah
        jnz     DNL2

        jmp     DNL1

Finished:
        add     MessageLine,8
        cmp     MessageLine,80
        jne     DontResetML

        cmp     al,1
        jne     Finished2
        mov     Delay,200
Finished2:

        mov     MessageLine,0
        add     MessagePtr,37
        cmp     MessagePtr,offset Message + MessageNumLines*37
        jne     DontResetML
        mov     MessagePtr,offset Message

DontResetML:
        ret

DisplayNextLine endp


CopyLineToTop   proc    near
; Copies displayed line from the bottom of the split screen window to the
; top portion.  Assumes in write mode 1, data rotate is none, and ES points to
; 0a000h

        mov     bx,ds

        mov     si,StartAddr
        add     si,4
        mov     di,si
        add     si,SplitHeight*80

        mov     dx,03c4h
        mov     ax,0f02h
        out     dx,ax

        mov     ax,0a000h
        mov     ds,ax

        mov     cx,72
        rep     movsb

        mov     ds,bx

        ret

CopyLineToTop   endp

[ RETURN TO DIRECTORY ]