$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.2 $! On 5-FEB-1993 14:51:17.60 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. PAGE.DESC;1 $! 2. PAGE.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 = "!" $ 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`20program`20previously`20published`20in`20the`20Jan Vuary/February`20 X1993`20issue`20of`20Digital`20Systems`20Journal.`20It`20was`20originally`20pub Vlished`20as`20part`20 Xof`20Eric`20M.`20LaFranchi`20and`20Kathleen`20D.`20Morse'`20article`20titled V`20"Alpha`20 XMigration:`20Understanding`20and`20Identifying`20Page-Size`20Dependencies`20in V`20 XMigrating`20Applications`20to`20Alpha`20AXP`20Systems,"`20which`20ran`20on`20p Vage`2010.`20The`20 Xarticle`20focuses`20on`20migration`20issues`20dealing`20with`20page`20size`20d Vependencies. $ call unpack PAGE.DESC;1 1863733646 "" $! $ create 'f' X`5BFigure`201`5D:`20Program`20example`20to`20get`20system-specific`20page`20si Vze. X X/* X`20*`20Abstract: X`20*`09This`20is`20a`20program`20to`20get`20the`20page`20size`20of`20the`20cur Vrent`20system`20at X`20*`09run-time`20and`20display`20it`20to`20the`20user. X`20* X`20*`20Inputs: X`20*`09None X`20* X`20*`20Outputs: X`20*`09Page`20size`20is`20written`20to`20SYS$OUTPUT. X`20* X`20*`20Return`20Value: X`20*`09Status`20of`20$GETSYI`20system`20service X`20* X`20*`20Special`20Notes: X`20*`09The`20SYI$_PAGE_SIZE`20is`20not`20supported`20on`20OpenVMS`20VAX`20vers Vions X`20*`09prior`20version`20V5.4-2. X`20*`09 X`20*/ X#include`20 X#include`20 X#include`20 X#include`20 X X`20`20`20`20/*`20If`20VAX`20C`20V3.2`20or`20earlier,`20then`20define`20the`20S VYI$_PAGE_SIZE X`20`20`20`20`20*`20item`20code. X`20`20`20`20`20*/ X#ifndef`09SYI$_PAGE_SIZE X#`20`20`20define`09SYI$_PAGE_SIZE`094452 X#endif X Xmain(`20) X`7B X`20`20`20`20long`20page_size; X`20`20`20`20char`20node_name`5B64`5D; X`20`20`20`20register`20long`20status; X X`20`20`20`20struct X`20`20`20`20`7B X`09unsigned`20short`09buflen;`09 X`09unsigned`20short`09item_code; X`09char`09`09*bufadr; X`09unsigned`20short`09*retlen; X`20`20`20`20`7D`20itmlst`5B3`5D; X X`20`20`20`20itmlst`5B0`5D.buflen`20=`20sizeof(`20page_size`20); X`20`20`20`20itmlst`5B0`5D.item_code`20=`20SYI$_PAGE_SIZE; X`20`20`20`20itmlst`5B0`5D.bufadr`20=`20(char`20*)`26page_size; X`20`20`20`20itmlst`5B0`5D.retlen`20=`20NULL; X`20`20`20`20itmlst`5B1`5D.buflen`20=`20sizeof(`20node_name`20); X`20`20`20`20itmlst`5B1`5D.item_code`20=`20SYI$_NODENAME; X`20`20`20`20itmlst`5B1`5D.bufadr`20=`20node_name; X`20`20`20`20itmlst`5B1`5D.retlen`20=`20NULL; X`20`20`20`20itmlst`5B2`5D.buflen`20=`200; X`20`20`20`20itmlst`5B2`5D.item_code`20=`200; X X`20`20`20`20status`20=`20sys$getsyi(`200,`20NULL,`20NULL,`20itmlst,`20NULL, V`20NULL,`200`20); X`20`20`20`20if`20(`20!(status`20`26`201)`20) X`09return`20(`20status`20); X X`20`20`20`20fprintf(`20stdout,`20"%s's`20page`20size:`20%d`5Cn",`20node_name, V`20page_size`20); X X`20`20`20`20return`20(`20SS$_NORMAL`20); X`7D X X`0C X X`5BFigure`203`5D:`20Program`20example`20showing`20page`20size`20dependence`20w Vhen`20 X`20`20`20`20`20`20`20`20`20`20`20`20setting`20protection. X X/* X`20*`20Abstract: X`20*`09This`20program`20demonstrates`20how`20an`20existing`20VAX`20application V X`20*`09may`20change`20the`20page`20protection`20on`20a`20piece`20of`20memory, V`20but`20when X`20*`09recompiled`20and`20linked`20on`20an`20Alpha`20AXP`20system,`20will`20no Vt`20run`20without X`20*`09modification. X`20* X`20*`20Inputs: X`20*`09None X`20* X`20*`20Outputs: X`20*`09Writes`20the`20address`20range`20returned`20from`20the`20$SETPRT`20syst Vem`20service X`20*`09to`20SYS$OUTPUT. X`20* X`20*`20Return`20Value: X`20*`09Error`20status`20from`20$SETPRT`20or`20SS$_NORMAL X`20* X`20*/ X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X Xmain(`20) X`7B X`20`20`20`20static`20char`20data`5B10000`5D; X X`20`20`20`20void`20*inadr`5B2`5D; X`20`20`20`20void`20*retadr`5B2`5D; X X`20`20`20`20register`20long`20int`20status; X X`09/*`20initialize`20to`20input`20address X`09`20*/ X`20`20`20`20inadr`5B0`5D`20=`20(void`20*)`26data`5B0x310`5D; X`20`20`20`20inadr`5B1`5D`20=`20(void`20*)`26data`5B0x620`5D; X X`20`20`20`20status`20=`20sys$setprt(`20inadr,`20retadr,`20PSL$C_USER,`20PRT$C_ VNA,`20NULL`20); X`20`20`20`20if`20(`20!(status`20`26`201)`20) X`09return`20(`20status`20); X X`20`20`20`20printf(`20"inadr`5B0:1`5D`20`20=`20%X,%X`5Cn",`20inadr`5B0`5D,`20i Vnadr`5B1`5D`20); X`20`20`20`20printf(`20"retadr`5B0:1`5D`20=`20%X,%X`5Cn",`20retadr`5B0`5D,`20re Vtadr`5B1`5D`20); X X`09/*`20This`20reference`20will`20cause`20an`20access`20violation`20on`20Alpha V`20AXP X`09`20*`20systems,`20but`20will`20work`20correctly`20on`20a`20VAX`20system. X`09`20*/ X`20`20`20`20data`5B4000`5D`20=`200xFF; X X`20`20`20`20return`20(`20SS$_NORMAL`20); X`7D $ call unpack PAGE.DSJ;1 224141447 "" $ v=f$verify(v) $ exit