From:	HENRY::IN%"info-vax-relay%kl.sri.COM%relay.cs.net@RCA.COM" 13-MAY-1987 09:10
To:	Info-Vax@kl.sri.com
Subj:	Info-Vax Digest   V0 #20


Info-Vax Digest          Tuesday, 12 May 1987      Volume 0 : Issue 20

Today's Topics:
  Re: Where are PCB$ and SCH$ defines??
  Turning off <CANCEL> without turning off Cntl-C AST's
  Re: DEC Multicast addresses (Info-Vax Digest   V0 #12)
  ra81 problems
  PHOTO-like program
  Problem with wildcarding IO$_ACPCONTROL
  VMS and MicroVMS
  Extracting a Tape Volume Label...
  Looking for big used-DEC-hardware dealers
  Re: ra81 problems
----------------------------------------------------------------------

Date: 11 May 87 17:20:45 GMT
From: amethyst!face%arizona.EDU%relay.cs.net@RCA.COM
Subject: Re: Where are PCB$ and SCH$ defines??

The definitions of PCBDEF and STATEDEF are in LIB.MLB.  A very good source
for a description of most VMS data structures is the .REQ files located in
SYS$LIBRARY.  These are BLISS macro definitions of the data structures.
The PCBDEF and STATEDEF definitions are in LIB.REQ.

I want SDL!

------------------------------

Date: 11 May 87 23:48:14 GMT
From: voder!blia!forrest%ucbvax.Berkeley.EDU%relay.cs.net@RCA.COM
Subject: Turning off <CANCEL> without turning off Cntl-C AST's

I want to turn off the printing of CANCEL and INTERRUPT when
the user types Control-C and Control-Y without loosing any
of the function of these characters. In other words, I don't
want to put the terminal in PASTHRU mode. I've looked in
the Terminal Driver manual but didn't find a good solution to
this. Any ideas?

Jon Forrest
ucbvax!mtxinu!blia!forrest

------------------------------

Date: 11 May 87 21:09:29 GMT
From: voder!blia!ted%ucbvax.Berkeley.EDU%relay.cs.net@RCA.COM
Subject: Re: DEC Multicast addresses (Info-Vax Digest   V0 #12)


According to _DECnet Digital Network Arch. Phase IV, Ethernet Data Link
Functional Spec._, DEC order number AA-Y298A-TK, page A-2, the DEC
Ethernet multicast addresses are as follows:

AB-00-00-01-00-00       MOP Dump/Load Assistance
AB-00-00-02-00-00       MOP Remote Console
AB-00-00-03-00-00       Received by Routing Layer on all Routing Nodes
AB-00-00-04-00-00       Received by Routing Layer on all End Nodes
AB-00-03-00-00-00       LAT Transport
AB-00-04-00-00-00 through
AB-00-04-00-FF-FF       Reserved for customer use
AB-00-04-01-00-00 through
AB-00-04-01-FF-FF       System Communication Architecture (SCA) [I don't know
                        what this is; wild guess: LAVC]

Hope this helps.
--
Ted Marshall       ...!ucbvax!mtxinu!blia!ted <or> mtxinu!blia!ted@Berkeley.EDU
Britton Lee, Inc., 14600 Winchester Blvd, Los Gatos, Ca 95030     (408)378-7000
The opinions expressed above are those of the poster and not his employer.
             "My hovercraft is full of eels" *fnord*

------------------------------

Date: 11 May 87 15:01:19 GMT
From: vax1!george%cu-arpa.cs.cornell.EDU%relay.cs.net@RCA.COM
Subject: ra81 problems

Andrew Duggan writes in the DEC Professional (via the ARIS message system)
of May 1987, p22, that "... 68 degrees is too warm for 81s; try 60.". Mr.
Duggan was answering a query about HDA failures, a problem that anyone
with RA81s knows is a real pain. How many people agree that 68 is too warm
and could be a cause of trouble? I will summarize...

------------------------------

Date: 11 MAY 87 20:26-PDT
From: MIGLESIAS%UCIVMSA.BITNET%wiscvm.wisc.EDU%relay.cs.net@RCA.COM
Subject: PHOTO-like program

Here's a slightly modified source for PTY.PAS (comes with Kevin's
PTY driver) that logs the output to a file called PTY.LOG.  I've used it
on and off for quite a while, and it's been handy to have around.  Of
course, you'll need a Pascal compiler to compile it (no, I can't supply
the executable).


