$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 1-JUN-1993 11:47:01.06 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. LOGNAM.DESC;1 $! 2. LOGNAM.DSJ;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' XThis`20file`20features`20a`20routine`20previously`20published`20in`20the`20May V/June`201993`20 Xissue`20of`20Digital`20Systems`20Journal.`20It`20was`20originally`20run`20as V`20part`20of`20David`20N.`20 XGreene's`20article,`20"Using`20Shareable`20Logical`20Name`20Tables`20for`20App Vlicationwide`20 XCommunications,"`20which`20ran`20on`20page`2025.`20The`20article`20provides V`20reasons`20to`20use`20 Xlogical`20names`20as`20an`20applicationwide`20communications`20technique,`20as V`20well`20as`20 Xalternative`20techniques`20for`20application`20communications.`20It`20also`20l Vooks`20at`20the`20 Xdetails`20of`20using`20shareable`20logical`20name`20tables`20and`20provides V`20some`20suggestions Xfor`20their`20use`20in`20large`20applications. $ call unpack LOGNAM.DESC;1 1074794621 "" $! $ create 'f' X$! X$!`20---`20LOGNAME.COM`20--- X$! X$! X$!`20Create`20shareable`20logical`20name`20table`20PROJECT_FOO. X$!`20 X$`20SET`20PROCESS/PRIVILEGES=SYSPRV X$`20CREATE/NAME_TABLE/PROTECTION=(S:RWED,O:RWED,G:RWE,W:R)`20- X`20`20`20`20`20`20`20`20/PARENT=LNM$SYSTEM_DIRECTORY/LOG`20`20PROJECT_FOO X$! X$! X$!`20Associate`20some`20ACLs`20with`20the`20table`20PROJECT_FOO.`20`20Note: V`20 X$!`20the`20security`20event`20alarm`20ACL`20does`20not`20work`20as`20of`20VMS V`205.5-2. X$! X$`20SET`20ACL/OBJECT=LOGICAL_NAME_TABLE`20/ACL=`20- X`20`20`20`20`20`20`20`20`20(ID=`5B*,*`5D`20,`20ACCESS=WRITE+DELETE)`20PROJECT_ VFOO X$`20SET`20ACL/OBJECT=LOGICAL_NAME_TABLE`20/ACL=`20- X`20`20`20`20`20`20`20`20`20(ALARM_JOURNAL=SECURITY,`20ACCESS=WRITE+DELETE+SUCC VESS)`20PROJECT_FOO X$! X$! X$!`20Look`20at`20process`20and`20system`20logical`20name`20table`20directories V`20 X$!`20to`20see`20the`20table`20we`20just`20created. X$!`20 X$`20SHOW`20LOGICAL/STRUCTURE X$! X$! X$!`20Define`20some`20logical`20names`20in`20table`20PROJECT_FOO. X$!`20 X$`20DEFINE/TABLE=PROJECT_FOO`20`20SAMP_LOGICAL`20`20`20"ABC123" X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"ON" X$! X$! X$!`20Look`20at`20the`20logicals`20that`20we`20just`20defined X$!`20 X$`20SHOW`20LOG/FULL/TABLE=PROJECT_FOO`20* X$! X$! X$!`20Check`20the`20Ada`20version`20of`20the`20sample`20file.`20`20First`20crea Vte`20a X$!`20temporary`20Ada`20library`20and`20compile`20and`20link`20the`20files. X$!`20Then`20set`20the`20logical`20name`20FOO$DEBUG`20to`20different`20values V`20and X$!`20run`20the`20code`20to`20see`20output. X$! X$`20ACS`20CREATE`20LIBRARY`20`5B.TMP_ADALIB`5D X$`20ACS`20SET`20`20`20`20LIBRARY`20`5B.TMP_ADALIB`5D X$`20ADA`20TRNLNM.ADA X$`20ADA`20LOGTEST.ADA X$`20ACS`20LINK`20LOGTEST X$! X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"ON" X$`20RUN`20LOGTEST X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"OFF" X$`20RUN`20LOGTEST X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"OOOOOOPS" X$`20RUN`20LOGTEST X$! X$! X$!`20Check`20the`20FORTRAN`20version`20of`20the`20sample`20file.`20`20Compile V`20and`20 X$!`20link`20the`20file.`20`20Then`20set`20the`20logical`20name`20FOO$DEBUG`20t Vo`20 X$!`20different`20values`20and`20run`20the`20code`20to`20see`20output. X$! X$`20FORTRAN`20LOGTEST.FOR X$`20LINK`20`20`20`20LOGTEST.OBJ X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"ON" X$`20RUN`20LOGTEST X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"OFF" X$`20RUN`20LOGTEST X$`20DEFINE/TABLE=PROJECT_FOO`20`20FOO$DEBUG`20`20`20`20`20`20"OOOOOOPS" X$`20RUN`20LOGTEST X$! X$! X$!`20Clean`20up. X$! X$`20DEASSIGN/TABLE=LNM$SYSTEM_DIRECTORY`20PROJECT_FOO X$`20ACS`20DELETE`20LIBRARY`20`5B.TMP_ADALIB`5D X$`20DELETE`20LOGTEST.OBJ;* X$`20DELETE`20LOGTEST.EXE;* X$! X$! X$`20EXIT X X`0C X X`20`20`20`20`20`20`20`20PROGRAM`20LOGTEST XC+ XC`20 XC`20`20FUNCTIONAL`20DESCRIPTION: XC`20`20`20 XC`20`20`20`20`20`20`20This`20procedure`20calls`20the`20TRNLNM`20system`20servi Vce`20routine`20to XC`20`20`20`20`20`20`20translate`20the`20logical`20name`20FOO$DEBUG`20in`20the V`20logical`20name XC`20`20`20`20`20`20`20table`20PROJECT_FOO.`20`20A`20different`20message`20is V`20output`20to`20the XC`20`20`20`20`20`20`20screen`20depending`20on`20the`20current`20value`20of`20F VOO$DEBUG. XC`20 XC`20`20`20 XC`20`20FORMAL`20PARAMETERS: XC`20`20`20 XC`20`20`20`20`20`20`20None. XC`20`20`20`20`20`20`20`20 XC`20 XC`20MODIFICATION`20HISTORY: XC`20 XC`20`20`20`20`20Date`20`20`20`7C`20`20`20`20`20Name`20`20`20`20`20`20`7C`20Des Vcription XC------------+---------------+------------------------------------------------ V- XC`20`20`2001AUG92`20`20`20`20David`20Greene`20`20`20`20Initial`20creation. XC XC XC- X`20`20`20`20`20`20`20`20INCLUDE`20'($LNMDEF)'`20`20`20`20`20`20`20`20`20`20 V`20`20`20!`20SYS$TRNLNM`20parameter`20definitions X`20`20`20`20`20`20`20`20INCLUDE`20'($SSDEF)'`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20!`20system`20service`20definitions X X`20`20`20`20`20`20`20`20STRUCTURE`20/ITMLST/`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20!`20SYS$TRNLNM`20item-list`20buffer X`20`20`20`20`20`20`20`20`20`20`20`20INTEGER*2`20`20`20BUFF_LEN X`20`20`20`20`20`20`20`20`20`20`20`20INTEGER*2`20`20`20ITEM_CODE X`20`20`20`20`20`20`20`20`20`20`20`20INTEGER*4`20`20`20BUF_ADR X`20`20`20`20`20`20`20`20`20`20`20`20INTEGER*4`20`20`20RET_LEN_ADR X`20`20`20`20`20`20`20`20`20`20`20`20INTEGER*4`20`20`20END_LIST X`20`20`20`20`20`20`20`20END`20STRUCTURE X`20`20`20`20`20`20`20`20RECORD`20/ITMLST/`20`20`20LNM_ILIST X X`20`20`20`20`20`20`20`20INTEGER*4`20`20`20`20`20`20`20STATUS`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20!`20status`20return`20value X`20`20`20`20`20`20`20`20INTEGER*4`20`20`20`20`20`20`20TRANSLATION_SIZE`20`20 V`20`20`20!`20equivalence`20string`20length X`20`20`20`20`20`20`20`20CHARACTER*255`20`20`20LOG_NAME`20`20`20`20`20`20`20 V`20`20`20`20`20`20!`20equivalence`20string X X`20`20`20`20`20`20`20`20LNM_ILIST.BUFF_LEN`20`20`20`20=`20255`20`20`20`20`20 V`20`20`20`20`20!`20max`20log`20name`20length X`20`20`20`20`20`20`20`20LNM_ILIST.ITEM_CODE`20`20`20=`20LNM$_STRING X`20`20`20`20`20`20`20`20LNM_ILIST.BUF_ADR`20`20`20`20`20=`20%LOC(LOG_NAME) X`20`20`20`20`20`20`20`20LNM_ILIST.RET_LEN_ADR`20=`20%LOC(TRANSLATION_SIZE) X`20`20`20`20`20`20`20`20LNM_ILIST.END_LIST`20`20`20`20=`200 X X X`20`20`20`20`20`20`20`20CALL`20SYS$TRNLNM`20(`200,'PROJECT_FOO','FOO$DEBUG',,L VNM_ILIST`20) X X X`20`20`20`20`20`20`20`20IF`20(`20LOG_NAME(1:TRANSLATION_SIZE)`20.EQ.`20'ON' V`20)`20THEN X`20`20`20`20`20`20`20`20`20`20`20`20TYPE`20*,`20'`20Now`20inside`20module`20LO VGTEST`20' X X`20`20`20`20`20`20`20`20ELSE`20IF`20(`20LOG_NAME(1:TRANSLATION_SIZE)`20.EQ. V`20'OFF'`20)`20THEN X`20`20`20`20`20`20`20`20`20`20`20`20TYPE`20*,`20'`20Doing`20other`20useful`20w Vork' X X`20`20`20`20`20`20`20`20ELSE X`20`20`20`20`20`20`20`20`20`20`20`20TYPE`20*,`20`20'Logical`20name`20FOO$DEBUG V`20not`20set`20properly.`20' X`20`20`20`20`20`20`20`20`20`20`20`20WRITE`20(6,`2010)`20LOG_NAME X10`20`20`20`20`20`20`20`20`20`20FORMAT`20('`20Logname`20translation:`20`20`20 V`20`20`20',`20A) X X`20`20`20`20`20`20`20`20END`20IF X X`20`20`20`20`20`20`20`20END X X`0C X Xwith`20TEXT_IO; Xwith`20TRNLNM; Xprocedure`20LOGTEST`20is X`20 X--`20+ X-- X--`20`20FUNCTIONAL`20DESCRIPTION: X-- X--`20`20`20`20`20`20This`20procedure`20is`20an`20example`20of`20using`20the V`20interface`20routine`20 X--`20`20`20`20`20`20(procedure`20TRNLNM.ADA)`20to`20call`20the`20logical`20nam Ve`20translation`20 X--`20`20`20`20`20`20system`20service`20to`20translate`20the`20logical`20name V`20FOO$DEBUG`20in`20 X--`20`20`20`20`20`20the`20shareable`20logical`20name`20table`20PROJECT_FOO. V`20`20A`20different`20 X--`20`20`20`20`20`20message`20is`20output`20to`20the`20screen`20depending`20on V`20the`20current`20 X--`20`20`20`20`20`20value`20of`20FOO$DEBUG. X-- X-- X--`20`20FORMAL`20PARAMETERS: X-- X--`20`20`20`20`20`20None. X-- X-- X--`20MODIFICATION`20HISTORY: X-- X--`20`20`20`20`20Date`20`20`20`7C`20`20`20`20`20Name`20`20`20`20`20`20`7C`20De Vscription X--------------+---------------+----------------------------------------------- V-- X--`20`20`2001AUG92`20`20`20`20David`20Greene`20`20`20`20Initial`20creation. X-- X-- X--`20- X`20 X`20`20`20`20LOG_TRANSLATION`20`20`20:`20string`20(1..255)`20:=`20(others`20=> V`20'`20'); X`20`20`20`20LOGICAL_NAME`20`20`20`20`20`20:`20constant`20string`20:=`20"FOO$DE VBUG"; X`20`20`20`20TABLE_NAME`20`20`20`20`20`20`20`20:`20constant`20string`20:=`20"PR VOJECT_FOO"; X`20`20`20`20TSIZE`20`20`20`20`20`20`20`20`20`20`20`20`20:`20short_integer`20 V`20`20:=`200; X`20 Xbegin X`20`20`20`20TRNLNM`20(`20LOG_NAME`20`20`20`20`20`20`20`20`20`20=>`20`20LOGICAL V_NAME, X`20`20`20`20`20`20`20`20`20`20`20`20`20LOG_TABLE`20`20`20`20`20`20`20`20`20=> V`20`20TABLE_NAME, X`20`20`20`20`20`20`20`20`20`20`20`20`20TRANSLATION`20`20`20`20`20`20`20=>`20 V`20LOG_TRANSLATION, X`20`20`20`20`20`20`20`20`20`20`20`20`20TRANSLATION_SIZE`20`20=>`20`20TSIZE`20) V; X`20 X`20`20`20`20if`20(LOG_TRANSLATION(`201..integer(TSIZE))`20=`20"ON"`20)`20then X`20`20`20`20`20`20`20`20TEXT_IO.PUT_LINE`20`20`20`20("Now`20inside`20module V`20LOGTEST"); X`20 X`20`20`20`20elsif`20(LOG_TRANSLATION(`201..integer(TSIZE))`20=`20"OFF"`20)`20t Vhen X`20`20`20`20`20`20`20`20TEXT_IO.PUT_LINE`20`20`20`20("Doing`20other`20useful V`20work."); X`20 X`20`20`20`20else X`20`20`20`20`20`20`20`20TEXT_IO.PUT_LINE`20`20`20`20("Logical`20name`20FOO$DEB VUG`20not`20set`20properly."); X`20`20`20`20`20`20`20`20TEXT_IO.PUT`20`20`20`20`20`20`20`20`20("Logname`20tran Vslation:`20`20`20`20`20`20`20`20"); X`20`20`20`20`20`20`20`20TEXT_IO.PUT_LINE`20`20`20`20(LOG_TRANSLATION(`201..int Veger(TSIZE))`20); X`20`20`20`20end`20if; X`20 Xend`20LOGTEST; X X`0C X Xwith`20CONDITION_HANDLING; Xwith`20STARLET; Xwith`20SYSTEM; Xwith`20TEXT_IO;`20 X`20 Xprocedure`20TRNLNM`20`20(`20LOG_NAME`20`20`20`20`20`20`20`20`20`20:`20in`20 V`20string; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20LOG_TABLE`20`20 V`20`20`20`20`20`20`20:`20in`20`20string; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20TRANSLATION`20`20 V`20`20`20`20`20:`20out`20string; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20TRANSLATION_SIZE V`20`20:`20out`20SHORT_INTEGER`20)`20is X--`20++ X-- X--`20FUNCTIONAL`20DESCRIPTION: X-- X--`20`20`20`20`20`20This`20procedure`20provides`20an`20Ada`20interface`20to V`20the`20VMS`20Translate X--`20`20`20`20`20`20Logical`20Name`20system`20service`20routine.`20`20The`20ca Vlling`20routine`20passes`20in X--`20`20`20`20`20`20the`20logical`20name`20to`20be`20translated,`20and`20the V`20logical`20name`20table`20in X--`20`20`20`20`20`20which`20the`20logical`20name`20resides.`20`20The`20equival Vence`20string`20and`20its X--`20`20`20`20`20`20length`20in`20bytes`20is`20returned.`20`20 X--`20 X--`20`20`20`20`20`20If`20for`20any`20reason`20the`20logical`20name`20cannot V`20be`20successfully X--`20`20`20`20`20`20translated,`20the`20translation`20string`20is`20set`20to V`20be`20all`20ASCII X--`20`20`20`20`20`20spaces`20and`20the`20equivalence`20string`20length`20is V`20set`20to`20zero. X--`20`20`20`20`20`20Additionally,`20an`20error`20message`20is`20output`20to V`20SYS$OUTPUT. X-- X--`20FORMAL`20PARAMETERS: X-- X--`20`20`20`20`20`20LOGNAME: X--`20`20`20`20`20`20`20`20`20`20The`20logical`20name`20to`20be`20translated. X-- X--`20`20`20`20`20`20LOG_TABLE: X--`20`20`20`20`20`20`20`20`20`20The`20logical`20name`20table`20that`20contains V`20the`20logical`20name. X-- X--`20`20`20`20`20`20TRANSLATION: X--`20`20`20`20`20`20`20`20`20`20The`20logical`20name`20equivalence`20string. X-- X--`20`20`20`20`20`20TRANSLATION_SIZE: X--`20`20`20`20`20`20`20`20`20`20The`20length`20of`20the`20logical`20name`20equ Vivalance`20string`20in`20bytes. X-- X-- X--`20MODIFICATION`20HISTORY: X-- X--`20`20`20`20`20`2001AUG92`20`20`20`20`20David`20N.`20Greene`20`20`20`20`20 V`20`20`20`20Initial`20creation. X-- X-- X--`20-- X`20 X`20`20`20`20subtype`20SHORT_STRING`20is`20string`20(1..255);`20`20`20--`20max V`20size`20of`20a`20logical`20name X`20`20`20`20NAME_BUFFER`20`20`20`20`20:`20SHORT_STRING; X`20`20`20`20NAME_SIZE`20`20`20`20`20`20`20:`20SHORT_INTEGER; X`20`20`20`20RETURN_STATUS`20`20`20:`20CONDITION_HANDLING.COND_VALUE_TYPE; X`20 X--`20Pragma`20VOLATILE`20specifies`20that`20every`20read`20is`20to`20the`20var Viables`20in X--`20memory,`20not`20to`20local`20copy. X`20 X`20`20`20`20pragma`20VOLATILE`20(NAME_BUFFER); X`20`20`20`20pragma`20VOLATILE`20(NAME_SIZE); X`20 X--`20Initialized`20item`20list.`20`20Zeros`20in`20last`20element`20indicate V`20the`20end`20of`20list. X`20 X`20`20`20`20ITEM_LIST`20`20`20:`20STARLET.ITEM_LIST_TYPE`20(1..2)`20:= X`20`20`20`20`20`20`20`20(1`20=>`20(BUF_LEN`20`20`20`20`20`20=>`20NAME_BUFFER'l Vength, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ITEM_CODE`20`20`20`20=>`20STARLET V.LNM_STRING, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BUF_ADDRESS`20`20=>`20NAME_BUFFER V'address, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20RET_ADDRESS`20`20=>`20NAME_SIZE'a Vddress), X`20`20`20`20`20`20`20`20`202`20=>`20(BUF_LEN`20`20`20`20`20`20=>`200, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20ITEM_CODE`20`20`20`20=>`200, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20BUF_ADDRESS`20`20=>`20SYSTEM.ADDR VESS_ZERO, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20RET_ADDRESS`20`20=>`20SYSTEM.ADDR VESS_ZERO)`20); X Xbegin X`20 X`20`20`20`20STARLET.TRNLNM`20(`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20--`20call`20translate`20logname`20service X`20`20`20`20`20`20`20STATUS`20=>`20RETURN_STATUS, X`20`20`20`20`20`20`20TABNAM`20=>`20LOG_TABLE, X`20`20`20`20`20`20`20LOGNAM`20=>`20LOG_NAME, X`20`20`20`20`20`20`20ITMLST`20=>`20ITEM_LIST); X`20 X`20`20`20`20if`20not`20CONDITION_HANDLING.SUCCESS`20(`20RETURN_STATUS`20)`20th Ven X`20`20`20`20`20`20`20TEXT_IO.PUT`20("Bad`20return`20status:`20Failed`20to`20tr Vanslate`20logical`20name`20"); X`20`20`20`20`20`20`20TEXT_IO.PUT`20(LOG_NAME); X`20`20`20`20`20`20`20TEXT_IO.NEW_LINE; X`20`20`20`20`20`20`20TRANSLATION`20`20`20`20`20`20`20:=`20(others`20=>`20'`20' V);`20`20`20`20--`20set`20string`20to`20spaces X`20`20`20`20`20`20`20TRANSLATION_SIZE`20`20:=`200;`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20--`20set`20length`20to`20zero X`20 X`20`20`20`20else`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20--`20call`20was`20successful X`20`20`20`20`20`20`20TRANSLATION(1..integer(NAME_SIZE))`20:=`20NAME_BUFFER(1.. Vinteger(NAME_SIZE)); X`20`20`20`20`20`20`20TRANSLATION_SIZE`20:=`20NAME_SIZE; X`20`20`20`20end`20if; X`20 Xend`20TRNLNM; $ call unpack LOGNAM.DSJ;1 2052654402 "" $ v=f$verify(v) $ exit