ÜÜ                   Ü
ßßß STEALTH GROUP WW Û Mail:   BOX 15, 125080 MOSCOW   ÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛ ÛßßÛ
ßÛÛ ßßßßßßßßßßßßßßßß Û ßßßßßßßßßßßßßßßßßß ß ßßßßÞßßß   ÚÄ¿Â ÂÚÄ´Â Â Ò Â¿Ú ÛÜÜÛ
 ÞÛ ÛßÜ Ûßß Üßß Üßß ÜÛÜ Üßß ÛßÛ   Ý Û ÜßÛ Û Üßß ÛÜÜ    ÃÂÙ³ ³ÀÄ¿ÃÄ´   ³À´ Ü  Û
  Û Û Û Ûß  Ûß  Û    Û  Ûß  Û Û   Û Û Û Û Û Û   Û      ÁÀÄÀÄÙÀÄÙÁ Á   Á Á ßßßß
  Û Þ Þ Þ   ÞÜÜ ÞÜÜ  Þ  ÞÜÜ ÞÜß    ßÛ ßÜÛ Þ ÞÜÜ ÞÜÜÜ   ÛÛÛÛ  WINTER ' 96  ÛÛÛÛ
  Þ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ   ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ

    ÛÛÛÛÛÛÛÛÛÛÛÛÛ SKYFLYER PRESENTS : ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ 
.model tiny;	(C) 1996 Skyflyer
.code	;Some shorted words:ln=len,bN(N-number)=bit N,tab=table
org 100h
begin:	nop
	nop
	jmp beg
nextmemseg:	dw 0
memseg:		dw 0
fileident:	dw 0
filelen:	dw 0
fileds:		dw 0
fileoffs:	dw 0
fntab:	db 13 dup(0)
fpcx:	db'.pcx'
scrseg:	dw 0
palofs:	dw 0
palseg:	dw 0
palsubr:db 0
palsubg:db 0
palsubb:db 0
scr2seg:dw 0
efofs:	dw 0
efadd:	dw 0
rndtab:	db 1,2,7
rnd:	push dx
	mov ax,2 ptr rndtab+1
	mov dl,1 ptr rndtab
	mov 2 ptr rndtab,ax
	add al,dl
	add al,ah
	rol al,1
	mov 1 ptr rndtab+2,al
	pop dx
	ret
rndinst:mov ah,2ch
	int 21h
	mov 2 ptr rndtab,dx
	ret
;<<<
pka:	dw 0,0
prposxy:dw 0
prcrlfx:db 0
prbmod:	db 0
prxlen:	db 80*2
prbxln:	db 80
prbyln:	db 25
prba:	dw 0
prbbxy:	dw 0
prbpag:	db 0
pcuratr: dw 0e4eh
prcrtab: db 0
prmsxy:	dw 100h ;begin position dh=y,dl=x
strxx:	db 0
strcur:	dw 0
strln:	dw 1
strtab:	db 80 dup(' ')
srchtb:	db 0,32 dup(0)
PRNHTN:	DW 1
PRNTAB: DB 8 DUP(' ')
pkmd:	dw 16,16*22, 80,80*22, 8,44
modeadddown:dw 0
modeaddpgdn:dw 0
prbcolor: db 7
prbtclr: db 7
prstx:	db 0
prstxln: db 5
pkmode:	db 0
pkmoden: db 3
scrxla:	db 160
scrxl:	db 80
scryl:	db 25
clsclr:	db 7
backclr:db 7
midscryl:db 22
;crntx: db 16
;crnty: db 22
;moustab:part:<x,y,xln,yln,keys(b0-left,b1-right,b2-mid,b4=0-wait for release
;key),scan code>
	;part1,part2,...,255(end of tab)
