From 4998870e6829a2a3818ae87557f81f220442a6b0 Mon Sep 17 00:00:00 2001 From: Franz Zotter Date: Sun, 26 Mar 2006 12:47:03 +0000 Subject: added octave error handling 'try' and 'catch' to pdoctave_get. So unknown variables are returned now as empty svn path=/trunk/externals/iem/pdoctave/; revision=4770 --- pdoctave_dataframe.c | 8 ++++---- pdoctave_get.c | 13 ++++++++++--- write_shared_mem.cc | 2 ++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pdoctave_dataframe.c b/pdoctave_dataframe.c index 1ff6f09..a5d64a6 100644 --- a/pdoctave_dataframe.c +++ b/pdoctave_dataframe.c @@ -207,7 +207,7 @@ void blockForWriting (SharedDataFrame *sdf) int sleepUntilReadUnBlocked (SharedDataFrame *sdf) { - alarm(MAX_SLEEP_TIME); + //alarm(MAX_SLEEP_TIME); while ((sdf->block_for_read!=0)&&scheduling_ok) sched_yield(); return scheduling_ok; @@ -215,7 +215,7 @@ int sleepUntilReadUnBlocked (SharedDataFrame *sdf) int sleepUntilReadBlocked (SharedDataFrame *sdf) { - alarm(MAX_SLEEP_TIME); + //alarm(MAX_SLEEP_TIME); while ((sdf->block_for_read==0)&&scheduling_ok) sched_yield(); return scheduling_ok; @@ -223,14 +223,14 @@ int sleepUntilReadBlocked (SharedDataFrame *sdf) int sleepUntilWriteUnBlocked (SharedDataFrame *sdf) { - alarm(MAX_SLEEP_TIME); + //alarm(MAX_SLEEP_TIME); while ((sdf->block_for_write!=0)&&scheduling_ok) sched_yield(); return scheduling_ok; } int sleepUntilWriteBlocked (SharedDataFrame *sdf) { - alarm(MAX_SLEEP_TIME); + //alarm(MAX_SLEEP_TIME); while ((sdf->block_for_write==0)&&scheduling_ok) sched_yield(); return scheduling_ok; diff --git a/pdoctave_get.c b/pdoctave_get.c index 8177c8c..614ec84 100644 --- a/pdoctave_get.c +++ b/pdoctave_get.c @@ -50,14 +50,21 @@ static void pDOctaveGetCommand (PDOctaveGet *pdoctget_obj) { char *cmd; cmd = pdoctget_obj->oct_command; - strcpy(cmd, "write_shared_mem("); - cmd += 17; + strcpy(cmd, "try\n write_shared_mem("); + cmd += strlen(cmd); strcpy(cmd, pdoctget_obj->oct_name); cmd += strlen (cmd); *cmd++ = ','; sprintf(cmd, "%d", getSharedDataFrameId(pdoctget_obj->sdf)); cmd += strlen(cmd); - strcpy (cmd, ")\n"); + strcpy (cmd, ");\n catch\n disp(\"undefined variable\"); write_shared_mem("); + cmd += strlen(cmd); + strcpy (cmd, "[],"); + cmd +=strlen(cmd); + sprintf(cmd, "%d", getSharedDataFrameId(pdoctget_obj->sdf)); + cmd +=strlen(cmd); + strcpy (cmd,");\n end\n\0"); + post("pdoctave_get: %s",pdoctget_obj->oct_command); writeToOctaveStdIN (pdoctget_obj->oct_command); } diff --git a/write_shared_mem.cc b/write_shared_mem.cc index fc9107e..7810d1d 100644 --- a/write_shared_mem.cc +++ b/write_shared_mem.cc @@ -67,6 +67,8 @@ DEFUN_DLD (write_shared_mem, args, , "returning an octave value to pd-value") } if (args(0).is_empty()) { pdtype = UNKNOWN; + unBlockForWriting (sdf); + freeSharedDataFrame (&sdf); return octave_value(); } else if (args(0).is_string()) { -- cgit v1.2.1