333 lines
6.7 KiB
C
333 lines
6.7 KiB
C
/*
|
||
* CDE - Common Desktop Environment
|
||
*
|
||
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
||
*
|
||
* These libraries and programs are free software; you can
|
||
* redistribute them and/or modify them under the terms of the GNU
|
||
* Lesser General Public License as published by the Free Software
|
||
* Foundation; either version 2 of the License, or (at your option)
|
||
* any later version.
|
||
*
|
||
* These libraries and programs are distributed in the hope that
|
||
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
||
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||
* PURPOSE. See the GNU Lesser General Public License for more
|
||
* details.
|
||
*
|
||
* You should have received a copy of the GNU Lesser General Public
|
||
* License along with these librararies and programs; if not, write
|
||
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
||
* Floor, Boston, MA 02110-1301 USA
|
||
*/
|
||
/*
|
||
* @OSF_COPYRIGHT@
|
||
* COPYRIGHT NOTICE
|
||
* Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
|
||
* ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
|
||
* the full copyright text.
|
||
*/
|
||
/*
|
||
* HISTORY
|
||
*/
|
||
#ifdef REV_INFO
|
||
#ifndef lint
|
||
static char rcsid[] = "$XConsortium: wmloutmm.c /main/9 1995/08/29 11:10:59 drk $"
|
||
#endif
|
||
#endif
|
||
/*
|
||
* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
||
|
||
/*
|
||
* This module contains routines responsible for writing the .mm files
|
||
* produced by WML. All files are written into the current directory.
|
||
*
|
||
* Input:
|
||
* The resolved objects
|
||
*
|
||
* Output:
|
||
* wml-uil.mm
|
||
*
|
||
*/
|
||
|
||
|
||
#include "wml.h"
|
||
|
||
#if defined(__STDC__)
|
||
#include <string.h>
|
||
#endif
|
||
#include <stdio.h>
|
||
|
||
|
||
/*
|
||
* Routines used only in this module
|
||
*/
|
||
void wmlOutputWmlUilMm ();
|
||
void wmlOutputWmlUilMmClass ();
|
||
|
||
/*
|
||
* globals
|
||
*/
|
||
int tabno = 1; /* table number */
|
||
|
||
/*
|
||
* lists re-used repeatedly to order lists for printing
|
||
*/
|
||
DynamicHandleListDef mm_arg;
|
||
DynamicHandleListDefPtr mm_arg_ptr = &mm_arg;
|
||
DynamicHandleListDef mm_rsn;
|
||
DynamicHandleListDefPtr mm_rsn_ptr = &mm_rsn;
|
||
DynamicHandleListDef mm_ctl;
|
||
DynamicHandleListDefPtr mm_ctl_ptr = &mm_ctl;
|
||
|
||
|
||
|
||
/*
|
||
* Output control routine, which simply outputs each .mm file in turn.
|
||
*/
|
||
|
||
void wmlOutputMmFiles ()
|
||
|
||
{
|
||
|
||
wmlOutputWmlUilMm ();
|
||
|
||
}
|
||
|
||
|
||
|
||
/*
|
||
* Routine to write out wml-uil.mm
|
||
*
|
||
* This .mm file contains the tables which are to be included as an
|
||
* appendix to the Uil manual. The tables give the arguments with their
|
||
* default values, reasons, constraints, and controls for each class
|
||
* in the class vectors.
|
||
*/
|
||
|
||
void wmlOutputWmlUilMm ()
|
||
|
||
{
|
||
|
||
FILE *outfil; /* output file */
|
||
int ndx; /* loop index */
|
||
WmlClassDefPtr clsobj; /* class object */
|
||
|
||
|
||
|
||
/*
|
||
* Open the output file. Write the canned header stuff
|
||
*/
|
||
outfil = fopen ("wml-uil.mm", "w");
|
||
if ( outfil == NULL )
|
||
{
|
||
printf ("\nCouldn't open wml-uil.mm");
|
||
return;
|
||
}
|
||
|
||
/*
|
||
* Initialize order lists for the tables.
|
||
*/
|
||
wmlInitHList (mm_arg_ptr, 200, TRUE);
|
||
wmlInitHList (mm_rsn_ptr, 200, TRUE);
|
||
wmlInitHList (mm_ctl_ptr, 200, TRUE);
|
||
|
||
/*
|
||
* Write out a table for each class, for both widget and gadget variants
|
||
*/
|
||
for ( ndx=0 ; ndx<wml_obj_class_ptr->cnt ; ndx++ )
|
||
{
|
||
clsobj = (WmlClassDefPtr) wml_obj_class_ptr->hvec[ndx].objptr;
|
||
wmlOutputWmlUilMmClass (outfil, clsobj, clsobj->syndef->name);
|
||
}
|
||
|
||
/*
|
||
* close the output file
|
||
*/
|
||
printf ("\nCreated wml-uil.mm");
|
||
fclose (outfil);
|
||
|
||
}
|
||
|
||
|
||
|
||
/*
|
||
* Routine to write a table for a class entry
|
||
*/
|
||
|
||
void wmlOutputWmlUilMmClass (outfil, clsobj, name)
|
||
FILE *outfil;
|
||
WmlClassDefPtr clsobj;
|
||
char *name;
|
||
|
||
{
|
||
|
||
char *canned1 =
|
||
".bp\n\
|
||
.ps 12\n";
|
||
|
||
char *canned2 =
|
||
".ps 10\n\
|
||
.vs 12\n\
|
||
.LP\n\
|
||
.TS H\n\
|
||
tab(@);\n\
|
||
lB lB\n\
|
||
l l.\n\
|
||
_\n\
|
||
.sp 6p\n\
|
||
Controls@Reasons\n\
|
||
.sp 6p\n\
|
||
_\n\
|
||
.sp 6p\n\
|
||
.TH\n";
|
||
|
||
char *canned3 =
|
||
".TE\n\
|
||
.TS H\n\
|
||
tab(@);\n\
|
||
lB lB lB\n\
|
||
l l l.\n\
|
||
_\n\
|
||
.sp 6p\n\
|
||
UIL Argument Name@Argument Type@Default Value\n\
|
||
.sp 6p\n\
|
||
_\n\
|
||
.sp 6p\n\
|
||
.TH\n";
|
||
|
||
char *canned4 =
|
||
".TE\n";
|
||
|
||
WmlClassResDefPtr argref; /* current argument reference */
|
||
WmlClassResDefPtr rsnref; /* current reason reference */
|
||
WmlClassCtrlDefPtr ctlref; /* current controls reference */
|
||
int argndx; /* to access ordered vector */
|
||
int rsnndx; /* to access ordered vector */
|
||
int ctlndx; /* to access ordered vector */
|
||
|
||
|
||
/*
|
||
* Write out header information
|
||
*/
|
||
fprintf (outfil, canned1);
|
||
fprintf (outfil, "%s\n", name);
|
||
fprintf (outfil, canned2);
|
||
|
||
/*
|
||
* Alphabetize the controls, reason, and argument lists
|
||
*/
|
||
wmlClearHList (mm_arg_ptr);
|
||
wmlClearHList (mm_rsn_ptr);
|
||
wmlClearHList (mm_ctl_ptr);
|
||
|
||
argref = clsobj->arguments;
|
||
while ( argref!= NULL )
|
||
{
|
||
while ( argref != NULL && argref->exclude == WmlAttributeTrue )
|
||
argref = argref->next;
|
||
if ( argref != NULL )
|
||
{
|
||
wmlInsertInHList (mm_arg_ptr,
|
||
argref->act_resource->syndef->name,
|
||
(ObjectPtr)argref);
|
||
argref = argref->next;
|
||
}
|
||
}
|
||
|
||
rsnref = clsobj->reasons;
|
||
while ( rsnref!=NULL )
|
||
{
|
||
while ( rsnref != NULL && rsnref->exclude == WmlAttributeTrue )
|
||
rsnref = rsnref->next;
|
||
if ( rsnref != NULL )
|
||
{
|
||
wmlInsertInHList (mm_rsn_ptr,
|
||
rsnref->act_resource->syndef->name,
|
||
(ObjectPtr)rsnref);
|
||
|
||
rsnref = rsnref->next;
|
||
}
|
||
}
|
||
|
||
ctlref = clsobj->controls;
|
||
while ( ctlref != NULL )
|
||
{
|
||
wmlInsertInHList (mm_ctl_ptr,
|
||
ctlref->ctrl->syndef->name,
|
||
(ObjectPtr)ctlref);
|
||
ctlref = ctlref->next;
|
||
}
|
||
|
||
/*
|
||
* Write out the controls and reason table.
|
||
*/
|
||
rsnndx = 0;
|
||
ctlndx = 0;
|
||
if ( mm_ctl_ptr->cnt == 0 )
|
||
fprintf (outfil, "No children are supported");
|
||
while ( rsnndx<mm_rsn_ptr->cnt || ctlndx<mm_ctl_ptr->cnt )
|
||
{
|
||
if ( ctlndx < mm_ctl_ptr->cnt )
|
||
{
|
||
ctlref = (WmlClassCtrlDefPtr) mm_ctl_ptr->hvec[ctlndx].objptr;
|
||
fprintf (outfil, "%s@",
|
||
ctlref->ctrl->syndef->name);
|
||
ctlndx += 1;
|
||
}
|
||
else
|
||
fprintf (outfil, "@");
|
||
|
||
if ( rsnndx < mm_rsn_ptr->cnt )
|
||
{
|
||
rsnref = (WmlClassResDefPtr) mm_rsn_ptr->hvec[rsnndx].objptr;
|
||
fprintf (outfil, "%s\n",
|
||
rsnref->act_resource->syndef->name);
|
||
rsnndx += 1;
|
||
}
|
||
else
|
||
fprintf (outfil, "\n");
|
||
}
|
||
fprintf (outfil, canned3);
|
||
|
||
/*
|
||
* Write out the argument table
|
||
*/
|
||
argndx = 0;
|
||
while ( argndx < mm_arg_ptr->cnt )
|
||
{
|
||
argref = (WmlClassResDefPtr) mm_arg_ptr->hvec[argndx].objptr;
|
||
fprintf (outfil, "%s@%s@",
|
||
argref->act_resource->syndef->name,
|
||
argref->act_resource->dtype_def->syndef->name);
|
||
if ( argref->dflt != NULL )
|
||
{
|
||
if ( strchr(argref->dflt,' ') != 0 )
|
||
fprintf (outfil, "T{\n%s\nT}\n",
|
||
argref->dflt);
|
||
else
|
||
fprintf (outfil, "%s\n",
|
||
argref->dflt);
|
||
}
|
||
else
|
||
{
|
||
if (argref->act_resource->syndef->dflt != NULL) {
|
||
if ( strchr(argref->act_resource->syndef->dflt,' ') != 0 )
|
||
fprintf (outfil, "T{\n%s\nT}\n",
|
||
argref->act_resource->syndef->dflt);
|
||
else
|
||
fprintf (outfil, "%s\n",
|
||
argref->act_resource->syndef->dflt);
|
||
}
|
||
else
|
||
fprintf (outfil, " \n");
|
||
}
|
||
argndx += 1;
|
||
}
|
||
fprintf (outfil, canned4);
|
||
|
||
}
|
||
|
||
|
||
|