IRT Command Language (ICL)
This page contains a description of the source code for IRT Command Language (ICL), describes how to obtain the
ICL source code, and provides information needed in order to compile ICL.
Development of ICL is managed through the SourceForge website as part of the
Social Science Measurement
project. Participation in the development of ICL is encouraged. Two Social
Science Measurement project mailing lists are used to
communicate information about ICL. The ssm-announce
mailing list is used to make announcements about new releases of Social
Science Measurement projects, including ICL. The ssm-devel mailing
list is for discussion of ICL development, and the development of other
Social Science Measurement projects. Anyone is welcome to subscribe to either
mailing list. The source code comprising ICL can be downloaded from the SourceForge website, or from the
link below. The latest development versions of the ICL source files can be
obtained from the Social Science Measurement CVS repository at the
SourceForge website.
Download ICL source code - Zip archive containing
ICL source files. The source files in this archive are stored with DOS line
breaks (the files are DOS text files).
ICL is written in C++, so a C++ compiler is needed to compile ICL. Version
2.95.2 of the GCC
compiler was used to compile ICL under Linux, and version 7.2 of the Metrowerks CodeWarrior compiler was
used to compile ICL under Mac OS. The Windows version of ICL was compiled
using MinGW, which allows Windows programs
to be compiled using GCC 2.95.2. The Windows version of ICL was
cross-compiled under Linux using a version of MinGW running on Linux. ICL
should compile using other C++ compilers that have a similar level of compliance
with the C++ standard (e.g., the free Borland 5.5 compiler
for Windows). Some modifications may be needed to compile ICL using Microsoft
Visual C++ version 6. The symbol ETIRM_USE_BOOST_CONFIG should be defined when
trying to compile ICL using Microsoft Visual C++ so the Boost configure
system can define the appropriate symbols (see below for information about
the Boost C++ libraries).
Several tools described below were used in compiling ICL. These need to be
separately downloaded. It is not necessary to have all these tools to compile the
ICL source code since the source files produced by some of the tools (SWIG and
mktclapp) are distributed as part of the ICL source code distribution. It may
be necessary to use all these tools if changes are made to the ICL source
code.
- Estimation Toolkit
for Item Response Models (ETIRM) - ETIRM provides the
numerical routines used by ICL. The current version of ICL was compiled
using ETIRM version 0.020228.
- Tcl Libraries - The Tcl
source code is needed to create static Tcl libraries which are linked into
ICL. The Tcl libraries need be compiled following the instructions in the Tcl
source code distribution. Version 8.3.2 of Tcl was used for the Windows and Linux
versions of ICL. For the Macintosh version of ICL the
Macintosh source code for version 8.3.4 of Tcl was used.
- Mktclapp - Used to create
the stand alone ICL applications for Windows and Linux, which contain an
embedded copy of the source code for ICL commands that are written in Tcl
(from the source file icl.tcl). Mktclapp is used to produce the source files
icl_win.cpp and icl_linux.cpp. The current version of ICL was created
using mktclapp version 3.11.
- Simplified Wrapper and Interface Generator
(SWIG) - Used to create Tcl wrappers for the C++ source code. Note that SWIG
can generate wrappers for other scripting languages such as Perl and Python.
Creating a version of ICL based on a scripting language supported by SWIG
other than Tcl is possible using the existing code along with a SWIG input file
for that language analogous to the Tcl version (icl.swg). SWIG is used to
produce the source file icl_wrap.cpp. The current version of ICL was
created using SWIG version 1.3.11.
- STLport - An implementation of the
C++ standard library used to compile the Windows and Linux versions of ICL.
STLport is needed when compiling ICL using gcc 2.95.2 due to
limitations in the C++ standard library implementation.
STLport may not be needed when compiling ICL using other C++ compilers,
or later versions of gcc. The current version of ICL was created using
STLport version 4.5.1.
- Boost C++ Libraries - ICL uses random
number classes from the Boost libraries in the functions for boot straping and
simulating item responses. The current version of ICL was created using
version 1.27.0 of the Boost libraries.
The top level of the source code distribution contains files needed to compile
the Linux and Windows versions of ICL. Descriptions of these files are given
below.
- appinit.cpp - Contains Et_AppInit function that initializes commands created
by SWIG within the program created by mktclapp.
- icl_linux.cpp - Main program for Linux application
generated my mktclapp containing wrapped Tcl source
code.
- icl_win.cpp - Main program for Windows application
generated my mktclapp containing wrapped Tcl source
code.
- icl.swg - SWIG input file to generate Tcl wrapper file icl_wrap.cpp
that includes functions declared in swig_etirm.h (part of ETIRM) and
swig_icl.h.
- icl_linux.mta - Input file to mktclapp used to generate icl_linux.cpp
for the Linux application. Directory
paths in this file will need to be changed or the file recreated using the Tk
interface to mktclapp (xmktclapp.tcl).
- icl_win.mta - Input file to mktclapp used to generate icl_win.cpp
for the Windows application. Directory
paths in this file will need to be changed or the file recreated using the Tk
interface to mktclapp (xmktclapp.tcl).
- icl.tcl - Source code for ICL commands written in Tcl.
- icl_wrap.cpp - Source code for ICL commands written in C++ wrapped
by SWIG to be compiled into a Tcl interpreter.
This file is generated by SWIG from icl.swg.
- Makefile - Contains the sequence of steps needed to create the Linux ICL
executable.
- Makefile.win - Contains the sequence of steps needed to create the Windows
ICL executable.
- swig_icl.cpp and swig_icl.h - Functions and classes for ICL commands written
in C++. The file swig_icl.h and the ETIRM file swig_icl.h are
used with SWIG to generate Tcl language wrappers for the ICL functions written
in C++.
- swig_etirm_types.h - Definition of types that are referenced in
the ETIRM file swig_etirm.h.
The mac directory contains files that are needed, in addition to some of those
described above, to compile the Macintosh version of ICL. Descriptions of
these files are given below.
- icl.mcp.xml - Exported Metrowerks Codewarrior version 7.2 project file for
the Macintosh version of ICL.
This file can be used to import the project using the Import File menu item
under the File menu in Metrowerks CodeWarrior 7.2.
- icl.rsrc.hqx - Resources needed for the Macintosh application encoded in
BinHex format. This file needs to be decoded using StuffIt Expander.
- icl_tcl.r - Copies the Tcl source code needed for the Macintosh
application into resources to create a stand alone application.
- ICLMacAppInit.c - Contains main function for Macintosh version of ICL.
- icl_prefix.h - Prefix file used for the Metrowerks project.
Software by Brad Hanson
Brad Hanson's Home Page
Last updated: March 1, 2002