---------------------------------------------------
myTrace.c
---------------------------------------------------
#include "mathlink.h" extern double myTrace( void ); double myTrace( void ) { int i,j,n; double *matrix; int *dims; char **heads; int rank; if( !MLGetReal64Array(stdlink,&matrix,&dims,&heads,&rank) ){ // unable to read data return 0.; }; n = dims[0]; double sum=0; for(i=0;i<n;i++) sum = sum + matrix[i*n+i]; MLReleaseReal64Array(stdlink,matrix,dims,heads,rank); return sum; } #if WINDOWS_MATHLINK #if __BORLANDC__ #pragma argsused #endif int PASCAL WinMain( HINSTANCE hinstCurrent, HINSTANCE hinstPrevious, LPSTR lpszCmdLine, int nCmdShow) { char buff[512]; char FAR * buff_start = buff; char FAR * argv[32]; char FAR * FAR * argv_end = argv + 32; hinstPrevious = hinstPrevious; /* suppress warning */ if( !MLInitializeIcon( hinstCurrent, nCmdShow)) return 1; MLScanString( argv, &argv_end, &lpszCmdLine, &buff_start); return MLMain( (int)(argv_end - argv), argv); } #else int main(int argc, char* argv[]) { return MLMain(argc, argv); } #endif
----------------------------------------------
myTrace.tm
----------------------------------------------
:Begin: :Function: myTrace :Pattern: myTrace[ L_List] :Arguments: { L } :ArgumentTypes: { Manual } :ReturnType: Real :End: :Evaluate: myTrace::usage = "myTrace[M] gives the trace of matrix M"
---------------------------------------------
Makefile
---------------------------------------------
MPREP = /usr/bin/mprep CXX = /usr/bin/c++ myTrace : myTracetm.c myTrace.c ${CXX} myTracetm.c myTrace.c -o myTrace -lML64i3 -lm -lpthread -lrt -lstdc++ myTracetm.c : myTrace.tm ${MPREP} myTrace.tm -o $@
No comments:
Post a Comment