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

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

?? qvinput.cpp

?? Windows上的MUD客戶端程序
?? CPP
字號:
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <QvInput.h>
#include <QvDebugError.h>
#include <QvReadError.h>
#include <QvNode.h>

#define CURVERSION 1.0 			// Current version of file format
#define COMMENT_CHAR '#'

static const int numValidASCIIHeaders = 2;
struct headerStorage 
{
    const char *string;
    float version;
};

static const headerStorage ASCIIHeader[] = {
    { "#VRML V1.0 ascii",	/* 20 chars */ 1.0 },
    { "#VRML V1.1 ascii",	/* 20 chars */ 1.1 },
};

float
QvInput::isASCIIHeader(const char *string)
{
    for (int i = 0; i < numValidASCIIHeaders; i++) {
	if (strncmp(ASCIIHeader[i].string, string, strlen(ASCIIHeader[i].string)) == 0)
	    return ASCIIHeader[i].version;
    }
    return FALSE;
}

QvInput::QvInput()
{
	#if !defined(CH_ARCH_16)
    setFilePointer(stdin);
	#else
    setFilePointer(0);
	#endif
	// Added by VSP
	SetAsyncNotificationInfo( 0 );
}

QvInput::~QvInput()
{
}

void
QvInput::setFilePointer(FILE *newFP)
{
    fp = newFP;
    lineNum = 1;
    version = CURVERSION;
    readHeader = FALSE;
    headerOk = TRUE;
    backBufIndex = -1;		
}

float
QvInput::getVersion()
{
    if (! readHeader)
	(void) checkHeader();

    return version;
}

QvBool
QvInput::get(char &c)
{
    QvBool ret;

    if (backBufIndex >= 0) {
	c = backBuf.getString()[backBufIndex++];

	if (c != '\0')
	    return TRUE;

	backBuf.makeEmpty();
	backBufIndex = -1;
    }

    if (! readHeader && ! checkHeader())
	return FALSE;

    if (eof()) {
	c = (char)EOF;
	ret = FALSE;
    }

    else {
	int i = getc(fp);

	if (i == EOF) {
	    c = (char)EOF;
	    ret = FALSE;
	}
	else {
	    c = (char) i;
	    ret = TRUE;
	}
    }

    return ret;
}

QvBool
QvInput::read(char &c)
{
    return (skipWhiteSpace() && get(c));
}

QvBool
QvInput::read(QvString &s)
{
    if (! skipWhiteSpace())
	return FALSE;

    QvBool      quoted;
    char        c;
    char        bufStore[256];
    char        *buf;
    int         bytesLeft;

    s.makeEmpty();

    if (! get(c))
	return FALSE;

	if(c == '}')
	{
		s = "}";
		return TRUE;	  // To handle trailing } on strings- } is a string by itself
	}

    quoted = (c == '\"');
    if (! quoted)
	putBack(c);

    do {
	buf       = bufStore;
	bytesLeft = sizeof(bufStore) - 1;

	while (bytesLeft > 0) {

	    if (! get(*buf))
		break;

	    if (quoted) {
			if (*buf == '\"')
			    break;


			if (*buf == '\\') {
			    if ((get(c)) && c == '\"')
				*buf = '\"';
			    else
				putBack(c);
			}

			if (*buf == '\n' || *buf == '\r')
			{
			    lineNum++;
				if(*buf == '\r')			// mac vs. pc
				{
					get(c);
					if( c != '\n') putBack(c);
					*buf = '\n';	   // change to \n -always-
				}
			}
	    }

	    else
	    {
		    if (isspace(*buf))
		    {
				putBack(*buf);
				break;
			}
			if (*buf == '}')	// jwd so we can skip over abc} in unknowns and so
			{					// { string abc} is legal
				putBack(*buf);
			    break;			
			}
	    }

	    buf++;
	    bytesLeft--;
	}
	*buf = '\0';

	s += bufStore;

    } while (bytesLeft == 0);

    return TRUE;
}

QvBool
QvInput::read(QvName &n, QvBool validIdent)
{
    QvBool	gotChar;

    if (! skipWhiteSpace())
	return FALSE;

    if (! validIdent) {
	QvString s;

	if (! read(s))
	    return FALSE;

	n = s;
    }

    else {
	char	buf[256];
	char	*b = buf;
	char	c;

	if ((gotChar = get(c)) && QvName::isIdentStartChar(c)) {
	    *b++ = c;

	    while ((gotChar = get(c)) && QvName::isIdentChar(c)) {
		if (b - buf < 255)
		    *b++ = c;
	    }
	}
	*b = '\0';

	if (gotChar)
	    putBack(c);

	n = buf;
    }

    return TRUE;
}

