Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program main
- type intt
- integer, pointer :: int
- end type intt
- type ptrt
- class(*), pointer :: ptr
- end type ptrt
- type len1t(n_01)
- integer, len :: n_01 = transfer("A", 1_1)
- character(8) :: p = "start"
- character(n_01) :: c_01
- character(8) :: end = "end"
- end type len1t
- type len2t(n_01, n_02)
- integer, len :: n_01 = transfer("A", 1_1)
- integer, len :: n_02 = transfer("B", 1_1)
- character(8) :: p = "start"
- character(n_01) :: c_01
- character(n_02) :: c_02
- character(8) :: end = "end"
- end type len2t
- type len3t(n_01, n_02, n_03)
- integer, len :: n_01 = transfer("A", 1_1)
- integer, len :: n_02 = transfer("B", 1_1)
- integer, len :: n_03 = transfer("C", 1_1)
- character(8) :: p = "start"
- character(n_01) :: c_01
- character(n_02) :: c_02
- character(n_03) :: c_03
- character(8) :: end = "end"
- end type len3t
- type(intt) intval
- type(ptrt) ptrval
- type(len1t), TARGET :: len1val
- type(len2t), TARGET :: len2val
- type(len3t), TARGET :: len3val
- integer, target :: a
- a = transfer("abcd", 1)
- intval%int => a
- ptrval%ptr => len3val
- len1val%c_01 = 'aAaA'
- len2val%c_01 = 'aAaA'
- len2val%c_02 = 'bBbB'
- len3val%c_01 = 'aAaA'
- len3val%c_02 = 'bBbB'
- len3val%c_03 = 'cCcC'
- print '("type(intt) size: ",I0)' ,sizeof(intval)
- print '("type(ptrt) size: ",I0)', sizeof(ptrval)
- print '("type(len1t) size: ",I0)', sizeof(len1val)
- print '("type(len2t) size: ",I0)', sizeof(len2val)
- print '("type(len3t) size: ",I0)', sizeof(len3val)
- print '(/"type(intt) bin dump (@ indicates zero byte):")'
- CALL dumpBinary(intval)
- print '(/"type(ptrt) bin dump (@ indicates zero byte):")'
- CALL dumpBinary(ptrval)
- print '(/"type(len1t) bin dump (@ indicates zero byte):")'
- CALL dumpBinary(len1val)
- print '(/"type(len2t) bin dump (@ indicates zero byte):")'
- CALL dumpBinary(len2val)
- print '(/"type(len3t) bin dump (@ indicates zero byte):")'
- CALL dumpBinary(len3val)
- contains
- subroutine dumpBinary(val)
- class(*), intent(in) :: val
- character(1) :: bytes(sizeof(val)/sizeof("."))
- integer :: index, nRows, iStart, iStop
- integer, parameter :: nCols = 16
- bytes(:) = transfer(val, ".", sizeof(val)/sizeof("."))
- nRows = (size(bytes)+nCols-1)/nCols
- do iStart = 1, size(bytes), nCols
- iStop = iStart + nCols - 1
- write(*, '(I3.3,"-",I3.3,2x)', advance='no') iStart, iStop
- do index = iStart, iStop
- if(index .le. size(bytes)) then
- write(*, '(1x, Z2.2)', advance='no') bytes(index)
- else
- write(*, '(3x)', advance='no')
- end if
- end do
- write(*, '(2x)', advance='no')
- do index = iStart, iStop
- if(index .le. size(bytes)) then
- ! Restrict character output to printable characters.
- if(bytes(index) .ge. " " .and. bytes(index) .le. "~") then
- write(*, '(A)', advance='no') bytes(index)
- else if (bytes(index) .eq. (transfer(0, "."))) then
- write(*, '("@")', advance='no')
- else
- write(*, '(".")', advance='no')
- end if
- else
- write(*, '(1x)', advance='no')
- end if
- end do
- write(*,'("")')
- end do
- end subroutine dumpBinary
- end program main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement