Blame clients/uil/UilLstMac.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: UilLstMac.c /main/15 1997/03/12 15:21:48 dbl $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
*  (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FACILITY:
Packit b099d7
**
Packit b099d7
**      User Interface Language Compiler (UIL)
Packit b099d7
**
Packit b099d7
**  ABSTRACT:
Packit b099d7
**
Packit b099d7
**      This module contain the routines for creating the machine listing.
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  INCLUDE FILES
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
#include <Mrm/MrmAppl.h>
Packit b099d7
#include <X11/Xmd.h>		/* For 64-bit architecture dependencies */
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef DXM_V11
Packit b099d7
#include <DXm/DXmHelpB.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
#include "UilDefI.h"
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  DEFINE and MACRO DEFINITIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
/*	Holds offset info for machine code listing.	*/
Packit b099d7
Packit b099d7
typedef struct _off_info {
Packit b099d7
	unsigned short int	w_off_type;
Packit b099d7
	unsigned short int	w_off_offset;
Packit b099d7
	} off_info_type;
Packit b099d7
Packit b099d7
#define		k_name_off		0
Packit b099d7
#define		k_class_off		1
Packit b099d7
#define		k_arglist_off		2
Packit b099d7
#define		k_children_off		3
Packit b099d7
#define		k_comment_off		4
Packit b099d7
#define		k_creation_off		5
Packit b099d7
#define		k_callback_off		6
Packit b099d7
#define		k_resource_off		7
Packit b099d7
#define		k_float_off		8
Packit b099d7
#define		k_unknown_off		9
Packit b099d7
#define		k_resource_id_off	10
Packit b099d7
#define		k_child_off		11
Packit b099d7
#define		k_text_entry_off	12
Packit b099d7
#define		k_null_text_entry_off	13
Packit b099d7
#define         k_single_float_off      14 /* single float data type RAP */
Packit b099d7
Packit b099d7
#define		k_off_stack_size	300
Packit b099d7
Packit b099d7
static off_info_type	off_info_stack [k_off_stack_size];
Packit b099d7
Packit b099d7
static int		off_info_cnt = 0;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
#define		off_stack_empty		(off_info_cnt == 0)
Packit b099d7
Packit b099d7
#define _Offset(type,base,field)    \
Packit b099d7
        ((unsigned int)(base + XtOffsetOf(type, field)))
Packit b099d7
Packit b099d7
#if defined(__STDC__)
Packit b099d7
#define _OffsetArray(type,base,field)    \
Packit b099d7
        ((unsigned int)(base + XtOffsetOf(type, field)))
Packit b099d7
#else
Packit b099d7
#define _OffsetArray(type,base,field)    \
Packit b099d7
        ((unsigned int)(base + XtOffsetOf(type, field[0])))
Packit b099d7
#endif
Packit b099d7
#define	_Pointer(base,offset) ((char *)(base)+(offset))
Packit b099d7
Packit b099d7
#define ASNHEADERLEN 3
Packit b099d7
#define CSLONGBIT    (unsigned char)(0x80)
Packit b099d7
#define ASNstrlen(a) (ASNHEADERLEN+ \
Packit b099d7
		      (((unsigned char)(a)[ASNHEADERLEN]&CSLONGBIT)? \
Packit b099d7
		       (((unsigned short)((a)[ASNHEADERLEN+1])<<8) | \
Packit b099d7
			(unsigned short)((a)[ASNHEADERLEN+2]))+3 : \
Packit b099d7
		       ((unsigned short)((a)[ASNHEADERLEN]))+1))
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  EXTERNAL VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  GLOBAL VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
**
Packit b099d7
**  OWN VARIABLE DECLARATIONS
Packit b099d7
**
Packit b099d7
**/
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function saves the machine code listing information for widgets.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      widget_entry	Symbol node for this widget
Packit b099d7
**      az_context	context containing the URM output information.
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      void
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      the machine code is saved in the source record structure for
Packit b099d7
**	the widget.
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void		save_widget_machine_code ( widget_entry, az_context )
Packit b099d7
Packit b099d7
sym_widget_entry_type	* widget_entry;
Packit b099d7
URMResourceContext	* az_context;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    RGMWidgetRecordPtr		w_rec;
Packit b099d7
    char			buffer [132];
Packit b099d7
    unsigned short int		w_rec_size;
Packit b099d7
    src_source_record_type	* az_src_rec;
Packit b099d7
Packit b099d7
#define	_WRPointer(w_rec,offset) ((char *)(w_rec)+(offset))
Packit b099d7
Packit b099d7
#define _WROffset(field)    (_Offset(RGMWidgetRecord,0,field))
Packit b099d7
Packit b099d7
    az_src_rec = widget_entry->header.az_src_rec;
Packit b099d7
Packit b099d7
    if (widget_entry->resource_id != 0 ) {
Packit b099d7
	sprintf (buffer, "Resource ID: %08lX", widget_entry->resource_id);
Packit b099d7
	src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		0,
Packit b099d7
		0, 0,
Packit b099d7
		buffer );
Packit b099d7
    } else if (widget_entry->obj_header.az_name != NULL) {
Packit b099d7
	sprintf (buffer, "Resource index: %s",
Packit b099d7
		 widget_entry->obj_header.az_name->c_text);
Packit b099d7
	src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		0,
Packit b099d7
		0, 0,
Packit b099d7
		buffer );
Packit b099d7
    }
Packit b099d7
Packit b099d7
    w_rec = (RGMWidgetRecordPtr) UrmRCBuffer (az_context);
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (validation),
Packit b099d7
		sizeof (w_rec->validation), (char*)& w_rec->validation,
Packit b099d7
		"widget record" );
Packit b099d7
Packit b099d7
    sprintf (buffer, "size: %d", w_rec->size);
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (size),
Packit b099d7
		sizeof (w_rec->size), (char*)& w_rec->size,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    w_rec_size = w_rec->size;
Packit b099d7
Packit b099d7
    sprintf (buffer, "access: %s",
Packit b099d7
			access_from_code (w_rec->access) );
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (access),
Packit b099d7
		sizeof (w_rec->access), (char*)& w_rec->access,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    sprintf (buffer, "locked: ");
Packit b099d7
Packit b099d7
    if (w_rec->lock) {
Packit b099d7
	strcat (buffer, "true");
Packit b099d7
    } else {
Packit b099d7
	strcat (buffer, "false");
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (lock),
Packit b099d7
		sizeof (w_rec->lock), (char*)& w_rec->lock,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    sprintf (buffer, "type: ");
Packit b099d7
Packit b099d7
    strcat (buffer, class_name_from_code (w_rec->type));
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (type),
Packit b099d7
		sizeof (w_rec->type), (char*)& w_rec->type,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->name_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "no name specified");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "name: offset %X (hex)",
Packit b099d7
		 w_rec->name_offs);
