| |||||||||||||||||||||||
| |||||||||||||||||||||||
|
Working with models and accessing dynamic libraries in Mosel Description mmexlib-cs: Working with models and accessing dynamic libraries in Mosel
(requires burglari.mos, chess2.mos, trans.mos)
Source Files By clicking on a file name, a preview is opened at the bottom of this page.
Data Files mmdispmod.cs
/********************************************************/
/* Mosel Library Examples */
/* ====================== */
/* */
/* file mmdispmod.cs */
/* ````````````````` */
/* Example for the use of the Mosel libraries */
/* (display the contents of a model) */
/* */
/* (c) 2008 Fair Isaac Corporation */
/* author: J.Farmer & Y. Colombani */
/********************************************************/
using System;
using Mosel;
namespace mmdispmod {
public class mmdispmodClass {
/// <summary>
/// Main entry point for the application
/// </summary>
[STAThread]
static void Main(string[] args) {
XPRM mosel;
XPRMModel mod;
XPRMProcedure proc;
if(args.Length!=1)
{
Console.WriteLine("Usage: mmdispmod modname.bim");
return;
}
// Initialize Mosel
mosel = XPRM.Init();
// Load a BIM file
mod = mosel.LoadModel(args[0]);
// List of model parameters
foreach(XPRMParameter p in mod.Parameters) {
Console.WriteLine(" {0}", p.Name);
}
Console.WriteLine();
// List of symbols
foreach(XPRMIdentifier symb in mod.Identifiers) {
switch (symb.StructCode) {
case XPRMVarStruct.CONST: // Constant: display value
Console.WriteLine(
" {0}= {1}",
symb.Name,
((XPRMConstant) symb).Value
);
break;
case XPRMVarStruct.REF: // Reference: display type
Console.WriteLine(
" {0}: {1}",
symb.Name,
symb.TypeName
);
break;
case XPRMVarStruct.ARRAY: // Array: display type
Console.WriteLine(
" {0}: array of {1}",
symb.Name,
symb.TypeName
);
break;
case XPRMVarStruct.SET: // Set: display type
Console.WriteLine(
" {0}: set of {1}",
symb.Name,
symb.TypeName
);
break;
case XPRMVarStruct.PROC: // Subroutine
proc = (XPRMProcedure) symb;
do { // Look for all overloading proc/func
dispProcFct(proc); // Display the prototype
} while ((proc=proc.Next())!=null);
break;
default:
Console.WriteLine(" {0}: ?", symb.Name);
break;
}
}
}
/// <summary>
/// Display a prototype from a signature
/// </summary>
static void dispProcFct(XPRMProcedure proc) {
char[] parms;
int i;
if (proc.TypeCode!=XPRMVarType.NOT)
Console.Write(" function {0}", proc.Name);
else
Console.Write(" procedure {0}", proc.Name);
if (proc.NbParameters>0) {
Console.Write("(");
parms = proc.ParameterTypes.ToCharArray();
i = 0;
while (i<parms.Length) {
if (i>0) Console.Write(",");
i = dispType(i, parms)+1;
}
Console.Write(")");
}
if (proc.TypeCode!=XPRMVarType.NOT)
Console.Write(":{0}", proc.TypeName);
Console.WriteLine();
}
/// <summary>
/// Display a type name from a signature
/// </summary>
static int dispType(int i, char[] parms) {
int j;
switch (parms[i]) {
case 'i': Console.Write("integer"); break;
case 'r': Console.Write("real"); break;
case 's': Console.Write("string"); break;
case 'b': Console.Write("boolean"); break;
case 'v': Console.Write("mpvar"); break;
case 'c': Console.Write("linctr"); break;
case 'I': Console.Write("range"); break;
case 'a': Console.Write("array"); break;
case 'e': Console.Write("set"); break;
case '|':
i++;
do {
Console.Write(parms[i++]);
} while (parms[i]!='|');
break;
case '!':
i++;
do {
Console.Write(parms[i++]);
} while (parms[i]!='!');
break;
case 'A':
Console.Write("array (");
j=++i;
while (parms[i]!='.') {
if (j!=i) Console.Write(",");
i=dispType(i, parms)+1;
}
Console.Write(") of ");
i=dispType(i, parms)+1;
break;
case 'E':
Console.Write("set of ");
i = dispType(++i, parms);
break;
default:
Console.Write("?");
break;
}
return i;
}
}
}
| |||||||||||||||||||||||
| © Copyright 2025 Fair Isaac Corporation. |