Session C161 - Breaking Free From TSO: One Story of Going It Alone with VTAM

SHARE 69
August 23-28, 1987


This is a person who rewrote the NOMAD2 session manager from TSO to a multiuser native VTAM application. I had to write fast because there were no visuals and no handouts.

NOMAD2 used to run under TSO, but in the interests of efficiency they decided to recode the terminal portion as a standalone VTAM application. The speaker talked about some of the gross architecture of the NOMAD terminal application and some of the bells and whistles he was able to add.

The native VTAM support consists of two parts: a VTAM terminal driver, and a generalized session manager (required because now there are many users operating simultaneously within NOMAD2). They also had to recode some parts of the original NOMAD2 to use the new environment rather than TGET/TPUT.

I was interested in the parallels between this code and RJE3270, a locally-written SNA workstation emulator for 3270 printers. NOMAD2 implements a FSM (Finite State Machine) for each session - as does RJE3270. A FSM is a table whose entries describe actions to be taken given a certain event. A FSM entry might say:

		IF current state is "ABCD" and
		   "WXYZ" happens
		THEN take some action, and
		   SET current state to "EFGH"
A complete tracing facility is necessary if you are going to make a FSM work; NOMAD2 supplies one (as does RJE3270).

NOMAD2 does a couple of nice things that RJE3270 does not. NOMAD2 implements a subtask that provides generalized timer services. RJE3270 uses timer services, but its implementation single-threads to some extent. The NOMAD2 console processor is in a separate task, and it incompletely parses commands before passing them on to individual processors, something like IKJSCAN. RJE3270 command processing is not particularly pretty.

Something I was not aware of was that multitasking programs - like NOMAD2 and RJE3270 - can still be killed by a loop within a subtask. Turns out that multiple tasks within an address space do not get time-sliced by MVS, ergo a looping subtask can shutdown the entire address space on a single-engine computer (fortunately, the 3081 on our floor has two engines).


Back to session index
Back to index of SHARE meetings
Read the disclaimer