char *get_arg_in_braces(char *s, char *arg, int flag) { int nest=0; char *ptr; s=space_out(s); ptr=s; if (*s!=DEFAULT_OPEN) { if (flag==0) s=get_arg_stop_spaces(ptr,arg); else s=get_arg_with_spaces(ptr,arg); return s; } s++; while(*s!='\0' && !(*s==DEFAULT_CLOSE && nest==0)) { if(*s==DEFAULT_OPEN) { nest++; } else if(*s==DEFAULT_CLOSE) { nest--; } *arg++=*s++; } if (!*s) tintin_puts2(rs::rs(1146)); else s++; *arg='\0'; return s; }
struct session *parse_tintin_command(struct session *ses, char *input) { char line[BUFFER_SIZE]; struct session *sesptr; input = get_arg_stop_spaces(ses, input, line, 0); substitute(ses, line, line, SUB_VAR|SUB_FUN); if (is_number(line)) { int cnt = atoi(line); input = get_arg_in_braces(ses, input, line, TRUE); while (cnt-- > 0) { ses = script_driver(ses, -1, line); } return ses; } for (sesptr = gts ; sesptr ; sesptr = sesptr->next) { if (!strcmp(sesptr->name, line)) { if (*input) { input = get_arg_in_braces(ses, input, line, TRUE); substitute(ses, line, line, SUB_VAR|SUB_FUN); script_driver(sesptr, -1, line); return ses; } else { return activate_session(sesptr); } } } tintin_printf(ses, "#ERROR: #UNKNOWN TINTIN-COMMAND '%s'.", line); return ses; }
struct session *parse_command(struct session *ses, char *input) { char *arg, line[BUFFER_SIZE], cmd1[BUFFER_SIZE], cmd2[BUFFER_SIZE]; push_call("parse_command(%p,%p)",ses,input); arg = get_arg_stop_spaces(ses, input, cmd1, 0); substitute(ses, cmd1, cmd2, SUB_VAR|SUB_FUN); if (!strcmp(cmd1, cmd2)) { pop_call(); return NULL; } sprintf(line, "%s%s%s", cmd2, *arg ? " " : "", arg); strcpy(input, line); pop_call(); return ses; }
char *get_arg_in_braces(struct session *ses, char *string, char *result, int flag) { char *pti, *pto; int nest = 1; pti = space_out(string); pto = result; if (*pti != DEFAULT_OPEN) { if (!HAS_BIT(flag, GET_ALL)) { pti = get_arg_stop_spaces(ses, pti, result, flag); } else { pti = get_arg_with_spaces(ses, pti, result, flag); } return pti; } pti++; while (*pti) { if (HAS_BIT(ses->flags, SES_FLAG_BIG5) && *pti & 128 && pti[1] != 0) { *pto++ = *pti++; *pto++ = *pti++; continue; } if (*pti == DEFAULT_OPEN) { nest++; } else if (*pti == DEFAULT_CLOSE) { nest--; if (nest == 0) { break; } } *pto++ = *pti++; } if (*pti == 0) { tintin_printf2(NULL, "#Unmatched braces error!"); } else { pti++; } *pto = '\0'; return pti; }
int cursor_auto_tab_add(int input_now, int stop_after_first) { char tab[BUFFER_SIZE], buf[BUFFER_SIZE]; int scroll_cnt, line_cnt, tab_len; char *arg; line_cnt = 0; scroll_cnt = gtd->ses->scroll_row; do { if (scroll_cnt == gtd->ses->scroll_max - 1) { scroll_cnt = 0; } else { scroll_cnt++; } if (gtd->ses->buffer[scroll_cnt] == NULL) { break; } if (str_hash_grep(gtd->ses->buffer[scroll_cnt], FALSE)) { continue; } if (line_cnt++ >= gtd->ses->auto_tab) { break; } strip_vt102_codes(gtd->ses->buffer[scroll_cnt], buf); arg = buf; while (*arg) { arg = get_arg_stop_spaces(gtd->ses, arg, tab, 0); if (!strncmp(tab, >d->input_buf[input_now], strlen(>d->input_buf[input_now]))) { tab_len = strlen(tab) - 1; if (tab_len > 0) { if (tab[tab_len] == '.' || tab[tab_len] == ',') { tab[tab_len] = 0; } } if (search_node_list(gtd->ses->list[LIST_TABCYCLE], tab)) { continue; } insert_node_list(gtd->ses->list[LIST_TABCYCLE], tab, "", ""); if (stop_after_first) { return TRUE; } } if (*arg == COMMAND_SEPARATOR) { arg++; } } } while (scroll_cnt != gtd->ses->scroll_row); return FALSE; }
void parse_input(char *input) { char command[BUFFER_SIZE], arg[BUFFER_SIZE], result[BUFFER_SIZE]; char *input2; bPasswordEcho = TRUE; if(*input=='\0') { write_line_mud(""); return ; } if ( verbatim && *input == cCommandChar && *(input+1) == 'v' ) {// check verbatim command char command[BUFFER_SIZE]; char* input2=get_arg_stop_spaces(input+1, command); if(command[0] == 'v' && is_abrev(command, "verbatim")){ char arg[BUFFER_SIZE]; get_arg_all(input2, arg); verbatim_command(arg); return; } } if (verbatim ) { write_line_mud(input); return ; } if (*input==verbatim_char) { input++; write_line_mud(input); return ; } substitute_myvars(input, result); input2=result; while(*input2) { //* en:colon // if(*input2==';') if(*input2==cCommandDelimiter||(bColon && *input2==';')&&*(input2-1)!='\\') input2++; //*/en input2=get_arg_stop_spaces(input2, command); input2=get_arg_all(input2, arg); //* en:prefix if(s_prefix[0] && command[0] != cCommandChar) { char p_command[BUFFER_SIZE]; strcpy(p_command,command); strcat(p_command," "); strcat(p_command,arg); strcpy(command,s_prefix); strcpy(arg,p_command); } //*/en if(*command==cCommandChar) { if (bDisplayCommands) { // output command in square brackets char strInputCommand[BUFFER_SIZE], strOutputBuffer[BUFFER_SIZE]; strcpy(strInputCommand, "\n["); strcat(strInputCommand, command); if (*arg != '\0') { strcat(strInputCommand, " "); strcat(strInputCommand, arg); } strcat(strInputCommand, "]"); add_codes(strInputCommand, strOutputBuffer, "brown", TRUE); tintin_puts2(strOutputBuffer); if (hLogFile.is_open()) { log(strInputCommand); } } parse_tintin_command(command+1, arg); } //* en:comments else if(*command==cCommentChar); //*/en else { //* en:waits if(iWaitState>0) { char *ptr1,*ptr2; for(ptr1=mQueue;*ptr1&&*ptr1!='\0';ptr1++); *ptr1++=cCommandDelimiter; for(ptr2=command;*ptr2&&*ptr2!='\0';ptr2++,ptr1++) *ptr1=*ptr2; if(*arg) *ptr1++=' '; for(ptr2=arg;*ptr2&&*ptr2!='\0';ptr2++,ptr1++) *ptr1=*ptr2; *ptr1++='\0'; continue; } //* en ALIAS_INDEX ind; if( (ind=AliasList.find(command)) != AliasList.end() && ind->second->m_pGroup->m_bEnabled ) { int i; char *cpsource, *cpsource2, newcommand[BUFFER_SIZE], end; strcpy(vars[0], arg); for(i=1, cpsource=arg; i<10; i++) { /* Next lines CHANGED to allow argument grouping with aliases */ while (*cpsource == ' ') cpsource++; end = (*cpsource == '{') ? '}' : ' '; cpsource = (*cpsource == '{') ? cpsource+1 : cpsource; for(cpsource2=cpsource; *cpsource2 && *cpsource2!=end; cpsource2++); strncpy(vars[i], cpsource, cpsource2-cpsource); *(vars[i]+(cpsource2-cpsource))='\0'; cpsource=(*cpsource2) ? cpsource2+1 : cpsource2; } ALIAS* pal = ind->second; prepare_actionalias((char*)pal->m_strRight.data(), newcommand); if(!strcmp(pal->m_strRight.data(), newcommand) && *arg) { strcat(newcommand, " "); strcat(newcommand, arg); } parse_input(newcommand); } else if(speedwalk && !*arg && is_speedwalk_dirs(command)) do_speedwalk(command); else { get_arg_with_spaces(arg,arg); write_com_arg_mud(command, arg); } } } return; }