Packit b099d7
	off_put (k_name_off, w_rec->name_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (name_offs),
Packit b099d7
		sizeof (w_rec->name_offs),
Packit b099d7
		(char*)& w_rec->name_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->class_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "class: builtin");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "class: offset %X (hex)",
Packit b099d7
		 w_rec->class_offs);
Packit b099d7
	off_put (k_class_off, w_rec->class_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (class_offs),
Packit b099d7
		sizeof (w_rec->class_offs),
Packit b099d7
		(char*)& w_rec->class_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->arglist_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "no argument list");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "argument list offset: %X (hex)", w_rec->arglist_offs);
Packit b099d7
	off_put (k_arglist_off, w_rec->arglist_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (arglist_offs),
Packit b099d7
		sizeof (w_rec->arglist_offs),
Packit b099d7
		(char*)& w_rec->arglist_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->children_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "no children");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "children list offset: %X (hex)",
Packit b099d7
		 w_rec->children_offs);
Packit b099d7
	off_put (k_children_off, w_rec->children_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (children_offs),
Packit b099d7
		sizeof (w_rec->children_offs),
Packit b099d7
		(char*)& w_rec->children_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->comment_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "no comment specified");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "comment: offset %X (hex)",
Packit b099d7
		 w_rec->comment_offs);
Packit b099d7
	off_put (k_comment_off, w_rec->comment_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (comment_offs),
Packit b099d7
		sizeof (w_rec->comment_offs),
Packit b099d7
		(char*)& w_rec->comment_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    if (w_rec->creation_offs == (MrmOffset) 0) {
Packit b099d7
	sprintf (buffer, "no creation callback");
Packit b099d7
    } else {
Packit b099d7
	sprintf (buffer, "creation callback offset: %X (hex)",
Packit b099d7
		 w_rec->creation_offs);
Packit b099d7
	off_put (k_creation_off, w_rec->creation_offs);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_WROffset (creation_offs),
Packit b099d7
		sizeof (w_rec->creation_offs),
Packit b099d7
		(char*)& w_rec->creation_offs,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    unload_stack(( char *) w_rec, w_rec_size, az_src_rec );
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function unloads entries placed on a stack and outputs them
Packit b099d7
**	into the listing.  The routine is used by both widgets and gadgets
Packit b099d7
**	to output their argument, control, and callback lists.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      rec	    base of the record being annotated
Packit b099d7
**      rec_sizr    size of the record being annotated
Packit b099d7
**      az_src_rec  address of the source for record being annotated
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
void	unload_stack( rec, rec_size, az_src_rec )
Packit b099d7
Packit b099d7
char			*rec;
Packit b099d7
int			rec_size;
Packit b099d7
src_source_record_type	*az_src_rec;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    char			buffer [132], * ptr;
Packit b099d7
    int				child_index;
Packit b099d7
Packit b099d7
    while ( ! off_stack_empty ) {
Packit b099d7
Packit b099d7
	unsigned short		off_type, off_offset;
Packit b099d7
Packit b099d7
	off_get (& off_type, & off_offset);
Packit b099d7
Packit b099d7
	switch (off_type) {
Packit b099d7
Packit b099d7
	    case k_name_off :
Packit b099d7
	    case k_class_off :
Packit b099d7
	    case k_comment_off : {
Packit b099d7
Packit b099d7
		ptr = (char *) _Pointer(rec, off_offset);
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec, off_offset,
Packit b099d7
			strlen (ptr) + 1, ptr, NULL );
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
	    
Packit b099d7
	    case k_unknown_off : {
Packit b099d7
Packit b099d7
		unsigned short int	len;
Packit b099d7
Packit b099d7
/*	Write out everything up to the next offset or the end of the
Packit b099d7
	record.	*/
Packit b099d7
Packit b099d7
		if ( ! off_stack_empty ) {
Packit b099d7
		    unsigned short int	next_type, next_offset;
Packit b099d7
Packit b099d7
		    off_get (& next_type, & next_offset);
Packit b099d7
		    off_put (next_type, next_offset);
Packit b099d7
		    len = next_offset - off_offset;
Packit b099d7
		} else {
Packit b099d7
		    len = rec_size - off_offset;
Packit b099d7
		}
Packit b099d7
Packit b099d7
		ptr = (char *) _Pointer(rec, off_offset);
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec, off_offset,
Packit b099d7
			len, ptr, NULL );
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
	    
Packit b099d7
	    case k_arglist_off : {
Packit b099d7
Packit b099d7
		RGMArgListDescPtr	argdesc;
Packit b099d7
		RGMArgumentPtr		arg_ptr;
Packit b099d7
		int			j;
Packit b099d7
Packit b099d7
		argdesc = (RGMArgListDescPtr) _Pointer(rec, off_offset);
Packit b099d7
Packit b099d7
		sprintf (buffer, "argument count: %d", argdesc->count);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgListDesc, off_offset, count),
Packit b099d7
			sizeof (argdesc->count),
Packit b099d7
			(char*)& argdesc->count,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		sprintf (buffer, "related argument count: %d", argdesc->extra);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgListDesc, off_offset, extra),
Packit b099d7
			sizeof (argdesc->extra),
Packit b099d7
			(char*)& argdesc->extra,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		off_offset = _OffsetArray (RGMArgListDesc, off_offset, args);
Packit b099d7
Packit b099d7
		for (j = 0, arg_ptr = argdesc->args;
Packit b099d7
		     j < argdesc->count;
Packit b099d7
		     j++, arg_ptr++, off_offset += sizeof (RGMArgument)) {
Packit b099d7
Packit b099d7
		    if (arg_ptr->tag_code != UilMrmUnknownCode )
Packit b099d7
			{
Packit b099d7
			sprintf (buffer,
Packit b099d7
				 "(%d) arg type: %s",
Packit b099d7
				 j,
Packit b099d7
				 resource_name_from_code(arg_ptr->tag_code));
Packit b099d7
			}
Packit b099d7
		    else
Packit b099d7
			{
Packit b099d7
			ptr = (char *)
Packit b099d7
			    _Pointer(rec,arg_ptr->stg_or_relcode.tag_offs);
Packit b099d7
			sprintf (buffer,
Packit b099d7
				 "(%d) arg type: %s (user defined)",
Packit b099d7
				 j,
Packit b099d7
				 ptr);
Packit b099d7
			}
Packit b099d7
Packit b099d7
		    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgument, off_offset, tag_code),
Packit b099d7
			sizeof (arg_ptr->tag_code),
Packit b099d7
			(char*)& arg_ptr->tag_code,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		    if (arg_ptr->stg_or_relcode.tag_offs == (MrmOffset) 0) {
Packit b099d7
			sprintf (buffer, "(%d) no tag offset", j);
Packit b099d7
		    } else {
Packit b099d7
			sprintf (buffer, "(%d) tag offset: %X (hex)",
Packit b099d7
					j, arg_ptr->stg_or_relcode.tag_offs);
Packit b099d7
			off_put (k_name_off, arg_ptr->stg_or_relcode.tag_offs);
Packit b099d7
		    }
Packit b099d7
Packit b099d7
		    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgument, off_offset, stg_or_relcode.tag_offs),
Packit b099d7
			sizeof (arg_ptr->stg_or_relcode.tag_offs),
Packit b099d7
			(char*)& arg_ptr->stg_or_relcode.tag_offs,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		    sprintf (buffer, "(%d) type: %s",
Packit b099d7
			j, type_from_code (arg_ptr->arg_val.rep_type) );
Packit b099d7
Packit b099d7
		    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgument, off_offset,
Packit b099d7
							arg_val.rep_type),
Packit b099d7
			sizeof (arg_ptr->arg_val.rep_type),
Packit b099d7
			(char*)& arg_ptr->arg_val.rep_type,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		    sprintf (buffer, "(%d) ", j);
Packit b099d7
Packit b099d7
		    format_arg_value (& arg_ptr->arg_val,
Packit b099d7
				& buffer [strlen (buffer)]);
Packit b099d7
Packit b099d7
		    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMArgument, off_offset,
Packit b099d7
							arg_val.datum),
