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

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

?? action.c

?? Linux下的MUD客戶端程序
?? C
字號:
/* Autoconf patching by David Hedbor, neotron@lysator.liu.se *//*********************************************************************//* file: action.c - funtions related to the action command           *//*                             TINTIN III                            *//*          (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t             *//*                     coded by peter unold 1992                     *//*********************************************************************/#include <ctype.h>#ifdef HAVE_STRING_H#include <string.h>#else#ifdef HAVE_STRINGS_H#include <strings.h>#endif#endif#include "tintin.h"#include <readline/readline.h>extern struct session *activesession;extern struct listnode *common_actions;extern char vars[10][BUFFER_SIZE]; /* the &0, %1, %2,....%9 variables */extern int term_echoing;extern int readline_echoing_p;extern int echo;extern char tintin_char;extern int acnum;extern int mesvar[6];extern char *get_arg_in_braces();extern struct listnode *search_node_with_wild();extern struct listnode *searchnode_list();void substitute_vars();int var_len[10];char *var_ptr[10];/***********************//* the #action command *//***********************//*  Priority code added by Joann Ellsworth 2/2/94 */void action_command(arg, ses)     char *arg;     struct session *ses;{  char left[BUFFER_SIZE], right[BUFFER_SIZE], result[BUFFER_SIZE];  char pr[BUFFER_SIZE];  struct listnode *myactions, *ln;  myactions=(ses) ? ses->actions : common_actions;  arg=get_arg_in_braces(arg, left, 0);  arg=get_arg_in_braces(arg, right, 1);  arg=get_arg_in_braces(arg, pr, 1);  if (!*pr) strcpy(pr, "5"); /* defaults priority to 5 if no value given */  if(!*left) {    tintin_puts2("#Defined actions:", ses);    show_list_action(myactions);    prompt(ses);  }  else if(*left && !*right) {    if ((ln=search_node_with_wild(myactions,left))!=NULL) {      while((myactions=search_node_with_wild(myactions, left))!=NULL) {        shownode_list_action(myactions);      }      prompt(ses);    }    else      if (mesvar[1])        tintin_puts("#That action is not defined.", ses);  }  else {    if((ln=searchnode_list(myactions, left))!=NULL)      deletenode_list(myactions, ln);    insertnode_list(myactions, left, right, pr, PRIORITY);    if (mesvar[1]) {      sprintf(result,"#Ok. {%s} now triggers {%s} @ {%s}",left,right,pr);      tintin_puts2(result, ses);    }    acnum++;  }}/*************************//* the #unaction command *//*************************/void unaction_command(arg, ses)     char *arg;     struct session *ses;{  char left[BUFFER_SIZE] ,result[BUFFER_SIZE];  struct listnode *myactions, *ln, *temp;  int flag;  flag=FALSE;  myactions=(ses) ? ses->actions : common_actions;  temp=myactions;  arg=get_arg_in_braces(arg,left,1);  while ((ln=search_node_with_wild(temp, left))!=NULL) {    if (mesvar[1]) {      sprintf(result,"#Ok. {%s} is no longer a trigger.",ln->left);      tintin_puts2(result, ses);    }    deletenode_list(myactions, ln);    flag=TRUE;    temp=ln;  }  if (!flag && mesvar[1]) {    sprintf(result, "#No match(es) found for {%s}", left);    tintin_puts2(result, ses);  }}void substitute_myvars(string, result, ses)  char   *string;  char   *result;  struct session *ses;{  char temp[BUFFER_SIZE];  *result='\0';  substitute_functions(string, temp, ses);  substitute_myvariables(temp, result, ses);}/**************************************************************************//* run throught each of the commands on the right side of an alias/action *//* expression, call substitute_text() for all commands but #alias/#action *//**************************************************************************/void prepare_actionalias(string, result, ses)     char *string;     char *result;     struct session *ses;{  char temp1[BUFFER_SIZE];  *result='\0';  substitute_vars(string,temp1);  substitute_myvars(temp1, result, ses);}/*************************************************************************//* copy the arg text into the result-space, but substitute the variables *//* %0..%9 with the real variables                                        *//*************************************************************************/void substitute_vars(arg, result)     char *arg;     char *result;{  int nest=0;  int numands,n;  char *ptr;  while(*arg) {    if(*arg=='%') { /* substitute variable */      numands=0;      while(*(arg+numands)=='%')         numands++;      if (isdigit(*(arg+numands)) && numands==(nest+1)) {         n=*(arg+numands)-'0';         strcpy(result,vars[n]);         arg=arg+numands+1;         result+=strlen(vars[n]);      }      else {        strncpy(result,arg,numands+1);        arg+=numands+1;        result+=numands+1;      }    }    if(*arg=='$') { /* substitute variable */      numands=0;      while(*(arg+numands)=='$')         numands++;      if (isdigit(*(arg+numands)) && numands==(nest+1)) {         n=*(arg+numands)-'0';         ptr=vars[n];         while (*ptr) {           if (*ptr==';')             ptr++;           else             *result++=*ptr++;         }         arg=arg+numands+1;      }      else {        strncpy(result,arg,numands);        arg+=numands;        result+=numands;      }    }    else if (*arg==DEFAULT_OPEN) {      nest++;      *result++=*arg++;    }    else if (*arg==DEFAULT_CLOSE) {      nest--;      *result++=*arg++;    }    else if (*arg=='\\' && nest==0) {      while(*arg=='\\')        *result++=*arg++;      if(*arg=='%') {        result--;        *result++=*arg++;	*result++=*arg++;      }    }    else      *result++=*arg++;  }  *result='\0';}/**********************************************//* check actions from a sessions against line *//**********************************************/void check_all_actions(line, ses)     char *line;     struct session *ses;{  struct listnode *ln; static char temp[BUFFER_SIZE]=PROMPT_FOR_PW_TEXT; char strng[BUFFER_SIZE]; if(check_one_action(line, temp, ses) && ses==activesession) {    term_echoing=FALSE;    readline_echoing_p = 0;	/* this tells readline to quit echoing */  }   ln=(ses) ? ses->actions : common_actions;  while(( ln=ln->next )) {    if(check_one_action(line, ln->left,ses)) {      char buffer[BUFFER_SIZE];      prepare_actionalias(ln->right, buffer,ses);      if(echo && activesession==ses) {         sprintf(strng, "[ACTION: %s]", buffer);        tintin_puts2(strng, activesession);      }      parse_input(buffer, ses);      return;    }  }}int match_a_string(line, mask)     char *line;     char *mask;{  char *lptr, *mptr;  lptr=line;  mptr=mask;  while (*lptr && *mptr && !(*mptr=='%' && isdigit(*(mptr+1)))) {    if (*lptr++!=*mptr++)      return -1;  }  if (!*mptr || (*mptr=='%' && isdigit(*(mptr+1)))) {    return (int)(lptr-line);  }  return -1;}int check_one_action(line, action, ses)     char *line;     char *action;     struct session *ses;{  int i;   if (check_a_action(line,action,ses)) {    for(i=0; i<10; i++) {      if (var_len[i]!=-1) {        strncpy(vars[i], var_ptr[i], var_len[i]);        *(vars[i]+var_len[i])='\0';       }    }    return TRUE;  }         else    return FALSE;}/******************************************************************//* check if a text triggers an action and fill into the variables *//* return TRUE if triggered                                       *//******************************************************************/int check_a_action(line, action, ses)     char *line;     char *action;     struct session *ses;{     char result[BUFFER_SIZE];  char *temp2, *tptr, *lptr, *lptr2;  int  i,flag_anchor, count, len, flag;  for (i=0; i<10; i++) var_len[i]=-1;  flag_anchor=FALSE;  lptr=line;  substitute_myvars(action,result,ses);  tptr=result;  if(*tptr=='^') {    tptr++;    flag_anchor=TRUE;    /* CHANGED to fix a bug with #action {^%0 foo}     * Thanks to Spencer Sun for the bug report (AND fix!)    if (*tptr!=*line)      return FALSE;    */  }  if (flag_anchor) {    if ((len=match_a_string(lptr, tptr))==-1)      return FALSE;    lptr+=len;    tptr+=len;  }  else {    flag=TRUE;    len=-1;    while(*lptr && flag) {      if((len=match_a_string(lptr, tptr))!=-1) {        flag=FALSE;      }      else        lptr++;    }    if (len!=-1) {      lptr+=len;      tptr+=len;    }    else      return FALSE;  }  while(*lptr && *tptr) {    temp2=tptr+2;    if (!*temp2) {      var_len[*(tptr+1)-48]=strlen(lptr);      var_ptr[*(tptr+1)-48]=lptr;      return TRUE;    }    lptr2=lptr;    flag=TRUE;    len=-1;    while(*lptr2 && flag) {      if ((len=match_a_string(lptr2, temp2))!=-1) {        flag=FALSE;      }      else         lptr2++;    }    if (len!=-1) {      var_len[*(tptr+1)-48]=lptr2-lptr;      var_ptr[*(tptr+1)-48]=lptr;      lptr=lptr2+len;      tptr=temp2+len;    }    else {      return FALSE;    }  }  if (*tptr)    return FALSE;  else    return TRUE;}           

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品露脸国语对白| 国产乱码一区二区三区| 中文字幕中文字幕一区| 久久久久久久久蜜桃| 精品成人在线观看| 久久新电视剧免费观看| 久久亚洲综合色一区二区三区| 精品久久人人做人人爰| 久久久久国产精品麻豆ai换脸| 久久久久综合网| 日本一区二区成人在线| 最新高清无码专区| 亚洲精品一二三四区| 午夜欧美电影在线观看| 美国欧美日韩国产在线播放| 国产美女av一区二区三区| 岛国精品一区二区| 91色porny在线视频| 欧美综合欧美视频| 日韩欧美在线123| 久久精品欧美日韩精品| 1区2区3区精品视频| 亚洲成精国产精品女| 看电影不卡的网站| 99在线热播精品免费| 欧美日韩国产首页在线观看| 久久亚洲精品小早川怜子| 国产精品久久久久久妇女6080 | 日韩中文字幕区一区有砖一区| 婷婷一区二区三区| 国产精品综合二区| 欧美日韩精品一区二区天天拍小说 | 青娱乐精品视频在线| 国产一区二区在线看| 欧洲国产伦久久久久久久| 日韩欧美一级二级三级| 日韩理论在线观看| 免费高清在线视频一区·| 99久久综合99久久综合网站| 欧美精品久久99| 中文无字幕一区二区三区| 婷婷中文字幕综合| 丁香婷婷综合色啪| 欧美一区二区三区婷婷月色| 亚洲视频资源在线| 激情小说亚洲一区| 欧美日韩高清影院| 国产精品国产三级国产普通话99 | 2024国产精品视频| 亚洲6080在线| 色婷婷精品久久二区二区蜜臀av | 日韩欧美亚洲国产另类| 亚洲欧美电影院| 国产福利一区二区| 欧美一区二区三区公司| 亚洲亚洲人成综合网络| 懂色av噜噜一区二区三区av| 欧美一区二区在线不卡| 亚洲h在线观看| 91成人免费在线视频| 国产精品久久久久久久第一福利| 黄网站免费久久| 91精品国产91久久综合桃花| 亚洲国产精品尤物yw在线观看| www.亚洲色图.com| 中文字幕不卡的av| 国产福利精品导航| 26uuu国产日韩综合| 久久国内精品自在自线400部| 日本二三区不卡| 一区二区三区免费观看| 色综合一区二区三区| 亚洲天堂福利av| 91玉足脚交白嫩脚丫在线播放| 国产精品女主播av| 不卡一卡二卡三乱码免费网站| 日本一区二区三区dvd视频在线 | 日本一区二区视频在线观看| 国产一区二区三区av电影| 精品久久久久久无| 激情六月婷婷久久| 欧美激情一区二区| 91一区二区在线| 亚洲国产一区二区三区青草影视| 在线观看成人免费视频| 五月激情综合网| 日韩视频一区二区三区| 韩国三级电影一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 美国十次综合导航| 日韩一区二区免费视频| 精品一区二区免费| 国产日韩欧美制服另类| 99v久久综合狠狠综合久久| 亚洲激情图片小说视频| 在线综合亚洲欧美在线视频| 久久99久久久欧美国产| 久久九九久久九九| 一本久道久久综合中文字幕| 性感美女久久精品| 久久久久久久久久久久久女国产乱 | 国产一区二区福利视频| 最新高清无码专区| 欧美一区二区三区电影| 成人福利电影精品一区二区在线观看| 中文字幕欧美区| 9191久久久久久久久久久| 极品少妇xxxx偷拍精品少妇| 中文字幕一区二区5566日韩| 欧美日韩国产欧美日美国产精品| 麻豆国产精品一区二区三区| 国产精品短视频| 7777精品伊人久久久大香线蕉的| 国产精品123| 亚洲成人免费在线| 日本一区二区综合亚洲| 3atv一区二区三区| 9l国产精品久久久久麻豆| 麻豆成人综合网| 亚洲国产日韩在线一区模特| 国产亚洲1区2区3区| 欧美日韩你懂得| 91亚洲男人天堂| 国产麻豆9l精品三级站| 天天综合色天天综合色h| 国产精品久久久久久久久果冻传媒| 日韩一级黄色大片| 欧美在线你懂得| 成人高清视频免费观看| 久久se精品一区精品二区| 亚洲自拍偷拍麻豆| 国产精品电影院| 久久午夜免费电影| 欧美一级淫片007| 精品视频一区三区九区| av影院午夜一区| 国产成人在线影院| 国产在线视视频有精品| 久久国产成人午夜av影院| 亚洲一线二线三线久久久| 亚洲精品免费看| 椎名由奈av一区二区三区| 国产精品美女久久久久久久久| 久久久亚洲欧洲日产国码αv| 日韩色视频在线观看| 欧美一区二区三区系列电影| 欧美日韩国产123区| 欧美欧美午夜aⅴ在线观看| 在线观看亚洲成人| 欧美在线一区二区三区| 日本丶国产丶欧美色综合| 91久久国产最好的精华液| 色综合夜色一区| 欧美特级限制片免费在线观看| 在线看日韩精品电影| 欧美日韩一区二区电影| 欧美日本不卡视频| 欧美日韩国产一级| 日韩免费看的电影| 精品日韩一区二区三区| 久久综合一区二区| 中文字幕不卡的av| 一区二区三区欧美亚洲| 香蕉久久一区二区不卡无毒影院| 亚洲一区在线观看免费| 五月婷婷激情综合网| 日本视频免费一区| 国产一区二区h| 成人va在线观看| 在线观看日韩毛片| 91精品国产综合久久精品app| 欧美日韩电影在线| 26uuu亚洲| 一区二区三区中文字幕精品精品 | 精品一区二区免费| 国产在线一区观看| 成人精品在线视频观看| 欧美自拍丝袜亚洲| 精品美女一区二区| 国产日韩欧美精品电影三级在线| 中文字幕亚洲区| 日本亚洲免费观看| 国产成人精品一区二| 欧美午夜一区二区三区| 精品久久久久久久久久久久久久久 | 精品国产三级a在线观看| 日韩伦理免费电影| 蜜乳av一区二区三区| 99精品欧美一区二区三区综合在线| 欧美三级在线播放| 国产日产精品一区| 亚洲高清不卡在线观看| 国产成人免费xxxxxxxx| 欧美在线色视频| 久久久精品综合| 视频一区二区三区在线| 波多野结衣在线一区| 日韩精品资源二区在线| 一区二区三区免费看视频| 国产高清久久久|