📄 simulate.c
字号:
}
int ExecuteCurrentCommand(char * buffer, int BufSize)
{
char s[1024];
char *p;
int i,j,k;
int pos[128];
int value[128];
static struct
{
uint8 * s;
int (*f)(char z[],int pos[],int value[],int len);
} a[]=
{
{"cls", CMD_CLS},
{"quit", CMD_QUIT},
{"ver", CMD_VER},
{"recl", CMD_RECLTEST},
{"copy", CMD_COPY},
{"dir", CMD_DIR},
{"type", CMD_TYPE},
{"reclaim", CMD_RECLAIM},
{"delete", CMD_DELETE},
{"mkdir", CMD_MD},
{"rmdir", CMD_RD},
{"help", CMD_HELP},
{"/?", CMD_HELP},
{"h", CMD_HELP},
{"volinfo", CMD_GETFREESPACE},
{"devshow", CMD_MOUNTEDDEVSHOW},
{"rename", CMD_RENAME},
{0, 0},
};
if(BufSize == 0) return 0;
p = buffer;
memcpy(s,p,BufSize+1);
// my_strupr(s);
k=SplitLineBySpace(s,pos);
if (k<1) return 0;
for (i=1;i<k;i++) value[i]=my_atoi(s+pos[i]);
j=strlen(s+pos[0])+1;
for (i=0;a[i].s;i++)
if (memcmp(a[i].s,s+pos[0],j)==0) return (*a[i].f)(s,pos,value,k);
FsmPrintf("\r\nUnknown Command: %s",buffer);
return 0;
}
int FsmGetCommand(char * s)
{
uint32 ThreadId;
int i;
uint8 tmpbuf[16];
int socket_id;
int status;
ThreadId = GetCurrentThreadId();
for(i = 0; i < MAX_THREAD_NUM; i++)
{
if(ThreadId == system_data.TreadCtrl_t[i].ThreadID)
{
break;
}
}
if(i == MAX_THREAD_NUM)
{
return 0;
}
if(system_data.TreadCtrl_t[i].ThreadType != THREADTYPE_SOCKET)
{
gets(s);
return 0;
}
else
{
socket_id = system_data.TreadCtrl_t[i].SocketID;
for(i = 0; i < 256; i++)
{
LOOPT1: while ((status = ReadStream(socket_id,s+i,1)) < 0)
{
Sleep(10*10);
}
if(status == 0)
{
// CloseSocket(socket_id);
// memset(&system_data.TreadCtrl_t[i],0,sizeof(system_data.TreadCtrl_t[i]));
return -1;
}
if(*(s+i) == 0x08) //Back
{
if(i == 0)
{
*(s+i) = 0;
i -= 1;
goto LOOP2;
// continue;
// goto LOOPT;
}
else
{
*(s+i-1) = 0;
*(s+i) = 0;
i -= 2;
tmpbuf[0] = 0x08;
tmpbuf[1] = ' ';
tmpbuf[2] = 0x08;
SendStream(socket_id,tmpbuf,3);
// continue;
goto LOOP2;
}
}
if(*(s+i) == _KEY_ESC)
continue;
if((*(s+i) >= 'A') && (*(s+i) <= 'D') && (*(s+i-1) == 'O') && (*(s+i-2) == _KEY_ESC))
{
*(s+i) = 0;
*(s+i-1) = 0;
*(s+i-2) = 0;
i -= 3;
continue;
}
if((*(s+i) >= '0') && (*(s+i) <= '9'))
// continue;
goto LOOP2;
if((*(s+i) >= 'a') && (*(s+i) <= 'z'))
// continue;
goto LOOP2;
if((*(s+i) >= 'A') && (*(s+i) <= 'Z'))
// continue;
goto LOOP2;
/*
switch(*(s + i))
{
case ' ':
case '*':
case '\\':
case '/':
case '?':
case '.':
goto LOOP2;
case '\r':
continue;
case '\n':
if(*(s+i-1) == '\r')
{
break;
}
default:
goto LOOPT1;
}
*/
if((*(s+i) == ' ') || (*(s+i) == '*') || (*(s+i) == '.'))
// continue;
goto LOOP2;
if((*(s+i) == '\\') || (*(s+i) == '/') || (*(s+i) == '?'))
// continue;
goto LOOP2;
if((*(s+i) == '\r'))
continue;
// goto LOOP2;
if((*(s+i) == '\n') && (*(s+i-1) == '\r'))
break;
goto LOOPT1;
//strcpy(s+ i, "\r\n");
//break;
LOOP2: {
strcpy(tmpbuf,"\rFSMDEBUG>");
SendStream(socket_id,tmpbuf,strlen(tmpbuf));
SendStream(socket_id,s,strlen(s));
}
}
}
return 0;
}
#if 0
int FsmGetCommand(char * s)
{
uint32 ThreadId;
int i;
uint8 tmpbuf[16];
int socket_id;
int status;
ThreadId = GetCurrentThreadId();
for(i = 0; i < MAX_THREAD_NUM; i++)
{
if(ThreadId == system_data.TreadCtrl_t[i].ThreadID)
{
break;
}
}
if(i == MAX_THREAD_NUM)
{
return 0;
}
if(system_data.TreadCtrl_t[i].ThreadType != THREADTYPE_SOCKET)
{
gets(s);
return 0;
}
else
{
socket_id = system_data.TreadCtrl_t[i].SocketID;
for(i = 0; i < 256; i++)
{
LOOPT1: while ((status = ReadStream(socket_id,s+i,1)) < 0)
{
Sleep(10*10);
}
if(status == 0)
{
// CloseSocket(socket_id);
// memset(&system_data.TreadCtrl_t[i],0,sizeof(system_data.TreadCtrl_t[i]));
return -1;
}
if(*(s+i) == 0x08) //Back
{
if(i == 0)
{
*(s+i) = 0;
i -= 1;
goto LOOP2;
// continue;
// goto LOOPT;
}
else
{
*(s+i-1) = 0;
*(s+i) = 0;
i -= 2;
tmpbuf[0] = 0x08;
tmpbuf[1] = ' ';
tmpbuf[2] = 0x08;
SendStream(socket_id,tmpbuf,3);
// continue;
goto LOOP2;
}
}
if((*(s+i) >= '0') && (*(s+i) <= '9'))
// continue;
goto LOOP2;
if((*(s+i) >= 'a') && (*(s+i) <= 'z'))
// continue;
goto LOOP2;
if((*(s+i) >= 'A') && (*(s+i) <= 'Z'))
// continue;
goto LOOP2;
if((*(s+i) == ' ') || (*(s+i) == '*'))
// continue;
goto LOOP2;
if((*(s+i) == '\\') || (*(s+i) == '/') || (*(s+i) == '?'))
// continue;
goto LOOP2;
if((*(s+i) == '\r') || (*(s+i) == '.'))
continue;
// goto LOOP2;
if((*(s+i) == '\n') && (*(s+i-1) == '\r'))
break;
goto LOOPT1;
//strcpy(s+ i, "\r\n");
//break;
LOOP2: {
strcpy(tmpbuf,"\rFSMDEBUG>");
SendStream(socket_id,tmpbuf,strlen(tmpbuf));
SendStream(socket_id,s,strlen(s));
}
}
}
return 0;
}
#endif
//----------------------------------------------------------------
// 一边进行人机对话一边进行交换工作
//----------------------------------------------------------------
int StartWorking()
{
char s[1024];
int len;
// HANDLE ThreadHandle;
uint32 ThreadID;
len=0;
memset(s,0,sizeof(s));
// ThreadHandle = GetCurrentThread();
ThreadID = GetCurrentThreadId();
do
{
// NetClientConnectScan();
FsmPrintf("\r\nFSMDEBUG>");
// len = scanf("%s",s);//Why can not scan Enter
// gets(s);
if (FsmGetCommand(s) == -1)
{
return 0;
}
// gets(s);
len = strlen(s);
if (len<0) break;
if (ExecuteCurrentCommand(s,len)<0) break;
memset(s,0,sizeof(s));
} while (system_data.QuitMode==0);
return 0;
}
//-----------------------------------------------------
// 为退出系统作准备
//-----------------------------------------------------
int QuitFromSystem()
{
return 0;
}
//-----------------------------------------------------
// 主程序开始
//-----------------------------------------------------
#ifdef WIN95_O
int main()
{
char heap_area[FLASH_SIZE];
InitializeSystem((int)heap_area,FLASH_SIZE); // 系统初始化
PhyDelaySomeTime(100);
// FSMInitReclaimTask();
StartWorking(); // 开始工作
QuitFromSystem();
return 0;
}
#endif
int Send2IOBuffer(int SocketID, uint8 c)
{
uint8 buf[8];
buf[0] = c;
return SendStream(SocketID,buf,1);
}
static int DisplayNearBlock(int SocketID,char * near_s,int block_length)
{
int i;
for (i=0;i<block_length;i++)
{
Send2IOBuffer(SocketID,near_s[i]);
}
return 0;
}
static int display_near_string(int SocketID,char * s,int plus_flag,int minus_flag,int width)
{
int len;
int i;
uint8 c;
if (s==0) return 0;
for (len=0;s[len];len++);
if (minus_flag==0)
{
for (i=len;i<width;i++)
{
Send2IOBuffer(SocketID,' ');
}
while ((c=*s++)!=0)
{
Send2IOBuffer(SocketID,c);
}
}
else
for (i=len;i<width;i++)
{
Send2IOBuffer(SocketID,' ');
}
return 0;
}
static int display_number(int SocketID,int value,int zero_flag,int unsigned_flag,
int plus_flag,int minus_flag,int width,int radix,int uppercase)
{
unsigned int x,y;
char buf[512];
int sign_flag,i,j,k;
sign_flag = 0;
if(unsigned_flag==0 && value<0)
{
sign_flag = 1;
x = -value;
}
else
x = value;
i = 0;
while (x>0)
{
y = x/radix;
k = x%radix;
buf[i++]=tab[k];
x = y;
}
if (uppercase==0)
for (j=0;j<i;j++)
if (buf[j]>='A' && buf[j]<='Z') buf[j] += 'a'-'A';
if (i==0)
buf[i++] = '0';
k = (sign_flag==0) ? width - i : width-i-1;
if (minus_flag==0)
{
if (zero_flag)
{
if (sign_flag) Send2IOBuffer(SocketID,'-');
for (j=0;j<k;j++) Send2IOBuffer(SocketID,'0');
}
else
{
for (j=0;j<k;j++) Send2IOBuffer(SocketID,' ');
if (sign_flag) Send2IOBuffer(SocketID,'-');
}
for (j=i-1;j>=0;j--) Send2IOBuffer(SocketID,buf[j]);
return 0;
}
if (sign_flag) Send2IOBuffer(SocketID,'-');
if (zero_flag)
{
for (j=0;j<k;j++) Send2IOBuffer(SocketID,'0');
for (j=i-1;j>=0;j--) Send2IOBuffer(SocketID,buf[j]);
}
else
{
for (j=i-1;j>=0;j--) Send2IOBuffer(SocketID,buf[j]);
for (j=0;j<k;j++) Send2IOBuffer(SocketID,' ');
}
return 0;
}
int VirtualPrint(const char * format, int SocketID)
{
uint8 c;
int width;
char * near_s;
int zero_flag;
int unsigned_flag;
int plus_flag;
int minus_flag;
int loop;
int * p;
int short_value;
int block_length;
p = ((int *)&format)+1;
for (;;)
{
c=*format++;
if (c==0) return 0;
if (c!=(unsigned char)'%')
L1: {
Send2IOBuffer(SocketID,c);
continue;
}
width = 0;
unsigned_flag = 0;
plus_flag = 0;
minus_flag = 0;
zero_flag = 0;
loop = 1;
while (loop)
{
c=*format++;
switch(c)
{
case 0: return 0;
case '%': goto L1;
case '0': if (width==0) zero_flag = 1;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': width = width*10 + c-'0';
continue;
case 'F':
case 'f': continue;
case '+': plus_flag =1;
continue;
case '-': minus_flag = 1;
continue;
case 'u':
case 'U': unsigned_flag = 1;
continue;
case 'l':
case 'L':
continue;
case 's':
case 'S':
(int)near_s = *p++;
display_near_string(0,near_s,plus_flag,minus_flag,width);
loop = 0;
break;
case 't':
case 'T':
block_length=*p++;
(int)near_s=*p++;
DisplayNearBlock(0,near_s,block_length);
break;
case 'd':
case 'D':
case 'x':
case 'X':
case 'b':
case 'B':
short_value = *p++;
display_number(0,short_value,
zero_flag,
unsigned_flag,plus_flag,
minus_flag,width,
(c=='d' || c=='D') ? 10 : (c=='x' || c=='X') ? 16 : 2,
(c=='x') ? 0 : 1);
loop = 0;
break;
case 'c':
case 'C': Send2IOBuffer(SocketID,(char)(*p++));
default: loop = 0;
break;
}
}
}
return 0;
}
int FsmPrintf(const char * format, ...)
{
uint32 ThreadID;
int i;
int socket_id;
va_list argList;
uint8 buf[1024];
va_start(argList, format);
ThreadID = GetCurrentThreadId();
for(i = 0; i < MAX_THREAD_NUM; i++)
{
if(ThreadID == system_data.TreadCtrl_t[i].ThreadID)
{
break;
}
}
if(i == MAX_THREAD_NUM)
{
return 0;
}
vsprintf(buf,format,argList);
if(system_data.TreadCtrl_t[i].ThreadType != THREADTYPE_SOCKET)
{
return printf("%s",buf);
}
else
{
socket_id = system_data.TreadCtrl_t[i].SocketID;
return SendStream(socket_id, buf, strlen(buf));
// return VirtualPrint(format,system_data.TreadCtrl_t[i].SocketID);
}
return 0;
}
int MainInit(void)
{
uint32 ThreadID;
memset(&system_data,0,sizeof(system_data));
memset(&SimFd_t,0,sizeof(SimFd_t));
ThreadID = GetCurrentThreadId();
system_data.TreadCtrl_t[0].IsUsed = 1;
system_data.TreadCtrl_t[0].ThreadID = ThreadID;
system_data.TreadCtrl_t[0].SocketID = 0;
system_data.TreadCtrl_t[0].ThreadType = 0;
FsmNetServerInit(1024);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -