Example Source File Generated by SWAT [ Switch Programming User's Guide ] MPE/iX 5.0 Documentation
Switch Programming User's Guide
Example Source File Generated by SWAT
The following is an example of the source code generated by SWAT. You can
use this source to call an SPL function FREAD with three parameters
FILENUMBER, TARGET, and TCOUNT.
NOTE This FREAD stub is only an example. The FREAD intrinsic is
directly accessible from both CM and NM, without the need of
writing a stub to gain access.
$subprogram$
$check_actual_parm 0$
$check_formal_parm 0$
$os 'MPE/XL'$
$standard_level 'ext_modcal'$
$tables off$
$code_offsets off$
$xref off$
$type_coercion 'representation'$
{************************************************}
{* *}
{* Generated: WED, OCT 21, 1987, 10:21 AM *}
{* *}
{* Switch Assist Tool HP30363A.00.00 *}
{* *}
{************************************************}
PROGRAM Hp_stub_outer_block(input, output);
{This program is an example program written by the }
(SWitch Assist Tool. }
CONST
Hp_Pidt_Known = 0; {by number}
Hp_Pidt_Name = 1; {by name}
Hp_Pidt_Plabel = 2; {by PLABEL}
Hp_System_SL = 0; {System SL}
Hp_Logon_Pub_SL = 1; {Logon PUB SL}
Hp_Logon_Group_SL = 2; {Logon GROUP SL}
Hp_Pub_SL = 3; {Program's PUB SL}
Hp_Group_SL = 4; {Program's GROUP SL}
Hp_Method_Normal = 0; {Not callable from split stack}
Hp_Method_Split = 1; {Callable in split stack mode}
Hp_Method_No_Copy = 2;
Hp_Parm_Value = 0; {value parameter}
Hp_Parm_Word_Ref = 1; {reference parm, word addr}
Hp_Parm_Byte_Ref = 2; {reference parm, byte addr}
Hp_Ccg = 0; {condition code greater (>)}
Hp_Ccl = 1; {condition code less (<)}
Hp_Cce = 2; {condition code equal (=)}
Hp_All_Ok = 0; {Used in status check}
TYPE
Hp_BIT8 = 0..255;
Hp_BIT16 = 0..65535;
Hp_BIT8_A1 = $ALIGNMENT 1$ Hp_BIT8;
Hp_BIT16_A1 = $ALIGNMENT 1$ Hp_BIT16;
Hp_SCM_PROCEDURE = PACKED RECORD
Hp_CM_PROC_NAME = PACKED ARRAY[1..16] OF CHAR;
Hp_GENERIC_BUFFER = PACKED ARRAY[1..65535] OF CHAR;
CASE Hp_p_proc_id_type : Hp_BIT8 OF
Hp_Pidt_Known : (Hp_p_fill : Hp_BIT8_A1;
Hp_p_proc_id : Hp_BIT16_A1
);
Hp_Pidt_Name : (Hp_p_lib : Hp_BIT8_A1;
Hp_p_proc_name : Hp_CM_PROC_NAME
);
Hp_Pidt_Plabel: (Hp_p_plabel : Hp_BIT16_A1);
END; {record}
Hp_SCM_IO_TYPE = SET OF (Hp_input, Hp_output);
Hp_PARM_DESC = PACKED RECORD
Hp_pd_parmptr : GLOBALANYPTR;
Hp_pd_parmlen : Hp_BIT16;
Hp_pd_parmtype : Hp_BIT16;
Hp_pd_io_type : Hp_SCM_IO_TYPE;
END; {record}
Hp_SCM_PARM_DESC_ARRAY = ARRAY[0..31] OF Hp_PARM_DESC;
HP_STATUS_TYPE = RECORD
CASE INTEGER OF
0 : (Hp_all : INTEGER);
1 : (Hp_info : SHORTINT;
Hp_subsys : SHORTINT);
END; {record}
{Declare all types which can be passed to this stub }
{so that 16 bit alignments are allowed. }
HP_SHORTINT = $ALIGNMENT 2$ SHORTINT;
HP_INTEGER = $ALIGNMENT 2$ INTEGER;
HP_REAL = $ALIGNMENT 2$ REAL;
HP_LONG = $ALIGNMENT 2$ LONGREAL;
HP_CHAR = $ALIGNMENT 1$ CHAR;
PROCEDURE HPSWITCHTOCM;
INTRINSIC;
PROCEDURE HPSETCCODE;
INTRINSIC;
PROCEDURE QUIT;
INTRINSIC;
{End of OUTER BLOCK GLOBAL declarations}
FUNCTION FREAD $ALIAS 'FREAD'$
(
FILENUMBER : HP_SHORTINT;
ANYVAR TARGET : Hp_GENERIC_BUFFER;
TCOUNT : HP_SHORTINT
) : HP_SHORTINT
OPTION UNCHECKABLE_ANYVAR;
VAR
Hp_proc : Hp_SCM_PROCEDURE;
Hp_parms : Hp_SCM_PARM_DESC_ARRAY;
Hp_method : INTEGER;
Hp_nparms : INTEGER;
Hp_funclen : INTEGER;
Hp_funcptr : INTEGER;
Hp_byte_len_of_parm : Hp_BIT16;
Hp_cond_code : SHORTINT;
Hp_status : Hp_STATUS_TYPE;
VAR Hp_retval : SHORTINT;
VAR Hp_loc_FILENUMBER : HP_SHORTINT;
VAR Hp_loc_TCOUNT : HP_SHORTINT;
begin {STUB procedure FREAD}
{************************************************}
{* *}
{* Generated: WED, OCT 21, 1987, 10:21 AM *}
{* *}
{* Switch Assist Tool HP30363A.00.00 *}
{* *}
{************************************************}
{Initialization}
{Set up procedure information--name, lib, etc.}
Hp_proc.Hp_p_proc_id_type := Hp_Pidt_Name; {by name}
Hp_proc.Hp_p_lib := Hp_System_SL; {library}
Hp_proc.Hp_p_proc_name := 'FREAD ';
{Set up misc. variables}
Hp_method := Hp_Method_Normal; {non-split-stack}
Hp_nparms := 3;
{Set up length/pointers for functional return if this}
{is a FUNCTION. Set length to zero, pointer to NIL }
{if this is not a FUNCTION. }
Hp_funclen := SIZEOF(Hp_retval);
Hp_funcptr := INTEGER(LOCALANYPTR(ADDR(Hp_retval)));
{Make a local copy of all VALUE parameters}
Hp_loc_FILENUMBER := FILENUMBER;
Hp_loc_TCOUNT := TCOUNT;
{Build the parm descriptor array to describe each}
{parameter. }
{FILENUMBER -- Input Only by VALUE}
Hp_byte_len_of_parm := 2;
Hp_parms[0].Hp_pd_parmptr := ADDR(Hp_loc_FILENUMBER);
Hp_parms[0].Hp_pd_parmlen := Hp_byte_len_of_parm;
Hp_parms[0].Hp_pd_parm_type := Hp_Parm_Value;
Hp_parms[0].Hp_pd_io_type := [Hp_input];
{TARGET -- Output Only by REFERENCE}
IF TCOUNT < 0 THEN
Hp_byte_len_of_parm := ABS(TCOUNT)
ELSE
Hp_byte_len_of_parm := TCOUNT * 2;
Hp_parms[1].Hp_pd_parmptr := ADDR(TARGET);
Hp_parms[1].Hp_pd_parmlen := Hp_byte_len_of_parm;
Hp_parms[1].Hp_pd_parm_type := Hp_Parm_Word_Ref;
Hp_parms[1].Hp_pd_io_type := [Hp_output];
{TCOUNT -- Input Only by VALUE}
Hp_byte_len_of_parm := 2;
Hp_parms[2].Hp_pd_parmptr := ADDR(Hp_loc_TCOUNT);
Hp_parms[2].Hp_pd_parmlen := Hp_byte_len_of_parm;
Hp_parms[2].Hp_pd_parm_type := Hp_Parm_Value;
Hp_parms[2].Hp_pd_io_type := [Hp_input];
{Do the actual SWITCH call}
HPSWITCHTOCM (Hp_proc, {Procedure info}
Hp_method, {Switch copy method}
Hp_nparms, {Number of parameters}
Hp_parms, {Parm descriptor array}
Hp_funclen, {func ret value length}
Hp_funcptr, {addr of func return}
Hp_cond_code, {cond code return}
Hp_status); {SWITCH status code}
if (Hp_status.Hp_all <> Hp_all_ok) then
begin {SWITCH subsystem error}
QUIT (Hp_status.Hp_info); {handles error codes}
{returned by Switch}
end; {SWITCH subsystem error}
HPSETCCODE (Hp_cond_code);
FREAD := Hp_retval;
end; {STUB procedure FREAD}
BEGIN {Program Outer block code}
END. {Program Outer block code}
MPE/iX 5.0 Documentation