------------------------------------------------
		Guide for the Care and Feeding of 
			IntelliFeatures 
	On IntelliPort-II and other Computone products
			8/29/94
	-------------------------------------------------

	Table Of Contents:

Section	1	Introductory:

	1-1	What are IntelliFeatures
	1-2	Organization of files
	1-3	What's in a profile:
			IntelliPrint, IntelliView, IntelliSet
	1-5	Assigning existing profile
		
Section	2	Creating New Profiles

	2-1	Creating New Profiles
	2-2	Specifying Character sequences
	2-2	ASCII & notational conventions
	2-4	Notational chart
	2-7	Example: deriving a profile from information in
		a terminal manual (IntelliPrint)
	2-8	Example continued: IntelliView
	2-9	Things to watch out for using IntelliView
	2-11	Figuring out function keys when you don't have
		the manual.

Section 3	Summary of IntelliFeatures Keywords

	3-1	Used by installation/administration
	3-2	IntelliPrint
	3-3	IntelliView
	3-4	IntelliSet

Section 4	Troubleshooting

	4-1	IntelliPrint dysfunctional
	4-5	IntelliView dysfunctional
	4-7	My function keys don't work.
	4-7	My screen switches but I'm still on ttys00

Section 5	IntelliFeatures on other Computone products

	5-1	ALC (a somewhat old product)
	5-2	IntelliPort/ATvantage (a very old product)
	5-4	IntelliCluster (a really new product)

		*** Page 1-1 ***

	-------------------------
	What are IntelliFeatures?
	-------------------------

IntelliFeatures include all Computone-specific features which we have
added to our product beyond those supported by standard serial port
drivers. On the IntelliPort-II, these include:

IntelliView	Running Multiple screens from a single port.
IntelliPrint	Printing through the terminal's AUX port
IntelliSet	Selecting special baud rates, flow-control,
		or other options not otherwise supported by UNIX/XENIX

To implement these extensions in an orderly fashion, we allow you to
create what we call "profiles".  A profile is a collection of one or
more IntelliFeatures specifications, together with a name and a
description.  Several commonly-used profiles are supplied with your
driver, in a file called "intellicap".  Once a profile has been defined,
it can be assigned to one or more Computone ports, which will then
have the features specified in that profile.

This is somewhat analogous to the way some UNIX implementations store
terminal characteristics in the /etc/termcap file, and apply them 
to specific ports through an /etc/ttytype file.

In this way, we handle all Computone-specific extensions in an
orderly, unified way.

Many popular profiles are already defined in the intellicap
file we supply with your drivers.  You can, by running one of our
configuration programs (e.g., for SCO UNIX, mkdev fip) assign
existing profiles and use them without knowing what is in this
document.  The pages that follow explain how to create and assign
new profiles, and how to troubleshoot the results.

The body of this document assumes you are using the IntelliPort-II or
IntelliPort-IIEX product.  At the end, there is a section which
summarizes the differences between the IntelliPort-II implementation,
and that of the IntelliPort/ATvantage, ALC, and IntelliCluster.


		*** Page 1-2 ***

	---------------------
	Organization of Files
	---------------------

The IntelliPort-II IntelliFeatures (IntelliPrint, IntelliSet, and
IntelliView) are supported by three files, called
	intellitype
	intellicap
	icap.site

The UNIX 3.2/XENIX drivers store these files in the 
	/etc/default/fip.d directory, 
and the UNIX SVR4 (streams) drivers store them in
	/etc/default/ip2.d

They are roughly analogous to the /etc/ttytype and /etc/termcap
files; the intellicap and icap.site files connect a set of features
with a profile name, and the intellitype file connects specific
ports with specific profile names.

The icap.site acts like a continuation of the intellicap file: If you
want to modify an existing entry or add a new one, you may use
either file; the only difference is that if you upgrade your driver to
a newer version of the same driver,  any existing icap.site file will NOT 
be replaced.  (For this to be true, you must not remove the old drivers 
first; instead you must install the newer drivers over the old ones).

Having said that, I would STILL plan on making a backup copy of
the intellicap and/or icap.site files if I have done extensive editing.
If the IntelliPort-II drivers were inadvertently removed, those files
would be deleted.

When the system is booted, our initialization utility fip_reinit (or
ip2_reinit under SVR4) is run automatically to initialize the
drivers with IntelliFeature information.  If profile assignments are
changed using our standard maintenance utility (mkdev fip - see below),
the initialization utility is automatically rerun. 

		*** Page 1-3 ***

	--------------------------
	What's In a Profile?
	--------------------------

Each profile starts with a name, for example
	$wy60.samp:

These names are arbitrary, except we insist they start with a '$' and are
no more than 15 characters long. The colon indicates that this profile name 
introduces a new profile.

Each profile also contains a description, and a help line, for example,

	desc="Wy60 terminal in native mode (2 screens)"
	help="Use the F11 key to toggle between screens"

These are used by the mkdev fip (or ip2_sysadm, for SVR4 drivers) utility
to describe the profile and provide optional information. These utilities
also use a logins field, e.g., 

	logins = 2

to determine how many logins there should be for a port that uses that profile.
	
A profile may begin with a default to a previously-defined profile, e.g., 

$wy60.s1:
	# -- pretend a bunch of specifications are here
$wy60.samp:
	= $wy60.s1	# Start with the wy60.s1 spec
	baud=76800!	# but also lock the baud rate to 76800

Notice also that comments may appear anywhere, after a pound sign. You may
add whitespace (tabs, spaces, blank lines) more or less at will (except 
in the middle of words, or within quotes, of course) to improve clarity. So
		baud = 76800!
will do as well. You may also put multiple specs on a single line, e.g.
	baud=76800! parity=none! 

The remaining fields are specifications for IntelliView, IntelliPrint, or
IntelliSet.  A summary of the syntax and additional details are in the
file, doc.intellcap, found in the same directory as your intellicap file.

---------------------------------
IntelliPrint
---------------------------------

This causes the IntelliPort-II driver to treat an AUX port on your terminal
as a separate device.  For example, while the terminal on port 0 might
be called /dev/ttys00, the AUX port would be accessed as /dev/xlps00.
This all depends on the terminal's supporting the means to reach the
aux port through some escape sequence.  The profile tells the driver
how to switch between data intended for the screen and that intended
for the printer.

		*** Page 1-4 ***

---------------------------------
IntelliView
---------------------------------

This causes the driver to treat the port as two or more virtual
"screens".  For example, the devices /dev/ttys01, /dev/ttyT01, /dev/ttyU01
all represent different screens on port 1.  This depends on the terminal's
supporting more than one page of screen display.  The profile tells the
driver how to switch between display pages on this terminal.  It also
indicates which function keys or key sequences the user will press in
order to flip screens.

Internally, IntelliView is implemented in a fairly simple fashion.
The main screen (ttys00) starts as active.  Any keyboard input is 
sent to the process using the active screen. Output for the active 
screen is sent, while any output for an inactive screen is held 
(blocked).  

When a hot-key is detected, the driver switches to a different active 
screen by 
	(1) routing any further keystrokes to the process using 
	    the newly active screen, 
	(2) sending an appropriate screen switch sequence to the terminal, 
	(3) enabling output of data (including held data) from the process
	    on the newly-active screen, and blocking further output from the
	    process on the newly-INactive screen.


---------------------------------
IntelliSet
---------------------------------

These are used to specify physical options which are not otherwise
supported by the operating system, or to lock in existing features, preventing
their being changed.  For example, most UNIX 's do not provide explicit support
for 76800 baud, but if your profile contains the specification
	baud=76800!
Then the rate will be 76800 regardless of later attempts by UNIX or an 
application to change it.  The "!" is important.  Without it, the rate will
default to 76800, but it can be changed.  Since most programs that open
a serial port for the first time will make an attempt to set these parameters,
you will usually want to use the "!" with IntelliSet parameters.

		*** Page 1-5 ***

	---------------------------
	Assigning existing profiles
	---------------------------

