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

📄 feval.c

📁 一个通讯程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*+-------------------------------------------------------------------------    feval.c - integer and string function evaluation	wht@n4hgf.Mt-Park.GA.US    feval_int(param,&int_returned) where 'int' here means long ECU $i int    feval_str(param,&esd_to_be_plugged)  These routines are called with param.index as follows:         !nnnnn       nnn is name of function          ^          |  Defined functions:	feval_int(param,value)	feval_str(param,result_esd)	strfunc_left(param,scratch_esd,result_esd)	strfunc_right(param,scratch_esd,result_esd)--------------------------------------------------------------------------*//*+:EDITS:*//*:09-10-1992-13:59-wht@n4hgf-ECU release 3.20 *//*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA *//*:05-07-1992-15:04-wht@n4hgf-bug in FIconn code *//*:04-25-1992-14:28-wht@n4hgf-%conn returns -1 if no line open *//*:04-25-1992-13:19-wht@n4hgf-%line succeeds even if line not open *//*:03-01-1992-13:28-wht@n4hgf-come up to modern times ... enum for FI/FS  *//*:02-14-1992-16:37-wht@n4hgf-add uname *//*:07-25-1991-12:58-wht@n4hgf-ECU release 3.10 *//*:07-14-1991-18:18-wht@n4hgf-new ttygets functions *//*:06-29-1991-16:33-wht@n4hgf-use cuserid() instead of getlogin() *//*:03-16-1991-15:23-wht@n4hgf-add %nice *//*:01-31-1991-16:10-wht@n4hgf-was freeing tesd1 twice in feval_str *//*:12-24-1990-04:31-wht@n4hgf-experimental fasi driver functions *//*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */#include "ecu.h"#include "ecuerror.h"#include "esd.h"#include "proc.h"#include "var.h"#include "ecutty.h"#include <sys/utsname.h>#if defined(FASI)char *msr_text();#endifenum FI_codes{	FIZERO,	FIargc,	FIbaud,	FIbrdet,	FIcolors,	FIcols,	FIconn,	FIcsec,	FIctoi,	FIcurx,	FIcury,	FIesecs,	FIfasi,	FIfatime,	FIfmode,	FIfmtime,	FIfsize,	FIftell,	FIgid,	FIinstr,	FIisalnum,	FIisalpha,	FIisascii,	FIischr,	FIiscntrl,	FIisdigit,	FIisdir,	FIisgraph,	FIislower,	FIisprint,	FIispunct,	FIisreg,	FIisspace,	FIisupper,	FIisxdigit,	FIlen,	FIlgetc,	FIlines,	FIlnerr,	FImatch,	FImhack,	FImsr,	FInice,	FIpid,	FIrchr,	FIrchrc,	FIridet,	FIrinstr,	FIshmid,	FIstoi,	FIuid,	FIxchr,	FIxchrc,	FI____end};KEYTAB feval_int_tbl[] ={	{"argc",FIargc},	{"baud",FIbaud},#if defined(FASI)	{"brdet",FIbrdet},#endif	{"colors",FIcolors},	{"cols",FIcols},	{"conn",FIconn},	{"csec",FIcsec},	{"ctoi",FIctoi},	{"curx",FIcurx},	{"cury",FIcury},	{"esecs",FIesecs},	{"fasi",FIfasi},	{"fatime",FIfatime},	{"fmode",FIfmode},	{"fmtime",FIfmtime},	{"fsize",FIfsize},	{"ftell",FIftell},	{"gid",FIgid},	{"instr",FIinstr},	{"isalnum",FIisalnum},	{"isalpha",FIisalpha},	{"isalpha",FIisalpha},	{"isascii",FIisascii},	{"ischr",FIischr},	{"iscntrl",FIiscntrl},	{"isdigit",FIisdigit},	{"isdir",FIisdir},	{"isgraph",FIisgraph},	{"islower",FIislower},	{"isprint",FIisprint},	{"ispunct",FIispunct},	{"isreg",FIisreg},	{"isspace",FIisspace},	{"isupper",FIisupper},	{"isxdigit",FIisxdigit},	{"len",FIlen},#if defined(FASI)	{"lnerr",FIlnerr},#endif	{"lgetc",FIlgetc},	{"lines",FIlines},	{"match",FImatch},	{"mhack",FImhack},#if defined(FASI)	{"msr",FImsr},#endif	{"nice",FInice},	{"pid",FIpid},	{"rchr",FIrchr},	{"rchrc",FIrchrc},#if defined(FASI)	{"ridet",FIridet},#endif	{"rinstr",FIrinstr},	{"shmid",FIshmid},	{"stoi",FIstoi},	{"uid",FIuid},	{"xchr",FIxchr},	{"xchrc",FIxchrc},	{(char *)0,0}};enum FS_codes{	FSZERO,	FSargv,	FSbasename,	FScgetc,	FScgets,	FSchr,	FSdate,	FSdatez,	FSday,	FSdayz,	FSdir,	FSdirpart,	FSedate,	FSenvvar,	FSerrstr,	FSetime,	FSfilepart,	FSfmodestr,	FSitos,	FSleft,	FSline,	FSlogname,	FSmid,	FSmonth,	FSmonthz,	FSmsrtext,	FSrdesc,	FSright,	FSrname,	FSrtel,	FSscreen,	FStime,	FStimes,	FStimez,	FStimezs,	FStty,	FSuname,	FS____end};KEYTAB feval_str_tbl[] ={	{"argv",FSargv},	{"basename",FSbasename},	{"cgetc",FScgetc},	{"cgets",FScgets},	{"chr",FSchr},	{"date",FSdate},	{"datez",FSdatez},	{"day",FSday},	{"dir",FSdir},	{"dirpart",FSdirpart},	{"edate",FSedate},	{"envvar",FSenvvar},	{"errstr",FSerrstr},	{"etime",FSetime},	{"filepart",FSfilepart},	{"fmodestr",FSfmodestr},	{"getenv",FSenvvar},	{"itos",FSitos},	{"left",FSleft},	{"line",FSline},	{"logname",FSlogname},	{"mid",FSmid},	{"month",FSmonth},#if defined(FASI)	{"msrtext",FSmsrtext},#endif	{"rdesc",FSrdesc},	{"right",FSright},	{"rname",FSrname},	{"rtelno",FSrtel},	{"screen",FSscreen},	{"time",FStime},	{"times",FStimes},	{"timez",FStimez},	{"timezs",FStimezs},	{"tty",FStty},	{"uname",FSuname},	{(char *)0,0}};extern char curr_dir[];extern int proctrace;extern PCB *pcb_stack[];extern struct timeb starting_timeb;extern uint tcap_LINES;extern uint tcap_COLS;extern int shm_shmid;char *day_of_week_list = "SunMonTueWedThuFriSat";char *month_name_list = "JanFebMarAprMayJunJulAugSepOctNovDec";/*+-------------------------------------------------------------------------    erc = feval_int(param,&int_returned);Functions (parameter types are expressed by the usage of variables)--------------------------------------------------------------------------*/feval_int(param,value)ESD *param;long *value;{register erc;register keyword_token;ESD *tesd1 = (ESD *)0;ESD *tesd2 = (ESD *)0;ulong int1;char s32[32];struct timeb now_timeb;int nice();	if(erc = get_alphanum_zstr(param,s32,sizeof(s32)))	{		erc = eInvalidFunction;		goto RETURN;	}	keyword_token = keyword_lookup(feval_int_tbl,s32);	switch(keyword_token)	{/* LEN($S0)         length of $S0 */	case FIlen:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		*value = (long)tesd1->cb;		break;/* INSTR($S0,$S1)   index of first occurrence of $S1 in $S0, -1 if none */	case FIinstr:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(!(tesd2 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_comma(param))			goto RETURN;		if(erc = gstr(param,tesd2,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		*value = (long)ulindex(tesd1->pb,tesd2->pb);		break;/* RINSTR($S0,$S1)   index of last occurrence of $S1 in $S0, -1 if none */	case FIrinstr:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(!(tesd2 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_comma(param))			goto RETURN;		if(erc = gstr(param,tesd2,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		*value = (long)ulrindex(tesd1->pb,tesd2->pb);		break;	case FImatch:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(!(tesd2 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_comma(param))			goto RETURN;		if(erc = gstr(param,tesd2,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		erc = regexp_operation(tesd1->pb,tesd2->pb,value);		break;	case FImhack:		ftime(&now_timeb);		*value = ((now_timeb.time - starting_timeb.time) * 1000) +				(now_timeb.millitm - starting_timeb.millitm);		erc = 0;		break;	case FIesecs:		ftime(&now_timeb);		*value = now_timeb.time;		erc = 0;		break;	case FIargc:		if(!proc_level)		{			pputs("not executing procedure\n");			erc = eFATAL_ALREADY;			break;		}		*value = (long)pcb_stack[proc_level - 1]->argc;		break;	case FIcolors:		if(erc = ifunc_colors(value))			goto RETURN;		break;	case FIftell:		if(erc = ifunc_ftell(param,value))			goto RETURN;		break;	case FIfmode:		if(erc = ifunc_fmode(param,value))			goto RETURN;		break;	case FIfsize:		if(erc = ifunc_fsize(param,value))			goto RETURN;		break;	case FIfmtime:		if(erc = ifunc_fmtime(param,value))			goto RETURN;		break;	case FIfatime:		if(erc = ifunc_fatime(param,value))			goto RETURN;		break;	case FIischr:		if(erc = ifunc_ischr(param,value))			goto RETURN;		break;	case FIisdir:		if(erc = ifunc_isdir(param,value))			goto RETURN;		break;	case FIisreg:		if(erc = ifunc_isreg(param,value))			goto RETURN;		break;	case FIbaud:		*value = (long)shm->Lbaud;		erc = 0;		break;	case FIpid:		*value = (long)getpid();		erc = 0;		break;	case FIcsec:		*value = (shm->Lconnected) ? shm->Loff_hook_time : -1;		erc = 0;		break;	case FIconn:		if(shm->Liofd < 0)			*value = -1;		else			*value = (long)(shm->Lconnected) ? (long)shm->Liofd : 0;		erc = 0;		break;	case FIxchr:		*value = shm->xmit_chars;		erc = 0;		break;	case FIxchrc:		*value = shm->xmit_chars_this_connect;		erc = 0;		break;	case FIrchr:		*value = shm->rcvd_chars;		erc = 0;		break;	case FIrchrc:		*value = shm->rcvd_chars_this_connect;		erc = 0;		break;/* LGETC($I0) get char from line, waiting for $I0 msecreturns  character read or -1 if none read in time */	case FIlgetc:		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gint(param,&int1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		*value = (long)lgetc_timeout(int1);		if(zero_length_read_detected)		{			zero_length_read_detected = 0;			erc = eProcAttn_DCDloss;		}		break;	case FIctoi:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		if(tesd1->cb == 0)			*value = -1;		else			*value = (long)((unsigned)0xFF & (unsigned)tesd1->pb[0]);		break;	case FIstoi:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		tesd1->index = 0;		skip_cmd_break(tesd1);		*value = 0;		gint_constant(tesd1,value);		break;	case FIcurx:		*value = (long)shm->cursor_x;		break;	case FIcury:		*value = (long)shm->cursor_y;		break;	case FIshmid:		*value = (long)shm_shmid;		break;	case FIisalpha:	case FIisupper:	case FIislower:	case FIisdigit:	case FIisxdigit:	case FIisspace:	case FIispunct:	case FIisalnum:	case FIisprint:	case FIisgraph:	case FIiscntrl:	case FIisascii:		if(!(tesd1 = esdalloc(256)))		{			erc = eNoMemory;			goto RETURN;		}		if(erc = skip_paren(param,1))			goto RETURN;		if(erc = gstr(param,tesd1,1))			goto RETURN;		if(erc = skip_paren(param,0))			goto RETURN;		if(!tesd1->cb)		{			*value = 0;			goto RETURN;		}		switch(keyword_token)		{			case FIisalpha:				*value = !!isalpha(*tesd1->pb);				break;			case FIisupper:				*value = !!isupper(*tesd1->pb);				break;			case FIislower:				*value = !!islower(*tesd1->pb);				break;			case FIisdigit:				*value = !!isdigit(*tesd1->pb);				break;			case FIisxdigit:				*value = !!isxdigit(*tesd1->pb);				break;			case FIisspace:				*value = !!isspace(*tesd1->pb);				break;			case FIispunct:				*value = !!ispunct(*tesd1->pb);				break;			case FIisalnum:				*value = !!isalnum(*tesd1->pb);				break;			case FIisprint:				*value = !!isprint(*tesd1->pb);				break;			case FIisgraph:				*value = !!isgraph(*tesd1->pb);				break;			case FIiscntrl:				*value = !!iscntrl(*tesd1->pb);				break;			case FIisascii:				*value = !!isascii(*tesd1->pb);				break;		}		break;	case FIlines:		*value = (long)tcap_LINES;		break;	case FIcols:		*value = (long)tcap_COLS;		break;#if defined(FASI)	case FIfasi:		*value = 1;		break;	case FImsr:		*value = (long)fasi_msr();		break;	case FIlnerr:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -