Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > by-pkgid > 15a35adde3d1bc9fde6da8c8fe069b60 > files > 89

pnet-devel-0.5.0-1mdk.ppc.rpm

This is pnettools.info, produced by makeinfo version 4.3 from
pnettools.texi.

   The Portable.NET development tools assist with building and
manipulating images in the portable executable format.  development.

   Copyright (C) 2001 Southern Storm Software, Pty Ltd


File: pnettools.info,  Node: Field Attributes,  Next: Field Initialization,  Prev: Field Declarations,  Up: Field Declarations

Field Attributes
----------------

     FieldAttribute => *public*
     				| *private*
     				| *family*
     				| *assembly*
     				| *famandassem*
     				| *famorassem*
     				| *compilercontrolled*
                     | *static*
     				| *literal*
     				| *initonly*
     				| *notserialized*
     				| *rtspecialname*
     				| *specialname*
     				| *marshal* '(' NativeType ')'

*public*
     Specify that the field is accessible from any other class.  This
     corresponds to the C# `public' access level.

*private*
     Specify that the field is only accessible to the class in which it
     is declared.  This corresponds to the C# `private' access level.

*family*
     Specify that the field is accessible to the class in which it is
     declared, and any subclass of the field's class.  This corresponds
     to the C# `protected' access level.

*assembly*
     Specify that the field is only accessible to classes in the same
     assembly as the field.  This corresponds to the C# `internal'
     access level.

*famandassem*
     Specify that the field is only accessible to classes in the same
     assembly as the field, and which inherit from the field's class.
     There is no C# equivalent of this access level.

*famorassem*
     Specify that the field is only accessible to classes in the same
     assembly as the field or to classes which inherit from the field's
     class.  This corresponds to the C# `protected internal' access
     level.

*compilercontrolled*
     Specify that the field is accessible in a manner controlled by the
     compiler.  The runtime engine treats this the same as *assembly*.
     There is no C# equivalent of this access level.

*static*
     Specify that the field is staticly declared within its class.  If
     this attribute is not present, the field will be part of the
     instances of its class.

*literal*
     Specify that the field is associated with a literal constant value.
     Such a field will not occupy space at runtime, and compilers will
     expand the literal value into the code stream at compile time.
     This corresponds to the C# `const' keyword.

*initonly*
     Specify that the field can only be written during the
     initialization process for the field's class.  Afterwards, it is
     read-only.  This corresponds to the C# `readonly' keyword.

*notserialized*
     Specify that the field will not be output during serialization if
     its class has the *serialized* attribute.

*specialname*
     Specify that the field has special significance to tools other than
     the runtime engine.  This should be used on fields that correspond
     to enumerated value storage (normally *value__*).

*rtspecialname*
     Specify that the field has special significance to the runtime
     engine.  This should be used on fields that correspond to
     enumerated value storage (normally *value__*).

*marshal*
     Specify that the field's type should be replaced with an underlying
     native type by the runtime.


File: pnettools.info,  Node: Field Initialization,  Next: Field Layout,  Prev: Field Attributes,  Up: Field Declarations

Field Initialization
--------------------

     FieldInitialization => *float32* '(' FLOAT ')'
                          | *float64* '(' FLOAT ')'
                          | *float32* '(' Integer64 ')'
                          | *float64* '(' Integer64 ')'
                          | *float32* '(' *nan* ')'
                          | *float64* '(' *nan* ')'
                          | *float32* '(' *inf* ')'
                          | *float64* '(' *inf* ')'
                          | *float32* '(' '-' *inf* ')'
                          | *float64* '(' '-' *inf* ')'
                          | *int64* '(' Integer64 ')'
                          | *int32* '(' Integer64 ')'
                          | *int16* '(' Integer64 ')'
                          | *int8* '(' Integer64 ')'
                          | *char* '(' Integer64 ')'
                          | *bool* '(' *true* ')'
                          | *bool* '(' *false* ')'
                          | ComposedString


File: pnettools.info,  Node: Field Layout,  Next: Field References,  Prev: Field Initialization,  Up: Field Declarations

Field Layout
------------

   If the field is a member of an *explicit* class declaration, then a
specific offset value may be specified just after the *.field* keyword.
Use of this feature is discouraged in portable programs.

   If the field is static, it can be placed at an explicit runtime
address using the *at* clause.  Use of this feature is discouraged in
portable programs.


File: pnettools.info,  Node: Field References,  Next: Method Declarations,  Prev: Field Layout,  Up: Field Declarations

Field References
----------------

   At various points within an assembly stream, it is necessary to refer
to fields defined in the same stream, or imported from other streams.
The following syntax is used for referring to fields:

     FieldReference => Type [ TypeSpecification *::* ] Identifier


File: pnettools.info,  Node: Method Declarations,  Next: Method Attributes,  Prev: Field References,  Up: Assembler

Method Declarations
===================

   Methods may be defined at the global level of the assembly stream, or
