Patrick Craig > IRIS Explorer > Features

IRIS Explorer 5.0 New Features 19 April 2000



[Return to main IRIS Explorer page]


New Features

  1. Multi-module executables
  2. Searchable librarian
  3. Module Debugger
  4. Hidden ports
  5. Multi-line text widgets
  6. Ability to change label text at runtime
  7. Module creation and modification dates
  8. Sample maps
  9. Interface to configuration files
  10. Option to save modules in alphabetical order
  11. New skm commands
  12. cxWinInstanceGet
  13. cxWinInterruptEnable


  1. Multi-module executables
  2. Available from the Group | Compile menu. Allows you to compile a Group module into a single process. Compiled MMEs can be "Uncompiled" via the uncompile submenu of the module popup menu.
    New API
    cxModuleBaseNameGet - returns the name of the original module.
    cxModuleExecTagValueSet - tells the MME which module is firing when module code calls cx API routines as the result of a Windows event callback.

    [Contents | New Features | Enhancements | Dropped features]

  3. Searchable librarian
  4. Ability to search the librarian for modules / maps. Extra search window below the shelf displays the result of the search.

    There are 4 search options :
    1. Search by name.

    2. Click on the status bar at the base of the librarian and type the first characters of the name you are searching for. Back space deletes the last character typed. Return terminates the search string, any subsequent characters start a new search. Escape deletes the search string and the contents of the search window. The search is not case sensitive.
    3. Search by port type.

    4. Acessed via the Search | Ports librarian menu. Select one or more input and output port types to search for.
    5. Search by keyword.

    6. Acessed via the Search | Keyword librarian menu. Searches for the keyword in module help files.
    7. Search for maps containing a particular module.

    8. Acessed via the Find maps containing this module menu option on the librarian module popup menu.

    There is also the option of a repeat search. This is activated by pressing tab after clicking on the librarian status bar or by clicking in the leftmost sector of the librarian status bar. This option does not affect name searches but affects all other search types and allows you to, for example, search for all modules begining with s that have a lattice input and mention "intersection" in their help file. If a search returns no matches, the repeat search option is turned off.

    [Contents | New Features | Enhancements | Dropped features]

  5. Module Debugger
  6. Available from the replace(debug) submenu of the module popup menu or when a module crashes.

    This allows you to "debug" a selection of cx API calls. This was originally developed for debugging MMEs where you have no source, but I think it will prove most useful to users who are learning how to write modules and/or don't know how to use a "real" debugger. It is also sometimes useful for more expert users, e.g. for debugging modules written by other people. It was first used to fix Antoine's "LatFunction doesn't work in loops bug" that had been outstanding for about 2 years.

    [Contents | New Features | Enhancements | Dropped features]

  7. Hidden ports
  8. Available from the Show in port list? option of the Control Panel Editor. Allows you to hide parameter ports from the port menus.

    [Contents | New Features | Enhancements | Dropped features]

  9. Multi-line text widgets
  10. Available from the widget type drop down menu of the Control Panel Editor. Multi-line text widgets have a limit of 1500 characters.

    [Contents | New Features | Enhancements | Dropped features]

  11. Ability to change label text at runtime
  12. E.g. cxInWdgtStrSet("<label0>","New text");

    [Contents | New Features | Enhancements | Dropped features]

  13. Module creation and modification dates
  14. Accessed via the Properties submenu of popup menu of module in the librarian or Map Editor.

    [Contents | New Features | Enhancements | Dropped features]

  15. Sample maps
  16. Set via the module builder Sample Map text box. Accessed from the librarian module popup menu.

    [Contents | New Features | Enhancements | Dropped features]

  17. Interface to configuration files
  18. Accessed via the Configuration submenus. Some menus are only available when the Map Editor is empty.

    [Contents | New Features | Enhancements | Dropped features]

  19. Option to save modules in alphabetical order
  20. Set in the Configuration | General dialog.

    [Contents | New Features | Enhancements | Dropped features]

  21. New skm commands
  22. modal-panel [modname] - Open a module's control panel modally.
    wait-hilite* [seconds] - Wait for the next module firing or timeout, whichever is first.
    wait-nohilite* [seconds] - Wait for the given time. If a module fires during this time, start the wait again.

    *These return immediately if Exec Hilite is turned off. These functions are designed as an alternative to the pause command when waiting for maps to load/complete as it is difficult to know how long these operations will take on different machines.

    [Contents | New Features | Enhancements | Dropped features]

  23. cxWinInstanceGet
  24. Returns a unique "lc" instance number. This was written for the collaborative modules (previously they used the name of the arena file, if it was present), but may be useful in other situations.

    [Contents | New Features | Enhancements | Dropped features]

  25. cxWinInterruptEnable
  26. On Windows there is no concept (as far as I know) of sending an interrupt signal to a process as you can under UNIX. This api function is based on a suggestion from Jason. The first call makes the module interruptable (interrupt option should appear on the module popup menu), subsequent calls provide an opportunity for the module to be interrupted. Modules can only be interrupted during a call to cxWinInterruptEnable.

    [Contents | New Features | Enhancements | Dropped features]



