⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commandtype.c

📁 即时计算加法
💻 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 + -