within the body of a class.  If the method is global, it must appear
before all class declarations in the assembly stream.

     MethodDeclaration => *.method* { MethodAttribute }
                          CallingConventions
                          { ParameterAttribute }
                          MarshalledType MethodName
                          '(' [ SignatureArguments ] ')'
                          { ImplementationAttribute }
                          '{' { MethodMember } '}
     'MethodName => *.ctor*
                 | *.cctor*
                 | QualifiedName

   The method name *.ctor* indicates an instance constructor, and the
method name *.cctor* indicates a static constructor.

   If the method has custom attributes, they should appear in the body
of the method, or just after the method declaration.

* Menu:

* Method Attributes::         Attributes that may be used on methods.
* Calling Conventions::       Specifying a method's calling conventsions.
* Implementation Attributes:: Specifying a method's implementation style.
* Method Signatures::         Method argument signatures.
* PInvoke Methods::           Invoking foreign library methods.
* Method References::         Referring to local and imported methods.
* Method Members::            Members of a method declaration (IL).
* Java Method Members::       Members of a method declaration (Java).


File: pnettools.info,  Node: Method Attributes,  Next: Calling Conventions,  Prev: Method Declarations,  Up: Method Declarations

Method Attributes
-----------------

     MethodAttribute =>
                      | *public*
                      | *private*
                      | *family*
                      | *assembly*
                      | *famandassem*
                      | *famorassem*
                      | *compilercontrolled*
                      | *static*
                      | *virtual*
                      | *final*
                      | *abstract*
                      | *hidebysig*
                      | *newslot*
                      | *specialname*
                      | *rtspecialname*
                      | *pinvokeimpl* PInvokeParameters

*public*
     Specify that the method is accessible from any other class.  This
     corresponds to the C# `public' access level.

*private*
     Specify that the method is only accessible to the class in which
     it is declared.  This corresponds to the C# `private' access level.

*family*
     Specify that the method is accessible to the class in which it is
     declared, and any subclass of the method's class.  This corresponds
     to the C# `protected' access level.

*assembly*
     Specify that the method is only accessible to classes in the same
     assembly as the method.  This corresponds to the C# `internal'
     access level.

*famandassem*
     Specify that the method is only accessible to classes in the same
     assembly as the method, and which inherit from the method's class.
     There is no C# equivalent of this access level.

*famorassem*
     Specify that the method is only accessible to classes in the same
     assembly as the method or to classes which inherit from the
     method's class.  This corresponds to the C# `protected internal'
     access level.

*compilercontrolled*
     Specify that the method is accessible in a manner controlled by
     the compiler.  The runtime engine treats this the same as
     *assembly*.  There is no C# equivalent of this access level.

*static*
     Specify that the method is staticly declared within its class.
     The method will not have a `this' parameter.

*virtual*
     Specify that the method is virtual.

*final*
     Specify that the virtual method is the last definition of the
     method, and that it cannot be overridden in subclasses.

*abstract*
     Specify that the virtual method is abstract.  The class that
     contains the method must also have the *abstract* attribute.

*hidebysig*
     Specify that the method hides any other definition in a parent
     class only if the method name and signature are identical.  If
     this attribute is not present, then the method hides any
     definition in a parent class if the method name is identical.

*newslot*
     Specify that the virtual method occupies a different vtable slot
     from the same method in parent classes.

*specialname*
     Specify that the method has special significance to tools other
     than the runtime engine.  This should be used on methods that
     correspond to constructors, operators, property accessors, and
     event accessors.

*rtspecialname*
     Specify that the method has special significance to the runtime
     engine.  This should be used on methods that correspond to
     constructors.

*pinvokeimpl*
     Specify that the method is imported from a foreign library.  The
     parameters to this attribute specify how to perform the import.
     *Note PInvoke Methods::, for more information.


File: pnettools.info,  Node: Calling Conventions,  Next: Implementation Attributes,  Prev: Method Attributes,  Up: Method Declarations

Calling Conventions
-------------------

     CallingConventions => /* empty */
                         | *instance* CallingConventions
                         | *explicit* CallingConventions
                         | *default*
                         | *vararg*
                         | *unmanaged cdecl*
                         | *unmanaged stdcall*
                         | *unmanaged thiscall*
                         | *unmanaged fastcall*

*instance*
     Specify that the method takes an additional argument that
     corresponds to the `this' instance.

