/****************************************************************************** * TinTin++ * * Copyright (C) 2004 (See CREDITS file) * * * * This program is protected under the GNU GPL (See COPYING) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *******************************************************************************/ /****************************************************************************** * (T)he K(I)cki(N) (T)ickin D(I)kumud Clie(N)t * * * * coded by Peter Unold 1992 * ******************************************************************************/ #include "tintin.h" DO_COMMAND(do_all) { char left[BUFFER_SIZE]; struct session *sesptr, *next_ses; if (gts->next) { get_arg_in_braces(arg, left, TRUE); substitute(ses, left, left, SUB_VAR|SUB_FUN); for (sesptr = gts->next ; sesptr ; sesptr = next_ses) { next_ses = sesptr->next; script_driver(sesptr, -1, left); } } else { tintin_puts2(ses, "#BUT THERE AREN'T ANY SESSIONS AT ALL!"); } return ses; } DO_COMMAND(do_bell) { printf("\007"); return ses; } DO_COMMAND(do_commands) { char buf[BUFFER_SIZE] = { 0 }, add[BUFFER_SIZE]; int cmd; tintin_header(ses, " %s ", "COMMANDS"); for (cmd = 0 ; *command_table[cmd].name != 0 ; cmd++) { if (!is_abbrev(arg, command_table[cmd].name)) { continue; } if ((int) strlen(buf) + 20 > ses->cols) { tintin_puts2(ses, buf); buf[0] = 0; } sprintf(add, "%20s", command_table[cmd].name); strcat(buf, add); } if (buf[0]) { tintin_puts2(ses, buf); } tintin_header(ses, ""); return ses; } DO_COMMAND(do_cr) { write_mud(ses, "", SUB_EOL); return ses; } DO_COMMAND(do_echo) { char temp[BUFFER_SIZE], output[BUFFER_SIZE], left[BUFFER_SIZE]; int lnf; sprintf(temp, "{result} %s", arg); set_nest_node(ses->list[LIST_VARIABLE], "result", ""); do_format(ses, temp); substitute(ses, "$result", temp, SUB_VAR|SUB_FUN|SUB_COL); arg = temp; if (*arg == DEFAULT_OPEN) { arg = get_arg_in_braces(arg, left, TRUE); get_arg_in_braces(arg, temp, TRUE); if (*temp) { int row = (int) get_number(ses, temp); substitute(ses, left, temp, SUB_ESC); do_one_prompt(ses, temp, row); return ses; } } lnf = !str_suffix(arg, "\\"); substitute(ses, arg, temp, SUB_ESC); if (strip_vt102_strlen(ses->more_output) != 0) { sprintf(output, "\n\033[0m%s\033[0m", temp); } else { sprintf(output, "\033[0m%s\033[0m", temp); } add_line_buffer(ses, output, lnf); if (ses != gtd->ses) { return ses; } if (!HAS_BIT(ses->flags, SES_FLAG_READMUD) && IS_SPLIT(ses)) { save_pos(ses); goto_rowcol(ses, ses->bot_row, 1); } printline(ses, output, lnf); if (!HAS_BIT(ses->flags, SES_FLAG_READMUD) && IS_SPLIT(ses)) { restore_pos(ses); } return ses; } DO_COMMAND(do_end) { if (*arg) { quitmsg(arg); } else { quitmsg(NULL); } return NULL; } DO_COMMAND(do_forall) { char left[BUFFER_SIZE], right[BUFFER_SIZE], temp[BUFFER_SIZE]; arg = sub_arg_in_braces(ses, arg, left, GET_ALL, SUB_VAR|SUB_FUN); arg = get_arg_in_braces(arg, right, TRUE); if (*left == 0 || *right == 0) { tintin_printf2(ses, "#ERROR: #FORALL - PROVIDE 2 ARGUMENTS"); } else { arg = left; while (*arg) { arg = get_arg_in_braces(arg, temp, TRUE); RESTRING(gtd->cmds[0], temp); substitute(ses, right, temp, SUB_CMD); ses = script_driver(ses, -1, temp); if (*arg == COMMAND_SEPARATOR) { arg++; } } } return ses; } DO_COMMAND(do_info) { int cnt; if (*arg == 'c') { show_cpu(ses); return ses; } if (*arg == 's') { dump_stack(); return ses; } tintin_header(ses, " INFORMATION "); for (cnt = 0 ; cnt < LIST_MAX ; cnt++) { if (!HAS_BIT(ses->list[cnt]->flags, LIST_FLAG_SHOW)) { continue; } tintin_printf2(ses, "%-20s %5d IGNORE %3s MESSAGE %3s DEBUG %3s", list_table[cnt].name_multi, ses->list[cnt]->used, HAS_BIT(ses->list[cnt]->flags, LIST_FLAG_IGNORE) ? "ON" : "OFF", HAS_BIT(ses->list[cnt]->flags, LIST_FLAG_MESSAGE) ? "ON" : "OFF", HAS_BIT(ses->list[cnt]->flags, LIST_FLAG_DEBUG) ? "ON" : "OFF"); } tintin_header(ses, ""); return ses; } DO_COMMAND(do_nop) { return ses; } DO_COMMAND(do_parse) { char left[BUFFER_SIZE], right[BUFFER_SIZE], temp[BUFFER_SIZE]; int cnt; arg = get_arg_in_braces(arg, left, 0); arg = get_arg_in_braces(arg, right, 1); substitute(ses, left, left, SUB_VAR|SUB_FUN); if (*left == 0 || *right == 0) { tintin_printf2(ses, "#ERROR: #PARSE - PROVIDE 2 ARGUMENTS"); } else { for (cnt = 0 ; left[cnt] != 0 ; cnt++) { #ifdef BIG5 if (left[cnt] & 0x80 && left[cnt+1] != 0) { sprintf(temp, "%c%c", left[cnt], left[cnt+1]); cnt++; } else { sprintf(temp, "%c", left[cnt]); } #else sprintf(temp, "%c", left[cnt]); #endif RESTRING(gtd->cmds[0], temp); substitute(ses, right, temp, SUB_CMD); ses = script_driver(ses, -1, temp); } } return ses; } DO_COMMAND(do_send) { char left[BUFFER_SIZE]; push_call("do_send(%p,%p)",ses,arg); get_arg_in_braces(arg, left, TRUE); write_mud(ses, left, SUB_VAR|SUB_FUN|SUB_ESC|SUB_EOL); pop_call(); return ses; } DO_COMMAND(do_showme) { char left[BUFFER_SIZE], right[BUFFER_SIZE], temp[STRING_SIZE], *ptf; int lnf; arg = get_arg_in_braces(arg, left, TRUE); lnf = !str_suffix(left, "\\"); substitute(ses, left, temp, SUB_VAR|SUB_FUN|SUB_COL|SUB_ESC); arg = sub_arg_in_braces(ses, arg, right, GET_ONE, SUB_VAR|SUB_FUN); if (*right) { do_one_line(temp, ses); if (HAS_BIT(ses->flags, SES_FLAG_GAG)) { DEL_BIT(ses->flags, SES_FLAG_GAG); } else { do_one_prompt(ses, temp, (int) get_number(ses, right)); } return ses; } if (ses == gtd->ses && !HAS_BIT(ses->flags, SES_FLAG_READMUD) && IS_SPLIT(ses)) { save_pos(ses); goto_rowcol(ses, ses->bot_row, 1); } arg = temp; while (arg) { ptf = strchr(arg, '\n'); if (ptf != NULL) { *ptf++ = 0; } do_one_line(arg, ses); if (HAS_BIT(ses->flags, SES_FLAG_GAG)) { DEL_BIT(ses->flags, SES_FLAG_GAG); } else { if (strip_vt102_strlen(ses->more_output) != 0) { sprintf(left, "\n\033[0m%s\033[0m", arg); } else { sprintf(left, "\033[0m%s\033[0m", arg); } add_line_buffer(ses, left, ptf ? lnf : 0); if (ses == gtd->ses) { printline(ses, left, lnf); } } arg = ptf; } if (ses == gtd->ses && !HAS_BIT(ses->flags, SES_FLAG_READMUD) && IS_SPLIT(ses)) { restore_pos(ses); } return ses; } DO_COMMAND(do_snoop) { struct session *sesptr = ses; char left[BUFFER_SIZE]; get_arg_in_braces(arg, left, 1); substitute(ses, left, left, SUB_VAR|SUB_FUN); if (*left) { for (sesptr = gts->next ; sesptr ; sesptr = sesptr->next) { if (!strcmp(sesptr->name, left)) { break; } } if (sesptr == NULL) { tintin_puts2(ses, "#NO SESSION WITH THAT NAME!"); return ses; } } else { sesptr = ses; } if (HAS_BIT(sesptr->flags, SES_FLAG_SNOOP)) { tintin_printf2(ses, "#UNSNOOPING SESSION '%s'", sesptr->name); } else { tintin_printf2(ses, "#SNOOPING SESSION '%s'", sesptr->name); } TOG_BIT(sesptr->flags, SES_FLAG_SNOOP); return ses; } DO_COMMAND(do_suspend) { suspend_handler(0); return ses; } DO_COMMAND(do_test) { return ses; } DO_COMMAND(do_zap) { struct session *sesptr = ses; char left[BUFFER_SIZE]; sub_arg_in_braces(ses, arg, left, GET_ALL, SUB_VAR|SUB_FUN); sesptr = ses; if (*left) { for (sesptr = gts->next ; sesptr ; sesptr = sesptr->next) { if (!strcmp(sesptr->name, left)) { break; } } if (sesptr == NULL) { tintin_puts2(ses, "#NO SESSION WITH THAT NAME!"); return ses; } } tintin_puts(sesptr, ""); tintin_puts(sesptr, "#ZZZZZZZAAAAAAAAPPPP!!!!!!!!! LET'S GET OUTTA HERE!!!!!!!!"); if (sesptr == gts) { return do_end(NULL, ""); } cleanup_session(sesptr); return gtd->ses; }