Blame tools/wml/wmloutmm.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[] = "$XConsortium: wmloutmm.c /main/9 1995/08/29 11:10:59 drk $"
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
 * This module contains routines responsible for writing the .mm files
Packit b099d7
 * produced by WML. All files are written into the current directory.
Packit b099d7
 *
Packit b099d7
 * Input:
Packit b099d7
 *	The resolved objects
Packit b099d7
 *
Packit b099d7
 * Output:
Packit b099d7
 *	wml-uil.mm
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
#include "wml.h"
Packit b099d7
Packit b099d7
#if defined(__STDC__)
Packit b099d7
#include <string.h>
Packit b099d7
#endif
Packit b099d7
#include <stdio.h>
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Routines used only in this module
Packit b099d7
 */
Packit b099d7
void wmlOutputWmlUilMm ();
Packit b099d7
void wmlOutputWmlUilMmClass ();
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * globals
Packit b099d7
 */
Packit b099d7
int			tabno = 1;	/* table number */
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * lists re-used repeatedly to order lists for printing
Packit b099d7
 */
Packit b099d7
DynamicHandleListDef	mm_arg;
Packit b099d7
DynamicHandleListDefPtr	mm_arg_ptr = &mm_arg;
Packit b099d7
DynamicHandleListDef	mm_rsn;
Packit b099d7
DynamicHandleListDefPtr	mm_rsn_ptr = &mm_rsn;
Packit b099d7
DynamicHandleListDef	mm_ctl;
Packit b099d7
DynamicHandleListDefPtr	mm_ctl_ptr = &mm_ctl;
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Output control routine, which simply outputs each .mm file in turn.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputMmFiles ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
wmlOutputWmlUilMm ();
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to write out wml-uil.mm
Packit b099d7
 *
Packit b099d7
 * This .mm file contains the tables which are to be included as an
Packit b099d7
 * appendix to the Uil manual. The tables give the arguments with their
Packit b099d7
 * default values, reasons, constraints, and controls for each class
Packit b099d7
 * in the class vectors.
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputWmlUilMm ()
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
FILE			*outfil;	/* output file */
Packit b099d7
int			ndx;		/* loop index */
Packit b099d7
WmlClassDefPtr		clsobj;		/* class object */
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Open the output file. Write the canned header stuff
Packit b099d7
 */