*explicit*
     Specify that the `this' instance is explicitly provided in the
     method signature.

*default*
     Specify that the default calling conventions should be used.  This
     convention is implied if no calling convention is supplied for the
     method.

*vararg*
     Specify that the method is capable of supporting a variable number
     of arguments.

*unmanaged cdecl*
     Specify that the method is in a foreign library and that it uses
     the standard C calling conventions for the underlying operating
     system.

*unmanaged stdcall*
     Specify that the method is in a foreign library and that it uses
     the "standard call" calling convention.  This is Windows-specific.

*unmanaged thiscall*
     Specify that the method is in a foreign library and that it uses
     the "this call" calling convention.  This is Windows-specific.

*unmanaged fastcall*
     Specify that the method is in a foreign library and that it uses
     the "fast call" calling convention.  This is Windows-specific.


File: pnettools.info,  Node: Implementation Attributes,  Next: Method Signatures,  Prev: Calling Conventions,  Up: Method Declarations

Implementation Attributes
-------------------------

     ImplementationAttributes => *cil*
                               | *optil*
                               | *native*
                               | *runtime*
                               | *managed*
                               | *unmanaged*
                               | *forwardref*
                               | *internalcall*
                               | *synchronized*
                               | *noinlining*
                               | *java*

*cil*
     Specify that the method is implemented in IL bytecode.  This is
     also used on *internalcall* methods, even though they are typically
     implemented with native code.

*optil*
     Specify that the method is implemented in OptIL bytecode, which is
     a variant of IL that provides extra information for JIT optimizers.
     There will normally be no reason to use this attribute.  The
     runtime engine treats OptIL identically to IL.

*native*
     Specify that the method is implemented using native machine code.
     This will rarely be required in binaries that are intended to be
     portable.

*runtime*
     Specify that the method has special meaning to the runtime engine.
     This is used when implementing delegates.

*managed*
     Specify that the method uses managed objects.  This is the default.

*unmanaged*
     Specify that the method uses unmanaged objects.

*forwardref*
     Specify that the method is not defined here.  This is provided for
     linker support only.  The runtime engine will reject methods that
     have this attribute.

*internalcall*
     Specify that the method is implemented internally within the
     runtime engine.

*synchronized*
     Specifies that the runtime engine should acquire a lock on the
     object prior to calling the method, and should release the lock
     after returning from the method.  If the method is static, then a
     lock on the method's type will be obtained.

*noinlining*
     Specifies that the JIT should not inline this method.

*java*
     Specifies that the method is implemented using Java bytecode
     instead of IL bytecode.  This must be last attribute in the list.
     i.e.  `java managed' is incorrect; it must be specifies as
     `managed java'.  This ordering allows `ilasm' to properly switch
     parsing modes to recognise the Java instruction set rather than
     the IL instruction set.


File: pnettools.info,  Node: Method Signatures,  Next: PInvoke Methods,  Prev: Implementation Attributes,  Up: Method Declarations

Method Signatures
-----------------

     SignatureArguments => SignatureArgument
                           { ',' SignatureArgument }
     SignatureArgument  => *...*
                         | { ParameterAttribute }
                           MarshalledType [ Identifier ]

     ParameterAttribute => '[' *in* ']'
                         | '[' *out* ']'
                         | '[' *opt* ']'

*in*
     Specify that the parameter is an input to the method.  The type
     must be a managed or unmanaged pointer type.

*out*
     Specify that the parameter is an output from the method.  The type
     must be a managed or unmanaged pointer type.

*opt*
     Specify that the parameter is optional.  The method will normally
     contain a *.param* declaration that specifies the default value
     for the parameter.

   Parameter attributes are ignored by the runtime engine.  They provide
information for compilers and other tools.


File: pnettools.info,  Node: PInvoke Methods,  Next: Method References,  Prev: Method Signatures,  Up: Method Declarations

PInvoke Methods
---------------

   Methods in foreign libraries are referenced using the PInvoke
mechanism.

     PInvokeParameters => '(' [ ComposedString
                                 [ *as* ComposedString ] ]
                            { PInvokeAttribute } ')'

   The first string indicates the name of the library from which the
foreign method is being imported.  The second string indicates the name
of the method in the foreign library.  If the second string is not
present, then the name of the method declaration will be used.

   The `ilasm' syntax allows the library name to be omitted, for
compatibility with older assemblers.  In practice, a PInvoke declaration
that does not have a library name cannot be resolved at runtime.

     PInvokeAttribute => *nomangle*
                       | *ansi*
                       | *unicode*
                       | *autochar*
                       | *ole*
                       | *lasterr*
                       | *winapi*
                       | *cdecl*
                       | *stdcall*
                       | *thiscall*
                       | *fastcall*

*nomangle*
     Specify that the foreign method name is exact.  Windows systems
     will search for 'A' and 'W' variants of the method name if this
     attribute is not specified.

*ansi*
     Specify that any strings that are passed to, or return from, the
     foreign method will be in the operating system's prevailing
     character set.

*unicode*
     Specify that any strings that are passed to, or return from, the
     foreign method will be in the Unicode character set.

*autochar*
     Specify that the runtime engine should determine the character set
     automatically.

*ole*
     Specify that the method signature has been managled to return a
     `HRESULT' value.  This is Windows-specific.

*lasterr*
     Specify that the method returns additional error information in a
     separate variable.  On Windows systems, this variable can be
     queried using `GetLastError'.  On other systems, the variable is
     usually called `errno'.

*winapi*
     Specify that the foreign method uses the "winapi" calling
     conventions.  This is Windows-specific.

*cdecl*
     Specify that the foreign method uses the standard C calling
     conventions.

*stdcall*
     Specify that the foreign method uses the "standard call" calling
     conventions.  This is Windows-specific.

*thiscall*
     Specify that the foreign method uses the "this call" calling
     conventions.  This is Windows-specific.

*fastcall*
     Specify that the foreign method uses the "fast call" calling
     conventions.  This is Windows-specific.

     If none of the above calling convention attributes are supplied,
     then the default is chosen by the runtime engine.


File: pnettools.info,  Node: Method References,  Next: Method Members,  Prev: PInvoke Methods,  Up: Method Declarations

