home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
assemblr
/
library
/
qlabel
/
qlabel.asm
next >
Wrap
Assembly Source File
|
1992-11-15
|
7KB
|
151 lines
;; QLABEL - gets, creates or changes volume label
;;
;; Usage:
;;
;; QLABEL [ENTER] displays current label
;;
;; QLABEL [ANY_NEWNAME] [ENTER] changes or creates label name
;;
;; Requires DOS v2.0 or better (no one uses 2 or less do they??????)
;;
;; This program can be assembled using the A86 or TASM assemblers
;;
;; Not tested with Masm, should work?
;;
;; This code is "PUBLIC DOMAIN"
;;
;; by William Cravener 11/14/92
;;
;-----------------------------------------------------------------------------
;;
code SEGMENT ; set up code and data section
ASSUME cs:code, ds:code, es:code, ss:code
ORG 100h ; COM programs begin here
main: jmp work_to_do ; skip over "DATA"
;;
;-----------------------------------------------------------------------------
;; DATA
;;
fcb_ext DB 0ffh ;extended FCB
DB 5 DUP (0) ;unused
fcb_attrib DB 8 ;volume attribute
fcb_drive DB 0 ;default drive
file_root DB 8 DUP ('?') ;find any name
file_ext DB 3 DUP ('?')
block_num DW 0 ;current block number
rec_size DW 0 ;record size
file_size DW 0 ;file size
DW 0 ;double word
file_date DW 0 ;file date stamp
file_time DW 0 ;file time stamp
DB 8 DUP (0) ;DOS work area
rec_num DB 0 ;current record number
random_rec DW 0 ;random record number
DW 0 ;double word
new_name DB 11 DUP (' ') ;storage for new name
explain DB 'Current Label: $' ;message
cr_lf DB 0dh, 0ah, '$' ;carriage return linefeed
;;
;-------------------------------------------------------------------------------
work_to_do:
mov si, 81h ; possible new label name
back: ; will be here to retrieve
lodsb ; get a character
cmp al, ' ' ; throw away spaces
je back
cmp al, 0dh ; if a carriage return user
ja transfer_new_name ; entered a new label name
jmp show_label_name ; whats to retrieve current label
transfer_new_name:
mov di, OFFSET new_name ; point to new label storage
get_next_char:
call uppercase ; be sure its uppercase
stosb ; store it
lodsb ; get another character
cmp al, 0dh ; end of new name?
jne get_next_char ; no get next character
jmp change_name ; got all - go change it
show_label_name: ; display current label
call do_cr_lf ; do a carriage linefeed pair
mov ah, 9
mov dx, OFFSET explain ; display message
int 21h
call get_current_label_name ; go get current label name
mov si, OFFSET file_root ; point to beginning of name
mov cx, 11 ; upto 11 characters
label_char:
lodsb ; get character
cmp al, '?' ; if its '?' then no label name
je name_end ; just leave
cmp al, ' ' ; if a space
je name_end ; its the end of name string
call print_char ; print out the character
loop label_char ; get all characters
name_end:
call do_cr_lf ; do one more carriage linefeed
jmp all_done ; and leave
change_name:
call get_current_label_name ; go get current label name
call delete_old_label_name ; delete the current label name
call write_new_label_name ; create the new label name
all_done:
mov ax, 4c00h ; finished
int 21h ; exit
;--------------------------------
get_current_label_name: ; subroutine gets label name
mov ah, 1ah
mov dx, OFFSET fcb_ext ; set dta address
int 21h
mov ah, 11h
mov dx, OFFSET fcb_ext ; find volume name
int 21h
ret
;--------------------------------
delete_old_label_name: ; subroutine deletes label name
mov ah, 13h
mov dx, OFFSET fcb_ext ; delete name
int 21h
ret
;--------------------------------
write_new_label_name: ; subroutine creates label name
mov si, OFFSET new_name ; points to new label name
mov di, OFFSET file_root ; points to fcb
mov cx, 11 ; maximum length
rep movsb ; store new name to fcb
mov ah, 16h
mov dx, OFFSET fcb_ext ; create new label name
int 21h
mov ah, 10h
mov dx, OFFSET fcb_ext ; update and close
int 21h
ret
;--------------------------------
print_char: ; Bios print character
mov ah, 0eh ; at current cursor
mov bh, 0 ; location
int 10h
ret
;--------------------------------
do_cr_lf: ; carriage return linefeed
mov ah, 9
mov dx, OFFSET cr_lf
int 21h
ret
;--------------------------------
uppercase: ; subroutine converts
cmp al,'a' ; to uppercase
jb isup ; if neccessary
cmp al,'z'
ja isup
sub al,20h
isup:
ret
;-------------------------------------------------------------------------------
code ENDS ; end of coding
END main