;	output (8*length)x8 dots image to the printer PC-PR etc.
;
;	April 1990, SHIMA
;
;	void	p_subnec( ulong width, HUGE_BUF* top, int length )
;
;	width : width by bytes in bit map buffer
;	top   : top address of bit map buffer to be output
;

PR_BUF_SIZE	equ	256	; This should be same as in p_out.c

name	p_subnec
P_SUBNEC_TEXT	segment	byte public 'CODE'
P_SUBNEC_TEXT	ends
DGROUP	group	_DATA,_BSS
	assume	cs:P_SUBNEC_TEXT,ds:DGROUP,ss:DGROUP
;	assume	cs:P_DUBNEC_TEXT,ds:DGROUP
_DATA	segment word public 'DATA'
d@	label	byte
d@w	label	word
_DATA	ends
_BSS	segment word public 'BSS'
b@	label	byte
b@w	label	word

_BSS	ends
P_SUBNEC_TEXT	segment	byte public 'CODE'

public	_p_subnec

_p_subnec	proc	far
	push	bp
	mov	bp,sp
	sub	sp,4
	push	si
	push	di

	mov	ch,80h
	mov	di, word ptr [bp+8]
	mov	si, word ptr [bp+6]	; di:si = offset
@4:
	mov	dx,word ptr [bp+12]	; dx:bx = ptr
	mov	bx,word ptr [bp+10]
	sub	bx,si
	jnc	@4S
	sub	dh, 10h
@4S:
	sub	dx,di
	mov	al, byte ptr [bp+14]	; vert_byte_unit;
	mov	byte ptr [bp-4],al	; c = vert_byte_unit
@8:
	mov	word ptr [bp-2],0	; prndata = 0
	mov	cl,1			; j = 1
@12:
	add	bx, si
	jnc	@12C
	add	dh, 10h
@12C:
	add	dx, di			; dx:bx = ptr_tmp + offset
	mov	es,dx			; es:bx = dx:bx
	test	ch,byte ptr es:[bx]	; [es:bx] & i ?
	je	@14
	or	byte ptr [bp-2],cl	; prndata |= j;
@14:
@11:
	shl	cl, 1
	jnz	@12			; j > 0 ?
@10:
	push	bx
	  mov	bx, offset _pr_buf
	  add	bx, word ptr _pr_buf_len
	  mov	ax, word ptr [bp-2]	; ax = prndata
	  mov	byte ptr ds:[bx], al
	  mov	bx, offset _pr_buf_len
	  inc	word ptr ds:[bx]
	  cmp	word ptr ds:[bx], PR_BUF_SIZE
	  jb	@10S
	  push	cx
	  push	dx
	    call  far ptr _pr_flush
	  pop	dx
	  pop	cx
@10S:
	pop	bx
@7:
	dec	byte ptr [bp-4]		; --c > 0 ?
	jnz	@8
@6:
@3:
	shr	ch, 1
	jnz	@4
@2:
@1:
	pop	di
	pop	si
	mov	sp,bp
	pop	bp
	ret	
_p_subnec	endp

P_SUBNEC_TEXT	ends
_DATA	segment word public 'DATA'
s@	label	byte
_DATA	ends
	extrn	_pr_buf_len:WORD
	extrn	_pr_buf:WORD
;P_SUBNEC_TEXT	segment	byte public 'CODE'
	extrn	_pr_flush:far
;P_SUBNEC_TEXT	ends
	end
