⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 highlight.c

📁 Linux下的MUD客户端程序
💻 C
字号:
/* Autoconf patching by David Hedbor, neotron@lysator.liu.se *//*********************************************************************//* file: highlight.c - functions related to the highlight command    *//*                             TINTIN ++                             *//*          (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t             *//*                     coded by Bill Reiss 1993                      *//*********************************************************************/#ifdef HAVE_STRING_H#include <string.h>#else#ifdef HAVE_STRINGS_H#include <strings.h>#endif#endif/* CHANGED to include <ctype.h>, since we use isdigit() etc. * Thanks to Brian Ebersole [Harm@GrimneMUD] for the bug report! */#include <ctype.h>#include "tintin.h"#ifdef HAVE_STDLIB_H#include <stdlib.h>#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endifextern char *get_arg_in_braces();extern struct listnode *searchnode_list();extern struct listnode *search_node_with_wild();void add_codes();int is_high_arg();extern struct listnode *common_highs;extern char vars[10][BUFFER_SIZE]; /* the %0, %1, %2,....%9 variables */extern int hinum;extern int mesvar[7];extern char high_starts[13][80];extern char high_ends[13][80];/***************************//* the #highlight command  *//***************************/void parse_high(arg, ses)     char *arg;     struct session *ses;{  char left[BUFFER_SIZE], right[BUFFER_SIZE], result[BUFFER_SIZE];  struct listnode *myhighs, *ln;  int colflag = TRUE;  char *pright, *tmp1, *tmp2, tmp3[BUFFER_SIZE];  pright=right;  *pright = '\0';  myhighs=(ses) ? ses->highs : common_highs;  arg=get_arg_in_braces(arg, left, 0);  arg=get_arg_in_braces(arg, right, 1);  if(!*left) {    tintin_puts("#THESE HIGHLIGHTS HAVE BEEN DEFINED:", ses);    show_list(myhighs);    prompt(ses);  }  else {    tmp1 = left;    tmp2 = tmp1;    while (*tmp2!='\0') {      tmp2++;      while (*tmp2!=','&&*tmp2!='\0') tmp2++;      while (isspace(*tmp1)) tmp1++;      strncpy(tmp3, tmp1, tmp2-tmp1);      tmp3[tmp2-tmp1]='\0';      colflag=is_high_arg(tmp3);       tmp1= tmp2+1;    }    if (colflag==TRUE) {      if((ln=searchnode_list(myhighs, right))!=NULL)        deletenode_list(myhighs, ln);      insertnode_list(myhighs, right, left, "0", ALPHA);      hinum++;      if (mesvar[4]) {        sprintf(result, "#Ok. {%s} is now highlighted %s.", right, left);        tintin_puts2(result, ses);      }    } else {       tintin_puts2("Invalid Highlighting color or effect, valid types are red, blue, cyan, green,", ses);       tintin_puts2("yellow, magenta, white, grey, black, brown, charcoal, light red, light blue,", ses);       tintin_puts2("light cyan, light magenta, light green, b red, b blue, b cyan, b green,", ses);       tintin_puts2("b yellow, b magenta, b white, b grey, b black, b brown, b charcoal, b light", ses);       tintin_puts2("red, b light blue, b light cyan, b light magenta, b light green, bold,", ses);       tintin_puts2("faint, blink, italic, reverse, or 1-32");     }  }  }int is_high_arg(s)  char *s;{  int code;  sscanf(s, "%d", &code);  if (is_abrev(s, "red") || is_abrev(s, "blue") || is_abrev(s, "cyan") ||     is_abrev(s, "green") || is_abrev(s, "yellow") ||     is_abrev(s, "magenta") || is_abrev(s, "white") ||     is_abrev(s, "grey") || is_abrev(s, "black") ||     is_abrev(s, "brown") || is_abrev(s, "charcoal") ||     is_abrev(s, "light red") || is_abrev(s, "light blue") ||     is_abrev(s, "light cyan") || is_abrev(s, "light magenta") ||     is_abrev(s, "light green") || is_abrev(s, "b red") ||     is_abrev(s, "b blue") || is_abrev(s, "b cyan") ||     is_abrev(s, "b green") || is_abrev(s, "b yellow") ||     is_abrev(s, "b magenta") || is_abrev(s, "b white") ||     is_abrev(s, "b grey") || is_abrev(s, "b black") ||     is_abrev(s, "b brown") || is_abrev(s, "b charcoal") ||     is_abrev(s, "b light red") || is_abrev(s, "b light blue") ||     is_abrev(s, "b light cyan") || is_abrev(s, "b light magenta") ||     is_abrev(s, "b light green") || is_abrev(s, "bold") ||     is_abrev(s, "faint") || is_abrev(s, "blink") ||     is_abrev(s, "italic") || is_abrev(s, "reverse") ||      (isdigit(*s) && code<33 && code>0)) return TRUE;     else return FALSE;}/*****************************//* the #unhighlight command *//*****************************/void unhighlight_command(arg, ses)     char *arg;     struct session *ses;{  char left[BUFFER_SIZE] ,result[BUFFER_SIZE];  struct listnode *myhighs, *ln, *temp;  int flag;  flag=FALSE;  myhighs=(ses) ? ses->highs : common_highs;  temp=myhighs;  arg=get_arg_in_braces(arg,left, 1);  while ((ln=search_node_with_wild(temp, left))!=NULL) {    if (mesvar[4]) {      sprintf(result, "Ok. {%s} is no longer %s.", ln->left, ln->right);      tintin_puts2(result, ses);    }    deletenode_list(myhighs, ln);    flag=TRUE;    temp=ln;  }  if (!flag && mesvar[4])    tintin_puts2("#THAT HIGHLIGHT IS NOT DEFINED.", ses);}void do_one_high(line, ses)     char *line;     struct session *ses;{  /* struct listnode *ln, *myhighs; */  struct listnode *ln;  char temp[BUFFER_SIZE],temp2[BUFFER_SIZE],result[BUFFER_SIZE];  char *lptr, *tptr, *line2, *firstch_ptr;  char *place;  int hflag,length;  hflag=TRUE;  ln=ses->highs;  while ((ln=ln->next)) {      if(check_one_action(line,ln->left, ses)) {        firstch_ptr=ln->left;        if (*(firstch_ptr)=='^')          firstch_ptr++;                  prepare_actionalias(firstch_ptr, temp, ses);	*(line+strlen(line)+2)='\0';	hflag=TRUE;	line2=line;	while(hflag) {	  lptr=temp;          place=line2;          while(*lptr!= *line2) {            place= ++line2;          }          length=0;	  while(*lptr== *line2 && *lptr!='\0') {            length++;	    lptr++;	    line2++;	  }	  if (length>=strlen(temp))	      hflag=FALSE;	}	add_codes(temp,temp2,ln->right,0);	*(place)='\0';        tptr=line2;        sprintf(result,"%s%s%s",line,temp2,tptr);        strcpy(line,result);	}  }}void add_codes(line, result, htype, flag)     char *line, *result, *htype;     int flag;{  char *tmp1, *tmp2, tmp3[BUFFER_SIZE];  int code;  sprintf(result, "%s", DEFAULT_BEGIN_COLOR);  tmp1 = htype;  tmp2 = tmp1;  while (*tmp2!='\0') {    tmp2++;    while (*tmp2!=','&&*tmp2!='\0') tmp2++;    while (isspace(*tmp1)) tmp1++;    strncpy(tmp3, tmp1, tmp2-tmp1);    tmp3[tmp2-tmp1]='\0';    code=-1;    if (isdigit(*tmp3)) {      sscanf(tmp3, "%d", &code);      code--;    }    if (is_abrev(tmp3, "black") || code==0) strcat(result, ";30");      else if (is_abrev(tmp3, "red") || code==1) strcat(result, ";31");      else if (is_abrev(tmp3, "green") || code==2) strcat(result, ";32");      else if (is_abrev(tmp3, "brown") || code==3) strcat(result, ";33");      else if (is_abrev(tmp3, "blue") || code==4) strcat(result, ";34");      else if (is_abrev(tmp3, "magenta") || code==5) strcat(result, ";35");      else if (is_abrev(tmp3, "cyan") || code==6) strcat(result, ";36");      else if (is_abrev(tmp3, "grey") || code==7) strcat(result, ";37");      else if (is_abrev(tmp3, "charcoal") || code==8) strcat(result, ";30;1");      else if (is_abrev(tmp3, "light red") || code==9) strcat(result, ";31;1");      else if (is_abrev(tmp3, "light green") || code==10) strcat(result, ";32;1");      else if (is_abrev(tmp3, "yellow") || code==11) strcat(result, ";33;1");      else if (is_abrev(tmp3, "light blue") || code==12) strcat(result, ";34;1");      else if (is_abrev(tmp3, "light magenta") || code==13) strcat(result, ";35;1");      else if (is_abrev(tmp3, "light cyan")|| code==14) strcat(result, ";36;1");      else if (is_abrev(tmp3, "white") || code==15) strcat(result, ";37;1");      else if (is_abrev(tmp3, "b black") || code==16) strcat(result, ";40");      else if (is_abrev(tmp3, "b red") || code==17) strcat(result, ";41");      else if (is_abrev(tmp3, "b green") || code==18) strcat(result, ";42");      else if (is_abrev(tmp3, "b brown") || code==19) strcat(result, ";43");      else if (is_abrev(tmp3, "b blue") || code==20) strcat(result, ";44");      else if (is_abrev(tmp3, "b magenta") || code==21) strcat(result, ";45");      else if (is_abrev(tmp3, "b cyan") || code==22) strcat(result, ";46");      else if (is_abrev(tmp3, "b grey") || code==23) strcat(result, ";47");      else if (is_abrev(tmp3, "b charcoal") || code==24) strcat(result, ";40;1");      else if (is_abrev(tmp3, "b light red") || code==25) strcat(result, ";41;1");      else if (is_abrev(tmp3, "b light green") || code==26) strcat(result, ";42;1");      else if (is_abrev(tmp3, "b yellow") || code==27) strcat(result, ";43;1");      else if (is_abrev(tmp3, "b light blue") || code==28) strcat(result, ";44;1");      else if (is_abrev(tmp3, "b light magenta") || code==29) strcat(result, ";45;1");      else if (is_abrev(tmp3, "b light cyan") || code==30) strcat(result, ";46;1");      else if (is_abrev(tmp3, "b white") || code==31) strcat(result, ";47;1");      else if (is_abrev(tmp3, "bold")) strcat(result, ";1");      else if (is_abrev(tmp3, "faint")) strcat(result, ";2");      else if (is_abrev(tmp3, "blink")) strcat(result, ";5");      else if (is_abrev(tmp3, "italic")) strcat(result, ";3");      else if (is_abrev(tmp3, "reverse")) strcat(result, ";7");    tmp1= tmp2+1;  }  strcat(result, "m");  strcat(result, line);  strcat(result, DEFAULT_END_COLOR);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -