This is getren.c in view mode; [Download] [Up]
/* * getren.c - getren - Display images on the HP Renaissance (98720A) * * Author: John W. Peterson & Glenn McMinn * Computer Science Dept. * University of Utah * Date: Tue Aug 18 1987 * Copyright (c) 1987, John W. Peterson * * TODO: * - Should warn you if configuration is not sufficient (< 24 bits) */ #define MIN(a,b) ( a<b ? a : b) #include <stdio.h> #include <starbase.c.h> #include "rle.h" #ifdef USE_STDLIB_H #include <stdlib.h> #endif int display_flag = FALSE; int driver_flag = FALSE; char *display_name = "/dev/hp98721"; char *driver_name = "hp98721"; #define RASTERHEIGHT 1024 /* Calling inquire_sizes is just too tedious */ main(argc,argv) int argc; char *argv[]; { int fildes; int x_len, y_len, x_off = 0, y_off = 0; int i, j, map_offset ; unsigned char **scan; char * filename = NULL; int over_flag = 0; int pos_flag = 0; float tmp; float colors[256][3]; gescape_arg arg1, arg2; if (! scanargs( argc, argv, "% pP%-xpos!dypos!d O%- d%-display!s x%-driver!s infile%s", &pos_flag, &x_off, &y_off, &over_flag, &display_flag,&display_name, &driver_flag,&driver_name, &filename )) exit( -1 ); if (! over_flag) over_flag = INIT; if (( fildes = gopen(display_name, OUTDEV, driver_name, over_flag )) < 0) fprintf(stderr, "getren: can't open %s\n", display_name); rle_dflt_hdr.rle_file = rle_open_f("getren", filename, "r"); rle_get_setup( &rle_dflt_hdr ); /* So we see the whole FB. */ clip_indicator( fildes, CLIP_OFF ); arg1.i[0] = FALSE; gescape( fildes, SWITCH_SEMAPHORE, &arg1, &arg2 ); /* This version assumes a full 24-bit machine */ shade_mode( fildes, CMAP_FULL, 0 ); if ( rle_dflt_hdr.ncmap ) /* Use colormap in file */ { map_offset = 1 << rle_dflt_hdr.cmaplen; if (rle_dflt_hdr.ncmap == 3) { for (i = 0; i < 256; i++) { colors[i][0] = (float) ((rle_dflt_hdr.cmap[i] >>8) & 0xFF) / 255.0; colors[i][1] = (float) ((rle_dflt_hdr.cmap[i+map_offset] >>8) & 0xFF) / 255.0; colors[i][2] = (float) ((rle_dflt_hdr.cmap[i+2*map_offset]>>8) & 0xFF) / 255.0; } } else if (rle_dflt_hdr.ncmap == 1) { for (i = 0; i < 256; i++) { tmp = (float) ((rle_dflt_hdr.cmap[i] >> 8) * 0xFF); colors[i][0] = tmp; colors[i][1] = tmp; colors[i][2] = tmp; } } else { fprintf(stderr, "getren: Sorry, don't grock N channel color maps\n"); exit(-1); } } else { /* Set the color map to default */ for (i = 0; i < 256; i++) { tmp = (float) i / 255.0; colors[i][0] = tmp; colors[i][1] = tmp; colors[i][2] = tmp; } } define_color_table( fildes, 0, 256, colors ); x_len = rle_dflt_hdr.xmax - rle_dflt_hdr.xmin + 1; y_len = rle_dflt_hdr.ymax - rle_dflt_hdr.ymin + 1; if (pos_flag) { if (pos_flag == 1) /* -P, incremental position */ { x_off = rle_dflt_hdr.xmin + x_off; y_off += rle_dflt_hdr.ymin; } } else { x_off = rle_dflt_hdr.xmin; y_off = rle_dflt_hdr.ymin; } y_off = RASTERHEIGHT - y_off - 1; /* Invert origin */ /* This gets rid of the left margin slop in the scanline. */ rle_dflt_hdr.xmax -= rle_dflt_hdr.xmin; rle_dflt_hdr.xmin = 0; if (rle_row_alloc( &rle_dflt_hdr, &scan )) fprintf(stderr, "getren: malloc failed\n"); /* Display each scanline. */ y_len = MIN( RASTERHEIGHT-1, y_len ); for ( i = 0; i < y_len ; i ++) { rle_getrow(&rle_dflt_hdr, scan ); for (j = RLE_RED; j < rle_dflt_hdr.ncolors; j++) { /* HP numbers channels backwards from URT */ bank_switch( fildes, 2-j, 0 ); dcblock_write( fildes, x_off, y_off - i, x_len, 1, scan[j] ); } /* KLUDGE for black and white. */ while (j <= RLE_BLUE) { bank_switch( fildes, 2-j, 1 ); dcblock_write( fildes, x_off, y_off - i, x_len, 1, scan[0] ); j++; } } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.