VZEditor/SRC/chktsr.asm
2025-04-02 07:52:59 +09:00

240 lines
3.1 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;****************************
; '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
;****************************