📄 commandtype.c
字号:
/*
Name: commandType.c
Copyright:
Author:
Date: 12-11-08 00:54
Description: comType 类的成员函数定义
*/
#include "includes.h"
#define PATH_LEN 1024
extern LineHis * HisPoint;
extern LineHis * LineHisHead;
LIST ComList [NUM_COM];//全局变量,用于保存命令列表
//该变量是一个char * 类型的数组
//每个数组的元素是一个字符串
//每个字符串长为SIZE_COM
//从文件中读入的命令列表,就保存在这里面
/*
Function Name: comInit
Author:
Description: 维护命令列表,初始化命令列表
命令列表实际上是一个全局变量
*/
void comInit ( void )
{
char * Temp = NULL;//临时变量
int i;//临时变量
for ( i = 0 ; i < NUM_COM ; ++i )
{
Temp = malloc ( sizeof ( SIZE_COM ));
if ( Temp == NULL )
{
Error ( E_OVER_MEM );//出错
}
else
{
ComList [ i ] = Temp;//将ComList置位
Temp = NULL;//将Temp归为NULL
}
}
LoadCommand ();//注意含有E_FAIL_COMSET 类型处理,LoadCommand函数在下面定义
}
/*
Funtion Name: LoadCommand
Author:
Description: 读取指令列表
*/
void LoadCommand ( void )
{
//的任务
//该函数将从文件中读取近来,读取的格式就不用我教你了
//不过注意一点,这次命令列表文件的前两个字节不要再放命令列表的长和宽了
//因为命令的个数和每个命令的宽度都已经预定义了
//直接就按照实际的命令个数,即33条命令,每条命令占有20个字节的宽度生成这个文件,然后再读入就可以了
//注意在读取过程中一定要注意文件没有打开的情况,这种情况下调用Error(E_FAIL_COMSET)函数
//具体的例子你可以参考一下我写的 Init.c 文件的第 31 行到第 36 行
//关于Error函数的参数E_FAIL_COMSET的定义,可以看 ErrorType.h 文件的第 14 行
FILE * fcmd;//创建文件指针
int i;//临时变量
for ( i = 0 ; i < NUM_COM ; ++i )
{
ComList [i] = ( LIST ) malloc ( sizeof( SIZE_COM ) );
}
if((fcmd=fopen("SLCMD.BIN","rb"))==NULL)
{
Error( E_FAIL_COMSET ); //读取指令列表文件失败,致命错误
}
else
{
//读取指令列表文件成功则将33个(NUM_COM)依次存到二维数组ComList中
for ( i=0 ; i < NUM_COM ; ++i )
{
fread ( ComList [i] , SIZE_COM , 1 , fcmd );//读取列表
}//for
}//内else
}
/*
Function Name: command
Author:
Description: 处理解析并且处理命令
注意其中的comPro不是实际存在的函数
只是为了写代码方便而定义的
在这里只是给相应的地方打上一个标记
另外就是这段代码我来写~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
void command ( char * com )
{
comType i;//comType类的值
int j = -1;//临时变量
for ( i = NO_ ; i < NUM_COM ; ++i )
{
if ( ( j = strcmp ( com , ComList [i] )) == 0 )
{
break;
}
}
++i;//对i加1,以便与命令列表对齐,因为数组是从0开始的,而命令列表,即comType类是从1 开始编号的
switch ( i )
{
case a :
case about :
{
Init ( ABOUT );
break;
}
case c_ :
case cls :
{
Init ( CLS );
break;
}
case d :
case deg :
{
Init ( DEG_ );
Init ( CLS );
break;
}
case e_ :
case edit :
{
Init ( EDIT );
break;
}
case EXIT:
case q :
case quit :
{
Init ( BYE );
getch ();
exit ( 0 );
}
case f :
case file :
{
Init ( FILE_ );
break;
}
case g :
case game :
{
system ( "cls" );
GuessNumber ();
getch ();
Init ( CLS );
break;
}
case h :
case help :
{
Init ( HELP );
break;
}
case m :
case menu :
{
Init ( CLS );
break;
}
case n :
case new_ :
{
Init ( CLS );
break;
}
case next :
case nl :
{
if ( HisPoint -> next != NULL && HisPoint -> next != LineHisHead )
{
HisPoint = ( HisPoint -> next );//指向下一条
printf ( "\t" );
puts (( HisPoint -> CLineHis ));//输出历史表达式
//这里可以添加历史记录的处理功能,但由于进度原因,将在下一个版本中添加
}
else
{
Error ( E_END_HIS );//历史纪录到头的处理
}
break;
}
case o :
case open :
{
//读取表达式功能
//
//
//的任务
//
//
{
char * LinePath;//记录路径
Liner * Cal_Line;
Lstack * Cal_Stack;
FILE * LineFile =NULL ;
int * len;//记录路径长度
LinePath = ( char * ) malloc ( sizeof ( char ) * PATH_LEN );//分配空间
Cal_Line = ( Liner * ) malloc ( sizeof ( Liner ) );
Cal_Stack = ( Lstack * ) malloc ( sizeof ( Lstack ));
LinerCreater ( Cal_Line );
LstCreater ( Cal_Stack );
len = ( int * ) malloc ( sizeof ( int ));
puts ( "\nPlease Input the Path : " );//输出提示符
gets ( LinePath );//得到路径
if ( * ( LinePath + 0 ) == '"' )
{
int i;
* len = strlen ( LinePath );
for ( i = 0 ; i < * len ; ++i )
{
* ( LinePath + i ) = * ( LinePath + i +1 );
}
* ( LinePath + * len - 2 ) = 0;
}
LineFile = fopen ( LinePath , "r" );
if ( LineFile == NULL )
{
Error ( E_LOAD_FILE );
break ;
}
free ( LinePath );
GetLineFile ( Cal_Line , LineFile );
fclose ( LineFile );
switch ( * ( Cal_Line -> CLine + 0 ))
{
case ':' :
{
Init ( CLS );
command ( Cal_Line -> CLine );
break;
}
default :
{
LstCal ( Cal_Line , Cal_Stack );
break;
}
}
free ( Cal_Line );
free ( Cal_Stack );
free ( len );
}
break;
}
case p_ :
case pre :
{
if ( HisPoint -> pre != NULL )
{
HisPoint = HisPoint -> pre;//指向下一条
printf ( "\t" );
puts ( HisPoint -> CLineHis );//输出历史表达式
//这里可以添加历史记录的处理功能,但由于进度原因,将在下一个版本中添加
}
else
{
Error ( E_END_HIS );//历史纪录到头的处理
}
break;
}
case r :
case rad :
{
Init ( RAD_ );
Init ( CLS );
break;
}
case s :
case save :
{
//的任务
//
//
//
printf ( "\nSorry! This Function will be provided in next version!\n" );
getch ();
//Init (CLS);
break;
}
case sa :
case save_as :
{
//的任务
//
//
//
break;
}
default :
{
printf ( "\n" );
}
}
free ( com );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -