ICM Manual v.3.9
by Ruben Abagyan,Eugene Raush and Max Totrov
Copyright © 2020, Molsoft LLC
Jun 5 2024

Reference Guide
 ICM options
 Alignment Editor
 Cgi programming with icm
 Xml drugbank example
 Tree cluster
 Flow control
 Energy Terms
 Chemical Functions
 Gui programming
 Icm shell functions
Command Line User's Guide
PrevICM Language Reference
CGI programming using ICM scripting language


Common Gateway Interface (CGI) is a standard method used to generate dynamic content on web pages and web applications. CGI, when implemented on a web server, provides an interface between the web server and programs that generate the web content. These programs are known as CGI scripts or simply CGIs; they are usually written in a scripting language, but can be written in any programming language including ICM.

An ICM CGI script consists of the following important elements:

  • first line must define the path to the ICM binary followed by -w option with path to ICMHOME


    #!/usr/prog/icm/icm64 -w/usr/prog/icm
  • The first output line of any CGI program must define the content type. Most common type is: text/html. Make sure that nothing is printed before that line Example:
    printf "Content-type: text/html;\n\n"
  • Then, usually goes CGI parameter processing. ICM provides a function which return both GET or POST argument as a collection. Example:
    params = Collection(web)
    if (Exist(c,"paramName")) show c["paramName"]
  • Depending on the input parameters the main part of CGI script generates output HTML which will be displayed in the web browser. For large multi line pieces of HTML code you can use triple quote strings. Example:
      <title>Molsoft Chemical Search Demo</title>
      <link rel="stylesheet" type="text/css" href="chemsearch.css">
      <script src="http://www.molsoft.com/web/moledit.js" type="text/javascript"></script>
  • The last line of any CGI script must be quit command.

Simple Example

The simplest 'Hello World' ICM CGI script may look like this:

#!/usr/prog/icm/icm64 -w/usr/prog/icm

printf "Content-type: text/html;\n\n"

print "Hello from ICM SGI script"


Tables in HTML output

ICM provides a command show html to generate a nicely formatted HTML code for shell tables. The command generates fully self-contained HTML code with head and body tags. If you CGI script produces a single HTML table you can use this command as is.


#!/usr/prog/icm/icm64 -w/usr/prog/icm

printf "Content-type: text/html;\n\n"

params = Collection(web)
if (Exist(param["filename"])) then
 # reads sn SDF file on the server
 read table mol param["filename"] name="t"   
 show html t


In more complex cases when table is just a part of bigger HTML code you need to extract body part and, optionally, javascript part which renders chemical structures. It can be done using regular expression and Match function


 # store the result HTML in s_html string variable
 show html t output = "s_html"   
 # extract table 
 s_table = Match(s_html,"<body.*?>(?n)(.*)</body>", 1 )  
 # for chemical tables you might want to extract JavaScript code
 # It defines a function with name: onLoad_<tableName> 
 # which will draw chemicals when you call it.
 s_js    = Match(s_html,"<script.?>(?n)(.*)</script>", 1 ); 
 # add s_table and s_js into appropriate parts of your result HTML
 s_head += s_js
 s_body += s_table
 # show the result html
 show "<head>" + s_head + <"/head">
 show '<body onload="onLoad_t();">' + s_body + "</body>"

Integration with Molsoft HTML5 Molecule Editor

Please click here to learn how to embed molecule editor into your html code.

Chemical Search Script Demo

The example which demonstrates the functionality above: Chemical Search Demo

It provides basic chemical search functionality using find molcart command and chemical database file The source code if the script is here

Greedy matching
Xml drugbank example

Copyright© 1989-2024, Molsoft,LLC - All Rights Reserved. Copyright© 1989-2024, Molsoft,LLC - All Rights Reserved. This document contains proprietary and confidential information of Molsoft, LLC. The content of this document may not be disclosed to third parties, copied or duplicated in any form, in whole or in part, without the prior written permission from Molsoft, LLC.