mirror of
https://github.com/NishiOwO/VZEditor.git
synced 2025-04-22 00:54:40 +00:00
240 lines
3.1 KiB
NASM
240 lines
3.1 KiB
NASM
;****************************
|
||
; 'chktsr.asm'
|
||
;****************************
|
||
|
||
STDSEG equ TRUE
|
||
|
||
include std.inc
|
||
|
||
cseg
|
||
assume ds:code
|
||
|
||
;--- PSP definitions ---
|
||
|
||
org 2Ch
|
||
envseg label word
|
||
|
||
org 81h
|
||
cmdline label byte
|
||
|
||
;--- CHKTSR Main ---
|
||
|
||
org 100h
|
||
main proc
|
||
mov si,offset cmdline
|
||
call skipspc
|
||
jc error
|
||
call scanhexa
|
||
jc error
|
||
call skipspc
|
||
_if c
|
||
error:
|
||
mov dx,offset mg_title
|
||
msdos F_DSPSTR
|
||
mov al,0
|
||
jmp exit
|
||
_endif
|
||
mov bx,dx
|
||
shlm bx,2
|
||
ldseg es,0
|
||
mov bx,es:[bx+2]
|
||
mov es,bx
|
||
|
||
chk_env:
|
||
mov ax,es:envseg
|
||
tst ax
|
||
jz chk_psp
|
||
dec ax
|
||
mov es,ax
|
||
mov dx,es:[0001h]
|
||
cmp dx,bx
|
||
jne chk_psp
|
||
inc ax
|
||
mov es,ax
|
||
clr al
|
||
clr di
|
||
mov cx,-1
|
||
_repeat
|
||
repnz scasb
|
||
tstb es:[di]
|
||
_until z
|
||
inc di
|
||
cmp word ptr es:[di],0001h
|
||
jne chk_psp
|
||
inc di
|
||
inc di
|
||
push bx
|
||
call stristr
|
||
pop bx
|
||
jc found_tsr
|
||
|
||
chk_psp:
|
||
mov es,bx
|
||
mov di,offset cmdline
|
||
call stristr
|
||
mov al,0
|
||
_if c
|
||
found_tsr:
|
||
mov al,1
|
||
_endif
|
||
exit: msdos F_TERM
|
||
main endp
|
||
|
||
;--- Scan hexa ---
|
||
;-->
|
||
; SI : string ptr
|
||
;<--
|
||
; CY : error
|
||
; DX : hexadecimal value
|
||
|
||
scanhexa proc
|
||
clr dx
|
||
_repeat
|
||
lodsb
|
||
cmp al,SPC
|
||
_break be
|
||
call isdigit
|
||
jc schex1
|
||
call toupper
|
||
cmp al,'A'
|
||
jb schex_x
|
||
cmp al,'F'
|
||
ja schex_x
|
||
sub al,'A'-10-'0'
|
||
schex1: sub al,'0'
|
||
cbw
|
||
mov cl,4
|
||
shl dx,cl
|
||
add dx,ax
|
||
_until
|
||
tst dx
|
||
_if z
|
||
schex_x:stc
|
||
_endif
|
||
dec si
|
||
VZ_RET
|
||
scanhexa endp
|
||
|
||
;--- Scan substring2 in string1 (ignore case) ---
|
||
;-->
|
||
; DS:SI :substring2 ptr
|
||
; ES:DI :target string1 ptr
|
||
; (string terminater is 00h or 0Dh)
|
||
;<-- CY :found
|
||
|
||
stristr proc
|
||
mov dx,si
|
||
stri1: mov bx,di
|
||
stri2: lodsb
|
||
cmp al,CR
|
||
je stri_o
|
||
call toupper
|
||
mov ah,al
|
||
mov al,es:[di]
|
||
inc di
|
||
tst al
|
||
jz stri_x
|
||
cmp al,CR
|
||
jz stri_x
|
||
call toupper
|
||
cmp al,ah
|
||
je stri2
|
||
mov si,dx
|
||
mov di,bx
|
||
inc di
|
||
jmp stri1
|
||
stri_o: stc
|
||
stri_x: VZ_RET
|
||
stristr endp
|
||
|
||
;--- Is upper? ---
|
||
;<-- CY :'A'-'Z'
|
||
|
||
isupper proc
|
||
cmp al,'A'
|
||
jb notup
|
||
cmp al,'Z'
|
||
ja notup
|
||
stc
|
||
isupr9: VZ_RET
|
||
notup: clc
|
||
VZ_RET
|
||
isupper endp
|
||
|
||
;--- Is lower/alpha? ---
|
||
;<-- CY :'a'-'z'|'A'-'Z'
|
||
|
||
isalpha proc
|
||
call isupper
|
||
jc isal9
|
||
islower:
|
||
cmp al,'a'
|
||
jb notalp
|
||
cmp al,'z'
|
||
ja notalp
|
||
stc
|
||
VZ_RET
|
||
notalp: clc
|
||
isal9: VZ_RET
|
||
isalpha endp
|
||
|
||
;--- Is digit ? ---
|
||
;<-- CY :'0'-'9'
|
||
|
||
isdigit proc
|
||
cmp al,'0'
|
||
jb notdig
|
||
cmp al,'9'
|
||
ja notdig
|
||
stc
|
||
VZ_RET
|
||
notdig: clc
|
||
VZ_RET
|
||
isdigit endp
|
||
|
||
;--- Char to upper/lower case ---
|
||
;--> AL :char
|
||
;<-- CY :converted
|
||
|
||
toupper proc
|
||
call islower
|
||
_if c
|
||
sub al,'a'-'A'
|
||
stc
|
||
_endif
|
||
VZ_RET
|
||
toupper endp
|
||
|
||
;--- Skip SPC,TAB ---
|
||
;<--
|
||
; CY :end of line
|
||
; NC :next char
|
||
|
||
skipspc proc
|
||
lodsb
|
||
skipspc1:
|
||
cmp al,TAB
|
||
je skipspc
|
||
cmp al,SPC
|
||
je skipspc
|
||
skpspc8:dec si
|
||
VZ_RET
|
||
skipspc endp
|
||
|
||
;--- Messages ---
|
||
|
||
mg_title db "CHKTSR Version 1.00"
|
||
db " Copyright (C) 1990 by c.mos",CR,LF
|
||
db "Usage: chktsr <int#(hexa)> <search string>",CR,LF
|
||
db " ex: chktsr 21 vz",CR,LF
|
||
db " (if found, return errorlevel 1)",CR,LF
|
||
db '$'
|
||
|
||
endcs
|
||
end main
|
||
|
||
;****************************
|
||
; End of 'chktsr.asm'
|
||
; Copyright (C) 1990 by c.mos
|
||
;****************************
|
||
|