mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.1 KiB
124 lines
2.1 KiB
/* label.c 67/10/2012 dwg - */
|
|
|
|
#include "stdio.h"
|
|
#include "cpmbios.h"
|
|
#include "bioscall.h"
|
|
#include "cpmbdos.h"
|
|
#include "bdoscall.h"
|
|
#include "metadata.h"
|
|
#include "banner.h"
|
|
|
|
struct FCB * pPRIFCB;
|
|
struct FCB * pSECFCB;
|
|
struct DPH * pDPH;
|
|
struct DPB * pDPB;
|
|
|
|
testdrive(drive)
|
|
int drive;
|
|
{
|
|
ireghl = pSELDSK;
|
|
iregbc = drive;
|
|
bioscall();
|
|
pDPH = ireghl;
|
|
pDPB = pDPH->dpb;
|
|
if(0 == pDPB->off) {
|
|
printf("Sorry Drive %c: has no prefix area and cannot be labeled",
|
|
drive+'A');
|
|
exit(1);
|
|
}
|
|
|
|
}
|
|
|
|
interactive(drive)
|
|
int drive;
|
|
{
|
|
int i;
|
|
|
|
struct {
|
|
char size;
|
|
char len;
|
|
char data[16];
|
|
} rdcons;
|
|
|
|
testdrive(drive);
|
|
ireghl = pGETLU;
|
|
iregbc = drive;
|
|
bioscall();
|
|
if(1 == irega) {
|
|
printf("interactive(%d) says drive %c: can't have label",drive,drive);
|
|
printf("%c",7);
|
|
exit(1);
|
|
|
|
}
|
|
rdsector(drive,0,11,&metadata,0);
|
|
printf("Old label = ");
|
|
for(i=0;i<16;i++) {
|
|
printf("%c",metadata.label[i]);
|
|
}
|
|
|
|
printf("\nNew label = ");
|
|
rdcons.size=16;
|
|
rdcons.len =0;
|
|
dregbc = RDCONBUF;
|
|
dregde = &rdcons;
|
|
bdoscall();
|
|
|
|
if(0 < rdcons.len) {
|
|
memset(metadata.label,' ',16);
|
|
memcpy(metadata.label,rdcons.data,rdcons.len);
|
|
wrsector(drive,0,11,&metadata,0);
|
|
}
|
|
|
|
}
|
|
|
|
noninteractive(drive,label)
|
|
int drive;
|
|
char * label;
|
|
{
|
|
int i;
|
|
|
|
testdrive(drive);
|
|
|
|
rdsector(drive,0,11,&metadata,0);
|
|
memset(metadata.label,' ',16);
|
|
for(i=0;i<strlen(label);i++) {
|
|
metadata.label[i] = label[i];
|
|
}
|
|
wrsector(drive,0,11,&metadata,0);
|
|
}
|
|
|
|
main(argc,argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
int i;
|
|
int drive;
|
|
char szDrive[3];
|
|
|
|
sbanner("LABEL.COM");
|
|
|
|
pPRIFCB = 0x5c;
|
|
|
|
switch(argc) {
|
|
case 1:
|
|
dregbc = RETCURRDISK;
|
|
bdoscall();
|
|
drive = drega;
|
|
interactive(drive);
|
|
break;
|
|
case 2:
|
|
if(2 == strlen(argv[1])) {
|
|
strcpy(szDrive,argv[1]);
|
|
if(':' == szDrive[1]) {
|
|
interactive(pPRIFCB->drive-1);
|
|
exit(0);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
noninteractive(pPRIFCB->drive-1,0x85);
|
|
break;
|
|
}
|
|
exit(0);
|
|
}
|
|
|