The recent post of code snippets that had a function to view the last 20 lines of the syslog really inspired me. I created a function that allows people to view various log files. Gods can request how many lines they want look at, etc. IMHO I think it makes a good code snippet. ACMD(do_file) { FILE *req_file; int cur_line = 0, num_lines = 0, req_lines = 0, i, j; int l; char field[MAX_INPUT_LENGTH], value[MAX_INPUT_LENGTH]; struct file_struct { char *cmd; char level; char *file; } fields[] = { { "none", LVL_IMPL, "Does Nothing" }, { "bug", LVL_IMPL, "../lib/misc/bugs"}, { "typo", LVL_BUILDER, "../lib/misc/typos"}, { "ideas", LVL_IMPL, "../lib/misc/ideas"}, { "xnames", LVL_IMPL, "../lib/misc/xnames"}, { "levels", LVL_MINOR, "../log/levels" }, { "rip", LVL_MINOR, "../log/rip" }, { "players", LVL_MINOR, "../log/newplayers" }, { "rentgone", LVL_MINOR, "../log/rentgone" }, { "godcmds", LVL_IMPL, "../log/godcmds" }, { "syslog", LVL_IMPL, "../syslog" }, { "crash", LVL_IMPL, "../syslog.CRASH" }, { "\n", 0, "\n" } }; skip_spaces(&argument); if (!*argument) { strcpy(buf, "USAGE: file <option> <num lines>\r\n\r\nFile options:\r\n"); for (j = 0, i = 1; fields[i].level; i++) if (fields[i].level <= GET_LEVEL(ch)) sprintf(buf, "%s%-15s%s\r\n", buf, fields[i].cmd, fields[i].file); send_to_char(buf, ch); return; } strcpy(arg, two_arguments(argument, field, value)); for (l = 0; *(fields[l].cmd) != '\n'; l++) if (!strncmp(field, fields[l].cmd, strlen(field))) break; if(*(fields[l].cmd) == '\n') { send_to_char("That is not a valid option!\r\n", ch); return; } if (GET_LEVEL(ch) < fields[l].level) { send_to_char("You are not godly enough to view that file!\r\n", ch); return; } if(!*value) req_lines = 15; /* default is the last 15 lines */ else req_lines = atoi(value); /* open the requested file */ if (!(req_file=fopen(fields[l].file,"r"))) { sprintf(buf2, "SYSERR: Error opening file %s using 'file' command.", fields[l].file); mudlog(buf2, BRF, LVL_IMPL, TRUE); return; } /* count lines in requested file */ get_line(req_file,buf); while (!feof(req_file)) { num_lines++; get_line(req_file,buf); } fclose(req_file); /* Limit # of lines printed to # requested or # of lines in file or 150 lines */ if(req_lines > num_lines) req_lines = num_lines; if(req_lines > 150) req_lines = 150; /* close and re-open */ if (!(req_file=fopen(fields[l].file,"r"))) { sprintf(buf2, "SYSERR: Error opening file %s using 'file' command.", fields[l].file); mudlog(buf2, BRF, LVL_IMPL, TRUE); return; } buf2[0] = '\0'; /* and print the requested lines */ get_line(req_file,buf); while (!feof(req_file)) { cur_line++; if(cur_line > (num_lines - req_lines)) { sprintf(buf2,"%s%s\r\n",buf2, buf); } get_line(req_file,buf); } page_string(ch->desc, buf2, 1); fclose(req_file); } -- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Haddixx | -=-=-Implementor of Avalanche MUD-=-=- | + Brian M. Menges + Running at: 143.207.31.45 8000 + | haddixx@megamed.com | Web Page: http://www.megamed.com/~haddixx | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-----------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://cspo.queensu.ca/~fletcher/Circle/list_faq.html | +-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/07/00 PST