![]() |
|
|
|
|
|
|
VM/COM, September 1985
1
-
OO OO OOO OOO // OOOOOOO OOOOOOO OOO OOO
OO OO OO OOO OO // OO OO OO OO OO OOO OO
OO OO OO O OO // OO OO OO OO O OO
oo oo oo oo // oo oo oo oo oo
oooo oo oo // oo oo oo oo oo oo
oo oo oo // ooooooo ooooooo oo oo
0 ------------------------------------------------------------
September 1985 edition Volume 2 Number 4
- CsNews Network Newsletter
-
-
Staff:
0 Michele Robinson CSMICH at MAINE Editor
Andrew T. Robinson ANDY at MAINE CsNews Director
David Eckhardt DAE at PSUVAX1 Assistant Editor
Prof. G. Markowsky MARKOV at MAINE Faculty Advisor
-
0 Ôçççççççççççççççççççççççççççççççççççççççççççççççççççççççä
³ Newsletter article contribution Userid: CSNEWS@MAINE ³
³ ³
³ Contributions from readers welcomed and encouraged! ³
¨ççççççççççççççççççççççççççççççççççççççççççççççççççççççç]
1
0 Vm-Com Issue 2.4
-
0 Table of Contents
+ _____ __ ________
- Introduction to Vm/Com 2.4 . . . . . . . . . . . . . . . 1
CSNEWS Notes . . . . . . . . . . . . . . . . . . . . . . 2
The GNU Manifesto (part 1) . . . . . . . . . . . . . . . 4
Turbo Pascal 3.0 . . . . . . . . . . . . . . . . . . . . 8
Interactive System Productivity Facility (part 2) . . . . 9
Programming at the Machine Level (part 2) . . . . . . . . 18
An Evening of Mail with Mr. Abbe . . . . . . . . . . . . 22
OpCodes . . . . . . . . . . . . . . . . . . . . . . . . . 26
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
1
0 Vm-Com Issue 2.4
0 Introduction to Vm/Com 2.4
+ Introduction to Vm/Com 2.4
-
Hello again! Well we're up to September's issue now and
still going strong. My thanks to all of you for your
interest in Vm/Com, to all of our readers, and especially to
our authors and contributors... Now if I could just get you
all to send mail on what you think of our little newsletter.
We'd like to start a 'Letters to the Editor' column.
0 This time around you'll be seeing some fairly large
articles. Included is the first of a three-part article on
a new development called GNU, an article on Turbo Pascal, a
really big article that is a continuation in the ISPF
series, and the second article in the 370 I/O series. For
the humor section this time there is a 'Dear Mr. Abbe'
column and of course once again the ever popular list of
OpCodes.
0 Well untill next time, keep reading and hopefully keep
enjoying!! See ya in 2-5.
0 Michele Robinson,
Editor
-
-
-
-
-
-
-
-
-
-
1
1
0 Vm-Com Issue 2.4
0 CSNEWS Notes
+ CSNEWS Notes
0 Andrew T. Robinson, (ANDY@MAINE)
-
0 Hello, all you people out there in BITLAND! Here we are
again, right on schedule, with another scintillating issue
of Vm/Com. And with every Vm/Com you read, you also get a
dose of the dreaded CSNEWS NOTES! So sit back, clear your
mind, and remember: It only hurts when you read it.
0 I am sure after two or three issues you are tired of
hearing about it, but the conversion of the CSNEWS control
program to IBM 370 Assembler is going along fairly swiftly
now. I won't give out a definite time yet, since I once
remember promising a CSNEWS bulletin board by September 1984
which never got put out until February or March. But in any
event, sometime this year you will probably start noticing a
dramatic decrease in response time for CSNEWS commands.
0 Another thing I have been talking about every month is
the CSNEWS user-friendly terminal interface for CMS users.
This interface provides an uninitiated user with the
following capabilities:
0 1. Easy perusal of files on CSNEWS InfoDisk Database Disks
2. Easy-to-use interface for sending, printing, and
receiving files
3. Convenient Personal Disk Management
4. A simple Electronic Mailer, which will send mail to any
BITNET node
5. A simple and easy to use Electronic Conferencing System
6. Easy Address Book (nickname file) maintainance
0 The operative word here is 'easy.' The new system (which
is so user-friendly we even made the name FRIENDLY) is
entirely menu driven (at least in this initial release) and
makes it very simple for even a novice user to use all of
the functions with relative ease. The bad news is, this
system will only be available to MAINE users initially.
Later, when a more advanced version is released (that allows
experienced users to get rid of the damn menus!), it will be
available to other computing centers.
0 FRIENDLY is still being developed, and a few of the
primary functions (the mailer and address book in
particular) are not operational. MAINE users should be
given access to the system sometime in the late summer or
early fall. Keep your eyes on Vm/Com for further
developments.
-
2
1
0 Vm-Com Issue 2.4
0 One final note before I leave you all for another
month... CSNEWS is looking for a few good programmers on
non-IBM VM nodes to write CSNEWS user interface software for
their type of computer/operating system. We already have a
person who will be writing some EXECs for MVS JES2, but we
still need people from Unix, VMS, and other non-IBM nodes to
put in their names!
0 See ya next issue!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0 3
1
0 Vm-Com Issue 2.4
0 The GNU Manifesto
+ The GNU Manifesto
0 Written by Richard M. Stallman
Submitted by Jim Lewis (JWL@UCBKIM.ARPA)
- What's GNU? Gnu's Not Unix!
0 GNU, which stands for Gnu's Not Unix, is the name for the
complete Unix-compatible software system which I am writing
so that I can give it away free to everyone who can use it.
Several other volunteers are helping me. Contributions of
time, money, programs and equipment are greatly needed.
0 So far we have a portable C and Pascal compiler which
compiles for Vax and 68000, an Emacs-like text editor with
Lisp for writing editor commands, a yacc-compatible parser
generator, a linker, and around 35 utilities. A shell
(command interpreter) is nearly completed. When the kernel
and a debugger are written, by the end of 1985 I hope, it
will be possible to distribute a GNU system suitable for
program development. After this we will add a text
formatter, an Empire game, a spreadsheet, and hundreds of
other things, plus on-line documentation. We hope to
supply, eventually, everything useful that normally comes
with a Unix system, and more.
0 GNU will be able to run Unix programs, but will not be
identical to Unix. We will make all improvements that are
convenient, based on our experience with other operating
systems. In particular, we plan to have longer filenames,
file version numbers, a crashproof file system, filename
completion perhaps, terminal-independent display support,
and eventually a Lisp-based window system through which
several Lisp programs and ordinary Unix programs can share a
screen. Both C and Lisp will be available as system
programming languages. We will try to support UUCP, MIT
Chaosnet, and Internet protocols for communication.
0 GNU is aimed initially at machines in the 68000/16000
class, with virtual memory, because they are the easiest
machines to make it run on. The extra effort to make it run
on smaller machines will be left to someone who wants to use
it on them.
- Who Am I?
0 I am Richard Stallman, inventor of the original much-
imitated EMACS editor, formerly at the Artificial
Intelligence Lab at MIT. I have worked extensively on
compilers, editors, debuggers, command interpreters, the
Incompatible Timesharing System and the Lisp Machine
operating system. I pioneered terminal-independent display
0 4
1
0 Vm-Com Issue 2.4
0 support in ITS. Since then I have implemented one
crashproof file system and two window systems for Lisp
machines, and designed a third window system now being
implemented; this one will be ported to many systems
including use in GNU.
- Why I Must Write GNU
0 I consider that the golden rule requires that if I like a
program I must share it with other people who like it.
Software sellers want to divide the users and conquer them,
making each user agree not to share with others. I refuse
to break solidarity with other users in this way. I cannot
in good conscience sign a nondisclosure agreement or a
software license agreement. For years I worked within the
Artificial Intelligence Lab to resist such tendencies and
other inhospitalities, but now they have gone too far: I
cannot remain in an institution where such things are done
for me against my will.
0 So that I can continue to use computers without dishonor,
I have decided to put together a sufficient body of free
software so that I will be able to get along without any
software that is not free. I have resigned from the AI lab
to deny MIT any legal excuse to prevent me from giving GNU
away.
- Why GNU Will Be Compatible with Unix
0 Unix is not my ideal system, but it is not too bad. The
essential features of Unix seem to be good ones, and I think
I can fill in what Unix lacks without spoiling them. And a
system compatible with Unix would be convenient for many
other people to adopt.
- How GNU Will Be Available
0 GNU is not in the public domain. Everyone will be
permitted to modify and redistribute GNU, but no distributor
will be allowed to restrict its further redistribution.
That is to say, proprietary modifications will not be
allowed. I want to make sure that all versions of GNU
remain free.
- Why Many Other Programmers Want to Help
0 I have found many other programmers who are excited about
GNU and want to help.
-
5
1
0 Vm-Com Issue 2.4
0 Many programmers are unhappy about the commercialization
of system software. It may enable them to make more money,
but it requires them to feel in conflict with other
programmers in general rather than feel as comrades. The
fundamental act of friendship among programmers is the
sharing of programs; marketing arrangements now typically
used essentially forbid programmers to treat others as
friends. The purchaser of software must choose between
friendship and obeying the law. Naturally, many decide that
friendship is more important. But those who believe in law
often do not feel at ease with either choice. They become
cynical and think that programming is just a way of making
money.
0 By working on and using GNU rather than proprietary
programs, we can be hospitable to everyone and obey the law.
In addition, GNU serves as an example to inspire and a
banner to rally others to join us in sharing. This can give
us a feeling of harmony which is impossible if we use
software that is not free. For about half the programmers I
talk to, this is an important happiness that money cannot
replace.
- How You Can Contribute
0 I am asking computer manufacturers for donations of
machines and money. I'm asking individuals for donations of
programs and work.
0 One consequence you can expect if you donate machines is
that GNU will run on them at an early date. The machines
should be complete, ready to use systems, approved for use
in a residential area, and not in need of sophisticated
cooling or power.
0 I have found very many programmers eager to contribute
part-time work for GNU. For most projects, such part-time
distributed work would be very hard to coordinate; the
independently-written parts would not work together. But
for the particular task of replacing Unix, this problem is
absent. A complete Unix system contains hundreds of utility
programs, each of which is documented separately. Most
interface specifications are fixed by Unix compatibility.
If each contributor can write a compatible replacement for a
single Unix utility, and make it work properly in place of
the original on a Unix system, then these utilities will
work right when put together. Even allowing for Murphy to
create a few unexpected problems, assembling these
components will be a feasible task. (The kernel will
require closer communication and will be worked on by a
small, tight group.)
-
6
1
0 Vm-Com Issue 2.4
0 If I get donations of money, I may be able to hire a few
people full or part time. The salary won't be high by
programmers' standards, but I'm looking for people for whom
building community spirit is as important as making money.
I view this as a way of enabling dedicated people to devote
their full energies to working on GNU by sparing them the
need to make a living in another way.
- Copyright (c) 1985 Richard M. Stallman
0 Permission is granted to anyone to make or
distribute verbatim copies of this document as
received, in any medium, provided that the
copyright notice and permission notice are
preserved, and that the distributor grants the
recipient permission for further redistribution as
permitted by this notice.
0 Modified versions may not be distributed.
-
ÕThis is part one of a three part article. Watch the next
two issues of Vm/Com for the other parts. -Ed.þ
-
-
-
-
-
-
-
-
-
-
7
1
0 Vm-Com Issue 2.4
0 Turbo Pascal 3.0
+ Turbo Pascal 3.0
0 Richard B. Hudspeth (P0236AS@UMVMA)
-
Turbo Pascal from Borland is the most exciting piece of
software I've seen since, well... ok, maybe it's the most
exciting I've ever seen. Turbo is available for IBM PC's
and compatibles in PC-DOS and MS-DOS and also in CP/M-86 and
CP/M-80 versions. Apart from the technical stuff, Turbo
Pascal has some exciting features that make you almost giddy
just using it. First and foremost is the fact that Turbo is
just about the fastest piece of 1's and 0's I've come
across. In recent benchmark tests conducted by an
independent source (some guy I talked to in the computer
room), compiled Turbo files were found to be only 7 percent
slower than assembler files run on an IBM PC. Everything
connected with Turbo is menu driven, which makes development
and testing a breeze. For those of you who are leery of
Pascal, Turbo offers many extensions to standard Pascal, if
there is such a thing. Another nice feature of Turbo is the
ease with which you can get into the operating system.
0 Turbo has many technical features that put it ahead of
other Pascal compilers. One of the most exciting features
of Turbo is its use of overlays, which allows you to create
programs much larger than can fit in memory. Assembler
procedures can also be easily embedded in your Pascal
programs. Turbo comes on one floppy, and includes several
example Pascal files, some of which display the graphics
capabilities of Turbo, including Turtle Graphics, which is
just about as nifty as you can get. In addition to speed,
Turbo is second to none in price; Borland's price is around
$70, although I got it for $30 mail-order.
0 Borland also has several other packages to supplement
Turbo Pascal. Turbo Toolbox contains some modules that can
be embedded in Pascal programs. One of these is a quicksort.
There is also a Turbo Tutor available that has several nice
sample programs. Turbo Graphix Toolbox has several graphics
routines which include window management routines. All of
these packages are available separately from Turbo Pascal.
- ÕThe origin of most of this information is the Turbo Pascal
3.0 User's Manual. The standard disclaimer applies. -R.H.þ
-
-
- 8
1
0 Vm-Com Issue 2.4
- ÕThis is the second part of the ISPF series started
in issue number 2-2. -Ed.þ
- Interactive System Productivity Facility
+ Interactive System Productivity Facility
0 Cody B. Shive (33000003@UNFVM)
-
Interactive System Productivity Facility (ISPF) is a
system designed to enable using the full-screen capabilities
of IBM systems. ISPF is designed to work with user
dialogues. A dialogue is an application that "converses"
with its user through the use of menu and data-entry panels.
ISPF is used by first invoking it from a menu and then
calling it from functions written in an application language
or the system exec language.
0 Basically, the steps in creating an application
utilizing ISPF's capabilities are not complicated. However,
they require that the programmer be familiar with EXEC2 and
creating MACLIBs (macro libraries). The first step is to
create the menu panel. This panel must be XEDITed using any
file name and a file type of COPY. The panel must contain
several lines that graphically depict what the screen
display will look like. At the end, there must be a
procedure coded in EXEC2 that checks the input from the
panel against valid entries (i.e. numeric data in numeric
fields, etc.). Additionally, if the panel is a menu, the
procedure must call the application function. This function
can be written in any language and compiled; or it can be
written in EXEC2 and left to the command interpreter. The
name of the function must match the CMS file name associated
with its TEXT or EXEC filetype.
0 After creating the panel, the file must be added to a
current library. If no current panel library exists, one
must be created. This is done by using the command, MACLIB
GEN panel-library-name. Then, the panel can be added to the
library by using the command, MACLIB ADD panel-library-name
panel-file-name. Once the panel is added to the library, it
can be modified by XEDITing the library. The panel names
are listed on the last line of the library in the order they
occur in the file. On the following pages is an example of a
typical panel library, with the panels EMPL, EMPLA, EMPLB.
-
-
- 9
1
0 Vm-Com Issue 2.4
0 %-------------------- Employee Records --------------------
+
% Select option ===>_ZCMD
%
% 1 +Modify - Add, Update, or Delete
Employee Records
% 2 +(FUTURE) - Function not yet available
% 3 +(FUTURE) - Function not yet available
% 4 +(FUTURE) - Function not yet available
% 5 +(FUTURE) - Function not yet available
+
+ENTER%END COMMAND+TO TERMINATE.
)PROC
&ZSEL = TRANS( TRUNC (&ZCMD, '.')
1, 'PGM(TRY)' )
)END
//
%-------------------- Employee Serial ---------------------
%Command ===>_ZCMD
+
%Enter Employee Serial below:
+
+
+ Employee Serial%===>_EMPSER+ (Must be 6 numeric digits)
+
+
+
+Press%Enter+to Display Employee Record.
+Enter%End Command+to Return to Previous Menu.
)PROC
VER (&EMPSER,NONBLANK)
VER (&EMPSER,PICT,NNNNNN)
)END
//
-
-
-
-
-
-
-
10
1
0 Vm-Com Issue 2.4
0 %-------------------- Employee Records --------------------
%Command ===>_ZCMD
+
% Employee Serial: &EMPSER
+
+ Type of Change%===>_TYPECHG + (New, Update, or Delete)
+
+ Employee Name:
+ Last %===>_LNAME +
+ First %===>_FNAME +
+ Initial%===>_I+
+
+ Home Address:
+ Street %===>_ADDR1 +
+ City %===>_ADDR2 +
+ State %===>_ADDR3 +
0 + Zip %===>_ADDR4 +
+
+ Home Phone:
+ Area Code %===>_PHA+
+ Local Number%===>_PHNUM +
+
)INIT
.CURSOR = TYPECHG
IF (&PHA = ' ')
&PHA = 904
0 &TYPECHG = TRANS(&TYPECHG N,NEW U,UPDATE D,DELETE)
)PROC
&TYPECHG = TRUNC (&TYPECHG,1)
VER (&TYPECHG,LIST,N,U,D,MSG=EMPX210)
IF (&TYPECHG = N)
0 IF (&CHKTYPE ª= N)
.MSG = EMPX211
IF (&TYPECHG ª= N)
IF (&CHKTYP ª= N)
.MSG = EMPX212
VER (&LNAME,ALPHA)
VER (&FNAME,ALPHA)
VER (&I,ALPHA)
VER (&PHA,NUM)
VER (&PHNUM,PICT,'NNN-NNNN')
IF (&TYPECHG = N,U)
0 VER (&LNAME,NONBLANK,MSG=EMPX214)
VER (&FNAME,NONBLANK,MSG=EMPX213)
VER (&ADDR1,NONBLANK,MSG=EMPX215)
VER (&ADDR2,NONBLANK,MSG=EMPX215)
VER (&ADDR3,NONBLANK,MSG=EMPX215)
)END
//
EMPL EMPLA EMPLB
0 11
1
0 Vm-Com Issue 2.4
- At this point, the programmer should have sufficient
information to create a menu and data-entry panel. To
create a function in COBOL, for example, the programmer must
write a COBOL program that calls various data-entry screens
for user input. Briefly, the Procedure Division must first
call ISPLINK to define the panel variables to ISPF. The
following example shows a short Procedure Division and its
related Working Storage definitions.
0 This function is designed to work with the panel library
and a message library that is set up similar to the way the
panel library was set up. It carries on a dialogue with a
user who inputs an employee serial number on EMPLA and data
on EMPLB.
- WORKING-STORAGE SECTION.
0 * DEFINE STORAGE FOR DIALOG VARIABLES
01 EMPSER PIC X(6) VALUE SPACES.
01 FNAME PIC X(16) VALUE SPACES.
01 LNAME PIC X(16) VALUE SPACES.
01 I PIC X VALUE SPACE.
01 ADDR1 PIC X(40) VALUE SPACES.
01 ADDR2 PIC X(40) VALUE SPACES.
01 ADDR3 PIC X(40) VALUE SPACES.
01 ADDR4 PIC X(40) VALUE SPACES.
01 PHA PIC XXX VALUE SPACES.
01 PHNUM PIC X(8) VALUE SPACES.
01 MSG PIC X(8) VALUE SPACES.
01 TYPECHG PIC X VALUE SPACE.
01 CHKTYPE PIC X VALUE SPACE.
0 * DEFINE LENGTHS FOR DIALOG VARIABLES.
01 LEMPSER PIC 9(6) VALUE 6 COMP.
01 LFNAME PIC 9(6) VALUE 16 COMP.
01 LLNAME PIC 9(6) VALUE 16 COMP.
01 LI PIC 9(6) VALUE 1 COMP.
01 LADDR1 PIC 9(6) VALUE 40 COMP.
01 LADDR2 PIC 9(6) VALUE 40 COMP.
01 LADDR3 PIC 9(6) VALUE 40 COMP.
01 LADDR4 PIC 9(6) VALUE 40 COMP.
01 LPHA PIC 9(6) VALUE 3 COMP.
01 LPHNUM PIC 9(6) VALUE 8 COMP.
01 LTYPECH PIC 9(6) VALUE 1 COMP.
01 LCHKTYP PIC 9(6) VALUE 1 COMP.
-
-
- 12
1
0 Vm-Com Issue 2.4
0 * DEFINE DIALOG VARIABLE NAMES FOR DIALOG SERVICE
* CALLS.
01 NEMPSER PIC X(8) VALUE "(EMPSER)".
01 NFNAME PIC X(7) VALUE "(FNAME)".
01 NLNAME PIC X(7) VALUE "(LNAME)".
01 NI PIC X(3) VALUE "(I)".
01 NADDR1 PIC X(7) VALUE "(ADDR1)".
01 NADDR2 PIC X(7) VALUE "(ADDR2)".
01 NADDR3 PIC X(7) VALUE "(ADDR3)".
01 NADDR4 PIC X(7) VALUE "(ADDR4)".
01 NPHA PIC X(5) VALUE "(PHA)".
01 NPHNUM PIC X(7) VALUE "(PHNUM)".
01 NTYPECH PIC X(9) VALUE "(TYPECHG)".
01 NCHKTYP PIC X(9) VALUE "(CHKTYPE)".
0 * DEFINE DATA ENTRY PANEL NAMES.
01 EMPLA PIC X(8) VALUE "EMPLA ".
01 EMPLB PIC X(8) VALUE "EMPLB ".
0 * DEFINE EMPLOYEE TABLE NAME.
01 EMPLTBL PIC X(8) VALUE "EMPLTBL ".
0 * DEFINE KEY VARIABLES PARAMETER FOR TABLE CREATE.
01 TABKEY PIC X(8) VALUE "(EMPSER)".
0 * DEFINE NAME VARIABLES PARAMETER FOR TABLE CREATE.
01 TABVARS PIC X(49)
VALUE "(LNAME FNAME I ADDR1 ADDR2 ADDR3 ADDR4
PHA PHNUM)".
0 * DEFINE DATA TYPE PARAMETER FOR VARIABLE DEFINE
* SERVICE CALL.
01 CHAR PIC X(8) VALUE "CHAR ".
0 * DEFINE DIALOG SERVICE TYPES FOR CALLS TO ISPF.
01 DISPLAYE PIC X(8) VALUE "DISPLAY ".
01 LOG PIC X(8) VALUE "LOG ".
01 TBADD PIC X(8) VALUE "TBADD ".
01 TBCLOSE PIC X(8) VALUE "TBCLOSE ".
01 TBCREATE PIC X(8) VALUE "TBCREATE".
01 TBDELETE PIC X(8) VALUE "TBDELETE".
01 TBGET PIC X(8) VALUE "TBGET ".
01 TBOPEN PIC X(8) VALUE "TBOPEN ".
01 TBPUT PIC X(8) VALUE "TBPUT ".
01 VDEFINE PIC X(8) VALUE "VDEFINE ".
01 VRESET PIC X(8) VALUE "VRESET ".
-
-
-
13
1
0 Vm-Com Issue 2.4
0 PROCEDURE DIVISION.
* CALL VDEFINE TO DEFINE DIALOG FUNCTION VARIABLES
* TO ISPF.
CALL "ISPLINK" USING VDEFINE NEMPSER EMPSER CHAR LEMPSER
CALL "ISPLINK" USING VDEFINE NFNAME FNAME CHAR LFNAME
CALL "ISPLINK" USING VDEFINE NLNAME LNAME CHAR LLNAME
CALL "ISPLINK" USING VDEFINE NI I CHAR LI
CALL "ISPLINK" USING VDEFINE NADDR1 ADDR1 CHAR LADDR1
CALL "ISPLINK" USING VDEFINE NADDR2 ADDR2 CHAR LADDR2
CALL "ISPLINK" USING VDEFINE NADDR3 ADDR3 CHAR LADDR3
CALL "ISPLINK" USING VDEFINE NADDR4 ADDR4 CHAR LADDR4
CALL "ISPLINK" USING VDEFINE NPHA PHA CHAR LPHA
CALL "ISPLINK" USING VDEFINE NPHNUM PHNUM CHAR LPHNUM
CALL "ISPLINK" USING VDEFINE NTYPECH TYPECHG CHAR LTYPECH
CALL "ISPLINK" USING VDEFINE NCHKTYP CHKTYPE CHAR LCHKTYP
0 * INITIALIZE MESSAGE DIALOG VARIABLE TO BLANK.
MOVE SPACES TO MSG.
0 * OPEN EMPLOYEE TABLE.
CALL "ISPLINK" USING TBOPEN EMPLTBL
0 * IF EMPLOYEE TABLE DOES NOT EXIST, CREATE IT.
IF RETURN-CODE NOT = 0
CALL "ISPLINK" USING TBCREATE EMPLTBL TABKEY
TABVARS.
0 * PERFORM MAIN-LINE ROUTINE TO ADD, UPDATE, OR
* DELETE ROWS IN THE EMPLOYEE TABLE UNTIL THE USER
* RESPONDS WITH END OR RETURN INSTEAD OF AN
* EMPLOYEE NUMBER.
PERFORM MAIN-LINE THROUGH MAIN-LINE-EXIT UNTIL,
STATE = 4
0 * WHEN THE USER HAS COMPLETED TABLE PROCESSING,
* WRITE THE EMPLOYEE TABLE TO DASD AND CLOSE IT.
CALL "ISPLINK" USING TBCLOSE EMPLTBL
0 * RESET (REMOVE ADDRESSABILITY) ALL FUNCTION
* DIALOG VARIABLES.
CALL "ISPLINK" USING VRESET
0 * RETURN TO THE APPLICATION SELECTION PANEL.
MOVE 0 TO RETURN-CODE
GOBACK.
0 * MAIN-LINE ROUTINE FOR OBTAINING EMPLOYEE DATA
* AND PROCESSING ROWS IN THE EMPLOYEE TABLE.
MAIN-LINE.
0 * DISPLAY THE DATA ENTRY PANEL EMPLA TO OBTAIN
* AN EMPLOYEE NUMBER FOR PROCESSING.
CALL "ISPLINK" USING DISPLAYE EMPLA MSG
- 14
1
0 Vm-Com Issue 2.4
0 * IF END OR RETURN RECEIVED FROM PANEL, SET LOOP
* CONTROL TO 4 AND SKIP TABLE ROW PROCESSING.
IF RETURN-CODE = 8
MOVE 4 TO STATE
0 * ELSE RESET MESSAGE VARIABLE TO BLANKS, SET LOOP
* CONTROL TO 2, AND CONTINUE PROCESSING ROW.
ELSE
MOVE SPACES TO MSG
MOVE 2 TO STATE
0 * PERFORM THE ROUTINE TO GET SPECIFIED ROW FROM
* THE TABLE AND SET TYPE OF CHANGE TO UPDATE IF
* IT EXISTS, OR TO NEW IF THE ROW DOES NOT EXIT.
PERFORM TBGET-EMPLTBL THROUGH TBGET-EMPLTBL-EXIT
0 * SAVE THE TYPE OF CHANGE FOR VALIDATION ON
* EMPLOYEE INFORMATION DATA ENTRY PANEL.
MOVE TYPECHG TO CHKTYPE
0 * DISPLAY DATA ENTRY PANEL EMPLB TO GET EMPLOYEE
* DATA.
CALL "ISPLINK" USING DISPLAYE EMPLB
0 * IF END OR RETURN NOT RECEIVED FROM DATA ENTRY
* PANEL, PROCESS ROW IN TABLE WITH EMPLOYEE
* INFORMATION RECEIVED.
IF RETURN-CODE NOT = 8
0 * IF TYPE OF CHANGE REQUESTED WAS NEW, ADD NEW
* ROW TO THE TABLE AND SET MESSAGE TO ROW ADDED.
IF TYPECHG = "N"
CALL "ISPLINK" USING TBADD EMPLTBL
MOVE "EMPX217 " TO MSG
0 * ELSE IF CHANGE REQUEST WAS UPDATE, UPDATE ROW
* WITH NEW EMPLOYEE DATA AND SET MESSAGE TO ROW
* UPDATED.
ELSE IF TYPECHG = "U"
CALL "ISPLINK" USING TBPUT EMPLTBL
MOVE "EMPX218 " TO MSG
0 * OTHERWISE, USER REQUESTED DELETE FUNCTION
* ON EMPLOYEE INFORMATION DATA ENTRY PANEL.
* DELETE SPECIFIED ROW FROM THE TABLE AND
* SET MESSAGE TO ROW DELETED.
ELSE
CALL "ISPLINK" USING TBDELETE EMPLTBL
MOVE "EMPX219 " TO MSG.
0 * IF MESSAGE VARIABLE IS NOT BLANK, LOG THE
* MESSAGE.
IF MSG NOT = SPACES
CALL "ISPLINK" USING LOG MSG.
0 15
1
0 Vm-Com Issue 2.4
- * UPON COMPLETION OF ROW PROCESSING, OR IF END OR
* RETURN ENTERED, CHECK IF ADDITIONAL EMPLOYEES ARE
* TO BE PROCESSED.
0 MAIN-LINE-EXIT.
0 EXIT.
0 * ROUTINE TO GET EMPLOYEE ROW FROM TABLE AND SET
* TYPE OF ROW PROCESSING (TYPE OF CHANGE) TO BE
* PERFORMED.
TBGET-EMPLTBL.
0 * GET ROW FOR SPECIFIED EMPLOYEE NUMBER FROM TABLE.
CALL "ISPLINK" USING TBGET EMPLTBL
0 * IF EMPLOYEE NUMBER ROW FOUND, SET TYPE OF CHANGE
* TO UPDATE.
IF RETURN-CODE = 0
MOVE "U" TO TYPECHG
0 * ELSE, SET TYPE OF CHANGE TO NEW AND INITIALIZE
* EMPLOYEE VARIABLES TO BLANKS.
ELSE
MOVE "N" TO TYPECHG
MOVE SPACES TO LNAME FNAME I ADDR1 ADDR2
ADDR3 ADDR4 PHA PHNUM.
0 TBGET-EMPLTBL-EXIT.
EXIT.
-
0 The variables used in this example are fairly mnemonic,
so further explanation is not necessary. ISPF matches the
variable from the panel and moves the data to the
corresponding Working-Storage entry in the COBOL function.
There is no Linkage Section coded, since ISPF takes care of
the actual linking. Additionally, the table variables take
the place of random file manipulation.
0 After the COBOL function is complied, ISPF will be able
to use it. Before ISPF is invoked, FILEDEFs and CMS and
COBOL library links must be made. If the system is properly
installed with its counterpart, Program Development Facility
(PDF) this is taken care of automatically. For illustrative
purposes, these shall be transparent to the user. In
reality, they are serious considerations.
-
- 16
1
0 Vm-Com Issue 2.4
0 To run the COBOL function, it must be called from the
menu panel described earlier. That panel must be initiated
by ISPF through the command, ISPSTART panel-name. With this
command, ISPF takes control, displays the panel and waits
for user input. If the selection is made from the panel
selecting the function written in COBOL, ISPF will transfer
control to the function and wait for the function to either
end or make a call to ISPF.
0 Making calls to ISPF is essential. ISPF provides the
user with the use of tables that ISPF searches, adds to and
deletes from. CMS files can be used for input, sequential
searches and appending to; but indexed or relative files are
not available for COBOL functions to access while using
ISPF. Since ISPF supports its own structures, it does not
support VSAM file access. This is a drawback to the COBOL
programmer whose main reason for using COBOL may be its ease
of file manipulation. For him, the task of creating and
maintaining the ISPF tables is both foreign and cumbersome.
Therefore, if an application is created to work with
existing files, they must be converted into ISPF-compatible
tables prior to using the application.
0 This is only an overview of ISPF with a few
particulars. ISPF's lack of support for VSAM file access
further complicates its use. Moreover, the IBM
documentation on ISPF is not as helpful as it should be. It
assumes that the programmer knows what a MACLIB is and how
to create one. ISPF does not come set up for a programmer
to use. Instead the online tutorial is for the user to
familiarize himself with ISPF's operation from only a user's
point of view. Program Development Facility (PDF) is for the
programmer, but is a separate package that works with ISPF,
utilizing ISPF services. There is nothing stated about
linking the CMSLIB and VSCOBOL libraries so the COBOL
function would run. Finally, and most importantly, nowhere
in any of the three manuals can anything be found about
using any kind of file other than log files.
0 If you are a programmer like I am, and you have the
time, you will have a lot of fun with ISPF. There is a lot
to learn with it, and it is a truely wonderful system to
use. I do not recommend implementing it with COBOL. There
are too many problems involved that you can get around by
using EXEC2. For those diehard COBOL programmers, you will
have to bend to ISPF's way of doing things. I am more used
to controlling file access from my programs, and if the
access has to be random, you better write a small EXEC to
transform the VSAM file into an ISPF-compatible table.
-
-
17
1
0 Vm-Com Issue 2.4
0 Programming at the Machine Level
+ Programming at the Machine Level
Part II: S/370 Interrupt Structure
+ Part II: S/370 Interrupt Structure
0 Andrew T. Robinson (ANDY@MAINE)
-
Depending on your programming experience, most of you
have written some programs for your own use on your CMS
machine, or VMS/MVS/Unix id. Most of your applications were
probably linear-logic programs. By this, I mean that the
flow-of-control can be deduced fairly easily by following
the source code of the program. The program's behavior is
predictable from your knowledge of its inputs and
operations.
0 For most applications, such linear flow-of-control is
sufficient. However, when dealing with a multiprogrammed or
multitasking environment, where events may occur randomly
(who can predict when a user will hit the ENTER key?), a
method of transferring control instantaneously (and
unpredictably) to a specific routine is essential. The
method used by most modern computers is known as an
INTERRUPT system.
0 Interrupts are simply electronic signals triggered by
certain ASYNCHRONOUS events (such as a keypress, or the
completion of I/O on a device, etc.) which are given
priority over other CPU signals. These signals cause a
special portion of the machines microcode (or ROM) to be
executed. This segment usually causes a transfer of control
to some operating system routine that is meant to handle the
specific type of interrupt that occurred.
0 Perhaps a further definition of asynchronous events is in
order. Your standard EXECs or command procedures execute in
a linear, or Synchronous fashion. Each statement is
+ Synchronous
executed in its turn, and the order of execution is usually
apparent after a glance at the program's source code. An
Asynchronous Event is one which occurs unpredictably and
+ Asynchronous
usually without warning. The depression of a key is a
perfect example of an asynchronous event. The occurance of
the keypress is entirely random, AND NOT UNDER THE CONTROL
OF THE OPERATING SYSTEM (at least as long as keyboard input
is enabled). A systems programmer must often provide for
such events by taking advantage of the interrupt system on
his specific machine.
0 The primary purpose of this article is to introduce the
reader to the interrupt system of the the IBM/370, in
preparation for a later article on some more sophisticated
I/O programming. So I guess I had better get started!
-
18
1
0 Vm-Com Issue 2.4
0 The interrupt handler on the IBM/370 family of computers
recognizes six kinds of interrupts, which are categorized as
follows:
- Machine Check -- Indicates Machine Hardware Malfunction
External -- External Event (ATTN key, etc.)
Input/Output -- Event on I/O Channel or Device
Program -- Invalid Machine Instructions
Supervisor Call -- Operating System Functions
Restart -- Restart Operating System ("WARM" restart)
0 Note that at least one of these interrupts, namely the
Supervisor Call, is generated by a special s/370
instruction, SVC, and is therefore not asynchronous with
respect to the application, but rather to the operating
system routine which handles the supervisor call interrupt.
0 Each of the above interrupt classes may have up to 65526
subclasses, or interrupt codes. The programmer has
relatively easy access to these subclasses, as will be
explained below.
0 Before we get too heavily involved in the innards of
interrupt programming, let's get a few terms straight. You
will see 'PSW' popping up a lot. If you are not familiar
with this term, it stands for PROGRAM STATUS WORD. The PSW
contains oodles of interesting information, such as the
current instruction address, the interrupt sub-code, and
various and assorted miscellaneous flag bits. Here is a
graphic representation of the PSW:
0 +------+------+--------------+------+----------------------+
³ SM ³ W ³ IC ³ PM ³ IA ³
+------+---'--+--------------+------+----------------------+
0 8 14 16 32 40 <- bit numbers --> 63
0 Explanation of Abbreviations:
0 SM -- System Mask
W -- Wait Bit
IC -- Interrupt Subcode
PM -- Program Mask
IA -- Instruction Address
0 ÕNote: Many of the PSW fields are omitted from this diagram.
I have only included those pertinent to this articleþ
-
-
- 19
1
0 Vm-Com Issue 2.4
0 Other important portions of the PSW are the SYSTEM MASK
and the PROGRAM MASK (abbreviated SM and PM). The SM
determines which I/O and EXTERNAL interrupts can occur (if
any), and the PM determines which PROGRAM interrupts can
occur (if any). Basically each of the 'masks' allow the
programmer to DISABLE, or shut off, certain interrupts by
setting mask bits to zero. The system mask is eight bits
(one byte) long, and the bits are arranged as follows:
0 Bit 0 = 1 if interrupts on I/O Channel 0 are allowed
Bit 1 = 1 " " " " " 1 " "
Bit 2 = 1 " " " " " 2 " "
Bit 3 = 1 " " " " " 3 " "
Bit 4 = 1 " " " " " 4 " "
Bit 5 = 1 " " " " " 5 " "
Bit 6 = 1 if interrupts on I/O Channel 6 and above allowed
Bit 7 = 1 if external interrupts are allowed
0 Another essential concept when dealing with interrupts is
that of a WAIT STATE. Being in a wait state simply means
that the system will not process any more instructions until
it receives an interrupt for which it is enabled. On the
system/370, a program usually executes an LPSW (Load Program
Status Word) instruction with the address of an 8-byte field
containing the new PSW you want loaded into the system.
This PSW must have bit 14 (the WAIT bit) set to '1'. As
long as this bit is 'on' your virtual machine will not
execute any more instructions until an interrupt occurs.
0 When an interrupt does occur, the control program then
saves the current PSW into a predefined area of storage
(called the OLD-PSW area for that type of interrupt) and
then loads the contents of ANOTHER predefined area (called
the NEW-PSW) into the system PSW. When an interrupt occurs
and the NEW-PSW for that interrupt type is loaded, control
is transferred to the address specified in the NEW-PSW's
'instruction address' field. This PSW 'flipping' operation
preserves (in the OLD-PSW area) a snapshot of the machine
status at the time the interrupt occured.
0 There are NEW and OLD-PSW areas for each of the six types
of interrupts on the IBM/370. All of these areas are
located within the first 255 bytes of your virtual machine's
storage. The names of each of these locations and their
physical addresses in hexadecimal and decimal follow:
-
-
-
0 20
1
0 Vm-Com Issue 2.4
0 PSW Area Name Alias Decimal Addr. Hex. Addr.
------------------------- -------- ------------- -----------
0 Old PSWs
0 Restart old PSW RSTOPSW 8 8
External Old PSW RSTOPSW 24 18
Supervisor Call Old PSW SVCOPSW 32 20
Program Old PSW PGMOPSW 40 28
Machine-Check Old PSW MCKOPSW 48 30
Input/Output Old PSW IOOPSW 56 38
0 New PSWs
0 Restart new PSW RSTNPSW 0 0
External New PSW RSTNPSW 88 58
Supervisor Call New PSW SVCNPSW 96 60
Program New PSW PGMNPSW 104 68
Machine-Check New PSW MCKNPSW 112 70
Input/Output New PSW IONPSW 120 78
-
It is a relatively simple matter for a system application
program to examine the contents of an OLD-PSW (perhaps for
the purpose of extracting the interrupt sub-code), or to
modify a NEW-PSW area to cause control to be transferred to
that application's interrupt handler when an interrupt of
the desired type occurs.
0 This description of the IBM/370 Interrupt System is a
basic introduction to the concepts involved in using it. See
next month's issue for further elaboration on the points
explained above, as well as a short (and maybe useful!)
assembler program where we apply all these wondrous
concepts.
-
ÕThis is part two of the 370 programming series
started in issue number 2-2. -Ed.þ
-
-
-
-
- 21
1
0 Vm-Com Issue 2.4
0 An Evening of Mail with Mr. Abbe
+ An Evening of Mail with Mr. Abbe
0 Joe Herman (HERMAN@UMDB)
- Dear Mr. Abbe,
I'm confused by all this talk about Bitnet. Whenever I
enter a computer room, there's always someone with his
terminal constantly beeping. People say he's talking to
people all over the world. This sounds interesting, but
when I ask my instructor, he tells me that no one is
supposed to use it and that I could fail my courses for
attempting to learn about it. This doesn't seem fair. How
come some people get to use it and not others?
0 Signed,
Miffed from VM
- Dear Miffed:
What you describe is a fairly common occurance in the
computer world. I call it the "I know something you don't
know and aren't allowed to know" syndrome. It is a sure
sign of a professor or node admin. insecure about his
existance on the network. He is afraid that one of the
students (read proletariat) will do some horrible act and
get the professor or node admin. kicked off the network.
Because of this fear, they overlook the amount of knowledge
that can be gleamed by talking to people from different
backgrounds.
0 What can you do about it? You have three options. You can:
0 1) wait until that person retires.
2) ignore him and learn about the net just by observing.
3) change schools.
0 Alas all three have problems. Number one may take a lot
of time. Number two is faster, but frustrating. You will
however eventually learn. reading this newsletter is a good
start. As for number three. You need your priorities
straightened if you were considering it. Let's face it,
this is only a computer network. Computer networks
shouldn't be quite that important to you. (* gasp *).
0 All in all, I think number two is your best bet. Take
your time. Don't do anything stupid, and you'll soon know
enough to get around. And for god sakes, don't get cocky
and tell your professor.
-
-
22
1
0 Vm-Com Issue 2.4
0 Dear Mr. Abbe
I've just written this really wonderful program. It
will take someone's ForTran program and make it readable.
To do this, I used all the IBM supplied extensions. It
works fine here and I don't see why it shouldn't work on
other peoples systems. My friends say I should write and
ask you first.
0 JOHNAT GOODMA
A@UVM
- Dear Johnathan:
Well, I wish you luck. I for one refuse to believe that
ForTran is capable of being readable, let alone useful to
anyone. Still I'm glad you think you've found a way. The
problem is with the use of all the extensions. If you
really want other people to use your program on different
machines, you must stick to *standards*. There are many
different types of computers running on BITNET, and for a
program to run on all of them means it has to use no IBM
extensions. Okay, suppose you don't care about the
computers running non-IBM operating systems. Well hold on
to your hat. Within the IBM community alone, there are 4
different Fortran compilers, FORTHX, FORTGO, FORTVS and the
other name escapes me. On top of that, there may be local
mods. So once again, you're forced to write only
standardized code.
0 Before you just chuck the whole thing, don't forget,
that there are people out on BITNET who run the same
operating system and who run the same compiler. You may
wish to distribute your program to them, or make
modifications for the different compilers. Or, you may try
rewriting your code to fit the standard. This would be a
good programming execersize.
0 In the future though, realize that you can not assume
that any possible extension or local modification exists
outside your local node. For instance, Mr. Abbe's own node
doesn't support SCRIPT (what are all those funny dots he
keeps seeing in column one sometimes?) This is true no
matter what language you are writing in, from COBOL to
FORTRAN to EXEC's.
- Dear Mr. Abbe:
Why don't student consultants know everything? They act
like they do.
0 Joe User
GENERIC@ESUVM
-
23
1
0 Vm-Com Issue 2.4
0 Dear Joe:
What you've really asked is two questions. Why don't
student consultants know everything, and why do they always
act like they do know everything?
0 The first question is easy to answer. The key to it is
in the title. The student consultants are just that.
STUDENTS. They may know more about the system and more
about languages, but they are still just students. Many
times they haven't even had the class you're taking, or if
they had the class they may have just squeaked by with a C.
Before you write student consultants off as useless (Hi
Liz!), realize that they can help you. Student consultants
will usually have an idea of how to find the cause of your
error, or other ways of helping if they cannot answer your
questions immediately.
0 Now, as to why they act like they know everything?
Well, that's a toughy. Part of it is because everyone
expects them to know everything so they tend to act like
they do. Another part is that many consultants do know more
about the system than you do. That makes some of them think
they are smarter or better programmers. This is not at all
true. All it means is that they know something you don't.
They are probably not any smarter than you, nor are all of
them better programmers (hackers yes, programmers no...Mr
Abbe has heard of one consultant who wrote over 1000 lines
of uncommented code...hacking is not the same as good
programming, but that's another discussion). You also have
to realize the laws of supply and demand are at work here.
There are a lot of you, but relatively few consultants.
This makes the consultants feel like a chosen breed. (Mr.
Abbe would hate to feel that this described him :-) ).
0 What's the point? The point is, that Student
Consultants aren't perfect, but if you can put up with a
certain amount of smugness you can get help and learn from
them.
0 Sincerely,
Mr. Abbe
0 P.S. Student Consultants will do almost anything for
chocolate.
-
-
-
- 24
1
0 Vm-Com Issue 2.4
0 I hope you enjoyed a peek at Mr. Abbe's mail. If any of you
out there have any questions about the Network, I'm sure the
CSNEWS staff can help you out, or I can try and do my humble
best. Stay tuned for next issue when Mr. Abbe goes out on a
date with Miss Manners.
0 Call me: Joe Herman
BITNET: HERMAN@UMDB
ARPA: HERMAN@UMD2
UUCP: {seismo, allegra}!umcp-cs!herman%umdb.bitnet@umd2.arpa
USnail: 7705 Ivymount Terrace
Potomac, MD 20854
-
-
-
-
-
-
-
-
-
-
-
-
-
-
0 25
1
0 Vm-Com Issue 2.4
0 OpCodes
+ OpCodes
0 Various and Assorted Creative Minds...
-
BR Byte and Run
DA Develop Amnesia
DCAD Dump Core And Die
DCGC Dump Confusing Garbage to Console
DIA Develop Ineffective Address
DISC DISmount CPU
DK%WMM Disk Unit - Washing Machine Mode
DRT Disconnect Random Terminal
ECO Electrocute Computer Operator
EMT Electrocute Maintenance Technician
ENF Emit Noxious Fumes
EO Electrocute Operator
EPS Electrostatic Print and Smear
GSB Gulp and Store Bytes
HAH Halt And Hang
HHB Halt and Hang Bus
HRPR Hang up and Ruin Printer Ribbon
HUAL Halt Until After Lunch
JRSR Jump to Random Subroutine
JTZ Jump to Twilight Zone
JHRB Jump to H&R Block
LCK Lock Console Keyswitch
LIA Load Ineffective Address
LMO Load and Mug Operator
LN Lose inode Number ÕUNIXþ
MAN Make Animal Noises
MC Move Continuous
MLR Move and Lose Record
MWC Move and Wrap Core
NTGH Not Tonight, I've Got a Headache
OCO Overly Complicated cOmputer
OSI Overflow Stack Indefinitely
RAM Reorganize and Abort Monitor
RASC Read And Shred Card
RAST Read and Shred Tape
RSD Read and Scramble Data
RCKG Read Count Key and Garbage
RCB Run Clock Backwards
RCB Read Commands Backwards
RID Read Invalid Data
RIR Read Invalid Record
RNR Read Noise Record
RIRG Read Inter-Record Gap
RN Read Noise
-
- 26
1
0 Vm-Com Issue 2.4
0 SHB Stop and Hang Bus
SMD Spontaneous Memory Dump
SNM Show No Mercy
SOP Stop and Order Pizza
SRBO Set Random Bits to Ones
SRBZ Set Random Bits to Zeroes
SRC Skip to Random Channel
SSD Seek and Score Disk
SST Stop and Stretch Tape
SUS Stop Until Spring
SWS Sort to Wrong Slots
TPN Turn Power oN
TPO Turn Power Off
TR Turn into Rubbish ÕUNIXþ
TT%CNK TeleType - Clunk Noise
TTL Time To Log off
TLO Turn indicator Lights Off
-
-
-
-
-
-
-
-
-
-
-
-
- 27
|