/**********************************************************************/
rc=fetchobs(dsid,10);
if (rc=%sysrc(_swnoupd)) then do;
end;
else do;
end;
/**********************************************************************/
/* DSID - the data set identifier */
/* obs - the number of the observation to fetch */
/* maxtime - the number of seconds to continue trying */
/* maxtries - the maximum number of times to try */
/* the fetch */
/* modvar - the variable number of the variable */
/* to update */
/* modamt - the amount to modify the variable by */
/* newval - the value of the variable after the */
/* update */
entry dsid obs rc maxtime maxtries 8
optional=modvar modamt newval 8;
INIT:
rc=1; /* assume no success */
return;
MAIN:
if (dsid) then do; /* if good DSID, try lock */
try=0; /* have not tried */
elapse=0; /* no time trying */
start=time(); /* starting to try */
/* keep trying until: out of time, used all */
/* tries, or got lock */
do while((elapse0) then
leave;
else do; /* if unable to get lock, */
msg=sysmsg(); /* set the message */
elapse=time()-start; /* calculate the */
/* elapsed time */
try=try+1; /* increment number of tries */
rc=system('\ob call the host WAIT routine\obe ');
end;
end;
end;
return;
TERM:
return;
/**********************************************************************/
call display('getlock.scl', dsid, obsnum, rc, 2, 10,
custvnum, 1, custno);
if (rc¬=0) then do;
end;
/**********************************************************************/
GETROW:
if (fetchobs(dsid, _currow_ )) then
call endtable();
return;
PUTROW:
rc=fetchobs(dsid, _currow_, 'NOSET');
rc=update(dsid);
return;
/**********************************************************************/
GETROW:
if (noteid¬=.) then
rc=dropnote(dsid, noteid);
rc=fetchobs(dsid, _currow_);
if (rc<0 or rc=%sysrc(_sweof)) then
call endtable();
else do;
noteid=note(dsid);
rc=unlock(dsid);
end;
return;
PUTROW:
rc=point(dsid, noteid);
rc=fetch(dsid, 'NOSET');
if (rc<0 or rc=%sysrc(_swnoupd)) then
_msg_=sysmsg();
else if (update(dsid )¬=0) then
_msg_=sysmsg();
return;
/**********************************************************************/
GETROW:
rc=fetchobs(dsid, _currow_);
if (rc<0 or rc=%sysrc(_sweof)) then
call endtable();
else if (rc=%sysrc(_swnoupd)) then do;
protect _all_;
_msg_=sysmsg();
end;
return;
PUTROW:
if (update(dsid)¬=0) then
_msg_=sysmsg();
return;
/**********************************************************************/
GETROW:
if (noteid¬=.) then
rc=dropnote(dsid, noteid);
rc=fetchobs(dsid, _currow_);
if (rc<0 or rc=%sysrc(_sweof)) then
call endtable();
else do;
noteid=note(dsid);
rc=unlock(dsid);
oldx=x;
oldy=y;
oldz=z;
end;
return;
PUTROW:
rc=point(dsid, noteid);
rc=fetch(dsid, 'NOSET');
if (rc<0 or rc=%sysrc(_swnoupd)) then
_msg_=sysmsg();
else if (oldx¬=getvarn(dsid, xvnum) or
oldy¬=getvarn(dsid, yvnum) or
oldz¬=getvarc(dsid, zvnum)) then do;
end;
else if (update(dsid)¬=0) then
_msg_=sysmsg();
return;
/**********************************************************************/