Mike Iglesias
University of California, Irvine
miglesias@ucivmsa    (BITNET)


---------------------------------------------------------------------------
(* Simple program to converse with the pseudo-terminal control device. *)

[inherit ('SYS$LIBRARY:STARLET')]
program PTY(logfile);

const
  buffer_size = 256;
  CTRL_A = chr (1);

type
  string = varying [256] of char;
  unsigned_byte = [byte] 0..255;
  unsigned_word = [word] 0..65535;
  characteristic_buffer = packed record
                            dev_class, dev_type : unsigned_byte;
                            width : unsigned_word;
                            charbits, extended_bits : unsigned;
                          end;
  status_block = packed record
                   status, count, terminator, terminator_size : unsigned_word;
                 end;

var
  logfile: text;
  i: integer;
  cr_found: boolean;
  stat : integer;
  mbx_chan, tt_chan, pty_chan : [static, volatile] unsigned_word;
  input_char : [static, volatile] char;
  buffer : packed array [1..buffer_size] of char;
  mbx_buffer : [static, volatile] packed array [1..40] of char;
  term_chars, old_term_chars : [static, volatile] characteristic_buffer;
  in_iosb, out_iosb, mbx_iosb : [static, volatile] status_block;
  exit_descriptor : [static] packed record
                      flink : unsigned;
                      handler : unsigned;
                      argnum : integer;
                      reason : ^integer;
                    end := (0, 0, 1, nil);
  message : [static, volatile] string :=
                                ''(13, 10, 7)'Got a mailbox message'(13, 10);
  message1 : [static, volatile] string :=
                                ''(13, 10, 7)'PTY exiting...'(13, 10);

{-----------------------------------------------------------------------------}

  [external]
  function LIB$ASN_WTH_MBX
                (DEVNAM : [class_s] packed array [l1..u1:integer] of char;
                 MAXMSG, BUFQUO : integer;
                 var DEVCHAN, MBXCHAN : [volatile] unsigned_word
                ) : integer; extern;

(*
 * CLEANUP is our exit handler.  It resets the terminal characteristics.
 *)

  [unbound]
  function Cleanup (reason : integer) : integer;

  var
    stat : integer;
    iosb : status_block;

  begin (* Cleanup *)
    Cleanup := reason;
    stat := $QIOW (CHAN := tt_chan,
                   FUNC := IO$_WRITEVBLK,
                   IOSB := iosb,
                   P1 := message1.body,
                   P2 := message1.length);
    stat := $QIOW (CHAN := tt_chan,
                     FUNC := IO$_SETMODE,
                     P1 := old_term_chars,
                     P2 := size (old_term_chars));
    if not odd (stat) then Cleanup := stat;
    stat := $DASSGN (CHAN := tt_chan);
    if not odd (stat) then Cleanup := stat;
    stat := $DASSGN (CHAN := pty_chan);
    if not odd (stat) then Cleanup := stat;
    close (logfile);
  end; (* Cleanup *)

  [asynchronous, unbound]
  procedure Set_asynch_mbx_input; forward;