moustab:db 16,2,16,20,1,250
db 8,24,8,1,1,60, 16,24,8,1,1,61
db 0,1,40,11,17,75, 0,12,40,11,17,77;left,right
db 0,1,40,11,18,72, 0,12,40,11,18,80;up,down
db 0,1,40,11,20,73, 0,12,40,11,20,81;pgup,pgdown
db 40,1,40,11,17,73, 40,12,40,11,17,81;pgup,pgdown
db 48,24,8,1,1,65, 0,24,8,1,1,59
db 64,24,8,1,1,67, 32,24,8,1,1,63, 40,24,8,1,1,64, 72,24,8,1,1,1,255
mousf:	db 0
mousxy:	dw 0;h=row,l=col
buffadr:dw 0
filename:	db 'elm',0
fileofs:	dw 0
fileidentt:	dw 0
stacksize	dw 300h
wintab1:	db'ÉÍ»ºÈ¼'
pcxpalbeg:	dw 0
pcxpalbegs:	dw 0
pcxpalbegsi:	dw 0
pcxpalbegds:	dw 0
pcxpal:	
pcxpal1:push es
	xor ax,ax
	mov es,ax
	mov dx,es:[463h]
	add dx,6
	pop es
	in al,dx
	nop
	nop
	test al,8
;	jz pcxpal2
pcxpal3:in al,dx
	nop
	nop
	test al,8
;	jnz pcxpal3
pcxpal2:in al,dx
	nop
	nop
	test al,8
;	jz pcxpal2
	mov dx,3c8h
	mov ax,0
	out dx,al
	nop
	nop
	mov dx,3c9h
	mov cx,768
	mov si,2 ptr pcxpalbeg
	push ds
	mov ds,2 ptr pcxpalbegs
	lodsb
	mov bl,al
	cld
	cli
pcxpal4:lodsb
	cmp bl,12
	jnz pcxpal5
	shr al,1
	shr al,1
pcxpal5:out dx,al
	nop
	nop
	loop pcxpal4
	sti
	pop ds
	ret
pcxvga:	push ds
	mov si,2 ptr pka
	xor di,di
	mov ax,0a000h
	mov es,ax
	mov dx,0fa00h
	mov ds,2 ptr pka+2
	cld
pcxvga1:mov al,[si]
	mov cx,1
	cmp al,0c0h
	jbe pcxvga2
	mov cl,al
	and cl,3fh
	inc si
	mov al,[si+0]
pcxvga2:inc si
	sub dx,cx
	jz pcxvga4
	jc pcxvga3
	rep stosb
	jmp pcxvga1
pcxvga3:not dx
	inc dx
	sub cx,dx
	rep stosb
pcxvga4:mov ax,ds
	pop ds
	mov 2 ptr pcxpalbegds,ax
	mov 2 ptr pcxpalbegsi,si
	ret
PRNN:	DW 10
PRNZ:	DW 1
prnl:	mov ah,0 ;only al has num,2 zero,hex
	mov 1 ptr prnz,2
	mov 1 ptr prnn,16
	jmp short prnhb
PRNB:	MOV 1 PTR PRNN,2 ;binary print
	PUSH 2 PTR PRNZ
	MOV 1 PTR PRNZ,8
	CALL PRNHB
	POP 2 PTR PRNZ
	RET
PRND:	MOV 1 PTR PRNN,10 ;decimal print
	mov 1 ptr prnhz,1
	JMP SHORT PRNHB
prnhz:	mov 1 ptr prnz,4
PRNH:	MOV 1 PTR PRNN,16 ;hexadecimal print
PRNHB:	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	MOV CX,8
	LEA BX,PRNTAB
PRNH0:	MOV 1 PTR [BX],' '
	INC BX
	LOOP PRNH0
	MOV BX,0
PRNH1:	MOV DX,0
	DIV 2 PTR PRNN
	CMP DL,0Ah
	JB PRNH1A
	ADD DL,7
PRNH1A:	ADD DL,'0'
	MOV 1 PTR PRNTAB[BX],DL
	INC BX
	OR AX,AX
	JNZ PRNH1
	MOV 2 PTR PRNHTN,BX
	MOV CX,2 PTR PRNHTN
	LEA BX,PRNTAB
	ADD BX,CX
	DEC BX
	CMP CX,2 PTR PRNZ
	JNB PRNH2
	MOV DX,2 PTR PRNZ
	SUB DX,CX
PRNH3:	MOV AL,'0'
	CALL PRB
	DEC DL
	JNZ PRNH3
PRNH2:	MOV AL,1 PTR [BX]
	CALL PRB
	DEC BX
	LOOP PRNH2
	POP DX
	POP CX
	POP BX
	POP AX
	RET
