#include #include #include #include #include #include #include #include #include struct lk_status_block{ short int cnd, rsv; int id; short int val; }; int lock (long *lkid) { long status; long tmob [ 2 ] = { -30000000, -1 }; /* delta time = 3 sec */ struct lk_status_block lksb; $DESCRIPTOR(resnam,"RRL$RES00"); /* name of resource for */ /* SDA SHO LOCK/NAME=RRL$RESS00 */ long efn_t = 0,efn_l = 1,efn_blk; long reqidt = 1; /* * call LOCK service */ status = sys$enq(efn_l, LCK$K_EXMODE, &lksb, LCK$M_SYNCSTS, &resnam,0,0,0,0,0,0,0); if ( !(status & 1) ) lib$signal(status); /* * check for synchronous successful completion */ if ( status == SS$_SYNCH ) { *lkid = lksb.id; return status; } /* * setup Timer Expiration Request and wait for it or lock success */ status = sys$setimr(efn_t, tmob,0,reqidt,0); if ( !(status & 1) ) lib$signal(status); status = sys$wflor (0,(1<