mirror of
https://github.com/moshix/mvs.git
synced 2026-03-02 01:30:28 +00:00
Create ConfiguringRJE.txt
This commit is contained in:
879
ConfiguringRJE.txt
Normal file
879
ConfiguringRJE.txt
Normal file
@@ -0,0 +1,879 @@
|
||||
Not clear who the author of this is, but it's not me (moshix)
|
||||
|
||||
|
||||
Configuring RJE on Vintage IBM Systems
|
||||
--------------------------------------
|
||||
|
||||
|
||||
First Edition
|
||||
|
||||
|
||||
This is a compendium of all the knowledge I've gained and can find about how
|
||||
to configure and run Remote Job Entry terminals on the vintage IBM operating
|
||||
systems DOS, DOS/VS, OS/360, MVS, and VM/370. I expect this body of
|
||||
knowledge of grow and there will be more editions of this document. If
|
||||
you are interested in this subject, you should get the latest version you
|
||||
can find.
|
||||
|
||||
Before we begin, I should probably talk a little bit about what RJE is and
|
||||
what it means on these old systems. Veterans can skip down to the operating
|
||||
system that interests them, or to "Configuring Hercules" below.
|
||||
|
||||
RJE obviously stands for Remote Job Entry. It's simply a way to connect
|
||||
a card reader and printer to an IBM mainframe over a communications link
|
||||
so as to be able to send cards over the line and receive printouts in
|
||||
return. Optionally, most RJE stations can also receive punched cards
|
||||
from mainframe jobs.
|
||||
|
||||
There are very, very few big-iron mainframes in the world still running the
|
||||
old -- sorry, vintage -- operating systems I'm talking about in this
|
||||
document. However, there's a emulator called Hercules that runs on Windows
|
||||
and Linux PCs that fully emulates an IBM System/370. Intrepid mainframe
|
||||
programmers have resurrected the last and greatest versions of all the IBM
|
||||
public domain operating systems and gotten them to run on Hercules. However,
|
||||
most of these systems are not configured "out of the box" to support RJE.
|
||||
That's why you are reading this -- I'll tell you how to get RJE up and
|
||||
running.
|
||||
|
||||
Remote Job Entry requires a host and a client. The host is the OS running
|
||||
in the mainframe. Real-world RJE occurred over bisyncronous lines with
|
||||
modems on each end, usually at a rate not exceeding 9600 bits per second.
|
||||
Hercules does not support a real bisyncronous line with a modem, and this
|
||||
is a good thing. Instead, it emulates such a line over a TCP/IP connection.
|
||||
This is much faster and more reliable, and allows you to connect from any
|
||||
internet-connected PC to any internet-connected Hercules mainframe. There
|
||||
are several RJE clients written for Hercules, and they emulate an IBM 3780
|
||||
or 2780 RJE terminal. The one I use is RJE80, since I wrote it. It offers
|
||||
an easy-to-use and pleasant Windows interface. But any working client
|
||||
program should do (there's a command-line version of RJE80 for Windows and
|
||||
Linux too).
|
||||
|
||||
This document doesn't tell you how to connect and use RJE. RJE80 has a
|
||||
help button that will tell you that. Instead, here we talk about RJE
|
||||
from the host's perspective. Each operating system is different in how
|
||||
RJE is configured and operated.
|
||||
|
||||
One thing that is common is how you will tell Hercules about your 2703
|
||||
lines.
|
||||
|
||||
|
||||
Configuring Hercules
|
||||
--------------------
|
||||
|
||||
First, before you can configure any OS for RJE lines, you must configure both
|
||||
Hercules and the OS to support the 2703 interface that RJE expects to use to
|
||||
talk to its remote stations. Hercules is easy to configure. Simply add
|
||||
a line like this one to your hercules.cnf file for each switched (dial-up)
|
||||
line you want to add to your virtual 370:
|
||||
|
||||
0070 2703 dial=in lport=3780
|
||||
|
||||
Pay attention to that lport= number. That's the TCP/IP port that you will
|
||||
later give to RJE80 to inform it where to connect. Each line must have its
|
||||
own unique port, but the number doesn't really matter, except it should be
|
||||
between 1025 and 9999. The 0070 is of course the device number. It's
|
||||
important because you are going to have to configure the OS to recognize the
|
||||
2703 lines you are putting into Hercules. Here's an example of a bank of
|
||||
4 dial-up lines:
|
||||
|
||||
0070 2703 dial=in lport=9001
|
||||
0071 2703 dial=in lport=9002
|
||||
0072 2703 dial=in lport=9003
|
||||
0073 2703 dial=in lport=9004
|
||||
|
||||
What about leased lines? The Hercules emulation supports those too. The only
|
||||
host OS that benefits from leased lines over dial-up is Os/360, which has a
|
||||
three-minute timeout that will disconnect a dial-up line after 3 minutes of
|
||||
inactivity. This is annoying and won't happen on a leased line. Neither MVS,
|
||||
nor DOS/VS, nor VM/370 have this timeout "feature".
|
||||
|
||||
For those hosts dial-up is better. A leased line expects to be connected all the
|
||||
time. RJE80 connections come and go, and are better suited for dialup. If
|
||||
you were connecting two mainframes that would be running all the time, the
|
||||
leased line (non-switched in IBM parlance) makes more sense. Why would you
|
||||
connect two mainframes? Well, VM/370 RSCS can be a host or a client to
|
||||
JES2, so you could connect a VM machine to an MVS one and exchange files and
|
||||
submit jobs without RJE80 or another RJE terminal emulator being involved.
|
||||
Also, there are small RJE emulator programs written by IBM that in theory
|
||||
could also be RJE terminals -- but so far, no one has gotten them to work.
|
||||
Here's now to configure a simple leased line:
|
||||
|
||||
00E0 2703 dial=no lport=7701 rport=8701
|
||||
|
||||
On the other mainframe, the line that connects to this one might look
|
||||
like:
|
||||
|
||||
0070 2703 dial=no lport=8701 rport=7701
|
||||
|
||||
The 2703 has many more options, such as specifying the host name or IP
|
||||
address for security. See the 2703 documentation in the Hercules write-ups
|
||||
for more details.
|
||||
|
||||
|
||||
|
||||
MVS - JES2
|
||||
----------
|
||||
|
||||
MVS 3.8J is probably the most popular OS running (legally at least) on
|
||||
Hercules. MVS supports two job entry systems: JES2 and JES3. I have not
|
||||
worked with JES3 and so here I will only talk about JES2. It's by far the
|
||||
most common JES in use anyway.
|
||||
|
||||
1. Configuring MVS.
|
||||
|
||||
You must be sure that MVS knows about your 2703 lines at the device
|
||||
addresses you put into the Hercules.cnf file. As of this writing, most
|
||||
people that are running MVS 3.8J on Hercules are using Volker's Turnkey MVS
|
||||
#3. This system does NOT have any 2703 lines generated into it, because at
|
||||
the time Volker was putting together his great Turnkey MVS, the 2703 support
|
||||
was nonexistent. Turnkey #4 is reputed to have 2703 lines already built-in.
|
||||
This is a great blessing, for although it's easy to change the stage 1
|
||||
sysgen deck in MVS, actually doing a sysgen or an iogen is a great deal of
|
||||
work for those of us who do not have decades of sysprog experience.
|
||||
|
||||
This document does NOT walk you through the sysgen process. You'll have to
|
||||
consult other documentation for that. I will tell you what to change and
|
||||
how to change it.
|
||||
|
||||
So...if you are not running Turnkey #3, best to look at your stage 1
|
||||
sysgen I/O configuration and see if there are already lines genned into
|
||||
it. Here's what they look like:
|
||||
|
||||
A switched line:
|
||||
|
||||
IODEVICE +
|
||||
ADDRESS=(070,8),UNIT=BSC2,FEATURE=(AUTOCALL,AUTOANSR),+
|
||||
ADAPTER=BSCA,TCU=2703
|
||||
|
||||
An unswitched line:
|
||||
|
||||
IODEVICE +
|
||||
ADDRESS=(090,8),UNIT=BSC1,ADAPTER=BSCA,TCU=2703
|
||||
|
||||
If your stage 1 sysgen deck doesn't contain these definitions, you'll need
|
||||
to add them and do an IOGEN or a SYSGEN of MVS. Good luck, and may the
|
||||
ghost of Thomas Watson have mercy on your frail and quivering soul.
|
||||
|
||||
2. Configuring JES2.
|
||||
|
||||
Once your sysgen is done...there, that was easy to say...you're ready to
|
||||
move on to configuring JES2. Luckily, you don't have to reconfigure and
|
||||
re-gen it, you just have to modify the JES2PARM member of SYS1.PARMLIB.
|
||||
There's a potential gotcha here, in that in some systems the JES2PARM
|
||||
that's in SYS1.PARMLIB isn't the one that counts. Often, it's kept in
|
||||
a dataset called SYS1.JES2PARM. If this dataset exists on your system,
|
||||
then it's probably the one that JES2 is looking at to configure itself.
|
||||
Modify it instead, and if you totally blow it, you can restore from the
|
||||
saved copy in SYS1.PARMLIB.
|
||||
|
||||
You need to add a set of parameters for each line you want to use. Here
|
||||
is the model:
|
||||
|
||||
&NUMLNES=1
|
||||
LINE1 UNIT=070,EBCDIC,TRANSP,LOWSPEED,FDUPLEX,NOADISC,CODEA,IFACEA
|
||||
RMT1 3780,LINE=1,NUMPR=1,NUMPU=1,NUMRD=1,TRANSP,NOTABS
|
||||
R1.RD1 CLASS=A
|
||||
R1.PR1 START,PRWIDTH=132,CLASS=LTZA
|
||||
R1.PU1 CLASS=B
|
||||
DESTID NAME=RMT01,DEST=R1
|
||||
|
||||
If you are adding more than one line, you'll need to modify these parameters
|
||||
like this (example for two lines):
|
||||
|
||||
&NUMLNES=2
|
||||
LINE1 UNIT=070,EBCDIC,TRANSP,LOWSPEED,FDUPLEX,NOADISC,CODEA,IFACEA
|
||||
RMT1 3780,LINE=1,NUMPR=1,NUMPU=1,NUMRD=1,TRANSP,NOTABS
|
||||
R1.RD1 CLASS=A
|
||||
R1.PR1 START,PRWIDTH=132,CLASS=LTZA
|
||||
R1.PU1 CLASS=B
|
||||
DESTID NAME=RMT01,DEST=R1
|
||||
LINE2 UNIT=071,EBCDIC,TRANSP,LOWSPEED,FDUPLEX,NOADISC,CODEA,IFACEA
|
||||
RMT2 3780,LINE=1,NUMPR=1,NUMPU=1,NUMRD=1,TRANSP,NOTABS
|
||||
R2.RD1 CLASS=A
|
||||
R2.PR1 START,PRWIDTH=132,CLASS=LTZA
|
||||
R2.PU1 CLASS=B
|
||||
DESTID NAME=RMT02,DEST=R2
|
||||
|
||||
|
||||
3. Operating RJE with JES2.
|
||||
|
||||
|
||||
Now that JES2 is configured, re-IPL your system. We're now ready to
|
||||
use the line.
|
||||
|
||||
Once JES2 is up, you need to start each line like this:
|
||||
|
||||
$SLINE1
|
||||
|
||||
Now you should be able to start RJE80, enter the host name (or address)
|
||||
and port to connect to, and send a signon card. Actually, the signon
|
||||
card is optional here, because we didn't configure JES2 for a password.
|
||||
You can actually just load some JCL into your RJE80 card reader and SEND
|
||||
it to the mainframe. The printout should arrive automatically on your
|
||||
RJE80 printer window.
|
||||
|
||||
When you disconnect RJE80, the 2703 "hardware" will see this and drop
|
||||
the line, awaiting the next "dial-up" connection.
|
||||
|
||||
To shut down the RJE line, use this command:
|
||||
|
||||
$PLINE1
|
||||
|
||||
If you do need to send a signon card, the format is rather strange:
|
||||
|
||||
/*SIGNON REMOTE1 SECRET
|
||||
|
||||
The REMOTE1 has to start in column 16 and the password (here SECRET) has
|
||||
to start in column 25.
|
||||
|
||||
Sometimes, the line will get confused and not react normally. You can
|
||||
use these commands on the jES2 console to restart it from scratch:
|
||||
|
||||
$ELINE1
|
||||
$PLINE1
|
||||
$SLINE1
|
||||
|
||||
|
||||
The $E command will also interrupt the flow of data to or from the line.
|
||||
JES2 will restart an interrupted printout at the page where it was
|
||||
interrupted.
|
||||
|
||||
That's the essentials of RJE on MVS with JES2 and RJE80.
|
||||
|
||||
I don't know of any MVS 3.8J vintage JES2 or RJE manuals on the net. If
|
||||
you know, please let me know at ceo1944@yahoo.com.
|
||||
|
||||
DOS/VS - POWER/VS
|
||||
-----------------
|
||||
|
||||
RJE is a pretty nice way of interacting with DOS/VS, and it has more value,
|
||||
since there is currently no interactive alternative like RPF for MVS.
|
||||
DOS/VS itself doesn't know RJE. It relies on its spooling software,
|
||||
POWER/VS, to provide RJE support.
|
||||
|
||||
First, of course, DOS/VS must be told about our 2703 lines.
|
||||
|
||||
1. Configuring DOS/VS
|
||||
|
||||
You need to look in your SYSGEN deck to see if any 2703 lines might
|
||||
already be genned there. Here's how they look:
|
||||
|
||||
DVCGEN CHUN=X'070',DVCTYP=2703
|
||||
|
||||
Simple, eh? Well, this is DOS/VS. If there are any, note their device
|
||||
addresses and configure Hercules to match. If not, add some lines and
|
||||
re-do your sysgen. Remember to add devices in device number order.
|
||||
|
||||
|
||||
2. Configuring POWER/VS.
|
||||
|
||||
Take a look in your POWER/VS generation deck. If you didn't have a line
|
||||
in your sysgen, chances are you'll need to configure POWER/VS. In a
|
||||
non-RJE POWER deck, there's only one macro: POWER. The RJE macros are
|
||||
two, and they are added after the end of the POWER macro parameters.
|
||||
Here's an example to match our one 2703 line above:
|
||||
|
||||
LINE001 PLINE ADDR=X'070',PSWRD=SECRET,SWITCH=NO
|
||||
PRMT REMOTE=1,TYPE=3780,PUNROUT=001,LSTROUT=001,LIST=132
|
||||
|
||||
Note that this is a leased line, which works fine with DOS/VS, which
|
||||
doesn't seem to dislike the other end coming and going like some other
|
||||
systems do. If you'd prepher dial-up, change the SWITCH=NO to
|
||||
SWITCH=YES but be sure the Hercules configuration matches.
|
||||
|
||||
Once you have re-generated POWER/VS and re-IPLed, you should be ready
|
||||
to bring up your line and connect RJE80 to it.
|
||||
|
||||
|
||||
3. Operating RJE on POWER/VS.
|
||||
|
||||
I assume you've re-IPLed your DOS/VS system, and brought up POWER/VS
|
||||
in its partition according to your tastes. Now, there's at least
|
||||
one RJE line generated into it. To start the line listening, use
|
||||
this command:
|
||||
|
||||
S RJE,070,SECRET
|
||||
|
||||
Obviously, use the device address of the real line you want in place of the
|
||||
070. The SECRET parameter is a password that will override the password you
|
||||
gave when you generated the line. This parameter is optional.
|
||||
|
||||
To see the RJE queues, do this:
|
||||
|
||||
D RJE
|
||||
|
||||
Now, fire up RJE80 or the client of your choice and connect to the host
|
||||
and port. The first card you must send will be a signon card:
|
||||
|
||||
* .. SIGNON 1 SECRET
|
||||
|
||||
You can, and should, follow that with a card to start the writer, which
|
||||
doesn't start automatically:
|
||||
|
||||
* .. S LST
|
||||
|
||||
Now, if you load jobs into the card reader and SEND them to DOS/VS, you
|
||||
will receive the output automatically on your RJE80 printer and punch.
|
||||
Each job should be surrounded by JECL. Here's an example:
|
||||
|
||||
* $$ JOB JNM=LVTOC,USER='DUTCH',CLASS=0,DISP=D
|
||||
* $$ LST LST=00E,CLASS=A,DISP=D,JSEP=0
|
||||
// JOB LVTOC - VOLUME VTOC DISPLAY UTILITY
|
||||
// ASSGN SYS004,X'131'
|
||||
// ASSGN SYS005,X'00E'
|
||||
// EXEC PGM=LVTOC
|
||||
/*
|
||||
/&
|
||||
* $$ EOJ
|
||||
|
||||
There's a gotcha. If your JECL asks for a form, as in this
|
||||
example:
|
||||
|
||||
* $$ LST LST=00E,CLASS=A,DISP=D,JSEP=0,FORM=0001
|
||||
|
||||
You'll get a message on the printer asking you to change the forms.
|
||||
You need to supply this command to tell POWER/VS to go ahead and
|
||||
send you the printout:
|
||||
|
||||
* .. G LST
|
||||
|
||||
To signoff the line, use the signoff command:
|
||||
|
||||
* .. SIGNOFF
|
||||
|
||||
You can, from the RJE station or the DOS console, display the
|
||||
contents of your queues:
|
||||
|
||||
D LST
|
||||
D RDR
|
||||
|
||||
To stop the line from the DOS console, use
|
||||
|
||||
P 070
|
||||
|
||||
You may need to stop and re-start the line if it becomes confused
|
||||
and stops working right.
|
||||
|
||||
That's the essentials of using RJE with DOS/VS POWER/VS.
|
||||
|
||||
For more details, see the POWER/VS manual online at www.bitsavers.org.
|
||||
|
||||
|
||||
VM/370 - RSCS
|
||||
-------------
|
||||
|
||||
VM/370 is an interactive system, so one could rightly ask what use RJE might
|
||||
have connected with it. The answer is mainly file transfer. The part of VM
|
||||
that supports RJE terminals is RSCS, the Remote Spooling Communication
|
||||
System. An RJE terminal like the 3780 can connect to an RJE line and send
|
||||
card decks from its reader to the virtual reader of a virtual machine, and
|
||||
it can receive printouts and punched cards from the output queues of any
|
||||
virtual machine. On a modern PC using Hercules, there are probably better
|
||||
ways to get data into VM, but RJE will certainly work. In the olden days,
|
||||
this form of file transfer made good sense in some situations. The RSCS
|
||||
system seems primarily designed to connect mainframe to mainframe though, and
|
||||
we will be discussing that possibility also.
|
||||
|
||||
|
||||
1. Configuring VM/370.
|
||||
|
||||
You need to modify your sysgen specifications in DMKRIO ASSEMBLE to include
|
||||
a 2703 bisync line or lines if it doesn't contain some already. Type 2701
|
||||
lines won't do the trick -- it needs to be a 2703. This is what the spec
|
||||
looks like:
|
||||
|
||||
RDEVICE ADDRESS=(070,16),DEVTYPE=2703,ADAPTER=BSCA
|
||||
RCTLUNIT ADDRESS=070,CUTYPE=2703,FEATURE=16-DEVICE
|
||||
|
||||
This specifies 16 2703 BSCA lines at device number 070.
|
||||
|
||||
With this in DMKRIO ASSEMBLE, do a sysgen and re-IPL VM/370. That part
|
||||
of the job is done.
|
||||
|
||||
2. Configuring RSCS.
|
||||
|
||||
These examples are taken using Andy Norrie's 4-pack VM/370 system, which
|
||||
has an RSCS virtual machine built into it, with the RSCS software loaded
|
||||
onto its own minidisk. However, RSCS isn't quite ready to run correctly
|
||||
in the current incarnation of the 4-pack system. Here's what needs to be
|
||||
done.
|
||||
|
||||
First, be sure that the RSCS virtual machine has the lines you need.
|
||||
Logon as MAINT, and edit your directory file (VM50 DIRECT on the 4-pack
|
||||
system). Here is the full RSCS user parameters I use:
|
||||
|
||||
USER RSCS RSCS 2M 16M
|
||||
ACCOUNT RSCS RSCS
|
||||
IPL CMS
|
||||
OPTION ECMODE
|
||||
CONSOLE 009 3215
|
||||
SPOOL 001 2540 READ A
|
||||
SPOOL 00C 2540 READ A
|
||||
SPOOL 00D 2540 PUNCH A
|
||||
SPOOL 00E 1403 A
|
||||
MDISK 191 3350 141 005 VM50-2 WR READ WRITE ALL
|
||||
MDISK 192 3350 146 015 VM50-2 WR READ WRITE ALL
|
||||
LINK MAINT 190 190 RR
|
||||
LINK MAINT 194 194 RR
|
||||
LINK MAINT 19D 19D RR
|
||||
LINK MAINT 19E 19E RR
|
||||
DEDICATE 0B1 070
|
||||
DEDICATE 0B2 071
|
||||
DEDICATE 0B3 072
|
||||
DEDICATE 0B4 073
|
||||
DEDICATE 0B5 074
|
||||
|
||||
Logoff MAINT and logon to the RSCS user virtual machine.
|
||||
|
||||
Now, you need to configure the RSCS macros. The main one is called
|
||||
AXSLINKS COPY. It defines all the nodes in the RSCS network for this
|
||||
machine. Here is a sample:
|
||||
|
||||
GENLINK ID=MYVMSYS,TYPE=DMTNPT
|
||||
GENLINK ID=DIALUP1,TYPE=DMTNPT,LINE=0B1
|
||||
GENLINK ID=DIALUP2,TYPE=DMTNPT,LINE=0B2
|
||||
GENLINK ID=DIALUP3,TYPE=DMTNPT,LINE=0B3
|
||||
GENLINK ID=DIALUP4,TYPE=DMTNPT,LINE=0B4
|
||||
GENLINK ID=HISVM,TYPE=DMTSML,KEEP=5,LINE=0B5,TASK=SML1
|
||||
GENLINK
|
||||
GENLINK
|
||||
|
||||
This defines 5 lines, 4 dial-up and 1 leased. The first entry supplies the
|
||||
name of our node - MYVMSYS in this case. The next 4 are the 4 switched
|
||||
lines. The fifth line is a potential leased line to another VM or MVS
|
||||
system. The last two entries are blank to provide "expansion slots" so that
|
||||
for experimental purposes we could define new lines on the fly in RSCS.
|
||||
|
||||
The other file to change is named LAXLINES COPY. Here you define all
|
||||
the lines that RSCS can use.
|
||||
|
||||
GENLINE LINE=0B1
|
||||
GENLINE LINE=0B2
|
||||
GENLINE LINE=0B3
|
||||
GENLINE LINE=0B4
|
||||
GENLINE LINE=0B5
|
||||
|
||||
Once those are changed, we are ready to generate. RSCS in the 4-pack system
|
||||
comes with a 5-cylinder minidisk. We first need to change that so that the
|
||||
CMS filesystem fits on 4 of those cylinders and the 5th is reserved for
|
||||
an IPLable copy of our RSCS system. An easy way to do this is to use a tape
|
||||
to backup, then format and restore our RSCS files. Put an empty tape on
|
||||
a drive, ATTACH it to virtual device 181 for RSCS, then back it up, then
|
||||
format our drive and restore the files. Here are the commands:
|
||||
|
||||
REL B
|
||||
REL D
|
||||
VMFPLC2 DUMP * * A
|
||||
FORMAT 191 A 04
|
||||
REWIND 181
|
||||
VMFPLC2 LOAD
|
||||
ACC 192 B/A
|
||||
ACC 194 D/A
|
||||
|
||||
You are now ready to generate RSCS itself. And you have a good backup!
|
||||
Here is the sequence of commands to execute. Since this may be done
|
||||
again, I put them all into an EXEC and called it RSCSGEN EXEC.
|
||||
|
||||
ERASE DMTLOC MACLIB
|
||||
MACLIB GEN DMTLOC AXSLINKS LAXLINES TAGQUEUE
|
||||
EXEC VMFASM DMTSYS DMTR60
|
||||
CP CLOSE RDR
|
||||
CP PURGE RDR
|
||||
CP CLOSE PUN
|
||||
CP PURGE PUN
|
||||
CP SPOOL PUN TO * CLASS A
|
||||
CP SPOOL PRT FOR * CLOSE
|
||||
VMFLOAD DMTLOAD DMTR60
|
||||
CP CLOSE RDR
|
||||
CP SPOOL PUN OFF
|
||||
CP IPL C CLEAR
|
||||
|
||||
Once that last IPL gets executed, you'll get asked four important questions.
|
||||
Here they are and the correct answers:
|
||||
|
||||
DMTINI407R REWRITE THE NUCLEUS ?
|
||||
yes
|
||||
DMTINI408R IPL DEVICE ADDRESS =
|
||||
191
|
||||
DMTINI409R NUCLEUS CYL ADDRESS =
|
||||
4
|
||||
DMTINI410R ALSO IPL CYLINDER 0 ?
|
||||
yes
|
||||
|
||||
Now RSCS will write itself onto that 5th cylinder of our minidisk, and
|
||||
it will also run for the first time. You'll see these messages:
|
||||
|
||||
RDR 001 DETACHED
|
||||
RDR 001 DEFINED
|
||||
0001 FILE PURGED
|
||||
11:39:49
|
||||
|
||||
MSG FROM RSCS : DMTAXS103E FILE 0007 REJECTED...
|
||||
|
||||
RSCS (REL 6, LEV 0, 02/01/04) READY
|
||||
|
||||
That "FILE REJECTED" message looks bad but it's in fact harmless, and
|
||||
you won't be seeing it again unless you do another RSCSGEN.
|
||||
|
||||
3. Operating RSCS.
|
||||
|
||||
There are a number of commands you can enter in the RSCS virtual machine.
|
||||
First, you'll probably want to start your dial-up lines:
|
||||
|
||||
START DIALUP1
|
||||
START DIALUP2
|
||||
|
||||
Now you are ready to connect RJE80 to one of these lines for some file
|
||||
transfer action. The first card you send must be a signon card:
|
||||
|
||||
SIGNON DIALUP1 3780 PCHY
|
||||
|
||||
This is about the minimum required. The DIALUP1 is the link name, it
|
||||
must match the line you connected to. You must tell RSCS what device
|
||||
you are emulating (notice that you didn't say that during the gen, unlike
|
||||
all the other OSes). The PCHY is telling RSCS you have a punch available,
|
||||
if you don't do this, it will assume there is no punch device. Other
|
||||
possible options include TRSY for transparency, and PWD=SECRET for a
|
||||
password if one is required.
|
||||
|
||||
You now are connected to RSCS. It will print a confirmation message
|
||||
for you.
|
||||
|
||||
The cards you send will either be a file to transfer to a user (or virtual
|
||||
machine), or commands to RSCS itself. RSCS tells a file by an ID card
|
||||
that precedes it. The format of this ID card is
|
||||
|
||||
ID USERNAME
|
||||
|
||||
There is "ID" in columns 1 and 2, seven blanks, and the username or name
|
||||
of the virtual machine to send the card deck to. Fail to get the username
|
||||
in the right column and RSCS will not recognize this as an ID card and will
|
||||
complain about "INVALID COMMAND ID" and "ID CARD MISSING - INPUT FILE
|
||||
PURGED". Here's an interesting fact: there is no end-of-file marker. At
|
||||
least, not that I can see from the RSCS code -- I don't have an RSCS manual.
|
||||
The end of file is the end of cards in the card reader hopper.
|
||||
|
||||
If your first card isn't an ID card, it's an RSCS command. These are a
|
||||
subset of the commands the RSCS operator can enter at the RSCS console.
|
||||
|
||||
To signoff, use this command:
|
||||
|
||||
/*SIGNOFF
|
||||
|
||||
Here is a partial list of RSCS commands which are known to work:
|
||||
|
||||
QUERY <linkid> STAT
|
||||
QUERY <linkid> QUEUE
|
||||
QUERY <linkid> DEF
|
||||
QUERY SYSTEM [ACTIVE]
|
||||
QUERY FILE <spoolid> STAT
|
||||
QUERY FILE <spoolid> RSCS
|
||||
QUERY FILE <spoolid> VM
|
||||
START <linkid> LINE nnn (2780/3780 terminal)
|
||||
START <linkid> PARM Mid Bxxx <password> (...HASP host)
|
||||
START <linkid> PARM Hid Bxxx <password> (...HASP station)
|
||||
START <linkid> PARM Rid Bxxx <password> (...RES station)
|
||||
START <linkid> PARM Aid Bxxx <password> (...ASP station)
|
||||
(id must be 2 bytes and match other side, xxx is buffersize)
|
||||
CHANGE <linkid> <spoolid> PRIORITY p CLASS c COPY nn HOLD NOHOLD
|
||||
TRACE ALL
|
||||
TRACE ERRORS
|
||||
TRACE END
|
||||
FLUSH <linkid>
|
||||
HOLD <linkid>
|
||||
DRAIN <linkid> (brings down the link)
|
||||
DISCONN (this brings down RSCS)
|
||||
MSG <linkid> text...
|
||||
CMD <linkid> command...
|
||||
DEFINE <linkid> TYPE DMTSML LINE nnn CLASS c TASK id PARM ...
|
||||
DEFINE <linkid> TYPE DMYNPT LINE nnn CLASS c TASK id PARM ...
|
||||
DELETE <linkid>
|
||||
PURGE <linkid> <spoolid>
|
||||
FWDSPACE <linkid>
|
||||
BACKSPAC <linkid>
|
||||
|
||||
To connect two mainframes, I'll use an example connecting two VM/370 machines
|
||||
together. We'll use the leased lines to do this. Once both machines are
|
||||
started, and a TCP/IP link established between their Hercules 370s, you can
|
||||
start the two lines. Note that in order to do this, both machines must have
|
||||
different node names and the name of the other's node must in the AXSLINKS
|
||||
COPY file. (Or you could use the DEFINE command above but lines and nodes
|
||||
you DEFINE won't be there next time you start RSCS.)
|
||||
|
||||
One system, let's say it's ours, will be the master station and the other
|
||||
will be the slave. Let's call the other system HISVM for example.
|
||||
Here's how we start up the master on our RSCS console:
|
||||
|
||||
START HISVM PARM M01 B256 SECRET
|
||||
|
||||
Now, over on the other system enter this command:
|
||||
|
||||
START MYVMSYS PARM H01 B256 SECRET
|
||||
|
||||
Note that each start names the other's system, and that the 01 after the
|
||||
M or H is an ID code that must match between the two systems. SECRET represents
|
||||
a password which must also match of course. Once the two machines are talking
|
||||
over the link, you can use regular CP commands to send files. Let's say I want
|
||||
to send a set of JCL over to user DUTCH on HISVM. It would take three commands
|
||||
from my CMS session:
|
||||
|
||||
TAG DEV PUN HISVM DUTCH
|
||||
SPOOL PUN TO RSCS
|
||||
PUNCH MYSAMPLE JCL (NOH
|
||||
|
||||
The file that was in MYSAMPLE JCL on my machine will appear in user DUTCH's
|
||||
virtual reader without a header (the NOH option) over on the HISVM machine.
|
||||
|
||||
Use the DISCONN command to shut down the RSCS virtual machine. To start
|
||||
it back up, signon as the RSCS user but specify NOIPL in the LOGON:
|
||||
|
||||
LOGON RSCS RSCS NOIPL
|
||||
|
||||
Then, IPL from device 191 instead and RSCS will IPL and run.
|
||||
|
||||
That's the essentials of configuring and running RJE on VM/370.
|
||||
|
||||
I don't know of any VM/370 R6 vintage RSCS or RJE manuals on the net. If
|
||||
you know, please let me know at ceo1944@yahoo.com.
|
||||
|
||||
|
||||
OS/360 - RJE
|
||||
------------
|
||||
|
||||
OS/360 was probably the first IBM operating system to support RJE over
|
||||
bisync lines. It shows. Not only will you probably have to do a
|
||||
sysgen to get the 2703 lines into the OS, but you also have to do
|
||||
through a fairly extensive generation and configuration of RJE itself.
|
||||
|
||||
1. Configure OS/360.
|
||||
|
||||
RJE is supported under MFT or MVT. I have not tried the MFT version.
|
||||
The instructions that follow are for an OS/MVT system. I don't think
|
||||
there's much difference in the setup, but who runs MFT anyway?
|
||||
|
||||
All you have to do with OS/MVT itself is to add some lines to the
|
||||
stage 1 sysgen deck and sysgen the system. Sounds easy enough, doesn't
|
||||
it? Only if you've never done an OS/360 sysgen! Here's how the
|
||||
definition of the 2703 lines should look:
|
||||
|
||||
IOCONTRL UNIT=2703,ADDRESS=070
|
||||
IODEVICE UNIT=BSC2,ADDRESS=(070,16),ADAPTER=BSCA
|
||||
|
||||
Another thing you must be sure of is that RJE support is included in the
|
||||
operating system. The OPTIONS parameter of the SCHEDULR macro is where
|
||||
it's specified. Mine looks like this: OPTIONS=(LOG,RJE). Having made
|
||||
sure your stage 1 deck is correct, go and do your sysgen and come back.
|
||||
|
||||
We're all ready to proceed now, right? Okay, on to RJE itself.
|
||||
|
||||
|
||||
2. Configure RJE.
|
||||
|
||||
The system I run at home lives on 2314 drives, so the JCL I'll be
|
||||
using as examples are for those. There really shouldn't be any
|
||||
significant differences.
|
||||
|
||||
My RJE system lives on a disk all by itself, called RJE001. In fact,
|
||||
that's a bit of wasted space even on a 2314 drive, on a 3330 you won't
|
||||
use but about 10 percent of the available space.
|
||||
|
||||
The first step is to generate RJE. Have a look at my RJE generation JCL:
|
||||
|
||||
//RJEASLE JOB (101),CEO,MSGLEVEL=(1,1),CLASS=A,MSGCLASS=A
|
||||
//STEP0 EXEC PGM=IEFBR14
|
||||
//DD1 DD DSN=RJETEMP,UNIT=2314,VOL=SER=WORK03,DISP=(OLD,DELETE)
|
||||
//STEP1 EXEC PGM=IEUASM,PARM='LIST,NOLOAD,DECK,NOXREF',REGION=256K
|
||||
//SYSPRINT DD SYSOUT=A
|
||||
//SYSLIB DD DSN=SYS1.MACLIB,UNIT=2314,VOL=SER=SYSRES,DISP=SHR
|
||||
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(35,10)),VOL=SER=WORK01
|
||||
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(35,10)),VOL=SER=WORK02
|
||||
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(50,10)),VOL=SER=WORK02
|
||||
//SYSPUNCH DD DSNAME=RJETEMP(IHKAARJE),DISP=(NEW,KEEP),
|
||||
// SPACE=(TRK,(10,1,2)),UNIT=2314,VOL=SER=WORK03
|
||||
//SYSIN DD *
|
||||
LINE1 RJELINE DDLINE=LINE1,DDSYSIN=LINE1IN,LERB=(255,10,5,250)
|
||||
LINE2 RJELINE DDLINE=LINE2,DDSYSIN=LINE2IN,LERB=(255,10,5,250)
|
||||
LINE3 RJELINE DDLINE=LINE3,DDSYSIN=LINE3IN,LERB=(255,10,5,250)
|
||||
LINE4 RJELINE DDLINE=LINE4,DDSYSIN=LINE4IN,LERB=(255,10,5,250)
|
||||
TERM1 RJETERM TYPE=2780,PUNCH=YES,PRTSZ=120
|
||||
TERM2 RJETERM TYPE=2780,PUNCH=YES,PRTSZ=120
|
||||
TERM3 RJETERM TYPE=2780,PUNCH=YES,PRTSZ=120
|
||||
TERM4 RJETERM TYPE=CPU,PUNCH=YES,PRTSZ=120
|
||||
RJEUSER 16,GST,111,CPU,222,CEO,333
|
||||
RJETABL JOB=32,SYSPRT=A,SYSPCH=B,SYSUSER=U,SYSRJE=R,BUFNO=32
|
||||
END
|
||||
/*
|
||||
//STEP5 EXEC PGM=LINKEDIT,PARM=(XREF,LIST,DC,NCAL,LET)
|
||||
//SYSLMOD DD DSN=SYS1.TELCMLIB,DISP=OLD
|
||||
/*
|
||||
//SYSLIB DD DSN=RJETEMP,DISP=(OLD,DELETE),UNIT=2314,VOL=SER=WORK03
|
||||
//SYSUT1 DD SPACE=(TRK,(10,10)),UNIT=SYSDA
|
||||
//SYSPRINT DD SYSOUT=A
|
||||
//SYSLIN DD *
|
||||
INCLUDE SYSLIB(IHKAARJE)
|
||||
NAME IHKAARJE(R)
|
||||
/*
|
||||
//STEP6 EXEC PGM=LINKEDIT,PARM=(XREF,LIST,DC)
|
||||
//SYSLMOD DD DSN=SYS1.LINKLIB,DISP=OLD
|
||||
//SYSLIB DD DSN=SYS1.TELCMLIB,DISP=OLD
|
||||
//SYSUT1 DD SPACE=(TRK,(40,10)),UNIT=SYSDA
|
||||
//SYSPRINT DD SYSOUT=A
|
||||
//
|
||||
|
||||
|
||||
You should be able to use this pretty much unaltered except for the RJELINE,
|
||||
RJETERM, and RJEUSER macros to define the lines you want, the terminals that
|
||||
can connect to them, and the user IDs and passwords. It's very odd that the
|
||||
user IDs and passwords are limited to 3 characters apiece, but it's true.
|
||||
|
||||
Having generated the RJE system, the next step is to initialize the
|
||||
RJE001 disk datasets. This is the JCL to do that:
|
||||
|
||||
//RJEINIT JOB (101),CEO,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)
|
||||
//STEP1 EXEC PGM=IEHPROGM
|
||||
//SYSPRINT DD SYSOUT=A
|
||||
//DD1 DD VOL=SER=RJE001,DISP=OLD,UNIT=SYSDA
|
||||
//SYSIN DD *
|
||||
SCRATCH DSNAME=SYS1.IHKFSTB,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKJEDTB,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKUDRTB,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKTDRTB,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKTXTTB,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKMSGSL,VOL=SYSDA=RJE001,PURGE
|
||||
SCRATCH DSNAME=SYS1.IHKBRDSL,VOL=SYSDA=RJE001,PURGE
|
||||
/*
|
||||
//STEP2 EXEC PGM=IHKINTAB
|
||||
//SYSABEND DD SYSOUT=A
|
||||
//IHKFSTDD DD DSN=SYS1.IHKFSTB,DISP=(NEW,CATLG),SPACE=(24,(11,5)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001,DCB=DSORG=DA
|
||||
//IHKJEDDD DD DSN=SYS1.IHKJEDTB,DISP=(NEW,CATLG),SPACE=(98,(11,5)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001,DCB=DSORG=DA
|
||||
//IHKUDRDD DD DSN=SYS1.IHKUDRTB,DISP=(NEW,CATLG),SPACE=(18,(15,5)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001,DCB=DSORG=DA
|
||||
//IHKTDRDD DD DSN=SYS1.IHKTDRTB,DISP=(NEW,CATLG),SPACE=(80,(15,5)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001,DCB=DSORG=DA
|
||||
//STEP3 EXEC PGM=IHKCDBMI
|
||||
//SYSABEND DD SYSOUT=A
|
||||
//IHKTXTDD DD DSN=SYS1.IHKTXTTB,DISP=(NEW,CATLG),SPACE=(60,(161,20)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001,DCB=DSORG=DA
|
||||
//IHKMSGDD DD DSN=SYS1.IHKMSGSL,DISP=(NEW,CATLG),SPACE=(750,(1,1)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001
|
||||
//IHKBRDDD DD DSN=SYS1.IHKBRDSL,DISP=(NEW,CATLG),SPACE=(400,(1,1)),
|
||||
// UNIT=SYSDA,VOL=SER=RJE001
|
||||
//
|
||||
|
||||
|
||||
Whew! It's a good thing someone already did this. It was a pain to
|
||||
figure all this out and get it working, although I copied a great deal
|
||||
of this JCL from the OS/360 RJE manual available at bitsavers.org.
|
||||
|
||||
Now that the RJE datasets are ready, we need to load up a start procedure
|
||||
of the RJE system. This will do it:
|
||||
|
||||
//RJEPROC JOB (1),CEO,MSGLEVEL=(1,1)
|
||||
//STEP1 EXEC PGM=IEBUPDTE
|
||||
//SYSPRINT DD SYSOUT=A
|
||||
//SYSABEND DD SYSOUT=A
|
||||
//SYSUT1 DD DISP=SHR,DSN=SYS1.PROCLIB,UNIT=SYSDA,VOL=SER=SYSRES
|
||||
//SYSUT2 DD DISP=SHR,DSN=SYS1.PROCLIB,UNIT=SYSDA,VOL=SER=SYSRES
|
||||
//SYSIN DD DATA
|
||||
./ ADD NAME=RJE
|
||||
//RJE EXEC PGM=IHKRJBGN,REGION=128K,
|
||||
// PARM='000999030010249050322314 '
|
||||
//* APPTTTSSSQQQIIIRRRCLUUUUUUUU
|
||||
//* A = ACCOUNTING REQD
|
||||
//* PP = PRIORITY
|
||||
//* TTT = TIMELIMIT
|
||||
//* SSS = SYSOUT PRI ALLOC
|
||||
//* QQQ = SYSOUT SEC ALLOC
|
||||
//* III = INTERPRETER PRIORITY
|
||||
//* RRR = REGION SIZE
|
||||
//* C = COMMAND AUTHORITY
|
||||
//* L = LABEL PROCESSING
|
||||
//* UUUUUUUU = DEFAULT UNIT
|
||||
//IEFRDER DD DUMMY
|
||||
//IEFDATA DD UNIT=SYSDA,VOL=SER=RJE001,
|
||||
// SPACE=(80,(500,500),RLSE,CONTIG),
|
||||
// DCB=(BUFNO=2,LRECL=80,BLKSIZE=80,RECFM=F,BUFL=80)
|
||||
//IEFPDSI DD DSN=SYS1.PROCLIB,DISP=SHR
|
||||
//IHKFSTDD DD DSN=SYS1.IHKFSTB,DISP=OLD,DCB=DSORG=DA
|
||||
//IHKJEDDD DD DSN=SYS1.IHKJEDTB,DISP=OLD,DCB=DSORG=DA
|
||||
//IHKUDRDD DD DSN=SYS1.IHKUDRTB,DISP=OLD,DCB=DSORG=DA
|
||||
//IHKTDRDD DD DSN=SYS1.IHKTDRTB,DISP=OLD,DCB=DSORG=DA
|
||||
//IHKTXTDD DD DSN=SYS1.IHKTXTTB,DISP=OLD,DCB=DSORG=DA
|
||||
//IHKMSGDD DD DSN=SYS1.IHKMSGSL,DISP=OLD
|
||||
//IHKBRDDD DD DSN=SYS1.IHKBRDSL,DISP=OLD
|
||||
//LINE1IN DD DISP=(OLD,KEEP),VOL=SER=RJE001,SPACE=(TRK,(5,20)),
|
||||
// UNIT=SYSDA,DCB=BLKSIZE=400
|
||||
//LINE2IN DD DISP=(OLD,KEEP),VOL=SER=RJE001,SPACE=(TRK,(5,20)),
|
||||
// UNIT=SYSDA,DCB=BLKSIZE=400
|
||||
//LINE3IN DD DISP=(OLD,KEEP),VOL=SER=RJE001,SPACE=(TRK,(5,20)),
|
||||
// UNIT=SYSDA,DCB=BLKSIZE=400
|
||||
//LINE4IN DD DISP=(OLD,KEEP),VOL=SER=RJE001,SPACE=(TRK,(5,20)),
|
||||
// UNIT=SYSDA,DCB=BLKSIZE=400
|
||||
//LINE1 DD UNIT=070
|
||||
//LINE2 DD UNIT=071
|
||||
//LINE3 DD UNIT=072
|
||||
//LINE4 DD UNIT=073
|
||||
./ ENDUP
|
||||
/*
|
||||
//
|
||||
|
||||
Now, at last, we should be ready to bring up RJE and connect to it.
|
||||
|
||||
|
||||
3. Operating OS/360 RJE.
|
||||
|
||||
You should IPL your OS/360 system again, and this time, re-format your
|
||||
spool space. In other words, instead of replying U to this message:
|
||||
|
||||
REPLY WITH SET PARAMETERS OR U
|
||||
|
||||
like you usually do, reply Q=(,F). You don't have to do this again, unless
|
||||
RJE goes catatonic on you, in which case, re-formatting the OS spool queues
|
||||
again may be the only way to recover. You'll know this is the case if RJE
|
||||
gives a WRONG LENGTH RECL error on one of its files every time you try and
|
||||
start it. Re-IPLing with Q=(,f) seems to fix this bug. Good old OS/360,
|
||||
flaky as ever.
|
||||
|
||||
Once the usual readers and writers are up and running, you are ready
|
||||
to start RJE. This is the command:
|
||||
|
||||
S RJE,,,FORM
|
||||
|
||||
The FORM tells RJE to format its own datasets. In contrast to the many
|
||||
other chatty IBM programs, RJE starts up silently. If you do a D A from
|
||||
the console you should see RJE as a task among the others.
|
||||
|
||||
You are now ready to connect RJE80 to OS/360. The first two cards you
|
||||
should submit to it are:
|
||||
|
||||
.. RJSTART TERM1
|
||||
.. LOGON GST,111
|
||||
|
||||
...where TERM1 is the name of the terminal from your RJETERM macros,
|
||||
and GST,111 is a valid userid and password from the RJEUSER macros.
|
||||
OS/360 will confirm on the printer if you are successully logged on.
|
||||
You can then submit jobs and see results on the printer and punch.
|
||||
To log off, it also takes two cards:
|
||||
|
||||
.. LOGOFF
|
||||
.. RJEND
|
||||
|
||||
At the console, and from the reader, RJE will accept a number of useful
|
||||
commands. Some are:
|
||||
|
||||
SHOW USERS
|
||||
SHOW LINES
|
||||
SHOW LERB
|
||||
SHOW BRDCST
|
||||
BRDCST 00,'MESSAGE TO USERS'
|
||||
|
||||
to stop RJE, just tell it to stop:
|
||||
|
||||
P RJE
|
||||
|
||||
That's the essentials of configuring and running OS/360 RJE.
|
||||
|
||||
For more details on configuring and running OS/360 RJE, please consult the
|
||||
OS/360 RJE manual online at www.bitsavers.com.
|
||||
Reference in New Issue
Block a user