Initial import of the CDE 2.1.30 sources from the Open Group.

This commit is contained in:
Peter Howkins
2012-03-10 18:21:40 +00:00
commit 83b6996daa
18978 changed files with 3945623 additions and 0 deletions

View File

@@ -0,0 +1,695 @@
/* $XConsortium: SmMigResources.c /main/4 1996/05/08 20:11:34 drk $ */
static char sccsid[] = "@(#)48 1.2 src/cde/cde1/dtsession/SmMigResources.c, desktop, cde41J, 9520A_all 5/16/95 08:31:12";
/*
* COMPONENT_NAME: desktop
*
* FUNCTIONS: MigrateResources
*
* ORIGINS: 27
*
* IBM CONFIDENTIAL -- (IBM Confidential Restricted when
* combined with the aggregated modules for this product)
* OBJECT CODE ONLY SOURCE MATERIALS
*
* (C) COPYRIGHT International Business Machines Corp. 1995
* All Rights Reserved
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
#include <stdio.h>
#include <string.h>
#include <Dt/DtNlUtils.h>
/* defines for return codes */
#define RC_SUCCESS 0
#define RC_OPEN_ERROR 1
#define RC_END_OF_FILE 2
#define RC_MEMORY_ALLOCATION_ERROR 3
#define RC_LINE_CONTINUED 4
#define RC_PARTIAL_LINE 5
#define RC_WRITE_ERROR_TEMP 6
/* type 1 resources are of the form:
[*.]convert1[i]
Example of a resource specification of this type:
*foreground: Blue
*/
#define NUMBER_OF_CONVERT1 15
static char *convert1[NUMBER_OF_CONVERT1]
= {
"displayResolution",
"systemFont",
"userFont",
"FontList",
"Font",
"FontSet",
"multiClickTime",
"sessionVersion",
"background",
"foreground",
"ColorUse",
"HelpColorUse",
"background",
"foreground",
"enableBtn1Transfer"
}
;
/* type 2 resources are of the form:
CONVERT2_0{* or .}CONVERT2_1{* or .}convert2[i]
Example of a resource specification of this type:
dtsession*extension*cycleTimeout: 10
*/
#define CONVERT2_0 "dtsession"
#define CONVERT2_1 "extension"
#define NUMBER_OF_CONVERT2 5
static char *convert2[NUMBER_OF_CONVERT2]
= {
"cycleTimeout",
"lockTimeout",
"saverTimeout",
"random",
"saverList",
}
;
/* type 3 resources are of the form:
convert31[i]{* or .}convert32[i]
Example of a resource specification of this type:
Dtwm*useIconBox: True
*/
#define NUMBER_OF_CONVERT3 26
static char *convert31[NUMBER_OF_CONVERT3]
= {
"dtsession",
"dtsession",
"dtsession",
"dtsession",
"dtsession",
"dtsession",
"Dtstyle",
"Dtstyle",
"Dtwm",
"Dtwm",
"Dtwm",
"Dtwm",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"wsHelp",
"cachedHelp"
}
;
static char *convert32[NUMBER_OF_CONVERT3]
= {
"displayResolution" ,
"sessionLanguage" ,
"saverTimeout" ,
"cycleTimeout" ,
"lockTimeout" ,
"saverList" ,
"lockoutScale" ,
"timeoutScale" ,
"keyboardFocusPolicy",
"focusAutoRaise" ,
"moveOpaque" ,
"useIconBox" ,
"onScreen" ,
"x" ,
"y" ,
"columns" ,
"rows" ,
"helpType" ,
"vPCount" ,
"tTitle" ,
"helpVolume" ,
"locationId" ,
"stringData" ,
"windowGroup" ,
"wsName" ,
"cachedCount"
}
;
/* type 4 resources are of the form:
{* or .}convert4[i]{* or .}CONVERT4_2
Example of a resource specification of this type:
*XmText*FontList: Big
*/
#define CONVERT4_2 "FontList"
#define NUMBER_OF_CONVERT4 2
static char *convert4[NUMBER_OF_CONVERT4]
= {
"XmText",
"XmTextField"
}
;
/* type 5 resources are of the form:
convert5[i]{* or .}<any value>{* or .}CONVERT5_2
Example of a resource specification of this type:
Dtwm*0*helpResources: xxx
*/
#define CONVERT5_2 "helpResources"
#define NUMBER_OF_CONVERT5 2
/* these are of the form p1*#*helpResources */
static char *convert5[NUMBER_OF_CONVERT5]
= {
"Dtwm",
"Mwm"
}
;
/* type 6 resources are of the form:
CONVERT6_0<any value>{* or .}convert6[i]
Example of a resource specification of this type:
oWsHelp10*x: xxx
*/
#define CONVERT6_0 "oWsHelp"
#define NUMBER_OF_CONVERT6 11
static char *convert6[NUMBER_OF_CONVERT6]
= {
"x",
"y",
"columns",
"rows",
"helpType",
"vPCount",
"tTitle",
"helpVolume",
"locationId",
"stringData",
"workspaces"
}
;
/* type 7 resources are of the form:
CONVERT7_01{* or .}<any value>{* or .}convert7[i]
- or -
CONVERT7_02{* or .}<any value>{* or .}convert7[i]
Examples of resource specifications of this type:
Dtwm*0*initialWorkspace: xxx
Mwm*0*initialWorkspace: xxx
*/
#define CONVERT7_01 "Mwm"
#define CONVERT7_02 "Dtwm"
#define NUMBER_OF_CONVERT7 3
/* these are of the form Mwm|Dtwm*XXX*resource */
static char *convert7[NUMBER_OF_CONVERT7]
= {
"initialWorkspace",
"workspaceList",
"workspaceCount"
}
;
/* type 8 resources are of the form:
CONVERT8_01{* or .}<any value>{* or .}<any value>{* or .}convert8[i]
- or -
CONVERT8_02{* or .}<any value>{* or .}<any value>{* or .}convert8[i]
Examples of resource specifications of this type:
Mwm*0*ws01*title: xxx
Dtwm*1ws02*title: xxx
*/
#define CONVERT8_01 "Mwm"
#define CONVERT8_02 "Dtwm"
#define NUMBER_OF_CONVERT8 3
static char *convert8[NUMBER_OF_CONVERT8]
= {
"title",
"geometry",
"iconBoxGeometry"
}
;
/* type 9 resources are of the form:
CONVERT9_01{* or .}<any value>{* or .}<any value>{* or .}convert91[i] \
{* or .}convert92[i]
- or -
CONVERT9_02{* or .}<any value>{* or .}<any value>{* or .}convert91[i] \
{* or .}convert92[i]
Example of resource specification of this type:
Dtwm*0*ws01*backdrop*image: Drops
*/
#define CONVERT9_01 "Mwm"
#define CONVERT9_02 "Dtwm"
#define NUMBER_OF_CONVERT9 3
static char *convert91[NUMBER_OF_CONVERT9]
= {
"backdrop",
"FrontPanel",
"MyFrontPanel"
}
;
static char *convert92[NUMBER_OF_CONVERT9]
= {
"image" ,
"geometry",
"geometry"
}
;
/* type 10 resources are of the form:
*<any value>{* or .}convert10[i]
Example of a resource specification of this type:
*0*ColorPalette: Default.dp
*/
#define NUMBER_OF_CONVERT10 3
static char *convert10[NUMBER_OF_CONVERT10]
= {
"MonochromePalette",
"ColorUse",
"ColorPalette"
}
;
/* define the maximum fields in a resource specification
(which does not include the value of the resource) that
is required by this routine
*/
#define NUMBER_OF_FIELDS 6
static char * field[NUMBER_OF_FIELDS];
/* this function determines whether a field extracted from the resource
matches a string in the specified array.
Returns:
TRUE = if strings match
FALSE = if string do not match.
*/
int check_match1(char * match[], int noelements, int match1)
{
int i;
int matched = FALSE;
for (i=0;((matched == FALSE) &&
(i<noelements));i++)
{
if (strcmp(field[match1],match[i]) == 0)
{
matched =TRUE;
}
}
return(matched);
}
/* this function determines whether a fields extracted from the resource
match strings in the specified arrays.
Returns:
TRUE = if strings match
FALSE = if string do not match.
*/
int check_match2(char * match1_str[], char * match2_str[],
int noelements, int match1, int match2)
{
int i;
int matched = FALSE;
for (i=0;((matched == FALSE) &&
(i<noelements));i++)
{
if ((strcmp(field[match1],match1_str[i]) == 0) &&
(strcmp(field[match2],match2_str[i]) == 0))
{
matched =TRUE;
}
}
return(matched);
}
/* this function reads all resources from the input file.
If the resource matches those written from within desktop on 4.1.1 and
4.1.2, the resource is written to the output file.
Otherwise, the resource is not written to the output file.
Return codes:
RC_SUCCESS
RC_OPEN_ERROR
RC_MEMORY_ALLOCATION_ERROR
RC_WRITE_ERROR_TEMP
*/
MigrateResources(char * inputfile, char * outputfile)
{
int size_of_buffer = 1024;
int size_of_mbuffer = 1024;
int rc = RC_SUCCESS;
FILE * out_fh;
FILE * in_fh;
int write_line;
int chars_written;
int type_found = FALSE;
char * string;
char * realend;
int done=0;
int new_size = 0;
int number_fields = 0;
char * inputbuffer=NULL;
char * inputbuffer1=NULL;
char * unmodified_buffer=NULL;
char * resource_end;
char * first_space;
char * tmp1;
int i;
int charlen;
/* Initialize for multi-byte */
DtNlInitialize();
done = RC_SUCCESS;
/* open input and output files and exit if not successful */
in_fh = fopen(inputfile,"r");
out_fh = fopen(outputfile,"w");
if ((out_fh != NULL) && (in_fh != NULL))
{
/* allocate buffers for reading lines from the input file */
inputbuffer = malloc ((size_of_buffer + 1) * sizeof(char *));
inputbuffer1 = malloc ((size_of_buffer + 1) * sizeof(char *));
unmodified_buffer = malloc ((size_of_mbuffer + 1)
* sizeof(char *));
if ((inputbuffer != NULL) &&
(inputbuffer1 != NULL) &&
(unmodified_buffer != NULL))
{
do
{
*inputbuffer = '\0';
*inputbuffer1 = '\0';
*unmodified_buffer = '\0';
/* read and process each line from the input file */
do
{
/* read until an line has been read */
rc = RC_SUCCESS;
string = fgets((char *)inputbuffer1, size_of_buffer, in_fh);
/* if read was successful, then ...*/
if (string != NULL)
{
/* determine if a larger unmodified buffer
needs to be allocated
*/
new_size = strlen(unmodified_buffer) +
strlen(inputbuffer1) + 2;
if (new_size > size_of_mbuffer)
{
unmodified_buffer = realloc(unmodified_buffer,
new_size);
size_of_mbuffer = new_size;
}
/* save unmodified data read */
strcat(unmodified_buffer,inputbuffer1);
/* set indicator if entire line was not read */
DtLastChar(inputbuffer1,&realend,&charlen);
if ((charlen == 1) && (*realend != '\n'))
{
rc = RC_PARTIAL_LINE;
}
else
{
/* if entire line was read but it ends
with a continuation character
then, remove the ending continuation character or
spaces preceeded by an ending
continuation character.
*/
realend=DtPrevChar(inputbuffer1,realend);
for (;((DtIsspace(realend) != 0) &&
(realend > inputbuffer1));)
{
realend=DtPrevChar(inputbuffer1,realend);
}
if ((mblen(realend,MB_CUR_MAX) == 1) &&
(*realend == '\\'))
{
*realend = '\0';
rc = RC_LINE_CONTINUED;
}
}
/* allocate larger input buffer if necessary */
new_size = strlen(inputbuffer) +
strlen(inputbuffer1) + 2;
if (new_size > size_of_buffer)
{
inputbuffer = realloc(inputbuffer,new_size);
size_of_buffer = new_size;
}
/* concatenate modified buffer to previously
read buffer
*/
strcat(inputbuffer,inputbuffer1);
}
else
{
rc = RC_END_OF_FILE;
}
} while ((rc == RC_LINE_CONTINUED) || (rc == RC_PARTIAL_LINE));
/* if read was successful, then determine if the resources
read are part of the set that need to be retained.
*/
type_found = FALSE;
number_fields = 0;
type_found=FALSE;
if (rc == RC_SUCCESS)
{
/* process non-comment lines */
if (strncmp(inputbuffer,"!",1) != 0)
{
/* determine the non-value portion of the
resource specification (i.e. the
part to the left of the ":" and to the
left of the first space).
*/
resource_end = DtStrchr(inputbuffer,':');
first_space = DtStrchr(inputbuffer,' ');
if (resource_end != NULL)
{
if ((first_space != NULL) &&
(first_space < resource_end))
{
resource_end = NULL;
}
}
if (resource_end != NULL)
{
*resource_end = '\0';
/* determine the start of each field
in the non-value part of the resource.
It is assumed that the individual fields
are delimited by a "*" or ".".
*/
field[0]=inputbuffer;
for (i=1;((i<NUMBER_OF_FIELDS) &&
(field[i-1] != NULL));
i++)
{
/* determine the location of the next
delimiter - "* or "."
Set field pointer to first one found.
*/
field[i]=DtStrchr(field[i-1],'*');
tmp1=DtStrchr(field[i-1],'.');
if (((tmp1 != NULL) && (tmp1 < resource_end) &&
(tmp1 < field[i])) ||
(field[i] == NULL))
{
field[i]=tmp1;
}
if (field[i] != NULL)
{
/* terminate the previous field */
*field[i] = '\0';
/* move pointer to start of field */
field[i]++;
}
if (field[i] >= resource_end)
{
field[i]=NULL;
}
}
number_fields = i-1;
/* check for each type of resource
that should be retained in the output file.
See comments preceeding the definition
of each array near the start of this file
for a description and example of each type.
*/
if ((strlen(field[0]) == 0) &&
(number_fields == 2) &&
(check_match1(convert1,
NUMBER_OF_CONVERT1,1) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 3) &&
(strcmp(field[0],CONVERT2_0) == 0) &&
(strcmp(field[1],CONVERT2_1) == 0) &&
(check_match1(convert2, NUMBER_OF_CONVERT2,2)
== TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 2) &&
(check_match2(convert31,convert32,
NUMBER_OF_CONVERT3,0,1) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 3) &&
(strcmp(field[2],CONVERT4_2) == 0) &&
(check_match1(convert4,
NUMBER_OF_CONVERT4,1) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 3) &&
(strcmp(field[2],CONVERT5_2) == 0) &&
(check_match1(convert5,
NUMBER_OF_CONVERT5,0) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 2) &&
(strlen(field[0]) > strlen(CONVERT6_0)) &&
(strncmp(field[0], CONVERT6_0,
strlen(CONVERT6_0)) == 0) &&
(check_match1(convert6,
NUMBER_OF_CONVERT6,1) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 3) &&
((strcmp(field[0],CONVERT7_01) == 0) ||
(strcmp(field[0],CONVERT7_02) == 0)) &&
(check_match1(convert7,
NUMBER_OF_CONVERT7,2) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 4) &&
((strcmp(field[0],CONVERT8_01) == 0) ||
(strcmp(field[0],CONVERT8_02) == 0)) &&
(check_match1(convert8,
NUMBER_OF_CONVERT8,3) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 5) &&
((strcmp(field[0],CONVERT9_01) == 0) ||
(strcmp(field[0],CONVERT9_02) == 0)) &&
(check_match2(convert91,convert92,
NUMBER_OF_CONVERT9,3,4) == TRUE))
{
type_found=TRUE;
}
if ((type_found == FALSE) &&
(number_fields == 3) &&
(check_match1(convert10,
NUMBER_OF_CONVERT10,2) == TRUE))
{
type_found=TRUE;
}
}
}
/* if resource should be retained then
write resource to output file.
*/
if (type_found == TRUE)
{
chars_written = fputs(unmodified_buffer,out_fh);
if (chars_written != strlen(unmodified_buffer))
{
if (rc == RC_SUCCESS)
{
rc = RC_WRITE_ERROR_TEMP;
}
}
}
}
} while (rc == RC_SUCCESS);
}
else
{
rc = RC_MEMORY_ALLOCATION_ERROR;
}
if (rc == RC_END_OF_FILE)
{
rc = RC_SUCCESS;
}
/* free all allocated buffers */
if (inputbuffer != NULL)
{
free(inputbuffer);
}
if (inputbuffer1 != NULL)
{
free(inputbuffer1);
}
if (unmodified_buffer != NULL)
{
free(unmodified_buffer);
}
}
else
{
rc = RC_OPEN_ERROR;
}
if (in_fh != NULL)
{
fclose(in_fh);
}
if (out_fh != NULL)
{
fclose(out_fh);
}
return(rc);
}