home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * TEST.C
- *
- * TEST the semaphore library. If DICE_AUTO_TEST is defined then also
- * tests DICE's auto-library openning/closing feature. If not set then
- * this source will compile under any compiler, including DICE.
- */
-
- #include "defs.h"
- #include <stdio.h>
-
- long Sem;
-
- #ifndef DICE_AUTO_TEST
- long SemBase;
- #endif
-
- void
- myexit(void)
- {
- if (Sem) {
- DeleteSem(Sem);
- Sem = 0;
- }
- #ifndef DICE_AUTO_TEST
- if (SemBase) {
- CloseLibrary(SemBase);
- SemBase = 0;
- }
- #endif
- }
-
- main(ac, av)
- char *av[];
- {
- char buf[256];
-
- if (ac == 1) {
- fputs("TEST sem [r/x/rw/xw/s/u [n]]\n", stderr);
- exit(1);
- }
- atexit(myexit);
-
- #ifndef DICE_AUTO_TEST
- if (SemBase = OpenLibrary(SEMNAME, 0)) {
- #else
- {
- #endif
- Sem = CreateSem(av[1]);
-
- if (ac >= 3) {
- switch(av[2][0]) {
- case 'r':
- printf("read: ");
- fflush(stdout);
- SharSem(Sem);
- puts("ok");
- break;
- case 'x':
- printf("eXcl: ");
- fflush(stdout);
- ExclSem(Sem);
- puts("ok");
- break;
- case 's':
- printf("Sign: ");
- fflush(stdout);
- SigsSem(Sem, (av[3] ? atoi(av[3]) : 1));
- puts("ok");
- break;
- case 'u':
- printf("unlk: ");
- fflush(stdout);
- RelsSem(Sem);
- puts("ok");
- break;
- default:
- puts("huh?");
- break;
- }
- if (av[2][1] == 'w') {
- printf("(wait) ");
- fflush(stdout);
- WaitSem(Sem);
- puts("ok");
- }
- }
- {
- GlobSem *gs = (GlobSem *)Sem;
- printf("sem %08lx W=%08lx S=%08lx Refs=%d Lck=%d Task=%08lx\n",
- gs,
- GetHead(&gs->gs_WaitList),
- GetHead(&gs->gs_SigsList),
- gs->gs_RefCnt,
- gs->gs_Locked,
- gs->gs_Task
- );
- }
- }
- return(0);
- }
-
-