Method References
-----------------

   At various points within an assembly stream, it is necessary to refer
to methods defined in the same stream, or imported from other streams.
The following syntax is used for referring to methods:

     MethodReference => CallingConventions Type
                        [ TypeSpecification *::* ] MethodName
                        '(' [ SignatureArguments ] ')'


File: pnettools.info,  Node: Method Members,  Next: Java Method Members,  Prev: Method References,  Up: Method Declarations

Method Members
--------------

     MethodMember => *.emitbyte* Integer32
                   | ExceptionBlock
                   | *.maxstack* Integer32
                   | *.locals* '(' [ SignatureArguments ] ')'
                   | *.locals init*
                     '(' [ SignatureArguments ] ')'
                   | *.entrypoint*
                   | *.zeroinit*
                   | DataDeclaration
                   | Instruction
                   | Identifier ':'
                   | SecurityDeclaration
                   | DebugInformation
                   | CustomAttributeSpecification
                   | *.vtentry* Integer32 ':' Integer32
                   | *.override* TypeSpecification
                     *::* MethodName
                   | '{' { MethodMember } '}'
                   | *.param* '[' Integer32 ']'
                     [ '=' FieldInitialization ]


File: pnettools.info,  Node: Java Method Members,  Next: Property Declarations,  Prev: Method Members,  Up: Method Declarations

Java Method Members
-------------------

   TODO


File: pnettools.info,  Node: Property Declarations,  Next: Property Attributes,  Prev: Java Method Members,  Up: Assembler

Property Declarations
=====================

     PropertyDeclaration => *.property* { PropertyAttribute }
                            CallingConventions Type Identifier
                            '(' [ SignatureArguments ] ')'
                            '{' { PropertyMember } '}'

   If the property has custom attributes, they should appear in the
body of the property, or just after the property declaration.

* Menu:

* Property Attributes::       Attributes that may be used on properties.
* Property Members::          Specifying the members of a property.


File: pnettools.info,  Node: Property Attributes,  Next: Property Members,  Prev: Property Declarations,  Up: Property Declarations

Property Attributes
-------------------

     PropertyAttribute => *specialname*
                        | *rtspecialname*

*specialname*
     Specify that the property has special significance to tools other
     than the runtime engine.

*rtspecialname*
     Specify that the property has special significance to the runtime
     engine.


File: pnettools.info,  Node: Property Members,  Next: Event Declarations,  Prev: Property Attributes,  Up: Property Declarations

Property Members
----------------

     PropertyMember => *.get* MethodReference
                     | *.set* MethodReference
                     | *.other* MethodReference
                     | CustomAttributeDeclaration
                     | DebugInformation

*.get*
     Specify the method to be used to implement the property's "get"
     accessor.

*.set*
     Specify the method to be used to implement the property's "set"
     accessor.

*.other*
     Specify the method to be used to implement the property's "other"
     accessor.  This is not currently used by C#.


File: pnettools.info,  Node: Event Declarations,  Next: Event Attributes,  Prev: Property Members,  Up: Assembler

Event Declarations
==================

     EventDeclaration => *.event* { EventAttribute }
                         [ TypeSpecification ] Identifier
                         '{' { EventMember } '}'

   If the event has custom attributes, they should appear in the body of
the event, or just after the event declaration.

* Menu:

* Event Attributes::          Attributes that may be used on events.
* Event Members::             Specifying the members of an event.


File: pnettools.info,  Node: Event Attributes,  Next: Event Members,  Prev: Event Declarations,  Up: Event Declarations

Event Attributes
----------------

     EventAttribute => *specialname*
                     | *rtspecialname*

*specialname*
     Specify that the event has special significance to tools other than
     the runtime engine.

*rtspecialname*
     Specify that the event has special significance to the runtime
     engine.


File: pnettools.info,  Node: Event Members,  Next: Debug Information,  Prev: Event Attributes,  Up: Event Declarations

Event Members
-------------

     EventMember => *.addon* MethodReference
                  | *.removeon* MethodReference
                  | *.fire* MethodReference
                  | *.other* MethodReference
                  | CustomAttributeDeclaration
                  | DebugInformation

*.addon*
     Specify the method to be used to implement the event's "add"
     accessor.

*.removeon*
     Specify the method to be used to implement the event's "remove"
     accessor.

*.fire*
     Specify the method to be used to implement the event's "fire"
     accessor.

*.other*
     Specify the method to be used to implement the event's "other"
     accessor.  This is not currently used by C#.


File: pnettools.info,  Node: Debug Information,  Next: Custom Attributes,  Prev: Event Members,  Up: Assembler

Debug Information
=================

   When a program is compiled in debug mode, extra information is
inserted into the assembly stream to assist debuggers.

   Debug information in the assembly stream is only processed if the
`-g' option is supplied to `ilasm'.

     DebugInformation => *.line* INT SQSTRING
                       | *.line* INT DQSTRING
                       | *.line*

   The first two forms above specify a line number and a filename.  The
third form specifies a line number within the same file as the previous
*.line* directive.

   The keyword *#line* can be used instead of *.line*, but this usage
is deprecated.

   Debug information lines are treated differently in method bodies
