亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? comnd.c

?? Documentation and source code Copyright (C) 1985 by Mark E. Mallett permission is granted to distr
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	comnd.c		COMND module; Main module.

	Copyright (C) 1985 Mark E. Mallett

	Permission is hereby granted to distribute this file indiscriminately.

	COMND.C, along with its associated files, contains routines which
	provide command parsing facilities of the TOPS-20 style, with
	command recognition, incremental help, and indirection.

Edit history

When	Who	What
------	---	--------------------------------
84xxxx	MEM	Create file.


	Routines included:

		COMND		The "user" call to parsing.
		COMNDr		General support COMND call
		CMDcab		Collect atom buffer
		CMDspc		Skip leading spaces
		CMDgcc		Get nth unparsed character
		CMDcpt		Checkpoint parsed area
		CMDcpl		Perform command completion
		CMDhlp		Perform common help
		CMDfill		Fill the command line.

*/


#include "stdio.h"			/* Standard system defs */
#include "comnd.h"			/* COMND interface definitions */
#include "comndi.h"			/* COMND internal definitions */


/* External routines */

extern		CMDptc();

/* External data */


/* Internal (public) routines */



/* Internal (public) data */

	int	CMDbel = {0};		/* Beep count */
	int	CMDgvh = {0};		/* Gave-help count */
	int	(*Cocrtc)() = {CMDptc};	/* Output char routine to call */


/* Local (static) data */


static	int	Echofl = {TRUE};	/* Echo on or off */
/*

*//* COMND (CSBptr, CFBptr)

	The general command call

This routine processess a request to parse an element of a command.

Accepts :

	CSBptr		Address of Command State Block
	CFBptr		Address of Command Function Block


Returns :

	<value>		One of result codes _CRxxx as defined in
			  the comnd.h include file

*/

int COMND (CSBptr, CFBptr)

CSB		*CSBptr;		/* Addr of command state block */
CFB		*CFBptr;		/* Addr of command function block */

{
return (COMNDr (CSBptr, CFBptr, 0));	/* Call comnd in non-support mode */
}
/*

*//* COMNDr (CSBptr, CFBptr, sflg)

	General COMND support call

This routine is the general COMND call, for use by extern or internal
(support) routines.

Accepts :

	CSBptr		Address of Command State Block
	CFBptr		Address of Command Function Block
	sflg		0 if general call
			1 if first through n-1st support call
			2 if final support call


Returns :

	<value>		One of result codes _CRxxx as defined in
			  the comnd.h include file



Notes:

	sflg may be set in order to make multiple calls to COMNDr appear
function the same way as a single call to COMND with chained CFBs.  That
is, each successive call to COMNDr in support mode passes a new CFB list
which is a logical extention of the current list.

	Please note that routines setting sflg will be returned internal
parse result codes (_CPxxx) rather than the usual external result codes
(_CRxxx), in order to allow full handling of all conditions.

*/

int COMNDr (CSBptr, CFBptr, sflg)

CSB		*CSBptr;		/* Addr of command state block */
CFB		*CFBptr;		/* Addr of command function block */
int		sflg;			/* Support-mode flag */

