/usr/local/CPAN/oEdtk/oEdtk/libC7.pm
package oEdtk::libC7 ;
# use strict;
use warnings;
use Exporter;
our $VERSION =0.0056;
our @ISA =qw(Exporter);
our @EXPORT =qw(
c7EdtkComp
c7_compo
c7_emit
c7EdtkEmit
c7_Control_Bal
);
use oEdtk::Main 0.42;
use oEdtk::trackEdtk qw (env_Var_Completion);
use oEdtk::Config qw (config_read);
my $C7_EVENT_DEPTH =7;
my $NOK =-1;
sub c7EdtkComp () { # remplacé par c7_compo - PLUS UTILISÉ ? dépendance libedtkDev
# A FAIRE : documenter et full pramétrage (compusetEdtk.ini)
my $output_Format =shift;
# my $prim_style_file ="$ENV{EDTK_DIR_APP}/$ENV{EDTK_PRGNAME}/$ENV{EDTK_PRGNAME}$ENV{EDTK_FTYP_DFLT}.$ENV{EDTK_EXT_COMSET}";
my $prim_style_file ="$ENV{EDTK_DIR_SCRIPT}/$ENV{EDTK_PRGNAME}.$ENV{EDTK_EXT_COMSET}";
my $secd_input_file ="$ENV{EDTK_FDATWORK}.$ENV{EDTK_EXT_WORK}";
my $intermedte_file ="$ENV{EDTK_DIR_APPTMP}/$ENV{EDTK_PRGNAME}.cif";
my $null_conf_file ="$ENV{EDTK_DIR_COMSET}/System/null.cnf";
my $hyphen_diction =$ENV{C7_CNF_PDF};
my $widths_file =$ENV{C7_WID_PDF};
my $merge_lib_1 =$ENV{C7_DCLIB_1};
my $merge_lib_2 =$ENV{C7_DCLIB_2};
my $merge_lib_RW ="$ENV{C7_DCLIB_RW}/libEdtkC7";
my $scratch_file ="$ENV{EDTK_DIR_APPTMP}/$ENV{EDTK_PRGNAME}";
my $index_file_1 ="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.idx1";
my $index_file_2 ="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.idx2";
my $c7_message_db ="$ENV{EDTK_DIR_COMSET}/system/$ENV{WORDTYP}/xicsmsg.mdb";
my $comp_log_file ="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.comp.log";
my $comp_file_def ="*\n";
$comp_file_def .="* FILE DEFINITIONS FOR COMPUSET \n";
$comp_file_def .="*\n";
# ATTENTION COMPUSET NE SUPPORTE PAS LES TABULATIONS DANS SES FICHIERS DE COMMANDES
$comp_file_def .=sprintf ("FILE 1, %s ,primary input file\n", $prim_style_file);
$comp_file_def .=sprintf ("FILE 18, %s ,secondary input file\n", $secd_input_file);
$comp_file_def .=sprintf ("FILE 2, %s ,intermediate file output\n", $intermedte_file);
$comp_file_def .=sprintf ("FILE 3, %s ,null config file\n", $null_conf_file);
$comp_file_def .=sprintf ("FILE 4, %s ,hyphenation dictionary\n", $hyphen_diction);
$comp_file_def .=sprintf ("FILE 7, %s ,POST widths file\n", $widths_file);
$comp_file_def .=sprintf ("FILE 30, %s ,merge library 1\n", $merge_lib_1);
$comp_file_def .=sprintf ("FILE 31, %s ,merge library 2\n", $merge_lib_2);
$comp_file_def .=sprintf ("FILE 32, %s/ ,merge library 3\n", $merge_lib_RW);
$comp_file_def .=sprintf ("FILE 8, %s1.tmp ,scratch file 1\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 9, %s2.tmp ,scratch file 2\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 10, %s3.tmp ,scratch file 3\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 34, %s4.tmp ,scratch file 4\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 11, %s ,index file 1\n", $index_file_1);
$comp_file_def .=sprintf ("FILE 12, %s ,index file 1\n", $index_file_2);
$comp_file_def .=sprintf ("FILE 25, %s ,CompuSet message database\n", $c7_message_db);
env_Var_Completion($comp_file_def);
$comp_file_def .="// END OF FILE DEFINITIONS\n";
my $comp_file=$ENV{EDTK_DIR_APPTMP}."/".$ENV{EDTK_PRGNAME}.".comp";
env_Var_Completion($comp_file);
foEdtkOpen ("$comp_file");
print OUT $comp_file_def;
foEdtkClose("$comp_file");
my $commande ="$ENV{EDTK_DIR_COMSET}/system/$ENV{OSYS}/$ENV{COMPUSET} < $comp_file > $comp_log_file";
warn "\n$commande \n";
env_Var_Completion($commande);
eval {
system($commande);
};
# if ($@){
if ($?){
warn " ERROR $ENV{COMPUSET} return $? ";
warn " ERROR see $comp_log_file log";
env_Var_Completion($comp_log_file);
&show_C7_event ($comp_log_file);
return $NOK;
}
1;
}
sub c7_compo ($$$;$$) { # PLUS UTILISÉ ? dépendance Main.pm
my $cfg =config_read('COMSET');
# A FAIRE : documenter et full pramétrage (compusetEdtk.ini)
my $output_format =shift || "PDF";
my $prim_style_file =shift;
my $secd_input_file =shift;
my $outmngr_option =shift || "";
my $doc_lib =shift || "libEdtkC7";
# warn "INFO : doclib = $doc_lib\n";
my $conf_pde_key ="C7_PDE_".$outmngr_option.$output_format;
my $conf_cnf_key ="C7_CNF_".$output_format;
my $conf_wid_key ="C7_WID_".$output_format;
my $intermedte_file =$cfg->{'EDTK_DIR_APPTMP'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".cif";
my $null_conf_file =$cfg->{'C7_NULL_CNF'};
my $hyphen_diction =$cfg->{$conf_cnf_key};
my $widths_file =$cfg->{$conf_wid_key};
my $merge_lib_1 =$cfg->{'C7_DCLIB_1'};
my $merge_lib_2 =$cfg->{'C7_DCLIB_2'};
my $merge_lib_RW =$cfg->{'C7_DCLIB_RW'}. "/" . $doc_lib;
my $scratch_file =$cfg->{'EDTK_DIR_APPTMP'} . "/" . $cfg->{'EDTK_PRGNAME'};
my $index_file_1 =$cfg->{'EDTK_DIR_OUTMNGR'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".idx1";
my $index_file_2 =$cfg->{'EDTK_DIR_OUTMNGR'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".idx2";
my $c7_message_db =$cfg->{'EDTK_DIR_COMSET'} . "/system/" . $cfg->{'WORDTYP'} . "/xicsmsg.mdb";
my $comp_log_file =$cfg->{'EDTK_DIR_LOG'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".comp.log";
my $comp_file_def ="*\n";
$comp_file_def .="* FILE DEFINITIONS FOR COMPUSET \n";
$comp_file_def .="*\n";
# ATTENTION COMPUSET NE SUPPORTE PAS LES TABULATIONS DANS SES FICHIERS DE COMMANDES
$comp_file_def .=sprintf ("FILE 1, %s ,primary input file\n", $prim_style_file);
$comp_file_def .=sprintf ("FILE 18, %s ,secondary input file\n", $secd_input_file);
$comp_file_def .=sprintf ("FILE 2, %s ,intermediate file output\n", $intermedte_file);
$comp_file_def .=sprintf ("FILE 3, %s ,null config file\n", $null_conf_file);
$comp_file_def .=sprintf ("FILE 4, %s ,hyphenation dictionary\n", $hyphen_diction);
$comp_file_def .=sprintf ("FILE 7, %s ,POST widths file\n", $widths_file);
$comp_file_def .=sprintf ("FILE 30, %s ,merge library 1\n", $merge_lib_1);
$comp_file_def .=sprintf ("FILE 31, %s ,merge library 2\n", $merge_lib_2);
$comp_file_def .=sprintf ("FILE 32, %s ,merge library 3\n", $merge_lib_RW);
$comp_file_def .=sprintf ("FILE 8, %s1.tmp ,scratch file 1\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 9, %s2.tmp ,scratch file 2\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 10, %s3.tmp ,scratch file 3\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 34, %s4.tmp ,scratch file 4\n", $scratch_file);
$comp_file_def .=sprintf ("FILE 11, %s ,index file 1\n", $index_file_1);
$comp_file_def .=sprintf ("FILE 12, %s ,index file 1\n", $index_file_2);
$comp_file_def .=sprintf ("FILE 25, %s ,CompuSet message database\n", $c7_message_db);
# en environnement Windows les slash doivent être remplacés par des backslash
# sinon plantage (message "compuset ne trouve plus la clef hardware")
env_Var_Completion($comp_file_def);
# remplacer par
# $comp_file_def=~ms/\//\\/g;
# par contre les slash suivants sont importants pour fermer le fichier de définition
$comp_file_def .="// END OF FILE DEFINITIONS\n";
my $comp_file=$cfg->{'EDTK_DIR_APPTMP'}."/".$cfg->{'EDTK_PRGNAME'}.".comp";
#env_Var_Completion($comp_file);
foEdtkOpen ("$comp_file");
print OUT $comp_file_def;
foEdtkClose("$comp_file");
my $commande =$cfg->{'EDTK_DIR_COMSET'} . "/system/" . $cfg->{'OSYS'} . "/" . $cfg->{'COMPUSET'} . " < $comp_file > $comp_log_file";
warn "INFO : $commande \n";
#env_Var_Completion($commande);
eval {
system($commande);
};
if ($?){
warn "ERROR: " . $cfg->{'COMPUSET'} . " return $? ";
warn "ERROR: see $comp_log_file log";
#env_Var_Completion($comp_log_file);
&show_C7_event ($comp_log_file);
return $NOK;
}
1;
}
sub c7_emit ($$$$;$$) { # PLUS UTILISÉ ? dépendance Main.pm
my $cfg =config_read('COMSET');
# A FAIRE : documenter et full pramétrage (compusetEdtk.ini)
my $output_format =uc (shift) || "PDF";
my $prim_style_file =shift;
my $secd_input_file =shift;
#EDTK_DIR_BASE =C:/edtk_APP
#EDTK_DIR_APP =$EDTK_DIR_BASE/app
#EDTK_DIR_SCRIPT =$EDTK_DIR_APP/$EDTK_PRGNAME
#EDTK_DIR_APPTMP =$EDTK_DIR_SCRIPT/tmp.nocvs
#EDTK_FDATWORK =$EDTK_DIR_APPTMP/$EDTK_PRGNAME
#EDTK_DIR_DATA_IN =$EDTK_DIR_SCRIPT/flux.nocvs
#EDTK_FDATAOUT =$EDTK_DIR_DATA_IN/$EDTK_PRGNAME
#EDTK_EXT_WORK =txt
#EDTK_EXT_PDF =pdf
# c7_emit ($output_format, $script_compo, $input_fdatwork, "$input_fdatwork.pdf", "OMGR", ) ;
# my $output_doc_file =$ENV{EDTK_DOC_OUTPUT}; #"$ENV{EDTK_FDATAOUT}.$ENV{EDTK_EXT_PDF}";
my $output_doc_file =shift;
my $outmngr_option =shift || "";
my $doc_lib =shift || "libEdtkC7";
# warn "INFO : doclib = $doc_lib\n";
my $conf_pde_key ="C7_PDE_" .$outmngr_option.$output_format;
my $conf_cnf_key ="C7_CNF_" .$output_format;
my $conf_wid_key ="C7_WID_" .$output_format;
my $emitter ="C7_INTX_".$output_format;
my $edtk_ext ="EDTK_EXT_".$output_format;
$output_doc_file ="$output_doc_file.".$cfg->{$edtk_ext};
my $intermedte_file =$cfg->{'EDTK_DIR_APPTMP'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".cif";
my $null_conf_file =$cfg->{'C7_NULL_CNF'};
my $hyphen_diction =$cfg->{$conf_cnf_key};
my $widths_file =$cfg->{$conf_wid_key};
my $merge_lib_1 =$cfg->{'C7_DCLIB_1'};
my $merge_lib_2 =$cfg->{'C7_DCLIB_2'};
my $merge_lib_RW =$cfg->{'C7_DCLIB_RW'}. "/" . $doc_lib;
my $scratch_file =$cfg->{'EDTK_DIR_APPTMP'} . "/" . $cfg->{'EDTK_PRGNAME'};
my $index_file_1 =$cfg->{'EDTK_DIR_OUTMNGR'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".idx1";
my $index_file_2 =$cfg->{'EDTK_DIR_OUTMNGR'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".idx2";
my $c7_message_db =$cfg->{'EDTK_DIR_COMSET'} . "/system/" . $cfg->{'WORDTYP'} . "/xicsmsg.mdb";
my $comp_log_file =$cfg->{'EDTK_DIR_LOG'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".comp.log";
my $output_pdef_file =$cfg->{$conf_pde_key};
my $emitter_file_def ="*\n";
$emitter_file_def .="* FILE DEFINITIONS FOR PSTINT\n";
$emitter_file_def .="*\n";
# ATTENTION COMPUSET NE SUPPORTE PAS PLUSIEURS TABULATIONS DANS SES FICHIERS DE COMMANDES
$emitter_file_def .=sprintf ("FILE 1, %s ,intermediate file input\n", $intermedte_file);
$emitter_file_def .=sprintf ("FILE 3, %s ,null config file\n", $null_conf_file);
$emitter_file_def .=sprintf ("FILE 14, %s ,POST widths file\n", $widths_file);
$emitter_file_def .=sprintf ("FILE 8, %s ,PostScript pdef file\n", $output_pdef_file);
$emitter_file_def .=sprintf ("FILE 4, %s ,PostScript output file\n", $output_doc_file);
$emitter_file_def .=sprintf ("FILE 9, %s ,merge library 1\n", $merge_lib_1);
$emitter_file_def .=sprintf ("FILE 10, %s ,merge library 2\n", $merge_lib_2);
$emitter_file_def .=sprintf ("FILE 11, %s ,merge library 3\n", $merge_lib_RW);
$emitter_file_def .=sprintf ("FILE 25, %s ,CompuSet message database\n", $c7_message_db);
# en environnement Windows les slash doivent être remplacés par des backslash
# sinon plantage (message "compuset ne trouve plus la clef hardware")
env_Var_Completion($emitter_file_def);
# remplacer par
# $comp_file_def=~ms/\//\\/g;
# par contre les slash suivants sont importants pour fermer le fichier de définition
$emitter_file_def .="// END OF FILE DEFINITIONS \n";
$emitter_file_def .="*\n";
$emitter_file_def .="* INSERT OPTIONS HERE OR IN PDEF FILE\n";
$emitter_file_def .="*\n";
$emitter_file_def .="// END OF OPTIONS\n";
my $emitter_file =$cfg->{'EDTK_DIR_APPTMP'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".emit";
#env_Var_Completion($emitter_file);
foEdtkOpen ($emitter_file);
print OUT $emitter_file_def;
foEdtkClose($emitter_file);
my $emit_log_file =$cfg->{'EDTK_DIR_LOG'} . "/" . $cfg->{'EDTK_PRGNAME'} . ".emit.log";
my $commande =$cfg->{'EDTK_DIR_COMSET'} . "/system/" . $cfg->{'OSYS'} . "/" . $cfg->{$emitter} . " < $emitter_file > $emit_log_file";
warn "INFO : $commande \n";
#env_Var_Completion($commande);
eval {
system($commande);
};
# if ($@){
if ($?){
warn "ERROR: ". $cfg->{'COMPUSET'} . " emitter return $? ";
warn "ERROR: see $emit_log_file log";
#env_Var_Completion($emit_log_file);
&show_C7_event ($emit_log_file);
return $NOK;
}
1;
}
sub c7EdtkEmit { # remplacé par c7_emit - # PLUS UTILISÉ ? dépendance libEdtkDev
# A FAIRE : documenter et full pramétrage (compusetEdtk.ini)
my $output_Format =shift;
my $prim_style_file ="$ENV{EDTK_DIR_SCRIPT}/$ENV{EDTK_PRGNAME}.$ENV{EDTK_EXT_COMSET}";
my $secd_input_file ="$ENV{EDTK_FDATWORK}.$ENV{EDTK_EXT_WORK}";
my $intermedte_file ="$ENV{EDTK_DIR_APPTMP}/$ENV{EDTK_PRGNAME}.cif";
my $null_conf_file ="$ENV{EDTK_DIR_COMSET}/System/null.cnf";
my $hyphen_diction =$ENV{C7_CNF_PDF};
my $output_pdef_file =$ENV{C7_PDE_PDF};
my $widths_file =$ENV{C7_WID_PDF};
my $merge_lib_1 =$ENV{C7_DCLIB_1};
my $merge_lib_2 =$ENV{C7_DCLIB_2};
my $merge_lib_RW ="$ENV{C7_DCLIB_RW}/libEdtkC7";
my $scratch_file ="$ENV{EDTK_DIR_APPTMP}/$ENV{EDTK_PRGNAME}";
my $index_file_1 ="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.idx1";
my $index_file_2 ="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.idx2";
my $c7_message_db ="$ENV{EDTK_DIR_COMSET}/system/$ENV{WORDTYP}/xicsmsg.mdb";
my $output_doc_file =$ENV{EDTK_DOC_OUTPUT}; #"$ENV{EDTK_FDATAOUT}.$ENV{EDTK_EXT_PDF}";
my $emitter_file_def ="*\n";
$emitter_file_def .="* FILE DEFINITIONS FOR PSTINT\n";
$emitter_file_def .="*\n";
# ATTENTION COMPUSET NE SUPPORTE PAS PLUSIEURS TABULATIONS DANS SES FICHIERS DE COMMANDES
$emitter_file_def .=sprintf ("FILE 1, %s ,intermediate file input\n", $intermedte_file);
$emitter_file_def .=sprintf ("FILE 3, %s ,null config file\n", $null_conf_file);
$emitter_file_def .=sprintf ("FILE 14, %s ,POST widths file\n", $widths_file);
$emitter_file_def .=sprintf ("FILE 8, %s ,PostScript pdef file\n", $output_pdef_file);
$emitter_file_def .=sprintf ("FILE 4, %s ,PostScript output file\n", $output_doc_file);
$emitter_file_def .=sprintf ("FILE 9, %s ,merge library 1\n", $merge_lib_1);
$emitter_file_def .=sprintf ("FILE 10, %s ,merge library 2\n", $merge_lib_2);
$emitter_file_def .=sprintf ("FILE 11, %s ,merge library 3\n", $merge_lib_RW);
$emitter_file_def .=sprintf ("FILE 25, %s ,CompuSet message database\n", $c7_message_db);
env_Var_Completion($emitter_file_def);
$emitter_file_def .="// END OF FILE DEFINITIONS \n";
$emitter_file_def .="*\n";
$emitter_file_def .="* INSERT OPTIONS HERE OR IN PDEF FILE\n";
$emitter_file_def .="*\n";
$emitter_file_def .="// END OF OPTIONS\n";
my $emitter_file="$ENV{EDTK_DIR_APPTMP}/$ENV{EDTK_PRGNAME}.emit";
env_Var_Completion($emitter_file);
my $emit_log_file="$ENV{EDTK_DIR_LOG}/$ENV{EDTK_PRGNAME}.emit.log";
foEdtkOpen ("$emitter_file");
print OUT $emitter_file_def;
foEdtkClose("$emitter_file");
my $commande ="$ENV{EDTK_DIR_COMSET}/system/$ENV{OSYS}/$ENV{PSTINTX} < $emitter_file > $emit_log_file";
warn "\n$commande \n";
env_Var_Completion($commande);
eval {
system($commande);
};
# if ($@){
if ($?){
warn " ERROR $ENV{COMPUSET} emitter return $? ";
warn " ERROR see $emit_log_file log";
env_Var_Completion($emit_log_file);
&show_C7_event ($emit_log_file);
return $NOK;
}
1;
}
sub show_C7_event ($) { # PLUS UTILISÉ ? dépendance interne libEdtkC7
my $log =shift;
my $ligne_count =0;
fiEdtkOpen ($log);
warn "\n INFO extracted from log :\n";
# introduction de 'defined (IN)' dans le test pour élilminer le warning 'Value of <HANDLE> construct can be "0"; test with defined()'
while (defined (IN) && (my $ligne = <IN>) && ($ligne_count lt $C7_EVENT_DEPTH)) {
if ($ligne =~/-[EW]:/ or $ligne_count gt 1) {
warn $ligne;
$ligne_count++;
}
}
1;
}
sub c7_Control_Bal ($){ # PLUS UTILISÉ ? dépendance libEdtkDev et interne libEdtkC7
my $file =shift;
my $ctrl_depth_tags=$ENV{C7_DEPTH_TAGS};
$ctrl_depth_tags ||=1;
my $nbOpen=0;
my $nbClose=0;
my $nbSomOpen=0;
my $nbSomClose=0;
my $nbEcart=0;
my @lineNumbers;
my $buffMessage="";
# CONTROLE D'APPARIEMENT DU FICHIER DE DONNEES BALISEES
warn "INFO : Analyse de l'appariement des balises dans le fichier $file.\n";
fiEdtkOpen ($file);
while ($ligne=<IN>){
while ($ligne=~m/</g){$nbOpen++;}
while ($ligne=~m/>/g){$nbClose++;}
$nbSomOpen +=$nbOpen;
$nbSomClose+=$nbClose;
if (abs($nbSomOpen - $nbSomClose) gt $ctrl_depth_tags){
push (@lineNumbers, $.);
warn "ERR. multiplication imbrications $nbSomOpen ouvertures / $nbSomClose fermetures";
warn "ERR. voir $file,";
warn "ERR. voir lignes @lineNumbers";
return $NOK;
} elsif (abs($nbSomOpen - $nbSomClose) ge 1) {
push (@lineNumbers, $.);
} else {
undef (@lineNumbers);
}
if ($nbOpen ne $nbClose){
$nbEcart++;
}
$nbOpen =0;
$nbClose =0;
}
if ($nbSomOpen ne $nbSomClose){
warn "ERROR : Le fichier balise n'est pas correctement apparie \n";
warn $buffMessage;
return $NOK;
} elsif ($nbEcart ne 0) {
warn "INFO : Presence de super balises appariees sur plusieurs lignes \n";
} else {
warn "GOOD : Le fichier balise semble bien apparie ($nbSomOpen ouverture(s)/$nbSomClose fermeture(s)).\n";
}
1;
}
1;