#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include "base.h"
#include "task.h"
#include "t_client.h"
#include "cmd.h"
#include "io.h"
struct tagCmd {
char scmd[128];
char sarg[5][128];
int uarg[5];
int ret;
void * pfunc;
struct tagCmd * pnext;
};
typedef int (*cmdfunchook)(char *,struct tagCmd *);
struct tagCmd * cmdHead = NULL;
struct tagCmd * cmdCur = NULL;
char *cmdargv[100] = {0};
int cmdargnum = 0;
char lastcmd[1024] = {0};
int cmd_enter(char * nbuf , struct tagCmd * pcmd )
{
int length;
int i;
int j = sizeof(pcmd->sarg) / sizeof(pcmd->sarg[0]);
length = strlen(pcmd->sarg[0]);
pcmd->sarg[0][length] = '\r';
pcmd->sarg[0][length+1] = '\n';
Telnet_Send(pcmd->sarg[0], length + 2);
for( i = 1 ; i < j ; i++ )
{
length = strlen(pcmd->sarg[i]);
if(length)
{
Task_Delay(1000);
pcmd->sarg[i][length] = '\r';
pcmd->sarg[i][length+1] = '\n';
Telnet_Send(pcmd->sarg[i], length + 2);
}
}
Task_Delay(100);
return 0;
}
int cmd_sleep(char * nbuf , struct tagCmd * pcmd )
{
Task_Delay(pcmd->uarg[0]);
return 0;
}
int cmd_stop(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
Task_Delay(pcmd->uarg[0]);
}
else
{
pcmd->ret = 1;
}
if( pcmd->ret )
{
while(Task_Run())
{
Task_Delay(1000);
}
}
}
return 0;
}
int cmd_wait(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret)
{
Task_Delay(10);
}
}
else
{
pcmd->ret = 1;
}
}
return 0;
}
int cmd_waitt(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret)
{
Telnet_Send("t\r\n", 3);
Task_Delay(1000);
}
}
else
{
pcmd->ret = 1;
}
}
return 0;
}
int cmd_waitenter(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret)
{
Telnet_Send("\r\n", 2);
Task_Delay(1000);
}
}
else
{
pcmd->ret = 1;
}
}
return 0;
}
int cmd_ifexit(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret)
{
Task_Delay(100);
}
}
else
{
pcmd->ret = 1;
}
Task_Delete();
Task_Delay(1000);
}
return 0;
}
int cmd_exitsys(char * nbuf , struct tagCmd * pcmd )
{
Task_Delete();
return 0;
}
int cmd_print(char * nbuf , struct tagCmd * pcmd )
{
IO_WinPrint(TRUE);
return 0;
}
int cmd_noprint(char * nbuf , struct tagCmd * pcmd )
{
IO_WinPrint(FALSE);
return 0;
}
int cmd_ifelse(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
int count = 0;
int length;
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret && count < pcmd->uarg[0] / 10 )
{
count++;
Task_Delay(10);
}
}
else
{
pcmd->ret = 1;
}
if( pcmd->ret )
{
length = strlen(pcmd->sarg[1]);
if(length)
{
pcmd->sarg[1][length] = '\r';
pcmd->sarg[1][length+1] = '\n';
Telnet_Send(pcmd->sarg[1], length + 2);
}
}
else
{
length = strlen(pcmd->sarg[2]);
if(length)
{
pcmd->sarg[2][length] = '\r';
pcmd->sarg[2][length+1] = '\n';
Telnet_Send(pcmd->sarg[2], length + 2);
}
cmdCur = NULL;
}
}
return 0;
}
int cmd_waittimeout(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
int count = 0;
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret && count < pcmd->uarg[0] / 10 )
{
count++;
Task_Delay(10);
}
cmdCur = NULL;
}
else
{
pcmd->ret = 1;
}
}
return 0;
}
int cmd_while(char * nbuf , struct tagCmd * pcmd )
{
if( nbuf )
{
if( strstr(nbuf,pcmd->sarg[0]) )
{
cmdCur = NULL;
pcmd->ret = 1;
}
}
else
{
int length;
length = strlen(pcmd->sarg[1]);
if(length)
{
pcmd->sarg[1][length] = '\r';
pcmd->sarg[1][length+1] = '\n';
if( !strstr(lastcmd,pcmd->sarg[0]) )
{
cmdCur = pcmd;
while(!pcmd->ret )
{
Telnet_Send(pcmd->sarg[1], length + 2);
Task_Delay(1000);
}
}
}
pcmd->ret = 1;
}
return 0;
}
int cmd_for(char * nbuf , struct tagCmd * pcmd )
{
int length;
int i;
length = strlen(pcmd->sarg[0]);
if(length)
{
pcmd->sarg[0][length] = '\r';
pcmd->sarg[0][length+1] = '\n';
for( i = 0 ; i < pcmd->uarg[0] ; i++ )
{
Telnet_Send(pcmd->sarg[0], length + 2);
Task_Delay(1000);
}
}
return 0;
}
int CMD_SHOW_RUN()
{
struct tagCmd * pcmd = cmdHead;
while(pcmd)
{
int i;
printf("---------------------------------------\r\n");
printf("cmd : %s \r\n",pcmd->scmd);
for(i = 0 ; i < 5 ; i++ )
{
if('\0' == pcmd->sarg[i][0])
{
printf("scmd[%u] : null \r\n",i);
}
else
{
printf("scmd[%u] : %s \r\n",i,pcmd->sarg[i]);
}
}
for(i = 0 ; i < 5 ; i++ )
{
printf("sarg[%u] : %u \r\n",i,pcmd->uarg[i]);
- 1
- 2
- 3
前往页