From: Timothy Rue 
Subject: Some Q & A about IQ
Date: Sat, 5 Dec 98 19:12:00

As is typical of learning about using computers, actually doing (using)
is very important. Reading helps but understanding comes from the
verification loop of doing.


Q: What Do I need to run IQ?

Arexx and the rexxtricks.library? (it's available on Aminet)

Rexxtricks is needed for a pattern matching function but has alot of
other useful functions too.


Q: what is IQ supposed to do

Look at IQ as basicly another type of search engine, like AmigaDos search,
grep, etc. but there are differences. Still it is a search engine.

IQ, in it's current public version is not for building dictionaries, but
to search them.

Dictionaries are easy to make or convert from other electronic

If just getting started, to help you understand it by doing, I do have
some dictionaries available on my web page.

The file is one (converted from the rexxtricks Amiga Guide
file) and you can compair it to it's Amiga guide version to see the
differences (You'll have the rexxtricks Amiga Guide from rexxtricks


Q: how does IQ work?

Just like using a printed human language dictionary (but better). For
example lets say you want to look up the word "matchpattern" in the file.

The basic commandline elements

    |   |   |   - definition part(s) you want (any amigados pattern(s))
    |   |   - the word pattern to look for (may be any amigados pattern)
    |   - the .iq file you want to read/search.
    - the arexx port you want to send the output to. (none for none)

Enter on the command line shell:
(Using proper paths for IQ and the .iq file to search)

rx IQ none matchpattern#? #?

IQ will search the file and output the definition of
the "matchpattern" function to the shell window.

All AmigaDos Pattern matching elements are valid for both the word and
any number of definition parts (as many as you want.)

You can shorten "matchpattern#?" to "mat#?" and still get the same output.

The last arguement of "#?" is used to output the whole definition of

You can select a part or parts of the definition to output. For example:

rx IQ none matchpattern#? example#?

To output only the example part of the definition.


Q: How do I know what parts there are, or for that matter what words are
in the .iq file?

To see what different definition parts "matchpattern" has:

rx IQ -k none matchpattern#? #?

"-k" stands for "keys" and it will show you the different words and parts.

To see a list of all words enter:

rx IQ -k none #?

To see a list of all words and parts enter:

rx IQ -k none #? #?

IQ will only list the parts the first time if find them (not for each
word), so if you want to see what parts a specific word has use the
example specific word format above.

(rx IQ -k none theword#? #?)

*** In the above command lines "none" is used because you are not sending
the output to an arexx port.

The AmigaDos wild cards at the end of "matchpattern" is because the
complete word is "matchpattern()" But Arexx or matchpattern (which really
uses AmigaDOS pattern matching abilities) sees the "()" as pattern
matching elements and therefor misses them in words.


Q: In trying the above I noticed the first output line mentions filekeys
and the second line is "filekey : :: :::", what is this?

IQ looks to see if the first line of the .iq file starts with the word
"filekey", and if so IQ knows the following ": :: :::" defines what IQ
recognizes as a word, part, and file (for .iq files that point to other
.iq file to also look/search thru) identifiers.

In creating or converting a file to be understood by IQ, all you need
to do is start each word with the first character set (here it is ":"),
start each part with the second character set (here it is "::") and for
any file you want IQ to also search in, start the files name with the
third set of characters (here it is ":::"). And these character sets must
be at the beginning of the line directly followed by the word, part or

These character sets can be any character sets except blank spaces and must
not include blank spaces.

If the .iq file doesn't contain the first line (here it is
"filekey : :: :::") then IQ will use either the default sets
"word: subs: file:" or the "filekey" of the last file it was in during
it's current execution.


Q: how can IQ be used with, say REBOL, to help me learn and code in Rebol.

It takes a little bit of setup.

First you need to add, create or convert rebol documentation (and any
rebol source code) to IQ understandable files.

Following the above questions answer:

Since Rebol uses the semicolon ";" in code for comments, you can start the
three keys with the semicolon followed by whatever additional character(s)
to make each of the three keys unique. Of course these are just a prefix
for you to use in identifying words, parts and files within the
documentation or code.
(I.E. the word key might be ";w;", part might be ";p;" and file ";f;")

Unless you change IQ defaults (* see below), You'll also want to start the
first line of documentation with the word "filekey" followed by the three
keys.  This way IQ will know to use these keys.
(I.E. "filekey ;w; ;p; ;f;"

(** see below for a way to change "filekey" also)

Once you have the documentation done, then you can search it with IQ, as
you would in using traditional help methods.

But IQ is like any other dos command, so you can also redirect IQs output
to a file. This is useful if you are creating/generating code.

The great thing about IQ is that you can take a file of code you are
working on and use IQ to insert code into it, from another file or even
from documentation.

The simplest way to do this is to use the default IQ key that identifies a
file to also search "file:". But your rebol code may find this a problem.

(Setting things up for coding)

(*) So you'll want to change IQs defaults. Simply look thru the source
code of IQ and change the lines to what you want the defaults to be. The
lines will read something like: (There is only one set of lines like this)

key. = 'filekey'
key.1 = 'word:'
key.2 = 'sub:'
key.3 = 'file:'

I.E. you might change these to read:

key. = 'filekey'
key.1 = ';w;'
key.2 = ';p;'
key.3 = ';f;'

Don't change any other lines.

So long as you use these new default keys in your .iq files, you'll not
need to include the first line defining the keys. But it is recommened
that you do use this first line anyway (these keys are definable in order
to allow IQ to be versatile - as here we are able to redefine them to work
with rebol. But this won't work with Arexx code.)

** If you want or need you can change "key. = 'filekey'" to whatever you
want "key." to equal (for rebol it might be "key. = ';filekey')

But if you do this you will have to begin ALL of your .iq files that
contain a first line defining the keys, with the new word for "filekey" or
make a second copy of IQ (modified for rebol only file).

(End set up - Now the easy doing)

Simply place the key for a file where you want to insert code into your
code. Make the filename the key points to, the file the code you want, is

I.E. on it's own line in your rebol code ";f;" will cause IQ
to output your code with whatever word and part of the file
that you search for.

For example, entering:

rx IQ -s none yourcodefilename match#? ex#?

Will output your code with the example code for matchpattern inserted.

And you can redirect this to a file, using AmigaDos redirection.

rx IQ -s none yourcodefilename match#? ex#? >yournewfilename.

BTW, the "-s" in the above line is to turn off any warning messages IQ may
also output (which you don't want in code).


Q: Is IQ safe to use?

The only way you can run into danger, is if you are sending the output of
IQ to an arexx port or redirecting it to something that executes it. And
that is only if the output contains damaging directions or commands.

The risk is no more or less than anything else you do at the command line

However, You are completely safe in just using "none" as I have above.
This simply sends IQ output to the shell window, echoed (not executed),
allowing you to see what the output is before to send it to a port or


Q: Can I find out what Arexx ports are available?

You can use the -p option to list current Arexx ports.

rx IQ -p


Comment: All this command line typing. I can just use a text editors cut
and paste and the whatever help system to do these things.

This is true, almost. For one, you are missing the ability to send IQs
output to an Arexx port or redirection. Second, IQ may be used for more
than just help and coding. For example, you can convert/create and add to,
as you want, an IQ "dictionary" of commands sequences you send to ImageFX.

Certainly if you are editing code, you'll be using an editor.

Also there are ways to shorten what you need to type on the command line.
The AmigaDos "alias" command for example can allow you to shorten

"rx IQ none" to "IQn" so that you only need to type in
"IQn word#? part#?"

Going further, a point and click GUI is being created for IQ, using
gui4cli (a user configurable/programable GUI system which is also
freeware). This will greatly help in making IQ easy to use and more.

What you need to understand about IQ is that it is versatile enough to
do thru it, what you would use several other tools for. It is thru the
right combination of functionality that this is possible.

IQ is only the beginning of a larger project (not huge though) that will
give the user more and more of the "right stuff" combination of
functionality. Eventually it will allow you to do such advanced things as
to creating and using an auto-coding environment (not yet in existance),
and much more. Especially for the non programmer end user.

IQ is a part of an open project called the Virtual Interaction

*3 S.E.A.S - Virtual Interaction Configuration (VIC) - VISION OF VISIONS!*
   *~ ~ ~      Advancing How we Perceive and Use the Tool of Computers!*
Timothy Rue      What's *DONE* in all we do?  *AI PK OI IP OP SF IQ ID KE*
Email @      >INPUT->(Processing)->OUTPUT>v
Web @  ^<--------<----9----<--------<
Search email/name @ for other puzzle parts/posts.