! 排他ロックプログラム
! exLock.BAS Version 1.0 written by fuku@rouge.gr.jp

! 使い方
!
! DECLARE EXTERNAL FUNCTION ExLock_lock
! DECLARE EXTERNAL SUB ExLock_unlock
!
! LET lockPath$ = "R:\lockDir.LCK"
! LET lock = ExLock_lock(lockPath$)
! IF lock <> 0 THEN
!      ! ロック中に実行する処理
! END IF
! CALL ExLock_unlock(lockPath$, lock)
! END

! ロックディレクトリを作成する外部関数。
! 排他ロックが成功した場合は 0 以外を返す。
EXTERNAL FUNCTION ExLock_lock(path$)

    ! ロックファイルを作成してみる
    ! ※5 回やってダメなら失敗とする
    LET lock = 0
    FOR i = 0 TO 4
        WHEN EXCEPTION IN
            MAKE DIRECTORY path$
            lock = 1    ! ロックを自分で作ったという印。
            EXIT FOR
        USE
            WAIT DELAY 0.2  ! 0.2 秒待つ。
        END WHEN
    NEXT i
    ExLock_lock = lock
END FUNCTION

! ロックディレクトリを削除する副プログラム。
EXTERNAL SUB ExLock_unlock(path$, lock)
    IF lock = 1 THEN    ! 自分で作ったロックファイルなら削除する。
        REMOVE DIRECTORY path$
        lock = 0
    END IF
END SUB

