#/***************************************************************************** ## Copyright (C) 1994-2008 by David Gordon. ## All rights reserved. ## ## This software is part of a beta-test version of the Consed/Autofinish ## package. It should not be redistributed or ## used for any commercial purpose, including commercially funded ## sequencing, without written permission from the author and the ## University of Washington. ## ## This software is provided ``AS IS'' and any express or implied ## warranties, including, but not limited to, the implied warranties of ## merchantability and fitness for a particular purpose, are disclaimed. ## In no event shall the authors or the University of Washington be ## liable for any direct, indirect, incidental, special, exemplary, or ## consequential damages (including, but not limited to, procurement of ## substitute goods or services; loss of use, data, or profits; or ## business interruption) however caused and on any theory of liability, ## whether in contract, strict liability, or tort (including negligence ## or otherwise) arising in any way out of the use of this software, even ## if advised of the possibility of such damage. ## ## Building Consed from source is error prone and not simple which is ## why I provide executables. Due to time limitations I cannot ## provide any assistance in building Consed. Even if you do not ## modify the source, you may introduce errors due to using a ## different version of the compiler, a different version of motif, ## different versions of other libraries than I used, etc. For this ## reason, if you discover Consed bugs, I can only offer help with ## those bugs if you first reproduce those bugs with an executable ## provided by me--not an executable you have built. ## ## Modifying Consed is also difficult. Although Consed is modular, ## some modules are used by many other modules. Thus making a change ## in one place can have unforeseen effects on many other features. ## It may takes months for you to notice these other side-effects ## which may not seen connected at all. It is not feasable for me to ## provide help with modifying Consed sources because of the ## potentially huge amount of time involved. ## ##*****************************************************************************/ #!/usr/local/bin/perl -w system( "./makeMainCPP.perl" ); $szLongestVariable = ""; open( filConsedResourcesH, ">consedResources.h.part2" ) || die "can't open consedResources.h.part2"; open( filColorDefaultsH, ">colorDefaults.h.part2" ) || die "can't open colorDefaults.h.part2"; open( filSaveColorsCPP, ">saveColors.cpp.part2" ) || die "can't open saveColors.cpp.part2"; open( filFallbackConsedResourcesH, ">fallbackConsedResources.h.part2" ) || die "can't open saveColors.cpp.part2"; open( filConsedResourcesCPP, ">consedResources.cpp.part2" ) || die "can't open consedResources.cpp.part2"; open( filConsedResources2CPP, ">consedResources2.cpp.part2" ) || die "can't open consedResources2.cpp.part2"; open( filConsedResources3CPP, ">consedResources3.cpp.part2" ) || die "can't open consedResources3.cpp.part2"; open( filSaveTagTypesCPP, ">saveTagTypes.cpp.part2" ) || die "can't open saveTagTypes.cpp.part2"; open( filConsedParametersH, ">consedParameters.h.part2" ) || die "couldn't open consedParameters.h.part2"; open( filConsedParametersCPP, ">consedParameters.cpp.part2" ) || die "can't open consedParameters.cpp.part2"; open( filPrintAutoFinishParametersCPP, ">printAutoFinishParameters.cpp.part2" ) || die "can't open printAutoFinishParameters.cpp.part2"; open( filDefaultResourcesCPP, ">defaultResourcesDefinition.h.part2" ) || die "can't open defaultResourcesDefinition.h.part2"; open( filRes, "consedResources.txt" ) || die "couldn't open consedResources.txt"; open( filPrintChangedAutoFinishParametersCPP, ">printChangedAutoFinishParameters.cpp.part2" ) || die "can't open printChangedAutoFinishParameters.cpp.part2"; # must delete the following files before creating them since they # are typically set a-w @aFiles = ( "guiEditResources.cpp.part2", "guiEditResources.cpp.part4", "guiEditResources.cpp.part6", "guiEditResources.cpp.part8", "guiEditResources.cpp.part10", "guiEditResources.h.part2", "guiEditResources.h.part4" ); foreach $szFile (@aFiles ) { if ( -e $szFile ) { unlink( $szFile ) || die "couldn't delete $szFile"; } } open( filGuiEditResourcesCPP2, ">guiEditResources.cpp.part2" ) || die "couldn't open guiEditResources.cpp.part2 for write"; open( filGuiEditResourcesCPP4, ">guiEditResources.cpp.part4" ) || die "couldn't open guiEditResources.cpp.part4 for write"; open( filGuiEditResourcesCPP6, ">guiEditResources.cpp.part6" ) || die "couldn't open guiEditResources.cpp.part6 for write"; open( filGuiEditResourcesCPP8, ">guiEditResources.cpp.part8" ) || die "couldn't open guiEditResources.cpp.part8 for write"; open( filGuiEditResourcesCPP10, ">guiEditResources.cpp.part10" ) || die "couldn't open guiEditResources.cpp.part10 for write"; open( filGuiEditResourcesH2, ">guiEditResources.h.part2" ) || die "couldn't open guiEditResources.h.part2 for write"; open( filGuiEditResourcesH4, ">guiEditResources.h.part4" ) || die "couldn't open guiEditResources.h.part4 for write"; while( ) { if ( /^BEGIN_COLORS/ ) { last; } } # now parsing colors while( ) { if ( /^END_COLORS/ ) { last; } # handle whitespace line next if ( /^[\s]*$/ ); # handle comment line next if ( /^!/ ); chomp; $szDefaultResource = $_; die "didn't find consed.color at the beginning of resource $szDefaultResource" if ( $szDefaultResource !~ /^consed\.color/ ); # figure out the resource name # e.g., # consed.colorVerticalScrollbarScrolledDown: green # should return: # consed.colorVerticalScrollbarScrolledDown # find the resource name $nColon = index( $szDefaultResource, ":" ); die "something wrong with resource $szDefaultResource--colon is at $nColon" if ( $nColon < 1 ); $szResourceName = substr( $szDefaultResource, 0, $nColon ); ( $szTemp = $szResourceName ) =~ s/^consed\.color//; $szForSaveColorAndCheckColormap = "Color" . $szTemp; $szColorDefaultsName = "soColor" . $szTemp . "_"; $szColorDefaultsDeclaration = "RWCString " . $szColorDefaultsName; print( filConsedResourcesH " $szColorDefaultsDeclaration;\n" ); print( filColorDefaultsH " $szColorDefaultsDeclaration;\n" ); print( filSaveColorsCPP " saveColorAndCheckColormap( $szForSaveColorAndCheckColormap );\n" ); print( filFallbackConsedResourcesH " \"$szDefaultResource\",\n" ); print( filConsedResourcesCPP " if ( soResourceName == \"$szResourceName\" ) {\n" ); print( filConsedResourcesCPP " pRes->$szColorDefaultsName = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); print( filConsedResources2CPP " soAllResources = soAllResources + \"$szResourceName: \" +\n" ); print( filConsedResources2CPP " $szColorDefaultsName + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); } while( ) { if ( /^BEGIN_TAGS/ ) { last; } } while( ) { if ( /^END_TAGS/ ) { last; } chomp; # handle whitespace line if ( /^[\s]*$/ ) { # keep the whitespace for easy viewing print( filFallbackConsedResourcesH "$_\n" ); next; } # handle comment line if ( /^[\s]*\/\// ) { # keep the comment for easy viewing print( filFallbackConsedResourcesH "$_\n" ); next; } die "this line is $_ but should be consed.tagColor... \n" if ( ! /^consed\.tagColor/ && !/^consed\.consensusTagColor/ ); $szDefaultResource = $_; # Example: # consed.tagColorMatchElsewhereLowQual: aquamarine # find the resource name $nColon = index( $szDefaultResource, ":" ); die "something wrong with resource $szDefaultResource--colon is at $nColon" if ( $nColon < 1 ); $szResourceName = substr( $szDefaultResource, 0, $nColon ); ( $szTagName = $szResourceName ) =~ s/^consed\.tagColor//; # special handling of consed.consensusTagColorRepeat $szTagName =~ s/^consed\.consensusTagColor//; $szConsedResourcesMember = "soTagColor" . $szTagName . "_"; # need to make the first letter lowercase $cFirstLetter = substr( $szTagName, 0, 1 ); $cFirstLetter =~ tr/A-Z/a-z/; substr( $szTagName, 0, 1 ) = $cFirstLetter; # special for G_dropout if ($szTagName eq "g_dropout" ) { $szTagName = "G_dropout"; } print( filSaveTagTypesCPP " tagTypes::pGetTagTypes()->assignValidTagType(\n" ); print( filSaveTagTypesCPP " \"$szTagName\",\n" ); print( filSaveTagTypesCPP " pRes->$szConsedResourcesMember,\n" ); defined($_ = ) || die "premature end of file while in tag $szDefaultResource\n"; chomp; die "$_ should be read, consensus, or both after $szDefaultResource\n" if ( $_ ne "read" && $_ ne "consensus" && $_ ne "both" ); print( filSaveTagTypesCPP " tagType::$_,\n" ); defined($_ = ) || die "premature end of file while in tag $szDefaultResource (B)\n"; chomp; die "should be true or false (whether user can create tag by swiping in tag $szDefaultResource" if ( $_ ne "true" && $_ ne "false" ); print( filSaveTagTypesCPP " $_ );\n" ); print( filSaveTagTypesCPP "\n" ); # example: # RWCString soTagColorMatchElsewhereLowQual_; print( filConsedResourcesH " RWCString $szConsedResourcesMember;\n" ); # for consedResources2.cpp # example: # soAllResources = soAllResources + "consed.tagColorG_dropout: " + # soTagColorG_dropout_ + "\n"; print( filConsedResources2CPP " soAllResources = soAllResources + \"$szResourceName: \" +\n" ); print( filConsedResources2CPP " $szConsedResourcesMember + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); # example: # else if ( soResourceName == "consed.tagColorMatchElsewhereLowQual" ) # pRes->soTagColorMatchElsewhereLowQual = soResourceValue; print( filConsedResourcesCPP " if ( soResourceName == \"$szResourceName\" ) {\n" ); print( filConsedResourcesCPP " pRes->$szConsedResourcesMember = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); print( filFallbackConsedResourcesH " \"$szDefaultResource\",\n" ); } # customTag1 to customTag15 for( $nTag = 1; $nTag <= 15; ++$nTag ) { # for saveTagTypes.cpp print( filSaveTagTypesCPP " tagTypes::pGetTagTypes()->assignValidTagType(\n" ); print( filSaveTagTypesCPP " pRes->soCustomTag${nTag}_,\n" ); print( filSaveTagTypesCPP " pRes->soTagColorCustomTag${nTag}_,\n" ); print( filSaveTagTypesCPP " tagType::read,\n" ); print( filSaveTagTypesCPP " true );\n" ); print( filSaveTagTypesCPP "\n" ); # for consedResources.h print( filConsedResourcesH "\n" ); print( filConsedResourcesH " RWCString soCustomTag${nTag}_;\n" ); print( filConsedResourcesH " RWCString soTagColorCustomTag${nTag}_;\n" ); # for consedResources2.cpp # example: # soAllResources = soAllResources + "consed.customTag8: " + # soCustomTag8_ + "\n"; # # soAllResources = soAllResources + "consed.tagColorCustomTag8: " + # soTagColorCustomTag8_ + "\n"; print( filConsedResources2CPP " soAllResources = soAllResources + \"consed.customTag${nTag}: \" +\n" ); print( filConsedResources2CPP " soCustomTag${nTag}_ + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); print( filConsedResources2CPP " soAllResources = soAllResources + \"consed.tagColorCustomTag${nTag}: \" +\n" ); print( filConsedResources2CPP " soTagColorCustomTag${nTag}_ + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); # for consedResources.cpp print( filConsedResourcesCPP " if ( soResourceName == \"consed.customTag${nTag}\" ) {\n" ); print( filConsedResourcesCPP " pRes->soCustomTag${nTag}_ = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); print( filConsedResourcesCPP " if ( soResourceName == \"consed.tagColorCustomTag${nTag}\" ) {\n" ); print( filConsedResourcesCPP " pRes->soTagColorCustomTag${nTag}_ = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); # for fallbackConsedResources.h print( filFallbackConsedResourcesH " \"consed.customTag${nTag}:\",\n" ); print( filFallbackConsedResourcesH " \"consed.tagColorCustomTag${nTag}:\",\n" ); } # customConsensusTag1 to customConsensusTag15 for( $nTag = 1; $nTag <= 15; ++$nTag ) { # for saveTagTypes.cpp print( filSaveTagTypesCPP "\n" ); print( filSaveTagTypesCPP " tagTypes::pGetTagTypes()->assignValidTagType(\n" ); print( filSaveTagTypesCPP " pRes->soCustomConsensusTag${nTag}_,\n" ); print( filSaveTagTypesCPP " pRes->soTagColorCustomConsensusTag${nTag}_,\n" ); print( filSaveTagTypesCPP " tagType::consensus,\n" ); print( filSaveTagTypesCPP " true );\n" ); # for consedResources.h print( filConsedResourcesH "\n" ); print( filConsedResourcesH " RWCString soCustomConsensusTag${nTag}_;\n" ); print( filConsedResourcesH " RWCString soTagColorCustomConsensusTag${nTag}_;\n" ); # for consedResources2.cpp # example: # soAllResources = soAllResources + "consed.customConsensusTag13: " + # soCustomConsensusTag13_ + "\n"; # # soAllResources = soAllResources + "consed.tagColorCustomConsensusTag13: " + # soTagColorCustomConsensusTag13_ + "\n"; print( filConsedResources2CPP " soAllResources = soAllResources + \"consed.customConsensusTag${nTag}: \" +\n" ); print( filConsedResources2CPP " soCustomConsensusTag${nTag}_ + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); print( filConsedResources2CPP " soAllResources = soAllResources + \"consed.tagColorCustomConsensusTag${nTag}: \" +\n" ); print( filConsedResources2CPP " soTagColorCustomConsensusTag${nTag}_ + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); # for consedResources.cpp print( filConsedResourcesCPP " if ( soResourceName == \"consed.customConsensusTag${nTag}\" ) {\n" ); print( filConsedResourcesCPP " pRes->soCustomConsensusTag${nTag}_ = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); print( filConsedResourcesCPP " if ( soResourceName == \"consed.tagColorCustomConsensusTag${nTag}\" ) {\n" ); print( filConsedResourcesCPP " pRes->soTagColorCustomConsensusTag${nTag}_ = soResourceValue;\n" ); print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); # for fallbackConsedResources.h print( filFallbackConsedResourcesH " \"consed.customConsensusTag${nTag}:\",\n" ); print( filFallbackConsedResourcesH " \"consed.tagColorCustomConsensusTag${nTag}:\",\n" ); } print( filConsedResourcesH "\n" ); while( ) { if ( /^BEGIN_MISC_RESOURCES/ ) { last; } } # initialize this so that the beginning comment section will be printed out $szResourceNameWithoutConsedPrefix = "AutoFinish"; $bGreenLabResearchSection = 0; while( ) { if( /^END_MISC_RESOURCES/ ) { last; } chomp; if ( /^! Resources here are just those for Green Lab research/ ) { $bGreenLabResearchSection = 1; } # do not print // lines with consed -printDefaultResources # but print everything else in the BEGIN_MISC_RESOURCES section if ( ( !$bGreenLabResearchSection ) && ( ! /^[\s]*\/\// ) ) { ( $szEscapeQuotes = $_ ) =~ s/(? ) || die "premature end of file while in misc resource $szDefaultResource\n"; chomp; if ( $_ eq "double" ) { $szPrefix = "d"; } elsif ( $_ eq "int" ) { $szPrefix = "n"; } elsif ( $_ eq "RWCString" ) { $szPrefix = "so"; } elsif ( $_ eq "bool" ) { $szPrefix = "b"; } elsif ( $_ eq "FileName" ) { $szPrefix = "fil"; } else { die "should be double, int, RWCString, FileName, or bool but is $_ for misc resource $szDefaultResource\n" ; } $szType = $_; # pad $szType with spaces so that the code lines up the variables $nSpacesToAdd = 12 - length( $szType ); $szTypePlusSpaces = $szType; for( $n = 0; $n < $nSpacesToAdd; ++$n ) { $szTypePlusSpaces .= " "; } $szVariable = $szPrefix . $szResourceNameWithoutConsedPrefix . "_"; print( filConsedParametersH " $szTypePlusSpaces $szVariable;\n" ); print( filConsedResourcesH " $szTypePlusSpaces $szVariable;\n" ); # for consedResources2.cpp # example: # soAllResources = soAllResources + "consed.listOfTagTypesToHide: " + # soListOfTagTypesToHide_ + "\n"; print( filConsedResources2CPP " soAllResources = soAllResources + \"$szResourceNameWithConsedPrefix: \" +\n" ); if ( $szType eq "RWCString" || $szType eq "FileName" ) { print( filConsedResources2CPP " $szVariable " ); } # elsif( $szType eq "int" ) { # print( filConsedResources2CPP " RWLocale::global().asString( (long) $szVariable ) " ); # } # elsif( $szType eq "double" ) { # print( filConsedResources2CPP " RWLocale::global().asString( $szVariable, 2 ) " ); # } elsif( $szType eq "int" ) { print( filConsedResources2CPP " RWCString( (long) $szVariable ) " ); } elsif( $szType eq "double" ) { print( filConsedResources2CPP " RWCString( (double) $szVariable, 3 ) " ); } elsif( $szType eq "bool" ) { print( filConsedResources2CPP " ( $szVariable ? \"true\" : \"false\" ) " ); } print( filConsedResources2CPP " + \"\\n\";\n" ); print( filConsedResources2CPP "\n" ); # for printAutoFinishParameters.cpp # example: # printf( "consed.autoFinishCostOfUniversalPrimerSubcloneReaction: %d\n", # pCP->dAutoFinishCostOfUniversalPrimerSubcloneReaction_ ); # printf( "compares universal primer subclone reaction, custom primer subclone reaction, and custom primer clone reaction to decide which to favor\n" ); # if ( $szResourceNameWithoutConsedPrefix =~ /^AutoFinish/ || $szResourceNameWithoutConsedPrefix =~ /^Primers/ || $szResourceNameWithoutConsedPrefix =~ /^AutoReport/ || $szResourceNameWithoutConsedPrefix =~ /^AutoPCRAmplify/ || $szResourceNameWithoutConsedPrefix eq "QualityThresholdForFindingHighQualityDiscrepancies" ) { if ( $szType eq "RWCString" || $szType eq "FileName" ) { print( filPrintAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %s\\n\",\n" ); print( filPrintAutoFinishParametersCPP " (char*)pCP->$szVariable.data() );\n" ); print( filPrintChangedAutoFinishParametersCPP " if ( consedResources::pDefaultResources_->$szVariable\n" ); print( filPrintChangedAutoFinishParametersCPP " != consedResources::pCurrentResources_->$szVariable ) \n" ); print( filPrintChangedAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %s\\n\",\n" ); print( filPrintChangedAutoFinishParametersCPP " (char*)pCP->$szVariable.data() );\n\n\n" ); } elsif( $szType eq "int" ) { print( filPrintAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %d\\n\",\n" ); print( filPrintAutoFinishParametersCPP " pCP->$szVariable );\n" ); print( filPrintChangedAutoFinishParametersCPP " if ( consedResources::pDefaultResources_->$szVariable\n" ); print( filPrintChangedAutoFinishParametersCPP " != consedResources::pCurrentResources_->$szVariable ) \n" ); print( filPrintChangedAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %d\\n\",\n" ); print( filPrintChangedAutoFinishParametersCPP " pCP->$szVariable );\n\n\n" ); } elsif( $szType eq "double" ) { print( filPrintAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %.3f\\n\",\n" ); print( filPrintAutoFinishParametersCPP " pCP->$szVariable );\n" ); print( filPrintChangedAutoFinishParametersCPP " if ( consedResources::pDefaultResources_->$szVariable\n" ); print( filPrintChangedAutoFinishParametersCPP " != consedResources::pCurrentResources_->$szVariable ) \n" ); print( filPrintChangedAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %.3f\\n\",\n" ); print( filPrintChangedAutoFinishParametersCPP " pCP->$szVariable );\n\n\n" ); } elsif( $szType eq "bool" ) { print( filPrintAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %s\\n\",\n" ); print( filPrintAutoFinishParametersCPP " ( ( pCP->$szVariable ) ? \"true\" : \"false\" ) );\n" ); print( filPrintChangedAutoFinishParametersCPP " if ( consedResources::pDefaultResources_->$szVariable\n" ); print( filPrintChangedAutoFinishParametersCPP " != consedResources::pCurrentResources_->$szVariable ) \n" ); print( filPrintChangedAutoFinishParametersCPP " fprintf( pAO, \"$szResourceNameWithConsedPrefix: %s\\n\",\n" ); print( filPrintChangedAutoFinishParametersCPP " ( pCP->$szVariable ? \"true\" : \"false\" ) );\n\n\n" ); } else { die "what kind of type is this? $szType"; } print( filPrintAutoFinishParametersCPP "\n" ); } print( filConsedResourcesCPP " if ( soResourceName == \"$szResourceNameWithConsedPrefix\" ) {\n" ); if ( $szType eq "RWCString" ) { print( filConsedResourcesCPP " pRes->$szVariable = soResourceValue;\n" ); } elsif ( $szType eq "int" ) { print( filConsedResourcesCPP " if ( !bIsNumericMaybeWithWhitespace( \n" ); print( filConsedResourcesCPP " soResourceValue, pRes->$szVariable ) )\n" ); print( filConsedResourcesCPP " BAD_VALUE( \"value for resource $szResourceNameWithConsedPrefix must be numeric\", soResourceValue )\n" ); } elsif ( $szType eq "double" ) { print( filConsedResourcesCPP " if ( !bIsNumericDouble( \n" ); print( filConsedResourcesCPP " soResourceValue, pRes->$szVariable ) )\n" ); print( filConsedResourcesCPP " BAD_VALUE( \"value for resource $szResourceNameWithConsedPrefix must be a decimal number\", soResourceValue )\n" ); } elsif ( $szType eq "bool" ) { print( filConsedResourcesCPP " soResourceValue.toLower();\n" ); print( filConsedResourcesCPP " if ( soResourceValue == \"true\" )\n" ); print( filConsedResourcesCPP " pRes->$szVariable = true;\n" ); print( filConsedResourcesCPP " else if ( soResourceValue == \"false\" )\n" ); print( filConsedResourcesCPP " pRes->$szVariable = false;\n" ); print( filConsedResourcesCPP " else\n" ); print( filConsedResourcesCPP " BAD_VALUE( \"value for resource $szResourceNameWithConsedPrefix must be true or false\", soResourceValue )\n" ); } elsif( $szType eq "FileName" ) { print( filConsedResourcesCPP " pRes->$szVariable = soResourceValue;\n" ); } print( filConsedResourcesCPP " return;\n" ); print( filConsedResourcesCPP " }\n" ); # for consedParameters.cpp # example: # saveAConsedParameter( bCountPads ); ( $szVariableWithoutFinalUnderscore = $szVariable ) =~ s/_$//; print( filConsedParametersCPP " saveAConsedParameter( $szVariableWithoutFinalUnderscore );\n" ); # for consedResources3.cpp.part2 # example: # translateCONSED_HOMEForOneResource( filFullPathnameOfPhred_ ); if ( $szType eq "FileName" || $szType eq "RWCString" ) { print( filConsedResources3CPP " translateCONSED_HOMEForOneResource( $szVariable );\n" ); } # keep track of the longest variable for the purpose of testing # the compiler for variable length if ( length( $szVariable ) > length( $szLongestVariable ) ) { $szLongestVariable = $szVariable; } &writeGuiEditResourcesFiles(); } close( filConsedResourcesH ); close( filColorDefaultsH ); close( filSaveColorsCPP ); close( filFallbackConsedResourcesH ); close( filConsedResourcesCPP ); close( filConsedResources2CPP ); close( filConsedResources3CPP ); close( filSaveTagTypesCPP ); close( filConsedParametersCPP ); close( filConsedParametersH ); close( filPrintAutoFinishParametersCPP ); close( filDefaultResourcesCPP ); close( filPrintChangedAutoFinishParametersCPP ); close( filGuiEditResourcesCPP2 ); close( filGuiEditResourcesCPP4 ); close( filGuiEditResourcesCPP6 ); close( filGuiEditResourcesCPP8 ); close( filGuiEditResourcesCPP10 ); close( filGuiEditResourcesH2 ); close( filGuiEditResourcesH4 ); # this is just so that nightly_build_gordon.perl does not # think that someone is editing these files and thus it cannot # use that directory @aFiles = ( "guiEditResources.cpp.part2", "guiEditResources.cpp.part4", "guiEditResources.cpp.part6", "guiEditResources.cpp.part8", "guiEditResources.cpp.part10", "guiEditResources.h.part2", "guiEditResources.h.part4" ); foreach $szFile (@aFiles ) { die "couldn't chmod $szFile" if ( chmod( 0444, $szFile ) != 1 ); } # write program to test long variable name open( filTestLongestVariable, ">checkVariableLengthLimit.cpp.part2" ) || die "couldn't open checkVariableLengthLimit.cpp.part2 for writing"; $szLongestVariable1 = $szLongestVariable . "1"; $szLongestVariable2 = $szLongestVariable . "2"; print( filTestLongestVariable " int $szLongestVariable1 = 1;\n" ); print( filTestLongestVariable " int $szLongestVariable2 = 2;\n" ); print( filTestLongestVariable " if ( ( $szLongestVariable2\n" ); print( filTestLongestVariable " -\n" ); print( filTestLongestVariable " $szLongestVariable1 ) != 1 ) {\n" ); $n = length( $szLongestVariable1 ); print( filTestLongestVariable " cerr << \"Consed uses some variables that are length( $szLongestVariable1 ) long which is too large for the compiler that compiled this to handle.\" << endl;\n" ); close( filTestLongestVariable ); @aFiles = ( "consedResources.cpp", "consedResources2.cpp", "consedResources3.cpp", "consedResources.h", "consedParameters.cpp", "consedParameters.h", "fallbackConsedResources.h", "saveTagTypes.cpp", "printAutoFinishParameters.cpp", "defaultResourcesDefinition.h", "printChangedAutoFinishParameters.cpp", "checkVariableLengthLimit.cpp", "colorDefaults.h" ); foreach $szFile ( @aFiles ) { if ( -e $szFile ) { unlink( $szFile ); } $szCommand = "cat $szFile.part1 $szFile.part2 $szFile.part3 >$szFile"; !system( $szCommand ) || die "couldn't execute $szCommand"; die "couldn't chmod $szFile" if ( chmod( 0444, $szFile ) != 1 ); } if ( -e "guiEditResources.cpp" ) { unlink( "guiEditResources.cpp" ) || die "couldn't delete guiEditResources.cpp"; } $szCommand = "cat guiEditResources.cpp.part1 guiEditResources.cpp.part2 guiEditResources.cpp.part3 guiEditResources.cpp.part4 guiEditResources.cpp.part5 guiEditResources.cpp.part6 guiEditResources.cpp.part7 guiEditResources.cpp.part8 guiEditResources.cpp.part9 guiEditResources.cpp.part10 guiEditResources.cpp.part11 >guiEditResources.cpp"; !system( $szCommand ) || die "couldn't execute $szCommand"; if ( chmod( 0444, "guiEditResources.cpp" ) != 1 ) { die "couldn't chmod 0444 guiEditResources.cpp"; } if ( -e "guiEditResources.h" ) { unlink( "guiEditResources.h" ) || die "couldn't delete guiEditResources.h"; } $szCommand = "cat guiEditResources.h.part1 guiEditResources.h.part2 guiEditResources.h.part3 guiEditResources.h.part4 guiEditResources.h.part5 >guiEditResources.h"; !system( $szCommand ) || die "couldn't execute $szCommand"; if ( chmod( 0444, "guiEditResources.h" ) != 1 ) { die "couldn't chmod 0444 guiEditResources.h"; } sub writeGuiEditResourcesFiles{ if( $szType ne "bool" ) { print( filGuiEditResourcesH2 " Widget wid${szResourceNameWithoutConsedPrefix}_;\n" ); } else { # bool type print( filGuiEditResourcesH2 " Widget wid${szResourceNameWithoutConsedPrefix}RadioBox_;\n" ); print( filGuiEditResourcesH2 " Widget wid${szResourceNameWithoutConsedPrefix}True_;\n" ); } print( filGuiEditResourcesH4 " void check${szResourceNameWithoutConsedPrefix}();\n" ); # printing callbacks and check... routines print( filGuiEditResourcesCPP2 "static void cb${szResourceNameWithoutConsedPrefix}( Widget wid,\n" ); print( filGuiEditResourcesCPP2 " XtPointer pClientData,\n" ); print( filGuiEditResourcesCPP2 " XtPointer pCallData ) {\n" ); print( filGuiEditResourcesCPP2 " \n" ); print( filGuiEditResourcesCPP2 " guiEditResources* pGER = (guiEditResources*) pClientData;\n" ); print( filGuiEditResourcesCPP2 " TRY_CATCH_WRAPPER( pGER->check${szResourceNameWithoutConsedPrefix}() );\n" ); print( filGuiEditResourcesCPP2 "}\n" ); print( filGuiEditResourcesCPP2 "void guiEditResources :: check${szResourceNameWithoutConsedPrefix}() {\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 "\n" ); # bool needs no checking if ( $szType ne "bool" ) { print( filGuiEditResourcesCPP2 " char* szValue =\n" ); print( filGuiEditResourcesCPP2 " XmTextFieldGetString( wid${szResourceNameWithoutConsedPrefix}_ );\n" ); print( filGuiEditResourcesCPP2 " RWCString soValue = szValue;\n" ); print( filGuiEditResourcesCPP2 " XtFree( szValue );\n" ); } if ( $szType eq "double" ) { print( filGuiEditResourcesCPP2 " double d;\n" ); print( filGuiEditResourcesCPP2 " if ( !bIsNumericDouble( soValue, d ) ) {\n" ); print( filGuiEditResourcesCPP2 " RWCString soError = \"$szResourceNameWithoutConsedPrefix must be floating point numeric\";" ); print( filGuiEditResourcesCPP2 " THROW_ERROR( soError );\n" ); print( filGuiEditResourcesCPP2 " }\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " resources_.d${szResourceNameWithoutConsedPrefix}_ = d;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " Pixel pixForeground;\n" ); print( filGuiEditResourcesCPP2 " Pixel pixBackground;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " getColors( resources_.d${szResourceNameWithoutConsedPrefix}_,\n" ); print( filGuiEditResourcesCPP2 " CONDEF->d${szResourceNameWithoutConsedPrefix}_,\n" ); } elsif ( $szType eq "int" ) { print( filGuiEditResourcesCPP2 " int n;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " if ( !bIsNumericMaybeWithWhitespace( soValue, n ) ) {\n" ); print( filGuiEditResourcesCPP2 " RWCString soError = \"consed.${szResourceNameWithoutConsedPrefix} must be numeric\";\n" ); print( filGuiEditResourcesCPP2 " THROW_ERROR( soError );\n" ); print( filGuiEditResourcesCPP2 " }\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " resources_.n${szResourceNameWithoutConsedPrefix}_ = n;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " Pixel pixForeground;\n" ); print( filGuiEditResourcesCPP2 " Pixel pixBackground;\n" ); print( filGuiEditResourcesCPP2 " getColors( resources_.n${szResourceNameWithoutConsedPrefix}_,\n" ); print( filGuiEditResourcesCPP2 " CONDEF->n${szResourceNameWithoutConsedPrefix}_,\n" ); } elsif( $szType eq "bool" ) { print( filGuiEditResourcesCPP2 " bool b =\n" ); print( filGuiEditResourcesCPP2 " XmToggleButtonGetState( wid${szResourceNameWithoutConsedPrefix}True_ );\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " // this is no way this can be invalid, so no checks are needed\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " resources_.b${szResourceNameWithoutConsedPrefix}_ = b;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " Pixel pixForeground;\n" ); print( filGuiEditResourcesCPP2 " Pixel pixBackground;\n" ); print( filGuiEditResourcesCPP2 " getColors( resources_.b${szResourceNameWithoutConsedPrefix}_,\n" ); print( filGuiEditResourcesCPP2 " CONDEF->b${szResourceNameWithoutConsedPrefix}_,\n" ); } elsif( $szType eq "RWCString" ) { print( filGuiEditResourcesCPP2 " resources_.so${szResourceNameWithoutConsedPrefix}_ =\n" ); print( filGuiEditResourcesCPP2 " soValue;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " Pixel pixForeground;\n" ); print( filGuiEditResourcesCPP2 " Pixel pixBackground;\n" ); print( filGuiEditResourcesCPP2 " getColors( resources_.so${szResourceNameWithoutConsedPrefix}_,\n" ); print( filGuiEditResourcesCPP2 " CONDEF->so${szResourceNameWithoutConsedPrefix}_,\n" ); } elsif( $szType eq "FileName" ) { print( filGuiEditResourcesCPP2 " resources_.fil${szResourceNameWithoutConsedPrefix}_ =\n" ); print( filGuiEditResourcesCPP2 " soValue;\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 " Pixel pixForeground;\n" ); print( filGuiEditResourcesCPP2 " Pixel pixBackground;\n" ); print( filGuiEditResourcesCPP2 " getColors( resources_.fil${szResourceNameWithoutConsedPrefix}_,\n" ); print( filGuiEditResourcesCPP2 " CONDEF->fil${szResourceNameWithoutConsedPrefix}_,\n" ); } else { die "strange type $szType for resource ${szResourceNameWithoutConsedPrefix}"; } # common to all types: print( filGuiEditResourcesCPP2 " pixForeground,\n" ); print( filGuiEditResourcesCPP2 " pixBackground );\n" ); print( filGuiEditResourcesCPP2 "\n" ); if ( $szType eq "bool" ) { # in the case of bool, it is the radio box whose color is changed # since there is no input text field box print( filGuiEditResourcesCPP2 " XtVaSetValues( wid${szResourceNameWithoutConsedPrefix}RadioBox_,\n" ); } else { print( filGuiEditResourcesCPP2 " XtVaSetValues( wid${szResourceNameWithoutConsedPrefix}_,\n" ); } print( filGuiEditResourcesCPP2 " XmNforeground, pixForeground,\n" ); print( filGuiEditResourcesCPP2 " XmNbackground, pixBackground,\n" ); print( filGuiEditResourcesCPP2 " NULL );\n" ); print( filGuiEditResourcesCPP2 "\n" ); print( filGuiEditResourcesCPP2 "}\n" ); # guiEditResources.cpp.part4: where the widgets are created if ( $szType eq "double" ) { print( filGuiEditResourcesCPP4 " makeWidgetTypeDouble( $szResourceNameWithConsedPrefix,\n" ); print( filGuiEditResourcesCPP4 " $szResourceNameWithoutConsedPrefix );\n" ); } elsif ( $szType eq "int" ) { print( filGuiEditResourcesCPP4 " makeWidgetTypeInt( $szResourceNameWithConsedPrefix,\n" ); print( filGuiEditResourcesCPP4 " $szResourceNameWithoutConsedPrefix );\n" ); } elsif( $szType eq "bool" ) { print( filGuiEditResourcesCPP4 " makeWidgetTypeBool( $szResourceNameWithConsedPrefix,\n" ); print( filGuiEditResourcesCPP4 " $szResourceNameWithoutConsedPrefix );\n" ); } elsif( $szType eq "RWCString" ) { print( filGuiEditResourcesCPP4 " makeWidgetTypeRWCString( $szResourceNameWithConsedPrefix,\n" ); print( filGuiEditResourcesCPP4 " $szResourceNameWithoutConsedPrefix );\n" ); } elsif( $szType eq "FileName" ) { print( filGuiEditResourcesCPP4 " makeWidgetTypeFileName( $szResourceNameWithConsedPrefix,\n" ); print( filGuiEditResourcesCPP4 " $szResourceNameWithoutConsedPrefix );\n" ); } else { die "strange type $szType for resource ${szResourceNameWithoutConsedPrefix}"; } # guiEditResources.cpp.part6: where the changed values are written out print( filGuiEditResourcesCPP6 " // $szResourceNameWithConsedPrefix\n" ); if ( $szType eq "double" ) { print( filGuiEditResourcesCPP6 " if ( resources_.d${szResourceNameWithoutConsedPrefix}_ !=\n" ); print( filGuiEditResourcesCPP6 " CONDEF->d${szResourceNameWithoutConsedPrefix}_ ) {\n" ); print( filGuiEditResourcesCPP6 " fprintf( pFileToWrite, \n" ); print( filGuiEditResourcesCPP6 " \"${szResourceNameWithConsedPrefix}: %f\\n\",\n" ); print( filGuiEditResourcesCPP6 " resources_.d${szResourceNameWithoutConsedPrefix}_ );\n" ); print( filGuiEditResourcesCPP6 " }\n" ); print( filGuiEditResourcesCPP6 "\n" ); } elsif( $szType eq "int" ) { print( filGuiEditResourcesCPP6 " if ( resources_.n${szResourceNameWithoutConsedPrefix}_ !=\n" ); print( filGuiEditResourcesCPP6 " CONDEF->n${szResourceNameWithoutConsedPrefix}_ ) {\n" ); print( filGuiEditResourcesCPP6 " fprintf( pFileToWrite, \n" ); print( filGuiEditResourcesCPP6 " \"${szResourceNameWithConsedPrefix}: %d\\n\",\n" ); print( filGuiEditResourcesCPP6 " resources_.n${szResourceNameWithoutConsedPrefix}_ );\n" ); print( filGuiEditResourcesCPP6 " }\n" ); print( filGuiEditResourcesCPP6 "\n" ); } elsif( $szType eq "bool" ) { print( filGuiEditResourcesCPP6 " if ( resources_.b${szResourceNameWithoutConsedPrefix}_ !=\n" ); print( filGuiEditResourcesCPP6 " CONDEF->b${szResourceNameWithoutConsedPrefix}_ ) {\n" ); print( filGuiEditResourcesCPP6 "\n" ); print( filGuiEditResourcesCPP6 " fprintf( pFileToWrite,\n" ); print( filGuiEditResourcesCPP6 " \"${szResourceNameWithConsedPrefix}: %s\\n\",\n" ); print( filGuiEditResourcesCPP6 " ( resources_.b${szResourceNameWithoutConsedPrefix}_ ?\n" ); print( filGuiEditResourcesCPP6 " \"true\" : \"false\" ) );\n" ); print( filGuiEditResourcesCPP6 " }\n" ); print( filGuiEditResourcesCPP6 "\n" ); } elsif( $szType eq "RWCString" ) { print( filGuiEditResourcesCPP6 " if ( resources_.so${szResourceNameWithoutConsedPrefix}_ !=\n" ); print( filGuiEditResourcesCPP6 " CONDEF->so${szResourceNameWithoutConsedPrefix}_ ) {\n" ); print( filGuiEditResourcesCPP6 "\n" ); print( filGuiEditResourcesCPP6 " fprintf( pFileToWrite,\n" ); print( filGuiEditResourcesCPP6 " \"${szResourceNameWithConsedPrefix}: %s\\n\",\n" ); print( filGuiEditResourcesCPP6 " resources_.so${szResourceNameWithoutConsedPrefix}_.data() );\n" ); print( filGuiEditResourcesCPP6 " }\n" ); print( filGuiEditResourcesCPP6 "\n" ); } elsif( $szType eq "FileName" ) { print( filGuiEditResourcesCPP6 " if ( resources_.fil${szResourceNameWithoutConsedPrefix}_ !=\n" ); print( filGuiEditResourcesCPP6 " CONDEF->fil${szResourceNameWithoutConsedPrefix}_ ) {\n" ); print( filGuiEditResourcesCPP6 "\n" ); print( filGuiEditResourcesCPP6 " fprintf( pFileToWrite,\n" ); print( filGuiEditResourcesCPP6 " \"${szResourceNameWithConsedPrefix}: %s\\n\",\n" ); print( filGuiEditResourcesCPP6 " resources_.fil${szResourceNameWithoutConsedPrefix}_.data() );\n" ); print( filGuiEditResourcesCPP6 " }\n" ); print( filGuiEditResourcesCPP6 "\n" ); } else { die "could not recognize $szType for resource $szResourceNameWithConsedPrefix" } # guiEditResources.cpp.part8: a huge list of check... routines print( filGuiEditResourcesCPP8 " check${szResourceNameWithoutConsedPrefix}();\n" ); # guiEditResources.cpp.part10: a list of the resources as strings print( filGuiEditResourcesCPP10 " aConsedResources_.insert(\"${szResourceNameWithConsedPrefix}\" );\n" ); }