diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 8d027fa88a..5df4bf8ebc 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -15,8 +15,8 @@ if $(TARGET_ARCH) = x86 { BEOS_BIN = addattr alert arp basename beep cat catattr chgrp chmod chop chown clear clockconfig cmp comm cp copyattr csplit cut date dd desklink df diff dirname dstcheck du echo eject env error factor false ffm find finddir fortune funzip gawk $(X86_ONLY)gdb - grep groups gzip head id ifconfig iroster isvolume join keymap kill - less lessecho lesskey link listarea listattr listdev listimage listport listsem + grep groups gzip head id ifconfig iroster isvolume join keymap kill less lessecho + lesskey link listarea listattr listdev listimage listport listres listsem ln locate logger logname ls lsindex makebootable md5sum mimeset mkdir mkindex modifiers mount mountvolume mv open pathchk ping play ppp_up pppconfig ps pwd query quit renice rm rmattr rmindex rmdir roster safemode screen_blanker sed settype diff --git a/src/bin/Jamfile b/src/bin/Jamfile index ebf71d366b..5778ebe4e3 100644 --- a/src/bin/Jamfile +++ b/src/bin/Jamfile @@ -68,6 +68,7 @@ StdBinCommands ffm.cpp iroster.cpp listattr.cpp + listres.cpp mimeset.cpp mkindex.cpp modifiers.cpp @@ -81,7 +82,7 @@ StdBinCommands shutdown.cpp version.cpp # yes.cpp - : libbe.so ; + : be ; AddResources mimeset : mimeset.rdef ; diff --git a/src/bin/listres.cpp b/src/bin/listres.cpp new file mode 100644 index 0000000000..0303ac725f --- /dev/null +++ b/src/bin/listres.cpp @@ -0,0 +1,132 @@ +/* + * Copyright 2006, Axel Dörfler, axeld@pinc-software.de. + * Distributed under the terms of the MIT license. + */ + + +#include +#include +#include +#include + +#include +#include + + +static const char * +get_type(type_code type) +{ + static char buffer[32]; + + switch (type) { + case B_MIME_STRING_TYPE: + return "MIME String"; + case B_RAW_TYPE: + return "Raw Data"; + + case B_STRING_TYPE: + return "Text"; + case B_INT64_TYPE: + return "Int-64"; + case B_UINT64_TYPE: + return "Uint-64"; + case B_INT32_TYPE: + return "Int-32"; + case B_UINT32_TYPE: + return "Uint-32"; + case B_INT16_TYPE: + return "Int-16"; + case B_UINT16_TYPE: + return "Uint-16"; + case B_INT8_TYPE: + return "Int-8"; + case B_UINT8_TYPE: + return "Uint-8"; + case B_BOOL_TYPE: + return "Boolean"; + case B_FLOAT_TYPE: + return "Float"; + case B_DOUBLE_TYPE: + return "Double"; + + case 'MICN': + return "Mini Icon"; + case 'ICON': + return "Icon"; + + default: + { + int32 missed = 0, shift = 24; + uint8 value[4]; + for (int32 i = 0; i < 4; i++, shift -= 8) { + value[i] = uint8(type >> shift); + if (value[i] < ' ' || value[i] > 127) { + value[i] = '.'; + missed++; + } + } + + if (missed < 2) + sprintf(buffer, "'%c%c%c%c'", value[0], value[1], value[2], value[3]); + else + sprintf(buffer, "0x%08lx", type); + return buffer; + } + } +} + + +int +main(int argc, char *argv[]) +{ + const char *program = strrchr(argv[0], '/'); + if (program == NULL) + program = argv[0]; + else + program++; + + if (argc < 2 || !strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) { + printf("usage: %s [ ...]\n", program); + return 1; + } + + off_t total = 0; + + for (int i = 1; i < argc; ++i) { + BFile file(argv[i], B_READ_ONLY); + + status_t status = file.InitCheck(); + if (status < B_OK) { + fprintf(stderr, "%s: opening file failed for \"%s\": %s\n", + program, argv[i], strerror(status)); + return 1; + } + + BResources resources; + status = resources.SetTo(&file); + if (status != B_OK) { + fprintf(stderr, "%s: opening resources failed for \"%s\": %s\n", + program, argv[i], strerror(status)); + return 1; + } + + printf("File: %s\n", argv[i]); + printf(" Type ID Size Name\n"); + printf("----------- ----- -------- -------------------------------\n"); + + int32 index = 0; + const char* name; + type_code type; + size_t size; + int32 id; + while (resources.GetResourceInfo(index++, &type, &id, &name, &size)) { + printf("%11s %6ld %9ld \"%s\"\n", + get_type(type), id, size, name); + + total += size; + } + } + + printf("\n%Ld bytes total in resources.\n", total); + return 0; +}