ftp.nice.ch/pub/next/unix/developer/pcn.2.0.s.tar.gz#/contrib/gauge/Model/hutil.c

This is hutil.c in view mode; [Download] [Up]

/**************************************************************/
/**************************************************************/
/** this is only used for the data retrieval part of display **/
/** not valid for compiling with ppshow or the with X        **/
/** routines, the corresponding routines for ppshow is under **/
/** the file of ppshow.c                                     **/
/**************************************************************/
/**************************************************************/

#include <stdio.h>

#ifndef _PPSHOW_H
#include "ppshow.h"
#endif

#ifdef HISTOGRAM 
#include "Xsw/Xsw.h" 
#include "Xsw/Help.h" 
#include <X11/Shell.h> 
  
#include "Gauge/Viewer.h"
#endif /* HISTOGRAM */ 

     /* from ppshow.c but not really used */
struct cost_parameters Parameters; 

char *checkmalloc(size,procname)
     int size;
     char *procname;
{
  char *calloc();
  char *ptr = (char *) calloc((unsigned) 1,(unsigned) size);
  if (ptr == NULL) {
    sprintf(TextBuffer,"Malloc failed in %s",procname);
    GaugeError("checkmalloc",TextBuffer);
  } else
    return ptr;
}

GaugeError(procname,str)
     char *procname,*str;
{
sprintf(MessageBuffer,"%s -%s\n",procname,str);
#if (HISTOGRAM)
  if (ModeFlag == DISPLAY) {
    XtWarning(MessageBuffer);
    exit(1);
/*longjmp(ErrorEnv,1); */
  } else {
    printf(MessageBuffer);
    exit(1);
  }
#else
  printf(MessageBuffer);
  exit(1);
#endif
}

GaugeWarning(procname,str)
     char *procname,*str;
{
sprintf(MessageBuffer,"%s -%s\n",procname,str);
#if (HISTOGRAM)
  if (ModeFlag == DISPLAY)
    XtWarning(MessageBuffer);
  else
    printf(MessageBuffer);
#else
  printf(MessageBuffer);
#endif
}


/* ARGSUSED */
load_arch_dbase(hPtr,arch)
     Histo *hPtr;
     struct arch_descriptor *arch;
{
  char buf[256];
  char hostname[MAXHOSTNAMELEN];

  typedef struct {
    String dbase_file;
    String default_arch;
  } ArchData, *ArchDataPtr;

#ifdef HISTOGRAM
  static XtResource arch_resources[] = {
    { "archDbase", "ArchDbase", XtRString, sizeof (String),
	XtOffset(ArchDataPtr, dbase_file), XtRString, 
	DEFAULT_ARCH_DBASE },
    { "archDefault", "ArchDefault", XtRString, sizeof (String),
	XtOffset(ArchDataPtr, default_arch), XtRString, 
	DEFAULT_ARCH },
  };
#endif
  ArchData data;
  FILE *fd;

#if (DEFAULT_ARCH)
  data.default_arch = DEFAULT_ARCH;
#else
  data.default_arch=(String) checkmalloc(sizeof("sun4")+1,"load_arch_dbase");
  strcpy(data.default_arch,"sun4");
#endif

#if (DEFAULT_ARCH_DBASE)
  data.dbase_file = DEFAULT_ARCH_DBASE;
#else
  data.dbase_file=(String) checkmalloc(sizeof("pcn_hosts")+1,"load_arch_dbase");
  strcpy(data.dbase_file,"pcn_hosts");
#endif

#ifdef HISTOGRAM
  if (ModeFlag == DISPLAY) {
    XtGetApplicationResources(hPtr->view, &data, arch_resources, 
			      XtNumber(arch_resources), NULL, 0);
    data.dbase_file = XswGetLibName(data.dbase_file);
  }
#endif /* HISTOGRAM */

  fd = fopen(data.dbase_file,"r");
  if (fd == NULL) {
    sprintf(TextBuffer,"Could not open architecture parameter file");
    GaugeError("load_arch_dbase",TextBuffer);
    return;
  }

  strcpy(hostname,arch->host_name);

  lookup:
  while (fscanf(fd,"%s",buf) != EOF) {
    if (buf[0] == '+' && buf[1] == '>')
      { /* A reference line */
	fscanf(fd," %s ",buf);
	if (! strncmp(buf,hostname,strlen(buf)) ) {
	  /* Get name of hostype being referenced */
	  fscanf(fd," %s ",hostname);
	  /* Now resolve it */
	  rewind(fd);
	  continue;
	}
      }
    else if  ( (buf[0] == '-' && buf[1] == '-') ||
	      strncmp(buf,hostname,strlen(buf)) )
      fscanf(fd,"%*[^\n]");
    else  {
      int i, tmp;
      union u_bytecode_key key;

      sprintf(TextBuffer+strlen(TextBuffer),
	      "  Using architectural parameters for %s\n\n",buf);

      /* Get byteorder key */
      for (i = 0 ; i < 8 ; i++) {
	fscanf(fd," %2x ",&tmp);
	key.bytes[i] = tmp;
      }
      arch->byte_swapper = decode_byteorder_key(key.timer);

      /* Get the number of clock ticks per second */
      fscanf(fd," %d ",&(arch->ticks_per_second));
      /* Finally, get the instruction parameters */
      if (ModeFlag == CALIBRATE) {
	int i;
	for (i = 0 ; i < INSTR_CLASSES ; i++)
	  arch->parameters.classtype[i] = 1.0;
	arch->parameters.suspend = arch->parameters.copy = 1.0;
	arch->parameters.send_small = arch->parameters.send_big =
	  arch->parameters.send_length = 1.0;
	arch->parameters.rcv_small = arch->parameters.rcv_big =
	  arch->parameters.rcv_length = 1.0;
      } else {
	for (i = 0 ; i < INSTR_CLASSES ; i++) 
	  fscanf(fd," %f ",(arch->parameters.classtype)+i);
	fscanf(fd," %f ",&(arch->parameters.suspend));
      }
      fclose(fd);
      return;
    }
  }

  sprintf(TextBuffer,
	  "Architectural parameters for host:\n    %s\n  are not defined.\n\
  Using parameters for %s instead\n  Use the \"pcnhost\" command to  \n  add\
 this host to the architecture database",
	  arch->host_name,data.default_arch);
  GaugeWarning("load_arch_dbase",TextBuffer);
  rewind(fd);
  strcpy(hostname,data.default_arch);
  goto lookup;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.