If there is already an existing profile which has the characteristics you
want, you may assign it to one or more ports using the mkdev fip (or 
ip2_sysadm for SVR4) utility.  When you exit the utility (having saved
changes), the update utilities are automatically run.

The mkdev fip utility is currently divided into two sections.  The first
is responsible for assigning an IntelliFeatures profile to a port.  The
second section is used for assigning information which is used if the
port will be supporting a login session.  This includes such details as
the number of logins to be enabled (none, all, or main), the port speed
(as defined in the /etc/gettydefs file), the terminal type, and whether
the port is a "modem" or "direct" device. 

There is sometimes confusion because in both sections you seem to be 
answering the question "what kind of terminal am I using?"  In the 
first section, you are specifying a profile name, so the drivers 
will know what collection of IntelliFeatures to use.  These features 
apply regardless of how the port is used.  Some of the profiles which
are specific to certain types of terminals have a terminal name 
as part of the profile name, but it is the contents of the profile,
not the name, that really matters.

Information in the second section only applies to ports supporting
login processes (getty, ttymon). There is nothing Computone-specific
here.  We just take the information and put it in standard places 
where the UNIX/XENIX utilities can find it. You are again asked for 
something that looks like a terminal type, but this information is 
used by applications so that they will know how to do cursor addressing
and other terminal-dependent cosmetic features.  

So it is very possible that you might use a profile $dumb in the first
section, but use a terminal type wy60ak in the second section.  The
two are completely unrelated.

		*** Page 2-1 ***

	--------------------------
	Creating New Profiles
	--------------------------

To create new profiles, or to modify existing ones, you will need to use
vi or some other ascii text editor.  The standard visual editor, vi, is
available on virtually all UNIX/XENIX systems, and is documented there.

The easiest way to create a new profile is to begin with one that is
already close.  For example, suppose the intellicap file contained the
following profile:

$b76800:
	baud=76800!	# no features other than forcing the rate
	desc="Lock terminal to 76800"
	help="No other features"
	logins=1	# so there will be a login prompt

If you wanted to add a profile which would force the port to 7 bits even
parity, you might add the following to the icap.site file, using the
example I showed as a model.

$fred:
	baud=76800!	# no features other than forcing the rate
	size=7! parity=even!
	desc="Lock terminal to 76800/7E"
	help="No other features"
	logins=1	# so there will be a login prompt

Alternatively, you could have written

$fred:
	=$b76800
	desc="Lock terminal to 76800/7E"
	size=7! parity=even!

even though the original would be in the intellicap file, and this entry
would be going into the icap.site file.
I used the profile name "$fred" so it would be unlikely to conflict with any
Computone-created profile.

You cannot set a profile equal to one that hasn't been defined yet.  Since 
the intellicap file is always scanned before icap.site, the above example
would work.  But you could not do this:

$nostradamus:		# start bad example
	=$lincoln	# <---- :-(
	noflush=y!
			# ... and further down...
$lincoln:
	baud=4800	# end bad example


Once you have added the profile, you would run mkdev fip or ip2_sysadm to assign
the profile (which will now be one of your choices) to whatever port or ports
you wish.

		*** Page 2-2 ***

	----------------------------------------
	Specifying character sequences
	----------------------------------------

Many IntelliFeatures specifications involve defining character-sequences
for special terminal functions such as page selection and beginning 
transparent printing.  You must also sometimes define incoming key-sequences
which represent function keys or key-combinations.  There is a special notation
used for this, which I will describe in great detail, because it is an area
which sometimes causes problems for the novice.

The ASCII standard:

Every byte that travels between the terminal and the computer is, after all,
just a number.  Since there are at most 8 data bits used, the possible range
is from 0 - 255.  Seven-bit characters are commonly used, in which case the
possible range is 0 - 127.

A standard called "ASCII" assigns meaning to these numbers.  Values 
between 32 and 126 represent letters, numbers, and punctuation,  in other
words, printable characters.  Values 0-31 and 127 are "control" codes; 
they cause a device to take some action, like tabbing, or advancing 
a new line or new page.

