! 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,,