#define READ_NUM(reader, readType, num, type)				      \
    QvBool ok;								      \
    if (! skipWhiteSpace())						      \
    ok = FALSE;								      \
    else {								      \
	readType _tmp;							      \
	ok = reader(_tmp);						      \
	if (ok)								      \
	    num = (type) _tmp;						      \
    }									      \
    return ok

#define READ_INTEGER(num, type)						      \
    READ_NUM(readInteger, long, num, type)

#define READ_UNSIGNED_INTEGER(num, type)				      \
    READ_NUM(readUnsignedInteger, unsigned long, num, type)

#define READ_REAL(num, type)						      \
    READ_NUM(readReal, double, num, type)

QvBool
QvInput::read(int &i)
{
    READ_INTEGER(i, int);
}

QvBool
QvInput::read(unsigned int &i)
{
    READ_UNSIGNED_INTEGER(i, unsigned int);
}

QvBool
QvInput::read(short &s)
{
    READ_INTEGER(s, short);
}

QvBool
QvInput::read(unsigned short &s)
{
    READ_UNSIGNED_INTEGER(s, unsigned short);
}

QvBool
QvInput::read(long &l)
{
    READ_INTEGER(l, long);
}

QvBool
QvInput::read(unsigned long &l)
{
    READ_UNSIGNED_INTEGER(l, unsigned long);
}

QvBool
QvInput::read(float &f)
{
    READ_REAL(f, float);
}

QvBool
QvInput::read(double &d)
{
    READ_REAL(d, double);
}

QvBool
QvInput::eof() const
{
    return feof(fp);
}

void
QvInput::getLocationString(QvString &string) const
{
    char buf[128];
    sprintf(buf, "\tOccurred at line %3d", lineNum);
    string = buf;
}

void
QvInput::putBack(char c)
{
    if (c == (char) EOF)
	return;

    if (backBufIndex >= 0)
	--backBufIndex;
    else
	ungetc(c, fp);
}

void
QvInput::putBack(const char *string)
{
    backBuf = string;
    backBufIndex = 0;
}

QvBool
QvInput::checkHeader()
{
    char	c;

    readHeader = TRUE;

    if (get(c)) {
    	if (c == COMMENT_CHAR) {
	    char	buf[256];
	    int		i = 0;

		// JWD 12/11/95 to handle mac files
		// JWD 4/3/96 - to fix Eric's noEOL bug.
	    buf[i++] = c;
	    while (get(c) && c != '\n' && c != '\r' && i < 255)
		{
			buf[i++] = c;
		}
	    buf[i] = '\0';
	    if (c == '\n' || c == '\r')
		{
			lineNum++;
		}
		if(c == '\r')			// mac vs. pc
		{
			get(c);
			if( c != '\n') putBack(c);
		}

	    if ((version = isASCIIHeader(buf)))
		return TRUE;
	}

	else
	    putBack(c);
    }

    QvReadError::post(this, "File does not have a valid header string");
    headerOk = FALSE;
    return FALSE;
}

QvBool
QvInput::skipWhiteSpace()
{
    char	c;
    QvBool	gotChar;

    if (! readHeader && ! checkHeader())
	return FALSE;

    while (TRUE) {
						   // JWD : added mac code for \r only
	while ((gotChar = get(c)) && isspace(c))
	{
	    if (c == '\n' || c == '\r')
		lineNum++;
		if(c == '\r')		  // mac vs. pc
		{
			get(c);
			if( c != '\n') putBack(c);
		}
	}
	if (! gotChar)
	    break;

	if (c == COMMENT_CHAR) {
	    while (get(c) && c != '\n' && c != '\r')
		;
		if(c == '\r')			  // mac vs. pc
		{
			get(c);
			if( c != '\n') putBack(c);
		}

	    if (eof())
		{
	//	QvReadError::post(this, "EOF reached before end of comment"); jwd: why the hell do this??
		}
	    else
		lineNum++;
	}
	else {
	    putBack(c);
	    break;				    }
    }

    return TRUE;
}

QvBool
QvInput::readInteger(long &l)
{
    char str[32];
    char *s = str;

    if (readChar(s, '-') || readChar(s, '+'))
	s++;

    if (! readUnsignedIntegerString(s))
	return FALSE;

    l = strtol(str, NULL, 0);

    return TRUE;
}

QvBool
QvInput::readUnsignedInteger(unsigned long &l)
{
    char	str[32];		
    if (! readUnsignedIntegerString(str))
	return FALSE;

    l = strtoul(str, NULL, 0);

    return TRUE;
}

QvBool
QvInput::readUnsignedIntegerString(char *str)
{
    int  minSize = 1;
    char *s = str;

    if (readChar(s, '0')) {

	if (readChar(s + 1, 'x')) {
	    s += 2 + readHexDigits(s + 2);
	    minSize = 3;
	}

	else
	    s += 1 + readDigits(s + 1);
    }

    else
	s += readDigits(s);

    if (s - str < minSize)
	return FALSE;

    *s = '\0';

    return TRUE;
}

QvBool
QvInput::readReal(double &d)
{
    char	str[32];
    int		n;
    char	*s = str;
    QvBool	gotNum = FALSE;

    n = readChar(s, '-');
    if (n == 0)
	n = readChar(s, '+');
    s += n;

    if ((n = readDigits(s)) > 0) {
	gotNum = TRUE;
	s += n;
    }

    if (readChar(s, '.') > 0) {
	s++;

	if ((n = readDigits(s)) > 0) {
	    gotNum = TRUE;
	    s += n;
	}
    }

    if (! gotNum)
	return FALSE;

    n = readChar(s, 'e');
    if (n == 0)
	n = readChar(s, 'E');

    if (n > 0) {
	s += n;

	n = readChar(s, '-');
	if (n == 0)
	    n = readChar(s, '+');
	s += n;

	if ((n = readDigits(s)) > 0)
	    s += n;

	else
	    return FALSE;		    }

    *s = '\0';

    d = atof(str);

    return TRUE;
}

int
QvInput::readDigits(char *string)
{
    char c, *s = string;

    while (get(c)) {

	if (isdigit(c))
	    *s++ = c;

	else {
	    putBack(c);
	    break;
	}
    }

    return s - string;
}

int
QvInput::readHexDigits(char *string)
{
    char c, *s = string;

    while (get(c)) {

	if (isxdigit(c))
	    *s++ = c;

	else {
	    putBack(c);
	    break;
	}
    }

    return s - string;
}

int
QvInput::readChar(char *string, char charToRead)
{
    char	c;
    int		ret;

    if (! get(c))
	ret = 0;

    else if (c == charToRead) {
	*string = c;
	ret = 1;
    }

    else {
	putBack(c);
	ret = 0;
    }

    return ret;
}

void
QvInput::addReference(const QvName &name, QvNode *node)
{
    refDict.enter((u_long) name.getString(), (void *) node);

    node->setName(name);
}

