📄 minito.c
字号:
else printf("%d>",partitionTable[i]->hardDrive);
goto skip;
}
else printf(" ");
if(partitionTable[i]->logicDrive==0)
printf(" *");
else printf(" ");
skip : */
if(partitionTable[i]->hardDrive==-127 || partitionTable[i]->hardDrive==-126)
printf(" ");
else printf("%2d:%-2d ",partitionTable[i]->hardDrive,partitionTable[i]->number);
if(partitionTable[i]->letterNumber)
printf("= %c: ",partitionTable[i]->letter/*,partitionTable[i]->letterNumber*/);
else printf(" ");
if(partitionTable[i]->hardDrive==-127 || partitionTable[i]->hardDrive==-126)
printf("FLOPPY ");
else if(partitionTable[i]->hardDrive>0)
printf((partitionTable[i]->logicDrive ? "LOGICAL " : "PRIMARY "));
if(partitionTable[i]->hardDrive==-127 || partitionTable[i]->hardDrive==-126)
printf("%-11s ","");
else printf("%-3s %-4s %02X ",
(partitionTable[i]->active==0x80 ? "YES" : "NO"),
(hidden ? "YES" : "NO"),
partitionTable[i]->ID);
printf("%-12s %-11s %-7lu ",
FS,
partitionTable[i]->label,
MB);
/*printf((partitionTable[i]->active==0x80 ? "YES" : "NO "));
printf((hidden ? "YES" : "NO "));
printf("%2d ",partitionTable[i]->ID);
printf("%-12s ",FS);
printf("%-11s ",partitionTable[i]->label);
/*printf("%c %c %02X %-12s %-11s %-7lu ",
(partitionTable[i]->active==0x80 ? '*' : ' '),
(hidden ? '*' : ' '),
partitionTable[i]->ID,
FS,
partitionTable[i]->label,
MB); */
if(partitionTable[i]->letter)
{
fatTRUE=0;
for(l=0;fat[l];l++)
{
if(partitionTable[i]->ID==fat[l])
{
fatTRUE=1;
break;
}
}
if(fatTRUE)
{
fatTRUE=0;
if(!partitionTable[i]->error) /*printf("%-7s","UNREADY"); */
/*else*/ printf("%-7lu",partitionTable[i]->freeSpaceKB/1024UL);
}
}
/* printf("%7lu",MB); */
printf("\n");
hidden=0;
if(index!=ALL_OR_THIS_TYPE) break;
}
printf("\n");
}
void putInDOSletter(Pinfo *part[])
{
int i,j,k=1,l,m;
char logicDrive=0;
unsigned char A=65;
unsigned char C=67;
unsigned char dos[]={0x0C,0x0B,0x06,0x04,0x01,0x0E,0x00};
int hardDrive=1;
char foundPrimary=0;
for(i=0,m=0;part[i] && i<2;i++)
{
if(part[i]->hardDrive==-127 || part[i]->hardDrive==-126)
{
part[i]->letterNumber=k++;
part[i]->letter=A++;
m++;
}
}
for(l=m;part[l];l++)
{
if(part[l]->logicDrive) continue;
for(j=0;dos[j];j++)
if(part[l]->ID==dos[j]) break;
if(dos[j]==0) continue;
if((part[l]->hardDrive==hardDrive && !foundPrimary) ||
part[l]->hardDrive!=hardDrive)
{
foundPrimary=1;
hardDrive=part[l]->hardDrive;
/*for(j=0;dos[j];j++)
if(part[l]->ID==dos[j])
{ */
part[l]->letterNumber=k++;
part[l]->letter=C++;
/* } */
}
}
for(l=m;part[l];l++)
{
if(part[l]->logicDrive==0) continue;
for(j=0;dos[j];j++)
if(part[l]->ID==dos[j])
{
part[l]->letterNumber=k++;
part[l]->letter=C++;
}
}
nextDOSletter=C;
nextLetterNumber=k;
}
void putInExtraLetter(Pinfo *partitionTable[], char extraMode)
{
int i;
for(i=0;partitionTable[i];i++)
if(((extraMode==NTFSPRO || extraMode==IFS) && (partitionTable[i]->ID==0x07 || partitionTable[i]->ID==0x17)) ||
(extraMode==IFS && (partitionTable[i]->ID==0x83 || (!partitionTable[i]->letter && !partitionTable[i]->logicDrive) || partitionTable[i]->ID & 0x10)))
{
partitionTable[i]->letterNumber=nextLetterNumber++;
partitionTable[i]->letter=nextDOSletter++;
}
}
int getPartitionItem(int drive,
char partition,
Pinfo *partitionTable[],
int *index)
{
int i=0;
*index=INVALID_INDEX;
if(drive!=NULL)
{
/* while(partitionTable[i]->hardDrive!=drive)
{
if(partitionTable[i]==NULL)
{
printf("Not found drive %d!\n",drive);
return -1;
}
i++;
} */
while(1)
{
if(partitionTable[i]==NULL)
{
printf("No drive %d\n",drive);
return -1;
}
if(partitionTable[i]->hardDrive==drive)
{
/*
printf("partitionTable[i]->hardDrive=%d,drive=%d\n",partitionTable[i]->hardDrive,drive);
printf("partitionTable[i]->hardDrive=%u,drive=%u\n",partitionTable[i]->hardDrive,drive);
*/
break;
}
i++;
}
/*
while(partitionTable[i]->number!=partition)
{
if(partitionTable[i]->hardDrive>drive || partitionTable[i]==NULL)
{
printf("Not found partition %d!\n",partition);
return -1;
}
i++;
} */
while(1)
{
if(partitionTable[i]==NULL || partitionTable[i]->hardDrive>drive)
{
printf("No drive %d : partition %d\n",partition);
return -1;
}
if(partitionTable[i]->number==partition)
{
/*
printf("partitionTable[i]->number=%d,partition=%d\n",partitionTable[i]->number,partition);
printf("partitionTable[i]->number=%u,partition=%u\n",partitionTable[i]->number,partition);
*/
break;
}
i++;
}
}
else
{
char upper;
if(partition<65 || (partition>90 && partition<97) || partition>122)
{
printf("No %c:\n",partition);
return -1;
}
upper=toupper(partition);
/*
while(partitionTable[i]->letter!=upper)
{
if(partitionTable[i]==NULL)
{
printf("%c, not an assigned drive letter\n",partition);
return -1;
}
i++;
} */
while(1)
{
if(partitionTable[i]==NULL)
{
printf("No %c:\n",partition);
return -1;
}
if(partitionTable[i]->letter==upper) break;
i++;
}
}
*index=i;
return 0;
}
int printPartitionItem(Pinfo *partitionTable[], int index)
{
int i;
if(index==INVALID_INDEX) return -1;
if(partitionTable[index]==NULL)
{
printf("No partition item %d\n",index);
return -1;
}
else i=index;
printf("\n");
printf("[%2d] ",i+1/*partitionTable[i]->totalNumber*/);
printf("%d >> ",partitionTable[i]->hardDrive);
if(partitionTable[i]->logicDrive==0)
printf("*");
else printf(" ");
printf("%d ",partitionTable[i]->number);
if(partitionTable[i]->letterNumber)
printf("%2d %c: ",partitionTable[i]->letterNumber,partitionTable[i]->letter);
else printf(" ");
printf("%d %02X %04X %02X %04X %10lu %10lu",
partitionTable[i]->logicDrive,
partitionTable[i]->active,
partitionTable[i]->activeOffset,
partitionTable[i]->ID,
partitionTable[i]->IDoffset,
partitionTable[i]->start,
partitionTable[i]->total);
return 0;
}
int extractFromStr(char *str, unsigned char separateCh, char *strSet[])
{
char *p,*nextP;
int i;
if(!str)
{
printf("No string\n");
return -1;
}
p=str;
nextP=strchr(str,separateCh);
if(!nextP)
{
strSet[0]=(char *)malloc(strlen(str)+1);
memset(strSet[0],0,strlen(str)+1);
strcpy(strSet[0],str);
}
else
{
for(i=0;nextP;i++)
{
strSet[i]=(char *)malloc(nextP-p+1);
memset(strSet[i],0,nextP-p+1);
strncpy(strSet[i],p,nextP-p);
p=nextP+1;
nextP=strchr(p,separateCh);
}
strSet[i]=(char *)malloc(strlen(str)-(p-str)+1);
memset(strSet[i],0,strlen(str)-(p-str)+1);
strncpy(strSet[i],p,strlen(str)-(p-str));
}
return 0;
}
int isNumber(char *str)
{
char *p=str;
for(;*p;p++)
{
if(*p<48 || *p>57) return 0;
}
return 1;
}
int getCommonArgFromArg(char *str,
Dinfo *driveTable[],
Pinfo *partitionTable[],
commonArg **arg)
{
char *minus,*plus,*equal;
char *qmin[16];
char digit[16];
char *doPointer;
char *startToFind;
if(!str)
{
printf("Argument error\n");
return -1;
}
*arg=(commonArg *)malloc(sizeof(commonArg));
memset((*arg),0,sizeof(commonArg));
(*arg)->index=INVALID_INDEX;
startToFind=strchr(str,')');
startToFind=(startToFind ? startToFind : str);
minus=strchr(startToFind,'-');
plus=strchr(startToFind,'+');
equal=strchr(startToFind,'=');
if(equal)
{
int i;
for(i=0;i<16;i++)
qmin[i]=NULL;
extractFromStr(equal+1,'=',qmin);
for(i=0;qmin[i];i++)
switch(qmin[i][0])
{
case 'q' : (*arg)->quiet=1;
case 'Q' : (*arg)->quiet=1;
case 'm' : (*arg)->mute=1;
case 'M' : (*arg)->mute=1;
case 'i' : (*arg)->ignore=1;
case 'I' : (*arg)->ignore=1;
case 'n' : (*arg)->next=1;
case 'N' : (*arg)->next=1;
}
}
if(plus)
{
memset(digit,0,16);
doPointer=digit;
if(equal)
strncpy(digit,plus+1,equal-plus-1);
else doPointer=plus+1;
if(!isNumber(doPointer))
{
printf("Non-number found in %s\n",doPointer);
return -1;
}
(*arg)->sectorToDo=strtoul(doPointer,NULL,10);
}
if(minus)
{
memset(digit,0,16);
doPointer=digit;
if(plus)
strncpy(digit,minus+1,plus-minus-1);
else
{
if(equal)
strncpy(digit,minus+1,equal-minus-1);
else doPointer=minus+1;
}
if(!isNumber(doPointer))
{
printf("Non-number found in %s\n",doPointer);
return -1;
}
(*arg)->startToDo=strtoul(doPointer,NULL,10);
}
if((*arg)->startToDo)
{
(*arg)->startToDoTRUE=1;
(*arg)->startToDoGiven=(*arg)->startToDo;
}
if((*arg)->sectorToDo) (*arg)->sectorToDoTRUE=1;
/*
printf("(");
exit(0); */
if(str[0]=='(')
{
char killBracket[256];
char *fileArg[10];
int index=INVALID_INDEX;
int i;
char *plus;
char *minus;
char *equal;
char *end;
char *qmin[4];
(*arg)->argMode=ARGUMENT_IMAGE;
memset(killBracket,0,256);
for(i=0;i<10;i++)
fileArg[i]=NULL;
if((end=strchr(str,')'))==NULL)
{
printf("No \")\" found\n");
return -1;
}
strncpy(killBracket,str+1,strchr(str,')')-str-1);
extractFromStr(killBracket,'=',fileArg);
strcpy((*arg)->name,fileArg[0]);
if(strchr((*arg)->name,':'))
{
if((*arg)->name[0]) (*arg)->letter=(*arg)->name[0];
else
{
printf("No drive in %s\n",(*arg)->name);
return -1;
}
}
else
{
char buf[MAXPATH];
buf[0]='\0';
getcwd(buf,MAXPATH);
if(buf[0]) (*arg)->letter=buf[0];
else printf("Problem occured getting current working directory\n");
}
getPartitionItem(NULL,(*arg)->letter,partitionTable,&index);
(*arg)->drive=partitionTable[index]->hardDrive;
(*arg)->number=partitionTable[index]->number;
for(i=1;fileArg[i];i++)
{
if(toupper(fileArg[i][0])=='C')
{
(*arg)->compressDecompress=1;
if(strlen(fileArg[i])>1) (*arg)->compressLevel=atoi(&fileArg[i][1]);
else (*arg)->compressLevel=DEFAULT_COMPRESS_LEVEL;
}
else if(toupper(fileArg[i][0])=='K') (*arg)->keyTRUE=1;
else if(toupper(fileArg[i][0])=='V')
{
(*arg)->separatedVolume=1;
if(strlen(fileArg[i])>1) (*arg)->separatedMB=strtoul(&fileArg[i][1],NULL,10);
else (*arg)->separatedMB=DEFAULT_EVERY_VOLUME_MB;
}
else if(toupper(fileArg[i][0])=='E')
{
if(!((*arg)->compressDecompress) || !((*arg)->keyTRUE) || !((*arg)->separatedVolume))
{
printf("E needs C K V\n");
return -1;
}
(*arg)->keyEveryTRUE=1;
if(fileArg[i][1]=='?') (*arg)->keyEveryPromptTRUE=1;
}
}
}
else
{
typedef struct _deviceArg
{
char device[10];
unsigned long startToDo;
unsigned long sectorToDo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -