Example #1
0
//
//  Syntax check method
//
static pwr_tStatus SyntaxCheck (
    ldh_tSesContext Session,
    pwr_tAttrRef Object,	      /* current object */
    int *ErrorCount,	      /* accumulated error count */
    int *WarningCount	      /* accumulated waring count */
) {
    wb_session *sp = (wb_session *)Session;
    pwr_tString80 str;

    wb_object o = sp->object( Object.Objid);
    wb_object p = o.parent();
    if ( !p ||
            !(p.cid() == pwr_cClass_BusConfig ||
              p.cid() == pwr_cClass_NodeConfig ||
              p.cid() == pwr_cClass_SevNodeConfig))
        wsx_error_msg_str( Session, "Bad parent", Object, 'E', ErrorCount, WarningCount);

    if ( Object.Objid.vid != ldh_cDirectoryVolume)
        wsx_error_msg_str( Session, "Not a DirectoryVolume", Object, 'E', ErrorCount, WarningCount);

    // Check NodeName
    wb_attribute a = sp->attribute( Object.Objid, "RtBody", "NodeName");
    if (!a) return a.sts();

    a.value( &str);
    if ( !a) return a.sts();

    dcli_trim( str, str);
    if ( strcmp( str, "") == 0)
        wsx_error_msg_str( Session, "NodeName is missing", Object, 'E', ErrorCount, WarningCount);

    // Check Address
    a = sp->attribute( Object.Objid, "RtBody", "Address");
    if (!a) return a.sts();

    a.value( &str);
    if ( !a) return a.sts();

    unsigned char adr1, adr2, adr3, adr4;
    int num;
    num = sscanf( str, "%hhu.%hhu.%hhu.%hhu", &adr1, &adr2, &adr3, &adr4);
    if ( num != 4)
        wsx_error_msg_str( Session, "Syntax error in Address", Object, 'E', ErrorCount, WarningCount);
    else if ( adr1 == 0 && adr2 == 0 && adr3 == 0 && adr4 == 0)
        wsx_error_msg_str( Session, "Address is zero", Object, 'E', ErrorCount, WarningCount);

    // Check Volume
    a = sp->attribute( Object.Objid, "RtBody", "Volume");
    if (!a) return a.sts();

    a.value( &str);
    if ( !a) return a.sts();

    dcli_trim( str, str);
    if ( strcmp( str, "") == 0)
        wsx_error_msg_str( Session, "Volume is missing", Object, 'E', ErrorCount, WarningCount);

    return PWRB__SUCCESS;
}
Example #2
0
void rt_post::replace_symbol( char *outstr, char *instr)
{
  char *s, *t, *u;
  int symbolmode = 0;
  char symbol[80];
  char csymbol[80];
  int size;
  int found;

  s = instr;
  t = outstr;

  while ( 1) {
    if ( symbolmode) {
      if ( *s == ',' || *s == ' ' || *s == '	' || *s == 0) {
	// End of symbol
	size = (long int) s - (long int)(u+1);
	strncpy( symbol, u + 1, size);
	symbol[size] = 0;

	// Find the symbol
	found = 0;
	for ( unsigned int j = 0; j < sizeof(conf->Symbols)/sizeof(conf->Symbols[0]); j++) {
	  dcli_trim( csymbol, conf->Symbols[j].Name);
	  if ( strcmp( symbol, csymbol) == 0) {
	    // Found, insert the value
	    strcpy( t, conf->Symbols[j].Value);
	    t += strlen( conf->Symbols[j].Value);
	    found = 1;
	    break;
	  }
	}	
	if ( !found) {
	  // Not found
	  strcpy( t, "$");
	  t++;
	  strcat( t, symbol);
	  t += strlen(symbol);
	}
	symbolmode = 0;
	*t = *s;
	t++;
      }
    }
    else {
      if ( *s == '$') {
	symbolmode = 1;
	u = s;
      }
      else {
	*t = *s;
	t++;
      }	
    }
    if ( *s == 0)
      break;
    s++;
  }
}
Example #3
0
void Lng::read_include( ifstream& fp1, ifstream& fp2, bool global, pwr_tStatus *sts) 
{
  char line1[200];
  char line2[200];
  streampos pos1;
  pwr_tFileName fname1, fname2;
  
  for(;;) {
    pos1 = fp1.tellg();
    for (;;) {
      if ( !fp1.getline( line1, sizeof( line1))) {
	*sts = LNG__EOF;
	return;
      }
      if ( line1[0] != '#')
	break;
    }

    if ( strncmp( line1, "Include:", 8) == 0) {
      for (;;) {
	if ( !fp2.getline( line2, sizeof( line2))) {
	  *sts = LNG__EOF;
	  return;
	}
	if ( line2[0] != '#')
	  break;
      }

      if ( strncmp( line2, "Include:", 8) != 0) {
	*sts = LNG__INCLUDEMISMATCH;
	return;
      }
      
      dcli_trim( fname1, &line1[8]);
      dcli_trim( fname2, &line2[8]);
      if ( !read_files( fname1, fname2, global, sts))
	return;
    }
    else {
      fp1.seekg( pos1);
      break;
    }
  }
  *sts = LNG__SUCCESS;
}
Example #4
0
static pwr_tStatus SyntaxCheck (
  ldh_tSesContext Session,
  pwr_tAttrRef Object,	      /* current object */
  int *ErrorCount,	      /* accumulated error count */
  int *WarningCount	      /* accumulated waring count */
) {
  wb_session *sp = (wb_session *)Session;
  pwr_tString80 str;

  wb_object o = sp->object( Object.Objid);
  wb_object p = o.parent();
  if ( !(!p || p.oid().oix == 0))
    wsx_error_msg_str( Session, "Not on top level", Object, 'E', ErrorCount, WarningCount);

  if ( Object.Objid.vid != ldh_cDirectoryVolume)
    wsx_error_msg_str( Session, "Not a DirectoryVolume", Object, 'E', ErrorCount, WarningCount);

  // Check SystemName
  wb_attribute a = sp->attribute( Object.Objid, "SysBody", "SystemName");
  if (!a) return a.sts();
    
  a.value( &str);
  if ( !a) return a.sts();

  dcli_trim( str, str);
  if ( strcmp( str, "") == 0)
    wsx_error_msg_str( Session, "SystemName is missing", Object, 'E', ErrorCount, WarningCount);

  // Check SystemGroup
  a = sp->attribute( Object.Objid, "SysBody", "SystemGroup");
  if (!a) return a.sts();
    
  a.value( &str);
  if ( !a) return a.sts();

  dcli_trim( str, str);
  if ( strcmp( str, "") == 0)
    wsx_error_msg_str( Session, "SystemGroup is missing", Object, 'E', ErrorCount, WarningCount);

  return PWRB__SUCCESS;
}
Example #5
0
static void get_config( char *name, unsigned int *lk_max_locks, 
			unsigned int *lk_max_objects)
{
  pwr_tFileName fname;
  FILE *fp;
  char line[200];
  char	line_elem[2][100];
  unsigned int max_locks;
  unsigned int max_objects;
  int nr;

  *lk_max_locks = 50000;
  *lk_max_objects = 20000;

  strcpy( fname, name);
  strcat( fname, ".cnf");
  dcli_translate_filename( fname, fname);

  fp = fopen( fname, "r");
  if ( !fp)
    return;

  while ( dcli_read_line( line, sizeof(line), fp)) {
    dcli_trim( line, line);
    if ( line[0] == '#')
      continue;
    if ( strcmp( line, "") == 0)
      continue;
    
    nr = dcli_parse( line, " 	", "",
		(char *) line_elem, sizeof( line_elem)/sizeof( line_elem[0]), 
		sizeof( line_elem[0]), 1);
    if ( nr != 2)
      continue;

    if ( cdh_NoCaseStrcmp( line_elem[0], "lk_max_locks") == 0) {
      nr = sscanf( line_elem[1], "%d", &max_locks);
      if ( nr == 1) {
	*lk_max_locks = max_locks;
	printf( "lk_max_locks.........%d\n", max_locks);
      }
    }
    else if ( cdh_NoCaseStrcmp( line_elem[0], "lk_max_objects") == 0) {
      nr = sscanf( line_elem[1], "%d", &max_objects);
      if ( nr == 1) {
	*lk_max_objects = max_objects;
	printf( "lk_max_objects.......%d\n", max_objects);
      }
    }
  }
  fclose( fp);
}
Example #6
0
static pwr_tStatus configure_attrmask( ldh_sMenuCall *ip, pwr_tAttrRef *parent, char *str1)
{
  char 	vect[10][80];
  int 	vect_cnt;
  char 	*s;
  char 	str2[80];
  int 	i;
  pwr_tStatus sts;

  vect_cnt = 0;
  s = strchr( str1, '(');
  if ( s) {
    strncpy( str2, s+1, sizeof(str2));
    if ( str2[strlen(str2)-1] != ')')
      return LDH__COMPSYNTAX;

    str2[strlen(str2)-1] = 0;

    // Get items
    int len;
    int parlevel = 0;
    char *start = str2;
    for ( s = str2; *s; s++) {
      if ( *s == '(')
	parlevel++;
      else if ( *s == ')')
	parlevel--;
      if ( parlevel == 0 && *s == ',') {
	len = s - start;
	strncpy( vect[vect_cnt], start, len);
	vect[vect_cnt][len] = 0;
	vect_cnt++;
	start = s+1;
      }
    }
    len = s - start;
    strncpy( vect[vect_cnt], start, len);
    vect[vect_cnt][len] = 0;
    vect_cnt++;
  }
  for ( i = 0; i < vect_cnt; i++) {
    dcli_trim( vect[i], vect[i]);

    sts = configure_parse_attr( ip, parent, vect[i]);
    if ( EVEN(sts)) return sts;
  }

  return LDH__SUCCESS;
}
Example #7
0
static int check_os( char *str, char *os)
{
  char os_vect[10][20];
  int nr;
  int i;
  char os_element[20];

  nr = dcli_parse( str, "||", "", (char *)os_vect, 
                       sizeof( os_vect) / sizeof( os_vect[0]), sizeof( os_vect[0]), 0);

  for ( i = 0; i < nr; i++) {
    dcli_trim( os_element, os_vect[i]);
    if ( cdh_NoCaseStrcmp( os, os_element) == 0)
      return 1;    
  }
	
  return 0;
}
Example #8
0
void wb_build::webgraph( pwr_tOid oid)
{
  pwr_tFileName dest_fname;
  pwr_tFileName src_fname;
  pwr_tCmd	cmd;
  pwr_tString80	java_name;
  pwr_tString80	name;
  pwr_tTime	dest_time, src_time;
  int 		check_hierarchy = cdh_ObjidIsNotNull( m_hierarchy);
  int 		hierarchy_found = 0;
  int 		is_frame, is_applet;
  char		jname[80];
  pwr_tStatus  	fsts;
  int		jexport;
  int 		found;
  pwr_tFileName found_file, file_spec;
  pwr_tFileName graph_name, dir;
  char		dev[80], type[80];
  int		version;
  pwr_tString80	appletsignature = "";
  char 		*s;

  wb_object o = m_session.object(oid);
  if ( !o) {
    m_sts = o.sts();
    return;
  }

  // Check that no ancestor is a LibHier
  for ( wb_object p = o.parent(); p.oddSts(); p = p.parent()) {
    if ( p.cid() == pwr_eClass_LibHier) {
      m_sts = PWRB__INLIBHIER;
      return;
    }
    if ( check_hierarchy && cdh_ObjidIsEqual( m_hierarchy, p.oid()))
      hierarchy_found = 1;
  }

  if ( check_hierarchy && !hierarchy_found) {
    m_sts = PWRB__NOBUILT;
    return;
  }

  wb_attribute a = m_session.attribute( oid, "RtBody", "Name");
  if ( !a) {
    m_sts = a.sts();
    return;
  }

  a.value( java_name);
  if ( !a) {
    m_sts = a.sts();
    return;
  }

  if ( isupper(java_name[0])) {
    cdh_ToLower( java_name, java_name);
    java_name[0] = toupper(java_name[0]);

    // Get the .pwg file for this javaname
    strcpy( graph_name, cdh_Low(java_name));
    sprintf( name, "$pwrp_pop/%s.pwg", graph_name);

    dcli_translate_filename( name, name);
    m_sts = dcli_file_time( name, &src_time);
    if ( evenSts()) {
      // Search in all pwg files
      found = 0;
      strcpy( file_spec, "$pwrp_pop/*.pwg");
      for ( fsts = dcli_search_file( file_spec, found_file, DCLI_DIR_SEARCH_INIT);
	    ODD(fsts);
	    fsts = dcli_search_file( file_spec, found_file, DCLI_DIR_SEARCH_NEXT)) {
	
	fsts = grow_IsJava( found_file, &is_frame, &is_applet, jname);
	if ( EVEN(fsts)) continue;
	
	if ( is_frame && strcmp( jname, java_name) == 0) {
	  dcli_parse_filename( found_file, dev, dir, graph_name, type, &version);
	  strcpy( name, found_file);
	  found = 1;
	  break;
	}      
      }
      dcli_search_file( file_spec, found_file, DCLI_DIR_SEARCH_END);

      if ( !found) {
	char msg[200];
	sprintf( msg, "Graph for %s not found", java_name);
	MsgWindow::message('E', msg, msgw_ePop_Yes, oid);
	m_sts = PWRB__NOBUILT;
	return;
      }
    }

    m_sts = dcli_file_time( name, &src_time);
    if ( evenSts()) return;

    // Check exported java frame
    jexport = 0;
    sprintf( dest_fname, "$pwrp_pop/%s.java", java_name);
    dcli_translate_filename( dest_fname, dest_fname);
    fsts = dcli_file_time( dest_fname, &dest_time);
    if ( opt.force || EVEN(fsts) || time_Acomp( &src_time, &dest_time) == 1)
      jexport = 1;


    if ( jexport) {
      if ( !m_wnav) {
	sprintf( cmd, "Build:    WebGraph  Unable to export java in this environment %s", java_name);
	MsgWindow::message('W', cmd, msgw_ePop_No, oid);
      }
      else {
	// Get signature from WebHandler
	for ( wb_object p = o.parent(); p.oddSts(); p = p.parent()) {
	  if ( p.cid() == pwr_cClass_WebHandler) {
	    wb_attribute a = m_session.attribute( p.oid(), "RtBody", "AppletSignature");
	    if ( !a) {
	      m_sts = a.sts();
	      return;
	    }

	    a.value( appletsignature);
	    if ( !a) {
	      m_sts = a.sts();
	      return;
	    }
	    dcli_trim( appletsignature, appletsignature);
	    break;
	  }
	}
	

	Ge *gectx = m_wnav->ge_new( graph_name, 1);
	if ( strcmp( appletsignature, "") == 0)
	  strcpy( cmd, "export java");
	else
	  sprintf( cmd, "export java /signature=\"%s\"", appletsignature);
	m_sts = gectx->command( cmd);
	if ( evenSts()) {
	  msg_GetMsg( m_sts, cmd, sizeof(cmd));
	  MsgWindow::message('E', cmd, msgw_ePop_Yes, oid);
	  m_sts = PWRB__NOBUILT;
	  delete gectx;
	  return;
	}
	delete gectx;

	sprintf( cmd, "Build:    WebGraph  Export java %s", java_name);
	MsgWindow::message('I', cmd, msgw_ePop_No, oid);
	
	m_sts = PWRB__SUCCESS;
      }
    }
  }
  else {
    // Copy from $pwrp_pop to $pwrp_web

    strcpy( graph_name, cdh_Low(java_name));

    cdh_ToLower( graph_name, graph_name);

    strcpy( src_fname, "$pwrp_pop/");
    strcat( src_fname, graph_name);

    if ( strstr( src_fname, ".pwg") == 0)
      strcat( src_fname, ".pwg");

    dcli_translate_filename( src_fname, src_fname);
    m_sts = dcli_file_time( src_fname, &src_time);
    if ( evenSts()) {
      m_sts = PWRB__NOBUILT;
      return;
    }

    strcpy( dest_fname, "$pwrp_web/");
    strcat( dest_fname, graph_name);

    if ( strstr( dest_fname, ".pwg") == 0)
      strcat( dest_fname, ".pwg");

    dcli_translate_filename( dest_fname, dest_fname);
    m_sts = dcli_file_time( dest_fname, &dest_time);
    if ( opt.force || evenSts() || src_time.tv_sec > dest_time.tv_sec) {
      sprintf( cmd, "cp %s %s", src_fname, dest_fname);
      system( cmd);
      sprintf( cmd, "Build:    WebGraph copy $pwrp_pop/%s -> $pwrp_web", graph_name);
      MsgWindow::message( 'I', cmd, msgw_ePop_No, oid);
      
      strcpy( name, graph_name);
      if (( s = strrchr( name, '.')))
	*s = 0;
      wb_log::log( wlog_eCategory_GeBuild, name, 0);
      m_sts = PWRB__SUCCESS;
    }
    else
      m_sts = PWRB__NOBUILT;

  }
}
Example #9
0
void wb_pkg::readConfig()
{
  char fname[200];
  char line[200];
  char line_item[7][80];
  int num;
  int sts;

  dcli_translate_filename( fname, load_cNameDistribute);
  ifstream is( fname);

  while ( is.getline( line, sizeof(line))) {
    dcli_trim( line, line);
    if ( line[0] == '#' || line[0] == '!')
      continue;

    num = dcli_parse( line, " 	", "", (char *)line_item,
		     sizeof(line_item)/sizeof(line_item[0]),
		     sizeof(line_item[0]), 0);
    if ( !num)
      continue;

    if ( strcmp( cdh_Low(line_item[0]), "node") == 0) {
      pwr_mOpSys opsys;
      int bus;
      pwr_tMask dstatus;
      char bootnode[80];
      pwr_tString80 custom_platform;

      if ( num != 7)
	throw wb_error_str("File corrupt " load_cNameDistribute);

      sts = sscanf( line_item[2], "%d", (int *)&opsys);
      if ( sts != 1)
	throw wb_error_str("File corrupt " load_cNameDistribute);

      sts = sscanf( line_item[3], "%d", &bus);
      if ( sts != 1)
	throw wb_error_str("File corrupt " load_cNameDistribute);

      sts = sscanf( line_item[4], "%d", (int *)&dstatus);
      if ( sts != 1)
	throw wb_error_str("File corrupt " load_cNameDistribute);

      strcpy( bootnode, line_item[5]);
      strcpy( custom_platform, line_item[6]);
	
      if ( m_allnodes) {
	pkg_node node( line_item[1], opsys, bus, dstatus, bootnode, custom_platform);
	m_nodelist.push_back( node);
      }
      else {
	bool found = false;
	for ( int i = 0; i < (int) m_nodelist.size(); i++) {
	  if ( strcmp( m_nodelist[i].name(), cdh_Low(line_item[1])) == 0) {
	    found = true;
	    m_nodelist[i].setOpsys( opsys);
	    m_nodelist[i].setBus( bus);
	    m_nodelist[i].setDStatus( dstatus);
	    m_nodelist[i].setBootnode( bootnode);
	    m_nodelist[i].setCustomPlatform( custom_platform);
	    m_nodelist[i].setValid();
	    break;
	  }
	}
      }
    }
    else if ( strcmp( cdh_Low(line_item[0]), "appl") == 0) {
      if ( !(num == 4 || num == 5))
	throw wb_error_str("File corrupt " load_cNameDistribute);

      char severity = line_item[2][0];
      try {
	pkg_node& n = getNode( line_item[1]);
	if ( num == 4) {
	  pkg_pattern p( line_item[3], "", severity);
	  n.push_back( p);
	}
	else {
	  pkg_pattern p( line_item[3], line_item[4], severity);
	  n.push_back( p);
	}
      } catch ( wb_error &e) {
	continue;
      }
    }
    else if ( strcmp( cdh_Low(line_item[0]), "load") == 0) {
      pwr_tVolumeId *vollist;
      pwr_tString40 *volnamelist;
      int       volcount;
      pwr_tString80 *plclist;
      int	plccount;
      char     	systemname[80];
      char     	systemgroup[80];
      pwr_tTime date;

      if ( !(num == 2))
	throw wb_error_str("File corrupt " load_cNameDistribute);

      try {
        pkg_node &n = getNode( line_item[1]);

	// Add ld_node file
	sprintf( fname, load_cNameNode, load_cDirectory, n.name(), n.bus());
	pkg_pattern pnode( fname, "", 'E');
	n.push_back( pnode);

	// Add bootfile
	sprintf( fname, load_cNameBoot, load_cDirectory, n.name(), n.bus());
	pkg_pattern pboot( fname, "", 'E');
	n.push_back( pboot);

	// Read bootfile, get plc and volumes
	sts = lfu_ReadBootFile( fname, &date, systemname, 
				systemgroup, &vollist, &volnamelist, &volcount, &plclist, &plccount);
	if ( EVEN(sts))
	  throw wb_error_str("Bootfile is corrupt");

	// Add plc
	for ( int j = 0; j < plccount; j++) {
	  pwr_tFileName dir;
	
	  if ( n.opsys() == pwr_mOpSys_CustomBuild && 
	       strcmp( n.customPlatform(), "-") != 0)
	    sprintf( dir, "$pwrp_root/bld/%s/exe/", n.customPlatform());
	  else
	    sprintf( dir, "$pwrp_root/bld/%s/exe/", cdh_OpSysToStr( n.opsys()));
	  sprintf( fname, "%s%s", dir, plclist[j]);
	  sprintf( dir, "$pwrp_exe/");
	  pkg_pattern pplc( fname, dir, 'W');
	  n.push_back( pplc);
	}

	// Add volumes
	for ( int j = 0; j < volcount; j++) {
	  char dir[80];

	  if ( (vollist[j] >= cdh_cManufactClassVolMin && 
		vollist[j] <= cdh_cManufactClassVolMax) ||
	       (vollist[j] >= cdh_cSystemClassVolMin && 
		vollist[j] <= cdh_cSystemClassVolMax)) {
	    // Base volume, skip
	    continue;
	  }	       

	  strcpy( dir, "$pwrp_load/");
	  sprintf( fname, "%s%s.dbs", dir, cdh_Low( (char *)(volnamelist + j))); 
	  n.checkVolume( fname);

	  // Check if there are any rtt-files for Root or Sub Volumes
	  if ( vollist[j] >= cdh_cUserVolMin &&
	       vollist[j] <= cdh_cUserVolMax) {
	    cdh_uVolumeId	vid;
	    vid.pwr = vollist[j];

	    // RttCrr-file
	    strcpy( dir, "$pwrp_load/");
	    sprintf( fname, "%s" load_cNameRttCrr,
		dir, vid.v.vid_3, vid.v.vid_2, vid.v.vid_1, vid.v.vid_0);
	    pkg_pattern rttcrr( fname);
	    n.push_back( rttcrr);

	    // RttCrrObj-file
	    strcpy( dir, "$pwrp_load/");
	    sprintf( fname, "%s" load_cNameRttCrrObj,
		dir, vid.v.vid_3, vid.v.vid_2, vid.v.vid_1, vid.v.vid_0);
	    pkg_pattern rttcrrobj( fname);
	    n.push_back( rttcrrobj);

	    // RttCrrCode-file
	    strcpy( dir, "$pwrp_load/");
	    sprintf( fname, "%s" load_cNameRttCrrCode,
		dir, vid.v.vid_3, vid.v.vid_2, vid.v.vid_1, vid.v.vid_0);
	    pkg_pattern rttcrrcode( fname);
	    n.push_back( rttcrrcode);

	    // RttSignals

	    strcpy( dir, "$pwrp_load/");
	    sprintf( fname, "%s" load_cNameRttSignals,
		dir, vid.v.vid_3, vid.v.vid_2, vid.v.vid_1, vid.v.vid_0);
	    pkg_pattern rttsignals( fname);
	    n.push_back( rttsignals);

	  }
	}

	free( volnamelist);
	free( vollist);

      } catch ( wb_error &e) {
	if  ( e.what() == string("No such node"))
	  continue;
	throw wb_error_str(e.what());
      }
    }
    else if ( strcmp( cdh_Low(line_item[0]), "boot") == 0) {
      // A Sev node, only node and bootfile
      try {
	if ( !(num == 2))
	  throw wb_error_str("File corrupt " load_cNameDistribute);

	pkg_node &n = getNode( line_item[1]);
	// Add ld_node file
	sprintf( fname, load_cNameNode, load_cDirectory, n.name(), n.bus());
	pkg_pattern pnode( fname, "", 'E');
	n.push_back( pnode);
	
	// Add bootfile
	sprintf( fname, load_cNameBoot, load_cDirectory, n.name(), n.bus());
	pkg_pattern pboot( fname, "", 'E');
	n.push_back( pboot);
      } catch ( wb_error &e) {
	if  ( e.what() == string("No such node"))
	  continue;
	throw wb_error_str(e.what());
      }
    }
  }

  is.close();

  // Check that all nodes are valid
  for ( int i = 0; i < (int) m_nodelist.size(); i++) {
    if ( !m_nodelist[i].valid())
      throw wb_error_str( "Unknown node name");
  }
}
Example #10
0
pwr_tStatus rt_post::mh_alarm_bc( mh_sMessage *MsgP)
{
  ala_uEvent 	*event = (ala_uEvent *) MsgP;
  int sts;
  char str[256];
  char user[80];
  char group[80];
  char *s;
  pwr_tTime etime, current;
  pwr_tDeltaTime diff;
  int rcvnum;
  char rcv_array[10][80];
  char text[400];

  if ( !post || post->conf->Disable)
    return 1;

  if ( !event->Info.EventFlags & pwr_mEventFlagsMask_Email ||
       !event->Info.EventFlags & pwr_mEventFlagsMask_SMS)
    return 1;

  // Skip events older than 10 minutes
  etime = net_NetTimeToTime( &event->Info.EventTime);
  time_GetTime( &current);
  time_Adiff( &diff, &current, &etime);

  if ( time_DToFloat( 0, &diff) > 600)
    return 1;

  // Check if already handled
  if ( event->Info.EventFlags & pwr_mEventFlagsMask_Email) {
    if ( post->email_check( &event->Info.Id))
      return 1;
    else
      post->email_register( &event->Info.Id);
  }
  

  if ( event->Info.EventFlags & pwr_mEventFlagsMask_SMS) {
    if ( post->sms_check( &event->Info.Id))
      return 1;
    else
      post->sms_register( &event->Info.Id);
  }

  post->replace_symbol( str, event->Msg.Receiver);

  rcvnum = dcli_parse( str, ",", "",
		     (char *) rcv_array, sizeof( rcv_array)/sizeof( rcv_array[0]),
		     sizeof( rcv_array[0]), 0);
  
  for ( int i = 0; i < rcvnum; i++) {

    dcli_trim( str, rcv_array[i]);

    s = strrchr( str, '.');
    if ( s) {
      *s = 0;
      strncpy( group, post->systemgroup, sizeof(group));
      strncat( group, ".", sizeof(group));
      strncat( group, str, sizeof(group));
      strncpy( user, s+1, sizeof(user));
    }
    else {
      strncpy( group, post->systemgroup, sizeof(group));
      strncpy( user, str, sizeof(user));
    }
  
    SystemName *sn = new SystemName( group);
    sts = sn->parse();
    if ( EVEN(sts)) {
      delete sn;
      errh_Error( "Post systemgroup parse error, %m", sts);
      continue;
    }

    SystemList *sl = post->udb->find_system( sn);
    delete sn;
    if ( !sl) {
      errh_Error( "No such system group, %s", group);
      continue;
    }

    UserList *ul = (UserList *) sl->find_user( user);
    if ( !ul) {
      errh_Error( "No such user, %s", user);
      continue;
    }
  
    if ( event->Info.EventFlags & pwr_mEventFlagsMask_Email &&
	 strcmp( post->conf->EmailCmd, "") != 0) {
      char address[40];
      pwr_tCmd cmd;
      
      ul->get_email( address, sizeof(address));
      
      post->format_email_text( MsgP, text, sizeof(text));
      post->format_cmd( cmd,  post->conf->EmailCmd, address, text);

      if ( post->conf->Options & pwr_mPostOptionsMask_Log)
	errh_Info( "Email: %s", cmd);

      system( cmd);
      post->conf->SentEmail++;
      
    }
    if ( event->Info.EventFlags & pwr_mEventFlagsMask_SMS &&
	 strcmp( post->conf->SMS_Cmd, "") != 0) {
      char sms[40];
      pwr_tCmd cmd;
    
      ul->get_sms( sms, sizeof(sms));

      post->format_sms_text( MsgP, text, sizeof(text));
      post->format_cmd( cmd,  post->conf->SMS_Cmd, sms, text);
      
      if ( post->conf->Options & pwr_mPostOptionsMask_Log)
	errh_Info( "SMS: %s", cmd);

      system( cmd);
      post->conf->SentSMS++;
    }
  }
  return 1;
}
Example #11
0
void CLogNav::read( int *pos_list, int pos_cnt)
{
  char line[400];
  errh_eSeverity severity;
  pwr_tTime time;
  pwr_tTime ztime = {0,0};
  char time_str[40];
  char logger[40];
  int pid;
  int sts;
  FILE *fp;
  char filename[200];
  CLogMsg *msg;
  char tmpfile[200] = "/tmp/clog.tmp";
  int found;

  msg_list.clear();

  current_pos_low = file_list.size();
  current_pos_high = 0;
  for ( int i = file_list.size() - 1; i >=  0; i--) {
    found = 0;
    for ( int j = 0; j < pos_cnt; j++) {
      if ( pos_list[j] -1 == i) {
	found = 1;
	break;
      }
    }
    if ( !found)
      continue;

    if ( i + 1 > current_pos_high)
      current_pos_high = i + 1;
    if ( i + 1 < current_pos_low)
      current_pos_low = i + 1;

    if ( i == 0) {
      strcpy( filename, file_list[0].name);
      if ( strcmp( filename, "") == 0)
	continue;
    }
    else {
      // Unzip the file
      char cmd[300];
      
      sprintf( cmd, "zcat %s > %s", file_list[i].name, tmpfile);
      system( cmd);
      strcpy( filename, tmpfile);
    }

    fp = fopen( filename, "r");
    if ( !fp)
      return;

    while( 1) {
      sts = dcli_read_line( line, sizeof(line), fp);
      if ( !sts)
	break;

      if ( line[1] == ' ' && line[27] == ' ' &&
	   (line[0] == 'S' || line[0] == 'I' || line[0] == 'W' || 
	    line[0] == 'E' || line[0] == 'F')) {
	switch ( line[0]) {
	case 'S': severity = errh_eSeverity_Success; break;
	case 'I': severity = errh_eSeverity_Info; break;
	case 'W': severity = errh_eSeverity_Warning; break;
	case 'E': severity = errh_eSeverity_Error; break;
	case 'F': severity = errh_eSeverity_Fatal; break;
	default: ;
	}
	strncpy( logger, &line[2], 18);
	logger[18] = 0;

	sts = sscanf( &line[22], "%d", &pid);
	if ( sts != 1)
	  pid = 0;
	
	strncpy( &time_str[2], &line[28], 20);
	time_str[0] = '2';
	time_str[1] = '0';
	time_str[22] = 0;
	time_FormAsciiToA( time_str, HUNDRED, GB, &time);

	msg = new CLogMsg( severity, logger, pid, time, &line[49]);
	msg_list.push_back(*msg);
	delete msg;
      }
      else {
	dcli_trim( line, line);
	msg = new CLogMsg( errh_eSeverity_Null, "", 0, ztime, line);
	msg_list.push_back(*msg);
	delete msg;
      }
    }
    fclose( fp);
    if ( i != 0)
      unlink( filename);
  }
  draw();
}
Example #12
0
int main(  int argc, char *argv[])
{
  pwr_tFileName filespec;
  pwr_tFileName outfile;
  pwr_tFileName found_file;
  merge_eMtype mtype;
  FILE *fp;
  FILE *outfp;
  char line[200];
  int sts;
  char mtab[1000][32];
  int mtabcnt = 0;
  int i;
  int idx;
  pwr_tCmd cmd;
  pwr_tFileName incdir;
  pwr_tFileName cfile;
  pwr_tFileName ofile;
  char pwre_cc[250];
  char pwre_cxx[250];
  char pwre_ar[250];
  char *s;
  int arg_keep = 0;
  int arg_verbose = 0;
  int in_if = 0;
#if defined OS_LINUX
  char os[] = "OS_LINUX";
  char dos[] = "-DOS_LINUX -DOS_POSIX";
  char cflags[] = "";
#elif defined OS_MACOS
  char os[] = "OS_MACOS";
  char dos[] = "-DOS_MACOS -DOS_POSIX";
  char cflags[] = "";
#elif defined OS_FREEBSD
  char os[] = "OS_FREEBSD";
  char dos[] = "-DOS_FREEBSD -DOS_POSIX";
  char cflags[] = "";
#elif defined OS_OPENBSD
  char os[] = "OS_OPENBSD";
  char dos[] = "-DOS_OPENBSD -DOS_POSIX";
  char cflags[] = "";
#elif defined OS_CYGWIN
  char os[] = "OS_CYGWIN";
  char dos[] = "-DOS_CYGWIN -DOS_POSIX";
  char cflags[] = "-I/usr/include/tirpc";
#endif
  if ( argc < 4) {
    usage();
    exit(1);
  }

  if ( (s = getenv( "pwre_cc")))
    strncpy( pwre_cc, s, sizeof(pwre_cc));
  else
    strncpy( pwre_cc, "gcc", sizeof(pwre_cc));
  if ( (s = getenv( "pwre_cxx")))
    strncpy( pwre_cxx, s, sizeof(pwre_cxx));
  else
    strncpy( pwre_cxx, "g++", sizeof(pwre_cxx));
  if ( (s = getenv( "pwre_ar")))
    strncpy( pwre_ar, s, sizeof(pwre_ar));
  else
    strncpy( pwre_ar, "ar", sizeof(pwre_ar));


  idx = 0;
  for ( i = 1; i < argc; i++) {
    if ( strcmp( argv[i], "-k") == 0)
      arg_keep = 1;
    else if ( strcmp( argv[i], "-v") == 0)
      arg_verbose = 1;
    else {
      switch ( idx) {
	case 0:
	  if ( strcmp( argv[i], "io_base") == 0)
   	    mtype = merge_eMtype_IoBase;
  	  else if ( strcmp( argv[i], "wb_base") == 0)
    	    mtype = merge_eMtype_WbBase;
  	  else if ( strcmp( argv[i], "xtt_base") == 0)
    	    mtype = merge_eMtype_XttBase;
  	  else {
    	   usage();
    	   exit(1);
  	  }
	  idx++;
	  break;
	case 1:
	  strncpy( filespec, argv[i], sizeof(filespec));
	  idx++;
	  break;
	case 2:
	  strncpy( outfile, argv[i], sizeof(filespec));
	  idx++;
	  break;
      }
    }
  }
  sts = dcli_search_file( filespec, found_file, DCLI_DIR_SEARCH_INIT);
  while ( ODD(sts)) {
    fp = fopen( found_file, "r");
    if ( !fp) {
      printf( "Unable to open file %s\n", found_file);
      exit(1);
    }

    while( dcli_read_line( line, sizeof(line), fp)) {
      dcli_trim( line, line);
      if ( strncmp( line, "#if" , 3) == 0) {
        in_if = ! check_os( &line[4], os);
        continue;
      }
      else if ( in_if) {
        if ( strncmp( line, "#endif", 6) == 0) {
          if ( in_if)
	    in_if = 0;
	  continue;
        }
        continue;
      }
      else if ( line[0] == 0 || line[0] == '#')
	continue;
      strncpy( mtab[mtabcnt++], line, sizeof(mtab[0]));
      if ( mtabcnt > (int) sizeof(mtab)/sizeof(mtab[0]) - 1)
	break;
    }    

    fclose( fp);
    sts = dcli_search_file( filespec, found_file, DCLI_DIR_SEARCH_NEXT);
  }
  dcli_search_file( filespec, found_file, DCLI_DIR_SEARCH_END);

  switch ( mtype) {
  case merge_eMtype_IoBase: {
    strncpy( cfile, "/tmp/rt_io_base_methods.c", sizeof(cfile));
    strncpy( ofile, "/tmp/rt_io_base_methods.o", sizeof(cfile));

    outfp = fopen( cfile, "w");
    if ( !outfp) {
      printf( "Unable to open file %s\n", outfile);
      exit(1);
    }

    fprintf( outfp, "#include \"rt_io_base.h\"\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "pwr_dImport pwr_BindIoMethods(%s);\n", mtab[i]);
    }
  
    fprintf( outfp, "pwr_BindIoClasses(Base) = {\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "  pwr_BindIoClass(%s),\n", mtab[i]);    
    }
    fprintf( outfp, "  pwr_NullClass};\n");    
    fclose( outfp);
    break;
  }
  case merge_eMtype_WbBase: {
    strncpy( cfile, "/tmp/wb_i_base_methods.cpp", sizeof(cfile));
    strncpy( ofile, "/tmp/wb_i_base_methods.o", sizeof(cfile));

    outfp = fopen( cfile, "w");
    if ( !outfp) {
      printf( "Unable to open file %s\n", outfile);
      exit(1);
    }

    fprintf( outfp, "#include \"wb_pwrs.h\"\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "pwr_dImport pwr_BindMethods(%s);\n", mtab[i]);
    }
  
    fprintf( outfp, "pwr_BindClasses(Base) = {\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "  pwr_BindClass(%s),\n", mtab[i]);    
    }
    fprintf( outfp, "  pwr_NullClass};\n");    
    fclose( outfp);
    break;
  }
  case merge_eMtype_XttBase: {
    strncpy( cfile, "/tmp/xtt_i_methods.c", sizeof(cfile));
    strncpy( ofile, "/tmp/xtt_i_methods.o", sizeof(cfile));

    outfp = fopen( cfile, "w");
    if ( !outfp) {
      printf( "Unable to open file %s\n", outfile);
      exit(1);
    }

    fprintf( outfp, "#include \"xtt_menu.h\"\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "pwr_dImport pwr_BindXttMethods(%s);\n", mtab[i]);
    }
  
    fprintf( outfp, "pwr_BindXttClasses(Base) = {\n");
    for ( i = 0; i < mtabcnt; i++) {
      fprintf( outfp, "  pwr_BindXttClass(%s),\n", mtab[i]);    
    }
    fprintf( outfp, "  pwr_NullClass};\n");    
    fclose( outfp);
    break;
  }
  }

  dcli_translate_filename( incdir, "$pwr_einc");
  switch ( mtype) {
  case merge_eMtype_WbBase:
    snprintf( cmd, sizeof(cmd), "%s -c %s -I%s %s -o %s %s", pwre_cxx, cflags, incdir, dos, ofile, cfile);
    break;
  default:
    snprintf( cmd, sizeof(cmd), "%s -c %s -I%s %s -o %s %s", pwre_cc, cflags, incdir, dos, ofile, cfile);
  }
  if ( arg_verbose)
    printf( "co_merge: %s\n", cmd);
  system( cmd);
  snprintf( cmd, sizeof(cmd), "%s r %s %s", pwre_ar, outfile, ofile);
  if ( arg_verbose)
    printf( "co_merge: %s\n", cmd);
  system(cmd);
  snprintf( cmd, sizeof(cmd), "rm %s", ofile);
  system(cmd);
  if ( !arg_keep) {
    snprintf( cmd, sizeof(cmd), "rm %s", cfile);
    system(cmd);
  }
  return 1;
}
Example #13
0
void wb_pvd_gvl::load( pwr_tStatus *rsts)
{
  char line[200];
  char line_item[6][80];
  int num;
  ifstream is;
  pwr_tFileName fname;
  int line_cnt = 0;
  pwr_tStatus sts;
  int menu_stack[100];
  int menu_cnt = 0;
  char description[80];

  *rsts = LDH__SUCCESS;

  // Create Root object
  procom_obj rootitem;
  strcpy( rootitem.name, "GlobalVolumeList");
  rootitem.cid = pwr_eClass_Hier;
  rootitem.oix = 0; 
  m_list.push_back(rootitem);
  menu_stack[menu_cnt] = rootitem.oix;
  menu_cnt++;

  dcli_translate_filename( fname, "$pwra_db/pwr_volumelist.dat");
  is.open( fname);
  if ( !is) {
    *rsts = LDH__NEWFILE;
    return;
  }

  while ( is.getline( line, sizeof(line))) {
    line_cnt++;
    if ( line[0] == '!') {
      if ( strncmp( line, "!**Menu", 7) == 0) {
	// Add Hier
	char *s = strstr( line, "// ");
	if ( s) {
	  strncpy( description, s+3, sizeof(description));
	  description[sizeof(description)-1] = 0;
	}
	else
	  strcpy( description, "");

	num = dcli_parse( line, " 	", "", (char *)line_item,
		     sizeof(line_item)/sizeof(line_item[0]),
		     sizeof(line_item[0]), 0);
	if ( num < 3) {
	  cout << "Syntax error " << fname << " row " << line_cnt << endl;
	  continue;
	}

	procom_obj plantitem;
	strcpy( plantitem.name, line_item[1]);
	plantitem.cid = pwr_eClass_Hier;
	plantitem.oix = next_oix++;
	plantitem.fthoix = menu_stack[menu_cnt - 1];
	plantitem.bwsoix = m_list[plantitem.fthoix].lchoix;
	plantitem.fwsoix = 0;
	plantitem.body_size = sizeof(pwr_sHier);
	pwr_sHier *plantbody = (pwr_sHier *) calloc( 1, plantitem.body_size); 
	plantitem.body = plantbody;
	strcpy( plantbody->Description, description);

	m_list.push_back(plantitem);

	if ( plantitem.bwsoix != 0)
	  m_list[plantitem.bwsoix].fwsoix = plantitem.oix;
	m_list[plantitem.fthoix].lchoix = plantitem.oix;
	if ( m_list[plantitem.fthoix].fchoix == 0)
	  m_list[plantitem.fthoix].fchoix = plantitem.oix;

	menu_stack[menu_cnt] = plantitem.oix;
	menu_cnt++;
      }
      else if ( strncmp( line, "!**}", 4) == 0) {
	if ( menu_cnt == 0) {
	  cout << "Syntax error " << fname << " row " << line_cnt << endl;
	  continue;
	}
	menu_cnt--;
      }
      continue;
    }
    dcli_trim( line, line);

    num = dcli_parse( line, " 	", "", (char *)line_item,
		     sizeof(line_item)/sizeof(line_item[0]),
		     sizeof(line_item[0]), 0);
    if ( num != 3) {
      cout << "Syntax error " << fname << " row " << line_cnt << endl;
      continue;
    }

    procom_obj volitem;
    strcpy( volitem.name, line_item[0]);
    
    volitem.body_size = sizeof(pwr_sClass_VolumeReg);
    pwr_sClass_VolumeReg *volbody = 
      (pwr_sClass_VolumeReg *) calloc( 1, volitem.body_size);

    volitem.body = volbody;
    strcpy( volbody->Project, line_item[2]);
    sts = cdh_StringToVolumeId( line_item[1], &volbody->VolumeId);
    if ( EVEN(sts)) {
      cout << "Syntax error " << fname << " row " << line_cnt << endl;
      continue;
    }

    volitem.cid = pwr_cClass_VolumeReg;
    volitem.oix = next_oix++;
    volitem.fthoix = menu_stack[menu_cnt - 1];
    volitem.bwsoix = m_list[volitem.fthoix].lchoix;
    volitem.fwsoix = 0;
    strcpy( volbody->Description, line_item[1]);
    for ( int i = strlen(volbody->Description); i < 18; i++)
      strcat( volbody->Description, " ");
    strcat( volbody->Description, line_item[2]);

    m_list.push_back(volitem);

    if ( volitem.bwsoix != 0)
      m_list[volitem.bwsoix].fwsoix = volitem.oix;
    m_list[volitem.fthoix].lchoix = volitem.oix;
    if ( m_list[volitem.fthoix].fchoix == 0)
      m_list[volitem.fthoix].fchoix = volitem.oix;

  }
}
Example #14
0
static pwr_tStatus ConfigureComponent( ldh_sMenuCall *ip) 
{
  pwr_tStatus sts;
  unsigned int disable_mask;
  pwr_sMenuButton   mb;
  pwr_tEnum graph_configuration;
  pwr_sAttrRef aaref;
  char vect[10][80];
  char item[3][80];
  int i;
  int nr;
  int vect_cnt;
  
  sts = ldh_ReadObjectBody(ip->PointedSession, ip->ItemList[ip->ChosenItem].MenuObject,
    "SysBody", &mb, sizeof(pwr_sMenuButton));

  // Reset previoius disable configuration
  configure_object_reset( ip, &ip->Pointed, &mb);

  // Set disable attributes from argument 0
  if ( mb.MethodArguments[0][0] != '(') {
    // Old syntax, eg '7, CircuitBreaker 4, Contactor 5'
    vect_cnt = dcli_parse( mb.MethodArguments[0], ",", "", (char *)vect, 
			   sizeof( vect) / sizeof( vect[0]), 
			   sizeof( vect[0]), 0);
  
    for ( i = 0; i < vect_cnt; i++) {
      nr = dcli_parse( vect[i], " 	", "", (char *)item,
		       sizeof( item) / sizeof( item[0]), 
		       sizeof( item[0]), 0);
      if ( nr == 1) {
	
	if ( sscanf( item[0], "%d", &disable_mask) != 1)
	  graph_configuration = 0;

	sts = configure_object( ip, &ip->Pointed, disable_mask);
	if ( EVEN(sts)) return sts;
      }
      else if ( nr == 2) {
	pwr_tAName aname;
	
	if ( sscanf( item[1], "%d", &disable_mask) != 1)
	  disable_mask = 0;

	strncpy( aname, item[0], sizeof(aname));
	
	sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, 
				   &aaref);
	if ( ODD(sts)) {
	  sts = configure_object( ip, &aaref, disable_mask);
	  if ( EVEN(sts)) return sts;
	}
      }
    }
  }
  else {
    // New syntax, eg '(7 (CircuitBreaker 4, Contactor 5))'
    char str1[256];
    char *s;

    strncpy( str1, &mb.MethodArguments[0][1], sizeof(str1));
    s = strrchr( str1, ')');
    if ( !s)
      return LDH__COMPSYNTAX;

    *s = 0;
    
    dcli_trim( str1, str1);
    nr = sscanf( str1, "%d", &disable_mask);
    if ( nr != 1)
      return LDH__COMPSYNTAX;

    sts = configure_object( ip, &ip->Pointed, disable_mask);
    if ( EVEN(sts)) return sts;

    sts = configure_attrmask( ip, &ip->Pointed, str1);
    if ( EVEN(sts)) return sts;
  }

  // Set GraphConfiguration from argument 1
  vect_cnt = dcli_parse( mb.MethodArguments[1], ",", "", (char *)vect, 
		   sizeof( vect) / sizeof( vect[0]), 
		   sizeof( vect[0]), 0);
  
  for ( i = 0; i < vect_cnt; i++) {
    nr = dcli_parse( vect[i], " 	", "", (char *)item,
		   sizeof( item) / sizeof( item[0]), 
		   sizeof( item[0]), 0);
    if ( nr == 1) {

      if ( sscanf( item[0], "%d", &graph_configuration) != 1)
	graph_configuration = 0;

      sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, "GraphConfiguration", 
				 &aaref);
      if ( ODD(sts)) {
	sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, 
				  sizeof(graph_configuration));
	if ( EVEN(sts)) return sts;
      }
    }
    else if ( nr == 2) {
      pwr_tAName aname;

      if ( sscanf( item[1], "%d", &graph_configuration) != 1)
	graph_configuration = 0;

      strncpy( aname, item[0], sizeof(aname));
      strncat( aname, ".GraphConfiguration", sizeof(aname));

      sts = ldh_ArefANameToAref( ip->PointedSession, &ip->Pointed, aname, 
				 &aaref);
      if ( ODD(sts)) {
	sts = ldh_WriteAttribute( ip->PointedSession, &aaref, (void *)&graph_configuration, 
				  sizeof(graph_configuration));
	if ( EVEN(sts)) return sts;
      }
    }
  }
  return 1;
}
Example #15
0
static pwr_tStatus configure_object_reset( ldh_sMenuCall *ip, pwr_sAttrRef *aref,
					   pwr_sMenuButton *mb)
{
  pwr_tStatus 	sts;
  pwr_tCid 	cid;
  ldh_sParDef 	*bodydef;
  int 		rows;
  int		i, j;
  pwr_sAttrRef  aaref, daref;
  pwr_tDisableAttr disable = 0;
  char 		vect[10][80];
  int 		vect_cnt;
  int 		skip;
  char		*s;
  
  // Attribute objects in argument 2 are not controlled by the configure method
  if ( mb) {
    vect_cnt = dcli_parse( mb->MethodArguments[2], ",", "", (char *)vect, 
			   sizeof( vect) / sizeof( vect[0]), 
			   sizeof( vect[0]), 0);
    for ( j = 0; j < vect_cnt; j++)
      dcli_trim( vect[j], vect[j]);
  }
  else
    vect_cnt = 0;

  sts = ldh_GetAttrRefTid( ip->PointedSession, aref, &cid);
  if ( EVEN(sts)) return sts;

  sts = ldh_GetObjectBodyDef( ip->PointedSession, cid, "RtBody", 1,
				  &bodydef, &rows);
  if (EVEN(sts)) return sts;

  for ( i = 0; i < rows; i++) {

    // Check if attribute is controlled by this method
    skip = 0;
    if ( mb) {
      // Remove leading Super.
      s = bodydef[i].ParName;
      while ( strncmp( s, "Super.", 6) == 0)
	s += 6;
      for ( j = 0; j < vect_cnt; j++) {
	if ( cdh_NoCaseStrcmp( vect[j], s) == 0) {
	  // This object should not be reset
	  skip = 1;
	  break;
	}
      }
      if ( skip)
	continue;
    }

    if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_DISABLEATTR) {
      // Enable all attributes
      sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref);
      if ( EVEN(sts)) return sts;

      daref = cdh_ArefToDisableAref( &aaref);

      sts = ldh_WriteAttribute( ip->PointedSession, &daref, (void *)&disable, 
				sizeof(disable));
      if ( EVEN(sts)) return sts;
    }

    if ( bodydef[i].Par->Param.Info.Flags & PWR_MASK_CLASS) {
      // Reset object attribute
      sts = ldh_ArefANameToAref( ip->PointedSession, aref, bodydef[i].ParName, &aaref);
      if ( EVEN(sts)) return sts;

      sts = configure_object_reset( ip, &aaref, 0);
      if ( EVEN(sts)) return sts;
    }
  }
  free( (char *)bodydef);

  return LDH__SUCCESS;
}
int XttHotkey::read_file()
{
  FILE *fp;
  char line[200];
  int row = 0;
  char p1[2][200];
  char p2[10][200];
  int i, n;
  char *s;

  dcli_translate_filename( m_filename, m_filename);
  fp = fopen( m_filename, "r");
  if ( !fp)
    return 0;

  while ( dcli_read_line( line, sizeof(line), fp)) {
    int mod = 0;
    int keysym;
    char keystr[20] = "";
    char action_arg[200];
    char action_name[200];

    row++;

    dcli_trim( line, line);
    if ( line[0] == 0 || line[0] == '#')
      continue;

    n = dcli_parse( line, ":", "", (char *)p1, 
		    sizeof( p1) / sizeof( p1[0]), sizeof( p1[0]), 0);
    if ( n != 2) {
      printf( "Syntax error, %s, row %d\n", m_filename, row);
      continue;
    }
    dcli_trim( p1[0], p1[0]);
    dcli_trim( p1[1], p1[1]);

    n = dcli_parse(  p1[0], " 	", "", (char *)p2, 
		    sizeof( p2) / sizeof( p2[0]), sizeof( p2[0]), 0);
    if ( n < 1) {
      printf( "Syntax error, %s, row %d\n", m_filename, row);
      continue;
    }
    for ( i = 0; i < n; i++) {
      if ( cdh_NoCaseStrcmp( p2[i], "Control") == 0)
	mod |= ControlMask;
      else if ( cdh_NoCaseStrcmp( p2[i], "Shift") == 0)
	mod |= ShiftMask; 
      else if ( cdh_NoCaseStrcmp( p2[i], "Alt") == 0)
	mod |= Mod1Mask; 
      else if ( cdh_NoCaseStrncmp( p2[i], "<key>", 5) == 0) {
	strcpy( keystr, &p2[i][5]);
      	dcli_trim( keystr, keystr);
      }
      else {
	printf( "Syntax error, %s, row %d\n", m_filename, row);
	break;
      }
    }

    n = dcli_parse(  p1[1], "(", "", (char *)p2, 
		     sizeof( p2) / sizeof( p2[0]), sizeof( p2[0]), 0);
    if ( n < 2) {
      printf( "Syntax error, %s, row %d\n", m_filename, row);
      continue;
    }
    strcpy( action_name, p2[0]);
    dcli_trim( action_name, action_name);
    strcpy( action_arg, p2[1]);
    if ( (s = strrchr( action_arg, ')')))
      *s = 0;
    else {
      printf( "Syntax error, %s, row %d\n", m_filename, row);
      continue;
    }
    keysym = XStringToKeysym( keystr);
    if ( !keysym) {
      printf( "Syntax error, %s, row %d\n", m_filename, row);
      continue;
    }

    HotkeyKey key( mod, keysym, action_name, action_arg);
    m_keys.push_back( key);
  }

  fclose( fp);

  for ( i = 0; i < (int)m_keys.size(); i++) {
    grab_key( m_keys[i].m_keysym, m_keys[i].m_mod);
  }

  return 1;
}