! Procedures to emulate the VMS Logical name system on the EMAS profile system. ! J. Gordon Hughes, April 1983 %external %routine %spec READ PROFILE (%string (11) KEY, %name INFO, %integer %name VERSION, FLAG) %external %routine %spec WRITE PROFILE (%string (11) KEY, %name INFO, %integer %name VERSION, FLAG) %external %routine %spec PROMPT (%string (63) TEXT) %external %string (255) %fn TRANSLATE %alias "IMP_TRANSLATE" (%string (255) S) %integer VSN, FLAG %string (255) TX LENGTH(S)=11 %if LENGTH(S)>11 READ PROFILE (S, TX, VSN, FLAG) %result = S %if VSN=0 %result = TX %end %external %integer %function SET LOGICAL %alias "IMP_SET_LOGICAL" ( %c %string(63) Lognam, Eqlnam ) %integer VSN, FLAG %if TRANSLATE(lognam)#lognam %start PRINT STRING ("Previous logical name assignment replaced") NEWLINE %finish VSN = 1 LENGTH(lognam)=11 %if LENGTH(lognam)>11 { This is too small a limit (ERCC) } WRITE PROFILE (lognam, Eqlnam, VSN, FLAG) %result = FLAG %end %external %routine ASSIGN (%string (255) PARM) %string (255) TEXT, NAME %integer VSN, FLAG NAME = "" %unless PARM -> TEXT.(",").NAME %start %if PARM="" %start PROMPT ("Text: ") TEXT = "" %cycle READ SYMBOL (VSN) %exit %if VSN=NL VSN = VSN + 'A' - 'a' %if 'a'<=VSN<='z' TEXT = TEXT.TO STRING (VSN) %repeat %finish PROMPT ("Log-name: ") %if NAME = "" %start %cycle READ SYMBOL (VSN) %exit %if VSN=NL VSN = VSN + 'A' - 'a' %if 'a'<=VSN<='z' NAME = NAME.TO STRING (VSN) %repeat %finish %finish Flag = Set Logical (Name, Text) %if FLAG>1 %start PRINT STRING ("ASSIGN fails - Reason") WRITE (FLAG, 1) NEWLINE %finish %end %external %routine DEASSIGN (%string (255) NAME) %integer VSN, FLAG %string (255) TEXT %if NAME="" %start PROMPT ("Log-name: ") %cycle READ SYMBOL (VSN) %exit %if VSN=NL VSN = VSN + 'A' - 'a' %if 'a'<=VSN<='z' NAME = NAME.TO STRING (VSN) %repeat %finish %if TRANSLATE (NAME)#NAME %start LENGTH(NAME)=11 %if LENGTH(NAME)>11 { same comment as above ! } VSN = -1 WRITE PROFILE (NAME, TEXT, VSN, FLAG) %if FLAG>1 %start PRINT STRING ("DEASSIGN fails - Reason") WRITE (FLAG, 1) NEWLINE %finish %finish %else %start PRINT STRING ("No Logical name match") NEWLINE %finish %end %external %routine SEE (%string (255) PARM) %integer V %string (255) TX %if PARM="" %start PROMPT ("See what? ") %cycle READ SYMBOL (V) %exit %if V=NL V = V + 'A' - 'a' %if 'a'<=V<='z' PARM = PARM.TO STRING (V) %repeat %finish TX = TRANSLATE(PARM) %if TX=PARM %then PRINT STRING ("*** No meaning for ".PARM) %c %else PRINT STRING ("Log-name ".PARM." => ".TX) NEWLINE %end %external %string (255) %fn TX %alias "TRANSLATE" (%string (255) S) %result = TRANSLATE (S) %end %end %of %file