versus elsewhere.  Inside a method body, debug information should
appear at the code position where the corresponding source line begins.

   Outside a method body, debug information indicates the point in the
source where the corresponding declaration was encountered.  For
example:

     .class C
     {
         .line 28 "testing.cs"
     
         .field int32 f
         .line 31
     }

   This indicates that the class `C' was declared on line 28 of the
source file `testing.cs', and that the field `f' was declared on line
31 of the same file.  Debug information for classes must precede any of
the class members.

   *Note Debug Symbols::, for more information on how debug information
is stored in IL binaries.


File: pnettools.info,  Node: Custom Attributes,  Next: Assembly Declarations,  Prev: Debug Information,  Up: Assembler

Custom Attributes
=================

     CustomAttributeDeclaration => *.custom* MethodReference '=' Bytes

   The method reference indicates the constructor to use to build the
attribute at runtime.  The hexadecimal bytes provide a serialized form
of the constructor arguments.


File: pnettools.info,  Node: Assembly Declarations,  Next: Assembly Attributes,  Prev: Custom Attributes,  Up: Assembler

Assembly Declarations
=====================

     AssemblyDeclaration => *.assembly* { AssemblyAttribute }
                            AssemblyName '{' { AssemblyMember } '}'
     AssemblyName        => QualifiedName | *.library*

   If the assembly declaration has custom attributes, they should
appear in the body of the declaration, or just after the declaration.

* Menu:

* Assembly Attributes::        Attributes that may be used on assemblies.
* Assembly Members::           Specifying the members of an assembly.
* Assembly References::        Referring to imported assemblies.
* Assembly Reference Members:: Specifying the members of an assembly reference.


File: pnettools.info,  Node: Assembly Attributes,  Next: Assembly Members,  Prev: Assembly Declarations,  Up: Assembly Declarations

Assembly Attributes
-------------------

     AssemblyAttribute => *noappdomain*
                        | *nomachine*
                        | *noprocess*

*noappdomain*
     Specifies that the assembly cannot be loaded more than once in the
     same application domain.

*nomachine*
     Specifies that the assembly cannot be loaded more than once on the
     same physical machine.

*noprocess*
     Specifies that the assembly cannot be loaded more than once in the
     same process.


File: pnettools.info,  Node: Assembly Members,  Next: Assembly References,  Prev: Assembly Attributes,  Up: Assembly Declarations

Assembly Members
----------------

     AssemblyMember => *.hash* *algorithm* Integer32
                     | *.publickey* '=' Bytes
                     | *.ver* Integer32 ':' Integer32 ':'
                              Integer32 ':' Integer32
                     | *.locale* ComposedString
                     | *.processor* Integer32
                     | *.os* Integer32 ':' Integer32 ':' Integer32
                     | CustomAttributeDeclaration
                     | SecurityDeclaration

*.hash*
     Specify the hash algorithm to use for hashing other files that make
     up the same assembly manifest.  These files are typically referred
     to using *.file* declarations.  The value 0x8004 is recommended,
     and refers to the SHA1 hash algorithm.

*.publickey*
     Specify the bytes of the public key that was used to sign this
     assembly.  Compilers that write assembly streams normally won't
     need to use this directive because separate tools are used to sign
     assemblies.

*.ver*
     Specify the version number of this assembly.  e.g. `1:0:2411:0'.

*.locale*
     Specify the culture string for this assembly.  This is called
     *.locale* instead of *.culture* for historical reasons.  An
     example of a valid culture value is `en-AU' which indicates
     "English, Australia".

*.processor*
*.os*
     Specify operating systems and processors for which this assembly
     has been built and tested.  Use of these directives is discouraged
     in portable programs.


File: pnettools.info,  Node: Assembly References,  Next: Assembly Reference Members,  Prev: Assembly Members,  Up: Assembly Declarations

Assembly References
-------------------

     AssemblyRefDeclaration => *.assembly* *extern* QualifiedName
                               '{' { AssemblyRefMember } '}'


File: pnettools.info,  Node: Assembly Reference Members,  Next: Module Declarations,  Prev: Assembly References,  Up: Assembly Declarations

Assembly Reference Members
--------------------------

     AssemblyRefMember => *.hash* '=' Bytes
                        | *.publickey* '=' Bytes
                        | *.publickeytoken* '=' Bytes
                        | *.ver* Integer32 ':' Integer32 ':'
                                 Integer32 ':' Integer32
                        | *.locale* ComposedString
                        | *.processor* Integer32
                        | *.os* Integer32 ':' Integer32 ':' Integer32
                        | CustomAttributeDeclaration

*.hash*
     Specify the hash value for the referenced assembly.

*.publickey*
     Specify the bytes of the public key that was used to sign the
     referenced assembly.

*.publickeytoken*
     Specify the low 8 bytes of the SHA1 hash of the public key that was
     used to sign the referenced assembly.

     Only one of *.publickey* or *.publickeytoken* can be specified.
     Tokens are much shorter than full public keys and the full key can
     be obtained from the referenced assembly when it is loaded.

*.ver*
     Specify the version number of the referenced assembly.  e.g.
     `1:0:2411:0'.

*.locale*
     Specify the culture string for the referenced assembly.

*.processor*
*.os*
     Specify operating systems and processors for which the referenced
     assembly has been built and tested.  Use of these directives is
     discouraged in portable programs.


File: pnettools.info,  Node: Module Declarations,  Next: Other Declarations,  Prev: Assembly Reference Members,  Up: Assembler

Module Declarations
===================

     ModuleDeclaration => *.module* QualifiedName
                        | *.module* *extern* QualifiedName

   If the module declaration has custom attributes, they should appear
just after the declaration.


File: pnettools.info,  Node: Other Declarations,  Next: Disassembler,  Prev: Module Declarations,  Up: Assembler

Other Declarations
==================

   This section defines the syntax for a number of other declaration
kinds that provide miscellaneous information that does not fall into
any of the above categories.

     VtableDeclaration  => *.vtable* '=' '(' (HEXBYTE)+ ')'
     VtfixupDeclaration => *.vtfixup* '[' Integer32 ']'
                           { VtfixupAttribute } *at* Identifier
     VtfixupAttribute   => *int32*
                         | *int64*
                         | *fromunmanaged*
                         | *callmostderived*


File: pnettools.info,  Node: Disassembler,  Next: ildasm invocation,  Prev: Other Declarations,  Up: Top

Intermediate language disassembler
**********************************

   Ildasm converts IL object files (`.obj'), IL executables (`.exe'),
