version française [fr]

DEBUGGING, COMPILING  &  PORTABILITY


1. Debugging of variable name-label-format parsing

Should comment line fields be parsed inadequately, the first step to take is to check the HTML source of the questionnaire. All fields of the comment zone starting with // should be separated with HTML tags, possibly separated with the separator of hexadecimal code 0xA0 (this is frequent with MS-Word) and nothing else.
Do not use characters < > or non-breaking spaces within a comment field, as the code will be truncated at parsing stage, should the case arise.

2. Debugging the separated database

If the table of variable formats used for authoring the database with separators is not accurate :

    a) check the table of formats by creating correspondence tables with option -t and combine it with options -N -L -F
    b) if necessary, fill in a questionnaire and check the correspondence table output with option -fo
    c) if the issue remains unsolved, there is still the option of generating a SAS DATA step (options -T, -Te, -To, -Ts), on condition that informats be specified         on a comment line. Option  -A should not be used in this case.

In case of memory-related issues, it is advisable to recompile IDSS with adjusted memory management options, to reserve more memory for parsed data.

3. Debugging with file descriptors

Questionnaire parsing must skip all the code between HTML tags  <head>...</head>, at least with MS-Word.
Although this feature is automated, it may be appropriate to control the starting point of file parsing, using file descriptors. It is therefore possible to skip more data at the beginning of files. Option -j (hexadecimal offset) ensures that questionnaires will be read starting from the hexadecimal offset indicated as an argument.

4. Compiling options

As indicated above, a C99 standard-compliant compiler is required.
The following options are used in the Code::Blocks projects and the Makefiles distributed with the software. They can be used with GCC or other C99-compliant compilers:

POSIX
    POSIX  environnement
WIN
    WINDOWS environnement . One of the two options POSIX or WIN must be specified.

STRICT
    Stricter behaviour of the parsing function pick(FILE) in header file static functions.h. Parsing errors are controlled.
 
FRANCAIS
    Online help and terminal interactions in French.
ENGLISH
    Online help and terminal interactions in English.
LANGUAGE=(char*) locale
    Language used for the setlocale function (for English, LANGUAGE="en_EN" is automatically specified if ENGLISH is selected)

DIACRITIC1=(char) character
    Extra diacritic character 
DIACRITIC2=(char) character
    Extra diacritic character 

KOMPOZER
    HTML code created with KOMPOZER (or NVU)
MSWORD
    HTML code created with  Microsoft WORD (R)

MAXIMUM_LINES=(int)
    Maximum number of questionnaire lines.
MAXIMUM_ITEMS=(int)
    Maximum number of questionnaire items to be keyboarded in Simple Mode (or automatically parsed in R-Mode)
MAXIMUM_QUESTIONS=(int)
    Maximum number of questionnaire questions (beginning with a number followed by a dot). Must be lower than MAXIMUM_LINES.
MAXIMUM_MODIF=(int)
    Indicates the maximum number of characters read on comment lines for modification fields.
VARIABLE_LENGTH=(int)
    Indicates the maximum number of characters read on comment lines for variable names, or automatically generated with option -A.
INFORMAT_LENGTH=(int)
    Indicates the maximum number of characters read on comment lines for (in)formats, or automatically generated with option -A.
LABEL_LENGTH=(int)
    Indicates the maximum number of characters read on comment lines for labels, or separated by curly brackets (braces) in the text if option -U is used.
VALUE_WIDTH=(int)
    Must be at least equal to 10. Indicates the number of characters retained for displaying field values in correspondence tables (option -fo)

COUNT_SPACING=(char*) STRING
    String that appears right before item counts in formatted questionnaires (option -n ). Resulting output will be:  STRING  [item] to [item+X],
    with X the number of characters in the current question.
    With GCC it is necessary to escape string quotes; for example: COUNT_SPACING="\"   ****      \""

Default values of variables not defined by compiling options are given in header file constants.h
back to top

5. Inlining and optimisation with GCC

Optimising options -fomit-frame-pointer and -fexpensive-optimizations have been tested; they barely improve execution times.
Depending on the quantity of cache memory available, it may be preferrable to increase the use of inline functions, which are not systematically expanded  in object code by compiling directive -O3 of the GNU GCC compiler.
It is possible to increase inlining of the functions defined in header file static functions.h with the following GCC options:

-Winline --param large-function-growth=100000 --param inline-unit-growth=2000 --param max-inline-insns-single=10000

Inline functions that would still not be expanded in object code will be mentioned  in the compiling dialog if option -Winline is selected.
The resulting executable is about three times bigger than the executable distributed with IDSS, compiled with option -O3.

6. Portability

IDSS has been tested under Linux, Windows XP and Cygwin (XP environment).
With the GNU GCC compiler, compiling options WIN et POSIX suffice to switch environments, without any modification of the source or of other compiling options.
All modifications of code required for portability are gathered in files Winport.c and Winport.h