summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/SETFSINF.ASM
blob: fb45a26f1ff3135b5e06dcada16526135e6d29fe (plain) (blame)
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