and IL dynamic link libraries (`.dll') into Intermediate Language (IL)
assembly code.  The output is suitable for input to ilasm.

   Ildasm is useful for diagnosing problems with compilers and other
development tools.  It is rarely useful to regular users or programmers.

* Menu:

* ildasm invocation::       Invoking ildasm


File: pnettools.info,  Node: ildasm invocation,  Next: Linker,  Prev: Disassembler,  Up: Disassembler

Invoking ildasm
===============

   The general form of the ildasm syntax is as follows:

     ildasm [OPTIONS] INPUT ...

`-o FILE'
`--output FILE'
     Specify the name of the file to write the assembler output to.  The
     default is standard output.  Specifying `FILE' as `-' also
     indicates that the output should be set to standard output.

`-d'
`--dump-sections'
     Dump the contents of the IL program sections in hexadecimal instead
     of as IL assembly code.  This may be useful for diagnosing problems
     with badly formatted IL binaries.

`-r'
`--real-offsets'
     By default, ildasm prints "relative virtual addresses", or RVA's,
     when dumping IL program sections in hexadecimal, and when dumping
     the names of labels within methods.  The `-r' option informs ildasm
     to use real file offsets instead.  This may assist in locating
     data within the file with separate tools.

`-t'
`--show-tokens'
     Show the token codes of program elements within the disassembly
     output.

`-q'
`--quote-names'
     Quote all identifiers within the disassembly output so that they
     are not confused with reserved words.  This is necessary if the
     output will be fed into ilasm.

`-w'
`--whole-file'
     Dump the contents of the whole input file in hexadecimal.  If the
     file is not otherwise recognized by ildasm as an IL binary, this
     may be the only way to inspect the contents to determine what the
     problem is.

`-b'
`--dump-bytes'
     Dump the IL instructions in hexadecimal.

`-n'
`--no-il'
     Do not dump the IL instructions within the methods.

`--help'
     Print a usage message for the ildasm program.

`-v'
`--version'
     Print the version of the ildasm program.

`--'
     Marks the end of the command-line options, and the beginning of
     the input filenames.  You may need to use this if your filename
     begins with `-'.  e.g. `ildasm -- -input.obj'.  This is not needed
     if the input is stdin: `ildasm -' is perfectly valid.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.  *Note Load Errors::, for a complete
list of errors that may occur when loading an IL image file.


File: pnettools.info,  Node: Linker,  Next: ilalink invocation,  Prev: ildasm invocation,  Up: Top

Intermediate language assembly linker
*************************************

   Ilalink links a number of IL object files (`.obj') together,
resolves external references to IL libraries, and creates a final IL
executable (`.exe') or IL dynamic link library (`.dll').

* Menu:

* ilalink invocation::      Invoking ilalink


File: pnettools.info,  Node: ilalink invocation,  Next: Size,  Prev: Linker,  Up: Linker

Invoking ilalink
================

   The general form of the ilalink syntax is as follows:

     ilalink [OPTIONS] INPUT ...

`-o FILE'
`--output FILE'
     Specify the name of the file to write the linker output to.  The
     default is `a.out.exe', `a.out.dll', or `a.out.obj', depending on
     the value of the `--format' option.

`-j'
`--format obj'
     Write a `.obj' file as output, instead of an executable or dynamic
     link library.  This is normally not very useful.

`-e'
`--format exe'
     Write an executable file as output, instead of a `.obj' file or
     dynamic link library.  This is the default value.

`-d'
`--format dll'
     Write a dynamic link library file as output, instead of a `.obj'
     file or executable.

`-l NAME'
`--library NAME'
     Link against the library called `NAME'.  The linker will search
     all of the library directories for a file called `NAME.dll'.  If
     `--no-stdlib' is not specified, then the standard library
     `mscorlib' will be automatically added to the list of libraries.
     The name of the standard library can be changed using the
     `-fstdlib-name' option.

`-L PATH'
`--library-dir PATH'
     Specify a directory to be searched for libraries.  The option `-L
     .'  must be explicitly supplied to search the current directory.
     If `--no-stdlib' is not specified, then a standard set of builtin
     paths will be added to the end of the list specified by the `-L'
     options.  The set of builtin paths can be overridden by setting the
     `CSCC_LIB_PATH' environment variable to an appropriate value.

`-n'
`--no-stdlib'
     Do not include the standard library or any of the builtin library
     directories.

`-S NAME'
`-fstdlib-name=NAME'
     Set the name of the standard library to `NAME'.  The default is
     `mscorlib'.

`--shared'
     Link the output as a shared image.  This is the default.

`--static'
     Link the output statically.  This option is not yet implemented.
     It is provided for compatibility with other tools.

`-a NAME'
`-fassembly-name=NAME'
     Set the name of the final assembly to `NAME'.  The default is the
     name of the output file without its directory path or extension.

`-A NN:NN:NN:NN'
`-fassembly-version NN:NN:NN:NN'
     Set the final assembly version to `NN:NN:NN:NN'.  The default is
     `0:0:0:0', unless a non-zero version is supplied by one of the
     input files.

`-M NAME'
`-fmodule-name=NAME'
     Set the name of the final module to `NAME'.  The default is the
     name of the output file without its directory path.

`-E NAME'
`--entry-point NAME'
     Specify the name of the program's entry point.  This should only
     be used if the output is an executable (`.exe').  If this option
     is not present, the linker will attempt to deduce which method is
     the entry point by inspecting the names and signatures of methods
     within the input files.  The name is either a class name, or a
     class name plus method name.  The sequence `::' is used to
     separate the class and method names.  Examples are `MyClass',
     `MyNamespace.MyClass', and `MyNamespace.MyClass::Main'.

`-r FILE'
`-fresources=FILE'
     Specify the name of a resource file to be linked with the output
     assembly.

`-R'
`--resources-only'
     Create an output assembly that only contains resources.  This is
     useful for building satellite resource assemblies for foreign
     languages.

`-p'
`-fprivate-resources'
     Mark the resources as private to the output assembly.

`-H ALG'
`-fhash-algorithm=ALG'
     Set the assembly hash algorithm to `ALG', which must be either
     `SHA1' or `MD5'.  The default is `SHA1'.

`-3'
`-m32bit-only'
     Mark the final output assembly so that it can only be used on
     32-bit systems.  Use of this option is severely discouraged.

`-c'
`-mcui-subsystem'
     Link the final output assembly for the command-line subsystem on
     Windows.  This is the default.

     Link the final output assembly for the GUI subsystem on Windows.

`--help'
     Print a usage message for the ilalink program.

`-v'
`--version'
     Print the version of the ilalink program.

`--'
     Marks the end of the command-line options, and the beginning of
     the input filenames.  You may need to use this if your filename
     begins with `-'.  e.g. `ilalink -- -input.obj'.  This is not
     needed if the input is stdin: `ilalink -' is perfectly valid.

   The `-f' and `-m' options can be specified on the cscc command-line,
and will be passed to the linker automatically by the compiler.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.


File: pnettools.info,  Node: Size,  Next: ilsize invocation,  Prev: ilalink invocation,  Up: Top

Intermediate language size utility
**********************************

   Ilsize lists size information for each of the sections within an IL
object file (`.obj'), an IL executable (`.exe'), or an IL dynamic link
library (`.dll').  The output is similar to that produced by size(1).

* Menu:

* ilsize invocation::       Invoking ilsize


File: pnettools.info,  Node: ilsize invocation,  Next: Native,  Prev: Size,  Up: Size

Invoking ilsize
===============

   The general form of the ilsize syntax is as follows:

     ilsize [OPTIONS] input ...

`--radix NUM'
     Set the radix for displaying size values within the output.  The
     default value is 10.  Legal values are 8, 10, and 16.

`-d'
     Set the radix to 10.  Same as `--radix 10'.

`-o'
     Set the radix to 8.   Same as `--radix 8'.

`-x'
     Set the radix to 16.  Same as `--radix 16'.

`-D'
`--detailed'
     Use a more detailed output that also includes the number of
     classes, fields, methods, etc.

`--help'
     Print a usage message for the ilsize program.

`-v'
`-V'
`--version'
     Print the version of the ilsize program.

`--'
     Marks the end of the command-line options, and the beginning of
     the input filenames.  You may need to use this if your filename
     begins with `-'.  e.g. `ilsize -- -input.obj'.  This is not needed
     if the input is stdin: `ilsize -' is perfectly valid.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.  *Note Load Errors::, for a complete
list of errors that may occur when loading an IL image file.

   Ilsize does not currently understand the format of `.a' or `.lib'
archive libraries, so it cannot display information about archive
contents like size(1) can.


File: pnettools.info,  Node: Native,  Next: ilnative invocation,  Prev: ilsize invocation,  Up: Top

Intermediate language native utility
************************************

   Ilnative lists the native methods that are used within an IL object
file (`.obj'), an IL executable (`.exe'), or an IL dynamic link library
(`.dll').  This can aid developers who are building programs that use
native methods, or developers who are attempting to discover which
native methods a third party program requires.

* Menu:

* ilnative invocation::     Invoking ilnative


File: pnettools.info,  Node: ilnative invocation,  Next: Find,  Prev: Native,  Up: Native

Invoking ilnative
=================

   The general form of the ilnative syntax is as follows:

     ilnative [OPTIONS] INPUT ...

`-n'
`--names-only'
     Only print the names of the methods, and not the type information.

`--help'
     Print a usage message for the ilnative program.

`-v'
`--version'
     Print the version of the ilnative program.

`--'
     Marks the end of the command-line options, and the beginning of
     the input filenames.  You may need to use this if your filename
     begins with `-'.  e.g. `ilnative -- -input.obj'.  This is not
     needed if the input is stdin: `ilnative -' is perfectly valid.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.  *Note Load Errors::, for a complete
list of errors that may occur when loading an IL image file.


File: pnettools.info,  Node: Find,  Next: ilfind invocation,  Prev: ilnative invocation,  Up: Top

Intermediate language name find utility
***************************************

   Ilfind searches for a pattern within the supplied input files.  Each
input file must be an IL object file (`.obj'), an IL executable
(`.exe'), or an IL dynamic link library (`.dll').

   For each assembly, namespace, class, field, method, event, or
property whose name matches the pattern, a line is written to standard
output describing the match.

* Menu:

* ilfind invocation::       Invoking ilfind


File: pnettools.info,  Node: ilfind invocation,  Next: Dependencies,  Prev: Find,  Up: Find

Invoking ilfind
===============

   The general form of the ilfind syntax is as follows:

     ilfind [OPTIONS] PATTERN INPUT ...

`-w'
`--whole-string'
     Match the whole pattern string against names in the input files.
     This is the default.  For example, the pattern `ABC' will match
     classes, fields, and methods called `ABC', but will not match
     items called `ABCD'.

`-s'
`--sub-string'
     Match the pattern against sub-strings of names in the input files.
     For example, the pattern `ABC' will match any item that contains
     `ABC' within its name.

`-f'
`--file-regex'
     Use a file-like regular expression matching scheme.  This is the
     default.  Patterns can use `?' and `*' to match a single character
     or multiple characters.  Patterns can use the characters `[' and
     `]' to group a set of alternative characters.  This pattern syntax
     is similar to that used to match filenames in shells such as sh(1)
     and csh(1).

`-g'

`--grep-regex'
     Use a regular expression matching scheme similar to grep(1).
     Note: the `^' and `$' characters will be implicitly prepended and
     appended to the pattern if whole string matching is enabled (`-w').

`-n'
`--no-regex'
     Do not use regular expression matching.  This will perform a simple
     identity check against names (`-w') or a simple sub-string check
     (`-s').

`-i'
`--ignore-case'
     Ignore case when matching names against the pattern.

`-p'
`--public-only'
     Search only the classes that are publicly accessible.

`--help'
     Print a usage message for the ilfind program.

`-v'
`--version'
     Print the version of the ilfind program.

`--'
     Marks the end of the command-line options.  The next argument is
     the pattern.  You may need to use this if your pattern begins with
     `-'.  e.g. `ilfind -- -name input.obj'.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.  *Note Load Errors::, for a complete
list of errors that may occur when loading an IL image file.


File: pnettools.info,  Node: Dependencies,  Next: ildd invocation,  Prev: ilfind invocation,  Up: Top

Intermediate language dependency utility
****************************************

   Ildd lists the assemblies and PInvoke modules that are referenced by
an IL object file (`.obj'), an IL executable (`.exe'), or an IL dynamic
link library (`.dll').

* Menu:

* ildd invocation::         Invoking ildd


File: pnettools.info,  Node: ildd invocation,  Next: Resources,  Prev: Dependencies,  Up: Dependencies

Invoking ildd
=============

   The general form of the ildd syntax is as follows:

     ildd [OPTIONS] PATTERN INPUT ...

`--help'
     Print a usage message for the ildd program.

`-v'
`--version'
     Print the version of the ildd program.

`--'
     Marks the end of the command-line options.  The next argument is
     the pattern.  You may need to use this if your filename begins
     with `-'.  e.g. `ildd -- -input.exe'.  This is not needed if the
     input is stdin: `ildd -' is perfectly valid.

   The exit status is 1 if an error occurred while processing the input.
Otherwise the exit status is 0.  *Note Load Errors::, for a complete
list of errors that may occur when loading an IL image file.


File: pnettools.info,  Node: Resources,  Next: resgen invocation,  Prev: ildd invocation,  Up: Top

Resource generation and conversion
**********************************

   Resgen converts strings between a number of resource formats that
are used within the Portable.NET platform.  It is typically used to
convert text resources (`.txt'), XML resources (`.resx'), or GNU gettext
resources (.po) into binary resources (`.resources') that can be
attached to an IL executable or dynamic link library.

* Menu:

* resgen invocation::       Invoking resgen
* Resource Format::         Text resource file format
* Resource Examples::       Resource conversion examples