HP OpenVMS Systemsask the wizard |
The Question is: How do I display mail folders using the callable mail interface with Fortran? The example in the system routines manual is unclear. Thanks! The Answer is :
Please contact the Compaq Customer Support Center, or check DSNlink for
access to various programming examples. A simple example of using the
callable MAIL API from Fortran follows:
program call_mail
! 24-JAN-1989 Mike Taylor, Digital Equipment Corporation
! Test using callable mail to access user profile
implicit integer(a-z)
include '($MAILDEF)'
C include '($rmsdef)/list' ! only need rms$_eof
PARAMETER RMS$_EOF = '0001827A'X
external lib$get_input, lib$put_output
Integer Status ! return status
Integer context
character*31 user_name, return_user_name
integer user_name_length, return_user_name_length
character*255 personal_name
integer personal_name_length
! define list structure
structure /item_list/
union
map
integer*2 buflen, itmcod
integer*4 bufadr, retadr
end map
map
integer*4 end_list
end map
end union
end structure
! most mail$ routine have the format ( context, item_list, item_list )
record /item_list/null_list ! used where item list has no codes
record /item_list/in_list(20) ! input list
record /item_list/out_list(20) ! output list
null_list.end_list = 0 ! null list
context = 0
! get a user name
status = lib$get_input( user_name, ' User''s name ',
+ user_name_length )
if (status .EQ. rms$_eof ) stop
if (.NOT. status ) call lib$signal ( %val( status ) )
in_list(1).buflen = user_name_length ! can not exceed 31
in_list(1).itmcod = mail$_user_username
in_list(1).bufadr = %LOC( user_name )
in_list(1).retadr = %LOC( user_name_length )
in_list(2).end_list = 0 ! null list
out_list(1).buflen = LEN( return_user_name ) ! can not exceed 31
out_list(1).itmcod = mail$_user_return_username
out_list(1).bufadr = %LOC( return_user_name )
out_list(1).retadr = %LOC( return_user_name_length )
out_list(2).buflen = 255
out_list(2).itmcod = mail$_user_personal_name
out_list(2).bufadr = %LOC( personal_name )
out_list(2).buflen = 255
out_list(2).itmcod = mail$_user_personal_name
out_list(2).bufadr = %LOC( personal_name )
out_list(2).retadr = %LOC( personal_name_length )
out_list(3).end_list = 0 ! null list
status = mail$user_begin( context, null_list, null_list )
if ( .NOT. status ) call lib$signal ( %val( status ) )
status = mail$user_get_info( context, in_list, out_list )
if (status .EQ. rms$_eof ) stop
if ( .NOT. status ) call lib$signal ( %val( status ) )
type *, ' looking for ', user_name(1:user_name_length )
type *, ' returned user name ',
+ return_user_name(1:return_user_name_length )
type *, ' ', personal_name(1:personal_name_length )
status = mail$user_end( context , null_list, null_list )
if ( .NOT. status ) call lib$signal ( %val( status ) )
END
|