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.
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
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