{
IND	int	agn;			/* Try-again flag */
IND	int	parse;			/* Parse result */
IND	int	i;			/* Scratch */
	CFB	*CFBcur;		/* Current CFB */
IND	int	c,c1;			/* Char */
IND	char	*sptr;			/* String pointer */
	int	cix;			/* Char index */

CSBptr -> CSB_RFL &= (~_CFPFE);		/* Clear prev-was-escape-completed */
if (CSBptr -> CSB_RFL & _CFESC)		/* If last WAS esc completed */
    CSBptr -> CSB_RFL |= _CFPFE;	/*  then set it */

while (TRUE)				/* Loop until we have something
					   to return to our gentle caller */
    {
    if (!sflg)				/* Reset things if not support mode */
	{
	CMDbel = 0;			/* Set beep counter to 0 */
	CMDgvh = 0;			/* Set gave-help to 0 */
	agn = FALSE;			/* Try-again to FALSE */
	}
    Echofl = !(CSBptr -> CSB_PFL & _CFNEC);
					/* Set echo on or off as desired */
    CFBcur = CFBptr;			/* Start at beginning */
    if (CSBptr -> CSB_FLN == -1)	/* If initial */
	{
	CMDfill (CSBptr, CFBptr);	/* Collect input */
	continue;			/*  and skip to end of while loop */
	}

    if (!sflg)				/* If not support mode */
	{
	if (CFBcur -> CFB_FLG & _CFDPP)	/* Check out default if any */
	    if (sptr = CFBcur -> CFB_DEF) /* (must be non-null ptr) */
		{
		cix = CMDspc (CSBptr);	/* Get inx after spaces */
		c = CMDgcc(CSBptr, cix);
					/* Get first non-space non-tab */
		cix = cix + CSBptr -> CSB_PRS; /* Get real index */
		c1 = CSBptr -> CSB_BUF[cix]; /* Get real character there */
		if ((c == _CCCMP) || (c == _CCEND))
		    {			/* If ok to default */
		    if (c == _CCEND)	/* If it was return */
			if ((cix) && (CSBptr->CSB_BUF[cix-1] != ' '))
			    CSBptr->CSB_BUF[cix++] = ' ';
					/* make sure space separation. */
		    strcpy (&CSBptr -> CSB_BUF[cix], sptr);
		    CSBptr -> CSB_FLN = cix = cix+strlen(sptr);
		    if (c == _CCCMP)	/* If completion */
			{
			CMDpzs (sptr);	/* Show it */
			CMDfob();
			}
		    CSBptr -> CSB_BUF[cix] = c1;
		    }
		}
	}


    CSBptr -> CSB_RFL &= (~_CFESC);	/* Clear completed-with-escape */
    while (CFBcur)			/* Go through... */
	{
	CSBptr -> CSB_CFB = CFBcur;	/* Remember which CFB we're at */
	parse = CMDpf(CSBptr, CFBcur);
					/* Try parse on this function */
	switch (parse)			/* Process the completion code */
	    {
	    case _CPCPE:		/* Completed with escape */
		CSBptr -> CSB_RFL = _CFESC; /* Indicate to caller */
		if (sflg)		/* If support... */
		    return (_CPCPE);	/*  return appropriate code */
		return (_CROK);		/* Return OK */


	    case _CPSUCC:		/* Successfull */
		if (sflg)		/* If support mode */
		    return (_CPSUCC);	/*  return success indication */
		return (_CROK);		/*  Return OK */

	    case _CPABT:		/* Abort */
		if (sflg)		/* If supportmode */
		    return (_CPABT);	/*  return the abort flag */
		return (CSBptr -> CSB_RCD); /* Pass back the return code */

	    case _CPGVH:		/* Gave help */
		CMDgvh++;		/* Count it and act like _CPAGN */

	    case _CPAGN:		/* Try again... */
		agn = TRUE;		/*  set to try again */
	    }

	CFBcur = CFBcur -> CFB_CFB;	/* Get next one */
	}

/* Gone through all the function blocks.. take appropriate result action */

    if (CSBptr -> CSB_PRS == 0)		/* If nothing parsed */
	{
	cix = CMDspc (CSBptr);		/* Skip spaces */
	if (CMDgcc (CSBptr, cix) == _CCEND) /* See if no input */
	    {
	    CSBptr -> CSB_FLN = -1;	/* Indicate reprompt */
	    continue;			/* Go to end of the while loop */
	    }
	}

    if (!agn)				/* If not to try again */
	{
	if (sflg)			/* If support mode */
	    return (_CPNOP);		/*  return internal code */
	return (_CRNOP);		/* Return no-parse */
	}

    if (sflg)				/* If supportmode */
	return (_CPAGN);		/*  return that we ought try agn */

    if (CMDgvh)				/* If gave help... */
	{
	CMDpoc ('\n');			/* give CR */
	CMDpzs (CSBptr -> CSB_PMT);	/* Output prompt */
	for (i = 0; i < CSBptr -> CSB_FLN; i++)
	    CMDpoc (CSBptr -> CSB_BUF[i]); /* Output text typed */
	CMDfob();
	CMDbel = 0;			/* Don't beep */
	}

    if (CMDbel)				/* If wanted to beep */
	{
	CMDpoc ('\007');			/* Make a beep */
	CMDfob();
	}

    CMDfill (CSBptr, CFBptr);		/* do user editing */
    if (CSBptr -> CSB_RFL & _CFRPT)	/* If reparse indicated */
	{
	CSBptr -> CSB_PRS = 0;		/* Reset the parse pointer */
	if (CSBptr -> CSB_RSB)		/* If any setjmp buffer */
	    longjmp (CSBptr -> CSB_RSB, 1); /* Execute the longjump */
	else				/* Otherwise */
	    return (_CRRPT);		/* Return re-parse */
	}
    }
}
/*

*//* CMDcab (CSBptr, buf, buflen, cctbl, ecptr, icix)

	Collect Atom Buffer

This routine collects characters from the input buffer into an atom
buffer as specified by the caller.  It makes use of a character
characteristic table, as described elsewhere.


Accepts :

	CSBptr		Address of command state block
	buf		Address of buffer to store data into
	buflen		Length of buffer
	cctbl		Address of character/characteristic table
	ecptr		Where to store the ending character value
	icix		Initial relative parse index

Returns :

	<value>		New character index relative to parse pointer, for
			use in checkpointing if the parse is successful
			at this point.
	*ecptr		Value of character which caused the end of atom
			collection.

*/

