home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 510.lha / AssignX_v1.1 / AssignX.c < prev    next >
C/C++ Source or Header  |  1991-05-06  |  3KB  |  137 lines

  1. /************************************************************************/
  2. /*  EasyRequest trapper - deals with requests for nonexistant volumes   */
  3. /*                        V1.1, by Steve Tibbett                        */
  4. /************************************************************************/
  5. #include <Stdio.h>
  6. #include <libraries/gadtools.h>
  7. #include <intuition/intuition.h>
  8. #include <proto/gadtools.h>
  9. #include <proto/asl.h>
  10. #include <proto/exec.h>
  11. #include <proto/dos.h>
  12. #include <dos/dos.h>
  13. #include <exec/memory.h>
  14. #include <string.h>
  15. #include <ctype.h>
  16.  
  17. struct Library *IntuitionBase;
  18. struct Library *AslBase;
  19. struct Remember *Remember;
  20.  
  21. void MemCleanup(void) { }
  22.  
  23. struct AbortedList
  24.     {
  25.     struct AbortedList *Next;
  26.     char Name[1];
  27.     } *AbortedList;
  28.  
  29. void *OrigFunc;
  30.  
  31. /************************************************************************/
  32. /*                        The new "EasyRequest"                         */
  33. /************************************************************************/
  34. int __saveds __interrupt __asm
  35. NewFunc(register __a0 struct Window *Win, register __a1 struct EasyStruct *EZ,
  36. register __a2 ULONG *idcmp, register __a3 ULONG *args)
  37. {
  38. int Res;
  39. int Mine=0;
  40.  
  41. if (args && args[0] && (strcmp((char *)args[0], "Please insert volume")==0))
  42.     {
  43.     struct AbortedList *AL=AbortedList;
  44.  
  45.     while (AL)
  46.         {
  47.         if (stricmp((char *)AL->Name, (char *)args[1])==0)
  48.             return(0);
  49.  
  50.         AL=AL->Next;
  51.         };
  52.  
  53.     EZ->es_GadgetFormat="Retry|Assign...|Mount|Deny|Cancel";
  54.     Mine=1;
  55.     };
  56.  
  57. Res=MyFunc(Win, EZ, idcmp, args);
  58.  
  59. if (Mine)
  60.     {
  61.     switch (Res)
  62.         {
  63.         case 2:
  64.             {
  65.             BPTR AsnLock;
  66.             char buff[80];
  67.             char *FullName;
  68.             struct FileRequester *FR;
  69.  
  70.             strcpy(buff, "Assignment for '");
  71.             strcat(buff, (char *)args[1]);
  72.             strcat(buff, "':");
  73.  
  74.             FR=(struct FileRequester *)AslFileRequest(Win, buff, "RAM:", "", 0, &FullName);
  75.             if (FR) {
  76.                 AsnLock=Lock(FullName, ACCESS_READ);
  77.                 if (AsnLock)
  78.                     AssignLock((char *)args[1], AsnLock);
  79.  
  80.                 FreeVec(FullName);
  81.                 FreeFileRequest(FR);
  82.                 };
  83.             return(1);
  84.             break;
  85.             };
  86.         case 3:
  87.             {
  88.             char buff[128];
  89.             strcpy(buff, "Mount >NIL: <NIL: ");
  90.             strcat(buff, args[1]);
  91.             strcat(buff, ":");
  92.             System(buff,0);
  93.             return(1);
  94.             };
  95.  
  96.         case 4:
  97.             {
  98.             struct AbortedList *AL=(struct AbortedList *)AllocRemember(&Remember, strlen((char *)args[1])+sizeof(struct AbortedList)+2, MEMF_CLEAR);
  99.             if (AL) {
  100.                 strcpy(AL->Name, (char *)args[1]);
  101.                 AL->Next=AbortedList;
  102.                 AbortedList=AL;
  103.                 };
  104.             };
  105.         };
  106.     };
  107.  
  108. return(Res);
  109. }
  110.  
  111.  
  112. main()
  113. {
  114. void *OurVec;
  115.  
  116. IntuitionBase=OpenLibrary("intuition.library", 36);
  117. AslBase=OpenLibrary("asl.library", 36);
  118. if (IntuitionBase==0 || AslBase==0)
  119.     return(10);
  120.  
  121. OrigFunc=SetFunction(IntuitionBase, -0x24c, NewFunc);
  122. if (OrigFunc==0)
  123.     return(15);
  124.  
  125. Wait(SIGBREAKF_CTRL_C);
  126.  
  127. OurVec=SetFunction(IntuitionBase, -0x24c, OrigFunc);
  128.  
  129. if (OurVec!=NewFunc)
  130.     EasyRequester(NULL, "AssignX Request", "Error removing wedge!\nReboot soon!", "Okay");
  131.  
  132. FreeRemember(&Remember, TRUE);
  133. CloseLibrary(IntuitionBase);
  134. CloseLibrary(AslBase);
  135. return(0);
  136. }
  137.