summaryrefslogtreecommitdiff
path: root/appl/cmd/gif2bit.b
diff options
context:
space:
mode:
Diffstat (limited to 'appl/cmd/gif2bit.b')
-rw-r--r--appl/cmd/gif2bit.b101
1 files changed, 101 insertions, 0 deletions
diff --git a/appl/cmd/gif2bit.b b/appl/cmd/gif2bit.b
new file mode 100644
index 00000000..1bd35521
--- /dev/null
+++ b/appl/cmd/gif2bit.b
@@ -0,0 +1,101 @@
+#
+# gif2bit -
+#
+# A simple command line utility for converting GIF images to
+# inferno bitmaps.
+#
+# Craig Newell, Jan. 1999 CraigN@cheque.uq.edu.au
+#
+implement gif2bit;
+
+include "sys.m";
+ sys: Sys;
+include "draw.m";
+ draw: Draw;
+ Display: import draw;
+include "string.m";
+include "bufio.m";
+ bufio: Bufio;
+ Iobuf: import bufio;
+include "imagefile.m";
+
+mod_name := "gif2bit";
+
+gif2bit : module
+{
+ init: fn(ctx: ref Draw->Context, argv: list of string);
+};
+
+usage()
+{
+ sys->print("usage: %s <GIF file>\n", mod_name);
+ exit;
+}
+
+init(ctx: ref Draw->Context, argv: list of string)
+{
+ sys = load Sys Sys->PATH;
+
+ # check arguments
+ if (argv == nil)
+ usage();
+ mod_name = hd argv;
+ argv = tl argv;
+ if (argv == nil)
+ usage();
+ s := hd argv;
+ if (len s && s[0] == '-')
+ usage();
+
+ # load the modules
+ str := load String String->PATH;
+ draw = load Draw Draw->PATH;
+ bufio = load Bufio Bufio->PATH;
+ remap := load Imageremap Imageremap->PATH;
+ imgfile := load RImagefile RImagefile->READGIFPATH;
+ imgfile->init(bufio);
+
+ # open the display
+ display: ref Draw->Display;
+ if (ctx == nil) {
+ display = Display.allocate(nil);
+ } else {
+ display = ctx.display;
+ }
+
+ # process all the files
+ while (argv != nil) {
+
+ # get the filenames
+ gif_name := hd argv;
+ argv = tl argv;
+ (base_name, nil) := str->splitstrl(gif_name, ".gif");
+ bit_name := base_name + ".bit";
+
+ i := bufio->open(gif_name, Bufio->OREAD);
+ if (i == nil) {
+ sys->print("%s: unable to open <%s>\n", mod_name, gif_name);
+ continue;
+ }
+ (raw_img, errstr) := imgfile->read(i);
+ if (errstr != nil) {
+ sys->print("%s: %s\n", mod_name, errstr);
+ continue;
+ }
+ i.close();
+
+ (img, errstr1) := remap->remap(raw_img, display, 0);
+ if (errstr1 != nil) {
+ sys->print("%s: %s\n", mod_name, errstr1);
+ continue;
+ }
+
+ ofd := sys->create(bit_name, Sys->OWRITE, 8r644);
+ if (ofd == nil) {
+ sys->print("%s: unable to create <%s>\n", mod_name, bit_name);
+ continue;
+ }
+ display.writeimage(ofd, img);
+ ofd = nil;
+ }
+}