The following ASCII chart gives the standard meanings for 0 through 127.

  0 nul |   1 soh |   2 stx |   3 etx |   4 eot |   5 enq |   6 ack |   7 bel 
  8 bs  |   9 ht  |  10 nl  |  11 vt  |  12 np  |  13 cr  |  14 so  |  15 si  
 16 dle |  17 dc1 |  18 dc2 |  19 dc3 |  20 dc4 |  21 nak |  22 syn |  23 etb 
 24 can |  25 em  |  26 sub |  27 esc |  28 fs  |  29 gs  |  30 rs  |  31 us  

 32 sp  |  33 !   |  34 "   |  35 #   |  36 $   |  37 %   |  38 &   |  39 '   
 40 (   |  41 )   |  42 *   |  43 +   |  44 ,   |  45 -   |  46 .   |  47 /   
 48 0   |  49 1   |  50 2   |  51 3   |  52 4   |  53 5   |  54 6   |  55 7   
 56 8   |  57 9   |  58 :   |  59 ;   |  60 <   |  61 =   |  62 >   |  63 ?   

 64 @   |  65 A   |  66 B   |  67 C   |  68 D   |  69 E   |  70 F   |  71 G   
 72 H   |  73 I   |  74 J   |  75 K   |  76 L   |  77 M   |  78 N   |  79 O   
 80 P   |  81 Q   |  82 R   |  83 S   |  84 T   |  85 U   |  86 V   |  87 W   
 88 X   |  89 Y   |  90 Z   |  91 [   |  92 \   |  93 ]   |  94 ^   |  95 _   

 96 `   |  97 a   |  98 b   |  99 c   | 100 d   | 101 e   | 102 f   | 103 g   
104 h   | 105 i   | 106 j   | 107 k   | 108 l   | 109 m   | 110 n   | 111 o   
112 p   | 113 q   | 114 r   | 115 s   | 116 t   | 117 u   | 118 v   | 119 w   
120 x   | 121 y   | 122 z   | 123 {   | 124 |   | 125 }   | 126 ~   | 127 del 

Note that I have broken the table into four sections.  On most keyboards,
holding down the <CTRL> key and pressing a key from group 3 will cause
the corresponding code from group 1 to be sent.  For example, pressing
<CTRL>S causes the value 19 (ASCII 'dc3') to be sent.  <CTRL>M sends
value 13 (carriage return).

Original ASCII did not define meanings for 128-255, but they are now 
frequently used by devices when they are in 8-bit mode; sometimes sent 
by function keys, sometimes representing non-english printable characters.

		*** Page 2-3 ***

When you enter a character-sequence into a profile, you can enter it
as either:

	A list of numerical values, separated by commas
or	A character string, surrounded by single quotes
or	A combination of the two notations.

Numerical Values:

When listing the numerical values, you may use either decimal, octal,
or hexadecimal notation.  The form of the number indicates the base:

Decimal:	Number without any leading 0
Octal (base 8):	Number with a leading 0
Hex (base 16):	Number with a leading 0x

Octal and Hex notation are frequently used in computer contexts because
they make the underlying binary representation more apparent.  In octal, 
there are three bits per "digit", so valid "digits" are 0 through 7.  After
that you go to the next place, counting in ones, eights, sixty-fours, and
so on, rather than by ones, tens, hundreds...

In hex, there are four bits per "digit", so there are 16 "digits", 0-9 and
then we kidnap the letters a-f for the remaining 6, since we did not have
the foresight or the fingers to invent enough numerals.
Individual values are separated by commas, and spaces may be added
between values.  Codes listed in your terminal manual will often be
listed in hexadecimal.

Character Strings: 

When listing characters or character strings, everything within the
quotes is significant.  Most printable characters are represented
just by typing them.  Control characters may be represented within
a character string in one of two ways:

	The ^ sign is used to represent <CTRL>.  For example, the
	character string '^M' represts a single value, 13 (decimal)
	(see the ascii chart above).  For that reason, the symbol
	^ cannot be used alone to represent itself.

	The backslash (\) followed by a three-digit number represents
	that single octal value.  The number needs to be padded to
	three octal digits, but need not begin with 0.

	A backslash followed by certain other symbols represents
	other commonly used control characters, as shown in the 
	complete chart below. Note that the sequence '\\' represents 
	a single backslash, and a '\^' represents a single caret.
	
The table on the next few pages shows all the ways that each single
numerical value can be represented.  If you don't understand the explanation
so far, study the table and try to see the pattern.

		*** Page 2-4 ***

For perspective, here is a table of all possible values in each notation.

Decimal		Octal		Hex	Character	Backslash
-----------------------------------------------------------------
0		0		0x0	'^@'		'\000'
1		01		0x1	'^A'		'\001'
2		02		0x2	'^B'		'\002'
3		03		0x3	'^C'		'\003'
4		04		0x4	'^D'		'\004'
5		05		0x5	'^E'		'\005'
6		06		0x6	'^F'		'\006'
7		07		0x7	'^G'		'\007'
8		010		0x8	'^H'		'\010' or '\b'
9		011		0x9	'^I'		'\011' or '\t'
10		012		0xa	'^J'		'\012' or '\n'
11		013		0xb	'^K'		'\013' or '\v'
12		014		0xc	'^L'		'\014' or '\f'
13		015		0xd	'^M'		'\015' or '\r'
14		016		0xe	'^N'		'\016'
15		017		0xf	'^O'		'\017'
16		020		0x10	'^P'		'\020'
17		021		0x11	'^Q'		'\021'
18		022		0x12	'^R'		'\022'
19		023		0x13	'^S'		'\023'
20		024		0x14	'^T'		'\024'
21		025		0x15	'^U'		'\025'
22		026		0x16	'^V'		'\026'
23		027		0x17	'^W'		'\027'
24		030		0x18	'^X'		'\030'
25		031		0x19	'^Y'		'\031'
26		032		0x1a	'^Z'		'\032'
27		033		0x1b	'^['		'\033' or '\E'
28		034		0x1c	  		'\034'
29		035		0x1d	'^]'		'\035'
30		036		0x1e	'^^'	  	'\036'
31		037		0x1f	  		'\037'
32		040		0x20	' '		'\040'
33		041		0x21	'!'		'\041'
34		042		0x22	   		'\042'
35		043		0x23	'#'		'\043'
36		044		0x24	'$'		'\044'
37		045		0x25	'%'		'\045'
38		046		0x26	'&'		'\046'
39		047		0x27	   		'\047'
40		050		0x28	'('		'\050'
41		051		0x29	')'		'\051'
42		052		0x2a	'*'		'\052'
43		053		0x2b	'+'		'\053'
44		054		0x2c	','		'\054'
45		055		0x2d	'-'		'\055'
46		056		0x2e	'.'		'\056'
47		057		0x2f	'/'		'\057'

		*** Page 2-5 ***

Decimal		Octal		Hex	Character	Backslash
-----------------------------------------------------------------
48		060		0x30	'0'		'\060'
49		061		0x31	'1'		'\061'
50		062		0x32	'2'		'\062'
51		063		0x33	'3'		'\063'
52		064		0x34	'4'		'\064'
53		065		0x35	'5'		'\065'
54		066		0x36	'6'		'\066'
55		067		0x37	'7'		'\067'
56		070		0x38	'8'		'\070'
57		071		0x39	'9'		'\071'
58		072		0x3a	':'		'\072'
59		073		0x3b	';'		'\073'
60		074		0x3c	'<'		'\074'
61		075		0x3d	'='		'\075'
62		076		0x3e	'>'		'\076'
63		077		0x3f	'?'		'\077'
64		0100		0x40	'@'		'\100'
65		0101		0x41	'A'		'\101'
66		0102		0x42	'B'		'\102'
67		0103		0x43	'C'		'\103'
68		0104		0x44	'D'		'\104'
69		0105		0x45	'E'		'\105'
70		0106		0x46	'F'		'\106'
71		0107		0x47	'G'		'\107'
72		0110		0x48	'H'		'\110'
73		0111		0x49	'I'		'\111'
74		0112		0x4a	'J'		'\112'
75		0113		0x4b	'K'		'\113'
76		0114		0x4c	'L'		'\114'
77		0115		0x4d	'M'		'\115'
78		0116		0x4e	'N'		'\116'
79		0117		0x4f	'O'		'\117'
80		0120		0x50	'P'		'\120'
81		0121		0x51	'Q'		'\121'
82		0122		0x52	'R'		'\122'
83		0123		0x53	'S'		'\123'
84		0124		0x54	'T'		'\124'
85		0125		0x55	'U'		'\125'
86		0126		0x56	'V'		'\126'
87		0127		0x57	'W'		'\127'
88		0130		0x58	'X'		'\130'
89		0131		0x59	'Y'		'\131'
90		0132		0x5a	'Z'		'\132'
91		0133		0x5b	'['		'\133'
92		0134		0x5c	'\\'		'\134' or '\\'
93		0135		0x5d	']'		'\135'
94		0136		0x5e	'\^'		'\136' or '\^'
95		0137		0x5f	'_'		'\137'

		*** Page 2-6 ***

Decimal		Octal		Hex	Character	Backslash
-----------------------------------------------------------------
96		0140		0x60	'`'		'\140'
97		0141		0x61	'a'		'\141'
98		0142		0x62	'b'		'\142'
99		0143		0x63	'c'		'\143'
100		0144		0x64	'd'		'\144'
101		0145		0x65	'e'		'\145'
102		0146		0x66	'f'		'\146'
103		0147		0x67	'g'		'\147'
104		0150		0x68	'h'		'\150'
105		0151		0x69	'i'		'\151'
106		0152		0x6a	'j'		'\152'
107		0153		0x6b	'k'		'\153'
108		0154		0x6c	'l'		'\154'
109		0155		0x6d	'm'		'\155'
110		0156		0x6e	'n'		'\156'
111		0157		0x6f	'o'		'\157'
112		0160		0x70	'p'		'\160'
113		0161		0x71	'q'		'\161'
114		0162		0x72	'r'		'\162'
115		0163		0x73	's'		'\163'
116		0164		0x74	't'		'\164'
117		0165		0x75	'u'		'\165'
118		0166		0x76	'v'		'\166'
119		0167		0x77	'w'		'\167'
120		0170		0x78	'x'		'\170'
121		0171		0x79	'y'		'\171'
122		0172		0x7a	'z'		'\172'
123		0173		0x7b	'{'		'\173'
124		0174		0x7c	'|'		'\174'
125		0175		0x7d	'}'		'\175'
126		0176		0x7e	'~'		'\176'
127		0177		0x7f			'\177'
128		0200		0x80			'\200'
129		0201		0x81			'\201'
... and so on for codes up to
255		0377		0xff			'\377'

-----------------
Example
-----------------

Each line below represents the SAME thing.  Study until you see why.

screen1 = 0x1b, 0x31, 0x3b, 0x30, 0x7d	# separate values (in hex)...
screen1 =   27,   49,   59,   48,  125	# ...or decimal...
screen1 = '^[', '1',  ';',  '0',  '}'	# ...or as characters
screen1 = '^[1;0}'			# smooshed together
screen1 = '\E1;0}'			# (esc) represented differently..
screen1 = '\0331;0}'			# ... and yet differently

While this flexibility may cause some confusion at first, it allows you
to define the sequences using the notation that mostly closely matches
your terminal's documentation.

		*** Page 2-7 ***

------------------------------------------------
Deriving a profile from a manual: IntelliPrint
------------------------------------------------

