|  |  |  Utility Programs for SansGUIThe following utility programs require the SansGUI Run-Time Environment. 
You can use the SansGUI Demonstration Edition which contains the run-time 
environment without file saving capability.  If you would like to save your work,
you need to purchase the low-cost SansGUI Run-Time Environment.  The
programs listed here are not included in
the SansGUI software distribution.  You need to download them separately. 
We take an open source approach in dealing with these utility programs. 
You are encouraged to look into the source and customize the capability as you
like.  See the license terms in the documentation of each program for more
details. 
  
    Calc - Visual Calculator for
    SansGUI: demonstrates how to program basic mathematical calculations
    in visual forms -- calculation flow diagrams.  Using this utility,
    SansGUI users can draw mathematical equations with visual expressions,
    perform calculations, and plot data curves.  Some application examples
    are shown.
    MIDIplay - MIDI Player for
    SansGUI: demonstrates how to implement an external process simulator
    to work in concert with an in-process simulator and chart data dynamically. 
    In this example, the external process simulator is a MIDI player that sends
    MIDI streams to the Windows multimedia facility for music playing while the
    in-process simulator fetches the MIDI event data and communicates with
    SansGUI for dynamic data display and charting.
    Unit - Unit Conversion for
    SansGUI: converts numerical values from one measuring unit to
    another.  Based on IEEE/ASTM SI-10 1997 Standard, this program covers
    most of the SI units and many other non-SI units.  It includes many
    advanced features not available in other unit conversion programs. 
 Calc -- Visual Calculator for SansGUI
  
    DescriptionVisual Calculator for SansGUI is a programmable
    calculator that acts on mathematical equations expressed in visual forms.  This calculator has some basic arithmetic
    operators and functions implemented in component classes.  It differs from
    regular
    calculators or spreadsheet programs in that the mathematical expressions are
    drawn as visual diagrams.  With this, the relationship of operators
    and operands can be visualized.
    DemonstrationClick on a picture to obtain its full size screen
    shot. 
  
    DetailsThe Visual Calculator implements
    addition, subtraction, multiplication, division, and negation operators in
    generic (no class attribute) component classes.  They simply take
    values from the input links and send the resulting value to the output
    links.  Negation operator takes only one input link while others take
    multiple input links.  In most cases, Port 1 is used to connect input
    links and Port 2 is for output links.  In the division operator,
    however, we have to differentiate the dividend from divisors; therefore, a
    special Port 0 is defined for the unique dividend and Port 1 are reserved
    for possibly multiple divisors.  We use SansGUI's Port Definition
    facility to specify these rules.  A similar rule applies to the
    subtraction operator. A SquareRoot function is
    implemented similar to the negation operator, which takes only one input
    value.  A SineGen class is created for pumping out damped sine wave
    data.  Finally, a variable component allows the user to store values, 
    used mostly as sources or sinks in calculating flow diagrams.
    CodeThe implementation of this example can be found in
    the evaluation functions of eight classes: Base.Add, Base.Subtract,
    Base.Multiply, Base.Divide, Base.Negate, Base.SquareRoot, Base.SineGen,  and 
    Base.Variable.  The  Base.Variable class also contains an
    Initialization function to deposit its initial value to the input link so
    that the value will not be wiped out at the beginning of the evaluation
    cycle.  Click on the following links to see all the necessary code for this
    project.  The C/C++ and Fortran implementations are independent; only
    one of them is required.
    
    DownloadDownload Visual Calculator for SansGUI.  You need the SansGUI Run-Time
        Environment to run this utility program.  A free SansGUI
        Demonstration Edition is available in the same download area.
    CreditThis example is developed by the SansGUI
    Development Team at ProtoDesign, Inc. 
 MIDIplay -- MIDI Player for SansGUI
  
    DescriptionMIDI Player for SansGUI has been created to
    demonstrate a couple of new SansGUI version 1.1 features, which 1) allow an
    external process simulator to work in concert with an in-process simulator,
    and 2) allow the users to chart data dynamically.  In this example, the
    external process simulator is a console-based  Musical Instrument Digital
    Interface, or MIDI, player that feeds MIDI streams into the Windows
    multimedia facility and displays MIDI events in the console.  While
    processing the MIDI events, it also writes the MIDI channel numbers and data
    to a shared memory area (as two integers) for the in-process simulator to
    read.  Acting as a monitor, the in-process simulator distributes the
    data to the corresponding channel components (parts), based on the user
    selected channel numbers associated with these components.  The data in
    the channel components are then plotted using the dynamic charting feature
    in SansGUI without any extra programming effort from the simulation
    developer's side.
    DemonstrationClick on a picture to obtain its full size screen
    shot. 
  
    |  |  | The path of the MIDI file to be played, a unique shared memory name, and
    sampling intervals are entered via a MIDI reference object.  The parts,
    Channel-0 and Channel-1 are created to fetch the MIDI event data according
    to their channel numbers.  More parts can be created when there are
    more channels. |  
    |  |  | The MIDI Player is a console-based program that is invoked via the Run
    External button in the Run toolbar.  A command window is opened to show
    the output from the player.  The player also writes MIDI event data to
    a shared memory area. |  
    |  |  | While the MIDI Player is running with the music playing in the background,
    the In-Process simulator is invoked to fetch the MIDI event data and
    distribute the data to the channels.  The data are displayed in the
    bottom pane and charted dynamically. |  
    |  |  | The architecture of the MIDI Player.  Invoked by a command script, the
    External Process simulator (.EXE) reads in a Model File to know where the
    MIDI file is located.  It sends the MIDI data stream to the Windows
    multimedia facility and writes MIDI event data to a shared memory area for
    the In-Process simulator (.DLL) to communicate with SansGUI. |  
    |  |  | The intrinsic attributes in the external process simulation control class (XProc). 
    A simulation developer creates a subclass out of the XProc intrinsic class
    to inherit all the attributes from it.  New attributes can be added to
    the subclass when needed. |  
    |  |  | The intrinsic attributes in the in-process simulation control class
    (Cycle).  A simulation developer creates a subclass out of the Cycle
    intrinsic class and extend the attribute list, when needed.  In MIDI
    Player, the control parameters are defined in a reference class, to be
    shared by both In-Process and External Process simulators. |  
  
    DetailsCommunication between the
    external MIDI player and the in-process monitor is asynchronous, meaning
    that the former keeps pumping out data (a producer) while the latter reads
    the data (a consumer) with a user-definable interval without the knowledge
    of the former.  You can implement synchronous inter-process
    communication if the nature of your application requires it. Although
    this demonstration program plays MIDI music, please be reminded that the
    external process simulator can be any console-based program, an application
    with its own GUI, a control process, or a simulated process of a real
    machine, written in any programming language or development
    environment.  It may even be a remote process running across the wire.
  
    CodeAs the above architectural diagram shows, the implementation of this example
    is split into two modules: an external process simulator and an in-process
    simulator.
    
    DownloadDownload MIDI Player for SansGUI.  You need the SansGUI Run-Time
        Environment to run this utility program.  A free SansGUI
        Demonstration Edition is available in the same download area.
    CreditThis example is developed by the SansGUI
    Development Team at ProtoDesign, Inc.  The MIDI playing mechanism uses
    a CMIDI class originally developed by Jörg
    König.  We thank him for giving us the permission to use and
    distribute his MIDI.h and MIDI.cpp
    files. 
 Unit -- Unit Conversion for SansGUI
  
    DescriptionUnit Conversion for SansGUI is a powerful utility
    program that converts numerical values from one measuring unit to
    another.  Based on IEEE/ASTM SI-10 1997 Standard, this program covers
    most of the SI units and many other non-SI units.  Advanced features
    unique to Unit Conversion for SansGUI are:
     
      
        Extensibility: Users can extend unit
        tables to include any desired measuring units not defined in the
        distribution.  In addition to built-in unit tables, there are five
        user definable unit tables for creating new dimensions of
        measurement.  Dynamic unit conversion tables, such as international
        currency exchange rates, can also be implemented easily.
        Versatility: Users can covert a single
        value, an array (vector) of Values to five different units to be
        displayed in a table, or a whole resizable matrix of data in one
        operation.
        Programmability: Users can populate the
        data array (vector) or matrix programmatically using Microsoft Visual
        C++ or Compaq Visual Fortran.  Programming examples in both
        languages are included.
    DemonstrationClick on a picture to obtain its full size screen
    shot. 
  
    |  |  | The units are organized into nine
      categories, including those defined in the tables of IEEE/ASTM SI-10 1997
      Standard. |  
    |  |  | Inside each unit category, the user can
      choose to convert a single value, an array (vector) of values, or a
      multi-dimensional (up to 3D) matrix of values. |  
    |  |  | An array (vector) of data has been
      converted to five different user selectable units in a table.  The Check
      Data button is used to copy the data from the Data column to the rest
      of the columns.  In addition to entering the data manually, the Load Data button can be programmed to
      populate the data array. |  
    |  |  | Each unit dimension is implemented as a
      unit object that contains a user extensible conversion table. |  
    |  |  | The unit conversion table in a unit object
      can be extended by the user to include the units not defined in the
      distribution. |  
  
    DetailsUnit Conversion for SansGUI is a
    very small "simulator" program that is installed and run within
    the SansGUI Modeling and Simulation Environment.  Although very small
    in its implementation, this utility program fully exploits the unit
    conversion facility and features built into the SansGUI Run-Time
    Environment.  Because Unit Conversion for SansGUI is designed to handle
    single value, vector, and matrix unit conversion in one operation, we
    created Collection, Table, Matrix classes for all the unit dimensions in
    addition to the unit objects in its Schema Definition. 
      
        Collection Reference
        Classes: implement single value unit conversion for all the unit
        dimensions in a single unit category; therefore, each unit category
        occupies one class derived from class Collection.
        Table Reference Classes:
        implement 1-dimensional array (vector) unit conversion.  Each
        subclass represents on unit dimension and has 6 non-intrinsic
        attributes, one for each data column.  The first column is of
        in/out scope to allow users to enter the values.  The other 5
        columns are output only.  The values are copied from the first
        column when the user clicks on the Check Data button.
        Matrix Reference Classes:
        implement matrix unit conversion.  Each subclass represents one
        unit dimension and has exactly one attribute that uses the units in the
        unit dimension.
        Component Classes:
        implement switchboards for all unit categories.  In each component
        class, a set of object references are created to let user select and
        jump to the appropriate reference class easily.
    CodeThe only code needed is to copy the data vector
    from the user data column to the other five target columns in class Table.Vector.<UnitDimension>. 
    Because the copy operations of all the <UnitDimension>s are the same,
    we created the intermediate class Vector to implement the common copying
    function.  All the <UnitDimension> classes simply call the
    function in the base class.
    
    DownloadDownload Unit Conversion
        for SansGUI.  You need the SansGUI Run-Time
        Environment to run this utility program.  A free SansGUI
        Demonstration Edition is available in the same download area.
   |