QvNode *
QvInput::findReference(const QvName &name) const
{
    void	*node;

    if (refDict.find((u_long) name.getString(), node))
	return (QvNode *) node;

    return NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91丝袜在线观看| 欧美在线一二三| 色哟哟在线观看一区二区三区| 欧美日韩免费电影| 国产精品网站导航| 国产丶欧美丶日本不卡视频| 欧美日本国产一区| 国产精品激情偷乱一区二区∴| 美女脱光内衣内裤视频久久网站 | 欧美国产乱子伦 | 欧美一区二区视频观看视频| 亚洲美女视频在线观看| 成人午夜视频在线观看| 91精品国产91久久久久久最新毛片| 一区二区三区四区亚洲| 91片黄在线观看| 久久精品人人做人人爽97| 蜜桃久久久久久久| 欧美一区日本一区韩国一区| 亚洲v日本v欧美v久久精品| 91丨国产丨九色丨pron| 一区免费观看视频| av一二三不卡影片| 中文字幕欧美国产| 成人黄页在线观看| 日本一区二区综合亚洲| 国产精品正在播放| 久久久久九九视频| 岛国av在线一区| 亚洲精品一区二区三区影院| 麻豆91精品视频| 欧美变态凌虐bdsm| 久久99久国产精品黄毛片色诱| 欧美丰满美乳xxx高潮www| 亚洲成人动漫在线免费观看| 欧美日韩专区在线| 日韩黄色片在线观看| 91精品婷婷国产综合久久性色| 婷婷夜色潮精品综合在线| 欧美日本国产视频| 九一九一国产精品| 日本一区二区视频在线观看| 成人午夜激情视频| 亚洲精品一二三四区| 欧美特级限制片免费在线观看| 亚洲一区二区精品视频| 777久久久精品| 国产精品77777竹菊影视小说| 国产亚洲精品中文字幕| 91麻豆视频网站| 亚洲18女电影在线观看| 精品嫩草影院久久| 成人丝袜视频网| 亚洲资源中文字幕| 日韩三级.com| youjizz久久| 日韩精品91亚洲二区在线观看 | 日本久久电影网| 天堂久久一区二区三区| 精品国产sm最大网站| 成人午夜免费av| 亚洲成va人在线观看| 久久久三级国产网站| 欧美自拍丝袜亚洲| 韩国av一区二区| 亚洲黄色尤物视频| 精品国产91洋老外米糕| 在线观看三级视频欧美| 国产综合色在线视频区| 亚洲精品久久久久久国产精华液| 欧美一区二区三区在线看| 99久久精品久久久久久清纯| 天堂va蜜桃一区二区三区漫画版| 久久久久久电影| 欧美裸体一区二区三区| 国产99久久久国产精品潘金| 丝袜美腿亚洲综合| 综合久久久久综合| 久久久91精品国产一区二区三区| 欧美性xxxxxx少妇| 成人综合婷婷国产精品久久蜜臀| 亚洲不卡av一区二区三区| 国产精品麻豆视频| 日韩精品一区二区三区视频播放 | 激情久久五月天| 一区二区三区日韩| 国产午夜精品一区二区| 欧美一区二区三区在| 色狠狠av一区二区三区| 国产白丝网站精品污在线入口| 青青草97国产精品免费观看| 亚洲精品欧美在线| 中文字幕一区二区三区精华液| 精品91自产拍在线观看一区| 欧美久久一区二区| 色香蕉成人二区免费| 不卡视频在线观看| 国产福利精品一区| 国产最新精品免费| 久久国产尿小便嘘嘘尿| 免费在线看成人av| 午夜私人影院久久久久| 一区二区三区影院| 亚洲欧美色一区| 亚洲欧美日本在线| 中文字幕亚洲电影| 国产精品久久久久久一区二区三区| 精品国产伦一区二区三区观看方式| 欧美日产国产精品| 欧美日韩精品一区视频| 欧美日韩一二三区| 欧美在线免费播放| 欧美视频中文一区二区三区在线观看| 99re66热这里只有精品3直播| 成人手机在线视频| 99re8在线精品视频免费播放| www.欧美.com| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩国产首页| 欧美美女喷水视频| 6080亚洲精品一区二区| 日韩一区二区高清| 精品成人一区二区三区四区| 久久久久久久久久看片| 国产午夜精品久久久久久免费视 | 视频一区欧美精品| 麻豆精品在线看| 国产精品综合在线视频| 成人app网站| 色哟哟在线观看一区二区三区| 欧美三级韩国三级日本一级| 在线播放欧美女士性生活| 欧美一区二区三区视频在线 | 欧美夫妻性生活| 精品国产乱码久久| 亚洲日本丝袜连裤袜办公室| 亚洲最快最全在线视频| 日韩电影一区二区三区四区| 国内成+人亚洲+欧美+综合在线| 国产主播一区二区三区| av男人天堂一区| 欧美色图在线观看| 欧美精品一区二区三区很污很色的| 国产网红主播福利一区二区| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲欧美色图小说| 免费高清不卡av| www.色综合.com| 欧美一级久久久久久久大片| 国产日韩欧美精品综合| 亚洲影院免费观看| 精品一区二区在线播放| 成人av在线播放网址| 欧美喷潮久久久xxxxx| 国产片一区二区| 亚洲va欧美va人人爽| 国内精品国产三级国产a久久| 91蝌蚪porny| 久久综合色天天久久综合图片| 亚洲男人天堂av网| 国产伦理精品不卡| 欧美日韩一区二区三区四区五区| 久久久久久毛片| 亚洲在线观看免费| 成人涩涩免费视频| 日韩午夜小视频| 亚洲精品国产一区二区精华液| 男女激情视频一区| 91偷拍与自偷拍精品| 2欧美一区二区三区在线观看视频| 樱桃视频在线观看一区| 国产大陆精品国产| 精品久久久久一区二区国产| 亚洲一区二区精品视频| 成人免费看的视频| 欧美xxxx老人做受| 天天操天天干天天综合网| 91在线观看一区二区| 久久婷婷国产综合国色天香| 秋霞影院一区二区| 欧美三级三级三级| 亚洲精品免费播放| av高清不卡在线| 欧美激情在线看| 国产呦精品一区二区三区网站| 欧美一区二区三区免费| 亚洲高清视频的网址| 欧洲国内综合视频| 一区二区三区产品免费精品久久75| 国产宾馆实践打屁股91| 久久久精品综合| 国内精品免费**视频| 久久午夜老司机| 国产一区二区三区四区五区入口| 欧美一区二区免费| 蜜臀精品一区二区三区在线观看| 欧美揉bbbbb揉bbbbb| 日韩国产高清影视| 欧美精品 日韩| 久久国产生活片100|