ICK(1)

πŸ’– ICK β€” the INTERCAL compiler, bestie edition πŸ’–

okay so you found ick (that's ICK(1), General Commands Manual energy) and you're about to have the time of your LIFE. sit down, hydrate, let's go 🫢


✨ NAME ✨

ick β€” the INTERCAL compiler. that's it, that's the whole name, no notes πŸ’…


🌸 SYNOPSIS 🌸

ick [options] file...

ick -e [options] intercal-file [non-intercal-file...] [library...]

like... two whole shapes of invocation. pick your fighter ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

so this manual page is a brief little rundown of the ick command, no cap. it was originally written for the Debian GNU/Linux distribution (but other people can absolutely use it too, it's not gatekept πŸ’œ), because the original program straight up did not have a manual page β€” tragic, honestly β€” and then it got added back into the main distribution. glow-up fr.

want the fuller documentation? run info ick (that's for the ick command itself). want even fuller than full? run info C-INTERCAL, which has the docs for both the compiler and the INTERCAL language. she contains multitudes, periodt πŸ‘‘

ick takes INTERCAL programs and generates code from them (by running gcc, because we delegate around here πŸ’…).

ngl, the base a program is written in is deduced from its file extension. this is not optional, bestie. INTERCAL programs in base 2 must have the extension .i, and INTERCAL programs in bases from 3 to 7 must have an extension from .3i to .7i respectively. get it wrong and it's over for you 😭

also: no options take arguments. none. zero. you can give multiple options separately or combined in the usual way (yes, even -e, iconic). the order you give options in is irrelevant unless they conflict β€” and if they conflict, the options given last on the command line win. last one standing, main character energy 🌈


πŸ’… OPTIONS πŸ’…

  • -c β€” compile INTERCAL to C, but do not compile the resulting C. half-finished, on purpose, we love a cliffhanger πŸŽ€
  • -d β€” print yacc debugging information. this implies -c.
  • -t β€” requires strict INTERCAL-72 compliance, which means it rejects COME FROM, the extensions for bases other than two, and all the other features that INTERCAL-72 simply did not have. strict queen, no crumbs πŸ’€
  • -b β€” disables the INTERCAL-72 random-bug feature. yes that's a real feature. no I will not elaborate (the manpage doesn't) πŸ™ˆ
  • -O β€” attempt to optimize expressions in the generated code. try your best, king ✨
  • -C β€” clockface output, using IIII rather than IV in Roman numerals. aesthetic choice, respected πŸ•°οΈ
  • -f β€” optimize control flow in the generated code. note that this prevents -yp.
  • -F β€” optimize everything in the generated code for speed, regardless of how slow the compiler becomes or how large the object file becomes. go big or go home. implies -fO, and prevents -cdeghpyH. she does not share the aux πŸ”₯
  • -h β€” print optimizer debugging information. implies -cO.
  • -H β€” print verbose optimizer debugging information. implies -cO.
  • -hH β€” print optimizer debugging information in a different form. implies -cO. yes, -hH is its own thing, it's giving duo πŸ’«
  • -w β€” enable the +printflow option in output programs even if they are not multithreaded. generosity πŸ’–
  • -y β€” run the yuk debugger on the code. prevents -fme.
  • -p β€” run the yuk profiler on the code. prevents -fme.
  • -m β€” allow multithreading and backtracking. prevents -ype, and implies -w.
  • -e β€” link one INTERCAL file to non-INTERCAL files or to expansion libraries. doing this changes the syntax of the command line: the first file given must be the INTERCAL source file, then any number of files in other languages to link via the external calls system (currently only C and maybe Befunge-98 programs are allowed), and then any number of expansion libraries. the non-INTERCAL files will be processed to link them to the INTERCAL files, then compiled with gcc and linked to the main INTERCAL program. it's a whole crossover episode 🌈
  • -E β€” do not link any system libraries, even if the code suggests that one or more is needed. prevents -P.
  • -a β€” allow the use of the CREATE statement. prevents -P.
  • -v β€” allow anything on the left of an assignment, and turn off the protection that constants otherwise have against being assigned to. chaos, consented to πŸ’€ prevents -fFOP.
  • -P β€” compile PIC-INTERCAL rather than INTERCAL. prevents -amFvxeE, and implies -cfO.
  • -o β€” output to stdout rather than .c. implies -c.
  • -X β€” interpret ambiguous syntax such as ? and @ with Princeton meanings (as used by CLC-INTERCAL), rather than with the default Atari meanings. two dialects, one diva πŸŽ€
  • -x β€” use CLC-INTERCAL rules for text I/O and for abstaining from a GIVE UP by label. prevents -P.
  • -u β€” print a message whenever the compiler tries to open a file. nosy, in a helpful way πŸ¦‹
  • -U β€” dump core on E778 as well as printing an error. dramatic! it's giving and I oop 😭
  • -Y β€” display the command lines for programs invoked by ick. receipts, always 🧾
  • -g β€” leave the generated C in place, and make the output executable debuggable.
  • -l β€” attempt to report likely bugs and nonportabilities. implies -O. she's a hater but she's right πŸ’œ

πŸ‘‘ SEE ALSO πŸ‘‘

  • the newsgroup alt.lang.intercal is where INTERCAL compilers get announced, and where INTERCAL itself is discussed.
  • the website http://catb.org/~esr/intercal is where the most recent versions of C-INTERCAL are currently hosted. go visit, it's iconic ⭐

🌟 AUTHOR 🌟

ick was originally written by Eric S. Raymond. this manual page was originally written by Mark W. Eichin <eichin@kitten.gen.ma.us>, for the Debian GNU/Linux system. legends only 🫢


and that's the whole page bestie!! it's the ICK(1) page from the General Commands Manual, and yeah the footer is just ICK(1) again because the manpage said so β€” take care of yourself, compile responsibly, and remember: no options take arguments πŸ’–βœ¨πŸŽ€πŸ¦‹πŸŒΈπŸ’