Packit b099d7
			sizeof (arg_ptr->arg_val.datum),
Packit b099d7
			(char*)& arg_ptr->arg_val.datum,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		}
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    case k_float_off : {
Packit b099d7
Packit b099d7
		double	* dptr;
Packit b099d7
Packit b099d7
		dptr = (double *) _Pointer (rec, off_offset);
Packit b099d7
		sprintf (buffer, "floating point value: %g", (* dptr));
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			off_offset,
Packit b099d7
			sizeof (double), (char*)dptr, buffer );
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
/* single float data type RAP */
Packit b099d7
	    case k_single_float_off :
Packit b099d7
	      {
Packit b099d7
		float *fptr;
Packit b099d7
Packit b099d7
		fptr = (float *) _Pointer(rec, off_offset);
Packit b099d7
		sprintf(buffer, "Single float value: %g", (* fptr));
Packit b099d7
		src_append_machine_code (
Packit b099d7
					 az_src_rec,
Packit b099d7
					 off_offset,
Packit b099d7
					 sizeof (float), (char*)fptr, buffer);
Packit b099d7
		break;
Packit b099d7
	      }
Packit b099d7
Packit b099d7
Packit b099d7
	    case k_creation_off :
Packit b099d7
	    case k_callback_off : {
Packit b099d7
Packit b099d7
		RGMCallbackDescPtr	cb_desc_ptr;
Packit b099d7
		RGMCallbackItemPtr	cb_item_ptr;
Packit b099d7
		int			j;
Packit b099d7
Packit b099d7
		cb_desc_ptr =
Packit b099d7
			(RGMCallbackDescPtr) _Pointer (rec, off_offset);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMCallbackDesc, off_offset, validation),
Packit b099d7
			sizeof (cb_desc_ptr->validation),
Packit b099d7
			(char*)& cb_desc_ptr->validation,
Packit b099d7
			"callback descriptor" );
Packit b099d7
Packit b099d7
		sprintf (buffer, "callback count: %d", cb_desc_ptr->count);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMCallbackDesc, off_offset, count),
Packit b099d7
			sizeof (cb_desc_ptr->count),
Packit b099d7
			(char*)& cb_desc_ptr->count,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		off_offset =
Packit b099d7
			_OffsetArray (RGMCallbackDesc, off_offset, item);
Packit b099d7
Packit b099d7
		for (j = 0, cb_item_ptr = cb_desc_ptr->item;
Packit b099d7
		     j < cb_desc_ptr->count;
Packit b099d7
		     j++, cb_item_ptr++,
Packit b099d7
				off_offset += sizeof (RGMCallbackItem)) {
Packit b099d7
Packit b099d7
		    sprintf (buffer,
Packit b099d7
				"(%d) routine name offset: %X (hex)",
Packit b099d7
				j, cb_item_ptr->cb_item.routine);
Packit b099d7
Packit b099d7
		    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMCallbackItem, off_offset,
Packit b099d7
				 cb_item.routine),
Packit b099d7
#ifndef WORD64
Packit b099d7
			sizeof (cb_item_ptr->cb_item.routine),
Packit b099d7
			(char*)& cb_item_ptr->cb_item.routine,
Packit b099d7
#else /* 64-bit architecture */
Packit b099d7
			4,
Packit b099d7
			(char*)& cb_item_ptr->cb_item,
Packit b099d7
#endif /* WORD64 */
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		    off_put (k_name_off, cb_item_ptr->cb_item.routine);
Packit b099d7
Packit b099d7
		    sprintf (buffer, "(%d) routine tag type: %s",
Packit b099d7
			j, type_from_code (
Packit b099d7
				cb_item_ptr->cb_item.rep_type) );
Packit b099d7
Packit b099d7
		    src_append_machine_code
Packit b099d7
			(az_src_rec,
Packit b099d7
			 _Offset (RGMCallbackItem, off_offset,
Packit b099d7
				  cb_item.rep_type),
Packit b099d7
#ifndef WORD64
Packit b099d7
			 sizeof (cb_item_ptr->cb_item.rep_type),
Packit b099d7
			 (char*)& cb_item_ptr->cb_item.rep_type,
Packit b099d7
#else /* 64-bit architecture */
Packit b099d7
			4,
Packit b099d7
			(char*)& cb_item_ptr->cb_item + 4,
Packit b099d7
#endif /* WORD64 */
Packit b099d7
			 buffer );
Packit b099d7
Packit b099d7
		    sprintf (buffer, "(%d) value: ", j);
Packit b099d7
		    src_append_machine_code
Packit b099d7
			(az_src_rec,
Packit b099d7
			 _Offset (RGMCallbackItem, off_offset,
Packit b099d7
				  cb_item.datum),
Packit b099d7
			 sizeof (cb_item_ptr->cb_item.datum),
Packit b099d7
			 (char*)& cb_item_ptr->cb_item.datum,
Packit b099d7
			 buffer );
Packit b099d7
Packit b099d7
		}	/* for */
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    case k_resource_off : {
Packit b099d7
Packit b099d7
		RGMResourceDescPtr	r_desc_ptr;
Packit b099d7
Packit b099d7
		r_desc_ptr =
Packit b099d7
			(RGMResourceDescPtr) _Pointer (rec, off_offset);
Packit b099d7
Packit b099d7
		sprintf (buffer, "resource descriptor, size: %d",
Packit b099d7
			 r_desc_ptr->size);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMResourceDesc, off_offset, size),
Packit b099d7
			sizeof (r_desc_ptr->size),
Packit b099d7
			(char*)& r_desc_ptr->size,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		sprintf (buffer, "access: %s",
Packit b099d7
				access_from_code (r_desc_ptr->access) );
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMResourceDesc, off_offset, access),
Packit b099d7
			sizeof (r_desc_ptr->access),
