program xauth_key
use M_kracken, only : kracken, lget, iget, sget
use M_random, only : init_random_seed_by_dat
use M_random, only : random_string, random_hex
implicit none
intrinsic random_number
integer :: length
character(len=:),allocatable :: out
character(len=:),allocatable :: chars
integer :: i
integer :: r
call kracken('key','-n 128 -r 1 -help .false. -version .false.') ! define command arguments, default values; crack command line
call help_usage(lget('key_help')) ! if -help option is present, display help text and exit
call help_version(lget('key_version')) ! if -version option is present, display version text and exit
length=iget('key_n')
r=iget('key_r')
chars=trim(sget('key_oo'))
if(chars.eq.'')then
chars='0123456789abcdef'
endif
call init_random_seed_by_dat()
do i=1,r
out=random_string(chars,length)
write(*,'(a)')out
enddo
contains
!===================================================================================================================================
!()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()!
!===================================================================================================================================
subroutine help_usage(l_help)
implicit none
character(len=*),parameter :: ident="@(#)help_usage(3f): prints help information"
logical,intent(in) :: l_help
character(len=:),allocatable :: help_text(:)
integer :: i
logical :: stopit=.false.
stopit=.false.
if(l_help)then
help_text=[ CHARACTER(LEN=128) :: &
'NAME ',&
' xauth_key(1f) - [M_random] generate magic cookies for xauth ',&
' (LICENSE:PD) ',&
'SYNOPSIS ',&
' xauth_key [characters] [ -n number_of_characters] ',&
'DESCRIPTION ',&
' xauth_key generates a random hexadecimal number ',&
'OPTIONS ',&
' characters Set of letters to compose string from. ',&
' Defaults to ''0123456789abcdef''. ',&
' -n N Number of digits. Defaults to 128 ',&
' -r N Number of cookies to generate ',&
' --version Display version information and exit. ',&
' --help Display help text and exit. ',&
'EXAMPLE ',&
' generate a value for use with the X authority system: ',&
' ',&
' xauth add :0 . `xauth_key` ',&
'SEE ALSO ',&
' X(1), xauth(1) ',&
'AUTHOR ',&
' John S. Urban ',&
'LICENSE ',&
' Public Domain ',&
'']
WRITE(*,'(a)')(trim(help_text(i)),i=1,size(help_text))
stop ! if --help was specified, stop
endif
end subroutine help_usage
!>
!!##NAME
!! xauth_key(1f) - [M_random] generate magic cookies for xauth
!! (LICENSE:PD)
!!##SYNOPSIS
!!
!! xauth_key [characters] [ -n number_of_characters]
!!##DESCRIPTION
!! xauth_key generates a random hexadecimal number
!!##OPTIONS
!! characters Set of letters to compose string from.
!! Defaults to '0123456789abcdef'.
!! -n N Number of digits. Defaults to 128
!! -r N Number of cookies to generate
!! --version Display version information and exit.
!! --help Display help text and exit.
!!##EXAMPLE
!!
!! generate a value for use with the X authority system:
!!
!! xauth add :0 . `xauth_key`
!!##SEE ALSO
!! X(1), xauth(1)
!!##AUTHOR
!! John S. Urban
!!##LICENSE
!! Public Domain
subroutine help_version(l_version)
implicit none
character(len=*),parameter :: ident="@(#)help_version(3f): prints version information"
logical,intent(in) :: l_version
character(len=:),allocatable :: help_text(:)
integer :: i
logical :: stopit=.false.
stopit=.false.
if(l_version)then
help_text=[ CHARACTER(LEN=128) :: &
'@(#)PRODUCT: GPF (General Purpose Fortran) utilities and examples>',&
'@(#)PROGRAM: xauth_key(1)>',&
'@(#)DESCRIPTION: generate random strings such as magic cookies for xauth>',&
'@(#)VERSION: 1.0, 20171219>',&
'@(#)AUTHOR: John S. Urban>',&
'@(#)HOME PAGE: http://www.urbanjost.altervista.org/index.html>',&
'@(#)COMPILED: 2023-04-12 02:29:17 UTC-240>',&
'']
WRITE(*,'(a)')(trim(help_text(i)(5:len_trim(help_text(i))-1)),i=1,size(help_text))
stop ! if --version was specified, stop
endif
end subroutine help_version
end program xauth_key