[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference noted::hackers_v1

Title:-={ H A C K E R S }=-
Notice:Write locked - see NOTED::HACKERS
Moderator:DIEHRD::MORRIS
Created:Thu Feb 20 1986
Last Modified:Mon Aug 03 1992
Last Successful Update:Fri Jun 06 1997
Number of topics:680
Total number of notes:5456

272.0. "are there restrictions to logical values?" by SNO78A::BRAHAM (Pete Braham) Wed Jul 16 1986 03:48

   $ foo[0,8] = 26
   $ def logi "''foo'"
   $ write sys$output f$cvsi(0,8,  f$trn("logi"))
    
works fine, & I can replace the 26 in the first line with other numbers
, eg 28. But if I use 27 (ie foo[0,8] = 27) I get a dcl out of range
error - what is going on? 
T.RTitleUserPersonal
Name
DateLines
272.1Fascinating...KAHLUA::SANTIAGOEd SantiagoWed Jul 16 1986 12:1124
    It seems like f$trnlnm is somehow gobbling the escape... I tried:
    
    ( foo is defined to "<ESC>[1mtest", which for those not too keen
      on escape sequences types out "test" in bold video )
    
    $ write sys$output foo		! does the correct thing
    $ define logi "''foo'"
    $ show logical logi			! Looks OK, <ESC> is of course
    					!  displayed as a "."
    $ write sys$output f$trnlnm("logi")	! Wrong! Only 'test' appears,
    					!  the escape sequence is gobbled,
    					!  but the 'test' is NOT highlighted!
    
    The 'field spec out of bounds' error is caused by this, since it
    does not happen if 'logi' has something appended to it that is
    not part of an escape sequence. To use this example, if I were
    to do a 
    
    $ write sys$output f$cvsi(0,8,f$trnlnm("logi"))
    
    the result would be 116 (ASCII value of 't' in 'test').
    
    So is this a bug or a feature?
    
272.2Not a bug, Feature?NOVA::KLEINWed Jul 16 1986 15:229
    Since DCL puts a special prefix (ESC+channel) into its logical
    names for process-permanent files, it would seem that f$trnlnm
    (SHOW LOGICAL also) is stripping it out again.  You can "outsmart"
    DCL by putting an extra "<ESC>XXX" at the beginning of the sequence.
    
    $ define logi "''esc'xxx''esc'[1mtest"
    $ write sys$output f$trnlnm("logi")
    
    -steve-