#include #include #include #include void del_vol_name(char file_name[]) { struct SREGS s; struct xfcb file_fcb; union REGS r; segread(&s); r.h.ah = 0x29; /* parse fcb */ r.h.al = 0; /* don't do anything but parse */ r.x.si = (unsigned) file_name; /* pointer to text string */ r.x.di = (unsigned) &file_fcb.xfcb_fcb; /* pointer to fcb */ s.es = s.ds; intdosx(&r, &r, &s); file_fcb.xfcb_flag = 0xff; file_fcb.xfcb_attr = FA_LABEL; r.h.ah = 0x13; /* delete fcb */ r.x.dx = (unsigned) &file_fcb; /* pointer to unopened fcb */ intdos(&r, &r); } void set_vol(char label[]) { struct ffblk finfo; int findok, fp; findok = findfirst("\\*.*", &finfo, FA_LABEL); if (findok != -1) { if ((finfo.ff_attrib & FA_LABEL) > 0) del_vol_name(finfo.ff_name); } fp = _creat(label, FA_LABEL); close(fp); printf("\nVolume label set to \"%s\"\n", label); } void main(int argc, char *argv[]) { if (argc < 2) printf("\nUSAGE: VLabel new_label\n\n NOTE: Only changes default drive!\n"); else set_vol(argv[1]); }