Packit b099d7
			(char*)& r_desc_ptr->access,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		switch (r_desc_ptr->type) {
Packit b099d7
		    case URMrIndex:
Packit b099d7
			sprintf (buffer, "index, offset: %X (hex)",
Packit b099d7
				_Offset (RGMResourceDesc, off_offset, key) );
Packit b099d7
Packit b099d7
			off_put (k_name_off,
Packit b099d7
				_Offset (RGMResourceDesc, off_offset, key) );
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    case URMrRID:
Packit b099d7
Packit b099d7
			sprintf (buffer, "resource ID, offset: %X (hex)",
Packit b099d7
				_Offset (RGMResourceDesc, off_offset, key) );
Packit b099d7
Packit b099d7
			off_put (k_resource_id_off,
Packit b099d7
				_Offset (RGMResourceDesc, off_offset, key) );
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    default:
Packit b099d7
			sprintf (buffer, "unknown resource type");
Packit b099d7
			break;
Packit b099d7
		}
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMResourceDesc, off_offset, type),
Packit b099d7
			sizeof (r_desc_ptr->type),
Packit b099d7
			(char*)& r_desc_ptr->type,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		sprintf (buffer, "resource group: %s",
Packit b099d7
			 group_from_code (r_desc_ptr->res_group) );
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMResourceDesc, off_offset, res_group),
Packit b099d7
			sizeof (r_desc_ptr->res_group),
Packit b099d7
			(char*)& r_desc_ptr->res_group,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		sprintf (buffer, "resource type: %s",
Packit b099d7
			(r_desc_ptr->res_group == URMgLiteral) ? 
Packit b099d7
				type_from_code (r_desc_ptr->cvt_type) :
Packit b099d7
				class_name_from_code (r_desc_ptr->cvt_type) );
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMResourceDesc, off_offset, cvt_type),
Packit b099d7
			sizeof (r_desc_ptr->cvt_type),
Packit b099d7
			(char*)& r_desc_ptr->cvt_type,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    case k_resource_id_off : {
Packit b099d7
Packit b099d7
		sprintf (buffer, "resource id");
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			off_offset,
Packit b099d7
			sizeof (MrmResource_id),
Packit b099d7
			(char *) _Pointer (rec, off_offset),
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    case k_children_off : {
Packit b099d7
Packit b099d7
		RGMChildrenDescPtr	c_desc_ptr;
Packit b099d7
		int			j;
Packit b099d7
Packit b099d7
		c_desc_ptr = (RGMChildrenDescPtr) _Pointer(rec, off_offset);
Packit b099d7
Packit b099d7
		sprintf (buffer, "Children count: %d",
Packit b099d7
			 c_desc_ptr->count);
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMChildrenDesc, off_offset, count),
Packit b099d7
			sizeof (c_desc_ptr->count),
Packit b099d7
			(char*)& c_desc_ptr->count,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		off_offset =
Packit b099d7
			_OffsetArray (RGMChildrenDesc, off_offset, child);
Packit b099d7
Packit b099d7
		for (j = 0; j < c_desc_ptr->count;
Packit b099d7
			     j++, off_offset += sizeof (RGMChildDesc)) {
Packit b099d7
Packit b099d7
		    off_put (k_child_off, off_offset);
Packit b099d7
		}	/* for */
Packit b099d7
Packit b099d7
		child_index = 0;
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    case k_child_off : {
Packit b099d7
Packit b099d7
		RGMChildDescPtr		c_ptr;
Packit b099d7
		int			j;
Packit b099d7
Packit b099d7
		c_ptr = (RGMChildDescPtr) _Pointer(rec, off_offset);
Packit b099d7
Packit b099d7
		j = child_index;
Packit b099d7
Packit b099d7
		child_index++;
Packit b099d7
Packit b099d7
		if (c_ptr->manage) {
Packit b099d7
		    sprintf (buffer, "(%d) managed", j);
Packit b099d7
		} else {
Packit b099d7
		    sprintf (buffer, "(%d) unmanaged", j);
Packit b099d7
		}
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMChildDesc, off_offset, manage),
Packit b099d7
			sizeof (c_ptr->manage),
Packit b099d7
			(char*)& c_ptr->manage,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		sprintf (buffer, "(%d) access: %s", j,
Packit b099d7
				access_from_code (c_ptr->access) );
Packit b099d7
Packit b099d7
		src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMChildDesc, off_offset, access),
Packit b099d7
			sizeof (c_ptr->access),
Packit b099d7
			(char*)& c_ptr->access,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
		switch (c_ptr->type) {
Packit b099d7
		    case URMrIndex:
Packit b099d7
			sprintf (buffer, "(%d) index, offset: %X (hex)",
Packit b099d7
				j, c_ptr->key.index_offs);
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec,
Packit b099d7
				_Offset (RGMChildDesc, off_offset, type),
Packit b099d7
				sizeof (c_ptr->type) + sizeof (c_ptr->key),
Packit b099d7
				(char*)& c_ptr->type,
Packit b099d7
				buffer );
Packit b099d7
Packit b099d7
			off_put (k_name_off, c_ptr->key.index_offs);
Packit b099d7
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    case URMrRID:
Packit b099d7
			sprintf (buffer,
Packit b099d7
				"(%d) resource ID, offset: %X (hex)",
Packit b099d7
				j, _Offset (RGMChildDesc, off_offset, key) );
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec,
Packit b099d7
				_Offset (RGMChildDesc, off_offset, type),
Packit b099d7
				sizeof (c_ptr->type),
Packit b099d7
				(char*)& c_ptr->type,
Packit b099d7
				buffer );
Packit b099d7
Packit b099d7
			off_put (k_resource_id_off,
Packit b099d7
				_Offset (RGMChildDesc, off_offset, key) );
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    default:
Packit b099d7
Packit b099d7
			sprintf (buffer, "(%d) unknown class", j);
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec,
Packit b099d7
				_Offset (RGMChildDesc, off_offset, type),
Packit b099d7
				sizeof (c_ptr->type),
Packit b099d7
				(char*)& c_ptr->type,
Packit b099d7
				buffer );
Packit b099d7
Packit b099d7
			break;
Packit b099d7
		}
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    default : {
Packit b099d7
Packit b099d7
		break;
Packit b099d7
	    }
Packit b099d7
        }	/* switch	*/
Packit b099d7
    }		/*  for		*/