(*
 * MBX_INPUT_AST is the AST handler invoked whenever we get something in
 * the associated mailbox.
 *)
  [asynchronous, unbound]
  procedure Mbx_input_AST;

  var
    stat : integer;
    iosb : status_block;

  begin (* Mbx_input_AST *)
    if not odd (mbx_iosb.status) then $EXIT (mbx_iosb.status);

    stat := $QIOW (CHAN := tt_chan,
                   FUNC := IO$_WRITEVBLK,
                   IOSB := iosb,
                   P1 := message.body,
                   P2 := message.length);
    if not odd (stat) then $EXIT (stat);
    if not odd (iosb.status) then $EXIT (iosb.status);

    Set_asynch_mbx_input;
  end; (* mbx_input_AST *)

(*
 * SET_ASYNCH_MBX_INPUT issues an asynchronous read on the terminal.
 *)
  procedure Set_asynch_mbx_input;

  var
    stat : integer;

  begin (* Set_asynch_mbx_input *)
    stat := $QIO (CHAN := mbx_chan,
                  FUNC := IO$_READVBLK,
                  IOSB := mbx_iosb,
                  ASTADR := mbx_input_AST,
                  P1 := mbx_buffer,
                  P2 := size (mbx_buffer));
    if not odd (stat) then $EXIT (stat);
  end; (* Set_asynch_mbx_input *)

  [asynchronous, unbound]
  procedure Set_asynch_input; forward;

(*
 * INPUT_AST is the AST handler invoked whenever we get something in
 * from the terminal.  Just ship it to the PTY.
 *)
  [asynchronous, unbound]
  procedure Input_AST;

  var
    stat : integer;

  begin (* Input_AST *)
    if not odd (in_iosb.status) then $EXIT (in_iosb.status);
    if input_char = CTRL_A then $EXIT (SS$_NORMAL);

    stat := $QIOW (CHAN := pty_chan,
                   FUNC := IO$_WRITEVBLK,
                   IOSB := in_iosb,
                   P1 := input_char,
                   P2 := 1);
    if not odd (stat) then $EXIT (stat);
    if not odd (in_iosb.status) then $EXIT (in_iosb.status);

    Set_asynch_input;
  end; (* Input_AST *)

(*
 * SET_ASYNCH_INPUT issues an asynchronous read on the terminal.
 *)
  procedure Set_asynch_input;

  var
    stat : integer;

  begin (* Set_asynch_input *)
    stat := $QIO (CHAN := tt_chan,
                  FUNC := IO$_READVBLK,
                  IOSB := in_iosb,
                  ASTADR := Input_AST,
                  P1 := input_char,
                  P2 := 1);
    if not odd (stat) then $EXIT (stat);
  end; (* Set_asynch_input *)

begin (* PTY *)
  stat := LIB$ASN_WTH_MBX (DEVNAM := 'PYA0:',
                            MAXMSG := size (mbx_buffer),
                            BUFQUO := 2 * size (mbx_buffer),
                            DEVCHAN := pty_chan,
                            MBXCHAN := mbx_chan);
  if not odd (stat) then $EXIT (stat);

  Set_asynch_mbx_input;

  stat := $ASSIGN (CHAN := tt_chan, DEVNAM := 'TT');
  if not odd (stat) then $EXIT (stat);

(* Get terminal characteristics. *)

  stat := $QIOW (CHAN := tt_chan,
                 FUNC := IO$_SENSEMODE,
                 P1 := term_chars,
                 P2 := size (term_chars));
  if not odd (stat) then $EXIT (stat);

  if term_chars.dev_class <> DC$_TERM then
    $EXIT (SS$_IVDEVNAM);

  old_term_chars := term_chars;

(* declare exit handler so that terminal chars are restored *)

  exit_descriptor.handler := iaddress (Cleanup);
  new (exit_descriptor.reason);

  stat := $DCLEXH (DESBLK := exit_descriptor);
  if not odd (stat) then $EXIT (stat);

