1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
page 80,132
;0
title CP/DOS DosSetFsInfo mapper
dosxxx segment byte public 'dos'
assume cs:dosxxx,ds:nothing,es:nothing,ss:nothing
;
; ************************************************************************* *
; *
; * MODULE: DosSetFsInfo
; *
; * FUNCTION: This module will delete the volume label on a specified
; * drive.
; *
; * CALLING SEQUENCE:
; *
; * PUSH WORD DriveNumber ; Drive Number
; * PUSH OTHER FSInfoLevel ; File system info required
; * PUSH@ OTHER FSInfoBuf ; File system info buffer
; * PUSH WORD FSInfoBufSize ; file system info buffer size
; * Call DosSetFsInfo
; *
; *
; * MODULES CALLED: DOS int 21H function 13H
; *
; *************************************************************************
public DosSetFsInfo
.sall
.xlist
include macros.inc
include error.inc
.list
str struc
old_bp dw ?
return dd ?
sbufsize dw ? ; info buffer size
sbuffoff dw ? ; info buffer offset
sbuffseg dw ? ; info buffer segment
slevel dw ? ; info level
sdrive dw ? ; drive number
str ends
;-----------------------------------------------
;--- Extended FCB, used to delete Volume Labels.
;-----------------------------------------------
Ext_FCB db 0FFh ;Indicates extended FCB
db 0,0,0,0,0 ;Reserved
FCB_Attr db 08 ;Attribute for vol label
FCBDrive db 0 ;Drive number
VLabel db "???????????" ;Match any vol name found
db 25 dup (0) ;Rest of the opened FCB
DosSetFsInfo proc far
Enter DosSetfsinfo ; push registers
mov ax,[bp].sdrive ; Get drive number
mov FCBDrive,al ; Place it in the extended FCB
;--------------------------
;-- FCB Delete old volume label
;--------------------------
mov ah,013h ; FCB Delete
push cs
pop ds
mov dx,offset Ext_FCB
int 021h ; Call DOS to delete volume label
;---------------------------------
;-- Handle_Create new Volume label
;---------------------------------
mov cx,08h ; Volume label attribute
mov ah,03ch ; Handle create new volume label
mov dx,[bp].sbuffoff
push [bp].sbuffseg
pop ds
int 021h ; Do it
jc retrn ; Oops, there was an error. Not surprised...
;--------------------------
;-- Close the Volume Label
;--------------------------
mov bx,ax ; Place handle in BX
mov ah,03eh ; Close the volume label
int 021h ; Do IT!
deleted:
sub ax,ax ; set good return code
retrn:
mexit ; pop registers
ret size str - 6 ; return
DosSetFsInfo endp
dosxxx ends
end
|