Suppose there were no profiles for Wy60.  I have here a WY60 manual.  Assume
I am using it in Native mode.  I want to do IntelliPrint.
Print functions are listed on page E-13, where is lists sequences for 
'Auxiliary print on/off', 'Transparent print on/off', and so on.  Either
from previous experience or by trial and error, I learn that the Auxiliary
print on/off sequences cause data to printed to the printer AND the 
screen, so it's the "transparent" ones I want.

The book says

Transparent print mode off	CTRL T
Transparent print mode on	ESC d # 
				or CTRL X (with enhance mode off)

Well, I expect enhance mode will be on, so I'll plan to use the first
of the two sequences.

So, I would enter into my profile

printoff = '^T'		# Literally what the manual said: "CTRL T" 
printon = '^[d#'	# Remembering that ASCII escape is 0x1b, a.k.a
			# 27 (decimal), a.k.a. "Control Left-Bracket"

If you look at your intellicap file, you will see that the entries we
supply look different: we say

printoff = 0x14
printon  = 0x1b, 0x64, 0x23

But these represent exactly the same thing, since 0x14 is just the numerical
value (in base 16) that is sent by an ASCII <CTRL>T.  You can use the big
table above to verify that the other values would be equivalent as well.

Also, I need to fill in the startdelay and pause options.  The startdelay
parameters specifies how many tenths of seconds must elapse between the
writing of screen data, and when print data is allowed to print.  Use
larger values to prevent print data from interfering with display data. 
Larger values will also tend to slow the printing.

The pause parameter generally determines how quickly the print can occur,
with larger values slowing the printing.  The optimum settings will depend on
your printer; select values that are just large enough to slow the printer
slightly, and then the printer will be less likely to go into flow control. 
(If the printer flow-controls the terminal, soon the terminal will flow-control
the port.)

Typical values are startdelay = 5 pause = 10.

		*** Page 2-8 ***

------------------------------------------------
Deriving a profile from a manual: IntelliView
------------------------------------------------

Turning my Wy60 manual to page E-7, I read

Display page 0	ESC w 0
Display page 1	ESC w 1
Display page 2	ESC w 2 (if economy 80-column mode is set)
Display page 3	ESC w 3 (if in WY50 mode...)

Well, I'm NOT in WY50 mode, nor am I figuring on being in econ-80 mode, so
I expect I have 2 pages I can use. So I can specify as follows:

screen1 = '^[w0'
screen2 = '^[w1'

Just like the book says.  So now the driver knows what to send to the
terminal when it wants to switch screens.  But how shall the driver know
when we want to switch?  We need to define one or more "hot key" sequences 
which will correspond to function keys or sequences of ordinary keys. 
The driver will look for any sequences we define.  If found, the driver
strips the sequence from the incoming data stream and takes the appropriate
action.  There are two types of sequences you can define.  The first tells
the driver that you want to go to a specific screen and is called goto1, 
goto2, and so on.  The second tells the driver that you want to go to the
"next" screen and so is called "nextscreen".

Suppose your applications don't use the F11 key, and you want to use that
key to toggle between your two screens.  What byte sequence is sent by the
F11 key?  Well, these are actually programmable, but their default values
are given on page B-12.  It says

[F11]	CTRL A J CR

Translated from Wyse-ese, this means "Control-A, Jay, Return", or

nextscreen='^AJ^M'	# since ^M is an ascii CR

or you might have said,

nextscreen=1,'J','\r'

If you would want shift F8 to switch you to screen 1, and shift F9
to switch you to screen 2, you would specify (looking at page B-12),

goto1 = '^Ag^M' goto2 = '^Ah^M'

If a 'nextscreen' is given, the 'goto's are not required. Often, your
applications already make use of almost every function key combination,
so it is often desirable to use only the nextscreen key to reduce the
number of keys we tie up.

		*** Page 2-9 ***

------------------------------------------------
Things to watch out for using IntelliView
------------------------------------------------

(1)	Don't use a function key that your application needs.

	If you do, the driver will detect the function key first
	and perform the screen-switch, instead of passing the
	sequence up to the application.

	If you need to temporarily disable IntelliView hot-key
	scanning, you may use our utility fip_hot (or ip2_hot for
	the SVR4 drivers).  

(2)	Don't use part of a function key that your application needs.

	Suppose you had run out of Function keys and decided you wanted
	to use, say, a single control key as the nextscreen.  Suppose also
	that an overview of your applications reveals that NONE of them
	ever asks the user to hit <CTRL>A for anything.  So you say

nextscreen = '^A'	# ???????????????????

	Then you learn, to your alarm, that none of your function keys 
	work in your applications!  Why? Because the function keys all
	start with '^A'.  When the driver sees the ^A, it strips it out
	of the stream and flips screens.  Then the remaining characters
	are sent to the process on the other screen...

(3)	Beware of applications which re-program the function keys.
	Some terminals allow their special keys to be reprogrammed 
	automatically from the host.  If this happens, your function
	keys will no be sending the expected sequences, and so they
	will not be detected by the IntelliView hot-key scan.  If 
	your application "sees" a function key that you had specified
	as an IntelliView screen switch key, either you specified the
	incorrect sequence for that key, or the application has
	re-programmed it.
	
(4)	Beware of applications which put the terminal into PC scancode mode.
	This is a special case of #3 above.  When a terminal is in scancode
	mode, NONE of the keys send their normal ASCII values,  a fortiori
	the function keys.  This dilemma is well documented and not
	specific to our implementation.  For example, several SCO applications
	which would otherwise use a terminal in scancode mode are
	designed to NOT do so if the port is using "mscreens" (SCO's 
	multi-screen-on-serial-ports feature).  This is also done because
	most terminals will not "remember" if one screen was in scancode
	mode and the other was not.  Switching screens does not also
	switch modes.

		*** Page 2-10 ***

(5)	Do Specify a timeout value if your application might use
	a key that is the start of your hot key sequence.  

	Suppose you have chosen F11 as the "nextscreen" key.  It sends
	^AJ^M, really fast.  Now what if you had an application that
	used ^A (i.e., <CTRL>A, typed alone on the keyboard) to mean
	something.  Ordinarily, as soon as the driver saw the ^A, he
	would say, "Well, I'd better hang on to this character and
	see what's next, because it might be the beginning of a hot-key
	sequence.  Well, if the next character turns out to be, say,
	'W', he says, "No luck, I'll just pass on the ^A now as well as
	the W", and he waits for the next possible sequence.  

	If you were to type a plain ^A from the keyboard, you might expect
	something should happen right then.  The trick is to specify
	how long the driver should wait for a sequence to become complete
	before giving up on it.  To wait for a maximum of 1/10 second, 
	specify

	timeout = 1

	Sometimes, you DO want to wait a long time: for example, if you
	have used up all your function keys and decide you want to
	use a special combination of regular keys.  For example, perhaps
	you want to "hold down CTRL, hit B, release CTRL, hit 1" to 
	toggle between screens.  Then you want to say

	nextscreen='^B1'
	
	But unless you can type very quickly, you might want to say

	timeout = 20

	Which gives you up to 2 seconds to complete the sequence before 
	the driver mindlessly passes on the ^B out of frustration...

(6)	Don't use IntelliView if you are connected to a terminal
	emulator that will be uploading files or using binary
	file transfer protocols.  Or if you do, be sure to disable
	hot-key scanning using fip_hot or similar, before you 
	begin file transfers.  After all, that binary file you are
	transferring is very apt to contain a sequence that matches one
	or more of your profile's screen-switch sequences. And you don't
	want it flipping back and forth while you're trying to get something
	done.

		*** Page 2-11 ***

--------------------------------------------------------------
What if you just want to change the function key selection
and you don't have a manual
--------------------------------------------------------------


The problem is, you have to find out exactly what gets sent when such-and-such
a key is hit on the terminal, so you can enter the value into your profile.

