Update of /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries In directory usw-pr-cvs1:/tmp/cvs-serv6134/Libraries Modified Files: ControlStructuresLibrary.pm FormsLibrary.pm Library.pm VariablesLibrary.pm wipeout.project Added Files: ClassLibrary.pm Log Message: * added support for classes and methods * did a complete rewrite of the variable system * various bugfixes --- NEW FILE: ClassLibrary.pm --- #-------------------------------------------------------- # $Id: ClassLibrary.pm,v 1.1 2002/07/11 22:03:10 derkork Exp $ # # NetScript and all related materials, such as documentation, # are protected under the terms and conditions of the Artistic License. # (C) 2000-2002 by Jan Thomä, insOMnia # mailto: ko...@in... #-------------------------------------------------------- use strict; #/** # The ClassLibrary is responsible for integrating classes and methods # into Netscript. You can specify a class by using the class-statements. # An example: # <pre> # <ns:class type="car"> # <ns:member name="wheels"/> # <ns:member name="color"/> # <ns:member name="factory"/> # # <ns:method name="INIT"> # <ns:new name="aFactory" class="Factory"/> # <ns:var var="this.factory" rval="aFactory"/> # </ns:method> # # <ns:method name="printCarStats"> # <table> # <tr><th colspan="2">Car stats</th></tr> # <tr><td>wheels</td><td>$(this.wheels)</td></tr> # </table> # </ns:method> # # <ns:method name="setColor" parameters="value"> # <ns:var var="this.wheels" val="$(value)"/> # </ns:method> # </ns:class> # # <ns:var name="myCar" class="car"/> <!-- Create a new instance of car --> # <ns:invoke var="myCar" method="setColor" value="red"/> # </pre> # New instances of objects are created via the <code><ns:var></code> # statement. The <code><ns:invoke></code>-statement executes a # method of an object instance. #*/ package NetScript::Libraries::ClassLibrary; use base qw(NetScript::Libraries::Library); use NetScript::Engine::EventListener; use NetScript::Engine::EventRelay; use NetScript::Engine::Class; use NetScript::Engine::Function; use NetScript::Engine::Member; use NetScript::Interpreter; use NetScript::Engine::DOMWalker; #/** # Ctor. # @public #*/ sub new { my $proto = shift; # get Prototype my $class = ref($proto) || $proto; my $this = $class -> SUPER::new(); my %knownClasses = (); $this -> { m_knownClasses } = \%knownClasses; $this; } sub init { my ($this, $interpreter) = @_; $this -> SUPER::init( $interpreter ); # create event listeners for all events my $eventListener1 = NetScript::Engine::EventListener -> new(); $eventListener1 -> init( $NetScript::Engine::DOMWalker::ELEMENT_START_EVENT, "elementStarted", $this ); my $eventListener2 = NetScript::Engine::EventListener -> new(); $eventListener2 -> init( $NetScript::Engine::DOMWalker::ELEMENT_END_EVENT, "elementFinished", $this ); my $eventRelay = $this -> interpreter() -> getEventRelay(); $eventRelay -> addEventListener( $eventListener1 ); $eventRelay -> addEventListener( $eventListener2 ); } #/** # Called when an element starts. # @callback #*/ sub elementStarted { my ( $this, $event ) = @_; my $domWalker = $event -> getEventUnknown(); my $node = $domWalker -> currentSource(); if ( $node -> getNamespaceURI() eq $NetScript::Interpreter::NAMESPACE_URI ) { my $localName = $node -> getLocalName(); if ($localName eq "class") { $this -> processClass( $domWalker, $node ); return 0; # consume event } if ($localName eq "invoke") { $this -> invokeMethod( $domWalker, $node ); return 0; # consume event } if ($localName eq "new") { $this -> newInstance( $domWalker, $node ); return 0; # consume event } if ($localName eq "method" ) { $domWalker -> stepSourceIn(); return 0;# consume event } } return 1; # do not consume event } #/** # Creates a new instance of a class and stores it in a variable. # Also calles the constructor of the class ( if any ). # @param an instance of NetScript::Engine::DOMWalker # @param an instance of XML::DOM2::Element #*/ sub newInstance { my ( $this, $domWalker, $node ) = @_; my $var = $node -> getAttribute( "var" ); my $name = $node -> getAttribute( "name" ); my $class = $node -> getAttribute( "class" ); my $se = $this -> interpreter() -> getStatementEvaluator(); $class = $se -> evaluateStatement( $class ); my $classProto = $this -> { m_knownClasses } -> { $class }; unless( defined( $classProto ) ) { $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( $NetScript::Interpreter::FATAL_EVENT, "The class $class is unknown." ); return; } my $classInstance = NetScript::Engine::Class -> new(); my @members = @{ $classProto -> membersList() }; for ( @members ) { my $aMember = $_; my $newMember = NetScript::Engine::Member -> new(); $newMember -> setName( $aMember -> getName() ); $newMember -> setValue( 0 ); $classInstance -> setMember( $newMember ); } my @functions = @{ $classProto -> functionsList() }; for ( @functions ) { my $aFunction = $_; my $newFunction = NetScript::Engine::Function -> new(); $newFunction -> setName( $aFunction -> getName() ); $newFunction -> setCode( $aFunction -> getCode() ); $newFunction -> setValueParameters( @{ $aFunction -> getValueParameters() } ); $newFunction -> setReferenceParameters( @{ $aFunction -> getReferenceParameters() } ); $classInstance -> setFunction( $newFunction ); } if ( defined( $name ) ) { $name = $se -> evaluateStatement( $name ); $se -> createVariable( $name, $classInstance ); } elsif ( defined( $var ) ) { $var = $se -> evaluateStatement( $var ); $se -> setVariable( $var, $classInstance ); } else { $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( $NetScript::Interpreter::FATAL_EVENT, "Neither name nor var is defined. You must specify one of them." ); return; } # invoke constructor my $ctor = $classInstance -> getFunction( "INIT" ); if ( defined( $ctor ) ) { $this -> invokeAMethod( $classInstance, $ctor, $node, $domWalker ); } } #/** # Invokes the given method. # @param an instance of NetScript::Engine::DOMWalker # @param an instance of XML::DOM2::Element ( the invoke-node ) #*/ sub invokeMethod { my ( $this, $domWalker, $node ) = @_; my $objectName = $node -> getAttribute( "var" ); my $classObject = $this -> interpreter() -> getStatementEvaluator() -> resolveObjectValue( $objectName ); unless( UNIVERSAL::isa( $classObject, "NetScript::Engine::Class" ) ) { $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( $NetScript::Interpreter::FATAL_EVENT, "$objectName is no instance of a class." ); return; } my $methodName = $node -> getAttribute( "method" ); my $methodObject = $classObject -> getFunction( $methodName ); unless( UNIVERSAL::isa( $methodObject, "NetScript::Engine::Function" ) ) { $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( $NetScript::Interpreter::FATAL_EVENT, "$methodName is no method of $objectName." ); return; } $this -> invokeAMethod( $classObject, $methodObject, $node, $domWalker); } #/** # Invokes a method. Method code will be appended # to the given element and the dom walker will walk over it. # @param an instance of NetScript::Engine::Class # @param an instance of NetScript::Engine::Function # @param an instance of XML::DOM2::Element #*/ sub invokeAMethod { my ( $this, $classObject, $methodObject, $node, $domWalker ) = @_; my $se = $this -> interpreter() -> getStatementEvaluator(); $node -> appendChild( $methodObject -> getCode() ); # append code my @paramsByVal = @{ $methodObject -> getValueParameters() }; my @paramsByRef = @{ $methodObject -> getReferenceParameters() }; my %valParams = (); for ( @paramsByVal ) { my $paramName = $_; my $paramValue = $node -> getAttribute( $paramName ); $paramValue = $se -> evaluateStatement( $paramValue ); $valParams{ $paramName } = $paramValue; } my %refParams = (); for ( @paramsByRef ) { my $paramName = $_; my $paramValue = $node -> getAttribute( $paramName ); $paramValue = $se -> evaluateStatement( $paramValue ); my $memberObject = $se -> resolveObject( $paramValue ); $refParams{ $paramName } = $memberObject; } # create new state tree $this -> interpreter() -> newStateTree(); # create this pointer $se -> createVariable( "this", $classObject ); # create variables for parameters for ( keys( %valParams ) ) { $se -> createVariable( $_, $valParams{ $_ } ); } my $newState = $this -> interpreter() -> getState(); for ( keys( %refParams ) ) { $newState -> createVariableValue( $_, $refParams{ $_ } ); } $domWalker -> stepSourceIn(); } #/** # Called when method invocation is finished. # @param an instance of NetScript::Engine::DOMWalker # @param an instance of XML::DOM2::Element (the invoke-node) # @callback #*/ sub invokeFinished { my ( $this, $domWalker, $node ) = @_; # remove code subtree from node. $node -> removeChild( $node -> getFirstChild() ); # restore old state $this -> interpreter() -> dropStateTree(); } #/** # Called when object creation is finished. # @param an instance of NetScript::Engine::DOMWalker # @param an instance of XML::DOM2::Element (the new-node) # @callback #*/ sub newFinished { my ( $this, $domWalker, $node ) = @_; # if node has no child nodes there was no ctor invoked if ( $node -> hasChildNodes() ) { # remove code subtree from node. $node -> removeChild( $node -> getFirstChild() ); # restore old state $this -> interpreter() -> dropStateTree(); } } #/** # Processes a class node. # @param an instance of NetScript::Engine::DOMWalker # @param an instance of XML::DOM2::Element (the class-node) # @callback #*/ sub processClass { my ( $this, $domWalker, $node ) = @_; my $classObject = NetScript::Engine::Class -> new(); my $className = $node -> getAttribute( "name" ); $classObject -> setName( $className ); $this -> { m_knownClasses } -> { $className } = $classObject; # parse the subtree looking for methods and members my $children = $node -> getChildNodes(); my $length = $children -> getLength() - 1; for ( 0..$length ) { my $child = $children -> item( $_ ); if ( $child -> getNodeType() == $XML::DOM2::Node::ELEMENT_NODE ) { if ( $child -> getNamespaceURI() eq $NetScript::Interpreter::NAMESPACE_URI ) { if ( $child -> getLocalName() eq "member" ) { my $memberObject = NetScript::Engine::Member -> new(); my $name = $child -> getAttribute( "name" ); $memberObject -> setName( $name ); $classObject -> setMember( $memberObject ); } elsif ( $child -> getLocalName() eq "method" ) { my $functionObject = NetScript::Engine::Function -> new(); my $byValParameters = $child -> getAttribute( "byVal" ); my @valParams = split( /[\s,]+/, $byValParameters ); $functionObject -> setValueParameters( @valParams ); my $byReferenceParameters = $child -> getAttribute( "byRef" ); my @refParams = split( /[\s,]+/, $byReferenceParameters ); $functionObject -> setReferenceParameters( @refParams ); my $name = $child -> getAttribute( "name" ); $functionObject -> setName( $name ); $functionObject -> setCode( $child ); $classObject -> setFunction( $functionObject ); } } } } $domWalker -> stepSourceNext(); # do not step into the class declaration } #/** # Called when an element ends. # @callback #*/ sub elementFinished { my ( $this, $event ) = @_; my $domWalker = $event -> getEventUnknown(); my $node = $domWalker -> currentSource(); if ( $node -> getNamespaceURI() eq $NetScript::Interpreter::NAMESPACE_URI ) { my $localName = $node -> getLocalName(); if ($localName eq "class") { return 0; # consume event } if ( $localName eq "invoke" ) { $this -> invokeFinished( $domWalker, $node ); return 0; # consume event } if ( $localName eq "new" ) { $this -> newFinished( $domWalker, $node ); return 0; # consume event } if ( $localName eq "method" ) { return 0; #consume event } } return 1; # do not consume event } sub getName { "ClassLibrary"; } sub getVersion { 1.0; } sub getDescription { "This Library adds Classes and Methods to NetScript."; } 1; # make require happy Index: ControlStructuresLibrary.pm =================================================================== RCS file: /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries/ControlStructuresLibrary.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ControlStructuresLibrary.pm 7 Jul 2002 14:34:37 -0000 1.5 --- ControlStructuresLibrary.pm 11 Jul 2002 22:03:10 -0000 1.6 *************** *** 172,201 **** if ($node -> getLocalName() eq "if") { $this -> ifStart( $domWalker, $node ); ! 0; # consume event } elsif( $node -> getLocalName() eq "else" ) { $this -> elseStart( $domWalker, $node ); ! 0; # consume event } elsif ($node -> getLocalName() eq "while" ) { $this -> whileStart( $domWalker, $node ); ! 0; # consume event } elsif ($node -> getLocalName() eq "for" ) { $this -> forStart( $domWalker, $node ); ! 0; # consume event } elsif( $node -> getLocalName() eq "ignore" ) { # Walk over the node $domWalker -> stepSourceIn(); ! 0; #consume event ! } ! else { ! 1; # do not consume event } } ! else { ! 1; # do not consume event ! } } --- 172,196 ---- if ($node -> getLocalName() eq "if") { $this -> ifStart( $domWalker, $node ); ! return 0; # consume event } elsif( $node -> getLocalName() eq "else" ) { $this -> elseStart( $domWalker, $node ); ! return 0; # consume event } elsif ($node -> getLocalName() eq "while" ) { $this -> whileStart( $domWalker, $node ); ! return 0; # consume event } elsif ($node -> getLocalName() eq "for" ) { $this -> forStart( $domWalker, $node ); ! return 0; # consume event } elsif( $node -> getLocalName() eq "ignore" ) { # Walk over the node $domWalker -> stepSourceIn(); ! return 0; #consume event } } ! return 1; # do not consume event } *************** *** 364,368 **** my $value = $this -> { m_forLoops } -> { $node }; - unless ( defined( $value ) ) { # variable is yet unknown so we initialize it $value = $from; --- 359,362 ---- *************** *** 376,394 **** if ( $createVar ) { # create variable ! unless( $this -> interpreter() -> getState() -> createVariableValue( ! $theVar, $value ) ) { ! $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( ! $NetScript::Interpreter::FATAL_EVENT, ! "A variable named $theVar already exists. Use var=\"$theVar\" instead of name=\"$theVar\"." ); ! } } else { # set variable ! unless( $this -> interpreter() -> getState() -> setVariableValue( ! $theVar, $value ) ) { ! $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( ! $NetScript::Interpreter::FATAL_EVENT, ! "A variable named $theVar doesn't exist. Use name=\"$theVar\" instead of var=\"$theVar\"." ); ! } } $this -> { m_forLoops } -> { $node } = $value; --- 370,380 ---- if ( $createVar ) { # create variable ! $this -> interpreter() -> getStatementEvaluator() -> ! createVariable( $theVar, $value ); } else { # set variable ! $this -> interpreter() -> getStatementEvaluator() -> ! setVariable( $theVar, $value ); } $this -> { m_forLoops } -> { $node } = $value; *************** *** 419,427 **** # if the variable value was changed in the loop we have to # reflect this in our internal setting. my $varName = $this -> { m_forLoopsVarNames } -> { $node }; ! $varName = $this -> interpreter() -> getStatementEvaluator() -> ! evaluateStatement( $varName ); ! my $varValue = $this -> interpreter() -> getState() -> ! getVariableValue( $varName ); $this -> { m_forLoops } -> { $node } = $varValue; --- 405,412 ---- # if the variable value was changed in the loop we have to # reflect this in our internal setting. + my $se = $this -> interpreter() -> getStatementEvaluator(); my $varName = $this -> { m_forLoopsVarNames } -> { $node }; ! $varName = $se -> evaluateStatement( $varName ); ! my $varValue = $se -> resolveObjectValue( $varName ); $this -> { m_forLoops } -> { $node } = $varValue; *************** *** 443,471 **** # kill state $this -> interpreter() -> dropState(); ! 0; # consume event } elsif ($node -> getLocalName() eq "else") { # kill state $this -> interpreter() -> dropState(); ! 0; # consume event } elsif ($node -> getLocalName() eq "while" ) { $this -> whileEnd( $domWalker, $node ); ! 0; # consume event } elsif ($node -> getLocalName() eq "for" ) { $this -> forEnd( $domWalker, $node ); ! 0; # consume event } elsif ($node -> getLocalName() eq "ignore" ) { ! 0; #consume event ! } ! else { ! 1; # do not consume event } } ! else { ! 1; # do not consume event ! } } --- 428,451 ---- # kill state $this -> interpreter() -> dropState(); ! return 0; # consume event } elsif ($node -> getLocalName() eq "else") { # kill state $this -> interpreter() -> dropState(); ! return 0; # consume event } elsif ($node -> getLocalName() eq "while" ) { $this -> whileEnd( $domWalker, $node ); ! return 0; # consume event } elsif ($node -> getLocalName() eq "for" ) { $this -> forEnd( $domWalker, $node ); ! return 0; # consume event } elsif ($node -> getLocalName() eq "ignore" ) { ! return 0; #consume event } } ! return 1; # do not consume event } *************** *** 482,486 **** if ( $node -> getTarget() eq "netscript" ) { my $data = $node -> getData(); - warn "DATA: $data\n\n\n"; if ( $data =~ /^\s*use\s*([^\s]*)/) { # check for "use LIBNAME" $this -> interpreter() -> getLibLoader() -> loadLibrary( $1 ); --- 462,465 ---- *************** *** 597,601 **** my $document = $this -> interpreter() -> getDOMParser() -> parseString( $fileData ); - warn "RIMPORT: Changing to $fileData ... > $document " ; $domWalker -> resetDocument( $document ); $this -> addDocumentReference( $importPoint, $document, $sourceDocument ); --- 576,579 ---- Index: FormsLibrary.pm =================================================================== RCS file: /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries/FormsLibrary.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FormsLibrary.pm 7 Jul 2002 14:34:37 -0000 1.4 --- FormsLibrary.pm 11 Jul 2002 22:03:10 -0000 1.5 *************** *** 65,71 **** # register the P-object ! $this -> interpreter() -> getState() -> createObjectValue( "P", $paramWrapper ); # register the C-object ! $this -> interpreter() -> getState() -> createObjectValue( "C", $cookieWrapper ); # register event listeners for the cookie-tag --- 65,71 ---- # register the P-object ! $this -> interpreter() -> getStatementEvaluator() -> createVariable( "P", $paramWrapper ); # register the C-object ! $this -> interpreter() -> getStatementEvaluator() -> createVariable( "C", $cookieWrapper ); # register event listeners for the cookie-tag *************** *** 185,204 **** my ($this) = @_; $this -> SUPER::shutdown(); - } - - - #/** - # Sends a debug event. - # @param the debug message - # @private - #*/ - sub debug { - my ($this, $message) = @_; - $this -> interpreter() -> getEventRelay() -> - createAndRaiseEvent( - $NetScript::Libraries::DebugLibrary::DEBUG_EVENT, - $message, - "[Forms]" - ); } --- 185,188 ---- Index: Library.pm =================================================================== RCS file: /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries/Library.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Library.pm 7 Jul 2002 14:34:37 -0000 1.5 --- Library.pm 11 Jul 2002 22:03:10 -0000 1.6 *************** *** 21,27 **** package NetScript::Libraries::Library; - - - #/** # Ctor. Creates a new Library Object. --- 21,24 ---- Index: VariablesLibrary.pm =================================================================== RCS file: /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries/VariablesLibrary.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** VariablesLibrary.pm 7 Jul 2002 14:34:37 -0000 1.3 --- VariablesLibrary.pm 11 Jul 2002 22:03:10 -0000 1.4 *************** *** 20,26 **** use base qw(NetScript::Libraries::Library); - - - use NetScript::Libraries::DebugLibrary; use NetScript::Engine::EventListener; use NetScript::Engine::EventRelay; --- 20,23 ---- *************** *** 119,130 **** $var = $se -> evaluateStatement( $var ); my $value = $node -> getAttribute( "val"); ! $value = $se -> evaluateStatement( $value ); ! ! if ( $name ne "" && $var eq "" ) { ! $se -> createVariable( $name, $value ); } ! elsif( $name eq "" && $var ne "" ) { ! $se -> setVariable( $var, $value ); } $domWalker -> stepSourceIn(); } --- 116,149 ---- $var = $se -> evaluateStatement( $var ); my $value = $node -> getAttribute( "val"); ! my $rvalue = $node -> getAttribute( "rval" ); ! ! if ( $rvalue eq "" && defined( $value ) ) { ! $value = $se -> evaluateStatement( $value ); ! if ( $name ne "" && $var eq "" ) { ! $se -> createVariable( $name, $value ); ! } ! elsif( $name eq "" && $var ne "" ) { ! $se -> setVariable( $var, $value ); ! } } ! elsif( $rvalue ne "" ) { ! $rvalue = $se -> evaluateStatement( $rvalue ); ! my $reference = $se -> resolveObject( $rvalue ); ! if ( $name ne "" && $var eq "" ) { ! $this -> interpreter() -> getState() -> ! createVariableValue( $name, $reference ); ! } ! elsif( $name eq "" && $var ne "" ) { ! $this -> interpreter() -> getState() -> ! setVariableValue( $name, $reference ); ! } } + else { + $this -> interpreter() -> getEventRelay() -> createAndRaiseEvent( + $NetScript::Interpreter::FATAL_EVENT, + "Neither val nor rval is defined. You must specify one of them." ); + return; + } + $domWalker -> stepSourceIn(); } *************** *** 134,153 **** my ($this) = @_; $this -> SUPER::shutdown(); - } - - - #/** - # Sends a debug event. - # @param the debug message - # @private - #*/ - sub debug { - my ($this, $message) = @_; - $this -> interpreter() -> getEventRelay() -> - createAndRaiseEvent( - $NetScript::Libraries::DebugLibrary::DEBUG_EVENT, - $message, - "[Variables]" - ); } --- 153,156 ---- Index: wipeout.project =================================================================== RCS file: /cvsroot/net-script/netscript2/src/perl/NetScript/Libraries/wipeout.project,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** wipeout.project 29 May 2002 20:27:17 -0000 1.5 --- wipeout.project 11 Jul 2002 22:03:10 -0000 1.6 *************** *** 1,237 **** b ! C DmDictionary 0 10cf8 8 ! c 0 10e46 9 ! C Category 1 5426 ! c 0 10e86 4 ! C DmString 2 10e8d 2 e3 ! c 2 10e8c a defaultExe ! C DmSet 3 10e8f 1 ! c 2 5435 2 e3 ! L 5435 ! c 2 10e8e b executables ! c 3 10e8a 3 ! c 2 543c 3 *.C ! L 543c ! c 2 543f 4 *.cc ! L 543f ! c 2 5442 5 *.cpp ! L 5442 ! c 2 10e89 a extensions ! c 2 10e88 a CPP_source ! c 2 10e87 4 name ! c 2 10e48 a CPP_source ! c 1 5457 ! c 0 10ecc 4 ! c 2 10ed3 2 e3 ! c 2 10ed2 a defaultExe ! c 3 10ed5 1 ! c 2 5464 2 e3 ! L 5464 ! c 2 10ed4 b executables ! c 3 10ed0 1 ! c 2 546b 3 *.c ! L 546b ! c 2 10ecf a extensions ! c 2 10ece 8 C_source ! c 2 10ecd 4 name ! c 2 10e49 8 C_source ! c 1 5480 ! c 0 10f06 4 ! c 2 10f0d 2 e3 ! c 2 10f0c a defaultExe ! c 3 10f0f 1 ! c 2 548d 2 e3 ! L 548d ! c 2 10f0e b executables ! c 3 10f0a 1 ! c 2 5494 3 *.e ! L 5494 ! c 2 10f09 a extensions ! c 2 10f08 6 Eiffel ! c 2 10f07 4 name ! c 2 10e4a 6 Eiffel ! c 1 54a9 ! c 0 10f40 4 ! c 2 10f47 2 e3 ! c 2 10f46 a defaultExe ! c 3 10f49 1 ! c 2 54b6 2 e3 ! L 54b6 ! c 2 10f48 b executables ! c 3 10f44 4 ! c 2 54bd 3 *.F ! L 54bd ! c 2 54c0 3 *.f ! L 54c0 ! c 2 54c3 5 *.for ! L 54c3 ! c 2 54c6 5 *.fpp ! L 54c6 ! c 2 10f43 a extensions ! c 2 10f42 7 Fortran ! c 2 10f41 4 name ! c 2 10e4b 7 Fortran ! c 1 54db ! c 0 10f86 4 ! c 2 10f8d 2 e3 ! c 2 10f8c a defaultExe ! c 3 10f8f 1 ! c 2 54e8 2 e3 ! L 54e8 ! c 2 10f8e b executables ! c 3 10f8a 2 ! c 2 54ef 3 *.H ! L 54ef ! c 2 54f2 3 *.h ! L 54f2 ! c 2 10f89 a extensions ! c 2 10f88 6 Header ! c 2 10f87 4 name ! c 2 10e4c 6 Header ! c 1 5507 ! c 0 10fc4 4 ! c 2 10fcb 9 surfboard ! c 2 10fca a defaultExe ! c 3 10fcd 2 ! c 2 5514 2 e3 ! L 5514 ! c 2 5517 9 surfboard ! L 5517 ! c 2 10fcc b executables ! c 3 10fc8 2 ! c 2 551e 5 *.htm ! L 551e ! c 2 5521 6 *.html ! L 5521 ! c 2 10fc7 a extensions ! c 2 10fc6 4 Html ! c 2 10fc5 4 name ! c 2 10e4d 4 Html ! c 1 5536 ! c 0 11006 4 ! c 2 1100d 2 e3 ! c 2 1100c a defaultExe ! c 3 1100f 1 ! c 2 5543 2 e3 ! L 5543 ! c 2 1100e b executables ! c 3 1100a 1 ! c 2 554a 6 *.java ! L 554a ! c 2 11009 a extensions ! c 2 11008 4 Java ! c 2 11007 4 name ! c 2 10e4e 4 Java ! c 1 555f ! c 0 11040 4 ! c 2 11047 2 e3 ! c 2 11046 a defaultExe ! c 3 11049 1 ! c 2 556c 2 e3 ! L 556c ! c 2 11048 b executables ! c 3 11044 1 ! c 2 5573 5 *.tex ! L 5573 ! c 2 11043 a extensions ! c 2 11042 5 Latex ! c 2 11041 4 name ! c 2 10e4f 5 Latex ! c 1 5588 ! c 0 1107a 4 ! c 2 11081 2 e3 ! c 2 11080 a defaultExe ! c 3 11083 1 ! c 2 5595 2 e3 ! L 5595 ! c 2 11082 b executables ! c 3 1107e 0 ! c 2 1107d a extensions ! c 2 1107c 5 Other ! c 2 1107b 4 name ! c 2 10e50 5 Other ! c 2 10e45 a categories ! c 0 10e52 1 ! C ProjectDir 4 55b2 ! c 2 55b3 28 netscript2/src/perl/NetScript/Libraries/ 11 81 ! c 2 55b4 0 0 ! c 2 10e54 28 netscript2/src/perl/NetScript/Libraries/ ! c 2 10e51 b directories ! C DmBag 5 10d04 6 ! c 2 10d3a eb b ! C DmDictionary 0 10d06 3 ! C DmString 1 10d18 36 b ! C DmSet 0 55f0 1 ! C DmString 1 561e 5 Other ! L 561e ! c 1 10d17 a categories ! c 1 10d08 1b ControlStructuresLibrary.pm ! c 1 10d07 4 name ! C DmInteger 2 10d1a 1 ! c 1 10d19 9 substMode ! c 2 10d6f de b ! C DmDictionary 0 10d3b 3 ! C DmString 1 10d4d 36 b ! C DmSet 0 562f 1 ! C DmString 1 565d 5 Other ! L 565d ! c 1 10d4c a categories ! c 1 10d3d f DebugLibrary.pm ! c 1 10d3c 4 name ! C DmInteger 2 10d4f 1 ! c 1 10d4e 9 substMode ! c 2 10da4 e1 b ! C DmDictionary 0 10d70 3 ! C DmString 1 10d82 36 b ! C DmSet 0 566e 1 ! C DmString 1 569c 5 Other ! L 569c ! c 1 10d81 a categories ! c 1 10d72 11 DefaultLibrary.pm ! c 1 10d71 4 name ! C DmInteger 2 10d84 1 ! c 1 10d83 9 substMode ! c 2 10dd9 e1 b ! C DmDictionary 0 10da5 3 ! C DmString 1 10db7 39 b ! C DmSet 0 10b73 1 ! C DmString 1 10ced 5 Other ! L 10ced ! c 1 10db6 a categories ! c 1 10da7 f FormsLibrary.pm ! c 1 10da6 4 name ! C DmInteger 2 10db9 1 ! c 1 10db8 9 substMode ! c 2 10e0e d9 b ! C DmDictionary 0 10dda 3 ! C DmString 1 10dec 36 b ! C DmSet 0 56ad 1 ! C DmString 1 56db 5 Other ! L 56db ! c 1 10deb a categories ! c 1 10ddc a Library.pm ! c 1 10ddb 4 name ! C DmInteger 2 10dee 1 ! c 1 10ded 9 substMode ! c 2 10e43 e3 b ! C DmDictionary 0 10e0f 3 ! C DmString 1 10e21 36 b ! C DmSet 0 56ec 1 ! C DmString 1 571a 5 Other ! L 571a ! c 1 10e20 a categories ! c 1 10e11 13 VariablesLibrary.pm ! c 1 10e10 4 name ! C DmInteger 2 10e23 1 ! c 1 10e22 9 substMode ! c 2 10e44 5 files ! c 2 10d00 94 xterm -ls -fn -*-lucidatypewriter-medium-r-normal-*-12-* -bg gray90 -T Program -geometry 80x10+0+0 -e "[set command with 'Project->Launch Command']" ! c 2 10cff 6 launch ! c 2 10cfc 4 make ! c 2 10cfb 4 make ! c 2 10cfe 0 ! c 2 10cfd 8 makeFile ! c 5 10d01 0 ! c 2 10d03 7 modules ! c 2 10cfa 9 Libraries ! c 2 10cf9 4 name --- 1,248 ---- b ! C DmDictionary 0 d787 8 ! c 0 d90a 9 ! C Category 1 702b ! c 0 d94a 4 ! C DmString 2 d951 2 e3 ! c 2 d950 a defaultExe ! C DmSet 3 d953 1 ! c 2 703a 2 e3 ! L 703a ! c 2 d952 b executables ! c 3 d94e 3 ! c 2 7041 3 *.C ! L 7041 ! c 2 7044 4 *.cc ! L 7044 ! c 2 7047 5 *.cpp ! L 7047 ! c 2 d94d a extensions ! c 2 d94c a CPP_source ! c 2 d94b 4 name ! c 2 d90c a CPP_source ! c 1 705c ! c 0 d990 4 ! c 2 d997 2 e3 ! c 2 d996 a defaultExe ! c 3 d999 1 ! c 2 7069 2 e3 ! L 7069 ! c 2 d998 b executables ! c 3 d994 1 ! c 2 7070 3 *.c ! L 7070 ! c 2 d993 a extensions ! c 2 d992 8 C_source ! c 2 d991 4 name ! c 2 d90d 8 C_source ! c 1 7085 ! c 0 d9ca 4 ! c 2 d9d1 2 e3 ! c 2 d9d0 a defaultExe ! c 3 d9d3 1 ! c 2 7092 2 e3 ! L 7092 ! c 2 d9d2 b executables ! c 3 d9ce 1 ! c 2 7099 3 *.e ! L 7099 ! c 2 d9cd a extensions ! c 2 d9cc 6 Eiffel ! c 2 d9cb 4 name ! c 2 d90e 6 Eiffel ! c 1 70ae ! c 0 da04 4 ! c 2 da0b 2 e3 ! c 2 da0a a defaultExe ! c 3 da0d 1 ! c 2 70bb 2 e3 ! L 70bb ! c 2 da0c b executables ! c 3 da08 4 ! c 2 70c2 3 *.F ! L 70c2 ! c 2 70c5 3 *.f ! L 70c5 ! c 2 70c8 5 *.for ! L 70c8 ! c 2 70cb 5 *.fpp ! L 70cb ! c 2 da07 a extensions ! c 2 da06 7 Fortran ! c 2 da05 4 name ! c 2 d90f 7 Fortran ! c 1 70e0 ! c 0 da4a 4 ! c 2 da51 2 e3 ! c 2 da50 a defaultExe ! c 3 da53 1 ! c 2 70ed 2 e3 ! L 70ed ! c 2 da52 b executables ! c 3 da4e 2 ! c 2 70f4 3 *.H ! L 70f4 ! c 2 70f7 3 *.h ! L 70f7 ! c 2 da4d a extensions ! c 2 da4c 6 Header ! c 2 da4b 4 name ! c 2 d910 6 Header ! c 1 710c ! c 0 da88 4 ! c 2 da8f 9 surfboard ! c 2 da8e a defaultExe ! c 3 da91 2 ! c 2 7119 2 e3 ! L 7119 ! c 2 711c 9 surfboard ! L 711c ! c 2 da90 b executables ! c 3 da8c 2 ! c 2 7123 5 *.htm ! L 7123 ! c 2 7126 6 *.html ! L 7126 ! c 2 da8b a extensions ! c 2 da8a 4 Html ! c 2 da89 4 name ! c 2 d911 4 Html ! c 1 713b ! c 0 daca 4 ! c 2 dad1 2 e3 ! c 2 dad0 a defaultExe ! c 3 dad3 1 ! c 2 7148 2 e3 ! L 7148 ! c 2 dad2 b executables ! c 3 dace 1 ! c 2 714f 6 *.java ! L 714f ! c 2 dacd a extensions ! c 2 dacc 4 Java ! c 2 dacb 4 name ! c 2 d912 4 Java ! c 1 7164 ! c 0 db04 4 ! c 2 db0b 2 e3 ! c 2 db0a a defaultExe ! c 3 db0d 1 ! c 2 7171 2 e3 ! L 7171 ! c 2 db0c b executables ! c 3 db08 1 ! c 2 7178 5 *.tex ! L 7178 ! c 2 db07 a extensions ! c 2 db06 5 Latex ! c 2 db05 4 name ! c 2 d913 5 Latex ! c 1 718d ! c 0 db3e 4 ! c 2 db45 2 e3 ! c 2 db44 a defaultExe ! c 3 db47 1 ! c 2 719a 2 e3 ! L 719a ! c 2 db46 b executables ! c 3 db42 0 ! c 2 db41 a extensions ! c 2 db40 5 Other ! c 2 db3f 4 name ! c 2 d914 5 Other ! c 2 d909 a categories ! c 0 d916 1 ! C ProjectDir 4 71b7 ! c 2 71b8 28 netscript2/src/perl/NetScript/Libraries/ 11 81 ! c 2 71b9 0 0 ! c 2 d918 28 netscript2/src/perl/NetScript/Libraries/ ! c 2 d915 b directories ! C DmBag 5 d793 7 ! c 2 d7c9 d7 b ! C DmDictionary 0 d795 3 ! C DmString 1 d7a7 36 b ! C DmSet 0 d602 1 ! C DmString 1 d77c 5 Other ! L d77c ! c 1 d7a6 a categories ! c 1 d797 f ClassLibrary.pm ! c 1 d796 4 name ! C DmInteger 2 d7a9 1 ! c 1 d7a8 9 substMode ! c 2 d7fe e4 b ! C DmDictionary 0 d7ca 3 ! C DmString 1 d7dc 36 b ! C DmSet 0 71f7 1 ! C DmString 1 7225 5 Other ! L 7225 ! c 1 d7db a categories ! c 1 d7cc 1b ControlStructuresLibrary.pm ! c 1 d7cb 4 name ! C DmInteger 2 d7de 1 ! c 1 d7dd 9 substMode ! c 2 d833 d7 b ! C DmDictionary 0 d7ff 3 ! C DmString 1 d811 36 b ! C DmSet 0 7236 1 ! C DmString 1 7264 5 Other ! L 7264 ! c 1 d810 a categories ! c 1 d801 f DebugLibrary.pm ! c 1 d800 4 name ! C DmInteger 2 d813 1 ! c 1 d812 9 substMode ! c 2 d868 da b ! C DmDictionary 0 d834 3 ! C DmString 1 d846 36 b ! C DmSet 0 7275 1 ! C DmString 1 72a3 5 Other ! L 72a3 ! c 1 d845 a categories ! c 1 d836 11 DefaultLibrary.pm ! c 1 d835 4 name ! C DmInteger 2 d848 1 ! c 1 d847 9 substMode ! c 2 d89d d7 b ! C DmDictionary 0 d869 3 ! C DmString 1 d87b 36 b ! C DmSet 0 72b4 1 ! C DmString 1 72e2 5 Other ! L 72e2 ! c 1 d87a a categories ! c 1 d86b f FormsLibrary.pm ! c 1 d86a 4 name ! C DmInteger 2 d87d 1 ! c 1 d87c 9 substMode ! c 2 d8d2 d2 b ! C DmDictionary 0 d89e 3 ! C DmString 1 d8b0 36 b ! C DmSet 0 72f3 1 ! C DmString 1 7321 5 Other ! L 7321 ! c 1 d8af a categories ! c 1 d8a0 a Library.pm ! c 1 d89f 4 name ! C DmInteger 2 d8b2 1 ! c 1 d8b1 9 substMode ! c 2 d907 dc b ! C DmDictionary 0 d8d3 3 ! C DmString 1 d8e5 36 b ! C DmSet 0 7332 1 ! C DmString 1 7360 5 Other ! L 7360 ! c 1 d8e4 a categories ! c 1 d8d5 13 VariablesLibrary.pm ! c 1 d8d4 4 name ! C DmInteger 2 d8e7 1 ! c 1 d8e6 9 substMode ! c 2 d908 5 files ! c 2 d78f 94 xterm -ls -fn -*-lucidatypewriter-medium-r-normal-*-12-* -bg gray90 -T Program -geometry 80x10+0+0 -e "[set command with 'Project->Launch Command']" ! c 2 d78e 6 launch ! c 2 d78b 4 make ! c 2 d78a 4 make ! c 2 d78d 0 ! c 2 d78c 8 makeFile ! c 5 d790 0 ! c 2 d792 7 modules ! c 2 d789 9 Libraries ! c 2 d788 4 name |