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