home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 277.lha / PatternLibrary / expunge.d < prev    next >
Encoding:
Text File  |  1989-08-08  |  1.9 KB  |  87 lines

  1. #drinc:exec/miscellaneous.g
  2. #drinc:exec/libraries.g
  3. #drinc:libraries/dos.g
  4.  
  5. proc message(*char m)void:
  6.     register *char p;
  7.  
  8.     p := m;
  9.     while p* ~= '\e' do
  10.     p := p + sizeof(char);
  11.     od;
  12.     ignore Write(Output(), m, p - m);
  13. corp;
  14.  
  15. proc main()void:
  16.     uint
  17.     R_A0 = 0,
  18.     R_A5 = 5,
  19.     R_LIB = 6,
  20.     R_FP = 6,
  21.  
  22.     M_ADIR = 1,
  23.     M_INDIR = 2,
  24.     M_DISP = 5,
  25.  
  26.     OP_MOVEL = 0x2000,
  27.     OP_JSR = 0x4e80;
  28.     extern
  29.     GetPars(*ulong pLen; **char pPtr)void;
  30.     ulong parLen;
  31.     *char parPtr, name;
  32.     *Library_t lib;
  33.     proc()void expungeEntry;
  34.     register *char unusedARegWhichWillBeA5;
  35.  
  36.     if OpenDosLibrary(0) ~= nil then
  37.     if OpenExecLibrary(0) ~= nil then
  38.         GetPars(&parLen, &parPtr);
  39.         while parPtr* = ' ' or parPtr* = '\t' do
  40.         parPtr := parPtr + sizeof(char);
  41.         od;
  42.         if parPtr* = '\r' or parPtr* = '\n' or parPtr* = '\e' then
  43.         message("use is: expunge <full-library-name>\n");
  44.         else
  45.         name := parPtr;
  46.         while parPtr* ~= ' ' and parPtr* ~= '\t' and
  47.             parPtr* ~= '\r' and parPtr* ~= '\n' and
  48.             parPtr* ~= '\e'
  49.         do
  50.             parPtr := parPtr + sizeof(char);
  51.         od;
  52.         parPtr* := '\e';
  53.         lib := OpenLibrary(name, 0);
  54.         if lib ~= nil then
  55.             message("Opened library '");
  56.             message(name);
  57.             message("'\n");
  58.             expungeEntry := pretend(lib + LIB_EXPUNGE, proc()void);
  59.             code(
  60.             OP_MOVEL | R_A0 << 9 | M_ADIR << 6 |
  61.                 M_DISP << 3 | R_FP,
  62.             expungeEntry,
  63.             OP_MOVEL | R_A5 << 9 | M_ADIR << 6 |
  64.                 M_ADIR << 3 | R_FP,
  65.             OP_MOVEL | R_LIB << 9 | M_ADIR << 6 |
  66.                 M_DISP << 3 | R_FP,
  67.             lib,
  68.             OP_JSR | M_INDIR << 3 | R_A0,
  69.             OP_MOVEL | R_FP << 9 | M_ADIR << 6 |
  70.                 M_ADIR << 3 | R_A5
  71.             );
  72.             message("Requested expunge of library '");
  73.             message(name);
  74.             message("'\n");
  75.             CloseLibrary(lib);
  76.         else
  77.             message("Could not open library '");
  78.             message(name);
  79.             message("'\n");
  80.         fi;
  81.         fi;
  82.         CloseExecLibrary();
  83.     fi;
  84.     CloseDosLibrary();
  85.     fi;
  86. corp;
  87.