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,217 of 264,096    |
|    John Reagan to All    |
|    Re: Fun trick    |
|    08 Jan 25 15:42:07    |
   
   From: johnrreagan@earthlink.net   
      
   On 1/8/2025 2:36 PM, Arne Vajhøj wrote:   
   > On 1/8/2025 12:37 PM, John Reagan wrote:   
   >> 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:   
   > ...   
   >> 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.   
   >   
   > Zweite Sehr Verbesserte Ausgabe:   
   >   
   > $ type lib.pas   
   > [inherit('sys$library:pascal$lib_routines', 'sys$library:starlet')]   
   > module lib(input, output);   
   >   
   > [initialize]   
   > 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.   
   > $ pas lib   
   > $ link/share=libshr lib + sys$library:starlet/lib/incl=lib$initialize +   
   > 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   
   >   
   And the compiler also supports the Extended Pascal TO BEGIN DO and TO   
   END DO statements. TO BEGIN DO is just the same as [INITIALIZE] but   
   allows any statement. TO END DO is an exit handler (registered with an   
   initialization routine).   
      
   --- 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