pfuetz@agd.fhg.de (02/26/91)
Submitted-by: pfuetz@agd.fhg.de Posting-number: Volume 11, Issue 87 Archive-name: xstrek/part01 This is the game strek (Star Trek Version 3.0) ported to X11. It contains 14 parts. See README for further information. === ls -lg of the 14 parts === -rw-rw-r-- 1 pfuetz siemcad 69511 Feb 8 14:41 apollo_inc.shar -rw-rw-r-- 1 pfuetz siemcad 62642 Feb 8 14:49 f_changed.shar.01 -rw-rw-r-- 1 pfuetz siemcad 49498 Feb 8 14:50 f_changed.shar.02 -rw-rw-r-- 1 pfuetz siemcad 41664 Feb 8 14:51 f_changed.shar.03 -rw-rw-r-- 1 pfuetz siemcad 27801 Feb 8 14:45 original_code.shar.01 -rw-rw-r-- 1 pfuetz siemcad 49604 Feb 8 14:46 original_code.shar.02 -rw-rw-r-- 1 pfuetz siemcad 75089 Feb 8 14:47 original_code.shar.03 -rw-rw-r-- 1 pfuetz siemcad 52819 Feb 8 14:48 original_code.shar.04 -rw-rw-r-- 1 pfuetz siemcad 86874 Feb 8 14:53 xstrek.shar.01 -rw-rw-r-- 1 pfuetz siemcad 31172 Feb 8 14:54 xstrek.shar.02 -rw-rw-r-- 1 pfuetz siemcad 78314 Feb 8 14:56 xstrek.shar.03 -rw-rw-r-- 1 pfuetz siemcad 61959 Feb 8 14:57 xstrek.shar.04 -rw-rw-r-- 1 pfuetz siemcad 56810 Feb 8 14:58 xstrek.shar.05 -rw-rw-r-- 1 pfuetz siemcad 68028 Feb 8 14:58 xstrek.shar.06 === end of ls -lg of the 14 parts === #!/bin/sh # To unshare, sh or unshar this file mkdir xstrek 2>/dev/null mkdir xstrek/f_changed 2>/dev/null mkdir xstrek/original_code 2>/dev/null mkdir xstrek/original_code/apollo_inc 2>/dev/null echo xstrek/original_code/apollo_inc/base.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/base.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/base.ins.c' X/* BASE.INS.C, /sys/ins, ers, 04/02/86 X base include file for customer use X X Changes: X 05/20/86 mishkin added ios_$id_t, ios_$max, and ios_$seek_key_t. X 04/02/86 joelm added proc1_$n_user_processes X 02/05/86 leduc Fixed declaration of status_$ok to be 0L instead of 0. X 12/06/85 mishkin Added changes for IOS. X 03/18/85 RpS Added declarations for set-manipulation library calls. X 09/04/84 knw The "Pascal-ish" boolean true value should be FF, not FFFF. X 03/26/84 jrw spelling corrections. X 09/15/83 ems removed async field from status_$t X 08/23/83 knw Changed the definition of "binteger" to be "unsigned short", X instead of "unsigned char". Altho a binteger implies an 8- X bit value, Pascal really stores them in 16 bit integers, X EXCEPT in a PACKED RECORD. Most simple usages of binteger X should allocate 16 bits in C. X 11/30/82 jrw added true, false X 09/28/82 ers original coding */ X X X/* Pascal-ish booleans: */ X X#define false ((unsigned char) 00) X#define true ((unsigned char) 0xff) X Xtypedef unsigned char boolean; X X/* System-defined stream id's: */ X X#define stream_$stdin 0 X#define stream_$stdout 1 X#define stream_$errin 2 X#define stream_$errout 3 X X#define ios_$stdin 0 X#define ios_$stdout 1 X#define ios_$errin 2 X#define ios_$errout 3 X X X X/* Common datatypes: A note about the "binteger" definition: In Pascal, the X * binteger definition is 0..255; a subrange of integer. X * Although the definition implies an 8-bit datum, Pascal X * allocates a 16-bit integer for it in all cases EXCEPT for X * Pascal "PACKED RECORDS". Only in that case are only 8 bits X * allocated. So, most simple C usages for Pascal interfaces X * must also allocate 16 bits. To make a C structure which X * mimics a Pascal PACKED RECORD, use bit fields. X */ X Xtypedef unsigned short binteger; /* positive 8 bit integer */ Xtypedef unsigned short pinteger; /* positive 16 bit integer */ Xtypedef unsigned int linteger; /* positive 31 bit integer */ X X X X/* Common status datatype returned by most Apollo-supplied procedures: */ X Xtypedef union { X struct { X unsigned fail : 1, /* true if module couldn't handle error */ X subsys : 7, /* subsystem code */ X modc : 8; /* module code */ X short code; /* module specific error */ X } s; X long all; /* used for testing for specific value */ X} status_$t; X X#define status_$ok 0L /* returned if called proc successful */ X X X/* System clock types: */ X Xtypedef unsigned int time_$clockh_t; /* high 32 bits of time_$clock */ X Xtypedef union { X struct { X time_$clockh_t high; X pinteger low; X } c1; X struct { X pinteger high16; X unsigned int low32; X } c2; X} time_$clock_t; X X X/* Number of user processes */ X X#define proc1_$n_user_processes 56 X X X/* Commonly used naming server constants and types: */ X X#define name_$pnamlen_max 256 /* max length of pathname */ X#define name_$complen_max 32 /* max length of entry name */ X Xtypedef char name_$pname_t[name_$pnamlen_max]; Xtypedef char name_$name_t[name_$complen_max]; X X X X/* Commonly used streams types: */ X X#define ios_$max 127 X Xtypedef short ios_$id_t; /* open stream identifier */ Xtypedef struct { X linteger rec_adr; X linteger byte_adr; X} ios_$seek_key_t; X Xtypedef short stream_$id_t; /* open stream identifier (same as ios_$id_t) */ Xtypedef union { X long offset; X struct { X linteger rec_adr; X linteger byte_adr; X linteger flags; X } key; X} stream_$sk_t; /* seek key returned on most stream calls */ X Xtypedef struct { X long high; X long low; X} uid_$t; /* for type uids returned by streams */ X Xtypedef struct { X long rfu1; X long rfu2; X uid_$t uid; X} xoid_$t; X X/* User eventcount definitions */ X Xtypedef struct { X long value; /* current ec value */ X pinteger awaiters; /* first process waiting */ X} ec2_$eventcount_t; X Xtypedef ec2_$eventcount_t *ec2_$ptr_t; X Xextern uid_$t uid_$nil; X X/* Library calls for set manipulation */ X Xstd_$call void lib_$init_set(); /* initialize a set */ Xstd_$call void lib_$add_to_set(); /* add an element to a set */ Xstd_$call void lib_$clr_from_set(); /* remove an element from a set */ Xstd_$call boolean lib_$member_of_set(); /* return membership of an element in a set */ X X#eject E!O!F! xstrek/original_code/apollo_inc/base.ins.c echo xstrek/original_code/apollo_inc/cal.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/cal.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/cal.ins.c' X/* CAL.INS.C, /sys/ins, ers, 07/24/86 X calendar maintenance routines - insert file X X Changes: X 07/24/86 knw changed cal_dpval_t from array 1..2 of linteger to DOUBLE. X 04/02/86 lwa change enum to short enum X 05/06/85 gms added cal_$remove_local_offset X 10/07/82 ers original coding */ X X X#define cal_$bad_syntax 0x00150001 X#define cal_$out_of_range 0x00150002 X#define cal_$empty_string 0x00150003 X#define cal_$unknown_timezone 0x00150004 X#define cal_$invalid_tzdif 0x00150005 X X X X#define cal_$string_size 80 X X Xtypedef char cal_$string_t[cal_$string_size]; X Xtypedef char cal_$tz_name_t[4]; /* timezone name */ X Xtypedef struct { X short year, X month, X day, X hour, X minute, X second; X} cal_$timedate_rec_t; /* returned from cal_$decode_time */ X Xtypedef short enum {cal_$sun, cal_$mon, cal_$tue, cal_$wed, cal_$thu, X cal_$fri, cal_$sat} cal_$weekday_t; X Xtypedef struct { X short utc_delta; /* # minutes from UTC */ X cal_$tz_name_t tz_name; /* timezone name */ X time_$clock_t drift; /* drift adjustment made by user */ X} cal_$timezone_rec_t; X Xtypedef double cal_$dpval_t; X X Xstd_$call void cal_$decode_ascii_time (); Xstd_$call void cal_$decode_ascii_date (); Xstd_$call void cal_$decode_ascii_tzdif (); /* decode timezone difference */ Xstd_$call void cal_$decode_time (); Xstd_$call void cal_$encode_time (); /* encode time -> secs past 1/1/80 */ Xstd_$call void cal_$decode_local_time (); /* decode & return local time */ Xstd_$call cal_$weekday_t cal_$weekday (); /* determine day of week */ Xstd_$call void cal_$apply_local_offset (); /* apply local offset to a time_$clock_t */ Xstd_$call void cal_$remove_local_offset (); /* remove local offset from a time_$clock_t */ Xstd_$call void cal_$get_local_time (); /* get clock w/ local adjustment */ Xstd_$call void cal_$write_timezone (); /* write tz onto boot volume */ Xstd_$call void cal_$sec_to_clock (); /* convert seconds to clockt */ Xstd_$call long cal_$clock_to_sec (); /* convert clockt to seconds */ Xstd_$call void cal_$get_info (); /* read calendar info from os */ Xstd_$call void cal_$float_clock (); /* convert time_$clock_t to d.p. floating */ Xstd_$call void cal_$add_clock (); /* add 2 clocks */ Xstd_$call short cal_$sub_clock (); /* subtract 2 clocks, return true if */ Xstd_$call short cal_$cmp_clock (); /* compare 2 clocks, return: */ X#eject E!O!F! xstrek/original_code/apollo_inc/cal.ins.c echo xstrek/original_code/apollo_inc/gpr.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/gpr.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/gpr.ins.c' X/* gpr.ins.c, /sys/ins, dpg, 09/16/83 X graphics primitive package definitions */ X X#ifndef gpr_$gpr_ins_c X#define gpr_$gpr_ins_c X X#define gpr_$operation_ok 0x00000000 X#define gpr_$not_initialized 0x06010001 X#define gpr_$already_initialized 0x06010002 X#define gpr_$wrong_display_hardware 0x06010003 X#define gpr_$illegal_for_frame 0x06010004 X#define gpr_$must_borrow_display 0x06010005 X#define gpr_$no_attributes_defined 0x06010006 X#define gpr_$no_more_space 0x06010007 X#define gpr_$dimension_too_big 0x06010008 X#define gpr_$dimension_too_small 0x06010009 X#define gpr_$bad_bitmap 0x0601000a X#define gpr_$bad_attribute_block 0x0601000b X#define gpr_$window_out_of_bounds 0x0601000c X#define gpr_$source_out_of_bounds 0x0601000d X#define gpr_$dest_out_of_bounds 0x0601000e X#define gpr_$invalid_plane 0x0601000f X#define gpr_$cant_deallocate 0x06010010 X#define gpr_$coord_out_of_bounds 0x06010011 X#define gpr_$invalid_color_map 0x06010012 X#define gpr_$invalid_raster_op 0x06010013 X#define gpr_$bitmap_is_read_only 0x06010014 X#define gpr_$internal_error 0x06010015 X#define gpr_$font_table_full 0x06010016 X#define gpr_$bad_font_file 0x06010017 X#define gpr_$invalid_font_id 0x06010018 X#define gpr_$window_obscured 0x06010019 X#define gpr_$not_in_direct_mode 0x0601001a X#define gpr_$not_in_polygon 0x0601001b X#define gpr_$kbd_not_acq 0x0601001c X#define gpr_$display_not_acq 0x0601001d X#define gpr_$illegal_pixel_values 0x0601001e X#define gpr_$illegal_when_imaging 0x0601001f X#define gpr_$invalid_imaging_format 0x06010020 X#define gpr_$must_release_display 0x06010021 X#define gpr_$cant_mix_modes 0x06010022 X#define gpr_$no_input_enabled 0x06010023 X#define gpr_$duplicate_points 0x06010024 X#define gpr_$array_not_sorted 0x06010025 X#define gpr_$character_not_in_font 0x06010026 X#define gpr_$illegal_fill_pattern 0x06010027 X#define gpr_$illegal_fill_scale 0x06010028 X#define gpr_$incorrect_alignment 0x06010029 X#define gpr_$illegal_text_path 0x0601002a X#define gpr_$unable_to_rotate_font 0x0601002b X#define gpr_$font_is_read_only 0x0601002c X#define gpr_$illegal_pattern_length 0x0601002d X#define gpr_$illegal_for_pixel_bitmap 0x0601002e X#define gpr_$too_many_input_windows 0x0601002f X#define gpr_$illegal_software_version 0x06010030 X#define gpr_$bitmap_not_a_file_bitmap 0x06010031 X#define gpr_$no_color_map_in_file 0x06010032 X#define gpr_$incorrect_decomp_tech 0x06010033 X#define gpr_$no_reset_decomp_in_pgon 0x06010034 X#define gpr_$specific_nonzero_only 0x06010035 X#define gpr_$arc_overflow_16bit_bounds 0x06010036 X#define gpr_$invalid_virt_dev_id 0x06010037 X#define gpr_$bad_decomp_tech 0x06010038 X#define gpr_$empty_rop_prim_set 0x06010039 X#define gpr_$rop_sets_not_equal 0x0601003A X#define gpr_$must_have_display 0x0601003B X#define gpr_$style_call_not_active 0x0601003C X#define gpr_$no_more_fast_buffers 0x0601003D X#define gpr_$input_buffer_overflow 0x0601003E X X#define gpr_$default_list_size 10 X X#define gpr_$black ((gpr_$pixel_value_t) 0x000000) /* color value for black */ X#define gpr_$white ((gpr_$pixel_value_t) 0xffffff) /* color value for white */ X#define gpr_$red ((gpr_$pixel_value_t) 0xff0000) /* color value for red */ X#define gpr_$green ((gpr_$pixel_value_t) 0x00ff00) /* color value for green */ X#define gpr_$blue ((gpr_$pixel_value_t) 0x0000ff) /* color value for blue */ X#define gpr_$cyan ((gpr_$pixel_value_t) 0x00ffff) /* color value for cyan (blue + green) */ X#define gpr_$magenta ((gpr_$pixel_value_t) 0xff00ff) /* color value for magenta (red + blue) */ X#define gpr_$yellow ((gpr_$pixel_value_t) 0xffff00) /* color value for yellow (red + green) */ X X#define gpr_$transparent ((gpr_$pixel_value_t)(-1)) /* pixel value for transparent (no change) */ X#define gpr_$background ((gpr_$pixel_value_t)(-2)) /* pixel value for window background */ X X#define gpr_$string_size 256 /* number of chars in a gpr string */ X#define gpr_$max_x_size 8192 /* max # bits in bitmap x dimension */ X#define gpr_$max_y_size 8192 /* max # bits in bitmap y dimension */ X#define gpr_$highest_plane 7 /* max plane number in a bitmap */ X#define gpr_$highest_rgb_plane 31 /* max plane number in a true color bitmap */ X#define gpr_$nil_attribute_desc 0l /* value of a descriptor of nonexistent attributes */ X#define gpr_$nil_bitmap_desc 0l /* value of a descriptor of a nonexistent bitmap */ X X#define gpr_$max_bmf_group 0 /* max group # in external bitmaps */ X#define gpr_$bmf_major_version 1 X#define gpr_$bmf_minor_version 1 X X#define gpr_$rop_zeros 0 /* symbolic constants for rops. */ X#define gpr_$rop_src_and_dst 1 X#define gpr_$rop_src_and_not_dst 2 X#define gpr_$rop_src 3 X#define gpr_$rop_not_src_and_dst 4 X#define gpr_$rop_dst 5 X#define gpr_$rop_src_xor_dst 6 X#define gpr_$rop_src_or_dst 7 X#define gpr_$rop_not_src_and_not_dst 8 X#define gpr_$rop_src_equiv_dst 9 X#define gpr_$rop_not_dst 10 X#define gpr_$rop_src_or_not_dst 11 X#define gpr_$rop_not_src 12 X#define gpr_$rop_not_src_or_dst 13 X#define gpr_$rop_not_src_or_not_dst 14 X#define gpr_$rop_ones 15 X Xtypedef short enum { gpr_$keystroke, gpr_$buttons, gpr_$locator, X gpr_$entered_window, gpr_$left_window, X gpr_$locator_stop, gpr_$no_event, X gpr_$locator_update, gpr_$dial X} gpr_$event_t; X X Xtypedef unsigned long gpr_$keyset_t[8]; /* this is supposed to be set of char */ X Xtypedef short enum { gpr_$ok_if_obs, gpr_$error_if_obs, X gpr_$pop_if_obs, gpr_$block_if_obs, X gpr_$input_ok_if_obs X} gpr_$obscured_opt_t; X Xtypedef short enum {gpr_$input_ec} gpr_$ec_key_t; X Xtypedef void (*gpr_$rwin_pr_t)(); Xtypedef void (*gpr_$rhdm_pr_t)(); X X /* the five ways to use this package */ Xtypedef short enum { X gpr_$borrow, X gpr_$frame, X gpr_$no_display, X gpr_$direct, X gpr_$borrow_nc, X gpr_$direct_rgb, X gpr_$borrow_rgb, X gpr_$borrow_rgb_nc X} gpr_$display_mode_t; X X /* possible display hardware configurations */ Xtypedef short enum { X gpr_$bw_800x1024, /* dn100, dn400 */ X gpr_$bw_1024x800, /* dn3xx, dn4xx */ X gpr_$color_1024x1024x4, /* dn6xx */ X gpr_$color_1024x1024x8, /* dn6xx */ X gpr_$color_1024x800x4, /* dn550/560 */ X gpr_$color_1024x800x8, /* dn550/560 */ X gpr_$color_1280x1024x8, /* dn580 */ X gpr_$color1_1024x800x8, /* dn570 */ X gpr_$color2_1024x800x4, /* dn3000c */ X gpr_$bw_1280x1024, /* dn3000m mono high res */ X gpr_$color2_1024x800x8, /* dn3000e */ X gpr_$bw5_1024x800, /* dn3000m mono low res */ X gpr_$color2_1280x1024x8 /* dn4000e high res */ X} gpr_$display_config_t; X X /* possible directions for arcs drawn using gpr_$arc_c2p */ Xtypedef short enum { X gpr_$arc_ccw, /* counter-clockwise */ X gpr_$arc_cw /* clockwise */ X} gpr_$arc_direction_t; X X /* possible options on co-incident points in gpr_$arc_c2p */ Xtypedef short enum { X gpr_$arc_draw_none, /* draw nothing */ X gpr_$arc_draw_full /* draw full circle */ X} gpr_$arc_option_t; X X /* imaging vs interactive display formats */ Xtypedef short enum { X gpr_$interactive, X gpr_$imaging_1024x1024x8, X gpr_$imaging_512x512x24, X gpr_$double_bufferx8, X gpr_$imaging_1280x1024x24, X gpr_$imaging_windowx24 X} gpr_$imaging_format_t; X X /* unique number corresponding to display controller type */ Xtypedef short enum { X gpr_$ctl_none, /* none or not applicable */ X gpr_$ctl_mono_1, /* dn100/400/420/460 */ X gpr_$ctl_mono_2, /* dn300/320/330 */ X gpr_$ctl_color_1, /* dn600/660/550/560 */ X gpr_$ctl_color_2, /* dn580 */ X gpr_$ctl_color_3, /* dn570, dn570a */ X gpr_$ctl_color_4, /* dn3000c */ X gpr_$ctl_mono_4, /* dn3000m mono high res */ X gpr_$ctl_color_5, /* dn3000e */ X gpr_$ctl_mono_5, /* dn3000m mono low res */ X gpr_$ctl_color_6 /* dn4000e high res */ X} gpr_$controller_type_t; X X /* unique number corresponding to graphics accelerator processor type */ Xtypedef short enum { X gpr_$accel_none, /* none or not applicable */ X gpr_$accel_1 /* 3dga */ X} gpr_$accelerator_type_t; X X /* kinds of overlaps between different classes of buffer memory */ Xtypedef short enum { X gpr_$hdm_with_bitm_ext, X gpr_$hdm_with_buffers, X gpr_$bitm_ext_with_buffers X} gpr_$memory_overlap_t; X X /* legal allocated sizes of pixel cells in bitmap sections for direct access */ Xtypedef short enum { X gpr_$alloc_1, /* one bit per pixel cell (i.e. by-plane) */ X gpr_$alloc_2, /* two bits per pixel cell */ X gpr_$alloc_4, /* four bits per pixel cell */ X gpr_$alloc_8, /* one byte per pixel cell */ X gpr_$alloc_16, /* two bytes per pixel cell */ X gpr_$alloc_32 /* four bytes per pixel cell */ X} gpr_$access_allocation_t; X X /* kinds of color map implementation */ Xtypedef short enum { X gpr_$no_invert, /* not applicable, eg, color or no display */ X gpr_$invert_simulate, /* simulated in software */ X gpr_$invert_hardware /* implemented in hardware */ X} gpr_$disp_invert_t; X Xtypedef short enum { X gpr_$rgb_none, X gpr_$rgb_24 /* Modes for separate values for RGB */ X} gpr_$rgb_modes_t; X Xtypedef short gpr_$rgb_modes_set_t; X X X X /* list of display device characteristics */ Xtypedef struct { X gpr_$controller_type_t controller_type; /* type of graphics controller */ X gpr_$accelerator_type_t accelerator_type; /* type of graphics accelerator */ X short x_window_origin; /* x origin of window screen area in pixels */ X short y_window_origin; /* y origin of window screen area in pixels */ X short x_window_size; /* x dimension of window screen area in pixels */ X short y_window_size; /* y dimension of window screen area in pixels */ X short x_visible_size; /* x dimension of visible screen area in pixels */ X short y_visible_size; /* y dimension of visible screen area in pixels */ X short x_extension_size; /* x dimension of maximum extended bitmap size in pixels */ X short y_extension_size; /* y dimension of maximum extended bitmap size in pixels */ X short x_total_size; /* x dimension of total buffer area in pixels */ X short y_total_size; /* y dimension of total buffer area in pixels */ X short x_pixels_per_cm; /* number of pixels in x dimension per centimeter */ X short y_pixels_per_cm; /* number of pixels in y dimension per centimeter */ X short n_planes; /* number of planes available */ X short n_buffers; /* number of display buffers available */ X short delta_x_per_buffer; /* relative displacement of buffers in x */ X short delta_y_per_buffer; /* relative displacement of buffers in y */ X short delta_planes_per_buffer; /* relative displacement of buffers in depth */ X unsigned short mem_overlaps; /* set of overlaps among classes of buffer memory */ X short x_zoom_max; /* maximum pixel-replication zoom factor for x */ X short y_zoom_max; /* maximum pixel-replication zoom factor for y */ X short video_refresh_rate; /* refresh rate in hz */ X short n_primaries; /* number of primary colors (1 -> monochrome; 3 -> color */ X short lut_width_per_primary; /* number of bits in possible shortensity values per primary */ X unsigned short avail_formats; /* set of available shorteractive/imaging formats */ X unsigned short avail_access; /* set of available pixel sizes for direct access */ X short access_address_space; /* number of 1kb pages of address space available for direct access */ X gpr_$disp_invert_t invert; /* INVert implemention */ X short num_lookup_tables; /* Number of color lookup tables */ X gpr_$rgb_modes_set_t rgb_color; /* Modes for separate values for RGB */ X} gpr_$disp_char_t; X X /* bitmap coordinates */ Xtypedef short gpr_$coordinate_t; X X /* lists of bitmap coordinates */ Xtypedef gpr_$coordinate_t gpr_$coordinate_array_t[16384]; X X /* bitmap positions */ Xtypedef struct { X gpr_$coordinate_t x_coord, y_coord; X} gpr_$position_t; X X /* bitmap offsets */ Xtypedef struct { X gpr_$coordinate_t x_size, y_size; X} gpr_$offset_t; X X /* windows on a bitmap */ Xtypedef struct { X gpr_$position_t window_base; X gpr_$offset_t window_size; X} gpr_$window_t; X Xtypedef gpr_$window_t gpr_$window_list_t[gpr_$default_list_size]; X X /* horizontal line segments */ Xtypedef struct { X gpr_$coordinate_t x_coord_l, x_coord_r, y_coord; X} gpr_$horiz_seg_t; X X /* trapezoids with horizontal bases: defined as 2 horizontal X line segments, top and bottom */ Xtypedef struct { X gpr_$horiz_seg_t top, bot; X} gpr_$trap_t; X X /* lists of trapezoids with horizontal bases */ Xtypedef gpr_$trap_t gpr_$trap_list_t[gpr_$default_list_size]; X X /* triangles */ Xtypedef struct { X gpr_$position_t p1, p2, p3; X short winding_no; X} gpr_$triangle_t; X X /* lists of triangles */ Xtypedef gpr_$triangle_t gpr_$triangle_list_t[gpr_$default_list_size]; X X /* filling winding number specifications */ Xtypedef short enum { X gpr_$parity, X gpr_$nonzero, X gpr_$specific X} gpr_$winding_set_t; X X /* triangle filling criteria */ Xtypedef struct { X gpr_$winding_set_t wind_type; X short winding_no X} gpr_$triangle_fill_criteria_t; X X /* area decomposition techniques */ Xtypedef short enum { X gpr_$fast_traps, X gpr_$precise_traps, X gpr_$non_overlapping_tris, X gpr_$render_exact X} gpr_$decomp_technique_t; X X /* graphics primitive strings */ Xtypedef char gpr_$string_t[gpr_$string_size]; X X /* bitmap plane numbers */ Xtypedef unsigned short gpr_$plane_t; Xtypedef unsigned short gpr_$rgb_plane_t; X X /* pointer to main mem bitmap */ Xtypedef char *gpr_$plane_ptr_t; X X /* bitmap plane masks (bit vector) */ Xtypedef short gpr_$mask_t; Xtypedef linteger gpr_$mask_32_t; X X /* color values */ Xtypedef linteger gpr_$color_t; X X /* pixel values */ Xtypedef linteger gpr_$pixel_value_t; X X /* arrays of color values */ Xtypedef gpr_$color_t gpr_$color_vector_t[256]; X X /* arrays of pixel values */ Xtypedef gpr_$pixel_value_t gpr_$pixel_array_t[131073]; X X /* raster operation opcodes */ Xtypedef unsigned short gpr_$raster_op_t; X X /* arrays of raster operation opcodes */ Xtypedef gpr_$raster_op_t gpr_$raster_op_array_t[32]; X X /* raster op prim set elements */ Xtypedef short enum { gpr_$rop_blt, gpr_$rop_line, gpr_$rop_fill } gpr_$rop_prim_set_elems_t; X X /* raster op prim set */ Xtypedef short gpr_$rop_prim_set_t; X X /* scalar type for directions */ Xtypedef short enum {gpr_$up, gpr_$down, gpr_$left, gpr_$right} gpr_$direction_t; X X /* line drawing styles */ Xtypedef short enum {gpr_$solid, gpr_$dotted} gpr_$linestyle_t; X Xtypedef short gpr_$line_pattern_t[4]; X X /* attribute block descriptors */ Xtypedef linteger gpr_$attribute_desc_t; X X /* bitmap descriptors */ Xtypedef linteger gpr_$bitmap_desc_t; X Xtypedef struct { X short major,minor; X} gpr_$version_t; X X Xtypedef struct { X short n_sects; X short pixel_size; X short allocated_size; X short bytes_per_line; X linteger bytes_per_sect; X char *storage_offset; X} gpr_$bmf_group_header_t; X Xtypedef gpr_$bmf_group_header_t gpr_$bmf_group_header_array_t[gpr_$max_bmf_group+1]; X Xtypedef short enum {gpr_$create,gpr_$update, gpr_$write, gpr_$readonly} gpr_$access_mode_t; X Xtypedef linteger gpr_$virt_dev_id_t; X Xtypedef struct { X short n_sects; X short pixel_size; X short allocated_size; X short bytes_per_line; X linteger bytes_per_sect; X char *storage_offset; X} gpr_$group_header_t; X Xtypedef short enum {gpr_$undisturbed_buffer, gpr_$clear_buffer, gpr_$copy_buffer} gpr_$double_buffer_option_t; X Xtypedef union { X struct { X linteger dial_number; X linteger dial_value; X } gpr_$dial; X } gpr_$event_data_t; X X#eject X/* initialization and termination. */ X X X X/* gpr_$init initializes the graphics primitive package. */ X Xstd_$call void gpr_$init (); X X X X/* gpr_$terminate terminates this package's operation. */ X Xstd_$call void gpr_$terminate (); X#eject X/* set and inquire operations for the display. */ X X/* gpr_$inq_config returns the current display configuration. */ X Xstd_$call void gpr_$inq_config (); X X X X/* gpr_$inq_disp_characterisitics returns the current display characterisitcs */ X Xstd_$call void gpr_$inq_disp_characteristics (); X X X X/* gpr_$set_color_map gives new values for the color map. */ X Xstd_$call void gpr_$set_color_map (); X X X X/* gpr_$inq_color_map returns current values in the color map. */ X Xstd_$call void gpr_$inq_color_map (); X X X X/* gpr_$set_bitmap_file_color_map stores a color map with a bitmap file */ X Xstd_$call void gpr_$set_bitmap_file_color_map (); X X X X/* gpr_$inq_bitmap_file_color_map returns the color map stored with a bitmap file */ X Xstd_$call void gpr_$inq_bitmap_file_color_map (); X X X X/* gpr_$set_cursor_pattern loads a cursor pattern. */ X Xstd_$call void gpr_$set_cursor_pattern (); X X X X/* gpr_$set_cursor_active specifies whether the cursor should be on or off. */ X Xstd_$call void gpr_$set_cursor_active (); X X X X/* gpr_$set_cursor_position gives the position at which the cursor is X to be displayed, in the current bitmap. */ X Xstd_$call void gpr_$set_cursor_position (); X X X/* gpr_$set_origin gives the cursor-relative psoition of its pixel X which is to be placed at the cursor position. */ X Xstd_$call void gpr_$set_cursor_origin (); X X X/* gpr_$inq_cursor returns information about the cursor. */ X Xstd_$call void gpr_$inq_cursor (); X X X X/* gpr_$wait_frame causes the color display hardware to defer processing X further requests until the next end-of-frame. */ X Xstd_$call void gpr_$wait_frame (); X#eject X/* bitmap control functions. */ X X X X/* gpr_$set_bitmap establishes the current bitmap for subsequent operations. */ X Xstd_$call void gpr_$set_bitmap (); X X X X/* gpr_$inq_bitmap returns a descriptor of the current bitmap. */ X Xstd_$call void gpr_$inq_bitmap (); X X X X/* gpr_$allocate_bitmap allocates a bitmap in main memory. */ X Xstd_$call void gpr_$allocate_bitmap (); X X X X/* gpr_$allocate_bitmap_nc allocates a bitmap in main memory without zeroing it. */ X Xstd_$call void gpr_$allocate_bitmap_nc (); X X X X/* gpr_$allocate_hdm_bitmap allocates a bitmap in hidden_display memory. */ X Xstd_$call void gpr_$allocate_hdm_bitmap (); X X X X/* gpr_$open_bitmap_file obtains access to an external bitmap */ X Xstd_$call void gpr_$open_bitmap_file (); X X X X/* gpr_$deallocate_bitmap deallocates a bitmap allocated by allocate_bitmap. */ X Xstd_$call void gpr_$deallocate_bitmap (); X X X X/* gpr_$inq_bitmap_pointer returns a pointer to the storage/display memory X for the given bitmap and the number of words each scan line occupies. X this information can be used to directly manipulate the bits in the bitmap. */ X Xstd_$call void gpr_$inq_bitmap_pointer (); X X X X/* gpr_$inq_bitmap_position returns the position of the upper left corner of X the specified bitmap. this is normally the screen position, although it does X have some significance for main memory bitmaps. it is not meaningful if the X bitmap is a dm pad (i.e. a frame mode bitmap). */ X Xstd_$call void gpr_$inq_bitmap_position (); X X X X/* gpr_$inq_bm_bit_offset returns the number of bits in the most significant X part of the first word of each scanline which are not part of the given bitmap. X in other words, the offset is the number of bits between a 16-bit word boundary X and the left edge of the bitmap. X currently this number can only be nonzero for direct graphics bitmaps. */ X Xstd_$call void gpr_$inq_bm_bit_offset (); X X X X/* gpr_$select_color_frame selects whether frame 0 (top 1024 lines) or X frame 1 (bottom 1024 lines) is visible. normally frame 0 is visible. */ X Xstd_$call void gpr_$select_color_frame (); X X X X/* gpr_$remap_color_memory sets the plane of frame 0 of color display memory X (normally visible) which is mapped at the address returned by inq_bitmap_pointer. */ X Xstd_$call void gpr_$remap_color_memory (); X X X X/* gpr_$remap_color_memory_1 sets the plane of frame 1 of color display memory X (normally hidden) which is mapped at the address returned by inq_bitmap_pointer. */ X Xstd_$call void gpr_$remap_color_memory_1 (); X X X X/* gpr_$color_zoom sets the zoom scale factors for the color display. */ X Xstd_$call void gpr_$color_zoom (); X X X X/* gpr_$enable_direct_access waits for display hardware to finish current X operations so that the user can access display memory directly. */ X Xstd_$call void gpr_$enable_direct_access (); X X X X/* gpr_$set_bitmap_dimensions changes the size and number of planes X of the given bitmap. */ X Xstd_$call void gpr_$set_bitmap_dimensions (); X X X X/* gpr_$inq_bitmap_dimensions returns the size and number of planes X of the given bitmap. */ X Xstd_$call void gpr_$inq_bitmap_dimensions (); X X X X/* gpr_$allocate_attribute_block allocates an attribute block, X initialized to default settings. */ X Xstd_$call void gpr_$allocate_attribute_block (); X X X X/* gpr_$deallocate_attribute_block deallocates an attribute block allocated X by allocate_attribute_block. */ X Xstd_$call void gpr_$deallocate_attribute_block (); X X X X/* gpr_$set_attribute_block establishes the given attributes as the attributes X of the current bitmap. */ X Xstd_$call void gpr_$set_attribute_block (); X X X X/* gpr_$attribute_block returns as the function value a descriptor of X the attributes of the given bitmap. */ X Xstd_$call gpr_$attribute_desc_t gpr_$attribute_block (); X#eject X/* set and inquire operations for bitmap attributes. */ X Xstd_$call void gpr_$raster_op_prim_set (); X Xstd_$call void gpr_$inq_raster_op_prim_set (); X X X/* gpr_$set_attribute sets an attribute in the current bitmap. X the list of calls follows. */ X Xstd_$call void gpr_$set_clip_window (); X Xstd_$call void gpr_$set_clipping_active (); X Xstd_$call void gpr_$set_text_font (); X Xstd_$call void gpr_$set_text_path (); X Xstd_$call void gpr_$set_coordinate_origin (); X Xstd_$call void gpr_$set_plane_mask (); X Xstd_$call void gpr_$set_draw_value (); X Xstd_$call void gpr_$set_text_value (); X Xstd_$call void gpr_$set_text_background_value (); X Xstd_$call void gpr_$set_fill_value (); X Xstd_$call void gpr_$set_fill_background_value (); X Xstd_$call void gpr_$set_fill_pattern (); X Xstd_$call void gpr_$set_raster_op (); X Xstd_$call void gpr_$set_linestyle (); X Xstd_$call void gpr_$set_line_pattern (); X Xstd_$call void gpr_$set_draw_pattern (); X Xstd_$call void gpr_$set_draw_width (); X Xstd_$call void gpr_$set_character_width (); X Xstd_$call void gpr_$set_horizontal_spacing (); X Xstd_$call void gpr_$set_space_size (); X Xstd_$call void gpr_$set_raster_op_mask (); X X X X/* gpr_$inq_attributes returns the current settings of a group X of attributes for the current bitmap. */ X Xstd_$call void gpr_$inq_constraints (); X Xstd_$call void gpr_$inq_text (); X Xstd_$call void gpr_$inq_text_path (); X Xstd_$call void gpr_$inq_coordinate_origin (); X Xstd_$call void gpr_$inq_draw_value (); X Xstd_$call void gpr_$inq_text_values (); X Xstd_$call void gpr_$inq_fill_value (); X Xstd_$call void gpr_$inq_fill_background_value (); X Xstd_$call void gpr_$inq_fill_pattern (); X Xstd_$call void gpr_$inq_raster_ops (); X Xstd_$call void gpr_$inq_linestyle (); X Xstd_$call void gpr_$inq_line_pattern (); X Xstd_$call void gpr_$inq_draw_pattern (); X Xstd_$call void gpr_$inq_line_width (); X Xstd_$call void gpr_$inq_character_width (); X Xstd_$call void gpr_$inq_horizontal_spacing (); X Xstd_$call void gpr_$inq_space_size (); X Xstd_$call void gpr_$inq_plane_mask_32 (); X Xstd_$call gpr_$pixel_value_t gpr_$inq_background (); X Xstd_$call gpr_$pixel_value_t gpr_$inq_foreground (); X X#eject X/* drawing operations. */ X X X X/* gpr_$move sets the cp to the given position. */ X Xstd_$call void gpr_$move (); X X X X/* gpr_$inq_cp returns the current position. */ X Xstd_$call void gpr_$inq_cp (); X X X X/* gpr_$line draws a line from the cp to the given position X and sets the cp to the given position. */ X Xstd_$call void gpr_$line (); X X X X/* gpr_$polyline does a series of lines, starting from the cp. */ X Xstd_$call void gpr_$polyline (); X X X X/* gpr_$multiline does a series of alternate moves and lines. */ X Xstd_$call void gpr_$multiline (); X X X X/* gpr_$draw_box draws a rectangular box */ X Xstd_$call void gpr_$draw_box (); X X X X/* gpr_$arc_3p draw an arc from current point through two points p2 and p3. */ X Xstd_$call void gpr_$arc_3p (); X X X X/* gpr_$arc_c2p draw an arc centered at point `center', starting X at current point, going clockwise or counterclockwise according X to `direction', and ending at point p2, or at the line going through X `center' and p2. The current position is updated to the actual X end point. */ X Xstd_$call void gpr_$arc_c2p (); X X X X/* gpr_$circle draws a circle of radius around point center. */ X Xstd_$call void gpr_$circle (); X X X X/* gpr_$circle_filled draws a filled circle of radius around point center. */ X Xstd_$call void gpr_$circle_filled (); X X X X/* gpr_$spline_cubic_p draws a parametric cubic spline through the control points. */ X Xstd_$call void gpr_$spline_cubic_p (); X X X X/* gpr_$spline_cubic_x draws a cubic spline as a function of x through the control points. */ X Xstd_$call void gpr_$spline_cubic_x (); X X X X/* gpr_$spline_cubic_y draws a cubic spline as a function of y through the control points. */ X Xstd_$call void gpr_$spline_cubic_y (); X#eject X/* text operations. */ X X X X/* gpr_$load_font_file loads a font contained in a file into an appro- X priate area (based on the current display mode and configuration). */ X Xstd_$call void gpr_$load_font_file (); X X X X/* gpr_$unload_font_file unloads a font that has been loaded by X load_font_file. */ X Xstd_$call void gpr_$unload_font_file (); X X X X/* gpr_$text writes text to a bitmap from the current position ("cp"). */ X Xstd_$call void gpr_$text (); X X X X/* gpr_$inq_text_extent returns the x- and y-offsets the given string X would span if written with text. */ X Xstd_$call void gpr_$inq_text_extent (); X X X X/* gpr_$inq_text_offset returns the x- and y-offsets that must be added to the X coordinates of the desired upper left pixel of the string to give the pixel X from which the text call should be made, and the x_offset of the pixel X which would be the updated cp. */ X Xstd_$call void gpr_$inq_text_offset (); X X X X/* gpr_$replicate_font creates and loads a read/write copy of the original font. */ X Xstd_$call void gpr_$replicate_font (); X#eject X/* data transfer operations. */ X X X X/* gpr_$clear clears the current bitmap to a given pixel value. */ X Xstd_$call void gpr_$clear (); X X X X/* gpr_$read_pixels reads the pixels from the given window of the current X bitmap and stores them in a pixel array. */ X Xstd_$call void gpr_$read_pixels (); X X X X/* gpr_$write_pixels writes the pixels from a pixel array into the given X window of the current bitmap. */ X Xstd_$call void gpr_$write_pixels (); X#eject X/* blt operations. */ X X X X/* gpr_$pixel_blt moves a rectangle of whole pixels from the source X bitmap to a position in the current bitmap. */ X Xstd_$call void gpr_$pixel_blt (); X X X/* gpr_$bit_blt moves a rectangle of bits from a plane of the source X bitmap to a position in a plane of the current bitmap. */ X Xstd_$call void gpr_$bit_blt (); X X X/* gpr_$additive_blt moves a rectangle of bits from a plane of the source X bitmap to a position in every plane of the current bitmap. */ X Xstd_$call void gpr_$additive_blt (); X#eject X/* fill operations. */ X X X X/* gpr_$rectangle fills a rectangle in the current bitmap. */ X Xstd_$call void gpr_$rectangle (); X X X X/* gpr_$trapezoid fills a trapezoid in the current bitmap. */ X Xstd_$call void gpr_$trapezoid (); X X X X/* gpr_$multitrapezoid fills a list of trapezoids in the current bitmap. */ X Xstd_$call void gpr_$multitrapezoid (); X X X X/* gpr_$triangle fills a triangle in the current bitmap. */ X Xstd_$call void gpr_$triangle (); X X X X/* gpr_$multitriangle fills a list of triangles in the current bitmap. */ X Xstd_$call void gpr_$multitriangle (); X X X X/* gpr_$start_pgon starts a polygon boundary loop. */ X Xstd_$call void gpr_$start_pgon (); X X X X/* gpr_$pgon_polyline defines a series of line segments as part of X the current polygon boundary loop. */ X Xstd_$call void gpr_$pgon_polyline (); X X X X/* gpr_$close_fill_pgon closes and fills the currently open polygon. */ X Xstd_$call void gpr_$close_fill_pgon (); X X X X/* gpr_$close_return_pgon closes the currently open polygon, X decomposes it, and returns the list of trapezoids. */ X Xstd_$call void gpr_$close_return_pgon (); X X X X/* gpr_$close_return_pgon_tri closes the currently open polygon, X decomposes it, and returns the list of triangles. */ X Xstd_$call void gpr_$close_return_pgon_tri (); X X X X/* gpr_$pgon_decomp_technique establishes the polygon decomposition technique X to be used. */ X Xstd_$call void gpr_$pgon_decomp_technique (); X X/* gpr_$inq_pgon_decomp_technique returns the polygon decomposition technique X being used. */ X Xstd_$call void gpr_$inq_pgon_decomp_technique (); X X Xstd_$call void gpr_$set_triangle_fill_criteria (); Xstd_$call void gpr_$inq_triangle_fill_criteria (); X#eject X X X/* direct graphics */ X X Xstd_$call void gpr_$set_acq_time_out(); X X X/* gpr_set_obscured_opt sets obscured selection attribute for display in X direct mode */ X Xstd_$call void gpr_$set_obscured_opt(); X X X/* gpr_$acquire_display gives the user exclusive access to all display operations X in the acquired window */ X Xstd_$call boolean gpr_$acquire_display(); X X X/* gpr_$inq_vis_list returns list of visible subwindows when a window is obscured */ X Xstd_$call void gpr_$inq_vis_list(); X X X/* gpr_$force_release releases the display regardless of how many times it X was previously acquired */ X Xstd_$call void gpr_$force_release(); X X X/* gpr_$release_display will release the display only if acq_rel_cnt is 1 */ X Xstd_$call void gpr_$release_display(); X X X/* gpr_$set_refresh_entry provides two procedures which will refresh the user's X window and refresh hidden display memory */ X Xstd_$call void gpr_$set_refresh_entry(); X X X/* gpr_$inq_refresh_entry returns the two procedures which will refresh the X window and refresh hidden display memory. */ X Xstd_$call void gpr_$inq_refresh_entry (); X X X/* gpr_$set_auto_refresh tells dm to save bitmap and refresh screen when needed */ X Xstd_$call void gpr_$set_auto_refresh(); X X X/* gpr_$event_wait hangs until input or time out; returns boolean to indicate X obscured window */ X Xstd_$call boolean gpr_$event_wait(); X X X/* gpr_$cond_event_wait returns immediately and reports if any input */ X Xstd_$call boolean gpr_$cond_event_wait(); X X X/* gpr_$enable_input enables event type and selected set of keys to be X recognized by event_wait */ X Xstd_$call void gpr_$enable_input(); X X X/* gpr_$disable_input disables event type */ X Xstd_$call void gpr_$disable_input(); X X X/* gpr_$get_ec gets event count */ X Xstd_$call void gpr_$get_ec(); X X/* gpr_$set_input_sid establishes the stream id for gpr input in frame mode X if not standard input */ X Xstd_$call void gpr_$set_input_sid(); X X/* gpr_$set_window_id sets the character identifying the current displayed X bitmap for input identification purposes */ X Xstd_$call void gpr_$set_window_id(); X X/* gpr_$inq_window_id returns the character identifying the current displayed X bitmap for input identification purposes */ X Xstd_$call void gpr_$inq_window_id(); X X#eject X X/* imaging format calls */ X X/* gpr_$set_imaging_format sets the dn600 display format */ X Xstd_$call void gpr_$set_imaging_format(); X X/* gpr_$inq_imaging_format returns the current dn600 display format */ X Xstd_$call void gpr_$inq_imaging_format(); X#eject X X/* blank timeout calls */ X X/* gpr_$set_blank_timeout sets the timeout value for screen blanking */ X Xstd_$call void gpr_$set_blank_timeout (); X X/* gpr_$inq_blank_timeout returns the timeout value for screen blanking */ X Xstd_$call void gpr_$inq_blank_timeout (); X#eject X X/* gpr_$return_virt_dev_id returns the virtual device id */ X Xstd_$call void gpr_$return_virt_dev_id(); X X/* gpr_$validate_virt_dev restores the virtual device to the attributes X that the gpr state has saved */ X Xstd_$call void gpr_$validate_virt_dev(); X X/* GPR_$SET_PLANE_MASK_32 sets the plane mask for a rgb bitmap */ Xstd_$call void gpr_$set_plane_mask_32(); X Xstd_$call void gpr_$allocate_buffer(); X Xstd_$call void gpr_$deallocate_buffer(); X Xstd_$call void gpr_$select_display_buffer(); X Xstd_$call void gpr_$inq_visible_buffer(); X Xstd_$call void gpr_$make_bitmap_from_array(); X X/* gpr_$inq_event_data returns additional event data */ Xstd_$call void gpr_$inq_event_data(); X X#endif /* gpr_$gpr_ins_c */ X X#eject X E!O!F! xstrek/original_code/apollo_inc/gpr.ins.c echo xstrek/original_code/apollo_inc/kbd.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/kbd.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/kbd.ins.c' X/* KBD.INS.C, /sys/ins, JBT, 05/08/85 X X Changes: X 10/01/85 ltk added F0, F9 and keypad escape X 05/08/85 ems added mouse button definitions. */ X X/* Definitions for non-ascii keyboard keys, for use in borrow X mode and direct mode in gpr_$event_wait. */ X X X#define KBD_$L1 0x81 X#define KBD_$L2 0x82 X#define KBD_$L3 0x83 X#define KBD_$L4 0x84 X#define KBD_$L5 0x85 X#define KBD_$L6 0x86 X#define KBD_$L7 0x87 X#define KBD_$L8 0x88 X#define KBD_$L9 0x89 X#define KBD_$LA 0x8A X#define KBD_$LB 0x8B X#define KBD_$LC 0x8C X#define KBD_$LD 0x8D X#define KBD_$LE 0x8E X#define KBD_$LF 0x8F X X#define KBD_$L1U 0xA1 X#define KBD_$L2U 0xA2 X#define KBD_$L3U 0xA3 X#define KBD_$L4U 0xA4 X#define KBD_$L5U 0xA5 X#define KBD_$L6U 0xA6 X#define KBD_$L7U 0xA7 X#define KBD_$L8U 0xA8 X#define KBD_$L9U 0xA9 X#define KBD_$LAU 0xAA X#define KBD_$LBU 0xAB X#define KBD_$LCU 0xAC X#define KBD_$LDU 0xAD X#define KBD_$LEU 0xAE X#define KBD_$LFU 0xAF X X#define KBD_$L1S 0xC9 X#define KBD_$L2S 0xCA X#define KBD_$L3S 0xCB X#define KBD_$L4S 0xCC X#define KBD_$L5S 0xCD X#define KBD_$L6S 0xCE X#define KBD_$L7S 0xCF X#define KBD_$L8S 0xD8 X#define KBD_$L9S 0xD9 X#define KBD_$LAS 0xDA X#define KBD_$LBS 0xDB X#define KBD_$LCS 0xDC X#define KBD_$LDS 0xDD X#define KBD_$LES 0xDE X#define KBD_$LFS 0xDF X X#define KBD_$L1A 0xE8 X#define KBD_$L2A 0xE9 X#define KBD_$L3A 0xEA X#define KBD_$L1AS 0xEC X#define KBD_$L2AS 0xED X#define KBD_$L3AS 0xEE X#define KBD_$L1AU 0xF8 X#define KBD_$L2AU 0xF9 X#define KBD_$L3AU 0xFA X X#define KBD_$R1 0x90 X#define KBD_$R2 0x91 X#define KBD_$R3 0x92 X#define KBD_$R4 0x93 X#define KBD_$R5 0x94 X#define KBD_$R6 0xEB X X#define KBD_$R1U 0xB0 X#define KBD_$R2U 0xB1 X#define KBD_$R3U 0xB2 X#define KBD_$R4U 0xB3 X#define KBD_$R5U 0xB4 X#define KBD_$R6U 0xFB X X#define KBD_$R1S 0xC8 X#define KBD_$R2S 0xB5 X#define KBD_$R3S 0xB6 X#define KBD_$R4S 0xB7 X#define KBD_$R5S 0xB8 X#define KBD_$R6S 0xEF X X#define KBD_$BS 0x95 X#define KBD_$CR 0x96 X#define KBD_$TAB 0x97 X#define KBD_$STAB 0x98 X#define KBD_$CTAB 0x99 X X#define KBD_$F1 0xC0 X#define KBD_$F2 0xC1 X#define KBD_$F3 0xC2 X#define KBD_$F4 0xC3 X#define KBD_$F5 0xC4 X#define KBD_$F6 0xC5 X#define KBD_$F7 0xC6 X#define KBD_$F8 0xC7 X#define KBD_$F9 0xBB X#define KBD_$F0 0xBA X X#define KBD_$F1S 0xD0 X#define KBD_$F2S 0xD1 X#define KBD_$F3S 0xD2 X#define KBD_$F4S 0xD3 X#define KBD_$F5S 0xD4 X#define KBD_$F6S 0xD5 X#define KBD_$F7S 0xD6 X#define KBD_$F8S 0xD7 X#define KBD_$F9S 0xBF X#define KBD_$F0S 0xBE X X#define KBD_$F1U 0xE0 X#define KBD_$F2U 0xE1 X#define KBD_$F3U 0xE2 X#define KBD_$F4U 0xE3 X#define KBD_$F5U 0xE4 X#define KBD_$F6U 0xE5 X#define KBD_$F7U 0xE6 X#define KBD_$F8U 0xE7 X#define KBD_$F9U 0xBD X#define KBD_$F0U 0xBC X X#define KBD_$F1C 0xF0 X#define KBD_$F2C 0xF1 X#define KBD_$F3C 0xF2 X#define KBD_$F4C 0xF3 X#define KBD_$F5C 0xF4 X#define KBD_$F6C 0xF5 X#define KBD_$F7C 0xF6 X#define KBD_$F8C 0xF7 X#define KBD_$F9C 0xFD X#define KBD_$F0C 0xFC X X /* mouse buttons */ X X#define KBD_$M1D 'a' /* left-down */ X#define KBD_$M1U 'A' /* left-up */ X#define KBD_$M2D 'b' /* middle-down */ X#define KBD_$M2U 'B' /* middle-up */ X#define KBD_$M3D 'c' /* right-down */ X#define KBD_$M3U 'C' /* right-up */ X X /* some tablets have 4 button pucks */ X X#define KBD_$M4D 'd' X#define KBD_$M4U 'D' X X /* the following names refer to the key cap names on the APOLLO 1 and X APOLLO 2 keyboards. These names can be used only if the key caps are X in the standard APOLLO locations. IF a 1 follows a defined name then X the key cap name refers to an APOLLO 1 keyboard if a 2 follows then X the name refers to an APOLLO 2. A '1' or '2' has only been added to X key cap names that are common to both keyboards, but the key caps are in X different locations on the keyboards. */ X X X /* key caps common to both APOLLO 1 and APOLLO 2 keyboards */ X X#define KBD_$LINE_DEL KBD_$L2 X#define KBD_$CHAR_DEL KBD_$L3 X#define KBD_$CMD KBD_$L5 X#define KBD_$UP_ARROW KBD_$L8 X#define KBD_$LEFT_ARROW KBD_$LA X#define KBD_$NEXT_WIN KBD_$LB X#define KBD_$RIGHT_ARROW KBD_$LC X#define KBD_$DOWN_ARROW KBD_$LE X#define KBD_$L_BAR_ARROW KBD_$L4 X#define KBD_$R_BAR_ARROW KBD_$L6 X#define KBD_$L_BOX_ARROW KBD_$L7 X#define KBD_$R_BOX_ARROW KBD_$L9 X#define KBD_$READ KBD_$R3 X#define KBD_$EDIT KBD_$R4 X X X /* APOLLO 1 keys */ X X#define KBD_$DOWN_BOX_ARROW1 KBD_$LD X#define KBD_$UP_BOX_ARROW1 KBD_$LF X#define KBD_$INS_MODE1 KBD_$L1 X#define KBD_$MARK1 KBD_$R1 X#define KBD_$SHELL1 KBD_$R2 X#define KBD_$HOLD1 KBD_$R5 X X X /* APOLLO 2 keys */ X X#define KBD_$DOWN_BOX_ARROW2 KBD_$LF X#define KBD_$UP_BOX_ARROW2 KBD_$LD X#define KBD_$INS_MODE2 KBD_$L1S X#define KBD_$COPY KBD_$L1A X#define KBD_$CUT KBD_$L1AS X#define KBD_$PASTE KBD_$L2A X#define KBD_$UNDO KBD_$L2AS X#define KBD_$MARK2 KBD_$L1 X#define KBD_$SHELL2 KBD_$L5S X#define KBD_$GROW KBD_$L3A X#define KBD_$MOVE KBD_$L3AS X#define KBD_$POP KBD_$R1 X#define KBD_$AGAIN KBD_$R2 X#define KBD_$EXIT KBD_$R5 X#define KBD_$HOLD2 KBD_$R6 X#define KBD_$SAVE KBD_$R4S X#define KBD_$ABORT KBD_$R5S X#define KBD_$HELP KBD_$R6S X X /* APOLLO 3 key */ X X#define KBD_$NUMERIC_KEYPAD 0x9E E!O!F! xstrek/original_code/apollo_inc/kbd.ins.c echo xstrek/original_code/apollo_inc/smdu.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/smdu.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/smdu.ins.c' X/* SMDU.INS.C, /sys/ins, ers, 09/14/83 X Display driver definitions - for users and display manager X*/ X X X#define smd_$operation_ok 0x00000000 X#define smd_$illegal_unit 0x00130001 X#define smd_$font_not_loaded 0x00130002 X#define smd_$font_table_full 0x00130003 X#define smd_$illegal_caller 0x00130004 X#define smd_$font_too_large 0x00130005 X#define smd_$hdmt_unload_err 0x00130006 X#define smd_$illegal_direction 0x00130007 X#define smd_$unexp_blt_inuse 0x00130008 X#define smd_$protocol_viol 0x00130009 X#define smd_$too_many_pages 0x0013000A X#define smd_$unsupported_font_ver 0x0013000B X#define smd_$invalid_buffer_size 0x0013000C X#define smd_$display_map_error 0x0013000D X#define smd_$borrow_error 0x0013000E X#define smd_$display_in_use 0x0013000F X#define smd_$access_denied 0x00130010 X#define smd_$return_error 0x00130011 X#define smd_$not_borrowed 0x00130012 X#define smd_$cant_borrow_both 0x00130013 X#define smd_$already_borrowed 0x00130014 X#define smd_$invalid_pos 0x00130015 X#define smd_$invalid_window 0x00130016 X#define smd_$invalid_length 0x00130017 X#define smd_$invalid_direction 0x00130018 X#define smd_$invalid_displacement 0x00130019 X#define smd_$invalid_blt_mode 0x0013001A X#define smd_$invalid_blt_ctl 0x0013001B X#define smd_$invalid_bltd_int 0x0013001C X#define smd_$invalid_ir_state 0x0013001D X#define smd_$invalid_blt_coord 0x0013001E X#define smd_$font_not_mapped 0x0013001F X#define smd_$already_mapped 0x00130020 X#define smd_$not_mapped 0x00130021 X#define smd_$quit_while_waiting 0x00130022 X#define smd_$invalid_crsr_number 0x00130023 X#define smd_$hdm_full 0x00130024 X#define smd_$wait_quit 0x00130025 X#define smd_$invalid_key 0x00130026 X#define smd_$not_on_color 0x00130027 X#define smd_$not_implemented 0x00130028 X#define smd_$invalid_wid 0x00130029 X#define smd_$window_obscured 0x0013002A X#define smd_$no_more_wids 0x0013002B X#define smd_$process_not_found 0x0013002C X#define smd_$disp_acqd 0x0013002D /* signal not allowed with display acquired */ X#define smd_$already_acquired 0x0013002E X#define smd_$acquire_timeout 0x0013002F X X#define smd_$string_size 120 /* max # chars passed to write_str */ X#define smd_$max_event_data_size 32 /* max # words in event data buffer */ X#define smd_$max_request_size 16 /* max # words passed in req buf */ X/* If smd_$max_loaded_fonts changes, you need to change smdlib_data.asm!! */ X#define smd_$max_loaded_fonts 8 /* max # loaded fonts */ X#define smd_$max_font_length 0x10000 /* max font length, 64KB */ X X#define smd_$black 0 /* color values for smd_$color */ X#define smd_$white 1 X Xtypedef struct { X short line; X short column; X} smd_$pos_t; X Xtypedef struct { X short xs; X short xe; X short ys; X short ye; X} smd_$window_limits_t; X Xtypedef char smd_$string_t[smd_$string_size]; X Xtypedef struct { X pinteger mode; /* mode register */ X linteger cs; /* control (source) */ X linteger cd; /* control (dest) */ X pinteger ssy; /* start source y */ X pinteger ssx; /* start source x */ X pinteger sdy; /* start destination y */ X pinteger sdx; /* start destination x */ X pinteger esy; /* end source y */ X pinteger esx; /* end source x */ X pinteger edy; /* end destination y */ X pinteger edx; /* end destination x */ X} smd_$blt_regs_t; X Xtypedef short enum {smd_$up, smd_$down, smd_$left, smd_$right} smd_$direction_t; X Xtypedef short enum { X smd_$input, smd_$signal, smd_$scroll_blt_complete, X smd_$borrow_req, smd_$return_req, smd_$kbd_return_req, X smd_$keyswitch_off, smd_$tpad_and_input, smd_$tpad_data, X smd_$no_event X} smd_$event_t; Xtypedef union { X char input_char; X pinteger dbuf[smd_$max_event_data_size]; X struct { X smd_$pos_t pos; X short buttons; /* non_zero only for bitpad */ X } tpad_data; X struct { X char tp_inchar; X smd_$pos_t ipos; X } tpad_and_input; X} smd_$event_data_t; X Xtypedef pinteger smd_$request_t[smd_$max_request_size]; X Xtypedef pinteger smd_$display_memory_t[1024][64]; X Xtypedef smd_$display_memory_t *smd_$display_memory_ptr_t; Xtypedef pinteger *smd_$display_control_ptr_t; X Xtypedef struct { /* version 1 font desc table entry */ X char left; /* # rasters to left of curr x */ X char right; /* rasters to right of curr x */ X char up; /* rasters above curr y */ X char down; /* rasters below curr y */ X char width; /* character width, rasters */ X char x_pos; /* horiz pos in font image offs 800 */ X short y_pos; /* vpos in image, offs fit.y_offset */ X} smd_$v1_fdte_t; X Xtypedef struct { /* version 2 font desc table entry */ X short left; /* # rasters to left of curr x */ X short right; /* rasters to right of curr x */ X short up; /* rasters above curr y */ X short down; /* rasters below curr y */ X pinteger width; /* character width, rasters */ X pinteger x_pos; /* horiz pos in font image */ X pinteger y_pos; /* vpos in image, offs fit.y_offset */ X pinteger reserved; /* future use, to make 16 bytes */ X} smd_$v2_fdte_t; X Xtypedef struct { X pinteger X version, /* font table version # */ X image_offset, /* image offset from 1st wd of hdr */ X chars_in_font, /* # characters in font */ X raster_lines, /* # raster lines reqd for image */ X image_size, /* image size, bytes */ X max_height, /* max char height, rasters */ X max_width, /* max char width, rasters */ X v_spacing, /* vertical (inter-line) spacing */ X h_spacing, /* horiz (inter-character) spacing */ X space_size, /* width of space character */ X max_right, /* char max right, rasters */ X max_up, /* char max up, rasters */ X max_down; /* char max down, rasters */ X char index_table[128]; /* desc tab offsets per char */ X smd_$v1_fdte_t desc_table[128]; /* desc table */ X} smd_$font_table_t; X Xtypedef smd_$font_table_t *smd_$font_table_ptr_t; X Xtypedef pinteger smd_$cursor_bitmap_t[16]; X Xtypedef short enum { X smd_$none, X smd_$bw_15P, X smd_$bw_19L, X smd_$color_display, X smd_$800_color, X smd_$color2_display, X smd_$color3_display, X smd_$reserved_display, X smd_$color4_display, X smd_$bw4_1280x1024, X smd_$color5_display, X smd_$bw5_1024x800, X smd_$color6_display X} smd_$display_type_t; X Xtypedef short enum {smd_$input_ec, smd_$scroll_blt_ec} smd_$ec_key_t; X X X#define smd_$font_header_size 26 /* # bytes in font header */ X#define smd_$font_index_table_size 128 /* # bytes in index table */ X#define smd_$v1_fdte_size 8 /* # bytes in 1 descriptor table entry */ X X X/* Display mode register declaration. This is the C template for the X display hardware mode register. */ X Xtypedef struct { X unsigned short blt: 1, /* 8000 - bit blt start / run flag */ X dummy: 6, /* 7E00 - pad */ X noninterlace: 1, /* 100 - hardware noninterlace mode */ X from_mm: 1, /* 80 - from main memory */ X to_mm: 1, /* 40 - to main memory */ X ieof: 1, /* 20 - interrupt at eof */ X idone: 1, /* 10 - interrupt on blt done */ X nonconform: 1, /* 8 - nonconforming areas */ X decr: 1, /* 4 - decrement mode (whadis?) */ X clrmode: 1, /* 2 - clear mode */ X dispon: 1; /* 1 - display on if true */ X} smd_$display_modereg_t; X#eject X/* Following are user-mode calls to the display driver. These may be X invoked while the display is "borrowed" by the user. */ X X X/* SMD_$LOAD_FONT_U is called to load a font into the hidden portion X of display memory. The font_id returned by this procedure is used in X all future calls to write_string to identify the font. */ X Xstd_$call pinteger smd_$load_font_u(); X X X/* SMD_$UNLOAD_FONT_U is called to unload a font from the hidden X portion of display memory. This routine is invoked to make space for X another font when the hdm (hidden display memory) or a font table X becomes full. */ X Xstd_$call void smd_$unload_font_u(); X X X/* SMD_$LOAD_FONT_FILE_U maps a named font file into memory and loads it X using the load_font routine described above. */ X Xstd_$call void smd_$load_font_file_u(); X X X/* SMD_$UNLOAD_FONT_FILE_U unloads a font and unmaps the associated font X file. This routine should be used for each font loaded with the X load_font_file routine. */ X Xstd_$call void smd_$unload_font_file_u(); X X X/* SMD_$WRITE_STRING_U is called to write a text string on the display. */ X Xstd_$call void smd_$write_string_u(); X X X/* SMD_$SOFT_SCROLL_U is used to start a soft scroll operation. The specified X area of the screen is scrolled, 2 raster lines at a time, until the X number of raster lines moved is equal to <displacement>. (If this is X odd, the last blt will be move the area 1 line.) This routine returns X prior to the completion of the scroll. X X Any smd routine which does not require the services of the interrupt X routine may be called and executed while the scroll is in progress X without waiting for the scroll to complete. If an smd routine which X requires the services of the interrupt handler is called, execution of X that process is suspended until the scroll completes. */ X Xstd_$call void smd_$soft_scroll_u(); X X X/* SMD_$EVENT_WAIT_U causes the calling process to be suspended until a X screen manager event occurs. These events are enumerated in the X smd_$event_t type definition. User processes will only be notified X of scroll/blt completion and keyboard input; never of screen manager X requests. */ X Xstd_$call void smd_$event_wait_u(); X X X/* SMD_$COND_EVENT_WAIT_U is a conditional version of event_wait. It returns X smd_$no_event, if no event has occurred. It never waits. */ X Xstd_$call void smd_$cond_event_wait_u(); X X X/* SMD_$COND_INPUT_U performs conditional input. If a character has been X typed, it is returned in "ch" and the function value is true. If not, X the value of "ch" is undefined and the function value is false. */ X Xstd_$call short smd_$cond_input_u(); X X X/* SMD_$BLT_U is called to start and optionally wait for the completion X of a display blt operation. X X The procedure will return without waiting for completion if the X "interrupt when blt done" mode register bit is set. X X The state of the "display on" and "interrupt at end of frame" bits are X irrelevant, as the default mode register, internal to the smd, is used X to obtain this information. */ X Xstd_$call void smd_$blt_u(); X X X/* SMD_$DRAW_BOX_U is called to draw a box around a window. Lines are drawn X to vertically and horizontally connect the 4 given endpoints. */ X Xstd_$call void smd_$draw_box_u(); X X X/* SMD_$CLEAR_WINDOW_U is called by the sm to clear the area of the screen X enclosed within the 4 specified endpoints. This routine does not return X until the clear is complete. (This makes it eligible to interlace with X soft scrolling.) */ X Xstd_$call void smd_$clear_window_u(); X X X/* SMD_$MOVE_KBD_CURSOR_U causes the keyboard cursor to be moved from its X present position to the position specified. The display driver's X knowledge of cursor position is also updated. */ X Xstd_$call void smd_$move_kbd_cursor_u(); X X X/* SMD_$CLEAR_KBD_CURSOR_U is used to clear the keyboard-associated cursor X from the display and inhibit cursor blinking. */ X Xstd_$call void smd_$clear_kbd_cursor_u(); X X X/* SMD_$BORROW_DISPLAY_U is called by the user to ask to borrow the display X memory and a subset of the display driver routines. */ X Xstd_$call void smd_$borrow_display_u(); X X X/* SMD_$BORROW_DISPLAY_NC_U is called by the user to ask to borrow the display X memory and a subset of the display driver routines. It is similar to the X normal borrow_display procedure, except that the display is not cleared. */ X Xstd_$call void smd_$borrow_display_nc_u(); X X X/* SMD_$RETURN_DISPLAY_U is called by the user to terminate his exclusive X use of the display and smd routines. The display is unmapped from his X address space and further use of the smd routines is disallowed. */ X Xstd_$call void smd_$return_display_u(); X X X/* SMD_$OP_WAIT_U waits for the current soft scroll or blt operation to X complete, then returns. */ X Xstd_$call void smd_$op_wait_u(); X X X/* SMD_$MAP_DISPLAY_U maps the display memory into the user's address space X and returns a pointer to the first byte. */ X Xstd_$call void smd_$map_display_u(); X X X/* SMD_$UNMAP_DISPLAY_U unmaps the display memory from the user's address X space. It must previously have been mapped with SMD_$MAP_DISPLAY_U. */ X Xstd_$call void smd_$unmap_display_u(); X X X/* SMD_$VECTOR_INIT_U initializes the vector drawing routines SMD_$DRAW_ABS_U, X SMD_$DRAW_REL_U, SMD_$MOVE_ABS_U, SMD_$MOVE_REL_U. */ X Xstd_$call void smd_$vector_init_u(); X X X X/* SMD_$DRAW_ABS_U draws a vector from the current point to the point specified, X in absolute screen coordinates. */ X Xstd_$call void smd_$draw_abs_u(); X X X/* SMD_$DRAW_REL_U draws a vector from the current point to the point specified, X in pixels relative to the current point. */ X Xstd_$call void smd_$draw_rel_u(); X X X/* SMD_$MOVE_ABS_U moves the "current" position to that specified by the x and X y arguments, in absolute screen coordinates. */ X Xstd_$call void smd_$move_abs_u(); X X X/* SMD_$MOVE_REL_U moves the "current" position to that specified by the x and X y coordinates, relative to the current position. */ X Xstd_$call void smd_$move_rel_u(); X X/* SMD_$COLOR sets the color (black or white/green) of subsequent lines to X be drawn by draw_abs_u or draw_rel_u */ X Xstd_$call void smd_$color(); X X/* SMD_$SET_TP_CURSOR offers touchpad (or other locator device) data to the X driver, which then displays a different cursor shape, that follows the X pos data, and eventually delivers the data to the display manager or X other process owning the display. */ X Xstd_$call void smd_$set_tp_cursor(); X X/* SMD_$STOP_TP_CURSOR turns off the touchpad cursor and puts back the blinking X keyboard cursor, if it is supposed to be up. */ X Xstd_$call void smd_$stop_tp_cursor(); X X/* SMD_$TP_ENABLE allows the touchpad cursor to be displayed X and moved around the screen. Initial state is off. */ X Xstd_$call void smd_$tp_enable(); X X/* SMD_$TP_DISABLE is the routine of choice to call when preparing to X touch display memory directly in user mode, since it both prevents X interference from the touchpad cursor and guarantees that the blt X is clear. Note that operations within the driver automatically take X down the tp cursor if it is up, since the caller does not know where X it is, and hence cannot take it down conditionally. */ X Xstd_$call void smd_$tp_disable(); X X/* SMD_$TP_DIRECT sets or clears the tpad_direct bit. X X If tpad_direct is set, then touchpad data does not put a cursor on the X screen, but delivers the data through smd_$event_wait, as a special X event type. If not set, then the cursor is moved around by tp data, X and the new position will be delivered with the next keystroke, as X a keystroke with cursor event. */ X Xstd_$call void smd_$tp_direct(); X X X/* SMD_$LOAD_CRSR_BITMAP - Define a bitmap for one of the internal cursors */ X Xstd_$call void smd_$load_crsr_bitmap(); X X X/* SMD_$READ_CRSR_BITMAP - Return the bitmap for one of the internal cursors */ X Xstd_$call void smd_$read_crsr_bitmap(); X X X/* SMD_$SET_QUIT_CHAR defines the character which causes a quit to be X sent to the borrowing process. */ X Xstd_$call void smd_$set_quit_char(); X X X/* SMD_$INQ_DISP_TYPE returns the type of the display physically attached to X the given unit number. */ X Xstd_$call smd_$display_type_t smd_$inq_disp_type(); X X X/* SMD_$ALLOC_HDM X X Allocate space in hidden display memory. It returns an smd_$pos_t X indicating the x/y position in overall display memory, and works for X both portrait and landscape displays. The returned space is always X 224 bits wide, and on the landscape display, may wrap across column X boundaries. */ X Xstd_$call void smd_$alloc_hdm(); X X X/* SMD_$FREE_HDM X X Free previously allocated space in hidden display memory */ X Xstd_$call void smd_$free_hdm(); X X X/* SMD_$INVERT X X Invert the display, and all subsequent operations */ X Xstd_$call void smd_$invert(); X X X/* SMD_$GET_EC exports level 1 eventcounts to user-space. */ X Xstd_$call void smd_$get_ec(); X X#eject E!O!F! xstrek/original_code/apollo_inc/smdu.ins.c echo xstrek/original_code/apollo_inc/time.ins.c 1>&2 sed -e 's/^X//' > xstrek/original_code/apollo_inc/time.ins.c <<'E!O!F! xstrek/original_code/apollo_inc/time.ins.c' X/* TIME.INS.C /sys/ins, ers, 09/29/82 X customer-callable timer routines X X Changes: X 04/02/86 lwa Change enum to short enum. X 09/29/82 ers original coding. X*/ X X#define time_$no_q_entry 0x000D0001 /* error from time_$advance */ X#define time_$not_found 0x000D0002 /* entry to be canceled not found */ X#define time_$wait_quit 0x000D0003 /* wait interrupted by quit fault */ X#define time_$bad_int 0x000D0004 /* bad timer interrupt */ X#define time_$bad_key 0x000D0005 /* bad key to time_$get_ec */ X Xtypedef short enum {time_$relative, time_$absolute} time_$rel_abs_t; X Xtypedef short enum {time_$clockh_key} time_$key_t; X Xstd_$call void time_$clock(); /* read the whole clock */ Xstd_$call void time_$wait(); Xstd_$call void time_$get_ec(); X X#eject E!O!F! xstrek/original_code/apollo_inc/time.ins.c exit =========== @work: | Matthias Pfuetzner | @home: ZGDV, Wilhelminenstrasse 7 | 6100 Darmstadt, FRG | Lichtenbergstrasse 73 +49 6151 155-164 or -101 \ <- Tel.nr. -> / +49 6151 75717 pfuetzner@agd.fhg.de pfuetzner@zgdvda.UUCP XBR1YD3U@DDATHD21.BITNET -- Dan Heller ------------------------------------------------ O'Reilly && Associates ZipCode Software Senior Writer President argv@ora.com argv@zipcode.com