home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / uucp / duucp-1.17 / AU-117b4-src.lha / src / util / lockserial.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-24  |  2.0 KB  |  115 lines

  1. /*
  2.  *  LOCKSERIAL.C
  3.  *
  4.  *  LOCKSERIAL -D [device] -U [unit] -A
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "config.h"
  10. #include "version.h"
  11. #include <OwnDevUnit.h>
  12.  
  13. IDENT (".03");
  14.  
  15. struct Library *OwnDevUnitBase;
  16.  
  17. char *DeviceName = "serial.device";
  18. char *Command;
  19. long UnitNo = 0;
  20. BOOL AttemptMode = FALSE;
  21. UBYTE *ReturnVal = (UBYTE *) "xx";
  22.  
  23. char RBuf[64];
  24. char PBuf[64];
  25.  
  26. void help (void);
  27. void myexit (void);
  28.  
  29. int main(int ac, char **av)
  30. {
  31.     short i;
  32.  
  33.     atexit(myexit);
  34.     if ((OwnDevUnitBase = OpenLibrary ((UBYTE *) ODU_NAME, 0)) == NULL) {
  35.     puts("Couldn't open lock library");
  36.     exit(20);
  37.     }
  38.  
  39.     for (i = 1; i < ac; ++i) {
  40.     char *ptr = av[i];
  41.     if (*ptr == '-') {
  42.         ptr += 2;
  43.         switch(ptr[-1]) {
  44.         case 'D':
  45.         DeviceName = (*ptr) ? ptr : av[++i];
  46.         break;
  47.         case 'U':
  48.         UnitNo = (*ptr) ? atoi(ptr) : atoi(av[++i]);
  49.         break;
  50.         case 'A':
  51.         AttemptMode = TRUE;
  52.         break;
  53.         default:
  54.         help();
  55.         goto End;
  56.         }
  57.     } else {
  58.         Command = ptr;
  59.     }
  60.     }
  61.  
  62.     if (Command) {
  63.     if (AttemptMode)
  64.         ReturnVal = AttemptDevUnit ((UBYTE *) DeviceName, UnitNo, (UBYTE *) Command, 0);
  65.     else
  66.         ReturnVal = LockDevUnit ((UBYTE *) DeviceName, UnitNo, (UBYTE *) Command, 0);
  67.  
  68.     if (ReturnVal == NULL) {
  69.         system (Command);
  70.         FreeDevUnit ((UBYTE *) DeviceName, UnitNo);
  71.         ReturnVal = (UBYTE *) "done";
  72.     } else {
  73.         if (ReturnVal[0] == ODUERR_LEADCHAR[0])
  74.         printf("Error locking device: %s\n", &ReturnVal[1]);
  75.         else
  76.         printf("%s unit %d already owned by %s\n", DeviceName, UnitNo, ReturnVal);
  77.     }
  78.     } else {
  79.     help();
  80.     }
  81. End:
  82.     return(0);
  83. }
  84.  
  85. void
  86. myexit (void)
  87. {
  88.     /*
  89.      *    If lock in progress
  90.      */
  91.  
  92.     if (ReturnVal == NULL) {
  93.     FreeDevUnit ((UBYTE *) DeviceName, UnitNo);
  94.     ReturnVal = (UBYTE *) "xx";
  95.     }
  96.  
  97.     /*
  98.      *    If library open
  99.      */
  100.  
  101.     UnLockFiles();
  102.  
  103.     if (OwnDevUnitBase) {
  104.     CloseLibrary(OwnDevUnitBase);
  105.     OwnDevUnitBase = NULL;
  106.     }
  107. }
  108.  
  109. void
  110. help (void)
  111. {
  112.     puts("LOCKSERIAL [-D device] [-U unit] [-A] \"command arg1 arg2 ... argN\"");
  113. }
  114.  
  115.