****************************************
*  STOS WORD Output Routine            *
*  Aaron Fothergill                    *
*  Shadow Software 1989                *
*  For the STOS Club                   *
*  A0=start of string to output in     *
*  STOS Format , d0=command            *
*  0=lprint string                     * 
*  1=print string                      *
*  2=check string for control chars    *
*   (returns 0,1 in Dreg(0)            *
*                                      *
****************************************

COMMAND
        cmpi.w  #0,d0
        beq     Print
        cmpi.w  #1,d0
        beq     Outline
        cmpi.w  #2,d0
        beq     Checker
        rts
Print
        move.w  #0,d0
        move.b  -1(a0,d0),d2
        andi.w	#$00FF,d2
        cmpi.w	#0,d2
        beq	endprnt
        cmpi.w	#200,d2
        bge	endprnt
ploop   move.b  0(a0,d0),d1
        andi.w  #$FF,d1
        movem.l a0/d0-d2,-(a7)
wait    move.w  #17,-(a7)
        trap    #1
        addq.l  #2,a7
        tst.w   d0
        beq     wait
        movem.l (a7)+,a0/d0-d2
        movem.l a0/d0-d2,-(a7)
        move.w  d1,-(a7)
        move.w  #5,-(a7)
        trap    #1
        addq.l  #4,a7
        movem.l (a7)+,a0/d0-d2
mprnt   addq.w  #1,d0
        cmp.w   d2,d0
        bne     ploop
endprnt rts
Outline
        move.w  #0,d3
        move.b  -1(a0,d3),d2
        andi.w	#$00FF,d2
	cmpi.w	#0,d2
	beq	endout
	cmpi.w	#200,d2
	bge	endout
oloop   move.b  0(a0,d3),d1
        andi.w  #$FF,d1

        cmpi.w  #128,d1
        beq     setinv
        cmpi.w  #129,d1
        beq     invoff
        cmpi.w  #130,d1
        beq     setshade
        cmpi.w  #131,d1
        beq     shadeoff
        cmpi.w  #132,d1
        beq     setuline
        cmpi.w  #133,d1
        beq     ulineoff

        cmpi.w  #32,d1
        bge     normal

        bsr     Inverseb
        move.w  d1,d0
        addi.w  #64,d0
        bsr     crout
        bsr     Invoffb
        bra     noprnt
normal  
        move.w  d1,d0
        bsr     crout

noprnt  addq.w  #1,d3
        cmp.w   d2,d3
        bne     oloop
endout  rts
setinv
        bsr     Inverse
        bra     noprnt
invoff
        bsr     Invoff
        bra     noprnt
setuline
        bsr     Underline
        bra     noprnt
ulineoff
        bsr     Ulineoff
        bra     noprnt
Underline
        move.w  #31,d0
        bra     croutplus
        
Ulineoff
        move.w  #29,d0
        bra     croutplus
        
Inverseb
        move.w  #21,d0
        bra     crout
Invoffb  
        move.w  #18,d0
        bra     crout
setshade
        bsr     Shade
        bra     noprnt
shadeoff
        bsr     Shadeoff
        bra     noprnt        
Inverse
        move.w  #21,d0
        bra     croutplus
        
        
        
Invoff  move.w  #18,d0
        bra     croutplus
        
        
Shade   move.w  #22,d0
        bra     croutplus
        
        
Shadeoff
        move.w  #19,d0
        bra     croutplus
        
      
crout   move.w  #0,d7
        trap    #3
        rts
croutplus
        move.w  #0,d7
        trap    #3
        move.w  #32,d0
        move.w  #0,d7
        trap    #3
        rts
Checker
        move.w  #0,d0
        move.w  #0,d3
        move.b  -1(a0,d3),d2
cloop   move.b  0(a0,d3),d1
        andi.w  #$FF,d1
        cmpi.w  #32,d1
        blt     positive
        cmpi.w  #128,d1
        blt     cback
        cmpi.w  #134,d1
        blt     positive
cback   addq.w  #1,d3
        cmp.w   d2,d3
        bne     cloop
        rts

positive        
        move.w  #1,d0
        bra     cback



        END