XENIX and most of the UNIXes we support, have a command called hd.  This is
normally used for examining the contents of files.  If you do not have it,
you may also try the command od -x .  You can use such a command to determine
what your terminal is sending.

(1)	Assign your terminal to an IntelliFeatures profile that
	does not use Intelliview.  Then we will not interfere
	with the incoming data stream.

(2)	Turn off any incoming mapchan options. (If you're using them,
	you'll know it, and you'll know how to turn them off).

(3)	Log your terminal in as root, or whatever it takes to
	be at a non-visual shell (Bourne, preferably).

(4)	After completely logging in and you are at the #, type

		stty -icrnl <CTRL>J

	This removes the CR -> LF conversion which normally occurs on input,
	allowing hd to report the correct characters. For the time being,
	you will need to hit <CTRL>J instead of Enter or Return at the
	end of each command.

(5)	Now type
		hd <CTRL>J
	The screen will move to the next line, but you do not get your prompt
	back.  hd is waiting for you to type data.

	As an experiment, hit 
		a b c <CTRL>J <CTRL>D

	The abc will echo, and when you hit <CTRL>D, you will see the
	following display (or similar):

	0000	61 62 63 0a	abc.

		*** Page 2-12 ***

	The 61 62 63 0a are the numerical values, in hex (base 16), of the
	keys a, b, c, and <CTRL>J.  Now that you see how to interpret what
	you can expect, you can try something more interesting.  Hit

		a b c [MYSTERY KEY] a b c <CTRL>J <CTRL>D

	In this case, suppose it returns

		61 62 63 1b 5b 31 37 7e 61 62 63 0a

	Well, we know that the abc keys at the beginning and the end
	are represented by 61 62 63 and 61 62 63 0a.  So strip them out
	and what you get is
		1b 5b 31 37 7e
	which is what the mystery key must have sent.
	When you edit your profile, you would translate that to, say,

	nextscreen=0x1b, 0c5b, 0x31, 0x37, 0x7e

(6)	When your investigations are complete, type 

		<CTRL>J <CTRL>D <CTRL>D

	to flush out the last buffer.

