📄 cmdline.c
字号:
/*------------------------------------------------------------------*/
#include "unitinc.h"
extern dword DOCAddress;
extern dword DOCLowAddress;
extern dword DOCHighAddress;
extern EXCHAR *exUtilCommands[];
extern EXBYTE bPrintLevel;
#ifdef ENVIRONMENT_VARS
extern unsigned char flUse8Bit;
#endif
EXDWORD ext_busConfig=0;
byte LogFileName[MAX_NAME];
byte ImgFileName[MAX_NAME];
/*------------------------------------------------------------------*/
void PrintUsage(void)
{
DinfoPrint( EX_TEXT("\nUsage: Dinfo [/flags]\n"));
DinfoPrint( EX_TEXT(" /WIN:address - DISKONCHIP WINDOW ADDRESS\n"));
DinfoPrint( EX_TEXT(" /WINL:address - DISKONCHIP LOW LIMIT WINDOW ADDRESS\n"));
DinfoPrint( EX_TEXT(" /WINH:address - DISKONCHIP HIGH LIMIT WINDOW ADDRESS\n"));
DinfoPrint( EX_TEXT(" /SHIFT:shift - THE ADDRESS BUS SHIFT (0,1,2)\n"));
DinfoPrint( EX_TEXT(" /WIDTH:data bus - THE AVAILABLE DATA BUS WIDTH (any combination of 8,16,32)\n"));
DinfoPrint( EX_TEXT(" /BBT - GET INFORMATION ABOUT THE BAD BLOCK TABLE\n"));
DinfoPrint( EX_TEXT(" /IPL - GET INFORMATION ABOUT THE IPL\n"));
DinfoPrint( EX_TEXT(" /OTP - GET INFORMATION ABOUT THE CUSTOMER OTP\n"));
DinfoPrint( EX_TEXT(" /BDK - GET INFORMATION ABOUT THE BINARY PARTITION\n"));
DinfoPrint( EX_TEXT(" /BDTL - GET INFORMATION ABOUT THE BDTL PARTITION\n"));
/* DinfoPrint( EX_TEXT(" /EXB - GET INFORMATION ABOUT THE FIRMWARE\n")); */
/* DinfoPrint( EX_TEXT(" /REG - GET INFORMATION ABOUT THE REGISTERS\n")); */
/* DinfoPrint( EX_TEXT(" /MORE - PRINT ONE PAGE SCREEN AT A TIME\n")); */
DinfoPrint( EX_TEXT(" /LOG:logfile - SAVE THE INFORMATION IN A LOG FILE\n"));
DinfoPrint( EX_TEXT(" /H (or) ? - PRINT HELP SCREEN\n"));
/* DinfoPrint( EX_TEXT(" /CFG - GET INFORMATION ABOUT THE DISKONCHIP CONFIGURATION\n")); */
/* DinfoPrint( EX_TEXT(" /IMG:imgfile - WORK WITH IMAGE FILE\n")); */
/* DinfoPrint( EX_TEXT(" /PRINT:number - OUTPUT LEVEL, BETWEEN 0 TO 3\n")); */
}
/*------------------------------------------------------------------*/
void InitCmdLine()
{
/*
* initialize the Media struct variable
*/
ExMemSet( &Media, 0x00, sizeof( Media_t) );
Media.MediaSize = -1;
/*
* initialize the Option struct variable
*/
ExMemSet( &Option, 0x00, sizeof( Option_t ) );
Option.LogFileName = NULL;
Option.LogFileHandle = -1;
Option.ImageFile.ImgFileSize = 0;
Option.ImageFile.ImgFileName = NULL;
Option.Moreflag = EXFALSE;
Option.Extraflag = EXFALSE;
}
/*------------------------------------------------------------------*/
ExStatus AnalyzeCmdLine()
{
EXBYTE iArgc;
CommandLineStruct cmlRecord;
EXCHAR* err = EXNULL;
InitCmdLine();
for( iArgc = 0 ; iArgc < exArgc ; iArgc++ )
{
if( ParseCommandLine( &cmlRecord, iArgc, exUtilCommands ) != EX_OK )
return EX_COMMAND_LINE_ERROR;
if( cmlRecord.bCommandNumber == 0xff )
return EX_COMMAND_LINE_ERROR;
if( ( cmlRecord.fSlash == EXFALSE ) && ExMemCmp( cmlRecord.pCommand, "?", 1 ) != 0 )
return EX_COMMAND_LINE_ERROR;
ExMakeUpperCase( cmlRecord.pCommand );
if( ExMemCmp( cmlRecord.pCommand, "LOG:", 4 ) == 0 )
{
/* malloc removed : Option.LogFileName = ( EXBYTE* )ExMemAlloc( MAX_NAME ); */
Option.LogFileName = &LogFileName[0];
ExMemCpy( Option.LogFileName, cmlRecord.pArg, cmlRecord.bArgLen + 1 );
}
else if( ExMemCmp( cmlRecord.pCommand, "BBT", 3 ) == 0 )
{
Option.BBTflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "SHIFT:", 6 ) == 0 )
{
EXDWORD dwTmp = ExAtoi( &(exArgv[iArgc][7]) );
switch(dwTmp)
{
case 0 :
Option.busConfig |= FL_NO_ADDR_SHIFT;
break;
case 1:
Option.busConfig |= FL_SINGLE_ADDR_SHIFT;
break;
case 2:
Option.busConfig |= FL_DOUBLE_ADDR_SHIFT;
break;
default:
return EX_COMMAND_LINE_ERROR;
}
}
else if( ExMemCmp( cmlRecord.pCommand, "WIDTH:", 6 ) == 0 )
{
EXDWORD dwTmp = ExAtoi( &(exArgv[iArgc][7]) );
if(dwTmp&8)
{
Option.busConfig |= FL_BUS_HAS_8BIT_ACCESS;
}
if(dwTmp&16)
{
Option.busConfig |= FL_BUS_HAS_16BIT_ACCESS;
}
if(dwTmp&32)
{
Option.busConfig |= FL_BUS_HAS_32BIT_ACCESS;
}
}
else if( ExMemCmp( cmlRecord.pCommand, "IPL", 3 ) == 0 )
{
Option.IPLflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "OTP", 3 ) == 0 )
{
Option.OTPflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "CFG", 3 ) == 0 )
{
Option.CFGflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "BDK", 3 ) == 0 )
{
Option.BDKflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "BDTL", 4 ) == 0 )
{
Option.BDTLflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "EXB", 3 ) == 0 )
{
Option.EXBflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "REG", 3 ) == 0 )
{
Option.REGflag = 1;
}
else if( ExMemCmp( cmlRecord.pCommand, "EXTRA", 5 ) == 0 )
{
Option.Extraflag = EXTRUE;
}
else if( ExMemCmp( cmlRecord.pCommand, "WINL", 4 ) == 0 )
{
Option.DocLowLimit = ExStrtol( cmlRecord.pArg, &err, 16 ) ;
DOCLowAddress = Option.DocLowLimit;
/* if DOCHighAddress was set , and DOCLowAddress < DOCHighAddress */
/* its an error. */
if ((DOCHighAddress != 0) && (DOCLowAddress > DOCHighAddress))
return EX_LOW_LIMIT_BIGGER_THAN_HIGH_LIMIT_ERROR;
}
else if( ExMemCmp( cmlRecord.pCommand, "WINH", 4 ) == 0 )
{
Option.DocHighLimit = ExStrtol( cmlRecord.pArg, &err, 16 ) ;
DOCHighAddress = Option.DocHighLimit;
/* if DOCHighAddress was set , and DOCLowAddress < DOCHighAddress */
/* its an error. */
if ((DOCLowAddress != 0) && (DOCLowAddress > DOCHighAddress))
return EX_LOW_LIMIT_BIGGER_THAN_HIGH_LIMIT_ERROR;
}
else if( ExMemCmp( cmlRecord.pCommand, "WIN", 3 ) == 0 )
{
Option.DocWindow = ExStrtol( cmlRecord.pArg, &err, 16 ) ;
/* prev implementation assumed segment was entered and shifted it 4 times left */
/* Option.DocWindow = ExStrtol( cmlRecord.pArg, &err, 16 ) << 4; */
DOCAddress = Option.DocWindow;
}
else if( ExMemCmp( cmlRecord.pCommand, "IMG:", 4 ) == 0 )
{
/* malloc removed : Option.ImageFile.ImgFileName = ( EXBYTE* )ExMemAlloc( MAX_NAME ); */
Option.ImageFile.ImgFileName = &ImgFileName[0];
ExMemCpy( Option.ImageFile.ImgFileName, cmlRecord.pArg, cmlRecord.bArgLen + 1 );
}
/* print level */
else if ( ExMemCmp( cmlRecord.pCommand, "LEVEL:", 6 ) == 0 )
{
/* Option.OutputLevel = exArgv[iArgc][7] - '0'; */
Option.OutputLevel = (FLByte) ExAtoi( &(exArgv[iArgc][7]) );
bPrintLevel = Option.OutputLevel;
if (bPrintLevel > 63)
{
DinfoPrint( EX_TEXT(" print level should be between 0 and 63 .\n"));
return EX_COMMAND_LINE_ERROR;
}
}
/* fast */
else if ( ExMemCmp( cmlRecord.pCommand, "FAST", 4 ) == 0 )
{
#ifdef ENVIRONMENT_VARS
flUse8Bit=0;
#endif
}
else if( ExMemCmp( cmlRecord.pCommand, "MORE", 4 ) == 0 )
{
Option.Moreflag = TRUE;
}
else if( ExMemCmp( cmlRecord.pCommand, "H", 1 ) == 0 )
{
return EX_HELP_SCREEN_ERROR;
}
else
{
return EX_COMMAND_LINE_ERROR;
}
}
return EX_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -