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

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

?? tkfilefilter.c

?? NS2網絡仿真軟件是目前最為流行的網絡仿真模擬軟件
?? C
字號:
/* * tkFileFilter.c -- * *	Process the -filetypes option for the file dialogs on Windows and the *	Mac. * * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * RCS: @(#) $Id: tkFileFilter.c,v 1.5 2002/01/27 11:10:50 das Exp $ */#include "tkInt.h"#include "tkFileFilter.h"static int		AddClause _ANSI_ARGS_((			    Tcl_Interp * interp, FileFilter * filterPtr,			    CONST char * patternsStr, CONST char * ostypesStr,			    int isWindows));static void		FreeClauses _ANSI_ARGS_((FileFilter * filterPtr));static void		FreeGlobPatterns _ANSI_ARGS_((			    FileFilterClause * clausePtr));static void		FreeMacFileTypes _ANSI_ARGS_((			    FileFilterClause * clausePtr));static FileFilter *	GetFilter _ANSI_ARGS_((FileFilterList * flistPtr,			    CONST char * name));/* *---------------------------------------------------------------------- * * TkInitFileFilters -- * *	Initializes a FileFilterList data structure. A FileFilterList *	must be initialized EXACTLY ONCE before any calls to *	TkGetFileFilters() is made. The usual flow of control is: *		TkInitFileFilters(&flist); *		    TkGetFileFilters(&flist, ...); *		    TkGetFileFilters(&flist, ...); *		    ... *		TkFreeFileFilters(&flist); * * Results: *	None. * * Side effects: *	The fields in flistPtr are initialized. *---------------------------------------------------------------------- */voidTkInitFileFilters(flistPtr)    FileFilterList * flistPtr;	/* The structure to be initialized. */{    flistPtr->filters = NULL;    flistPtr->filtersTail = NULL;    flistPtr->numFilters = 0;}/* *---------------------------------------------------------------------- * * TkGetFileFilters -- * *	This function is called by the Mac and Windows implementation *	of tk_getOpenFile and tk_getSaveFile to translate the string *	value of the -filetypes option of into an easy-to-parse C *	structure (flistPtr). The caller of this function will then use *	flistPtr to perform filetype matching in a platform specific way. * *	flistPtr must be initialized (See comments in TkInitFileFilters). * * Results: *	A standard TCL return value. * * Side effects: *	The fields in flistPtr are changed according to string. *---------------------------------------------------------------------- */intTkGetFileFilters(interp, flistPtr, string, isWindows)    Tcl_Interp *interp;		/* Interpreter to use for error reporting. */    FileFilterList * flistPtr;	/* Stores the list of file filters. */    char * string;		/* Value of the -filetypes option. */    int isWindows;		/* True if we are running on Windows. */{    int listArgc;    CONST char ** listArgv = NULL;    CONST char ** typeInfo = NULL;    int code = TCL_OK;    int i;    if (Tcl_SplitList(interp, string, &listArgc, &listArgv) != TCL_OK) {	return TCL_ERROR;    }    if (listArgc == 0) {	goto done;    }    /*     * Free the filter information that have been allocated the previous     * time -- the -filefilters option may have been used more than once in     * the command line.     */    TkFreeFileFilters(flistPtr);    for (i = 0; i<listArgc; i++) {	/*	 * Each file type should have two or three elements: the first one	 * is the name of the type and the second is the filter of the type.	 * The third is the Mac OSType ID, but we don't care about them here.	 */	int count;	FileFilter * filterPtr;	if (Tcl_SplitList(interp, listArgv[i], &count, &typeInfo) != TCL_OK) {	    code = TCL_ERROR;	    goto done;	}		if (count != 2 && count != 3) {	    Tcl_AppendResult(interp, "bad file type \"", listArgv[i], "\", ",		"should be \"typeName {extension ?extensions ...?} ",		"?{macType ?macTypes ...?}?\"",	NULL);	    code = TCL_ERROR;	    goto done;	}	filterPtr = GetFilter(flistPtr, typeInfo[0]);	if (count == 2) {	    code = AddClause(interp, filterPtr, typeInfo[1], NULL,		isWindows);	} else {	    code = AddClause(interp, filterPtr, typeInfo[1], typeInfo[2],		isWindows);	}	if (code != TCL_OK) {	    goto done;	}        if (typeInfo) {	    ckfree((char*)typeInfo);	}	typeInfo = NULL;    }  done:    if (typeInfo) {       ckfree((char*)typeInfo);    }    if (listArgv) {	ckfree((char*)listArgv);    }    return code;}/* *---------------------------------------------------------------------- * * TkFreeFileFilters -- * *	Frees the malloc'ed file filter information. * * Results: *	None. * * Side effects: *	The fields allocated by TkGetFileFilters() are freed. *---------------------------------------------------------------------- */voidTkFreeFileFilters(flistPtr)    FileFilterList * flistPtr;	/* List of file filters to free */{    FileFilter * filterPtr, *toFree;    filterPtr=flistPtr->filters;    while (filterPtr) {	toFree = filterPtr;	filterPtr=filterPtr->next;	FreeClauses(toFree);	ckfree((char*)toFree->name);	ckfree((char*)toFree);    }    flistPtr->filters = NULL;}/* *---------------------------------------------------------------------- * * AddClause -- * *	Add one FileFilterClause to filterPtr. * * Results: *	A standard TCL result. * * Side effects: *	The list of filter clauses are updated in filterPtr. *---------------------------------------------------------------------- */static int AddClause(interp, filterPtr, patternsStr, ostypesStr, isWindows)    Tcl_Interp * interp;	/* Interpreter to use for error reporting. */    FileFilter * filterPtr;	/* Stores the new filter clause */    CONST char * patternsStr;		/* A TCL list of glob patterns. */    CONST char * ostypesStr;		/* A TCL list of Mac OSType strings. */    int isWindows;		/* True if we are running on Windows; False				 * if we are running on the Mac; Glob				 * patterns need to be processed differently				 * on these two platforms */{    CONST char ** globList = NULL;    int globCount;    CONST char ** ostypeList = NULL;    int ostypeCount=0;    FileFilterClause * clausePtr;    int i;    int code = TCL_OK;    if (Tcl_SplitList(interp, patternsStr, &globCount, &globList)!= TCL_OK) {	code = TCL_ERROR;	goto done;    }    if (ostypesStr != NULL) {	if (Tcl_SplitList(interp, ostypesStr, &ostypeCount, &ostypeList)		!= TCL_OK) {	    code = TCL_ERROR;	    goto done;	}	for (i=0; i<ostypeCount; i++) {	    if (strlen(ostypeList[i]) != 4) {		Tcl_AppendResult(interp, "bad Macintosh file type \"",		    ostypeList[i], "\"", NULL);		code = TCL_ERROR;		goto done;	    }	}    }    /*     * Add the clause into the list of clauses      */    clausePtr = (FileFilterClause*)ckalloc(sizeof(FileFilterClause));    clausePtr->patterns     = NULL;    clausePtr->patternsTail = NULL;    clausePtr->macTypes     = NULL;    clausePtr->macTypesTail = NULL;    if (filterPtr->clauses == NULL) {	filterPtr->clauses = filterPtr->clausesTail = clausePtr;    } else {	filterPtr->clausesTail->next = clausePtr;	filterPtr->clausesTail = clausePtr;    }    clausePtr->next = NULL;    if (globCount > 0 && globList != NULL) {	for (i=0; i<globCount; i++) {	    GlobPattern * globPtr = (GlobPattern*)ckalloc(sizeof(GlobPattern));	    int len;	    	    len = (strlen(globList[i]) + 1) * sizeof(char);	    if (globList[i][0] && globList[i][0] != '*') {		/*		 * Prepend a "*" to patterns that do not have a leading "*"		 */		globPtr->pattern = (char*)ckalloc((unsigned int) len+1);		globPtr->pattern[0] = '*';		strcpy(globPtr->pattern+1, globList[i]);	    }	    else if (isWindows) {		if (strcmp(globList[i], "*") == 0) {		    globPtr->pattern = (char*)ckalloc(4*sizeof(char));		    strcpy(globPtr->pattern, "*.*");		}		else if (strcmp(globList[i], "") == 0) {		    /*		     * An empty string means "match all files with no		     * extensions"		     * BUG: "*." actually matches with all files on Win95		     */		    globPtr->pattern = (char*)ckalloc(3*sizeof(char));		    strcpy(globPtr->pattern, "*.");		}		else {		    globPtr->pattern = (char*)ckalloc((unsigned int) len);		    strcpy(globPtr->pattern, globList[i]);		}	    } else {		globPtr->pattern = (char*)ckalloc((unsigned int) len);		strcpy(globPtr->pattern, globList[i]);	    }	    /*	     * Add the glob pattern into the list of patterns.	     */	    if (clausePtr->patterns == NULL) {		clausePtr->patterns = clausePtr->patternsTail = globPtr;	    } else {		clausePtr->patternsTail->next = globPtr;		clausePtr->patternsTail = globPtr;	    }	    globPtr->next = NULL;	}    }    if (ostypeCount > 0 && ostypeList != NULL) {	for (i=0; i<ostypeCount; i++) {	    MacFileType * mfPtr = (MacFileType*)ckalloc(sizeof(MacFileType));	    memcpy(&mfPtr->type, ostypeList[i], sizeof(OSType));	    /*	     * Add the Mac type pattern into the list of Mac types	     */	    if (clausePtr->macTypes == NULL) {		clausePtr->macTypes = clausePtr->macTypesTail = mfPtr;	    } else {		clausePtr->macTypesTail->next = mfPtr;		clausePtr->macTypesTail = mfPtr;	    }	    mfPtr->next = NULL;	}    }  done:    if (globList) {	ckfree((char*)globList);    }    if (ostypeList) {	ckfree((char*)ostypeList);    }    return code;}	/* *---------------------------------------------------------------------- * * GetFilter -- * *	Add one FileFilter to flistPtr. * * Results: *	A standard TCL result. * * Side effects: *	The list of filters are updated in flistPtr. *---------------------------------------------------------------------- */static FileFilter * GetFilter(flistPtr, name)    FileFilterList * flistPtr;	/* The FileFilterList that contains the				 * newly created filter */    CONST char * name;		/* Name of the filter. It is usually displayed				 * in the "File Types" listbox in the file				 * dialogs. */{    FileFilter * filterPtr;    for (filterPtr=flistPtr->filters; filterPtr; filterPtr=filterPtr->next) {	if (strcmp(filterPtr->name, name)==0) {	    return filterPtr;	}    }    filterPtr = (FileFilter*)ckalloc(sizeof(FileFilter));    filterPtr->clauses = NULL;    filterPtr->clausesTail = NULL;    filterPtr->name = (char*)ckalloc((strlen(name)+1) * sizeof(char));    strcpy(filterPtr->name, name);    if (flistPtr->filters == NULL) {	flistPtr->filters = flistPtr->filtersTail = filterPtr;    } else {	flistPtr->filtersTail->next = filterPtr;	flistPtr->filtersTail = filterPtr;    }    filterPtr->next = NULL;    ++flistPtr->numFilters;    return filterPtr;}/* *---------------------------------------------------------------------- * * FreeClauses -- * *	Frees the malloc'ed file type clause * * Results: *	None. * * Side effects: *	The list of clauses in filterPtr->clauses are freed. *---------------------------------------------------------------------- */static voidFreeClauses(filterPtr)    FileFilter * filterPtr;	/* FileFilter whose clauses are to be freed */{    FileFilterClause * clausePtr, * toFree;    clausePtr = filterPtr->clauses;    while (clausePtr) {	toFree = clausePtr;	clausePtr=clausePtr->next;	FreeGlobPatterns(toFree);	FreeMacFileTypes(toFree);	ckfree((char*)toFree);    }    filterPtr->clauses = NULL;    filterPtr->clausesTail = NULL;}/* *---------------------------------------------------------------------- * * FreeGlobPatterns -- * *	Frees the malloc'ed glob patterns in a clause * * Results: *	None. * * Side effects: *	The list of glob patterns in clausePtr->patterns are freed. *---------------------------------------------------------------------- */static voidFreeGlobPatterns(clausePtr)    FileFilterClause * clausePtr;/* The clause whose patterns are to be freed*/{    GlobPattern * globPtr, * toFree;    globPtr = clausePtr->patterns;    while (globPtr) {	toFree = globPtr;	globPtr=globPtr->next;	ckfree((char*)toFree->pattern);	ckfree((char*)toFree);    }    clausePtr->patterns = NULL;}/* *---------------------------------------------------------------------- * * FreeMacFileTypes -- * *	Frees the malloc'ed Mac file types in a clause * * Results: *	None. * * Side effects: *	The list of Mac file types in clausePtr->macTypes are freed. *---------------------------------------------------------------------- */static voidFreeMacFileTypes(clausePtr)    FileFilterClause * clausePtr;  /* The clause whose mac types are to be				    * freed */{    MacFileType * mfPtr, * toFree;    mfPtr = clausePtr->macTypes;    while (mfPtr) {	toFree = mfPtr;	mfPtr=mfPtr->next;	ckfree((char*)toFree);    }    clausePtr->macTypes = NULL;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品一区二区在线播放| 精品亚洲国内自在自线福利| 麻豆一区二区在线| 日韩欧美激情四射| 国产一区二区精品久久99| 日本一区二区在线不卡| 99这里都是精品| 亚洲观看高清完整版在线观看 | 欧美一区二区二区| 国产乱人伦精品一区二区在线观看| 国产欧美一区二区三区沐欲 | 成年人国产精品| 欧美aⅴ一区二区三区视频| 国产欧美一区在线| 欧美国产成人精品| 日韩欧美的一区| 久久久不卡网国产精品二区| 欧美在线高清视频| 国产 日韩 欧美大片| 亚洲 欧美综合在线网络| 中国色在线观看另类| 色婷婷av一区二区三区gif | 国产校园另类小说区| 欧美三级电影网| 99精品黄色片免费大全| 国产麻豆精品在线| 99综合电影在线视频| 欧美视频一区二区三区| 97久久精品人人澡人人爽| 欧美午夜理伦三级在线观看| 日韩你懂的在线播放| 国产精品欧美精品| 日韩av一区二区三区| 亚洲国产欧美在线| 国产在线日韩欧美| 国产一区欧美一区| 色爱区综合激月婷婷| aaa欧美色吧激情视频| 欧美日韩国产123区| 国产欧美视频在线观看| 亚洲成av人影院| 成人国产电影网| 日韩视频永久免费| 亚洲精品在线观看网站| 正在播放亚洲一区| 91精品婷婷国产综合久久性色| 国产欧美日韩在线视频| 午夜精品一区二区三区电影天堂| 亚洲高清不卡在线| 成人sese在线| 久久综合色婷婷| 国产婷婷色一区二区三区在线| 亚洲电影你懂得| 波多野结衣一区二区三区| 欧美不卡一二三| 国产三级久久久| 老汉av免费一区二区三区| 国产一区二区三区四区五区入口| 欧美中文字幕一区二区三区亚洲| 中文字幕第一区二区| 久久草av在线| 欧美高清视频一二三区| 久久综合久久鬼色中文字| 日韩中文欧美在线| 国内不卡的二区三区中文字幕| 欧美日韩久久一区二区| 亚洲天堂成人网| 午夜精品久久久久| 色天天综合久久久久综合片| 国产精品视频看| 成人黄色网址在线观看| 欧美韩国一区二区| 丰满亚洲少妇av| 国产人成亚洲第一网站在线播放| 狠狠色狠狠色综合系列| 日韩精品中文字幕一区二区三区| 欧美aⅴ一区二区三区视频| 欧美日韩一区三区| 日韩激情一区二区| 日韩一级欧美一级| 麻豆91小视频| 久久精品视频一区| 东方aⅴ免费观看久久av| 中文字幕国产一区| 91视频免费观看| 337p粉嫩大胆噜噜噜噜噜91av| 免费av网站大全久久| 欧美xxxxx牲另类人与| 免费看精品久久片| 久久久99免费| av在线这里只有精品| 亚洲欧美日韩国产另类专区| 免费人成网站在线观看欧美高清| 91精品久久久久久久久99蜜臂| 久久国内精品视频| 国产欧美日韩在线看| 91美女视频网站| 亚洲va在线va天堂| 欧美哺乳videos| 99视频精品免费视频| 亚洲国产视频一区二区| 日韩午夜av电影| 成人激情av网| 天堂成人免费av电影一区| 精品va天堂亚洲国产| av电影在线观看一区| 香蕉av福利精品导航| 久久免费午夜影院| 欧美伊人精品成人久久综合97 | 国产电影一区二区三区| 欧美精品123区| 国产高清精品久久久久| 亚洲最快最全在线视频| 97久久精品人人爽人人爽蜜臀| 天堂久久一区二区三区| 国产欧美日韩麻豆91| 欧美巨大另类极品videosbest| 国产一区二区三区香蕉| 亚洲一二三四区| 欧洲一区在线观看| 国产麻豆午夜三级精品| 亚洲一区二区影院| 国产色一区二区| 51久久夜色精品国产麻豆| 不卡电影一区二区三区| 久久99深爱久久99精品| 亚洲综合自拍偷拍| 国产精品久久久久婷婷| 丰满亚洲少妇av| 久久精品国产久精国产| 亚洲国产乱码最新视频| 亚洲国产成人午夜在线一区| 9191成人精品久久| 欧美中文字幕一二三区视频| 国产成人精品综合在线观看| 日本一区中文字幕| 亚洲一二三四久久| 日韩毛片精品高清免费| 欧美国产成人精品| 久久精品亚洲麻豆av一区二区 | 成人性生交大片免费看中文| 中文字幕欧美三区| 精品久久久久久久久久久久包黑料 | 日本免费在线视频不卡一不卡二| 中文一区二区在线观看| xnxx国产精品| 精品国产凹凸成av人网站| 欧美一区二区三区免费大片| 欧美性videosxxxxx| 色菇凉天天综合网| 欧美伊人精品成人久久综合97| 91网站在线观看视频| 99精品国产91久久久久久| 不卡av在线网| 成人福利电影精品一区二区在线观看 | 亚洲人xxxx| 亚洲激情中文1区| 日韩欧美一区电影| 日韩免费高清视频| 精品少妇一区二区三区免费观看| 欧美精品123区| 日韩精品专区在线影院观看| 精品久久99ma| 欧美激情综合五月色丁香| 欧美韩国日本不卡| 亚洲视频一二三| 亚洲国产日韩av| 蜜桃一区二区三区在线观看| 国产一区二区电影| caoporn国产精品| 欧美视频一区二区在线观看| 欧美一级电影网站| 久久久青草青青国产亚洲免观| 国产欧美一区二区精品婷婷 | 欧美专区亚洲专区| 制服丝袜av成人在线看| 欧美精品一区二区三区蜜臀| 国产亚洲欧美激情| 夜夜操天天操亚洲| 美女网站视频久久| 不卡一区二区三区四区| 欧美视频你懂的| 26uuu亚洲婷婷狠狠天堂| 亚洲欧美综合在线精品| 欧美精品一区二区三区很污很色的 | 卡一卡二国产精品| 成人激情小说网站| 欧美精品久久一区| 中文字幕免费不卡| 天天操天天色综合| 成人性生交大合| 69成人精品免费视频| 国产精品亲子乱子伦xxxx裸| 亚洲电影第三页| 懂色av中文字幕一区二区三区| 欧美日韩三级视频| 中国av一区二区三区| 麻豆91在线播放| 精品视频999| 国产精品久久久久三级|