home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-22 | 85.6 KB | 2,058 lines |
- Newsgroups: comp.sources.unix
- From: pleierc@informatik.tu-muenchen.de (Christoph Pleier)
- Subject: v27i182: distributed-c-2.1 - Distributed C Development Environment, V2.1, Part08/18
- References: <1.756634932.28500@gw.home.vix.com>
- Sender: unix-sources-moderator@gw.home.vix.com
- Approved: vixie@gw.home.vix.com
-
- Submitted-By: pleierc@informatik.tu-muenchen.de (Christoph Pleier)
- Posting-Number: Volume 27, Issue 182
- Archive-Name: distributed-c-2.1/part08
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 8 (of 18)."
- # Contents: config/symb_program.c dcc/code_create.c dcc/makefile.c
- # dcc/symb_debug.c examples/nullst/nullst.dc
- # examples/test/creation.dc include/dcc.h include/functions.h
- # Wrapped by vixie@gw.home.vix.com on Thu Dec 23 00:12:00 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'config/symb_program.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'config/symb_program.c'\"
- else
- echo shar: Extracting \"'config/symb_program.c'\" \(10681 characters\)
- sed "s/^X//" >'config/symb_program.c' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * s y m b _ p r o g r a m . c *
- X * *
- X * Package : Configuration Files Parsers *
- X * Version : 1.0 *
- X * CreationDate : 26.02.92 *
- X * LastUpDate : 27.02.92 *
- X * *
- X * All routines needed to manage the symbol table during parsing of *
- X * program configuration files. *
- X * *
- X * Copyright (C) 1992-1994 by Christoph Pleier *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#include <stdio.h>
- X#include "cfgparsers.h"
- X
- X/******************************************************************************
- X * generate_fsspec_info() *
- X * *
- X * Generates and initializes a accessed filesystem info. *
- X * *
- X * Return values: pointer to new element upon success / NULL upon error *
- X ******************************************************************************/
- XFSSPECINFO *
- Xgenerate_fsspec_info(fs_symbol, freq, quant)
- XSYMBTABEL *fs_symbol;
- Xfloat freq, quant;
- X{
- X register FSSPECINFO *ptr;
- X
- X /* check type */
- X if (fs_symbol->type != S_FIXED_DISK) {
- X printf("Error: line %d at \"%s\": \"%s\" is not a fixed disk\n",
- X yylineno, yytext, fs_symbol->name);
- X exit(ERROR);
- X }
- X
- X ptr = (FSSPECINFO *) Malloc(sizeof(FSSPECINFO));
- X ptr->filesys = fs_symbol;
- X ptr->frequency = freq;
- X ptr->quantity = quant;
- X ptr->next = NULL;
- X
- X return(ptr);
- X} /* generate_fsspec_info */
- X
- X/******************************************************************************
- X * chain_fsspec_infos() *
- X * *
- X * Chains accessed filesystems info 'accfs2' to the end of info 'accfs1'. *
- X * *
- X * Return values: pointer to resulting targetinfo upon success / *
- X * NULL upon error *
- X ******************************************************************************/
- XFSSPECINFO *
- Xchain_fsspec_infos(accfs1, accfs2)
- XFSSPECINFO *accfs1, *accfs2;
- X{
- X register FSSPECINFO *ptr;
- X
- X for(ptr = accfs1; ptr->next; ptr = ptr->next)
- X ;
- X ptr->next = accfs2;
- X return(accfs1);
- X} /* chain_fsspec_infos */
- X
- X/******************************************************************************
- X * generate_commp_info() *
- X * *
- X * Generates and initializes a communication process info. *
- X * *
- X * Return values: pointer to new element upon success / NULL upon error *
- X ******************************************************************************/
- XCOMMPINFO *
- Xgenerate_commp_info(process, freq, quant)
- XSYMBTABEL *process;
- Xfloat freq, quant;
- X{
- X register COMMPINFO *ptr;
- X
- X ptr = (COMMPINFO *) Malloc(sizeof(COMMPINFO));
- X ptr->Process = process;
- X ptr->frequency = freq;
- X ptr->quantity = quant;
- X ptr->next = NULL;
- X
- X return(ptr);
- X} /* generate_commp_info */
- X
- X/******************************************************************************
- X * chain_commp_infos() *
- X * *
- X * Chains communication process info 'cattr1' to the end of info 'cattr2'. *
- X * *
- X * Return values: pointer to resulting targetinfo upon success / *
- X * NULL upon error *
- X ******************************************************************************/
- XCOMMPINFO *
- Xchain_commp_infos(cattr1, cattr2)
- XCOMMPINFO *cattr1, *cattr2;
- X{
- X register COMMPINFO *ptr;
- X
- X for(ptr = cattr1; ptr->next; ptr = ptr->next)
- X ;
- X ptr->next = cattr2;
- X return(cattr1);
- X} /* chain_commp_infos */
- X
- X/******************************************************************************
- X * generate_process_attr_info() *
- X * *
- X * Generates and initializes a process attribute info. *
- X * *
- X * Return values: pointer to new element upon success / NULL upon error *
- X ******************************************************************************/
- XPATTRINFO *
- Xgenerate_process_attr_info(type, idlist, number, mode, fsspec, commps)
- Xint type;
- XIDENTLIST *idlist;
- Xfloat number;
- Xint mode;
- XFSSPECINFO *fsspec;
- XCOMMPINFO *commps;
- X{
- X register PATTRINFO *ptr;
- X
- X ptr = (PATTRINFO *) Malloc(sizeof(PATTRINFO));
- X
- X ptr->type = type;
- X switch(type) {
- X case PA_PREFERRED:
- X ptr->info.pref_hosts = idlist;
- X break;
- X case PA_RESTRICTED:
- X ptr->info.rest_hosts = idlist;
- X break;
- X case PA_INTENSITY_INDEX:
- X ptr->info.intensity_index = number;
- X break;
- X case PA_PHYS_MEM:
- X ptr->mode = mode;
- X ptr->info.phys_mem_size = number;
- X break;
- X case PA_VIRT_MEM:
- X ptr->mode = mode;
- X ptr->info.virt_mem_size = number;
- X break;
- X case PA_PERI_DEVICES:
- X ptr->info.peri_dev = idlist;
- X break;
- X case PA_FILESYSTEMS:
- X ptr->info.filesystems = fsspec;
- X break;
- X case PA_COMM_PROCESSES:
- X ptr->info.commps = commps;
- X break;
- X case PA_VECTORIZATION:
- X ptr->mode = mode;
- X break;
- X case PA_PARALLELIZATION:
- X ptr->mode = mode;
- X break;
- X }
- X ptr->next = NULL;
- X
- X return(ptr);
- X} /* generate_process_attr_info */
- X
- X/******************************************************************************
- X * chain_pattr_infos() *
- X * *
- X * Chains process attribute info 'pattr1' to the end of info 'pattr2'. *
- X * *
- X * Return values: pointer to resulting targetinfo upon success / *
- X * NULL upon error *
- X ******************************************************************************/
- XPATTRINFO *
- Xchain_pattr_infos(pattr1, pattr2)
- XPATTRINFO *pattr1, *pattr2;
- X{
- X register PATTRINFO *ptr;
- X
- X for(ptr = pattr1; ptr->next; ptr = ptr->next)
- X ;
- X ptr->next = pattr2;
- X return(pattr1);
- X} /* chain_pattr_infos */
- X
- X/******************************************************************************
- X * enter_process_description() *
- X * *
- X * Enters the process description 'symbol' in the symbol table including all *
- X * informations. *
- X * *
- X * Return values: pointer to entered element upon success / NULL upon error *
- X ******************************************************************************/SYMBTABEL *
- Xenter_process_description(symbol, pattrl)
- XSYMBTABEL *symbol;
- XPATTRINFO *pattrl;
- X{
- X int intensityflag = FALSE;
- X register PATTRINFO *ptr;
- X
- X /* check symbol */
- X if (symbol->type != UNDEFINED) {
- X printf("Error: line %d at \"%s\": redefinition: \"%s\"\n",
- X yylineno, yytext, symbol->name);
- X return(NULL);
- X }
- X
- X symbol->type = S_PROCESS;
- X symbol->info.Process.pref_hosts = NULL;
- X symbol->info.Process.rest_hosts = NULL;
- X symbol->info.Process.peri_dev = NULL;
- X symbol->info.Process.filesystems = NULL;
- X symbol->info.Process.commps = NULL;
- X for(ptr = pattrl; ptr; ptr = ptr->next) {
- X switch(ptr->type) {
- X case PA_PREFERRED:
- X symbol->info.Process.pref_hosts = ptr->info.pref_hosts;
- X break;
- X case PA_RESTRICTED:
- X symbol->info.Process.rest_hosts = ptr->info.rest_hosts;
- X break;
- X case PA_PERI_DEVICES:
- X symbol->info.Process.peri_dev = ptr->info.peri_dev;
- X break;
- X case PA_FILESYSTEMS:
- X symbol->info.Process.filesystems = ptr->info.filesystems;
- X break;
- X case PA_COMM_PROCESSES:
- X symbol->info.Process.commps = ptr->info.commps;
- X break;
- X case PA_INTENSITY_INDEX:
- X symbol->info.Process.intensity_index = ptr->info.intensity_index;
- X intensityflag = 1;
- X break;
- X } /* switch */
- X } /* for(ptr) */
- X symbol->info.Process.others = pattrl;
- X
- X if (!intensityflag) {
- X printf("Error: process specification \"%s\": no intensity index\n",
- X symbol->name);
- X return(NULL);
- X }
- X return(symbol);
- X} /* enter_process_description */
- X
- END_OF_FILE
- if test 10681 -ne `wc -c <'config/symb_program.c'`; then
- echo shar: \"'config/symb_program.c'\" unpacked with wrong size!
- fi
- # end of 'config/symb_program.c'
- fi
- if test -f 'dcc/code_create.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dcc/code_create.c'\"
- else
- echo shar: Extracting \"'dcc/code_create.c'\" \(9101 characters\)
- sed "s/^X//" >'dcc/code_create.c' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * c o d e _ c r e a t e . c *
- X * *
- X * Package : Compiler *
- X * Version : 1.0 *
- X * CreationDate : 04.09.90 *
- X * LastUpDate : 09.03.92 *
- X * *
- X * The functions to generate the process creation routine and the process *
- X * creation code. *
- X * *
- X * Portions Copyright 1990 Franz Distler *
- X * Copyright (C) 1990-1994 by Christoph Pleier *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#include <stdio.h>
- X#include <sys/types.h>
- X#include "config.h"
- X#include "extern.h"
- X#include "functions.h"
- X#include "com_Errno.h"
- X#include "timeout.h"
- X
- X/******************************************************************************
- X * gen_process_creation_routine() *
- X * *
- X * Generates the process creation routine for the process specified by the *
- X * symbol table element 'symbol'. The generated process creation routine is *
- X * called at runtime to create the specified process and pass the arguments. *
- X * *
- X * Return values: OK upon success / ERROR during error handling *
- X ******************************************************************************/
- Xint
- Xgen_process_creation_routine(symbol)
- XSYMBTABEL *symbol;
- X{
- X int i,
- X length;
- X char *piname,
- X *upiname;
- X static char processname[MAXFILENAMELEN+1];
- X SYMBTABEL *params;
- X
- X if (errflag || !symbol) /* error handling! */
- X return(ERROR);
- X#ifdef CODEDEBUG
- X fputs("[code] ***** gen_process_creation_routine():\n", debugfile);
- X fprintf(debugfile, "[code] params: symbol = %d\n", symbol);
- X#endif /* CODEDEBUG /**/
- X piname = symbol->info.process.piname,
- X upiname = symbol->info.process.upiname;
- X strcpy(processname, symbol->info.process.filename);
- X processname[strlen(processname)-2] = '\0';
- X
- X if (infoflag) {
- X printf("%s generating creation routine for process '%s'\n",
- X infoprefix, symbol->name);
- X fflush(stdout);
- X }
- X
- X if (!specflag) {
- X strcpy(creatfilename, filenameprefix);
- X length = MAXFILENAMELEN - strlen(SPECFILEEXT);
- X if (strlen(filenameprefix) <= length)
- X strcat(creatfilename, SPECFILEEXT);
- X else
- X strcpy(&creatfilename[length], SPECFILEEXT);
- X if (!(creatfile = fopen(creatfilename, "w"))) {
- X fprintf(stderr,"Error: impossible to open file for creation routines '%s'\n",
- X creatfilename);
- X exit(EXIT_FOPEN);
- X }
- X fprintf(creatfile, "/* %s */\n\n", creatfilename);
- X fputs("/*\n", creatfile);
- X for(i = 0; *headerstr[i]; ++i)
- X fprintf(creatfile, " * %s\n", headerstr[i]);
- X fputs(" */\n\n", creatfile);
- X fprintf(creatfile, "#include \"%s\"\n", inclfilename);
- X specflag = TRUE;
- X }
- X fprintf(creatfile, "\n/* specific creation routine to create process '%s' */\n",
- X symbol->name);
- X fprintf(creatfile, "PROCESSDESCR\ncreate_process_%s(location", piname);
- X for(params=symbol->info.process.FirstParam; params; params=params->info.varorpar.NextParam) {
- X fprintf(creatfile, ", %s", params->name);
- X }
- X fputs(")\n", creatfile);
- X fputs("char *location;\n", creatfile);
- X for(params = symbol->info.process.FirstParam; params;
- X params = params->info.varorpar.NextParam) {
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer, params->info.varorpar.DataType),
- X fprintf(creatfile, "%s %s;\n", convert_buffer, params->name);
- X }
- X fputs("{\n\tPROCESSDESCR result;\n", creatfile);
- X fputs("\n\t/* create process and get process descriptor */\n", creatfile);
- X fprintf(creatfile, "\tif (_create_process(\"%s\", \"%s\", location, &result))\n",
- X symbol->name, processname);
- X fprintf(creatfile, "\t\t_RuntimeError(\"creating process\");\n");
- X if (symbol->info.process.FirstParam) {
- X fputs("\t/* transmit arguments */\n", creatfile);
- X for (params=symbol->info.process.FirstParam; params; params = params->info.varorpar.NextParam)
- X fprintf(creatfile, "\tdcc_par.%s.%s = %s;\n", piname, params->name,
- X params->name);
- X fprintf(creatfile, "\tif (_send_data");
- X#ifdef HETEROGENEOUS
- X fprintf(creatfile, "_encoded");
- X#endif
- X fprintf(creatfile, "(&_con_port, (char *) &dcc_par.%s, ", piname);
- X#if defined(SINGLE) || defined(HOMOGENEOUS)
- X fprintf(creatfile, "sizeof(%s%s)", upiname, POSTFIXSPECPAR);
- X#else /* HETEROGENEOUS */
- X fprintf(creatfile, "xdr_%s%s", upiname, POSTFIXSPECPAR);
- X#endif
- X fprintf(creatfile, ", %d) < 0) {\n", CPTONPPARTIME);
- X fputs("\t\tif (Errno == ETIMEOUT)\n", creatfile);
- X fputs("\t\t\tErrno = ETCCPTONPPAR;\n", creatfile);
- X fprintf(creatfile, "\t\t_RuntimeError(\"sending arguments\");\n");
- X fputs("\t}\n", creatfile);
- X }
- X fputs("\tif (_close_connection(&_con_port))\n", creatfile);
- X fputs("\t\t_RuntimeError(\"create_process_...()\");\n", creatfile);
- X fputs("\treturn(result);\n", creatfile);
- X fprintf(creatfile, "} /* create_process_%s */\n", piname);
- X return(OK);
- X} /* gen_process_creation_routine */
- X
- X/******************************************************************************
- X * generate_process_creation_code() *
- X * *
- X * Generates the code for creating a particular process. *
- X * *
- X * Return values: pointer to generated code string upon success / *
- X * NULL during error handling *
- X ******************************************************************************/
- Xchar *
- Xgenerate_process_creation_code(symbol, arg, location)
- XSYMBTABEL *symbol;
- XARG_LIST *arg;
- Xchar *location;
- X{
- X int i;
- X char *cmd;
- X ARG_LIST *hptr;
- X SYMBTABEL *params;
- X
- X if (errflag || !symbol) /* error handling! */
- X return(NULL);
- X#ifdef CODEDEBUG
- X fputs("[code] ***** generate_process_creation_code():\n", debugfile);
- X fprintf(debugfile, "[code] params: symbol = %d, arg = %d, location = %s\n",
- X symbol, arg, location);
- X fputs("[code] the arguments are:", debugfile);
- X for(hptr=arg, i=1; hptr; hptr=hptr->next, i++)
- X fprintf(debugfile, "[code] arg %d: %s\n", i, hptr->code);
- X#endif /* CODEDEBUG /**/
- X if (symbol->type != PROCESSDECL) {
- X strcpy(yytext, symbol->name);
- X PRINTERROR("", ENOTSPECIFIED);
- X /* (void) delete_arg_list(arg); */
- X Free(location);
- X return(strmalloc(""));
- X }
- X cmd = strmalloc("create_process_");
- X cmd = Strcatmany(cmd, 3, symbol->info.process.piname, "(", location);
- X for(params=symbol->info.process.FirstParam, hptr=arg; params;
- X params=params->info.varorpar.NextParam, hptr=hptr->next) {
- X if (!hptr) {
- X strcpy(yytext, "");
- X Errno = WPROCESSARGS;
- X Warning("");
- X break;
- X }
- X cmd = Strcatmany(cmd, 2, ", ", hptr->code);
- X }
- X cmd = Strcat(cmd, ")");
- X Free(location);
- X return(cmd);
- X} /* generate_process_creation_code */
- END_OF_FILE
- if test 9101 -ne `wc -c <'dcc/code_create.c'`; then
- echo shar: \"'dcc/code_create.c'\" unpacked with wrong size!
- fi
- # end of 'dcc/code_create.c'
- fi
- if test -f 'dcc/makefile.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dcc/makefile.c'\"
- else
- echo shar: Extracting \"'dcc/makefile.c'\" \(10994 characters\)
- sed "s/^X//" >'dcc/makefile.c' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * m a k e f i l e . c *
- X * *
- X * Package : Compiler *
- X * Version : 1.0 *
- X * CreationDate : 15.08.90 *
- X * LastUpDate : 31.08.91 *
- X * *
- X * The routine to generate the makefile. *
- X * *
- X * Copyright (C) 1990-1994 by Christoph Pleier *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#include <stdio.h>
- X#include <sys/types.h>
- X#ifdef HETEROGENEOUS
- X# include <rpc/rpc.h>
- X#endif
- X#include <string.h>
- X#include "config.h"
- X#include "extern.h"
- X#include "functions.h"
- X#include "ipc.h"
- X#include "dcc.h"
- X
- X/******************************************************************************
- X * build_makefile() *
- X * *
- X * Generates the makefile needed to manage the built files. *
- X * *
- X * Return values: always OK for success *
- X ******************************************************************************/
- Xint
- Xbuild_makefile()
- X{
- X int i, j, flag;
- X char mainstr[MAXFILENAMELEN+1],
- X specstr[MAXFILENAMELEN+1],
- X funcstr[MAXFILENAMELEN+1],
- X#if defined(HETEROGENEOUS) || defined(CHECK_XDR)
- X xdrstr[MAXFILENAMELEN+1],
- X#endif /* HETEROGENEOUS /**/
- X *incdir, *libdir, *cflags, *lflags, *libs, *cb, *cbflags,
- X *hosts, *hp1, *targets, *makec;
- X struct process_list *ptr;
- X struct include_list *inclptr;
- X struct include_path_list *pathptr;
- X struct cpp_def_list *cppdefptr;
- X
- X#ifdef DEBUG
- X fputs("[debg] ***** build_makefile():\n", debugfile);
- X#endif /* DEBUG /**/
- X
- X if (infoflag) {
- X printf("%s building the makefile\n", infoprefix);
- X fflush(stdout);
- X }
- X
- X if (!(makefile = fopen(makefilename, "w"))) {
- X fprintf(stderr, "Error: impossible to open makefile '%s'\n",
- X makefilename);
- X exit(EXIT_FOPEN);
- X }
- X fprintf(makefile, "# %s - Makefile for '%s'\n", makefilename,
- X inputfilename);
- X fputs("#\n", makefile);
- X for(i = 0; *headerstr[i]; ++i)
- X fprintf(makefile, "# %s\n", headerstr[i]);
- X fputs("\n", makefile);
- X
- X makec = (char *) getenv("DCC_MAKE");
- X if (makec == NULL || *makec == '\0')
- X makec = "make";
- X
- X cflags = (char *) getenv("DCC_CFLAGS");
- X if (cflags == NULL || *cflags == '\0')
- X cflags = "";
- X
- X lflags = (char *) getenv("DCC_LFLAGS");
- X if (lflags == NULL || *lflags == '\0')
- X lflags = "";
- X
- X libs = (char *) getenv("DCC_LIBS");
- X if (libs == NULL || *libs == '\0')
- X libs = "";
- X
- X cb = (char *) getenv("DCC_CB");
- X if (cb == NULL || *cb == '\0')
- X cb = "undefined";
- X
- X cbflags = (char *) getenv("DCC_CBFLAGS");
- X if (cbflags == NULL || *cbflags == '\0')
- X cbflags = "";
- X
- X targets = (char *) getenv("DCC_TARGETS");
- X if (targets == NULL || *targets == '\0')
- X#ifdef SINGLE
- X targets = "-target local";
- X#else /* HOMOGENEOUS || HETEROGENEOUS */
- X targets = "-target all";
- X#endif /* SINGLE /**/
- X
- X fprintf(makefile, " MAKE = @%s -f %s\n", makec, makefilename);
- X fprintf(makefile, " ECHO = @echo\n");
- X fprintf(makefile, " TOUCH = @touch\n");
- X fprintf(makefile, " CC = dcinstall\n");
- X fprintf(makefile, " CFLAGS = $(TARGETS) %s", cflags);
- X for(pathptr = first_inclpathname; pathptr; pathptr = pathptr->next)
- X fprintf(makefile, "\\\n -I%s ", pathptr->path);
- X for(cppdefptr = first_cppdef; cppdefptr; cppdefptr = cppdefptr->next)
- X fprintf(makefile, "\\\n -D%s ", cppdefptr->def);
- X if (cflags != NULL && *cflags != 0 && cflagsstr != NULL && *cflagsstr != 0)
- X fprintf(makefile, "\\\n %s %s\n", cflags, cflagsstr);
- X else
- X fprintf(makefile, "\n");
- X fprintf(makefile, " LD = dcinstall\n");
- X fprintf(makefile, " LFLAGS = $(TARGETS) %s %s\n", lflags, lflagsstr);
- X fprintf(makefile, " LIBS = %s %s\n", libs, libsstr);
- X fprintf(makefile, " CB = %s\n", cb);
- X fprintf(makefile, "CBFLAGS = %s\n\n", cbflags);
- X fprintf(makefile, "TARGETS = %s\n\n", targets);
- X
- X if (mainflag) {
- X strcpy(mainstr, outputfilename);
- X mainstr[strlen(mainstr)-2] = '\0';
- X }
- X
- X if (specflag) {
- X strcpy(specstr, creatfilename);
- X specstr[strlen(specstr)-2] = '\0';
- X }
- X
- X#if defined(HETEROGENEOUS) || defined(CHECK_XDR)
- X if (xdrflag) {
- X strcpy(xdrstr, xdrfilename);
- X xdrstr[strlen(xdrstr)-2] = '\0';
- X }
- X#endif /* HETEROGENEOUS /**/
- X
- X if (funcflag) {
- X strcpy(funcstr, funcfilename);
- X funcstr[strlen(funcstr)-2] = '\0';
- X }
- X
- X if (mainflag)
- X fprintf(makefile, "BIN =\t%s ", filenameprefix);
- X else
- X fprintf(makefile, "BIN =");
- X for(ptr = first_processname; ptr; ptr = ptr->next) {
- X ptr->name[strlen(ptr->name)-2] = '\0';
- X fprintf(makefile, "\\\n\t%s ", ptr->name);
- X }
- X
- X fprintf(makefile, "\n\nFILES = %s.h ", filenameprefix);
- X if (mainflag)
- X fprintf(makefile, "\\\n %s ", outputfilename);
- X if (specflag)
- X fprintf(makefile, "\\\n %s ", creatfilename);
- X#if defined(HETEROGENEOUS) || defined(CHECK_XDR)
- X if (xdrflag)
- X fprintf(makefile, "\\\n %s ", xdrfilename);
- X#endif /* HETEROGENEOUS /**/
- X if (funcflag)
- X fprintf(makefile, "\\\n %s ", funcfilename);
- X for(ptr = first_processname; ptr; ptr = ptr->next)
- X fprintf(makefile, "\\\n %s.c ", ptr->name);
- X if (mainflag)
- X fprintf(makefile, "\\\n %s.c", mainstr);
- X
- X fputs("\n\nOBJS =\t", makefile);
- X if (specflag)
- X fprintf(makefile, "%s.o", specstr);
- X#ifdef HETEROGENEOUS
- X if (xdrflag)
- X fprintf(makefile, " %s.o", xdrstr);
- X#endif /* HETEROGENEOUS /**/
- X if (funcflag)
- X fprintf(makefile, " %s.o", funcstr);
- X
- X fputs("\n\n.c.o:\n\t$(ECHO) \"***** Compiling $<\"\n", makefile);
- X fputs("\t$(CC) $(CFLAGS) -c $<\n", makefile);
- X fputs("\t$(TOUCH) $@\n", makefile);
- X
- X fputs("\nall:\n\t$(MAKE) $(BIN)\n", makefile);
- X fprintf(makefile, "\t$(ECHO) \"\"\n");
- X fprintf(makefile, "\t$(ECHO) all stuff done for '%s'!\n\n",inputfilename);
- X
- X if (mainflag) {
- X fprintf(makefile, "%s: incl $(OBJS) %s.o\n", filenameprefix, mainstr);
- X fprintf(makefile, "\t$(ECHO) \"***** Building $@\"\n");
- X fprintf(makefile, "\t$(LD) -o %s $(LFLAGS) $(OBJS) %s.o $(LIBS)\n",
- X filenameprefix, mainstr);
- X fprintf(makefile, "\t$(TOUCH) $@\n");
- X }
- X
- X for(ptr = first_processname; ptr; ptr = ptr->next) {
- X fprintf(makefile, "\n%s: incl $(OBJS) %s.o\n", ptr->name, ptr->name);
- X fputs("\t$(ECHO) \"***** Building $@\"\n", makefile);
- X fprintf(makefile, "\t$(LD) -o %s $(LFLAGS) $(OBJS) %s.o $(LIBS)\n",
- X ptr->name, ptr->name);
- X fprintf(makefile, "\t$(TOUCH) $@\n");
- X }
- X
- X fprintf(makefile, "\nincl: %s.h\n", filenameprefix);
- X fprintf(makefile, "\t$(CC) $(CFLAGS) %s.h\n", filenameprefix);
- X fprintf(makefile, "\t$(TOUCH) $@\n\n");
- X
- X if (specflag)
- X fprintf(makefile, "%s.o: %s.h %s.c\n", specstr, filenameprefix, specstr);
- X
- X#ifdef HETEROGENEOUS
- X if (xdrflag)
- X fprintf(makefile, "%s.o: %s.h %s.c\n", xdrstr, filenameprefix, xdrstr);
- X#endif /* HETEROGENEOUS /**/
- X
- X if (funcflag)
- X fprintf(makefile, "%s.o: %s.h %s.c\n", funcstr, filenameprefix, funcstr);
- X
- X for(ptr = first_processname; ptr; ptr = ptr->next) {
- X fprintf(makefile, "%s.o: %s.h %s.c\n", ptr->name, filenameprefix, ptr->name);
- X }
- X
- X if (mainflag)
- X fprintf(makefile, "%s.o: %s.h %s.c\n", mainstr, filenameprefix, mainstr);
- X
- X fputs("\nnew:\n", makefile);
- X fprintf(makefile, "\ttouch %s.h\n", filenameprefix);
- X fprintf(makefile, "\t$(MAKE) all\n");
- X
- X fputs("\nbeautify:\n", makefile);
- X fprintf(makefile, "\t$(ECHO) \"beautifying the generated files of '%s'\"\n",
- X inputfilename);
- X fputs("\t@for name in $(FILES); \\\n", makefile);
- X fputs("\tdo \\\n", makefile);
- X#ifdef CONVEX
- X /* use indent to beautify files */
- X fputs("\t $(CB) $(CBFLAGS) $${name}; \\\n",
- X makefile);
- X#else
- X /* use cb to beautify files */
- X fputs("\t mv $${name} cb.tmp; $(CB) $(CBFLAGS) cb.tmp > $${name}; \\\n",
- X makefile);
- X#endif
- X fputs("\tdone\n", makefile);
- X#ifndef CONVEX
- X fputs("\t-@\\rm cb.tmp\n", makefile);
- X#endif
- X fputs("\t$(ECHO) done!\n", makefile);
- X
- X fputs("\nclean:\n", makefile);
- X fprintf(makefile, "\t-@\\rm -f %s.h \\\n", filenameprefix);
- X if (specflag)
- X fprintf(makefile, "\t %s \\\n", creatfilename);
- X#if defined(HETEROGENEOUS) || defined(CHECK_XDR)
- X if (xdrflag)
- X fprintf(makefile, "\t %s \\\n", xdrfilename);
- X#endif /* HETEROGENEOUS /**/
- X if (funcflag)
- X fprintf(makefile, "\t %s \\\n", funcfilename);
- X if (mainflag) {
- X fprintf(makefile, "\t %s \\\n", outputfilename);
- X fprintf(makefile, "\t %s ", filenameprefix);
- X }
- X for(ptr = first_processname; ptr; ptr = ptr->next) {
- X fprintf(makefile, "\\\n\t %s.c ", ptr->name, ptr->name);
- X fprintf(makefile, "\\\n\t %s ", ptr->name, ptr->name);
- X }
- X fprintf(makefile, "\\\n\t %s \\\n", makefilename);
- X fputs("\t *.o incl\n", makefile);
- X
- X return(OK);
- X} /* build_makefile */
- END_OF_FILE
- if test 10994 -ne `wc -c <'dcc/makefile.c'`; then
- echo shar: \"'dcc/makefile.c'\" unpacked with wrong size!
- fi
- # end of 'dcc/makefile.c'
- fi
- if test -f 'dcc/symb_debug.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'dcc/symb_debug.c'\"
- else
- echo shar: Extracting \"'dcc/symb_debug.c'\" \(9368 characters\)
- sed "s/^X//" >'dcc/symb_debug.c' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * s y m b _ d e b u g . c *
- X * *
- X * Package : Compiler *
- X * Version : 1.0 *
- X * CreationDate : 13.09.91 *
- X * LastUpDate : 13.09.91 *
- X * *
- X * Special routines for symbol table debugging purpose only. *
- X * *
- X * Copyright (C) 1991-1994 by Christoph Pleier *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#include <stdio.h>
- X#include <ctype.h>
- X#include "config.h"
- X#include "extern.h"
- X#include "functions.h"
- X#include "y.tab.h"
- X#include "com_Errno.h"
- X
- X#ifdef DEBUGFLAG
- X
- X/******************************************************************************
- X * display_symbtab_entry() OK *
- X * *
- X * Displays the specific information of the symbol table element pointed to *
- X * by 'ptr'. *
- X * *
- X * Return values: none! *
- X ******************************************************************************/
- Xint
- Xdisplay_symbtab_entry(ptr)
- XSYMBTABEL *ptr;
- X{
- X int i, j;
- X SYMBTABEL *hptr, *hptr2;
- X
- X if (!ptr) /* error handling! */
- X return(ERROR);
- X fprintf(debugfile, "[symb] ***** display_symbtab_entry(): ptr = %d\n",
- X ptr);
- X fprintf(debugfile, "[symb] name = %s, blknum = %d\n",
- X ptr->name, ptr->blknum);
- X fprintf(debugfile, "[symb] WasInSysIncl = %s, type = ",
- X (ptr->WasInSysIncl) ? "TRUE" : "FALSE");
- X switch(ptr->type) {
- X case UDEC:
- X fputs("UDEC\n", debugfile);
- X break;
- X case FUNCTIONDEF:
- X fputs("FUNCTIONDEF\n", debugfile);
- X break;
- X case PROCESSDECL:
- X fprintf(debugfile, "PROCESSDECL\n[symb] IsSpec = %s\n",
- X (ptr->info.process.IsSpec) ? "TRUE" : "FALSE");
- X if (hptr = ptr->info.process.FirstParam) {
- X fputs("[symb] parameter list:\n", debugfile);
- X for(i=1; hptr; hptr = hptr->info.varorpar.NextParam, i++) {
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer,
- X hptr->info.varorpar.DataType);
- X fprintf(debugfile, "[symb] param %d: name = %s, type = %s\n",
- X i, hptr->name, convert_buffer);
- X }
- X } else
- X fputs("[symb] no process parameters declared!\n", debugfile);
- X if (hptr = ptr->info.process.FirstTrans) {
- X fputs("[symb] transaction list:\n", debugfile);
- X for(i=1; hptr; hptr = hptr->info.trans.NextTrans, i++) {
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer,
- X hptr->info.trans.ReturnType);
- X fprintf(debugfile, "[symb] trans %d: name = %s, ReturnType = %s\n",
- X i, hptr->name, convert_buffer);
- X if (hptr2 = hptr->info.trans.FirstParam) {
- X fputs("[symb] parameter list:\n", debugfile);
- X for(j=1; hptr2; hptr2=hptr2->info.varorpar.NextParam, j++) {
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer,
- X hptr2->info.varorpar.DataType);
- X fprintf(debugfile, "[symb] param %d: name = %s, type = %s\n",
- X j, hptr2->name, convert_buffer);
- X }
- X } else
- X fputs("[symb] no transaction parameters declared!\n", debugfile);
- X } /* for */
- X } else
- X fputs("[symb] no transactions declared!\n", debugfile);
- X break;
- X case VARORPAR:
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer, ptr->info.varorpar.DataType);
- X fprintf(debugfile, "VARORPAR\n[symb] Type = %s, NextParam = %d\n",
- X convert_buffer, ptr->info.varorpar.NextParam);
- X break;
- X case TRANSACTION:
- X fprintf(debugfile, "TRANSACTION\n[symb] IsDecl = %s\n",
- X (ptr->info.trans.IsDecl) ? "TRUE" : "FALSE");
- X fprintf(debugfile, "[symb] ptiname = %s, uptiname = %s\n",
- X ptr->info.trans.ptiname, ptr->info.trans.uptiname);
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer, ptr->info.trans.ReturnType);
- X fprintf(debugfile, "[symb] ReturnType = %s, Process = %d(\"%s\")\n",
- X convert_buffer, ptr->info.trans.Process, (ptr->info.trans.Process)->name);
- X if (hptr = ptr->info.trans.FirstParam) {
- X fputs("[symb] parameter list:\n", debugfile);
- X for(j=1; hptr; hptr=hptr->info.varorpar.NextParam, j++) {
- X *convert_buffer = 0;
- X convert_buffer = convert_ds_to_string(convert_buffer, hptr->info.varorpar.DataType);
- X fprintf(debugfile, "[symb] param %d: name = %s, type = %s\n",
- X j, hptr->name, convert_buffer);
- X }
- X } else
- X fputs("[symb] no transaction parameters declared!\n", debugfile);
- X break;
- X case PROCESSVAR:
- X fputs("PROCESSVAR\n", debugfile);
- X break;
- X case TYPEDEFNAME:
- X fputs("TYPEDEFNAME\n", debugfile);
- X fprintf(debugfile, "[symb] IsPointer = %s, BuildXDRRoutine = %s\n",
- X (ptr->info.typedefname.IsPointer) ? "TRUE" : "FALSE",
- X (ptr->info.typedefname.BuildXDRRoutine) ? "TRUE" : "FALSE");
- X break;
- X case STRUCTDECL:
- X fputs("STRUCTDECL\n", debugfile);
- X fprintf(debugfile, "[symb] IsStruct = %s, BuildXDRRoutine = %s\n",
- X (ptr->info.structdecl.IsStruct) ? "TRUE" : "FALSE",
- X (ptr->info.structdecl.BuildXDRRoutine) ? "TRUE" : "FALSE");
- X break;
- X default:
- X fputs("UNKNOWN!\n", debugfile);
- X } /* switch */
- X} /* display_symbtab_entry */
- X
- X/******************************************************************************
- X * display_symbol_table() OK *
- X * *
- X * Displays the symbol table with all entries. *
- X * *
- X * Return values: none! *
- X ******************************************************************************/
- Xint
- Xdisplay_symbol_table()
- X{
- X register int i;
- X register SYMBTABEL *ptr;
- X
- X fputs("[symb] ***** display_symbol_table():\n", debugfile);
- X for(i = blknum; i >= 0; i--) {
- X fprintf(debugfile, "[symb] ---------- symbol table - block depth %2d ----------\n", i);
- X for(ptr = symbtab.PstTab[i]; ptr; ptr = ptr->PstNext)
- X display_symbtab_entry(ptr);
- X }
- X fputs("[symb] ---------------------------------------------------\n", debugfile);
- X} /* display_symbol_table */
- X
- X/******************************************************************************
- X * display_struct_type_list OK *
- X * *
- X * Displays the list containing the structure and type definitions. *
- X * *
- X * Return values: none! *
- X ******************************************************************************/
- Xint
- Xdisplay_struct_type_list()
- X{
- X register int i;
- X struct struct_type_list *ptr;
- X SYMBTABEL *symbol;
- X
- X fputs("[symb] ***** display_struct_type_list():\n", debugfile);
- X for(ptr = first_structtype, i = 1; ptr; ptr = ptr->next, i++) {
- X symbol = ptr->symbol;
- X fprintf(debugfile, "[symb] [%d] ", i);
- X switch(symbol->type) {
- X case TYPEDEFNAME:
- X fprintf(debugfile, "typedef ");
- X break;
- X case STRUCTDECL:
- X fprintf(debugfile, "struct ");
- X break;
- X default:
- X fprintf(debugfile, "illegal entry (type = %d)", symbol->type);
- X } /* switch */
- X fprintf(debugfile, " \"%s\"\n", symbol->name);
- X } /* for(ptr) */
- X} /* display_struct_type_list */
- X
- X#endif /* DEBUGFLAG /**/
- END_OF_FILE
- if test 9368 -ne `wc -c <'dcc/symb_debug.c'`; then
- echo shar: \"'dcc/symb_debug.c'\" unpacked with wrong size!
- fi
- # end of 'dcc/symb_debug.c'
- fi
- if test -f 'examples/nullst/nullst.dc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/nullst/nullst.dc'\"
- else
- echo shar: Extracting \"'examples/nullst/nullst.dc'\" \(10721 characters\)
- sed "s/^X//" >'examples/nullst/nullst.dc' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * n u l l s t . d c *
- X * *
- X * Version 1.0 CreationDate: 29.08.90 *
- X * LastUpDate: 18.10.90 *
- X * *
- X *Berechnung der Nullstellen einer Funktion mittels der Halbierungsmethode.*
- X * *
- X * Copyright (C) 1990 by Franz Distler and Christoph Pleier. *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * Dieses Programm berechnet die Nullstellen einer Funktion in einem best.
- X * Intervall mittels der Halbierungsmethode.
- X * Das Gesamtintervall wird in Teilintervalle untergliedert. Diese Teil-
- X * intervalle werden auf mehreren Rechnern parallel berechnet.
- X * Die zu untersuchende Funktion und die Genauigkeit der Berechnung werden
- X * zur Uebersetzungszeit festgelegt.
- X * Die Intervallgrenzen, die Schrittweite der Startnaeherung sowie die An-
- X * zahl der Teilintervalle werden zur Laufzeit eingegeben.
- X */
- X
- X#include <stdio.h>
- X#undef stdin
- X#undef stdout
- X#undef stderr
- X#include <math.h>
- X
- X/* Die Definition von DEMO konfiguriert eine Demonstrationsumgebung */
- X/* #define DEMO /**/
- X
- X/* Die Definition von DEBUG bewirkt die zusaetzlich Ausgabe von Meldungen */
- X/* #define DEBUG /**/
- X
- X/* maximale Anzahl von Berechnungsprozessen */
- X#define MAXPROCESSANZ 100
- X
- X/* maximale Anzahl von Nullstellen pro Prozess */
- X#define MAXENTRY 10000
- X
- X/* Genauigkeit der Nullstellenbestimmung: Abbruchkriterium. */
- X#define LIMIT 1.0E-10 /* for HP 9000/720 */
- X
- X/* die zu untersuchende Funktion als Zeichenkette */
- X#define FKTSTR "sin(1/x)"
- X
- X#ifdef DEBUG
- X# define DEBUGOUT(msg) {printf("%s: %s\n", _processprefix, msg); \
- X fflush(stdout);}
- X# define DEBUGPRINT(x) {printf x; \
- X fflush(stdout);}
- X#else
- X# define DEBUGOUT(msg) /* nothing */
- X# define DEBUGPRINT(x) /* nothing */
- X#endif /* DEBUG /**/
- X
- X/* In dieser Struktur werden die Ergebnisse gesammelt und an das
- X * Hauptprogramm ueber die Transaktion 'ReturnResult' uebergeben.
- X */
- Xstruct nullst {
- X int num;
- X double x[MAXENTRY];
- X};
- X
- X/****************************************************************************
- X * Name : f *
- X * Art : Funktionsdefinition *
- X * Returntyp : double *
- X * Parameter : double x *
- X * Beschreibung : Vereinbarung der zu untersuchenden Funktion *
- X ****************************************************************************/
- Xdouble f(x)
- Xdouble x;
- X{
- X#ifdef DEMO
- X return( (x == 0) ? 1 : sin(1/x) );
- X#else
- X return( (x == 0) ? 1 : sin(1/x) );
- X#endif /* DEMO /**/
- X} /* f */
- X
- X/****************************************************************************
- X * Name : get_it *
- X * Art : Funktionsdefinition *
- X * Returntyp : double *
- X * Parameter : double xl, double xr *
- X * Beschreibung : Bestimmung der Nullstelle im Intervall [xl,xr]. *
- X ****************************************************************************/
- Xdouble get_it(xl, xr)
- Xdouble xl, xr;
- X{
- X double xn;
- X
- X DEBUGPRINT(("%s get_it(%lf, %lf):\n", _processprefix, xl, xr));
- X while(xr - xl > LIMIT) {
- X xn = xl + (xr - xl) / 2;
- X if (f(xl)*f(xn) <= 0)
- X xr = xn;
- X else
- X xl = xn;
- X }
- X DEBUGPRINT(("%s Result = %lf\n", _processprefix, xn));
- X return(xn);
- X} /* get_it */
- X
- X/****************************************************************************
- X * Name : DisplayHelpMessage *
- X * Art : Funktionsdefinition *
- X * Returntyp : int *
- X * Parameter : keine *
- X * Beschreibung : Ausgabe einer kurzen Programmbeschreibung. *
- X ****************************************************************************/
- Xint DisplayHelpMessage()
- X{
- X printf("Dieses Programm bestimmt zu einer Funktion die Nullstellen mittels der\n");
- X printf("Halbierungsmethode. Die Funktion ist vor der Uebersetzung des Programmes\n");
- X printf("im Quelltext anzugeben. Zur Laufzeit wird das zu untersuchende Intervall\n");
- X printf("und die Schrittweite der Startnaeherung eingegeben und anschliessend die\n");
- X printf("Nullstellen bestimmt.\n\n");
- X} /* DisplayHelpMessage */
- X
- X/****************************************************************************
- X * Name : Nullstellen *
- X * Art : Prozesspezifikation *
- X * Returntyp : keiner *
- X * Parameter : double ug, double og, double step *
- X * Beschreibung : Spezifikation des Prozesses und seiner Transaktionen. *
- X ****************************************************************************/
- Xprocess spec Nullstellen(double ug, double og, double step)
- X{
- X trans struct nullst ReturnResult();
- X}
- X
- X/****************************************************************************
- X * Name : Nullstellen *
- X * Art : Prozessdefinition *
- X * Returntyp : keiner *
- X * Parameter : ug, og, step *
- X * Beschreibung : Definition des Prozessrumpfes sowie des accept - Rumpfes *
- X * der Transaktion. *
- X ****************************************************************************/
- Xprocess body Nullstellen(ug, og, step)
- X{
- X int count = 0;
- X double xl, xr;
- X struct nullst result;
- X
- X printf("%s Berechne Nullstellen im Intervall [%f,%f]...\n",
- X _processprefix, ug, og);
- X fflush(stdout);
- X
- X /*
- X * Berechne die Nullstellen im Intervall [ug,og]
- X */
- X
- X xl = ug;
- X xr = xl + step;
- X while(xl <= og) {
- X if (f(xl)*f(xr) <= 0) {
- X result.x[count] = get_it(xl, xr);
- X xr = result.x[count++] + LIMIT;
- X if (count >= MAXENTRY) {
- X printf("%s Fehler: weitere Nullstellen nicht speicherbar\n",
- X _processprefix);
- X }
- X }
- X xl = xr;
- X xr += step;
- X }
- X result.num = count;
- X
- X printf("%s fertig!\n", _processprefix);
- X fflush(stdout);
- X
- X /*
- X * Warte auf Abholen der Ergebnisse und sende sie zurueck
- X */
- X
- X DEBUGOUT("accepting ReturnResult()");
- X accept ReturnResult() {
- X treturn(result);
- X }
- X
- X printf("%s terminiere!\n", _processprefix);
- X fflush(stdout);
- X /* Prozesse sollten mit exit() beendet werden!!! */
- X exit(0);
- X} /* process body Nullstellen */
- X
- X/****************************************************************************
- X * Name : main *
- X * Art : Funktionsdefinition *
- X * Returntyp : int *
- X * Parameter : keine *
- X * Beschreibung : Definition der Funktion main, die das Hauptprogramm bildet*
- X ****************************************************************************/
- Xmain(argc,argv)
- X{
- X int i, j, ranz, nanz;
- X double ug, og, step, xl, xr, d;
- X struct nullst erg;
- X process Nullstellen N[MAXPROCESSANZ];
- X
- X printf("Parallele Nullstellenbestimmung nach der Halbierungmethode\n");
- X printf("Realisiert in Distributed C von Christoph Pleier\n\n");
- X
- X if (argc > 1) {
- X DisplayHelpMessage();
- X exit(-1);
- X }
- X
- X#ifdef DEMO
- X printf("Demonstrationsmodus aktiviert\n\n");
- X printf("Zu untersuchende Funktion f(x) = sin(1/x)\n");
- X printf("Zu untersuchendes Intervall = [%f,%f]\n",
- X ug = -1.0, og = 1.0);
- X printf("Schrittweite bei der Startnaeherung = %.8\n",
- X step = 1E-07);
- X#else
- X printf("Funktion: f(x) = %s\n", FKTSTR);
- X printf("Intervall:\n");
- X printf(" Untergrenze = ");
- X scanf("%lf", &ug);
- X printf(" Obergrenze = ");
- X scanf("%lf", &og);
- X printf("Schrittweite bei der Startnaeherung = ");
- X scanf("%lf", &step);
- X#endif /* DEMO /**/
- X
- X printf("Wieviele Einzelprozesse sollen gestartet werden (max. %d)? ",
- X MAXPROCESSANZ);
- X do {
- X scanf("%d", &ranz);
- X } while(ranz < 1 || ranz > MAXPROCESSANZ);
- X
- X /*
- X * Verteile Berechnungen auf die einzelnen Rechner
- X * waehle Zielrechner entsprechend Standard-Konfigurationsdatei
- X */
- X
- X d = (og - ug) / ranz;
- X
- X for(i = 1; i < ranz; i++) {
- X printf("Starte Prozesse...\n");
- X DEBUGPRINT(("%s Starte Prozess %d\n", _processprefix, i));
- X DEBUGPRINT(("%s Intervall: [%f,%f], Schrittweite: %f\"\n",
- X _processprefix, ug, ug+d, step));
- X N[i] = create Nullstellen(ug, ug+d, step);
- X ug += d + LIMIT;
- X }
- X DEBUGPRINT(("%s Starte Prozess %d\n", _processprefix, i));
- X DEBUGPRINT(("%s Intervall: [%f,%f], Schrittweite: %f\"\n",
- X _processprefix, ug, og, step));
- X N[i] = create Nullstellen(ug, og, step);
- X
- X /*
- X * Hole Ergebnisse ab, gib sie aus und beende den Hauptprozess
- X */
- X
- X DEBUGOUT("Warte auf Ergebnisse");
- X nanz = 0;
- X for(i = 1; i <= ranz; i++) {
- X erg = N[i]@ReturnResult();
- X nanz += erg.num;
- X for(j = 0; j < erg.num && erg.x[j] < og; ++j) {
- X printf("Nullstelle bei x = %+10.20f, f(x) = %+.10f\n",
- X erg.x[j], f(erg.x[j]));
- X }
- X }
- X
- X printf("Anzahl der Nullstellen im Intervall [%f,%f] : %d\n",
- X ug, og, nanz);
- X
- X /* exit() sollte immer am Endpunkten von main bzw. von Prozesses
- X * stehen, damit der Verwaltungsprozess bei Termination benach-
- X * richtigt wird!
- X */
- X exit(0);
- X
- X} /* main */
- END_OF_FILE
- if test 10721 -ne `wc -c <'examples/nullst/nullst.dc'`; then
- echo shar: \"'examples/nullst/nullst.dc'\" unpacked with wrong size!
- fi
- # end of 'examples/nullst/nullst.dc'
- fi
- if test -f 'examples/test/creation.dc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'examples/test/creation.dc'\"
- else
- echo shar: Extracting \"'examples/test/creation.dc'\" \(9266 characters\)
- sed "s/^X//" >'examples/test/creation.dc' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * c r e a t i o n . d c *
- X * *
- X * Version 1.0 CreationDate: 20.09.90 *
- X * LastUpDate: 22.10.90 *
- X * *
- X * Special program to test the process creation. *
- X * *
- X * Copyright (C) 1990-1993 by Franz Distler and Christoph Pleier. *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/* define ONE of the following */
- X/* #define iPSC /* for Intel Hypercube */
- X/* #define XENIX /* for Xenix System V */
- X#define BSD /* for BSD or compatibles */
- X
- X/****************************************************************************
- X * name : Message *
- X * type : function definition *
- X * returntype : int *
- X * parameters : char * action *
- X * description : This function displays the message action with an prefix *
- X * specifying the calling process. *
- X ****************************************************************************/
- Xint Message(action)
- Xchar *action;
- X{
- X#ifdef iPSC
- X printf("%-15s | %-8ld | %-8ld | %-30s\n", _processname, mynode(),
- X _mypid(), action);
- X#else
- X printf("%-15s | %-15s | %-10d | %-30s\n", _processname,
- X# ifdef XENIX
- X "local",
- X# else
- X _own_port.hostname,
- X# endif /* XENIX /**/
- X getpid(), action);
- X#endif /* iPSC /**/
- X fflush(stdout);
- X} /* Message */
- X
- X/****************************************************************************
- X * name : P1 *
- X * type : process specification *
- X * returntype : none *
- X * parameters : none *
- X * description : Specification of the process P1. *
- X ****************************************************************************/
- Xprocess spec P1();
- X
- X/****************************************************************************
- X * name : P2 *
- X * type : process specification *
- X * returntype : none *
- X * parameters : struct P2_par par *
- X * description : Specification of the process P1. *
- X ****************************************************************************/
- Xprocess spec P2(int id);
- X
- X/****************************************************************************
- X * name : P3 *
- X * type : process specification *
- X * returntype : none *
- X * parameters : none *
- X * description : Specification of the process P3. *
- X ****************************************************************************/
- Xprocess spec P3();
- X
- X/****************************************************************************
- X * name : P4 *
- X * type : process specification *
- X * returntype : none *
- X * parameters : double x, double y *
- X * description : Specification of the process P4. *
- X ****************************************************************************/
- Xprocess spec P4(double x, double y);
- X
- X/****************************************************************************
- X * name : P1 *
- X * type : process definition *
- X * returntype : none *
- X * parameters : none *
- X * description : Definition of the process P1. *
- X ****************************************************************************/
- Xprocess body P1()
- X{
- X process P2 p;
- X
- X Message("RUNNING");
- X Message("STARTING P2");
- X p = create P2(1);
- X sleep(10);
- X Message("TERMINATING");
- X exit(0);
- X} /* process body P1 */
- X
- X/****************************************************************************
- X * name : P2 *
- X * type : process definition *
- X * returntype : none *
- X * parameters : none *
- X * description : Definition of the process P2. *
- X ****************************************************************************/
- Xprocess body P2(id)
- X{
- X process P2 p2;
- X process P3 p3;
- X
- X Message("RUNNING");
- X if (id <= 3) {
- X Message("STARTING P2");
- X p2 = create P2(id + 1);
- X } else {
- X Message("STARTING P3");
- X p3 = create P3();
- X }
- X sleep(5);
- X Message("TERMINATING");
- X exit(0);
- X} /* process body P2 */
- X
- X/****************************************************************************
- X * name : P3 *
- X * type : process definition *
- X * returntype : none *
- X * parameters : none *
- X * description : Definition of the process P3. *
- X ****************************************************************************/
- Xprocess body P3()
- X{
- X process P4 p;
- X
- X Message("RUNNING");
- X Message("STARTING P4");
- X p = create P4(1.0, 1.1);
- X sleep(8);
- X Message("TERMINATING");
- X exit(0);
- X} /* process body P3 */
- X
- X/****************************************************************************
- X * name : P4 *
- X * type : process definition *
- X * returntype : none *
- X * parameters : none *
- X * description : Definition of the process P4. *
- X ****************************************************************************/
- Xprocess body P4()
- X{
- X Message("RUNNING");
- X sleep(10);
- X Message("TERMINATING");
- X exit(0);
- X} /* process body P4 */
- X
- X/****************************************************************************
- X * name : main *
- X * type : function definition *
- X * returntype : int *
- X * parameters : none *
- X * description : Definition of the main function building the main program.*
- X ****************************************************************************/
- Xmain()
- X{
- X process P1 p1;
- X process P4 p4;
- X
- X puts("This program tests the process creation facilities of the");
- X puts("distributed C package.");
- X puts("The following processes will be created:");
- X puts(" 1 x P1, 4 x P2, 1 x P3, 2 x P4\n");
- X#ifdef iPSC
- X printf("%-15s | %-8s | %-8s | %-30s\n", "PROCESS", "NODE", "PID", "ACTION");
- X#else
- X printf("%-15s | %-15s | %-10s | %-30s\n", "PROCESS", "HOST", "PID", "ACTION");
- X#endif /* iPSC /**/
- X puts("----------------|-----------------|------------|------------------------------");
- X Message("STARTING P1");
- X p1 = create P1();
- X Message("STARTING P4");
- X p4 = create P4(2.1, 3.2);
- X Message("TERMINATING");
- X exit(0);
- X} /* main */
- END_OF_FILE
- if test 9266 -ne `wc -c <'examples/test/creation.dc'`; then
- echo shar: \"'examples/test/creation.dc'\" unpacked with wrong size!
- fi
- # end of 'examples/test/creation.dc'
- fi
- if test -f 'include/dcc.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'include/dcc.h'\"
- else
- echo shar: Extracting \"'include/dcc.h'\" \(10529 characters\)
- sed "s/^X//" >'include/dcc.h' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * d c c . h *
- X * *
- X * Package : Include files *
- X * Version : 1.0 *
- X * CreationDate : 14.08.90 *
- X * LastUpDate : 06.12.93 *
- X * *
- X * Special definitions and declarations mainly used at runtime. *
- X * *
- X * Portions Copyright 1990 Franz Distler *
- X * Copyright (C) 1990-1994 by Christoph Pleier *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#ifndef __dcc_h
- X#define __dcc_h
- X
- X#if !defined(FILE) && !defined(RPC_XDR)
- X# include <stdio.h>
- X#endif
- X#include "ipc.h"
- X
- X/* maximal length of */
- X#define MAXPATHNAMELEN 256 /* a process pathname */
- X#define MAXFILENAMELEN 14 /* a process filename */
- X#ifndef MAXHOSTNAMELEN
- X# define MAXHOSTNAMELEN 256 /* a hostname */
- X#endif
- X
- X/* connection types */
- X#define CREATION_CONNECTION 1
- X#define TRANSACTION_CONNECTION 2
- X#define ACCEPT_CONNECTION 3
- X#define ABORT_CONNECTION 4
- X
- X/* constants for the transaction call protocoll */
- X#define TRANS_ACCEPT 5 /* transaction accepted */
- X#define TRANS_DENIED 6 /* transaction denied */
- X
- X/* transaction calling modes */
- X#define CALL 7 /* call process as well */
- X#define DONTCALL 8 /* don't call process */
- X
- X/* #ifdef iPSC */
- X/* where to create the administration process */
- X# define ADMIN_NODE 1L
- X# define ADMIN_PID 1L
- X/* #endif /* iPSC /**/
- X
- X/* constants specifying administration process' services */
- X#define NOTIFY_START 0
- X#define NOTIFY_END 1
- X#define NOTIFY_ERROR 2
- X#define NOTIFY_ACCORTER_ON 3
- X#define NOTIFY_ACCORTER_OFF 4
- X#define NOTIFY_GETLOCATION 5
- X
- X/* the type of a process descriptor */
- Xstruct PROCESSDESCR {
- X char processname[MAXPATHNAMELEN]; /* process name */
- X long pid; /* process id */
- X PORTDESCR port; /* process port */
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct PROCESSDESCR PROCESSDESCR;
- X#endif /* !RPC_XDR /**/
- X
- X/* the type of a request sent to the administration process */
- Xstruct ADMINREQUEST {
- X int request_type; /* the request type */
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct ADMINREQUEST ADMINREQUEST;
- X#endif /* !RPC_XDR /**/
- X
- X/* the type used for sending the configfilename to the administration process */
- Xstruct ADMINCFGINFO {
- X char filename[MAXFILENAMELEN];
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct ADMINCFGINFO ADMINCFGINFO;
- X#endif /* !RPC_XDR /**/
- X
- X/* the type used for getting location info from the administration process */
- Xstruct ADMINLOCINFO {
- X char processname[80]; /* name of process */
- X char processfilename[MAXFILENAMELEN]; /* corresponding file name */
- X char creator_location[MAXHOSTNAMELEN]; /* location of creator process */
- X char hostname[MAXHOSTNAMELEN]; /* target host name */
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct ADMINLOCINFO ADMINLOCINFO;
- X#endif /* !RPC_XDR /**/
- X
- X#ifdef iPSC
- X/* port informations of creator and administration process */
- Xtypedef struct {
- X PORTDESCR creator_port;
- X PORTDESCR admin_port;
- X} PORTSDATA;
- X#endif
- X
- X/* specific informations of a process */
- Xstruct PROCESSDATA {
- X char processname[MAXPATHNAMELEN]; /* process name */
- X long pid; /* process pid */
- X PORTDESCR port; /* process port */
- X int error; /* error flag */
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct PROCESSDATA PROCESSDATA;
- X#endif /* !RPC_XDR /**/
- X
- X/* specific informations of a process
- X * NOTE: request size mus be greater than MAXIDLEN of config.h!
- X */
- Xstruct TRANSDATA {
- X char request[40]; /* transaction request */
- X int reply; /* transaction reply */
- X};
- X
- X#ifndef RPC_XDR
- Xtypedef struct TRANSDATA TRANSDATA;
- X#endif /* !RPC_XDR /**/
- X
- X#ifndef RPC_XDR
- X
- X/* macro to determine the maximum of x and y */
- X#define MAX(x,y) ((x >= y) ? x : y)
- X
- X#define XDRRESIZE(s) s * 4 + 100
- X
- X#define SIZEOFLONG 64
- X
- X/*
- X * library functions in alphabetic order
- X */
- X
- X#if defined(__STDC__) && !defined(NO_PROTOTYPE)
- X# define FUNCPROTO(type,id,args) extern type id args
- X#else
- X# define FUNCPROTO(type,id,args) extern type id()
- X#endif /* __STDC__ /**/
- X
- XFUNCPROTO(int, accept_connection, (CONNECTIONDESCR *, PORTDESCR *, unsigned));
- X#if defined(HPUX) || defined(UNICOS) || defined(LINUX)
- XFUNCPROTO(void, _catch, (int));
- X#else
- XFUNCPROTO(int, _catch, (int));
- X#endif /* HPUX || UNICOS || LINUX /**/
- XFUNCPROTO(int, _check_process, (PROCESSDESCR));
- XFUNCPROTO(int, _choose_host, (PORTDESCR *, char *));
- XFUNCPROTO(int, _close_connection, (CONNECTIONDESCR *));
- XFUNCPROTO(int, _convert_argv_to_port, (PORTDESCR *, PORTDESCR *, char **));
- XFUNCPROTO(int, _convert_port_to_argv, (char **, PORTDESCR, PORTDESCR));
- XFUNCPROTO(int, _create_port, (PORTDESCR *));
- X#ifndef iPSC
- XFUNCPROTO(int, _create_dcadmin, (char *, char *));
- X#endif /* !iPSC /**/
- XFUNCPROTO(int, _create_process, (char *, char *, char *, PROCESSDESCR *));
- X#ifdef HETEROGENEOUS
- XFUNCPROTO(int, _decode, (char *, bool_t (*)()));
- X#endif /* HETEROGENEOUS /**/
- XFUNCPROTO(int, _delete_port, (PORTDESCR *));
- XFUNCPROTO(int, _destroy_process, (PROCESSDESCR, int));
- XFUNCPROTO(int, _display_connection_port_info, (char *, char *, CONNECTIONDESCR));
- XFUNCPROTO(int, _display_port_info, (char *, char *, PORTDESCR));
- XFUNCPROTO(int, _display_processdata_info, (char *, char *, PROCESSDATA));
- XFUNCPROTO(int, _display_processdescr_info, (char *, char *, PROCESSDESCR));
- X#ifdef HETEROGENEOUS
- XFUNCPROTO(int, _encode, (char *, bool_t (*)(), unsigned long *));
- X#endif /* HETEROGENEOUS /**/
- XFUNCPROTO(int, _get_location_from_admin, (char *, char *, char **));
- X#ifdef iPSC
- XFUNCPROTO(int, _get_ports, (CONNECTIONDESCR *));
- X#endif /* iPSC /**/
- XFUNCPROTO(int, _get_transaction_call, (char *));
- XFUNCPROTO(int, _input_port_info, (PORTDESCR *));
- XFUNCPROTO(int, _make_connection, (CONNECTIONDESCR *, PORTDESCR *, PORTDESCR *, unsigned));
- XFUNCPROTO(int, _make_transaction_call, (PORTDESCR, char *, int));
- XFUNCPROTO(int, _receive_connection_type_or_answer, ());
- X#ifdef iPSC
- XFUNCPROTO(int, _receive_ports_data, ());
- X#endif /* iPSC /**/
- XFUNCPROTO(int, _receive_process_data, (PROCESSDATA *));
- XFUNCPROTO(int, _recv_data, (CONNECTIONDESCR *, char *, int, unsigned));
- XFUNCPROTO(int, _recv_data_encoded, (CONNECTIONDESCR *, char *, int (*)(), int));
- X#ifndef iPSC
- XFUNCPROTO(int, _report_back, ());
- X#endif /* !iPSC /**/
- XFUNCPROTO(int, _send_connection_type_or_answer, (int));
- XFUNCPROTO(int, _send_data, (CONNECTIONDESCR *, char *, int, unsigned));
- XFUNCPROTO(int, _send_data_encoded, (CONNECTIONDESCR *, char *, int (*)(), int));
- XFUNCPROTO(int, _send_process_data, ());
- XFUNCPROTO(int, _set_signals, ());
- XFUNCPROTO(int, _notify_admin_process, (int));
- X#ifdef HETEROGENEOUS
- XFUNCPROTO(bool_t, xdr_PORTDESCR, (XDR *, PORTDESCR *));
- XFUNCPROTO(bool_t, xdr_CONNECTIONDESCR, (XDR *, CONNECTIONDESCR *));
- XFUNCPROTO(bool_t, xdr_PROCESSDESCR, (XDR *, PROCESSDESCR *));
- XFUNCPROTO(bool_t, xdr_ADMINREQUEST, (XDR *, ADMINREQUEST *));
- XFUNCPROTO(bool_t, xdr_ADMINLOCINFO, (XDR *, ADMINLOCINFO *));
- XFUNCPROTO(bool_t, xdr_ADMINCFGINFO, (XDR *, ADMINCFGINFO *));
- XFUNCPROTO(bool_t, xdr_PROCESSDATA, (XDR *, PROCESSDATA *));
- XFUNCPROTO(bool_t, xdr_TRANSDATA, (XDR *, TRANSDATA *));
- X#endif /* HETEROGENEOUS /**/
- XFUNCPROTO(int, _RuntimeError, (char *));
- XFUNCPROTO(int, _SendTransCallReply, (int));
- X
- X/*
- X * external declarations of global variables
- X */
- X
- Xextern int
- X Errno,
- X errno,
- X _debugflush;
- X
- Xextern char
- X _processprefix[],
- X *_programname,
- X *_processname,
- X *sys_errlist[];
- X
- Xextern PORTDESCR
- X _own_port,
- X _creator_port,
- X _admin_port;
- X
- Xextern CONNECTIONDESCR
- X _con_port;
- X
- Xextern FILE
- X *_debugout;
- X
- X#ifdef HETEROGENEOUS
- Xextern char
- X *_dcc_buf,
- X *_xdr_size_buf;
- Xextern unsigned long
- X _xdr_size;
- Xextern XDR
- X encode_xdrs,
- X decode_xdrs,
- X _xdr_encode_size_xdrs,
- X _xdr_decode_size_xdrs;
- X#endif /* HETEROGENEOUS /**/
- X
- X/*
- X * special utilities for debug purpose only
- X */
- X
- Xextern int
- X _debug_ipc,
- X _debug_convert,
- X _debug_control,
- X _debug_creation,
- X _debug_kill,
- X _debug_transaction;
- X
- X#define PRINT_DEBUG_ALL {_debug_ipc = 1; \
- X _debug_convert = 1; \
- X _debug_control = 1; \
- X _debug_creation = 1; \
- X _debug_kill = 1; \
- X _debug_transaction = 1;}
- X#define PRINT_DEBUG_IPC_ON _debug_ipc = 1
- X#define PRINT_DEBUG_IPC_OFF _debug_ipc = 0
- X#define PRINT_DEBUG_CONVERT_ON _debug_convert = 1
- X#define PRINT_DEBUG_CONVERT_OFF _debug_convert = 0
- X#define PRINT_DEBUG_CONTROL_ON _debug_control = 1
- X#define PRINT_DEBUG_CONTROL_OFF _debug_control = 0
- X#define PRINT_DEBUG_CREATION_ON _debug_creation = 1
- X#define PRINT_DEBUG_CREATION_OFF _debug_creation = 0
- X#define PRINT_DEBUG_KILL_ON _debug_kill = 1
- X#define PRINT_DEBUG_KILL_OFF _debug_kill = 0
- X#define PRINT_DEBUG_TRANSACTION_ON _debug_transaction = 1
- X#define PRINT_DEBUG_TRANSACTION_OFF _debug_transaction = 0
- X
- X#endif /* !RPC_XDR /**/
- X
- X#endif /* !__dcc_h /**/
- END_OF_FILE
- if test 10529 -ne `wc -c <'include/dcc.h'`; then
- echo shar: \"'include/dcc.h'\" unpacked with wrong size!
- fi
- # end of 'include/dcc.h'
- fi
- if test -f 'include/functions.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'include/functions.h'\"
- else
- echo shar: Extracting \"'include/functions.h'\" \(10104 characters\)
- sed "s/^X//" >'include/functions.h' <<'END_OF_FILE'
- X/***************************************************************************
- X * *
- X * @@@@ @@@ @@@@@ @@@@@ @@@@@ @@@ @@@@ @ @ @@@@@ @@@@@ @@@@ @@@ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @ @ @ @@@@@ @ @@@@@ @ @@@@@ @ @ @ @@@@@ @ @ @ *
- X * @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ *
- X * @@@@ @@@ @@@@@ @ @ @ @@@ @@@@ @@@@@ @ @@@@@ @@@@ @@@ *
- X * *
- X * A compiler for distributed programming with C *
- X * *
- X * f u n c t i o n s . h *
- X * *
- X * Package : Include files *
- X * Version : 2.0 *
- X * CreationDate : 19.08.90 *
- X * LastUpDate : 04.11.91 *
- X * *
- X * Compiler functions with parameter and return types. *
- X * *
- X * Copyright (C) 1990-1994 by Franz Distler and Christoph Pleier. *
- X * All rights reserved! *
- X ***************************************************************************/
- X
- X/*
- X * This file is part of the Distributed C Development Environment (DCDE).
- X * DCDE is free software; you can redistribute it and/or modify
- X * it under the terms written in the README-file.
- X * DCDE is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- X * See the file README for more details.
- X */
- X
- X#ifndef __functions_h
- X#define __functions_h
- X
- XFUNCPROTO(SELECTATTR *, add_guard_to_attr, (SELECTATTR *, char *));
- XFUNCPROTO(int , add_includefile_to_list, (char *));
- XFUNCPROTO(IDL_ATTR *, add_init_declarator_list, (IDL_ATTR *, IDL_ATTR *));
- XFUNCPROTO(SYMBTABEL *, add_parm_type, (DS_ATTR *, SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, add_process_info, (SYMBTABEL *, SYMBTABEL *, SYMBTABEL *));
- XFUNCPROTO(SQL_ATTR *, add_spec_qual_list, (SQL_ATTR *, SQL_ATTR *));
- XFUNCPROTO(STL_ATTR *, add_struct_declaration, (STL_ATTR *, STL_ATTR *));
- XFUNCPROTO(SDL_ATTR *, add_struct_declarator, (SDL_ATTR *, SDL_ATTR *));
- XFUNCPROTO(SYMBTABEL *, add_struct_or_union_info, (SU_ATTR *, SYMBTABEL *, STL_ATTR *));
- XFUNCPROTO(SYMBTABEL *, add_transaction_info, (SYMBTABEL *, DS_ATTR *, SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, add_transaction_label, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, add_trans_info, (SYMBTABEL *, SYMBTABEL *));
- XFUNCPROTO(TQL_ATTR *, add_type_qualifier, (TQL_ATTR *, TQL_ATTR *));
- XFUNCPROTO(int , append_file, (FILE *, FILE *));
- XFUNCPROTO(int , blk_pop, ());
- XFUNCPROTO(int , blk_push, ());
- XFUNCPROTO(int , build_includefile, ());
- XFUNCPROTO(int , build_makefile, ());
- XFUNCPROTO(int , build_xdrfile, ());
- XFUNCPROTO(SYMBTABEL *, check_transaction, (SYMBTABEL *));
- XFUNCPROTO(char , choose_void_type, ());
- XFUNCPROTO(int , close_files, ());
- XFUNCPROTO(char *, convert_d_to_string, (char *, D_ATTR *));
- XFUNCPROTO(char *, convert_dd_to_string, (char *, DD_ATTR *));
- XFUNCPROTO(char *, convert_ds_to_string, (char *, DS_ATTR *));
- XFUNCPROTO(char *, convert_id_to_string, (char *, ID_ATTR *));
- XFUNCPROTO(char *, convert_idl_to_string, (char *, IDL_ATTR *));
- XFUNCPROTO(char *, convert_p_to_string, (char *, P_ATTR *));
- XFUNCPROTO(char *, convert_scs_to_string, (char *, SCS_ATTR *));
- XFUNCPROTO(char *, convert_sd_to_string, (char *, SD_ATTR *));
- XFUNCPROTO(char *, convert_sdl_to_string, (char *, SDL_ATTR *));
- XFUNCPROTO(char *, convert_sql_to_string, (char *, SQL_ATTR *));
- XFUNCPROTO(char *, convert_st_to_string, (char *, ST_ATTR *));
- XFUNCPROTO(char *, convert_stl_to_string, (char *, STL_ATTR *));
- XFUNCPROTO(char *, convert_su_to_string, (char *, SU_ATTR *));
- XFUNCPROTO(char *, convert_sus_to_string, (char *, SUS_ATTR *, char));
- XFUNCPROTO(char *, convert_tq_to_string, (char *, TQ_ATTR *));
- XFUNCPROTO(char *, convert_tql_to_string, (char *, TQL_ATTR *));
- XFUNCPROTO(char *, convert_ts_to_string, (char *, TS_ATTR *, char));
- XFUNCPROTO(ACCEPTATTR *, create_accept_attribute, (SYMBTABEL *, COMPATTR *));
- XFUNCPROTO(ARG_LIST *, create_arg_list_elem, (char *));
- XFUNCPROTO(COMPATTR *, create_compound_attribute, (char *, char *));
- XFUNCPROTO(POSTATTR *, create_post_expr_attr, (char *));
- XFUNCPROTO(SELECTATTR *, create_select_attribute, (int, ACCEPTATTR *, char *));
- XFUNCPROTO(TRANSATTR *, create_trans_attr, (POSTATTR *, SYMBTABEL *, ARG_LIST *));
- XFUNCPROTO(int , display_comp_attribute, (COMPATTR *));
- XFUNCPROTO(int , display_help, ());
- XFUNCPROTO(int , display_select_attribute, (SELECTATTR *));
- X#ifdef DEBUGFLAG
- XFUNCPROTO(int , display_struct_type_list, ());
- XFUNCPROTO(int , display_symbol_table, ());
- XFUNCPROTO(int , display_symbtab_entry, (SYMBTABEL *));
- X#endif /* DEBUGFLAG /**/
- XFUNCPROTO(int , display_usage, ());
- XFUNCPROTO(int , display_version, ());
- XFUNCPROTO(SYMBTABEL *, enter_symbtabel, (char *));
- XFUNCPROTO(char *, evaluate_declaration, (DS_ATTR *, IDL_ATTR *));
- XFUNCPROTO(char *, gencode_function, (DS_ATTR *, D_ATTR *, char *, COMPATTR *));
- XFUNCPROTO(char *, generate_destroy_process_code, (char *));
- XFUNCPROTO(int , gencode_process_body, (SYMBTABEL *, COMPATTR *));
- XFUNCPROTO(char *, generate_call_transaction_code, (char *, char *, SYMBTABEL *, ARG_LIST *, char *));
- XFUNCPROTO(char *, generate_process_creation_code, (SYMBTABEL *, ARG_LIST *, char *));
- XFUNCPROTO(char *, generate_select_code, (SELECTATTR *));
- XFUNCPROTO(char *, generate_transaction_code, (ACCEPTATTR *));
- XFUNCPROTO(char *, generate_treturn_code, (char *));
- XFUNCPROTO(int , gen_call_transaction_routines, (SYMBTABEL *));
- XFUNCPROTO(ES_ATTR *, gen_enum_specifier_attr, (char *));
- XFUNCPROTO(DS_ATTR *, gen_declaration_specifiers_attr, (SCS_ATTR *, TS_ATTR *, TQ_ATTR *, DS_ATTR *));
- XFUNCPROTO(D_ATTR *, gen_declarator_attr, (P_ATTR *, DD_ATTR *));
- XFUNCPROTO(DD_ATTR *, gen_direct_decl_attr, (char, SYMBTABEL *, D_ATTR *, DD_ATTR *, char *));
- XFUNCPROTO(ID_ATTR *, gen_init_declarator_attr, (D_ATTR *, char *));
- XFUNCPROTO(IDL_ATTR *, gen_init_declarator_list_attr, (ID_ATTR *));
- XFUNCPROTO(P_ATTR *, gen_pointer_attr, (int, TQL_ATTR *, P_ATTR *));
- XFUNCPROTO(int , gen_process_creation_routine, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, gen_process_file, (SYMBTABEL *));
- XFUNCPROTO(SQL_ATTR *, gen_spec_qual_list_attr, (TS_ATTR *, TQ_ATTR *));
- XFUNCPROTO(SCS_ATTR *, gen_storage_class_spec_attr, (char));
- XFUNCPROTO(ST_ATTR *, gen_struct_declaration_attr, (SQL_ATTR *, SDL_ATTR *));
- XFUNCPROTO(SD_ATTR *, gen_struct_declarator_attr, (D_ATTR *, char *));
- XFUNCPROTO(SDL_ATTR *, gen_struct_declarator_list_attr, (SD_ATTR *));
- XFUNCPROTO(SU_ATTR *, gen_struct_or_union_attr, (char));
- XFUNCPROTO(SUS_ATTR *, gen_struct_or_union_spec_attr, (SU_ATTR *, SYMBTABEL *, STL_ATTR *));
- XFUNCPROTO(STL_ATTR *, gen_stru_declaration_list_attr, (ST_ATTR *));
- XFUNCPROTO(TQ_ATTR *, gen_type_qualifier_attr, (char));
- XFUNCPROTO(TQL_ATTR *, gen_type_qualifier_list_attr, (TQ_ATTR *));
- XFUNCPROTO(TS_ATTR *, gen_type_specifier_attr, (int, ES_ATTR *, SUS_ATTR *, SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, get_process, (SYMBTABEL *));
- XFUNCPROTO(int , hash, (char *));
- XFUNCPROTO(int , init_symbtab, ());
- XFUNCPROTO(void , is_process, (SYMBTABEL *));
- XFUNCPROTO(void , is_transaction, (SYMBTABEL *));
- XFUNCPROTO(ARG_LIST *, link_arguments, (ARG_LIST *, ARG_LIST *));
- XFUNCPROTO(SYMBTABEL *, link_parameters, (SYMBTABEL *, SYMBTABEL *));
- XFUNCPROTO(SELECTATTR *, link_select_attributes, (SELECTATTR *, SELECTATTR *));
- XFUNCPROTO(SYMBTABEL *, link_transactions, (SYMBTABEL *, SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, lookup_symbtabel, (char *));
- XFUNCPROTO(SYMBTABEL *, make_function, (DS_ATTR *, D_ATTR *));
- XFUNCPROTO(SYMBTABEL *, make_parameter, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, make_process, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, make_process_def, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, make_structure, (SYMBTABEL *));
- XFUNCPROTO(int , make_structure_definition, (DS_ATTR *, IDL_ATTR *));
- XFUNCPROTO(SYMBTABEL *, make_transaction, (SYMBTABEL *));
- XFUNCPROTO(int , make_typedef_name, (DS_ATTR *, IDL_ATTR *));
- XFUNCPROTO(DS_ATTR *, mark_struct_or_type_def_for_XDR, (DS_ATTR *));
- XFUNCPROTO(int , parse_options, (int , char **));
- XFUNCPROTO(void , reenter_process_comps, (SYMBTABEL *));
- XFUNCPROTO(void , reenter_transactions, (IDENTCHAIN *));
- XFUNCPROTO(void , reenter_transaction_params, (SYMBTABEL *));
- XFUNCPROTO(SYMBTABEL *, store_struct_or_type_def, (SYMBTABEL *));
- XFUNCPROTO(char *, strmalloc, (char *));
- XFUNCPROTO(char *, strsave, (char *));
- XFUNCPROTO(IDENTCHAIN *, update_post_expr_attr, (IDENTCHAIN *, SYMBTABEL *));
- XFUNCPROTO(int , yyerror, (char *));
- XFUNCPROTO(int , yymark, ());
- XFUNCPROTO(char *, yytoken, ());
- XFUNCPROTO(char *, yywhere, ());
- XFUNCPROTO(int , yywrap, ());
- XFUNCPROTO(int , Error, (char *, char *));
- XFUNCPROTO(int , Free, (char *));
- XFUNCPROTO(char *, Malloc, (unsigned));
- XFUNCPROTO(int , Panic, (char *));
- XFUNCPROTO(int , SetSignals, ());
- XFUNCPROTO(char *, Strcat, (char *, char *));
- XFUNCPROTO(char *, Strcatmany, ());
- XFUNCPROTO(int , Warning, (char *));
- X
- X#endif /* !__functions_h /**/
- END_OF_FILE
- if test 10104 -ne `wc -c <'include/functions.h'`; then
- echo shar: \"'include/functions.h'\" unpacked with wrong size!
- fi
- # end of 'include/functions.h'
- fi
- echo shar: End of archive 8 \(of 18\).
- cp /dev/null ark8isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 18 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-