int xnav_open_URL( pwr_tURL url) { char cmd[200]; int sts; pwr_sClass_WebBrowserConfig *config_p = 0; char browser[40] = "firefox"; pwr_tObjid config_objid; sts = gdh_GetClassList( pwr_cClass_WebBrowserConfig, &config_objid); if ( ODD(sts)) sts = gdh_ObjidToPointer( config_objid, (void **)&config_p); if ( ODD(sts)) { if ( strcmp( config_p->WebBrowser, "") != 0) strcpy( browser, config_p->WebBrowser); } if ( strncmp( url, "$pwr_lang/", 10) == 0) { // If file in $pwr_lang, check if file exist, else take en_us if ( Lng::current() != lng_eLanguage_en_US) { pwr_tURL testurl; pwr_tTime t; replace_symbol( url, testurl, config_p); dcli_translate_filename( testurl, testurl); sts = dcli_file_time( testurl, &t); if ( EVEN(sts)) { // Try en_us strcpy( testurl, "$pwr_doc/en_us/"); strcat( testurl, &url[10]); strcpy( url, testurl); } } } replace_symbol( url, url, config_p); if ( strcmp( browser, "mozilla") == 0 || strcmp( browser, "rt_mozilla") == 0) { // Try remote display first sprintf( cmd, "%s -remote \"openurl(%s,new-window)\"", browser, url); sts = system(cmd); if ( sts) { // Not started yet sprintf( cmd, "%s %s &", browser, url); system( cmd); } } else { sprintf( cmd, "%s %s &", browser, url); system( cmd); } return XNAV__SUCCESS; }
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; } }
void wb_build::xttgraph( pwr_tOid oid) { pwr_tFileName src_fname, dest_fname; pwr_tCmd cmd; pwr_tString80 action; 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 java_name[80]; pwr_tStatus fsts; int jexport; 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", "Action"); if ( !a) { m_sts = a.sts(); return; } a.value( &action); if ( !a) { m_sts = a.sts(); return; } if ( strstr( action, ".pwg")) { strcpy( src_fname, "$pwrp_pop/"); strcat( src_fname, action); 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_exe/"); strcat( dest_fname, action); 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: XttGraph copy $pwrp_pop/%s -> $pwrp_exe", action); MsgWindow::message( 'I', cmd, msgw_ePop_No, oid); strcpy( name, action); if (( s = strrchr( name, '.'))) *s = 0; wb_log::log( wlog_eCategory_GeBuild, name, 0); m_sts = PWRB__SUCCESS; } else m_sts = PWRB__NOBUILT; jexport = 0; fsts = grow_IsJava( src_fname, &is_frame, &is_applet, java_name); if ( EVEN(fsts)) { m_sts = fsts; return; } if ( (is_frame || is_applet) && strcmp( java_name, "") == 0) { // Java name is not yet set, use the default java name strcpy( java_name, action); if ( (s = strchr( java_name, '.')) != 0) *s = 0; java_name[0] = _toupper( java_name[0]); } if ( is_frame) { // Check exported java frame 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 ( is_applet) { // Check exported java applet sprintf( dest_fname, "$pwrp_pop/%s_A.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: XttGraph Unable to export java in this environment %s", action); MsgWindow::message('W', cmd, msgw_ePop_No, oid); } else { Ge *gectx = m_wnav->ge_new( action, 1); strcpy( cmd, "export java"); 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; } sprintf( cmd, "Build: XttGraph Export java %s", action); MsgWindow::message('I', cmd, msgw_ePop_No, oid); delete gectx; m_sts = PWRB__SUCCESS; } } } }
void wb_build::classvolume( pwr_tVid vid) { pwr_tCmd cmd; pwr_tFileName fname; pwr_tObjName name; pwr_tTime wbl_time, dbs_time, h_time; pwr_tStatus fsts; pwr_tStatus sumsts = PWRB__NOBUILT; wb_log::push(); if ( !opt.manual) { // Build all ClassDef classlist( pwr_eClass_ClassDef); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; } wb_log::pull(); if ( vid == 0) { // Build current volume cdh_ToLower( name, m_session.name()); } else { wb_env env = m_session.env(); wb_volume v = env.volume(vid); if ( !v) { m_sts = v.sts(); return; } strcpy( name, v.name()); } // Get time for wb_load file sprintf( fname, "$pwrp_db/%s.wb_load", name); dcli_translate_filename( fname, fname); m_sts = dcli_file_time( fname, &wbl_time); if ( evenSts()) return; // Get time for dbs file sprintf( fname, "$pwrp_load/%s.dbs", name); dcli_translate_filename( fname, fname); fsts = dcli_file_time( fname, &dbs_time); // Get time for classvolumes wb_merep *merep = ((wb_erep *)m_session.env())->merep(); pwr_tTime mtime = pwr_cNTime; pwr_tTime t; pwr_tStatus sts; for ( wb_mvrep *mvrep = merep->volume( &sts); ODD(sts); mvrep = merep->nextVolume( &sts, mvrep->vid())) { if ( m_session.vid() == mvrep->vid()) continue; // Check only system class and manufact class volumes if ( mvrep->vid() > cdh_cSystemClassVolMax && (mvrep->vid() < cdh_cManufactClassVolMin || mvrep->vid() > cdh_cManufactClassVolMax)) continue; mvrep->time( &t); if ( time_Acomp( &t, &mtime) == 1) mtime = t; } // Create new loadfile if ( opt.force || EVEN(fsts) || wbl_time.tv_sec > dbs_time.tv_sec || mtime.tv_sec > dbs_time.tv_sec) { sprintf( cmd, "create snapshot/file=\"$pwrp_db/%s.wb_load\"", name); m_sts = m_wnav->command( cmd); sumsts = m_sts; } else m_sts = sumsts; // Get time for struct file sprintf( fname, "$pwrp_inc/pwr_%sclasses.h", name); dcli_translate_filename( fname, fname); fsts = dcli_file_time( fname, &h_time); // Create new struct file if ( opt.force || EVEN(fsts) || wbl_time.tv_sec > h_time.tv_sec) { sprintf( cmd, "create struct/file=\"$pwrp_db/%s.wb_load\"", name); m_sts = m_wnav->command( cmd); sumsts = m_sts; } else m_sts = sumsts; if ( sumsts != PWRB__NOBUILT) { char msg[80]; sprintf( msg, "Build: Volume %s", name); MsgWindow::message('I', msg, msgw_ePop_No); } }
void wb_build::rootvolume( pwr_tVid vid) { pwr_tStatus sumsts, plcsts; pwr_tOid oid; pwr_tTime modtime; pwr_tObjName vname; pwr_tFileName fname; pwr_tTime dbs_time, rtt_time; pwr_tCmd cmd; char msg[80]; wb_log::push(); if ( !opt.manual) { // Build all plcpgm classlist( pwr_cClass_plc); if ( evenSts()) return; plcsts = sumsts = m_sts; // Build all XttGraph classlist( pwr_cClass_XttGraph); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; classlist( pwr_cClass_WebHandler); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; classlist( pwr_cClass_WebBrowserConfig); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; // Build all WebGraph classlist( pwr_cClass_WebGraph); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; // Build all AppGraph classlist( pwr_cClass_AppGraph); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; classlist( pwr_cClass_Application); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; classlist( pwr_cClass_PlcProcess); if ( evenSts()) return; if ( sumsts == PWRB__NOBUILT && m_sts != PWRB__NOBUILT) sumsts = m_sts; } wb_log::pull(); // Create loadfiles oid.oix = 0; oid.vid = m_session.vid(); wb_attribute a = m_session.attribute( oid, "SysBody", "Modified"); if ( !a) { m_sts = a.sts(); return; } a.value( &modtime); if ( !a) { m_sts = a.sts(); return; } cdh_ToLower( vname, m_session.name()); sprintf( fname, "$pwrp_load/%s.dbs", vname); dcli_translate_filename( fname, fname); m_sts = dcli_file_time( fname, &dbs_time); // Get time for classvolumes wb_merep *merep = ((wb_vrep *)m_session)->merep(); pwr_tTime mtime = pwr_cNTime; pwr_tTime t; pwr_tStatus sts; for ( wb_mvrep *mvrep = merep->volume( &sts); ODD(sts); mvrep = merep->nextVolume( &sts, mvrep->vid())) { mvrep->time( &t); if ( time_Acomp( &t, &mtime) == 1) mtime = t; } if ( opt.force || opt.manual || evenSts() || time_Acomp( &modtime, &dbs_time) == 1 || time_Acomp( &mtime, &dbs_time) == 1 || plcsts != PWRB__NOBUILT) { m_sts = lfu_create_loadfile( (ldh_tSession *) &m_session); if ( evenSts()) return; m_sts = ldh_CreateLoadFile( (ldh_tSession *) &m_session); if ( evenSts()) return; sprintf( msg, "Build: Volume Loadfiles created volume %s", m_session.name()); MsgWindow::message('I', msg, msgw_ePop_No); wb_log::log( &m_session, wlog_eCategory_VolumeBuild, m_session.vid()); sumsts = PWRB__SUCCESS; } else m_sts = sumsts; cdh_uVolumeId uvid; uvid.pwr = m_session.vid(); sprintf( fname, "$pwrp_load/" load_cNameRttCrr, uvid.v.vid_3, uvid.v.vid_2, uvid.v.vid_1, uvid.v.vid_0); dcli_translate_filename( fname, fname); m_sts = dcli_file_time( fname, &rtt_time); if ( opt.crossref && ( evenSts() || time_Acomp( &modtime, &rtt_time) == 1)) { strcpy( cmd, "create crossreferencefiles"); m_wnav->command( cmd); if ( ODD(sumsts)) sumsts = PWRB__SUCCESS; sprintf( msg, "Build: Volume Crossreference file generated volume %s", m_session.name()); MsgWindow::message('I', msg, msgw_ePop_No); } m_sts = sumsts; }
void wb_build::classdef( pwr_tOid oid) { pwr_tFileName src_fname, dest_fname; pwr_tCmd cmd; pwr_tString80 action; pwr_tString80 name; pwr_tTime dest_time, src_time; int check_hierarchy = cdh_ObjidIsNotNull( m_hierarchy); int hierarchy_found = 0; 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; } strcpy( action, cdh_Low( o.name())); strcat( action, ".pwg"); strcpy( src_fname, "$pwrp_pop/"); strcat( src_fname, action); 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_exe/"); strcat( dest_fname, action); 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: ClassDef copy $pwrp_pop/%s -> $pwrp_exe", action); MsgWindow::message( 'I', cmd, msgw_ePop_No, oid); strcpy( name, action); if (( s = strrchr( name, '.'))) *s = 0; wb_log::log( wlog_eCategory_GeBuild, name, 0); m_sts = PWRB__SUCCESS; } else m_sts = PWRB__NOBUILT; }
void wb_build::webbrowserconfig( pwr_tOid oid) { pwr_tTime modtime; pwr_tFileName fname; pwr_tTime ftime; pwr_tStatus fsts; FILE *fp; int i, j; int found; char line[200]; pwr_tObjName vname; strncpy( vname, m_session.name(), sizeof(vname)); wb_object o = m_session.object(oid); if ( !o) { m_sts = o.sts(); return; } modtime = o.modTime(); sprintf( fname, "$pwrp_db/pwrp_cnf_websymbols.dat"); dcli_translate_filename( fname, fname); fsts = dcli_file_time( fname, &ftime); m_sts = PWRB__NOBUILT; if ( opt.force || EVEN(fsts) || time_Acomp( &modtime, &ftime) == 1) { pwr_sClass_WebBrowserConfig body; int url_symbols_size = sizeof(body.URL_Symbols)/sizeof(body.URL_Symbols[0]); char sym_vect[MAXSYMBOLS][80]; char value_vect[MAXSYMBOLS][80]; char volume_vect[MAXSYMBOLS][80]; int vect_cnt; int nr; char elemv[3][80]; wb_attribute a = m_session.attribute( oid, "RtBody", "URL_Symbols"); if ( !a) { m_sts = a.sts(); return; } a.value( body.URL_Symbols); if ( !a) { m_sts = a.sts(); return; } // Read the file and merge the symbols of this volume with other symbols in the project vect_cnt = 0; fp = fopen( fname, "r"); if ( fp) { while ( dcli_read_line( line, sizeof( line), fp)) { nr = dcli_parse( line, " ", "", (char *)elemv, sizeof( elemv) / sizeof( elemv[0]), sizeof( elemv[0]), 0); if ( nr != 3) continue; // Skip old symbols from this volume if ( cdh_NoCaseStrcmp( vname, elemv[0]) == 0) continue; strcpy( volume_vect[vect_cnt], elemv[0]); strcpy( sym_vect[vect_cnt], elemv[1]); strcpy( value_vect[vect_cnt], elemv[2]); vect_cnt++; } fclose( fp); } for ( i = 0; i < url_symbols_size; i++) { nr = dcli_parse( body.URL_Symbols[i], " ", "", (char *)elemv, sizeof( elemv) / sizeof( elemv[0]), sizeof( elemv[0]), 0); if ( nr != 2) continue; found = 0; for ( j = 0; j < vect_cnt; j++) { if ( cdh_NoCaseStrcmp( elemv[0], sym_vect[j]) == 0) { strcpy( value_vect[j], elemv[1]); found = 1; break; } } if ( !found) { // Insert first for ( j = MIN(vect_cnt,MAXSYMBOLS-1); j > 0; j--) { strcpy( volume_vect[j], volume_vect[j-1]); strcpy( sym_vect[j], sym_vect[j-1]); strcpy( value_vect[j], value_vect[j-1]); } strcpy( volume_vect[0], vname); strcpy( sym_vect[0], elemv[0]); strcpy( value_vect[0], elemv[1]); vect_cnt++; if ( vect_cnt > MAXSYMBOLS) vect_cnt = MAXSYMBOLS; } } // Write the file fp = fopen( fname, "w"); if ( !fp) { char msg[200]; sprintf( msg, "Build: Unable to open file %s", fname); MsgWindow::message( 'E', msg, msgw_ePop_No, oid); return; } for ( i = 0; i < vect_cnt; i++) fprintf( fp, "%s %s %s\n", volume_vect[i], sym_vect[i], value_vect[i]); fclose( fp); } }
void wb_build::webhandler( pwr_tOid oid) { pwr_tTime modtime; pwr_tString80 file_name, name; pwr_tFileName fname; pwr_tTime ftime; pwr_tTime xtthelp_time, html_time; char *s; pwr_tStatus fsts; wb_object o = m_session.object(oid); if ( !o) { m_sts = o.sts(); return; } modtime = o.modTime(); wb_attribute a = m_session.attribute( oid, "RtBody", "FileName"); if ( !a) { m_sts = a.sts(); return; } a.value( &file_name); if ( !a) { m_sts = a.sts(); return; } // Parse the name of the start page if ( (s = strrchr( file_name, '/')) || (s = strrchr( file_name, '<')) || (s = strrchr( file_name, ':'))) strcpy( name, s+1); else strcpy( name, file_name); if ( (s = strrchr( name, '.'))) *s = 0; sprintf( fname, "$pwrp_web/%s_opwin_menu.html", name); dcli_translate_filename( fname, fname); fsts = dcli_file_time( fname, &ftime); m_sts = PWRB__NOBUILT; if ( opt.force || EVEN(fsts) || time_Acomp( &modtime, &ftime) == 1) { // modtime > ftime m_sts = Graph::generate_web( (ldh_tSession *)&m_session); if ( evenSts()) return; char msg[200]; sprintf( msg, "Build: WebHandler Webpage generated %s", fname); MsgWindow::message( 'I', msg, msgw_ePop_No, oid); } // Check if xtthelp should be converted to html dcli_translate_filename( fname, "$pwrp_exe/xtt_help.dat"); fsts = dcli_file_time( fname, &xtthelp_time); if ( EVEN(fsts)) return; dcli_translate_filename( fname, "$pwrp_web/xtt_help_index.html"); fsts = dcli_file_time( fname, &html_time); if ( opt.force || EVEN(fsts) || time_Acomp( &xtthelp_time, &html_time) == 1) { system( "co_convert -d $pwrp_web -t $pwrp_exe/xtt_help.dat"); char msg[200]; sprintf( msg, "Build: WebHandler xtt_help.dat converted to html"); MsgWindow::message( 'I', msg, msgw_ePop_No, oid); m_sts = PWRB__SUCCESS; } // Generate wb history html file pwr_tCmd cmd; strcpy( cmd, "generate history"); m_wnav->command( cmd); }
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; }