X-Git-Url: https://git.draconx.ca/gitweb/upkg.git/blobdiff_plain/a9b51e6d85e077f8e18c35ac3606d80b343927e0..90b53df329f9a114770dccab6b7e41f9094dfac9:/src/upkg.c diff --git a/src/upkg.c b/src/upkg.c index 660819c..f2ad3bc 100644 --- a/src/upkg.c +++ b/src/upkg.c @@ -1,6 +1,30 @@ +/* + * upkg: tool for manipulating Unreal Tournament packages. + * Copyright (C) 2009 Nick Bowler + * + * 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 + */ + #include #include +#include + #include "upkg.h" +#include "module.h" +#include "serializable.h" +#include "exportable.h" void print_upkg_flags(const char *prefix, unsigned long flags) { @@ -18,6 +42,16 @@ void print_upkg_flags(const char *prefix, unsigned long flags) printf("%sRequired\n", prefix); } +void print_guid(unsigned char guid[static 16]) +{ + for (unsigned i = 0; i < 16; i++) { + printf("%02hhx", guid[i]); + if (i == 15) + putchar('\n'); + else + putchar(' '); + } +} int main(int argc, char **argv) { @@ -28,6 +62,9 @@ int main(int argc, char **argv) return EXIT_FAILURE; } + if (module_init() != 0) + return EXIT_FAILURE; + pkg = upkg_fopen(argv[1]); if (!pkg) { fprintf(stderr, "failed to open package!\n"); @@ -36,6 +73,8 @@ int main(int argc, char **argv) printf("Version: %u\n", pkg->version); printf("License: %u\n", pkg->license); + printf("GUID: "); + print_guid(pkg->guid); printf("Flags: %lx\n", pkg->flags); print_upkg_flags("\t", pkg->flags); @@ -48,6 +87,25 @@ int main(int argc, char **argv) printf("Exports: %lu\n", pkg->export_count); printf("Imports: %lu\n", pkg->import_count); + UPkgModule *m = upkg_module_new("engine"); + g_type_module_use(G_TYPE_MODULE(m)); + + GObject *music = g_object_new(g_type_from_name("EngineMusic"), NULL); + if (!music) + return EXIT_FAILURE; + struct upkg_file *f = upkg_export_open(pkg, 0); + upkg_deserialize(music, f); + + char name[256]; + upkg_export_name(music, name, sizeof name); + FILE *fp = fopen(name, "wb"); + if (!fp) return EXIT_FAILURE; + upkg_export(music, fp); + fclose(fp); + printf("Wrote %s\n", name); + upkg_close(pkg); + module_exit(); + return 0; }