Packit b099d7
Packit b099d7
    src_append_machine_code ( az_src_rec, 0, 0, 0, 0 );
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function saves the machine code listing information for values.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      value_entry	Symbol node for this value
Packit b099d7
**      az_context	context containing the URM output information.
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      void
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      the machine code is saved in the source record structure for this
Packit b099d7
**	value.
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void		save_value_machine_code ( value_entry, az_context )
Packit b099d7
Packit b099d7
sym_value_entry_type	* value_entry;
Packit b099d7
URMResourceContext	* az_context;
Packit b099d7
Packit b099d7
{
Packit b099d7
    src_source_record_type	* az_src_rec;
Packit b099d7
    char			buffer [132], * rc_buffer;
Packit b099d7
    unsigned short int		rc_size;
Packit b099d7
Packit b099d7
    az_src_rec = value_entry->header.az_src_rec;
Packit b099d7
Packit b099d7
    if (value_entry->resource_id != 0) {
Packit b099d7
	sprintf (buffer, "Resource ID: %08lX", value_entry->resource_id);
Packit b099d7
	src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		0,
Packit b099d7
		0, 0,
Packit b099d7
		buffer );
Packit b099d7
    } else if (value_entry->obj_header.az_name != NULL) {
Packit b099d7
	sprintf (buffer, "Resource index: %s",
Packit b099d7
		 value_entry->obj_header.az_name->c_text);
Packit b099d7
	src_append_machine_code
Packit b099d7
	    (az_src_rec,
Packit b099d7
	     0,
Packit b099d7
	     0, 0,
Packit b099d7
	     buffer);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    sprintf (buffer, "size: %d, group: %s",
Packit b099d7
	     UrmRCSize (az_context),
Packit b099d7
	     group_from_code (UrmRCGroup (az_context)) );
Packit b099d7
    src_append_machine_code ( az_src_rec, 0, 0, 0, buffer );
Packit b099d7
Packit b099d7
    sprintf (buffer, "type: %s, access: %s, locked: ",
Packit b099d7
	     type_from_code (UrmRCType (az_context)),
Packit b099d7
	     access_from_code (UrmRCAccess (az_context)) );
Packit b099d7
Packit b099d7
    if (UrmRCLock (az_context)) {
Packit b099d7
	strcat (buffer, "true");
Packit b099d7
    } else {
Packit b099d7
	strcat (buffer, "false");
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code ( az_src_rec, 0, 0, 0, buffer );
Packit b099d7
Packit b099d7
    rc_buffer = UrmRCBuffer (az_context);
Packit b099d7
    rc_size = UrmRCSize (az_context);
Packit b099d7
Packit b099d7
    /* 
Packit b099d7
    **	Case on the type of literal.
Packit b099d7
    */
Packit b099d7
Packit b099d7
    switch (value_entry->b_type)
Packit b099d7
	{
Packit b099d7
	case sym_k_bool_value:
Packit b099d7
Packit b099d7
	    if ( * (unsigned long *) rc_buffer )
Packit b099d7
		sprintf (buffer, "value: true");
Packit b099d7
	    else
Packit b099d7
		sprintf (buffer, "value: false");
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec, 0, rc_size, rc_buffer, buffer );
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case sym_k_integer_value:
Packit b099d7
	case sym_k_horizontal_integer_value:
Packit b099d7
	case sym_k_vertical_integer_value:
Packit b099d7
Packit b099d7
	    sprintf (buffer, "value: %ld",
Packit b099d7
		     (* (unsigned long *) rc_buffer) );
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec, 0, rc_size, rc_buffer, buffer );
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case sym_k_integer_table_value: 
Packit b099d7
	case sym_k_rgb_value:  /* rgb data type RAP */
Packit b099d7
	    {
Packit b099d7
	    int index = 0;
Packit b099d7
	    int offset = 0;
Packit b099d7
Packit b099d7
	    for (offset = 0; offset < (int)rc_size; offset += sizeof(int), index++)
Packit b099d7
		{
Packit b099d7
		sprintf (buffer, "value[%d]: %ld",
Packit b099d7
			 index, ((unsigned long *) rc_buffer)[index] );
Packit b099d7
		
Packit b099d7
		src_append_machine_code
Packit b099d7
		    (az_src_rec, 0, sizeof(int), 
Packit b099d7
		     (char*)&(((unsigned long *)rc_buffer)[index]), buffer );
Packit b099d7
		}
Packit b099d7
	    break;
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	case sym_k_float_value:
Packit b099d7
	case sym_k_horizontal_float_value:
Packit b099d7
	case sym_k_vertical_float_value:
Packit b099d7
	    sprintf (buffer, "value: %g",
Packit b099d7
		     (* (double *) rc_buffer) );
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec, 0, rc_size, rc_buffer, buffer );
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case sym_k_single_float_value:
Packit b099d7
	    sprintf (buffer, "value: %g",
Packit b099d7
		     (* (float *) rc_buffer));
Packit b099d7
	    src_append_machine_code
Packit b099d7
		(az_src_rec, 0, rc_size, rc_buffer, buffer );
Packit b099d7
            break;
Packit b099d7
Packit b099d7
	case sym_k_char_8_value:
Packit b099d7
	case sym_k_color_value:
Packit b099d7
	case sym_k_color_table_value:
Packit b099d7
	case sym_k_icon_value:
Packit b099d7
	case sym_k_font_value:
Packit b099d7
	case sym_k_fontset_value:
Packit b099d7
	case sym_k_font_table_value:
Packit b099d7
	case sym_k_reason_value:
Packit b099d7
	case sym_k_argument_value:
Packit b099d7
	case sym_k_identifier_value:
Packit b099d7
	case sym_k_compound_string_value:
Packit b099d7
	case sym_k_xbitmapfile_value:
Packit b099d7
	case sym_k_keysym_value:
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		0,
Packit b099d7
		rc_size, rc_buffer, 0 );
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case sym_k_asciz_table_value:
Packit b099d7
	case sym_k_string_table_value: {
Packit b099d7
	    RGMTextVectorPtr	tv_ptr;
Packit b099d7
	    unsigned short	off_type, off_offset, off_cnt;
Packit b099d7
	    int			i;
Packit b099d7
Packit b099d7
	    off_offset = 0;
Packit b099d7
	    tv_ptr = (RGMTextVectorPtr) rc_buffer;
Packit b099d7
	    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMTextVector, off_offset, validation),
Packit b099d7
			sizeof (tv_ptr->validation),
Packit b099d7
			(char*)& tv_ptr->validation,
Packit b099d7
			"text vector" );
Packit b099d7
Packit b099d7
	    sprintf (buffer, "count: %d", tv_ptr->count);
Packit b099d7
	    src_append_machine_code (
Packit b099d7
			az_src_rec,
Packit b099d7
			_Offset (RGMTextVector, off_offset, count),
Packit b099d7
			sizeof (tv_ptr->count), (char*)& tv_ptr->count,
Packit b099d7
			buffer );
Packit b099d7
Packit b099d7
	    off_offset = _OffsetArray (RGMTextVector, off_offset, item);
