aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranz Zotter <fzotter@users.sourceforge.net>2006-03-26 12:47:03 +0000
committerFranz Zotter <fzotter@users.sourceforge.net>2006-03-26 12:47:03 +0000
commit4998870e6829a2a3818ae87557f81f220442a6b0 (patch)
tree2ff79d57392e5703e3a6d7a61627a2d3282a9fcc
parent6b079b5df20a90500294e2f1a58912b32074cd82 (diff)
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
-rw-r--r--pdoctave_dataframe.c8
-rw-r--r--pdoctave_get.c13
-rw-r--r--write_shared_mem.cc2
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()) {