home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.os.vms      DEC's VAX* line of computers & VMS.      264,096 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 262,216 of 264,096   
   John Reagan to All   
   Re: Fun trick   
   08 Jan 25 12:37:44   
   
   From: johnrreagan@earthlink.net   
      
   On 1/7/2025 8:58 PM, Arne Vajhøj wrote:   
   > During some troubleshooting over at VSI forum hb told me that   
   > running a shareable image will execute LIB$INITIALIZE   
   > functions.   
   >   
   > That made me write this:   
   >   
   > $ type lib.pas   
   > [inherit('sys$library:pascal$lib_routines', 'sys$library:starlet')]   
   > module lib(input, output);   
   >   
   > [global]   
   > procedure check;   
   >   
   > var   
   >     imgnam : varying [1024] of char;   
   >   
   > begin   
   >     lib$getjpi(item_code := jpi$_imagname, resultant_string :=   
   > imgnam.body, resultant_length := imgnam.length);   
   >     if index(imgnam, ']libshr.EXE') > 0 then begin   
   >        writeln('This is a shareable image to link against not run');   
   >        $exit(ss$_normal);   
   >     end;   
   > end;   
   >   
   > [global]   
   > procedure say;   
   >   
   > begin   
   >     writeln('Hi');   
   > end;   
   >   
   > end.   
   > $ type prg.pas   
   > program prg(input,output);   
   >   
   > [external]   
   > procedure say; external;   
   >   
   > begin   
   >     say;   
   > end.   
   > $ type trick.mar   
   >          .title  trick   
   >          .extrn  lib$initialize   
   >          .psect  lib$initialize long,nopic,con,gbl,noshr,noexe,nowrt   
   >          .address check   
   >          .end   
   > $ macro trick   
   > $ pas lib   
   > $ link/share=libshr lib + trick + sys$input/opt   
   > SYMBOL_VECTOR=(say=PROCEDURE)   
   > $   
   > $ define/nolog libshr sys$disk:[]libshr   
   > $ pas prg   
   > $ link prg + sys$input/opt   
   > libshr/share   
   > $   
   > $ run prg   
   > Hi   
   > $ run libshr   
   > This is a shareable image to link against not run   
   >   
   > :-)   
   >   
   > Arne   
   >   
   Pascal has an [INITIALIZE] attribute that you can put on the PROCEDURE   
   CHECK and the compiler should do the contribution to the LIB$INITIALIZE   
   PSECT.   
      
   And you should include LIB$INITIALIZE (the code module, not the data   
   PSECT) from STARLET when linking.  The x86 linker will do that for you,   
   but the Alpha and Itanium linkers do not.   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca