/*"syslag" with help from Omicron */ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" SHELL *shell_first = NULL; #ifdef WINDOWS SHELL *new_shell (void) {return NULL;} void finger (CHAR_DATA * ch, char *argy) {return;} void syslag (CHAR_DATA * ch, char *argy) {return;} void check_background_processes (void) {return;} #else SHELL * new_shell (void) { SHELL *n; n = mem_alloc (sizeof (*n)); n->next = shell_first; shell_first = n; n->wait = 1; n->caller[0] = '\0'; n->fname[0] = '\0'; return n; } void logsearch (CHAR_DATA * ch, char *argy) { SHELL *sh; char tmpln[500]; char fn[50]; int i; DEFINE_COMMAND ("logsearch", logsearch, POSITION_DEAD, MAX_LEVEL, LOG_NORMAL, "Allows you to spawn a log grepping process...") sh = new_shell (); fn[0] = number_range ('a', 'z'); fn[1] = number_range ('a', 'z'); fn[2] = number_range ('a', 'z'); fn[3] = number_range ('a', 'z'); fn[4] = number_range ('a', 'z'); fn[5] = '.'; fn[6] = 'F'; fn[7] = '\0'; for (i = 0; i < strlen(argy); i++) { if (argy[i] == ';') return; } strcpy (sh->fname, fn); strcpy (sh->caller, NAME (ch)); sprintf (tmpln, "grep %s ../log/* > %s &", argy, fn); system (tmpln); send_to_char ("Log search started.\n\r", ch); return; } void finger (CHAR_DATA * ch, char *argy) { SHELL *sh; char tmpln[500]; char fn[50]; DEFINE_COMMAND ("sysfinger", finger, POSITION_DEAD, MAX_LEVEL, LOG_ALWAYS, "Allows you to spawn a finger process...") sh = new_shell (); fn[0] = number_range ('a', 'z'); fn[1] = number_range ('a', 'z'); fn[2] = number_range ('a', 'z'); fn[3] = number_range ('a', 'z'); fn[4] = number_range ('a', 'z'); fn[5] = '.'; fn[6] = 'F'; fn[7] = '\0'; strcpy (sh->fname, fn); strcpy (sh->caller, NAME (ch)); sprintf (tmpln, "finger %s > %s &", argy, fn); system (tmpln); send_to_char ("Sysfinger subprocess started.\n\r", ch); return; } void syslag (CHAR_DATA * ch, char *argy) { SHELL *sh; char tmpln[500]; char fn[50]; DEFINE_COMMAND ("syslag", syslag, POSITION_DEAD, MAX_LEVEL, LOG_ALWAYS, "Shows system memory reqs, etc...") sh = new_shell (); fn[0] = number_range ('a', 'z'); fn[1] = number_range ('a', 'z'); fn[2] = number_range ('a', 'z'); fn[3] = number_range ('a', 'z'); fn[4] = number_range ('a', 'z'); fn[5] = '.'; fn[6] = 'X'; fn[7] = '\0'; strcpy (sh->fname, fn); strcpy (sh->caller, NAME (ch)); #ifdef SUN sprintf (tmpln, "/usr/ucb/ps -aux | grep Emlen > %s &", fn); #else sprintf (tmpln, "ps -ux | grep LoC > %s &", fn); #endif system (tmpln); send_to_char ("Syslag subprocess started.\n\r", ch); return; } void check_background_processes (void) { CHAR_DATA *ch; SHELL *sh; SHELL *sh_n; SHELL *s; FILE *fp; char buf[500]; char tmpln[8024]; for (sh = shell_first; sh != NULL; sh = sh_n) { sh_n = sh->next; if ((fp = fopen (sh->fname, "a")) == NULL) continue; if (sh->wait > 0) { sh->wait--; fclose (fp); continue; } fprintf (fp, "\n\rEND\n\r"); fclose (fp); if ((fp = fopen (sh->fname, "r")) == NULL) continue; if ((ch = get_char_world_2 (char_list, sh->caller)) == NULL) { goto xx; continue; } if (sh->fname[6] == 'X') { send_to_char ("\nUSER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND\n\r", ch); } for (;;) { strcpy (tmpln, fread_string_eol (fp)); if (!str_prefix ("END", tmpln) || !str_cmp (tmpln, "END")) goto dun; send_to_char (tmpln, ch); send_to_char ("\n\r", ch); } dun: fclose (fp); xx: sprintf (buf, "%s", sh->fname); unlink (buf); if (sh == shell_first) shell_first = sh->next; else for (s = shell_first; s != NULL; s = s->next) { if (s->next == sh) { s->next = sh->next; goto dun2; } } dun2: free_m (sh); } return; } #endif