Packit b099d7
outfil = fopen ("wml-uil.mm", "w");
Packit b099d7
if ( outfil == NULL )
Packit b099d7
    {
Packit b099d7
    printf ("\nCouldn't open wml-uil.mm");
Packit b099d7
    return;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Initialize order lists for the tables.
Packit b099d7
 */
Packit b099d7
wmlInitHList (mm_arg_ptr, 200, TRUE);
Packit b099d7
wmlInitHList (mm_rsn_ptr, 200, TRUE);
Packit b099d7
wmlInitHList (mm_ctl_ptr, 200, TRUE);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Write out a table for each class, for both widget and gadget variants
Packit b099d7
 */
Packit b099d7
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
Packit b099d7
    {
Packit b099d7
    clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
Packit b099d7
    wmlOutputWmlUilMmClass (outfil, clsobj, clsobj->syndef->name);
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * close the output file
Packit b099d7
 */
Packit b099d7
printf ("\nCreated wml-uil.mm");
Packit b099d7
fclose (outfil);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * Routine to write a table for a class entry
Packit b099d7
 */
Packit b099d7
Packit b099d7
void wmlOutputWmlUilMmClass (outfil, clsobj, name)
Packit b099d7
    FILE			*outfil;
Packit b099d7
    WmlClassDefPtr		clsobj;
Packit b099d7
    char			*name;
Packit b099d7
Packit b099d7
{
Packit b099d7
Packit b099d7
char		*canned1 =
Packit b099d7
".bp\n\
Packit b099d7
.ps 12\n";
Packit b099d7
Packit b099d7
char		*canned2 =
Packit b099d7
".ps 10\n\
Packit b099d7
.vs 12\n\
Packit b099d7
.LP\n\
Packit b099d7
.TS H\n\
Packit b099d7
tab(@);\n\
Packit b099d7
lB lB\n\
Packit b099d7
l l.\n\
Packit b099d7
_\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
Controls@Reasons\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
_\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
.TH\n";
Packit b099d7
Packit b099d7
char		*canned3 =
Packit b099d7
".TE\n\
Packit b099d7
.TS H\n\
Packit b099d7
tab(@);\n\
Packit b099d7
lB lB lB\n\
Packit b099d7
l l l.\n\
Packit b099d7
_\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
UIL Argument Name@Argument Type@Default Value\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
_\n\
Packit b099d7
.sp 6p\n\
Packit b099d7
.TH\n";
Packit b099d7
Packit b099d7
char		*canned4 =
Packit b099d7
".TE\n";
Packit b099d7
Packit b099d7
WmlClassResDefPtr	argref;		/* current argument reference */
Packit b099d7
WmlClassResDefPtr	rsnref;		/* current reason reference */
Packit b099d7
WmlClassCtrlDefPtr	ctlref;		/* current controls reference */
Packit b099d7
int			argndx;		/* to access ordered vector */
Packit b099d7
int			rsnndx;		/* to access ordered vector */
Packit b099d7
int			ctlndx;		/* to access ordered vector */
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Write out header information
Packit b099d7
 */
Packit Service 4d6e9e
fprintf (outfil, "%s", canned1);
Packit b099d7
fprintf (outfil, "%s\n", name);
Packit Service 4d6e9e
fprintf (outfil, "%s", canned2);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Alphabetize the controls, reason, and argument lists
Packit b099d7
 */
Packit b099d7
wmlClearHList (mm_arg_ptr);
Packit b099d7
wmlClearHList (mm_rsn_ptr);
Packit b099d7
wmlClearHList (mm_ctl_ptr);
Packit b099d7
Packit b099d7
argref = clsobj->arguments;
Packit b099d7
while ( argref!= NULL )
Packit b099d7
    {
Packit b099d7
    while ( argref != NULL && argref->exclude == WmlAttributeTrue )
Packit b099d7
	argref = argref->next;
Packit b099d7
    if ( argref != NULL )
Packit b099d7
	{
Packit b099d7
	wmlInsertInHList (mm_arg_ptr,
Packit b099d7
			  argref->act_resource->syndef->name,
Packit b099d7
			  (ObjectPtr)argref);
Packit b099d7
	argref = argref->next;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
rsnref = clsobj->reasons;
Packit b099d7
while ( rsnref!=NULL )
Packit b099d7
    {
Packit b099d7
    while ( rsnref != NULL && rsnref->exclude == WmlAttributeTrue )
Packit b099d7
	rsnref = rsnref->next;
Packit b099d7
    if ( rsnref != NULL )
Packit b099d7
	{
Packit b099d7
	wmlInsertInHList (mm_rsn_ptr,
Packit b099d7
			  rsnref->act_resource->syndef->name,
Packit b099d7
			  (ObjectPtr)rsnref);
Packit b099d7
	
Packit b099d7
	rsnref = rsnref->next;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
ctlref = clsobj->controls;
Packit b099d7
while ( ctlref != NULL )
Packit b099d7
    {
Packit b099d7
    wmlInsertInHList (mm_ctl_ptr,
Packit b099d7
		      ctlref->ctrl->syndef->name,
Packit b099d7
		      (ObjectPtr)ctlref);
Packit b099d7
    ctlref = ctlref->next;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Write out the controls and reason table.
Packit b099d7
 */
Packit b099d7
rsnndx = 0;
Packit b099d7
ctlndx = 0;
Packit b099d7
if ( mm_ctl_ptr->cnt == 0 )
Packit Service 4d6e9e
    fprintf (outfil, "%s", "No children are supported");
Packit b099d7
while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
Packit b099d7
    {
Packit b099d7
    if ( ctlndx < mm_ctl_ptr->cnt )
Packit b099d7
	{
Packit b099d7
	ctlref = (WmlClassCtrlDefPtr) mm_ctl_ptr->hvec[ctlndx].objptr;
Packit b099d7
	fprintf (outfil, "%s@",
Packit b099d7
		 ctlref->ctrl->syndef->name);
Packit b099d7
	ctlndx += 1;
Packit b099d7
	}
Packit b099d7
    else
Packit Service 4d6e9e
	fprintf (outfil, "%s", "@");
Packit b099d7
    
Packit b099d7
    if ( rsnndx < mm_rsn_ptr->cnt )
Packit b099d7
	{
Packit b099d7
	rsnref = (WmlClassResDefPtr) mm_rsn_ptr->hvec[rsnndx].objptr;
Packit b099d7
	fprintf (outfil, "%s\n",
Packit b099d7
		 rsnref->act_resource->syndef->name);
Packit b099d7
	rsnndx += 1;
Packit b099d7
	}
Packit b099d7
    else
Packit Service 4d6e9e
	fprintf (outfil, "%s", "\n");
Packit b099d7
    }
Packit Service 4d6e9e
fprintf (outfil, "%s", canned3);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Write out the argument table
Packit b099d7
 */
Packit b099d7
argndx = 0;
Packit b099d7
while ( argndx < mm_arg_ptr->cnt )
Packit b099d7
    {
Packit b099d7
    argref = (WmlClassResDefPtr) mm_arg_ptr->hvec[argndx].objptr;
Packit b099d7
    fprintf (outfil, "%s@%s@",
Packit b099d7
	     argref->act_resource->syndef->name,
Packit b099d7
	     argref->act_resource->dtype_def->syndef->name);
Packit b099d7
    if ( argref->dflt != NULL )
Packit b099d7
	{
Packit b099d7
	if ( strchr(argref->dflt,' ') != 0 )
Packit b099d7
	    fprintf (outfil, "T{\n%s\nT}\n",
Packit b099d7
		     argref->dflt);
Packit b099d7
	else
Packit b099d7
	    fprintf (outfil, "%s\n",
Packit b099d7
		     argref->dflt);
Packit b099d7
	}
Packit b099d7
    else
Packit b099d7
	{
Packit b099d7
	if (argref->act_resource->syndef->dflt != NULL) {
Packit b099d7
	    if ( strchr(argref->act_resource->syndef->dflt,' ') != 0 )
Packit b099d7
		fprintf (outfil, "T{\n%s\nT}\n",
Packit b099d7
			 argref->act_resource->syndef->dflt);
Packit b099d7
	    else
Packit b099d7
		fprintf (outfil, "%s\n",
Packit b099d7
			 argref->act_resource->syndef->dflt);
Packit b099d7
	}
Packit b099d7
	else
Packit Service 4d6e9e
	    fprintf (outfil, "%s", "  \n");
Packit b099d7
    }    
Packit b099d7
    argndx += 1;
Packit b099d7
    }
Packit Service 4d6e9e
fprintf (outfil, "%s", canned4);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7