In some situations, I have found that I need to write a routine that is too complicated for SB+.

When using a SB+ screen, there is a nice ability to show who has locked the same record with options to abort or wait.

To see how this is done, simply generate the code for a simple screen and then using your favorite editor, have a look at the resultant code, searching for a READ statement, e.g.


LOCK.KEY = KEY
READU RECORD FROM F.FILE,KEY LOCKED
LOCK.KEY = ''
CALL SB.DISP.LOCK(MAINFILE<1>,KEY<1>,ESC)
IF ESC THEN
STEPNO = KEYSTEP
END
RETURN
END THEN FOUND = 1 ELSE FOUND = 0
*
IF FOUND THEN
......
END ELSE
......
END

The MAINFILE variable holds the actual text name of the file and is not a file variable.

Using similar code as above in your own routine which reads a record, replacing the IF ESC THEN with your required exit action (if possible else keep looping) and the final IF THEN END ELSE END with your next actions.


EQUATE EMPTY.STR TO ''

FOUND = EMPTY.STR

LOOP UNTIL FOUND NE EMPTY.STR DO

READU RECORD FROM F.FILE,KEY LOCKED

CALL SB.DISP.LOCK(MAINFILE<1>,KEY<1>,ESC)

IF ESC THEN

* Either continue, return or if can not, inform the user
CALL SB.DISP(3,'Can not ABORT process. Please wait for other user to finish.')
END
END THEN FOUND = @TRUE ELSE FOUND = @FALSE
REPEAT

IF FOUND THEN

......
END ELSE

......
END

All is nice structured code and will provide a consistent SB+ interface for the user.