-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.f90
50 lines (48 loc) · 1.37 KB
/
util.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
MODULE UTIL
IMPLICIT NONE
CONTAINS
! Gfortran lacks QUERY() apparently.
LOGICAL FUNCTION CONFIRM(PROMPT)
! PROMPT = One standard 80x25 console line long (max)
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: PROMPT
CHARACTER(LEN=1) :: CHOICE
DO
IF (PRESENT(PROMPT) .EQV. .TRUE.) THEN
WRITE(*, '(A,A)', ADVANCE="NO") PROMPT, ' [y/n]: '
ELSE
WRITE(*,'(A)',ADVANCE="NO") 'Confirm [y/n]: '
END IF
READ(*, '(A1)') CHOICE
IF (CHOICE == 'y' .OR. CHOICE == 'Y') THEN
CONFIRM = .TRUE.
RETURN
ELSE IF (CHOICE == 'n' .OR. CHOICE == 'N') THEN
CONFIRM = .FALSE.
RETURN
END IF
END DO
RETURN
END FUNCTION CONFIRM
SUBROUTINE HEXDUMP(BUFFER, LENGTH)
CHARACTER(LEN=1), DIMENSION(*), INTENT(IN) :: BUFFER
INTEGER, INTENT(IN) :: LENGTH
INTEGER :: OFFSET
OFFSET = 0
DO
! Print offset as 7 hex characters
WRITE (*, '(Z7.7BZ,2X)', ADVANCE='NO') OFFSET
! Get 16 bytes
DO
OFFSET = OFFSET + 1
WRITE (*, '(Z2.2,2X)', ADVANCE='NO') BUFFER(OFFSET)
IF (MOD(OFFSET, 16) == 0 .OR. OFFSET > LENGTH) THEN
!IF (OFFSET > LENGTH) THEN
EXIT
END IF
END DO
! Newline
WRITE (*, '(/$)')
IF (OFFSET > LENGTH) EXIT
END DO
END SUBROUTINE HEXDUMP
END MODULE UTIL