PRCC:	DB '..'
PRC2:	PUSH DX
	MOV AL,1 PTR PRCC+1
	JMP SHORT PRC0
PRC1:	PUSH DX
	MOV AL,1 PTR PRCC
PRC0:	CALL PRB
	POP DX
	RET
prpos:	mov 2 ptr prposxy,dx;in dh,dl=row,col;set pos to print
	push dx
	mov al,1 ptr scrxl
	shl al,1
	mul dh
	mov dh,0
	shl dl,1
	add ax,dx
	mov 2 ptr prba,ax
	pop dx
	ret
;cx=loop,al=char. Print sequence of char
prbcloop: jcxz prbloop2
prbcloop1:call prbc
	loop prbcloop1
	ret
prbloop:jcxz prbloop2
prbloop1:call prb
	 loop prbloop1
prbloop2:ret
prsp:	mov al,' ' ;print space
prbc:	push bx ;al=ascii.print any char,color
	push es
	mov bx,0b800h
	mov es,bx
	mov bx,2 ptr prba
	mov es:[bx],al
	inc bx
	mov ah,1 ptr prbcolor
	mov es:[bx],ah
	inc bx
	mov 2 ptr prba,bx
prbcm11:pop es
	pop bx 
	ret
prb:	push bx ;al=ascii.print any char
	push es
	mov bx,0b800h
	mov es,bx
	mov bx,2 ptr prba
	mov es:[bx],al
	inc bx
	inc bx
	mov 2 ptr prba,bx
prbm11:	pop es
	pop bx 
	ret
;prba=scr adr; ret:ah=y,al=x
scrxy:	mov ax,2 ptr prba
	div 1 ptr scrxla
	shr ah,1
	xchg al,ah
	ret
prcrlf: call scrxy
	mov dh,ah
	mov dl,1 ptr prcrlfx
	cmp dh,24
	jae prcrlf1
	inc dh
prcrlf1:call prpos
	ret
prbtc:	mov si,di;ds:di=txt print byte-text with color
prbtc1:	mov al,[si]
	inc si
	cmp al,'$'
	jne prbtc1
prbtc2:	mov al,[si]
	mov 1 ptr prbcolor,al
	mov al,[di]
	inc di
	inc si
	cmp al,'$'
	je prbtc3
	call prbc
	jmp short prbtc2
prbtc3:	ret
prbtb:	mov dx,[di];ds:di=txt set pos and print
	call prpos
	add di,2
prbtb1:	mov al,[di]
	inc di
	cmp al,'$'
	je prbtb2
	cmp al,13
	jne prbtb3
	call prcrlf
	jmp short prbtb1
prbtb3:	call prb
	jmp short prbtb1
prbtb2:	ret
prbm0:	push ax
	MOV AH,2;PRINT BYTE,DL=BYTE
	INT 21h
	POP AX
	RET
prsm0:	MOV AH,9;DS:DX=String.PRINT STRING
	INT 21h
	RET
prsm1:	push 2 ptr prba
	push 2 ptr prbbxy
prsm11:	mov al,[si]
	call prb
	inc si
	dec cl
	jnz prsm11
	pop 2 ptr prbbxy
	pop 2 ptr prba
	ret
tx1:	db 'Keys:left,right,up,down,pgup,pgdw,home/end-change address on 1000$'
tx2:db '1Help   2Mode   3SetAdr         5Load   6Save   7Search         9SeeScr 10Quit  $'
 db 2,6 dup(30h),2,2,6 dup(30h),2,2,6 dup(30h),9 dup(2),2,6 dup(30h),2,2,6 dup (30h),2,2,6 dup(30h)
 db 9 dup(2),2,6 dup(30h),2,2,2,6 dup(30h)
tx3:	db 0,17h
db'Adr=      ELM (Edit Look Memory) 1.00 (C) 1996 by Skyflyer (not full version)$' 
tx4:	db 0,15h,'Search: hex ',13,'      ascii $'
tx5:	db 10,0,'Adr of buffer for file=$'
msgtab:	dw m0,m1,m2
m0:	db'Ok.',0
m1:	db'File ',3,' loaded.',0
m2:	db'File ',3,' saved.',0
dw 0
;>>>
inkey:	mov ah,1;cf=1-ok ret:ch=scan code
	int 16h
	clc
	jnz inkey1
	ret
