home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / rkrmsrc / asl / filehook.e next >
Text File  |  1977-12-31  |  4KB  |  99 lines

  1. -> filehook.e
  2.  
  3. OPT PREPROCESS
  4.  
  5. -> E-Note: eCodeASLHook() sets up an E PROC for use as an ASL hook function
  6. ->         (i.e., you can use globals and not worry about trashing registers).
  7. MODULE 'asl',
  8.        'other/ecode',
  9.        'dos/dos',
  10.        'dos/dosasl',
  11.        'intuition/intuition',
  12.        'libraries/asl',
  13.        'utility/hooks'
  14.  
  15. ENUM ERR_NONE, ERR_AFILE, ERR_ECODE, ERR_KICK, ERR_LIB, ERR_WIN
  16.  
  17. RAISE ERR_AFILE IF AllocFileRequest()=NIL,
  18.       ERR_KICK  IF KickVersion()=FALSE,
  19.       ERR_LIB   IF OpenLibrary()=NIL,
  20.       ERR_WIN   IF OpenWindowTagList()=NIL
  21.  
  22. CONST DESTPATLENGTH=20
  23.  
  24. DEF window=NIL, sourcepattern, pat[DESTPATLENGTH]:ARRAY
  25.  
  26. PROC main() HANDLE
  27.   DEF fr=NIL:PTR TO filerequester, myFunc
  28.  
  29.   -> This is the pattern matching string that the hook function uses
  30.   sourcepattern:='(#?.info)'
  31.  
  32.   KickVersion(37)  -> E-Note: requires V37
  33.  
  34.   aslbase:=OpenLibrary('asl.library', 37)
  35.  
  36.   -> This is a V37 dos.library function that turns a pattern matching string
  37.   -> into something the DOS pattern matching functions can understand.
  38.   ParsePattern(sourcepattern, pat, DESTPATLENGTH)
  39.  
  40.   -> Open a window that gets ACTIVEWINDOW events
  41.   window:=OpenWindowTagList(NIL, [WA_TITLE, 'ASL Hook Function Example',
  42.                                   WA_IDCMP, IDCMP_ACTIVEWINDOW,
  43.                                   WA_FLAGS, WFLG_DEPTHGADGET,
  44.                                   NIL])
  45.  
  46.   fr:=AllocFileRequest()
  47.   -> E-Note: eCodeASLHook() sets up an E PROC for use as an ASL hook function
  48.   IF NIL=(myFunc:=eCodeASLHook({hookFunc})) THEN Raise(ERR_ECODE)
  49.   IF AslRequest(fr, [ASL_DIR,       'SYS:Utilities',
  50.                      ASL_WINDOW,    window,
  51.                      ASL_TOPEDGE,   0,
  52.                      ASL_HEIGHT,    200,
  53.                      ASL_HAIL,      'Pick an icon, select save',
  54.                      -> E-Note: use the value returned from aslhook()
  55.                      ASL_HOOKFUNC,  myFunc,
  56.                      ASL_FUNCFLAGS, FILF_DOWILDFUNC OR FILF_DOMSGFUNC OR
  57.                                     FILF_SAVE,
  58.                      ASL_OKTEXT, 'Save',
  59.                      NIL])
  60.     WriteF('PATH=\s FILE=\s\n', fr.drawer, fr.file)
  61.     WriteF('To combine the path and filename, copy the path\n')
  62.     WriteF('to a buffer, add the filename with Dos AddPart().\n')
  63.   ENDIF
  64. EXCEPT DO
  65.   IF fr THEN FreeFileRequest(fr)
  66.   IF window THEN CloseWindow(window)
  67.   IF aslbase THEN CloseLibrary(aslbase)
  68.   SELECT exception
  69.   CASE ERR_AFILE;  WriteF('Error: Could not allocate file request\n')
  70.   CASE ERR_ECODE;  WriteF('Error: Ran out of memory in eCodeASLHook()\n')
  71.   CASE ERR_KICK;   WriteF('Error: Requires V37\n')
  72.   CASE ERR_LIB;    WriteF('Error: Could not open ASL library\n')
  73.   CASE ERR_WIN;    WriteF('Error: Could not open window\n')
  74.   ENDSELECT
  75. ENDPROC
  76.  
  77. PROC hookFunc(type, obj:PTR TO anchorpath, fr)
  78.   DEF returnvalue
  79.   SELECT type
  80.   CASE FILF_DOMSGFUNC
  81.     -> We got a message meant for the window
  82.     WriteF('You activated the window\n')
  83.     RETURN obj
  84.   CASE FILF_DOWILDFUNC
  85.     -> We got an AnchorPath structure, should the requester display this file?
  86.  
  87.     -> MatchPattern() is a dos.library function that compares a matching
  88.     -> pattern (parsed by the ParsePattern() DOS function) to a string and
  89.     -> returns TRUE if they match.
  90.     returnvalue:=MatchPattern(pat, obj.info.filename)
  91.  
  92.     -> We have to negate MatchPattern()'s return value because the file
  93.     -> requester expects a zero for a match not a TRUE value
  94.     RETURN returnvalue=FALSE
  95.   ENDSELECT
  96. ENDPROC
  97.  
  98. vers: CHAR 0, '$VER: filehook 37.0', 0
  99.