Packit b099d7
	    for (i = 0; i < tv_ptr->count;
Packit b099d7
		 i++, off_offset += sizeof (RGMTextEntry)) {
Packit b099d7
Packit b099d7
		off_put (k_text_entry_off, off_offset);
Packit b099d7
	    }
Packit b099d7
Packit b099d7
	    off_put (k_null_text_entry_off, off_offset);
Packit b099d7
	    off_cnt = 0;
Packit b099d7
	    while ( ! off_stack_empty ) {
Packit b099d7
Packit b099d7
		RGMTextEntryPtr te_ptr;
Packit b099d7
		off_get (& off_type, & off_offset);
Packit b099d7
		switch (off_type) {
Packit b099d7
		    case k_name_off :
Packit b099d7
Packit b099d7
		      {
Packit b099d7
			char *stringPtr = (char *) _Pointer (rc_buffer,off_offset);
Packit b099d7
			src_append_machine_code (az_src_rec, off_offset,
Packit b099d7
						 ASNstrlen( stringPtr ),
Packit b099d7
						 stringPtr, NULL );	    
Packit b099d7
		      }
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    case k_null_text_entry_off :
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec, off_offset,
Packit b099d7
				sizeof (RGMTextEntry),
Packit b099d7
				(char*)_Pointer (rc_buffer, off_offset),
Packit b099d7
				"end of text vector" );
Packit b099d7
Packit b099d7
			break;
Packit b099d7
	    
Packit b099d7
		    case k_text_entry_off :
Packit b099d7
Packit b099d7
			te_ptr = (RGMTextEntryPtr)
Packit b099d7
					_Pointer (rc_buffer, off_offset);
Packit b099d7
Packit b099d7
			sprintf (buffer, "(%d) type: %s, offset: %X (hex)",
Packit b099d7
			    off_cnt,
Packit b099d7
			    type_from_code (te_ptr->text_item.rep_type),
Packit b099d7
			    te_ptr->text_item.offset );
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec,
Packit b099d7
				_Offset (RGMTextEntry, off_offset,
Packit b099d7
								text_item),
Packit b099d7
				sizeof (te_ptr->text_item),
Packit b099d7
				(char*)& te_ptr->text_item,
Packit b099d7
				buffer );
Packit b099d7
Packit b099d7
			off_cnt++;
Packit b099d7
Packit b099d7
			off_put (k_name_off, te_ptr->text_item.offset);
Packit b099d7
Packit b099d7
			break;
Packit b099d7
Packit b099d7
		    default:
Packit b099d7
Packit b099d7
			sprintf (buffer, "(%d) unknown text entry", i);
Packit b099d7
Packit b099d7
			src_append_machine_code (
Packit b099d7
				az_src_rec,
Packit b099d7
				off_offset,
Packit b099d7
				0, 0, buffer );
Packit b099d7
Packit b099d7
			break;
Packit b099d7
		    }
Packit b099d7
		}
Packit b099d7
Packit b099d7
	    break;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	case sym_k_trans_table_value:
Packit b099d7
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec, 0, rc_size, rc_buffer, NULL );
Packit b099d7
Packit b099d7
	    break;
Packit b099d7
	    
Packit b099d7
	default: {
Packit b099d7
Packit b099d7
	    sprintf (buffer, "unknown value");
Packit b099d7
Packit b099d7
	    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		0,
Packit b099d7
		0, 0, buffer );
Packit b099d7
Packit b099d7
	    break;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
    src_append_machine_code ( az_src_rec, 0, 0, 0, 0 );
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function saves the machine code listing information for modules.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      az_src_rec	Source record for this machine code info.
Packit b099d7
**      az_context	context containing the URM output information.
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**      none
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      void
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      the machine code is saved in the source record structure
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void		save_module_machine_code ( az_src_rec, az_context )
Packit b099d7
Packit b099d7
src_source_record_type	* az_src_rec;
Packit b099d7
URMResourceContext	* az_context;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    RGMModuleDescPtr		m_rec;
Packit b099d7
    RGMTopmostDescPtr		t_rec;
Packit b099d7
    char			buffer [132];
Packit b099d7
    unsigned short		off_offset;
Packit b099d7
    int				i;
Packit b099d7
Packit b099d7
    off_offset = 0;
Packit b099d7
Packit b099d7
    m_rec = (RGMModuleDescPtr) UrmRCBuffer (az_context);
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_Offset (RGMModuleDesc, off_offset, validation),
Packit b099d7
		sizeof (m_rec->validation), (char*)& m_rec->validation,
Packit b099d7
		"module record" );
Packit b099d7
Packit b099d7
    sprintf (buffer, "topmost count: %d", m_rec->count);
Packit b099d7
Packit b099d7
    src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_Offset (RGMModuleDesc, off_offset, count),
Packit b099d7
		sizeof (m_rec->count), (char*)& m_rec->count,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    off_offset = _OffsetArray (RGMModuleDesc, off_offset, topmost);
Packit b099d7
Packit b099d7
    for (i = 0, t_rec = m_rec->topmost;
Packit b099d7
	 i < m_rec->count;
Packit b099d7
	 i++, t_rec++, off_offset += sizeof (RGMTopmostDesc)) {
Packit b099d7
Packit b099d7
	sprintf (buffer, "(%d) %s", i, t_rec->index);
Packit b099d7
Packit b099d7
	src_append_machine_code (
Packit b099d7
		az_src_rec,
Packit b099d7
		_OffsetArray (RGMTopmostDesc, off_offset, index),
Packit b099d7
		strlen(t_rec->index), t_rec->index,
Packit b099d7
		buffer );
Packit b099d7
Packit b099d7
    }	/* for */
Packit b099d7
Packit b099d7
    src_append_machine_code ( az_src_rec, 0, 0, 0, 0 );
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function adds an offset entry to the offset stack for
Packit b099d7
**	machine code.  The entry is inserted in the proper place in
Packit b099d7
**	the stack depending on the offset value.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      off_type	type of offset entry
Packit b099d7
**	off_offset	offset value for this offset entry
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**	off_info_cnt		number of offset stack entries
Packit b099d7
**      off_info_stack	stack containing offset entries
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**	off_info_cnt		number of offset stack entries
Packit b099d7
**      off_info_stack	stack containing offset entries
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      void
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      the offset info is saved in the offset stack
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void	off_put 
Packit b099d7
Packit b099d7
	(unsigned short off_type, unsigned short off_offset)
