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 **********************