(7)	Finally, restore normal operation by typing

	stty icrnl <CTRL>J

	This method will generally cough up the sequences used by most
	terminals.  An exception would be in case the terminal used a
	special "signal" character as part of its sequence.  For example,
	if the key sent a <CTRL>D, it would have been stripped (notice
	you didn't see any of them?)  Other examples might include <CTRL>C
	or the DEL key, frequently used as "Interrupt" keys in canonical
	mode.  Because such characters often have such special significance,
	they are seldom used as part of function-key sequences.

INTERESTING FACT:

	Using this method, I learned something that is not easy to find from
	the WYSE-60 manual.  Namely, I learned what the <CTRL>F1, <CTRL>F2
	keys send when the terminal is in native mode.  It the terminal is
	configured for 8-bit characters, the function keys send the codes
	0x80, 0x81, 0x82, and so on.  Supposing you wanted to use <CTRL>F12
	as the nextscreen, then you would code it as

	nextscreen = '\213'	#<CTRL>F12
		or
	nextscreen = 0x8b

	Depending on the terminal, using hd to determine key-sequences is
	often faster then trying to decipher the manual.

		*** Page 3-1 ***

-------------------------------------------------------
Summary of IntelliFeatures Keywords and their meanings.
-------------------------------------------------------

Several of the IntelliFeatures keywords have synonyms.  Some are listed
here; a more complete list is in doc.intellicap.

A common synonym is that any keyword which expects a true/false answer
can take 'true', 'yes' as synonyms of 'y', or 'false', 'no', as synonyms
of 'n'.  

Values shown with '!' indicate that the parameter is to be "locked in".
Otherwise, without the '!', it is set as a default only.
	

-------------------------
USED BY INSTALLATION MENU:
-------------------------

desc.        = (Profile Description) 
               quoted string up to 56 characters

help         = (Profile Help-Notes) 
               quoted string up to 126 characters

logins       = (Number of logins to create) 
               Numeric value from 0 to 8
			Profiles intended for printers and such will
			have logins=0 or the parameter will be omitted.

		*** Page 3-2 ***

------------------------
INTELLIPRINT PARAMETERS:
------------------------

startdelay   = (Delay N/10 seconds before printing) 
               Numeric value from 1 to 100
			For example, when the driver sees data 
			being sent to /dev/ttys05 (i.e., to display)
			it will wait this long before it sends data to 
			/dev/xlps05 (to the aux port, to print).
			The purpose is to prevent data for the printer
			from interrupting an multi-charcter control
			sequence sent to the display.

pause        = (Delay N/10 seconds between print requests) 
               Numeric value from 1 to 50
			When the driver sees data being sent to
			/dev/xpls05 (the printer on the AUX port),
			it will wait this long before sending any more
			data to the same place.  The purpose is to
			slow down the sending of data for printing, to
			prevent the terminal from going into flow control.

	**bug:	in the UNIX drivers 1.3.2 (non-streams) there is a bug
		in which the value you specify for startdelay is used
		also for the pause value, and the pause value you specify
		is ignored.  (saying startdelay=4 pause=2 would be taken
		to mean startdelay=4 pause=4).  This will be fixes in future
		versions of the driver.  The SVR4 drivers work properly.
			

printon      = (Sequence to start transparent print) 
               sequence of up to 15 characters
			When sent, the terminal should re-direct all
			further output to its AUX port.  Many terminals
			describe this as a "transparent" or "pass-through"
			print feature.

printoff     = (Sequence to end transparent print) 
               sequence of up to 15 characters
			When sent, the terminal stops re-directing output
			to the AUX port, and resumes display.


paddcr       = (Printer to map NL->CRNL?) 
		y / n
			If set to y, driver will add cr before nl on data
			going to the AUX port.

ptab         = (Printer to expand tabs?) 
		y / n
			If set to n, driver will expand tab on data
			going to the AUX port.

		*** Page 3-3 ***

----------------------
INTELLIVIEW PARAMETERS:
----------------------

nextscreen   = (Incoming hot-key sequence to select 'next' screen) 
               sequence of up to 7 characters
			When the driver sees this sequence coming in,
			it switches to the next IntelliView screen. 

goto1        = (Incoming hot-key sequence to select screen 1) 
               sequence of up to 7 characters
			When the driver sees this sequence coming in
			from the keyboard, it will switch to the
			first IntelliView screen.
goto2...goto7	
		sequence of up to 7 characters
			Causes driver to switch to screen 2...7

screen1      = (Sequence to select screen 1) 
               sequence of up to 15 characters
			(Some earlier driver versions allowed fewer).
			The driver will send this to the terminal when
			it wants to switch to screen 1.  Screen 1 on
			port 0 would be called /dev/ttys00.
			
screen2 ... screen 7
               sequence of up to 15 characters
			What the driver must send to switch to screens
			2, 3, 4, ...7 (assuming that the terminal has
			that many pages of screen memory).

[Note that hot-key scanning is only enabled when (1) an IntelliView
 profile with IntelliView is assigned, and (2) at least two virtual
 devices on the same port are open.  For example, if there were logins
 enabled on /dev/ttys00 and /dev/ttyT00, both devices would be open.  If
 only /dev/ttys00 were enabled and none of /dev/ttyT00 (and so on) were
 open, hot-key scanning would be disabled.  Scanning can be temporarily
 disabled using the fip_hot (ip2_hot for SVR4) utility.]

timeout      = (Time-out value for key sequences) 
               Numeric value from 0 to 255
			If the hot-key sequence is not complete within
			this many tenth's of seconds, abort the scan
			and send along the incomplete sequence.
			
			0 = don't time out, wait forever.

		*** Page 3-4 ***

---------------------
INTELLISET PARAMETERS:
---------------------

baud         = (Transmit/Receive Baud Rate) 
               One of the following keywords:
    50! 75! 110! 134! 134.5! 150! 200! 300! 600! 1200! 1800! 2000! 2400! 
    3600! 4800! 7200! 9600! 19200! 38400! 56000! 57600! 64000! 76800! 
    115200! custom1! custom2! 
		If custom1! or custom2! are chosen, the rates specified
		by custom1= and custom2= (see below) are used.

inbaud       = (Receive Baud Rate) 
               One of the following keywords:
    50! 75! 110! 134! 134.5! 150! 200! 300! 600! 1200! 1800! 2000! 2400! 
    3600! 4800! 7200! 9600! 19200! 38400! 56000! 57600! 64000! 76800! 
    115200! custom1! custom2! 
		Using inbaud and outbaud allows you to transmit at
		different rates.

outbaud      = (Transmit Baud Rate) 
               One of the following keywords:
    50! 75! 110! 134! 134.5! 150! 200! 300! 600! 1200! 1800! 2000! 2400! 
    3600! 4800! 7200! 9600! 19200! 38400! 56000! 57600! 64000! 76800! 
    115200! custom1! custom2! 

stop         = (Stop Bits) 
               One of the following keywords:
    1! 1.5! 2! 

parity       = (Parity) 
               One of the following keywords:
    none! mark! space! odd! even! 
		"mark" parity sets the parity bit to 1 unconditionally,
		"space" parity to a 0.  with "none", no parity bit is sent.

size         = (Character Size) 
               One of the following keywords:
    5! 6! 7! 8! 

inflow       = (Input flow control) 
               One or more of the following keywords:
    		none!	No action. Does NOT prevent flow control. It's
			the same as not using "inflow"
		xon!	Send an xoff when buffers are nearly full, 
			send an xon when they are nearly empty again.
		dtr!	Raise DTR when input buffers are available
			(lower when nearly full)
		rts!	Raise RTS when input buffers are available
			(lower when nearly full)

		When multiple keywords are combined, all actions are
		taken.

		*** Page 3-5 ***

outflow      = (Output flow control) 
               One or more of the following keywords:
		none!	No action Does NOT prevent flow control.
		xon!	Stop transmitting when xoff is received, resume
			when an xon is received. (like UNIX ixon -ixany)
		xany!	Stop transmitting when xoff is received, resume
			when any character is received (like UNIX ixany)
		cts!	Don't send unless cts is asserted.
		dcd!	Don't send unless dcd is asserted.
		dsr!	Don't send unless dsr is asserted.

		If multiple keywords are combined, transmission will not
		take place unless all conditions are ripe.  On IntelliPort-II
		Expandable with DB25, DSR comes in on pin 11.  Otherwise, DSR
		shadows the DCD signal.

local        = (Ignore DCD change?) 
		y! / n!
			Setting to y! is equivalent to forcing UNIX CLOCAL
			flag set. Setting to n! has no effect.

hduplex      = (Half-Duplex) 
		y! / n!
			Setting to y! causes RTS to be asserted whenever there
			is data in the UART's transmit buffers. n! has no
			effect.

dsrreq       = (Need DSR for Receive?) 
		y! / n!
			Setting to y! causes incoming data to be ignored
			unless DSR is asserted. n! has no effect.

ixon         = (Custom incoming xon) 
               Numeric value from 0 to 255
			Value scanned for, to turn enable transmission, if
			we are using xon/xoff output flow control.

ixoff        = (Custom incoming xoff) 
               Numeric value from 0 to 255
			Value scanned for, to turn disable transmission.

oxon         = (Custom outgoing xon) 
               Numeric value from 0 to 255
			If we are using xon/xoff input flow control, what
			character do we send to disable the sender from 
			transmitting...

oxoff        = (Custom outgoing xoff) 
               Numeric value from 0 to 255
			...And what character to re-enable him?
				
onlcr        = (Map NL->CRNL?) 
		y! /n!
			Like forcing OPOST and ONLCR: Outgoing newlines
			mapped to CR-NL pairs. Popular with printers.

		*** Page 3-6 ***

tab          = (Expand tabs?) 
		y! / n!
			Like forcing OPOST and TAB3: Outgoing tabs
			expanded to spaces.

noflush      = (Inhibit flush on close?) 
		y! / n!
			Normally, XENIX/UNIX 3.2 will cause output to be 
			flushed when the port is closed.  If set to y!,
			such data will not be flushed.  Most profiles
			intended for printers have this set.  This allows
			you to perform commands such as
				cat myfile >/dev/ttyi00
			without being concerned about loss of data.  Otherwise,
			when cat terminates, any data that has not yet been
			sent to the printer could be lost.
			
			This has no effect on SVR4 drivers, which normally
			do not flush output data when the port is closed.

osproc       = (Always use o/s line disciplines?) 
		y! / n!
			Normally, the drivers will ask the board to perform
			any output post-processing. If set to y!, the drivers
			will allow all such processing to be done using the
			OS's line discipline. While generally it requires
			more Host CPU if it were to do the processing, this
			may depend on your application and system, so you
			are given the flexibility to optimize.

custom1      = (Custom Baud Rate 1) 
               Numeric value from 48 to 115200
			(Some versions may allow higher rates than 115200)

custom2      = (Custom Baud Rate 2) 
               Numeric value from 48 to 115200
			(Some versions may allow higher rates than 115200)

		For example, if you needed to connect to a bizarre device
		running at exactly 30,000 baud, you would need to specify
		in your profile:
			custom1=30000
			baud=custom1
		There are two custom rates per port, in case you need to
		use a different rate for transmit and receive.

		*** Page 4-1 ***

----------------------------------------------------------------------
Troubleshooting Tip:

I have a Wyse 60 on port 4 of an IntelliPort-II, with a serial printer
attached.  My IntelliPrint doesn't work.
----------------------------------------------------------------------

	(1)	Narrow it down:
		Either you are (a) getting no printed output, (b) getting
		garbled printed output or (c) output to the screen that
		should be going to the printer, or vice-versa.

		Either this is (a) a persistent problem, or (b) an
		intermittant one.  

	(2)	Make sure the terminal itself works:
		In order to print properly to the AUX port, the terminal
		device (/dev/ttys04) needs to be enabled.  Otherwise,
		the line-speed, character size, and other parameters are
		not guaranteed to be initialized.

		Make sure you are getting a login on your terminal, and
		that you can log in, and run pretty much as expected, before
		you concentrate on the printer.	
	
		If you are not getting a login, make sure the port is enabled,
		and make sure the terminal is cabled properly.  Consult
		the product-specific manuals for more information about this
		area.

	(3)	Simplify:
		Assuming your terminal is on /dev/ttys04, your printer
		device is /dev/xlps04.  Rule out everything concerned with
		your application setup or print-spooler administration, by
		simply trying to echo something to the printer, e.g.
		(log in as root, and from the # sign type:)
			date > /dev/xlps04
		(or something similar) If the date appears on the terminal
		instead of the printer, there is a problem with the
		IntelliPrint configuration vs. your terminal.  If the date
		appears on the printer, good.  If the date appears nowhere,
		the terminal-printer link is suspect.

	(4)	Rechecking the terminal-printer link:
		Many terminals can do local screen-dumps to the AUX port.
		For example, on the Wyse 60 you would hit the "print" or
		"print screen" key.  If local screen dumps work correctly,
		the cabling is probably mostly ok.  If not, you have some
		work to do.

		*** Page 4-2 ***

		You will need to consult the manuals for the terminal and
		printer, and compare the terminal's AUX port pinout with
		the printer's serial port pinout. (Assuming your terminal
		as a serial AUX port.  Some support parallel ports, in
		which case your printer would be a parallel printer, and
		setup is much easier, so we will ignore that case).

		Make sure you have signal ground connected, and that the
		pin for transmitting FROM the AUX port is connected to the
		pin for receiving incoming data on the printer.  If you
		are using XON/XOFF flow control, make sure that data 
		FROM the printer is also wired to incoming data on the
		AUX port.  If you are using "hardware" flow control,
		one of the printer's data set signals, often DTR but
		sometimes a different pin, must be wired to whatever pin
		on the AUX port is used for flow control (usually CTS).
		Furthermore, if the printer's documentation says that
		any other signals on the printer side must be supplied,
		you must do the appropriate thing.

		Double check the printer's configuration as well as the
		AUX port's.  Make sure that the baud rates, character size,
		parity, and flow-control options match.  For example, if the
		printer were configured for DTR flow control, and the cable
		connected the printer's DTR to the AUX port's CTS, you would
		want the AUX port to be configured for CTS flow control.

	(5)	Rechecking the IntelliPrint plumbing.
		Make sure you have selected a profile that supports
		IntelliPrint.  Make sure the printon and printoff 
		sequences are appropriate for your terminal.  

		If you attempt to use, say, /dev/xlps04, and the
		IntelliFeatures profile assigned to that port does not
		support IntelliPrint, the drivers will fail the "open"
		system call with an error (ENODEV).  If you are trying
		to redirect the date to that port as in the above example,
		the command will fail with a message similar to "cannot
		create".

		If the profile contains printon and printoff definitions
		that are incorrect for your terminal, then the "print"
		data may appear on the terminal screen instead of being 
		sent to the printer.

		*** Page 4-3 ***

		To verify that the printon and printoff strings are
		being sent properly by the driver, you can use the
		following trick:  By editing the intellicap file, change
		the sequences to ordinary printable messages, like

		printon = 'SP:\r\n'  printoff = 'EP:\r\n'

		After running mkdev fip to assign the modified profile
		to the port, and redirect the date again.  On the terminal
		screen, you should see something like 

		SP:
		Tue Aug  2 11:02:50 EDT 1994
		EP:

		This shows the our driver is sending what you are telling
		him to.	


	(6)	Rechecking flow control:
		If short things seem to print fine but you seem to lose
		data when printing longer things, it is a sign that
		the flow control is not configured properly.  There are 
		actually two links to consider: between the printer and the
		AUX port, and between the terminal and the IntelliPort-II.

		If, when data is lost, "print" data never appears on the
		terminal screen, it suggests that the problem is between
		the AUX port and the printer.  Recheck the configuration.

		If print data sometimes appears on the screen, then the
		flow control problem is probably between the IntelliPort-II
		and the terminal.  

		Frequently, ports are configured to use IXANY protocol, 
		which means that when transmission has been stopped because
		of an incoming xoff (a.k.a. ctrl-S) then ANY key will cause
		transmission to resume.  That is a good option if you aren't
		really in flow control but want to use the ctrl-S key to
		pause output.  If you are really in flow control, you don't
		want the operator's typing ahead to cause output to resume,
		and with IXANY set, that will happen. 

		On XENIX and UNIX 3.2 systems, you can eliminate the problem
		by replacing IXANY with IXON in the /etc/gettydefs file,
		for the entries you are using on such ports.  Or copy an
		existing entry and change its name to make a new one.

		*** Page 4-4 ***

		There are also some applications which will turn xon/xoff
		flow control on and off as they are running.  If you are
		trying to use xon/xoff flow control on the terminal, and
		are trying to print while using one of these applications,
		you are apt to lose data.  To validate whether this may
		be happening, log on to the console as root, and while
		the application is running on the terminal (say ttys04)
		type

		stty -a </dev/ttys04

		Observe whether the ixon and ixany flags are on or off.
		If they are off, there will be a '-' next to them.  If
		'-ixon' appears, then 'ixany' is ignored.  Don't worry
		about the flag called "ixoff".  It's for the other direction
		and is usually turned off when terminals are involved. So
		-ixon ixany 
	or	-ixon -ixany
			means you have xon/xoff flow control turned off.
		ixon ixany
			means xon/xoff flow control is on, but keystrokes
			will re-enable output.

		If your application turns flow control on & off, the 
		most successful fix is usually to set up the terminal for
		hardware flow control (usually CTSFLOW) using an IntelliSet
		option in the profile.
		
		Another way to validate whether the flow control between
		the IntelliPort-II and the terminal is ok, is to configure
		the terminal for smooth scrolling, and see whether the
		terminal (which is now going to be really slow) loses data
		when you try to display to it.

	(7)	Many terminals can be set up in "monitor mode".  In this mode,
		they do not perform any special commands received from the
		host.  Instead, all control characters and escape sequences
		are printed as special symbols and sequences of symbols.
		Most Wyse terminals have this feature.  It is useful in
		determining exactly what data is being sent to the terminal.

		For example, in monitor mode sending a carriage-return 
		newline combination does NOT cause the output to go to
		the beginning of the next line; instead it causes a
		couple characters to be displayed, usually  little
		(cr) and (lf) symbols.

		*** Page 4-5 ***

----------------------------------------------------------------------
Troubleshooting Tip:
I am trying to use IntelliView and the alternate screens don't work.
----------------------------------------------------------------------

	(1)	Make sure that all screens are enabled for login.
		That is, when running mkdev fip (or ip2_sysadm) make
		sure that on the second page you say logins enabled = ALL.
		If you enable only the main screen, hot-key scanning is
		disabled, and you will have only the main screen.

	(2)	Make sure that the profile you assigned supports
		IntelliView.

	(3)	Simplify:
		Log onto the port as root.  Suppose it's port 3.  Then
		at the '#' you would type 'tty'.  The system should
		report that you are on /dev/ttys03 (or a similar name).

		Hit a hot key that should change your screen.

		If you see another login, that's a good sign.  Log in as
		root here, and type 'tty' when you have reached the '#"
		prompt.  If the system reports /dev/ttyT03 or similar,
		the drivers seem to be recognizing the hot-key.

		If you didn't see a login, hit return.  If you see
		a login then, log in.  When you get a '#' prompt,
		try typing 'tty' again, and see whether the tty
		designation changes.  If it does, it looks like the
		hot keys are being recognizes.

	(4)	Check out IntelliFeature plumbing:
		If the hot keys are not being recognized, either the
		wrong profile is used, or your terminal is not sending
		the codes you think it is.  A good test is to replace
		the nextscreen sequence with something like

		nextscreen = '$$$'	# this is a test
		timeout = 20		

		and the screen selection sequences with

		screen1='To1:\r\n'
		screen2='To2:\r\n'

		Run mkdev fip (or ip2_sysadm) to assign this test profile
		to your port.  After logging in, try to type a '$'.  If hot
		key scanning is enabled, it will not be echoed immediately
		and if you hit $$$ within 2 seconds, the test screen-switch
		sequence (To1: carriage return, newline) should appear on
		your screen.  If this happens, it indicates that we are
		scanning and sending as specified, but that the particular
		codes may be inappropriate for your terminal.

		*** Page 4-6 ***

	(5)	As with IntelliPrint, if your terminal supports monitor
		mode it may prove useful in verifying what sequences are
		received by the terminal.

	(6)	Once the drivers are correctly recognising the hot-keys,
		you will be able to log into the main virtual screen,
		type 'tty', and it will report (say) /dev/ttys05.  Then
		you can hit a hot key, log into the second virtual screen,
		type 'tty', and it will report (say) /dev/ttyT05.  

	(7)	The next step is to see whether the screens are flipping
		properly.  If you are still using test strings as described
		in (4), instead of flipping screens, the messages
		"To1:<cr><lf>" and "To2:<cr><lf>" will be sent instead of
		the terminal-specific page-selection commands.  Suppose
		now that you have entered the correct codes.  Then, if
		you log into the first screen and display a directory listing,
		then flip to the second screen and display a different
		listing, you should be able to flip back to the first
		screen and see the original listing. 

	(8)	If screens are not flipping properly, either
		(a)	The wrong screen1= , screen2= sequences were
			entered for your terminal.  Re-check the terminal's
			documentation.
		(b)	You are running the terminal in a mode which does
			not support multiple screens.  For example, a
			WY60 running in native mode using ECON-80, supports
			three pages.  Running in reqgular 80-column mode,
			it only supports two pages, and in 132-column mode
			only a single page.
		
	(9)	Sometimes UNIX/XENIX is configured to send a "terminal
		initialization string" to the terminal at login time.
		Under UNIX3.2, this is controlled by options to the
		tset command generally included in the user's .profile
		file, as well as the choice of termcap/terminfo entry
		chosen.  Often, this initialization string contains
		a command to clear all pages of terminal memory.  If 
		that is the case, you can be running an application on
		the main screen, flip to an alternate, log in, flip
		back to the main screen, and whoomp! there it ain't.

		The fix is either to add the -I option to the tset
		command in the .profile, or to remove the offending
		initialization code from the termcap/terminfo description.
		(Consult UNIX/XENIX manpages for details how to do the latter).

		*** Page 4-7 ***

----------------------------------------------------------------------
Troubleshooting Tip:
My function keys don't work in my application.
----------------------------------------------------------------------

	The first thing to eliminate is a conflict between IntelliView
	function keys and the requirements of your application.  This
	is easy to rule out.  Simply use mkdev fip to select a profile
	(e.g., $dumb) which does not support IntelliView, or make sure
	that only the main screen is enabled.  

	If the function key problem disappears, then you will need to
	create a different IntelliView profile which uses different
	function keys or control sequences.

	If the problem persists, it is most commonly a problem in the
	configuration of the application, or in the assignment of the
	TERM environment variable.  The latter is usually done though
	the /etc/ttytype file, and often some trial and error is required.

	To further rule out a Computone problem in this case, attempt
	to configure your application on the built-in serial port.  If
	it fails there, you have a problem that is not specific to
	Computone: consult the application/os supplier.  If it works,
	try to eliminate any obvious differences in configuration, and
	try each again.

	Unfortunately, simply trying things out on the system console
	is not good proof that things are configured correctly, because
	generally the system console is a built-in ANSI device, and
	the serial terminals may be of various types with wildly
	different protocols.

----------------------------------------------------------------------
Troubleshooting Tip:
My screen switches the page but my application thinks I am still on
the first page.
----------------------------------------------------------------------

	On the WYSE-60, for example, hitting <CTRL>PAGE-UP causes
	the terminal to internally flip to an alternate display
	page, without sending any codes.  This is completely a
	local function (since nothing is sent to the host) and
	there is nothing for it but to not use such key sequences.

	Applications that otherwise would use such a key pattern
	will have to do without.  This is a generic issue which
	will appear on standard COM ports as well. 

		*** Page 5-1 ***

--------------------------------------
IntelliFeatures on Older products: ALC
--------------------------------------

The IntelliFeatures on the ALC are basically parallel to those of 
the IntelliPort-II.  There are some differences:

1)	Files are kept in /etc/default/alc.d 

