File: macres.cpp

package info (click to toggle)
maelstrom 3.0.7-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,952 kB
  • sloc: cpp: 10,947; sh: 3,406; ansic: 2,781; makefile: 175
file content (72 lines) | stat: -rw-r--r-- 2,126 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
    MACRES:  A program to extract data from Macintosh (tm) resource forks
    Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>

    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
*/

/* Test program to list and extract Macintosh resources from a resource fork */

#include <stdlib.h>

#include "SDL.h"
#include "Mac_Resource.h"

int main(int argc, char *argv[])
{
	Mac_Resource *res;
	char      **types;
	Uint16     *ids;
	int         i, j;

	if ( ! argv[1] ) {
		fprintf(stderr, "Usage: %s <Mac Resource File>\n", argv[0]);
		exit(1);
	}

	res = new Mac_Resource(argv[1]);
	if ( res->Error() ) {
		fprintf(stderr, "Mac_Resource: %s\n", res->Error());
		delete res;
		exit(2);
	}
	
	types = res->Types();
	for ( i=0; types[i]; ++i ) {
		ids = res->ResourceIDs(types[i]);
		printf("Resource set: type = '%s', contains %hd resources\n",
					types[i], res->NumResources(types[i]));
		for ( j=0; ids[j] < 0xFFFF; ++j ) {
			printf("\tResource %d (ID = %d): \"%s\"\n", j+1,
				ids[j], res->ResourceName(types[i], ids[j]));
			if ( argv[2] ) {
				char path[23];
				snprintf(path,sizeof(path),"%s/%s:%hu", argv[2],
							types[i], ids[j]);
				FILE *output;
				Mac_ResData *D;
            			if ( (output=fopen(path, "w")) != NULL ) {
					D = res->Resource(types[i], ids[j]);
					fwrite(D->data, D->length, 1,  output);
					fclose(output);               
            			}
			}
		}
		delete[]  ids;
	}
	delete[] types;
	delete res;
	exit(0);
}