(*
 * Set terminal characteristics we need:
 *    PASSTHRU, NOECHO, NOTTSYNC, NOHOSTSYNC
 *)

  with term_chars do
  begin
    extended_bits := UOR (extended_bits, TT2$M_PASTHRU);
    charbits := UOR (charbits, TT$M_NOECHO);
    charbits := UAND (charbits, UNOT (TT$M_TTSYNC));
    charbits := UAND (charbits, UNOT (TT$M_HOSTSYNC));
  end;

  stat := $QIOW (CHAN := tt_chan,
                 FUNC := IO$_SETMODE,
                 P1 := term_chars,
                 P2 := size (term_chars));
  if not odd (stat) then $EXIT (stat);

  (*  Force a CR to the pty to get LOGINOUT started *)
  input_char := chr(13);
  stat := $QIOW (CHAN := pty_chan,
                 FUNC := IO$_WRITEVBLK,
                 IOSB := in_iosb,
                 P1 := input_char,
                 P2 := 1);

  Set_asynch_input;

  (*  Open the log file  *)
  open (logfile, file_name:='pty.log', history:=new, record_length:=2048);
  rewrite (logfile);
  cr_found:=false;

  repeat
    stat := $QIOW (CHAN := pty_chan,
                   FUNC := IO$_READVBLK,
                   IOSB := out_iosb,
                   P1 := buffer,
                   P2 := size (buffer));
    if not odd (stat) then $EXIT (stat);
    if not odd (out_iosb.status) then $EXIT (out_iosb.status);

    stat := $QIOW (CHAN := tt_chan,
                   FUNC := IO$_WRITEVBLK,
                   IOSB := out_iosb,
                   P1 := buffer,
                   P2 := out_iosb.count);
    i:=1;
    while (i <= out_iosb.count) do
      begin
        if (ord(buffer[i]) = 13)
          then cr_found:=true
          else begin
            if (ord(buffer[i]) = 10) and (cr_found) then
              begin
                writeln(logfile);
                cr_found:=false;
              end
            else begin
              if (cr_found) then write(logfile,chr(13));
                 write(logfile,buffer[i]);
                 cr_found:=false;
              end;
          end;
        i:=i+1;
      end;
    if not odd (stat) then $EXIT (stat);
    if not odd (out_iosb.status) then $EXIT (out_iosb.status);
  until false;
end. (* PTY *)

------------------------------

Date: Mon, 11 May 87 23:32 CST
From: <HOLLINGE%SASK.BITNET@wiscvm.wisc.edu> (Glenn Hollinger @
      Computing Services)
Subject: Problem with wildcarding IO$_ACPCONTROL

I am trying to get disk quota information from the disk ACP using a high
level language.  I have had much success in operating on single quota
entries in this fashion, but I have run into a snag with using
wildcarding with the IO$_ACPCONTROL function.  In short, the
documentation leaves out the critical point of how to tell when the
iteration is complete.  So, I have two questions:
        1) What is the answer? (The DEC-Supported method)
        2) Is this method documented? (If so, where)

This is a question for VMS ACP gurus.  Please consider this carefully.
I am definitely NOT looking for speculation on this.  I have speculated
out an answer which works on the tests I have done, but I always liked
the truth.

Glenn Hollinger,                  hollinger@sask.bitnet
Systems Programmer,               glenn@sask.uucp
University of Saskatchewan.       ihnp4!sask!glenn

=========================================================================
1) Background -- VMS 4.5 on a VAXcluster of an 8600 and 8650.  RA81 disks
        dual ported on 2 hsc50s.  Shadowing software used on some disks.
        No multi-disk volume sets.  Disk quotas enabled on all volumes.

2) Goal -- Use the IO$_ACPCONTROL function QIO to examine all disk quotas on
        a volume.

3) Method -- Call SYS$QIOW with the IO$_ACPCONTROL function, the
        FIB$C_EXA_QUOTA subfunction, and bits FIB$V_ALL_MEM and
        FIB$V_ALL_GRP set.  Before the first call, FIB$L_WCC is
        set to zero to maintain wildcard information on successive
        calls.

4) Problem -- What is the real (READ DEC-SUPPORTED) way to determine
        when the last quota value has been returned?

