home *** CD-ROM | disk | FTP | other *** search
- ; From: Dat Thuc Nguyen
- ; Date: Tue Jun 15 14:34:09 1999
- ; URL: http://www.smalltickle.com
- ;
- ; WE USE SEMAPHORES TO COORDINATE COMPUTING TASKS,
- ; SHARE RESOURCES, ETC.
- ; THE FOLLOWING SCRIPT DEFINES A SEMAPHORE CLASS.
-
- ;********************************************************
- ; DEFINITION OF THE SEMAPHORE CLASS *
- ;********************************************************
- define semaphore {
- _assign semaphore::\%1 0 ; Initialize semaphore with 0
- _define \%1 {
- semaphore::\%1 \v(macro) \%2
- }
- }
- ;******************************************************
- ; IMPLEMENTATION OF THE PUBLIC USAGE INTERFACE *
- ; OF THE SEMAPHORE CLASS *
- ;******************************************************
- define semaphore::up {
- _assign semaphore::\%1 \feval(\m(semaphore::\%1) + 1)
- echo \m(semaphore::\%1)
- }
-
- define semaphore::down {
- _assign semaphore::\%1 \feval(\m(semaphore::\%1) - 1)
- echo \m(semaphore::\%1)
- }
-
- define semaphore::query {
- return \m(semaphore::\%1)
- }
-
- ;********************************************************
- ; USAGE SAMPLES *
- ;********************************************************
- take semaphore.ksc
- semaphore com_port ; Create a semaphore com_port
-
- ; In a user-defined function:
- ;
- xif = \fexec(com_port query) 0 { ; If resource is available
- com_port up ; Register for resource
- do_some_processing ;
- com_port down ; Release resource
- }
-
- ; In another user-defined function
- ;
- xif = \fexec(com_port query) 0 { ; If resource is available
- com_port up : register for resource
- if \fexec(do_something) { ; If do_something completed
- com_port down ; Release resource
- } else { ; Keep resource, release later
- do_other ; do something else
- }
- }
-
-
- ; The script above follows the Smalltalk model.
- ; C++ programmer can easily extend the class usage interface as follows:
- ;
- define semaphore::++ {
- _assign semaphore::\%1 \feval(\m(semaphore::\%1) + 1)
- echo \m(semaphore::\%1)
- }
-
- define semaphore::-- {
- _assign semaphore::\%1 \feval(\m(semaphore::\%1) - 1)
- echo \m(semaphore::\%1)
- }
-
- ; This demonstrate that the C-Kermit interpreter can accomodate several
- ; preferences.
-