Packit b099d7
Packit b099d7
{
Packit b099d7
    off_info_type	off_info, * off_info_ptr;
Packit b099d7
    int			i;
Packit b099d7
Packit b099d7
    if (off_info_cnt >= k_off_stack_size) {
Packit b099d7
	diag_issue_internal_error ("stack overflow in machine listing");
Packit b099d7
    }
Packit b099d7
Packit b099d7
    off_info.w_off_type = off_type;
Packit b099d7
    off_info.w_off_offset = off_offset;
Packit b099d7
Packit b099d7
    /*   Insert on the stack before the first entry with a lower offset
Packit b099d7
	 value	*/
Packit b099d7
Packit b099d7
    for (i = 0, off_info_ptr = off_info_stack;
Packit b099d7
			 i < off_info_cnt; i++, off_info_ptr++) {
Packit b099d7
	if (off_info.w_off_offset > off_info_ptr->w_off_offset) {
Packit b099d7
	    break;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
    _move ( & off_info_ptr [1], off_info_ptr,
Packit b099d7
	    (off_info_cnt - i) * sizeof (off_info_type) );
Packit b099d7
Packit b099d7
    (* off_info_ptr) = off_info;
Packit b099d7
    off_info_cnt++;
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
**++
Packit b099d7
**  FUNCTIONAL DESCRIPTION:
Packit b099d7
**
Packit b099d7
**      This function removes an offset entry to the offset stack for
Packit b099d7
**	machine code.
Packit b099d7
**
Packit b099d7
**  FORMAL PARAMETERS:
Packit b099d7
**
Packit b099d7
**      off_type	address to receive the type of offset entry
Packit b099d7
**	off_offset	address to receive the  offset value for this
Packit b099d7
**			offset entry
Packit b099d7
**
Packit b099d7
**  IMPLICIT INPUTS:
Packit b099d7
**
Packit b099d7
**	off_info_cnt		number of offset stack entries
Packit b099d7
**      off_info_stack	stack containing offset entries
Packit b099d7
**
Packit b099d7
**  IMPLICIT OUTPUTS:
Packit b099d7
**
Packit b099d7
**	off_info_cnt		number of offset stack entries
Packit b099d7
**      off_info_stack	stack containing offset entries
Packit b099d7
**
Packit b099d7
**  FUNCTION VALUE:
Packit b099d7
**
Packit b099d7
**      void
Packit b099d7
**
Packit b099d7
**  SIDE EFFECTS:
Packit b099d7
**
Packit b099d7
**      the offset info is retrieved from the offset stack
Packit b099d7
**
Packit b099d7
**--
Packit b099d7
**/
Packit b099d7
Packit b099d7
void	off_get (off_type, off_offset)
Packit b099d7
Packit b099d7
unsigned short		* off_type;
Packit b099d7
unsigned short		* off_offset;
Packit b099d7
Packit b099d7
{
Packit b099d7
    off_info_type	* off_info_ptr;
Packit b099d7
Packit b099d7
    if (off_info_cnt <= 0) {
Packit b099d7
	diag_issue_internal_error ("stack underflow in machine listing");
Packit b099d7
    }
Packit b099d7
Packit b099d7
    /*   Remove from the stack the entry with the lowest offset value	*/
Packit b099d7
Packit b099d7
    off_info_ptr = & off_info_stack [off_info_cnt - 1];
Packit b099d7
Packit b099d7
    (* off_type) = off_info_ptr->w_off_type;
Packit b099d7
    (* off_offset) = off_info_ptr->w_off_offset;
Packit b099d7
Packit b099d7
    off_info_cnt--;
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
char * type_from_code 
Packit b099d7
Packit b099d7
	(MrmType type_code)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This procedure returns the string corresponding to a URM type code
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	type 		type code from RGMrType...
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	The string corresponding to the type code
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    switch (type_code)
Packit b099d7
	{
Packit b099d7
	case MrmRtypeInteger:
Packit b099d7
	    return uil_datatype_names[sym_k_integer_value];
Packit b099d7
	case MrmRtypeHorizontalInteger:
Packit b099d7
	    return uil_datatype_names[sym_k_horizontal_integer_value];
Packit b099d7
	case MrmRtypeVerticalInteger:
Packit b099d7
	    return uil_datatype_names[sym_k_vertical_integer_value];
Packit b099d7
	case MrmRtypeBoolean:
Packit b099d7
	    return uil_datatype_names[sym_k_bool_value];
Packit b099d7
	case MrmRtypeChar8:
Packit b099d7
	    return uil_datatype_names[sym_k_char_8_value];
Packit b099d7
	case MrmRtypeChar8Vector:
Packit b099d7
	    return uil_datatype_names[sym_k_asciz_table_value];
Packit b099d7
	case MrmRtypeCString:
Packit b099d7
	    return uil_datatype_names[sym_k_compound_string_value];
Packit b099d7
	case MrmRtypeCStringVector:
Packit b099d7
	    return uil_datatype_names[sym_k_string_table_value];
Packit b099d7
	case MrmRtypeFloat:
Packit b099d7
	    return uil_datatype_names[sym_k_float_value];
Packit b099d7
	case MrmRtypeHorizontalFloat:
Packit b099d7
	    return uil_datatype_names[sym_k_horizontal_float_value];
Packit b099d7
	case MrmRtypeVerticalFloat:
Packit b099d7
	    return uil_datatype_names[sym_k_vertical_float_value];
Packit b099d7
	case MrmRtypeSingleFloat: /* single float data type RAP */
Packit b099d7
	    return uil_datatype_names[sym_k_single_float_value];
Packit b099d7
	case MrmRtypeCallback:
Packit b099d7
	    return "callback";
Packit b099d7
	case MrmRtypePixmapImage:
Packit b099d7
	    return "pixmap image";
Packit b099d7
	case MrmRtypePixmapDDIF:
Packit b099d7
	    return "pixmap DDIF";
Packit b099d7
	case MrmRtypeResource:
Packit b099d7
	    return "resource";
Packit b099d7
	case MrmRtypeAddrName:
Packit b099d7
	    return "addr name";
Packit b099d7
	case MrmRtypeIconImage:
Packit b099d7
	    return uil_datatype_names[sym_k_icon_value];
Packit b099d7
	case MrmRtypeFont:
Packit b099d7
	    return uil_datatype_names[sym_k_font_value];
Packit b099d7
	case MrmRtypeFontSet:
Packit b099d7
	    return uil_datatype_names[sym_k_fontset_value];
Packit b099d7
	case MrmRtypeFontList:
Packit b099d7
	    return uil_datatype_names[sym_k_font_table_value];
Packit b099d7
	case MrmRtypeColor:
Packit b099d7
	    return uil_datatype_names[sym_k_color_value];
Packit b099d7
	case MrmRtypeColorTable:
Packit b099d7
	    return uil_datatype_names[sym_k_color_table_value];
Packit b099d7
	case MrmRtypeAny:
Packit b099d7
	    return uil_datatype_names[sym_k_any_value];
Packit b099d7
	case MrmRtypeTransTable:
Packit b099d7
	    return uil_datatype_names[sym_k_trans_table_value];
Packit b099d7
	case MrmRtypeClassRecName:
Packit b099d7
	    return uil_datatype_names[sym_k_class_rec_name_value];
Packit b099d7
	case MrmRtypeIntegerVector:
Packit b099d7
	    return uil_datatype_names[sym_k_integer_table_value];
Packit b099d7
	case MrmRtypeXBitmapFile:
Packit b099d7
	    return uil_datatype_names[sym_k_xbitmapfile_value];
Packit b099d7
	  case MrmRtypeKeysym:
Packit b099d7
	    return uil_datatype_names[sym_k_keysym_value];
Packit b099d7
	default:
Packit b099d7
	    return "unknown";
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
char * access_from_code 
Packit b099d7
Packit b099d7
	(MrmFlag access_code)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This procedure returns the string corresponding to a URM access code
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	access_code		access code
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	The string corresponding to the access code
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    switch (access_code) {
Packit b099d7
	case URMaPublic:	return "public"; 
Packit b099d7
	case URMaPrivate:	return "private"; 
Packit b099d7
	default:		return "unknown"; 
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
char * group_from_code 
Packit b099d7
Packit b099d7
	(MrmGroup group_code)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This procedure returns the string corresponding to a URM group code
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	group_code		group code
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	The string corresponding to the group code
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    switch (group_code) {
Packit b099d7
	case URMgWidget:	return "widget"; 
Packit b099d7
	case URMgLiteral:	return "literal"; 
Packit b099d7
	case URMgResourceSet:	return "resource set"; 
Packit b099d7
	default:		return "unknown"; 
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7

Packit b099d7
Packit b099d7
void format_arg_value (argval_ptr, buffer)
Packit b099d7
Packit b099d7
RGMArgValuePtr		argval_ptr;
Packit b099d7
char			* buffer;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  FUNCTION PROTOTYPE
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This routine formats a value descriptor into the buffer.
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	argval_ptr	pointer to the argument value descriptor
Packit b099d7
 *	buffer		buffer to receive the formatted value
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
    switch ( argval_ptr->rep_type ) {
Packit b099d7
Packit b099d7
	case MrmRtypeInteger:
Packit b099d7
        case MrmRtypeHorizontalInteger:
Packit b099d7
        case MrmRtypeVerticalInteger:
Packit b099d7
	    sprintf (buffer, "value: %d", argval_ptr->datum.ival);
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case MrmRtypeBoolean:
Packit b099d7
	    if (argval_ptr->datum.ival) {
Packit b099d7
		sprintf (buffer, "value: true");
Packit b099d7
	    } else {
Packit b099d7
		sprintf (buffer, "value: false");
Packit b099d7
	    }
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case MrmRtypeChar8:
Packit b099d7
	case MrmRtypeCStringVector:
Packit b099d7
	case MrmRtypePixmapImage:
Packit b099d7
	case MrmRtypePixmapDDIF:
Packit b099d7
	case MrmRtypeCString:
Packit b099d7
	case MrmRtypeAddrName:
Packit b099d7
        case MrmRtypeKeysym:
Packit b099d7
	    sprintf (buffer, "offset: %X (hex)", argval_ptr->datum.offset);
Packit b099d7
	    off_put (k_unknown_off, argval_ptr->datum.offset);
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case MrmRtypeFloat:
Packit b099d7
        case MrmRtypeHorizontalFloat:
Packit b099d7
        case MrmRtypeVerticalFloat:
Packit b099d7
	    sprintf (buffer, "offset: %X (hex)", argval_ptr->datum.offset);
Packit b099d7
	    off_put (k_float_off, argval_ptr->datum.offset);
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	  case MrmRtypeSingleFloat: /* single float data type RAP */
Packit b099d7
	    sprintf (buffer, "offset: %X (hex)", argval_ptr->datum.offset);
Packit b099d7
            off_put (k_single_float_off, argval_ptr->datum.offset);
Packit b099d7
            break;
Packit b099d7
Packit b099d7
	case MrmRtypeCallback:
Packit b099d7
	    sprintf (buffer, "offset: %X (hex)", argval_ptr->datum.offset);
Packit b099d7
	    off_put (k_callback_off, argval_ptr->datum.offset);
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	case MrmRtypeResource:
Packit b099d7
	    sprintf (buffer, "offset: %X (hex)", argval_ptr->datum.offset);
Packit b099d7
	    off_put (k_resource_off, argval_ptr->datum.offset);
Packit b099d7
	    break;
Packit b099d7
Packit b099d7
	default:
Packit b099d7
	    sprintf (buffer, "value unknown");
Packit b099d7
	    break;
Packit b099d7
    }
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7

Packit b099d7
char * class_name_from_code 
Packit b099d7
Packit b099d7
	(MrmCode class)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This procedure returns the string corresponding to a URM class code
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	class		class code from URMwc...
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	The string corresponding to the class code
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int		sym_code;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Find the sym_k code for the class, then return its name
Packit b099d7
 */
Packit b099d7
for ( sym_code=sym_k_error_object+1;
Packit b099d7
      sym_code<=uil_max_object;
Packit b099d7
      sym_code++ )
Packit b099d7
    if ( uil_widget_compr[sym_code] == class )
Packit b099d7
	return uil_widget_names[sym_code];
Packit b099d7
return "unknown";
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7

Packit b099d7
char * resource_name_from_code 
Packit b099d7
Packit b099d7
	(MrmCode resource)
Packit b099d7
Packit b099d7
/*
Packit b099d7
 *++
Packit b099d7
 *
Packit b099d7
 *  PROCEDURE DESCRIPTION:
Packit b099d7
 *
Packit b099d7
 *	This procedure returns the string corresponding to a compression code
Packit b099d7
 *
Packit b099d7
 *  FORMAL PARAMETERS:
Packit b099d7
 *
Packit b099d7
 *	resource	compression code for argument or reason
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT INPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  IMPLICIT OUTPUTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *  FUNCTION VALUE:
Packit b099d7
 *
Packit b099d7
 *	The string corresponding to the resource code
Packit b099d7
 *
Packit b099d7
 *  SIDE EFFECTS:
Packit b099d7
 *
Packit b099d7
 *      none
Packit b099d7
 *
Packit b099d7
 *--
Packit b099d7
 */
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
int		sym_code;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Find the sym_k code for the resource, then return its name
Packit b099d7
 */
Packit b099d7
for ( sym_code=0 ; sym_code<=uil_max_arg ; sym_code++ )
Packit b099d7
    if ( uil_arg_compr[sym_code] == resource )
Packit b099d7
	return uil_argument_names[sym_code];
Packit b099d7
for ( sym_code=0 ; sym_code<=uil_max_reason ; sym_code++ )
Packit b099d7
    if ( uil_reas_compr[sym_code] == resource )
Packit b099d7
	return uil_reason_names[sym_code];
Packit b099d7
for ( sym_code=0 ; sym_code<=uil_max_child ; sym_code++ )
Packit b099d7
    if ( uil_child_compr[sym_code] == resource )
Packit b099d7
	return uil_child_names[sym_code];
Packit b099d7
return "unknown";
Packit b099d7
Packit b099d7
}
Packit b099d7