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

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

?? pval.c

?? asterisk 是一個很有知名度開源軟件
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* * Asterisk -- An open source telephony toolkit. * * Copyright (C) 2006, Digium, Inc. * * Steve Murphy <murf@parsetree.com> * * See http://www.asterisk.org for more information about * the Asterisk project. Please do not directly contact * any of the maintainers of this project for assistance; * the project provides a web site, mailing lists and IRC * channels for your use. * * This program is free software, distributed under the terms of * the GNU General Public License Version 2. See the LICENSE file * at the top of the source tree. *//*! \file * * \brief Compile symbolic Asterisk Extension Logic into Asterisk extensions, version 2. *  */#include "asterisk.h"ASTERISK_FILE_VERSION(__FILE__, "$Revision: 168747 $")#include <sys/types.h>#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <regex.h>#include <sys/stat.h>#include "asterisk/pbx.h"#include "asterisk/config.h"#include "asterisk/module.h"#include "asterisk/logger.h"#include "asterisk/cli.h"#include "asterisk/app.h"#include "asterisk/channel.h"#include "asterisk/callerid.h"#include "asterisk/pval.h"#include "asterisk/ael_structs.h"#ifdef AAL_ARGCHECK#include "asterisk/argdesc.h"#endif#include "asterisk/utils.h"extern int localized_pbx_load_module(void);static char expr_output[2096];#define AST_PBX_MAX_STACK  128/* these functions are in ../ast_expr2.fl */static int errs, warns;static int notes;#ifdef STANDALONEstatic int extensions_dot_conf_loaded = 0;#endifstatic char *registrar = "pbx_ael";static pval *current_db;static pval *current_context;static pval *current_extension;static const char *match_context;static const char *match_exten;static const char *match_label;static int in_abstract_context;static int count_labels; /* true, put matcher in label counting mode */static int label_count;  /* labels are only meant to be counted in a context or exten */static int return_on_context_match;static pval *last_matched_label;struct pval *match_pval(pval *item);static void check_timerange(pval *p);static void check_dow(pval *DOW);static void check_day(pval *DAY);static void check_month(pval *MON);static void check_expr2_input(pval *expr, char *str);static int extension_matches(pval *here, const char *exten, const char *pattern);static void check_goto(pval *item);static void find_pval_goto_item(pval *item, int lev);static void find_pval_gotos(pval *item, int lev);static int check_break(pval *item);static int check_continue(pval *item);static void check_label(pval *item);static void check_macro_returns(pval *macro);static struct pval *find_label_in_current_context(char *exten, char *label, pval *curr_cont);static struct pval *find_first_label_in_current_context(char *label, pval *curr_cont);static void print_pval_list(FILE *fin, pval *item, int depth);static struct pval *find_label_in_current_extension(const char *label, pval *curr_ext);static struct pval *find_label_in_current_db(const char *context, const char *exten, const char *label);static pval *get_goto_target(pval *item);static int label_inside_case(pval *label);static void attach_exten(struct ael_extension **list, struct ael_extension *newmem);static void fix_gotos_in_extensions(struct ael_extension *exten);static pval *get_extension_or_contxt(pval *p);static pval *get_contxt(pval *p);static void remove_spaces_before_equals(char *str);/* PRETTY PRINTER FOR AEL:  ============================================================================= */static void print_pval(FILE *fin, pval *item, int depth){	int i;	pval *lp;		for (i=0; i<depth; i++) {		fprintf(fin, "\t"); /* depth == indentation */	}		switch ( item->type ) {	case PV_WORD:		fprintf(fin,"%s;\n", item->u1.str); /* usually, words are encapsulated in something else */		break;			case PV_MACRO:		fprintf(fin,"macro %s(", item->u1.str);		for (lp=item->u2.arglist; lp; lp=lp->next) {			if (lp != item->u2.arglist )				fprintf(fin,", ");			fprintf(fin,"%s", lp->u1.str);		}		fprintf(fin,") {\n");		print_pval_list(fin,item->u3.macro_statements,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n\n");		break;				case PV_CONTEXT:		if ( item->u3.abstract )			fprintf(fin,"abstract context %s {\n", item->u1.str);		else			fprintf(fin,"context %s {\n", item->u1.str);		print_pval_list(fin,item->u2.statements,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n\n");		break;				case PV_MACRO_CALL:		fprintf(fin,"&%s(", item->u1.str);		for (lp=item->u2.arglist; lp; lp=lp->next) {			if ( lp != item->u2.arglist )				fprintf(fin,", ");			fprintf(fin,"%s", lp->u1.str);		}		fprintf(fin,");\n");		break;				case PV_APPLICATION_CALL:		fprintf(fin,"%s(", item->u1.str);		for (lp=item->u2.arglist; lp; lp=lp->next) {			if ( lp != item->u2.arglist )				fprintf(fin,",");			fprintf(fin,"%s", lp->u1.str);		}		fprintf(fin,");\n");		break;				case PV_CASE:		fprintf(fin,"case %s:\n", item->u1.str);		print_pval_list(fin,item->u2.statements, depth+1);		break;				case PV_PATTERN:		fprintf(fin,"pattern %s:\n", item->u1.str);		print_pval_list(fin,item->u2.statements, depth+1);		break;				case PV_DEFAULT:		fprintf(fin,"default:\n");		print_pval_list(fin,item->u2.statements, depth+1);		break;				case PV_CATCH:		fprintf(fin,"catch %s {\n", item->u1.str);		print_pval_list(fin,item->u2.statements, depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n");		break;				case PV_SWITCHES:		fprintf(fin,"switches {\n");		print_pval_list(fin,item->u1.list,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n");		break;				case PV_ESWITCHES:		fprintf(fin,"eswitches {\n");		print_pval_list(fin,item->u1.list,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n");		break;				case PV_INCLUDES:		fprintf(fin,"includes {\n");		for (lp=item->u1.list; lp; lp=lp->next) {			for (i=0; i<depth+1; i++) {				fprintf(fin,"\t"); /* depth == indentation */			}			fprintf(fin,"%s", lp->u1.str); /* usually, words are encapsulated in something else */			if (lp->u2.arglist)				fprintf(fin,"|%s|%s|%s|%s", 						lp->u2.arglist->u1.str,						lp->u2.arglist->next->u1.str,						lp->u2.arglist->next->next->u1.str,						lp->u2.arglist->next->next->next->u1.str					);			fprintf(fin,";\n"); /* usually, words are encapsulated in something else */		}				for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"};\n");		break;				case PV_STATEMENTBLOCK:		fprintf(fin,"{\n");		print_pval_list(fin,item->u1.list, depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"}\n");		break;				case PV_VARDEC:		fprintf(fin,"%s=%s;\n", item->u1.str, item->u2.val);		break;				case PV_LOCALVARDEC:		fprintf(fin,"local %s=%s;\n", item->u1.str, item->u2.val);		break;				case PV_GOTO:		fprintf(fin,"goto %s", item->u1.list->u1.str);		if ( item->u1.list->next )			fprintf(fin,",%s", item->u1.list->next->u1.str);		if ( item->u1.list->next && item->u1.list->next->next )			fprintf(fin,",%s", item->u1.list->next->next->u1.str);		fprintf(fin,"\n");		break;				case PV_LABEL:		fprintf(fin,"%s:\n", item->u1.str);		break;				case PV_FOR:		fprintf(fin,"for (%s; %s; %s)\n", item->u1.for_init, item->u2.for_test, item->u3.for_inc);		print_pval_list(fin,item->u4.for_statements,depth+1);		break;				case PV_WHILE:		fprintf(fin,"while (%s)\n", item->u1.str);		print_pval_list(fin,item->u2.statements,depth+1);		break;				case PV_BREAK:		fprintf(fin,"break;\n");		break;				case PV_RETURN:		fprintf(fin,"return;\n");		break;				case PV_CONTINUE:		fprintf(fin,"continue;\n");		break;				case PV_RANDOM:	case PV_IFTIME:	case PV_IF:		if ( item->type == PV_IFTIME ) {						fprintf(fin,"ifTime ( %s|%s|%s|%s )\n", 					item->u1.list->u1.str, 					item->u1.list->next->u1.str, 					item->u1.list->next->next->u1.str, 					item->u1.list->next->next->next->u1.str					);		} else if ( item->type == PV_RANDOM ) {			fprintf(fin,"random ( %s )\n", item->u1.str );		} else			fprintf(fin,"if ( %s )\n", item->u1.str);		if ( item->u2.statements && item->u2.statements->next ) {			for (i=0; i<depth; i++) {				fprintf(fin,"\t"); /* depth == indentation */			}			fprintf(fin,"{\n");			print_pval_list(fin,item->u2.statements,depth+1);			for (i=0; i<depth; i++) {				fprintf(fin,"\t"); /* depth == indentation */			}			if ( item->u3.else_statements )				fprintf(fin,"}\n");			else				fprintf(fin,"};\n");		} else if (item->u2.statements ) {			print_pval_list(fin,item->u2.statements,depth+1);		} else {			if (item->u3.else_statements )				fprintf(fin, " {} ");			else				fprintf(fin, " {}; ");		}		if ( item->u3.else_statements ) {			for (i=0; i<depth; i++) {				fprintf(fin,"\t"); /* depth == indentation */			}			fprintf(fin,"else\n");			print_pval_list(fin,item->u3.else_statements, depth);		}		break;				case PV_SWITCH:		fprintf(fin,"switch( %s ) {\n", item->u1.str);		print_pval_list(fin,item->u2.statements,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"}\n");		break;				case PV_EXTENSION:		if ( item->u4.regexten )			fprintf(fin, "regexten ");		if ( item->u3.hints )			fprintf(fin,"hints(%s) ", item->u3.hints);				fprintf(fin,"%s => ", item->u1.str);		print_pval_list(fin,item->u2.statements,depth+1);		fprintf(fin,"\n");		break;				case PV_IGNOREPAT:		fprintf(fin,"ignorepat => %s;\n", item->u1.str);		break;				case PV_GLOBALS:		fprintf(fin,"globals {\n");		print_pval_list(fin,item->u1.statements,depth+1);		for (i=0; i<depth; i++) {			fprintf(fin,"\t"); /* depth == indentation */		}		fprintf(fin,"}\n");		break;	}}static void print_pval_list(FILE *fin, pval *item, int depth){	pval *i;		for (i=item; i; i=i->next) {		print_pval(fin, i, depth);	}}void ael2_print(char *fname, pval *tree){	FILE *fin = fopen(fname,"w");	if ( !fin ) {		ast_log(LOG_ERROR, "Couldn't open %s for writing.\n", fname);		return;	}	print_pval_list(fin, tree, 0);	fclose(fin);}/* EMPTY TEMPLATE FUNCS FOR AEL TRAVERSAL:  ============================================================================= */void traverse_pval_template(pval *item, int depth);void traverse_pval_item_template(pval *item, int depth);void traverse_pval_item_template(pval *item, int depth)/* depth comes in handy for a pretty print (indentation),														  but you may not need it */{	pval *lp;		switch ( item->type ) {	case PV_WORD:		/* fields: item->u1.str == string associated with this (word). */		break;			case PV_MACRO:		/* fields: item->u1.str     == name of macro		           item->u2.arglist == pval list of PV_WORD arguments of macro, as given by user				   item->u2.arglist->u1.str  == argument				   item->u2.arglist->next   == next arg				   item->u3.macro_statements == pval list of statements in macro body.		*/		for (lp=item->u2.arglist; lp; lp=lp->next) {				}		traverse_pval_item_template(item->u3.macro_statements,depth+1);		break;				case PV_CONTEXT:		/* fields: item->u1.str     == name of context		           item->u2.statements == pval list of statements in context body				   item->u3.abstract == int 1 if an abstract keyword were present		*/		traverse_pval_item_template(item->u2.statements,depth+1);		break;				case PV_MACRO_CALL:		/* fields: item->u1.str     == name of macro to call		           item->u2.arglist == pval list of PV_WORD arguments of macro call, as given by user				   item->u2.arglist->u1.str  == argument				   item->u2.arglist->next   == next arg		*/		for (lp=item->u2.arglist; lp; lp=lp->next) {		}		break;				case PV_APPLICATION_CALL:		/* fields: item->u1.str     == name of application to call		           item->u2.arglist == pval list of PV_WORD arguments of macro call, as given by user				   item->u2.arglist->u1.str  == argument				   item->u2.arglist->next   == next arg		*/		for (lp=item->u2.arglist; lp; lp=lp->next) {		}		break;				case PV_CASE:		/* fields: item->u1.str     == value of case		           item->u2.statements == pval list of statements under the case		*/		traverse_pval_item_template(item->u2.statements,depth+1);		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亲子乱子伦xxxx裸| 欧美日本精品一区二区三区| 久久久99久久| 国产福利91精品一区| 国产蜜臀av在线一区二区三区| 国产成人一区在线| 中文字幕制服丝袜一区二区三区| 色综合天天综合网天天狠天天| 亚洲综合色自拍一区| 欧美精品视频www在线观看| 麻豆精品视频在线观看免费| 久久精品一区八戒影视| 99久久久国产精品| 亚洲激情校园春色| 欧美大白屁股肥臀xxxxxx| 精品一区二区综合| 亚洲男人的天堂av| 在线成人免费视频| 国产69精品久久久久777| 国产精品毛片a∨一区二区三区| 色婷婷综合在线| 蜜桃视频一区二区三区在线观看| 日本一区二区久久| 欧美日韩国产大片| 国产成a人亚洲精品| 亚洲成人一二三| 国产精品毛片久久久久久久| 欧美色老头old∨ideo| 精品中文字幕一区二区| 亚洲视频一区二区免费在线观看| 欧美日韩一级大片网址| 丁香亚洲综合激情啪啪综合| 亚洲午夜激情av| 国产亚洲视频系列| 欧美视频一区二区| 成人性视频免费网站| 亚洲国产精品一区二区www在线 | 亚洲免费av网站| 精品入口麻豆88视频| 99久久精品国产一区| 久久精品久久精品| 一区二区三区鲁丝不卡| 久久久五月婷婷| 91精品国产高清一区二区三区蜜臀 | 中文字幕视频一区二区三区久| 欧美性感一区二区三区| 国产99精品在线观看| 三级影片在线观看欧美日韩一区二区 | 欧美一区二区三区视频免费播放| 成人听书哪个软件好| 免费观看在线综合色| 一区二区三区蜜桃| 国产精品伦一区二区三级视频| 日韩欧美电影一区| 欧美巨大另类极品videosbest | 91福利视频在线| 国产98色在线|日韩| 久久精品国内一区二区三区| 亚洲一区二区在线免费看| 国产精品激情偷乱一区二区∴| 26uuu久久天堂性欧美| 欧美一级艳片视频免费观看| 欧美在线观看一区| 色综合一个色综合| 一本一道久久a久久精品综合蜜臀| 国产成人精品aa毛片| 韩国在线一区二区| 久久精品国产网站| 免费高清成人在线| 蜜桃av一区二区三区电影| 天堂va蜜桃一区二区三区漫画版| 亚洲夂夂婷婷色拍ww47 | 亚洲一区二区三区在线看| 中文字幕综合网| 亚洲欧美视频一区| 亚洲色图20p| 亚洲图片激情小说| 国产精品二三区| √…a在线天堂一区| 国产精品不卡在线| 亚洲乱码国产乱码精品精可以看| 中文字幕一区二区在线观看| 国产精品久久久久久久久动漫| 国产精品天干天干在观线| 中文字幕精品综合| 亚洲欧美色图小说| 亚洲第一二三四区| 日韩精品国产精品| 激情综合五月天| 从欧美一区二区三区| 99精品桃花视频在线观看| 91免费国产在线观看| 欧美无人高清视频在线观看| 欧美日韩电影在线| 欧美性大战久久久久久久蜜臀| 欧美日韩色综合| 日韩欧美高清一区| 中文字幕 久热精品 视频在线 | 7777精品久久久大香线蕉| 欧美精品在线观看播放| 精品理论电影在线观看| 国产午夜精品一区二区三区视频| 欧美激情自拍偷拍| 樱花草国产18久久久久| 日韩电影在线一区| 国产成人丝袜美腿| 91久久精品日日躁夜夜躁欧美| 欧美喷潮久久久xxxxx| 精品国产污网站| 国产精品二区一区二区aⅴ污介绍| 一区二区在线观看不卡| 日本在线播放一区二区三区| 国产成a人亚洲| 欧美午夜理伦三级在线观看| 精品国产一二三区| 又紧又大又爽精品一区二区| 免费成人在线网站| av中文字幕一区| 欧美一区二区网站| 中文字幕永久在线不卡| 日本欧美加勒比视频| 风间由美中文字幕在线看视频国产欧美| 91丝袜国产在线播放| 日韩精品中文字幕在线一区| 国产精品久久福利| 久久精品国内一区二区三区| 色欧美片视频在线观看在线视频| 精品三级av在线| 亚洲一区中文日韩| 盗摄精品av一区二区三区| 欧美一区永久视频免费观看| 日韩码欧中文字| 国产精品一二三四五| 91精品国产综合久久久久久漫画| 国产精品美女久久久久久久| 九一九一国产精品| 欧美巨大另类极品videosbest| 专区另类欧美日韩| 国产成人在线电影| 精品免费国产一区二区三区四区| 亚洲一区二区综合| 99在线热播精品免费| 久久久久久99精品| 麻豆中文一区二区| 欧美日韩日日骚| 亚洲另类色综合网站| 国产91对白在线观看九色| 欧美精品一区二区久久婷婷| 天堂久久一区二区三区| 欧美性欧美巨大黑白大战| 亚洲欧美在线视频| 国产99久久久国产精品潘金| 久久久美女毛片| 韩国精品一区二区| 欧美一区二区三区性视频| 三级一区在线视频先锋| 欧美偷拍一区二区| 亚洲国产精品久久久久婷婷884 | 9i看片成人免费高清| 久久精品一二三| 国产v日产∨综合v精品视频| 久久新电视剧免费观看| 日韩电影在线一区二区三区| 91精品国产麻豆国产自产在线 | 岛国av在线一区| 国产欧美一区二区三区在线老狼 | 国产精品美女久久久久久久久| 国产精品一区二区久激情瑜伽| xnxx国产精品| 国产激情精品久久久第一区二区 | 国产一区视频在线看| 精品国产乱码久久| 精品写真视频在线观看| www国产亚洲精品久久麻豆| 韩国女主播成人在线| 欧美国产国产综合| 99久久777色| 亚洲成人一区二区在线观看| 在线不卡欧美精品一区二区三区| 日韩精品乱码免费| 欧美成人a在线| 国产成都精品91一区二区三| 国产精品网站在线观看| 在线视频欧美精品| 视频一区二区国产| 久久人人爽爽爽人久久久| 成人午夜精品在线| 亚洲综合免费观看高清完整版在线| 欧美日韩亚洲另类| 精品影院一区二区久久久| 中文字幕免费一区| 欧美色爱综合网| 国产在线精品免费| 亚洲日本va在线观看| 8x8x8国产精品| 国产福利一区二区三区视频 | 一本久久a久久免费精品不卡| 一区二区三区精品久久久| 日韩一区二区免费视频| 成人精品小蝌蚪|