예제 #1
0
int PalFile::check_volume( ldh_tSession ldhses, char *name)
{
  pwr_tClassId classid;
  pwr_tVolumeId volume;
  int sts;
  int size;
  char volume_name[80];

  // Find a class volume with this name
  sts = ldh_GetVolumeList( ldh_SessionToWB(ldhses), &volume);
  while ( ODD(sts))
  {
    sts = ldh_GetVolumeClass( ldh_SessionToWB(ldhses), volume, &classid);
    if ( EVEN(sts)) return 0;

    if ( cdh_isClassVolumeClass( classid))
    {
      sts = ldh_VolumeIdToName( ldh_SessionToWB(ldhses),
		volume, volume_name, sizeof(volume_name), &size);
      if ( EVEN(sts)) return 0;

      if ( !cdh_NoCaseStrcmp( volume_name, name))
        return 1;
    }
    sts = ldh_GetNextVolume( ldh_SessionToWB(ldhses), volume, &volume);
  }
  return 0;
}
예제 #2
0
void wb_build::plcpgm( pwr_tOid oid)
{
  int check_hierarchy = cdh_ObjidIsNotNull( m_hierarchy);
  int hierarchy_found = 0;

  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;
  }

  m_sts = utl_compile( (ldh_tSession *)&m_session, ldh_SessionToWB( (ldh_tSession *)&m_session), 
		     o.longName().name(cdh_mName_volumeStrict), 0, 0, 0, 
		      !opt.force, opt.debug, 0, 0); 
  if ( oddSts() && m_sts != GSX__NOMODIF) {
    char msg[200];

    sprintf( msg, "Build:    PlcPgm    %s", o.longName().name(cdh_mName_path | cdh_mName_object));
    MsgWindow::message('I', msg, msgw_ePop_No, oid);
  }
  else if ( m_sts == GSX__NOMODIF) {
    m_sts = PWRB__NOBUILT;
  }
  else {
    char msg[500];
    char msg2[256];
    msg_GetMsg( m_sts, msg, sizeof(msg));
    sprintf( msg2, ", PlcPgm %s", o.longName().name(cdh_mName_path | cdh_mName_object));
    strcat( msg, msg2);
    MsgWindow::message('E', msg, msgw_ePop_Yes, oid, true);
  }
}
예제 #3
0
//
// Help for class of an object in wnav
//
static pwr_tStatus HelpClass( ldh_sMenuCall *ip) 
{
  pwr_tStatus sts;
  int size;
  char cname[32];
  char vname[32];
  char cmd[200];
  pwr_tCid cid;
  pwr_tVid vid;
  
  sts = ldh_GetAttrRefTid( ip->PointedSession, &ip->Pointed, &cid);
  if ( EVEN(sts)) return sts;

  sts = ldh_ClassIdToName( ip->PointedSession, cid, cname, sizeof(cname), &size);
  if ( EVEN(sts)) return sts;

  vid = cdh_CidToVid(cid);
  if ( cdh_cManufactClassVolMin <= vid && vid <= cdh_cManufactClassVolMax) {
    /* Get help file for this volume */
    sts = ldh_VolumeIdToName( ldh_SessionToWB(ip->PointedSession), vid, vname, sizeof(vname), &size);
    if ( EVEN(sts)) return sts;

    cdh_ToLower( vname, vname);
    snprintf( cmd, sizeof(cmd), "help %s /helpfile=\"$pwr_exe/%s/%s_xtthelp.dat\"/strict", cname, 
	     lng_get_language_str(), vname);

    ip->wnav->command( cmd);
    return 1;
  }

  if ( cname[0] == '$')
    snprintf( cmd, sizeof(cmd), "help %s /strict", &cname[1]);
  else
    snprintf( cmd, sizeof(cmd), "help %s /strict", cname);

  ip->wnav->command( cmd);
  return 1;
}
예제 #4
0
void wb_build::node( char *nodename, void *volumelist, int volumecnt)
{
  lfu_t_volumelist *vlist = (lfu_t_volumelist *)volumelist;
  pwr_tTime vtime;
  pwr_tTime btime;
  pwr_tFileName fname;
  pwr_tObjName vname;
  int bussid = -1;
  int rebuild = 1;
  pwr_tStatus status;
  char currentnode[80];
  char node[80];
  pwr_tStatus sumsts;

  printf( "-- Build node %s\n", nodename);

  wb_log::push();

  if ( !opt.manual) {
    // Check if there is any new dbsfile
    rebuild = 0;
    for ( int i = 0; i < volumecnt; i++) {
      if ( cdh_NoCaseStrcmp( nodename, vlist[i].p1) == 0) {
	if ( bussid == -1) {
	  char systemname[80], systemgroup[80];
	  pwr_tVid *vl;
	  pwr_tString40 *vnl;
	  int vcnt;
	
	  // Get time for current bootfile
	  status = sscanf( vlist[i].p3, "%d", &bussid);
	  if ( status != 1) {
	    // Bussid error
	  }
	
	  sprintf( fname, load_cNameBoot, 
		   load_cDirectory, vlist[i].p2, bussid);
	  cdh_ToLower( fname, fname);
	  dcli_translate_filename( fname, fname);
	  status = lfu_ReadBootFile( fname, &btime, systemname, systemgroup, &vl, &vnl, 
				     &vcnt, 0, 0);
	  if ( EVEN(status)) {
	    rebuild = 1;
	  }	 
	  strcpy( node, vlist[i].p2);
	}
      
	if ( vlist[i].volume_id == m_session.vid()) {
	  // Build current volume
	  volume();
	  if ( evenSts()) 
	    return;
	}
      
	cdh_ToLower( vname, vlist[i].volume_name);
	if ( vlist[i].volume_id >= cdh_cUserVolMin &&
	     vlist[i].volume_id <= cdh_cUserVolMax) {
	  sprintf( fname, "$pwrp_load/%s.dbs", vname);
	  dcli_translate_filename( fname, fname);
	  m_sts = dcli_file_time( fname, &vtime);
	  if ( evenSts()) {
	    // Dbs file is missing
	    char msg[200];
	    sprintf( msg, "Loadfile for volume %s not created", vname);
	    MsgWindow::message('E', msg, msgw_ePop_Yes);
	    return;
	  }
	  if ( vtime.tv_sec > btime.tv_sec)
	    rebuild = 1;
	}
      }
    }
  }
  wb_log::pull();

  if ( m_wnav && m_wnav->ldhses) {
    wb_erep *erep = *(wb_env *)ldh_SessionToWB( m_wnav->ldhses);
    erep->checkVolumes( &m_sts, nodename);

    if ( evenSts())
      return;
  }

  if ( opt.force || opt.manual || rebuild) {

    m_sts = lfu_create_bootfile( nodename, (lfu_t_volumelist *)volumelist, volumecnt,
				 opt.debug);
    if ( ODD(m_sts))
      wb_log::log( wlog_eCategory_NodeBuild, nodename, 0);      
  }
  else
    m_sts = PWRB__NOBUILT;


  sumsts = m_sts;

  syi_NodeName( &m_sts, currentnode, sizeof(currentnode));

  // if ( cdh_NoCaseStrcmp( node, currentnode) == 0) 
  {
    pwr_tFileName src_fname, dest_fname;
    pwr_tCmd	cmd;
    pwr_tTime	dest_time, src_time;


    // Copy xtt_help.dat from $pwrp_cnf to $pwrp_exe
    sprintf( src_fname, "$pwrp_cnf/%s/xtt_help.dat", node);
    dcli_translate_filename( src_fname, src_fname);
    m_sts = dcli_file_time( src_fname, &src_time);
    if ( evenSts()) {
      strcpy( src_fname, "$pwrp_cnf/xtt_help.dat");
      dcli_translate_filename( src_fname, src_fname);
      m_sts = dcli_file_time( src_fname, &src_time);
      if ( evenSts()) {
	char msg[200];
	sprintf( msg, "File is missing $pwrp_cnf/xtt_help.dat");
	MsgWindow::message('E', msg, msgw_ePop_Yes);
      }
    }

    if ( oddSts()) {
      strcpy( dest_fname, "$pwrp_exe/xtt_help.dat");
      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:    Copy %s -> $pwrp_exe", src_fname);
	MsgWindow::message( 'I', cmd, msgw_ePop_No);
	m_sts = PWRB__SUCCESS;
      }
      else
	m_sts = PWRB__NOBUILT;
    }  
    if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT)
      sumsts = m_sts;

    // Copy pwrp_alias.dat from $pwrp_cnf to $pwrp_load
    sprintf( src_fname, "$pwrp_cnf/%s/pwrp_alias.dat", node);
    dcli_translate_filename( src_fname, src_fname);
    m_sts = dcli_file_time( src_fname, &src_time);
    if ( evenSts()) {
      strcpy( src_fname, "$pwrp_cnf/pwrp_alias.dat");
      dcli_translate_filename( src_fname, src_fname);
      m_sts = dcli_file_time( src_fname, &src_time);
    }
    
    if ( oddSts()) {
      strcpy( dest_fname, "$pwrp_load/pwrp_alias.dat");
      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:    Copy %s -> $pwrp_load", src_fname);
	MsgWindow::message( 'I', cmd, msgw_ePop_No);
	m_sts = PWRB__SUCCESS;
      }
      else
	m_sts = PWRB__NOBUILT;
    }
    else
      m_sts = PWRB__NOBUILT;

    if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT)
      sumsts = m_sts;

    // Copy ld_appl_...txt from $pwrp_cnf to $pwrp_load
    sprintf( src_fname, load_cNameAppl, "$pwrp_cnf", cdh_Low(node), bussid);
    dcli_translate_filename( src_fname, src_fname);
    m_sts = dcli_file_time( src_fname, &src_time);
    if ( evenSts()) {
      char dir[80];
      strcpy( dir, "$pwrp_cnf/");
      sprintf( src_fname, load_cNameAppl, dir, cdh_Low(node), bussid);
      dcli_translate_filename( src_fname, src_fname);
      m_sts = dcli_file_time( src_fname, &src_time);
    }

    if ( oddSts()) {
      sprintf( dest_fname, load_cNameAppl, "$pwrp_load/", cdh_Low(node), bussid);
      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:    %s -> $pwrp_load", src_fname);
	MsgWindow::message( 'I', cmd, msgw_ePop_No);
	m_sts = PWRB__SUCCESS;
      }
      else
	m_sts = PWRB__NOBUILT;
    }
    else
      m_sts = PWRB__NOBUILT;

    if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT)
      sumsts = m_sts;
  }

  if ( sumsts != PWRB__NOBUILT) {
    char msg[200];

    sprintf( msg, "Build:    Node     %s", nodename);
    MsgWindow::message('I', msg, msgw_ePop_No);
  }

  m_sts = sumsts;
}