5) Observations
        a) The status code returned is always SS$_NORMAL, even after all
the quotas from that disk have been given.
        b) The length of quota transfer block returned never goes to zero.

        c) FIB$L_WCC appears to increase by 1 on each call valid quota
info, and during the first call after valid data, increases by some
arbitrary amount other than 1.  On the second call, FIB$L_WCC is
returned 0, so the third call after valid quota information starts the
wildcard over.  On the first and second call after the last valid quota
info, the quota transfer block is returned unmodified.

------------------------------

Date: Tue, 12 May 87 07:47:52 PDT
From: nagy%warner.hepnet%lbl.ARPA%relay.cs.net@RCA.COM
Subject: VMS and MicroVMS

>The above applies to VMS, not uVMS. uVMS is distributed without the NET
>option. That comes with the DECnet key and is one reason (the other is
>documentation) that uVMS doesn't have DOD security blessings. DOD requires
>that the operating system be able to capture a session's keystrokes. This
>requirement is met in VMS by SET HOST/LOG. That's one reason you won't see
>this go away in the future unless DEC provides some new method of session
>capture.

Digital has indicated that MicroVMS is going away and that all VAXes will
use VMS (other than packaging there is no difference; our LAVC system of
MicroVAXes runs full VMS).  I've sort of heard (2nd hand) that at the
Spring DECUS this transition was mentioned as occurring with VMS V5.0.

=Frank Nagy
=Fermilab Research Division EED/Controls
=FNAL::NAGY.HEPNET or NAGY@FNAL.Bitnet

------------------------------

Date: 12 May 87 13:08:20 GMT
From: ur-tut!agoe%cs.rochester.EDU%relay.cs.net@RCA.COM
Subject: Extracting a Tape Volume Label...

I working on a small integrated BACKUP/TAPE Management Facility for our site
and I am yet to be able to find a way to extract a magnetic tape's volume
label for use in a DCL com file. If there is a lexical for this, I am really
at a loss.  I would appreciate any suggstions.

A VAX type-version of UCC1 it may not be but it will at least be
better than logging the damn things in by hand!  Thanks in advance.


--
Karl Cialli
MCI International Inc.   Dept. 433/875
2 International Drive    Rye Brook, NY 10573
UUCP:   {allegra, cmcl2, decvax, harvard, seismo}!rochester!ur-tut!agoe


===============================================================================

------------------------------

Date: 12 May 87 12:06 EDT
From: Bill Barns <WWB.TYM%OFFICE-1.ARPA%relay.cs.net@RCA.COM>
Subject: Looking for big used-DEC-hardware dealers

This has next to nothing to do with VAXes but I don't know of a better list.

Years ago when I worked for a systems integration house I used to receive
newsletters/catalogs from Newman and other big dealers in used DEC gear.  After
years away from that scene, I find that it would now be useful for me to
receive these again, as I might want to make some cheap "clones" of an old
LSI-11 setup we have, if the price is right.  So, I would appreciate some
addresses, phones or whatever, for such dealers, so I can get on their mailing
lists.

Also, if anybody knows of some outfits that will cheaply produce nonstandard
boards for a Q-bus (we are talking quantity 5-10, produced from a "prototype"
by "cloning"), that would be of interest to me too.

I suggest that replies be mailed to me directly since this info is probably not
of general interest.

Thanks in advance  --  Bill Barns -- ARPA: <WWB.TYM@OFFICE-1.ARPA>

------------------------------

Date: Tue, 12 May 87 10:59:24 MDT
From: cetron%cs.utah.EDU%relay.cs.net@RCA.COM
Reply-to: cetron@cs.utah.edu (Edward J Cetron)
Subject: Re: ra81 problems


        68 should be fine.... we had an airconditioning failure and ran
our 81 at about 90 for most all day before it was corrected with no ill
effects...

ed

------------------------------

End of Info-Vax Digest
**********************
