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