Enhancements

  1. Windows communication
  2. Improved shared memory arena
  3. Built in license installation
  4. Check for compiler
  5. Removal of EXPLORERHOME environment variable
  6. Merging of gui/gc/lc
  7. No exec hilite now works
  8. Displaying control panels during map launch
  9. Replacement of paths by ${EXPLORERHOME}/*
  10. Windows module stdout
  11. One click connections
  12. Better handling of remote lc death
  13. Ability to build modules while they are running in the Map Editor


  1. Windows communication
  2. Explorer 5.0 uses windows messaging instead of sockets for interprocess communication on the local machine as this is faster.
    New api function:
    cxWinSocketsInit - The windows socket library is no longer initialised by default in the MCW, so modules that want to use sockets should call this function before they call any socket api functions.

    [Contents | New Features | Enhancements | Dropped features]

  3. Improved shared memory arena
  4. Virtual memory is now used instead of a memory-mapped file because this is faster and eliminates the problem of undeleted arena files.

    Also the shared memory arena does not operate in the same way as in Explorer 4.0 in the following respects:

    1. Shared memory creation, initialisation and deletion

    2. In Explorer 4.0, the shared memory arena is created and initialised by the lc when Explorer starts up and deleted by the lc when Explorer exits.
      On NT 5.0, the shared memory arena is also created and initialised when Explorer starts up but it can be deleted and recreated while Explorer is running (as long as no modules are running). This alows users to change arena size / arena base without restarting Explorer. Also the shared memory arena is reinitialised whenever the Map Editor becomes empty, wiping out any shared memory leaks that may have occurred.

    3. Shared memory error recovery

    4. There are several Explorer api functions for dealing with failure to allocate memory from the shared memory arena. This is what module code should do:
      Call cxDataAllocErrorGet after each attempt to allocate shared memory.
      According to the documentation for cxDataAllocErrorClear, if cxDataAllocErrorGet returns non-zero the module has three options:
      1. Wait around for a bit and hope more memory becomes available.
      2. Reduce the memory it is already using and try again.
      3. Return from the current execution.
      Apparently all IRIS Explorer system modules "simply send an alert message to the user and return from the current execution". It is my experience that most of them don't do any error checking at all, carry on regardless, and crash when they try to access NULL pointers. Also, once the Error flag has been set, all subsequent calls to shared memory routines will return NULL, until the module calls cxDataAllocErrorClear. I don't know of any module that handles shared memory error recovery "correctly". cxDataAllocErrorClear does not appear in any module source files and is not mentioned in the "Examples of Memory Recovery" in the Module Writer's Guide (Chapter 9 not Appendix B).

      As far as users are concerned, all they want is an error message saying they have run out of shared memory and an opportunity to save the current map without modules crashing first. They can then increase the size of the shared memory arena and try again.

      On Explorer 5.0 for NT the memory checking / recovery api are not used. When a shared memory allocation fails, an error message is produced and the user code returns automatically. In a very few cases, module writers may not want this to happen. For example they may be trying to find out how much shared memory they have available by attempting to allocate larger and larger blocks of memory. For this instance, there is a new api function:
      cxWinDataManAbortOnError(int abort)
      If this is called with abort=0, the user code will not return automatically and users can check for failure by checking for NULL returns.

    5. Arena base

    6. When Explorer or modules fail to map the shared memory arena to the given base address, a printout of free address space appears in the log window.

    [Contents | New Features | Enhancements | Dropped features]

  5. Built in license installation
  6. License installation now built into Explorer, available from Configuration | License or when the license fails.

    [Contents | New Features | Enhancements | Dropped features]

  7. Check for compiler
  8. Explorer now checks if a compiler is installed when required (Module builder at startup and IRISExplorer from Group | Compile menu). Previously, Module builder just crashed if it couldn't find the compiler.

    [Contents | New Features | Enhancements | Dropped features]

  9. Removal of EXPLORERHOME environment variable
  10. IRISExplorer and Module builder should now work out where they are installed at runtime so there is no need to set environment variables or install as Administrator.

    [Contents | New Features | Enhancements | Dropped features]

  11. Merging of gui/gc/lc
  12. gui/gc/lc have been merged into one process to speed up map loading and to make debugging and the introduction of new features easier.

    [Contents | New Features | Enhancements | Dropped features]

  13. No exec hilite now works
  14. On Explorer NT 4.0, turning off ExecHilite does not make maps run any faster. To test this you can create a module with a single parameter whose value is connected to the single user function argument using the following code:
    
    #include <windows.h>
    
    #define ITERATIONS 500
    
    void doit ( int count  )
    {
    	static DWORD start;
    	DWORD end;
    
    	if (count == 0)
    	{
    		printf("Starting...\n");
    		start = GetTickCount();
    	}
    	if (count == ITERATIONS)
    	{
    		end = GetTickCount();
    		printf("%d iterations took %0.2f seconds\n",ITERATIONS,
    			((float)end-(float)start)/1000.0);
    	}
    }
    

    You then connect this module's parameter to For current value and it's firing done port to For's fire port and set For's start value to 0 and end value to 500. On my machine I get the following times in seconds for 500 iterations (I think it was just luck that the two 4.0 times were exactly the same)

    Explorer 4.0 ExecHilite On 200.29
    Explorer 4.0 ExecHilite Off 200.29
    Explorer 5.0 ExecHilite On 4.97
    Explorer 5.0 ExecHilite Off 1.78

    [Contents | New Features | Enhancements | Dropped features]

  15. Displaying control panels during map launch
  16. During map launch, Explorer 4.0 displays module control panels before the module process has been started and group control panels before any of it's constituent modules have been created. This creates problems when users try to interact with control panels that are "unconnected". This is especially true in the case of applications that have a lot of modules in a single group.

    Explorer 5.0 displays all control panels after all the modules in the map have been launched.

    [Contents | New Features | Enhancements | Dropped features]

  17. Replacement of paths by ${EXPLORERHOME}/*
  18. Explorer 5.0 replaces module paths by ${EXPLORERHOME}/* where approprite. Also when files are opened using file browsers, the same thing happens to the file name.

    [Contents | New Features | Enhancements | Dropped features]

  19. Windows module stdout
  20. Modules with a Windows (or MFC) wrapper can now use stdout to write to the log window.

    [Contents | New Features | Enhancements | Dropped features]

  21. One click connections
  22. To connect modules with Explorer 4.0, you right click on the port and when you release the mouse button the port menu appears. You then click on the required port with either the right or left mouse button.

    This is still the case with Explorer 5.0, but you can also use the left mouse button. With the left mouse button, the menu appears when you click rather than when you release, so if you click and hold the left mouse button down, you can select the required port and then release.

    [Contents | New Features | Enhancements | Dropped features]

  23. Better handling of remote lc death
  24. In Explorer 4.0, if a remote lc (or the local one) crashes, you get an error message saying the lc died and progress is now impossible. This is true if the lc was the local one, but needn't be true for remote lcs. In the case of remote lc's, any modules from the lc become "zombies" that cannot be removed.

    In Explorer 5.0 if a remote lc crashes, the lc is marked as Dead and it's modules are "prepared for destruction" (i.e. the control panel disappears and the popup menu just shows Destroy). Once these modules have been deleted, the lc is "deleted" but the remote librarian stays in place. If the user then launches another module from the remote librarian, a new lc is started up.

    [Contents | New Features | Enhancements | Dropped features]

  25. Ability to build modules while they are running in the Map Editor
  26. Explorer was originally developed on SGI, where it is possible to replace an executable file while it is running. I think this is what the Replace option on the module menu is designed for, i.e. you build a new version of the module and you can replace the old one in the map without having to remake all the connections.

    Unfortunately on Windows and some Unix systems you cannot replace an executable while it is running. Explorer 5.0 for NT attempts to get round this problem by using a nxe (pronounced nexe) file. This is a "next executable". The module build system has been changed so that it creates an output file called .nxe instead of .exe. It then attempts to rename the .nxe to .exe. This will fail if the module is running.

    The code in Explorer/lc that launches module processes has been modified so that before it launches a module it checks for a nxe and if it exists, it attempts to rename it to an exe. The result of all this is that if you build a module while it is running in the Map Editor, the new executable will replace the old one the next time the module is launched and there are no other instances of the module running. This means if only have one instance of a module running in a Map, you can rebuild it and when you do a replace the new executable will be loaded.

    [Contents | New Features | Enhancements | Dropped features]



Dropped features

The following features that appeared in previous beta versions of Explorer 5.0 have now been removed or hidden due to the time constraints of the development schedule. They may or may not be revived in future versions.

  1. Multiple control panels for modules / groups
  2. Ability to edit module control panels from the Map Editor
  3. Action button widgets
  4. More menu item options
  5. Promoting labels and action buttons from modules to groups
  6. Option to make file selectors Open or Save
  7. Debug shared memory arena
  8. skm commands open-panel and close-panel


[Contents | New Features | Enhancements | Dropped features]