Path: utzoo!attcan!uunet!lll-winken!lll-tis!helios.ee.lbl.gov!pasteur!ames!mailrus!caen.engin.umich.edu!dpg From: dpg@caen.engin.umich.edu (David P Gorgen) Newsgroups: comp.sys.apollo Subject: Re: Apollo Logo (long reply) Summary: it's just a bag of bits Keywords: /sys/apollo_logo format Message-ID: <403814e9.1285f@maize.engin.umich.edu> Date: 12 Dec 88 23:08:00 GMT References: <576@dover.uucp> Reply-To: dpg@citi.umich.edu (David P Gorgen) Distribution: na Organization: Apollo Computer Inc. Lines: 198 In article <576@dover.uucp> turner@dover.uucp (Robert Turner) writes: > Is there an easy place that documents the format of the > file "/sys/apollo_logo"? > > The file appears to be a mapl file, and the few internals > documents we have here seem to ignore this cute little file. > > I know some vendors have modified this logo file replacing > the "apollo" with their logo. This has been a subject of periodic interest on this newsgroup, so I thought I'd post the answer and some actual code. It's so simple it can hardly be said to have a format at all. It is nothing but the contents of a 512x160 bitmap. No header or index or anything. The MSB of a word appears leftmost on the screen, as is natural for 680x0's. A long time ago I wrote some Pascal to convert between GPR external bitmap files and "logo files". The two programs are reasonably short, so I append them. Now you can write GPR code to make whatever logo file you want. Have fun. (Obviously this stuff is in no way supported by Apollo, nor by me personally for that matter.) -- Dave Gorgen program bitmap2logo; %include '/sys/ins/base.ins.pas'; %include '/sys/ins/ms.ins.pas'; %include '/sys/ins/error.ins.pas'; %include '/sys/ins/pgm.ins.pas'; %include '/sys/ins/gpr.ins.pas'; const str_size = 100; type str_t = array [1..str_size] of char; logo_512x160_t = array [0..159, 0..31] of integer; var st: status_$t; i, j: integer; arg_error: boolean; logo_pn, bitm_pn: str_t; logo_pn_len, bitm_pn_len: integer; file_pointer: ^ logo_512x160_t; file_len: linteger; init_bitm, bitm: gpr_$bitmap_desc_t; bitm_size: gpr_$offset_t; bitm_attribs: gpr_$attribute_desc_t; bitm_pointer: ^ logo_512x160_t; bitm_index: integer32; bitm_wpl: integer; bitm_version: gpr_$version_t; bitm_groups: integer; bitm_headers: gpr_$bmf_group_header_array_t; bitm_created: boolean; begin bitm_pn_len := pgm_$get_arg(1, bitm_pn, st, str_size); arg_error := st.all <> 0; if not arg_error then begin logo_pn_len := pgm_$get_arg(2, logo_pn, st, str_size); arg_error := st.all <> 0; end; if arg_error then begin writeln('Usage: bitmap2logo input_bitmap_file output_logo_file'); return; end; file_pointer := ms_$crmapl(logo_pn, logo_pn_len, 0, 10240, ms_$nr_xor_1w, st); if st.code <> 0 then begin error_$print_name(st, logo_pn, logo_pn_len); return; end; bitm_size.x_size := 16; bitm_size.y_size := 16; gpr_$init(gpr_$no_display, 0, bitm_size, 0, init_bitm, st); gpr_$allocate_attribute_block(bitm_attribs, st); bitm_size.x_size := 512; bitm_size.y_size := 160; bitm_groups := 1; with bitm_headers[0] do begin n_sects := 1; pixel_size := 1; allocated_size := 1; bytes_per_line := 64; bytes_per_sect := 10240; end; gpr_$open_bitmap_file(gpr_$readonly, bitm_pn, bitm_pn_len, bitm_version, bitm_size, bitm_groups, bitm_headers, bitm_attribs, bitm, bitm_created, st); gpr_$inq_bitmap_pointer(bitm, bitm_pointer, bitm_wpl, st); for i := 0 to 159 do for j := 0 to 31 do file_pointer^[i, j] := bitm_pointer^[i, j]; ms_$truncate(file_pointer, 10240, st); ms_$unmap(file_pointer, 10240, st); gpr_$terminate(true, st); end. program logo2bitmap; %include '/sys/ins/base.ins.pas'; %include '/sys/ins/ms.ins.pas'; %include '/sys/ins/error.ins.pas'; %include '/sys/ins/pgm.ins.pas'; %include '/sys/ins/gpr.ins.pas'; const str_size = 100; type str_t = array [1..str_size] of char; logo_512x160_t = array [0..159, 0..31] of integer; var st: status_$t; i, j: integer; arg_error: boolean; logo_pn, bitm_pn: str_t; logo_pn_len, bitm_pn_len: integer; file_pointer: ^ logo_512x160_t; file_len: linteger; init_bitm, bitm: gpr_$bitmap_desc_t; bitm_size: gpr_$offset_t; bitm_attribs: gpr_$attribute_desc_t; bitm_pointer: ^ logo_512x160_t; bitm_index: integer32; bitm_wpl: integer; bitm_version: gpr_$version_t; bitm_groups: integer; bitm_headers: gpr_$bmf_group_header_array_t; bitm_created: boolean; begin logo_pn_len := pgm_$get_arg(1, logo_pn, st, str_size); arg_error := st.all <> 0; if not arg_error then begin bitm_pn_len := pgm_$get_arg(2, bitm_pn, st, str_size); arg_error := st.all <> 0; end; if arg_error then begin writeln('Usage: logo2bitmap input_logo_file output_bitmap_file'); return; end; file_pointer := ms_$mapl(logo_pn, logo_pn_len, 0, 131072, ms_$nr_xor_1w, ms_$r, false, file_len, st); if st.code <> 0 then begin error_$print_name(st, logo_pn, logo_pn_len); return; end; bitm_size.x_size := 16; bitm_size.y_size := 16; gpr_$init(gpr_$no_display, 0, bitm_size, 0, init_bitm, st); gpr_$allocate_attribute_block(bitm_attribs, st); bitm_size.x_size := 512; bitm_size.y_size := 160; bitm_groups := 1; with bitm_headers[0] do begin n_sects := 1; pixel_size := 1; allocated_size := 1; bytes_per_line := 64; bytes_per_sect := 10240; end; gpr_$open_bitmap_file(gpr_$create, bitm_pn, bitm_pn_len, bitm_version, bitm_size, bitm_groups, bitm_headers, bitm_attribs, bitm, bitm_created, st); gpr_$inq_bitmap_pointer(bitm, bitm_pointer, bitm_wpl, st); for i := 0 to 159 do for j := 0 to 31 do bitm_pointer^[i, j] := file_pointer^[i, j]; gpr_$terminate(true, st); end.