VideoCodec/External/Octave/engPutFull.cpp

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include "engine.h" #include "engif.h" extern int matopen; #define PUTSTR "load -ascii -force \"matfifo\"\n" #define FIFO_NAME "matfifo" int engPutFull( Engine *ep, char *name, int m, int n,       double *pr, double *pi ) { int i, j; char buf[BUFMAX]; int ffd; #ifdef DEBUGAPI fprintf( stdout, "Begin engPutFull ...\n" ); fflush( stdout ); #endif if( matopen ) { /* don't forget to error check this stuff!! */ mknod(FIFO_NAME, S_IFIFO | 0655, 0); putline( PUTSTR ); if( strlen( name ) > BUFMAX-9 ) { fprintf( stderr, "ERROR: engPutFull name too long\n" ); exit( -1 ); } ffd = open(FIFO_NAME, O_WRONLY); sprintf( buf, "# name: %s\n", name ); write( ffd, buf, strlen(buf) ); if( pi == NULL ) /* Real data type */ { sprintf( buf, "# type: matrix\n" ); write( ffd, buf, strlen(buf) ); sprintf( buf, "# rows: %d\n", m ); write( ffd, buf, strlen(buf) ); sprintf( buf, "# columns: %d\n", n ); write( ffd, buf, strlen(buf) ); for( i=0; i<m; i++ ) {    for( j=0; j<n; j++ )    {     sprintf( buf, " %f", pr[i+m*j] );     write( ffd, buf, strlen(buf) );    }    write( ffd, "\n", 1 ); } } else /* Complex data type */ { sprintf( buf, "# type: complex matrix\n" ); write( ffd, buf, strlen(buf) ); sprintf( buf, "# rows: %d\n", m ); write( ffd, buf, strlen(buf) ); sprintf( buf, "# columns: %d\n", n ); write( ffd, buf, strlen(buf) ); for( i=0; i<m; i++ ) {    for( j=0; j<n; j++ )    {     sprintf( buf, " (%f,%f)", pr[i+m*j], pi[i+m*j] );     write( ffd, buf, strlen(buf) );    }    write( ffd, "\n", 1 ); } } close( ffd ); remove( FIFO_NAME ); } flushprompt( 0 ); flushjunk(); #ifdef DEBUGAPI fprintf( stdout, "Exit engPutFull with status %d\n", 0 ); fflush( stdout ); #endif return 0; }