diff --git a/mbutils/Makefile b/mbutils/Makefile index d97ce99f..5f9def1c 100644 --- a/mbutils/Makefile +++ b/mbutils/Makefile @@ -96,5 +96,5 @@ mblang.o: ../config.h ../lib/mbselib.h mbstat.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h mbstat.h mbtoberep.o: ../config.h ../lib/mbselib.h mbuser.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/mbsedb.h mbuser.h -mbbw.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/bluewave.h ../lib/mbsedb.h mbbw.h +mbbw.o: ../config.h ../lib/mbselib.h ../lib/bluewave.h # End of generated dependencies diff --git a/mbutils/mbbw.c b/mbutils/mbbw.c new file mode 100644 index 00000000..f2886361 --- /dev/null +++ b/mbutils/mbbw.c @@ -0,0 +1,160 @@ +/***************************************************************************** + * + * $Id$ + * Purpose ...............: Dump Bluewave packets + * + ***************************************************************************** + * Copyright (C) 1997-2006 + * + * Michiel Broek FIDO: 2:280/2802 + * Beekmansbos 10 + * 1971 BV IJmuiden + * the Netherlands + * + * This file is part of MBSE BBS. + * + * This BBS 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, or (at your option) any + * later version. + * + * MBSE BBS 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 MBSE BBS; see the file COPYING. If not, write to the Free + * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + *****************************************************************************/ + +#include "../config.h" +#include "../lib/mbselib.h" +#include "../lib/bluewave.h" + + + +int main(int argc, char **argv) +{ + char *bwname, *temp; + FILE *fp; + INF_HEADER Inf; + INF_AREA_INFO AreaInf; + MIX_REC Mix; + int i; + + printf("\nMBBW: MBSE BBS %s Bluewave Dump\n", VERSION); + printf(" %s\n\n", COPYRIGHT); + + if (argc != 2) { + printf("Usage: mbbw [packetname]\n\n"); + return 0; + } + + bwname = xstrcpy(argv[1]); + temp = calloc(PATH_MAX, sizeof(char)); + sprintf(temp, "%s.INF", bwname); + + if ((fp = fopen(temp, "r"))) { + printf("---- %s.INF -------------------------------------------------------\n", bwname); + if (fread(&Inf, sizeof(INF_HEADER), 1, fp) == 1) { + printf("\n"); + printf("Packet version %d\n", Inf.ver); + for (i = 0; i < 5; i++) + if (strlen(Inf.readerfiles[i])) + printf("Display file %d %s\n", i+1, Inf.readerfiles[i]); + printf("Registration number %s\n", Inf.regnum); + printf("Login name %s\n", Inf.loginname); + printf("Aliasname %s\n", Inf.aliasname); + printf("Password type %d\n", Inf.passtype); + printf("Network address %d:%d/%d.%d\n", Inf.zone, Inf.net, Inf.node, Inf.point); + printf("Sysop %s\n", Inf.sysop); + printf("Control %sConfig %sFreq\n", (Inf.ctrl_flags & INF_NO_CONFIG) ? "No":"", + (Inf.ctrl_flags & INF_NO_FREQ) ? "No":""); + printf("System name %s\n", Inf.systemname); + printf("Max freqs %d\n", Inf.maxfreqs); + printf("Is QWK %s\n", Inf.is_QWK ? "Yes":"No"); + printf("User flags %s%s%s%s%s%s\n", (Inf.uflags & INF_HOTKEYS) ? "Hotkeys ":"", + (Inf.uflags & INF_XPERT) ? "Expert ":"", + (Inf.uflags & INF_GRAPHICS) ? "ANSI ":"", + (Inf.uflags & INF_NOT_MY_MAIL) ? "Not-my-mail ":"", + (Inf.uflags & INF_EXT_INFO) ? "Ext-info ":"", + (Inf.uflags & INF_NUMERIC_EXT) ? "Numeric-ext":""); + for (i = 0; i < 10; i++) + if (strlen(Inf.keywords[i])) + printf("Keywords %2d %s\n", i+1, Inf.keywords[i]); + for (i = 0; i < 10; i++) + if (strlen(Inf.filters[i])) + printf("Filters %2d %s\n", i+1, Inf.filters[i]); + for (i = 0; i < 3; i++) + if (strlen(Inf.macros[i])) + printf("Macro %d %s\n", i+1, Inf.macros[i]); + printf("Netmail flags %s%s%s%s%s%s%s\n", (Inf.netmail_flags & INF_CAN_CRASH) ? "Crash ":"", + (Inf.netmail_flags & INF_CAN_ATTACH) ? "Attach ":"", + (Inf.netmail_flags & INF_CAN_KSENT) ? "KSent ":"", + (Inf.netmail_flags & INF_CAN_HOLD) ? "Hold ":"", + (Inf.netmail_flags & INF_CAN_IMM) ? "Immediate ":"", + (Inf.netmail_flags & INF_CAN_FREQ) ? "Freq ":"", + (Inf.netmail_flags & INF_CAN_DIRECT) ? "Direct ":""); + printf("Credits %d\n", Inf.credits); + printf("Debits %d\n", Inf.debits); + printf("Can forward %s\n", Inf.can_forward ? "Yes":"No"); + printf("INF header length (1230) %d\n", Inf.inf_header_len); + printf("INF areainfo len (80) %d\n", Inf.inf_areainfo_len); + printf("MIX structlen (14) %d\n", Inf.mix_structlen); + printf("FTI structlen (186) %d\n", Inf.fti_structlen); + printf("Uses UPL file %s\n", Inf.uses_upl_file ? "Yes":"No"); + printf("From/To length %d\n", Inf.from_to_len); + printf("Subject length %d\n", Inf.subject_len); + printf("Packet ID %s\n", Inf.packet_id); + printf("File list type %d\n", Inf.file_list_type); + printf("Max packet size %d\n", Inf.max_packet_size); + + fseek(fp, (long)Inf.inf_header_len, SEEK_SET); + while (fread(&AreaInf, sizeof(INF_AREA_INFO), 1, fp)) { + printf("\n"); + printf("Area number %s\n", AreaInf.areanum); + printf("Area tag %s\n", AreaInf.echotag); + printf("Area title %s\n", AreaInf.title); + printf("Area flags %s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + (AreaInf.area_flags & INF_SCANNING) ? "Active ":"", + (AreaInf.area_flags & INF_ALIAS_NAME) ? "Aliases ":"", + (AreaInf.area_flags & INF_ANY_NAME) ? "Any-name ":"", + (AreaInf.area_flags & INF_ECHO) ? "Echo ":"", + (AreaInf.area_flags & INF_NETMAIL) ? "Netmail ":"", + (AreaInf.area_flags & INF_POST) ? "Post ":"", + (AreaInf.area_flags & INF_NO_PRIVATE) ? "No-private ":"", + (AreaInf.area_flags & INF_NO_PUBLIC) ? "No-public ":"", + (AreaInf.area_flags & INF_NO_TAGLINE) ? "No-tagline ":"", + (AreaInf.area_flags & INF_NO_HIGHBIT) ? "No-highbit ":"", + (AreaInf.area_flags & INF_NOECHO) ? "No-echo ":"", + (AreaInf.area_flags & INF_HASFILE) ? "Hasfile ":"", + (AreaInf.area_flags & INF_PERSONAL) ? "Personal ":"", + (AreaInf.area_flags & INF_TO_ALL) ? "To-all ":""); + printf("Network type %s\n", AreaInf.network_type ? "Internet":"Fidonet"); + } + printf("\n"); + } else { + printf("Cannot read info header\n"); + } + fclose(fp); + } + + sprintf(temp, "%s.MIX", bwname); + if ((fp = fopen(temp, "r"))) { + printf("---- %s.MIX -------------------------------------------------------\n\n", bwname); + printf(" Area Total Pers. FTI ptr\n"); + printf("------ ------ ------ ---------\n"); + while (fread(&Mix, ORIGINAL_MIX_STRUCT_LEN, 1, fp)) { + printf("%6s %6d %6d %9d\n", Mix.areanum, Mix.totmsgs, Mix.numpers, Mix.msghptr); + } + printf("\n"); + fclose(fp); + } + + free(bwname); + free(temp); + return 0; +} + +