ALLYN%CMS1@LLL-ICDC.ARPA (11/06/87)
Bill Costa asked about a Pascal declaration of Lib$Signal which uses the optional FAO parameters. I have modified his test programs to demonstrate one method. Allyn Saroyan Lawrence Livermore National Laboratory (415) 423-2240 My employer denies all knowledge of my existence and the existence of this note. Any damage done to any person or thing in the lifetime of the universe is strictly its own problem. Have a nice day. ....................... Cut between dotted lines and save ...................... $!.............................................................................. $! VAX/VMS archive file created by VMS_SHAR V-5.01 01-Oct-1987 $! which was written by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au) $! To unpack, simply save and execute (@) this file. $! $! This archive was created by ALLYN $! on Thursday 5-NOV-1987 15:59:13.81 $! $! It contains the following 2 files: $! EXAMPLE.PAS EX_MESSAGES.MSG $!============================================================================== $ Set Symbol/Scope=(NoLocal,NoGlobal) $ Version=F$GetSYI("VERSION") ! See what VMS version we have here: $ If Version.ges."V4.4" then goto Version_OK $ Write SYS$Output "Sorry, you are running VMS ",Version, - ", but this procedure requires V4.4 or higher." $ Exit 44 $Version_OK: CR[0,8]=13 $ Pass_or_Failed="failed!,passed." $ Goto Start $Convert_File: $ Read/Time_Out=0/Error=No_Error1/Prompt="creating ''File_is'" SYS$Command ddd $No_Error1: Define/User_Mode SYS$Output NL: $ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output='File_is' - VMS_SHAR_DUMMY.DUMMY f:=Get_Info(Command_Line,"File_Name");b:=Create_Buffer("",f); o:=Get_Info(Command_Line,"Output_File");Set(Output_File,b,o); Position(Beginning_of(b));Loop x:=Erase_Character(1);Loop ExitIf x<>"V"; Move_Vertical(1);x:=Erase_Character(1);Append_Line; Move_Horizontal(-Current_Offset);EndLoop;Move_Vertical(1); ExitIf Mark(None)=End_of(b) EndLoop;Position(Beginning_of(b));Loop x:=Search("`",Forward,Exact);ExitIf x=0;Position(x);Erase_Character(1); If Current_Character='`' then Move_Horizontal(1);else Copy_Text(ASCII(INT(Erase_Character(3))));EndIf;EndLoop;Exit; $ Delete VMS_SHAR_DUMMY.DUMMY;* $ Checksum 'File_is $ Success=F$Element(Check_Sum_is.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)+CR $ Read/Time_Out=0/Error=No_Error2/Prompt=" CHECKSUM ''Success'" SYS$Command ddd $No_Error2: Return $Start: $ File_is="EXAMPLE.PAS" $ Check_Sum_is=1779239102 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY XPROGRAM Example; X X{ X Shows how to use the Message Utility with Pascal without having to X hard-code the condition values generated by the message utility. X Additionally shows how to declare the Lib$Signal system service for X use of optional FAO arguments. X X Original code by Bill Costa. X} X XVAR X EX_Mess1 : [External,Volatile] Unsigned; X EX_Mess2 : [External,Volatile] Unsigned; X EX_Mess3 : [External,Volatile] Unsigned; X Ex_Mess4 : [External,Volatile] Unsigned; X X{-----------------------------------------------------------------------------} X X[Asynchronous] XPROCEDURE Lib$Signal( X X %Immed cond_Value : UNSIGNED ; X %Immed count : integer := 0 ; X FAO_Pars : [Unsafe,List,Class_S] V PACKED ARRAY [l..h:integer] OF char := %Immed X0 X ); X XExternal; X X{-----------------------------------------------------------------------------} X X XBEGIN { Example } X X Lib$Signal( Iaddress( EX_Mess1 ) ); X Lib$Signal( Iaddress( EX_Mess2 ) ); X Lib$Signal( Iaddress( Ex_Mess4 ), 2, 'First', 'Second' ); X Lib$Signal( Iaddress( EX_Mess3 ), 1,'oops'); X XEND. { Example } $ GoSub Convert_File $ File_is="EX_MESSAGES.MSG" $ Check_Sum_is=559772463 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X X.TITLE Example of using Message Facility with VAX/VMS Pascal V3.5 X.FACILITY EX,1/PREFIX=EX_ X.IDENT 'Example' X X.SEVERITY SUCCESS X Mess1 <Here is the first message.> X X.SEVERITY INFORMATIONAL X Mess2 <And this is the second.> X X.SEVERITY WARNING X Mess3 <Don't say '!AS' to me.>/fao=1 X X.Severity`009Informational X`009`009Mess4`009`009<!AS I would like to say '!AS'>/fao=2 X.END X $ GoSub Convert_File $ Exit