mirror of
https://github.com/NishiOwO/VZEditor.git
synced 2025-04-22 00:54:40 +00:00
504 lines
6.9 KiB
NASM
504 lines
6.9 KiB
NASM
;****************************
|
|
; 'xscr.asm'
|
|
;****************************
|
|
|
|
include vz.inc
|
|
|
|
IFNDEF NOXSCR
|
|
|
|
;--- Equations ---
|
|
|
|
grafflag equ 0600h+008Ah
|
|
TEXTTOP equ 2
|
|
CONTMPEND equ 0100h
|
|
MAXLINELEN equ 512
|
|
|
|
;--- External symbols ---
|
|
|
|
wseg
|
|
extrn cmdln :byte
|
|
extrn hardware :byte
|
|
extrn silent :byte
|
|
extrn invz :byte
|
|
|
|
extrn conbufsz :word
|
|
extrn conseg :word
|
|
extrn dspsw :word
|
|
extrn loseg :word
|
|
extrn nm_confile :word
|
|
extrn ntab :word
|
|
extrn syssw :word
|
|
extrn w_act :word
|
|
extrn w_busy :word
|
|
extrn w_free :word
|
|
extrn save_ds :word
|
|
endws
|
|
|
|
extrn addeof1 :near
|
|
extrn ems_map :near
|
|
extrn ems_restore :near
|
|
extrn ems_save :near
|
|
extrn iniopn2 :near
|
|
extrn iniscr :near
|
|
extrn initlnumb :near
|
|
extrn isalpha :near
|
|
extrn istop :near
|
|
extrn memcopy :near
|
|
extrn ofs2seg :near
|
|
extrn prefld :near
|
|
extrn ptradj2 :near
|
|
; extrn resetgbank :near
|
|
extrn resetint :near
|
|
extrn setabsp :near
|
|
; extrn setgbank :near
|
|
extrn setint :near
|
|
extrn setnum :near
|
|
extrn sgmove2 :near
|
|
extrn strcpy :near
|
|
extrn toplin :near
|
|
extrn txtmov :near
|
|
extrn wndopn :near
|
|
extrn allocfar :near
|
|
|
|
;--- Local work ---
|
|
|
|
wseg
|
|
prechar db 0
|
|
GDATA skipescf, db, 0
|
|
putp dw 0
|
|
puttop dw 0
|
|
conend dw 0
|
|
conmax dw 0
|
|
concp dw 0
|
|
conwy db 0
|
|
xpause db 0
|
|
tretp0 dd 0
|
|
endws
|
|
|
|
bseg
|
|
vct29 dd 0
|
|
conshift dw 0
|
|
endbs
|
|
|
|
iseg
|
|
assume ds:cgroup
|
|
|
|
dummy label byte
|
|
|
|
;--- Init console file ---
|
|
|
|
public initcon
|
|
initcon proc
|
|
mov conend,TEXTTOP
|
|
mov ax,conbufsz
|
|
tst ax
|
|
_ifn z
|
|
and ax,not 1
|
|
mov conmax,ax
|
|
call allocfar
|
|
mov conseg,ax
|
|
mov si,offset cgroup:cmdln
|
|
lods cs:dummy
|
|
cbw
|
|
add si,ax
|
|
inc si
|
|
mov puttop,si
|
|
mov putp,si
|
|
_endif
|
|
VZ_RET
|
|
initcon endp
|
|
|
|
endis
|
|
|
|
cseg
|
|
|
|
;--- Open console file ---
|
|
|
|
public opencon
|
|
opencon proc
|
|
tstw conbufsz
|
|
_ifn z
|
|
mov bp,w_free
|
|
call wndopn
|
|
mov w_act,NULL
|
|
lea di,[bp].path
|
|
mov [bp].namep,di
|
|
mov [bp].labelp,di
|
|
mov si,offset cgroup:nm_confile
|
|
; movseg es,ss
|
|
call strcpy
|
|
; movseg es,cs
|
|
mov [bp].tchf,TCH_RO
|
|
call initlnumb
|
|
mov al,byte ptr ntab
|
|
mov [bp].tabr,al
|
|
mov ax,conseg
|
|
mov [bp].tends,ax
|
|
mov dx,ax
|
|
call ems_map
|
|
mov ds,ax
|
|
mov [bp].ttops,ax
|
|
mov ax,ss:conmax
|
|
call iniopn2
|
|
call iniscr
|
|
ldl ss:tretp0
|
|
stl [bp].tretp
|
|
mov si,ss:conend
|
|
tst si
|
|
_ifn z
|
|
call addeof1
|
|
_endif
|
|
movseg ds,ss
|
|
_endif
|
|
VZ_RET
|
|
opencon endp
|
|
|
|
;--- Pre/Post DOS ---
|
|
|
|
preconfile proc
|
|
tstw conend
|
|
_if z
|
|
push bp
|
|
mov bp,w_busy
|
|
mov ax,[bp].tcp
|
|
mov concp,ax
|
|
mov al,[bp].wy
|
|
mov conwy,al
|
|
mov ax,[bp].tend
|
|
dec ax
|
|
mov conend,ax
|
|
call setabsp
|
|
stl [bp].tretp
|
|
stl tretp0
|
|
clr ax
|
|
mov cs:conshift,ax
|
|
mov xpause,al ; ##152.17
|
|
pop bp
|
|
_endif
|
|
VZ_RET
|
|
preconfile endp
|
|
|
|
public postconfile
|
|
postconfile proc
|
|
tstw conbufsz
|
|
_ifn z
|
|
test syssw,SW_CON
|
|
_ifn z
|
|
tstw conend
|
|
jnz pstcon1
|
|
_endif
|
|
_endif
|
|
VZ_RET
|
|
pstcon1:
|
|
mov di,putp
|
|
call flushcontmp
|
|
mov putp,di
|
|
pushm <bp,ds>
|
|
mov ds,loseg
|
|
mov putp,di
|
|
movseg ds,ss
|
|
mov bp,w_busy
|
|
clr di
|
|
xchg di,conend
|
|
mov ax,conseg
|
|
call ems_map
|
|
mov ds,ax
|
|
mov si,[bp].ttop
|
|
mov ax,CRLF
|
|
cmp [si-2],ax
|
|
_ifn e
|
|
mov [si-2],ax
|
|
; mov cs:conshift,-1
|
|
mov di,si
|
|
_endif
|
|
mov byte ptr [di],LF
|
|
inc di
|
|
mov [bp].tend,di
|
|
mov al,ss:conwy
|
|
mov si,ss:concp
|
|
tst si
|
|
_if z
|
|
mov si,di
|
|
dec si
|
|
mov cl,[bp].tw_sy
|
|
clr ch
|
|
_repeat
|
|
call istop
|
|
_break e
|
|
push cx
|
|
call prefld
|
|
pop cx
|
|
_loop
|
|
clr al
|
|
_endif
|
|
mov [bp].wy,al
|
|
mov [bp].wys,al
|
|
mov [bp].tcp,si
|
|
call toplin
|
|
mov [bp].tnow,si
|
|
mov [bp].bhom,si
|
|
push si
|
|
mov ax,di
|
|
mov si,cs:conshift
|
|
mov di,TEXTTOP
|
|
tst si
|
|
_ifn z
|
|
cmp si,-1
|
|
_if e
|
|
mov si,ax
|
|
_else
|
|
add si,di
|
|
_endif
|
|
call ptradj2
|
|
_endif
|
|
mov ax,[bp].ttop
|
|
pop cx
|
|
call setnum
|
|
inc dx
|
|
mov [bp].lnumb,dx
|
|
popm <ds,bp>
|
|
VZ_RET
|
|
postconfile endp
|
|
|
|
endcs
|
|
|
|
bseg
|
|
|
|
;--- INT29h handler ---
|
|
|
|
int29in proc
|
|
cld
|
|
sti
|
|
push ds
|
|
pushm <ax,di,es>
|
|
mov ds,cs:save_ds
|
|
movseg es,cs
|
|
call putcontmp
|
|
popm <es,di,ax>
|
|
test silent,2
|
|
jnz xscr9
|
|
cli
|
|
cmp al,'\'
|
|
je slash1
|
|
xscr8:
|
|
mov prechar,al
|
|
pop ds
|
|
jmp cs:vct29
|
|
|
|
slash1:
|
|
test dspsw,DSP_BSLASH
|
|
jz xscr8
|
|
test hardware,IDN_PC98
|
|
jnz xscr8
|
|
tstb prechar
|
|
js xscr8
|
|
tstb skipescf
|
|
jnz xscr8
|
|
mov prechar,al
|
|
pushm <ax,es>
|
|
clr ax
|
|
mov es,ax
|
|
mov byte ptr es:[grafflag],0
|
|
mov al,VZ_BACKSLASH
|
|
pushf
|
|
call cs:vct29
|
|
mov byte ptr es:[grafflag],1
|
|
popm <es,ax>
|
|
xscr9: pop ds
|
|
iret
|
|
int29in endp
|
|
|
|
;--- Put char to console tmp buffer ---
|
|
;--> AL :output char
|
|
|
|
putcontmp proc
|
|
tstb skipescf
|
|
_ifn z
|
|
cmp prechar,ESCP ; ##152.17
|
|
_if e
|
|
cmp al,'0'
|
|
je pausectrl
|
|
cmp al,'1'
|
|
je pausectrl
|
|
_endif
|
|
call isalpha
|
|
jc skipesc9
|
|
VZ_RET
|
|
pausectrl:
|
|
xor al,'1'
|
|
mov xpause,al
|
|
skipesc9:
|
|
mov skipescf,FALSE
|
|
VZ_RET
|
|
_endif
|
|
cmp al,ESCP
|
|
jne puttmp2
|
|
test syssw,SW_SKIPESC
|
|
jz puttmp2
|
|
mov skipescf,TRUE
|
|
VZ_RET
|
|
puttmp2:
|
|
tst al
|
|
jz puttmp9
|
|
cmp al,CR
|
|
je puttmp9
|
|
tstb xpause
|
|
jnz puttmp9
|
|
|
|
mov di,putp
|
|
cmp al,BS
|
|
_if e
|
|
cmp di,puttop
|
|
je puttmp9
|
|
dec di
|
|
jmps puttmp8
|
|
_endif
|
|
cmp al,LF
|
|
_if e
|
|
mov ax,CRLF
|
|
stosw
|
|
_else
|
|
cmp prechar,CR
|
|
_if e
|
|
mov di,puttop
|
|
_endif
|
|
stosb
|
|
cmp di,CONTMPEND
|
|
jb puttmp8
|
|
_endif
|
|
pushm <bx,cx,dx,si>
|
|
tstb cs:invz
|
|
_ifn z
|
|
cmp di,CONTMPEND
|
|
jb puttmp7
|
|
_else
|
|
call ems_save
|
|
call flushcontmp
|
|
call ems_restore
|
|
_endif
|
|
mov di,puttop
|
|
puttmp7:popm <si,dx,cx,bx>
|
|
puttmp8:mov putp,di
|
|
puttmp9:VZ_RET
|
|
putcontmp endp
|
|
|
|
;--- Flush console tmp buffer ---
|
|
;<--> DI :putp
|
|
|
|
flushcontmp proc
|
|
push es
|
|
push di
|
|
mov ax,conseg
|
|
call ems_map
|
|
mov es,ax
|
|
mov cx,di
|
|
sub cx,puttop
|
|
jz flcon9
|
|
mov concp,0
|
|
mov di,conend
|
|
mov ax,conmax
|
|
sub ax,di
|
|
cmp ax,cx
|
|
_if be
|
|
push ds
|
|
movseg ds,es
|
|
push di
|
|
shr di,1
|
|
shr di,1
|
|
mov cx,MAXLINELEN
|
|
mov al,LF
|
|
repne scasb
|
|
mov si,di
|
|
mov di,TEXTTOP
|
|
mov ax,si
|
|
sub ax,di
|
|
add ax,cs:conshift
|
|
_if c
|
|
mov ax,-1
|
|
_endif
|
|
mov cs:conshift,ax
|
|
pop cx
|
|
sub cx,si
|
|
call memcopy
|
|
pop ds
|
|
_endif
|
|
pop cx
|
|
mov si,puttop
|
|
push si
|
|
sub cx,si
|
|
_ifn cxz
|
|
push ds
|
|
movseg ds,cs
|
|
rep movsb
|
|
pop ds
|
|
mov conend,di
|
|
_endif
|
|
flcon9: pop di
|
|
pop es
|
|
VZ_RET
|
|
flushcontmp endp
|
|
|
|
endbs
|
|
|
|
eseg
|
|
|
|
;--- Copy ptrs to loader ---
|
|
|
|
public copyxptrs
|
|
copyxptrs proc
|
|
push es
|
|
mov es,loseg
|
|
mov ax,es:putp
|
|
mov putp,ax
|
|
mov ax,es:conend
|
|
mov conend,ax
|
|
pop es
|
|
VZ_RET
|
|
copyxptrs endp
|
|
|
|
;--- Set/reset INT29h ---
|
|
|
|
setint29 proc
|
|
mov bx,offset cgroup:vct29
|
|
mov di,29h*4
|
|
mov ax,offset cgroup:int29in
|
|
call setint
|
|
VZ_RET
|
|
setint29 endp
|
|
|
|
public resetint29
|
|
resetint29 proc
|
|
mov bx,offset cgroup:vct29
|
|
mov di,29h*4
|
|
call resetint
|
|
VZ_RET
|
|
resetint29 endp
|
|
|
|
endes
|
|
|
|
cseg
|
|
|
|
;--- Check INT29h ---
|
|
|
|
public chkint29
|
|
chkint29 proc
|
|
tstw conbufsz
|
|
jz chkcon9
|
|
test syssw,SW_CON
|
|
jz chkcon1
|
|
call preconfile
|
|
call setint29
|
|
jmps chkcon9
|
|
chkcon1:call resetint29
|
|
chkcon9:VZ_RET
|
|
chkint29 endp
|
|
|
|
endcs
|
|
ENDIF
|
|
end
|
|
|
|
;****************************
|
|
; End of 'xscr.asm'
|
|
; Copyright (C) 1989 by c.mos
|
|
;****************************
|