HP 3000 Manuals

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