ISO8859-1.#h+#r#+$6G$b@$$$C%`%Tg%$&$&B;&g&&T&H'%'n#0' 'T'L(*/(wG(@( Y)0 B) ) 8) V**j******+ + +8+P+n++++++ ,!,,",D#,X$,r$,,+,",5--E%-b )- - 0- - -!..05.E.{*0_018'1@662<6R5636 6 7 )7/ &7Y 7 7#7&7 77#7"88:8X38m 88888949(%9]$9 &9!@9"%:#8:6$,:o%&:&(:'":(";U;2s;s;">>>>? ? ?2 -?R ? ?#?5??@@2@O@n@'@3@@AA  ~A(A4Ci8C7C0D4D@ 8Du 7D 0D 7E?EO6EdEgF+7F5F G G gG 7Gr ^GgH GHq\K h9L<LP:L<L5M6M;>Mr >M =M 3N. /Nb /N5N5N;O.9Oj7O5O8P6PK8P1PEP9Q3FQmBQBQ7R:3Rr3R AR!DS"BSa#DS$=S% T'&:T2'3Tm(KT)5T*8U#+6U\,8U-1U.5U/8V406Vm18V26V31WRWFSW]T;WtU;WV9WW4X&XX[Y X\Z Xj[4Xx\X]?X^X_X`Ya6Y/bYfcYd+YeYf4YgZhZ!iZ"j#Z5kZYl'ZvmZnZo"ZpZq&Zr[s[t3[5u[iv;[jw[x[y[z+[{)\ |1\7}*\i~\.\.\+\]]3/]4]d']e-])]]].]/^$0^T0^/^1^ __%0_&0_W__1_&__/_/`(0`X$`1`6` a a%4a3?ahaa!a8ab$bC*bD bo5bbbb%bc)c>chci$c}c(ccc5dd;;d<dxdyd<d=d7e.ef<eg<e#ef1ff8=f9?fwffBfAg ;gN@g-ggBg3h=hqBhrhh=hAi EiL?ii-ijj3j;BjCCjDjBk@kRBkAkAlFlZ?lAl>m#4mb:mmmCmFn(EnoDnBno=Bo>?o+ooAo8p0pi+pjp(pppFpEqGq_Hq Bq Dr3 Hrx Er Es>sM:ssEsCtCtRBttCtDuEucHuuDuEv8Hv~Ev w  w!0w"wJ#EwK$Gw%Ew&1x'xQ(BxR)?x*+x+y,Gy-DyJ.Ey/Ay0'z1z?2Gz@3z4z5Hz6+z7{8E{9G{b:1{;{<F{=G|$>F|l?|@:|A|B7|CE}(D}nE}FC}GE}HB~IG~YJE~KF~L5.MdNBmOEPGQG>RGSTUCV/WMX+NYzZ4{[\5]^3_ `E'aHmbHcFdEFefgGhEi$:j_kCglmno@pA qMrks@rt@u@v35wixFpyGz{|C }(M~vBw@# E!+g? - B$EgFBD8D}>@BFCDB?DRFCC)Gm8FG6C~-?>1BpBAE8 ~DFG_rCs#D!;><E{DDK_Ff DFH;IC= < GEHABBDWE<'06g-o /C$D)n=t C(.D/-tD(@)X/=5C-.q4C >PCDDB]D>>$FcAECHC A  C DW EH+D,EqHE FQ0REGE1XB?+ :!A;"G}#@$B%.I&x'Gy()*H++(,T-EU.G/101F2G]3F45:6(77)8Ea9:;C<E =BO>B?D@A BB)CElDGEGFGBGHICJK L' M2N03OdP1eQR/STCUVW/X@3YAtZ[\F]D"^ g_s`Ata&bc@deG fhgFih&ij-k l?m Tn ^oBhpEqrFsB9tD|uDv>w@ExyFzC{B|?U}D~F!C(ClG81E2FxH&/F0FwFEHK#@DFZ;C#=$b<cEAB*BmD DFGGC#.RDS>ED8D}- /JGPGE&>, kyCz(D--[D\(@);/B r.~@ * 55Cy” ›¼C½ B bl4|ñA;S[CcFħED4ByżBŽ<.=lAm8Ư+(?BHENjGGGaȩC (')Q0RɃ 1Ʉ ɶ /ɷ  E@6EwFʽDIfBu?˸/(C0t{̏F̓E 4 F;!G͂"#$F%!&='@>()G΀*+F,&-7.?@/ π0ϊ1-ϐ2Ͼ3C4C 5:M6EЈ78E9F:B\;,џ<=F>F?F[@EҢA=B.&C UDDbEFӧFGG6HIICJJ#ԎKԲLDԳMNO>PERQD՘RDS"T 6U/DVtWA|X@־YZ0[?\4E]Cz^D׾_`a=!b _cmdCne(زfgDh-!iOjDPk(ٕlپm@n)o/p/6q fr.rsڡtڰuv@w x )yA6z8x{۱|۷}~+39&Ah?p ܰ&ܽ8 TD7|<:Lއ+ '3 2[ qߎ m +n+j1>#1bM?P"8s\a 1k5BR@i4J 5*!H`"$#0$g%&g&;'>(3 )Y=*(+V,Y-q.7/S0A1E\2=3C4+$5'P6*x789+:(;1<#J="n>#?@A B"C 5D"VE%yF%G!HI)J&1K XLyM,N%O$P Q(/R)XS1T'U clnt_create for rpc.ttdbserverd on %s failed%sError: rpc.ttdbserverd on %s is not runningserver version (%s) does notmatch the version of the database tables (%s). Please run a version %s database serverAttempt to open database table %s:%s failedcould not delete the X root window property %s advertising this sessionaddress version is %d, but I only understand %d! (address: <%s>)could not parse X display name: "%s"could not queue a message on file "%s" because of internal error %dcould not delete stale session <%s> from interest list of file "%s" because of internal error %dcould not delete uninterested session <%s> from interest list of file "%s" because of internal error %dtttracefile syntax error in line: %sCould not process tttracefile in $%sNo tracing allowed if real UID does not equal effective UIDAccepting requestempty document and no filecannot get messageID; operation may not be cancel-able, because tt_message_arg_val()cannot get title; document will be untitled because tt_message_arg_val()unknown opnum offsetindistinguishable signaturesfound for ptype %s -No connection-oriented transportA ToolTalk client died before it could be signalled to retrieve a message it was dueConnection to ToolTalk client lost while signalling it to retrieve a messageFound another session running (host=%s, pid=%d)Can't contact alleged session (host=%s, pid=%d); assuming it crashed...Can't parse advertised session id; overwriting it with my own...%s is a version %d types database, and this version can only read versions %d and earliercould not decode types from types database: %s. It may be damaged.Overwrote %sIgnoring unknown attribute <%s> of ToolTalk signature...ttce2xdr failed (status=%d); types in Classing Engine "user" database not converted...duplicate ISAM recordISAM file not openillegal ISAM argumentillegal ISAM key descriptortoo many ISAM files openbad ISAM file formatISAM non-exclusive accessISAM record lockedISAM key already existsISAM key is primary keyend or beginning of ISAM fileno ISAM record foundno current ISAM recordISAM file lockedISAM file name too longISAM cannot allocate memoryISAM RPC timeoutBroken ISAM TCP/IP connectionCannot connect to ISAM serverCannot import ISAM datano local SAM daemonISAM internal fatal errorISAM Locale/LANG mismatchchild (%d) exited due to signal %d%s (core dumped)child (%d) neither exited nor was signaled!cannot maximize clients because %mNo scope to manage. Use -c, -p, -d, or set $DISPLAY.Cannot use -S option with -cchild ttsession exited with status %dchild ttsession exited due to signal %d%s (core dumped)child ttsession neither exited nor was signaled!startinghave re-read typeserror in types; keeping old types$OPENWINHOME not set Usage: ttsession [-a unix|des][-d display][-spStvhNX][-c command] -c [command] start a process tree session, and run command in it. Subsequent options are passed to command. Default: $SHELL -p start a process tree session, and print its id -d display start an X session on display -a unix|des set server authentication level -s silent. Don't print out any warnings -S don't fork into the background -N maximize the number of clients allowed -t turn on message tracing -X use XDR databases for static types (default) -E use Classing Engine for static types -v print out version number -h print out this message Signal interface: kill -USR1 ttsession_pid toggle message tracing kill -USR2 ttsession_pid re-read static typesexitingUsage: tt_type_comp [-s] [-d db] [-mM] source_file tt_type_comp [-s] [-d db] -r type ... -M merge source types into specified database, not updating existing types -m merge, but update existing types. Default. -r remove source types from the specified database -d db database to operate on. One of: user, system, or network. Default: user -G perform garbage collection on the ToolTalk database server. tt_type_comp [-sE] -p|O|P [-d db] tt_type_comp [-s] -p|O|P compiled_file -O enumerate on stdout the names of all otypes read -P enumerate on stdout the names of all ptypes read -p pretty-print on stdout all the ToolTalk types read -E use the Classing Engine database(s) instead of the XDR database(s) -d db database to read from. One of: user, system, or network. Default: all tt_type_comp [-s] -x [-o compiled_file] source_file -x compile types from source_file (or stdin, if file is "-") -o write compiled types to compiled_file (or stdout, if file is "-") Default: source_file.xdr, or "types.xdr" if source is stdin tt_type_comp [-hv] -v print out version number -h print out this message -s do not print out any status messages. These cpp options will be passed through: -undef -Dname -Idirectory -Uname -YdirectorySemantic error in types fileNot a valid ToolTalk types fileCannot read any ToolTalk types from Classing Engine databaseMerging Classing Engine tables is no longer supportedCannot read types in %s database - version mismatchCannot read types in %s database$OPENWINHOME not setCannot initialize %s database for writingCould not remove old definition for %sOverwritingWritingCould not add new definition for %sCould not remove old definition for %sOverwritingWritingCould not add new definition for %sVersion mismatch in compiled typesCannot read types in database$OPENWINHOME not setCannot read types in %s database - version mismatchCannot read types in %s database$OPENWINHOME not setRemoving otype %s Removing ptype %s output written to %s Invalid database: %sSpecify only one of the options -O -P -m -M -p -r -xno preprocessing done because: %s: %sotype inheritance cycle involving %sancestor %s of otype %s does not existptype %s does not exist, but was named as implementorby otype %smultiple handlers defined in otype %sinherited signature in otype %s does not exist in parenttwo ptypes, %s and %s, with the same handlerancestor %s of otype %s does not existcyclic otype inheritance hierarchy - {duplicated definitions of otype %sduplicated definitions of ptype %sSecurity violation: RPC call wanted me to open a file that is not a ToolTalk databaseAny data written using an old (<= 1.0.2) rpc.ttdbserverd after using a new (>= 1.1) rpc.ttdbserverd will be ignoredAny data written using an old (<= 1.0.2) rpc.ttdbserverd after using a new (>= 1.1) rpc.ttdbserverd will be ignoredrpc.ttdbserverd version (%s) does not match the version (%s) of the database tables. Please install an rpc.ttdbserverd version %s (or greater)Usage: rpc.ttdbserverd [-S] [-n] [-m DTMOUNTPOINT] rpc.ttdbserverd [-S] [-v]Unable to start garbage collection thread. thr_create() Unable to fork() for garbage collection. Usage: ttdbck [-f file] [-k objkey] [-t type] [-bx] [-impa] [-IZ] [-F newfilename] [-T newtype] [mountpoints] ttdbck: you must specify a selection [-fkt] option or a diagnosis [-bx] option if a repair [-FTZ] option is specified Version mismatch in compiled typesCannot read types in databasettdbck: try 'ttdbck -I'. Select by filename: %s Select by objid key:Select by type: %s Diagnose badly formed entities Diagnose references to non-existent entities Display ids Display mandatory data Display properties and values data Invoke NetISAM isrepair() function before inspecting Repair by setting to type: %s Repair by deleting Debugging printout level %d Repair by setting to file: %s Error: no file for spec. Error: no type for spec. Error: "%s" is not an installed otype. Error: spec has multiple values for type property. Error: ttdbck: no errors found. Error: Usage: %s {ctx}[fhpPv[v]] [tarfile] pathname ... %s {ctx}fL[hpPRv[v]] tttarfile pathname ... %s -v %s -h c create an archive t list an archive's contents x extract from an archive f use next arg as archive h follow symbolic links L do not invoke tar(1) p preserve file modes P (root) do not preserve objects' owner, mod time, etc. R do not recurse into directories v be verbose vv be very verbose -v print the version number and quit -h[elp] print this message %s: Could not read object kind from archive stream. %s: Could not read archive version from archive stream. %s: Found archive version %d, but expected version %d. %s: found object of unknown kind %d in archive. %s: Could not read object kind from archive stream. %s: Could not read archive version from archive stream. %s: Found archive version %d, but expected version %d. %s: found object of unknown kind %d in archive. %s: Could not remove ToolTalk objects of %s because %s %s: Could not move ToolTalk objects of "%s" to "%s" because %s %s: Will not attempt to move the ToolTalk objects of: Usage: %s [-] [-fL] path1 path2 %s [-] [-fL] path1 [path2 ...] dir %s -v %s -h -L do not perform a mv(1) -v print the version number and quit -h print this message %s: Could not remove ToolTalk objects of %s because %s Usage: %s [-] [-%s] %s ... %s -v %s -h filedir -L do not perform a %s(1) -v print the version number and quit -h[elp] print this message %s: Could not remove ToolTalk objects of %s because %s Usage: %s [-pL] file1 file2 %s [-prRL] path1 [path2 ...] dir %s -v %s -h -L do not perform a cp(1) -v print the version number and quit -h print this message Usage: %s [-0FCa][-o outfile] [-S session | command [options]] %s [-e script | -f scriptfile][-S session | command [options]] -0 Turn off message tracing in session, or run command without message tracing (i.e. only API tracing) -F Follow all children forked by command or subsequently started in session by ttsession(1) -C Do not trace ToolTalk API calls -a Print all attributes, arguments, and context slots of traced messages. Default is single-line summary. -e script Read tttracefile(4) settings from script -f scriptfile Read tttracefile(4) settings from scriptfile. "-": stdin. -o outfile Output. "-": stdout. default: stdout for session tracing, stderr (of tttrace) for command tracing -S session Session to trace. default: see tt_default_session() command ToolTalk client command to invoke and trace %s: session <%s> does not support Session_Trace. Use kill -USR1 instead. See ttsession(1). Ignoring unknown Tt_address passed to Tts_address::add() Ignoring Unknown Tt_address passed to Tts_address::remove() Ignoring Unknown address passed to tts_address::tts_set() Ignoring Unknown address passed to tts_address::tts_unset() Ignoring Unknown address read by tts_address::load() Tts_arglist::Tts_arglist - error reading argument - Tts_arglist::load - Unknown arg type encountered - using BARG Abstract class Tts_arg::assign (Tt_pattern) called - ignoring Abstract class Tts_arg::assign(Tt_message) called - ignoring Abstract class Tts_arg::generate called - ignoring Abstract class Tts_arg::save called - ignoring Abstract class Tts_arg::load called - ignoring Tts_arg::mode_to_chars invalid mode - using TT_INOUT Tts_arg::chars_to_mode invalid mode - using TT_INOUT Ignoring unknown Tt_category passed to Tts_category::set() Tts_category::generate() called for a message - ignoring Ignoring Unknown category read by tts_category::load() Ignoring unknown Tt_class passed to Tts_class::add() Ignoring Unknown Tt_class passed to Tts_class::remove() Ignoring Unknown class passed to tts_class::tts_set() Ignoring Unknown class passed to tts_class::tts_unset() Ignoring Unknown class read by tts_class::load() Tts_connection::universal_callback - no pattern molding for pattern! Tts_cntxtlist::Tts_cntxtlist - error reading context - Tts_contextlist::load - Unknown cntxt type encountered - using BCNTXT Abstract class Tts_context::assign (Tt_pattern) called - ignoring Abstract class Tts_context::assign (Tt_pattern) called - ignoring Abstract class Tts_context::generate called - ignoring Abstract class Tts_context::save called - ignoring Abstract class Tts_context::load called - ignoring Ignoring unknown Tt_disposition passed to Tts_disposition::add() Ignoring Unknown Tt_disposition passed to Tts_disposition::remove() Ignoring Unknown disposition passed to tts_disposition::tts_set() Ignoring Unknown disposition passed to tts_disposition::tts_unset() Ignoring Unknown disposition read by tts_disposition::load() Called %s ToolTalk Error: %s Origin: Source File %s Line %d Warning: %s Origin: Source File %s Line %d Tts_message_molding::send - Attempt to send uninitialized message molding Ignoring unknown Tt_scope passed to Tts_scope::add() Ignoring Unknown Tt_scope passed to Tts_scope::remove() Ignoring Unknown scope passed to tts_scope::tts_set() Ignoring Unknown scope passed to tts_scope::tts_unset() Ignoring Unknown scope read by tts_scope::load() Ignoring unknown Tt_state passed to Tts_state::add() Ignoring Unknown Tt_state passed to Tts_state::remove() Ignoring Unknown state passed to tts_state::tts_set() Ignoring Unknown state passed to tts_state::tts_unset() Tts_state::generate() called for a message - ignoring Ignoring Unknown state read by tts_state::load() Obtaining TTSnoop Help----------------------Help for individual buttons and settings can be obtained bypressing the help key while the mouse is over the button orsetting of interest. To see what api calls are being usedby ttsnoop, use the -t switch when invoking ttsnoop.Using TTSnoop-------------To observe messages select the Start setting choice.To turn off message observation select the Stop setting choice.To limit the types of messages: 1) Select Patterns button 2) Enter the type of pattern you want to observe 3) Select Apply buttonTo highlight information that is displayed: 1) Select Display button 2) Mark those items that you want to highlight 3) Select Apply buttonTo send a message: 1) Select the Messages button 2) Compose the message 3) Select the Send Message buttonTo store a message: 1) Select the Message button 2) Compose the message 3) Select the Add Message buttonTo send a stored message: Select the message from the Send Message menuTo clear the message output window select the Clear button.General ToolTalk Information----------------------------Before sending or receiving object orientedmessages through ToolTalk, a process mustregister with the message passer. By registering,the process tells ToolTalk several things: The process type (ptype) of the process. This allows the message passer to direct messages implemented by this ptype to this process. The sessions the process participates in. The documents that the process is observing. Messages to objects in these documents can then be routed to the process.Note that these registrations generally modifygenerated patterns. It would be possible to usethe pattern manipulation API calls to observe orhandle object-oriented messages, but the methodsdescribed here are much shorter since they takeadvantage of the information declared in the typedefinitions.Use tt_session_join to become part of a session.When joining, you must provide the session id ofthe session to join.When your tool no longer needs ToolTalk services,quit the session with tt_session_quit.When your tool loads a file, it should join thecollection of processes interested in that fileby calling tt_file_join(); when through with thefile, quit the collection by callingtt_file_quit(). Some tools may have several filesopen at once; other tools may only open one at a time.Using TTSnoop-------------To observe messages select the Start setting choice.To turn off message observation select the Stop setting choice.To limit the types of messages: 1) Select Patterns button 2) Enter the type of pattern you want to observe 3) Select Apply buttonTo highlite information that is displayed: 1) Select Display button 2) Mark those items that you want to highlite 3) Select Apply buttonTo send a message: 1) Select the Messages button 2) Compose the message 3) Select the Send Message buttonTo store a message: 1) Select the Message button 2) Compose the message 3) Select the Add Message buttonTo send a stored message: Select the message from the Send Message menuTo clear the message output window select the Clear button.General ToolTalk Information----------------------------Before sending or receiving object oriented messages throughToolTalk, a process must register with the message passer. Byregistering, the process tells ToolTalk several things: The process type (ptype) of the process. This allows the message passer to direct messages implemented by this ptype to this process. The sessions the process participates in. The documents that the process is observing. Messages to objects in these documents can then be routed to the process.Note that these registrations generally modify generated patterns.It would be possible to use the pattern manipulation API calls toobserve or handle object-oriented messages, but the methodsdescribed here are much shorter since they take advantage of theinformation declared in the type definitions.Use tt_session_join to become part of a session. When joining, youmust provide the session id of the session to join.When your tool no longer needs ToolTalk services, quit the sessionwith tt_session_quit.When your tool loads a file, it should join the collection ofprocesses interested in that file by calling tt_file_join(); whenthrough with the file, quit the collection by calling tt_file_quit().Some tools may have several files open at once; other tools mayonly open one at a time.Start/Stop receiving and displaying messages.Clear the message window.Display-------When a message arrives for your process, a file descriptor becomesactive. Depending on the particular structure of your tool, you caneither arrange for the window system toolkit to call a callback whenthe file descriptor becomes active, or include the file descriptorin a select(3) call that blocks on a number of file descriptors.In either case, after the file descriptor becomes active, you calltt_message_receive() to get a handle for a message containing theincoming message. You can use the tt_message_*() calls to examinethe attributes of the message to determine the action you should take.You can recognize replies to messages you sent by comparing thehandles, by placing information meaningful to your application inthe message with the tt_message_user_set() call, or by placingspecific callbacks on messages and patterns with thett_message_callback_add and tt_pattern_callback_add calls.Messages--------To send a message, first allocate a new message, fill in the properinformation, then send it. Any reply will show up in the same message.When finished with the message free the storage for the message. (forvalue returning requests, this is after any needed return values arecopied out; for notifications, this is right after its been sent).To allocate the new message, use tt_message_create(). It returns a"handle" or "opaque pointer" to the message; use this handle onsucceeding calls to reference this message.To fill in message information, use the tt_message_*_set() calls;there is one of these for each attribute of the message.You should set Class, Address, Op and Args.Send the message with tt_message_send().Patterns--------Since messages are not explicitly directed to a particular receiver bythe sending process, a "pattern matching" method is used to determinethe receiver. Tools register descriptions of the messages in which theyare interested and ToolTalk uses these descriptions to infer the routingof the message. Separate sets of patterns are kept to describe themessages the tool wants to handle and the messages the tool wants toobserve. Tools wishing to receive messages declare their interest eitherdynamically at run time or statically at installation time. A dynamicregistration consists of a set of patterns against which all messagesare compared. If a message matches the pattern, the tool whichregistered the pattern is eligible to receive the message.Before receiving procedural messages through ToolTalk, a process mustregister with the message passer. By registering, the process givespatterns to ToolTalk; which then delivers messages that match thosepatterns to the process. The patterns can be created in two ways:Statically. Through a ptype. A process can declare its ptype to themessage passer; ToolTalk then generates patterns from each signaturein the ptype. These generated patterns can be modified by joining andquitting sessions and files, just as in object oriented message passing.Dynamically. A process can create patterns "on the fly" and registerthem with ToolTalk. A typical use of this facility would be a messagelogging utility that simply observes all messages that go by, displayingthem in a window; such a utility would be useful in debugging messageprotocols.This application uses only the Dynamic patterns.To register a pattern, first you must allocate a new pattern, fill inthe proper information, then register it. When you are through with thepattern (which is only after you no longer are interested in messagesthat match it), free the storage for the pattern.To allocate the new pattern, use tt_pattern_create(). It returns a"handle" or "opaque pointer" to the pattern; use this handle onsucceeding calls to reference this pattern.To fill in pattern information, use the tt_pattern_*_add() calls; thereis one of these for each attribute of the pattern. It is possible tosupply multiple values for each attribute in the pattern; the patternattribute matches a message attribute if any of the values in thepattern match the value in the message.This application uses non-exclusive settings and comma separated valuesfor the multiple attributes.To match messages without regard to the value in a particular attribute,simply omit the attribute from the pattern.If no pattern attribute is specified, the ToolTalk service counts themessage attribute as matched. The fewer pattern attributes you specify,the more messages you become eligible to receive.If there are multiple values specified for a pattern attribute, one ofthe values must match the message attribute value. If no value matches,the ToolTalk service will not consider your application as a receiver.The attributes Category and Scope must always be supplied.When the pattern is complete, register the pattern withtt_pattern_register(), and then join sessions or files as required bySELECT'ing the Apply button.Since the primary effect of joining files and sessions is to updatecurrently registered patterns, patterns that are registered after thejoins will not be updated. You should either register all patternsbefore joining, or re-do the joins after registering new patterns. Thisapplies to patterns registered implicitly by joining ptypes, as well.As you add messages via the Messages window, the menu attached to thisbutton grows. You may send a message by selecting it.Address:Because there are many types of tools and different users will usedifferent sets of tools at different times, it's often impossible forthe sender of a message to identify the precise recipient of a message.Instead, the sender gives an operation name which specifies the meaningof the message and may give an object to which the message is directed,or the object type (otype).Use object or otype for object oriented messages. If the address ishandler, specify the handler. TT_PROCEDURE: Op and Args supplied. TT_OBJECT: Object, Op, and Args supplied. TT_HANDLER: Handler, Op, and Args supplied. TT_OTYPE: Otype, Op, and Args supplied.Handler: If you know the exact procid of the handler, you can address messagesto it directly. The usual way this would happen would be for one processto make a general request and then pick the Handler attribute out of thereply, directing further messages to the same handler; this allows twoprocesses to rendezvous through broadcast message passing and then gointo a dialogue.Handler_Ptype:If you know the ptype of the process that will handle the message, fillit in. You would know the ptype if you consulted the ptype definitionto find the details of the protocol.Object:Fill in the objid of the object to which the message is to be sent.OType:Type of the object.Op:Fill in the operation that describes the notification or requestbeing made. Consult the otype definition for the target object todetermine the operation name.Opnum:Operation number. This is used to distinguish between overloadedoperations (operations with the same name but different argumenttypes), and to simplify a client's "internal" dispatch (invokingthe proper internal procedure for a given message.)Scope:Use scope session if messages from other processes in the same sessionas your process are desired; use scope file if messages about a file isdesired. TT_SESSION: Receive messages from other processes in your session. TT_FILE: Receive messages about the file joined. TT_BOTH: Receive messages about a file and the session. TT_FILE_IN_SESSION: Receive messages for the file joined while in this session.Session:For scope session, specify the session (tt_default_session() bydefault).File:For file scope, specify the name of the file.Category:Use category observe if you just want to look at the messages; usecategory handle to volunteer to be the unique handler of the message. TT_OBSERVE: Observing processes just get copies of the message for their own information. Any number of processes can observe a message. Even if the message is a request, observers cannot return values to the sender. Often, the action taken by observers just affects the interactive display of the underlying tool data. TT_HANDLE: Handling processes actually perform an action based on the message. Only one process will handle any given message. If the message is a request, the handling process is the process that returns any values. Generally, the action taken by a handler affects the persistently-stored representation of the tool's data.Class:Use class request for messages that return values, or for which youwant feedback telling you when the message is handled or queued, orwhen a process is started to handle the request. Use class notificationfor messages that just notify other processes of events. TT_NOTICE: Notice are messages that inform other tools that some event has happened. Tools sending notices don't expect replies back; the sender is just letting the other tools know what's happening. TT_REQUEST: Requests are messages that ask another tool to perform an action. Often, but not always, the requesting tool expects some value returned. This value is returned as a reply to the request. Even if no value is returned, the tool processing the request sends a reply indicating success or failure.Disposition:Specifies the action to take if the message cannot be handled by anyrunning process. Queue if the message should be queued until a processof the Handler_Ptype registers. Start if a process of the Handler_Ptypeshould be started. TT_QUEUE: Queue the message until a process of the proper ptype receives the message. TT_START: Attempt to start a process of the proper ptype if none is running.Note that Tt_disposition values can be added together, so thatTT_QUEUE+TT_START means both to queue the message and to try to starta process. This can be useful if the start can fail (or be vetoed bythe user), to ensure the message is processed as soon as an eligibleprocess does start.State:Values for the State attribute of a message. Possible values and theirmeanings are: TT_CREATED: Message has been created but not yet sent. Only the sender of a message will see a message in this state. TT_SENT: Message has been sent but not yet handled. TT_HANDLED: Message has been handled, return values are valid. TT_FAILED: Message could not be delivered to a handler. TT_QUEUED: Message has been queued for later delivery. TT_STARTED: Attempting to start a process to handle the message. TT_REJECTED: Message has been rejected by a possible handler. This state is seen only by the rejecting process; ToolTalk changes the state back to TT_SENT before delivering the message to another possible handler.Status:A unique number indicating the results of the message returned by thereplier. This number must be larger than TT_ERR_LAST (2047).Status string:A text description of the Status of the message.Sender:Identifies the process that sent the message.Sender ptype:The ptype of the process that sent the message.Uid:The effective user identifier of the process that sent the message.Gid:The effective group identifier of the process that sent the message.Mode:Specifies the mode of a message argument. Possible values andmeanings are: TT_IN: The argument is written by the sender and read by the handler and any observers. TT_OUT: The argument is written by the handler and read by the sender and any reply observers. TT_INOUT: The argument is written and read by the sender and the handler and any observers.Type:String indicating the type. Common values are "string" and "int"although developers can create there own.Value:Actual data of the value dependant on the type.When the apply button is pressed, the values of the specifiedsettings will be displayed for each message received.When pressed, the display values are reset to the state of the lastapply or the initial value, whichever is last.Edit Receive Contexts:Add, delete, or change contexts you want to receive.Pattern matcher---------------Since messages are not explicitly directed to a particular receiverby the sending process, a "pattern matching" method is used todetermine the receiver. Tools register descriptions of the messagesin which they are interested and ToolTalk uses these descriptions toinfer the routing of the message. Separate sets of patterns are keptto describe the messages the tool wants to handle and the messagesthe tool wants to observe. Tools wishing to receive messages declaretheir interest either dynamically at run time or statically atinstallation time. A dynamic registration consists of a set ofpatterns against which all messages are compared. If a message matchesthe pattern, the tool which registered the pattern is eligible toreceive the message.Before receiving procedural messages through ToolTalk, a process mustregister with the message passer. By registering, the process givespatterns to ToolTalk; which then delivers messages that match thosepatterns to the process. The patterns can be created in two ways:Statically. Through a ptype. A process can declare its ptype to themessage passer; ToolTalk then generates patterns from each signaturein the ptype. These generated patterns can be modified by joining andquitting sessions and files, just as in object oriented message passing.Dynamically. A process can create patterns "on the fly" and registerthem with ToolTalk. A typical use of this facility would be a messagelogging utility that simply observes all messages that go by, displayingthem in a window; such a utility would be useful in debugging messageprotocols.This application uses only the Dynamic patterns.To register a pattern, first you must allocate a new pattern, fill inthe proper information, then register it. When you are through with thepattern (which is only after you no longer are interested in messagesthat match it), free the storage for the pattern.To allocate the new pattern, use tt_pattern_create(). It returns a"handle" or "opaque pointer" to the pattern; use this handle onsucceeding calls to reference this pattern.To fill in pattern information, use the tt_pattern_*_add() calls;there is one of these for each attribute of the pattern. It is possibleto supply multiple values for each attribute in the pattern; thepattern attribute matches a message attribute if any of the valuesin the pattern match the value in the message.This application uses non-exclusive settings and comma separated valuesfor the multiple attributes.To match messages without regard to the value in a particular attribute,simply omit the attribute from the pattern.If no pattern attribute is specified, the ToolTalk service counts themessage attribute as matched. The fewer pattern attributes you specify,the more messages you become eligible to receive.If there are multiple values specified for a pattern attribute, one ofthe values must match the message attribute value. If no value matches,the ToolTalk service will not consider your application as a receiver.The attributes Category and Scope must always be supplied.When the pattern is complete, register the pattern withtt_pattern_register(), and then join sessions or files as required bySELECT'ing the Apply button.Since the primary effect of joining files and sessions is to updatecurrently registered patterns, patterns that are registered after thejoins will not be updated. You should either register all patternsbefore joining, or re-do the joins after registering new patterns.This applies to patterns registered implicitly by joining ptypes, aswell.Address:Because there are many types of tools and different users will usedifferent sets of tools at different times, it's often impossible forthe sender of a message to identify the precise recipient of a message.Instead, the sender gives an operation name which specifies the meaningof the message and may give an object to which the message is directed,or the object type (otype).Use object or otype for object oriented messages. If the address ishandler, specify the handler. TT_PROCEDURE: Op and Args supplied. TT_OBJECT: Object, Op, and Args supplied. TT_HANDLER: Handler, Op, and Args supplied. TT_OTYPE: Otype, Op, and Args supplied.Object:Fill in the objid of the object to which the message is to be sent.OType:Type of the object.Op:Fill in the operation that describes the notification or requestbeing made. Consult the otype definition for the target object todetermine the operation name.Scope:Use scope session if messages from other processes in the same sessionas your process are desired; use scope file if messages about a fileis desired. TT_SESSION: Receive messages from other processes in your session. TT_FILE: Receive messages about the file joined. TT_BOTH: Receive messages about a file and the session. TT_FILE_IN_SESSION: Receive messages for the file joined while in this session.File:For file scope, specify the name of the file.Session:For scope session, specify the session (tt_default_session() bydefault).Category:Use category observe if you just want to look at the messages; usecategory handle to volunteer to be the unique handler of the message. TT_OBSERVE: Observing processes just get copies of the message for their own information. Any number of processes can observe a message. Even if the message is a request, observers cannot return values to the sender. Often, the action taken by observers just affects the interactive display of the underlying tool data. TT_HANDLE: Handling processes actually perform an action based on the message. Only one process will handle any given message. If the message is a request, the handling process is the process that returns any values. Generally, the action taken by a handler affects the persistently-stored representation of the tool's data.Class:Use class request for messages that return values, or for which youwant feedback telling you when the message is handled or queued, orwhen a process is started to handle the request. Use class notificationfor messages that just notify other processes of events. TT_NOTICE: Notice are messages that inform other tools that some event has happened. Tools sending notices don't expect replies back; the sender is just letting the other tools know what's happening. TT_REQUEST: Requests are messages that ask another tool to perform an action. Often, but not always, the requesting tool expects some value returned. This value is returned as a reply to the request. Even if no value is returned, the tool processing the request sends a reply indicating success or failure.State:Values for the State attribute of a message. Possible values andtheir meanings are: TT_CREATED: Message has been created but not yet sent. Only the sender of a message will see a message in this state. TT_SENT: Message has been sent but not yet handled. TT_HANDLED: Message has been handled, return values are valid. TT_FAILED: Message could not be delivered to a handler. TT_QUEUED: Message has been queued for later delivery. TT_STARTED: Attempting to start a process to handle the message. TT_REJECTED: Message has been rejected by a possible handler. This state is seen only by the rejecting process; ToolTalk changes the state back to TT_SENT before delivering the message to another possible handler.Disposition:Specifies the action to take if the message cannot be handled by anyrunning process. Queue if the message should be queued until a processof the Handler_Ptype registers. Start if a process of the Handler_Ptypeshould be started. TT_QUEUE: Queue the message until a process of the proper ptype receives the message. TT_START: Attempt to start a process of the proper ptype if none is running.Note that Tt_disposition values can be added together, so thatTT_QUEUE+TT_START means both to queue the message and to try to starta process. This can be useful if the start can fail (or be vetoed bythe user), to ensure the message is processed as soon as an eligibleprocess does start.Sender:Identifies the process that sent the message.Sender ptype:The ptype of the process that sent the message.Args:Fill in any arguments specific to the operation. Use tt_message_arg_addto add each argument in turn. For each argument, you must specify: mode(in, out, or inout), type, and if the mode is in or inout, the value.Mode:Specifies the mode of a message argument. Possible values andmeanings are: TT_IN: The argument is written by the sender and read by the handler and any observers. TT_OUT: The argument is written by the handler and read by the sender and any reply observers. TT_INOUT: The argument is written and read by the sender and the handler and any observers.Type:String indicating the type. Common values are "string" and "int"although developers can create there own.Value:Actual data of the value dependant on the type.Add Button:Add an argument with the Mode, Type and Value.Delete Button:Delete the selected argument.Change Button:Change the selected argument to the current values of Mode, Typeand Value.Apply button:Register to receive messages that match this pattern.Name:Name of this contextValue:A value appropriate to the type,i.e. 55 for a type of int, "fred" for a type of char, or ^V^L^X fora type of bytes.Add Context:Add the current values of the Name and Value fields to the list ofcontexts.Delete Context:Delete the selected entry from the list of contexts.Change Context:Change the selected entry to what's in the Name and Value fields.Edit Send Contexts:Popup window to edit the list of contexts you wish to send.Message-------To send a message, first allocate a new message, fill in the properinformation, then send it. Any reply will show up in the same message.When finished with the message free the storage for the message. (forvalue returning requests, this is after any needed return values arecopied out; for notifications, this is right after its been sent),To allocate the new message, use tt_message_create(). It returns a"handle" or "opaque pointer" to the message; use this handleon succeeding calls to reference this message.To fill in message information, use the tt_message_*_set() calls;there is one of these for each attribute of the message.You should set Class, Address, Op and Args.Send the message with tt_message_send().Address:Because there are many types of tools and different users will usedifferent sets of tools at different times, it's often impossible forthe sender of a message to identify the precise recipient of a message.Instead, the sender gives an operation name which specifies the meaningof the message and may give an object to which the message is directed,or the object type (otype).Use object or otype for object oriented messages. If the address ishandler, specify the handler. TT_PROCEDURE: Op and Args supplied. TT_OBJECT: Object, Op, and Args supplied. TT_HANDLER: Handler, Op, and Args supplied. TT_OTYPE: Otype, Op, and Args supplied.Handler:If you know the exact procid of the handler, you can address messagesto it directly. The usual way this would happen would be for oneprocess to make a general request and then pick the Handler attributeout of the reply, directing further messages to the same handler; thisallows two processes to rendezvous through broadcast message passingand then go into a dialogue.Handler_Ptype:If you know the ptype of the process that will handle the message,fill it in. You would know the ptype if you consulted the ptypedefinition to find the details of the protocol.Object:Fill in the objid of the object to which the message is to be sent.OType:Type of the object.Op:Fill in the operation that describes the notification or request beingmade. Consult the otype definition for the target object to determinethe operation name.Scope:Use scope session if messages from other processes in the same sessionas your process are desired; use scope file if messages about a file isdesired. TT_SESSION: Receive messages from other processes in your session. TT_FILE: Receive messages about the file joined. TT_BOTH: Receive messages about a file and the session. TT_FILE_IN_SESSION: Receive messages for the file joined while in this session.Session:For scope session, specify the session (tt_default_session() bydefault).File:For file scope, specify the name of the file.Class:Use class request for messages that return values, or for which youwant feedback telling you when the message is handled or queued, orwhen a process is started to handle the request. Use classnotification for messages that just notify other processes of events. TT_NOTICE: Notice are messages that inform other tools that some event has happened. Tools sending notices don't expect replies back; the sender is just letting the other tools know what's happening. TT_REQUEST: Requests are messages that ask another tool to perform an action. Often, but not always, the requesting tool expects some value returned. This value is returned as a reply to the request. Even if no value is returned, the tool processing the request sends a reply indicating success or failure.Disposition:Specifies the action to take if the message cannot be handled by anyrunning process. Queue if the message should be queued until a processof the Handler_Ptype registers. Start if a process of the Handler_Ptypeshould be started. TT_QUEUE: Queue the message until a process of the proper ptype receives the message. TT_START: Attempt to start a process of the proper ptype if none is running.Note that Tt_disposition values can be added together, so thatTT_QUEUE+TT_START means both to queue the message and to try to starta process. This can be useful if the start can fail (or be vetoed bythe user), to ensure the message is processed as soon as an eligibleprocess does start.Sender_Ptype:The ptype of the process that sent the message.Status:A unique number indicating the results of the message returned bythe replier. This number must be larger than TT_ERR_LAST (2047).Status string:A text description of the Status of the message.Args:Fill in any arguments specific to the operation. Usett_message_arg_add to add each argument in turn. For each argument,you must specify: mode (in, out, or inout), type, and if the mode isin or inout, the value.Mode:Specifies the mode of a message argument. Possible values andmeanings are: TT_IN: The argument is written by the sender and read by the handler and any observers. TT_OUT: The argument is written by the handler and read by the sender and any reply observers. TT_INOUT: The argument is written and read by the sender and the handler and any observers.Type:String indicating the type. Common values are "string" and "int"although developers can create there own.Value:Actual data of the value dependant on the type.Add Button:Add an argument with the Mode, Type and Value.Delete Button:Delete the selected argument.Change Button:Change the selected argument to the current values of Mode, Typeand Value.Send button:Send this message. Also print out to standard output the Tooltalkcalls that will be made to create and send this message.Name:Name of this context.Value:Value of this context, interpreted as Type.Add:Add the values in the text fields as a new context.Delete:Delete the currently selected context.Change:Change the selected context to reflect what is currently in thetext fields.Unable to open pipe for sieve output. Tts_string_list:generate called for message - ignoring TT_OK Request successful.TT_WRN_NOTFOUND The object was not removed because it was not found.TT_WRN_STALE_OBJID The object attribute in the message has been replaced with a newer one. Update the place from which the object id was obtained.TT_WRN_STOPPED The query was halted by the filter procedure.TT_WRN_SAME_OBJID The moved object retains the same objid.TT_WRN_START_MESSAGE This message caused this process to be started. This message should be replied to even if it is a notice.TT_WRN_APPFIRST This code should be unused.TT_WRN_LAST This code should be unused.TT_ERR_CLASS The Tt_class value passed is invalid.TT_ERR_DBAVAIL A required database is not available. The condition may be temporary, trying again later may work.TT_ERR_DBEXIST A required database does not exist. The database must be created before this action will work.TT_ERR_FILE File object could not be found.TT_ERR_MODE The Tt_mode value is not valid.TT_ERR_ACCESS An attempt was made to access a ToolTalk object in a way forbidden by the protection system.TT_ERR_NOMP No ttsession process is running, probably because tt_open() has not been called yet. If this code is returned from tt_open() it means ttsession could not be started, which generally means ToolTalk is not installed on this system.TT_ERR_NOTHANDLER Only the handler of the message can do this.TT_ERR_NUM The integer value passed is not valid.TT_ERR_OBJID The object id passed does not refer to any existing object spec.TT_ERR_OP The operation name passed is not syntactically valid.TT_ERR_OTYPE The object type passed is not the name of an installed object type.TT_ERR_ADDRESS The Tt_address value passed is not valid.TT_ERR_PATH One of the directories in the file path passed does not exist or cannot be read.TT_ERR_POINTER The opaque pointer (handle) passed does not indicate an object of the proper type.TT_ERR_PROCID The process id passed is not valid.TT_ERR_PROPLEN The property value passed is too long.TT_ERR_PROPNAME The property name passed is syntactically invalid.TT_ERR_PTYPE The process type passed is not the name of an installed process type.TT_ERR_DISPOSITION The Tt_disposition value passed is not valid.TT_ERR_SCOPE The Tt_scope value passed is not valid.TT_ERR_SESSION The session id passed is not the name of an active session.TT_ERR_VTYPE The value type name passed is not valid.TT_ERR_NO_VALUE No property value with the given name and number exists.TT_ERR_INTERNAL Internal error (bug)TT_ERR_READONLY The attribute cannot be changed.TT_ERR_NO_MATCH No handler could be found for this message, and the disposition was not queue or start.TT_ERR_UNIMP Function not implemented.TT_ERR_OVERFLOW Too many active messages (try again later).TT_ERR_PTYPE_START Attempt to launch instance of ptype failed.TT_ERR_CATEGORY Pattern object has no category set.TT_ERR_DBUPDATE The database is inconsistent: another tt_spec_write updated object first.TT_ERR_DBFULL Tooltalk database is full.TT_ERR_DBCONSIST Database is corrupt or access information is incomplete (run ttdbck).TT_ERR_STATE The Tt_message is in a Tt_state that is invalid for the attempted operation.TT_ERR_NOMEM No more memory.TT_ERR_SLOTNAME The slot name is syntactically invalid.TT_ERR_XDR The XDR proc. passed evaluated to zero len, or failed during invocation.TT_ERR_NETFILE The netfilename passed is not syntactically valid.TT_DESKTOP_UNMODIFIED Operation does not apply to unmodified entitiesTT_MEDIA_ERR_SIZE The specified size was too big or too smallTT_MEDIA_ERR_FORMAT The data do not conform to their alleged formatTT_ERR_APPFIRST This code should be unused.TT_ERR_LAST This code should be unused.TT_STATUS_LAST This code should be unused.Unknown Tt_status value.TT_DESKTOP_EPERM Not super-userTT_DESKTOP_ENOENT No such file or directoryTT_DESKTOP_EINTR Interrupted system callTT_DESKTOP_EIO I/O errorTT_DESKTOP_EAGAIN No more processesTT_DESKTOP_ENOMEM Not enough spaceTT_DESKTOP_EACCES Permission deniedTT_DESKTOP_EFAULT Bad addressTT_DESKTOP_EEXIST File existsTT_DESKTOP_ENODEV No such deviceTT_DESKTOP_ENOTDIR Not a directoryTT_DESKTOP_EISDIR Is a directoryTT_DESKTOP_EINVAL Invalid argumentTT_DESKTOP_ENFILE File table overflowTT_DESKTOP_EMFILE Too many open filesTT_DESKTOP_ETXTBSY Text file busyTT_DESKTOP_EFBIG File too largeTT_DESKTOP_ENOSPC No space left on deviceTT_DESKTOP_EROFS Read-only file systemTT_DESKTOP_EMLINK Too many linksTT_DESKTOP_EPIPE Broken pipeTT_DESKTOP_ENOMSG No message of desired typeTT_DESKTOP_EDEADLK Deadlock conditionTT_DESKTOP_ENODATA No data availableTT_DESKTOP_EPROTO Protocol errorTT_DESKTOP_ENOTEMPTY Directory not emptyTT_DESKTOP_ETIMEDOUT Connection timed outTT_DESKTOP_EALREADY Operation already in progressTT_DESKTOP_ECANCELED Operation canceledTT_DESKTOP_ENOTSUP Not supported