home *** CD-ROM | disk | FTP | other *** search
- /*
- * LOCKSERIAL.C
- *
- * LOCKSERIAL -D [device] -U [unit] -A
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include "config.h"
- #include "version.h"
- #include <OwnDevUnit.h>
-
- IDENT (".03");
-
- struct Library *OwnDevUnitBase;
-
- char *DeviceName = "serial.device";
- char *Command;
- long UnitNo = 0;
- BOOL AttemptMode = FALSE;
- UBYTE *ReturnVal = (UBYTE *) "xx";
-
- char RBuf[64];
- char PBuf[64];
-
- void help (void);
- void myexit (void);
-
- int main(int ac, char **av)
- {
- short i;
-
- atexit(myexit);
- if ((OwnDevUnitBase = OpenLibrary ((UBYTE *) ODU_NAME, 0)) == NULL) {
- puts("Couldn't open lock library");
- exit(20);
- }
-
- for (i = 1; i < ac; ++i) {
- char *ptr = av[i];
- if (*ptr == '-') {
- ptr += 2;
- switch(ptr[-1]) {
- case 'D':
- DeviceName = (*ptr) ? ptr : av[++i];
- break;
- case 'U':
- UnitNo = (*ptr) ? atoi(ptr) : atoi(av[++i]);
- break;
- case 'A':
- AttemptMode = TRUE;
- break;
- default:
- help();
- goto End;
- }
- } else {
- Command = ptr;
- }
- }
-
- if (Command) {
- if (AttemptMode)
- ReturnVal = AttemptDevUnit ((UBYTE *) DeviceName, UnitNo, (UBYTE *) Command, 0);
- else
- ReturnVal = LockDevUnit ((UBYTE *) DeviceName, UnitNo, (UBYTE *) Command, 0);
-
- if (ReturnVal == NULL) {
- system (Command);
- FreeDevUnit ((UBYTE *) DeviceName, UnitNo);
- ReturnVal = (UBYTE *) "done";
- } else {
- if (ReturnVal[0] == ODUERR_LEADCHAR[0])
- printf("Error locking device: %s\n", &ReturnVal[1]);
- else
- printf("%s unit %d already owned by %s\n", DeviceName, UnitNo, ReturnVal);
- }
- } else {
- help();
- }
- End:
- return(0);
- }
-
- void
- myexit (void)
- {
- /*
- * If lock in progress
- */
-
- if (ReturnVal == NULL) {
- FreeDevUnit ((UBYTE *) DeviceName, UnitNo);
- ReturnVal = (UBYTE *) "xx";
- }
-
- /*
- * If library open
- */
-
- UnLockFiles();
-
- if (OwnDevUnitBase) {
- CloseLibrary(OwnDevUnitBase);
- OwnDevUnitBase = NULL;
- }
- }
-
- void
- help (void)
- {
- puts("LOCKSERIAL [-D device] [-U unit] [-A] \"command arg1 arg2 ... argN\"");
- }
-
-