	P386
	.model flat
	smart
	jumps

argv	equ	[ebp + 8]

	.data

	extrn	_ch_pos : dword
	extrn	_cm_pos : dword
	extrn	_Clip : dword
	extrn	_Scry : dword
	extrn	_RMS : word

	.code

;************ Text editor speed support routines ***********

; int cdecl llcounts ( char far *ptr, long size);

	public	_llcounts

_llcounts	proc
	push	ebp
	mov	ebp, esp
	push	esi
	push	edi
	push	ebx
	mov	esi, argv[0]
	mov	ecx, argv[4]
	xor	edi, edi
	mov	dx, 0a0dH
	mov	bh, 6
	cld
	and	ecx, ecx
	jz	llcend
llc:	lodsb
	cmp	al, dh
	je	lfinc
lfinc_:	cmp	al, dl
	je	crinc
crinc_:	cmp	al, bh
	je	picadd
picadd_:	loop	llc
llcend:	mov	eax, edi
	pop	ebx
	pop	edi
	pop	esi
	pop	ebp
	ret
lfinc:	inc	edi
	jmp	lfinc_
crinc:	inc	edi
	jmp	crinc_
picadd:	add	esi, 95
	sub	ecx, 95
	ja	picadd_
	jmp	llcend
	
	endp
	
;char huge *gotos(char huge *ptr, LP far *lp, int c, int pageline);

	.code

	public	_gotos

_gotos	proc
	push	ebp
	mov	ebp, esp
	push	edi
	push	esi
	push	ebx
	mov	esi, argv[0]
	mov	ebx, argv[4]
	mov	edi, argv[8]
	mov	ebp, argv[12]
	mov	edx, [ebx + 12]
	cld
gotos1:	lodsb
	dec	ecx
	cmp	al, 8
	je	xcode
	cmp	al, 10
	je	gcrlf
	cmp	al, 13
	je	gcrlf
	jmp	gotos1
gcrlf:	dec	edi
	jz	found
	inc	edx
	inc	dword ptr [ebx + 16]
	mov	al, [esi]
	sub	al, 2
	jz	autopage
autopage_:	sub	al, 3
	jz	hardpage
hardpage_:	cmp	edx, ebp
	jnc	newpage
newpage_:	dec	al
	jz	image
image_:	dec	al
	jz	noimage
noimage_:	jmp	gotos1
xcode:	mov	al, [esi]
	cmp	al, 'A' - 'A' + 32
	je	pitch
	cmp	al, 'B' - 'A' + 32
	je	pitch
	cmp	al, 'C' - 'A' + 32
	je	pitch
	cmp	al, 'J' - 'A' + 32
	je	pitch
	cmp	al, 'E' - 'A' + 32
	je	pitch
	cmp	al, 'N' - 'A' + 32
	je	pitch
	mov	[ebx + 32], al
	jmp	gotos1
pitch:	mov	[ebx + 28], al
	jmp	gotos1
autopage:	mov	edx, 99999999
	dec	ecx
	inc	esi
	mov	al, [esi]
	sub	al, 2
	jmp	autopage_
hardpage:	mov	edx, 99999999
	dec	ecx
	inc	esi
	mov	al, [esi]
	sub	al, 5
	jmp	hardpage_
newpage:	xor	edx, edx
	inc	dword ptr [ebx + 8]
	jmp	newpage_
image:	mov	dword ptr [ebx + 16], 0
	mov	[ebx + 20], esi
	add	esi, 96
	sub	ecx, 96
	mov	al, [esi]
	sub	al, 6
	jmp	image_
noimage:	add	esi, 96
	sub	ecx, 96
	jmp	noimage_
found:	mov	[ebx + 12], edx
	mov	eax, esi
	pop	ebx
	pop	esi
	pop	edi
	pop	ebp
	ret
_gotos	endp

;***************************************

; void remap(int sr, char far *s, int tr, char far *t);
	
	public	_remap

	.code

_remap	proc
	push	ebp
	mov	ebp, esp
	push	ebx
	push	esi
	push	edi

	mov	eax, argv[0]
	mov	esi, argv[4]
	mov	edx, argv[8]
	mov	edi, argv[12]
	
	cmp	eax, edx
	jc	trgt
	
	mov	ecx, eax
	mov	ebx, eax
	shr	ebx, 1
	mov	ax, 8080h
remap1:	sub	ebx, edx
	jnc	gt1
	test	ah, [esi]
	jz	nb1
	or	[edi], al
nb1:	ror	al, 1
	adc	edi, 0
	add	ebx, argv[0]
gt1:	ror	ah, 1
	adc	esi, 0
	loop	remap1
	
	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
	
trgt:	mov	ecx, edx
	mov	ebx, edx
	dec	ebx
	mov	argv[8], ebx
	shr	ebx, 1
	dec	eax
	mov	dx, 8080h
remap2:	test	dh, [esi]
	jz	nb2
	or	[edi], dl
nb2:	sub	ebx, eax
	jnc	gt2
	ror	dh, 1
	adc	esi, 0
	add	ebx, argv[8]
gt2:	ror	dl, 1
	adc	edi, 0
	loop	remap2

	pop	edi
	pop	esi
	pop	ebx
	pop	ebp
	ret
	endp
	
;***************************************

	public	_sr_6

;void  sr_6(char far *s, int n);

_sr_6	proc
	push	ebp
	mov	ebp, esp
	mov	ecx, argv[4]
	and	ecx, ecx
	jz	sr62
	push	edi
	push	ebx
	mov	edi, argv[0]
	js	sleft
	mov	dh, [edi + 0]
	mov	dl, [edi + 1]
	mov	bh, [edi + 2]
	mov	bl, [edi + 3]
	mov	ah, [edi + 4]
	mov	al, [edi + 5]
sr61:	shr	dx, 1
	rcr	bx, 1
	rcr	ax, 1
	loop	sr61
	mov	[edi + 0], dh
	mov	[edi + 1], dl
	mov	[edi + 2], bh
	mov	[edi + 3], bl
	mov	[edi + 4], ah
	mov	[edi + 5], al
	pop	ebx
	pop	edi
sr62:	pop	ebp
	ret

sleft:	add	edi, 5
	mov	eax, edi
	neg	ecx
sl61:	clc
	 rept	6
	rcl	byte ptr [edi], 1
	dec	edi
	 endm
	mov	edi, eax
	loop	sl61
	pop	ebx
	pop	edi
	pop	ebp
	ret
	endp

	public	_or_6

;void  or_6(char far *t, char far *s);

_or_6	proc
	push	ebp
	mov	ebp, esp
	mov	eax, argv[0]
	mov	edx, argv[4]
	 rept	6
	mov	cl, [edx]
	inc	edx
	or	[eax], cl
	inc	eax
	 endm
	pop	ebp
	ret
	endp

;**************************************

	public	_c5_img

_c5_img	proc
	mov	ecx, _cm_pos
	mov	cl, [ecx]
	cmp	cl, byte ptr _Clip
	jne	qnoc5prt
	push	ebp
	mov	ebp, esp
	push	es
	push	esi
	push	edi
	mov	esi, argv[0]
	mov	edx, argv[4]
	mov	esi, eax
	mov	ecx, _Scry
	mov	edi, _ch_pos
	shl	ax, 1
	sbb	eax, eax
	mov	es, _RMS

	 rept	8
	mov	al, [esi]
	add	esi, edx
	xor	es:[edi], al
	add	edi, ecx
	 endm

	pop	edi
	pop	esi
	pop	es
	pop	ebp
qnoc5prt:	ret
	endp

	end