/* * @RRL: 16-Oct-1997 (c) ! */ #include #include #include #include #include #include #include #include #include #include int lock (long *,int); int unlock (long); struct lk_status_block{ short int cnd, rsv; int id; short int val; }; /* * Input: lkid - if lkid non zero lock function will performing lock * conversion * lkmode - type of lock requested (see $LKIDEF) */ int lock (long *lkid,int lkmode) { 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; lksb.id = *lkid; /* * call LOCK service */ status = sys$enq(efn_l, lkmode, &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<