2)	The screen1, screen2, ... sequences are limited to 7 characters.

3)	The DSR signal is not supported.

4)	Custom baud rates and rates beyond 38400 are not supported.

5)	ALC drivers for SVR4 do not support IntelliFeatures

		*** Page 5-2 ***

--------------------------------------------------------
IntelliFeatures on Older products: IntelliPort/ATvantage
--------------------------------------------------------

The IntelliFeatures on IntelliPort/ATvantage products are more
restrictive, but are similar in format.

1)	Instead of an intellicap file, there is /etc/ic_master.  Instead
	if an intellitype file, there is /etc/ic_control.  The utility
	ic_install creates /etc/ic_control by copying the actual specifications
	(rather than just the profile names) from ic_master.

2)	ic_install does not "clean up" the way "mkdev fip" does on
	IntelliPort-II.  You need to run '/etc/ic_init -please' or reboot
	the system for new profile assignments to take effect.

3)	ic_install uses a shadow data base.  Edited changes to /etc/ic_control,
	/etc/ttys, /etc/inittab, and /etc/ttytype (e.g., made using vi)
	will be lost the next time ic_install is run.  The IntelliPort-II
	utilities (mkdev fip or ip2_sysadm) do not share this limitation.

4)	Profiles in ic_master contain an optional default ttytype entry. 
	Whenever a profile is changed, that default is applied.  So if
	you have been using a specific ttytype entry (say, wy60ak) and
	change the profile to, say, "Generic Terminal, no features", the
	ttytype entry will be defaulted to "dumb", and you must 
	remember to change it back.  (In all later products these
	two parameters were isolated to avoid this confusion).
	