CMDcab (CSBptr, buf, buflen, cctbl, ecptr, icix)

CSB		*CSBptr;		/* Addr of command state block */
char		*buf;			/* Addr of buffer */
int		buflen;			/* Length of buffer */
WORD		*cctbl;			/* CC table */
int		*ecptr;			/* Where to put ending char */
int		icix;			/* Initial cix */

{
IND	int	c;			/* Character */
IND	int	cc;			/* CharChar value */
IND	int	cix;			/* Relative parse index */
IND	int	binx;			/* Buffer index */

cix = icix;				/* Init relative index */
binx = 0;				/* Init buffer index */
while (TRUE)				/* Get characters */
    {
    c = CMDgcc (CSBptr, cix);		/* Get char */
    if ((c & 0xff00) != 0)		/* If special */
	break;				/*  then we done. */

    cc = (cctbl[c/8]>>((7-(c%8))*2))&0x3;	/* Get cc value */
    if ((cc == 0)			/* Invalid char */
     || ((cc == 1) && (binx == 0)))	/*  or invalid first char */
	{
	c = _CCINV;			/* Return invalid char */
	break;				/* Go return */
	}

    if (cc == 3)			/* Break character */
	break;				/*  then break. */

    buf[binx++] = c;			/* Store the char */
    cix++;				/* Bump the parse index */
    }

buf[binx] = NUL;			/* NUL-terminate the buffer */
*ecptr = c;				/* Pass the ending char up */
return (cix);				/* Return the index. */
}
/*

*//* CMDspc (CSBptr)

	Parse past spaces

This routine skips past spaces which are after the current parse point,
and returns the relative parse index of the first non-space non-tab
character.


Accepts :

	CSBptr		Address of command state block


Returns :

	<value>		Relative parse index of first non-space non-tab char.

*/

CMDspc (CSBptr)

CSB		*CSBptr;		/* Addr of command state block */

