[BACK]Return to tabhelp.ls CVS log [TXT][DIR] Up to [Development] / projects / ogl-sample / main / glx / server

File: [Development] / projects / ogl-sample / main / glx / server / tabhelp.ls (download)

Revision 1.1.1.1 (vendor branch), Wed Jan 26 10:31:13 2000 UTC (17 years, 9 months ago) by ljp
Branch: SGI
CVS Tags: oglsi1_2_1
Changes since 1.1: +0 -0 lines

Imported from P4

# License Applicability. Except to the extent portions of this file are
# made subject to an alternative license as permitted in the SGI Free
# Software License B, Version 1.0 (the "License"), the contents of this
# file are subject only to the provisions of the License. You may not use
# this file except in compliance with the License. You may obtain a copy
# of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
# Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
#
# http://oss.sgi.com/projects/FreeB
#
# Note that, as provided in the License, the Software is distributed on an
# "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
# DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
# CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
# PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
#
# Original Code. The Original Code is: OpenGL Sample Implementation,
# Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
# Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
# Copyright in any portions created by third parties is as indicated
# elsewhere herein. All Rights Reserved.
#
# Additional Notice Provisions: The application programming interfaces
# established by SGI in conjunction with the Original Code are The
# OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
# April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
# 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
# Window System(R) (Version 1.3), released October 19, 1998. This software
# was created using the OpenGL(R) version 1.2.1 Sample Implementation
# published by SGI, but has not been independently verified as being
# compliant with the OpenGL(R) version 1.2.1 Specification.
#
# $Date$ $Revision$
# $Header$

#
#   Generate dispatch tables and prototypes for their routines.
#

function initialize() {

    # TYPEMAP should be defined on the command line that invokes libspec
    typeMapFile = "nop.tm";
    _readWireFile();

    funcs = FUNCS;
    suffix = SUFFIX;

    #
    # This script is executed in multiple passes.  During
    # each pass, it is invoked with only one of the following
    # expressions evaluating to true on any given pass.
    #
    genRender = (funcs ~ /render/);
    genSingle = (funcs ~ /single/);
    genVendPriv = (funcs ~ /vendpriv/);
    genEXT = (suffix ~ /_EXT/);
    max_opcode = 0;
    min_opcode = 65536;

    #
    # Partial names of macros used to send each wire type.
    #
    cast["enum"] =	"INT"
    cast["boolean"] =	"BYTE"
    cast["bitfield"] =	"INT"
    cast["byte"] =	"BYTE"
    cast["short"] =	"SHORT"
    cast["int"] =	"INT"
    cast["sizei"] =	"INT"
    cast["ubyte"] =	"BYTE"
    cast["ushort"] =	"SHORT"
    cast["uint"] =	"INT"
    cast["float"] =	"FLOAT"
    cast["clampf"] =	"FLOAT"
    cast["double"] =	"DOUBLE"
    cast["clampd"] =	"DOUBLE"
    cast["void"] =	"VOID"

    #
    # Byte sizes of wire types.
    #
    xfer_size["enum"] =		"4"
    xfer_size["boolean"] =	"1"
    xfer_size["bitfield"] =	"4"
    xfer_size["byte"] =		"1"
    xfer_size["short"] =	"2"
    xfer_size["int"] =		"4"
    xfer_size["sizei"] =	"4"
    xfer_size["ubyte"] =	"1"
    xfer_size["ushort"] =	"2"
    xfer_size["uint"] =		"4"
    xfer_size["float"] =	"4"
    xfer_size["clampf"] =	"4"
    xfer_size["double"] =	"8"
    xfer_size["clampd"] =	"8"
    xfer_size["void"] =		"1"		# A lie, but good enough

} # function intialize

function main( i, param, cmdlen, invarsize) {

    if ("vectorequiv" in propList) return;

    if (("extension", "not_implemented") in propListValues) return;

    if (("glxflags", "ignore") in propListValues) return;

    if (genSingle) {
	if ("glxsingle" in propList) {
	    opcode = propList["glxsingle"];
	} else if ("glxopcode" in propList) {
	    opcode = propList["glxopcode"];
	} else {
	    return;
	}
    } else if (genVendPriv) {
	if ("glxvendorpriv" in propList) {
	    if (("glxflags", "EXT") in propListValues) {
		if (genEXT)
		    opcode = propList["glxvendorpriv"];
		else
		    return;
	    }
	} else {
	    return;
	}
    } else if (genRender) {
	if ("glxropcode" in propList) {
	    if (("glxflags", "EXT") in propListValues) {
		if (genEXT)
		    opcode = propList["glxropcode"];
		else
		    return;
	    } else {
		if ((!genEXT) )
		    opcode = propList["glxropcode"];
		else
		    return;
	    }
	} else {
	    return;
	}
    }
    fname = functionName;
    gsub(",","", opcode);

    if (genSingle) {
	printf "SingleTable[%3d] = \"%s\";\n", opcode, fname;
    } else if (genVendPriv) {
	printf "VendorPrivTable[%3d] = \"%s\";\n", opcode, fname;
    } else if (genRender) {
	str = sprintf("\"%s\"", fname);
	printf "RenderTable[%3d] = %-16s; ", opcode, str;

	if (!(("glxflags", "client-handcode") in propListValues)) {
	    #
	    # Everything below is to generate info needed for the size tables.
	    #

	    #
	    # Set some flags for each parameter for convenience.
	    # This function is in the list utils.
	    #
	    setPerParamFlags();

	    #
	    # Sort the fixed-size parameters, largest element size first, so that
	    # we do not have to word-align them individually.
	    # This function is in the list utils.
	    #
	    sortParams();

	    #
	    # Compute sizes of all incoming parameters and the total size of the
	    # command.
	    # (this function is in the list utils)
	    #
	    computeInCmdSize();
	} else {
	    inFixCmdSize = 0;
	}

	printf "RenSize[%3d]=%3d; ", opcode, inFixCmdSize+4;
	printf "RenConst[%3d]=", opcode;
	if (inVarCmdSize) {
	    printf "0; ";
	} else {
	    printf "1; ";
	}

	#
	# Set a flag that says whether it's handcoded.
	#
	if (("glxflags", "client-handcode") in propListValues) {
	    printf "HC[%3d]=1;", opcode;
	} else {
	    printf "HC[%3d]=0;", opcode;
	}
	print;
    }
    if ((opcode + 0) < (min_opcode + 0)) {
	min_opcode = opcode;
    }
    if ((opcode + 0) > (max_opcode + 0)) {
	max_opcode = opcode;
    }
}

function finalize()
{
    if (genSingle) {
	printf "\nmin_single_opcode%s = %d;\n\n", SUFFIX, min_opcode;
	printf "\nmax_single_opcode%s = %d;\n\n", SUFFIX, max_opcode;
    }else if (genVendPriv) {
	printf "\nmin_vendpriv_opcode%s = %d;\n\n", SUFFIX, min_opcode;
	printf "\nmax_vendpriv_opcode%s = %d;\n\n", SUFFIX, max_opcode;
    } else if (genRender) {
	printf "\nmin_render_opcode%s = %d;\n\n", SUFFIX, min_opcode;
	printf "\nmax_render_opcode%s = %d;\n\n", SUFFIX, max_opcode;
    }
}