5)	IntelliPort/ATvantage supports a maximum of two screens per port.

6)	The goto1 and goto2 sequences are a maximum of 4 bytes long, and
	they must begin with a character in the range 0x00 - 0x1f.  This
	makes it impossible to use ctrl-F1 on a Wyse 60 as a hot-key, 
	because that key sends an 0x80, out of the range.

7)	There is no nextscreen key on IntelliPort/ATvantage.

8)	IntelliPort/ATV supported also an IntelliKey feature, which is
	seldom used and never required.  It was removed from IntelliPort-II.
	The most common question is, "How do I turn it off? None of my
	function keys work."  Well, look at the file and see which profiles
	have them defined.  For example, you probably do not want the one
	that says "WY60 all features" if you want any of your function keys
	to work in a standard way.  A better choice would be "WY60 - no
	IntelliKey" (which implies that it does have IntelliView and
	IntelliPrint).

9)	IntelliSet options were more primitive and were called 
	"device:" or "communication:" options.  There was also a
	"buffer: receive%= NN" option, which was needed because those
	boards had much less RAM than the IntelliPort-II series.  If
	any of those options were used, the other IntelliFeatures were
	disabled.  

		*** Page 5-3 ***

	This is a common error: a uses starts with a profile that
	already has a buffer statement, then tries to add an additional
	feature like IntelliPrint. It is not obvious why IntelliPrint would
	not work, and no error message is given.  The statement is just
	ignored.  Removing the buffers statement cures the problem.

10)	The initialization program is called ic_init instead of 
	fip_reinit.  It does not run automatically after ic_install,
	and, unlike fip_reinit, ic_init should not be run when ports
	are actively being used.  It causes a major reset of the board
	and any data buffered there will be lost.  

While the syntax of the files is not exactly identical, it is possible
to create new profiles in /etc/ic_master much as you would with IntelliPort-II.
Since IntelliPort/ATvantage products are discontinued, further additions
to ic_master will not be forthcoming.  However, you may use the information
in IntelliPort-II intellicap files to add additional profiles to your
own copy of ic_master, subject to the limitations above.

---------
IMPORTANT
---------

If you are upgrading from an existing IntelliPort/ATvantage
to an IntelliPort-II, it is a good idea to make a spare copy of your
ic_master and ic_control files before you switch over, in case a
particular customization had been done for that customer in the misty
past.  While you can't simply copy the files, the information they
contain will help you sort out any problems to have during the
switchover.  (While you are at it, a spare copy of /etc/ttytype and
/etc/ttys or /etc/inittab wouldn't hurt.  Since the device names are
different between IntelliPort/ATvantage and IntlliPort-II, the 
older configurations are not "inherited", so you need to know how
the ports are supposed to be set up.) 

		*** Page 5-4 ***

--------------------------------------------------------
IntelliFeatures on another New Product: IntelliCluster
--------------------------------------------------------

Features under IntelliCluster work essentially the same as
they do under IntelliPort-II, except for the following differences.

1)	The intellicap, intellitype, and other Computone-related
	files are stored in the directory:

	/usr/lib/intelliCluster

2)	The maintenance utility is called 

	icct_sysadm

	instead of "mkdev fip" or ip2_sysadm.  There are a number of
	cosmetic improvements over the IntelliPort-II style, but the
	basic actions are presently identical so far as IntelliFeatures
	are concerned.

3)	The initialization program is called icct_reinit, and like
	IntelliPort-II, it is run automatically after icct_sysadm.