{
IND	int	c;			/* Character */
IND	int	cix;			/* Command index */

cix = 0;				/* Set command index */
while (TRUE)				/* Skip spaces/tabs */
    {
    c = CMDgcc (CSBptr, cix);		/* Get char */
    if ((c != ' ') && (c != '\011'))
	break;				/* Quit when got something other */
    cix++;				/*  skip em */
    }

return (cix);				/* Return the value */
}
/*

*//* CMDgcc (CSBptr, cix)

	Return unparsed character.

This routine returns the "cix"th unparsed character from the command
line indicated by the command state block at CSBptr.


Accepts :

	CSBptr		Address of command state block
	cix		character index


Returns

	<value>		character @ cix, or special code _CCxxx, as
			 defined in "comndi.h"

*/

int CMDgcc (CSBptr, cix)

CSB		*CSBptr;		/* Command state block addr */
int		cix;			/* Character index */

{
IND	int	i;			/* Scratch */
IND	int	c;			/* character */

i = CSBptr -> CSB_PRS + cix;		/* Get buffer index */
if (i > CSBptr -> CSB_FLN)		/* If beyond filled space */
    return (_CCEND);			/*  return END indicator */
c = CSBptr -> CSB_BUF[i];		/* Get character there */
if (i < CSBptr -> CSB_FLN)		/* If within filled area */
    return (c);				/*  return it. */
switch (c)				/* Dispatch on char found at end */
    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
93久久精品日日躁夜夜躁欧美| 久久国产精品99久久久久久老狼| 久久香蕉国产线看观看99| 日本欧美大码aⅴ在线播放| 6080亚洲精品一区二区| 蜜桃av一区二区三区电影| 久久综合成人精品亚洲另类欧美| 国产福利91精品| 中文字幕一区三区| 91极品美女在线| 日产国产欧美视频一区精品 | 五月综合激情网| 欧美高清视频在线高清观看mv色露露十八 | 午夜精品aaa| 欧美tickling挠脚心丨vk| 国内久久婷婷综合| 亚洲天堂精品视频| 欧美午夜精品电影| 久久精品国产色蜜蜜麻豆| 国产精品色哟哟| 欧美区一区二区三区| 国产一区 二区 三区一级| 最新欧美精品一区二区三区| 欧美日韩国产不卡| 岛国精品在线播放| 亚洲成人综合网站| 毛片av中文字幕一区二区| 国产视频一区在线观看 | 亚洲成人免费在线观看| 精品对白一区国产伦| 99国产欧美久久久精品| 五月婷婷综合激情| 亚洲国产精品99久久久久久久久| 91国偷自产一区二区三区成为亚洲经典| 日韩国产在线一| 国产精品久久久久毛片软件| 91精品国产91久久综合桃花 | 色综合久久99| 激情久久五月天| 性感美女极品91精品| 国产日韩综合av| 日韩一区二区在线播放| 日本伦理一区二区| 国产成人三级在线观看| 日韩av不卡一区二区| 一区二区三区四区乱视频| 2021国产精品久久精品| 欧美日韩一卡二卡三卡| 成人av在线电影| 国产真实乱子伦精品视频| 亚洲国产一区二区视频| 国产精品色哟哟网站| 精品国产免费人成在线观看| 欧美少妇一区二区| 91小视频免费观看| 国产**成人网毛片九色| 蜜桃视频在线观看一区二区| 亚洲在线视频一区| 18欧美亚洲精品| 国产精品色呦呦| 国产亚洲一区二区三区四区| 日韩午夜在线观看视频| 欧美日韩高清一区二区| 日本乱人伦一区| 色嗨嗨av一区二区三区| av电影天堂一区二区在线观看| 欧美精品一二三| 欧美色欧美亚洲另类二区| 97se亚洲国产综合自在线| 成人中文字幕电影| 国产乱码精品一区二区三| 国内欧美视频一区二区| 久久精品国产77777蜜臀| 日本午夜一区二区| 美腿丝袜在线亚洲一区| 人人狠狠综合久久亚洲| 全部av―极品视觉盛宴亚洲| 日韩精品视频网站| 男女激情视频一区| 美女爽到高潮91| 激情亚洲综合在线| 国产成人精品免费视频网站| 国产凹凸在线观看一区二区| 粉嫩13p一区二区三区| 夫妻av一区二区| 波多野结衣欧美| 色欧美片视频在线观看在线视频| 91黄色在线观看| 欧美日韩精品一区二区天天拍小说| 欧美揉bbbbb揉bbbbb| 91精品啪在线观看国产60岁| 91精品国产日韩91久久久久久| 精品久久99ma| 国产女人aaa级久久久级| 中文字幕亚洲成人| 亚洲国产另类精品专区| 丝袜美腿亚洲综合| 国产在线国偷精品免费看| 成人黄色在线网站| 在线观看不卡一区| 91精品国产品国语在线不卡| 欧美精品一区二区三区一线天视频| 午夜a成v人精品| 韩国成人福利片在线播放| 国产成人午夜99999| 色婷婷久久99综合精品jk白丝| 欧美日韩电影一区| 久久久久久**毛片大全| 亚洲欧洲日韩在线| 日本成人在线电影网| 国产宾馆实践打屁股91| 欧美性猛片aaaaaaa做受| 3751色影院一区二区三区| 久久久久久久久免费| 伊人性伊人情综合网| 蜜臀av一级做a爰片久久| 成人午夜视频网站| 91精品中文字幕一区二区三区| 国产亚洲一本大道中文在线| 亚洲一区免费视频| 狠狠色综合日日| 在线精品视频免费观看| 久久综合九色综合欧美亚洲| 综合久久久久综合| 久久爱www久久做| 色吧成人激情小说| 久久综合精品国产一区二区三区 | 精品剧情v国产在线观看在线| 国产精品久久久久三级| 日韩精品欧美成人高清一区二区| 国产成人免费av在线| 9191久久久久久久久久久| 17c精品麻豆一区二区免费| 久久97超碰国产精品超碰| 欧美性受xxxx| 日韩一区日韩二区| 国产成人欧美日韩在线电影| 91麻豆精品国产91久久久久| 中文字幕中文字幕一区| 韩国精品免费视频| 日韩午夜激情视频| 亚洲午夜久久久久久久久电影网| 成人黄色一级视频| 久久久久久久久久电影| 日韩黄色小视频| 欧美亚洲一区二区在线| 最新不卡av在线| 国产成人午夜99999| 精品久久人人做人人爰| 日本乱人伦一区| 国产精品无码永久免费888| 久久草av在线| 日韩午夜精品电影| 日韩中文字幕亚洲一区二区va在线| 日本乱人伦aⅴ精品| 日韩理论电影院| www.综合网.com| 久久久精品人体av艺术| 黄网站免费久久| 精品成a人在线观看| 老司机一区二区| 精品国产乱码久久久久久夜甘婷婷| 日本大胆欧美人术艺术动态| 7777精品伊人久久久大香线蕉经典版下载| 亚洲最大的成人av| 欧美系列日韩一区| 亚洲国产美国国产综合一区二区| 在线视频国内自拍亚洲视频| 伊人色综合久久天天| 色欲综合视频天天天| 亚洲精品ww久久久久久p站| 91色.com| 亚洲图片一区二区| 91超碰这里只有精品国产| 视频在线在亚洲| 日韩一区二区三区电影| 久久99精品国产91久久来源| 精品少妇一区二区三区在线播放| 极品销魂美女一区二区三区| 久久一区二区三区四区| 高清成人免费视频| 中文字幕综合网| 在线观看一区日韩| 天天射综合影视| 精品剧情在线观看| 风间由美中文字幕在线看视频国产欧美| 欧美激情在线一区二区三区| av在线不卡免费看| 亚洲国产欧美在线人成| 日韩欧美精品在线| 亚洲一区二区免费视频| aaa欧美大片| 麻豆专区一区二区三区四区五区| 91精品国产色综合久久| 狠狠色狠狠色综合日日91app| 欧美国产国产综合| 在线欧美小视频| 麻豆91精品视频| 欧美日韩一卡二卡三卡| 天天影视涩香欲综合网|