! XCALL Version 1.0 [04] Written by J.D.McGregor 11-Sep-00
! ***************************************************************
! * *
! * A-Shell routines and definitions useful for *
! * writing xcall subroutines in Basic. Include this *
! * prior to your program startup code to pick up *
! * param control block address and get param structure. *
! ***************************************************************
! Edit history of XCALL.BSI:-
! 11-Sep-00 - [1] Created /jdm
! 27-Jan-01 - [2] Add MX'FLSET, MX'EXIT
! 20-Jul-01 - [3] Change MX'EXIT to MX'EXITSBX (conflicted with ashell.bsi)
! 17-Dec-06 - [4] Maximum number of arguments increased from 20 to 30
map1 XCBADR,f,6 ! addr of xcall param ctl block
map1 XCBLIN,s,40 ! temp cmd line
map1 XCBCNT,f,6 ! # params
map1 XCBI,f,6 ! temp
map1 XCBSTRUCTX ! up to 20 params max
map2 XCBSTRUCT(30)
map3 XCB'PTYPE,b,2
map3 XCB'PSIZE,b,2
map1 MIAMEX'OPCODES
map2 MX'XCBINFO,b,1,80
map2 MX'XCBDATA,b,1,81
map2 MX'EXITSBX,b,1,82 ! [3]
map2 MX'FLSET,b,1,89
map2 XCBGET,b,1,0
map2 XCBPUT,b,1,1
map1 XCALL'TYPE'CODES
map2 XTYPE'UNFORMATTED,b,1,0
map2 XTYPE'STRING,b,1,2
map2 XTYPE'FLOAT,b,1,4
map2 XTYPE'BINARY,b,1,6
map1 VERSYS'XCALL,s,80,">>@VERSYS(1)->>xcall[04] "
! step 1, retrieve address of param block from command line
XCALL LSTLIN,XCBLIN ! pick up command line (with @adr)
XCBI = instr(1,XCBLIN,"@")
if XCBI > 0 then &
XCBADR = val(XCBLIN[XCBI+1,-1]) &
else &
? XCBLIN;" : not called as a subroutine! " :&
stop : end
! step 2, pick up parameter info
XCBCNT = 30 ! max we will consider
xcall MIAMEX,MX'XCBINFO,XCBADR,XCBCNT,XCBSTRUCTX
! calling program should now check that XCBCNT is sufficient,
! possibly that types and sizes in XCBSTRUCTX are ok, and
! then fetch the individual params using:
! XCALL MIAMEX,MX'XCBDATA,XCBADR,XCBGET,,
! Later, to return updated params, use:
! XCALL MIAMEX,MX'XCBDATA,XCBADR,XCBPUT,,