/* C program to call MUMPS */
#include <descrip.h>
#include <ssdef.h>
#define $DYNDESCRIP(name) struct dsc$descriptor_d name = \
{ 0, DSC$K_DTYPE_T, DSC$K_CLASS_D, 0 }
tomumps()
{
int status;
$DESCRIPTOR(delim,"|");
$DESCRIPTOR(startpiece,"3");
$DESCRIPTOR(endpiece,"4");
$DYNDESCRIP(ret);
$DESCRIPTOR(replace,"Raiders of the Lost Ark|1982");
$DESCRIPTOR(rec,"G Lucas|Lucas Enterprise|Star Wars|1978|PG");
lib$put_output(&rec);
status = REPLACE(&ret, &rec, &delim, &startpiece, &endpiece, &replace);
if (status == SS$_NORMAL)
lib$put_output(&ret);
lib$sfree1_dd(&ret);
return status;
}
This C program invokes REPLACE using ret to hold the returned value; rec,delimiter, startpiece, and endpiece to hold the arguments to the $PIECE construct; and replace to hold the replacement value.
The following macro declares the connection between REPLACE and SETPIECE^FROMC and specifies that the M routine returns a value.
When assembling the macro on an Alpha VMS system, use the /ALPHA qualifier immediately after the command to invoke the Alpha Macro-64 assembler. If the module contains only glue code MACROs and no actual AXP machine instructions, MACRO /MIGRATE also works.
.title CMTAB.MAR - sample of C call to MUMPS .library "gtm$dist:gtmzcall.mlb" mumps_binding entryref=SETPIECE^FROMC,linkname= REPLACE, output=yes .end
The following M program returns the value of a SET $PIECE with values supplied by the caller.
FROMC;sample called from a C program to ;perform a set piece ; SETPIECE(rec,delimiter,stpiece,endpiece,value) set $p(rec,delimiter,stpiece,endpiece)=value quit rec