$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 12-APR-1993 08:14:34.64 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. ALIGN.DESC;1 $! 2. ALIGN.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 = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ 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`20routine`20previously`20published`20in`20the`20Mar Vch/April`201993`20 Xissue`20of`20Digital`20Systems`20Journal.`20It`20was`20first`20run`20as`20part V`20of`20Eric`20M.`20 XLaFranchi`20and`20Kathleen`20D.`20Morse'`20article`20"Alpha`20AXP`20Migration: V`20 XUnderstanding`20Data`20Alignment`20on`20OpenVMS`20AXP`20Systems,"`20which`20ra Vn`20on`20page`2022. XWhen`20you`20migrate`20your`20VAX`20application`20to`20an`20OpenVMS`20AXP`20sy Vstem,`20you`20may`20 Xlose`20some`20performance`20advantage.`20The`20alignment`20of`20data`20and`20t Vhe`20type`20of`20data`20 Xused`20by`20the`20application`20can`20affect`20the`20size`20and`20performance V`20of`20the`20 Xapplication`20on`20OpenVMS`20AXP`20systems.`20This`20article`20explains`20this V`20migration`20 Xissue`20and`20explains`20how`20to`20handle`20it. X $ call unpack ALIGN.DESC;1 1277385960 "" $! $ create 'f' XC XC`20`20This`20program`20shows`20aligned`20and`20unaligned`20data`20in`20a`20CO VMMON`20block: XC XC`09`09COMMON_ORDER_NUMBER`20(aligned`20longword) XC`09`09COMMON_ITEM_NUMBER`20(unaligned`20word) XC XC`20and`20aligned`20and`20unaligned`20data`20in`20a`20RECORD`20statement: XC XC`09`09ORDER_NUMBER`20(aligned`20longword) XC`09`09ITEM_NUMBER`20(unaligned`20word) XC X`09PROGRAM`20EXAMPLE X X`09INTEGER*4`20COMMON_ORDER_NUMBER X`09CHARACTER*9`20COMMON_ZIP_CODE X`09INTEGER*2`20COMMON_ITEM_NUMBER X X`09COMMON`20COMMON_ORDER_NUMBER,COMMON_ZIP_CODE X`09COMMON`20COMMON_ITEM_NUMBER X X`09STRUCTURE`20/FILE_REC_STRUCT/ X`09`20`20`20INTEGER*4`20ORDER_NUMBER X`09`20`20`20CHARACTER*9`20ZIP_CODE X`09`20`20`20INTEGER*2`20ITEM_NUMBER X`09END`20STRUCTURE X X`09RECORD`20/FILE_REC_STRUCT/`20DATA1 X X`09DATA1.ORDER_NUMBER`20=`20256 X`09DATA1.ITEM_NUMBER`20=`20365 X`09STOP X`09END X------------------------------------------------------------------------------ V- XListing`20File:`20`20Showing`20alignment`20warning`20messages X X`09`20`20`20`20`20`201`20`09PROGRAM`20EXAMPLE X`09`20`20`20`20`20`202`20 X`09`20`20`20`20`20`203`20`09INTEGER*4`20COMMON_ORDER_NUMBER X`09`20`20`20`20`20`204`20`09CHARACTER*9`20COMMON_ZIP_CODE X`09`20`20`20`20`20`205`20`09INTEGER*2`20COMMON_ITEM_NUMBER X`09`09..................1`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20 X%FORT-W-MISALIGN,`20(1)`20Alignment`20of`20variable`20or`20array`20is`20incons Vistent`20with`20its X`20`20data`20type X`09`20`20`20`20`20`206`20 X`09`20`20`20`20`20`207`20`09COMMON`20COMMON_ORDER_NUMBER,COMMON_ZIP_CODE X`09`20`20`20`20`20`208`20`09COMMON`20COMMON_ITEM_NUMBER X`09`20`20`20`20`20`209`20 X`09`20`20`20`20`2010`20`09STRUCTURE`20/FILE_REC_STRUCT/ X`09`20`20`20`20`2011`20`09`20`20`20INTEGER*4`20ORDER_NUMBER X`09`20`20`20`20`2012`20`09`20`20`20CHARACTER*9`20ZIP_CODE X`09`20`20`20`20`2013`20`09`20`20`20INTEGER*2`20ITEM_NUMBER X`09`20`20`20`20`2014`20`09END`20STRUCTURE X`09`20`20`20`20`2015`20 X`09`20`20`20`20`2016`20`09RECORD`20/FILE_REC_STRUCT/`20DATA1 X`09`09.................................1`20`20`20`20`20 X%FORT-W-FLDMISALN,`20(1)`20Record`20contains`20one`20or`20more`20misaligned V`20fields X`09`20`20`20`20`2017`20 X`09`20`20`20`20`2018`20`09DATA1.ORDER_NUMBER`20=`20256 X`09`20`20`20`20`2019`20`09DATA1.ITEM_NUMBER`20=`20365 X`09`20`20`20`20`2020`20`09STOP X`09`20`20`20`20`2021`20`09END X`0C XGenerated`20code`20for`20aligned`20and`20unaligned`20data`20references: X`09 XFortran`20line`09`09`20`20`20`20Aligned`20Machine`20Code`09Unaligned`20Machine V`20Code X------------------------------------------------------------------------------ V- X`09`09`09`20`20`20`20R0`20<--`20base`20addr`20of`20structure`20 X XDATA1.ORDER_NUMBER`20=`20256`20`20`20`20MOV`09`20`20`20`20256,`20R19`09`09MOV V`09256,`20R21 X`09`09`09`20`20`20`20STL`20`20`20`20`20R19,`20(R0)`09`09STL`09R21,`20(R0) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 XDATA1.ITEM_NUMBER`20`20=`20365`20`20`20`20LDQ`20`20`20`20`20R0,`2048(R27)`09 V`09MOV`20`20`20`20`20365,`20R1`20`20`20`20`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20MOV`20`20`20`20`20365,`20R1`20`20`20`20`20`20`20`20`20`09LDA`20`20 V`20`20`20R16,`2013(R0)`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20LDA`20`20`20`20`20R16,`2014(R0)`20`20`20`20`20`09BIC`20`20`20`20`20R1 V6,`203,`20R17`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20INSWL`20`20`20R1,`20R16,`20R18`20`20`20`20`09AND`20`20`20`20`20R16, V`203,`20R20`20`20 X`09`09`09`20`20`20`20LDQ_U`20`20`20R17,`2014(R0)`20`20`20`20`20`09LDL`20`20 V`20`20`20R18,`20(R17)`20`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20INSWL`20`20`20R1,`20R20,`20R19`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20MSKWL`20`20`20R18,`20R20,`20R18 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20BIS`20`20`20`20`20R18,`20R19,`20R18 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20CMPULE`20`20R20,`202,`20R19`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20STL`20`20`20`20`20R18,`20(R17)`20`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20BEQ`20`20`20`20`20R19,`20L$2`20`20`20`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20L$1:`09: X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20: X`09`09`09`09`09`09`20`20`20`20L$2:`09: X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20LDL`20`20`20`20`20R18,`204(R17)`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20EXTBL`20`20`20R1,`201,`20R19`20`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20BIC`20`20`20`20`20R18,`20255,`20R18 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20BIS`20`20`20`20`20R18,`20R19,`20R18 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20STL`20`20`20`20`20R18,`204(R17)`20`20 X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20`20`20`20BR`20`20`20`20`20`20L$1`20`20`20`20`20`20`20`20`20`20 X X`09Figure`207:`20`20Fortran`20example`20of`20Aligned`20(data1.order_number) X`09`09`20`20`20and`20Unaligned`20Data`20(data1.item_number)`20References X X`0C X XFigure`2010`20contains`20a`20simple`20program`20and`20the`20output`20from`20DE VBUG`20using`20the`20SET XOUTPUT`20LOG`20command. X X`09#include`20 X`09#include`20 X X`09main(`20) X`09`7B X`09`20`20`20`20char`20*p; X`09`20`20`20`20long`20*lp; X`09 X`09`09/*`20malloc`20returns`20at`20least`20quadword`20aligned`20pointer`20*/ X`09`20`20`20`20p`20=`20(char`20*)malloc(`2032`20); X`09 X`09`09/*`20construct`20unaligned`20longword`20pointer`20and`20place`20into`20l Vp`20*/ X`09`20`20`20`20lp`20=`20(long`20*)((char`20*)(p`20+`201)); X`09 X`09`09/*`20load`20data`20into`20unaligned`20longword`20*/ X`09`20`20`20`20lp`5B0`5D`20=`20123456; X`09 X`09`20`20`20`20printf(`20"data`20=`20%d`5Cn",`20lp`5B0`5D`20); X`09`20`20`20`20return; X`09`7D X`0C X`09-----------`20Compile`20and`20Link`20commands`20-------- X`09$`20cc/debug`20debug_example X`09$`20link/debug`20debug_example X`09$`20run`20debug_example X`09-----------`20DEBUG`20session`20using`20set`20output`20log`20------------ X`09Go X`09!break`20at`20routine`20DEBUG_EXAMPLE`5Cmain X`09!`20`20`20598:`20`20`20`20`20p`20=`20(char`20*)malloc(`2032`20); X`09set`20break/unaligned_data X`09set`20break/exception X`09set`20radix`20hexadecimal X`09Go X`09!Unaligned`20data`20access:`20virtual`20address`20=`20003CEEA1,`20PC`20= V`2000020048 X`09!break`20on`20unaligned`20data`20trap`20preceding`20DEBUG_EXAMPLE`5Cmain V`5C%LINE`20602 X`09!`20`20`20602:`20`20`20`20`20printf(`20"data`20=`20%d`5Cn",`20lp`5B0`5D`20) V; X`09ex/inst`2000020048-4 X`09!DEBUG_EXAMPLE`5Cmain`5C%LINE`20600+4:`20`20`20`20`20`20`20`20`20STL`20`20 V`20`20`20`20`20`20`20`20`20`20`20R1,(R0) X`09ex`20r0 X`09!DEBUG_EXAMPLE`5Cmain`5C%R0:`2000000000`20003CEEA1 X`09 X`09`20`20`20Figure`2010:`20`20DEBUG`20Session`20Showing`20Breakpointing`20at V`20Unaligned X`09`09`09`09Data`20Exceptions X X`0C X $ call unpack ALIGN.DSJ;1 791034237 "" $ v=f$verify(v) $ exit