inkey1:	mov ah,0
	int 16h
	mov ch,ah
	stc
	ret
waitkey:call inkey
	jnc waitkey
	ret
;dearchieving screen from ds:si to es:di
vga:	mov dx,0fa00h
	cld
vga1:	lodsb
	mov cx,1
	cmp al,0c0h
	jbe vga2
	mov cl,al
	and cl,3fh
	mov al,ds:[si]
	inc si
vga2:	sub dx,cx
	jz vga3
	jc vga3
	rep stosb
	jmp vga1
vga3:	not dx
	inc dx
	sub cx,dx
	rep stosb
vga4:	mov ax,ds
	ret
pal:
pal1:	push es
	xor ax,ax
	mov es,ax
	mov dx,es:[463h]
	add dx,6
	pop es
	in al,dx
	nop
	nop
	test al,8
;	jz pal2
pal3:	in al,dx
	nop
	nop
	test al,8
;	jnz pal3
pal2:	in al,dx
	nop
	nop
	test al,8
;	jz pal2
	mov dx,3c8h
	mov ax,0
	out dx,al
	nop
	nop
	mov dx,3c9h
	mov cx,256
	mov si,2 ptr palofs
	push ds
	pop es
	push ds
	mov ds,2 ptr palseg
	cld
	lodsb
	mov bl,al
	cli
pal4:	lodsb
	cmp bl,12
	jnz pal5
	shr al,1
	shr al,1
pal5:	sub al,es:1 ptr palsubr
	jnc pal6
	mov al,0
pal6:	out dx,al
	lodsb
	cmp bl,12
	jnz pal7
	shr al,1
	shr al,1
pal7:	sub al,es:1 ptr palsubg
	jnc pal71
	mov al,0
pal71:	out dx,al
	lodsb
	cmp bl,12
	jnz pal8
	shr al,1
	shr al,1
pal8:	sub al,es:1 ptr palsubb
	jnc pal81
	mov al,0
pal81:	out dx,al
	loop pal4
	sti
	pop ds
	ret
;copy psp's entry to fntab
fname:	mov si,offset 81h
	mov di,offset fntab
	push ds
	pop es
	mov cx,12
	cld
	mov ah,8
fname1:	mov al,[si]
	cmp al,' '
	jnz fname2
	inc si
	dec ah
	jnz fname1
fname2:	lodsb
	cmp al,21h
	jb fname3
	cmp al,7eh
	ja fname3
	cmp al,'.'
	jnz fname21
	or ch,1
fname21:stosb
	dec cl
	jnz fname2
fname3:	test ch,1
	jnz fname4
	mov si,offset fpcx
	mov cx,4
	rep movsb
fname4:	mov [di],1 ptr 0
	ret
fopen:	mov ax,3d00h
	mov dx,offset fntab
	int 21h
	mov cl,1
	jc eerrcl
	mov 2 ptr fileident,ax
	ret
flen:	mov bx,2 ptr fileident
	mov cx,0
	mov dx,cx
	mov ax,4202h
	int 21h
	mov cl,3
	jc eerrcl
	mov 2 ptr filelen,ax
	mov al,4
	or dx,dx
	jnz eerr
	ret
;in-fileoffs=offset in opened file
foffs:	mov dx,0
	mov cx,0;2 ptr fileoffs
	mov bx,2 ptr fileident
	mov ax,4200h
	int 21h
	mov cl,3
	jc eerrcl
	ret
;in-fileident,filelen
fload:	call foffs
fload1:	mov dx,0
	mov bx,2 ptr fileident
	mov cx,2 ptr filelen
	push ds
	mov ax,2 ptr fileds
	mov ds,ax
	mov ah,3fh
	int 21h
	pop ds
	mov cl,2
	jc eerrcl
	ret
eerrcl:	mov al,cl
;al=num of error
eerr:	push ax
	mov bx,offset e
	call eerrp
	pop ax
	mov bx,offset e0
	or al,al
	jz eerr2
eerr1:	inc bx
	cmp [bx-1],1 ptr '$'
	jnz eerr1
	dec al
	jnz eerr1
eerr2:	call eerrp
	jmp quit
eerrp:	mov dl,[bx]
	inc bx
	cmp dl,'$'
	jz erret
	mov ah,2
	int 21h
	jmp eerrp
erret:	ret
quit:	mov ax,4c00h
	int 21h
	jmp quit
;ax=num of mem
getmem:	mov ax,offset cend
	mov cl,4
	shr ax,cl
	inc ax
	mov bx,cs
	add ax,bx
	mov 2 ptr memseg,ax
	ret
beg:	push cs
	pop ds
	call rndinst
	mov bx,offset 80h 
	cmp [bx],1 ptr 1
	mov al,0
	jbe eerr
	call getmem
	mov ax,2 ptr memseg
	mov 2 ptr fileds,ax
	add ax,8
	mov 2 ptr scrseg,ax
	mov bx,offset 81h
	mov cl,20
mov dx,100h
;call prpos
mov ax,2 ptr fileds
;call prnhz
;jmp quit
	call fname
	mov bx,offset fntab
	mov cl,99
	call pr
	call fopen
	call flen
	mov ax,2 ptr filelen
	mov ax,0ffffh
	mov cl,4
	shr ax,cl
	inc ax
	mov ax,1000h
	add ax,2 ptr fileds
	mov 2 ptr scr2seg,8000h;ax
	call fload
	mov ax,13h
	int 10h
	mov 2 ptr palsubr,0ffffh
	mov 1 ptr palsubb,255
	call pal
	mov ax,0a000h
	mov es,2 ptr scr2seg
	mov di,0
	mov si,0
	push ds
	mov ds,2 ptr scrseg
	call vga
	pop ds
	mov 2 ptr palofs,si
	mov 2 ptr palseg,ax
	push ds
	mov ax,0a000h
	mov es,ax
	mov di,0
	mov si,0
	mov ds,2 ptr scr2seg
	mov cx,0fa00h
;	rep movsb
	pop ds
	mov al,1
b1:	mov 1 ptr palsubr,al
	mov 1 ptr palsubg,al
	mov 1 ptr palsubb,al
	push ax
	call pal
	mov cx,4
b2:	call palwait
	loop b2
	pop ax
	dec al
	cmp al,255
	jnz b1
b3:	mov ax,0a000h
	mov es,ax
	mov di,0
	mov cx,0fa00h
	mov al,0
	rep stosb
	call rnd
	and al,0feh
	mov 2 ptr efadd,ax
call efa
b4:	call inkey
	jnc b4
	cmp ch,28
	jz b3
	mov ax,3
	int 10h
	jmp quit
pr:	mov dl,[bx]
	inc bx
	cmp dl,'$'
	jz prret
	cmp dl,0
	jz prret
	mov ah,2
	int 21h
	dec cl
	jnz pr
prret:	ret
fill:	mov ax,2 ptr fileds
	push ds
	add ax,0
	mov ds,ax
	mov di,0
	mov cx,160*100
fill1:	mov [di],1 ptr 2
	inc di
	mov [di],1 ptr 3
	inc di
	loop fill1
	pop ds
ret
palwait:push es
	xor ax,ax
	mov es,ax
	mov dx,es:[463h]
	add dx,6
	pop es
	in al,dx
	nop
	nop
	test al,8
	jz palwait2
palwait3:in al,dx
	nop
	nop
	test al,8
	jnz palwait3
palwait2:in al,dx
	nop
	nop
	test al,8
	jz palwait2
	ret
efa:	mov cx,256
efa1:	push cx
	call ef
	pop cx
	loop efa1
	ret
ef:	mov cx,256
	mov si,2 ptr efofs
	mov di,si
	mov ax,0a000h
	mov es,ax
	mov bx,2 ptr efadd
	push ds
	mov ds,2 ptr scr2seg
ef1:	movsb
	add si,bx
	mov di,si
	loop ef1
	pop ds
	mov 2 ptr efofs,si
	call palwait
ret
ee:db'(C) 1996 by Skyflyer.$'
e:db'VgaPcxShow: $'
e0:db'Usage: vgapcxsh filename[.pcx] $'
e1:db'File opening error.$'
e2:db'File loading error.$'
e3:db'Determine file lenght error.$'
e4:db'File too big.$'
cend:	db 0
	END begin