xref: /inferno-os/appl/cmd/bit2gif.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth#
2*37da2899SCharles.Forsyth# bit2gif -
3*37da2899SCharles.Forsyth#
4*37da2899SCharles.Forsyth# A simple command line utility for converting inferno bitmaps
5*37da2899SCharles.Forsyth# to gif images.
6*37da2899SCharles.Forsyth#
7*37da2899SCharles.Forsyth# Craig Newell, Jan. 1999	CraigN@cheque.uq.edu.au
8*37da2899SCharles.Forsyth#
9*37da2899SCharles.Forsythimplement bit2gif;
10*37da2899SCharles.Forsyth
11*37da2899SCharles.Forsythinclude "sys.m";
12*37da2899SCharles.Forsyth	sys: Sys;
13*37da2899SCharles.Forsythinclude "draw.m";
14*37da2899SCharles.Forsyth	draw: Draw;
15*37da2899SCharles.Forsyth	Display: import draw;
16*37da2899SCharles.Forsythinclude "string.m";
17*37da2899SCharles.Forsythinclude "bufio.m";
18*37da2899SCharles.Forsyth	bufio: Bufio;
19*37da2899SCharles.Forsyth	Iobuf: import bufio;
20*37da2899SCharles.Forsythinclude "imagefile.m";
21*37da2899SCharles.Forsyth
22*37da2899SCharles.Forsythbit2gif : module
23*37da2899SCharles.Forsyth{
24*37da2899SCharles.Forsyth	init: fn(ctx: ref Draw->Context, argv: list of string);
25*37da2899SCharles.Forsyth};
26*37da2899SCharles.Forsyth
27*37da2899SCharles.Forsythusage()
28*37da2899SCharles.Forsyth{
29*37da2899SCharles.Forsyth	sys->print("usage: bit2gif <inferno bitmap>\n");
30*37da2899SCharles.Forsyth	exit;
31*37da2899SCharles.Forsyth}
32*37da2899SCharles.Forsyth
33*37da2899SCharles.Forsythinit(ctx: ref Draw->Context, argv: list of string)
34*37da2899SCharles.Forsyth{
35*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
36*37da2899SCharles.Forsyth
37*37da2899SCharles.Forsyth	# check arguments
38*37da2899SCharles.Forsyth	if (argv == nil)
39*37da2899SCharles.Forsyth		usage();
40*37da2899SCharles.Forsyth	argv = tl argv;
41*37da2899SCharles.Forsyth	if (argv == nil)
42*37da2899SCharles.Forsyth		usage();
43*37da2899SCharles.Forsyth	s := hd argv;
44*37da2899SCharles.Forsyth	if (len s && s[0] == '-')
45*37da2899SCharles.Forsyth		usage();
46*37da2899SCharles.Forsyth
47*37da2899SCharles.Forsyth	# load the modules
48*37da2899SCharles.Forsyth	str := load String String->PATH;
49*37da2899SCharles.Forsyth	draw = load Draw Draw->PATH;
50*37da2899SCharles.Forsyth	bufio = load Bufio Bufio->PATH;
51*37da2899SCharles.Forsyth	imgfile := load WImagefile WImagefile->WRITEGIFPATH;
52*37da2899SCharles.Forsyth	imgfile->init(bufio);
53*37da2899SCharles.Forsyth
54*37da2899SCharles.Forsyth	# open the display
55*37da2899SCharles.Forsyth	display: ref Draw->Display;
56*37da2899SCharles.Forsyth	if (ctx == nil) {
57*37da2899SCharles.Forsyth		display = Display.allocate(nil);
58*37da2899SCharles.Forsyth	} else {
59*37da2899SCharles.Forsyth		display = ctx.display;
60*37da2899SCharles.Forsyth	}
61*37da2899SCharles.Forsyth
62*37da2899SCharles.Forsyth	# process all the files
63*37da2899SCharles.Forsyth	while (argv != nil) {
64*37da2899SCharles.Forsyth
65*37da2899SCharles.Forsyth		# get the filenames
66*37da2899SCharles.Forsyth		bit_name := hd argv;
67*37da2899SCharles.Forsyth		(gif_name, nil) := str->splitstrl(bit_name, ".bit");
68*37da2899SCharles.Forsyth		gif_name = gif_name + ".gif";
69*37da2899SCharles.Forsyth
70*37da2899SCharles.Forsyth		# load inferno bitmap
71*37da2899SCharles.Forsyth		img := display.open(bit_name);
72*37da2899SCharles.Forsyth		if (img == nil) {
73*37da2899SCharles.Forsyth			sys->print("bit2gif: unable to read <%s>\n", bit_name);
74*37da2899SCharles.Forsyth		} else {
75*37da2899SCharles.Forsyth			# save as gif
76*37da2899SCharles.Forsyth			o := bufio->create(gif_name, Bufio->OWRITE, 8r644);
77*37da2899SCharles.Forsyth			if (o != nil) {
78*37da2899SCharles.Forsyth				imgfile->writeimage(o, img);
79*37da2899SCharles.Forsyth				o.close();
80*37da2899SCharles.Forsyth			}
81*37da2899SCharles.Forsyth		}
82*37da2899SCharles.Forsyth
83*37da2899SCharles.Forsyth		# next argument
84*37da2899SCharles.Forsyth		argv = tl argv;
85*37da2899SCharles.Forsyth	}
86*37da2899SCharles.Forsyth}
87