Info-Vax-REQUEST@KL.SRI.COM (Ramon Curiel) (05/19/87)
Info-Vax Digest Tuesday, 19 May 1987 Volume 0 : Issue 27
Today's Topics:
JCLOCK
What is the difference between VAX/VMS 4.5 and 4.5a
VMS 4.5, 4.5a, 4.5b ?
Software for the handicapped
DCL symbol table dump program
----------------------------------------------------------------------
Date: 18 May 87 11:00:00 EDT
From: <charettep@nusc-wpn.arpa>
Reply-to: <charettep@nusc-wpn.arpa>
Subject: JCLOCK
Due to the new digest format, I have been printing my info-vax mail
and then deleting the messages, foolishly reading the digests later. Thus,
I managed to miss the electronic copy of JCLOCK. It looks quite nice, and
I'm interested in obtaining a copy. If anyone out there would be so kind
as to forward that digest to me, I'd be muchly obliged.
Adv*THANKS*ance,
Paul C.
+--------------------------------------------------------+
| Paul Charette |
| Naval Underwater Systems Centre |
| Newport, RI |
| |
| <charettep@nusc-wpn.ARPA> |
+--------------------------------------------------------+
------------------------------
Date: 15 May 1987 12:12:10
To: Info-Vax@SRI-KL.ARPA
From: Ryan Popken <Popken@Unlvax1.BITNET>
Subject: File Server code
I am looking for code for a VMS-JNET file server that works similar to
the server at KERMSRV@CUVMA.BITNET
I have the copy of the code that the serve at UBSERVE@UBVMSC.BITNET
uses, however we also need the ability to read commands from mail
messages in addition to interactive messages.
I would also be interested in code for a list server similar to
LISTSERV on BITNET that would also work with VMS and JNET.
Ryan Popken
Computing Resource Center
University of Nebraska-Lincoln
Lincoln, Nebraska
(402) 472-5434
BITNET: popken@unlvax1
ARPA: popken%unlvax1.BITNET@wiscvm.ARPA
------------------------------
Date: Sat, 16-MAY-1987 00:14:55.58 GMT+1
From: <zrgc002%DTUZDV5A.BITNET@wiscvm.wisc.edu> (Christoph D. Gatzka)
Subject: What is the difference between VAX/VMS 4.5 and 4.5a
What is the difference between VAX/VMS 4.5 and 4.5a. Does 4.5a run
without changes on a uVAX II ? Is there already a 4.5b ?
Christoph D. Gatzka zrgc002@dtuzdv5a.bitnet
Student of medicine
University of Tuebingen
Germany
------------------------------
Date: Mon, 18-MAY-1987 15:02:23.41 GMT+1
From: <zrgc002%DTUZDV5A.BITNET@wiscvm.wisc.edu> (Christoph D. Gatzka)
Subject: VMS 4.5, 4.5a, 4.5b ?
Where is the difference between 4.5, 4.5a, 4.5b. Is it true that 4.5a
supersedes any existing MicroVMS distribution ? (I just read in an
advertisement from DEC concerning Ethernet clusters that 4.5a is
required on uVAXes connected to it.
Any help would be appreciated.
Christoph D. Gatzka zrgc002@dtuzdv5a.bitnet
Student of medicine
University of Tuebingen
Germany
------------------------------
Date: Mon, 18 May 87 14:34 CDT
From: <ARCHERB%UMKCVAX1.BITNET@wiscvm.wisc.edu>
Subject: Software for the handicapped
From: VAX1::MCKEEVER "Brian McKeever" 15-MAY-1987 09:14
To: VAX_SAGE
Subj: Can you please send this to Info-Vax for John Whittaker. Thanks.
RE: Computers and the Handicapped.
The following is a request for information from one of the users in our
program. Please send any responses to the BITNET address that follows
the text of the request. Thanks in advance to all that respond.
+----------------------------------------------------------------------------+
I am interested in finding out about what types of hardware and soft-
ware are available to help the handicapped. I am specifically interested in
finding out what could be helpful to a person whose motor functions have
been severely limited as a result of a gunshot wound to the head. This person
suffered a 50% loss of cerebellar tissue as a result of the bullet wound.
Other impairment seems to have taken place as a result of what I
would call "concussive damage" to brain tissue. (I am not a doctor, so my
descriptions may be bad or erroneous.) Right now this person is fed through
a tube. She cannot speak because her throat is paralyzed. She can move arms,
legs, hands, and fingers, but the movements are very gross. Her eyes function,
but they do not always move together, and she has some trouble focussing.
If any VAX users know of hardware or software available which could help
such a person communicate and/or control the environment to some extent please
send a message to me. If you know of agencies or specialists who might be
helpful, please send that information also.
+----------------------------------------------------------------------------+
Brian McKeever - System Programmer
University of Missouri Kansas City
Computer Science Program
4747 Building Rm. 219
5100 Rockhill Rd.
Kansas City, MO 64110
(816) 276-2368
MCKEEVER@UMKCVAX1.BITNET
------------------------------
Date: Mon, 18 May 87 22:20 N
From: BUCLIN%CLSEPF51.BITNET@wiscvm.wisc.edu
Subject: DCL symbol table dump program
Hello everybody,
I posted recently on INFO-VAX a program to dump the DCL
symbol table on a file but it seemed that my mail didn't go
out of Europe. As the first release of the program had a bug
(I correct it), I repost it now.
Sometimes ago, one asked for a program which allows to
write the DCL symbol table on a file and to recover it in
another session. I have written such a program. The sources
are appended to the end of this mail. Just some comments on
how it works :
- The program builds a binary file containing all
global symbols. Keypad symbols, local symbols, label,
process logical names are ignored. Wildcarded global symbols
are included.
- It is called via a CDU definition (file SYMBOLS.CLD).
It has two qualifiers : /SAVE : allows to build a file from
the current symbol table. /RESTORE : restores a symbol table
from a file. It takes one required parameter that is the
symbol table file specification.
- The privilege CMEXEC is required to run the program
(one could install the image) and is set at the beginning of
the image (this is usefull for those who don't want to
install the program but have the privilege). Symbol table
pages (address range CTL$AG_CLIDATA+10 - CTL$AG_CLIMAGE)
have protection set to Supervisor Write.
- To build the file, the procedure WRITE_TABLE is
entered in Executive mode and step through the whole table
and writes only the global symbols on the file. DCL stores
the symbols in a hash table. One feature of this program is
to write with the symbols the hash index. One can be
absolutely sure that the hash index will be independent of
the process context (it is computed via a CRC instruction
based upon a fixed polynom). This allows the restore process
to avoid the recomputation of the CRC and thus speed it up.
- To read the file, the routine READ_TABLE is entered
in Executive mode too. Before effectively restoring the
symbol table, the current one is deleted thus clearing the
entries that may be potentially used by the symbols
restored. This is not an undesirable effect because the main
usage of this program is in the login command procedure and,
in general, the symbol table is empty at this moment (except
for the symbols declared in the SYLOGIN procedure but these
can be included in the symbol table file).
I use this program to speed up my login procedure (the
speed ratio is between 10 and 15 : 1 and a half second of
CPU time for a classical login procedure where only symbols
are declared, and 0.1 second with this program).
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! !!!
!!! IMPORTANT NOTE : !!!
!!! This program works ONLY in standard version of !!!
!!! VMS 4.5 (Version 4.5a will not work) !!!
!!! !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
For those who want to adapt the program for another VMS
version, offsets used in DCL_LINK routine must be reajusted.
Use the DCL link map file to find the new offset.
Identifiers of DCL routines used in my program are those
used in DCL. For VMS 4.4, values are :
DCL$PURGE_SYM: .long ^X2319
DCL$RESTORE_SYM: .long ^X2270
DCL$RESTORE_ABBREV: .long ^X2238
DCL$DEALLOCSYM: .long ^X1FE6
Bertrand Buclin
Service Informatique
Departement de Mathematiques
Ecole Polytechnique Federale de Lausanne
CH-1015 Lausanne (Switzerland)
Electronic Mail addresses:
BITNET/EARN: BUCLIN@CLSPEF51
DECnet : ELMA::BUCLIN (node 20.34 on Span/PhysNet/CHadNet)
PSI/VAX : PSI%022846911008::ELMA::BUCLIN
-------------------------------------------------
File: SYMBOLS.CLD
define verb symbols
image sys$system:symbols
parameter p1, label file_name, prompt "File", value (required, type=$infile)
qualifier save, nonnegatable
qualifier restore, nonnegatable
-------------------------------------------------
File: SYMBOLS.MAR
Assemble it with MACRO SYMBOLS and link it with LINK SYMBOLS (no options)
.title Symbol table dump program
;++
;
; FACILITY : DCL Symbol table dump program
;
; ABSTRACT : This program dumps the DCL symbol table on a file to reuse it
; in another process.
;
; ENVIRONMENT : VAX/VMS V4.5 DCL command language, privileged mode
;
; AUTHOR : Bertrand Buclin
; Service Informatique, Departement de Mathematiques
; Ecole Polytechnique Federale de Lausanne
; CH-1015 Lausanne
;
; CREATION DATE : 7-MAY-1987
;
;--
.link "SYS$SYSTEM:DCLDEF.STB"
.link "SYS$SYSTEM:SYS.STB"
.weak SYS$K_VERSION ; Require recompilation
; For next VMS upgrade
$PRVDEF ; Get privileges definitions
page
.subtitle DCL internal routine addresses
;++
;
; The following entities correspond to DCL routines. Their address
; are subject to modification with each VMS upgrade. The DCL base
; address is given by process context symbol CTL$AG_CLIMAGE. Offsets
; for internal DCL routines are taken from the DCL map file.
; These offsets are valid for VMS 4.5.
; Initial values of longwords are the offset inside the DCL image
; for the corresponding routine.
;
;--
.psect $DATA, pic, con, rel, lcl, wrt, rd, noexe, noshr, novec
DCL$PURGE_SYM: .long ^X2363 ; Purge active symbol table
DCL$RESTORE_SYM: .long ^X2244 ; Restore a symbol in the table
DCL$RESTORE_ABBREV: .long ^X22B7 ; Restore abbreviation from current tabl
e
DCL$DEALLOCSYM: .long ^X1FE9 ; Deallocate a symbol from table
page
.subtitle DCL linkage
.psect $CODE, pic, con, rel, gbl, nowrt, rd, exe, shr
.entry DCL_LINK, ^m<>
;++
;
; This routine establish the linkage with the DCL image.
;
; Inputs:
;
; None
;
; Outputs:
;
; None
;
;--
movl G^CTL$AG_CLIMAGE, R1 ; Get DCL base address
addl R1, DCL$PURGE_SYM ; Compute DCL internal
addl R1, DCL$RESTORE_SYM ; routines addresses
addl R1, DCL$RESTORE_ABBREV
addl R1, DCL$DEALLOCSYM
ret
page
.subtitle SYMTBLDMP - Main routine
.psect $CODE, pic, con, rel, gbl, nowrt, rd, exe, shr
.entry SYMBOLS, ^m<>
;++
;
; This routine constitute the main routine of the program
;
; Inputs:
;
; None
;
; Outputs:
;
; None
;
;--
.psect $DATA, pic, con, rel, lcl, wrt, rd, noexe, noshr, novec
file_fab: $FAB FOP=<OFP, SQO> ; Symbol table file FAB
file_rab: $RAB FAB=file_fab ; Symbol record RAB
save: .ascid "SAVE" ; CLI qualifier
restore: .ascid "RESTORE" ; CLI qualifier
file_name: .ascid "FILE_NAME" ; CLI parameter
cmexecprv: .quad <1@PRV$V_CMEXEC> ; Priv. mask
prvmsk: .quad 0
.psect $CODE, pic, con, rel, gbl, nowrt, rd, exe, shr
.default displacement, word
$SETPRV_S ENBFLG=#1, - ; Set CMEXEC privilege
PRVADR=cmexecprv, - ; during image execution
PRMFLG=#0, -
PRVPRV=prvmsk
pushab file_name ; Is file name present ?
calls #1, G^CLI$PRESENT
blbs R0, 20$ ; No signal the error
10$: ret
20$: clrq -(SP) ; Reserve space on stack for descriptor
movl SP, R2 ; Save descriptor address
movb #DSC$K_DTYPE_T, - ; Build dynamic string descriptor
DSC$B_DTYPE(R2)
movb #DSC$K_CLASS_D, -
DSC$B_CLASS(R2)
pushl R2 ; Get symbol table file name
pushab file_name
calls #2, G^CLI$GET_VALUE
blbc R0, 10$ ; Signal any error
movl DSC$A_POINTER(R2), - ; Update FAB file name fields
file_fab+FAB$L_FNA
movb DSC$W_LENGTH(R2), -
file_fab+FAB$B_FNS
calls #0, dcl_link ; establish DCL linkage
pushab save
calls #1, G^CLI$PRESENT ; Do we save the table ?
blbs R0, 30$
pushab restore
calls #1, G^CLI$PRESENT ; or restore it ?
blbc R0, 50$
movb #FAB$M_GET, -
file_fab+FAB$B_FAC ; Open file for read
$OPEN FAB=file_fab
blbc R0, 50$
$CONNECT RAB=file_rab
blbc R0, 50$
$CMEXEC_S ROUTIN=read_table ; and read the table from the file.
blbc R0, 50$ ; Signal any error
brb 40$ ; Close symbol table file and return
30$: movb #FAB$M_PUT, -
file_fab+FAB$B_FAC ; set write access
$CREATE FAB=file_fab ; Create the dump file
blbc R0, 50$ ; Signal any error
$CONNECT RAB=file_rab ; Connect the rab
blbc R0, 50$ ; Signal any error
$CMEXEC_S ROUTIN=write_table ; and dump the table to it.
blbc R0, 50$ ; Signal any error
40$: $CLOSE FAB=file_fab ; Close the file
50$: ret ; Return to DCL
page
.subtitle Write_table - Dump the table to a file
.entry write_table, ^m<R2, R3, R4, R5, R6, R7, R8, R9, R10, R11>
;++
;
; This routine writes the symbol table to the dump file.
;
; Inputs:
;
; None
;
; Outputs:
;
; None
;
;--
CTX_B_QHEADER = 2
CTX_B_SYMTYPE = 5
CTX_W_SYMSIZE = 3
CTX_C_CLISYMG = 8
CTX_C_CLISYML = 3
CTX_C_MAXLEN = ^X400
CTX_W_TYPE = 0
TABLE_LENGTH = ^X100
moval G^CTL$AG_CLIDATA, R11 ; Get DCL data area address
movl PPD$L_PRC(R11), R11 ; Get process environment
jsb @DCL$PURGE_SYM ; Purge symbol table of invalid symbols
clrl R5 ; Setup loop counter
movl PRC_L_SYMTABLE(R11), R4 ; Get address of central symbol table.
;
; Start of loop to process each symbol entry in each queue in the central
; table.
;
10$: movl R4, R9 ; Save address of listhead
15$: movl SYM_L_FL(R9), R9 ; Get next symbol entry
beql 70$ ; If null address, exits
cmpl R9, R4 ; Are we finished with this queue ?
beql 60$ ; Yes, check if through with the table
;
; Validate this entry, pass through only global symbols and local symbols
; defined at the current procedure level. Do not save permanent symbols.
;
cmpb #SYM_K_PERM, SYM_B_TYPE(R9) ; Is this a permanent symbol ?
beql 15$ ; Yes skip it.
tstw SYM_W_PROCLEVEL(R9) ; Is this a global symbol ?
blss 18$ ; Yes save all global symbols
cmpb #SYM_K_LABEL, SYM_B_TYPE(R9) ; Is this a label ?
beql 15$ ; Yes, ignore labels
cmpw PRC_W_PROCLEVEL(R11), - ; Is this local symbol defined at
SYM_W_PROCLEVEL(R9) ; the current procedure level ?
bneq 15$ ; No, skip it.
18$: tstw SYM_W_NONUNIQUE(R9) ; Is this an abbreviation pointer ?
blss 15$ ; Yes, skip it, copy only master symbol
;
; A valid symbol must be saved.
;
20$: movab SYM_L_BLOCKSEQ+1(R9), R7 ; Set start address of block
movw #CTX_C_CLISYMG, CTX_W_TYPE(R7) ; Assume a global symbol
tstw SYM_W_PROCLEVEL(R9) ; Is this a global symbol ?
blss 25$ ; Yes, symbol type is ok.
movw #CTX_C_CLISYML, CTX_W_TYPE(R7) ; No, change to local symbol
25$: movb R5, CTX_B_QHEADER(R7) ; Store current queue header offset
movzwl SYM_W_SIZE(R9), R3 ; Get total size required to store sym.
;
; Since the entire symbol entry definition will not be saved, adjust this
; size by adding the CTX overhead and substracting that portion of the
; symbol definition which will not be saved.
;
subl #SYM_C_FIXED, R3 ; Adjust size
cmpw R3, #CTX_C_MAXLEN ; Is this symbol too long ?
bgtru 100$ ; Yes, report skipping it
movl R7, file_rab+RAB$L_RBF ; Set buffer address
movw R3, file_rab+RAB$W_RSZ ; and length
$PUT RAB=file_rab ; and write it.
brb 15$ ; Get next symbol entry
;
; This queue is finished, check if there are more queues in the central
; symbol table to process.
;
60$: addl #8, R4 ; Point to next queue
incl R5
cmpl R5, #TABLE_LENGTH ; Process next queue, if not at end
bgtr 70$
brw 10$
70$: movzbl #SS$_NORMAL, R0
ret ; return if all finished.
;
; We have encountered an oversized symbol. Issue a warning message saying
; that it is ignored and then proceed.
;
100$: movab SYM_T_SYMBOL+1(R4), -(SP); Push descriptor of the symbol name
movzbl SYM_T_SYMBOL(R4), -(SP)
pushl SP ; Descriptor address
movl #1, R1 ; Set number of arguments
pushl #CLI$_SYMTOOLNG ; Message name
calls #3, G^LIB$SIGNAL ; Output message
clrq (SP)+ ; Clean stack
brw 15$ ; Process next symbol
page
.subtitle READ_TABLE - Read and restore the symbol table
.entry READ_TABLE, ^m<R2, R3, R4, R5, R6, R7, R8, R9, R10, R11>
;++
;
; This routine reads the symbol table from a file and
; restore it.
;
; Inputs:
;
; None
;
; Outputs:
;
; None
;
;--
moval G^CTL$AG_CLIDATA, R11 ; Get DCL data area address
movl PPD$L_PRC(R11), R11 ; Get process environment
jsb delete_table ; Delete existing table
moval -CTX_C_MAXLEN(SP), SP ; Reserve symbol file buffer
movl SP, R5 ; and get its address
movl R5, file_rab+RAB$L_UBF ; Set buffer address
movw #CTX_C_MAXLEN, - ; Set buffer length
file_rab+RAB$W_USZ
10$: $GET RAB=file_rab ; Read symbol from file
cmpl R0, #RMS$_EOF ; Are we at end of file ?
beql 30$
blbc R0, 40$ ; Is there any error ?
movl file_rab+RAB$L_UBF, R5 ; Get record address
movzbl CTX_B_QHEADER(R5), R4 ; Get queue list offset in symbol table
movzwl CTX_W_SYMSIZE(R5), R1 ; Get size of memory required for symbol
movl PRC_L_SYMTABLE(R11), R6 ; Assume we have global symbol
cmpb #SYM_K_KEYPAD, - ; Is this a keypad symbol ?
CTX_B_SYMTYPE(R5)
bneq 20$ ; No table address is ok as is
clrl R4 ; Use first queue list (the keypad
; table only has one queue list.
movab PRC_Q_KEYPAD(R11), R6 ; Get address of keypad table listhead
20$: jsb @DCL$RESTORE_SYM ; Store this symbol
brb 10$ ; Go to next symbol
30$: jsb @DCL$RESTORE_ABBREV ; Restore abbreviate symbols
movzbl #SS$_NORMAL, R0 ; Return success
40$: ret
page
.subtitle DELETE_TABLE - Delete all symbols in tables
;.entry DELETE_TABLE, ^m<R2, R3, R4, R5, R6, R7, R8, R9, R10, R11>
;++
;
; This routine delete all symbols in a table. It is used before
; restoring a symbol table from a file in order to avoid the
; redefinition of symbols.
;
; Inputs:
;
; R11 = Per process context area address
;
; Outputs:
;
; None
;
;--
delete_table:
movl #SYM_C_GLOBAL, R7 ; Set global search type
movl PRC_L_SYMTABLE(R11), R6 ; Get first queue in symbol table
clrl R5 ; Clear loop counter
10$: movl R6, R3 ; Save address of queue header
20$: movl (R3), R3 ; Get address of next symbol
cmpl R6, R3 ; End of queue ?
beql 40$ ; Yes skip to next queue
cmpb #SYM_K_LABEL, - ; Is this a label entry ?
SYM_B_TYPE(R3)
beql 20$ ; Yes skip it.
tstw SYM_W_PROCLEVEL(R3) ; Is this a local symbol ?
bgeq 20$ ; Yes, then skip it.
;
; We have found a global symbol. Check if it is permanent and deallocate it
; if it is not.
;
cmpb #SYM_K_PERM, SYM_B_TYPE(R3); Permanent symbol ?
beql 20$ ; Don't deallocate it if yes.
pushab 20$ ; Set return address
jmp @DCL$DEALLOCSYM ; Deallocate it.
40$: addl #8, R6 ; Point to hext queue header in table
aoblss #TABLE_LENGTH, R5, 10$ ; Process next queue
50$: movzbl #SS$_NORMAL, R0 ; Return success
rsb
.end SYMBOLS
------------------------------
End of Info-Vax Digest
**********************