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 >
Wrap
Text File
|
1977-12-31
|
4KB
|
99 lines
-> filehook.e
OPT PREPROCESS
-> E-Note: eCodeASLHook() sets up an E PROC for use as an ASL hook function
-> (i.e., you can use globals and not worry about trashing registers).
MODULE 'asl',
'other/ecode',
'dos/dos',
'dos/dosasl',
'intuition/intuition',
'libraries/asl',
'utility/hooks'
ENUM ERR_NONE, ERR_AFILE, ERR_ECODE, ERR_KICK, ERR_LIB, ERR_WIN
RAISE ERR_AFILE IF AllocFileRequest()=NIL,
ERR_KICK IF KickVersion()=FALSE,
ERR_LIB IF OpenLibrary()=NIL,
ERR_WIN IF OpenWindowTagList()=NIL
CONST DESTPATLENGTH=20
DEF window=NIL, sourcepattern, pat[DESTPATLENGTH]:ARRAY
PROC main() HANDLE
DEF fr=NIL:PTR TO filerequester, myFunc
-> This is the pattern matching string that the hook function uses
sourcepattern:='(#?.info)'
KickVersion(37) -> E-Note: requires V37
aslbase:=OpenLibrary('asl.library', 37)
-> This is a V37 dos.library function that turns a pattern matching string
-> into something the DOS pattern matching functions can understand.
ParsePattern(sourcepattern, pat, DESTPATLENGTH)
-> Open a window that gets ACTIVEWINDOW events
window:=OpenWindowTagList(NIL, [WA_TITLE, 'ASL Hook Function Example',
WA_IDCMP, IDCMP_ACTIVEWINDOW,
WA_FLAGS, WFLG_DEPTHGADGET,
NIL])
fr:=AllocFileRequest()
-> E-Note: eCodeASLHook() sets up an E PROC for use as an ASL hook function
IF NIL=(myFunc:=eCodeASLHook({hookFunc})) THEN Raise(ERR_ECODE)
IF AslRequest(fr, [ASL_DIR, 'SYS:Utilities',
ASL_WINDOW, window,
ASL_TOPEDGE, 0,
ASL_HEIGHT, 200,
ASL_HAIL, 'Pick an icon, select save',
-> E-Note: use the value returned from aslhook()
ASL_HOOKFUNC, myFunc,
ASL_FUNCFLAGS, FILF_DOWILDFUNC OR FILF_DOMSGFUNC OR
FILF_SAVE,
ASL_OKTEXT, 'Save',
NIL])
WriteF('PATH=\s FILE=\s\n', fr.drawer, fr.file)
WriteF('To combine the path and filename, copy the path\n')
WriteF('to a buffer, add the filename with Dos AddPart().\n')
ENDIF
EXCEPT DO
IF fr THEN FreeFileRequest(fr)
IF window THEN CloseWindow(window)
IF aslbase THEN CloseLibrary(aslbase)
SELECT exception
CASE ERR_AFILE; WriteF('Error: Could not allocate file request\n')
CASE ERR_ECODE; WriteF('Error: Ran out of memory in eCodeASLHook()\n')
CASE ERR_KICK; WriteF('Error: Requires V37\n')
CASE ERR_LIB; WriteF('Error: Could not open ASL library\n')
CASE ERR_WIN; WriteF('Error: Could not open window\n')
ENDSELECT
ENDPROC
PROC hookFunc(type, obj:PTR TO anchorpath, fr)
DEF returnvalue
SELECT type
CASE FILF_DOMSGFUNC
-> We got a message meant for the window
WriteF('You activated the window\n')
RETURN obj
CASE FILF_DOWILDFUNC
-> We got an AnchorPath structure, should the requester display this file?
-> MatchPattern() is a dos.library function that compares a matching
-> pattern (parsed by the ParsePattern() DOS function) to a string and
-> returns TRUE if they match.
returnvalue:=MatchPattern(pat, obj.info.filename)
-> We have to negate MatchPattern()'s return value because the file
-> requester expects a zero for a match not a TRUE value
RETURN returnvalue=FALSE
ENDSELECT
ENDPROC
vers: CHAR 0, '$VER: filehook 37.0', 0