Provided by: clc-intercal_1.00-2_amd64 bug

NAME

       sick - Compiler for CLC-INTERCAL

SYNOPSIS

       sick [options] files...

DESCRIPTION

       sick is the main development environment for CLC-INTERCAL. If files are specified, they will be loaded
       into the compiler: if they are not objects, they are considered to be program sources and compiled using
       the options in effect at the point where they appear on the command line: the object produced by the
       compilation is then kept in memory.

       After all the things found on the command line have been processed in some way, the program will then
       pass all the objects to one or more backends to do things with; the default backend just saves the
       objects to file, but other options exist, for example run the objects or produce program listings. Note
       that the action to be performed can be changed with command line options, and may be different for each
       object: the options in force at the time the object was loaded will be used to save or execute it.

       A future version of sick will also include an interactive mode in which these objects can be inspected,
       ran, single-stepped, debugged or simply left alone in memory while you do something more productive.

       Each non-object file will be compiled using a compiler selected using command line options; if nothing is
       selected, the compiler depends on the file suffix; the compiler considers a suffix anything from the last
       spot in the name (including the spot), and the suffix usually ends with i, for example program1.i has
       suffix .i and program2.test.case.42.mublei has suffix .mumblei.

       The suffix selection rules are actually defined in the various sickrc files: the description below
       corresponds to the defaults set by the system.sickrc file included with the compiler but your local
       installation may have changed that.

       CLC-INTERCAL program source
           These  files  must  have  a  suffix ending in i; if the suffix also contains clc as a substring, this
           makes sure the source will be considered a CLC-INTERCAL program, otherwise  the  interaction  of  the
           many  suffix  rules  may end up selecting a different compiler. These files will be prefixed with the
           compiler object sick.io.

       CLC-INTERCAL compiler source
           These files must have suffix .iacc. These will be prefixed, by  default,  with  the  compiler  object
           iacc.io and produce a compiler object (which can be executed as a program, but will do nothing - it's
           only useful as a preload before compiling from source).

       C-INTERCAL program source
           These  files  must have a suffix ending in i and containing a c or a t somewhere, but not contain clc
           as substring: for example, prog1.cli  and  prog2.ti  are  understood  as  a  C-INTERCAL  source,  but
           prog3.clci  and  prog4.tclci  are  not (they are CLC-INTERCAL sources).  These files will be prefixed
           with the compiler object ick.io.

       CLC-INTERCAL assembler source
           These have suffix .iasm and will be prefixed with the compiler object asm.io.

       Traditional INTERCAL program source
           These will have suffix .1972 or .1972i and will be prefixed with the compiler object 1972.io

       Compiler extensions
           Any other letters in the suffix can be used to select compiler extensions, Note that when a suffix is
           shown exactly in the above list, for example .1972 or .iacc, there is no space for extra letters  and
           there  are  no  other  extensions: if this is reqlly required, the language guessing mechanism can be
           bypassed as described later in this document.

       Personality
           By default, sick operates imitating itself. However it can imitate other compilers too by selecting a
           different personality. At present, imitating another compiler just means that different suffix  rules
           apply.   The  main  effect  of the rules is that the default compiler changes from "sick" to "ick" or
           "1972" according to the personality; more information can be found in the online documentation or the
           CLC-INTERCAL-Docs package.

           Base    Numbers between 2 and 7 change the default base by loading compiler objects 2.io to 7.io.  If
                   more  than  one number is present, the largest one wins, so .32i is a CLC-INTERCAL program in
                   base 3. Also note that the suffixes .1972 and .1972i do not take options, and the 7 and 2  in
                   these  suffixes  do not select a base; all INTERCAL-72 programs operate in base 2 only. These
                   options can be used with sick or ick  and  can  be  added  to  iasm  by  specifying  them  as
                   additional preloads, e.g. -Ap5

           Bitwise Divide
                   Letter  d  in the suffix adds the compiler object bitwise-divide.io, which changes the normal
                   unary divide operation to use bitwise, rather than arithmetic, shifts. It can  be  used  with
                   sick but not with ick.  It can also be used with iasm by specifying the compiler object as an
                   additional preload.

           COME FROM gerund
                   Letter  g  in the suffix adds the compiler object come-from-gerund.io, which enables the COME
                   FROM gerund statements; since ick does not parse such statements, this  letter  can  only  be
                   used with sick, or with iasm by specifying it as an additional preload.

           Computed labels
                   Letter  l  (ell, not upper-case i) in the suffix adds the compiler object computed-labels.io,
                   which adds grammar rules to parse computed statement labels; this can be used only with sick;
                   ick would not be able to use this, and iasm can just put computed labels in the object  where
                   it wants them.

           NEXT    Letter  n in the suffix adds the compiler object next.io, which enables the NEXT statement in
                   sick; since ick enables this by default, and iasm programs can just put the NEXT  instruction
                   in the object, this letter can only be used with sick.

           INTERcal NETworking
                   Letter r in the suffix adds the compiler object internet.io, which adds syntax for the STEAL,
                   SMUGGLE  and CASE statements; it can be used with ick or sick. It requires the INET extension
                   to be installed. An iasm program may be able to take advantage of this by specifying it as an
                   additional preload.

           System call
                   Letter s in the suffix adds the compiler object syscall.io, which hides a "PLEASE  NEXT  FROM
                   (666)" in a dark corner of your operating system.  Works with any compiler, even INTERCAL-72,
                   but for iasm and 1972 it needs to be specified as an additional preload.

           Threaded program
                   Letter  t  in the suffix selects threaded mode by loading compiler object thick.io. This also
                   changes the default compiler to ick if the suffix is .i: to use sick one would use  something
                   like .tclci. It also works with iasm and 1972 if specified as an additional preload.

           Wimp mode
                   Letter w in the suffix adds the compiler object wimp.io, which causes the program to start in
                   wimp  mode  when  it  is executed. An equivalent result can be obtained by passing the --wimp
                   option to the executable program.  To use this option with iasm or  1972  specify  it  as  an
                   additional preload.

       The  actual  list  of suffixes recognised is specified by the file system.sickrc and can be modified by a
       system-wide file in /etc/sick (any file name in that directory as long as it does not start with a  spot)
       or  by  a per-user .sickrc file in a user's home directory. See the "Misc options" below for a discussion
       on how and where sick finds these files, and the online documentation for description of the file format.

       If a preload file is specified on the command line, the defaults derived from the suffix are not used. It
       is also possible to use default preloads from a different file suffix by explicitly saying --suffix=.S  -
       in  this  case,  the  compiler  acts  as  if  the  file  had  name name.S; it is also possible to use the
       --add-preloads option to always request the suffix-based guess, and in addition to  that  also  load  any
       preload file specified.

       In  addition,  compiler  objects  are  always  recognised,  with whatever suffix.  These bypass the first
       compiler pass and jump directly to the runtime (just-too-late) compiler. However, if  the  optimiser  has
       been  selected when these objects were compiled, and there are no postprocessor statements, the just-too-
       late compiler will be automatically replaced by a more traditional "compile-time" compiler.  If  this  is
       confusing, wait until you see the rest.

       If  a  file is specified without suffix, and there is a compiler object in the include path with the same
       name and suffix .io, the suffix is automatically added, whether you wanted it or now.

       As soon as each program is written into sick, a pre-compiler will produce an internal compiler object.

       It is possible to ask the compiler to produce a program listing; this may make the compiler  run  slower,
       for  example  because  it'll  have  to  remember a lot more information, depending on the type of listing
       selected.

       If sick enters interactive mode, these objects will be available in memory for single-stepping,  running,
       or  just  ignoring  completely and getting on with the real work (note that the interactive mode has been
       talked about repeatedly, but so far, not implemented).

       If sick loads all the required programs and objects successfully, but does not enter interactive mode, it
       will pass all the objects to the appropriate backends and then terminates. In the absence of a  --backend
       option  this  means  the single backend "Object", which reads the object back to disk using the file name
       specified by --output, or if that wasn't specified, using the original file name but replacing its suffix
       with .io; this behaviour can be modified using the options described below.

       The compiler accepts more several options, some of which are documented here.  Options and files  can  be
       mixed  in  any  order, each file is loaded and compiled using whatever options precedes it on the command
       line. For example:

           sick --verbose --optimise prog1.i --quiet prog2.i --batch

       will tell you everything about compiling prog1.i but not about prog2.i.  Both programs will be optimised.
       On the other hand:

           sick --optimise prog1.i --nooptimise prog2.i --batch

       will optimise prog1.i but not prog2.i.

       All options can be "undone" (sometimes it's even clear how) except --include which applies to all objects
       loaded after it, and --rcfile which applies to all objects, even the ones loaded before it  (just  to  be
       different). In fact, --rcfile works so differently from other options that we aren't sure what happens if
       it appears after any non-object file in the command line, so for simplicity always specify it first.

   User Interface Options
       At  present,  sick does not use any user interfaces and always runs in batch mode; however there are user
       interface selection options in case one day we add support for them. The available interfaces  depend  on
       which  optional  interface  modules  are  installed, and the operating environment decides which ones can
       actually be used.

       -X / --graphic
           Enters X-based graphical user interface. Requires the optional UI-X package and its dependencies, and
           it will only work if running in a suitable environment, for example X windows.

       -c / --curses
           Enters full  screen,  curses-based  interface.  Requires  the  optional  UI-Curses  package  and  its
           dependencies,  and  it  will  only  work  if  running  on a suitable terminal. These days, that means
           anything except a line printer.

       --line
           Enters the line-mode user interface. Requires the optional UI-Line package and its dependencies,  and
           it will only work if running on a terminal which supports it. These days, that means almost anything.

       --batch
           Avoids  entering  interactive  mode.  This  is  the  default if the standard input and output are not
           connected to a terminal and the X based interface cannot be started. It is also the default until  we
           actually implement interactive mode.

       -itype / --interface=type
           Selects  the  user interface type. Currently, only X, Curses, Line and None are defined, but more can
           be installed as compiler plug-ins. If the interface selected is None, sick will work in  batch  mode.
           In addition, an empty string will reinstate the default behaviour.

   Source Character Set Options
       -a / --ascii
           Assumes that program source is in ASCII.

       -b / --baudot
           Assumes that program source is in Baudot.

       -e / --ebcdic
           Assumes that program source is in EBCDIC.

       -h / --hollerith
           Assumes that program source is in Hollerith.

       -g / --guess
           Does  not  make  assumptions  about the source character set. If the character set cannot be guessed,
           will produce an error. This is the default.

       --charset=name
           Assumes that program source is in the given character sets. Valid values are currently ASCII, Baudot,
           EBCDIC, Hollerith but others could be installed as compiler plug-ins; an empty name is equivalent  to
           specifying option --guess).

   Code Generation Options
       -O / --optimise
           Invokes  the  optimiser. This is an upper case letter O, not a zero. This will cause the extra object
           optimise.io to be prefixed after the last compiler and before the real program. The program  is  then
           executed:  when  the  optimiser  takes  control, it will force compilation of the rest of the program
           (thereby executing the compiler at compile-time, instead of runtime as it  normally  does),  and  the
           resulting  object is checkpointed, so the next time it will automatically skip the initialisation and
           compilation stages. In addition, the "optimise" register is set, instructing the compiler  to  invoke
           the optimiser when it runs.

           If you specify both -O and -poptimise (see below), you are asking for trouble, so don't do that.

       --nooptimise
           Disables automatic preloading and execution of optimise.io.

       -oname / --output=name
           Selects  a  name for the output file. Some character sequences are recognised inside name: %p will be
           replaced by the source program's filename with the  suffix  removed;  %s  will  be  replaced  by  the
           appropriate  suffix  for the selected backend, without the initial spot; %o will provide the original
           file name specified on the command line, without suffix (this can differ from %p because  %p  can  be
           prefixed with a directory from the search path); finally %% will produce a single %.

           The  default  is %p.%s, which produces the object name described at the beginning of this document. A
           suffix is not automatically added if the output name does not contain %s; this  might  be  useful  in
           conjunction with the Perl backend to produce a file without a suffix, for example:

               sick --output=%p --backend=Perl sourcefile.i

           will compile sourcefile.i and produce perl script sourcefile.

           The  special  backend  "help"  produces  a  list  of all known backend names, and does not change the
           current list.

           If the output file is specified as an empty string, the code generation step will never be done.

       -Ltypes / --listing=types
           Asks the compiler to produce a program listing; types is a comma-separated list, each element directs
           the compiler to produce a different program listing; at  present,  only  "html"  is  supported  which
           generates  a  syntax-highlighted  version  intended  to  be combined with a stylesheet. Use -Lnone to
           disable source listing from the next object, and -Lhelp to show a list of supported  listing  modules
           (this  does  not  change  what  will run, just produces a list on standard output). It is possible to
           specify a single argument to a listing module by appending "=" and the  argument  to  the  name,  for
           example   the   "html"   module   can   be   asked   to   load   a  stylesheet  with  something  like
           "-Lhtml=clc-intercal.css"

       -nname / --name=name
           Sets the program's name, if the code generator requires it (currently, no backends use  a  name,  but
           some  of  the future ones will). The default is %o. The same %-escapes as defined for the output file
           name are defined.

       --ddirectory / --directory=directory
           Forces all outputs to be produced in directory. This works by generating an output name as  described
           above, then replacing the directory part.

       -lnames / --backend=names
           Selects  one or more compiler back ends; the short option is a lower case "L", not an upper case "I".
           The default is Object, which produces a compiler object (suffix .io). The distribution also  includes
           a  Perl  backend,  which  produces  an executable Perl program (suffix .pl).  In addition, the pseudo
           backend Run will run the program instead of producing any object. In this case, the output file  name
           is  ignored.  Note  that the program will only run if the compiler is in batch mode.  Other back ends
           can be provided as compiler plug ins. The distribution also contains a ListObject backend, which does
           not produce executables but object listings. A future version might offer the option  to  "uncompile"
           the  output of the ListObject back end, but this is currently impossible because not all the internal
           state of the object is provided, only the part which is likely to be useful to a  human  reader.  For
           example:

               sick prog1.i -lObject,ListObject prog2.i -lRun,Object prog3.i

           will compile prog1.i to prog1.io (default backend), then compile prog2.i to prog2.io and also produce
           a  program  listing  in  prog2.iasm, and finally compile prog3.i, run the object immediately but also
           save it to prog3.io.

       --bug=number
           Selects a different probability for the compiler bug. The compiler bug is implemented by initialising
           the compiler's state with the  required  probability:  when  a  statement  is  compiled  (usually  at
           runtime), a "BUG" instruction is emitted with the required probability. The default is 1%.

       --ubug=number
           Selects  a probability for the unexplainable compiler bug. This is the compiler bug which occurs when
           the probability of a (explainable) compiler bug is zero.  Only  wimps  would  use  this  option.  The
           default is 0.01%.

       -pname / --preload=name
           Selects  a  compiler object to prefix to the program. If this option is specified, the compiler won't
           automatically prefix objects as suggested by the suffix. The program 'oo, ick' included  in  previous
           version  of  CLC-INTERCAL  used  option  -p  to select a parser. Since the main use of preloads is to
           select an alternative (runtime) compiler, it is felt that it is appropriate to keep the  same  letter
           for this option.

           The  file  name  specified does not include the suffix .io, which is always added. The file must be a
           compiler object, not source code.

           The special object optimise should always loaded via -O. Using -poptimise will  not  necessarily  put
           the  object in the correct place, and will not instruct the precompiler to do whatever magic it needs
           to do to bootstrap the optimiser.

           To completely disable preloading (this is only done when compiling the optimiser, which  is  used  to
           compile itself) use an empty string.

       --nopreload
           Resets the default behaviour of selecting preloads based on suffixes.

       -A / --add-preloads
           Asks  to  do  the  normal  suffix-based  guess  of preloads, then add to that the ones specified with
           --preload. This can be used for example to add a single preload to a pre-defined list.

       --suffix=suffix
           Specifies a suffix to use when selecting preloads. If this option is not  specified,  the  suffix  is
           taken from the file name to be compiled.

       --imitate=whom
           Specifies  that  different  suffix rules apply by "imitating" another compiler; this functionality is
           still experimental. The value whom can be one of "sick", "ick" or "1972".

       --clc-intercal
           Alias for --imitate=sick

       --c-intercal
           Alias for --imitate=ick

       --intercal-72 / --intercal-1972
           Alias for --imitate=1972

       -Ipath / --include=path
           Adds a directory before the standard search path for compiler objects and source code. If a  file  is
           accessible from the current directory, it is never searched in any include path.

           If  this  option  is  repeated,  the given paths will be searched in the order given, followed by the
           standard paths.

   Misc Options
       In the absence of orders to the contrary, sick starts by  looking  for  configuration  files.  First  the
       system search path is scanned to find any files of the form *.sickrc; if two files with the same name are
       found  in  different  directory,  only the first one is considered.  If this search reveals a file called
       system.sickrc this will  be  executed  first:  any  other  files  found  will  be  executed  next  in  an
       implementation-defined order.

       After  searching  the  system directories, sick considers the directory /etc/sick: any files found there,
       where the first character is not a spot, will be executed in an implementation-defined order.

       The process concludes by looking for file .sickrc in the user's home directory:  if  found,  it  will  be
       executed too.

       -rname / --rcfile=name
           Gets  configuration  from file name before doing anything else. This option can be repeated, in which
           case these files will be exectuted in the order specified.  If  this  option  is  specified  it  also
           disables  the  search  for  configuration  files  described above, so only the files specified on the
           command line will be executed. Note that we use the terms "get configuration" and  "execute  a  file"
           interchangeably because a configuration file is just a special program with an unusual syntax.

       --nouserrc
           Prevents  loading  a  user  rcfile  (.sickrc).  This  option is normally used during installation, to
           prevent interference from previous versions of CLC-INTERCAL.

       --nosystemrc
           Prevents loading system rcfiles (usually in /etc/sick) if any exist.  This option  is  normally  only
           used  during  installation,  to prevent interference from previous versions of CLC-INTERCAL. Also, it
           will limit the search for files to the current "build" directory if there is one,  meaning  that  any
           installed *.sickrc files will be ignored.

       -Rverb / ---rcskip=verb
           Makes  the  program ignore the verb in a sickrc file. This could be used, for example, to disable the
           automatic loading of libraries when it looks like the program needs them, using --RGLUE.

       --extension=name
           Ask the program to make sure to load extension name. This  is  normally  unnecessary  as  finding  an
           extension's  own  sickrc  file will load the extension; however during installation sick will not yet
           know about this sort of things so the build system adds this option to make sure.

       -v / --verbose
           Tells everything it's doing (on Standard Error).

       --stdverb=file
           Sends verbose output to file.

       --trace
           Enables tracing; if compiling from source, the compiler is also traced; to trace a  program,  compile
           it to an object and then run it with --trace.

       --stdtrace=file
           Enables tracing and selects an output file for the trace information.

       --notrace
           Disables tracing; preloading trace.io has priority over this option.

       --grammar-profile
           Enables  grammar  profiling:  this will produce a summary of how the compiler's grammar was used when
           compiling programs; it is mostly useful for either debugging new compilers or analysing the  parser's
           performance. The information is sent to standard error, unless a previous --stdgrammar-profile option
           (see next option) has selected something different.

       --stdgrammar-profile=file
           Enables grammar profiling and sends the output to file.

       --nostdgrammar-profile
           Disables grammar profiling (default).

       --grammar-profile-max=number
           If  grammar profiling is enabled, only produce the first number lines of output: the output is sorted
           by decreasing count, so these will be the number most "interesting" productions  from  the  point  of
           view of performance analysis.

       --grammar-profile-count=number
           If grammar profiling is enabled, only produces output lines where the usage count is at least number.

       --grammar-profile-cost=number
           If  grammar  profiling  is  enabled,  only produces output lines where the estimated cost is at least
           number.

       -q / --quiet
           Stop talking to Standard Error.

       --times
           Prints a summary of the time take for each major action. This setting is independent of --verbose  or
           --quiet.

       --notimes
           Does not print execution times: this is the default.

       --rclist
           Prints  the  names  of  all  rcfiles found; It prevents starting interactive mode.  The names will be
           prefixed with a "splat" symbol ("*") if they  would  be  executed  according  to  other  command-line
           options like --nouserrc and --nosystemrc, and without one if they would not be executed. For example,
           to  edit  all the files which would actually be executed, and to edit them in the order they would be
           executed, run something like:

              sh -c '"${EDITOR:-teco}" `sick --rclist | awk '"'"'$1 == "*" { print $2 }'"'"'`'

           These weird sequences of sparks and rabbit  ears  are  obviously  there  to  cope  with  the  quoting
           mechanisms of different shells.

       --interpreter=module
           Uses an alternative CLC-INTERCAL Interpreter.  The default is whichever Interpreter is considered the
           best at the time the program is distributed.

BUGS

       There  are  more  options  than  ls(1).  This  is  construed to be a feature. Some of the options are not
       documented here but are documented in the Docs package; some are documented here but not there.

SEE ALSO

       The INTERCAL on-line documentation, or the contents of the Docs package.  If necessary, see  a  qualified
       psychiatrist.

perl v5.38.2                                       2024-05-14                                           SICK(1p)