{ This file is part of the Free Pascal run time library. Copyright (c) 2005 Karoly Balogh for Genesi S.a.r.l. asl.library interface unit for MorphOS/PowerPC Based on work of Nils Sjoholm member of the Amiga RTL development team. MorphOS port was done on a free Pegasos II/G4 machine provided by Genesi S.a.r.l. See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} {$PACKRECORDS 2} unit asl; interface uses exec, utility, workbench, agraphics; {************************************************************************} const ASLNAME: PChar = 'asl.library'; ASL_TB = TAG_USER + $80000; {************************************************************************} { Types of requesters known to ASL, used as arguments to AllocAslRequest() } ASL_FileRequest = 0; ASL_FontRequest = 1; ASL_ScreenModeRequest = 2; {**************************************************************************** * * ASL File Requester data structures and constants * * This structure must only be allocated by asl.library amd is READ-ONLY! * Control of the various fields is provided via tags when the requester * is created with AllocAslRequest() and when it is displayed via * AslRequest() } type PFileRequester = ^TFileRequester; TFileRequester = record case SmallInt of 0: ( rf_Reserved0: array[0..3] of Byte; rf_File: STRPTR; // Filename pointer rf_Dir: STRPTR; // Directory name pointer rf_Reserved1: array[0..9] of Byte; rf_LeftEdge: SmallInt; rf_TopEdge: SmallInt; // Preferred window pos rf_Width: SmallInt; rf_Height: SmallInt; // Preferred window size rf_Reserved2: array[0..1] of Byte; rf_NumArgs: LongInt; // A-la WB Args, FOR multiselects rf_ArgList: PWBArgList; rf_UserData: APTR; // Applihandle (you may write!!) rf_Reserved3: array[0..7] of Byte; rf_Pat: STRPTR; // Pattern match pointer ); 1: ( fr_Reserved0: array[0..3] of Byte; fr_File: STRPTR; // Filename pointer fr_Drawer: STRPTR; // Directory name pointer fr_Reserved1: array[0..9] of Byte; fr_LeftEdge: SmallInt; fr_TopEdge: SmallInt; // Preferred window pos fr_Width: SmallInt; fr_Height: SmallInt; // Preferred window size fr_Reserved2: array[0..1] of Byte; fr_NumArgs: LongInt; // A-la WB Args, FOR multiselects fr_ArgList: PWBArgList; fr_UserData: APTR; // Applihandle (you may write!!) fr_Reserved3: array[0..7] of Byte; fr_Pattern: STRPTR; // Pattern match pointer ); end; // note - more reserved fields follow // File requester tag values, used by AllocAslRequest() and AslRequest() const ASLFR_TitleText = ASL_TB + 1; // Title of requester ASLFR_Window = ASL_TB + 2; // Parent window ASLFR_InitialLeftEdge = ASL_TB + 3; // Initial requester coordinates ASLFR_InitialTopEdge = ASL_TB + 4; ASLFR_InitialWidth = ASL_TB + 5; // Initial requester dimensions ASLFR_InitialHeight = ASL_TB + 6; ASLFR_HookFunc = ASL_TB + 7; // Combined callback function ASLFR_InitialFile = ASL_TB + 8; // Initial contents of File gadget ASLFR_InitialDrawer = ASL_TB + 9; // Initial contents of Drawer gadg. ASLFR_InitialPattern = ASL_TB + 10; // Initial contents of Pattern gadg. ASLFR_PositiveText = ASL_TB + 18; // Positive gadget text ASLFR_NegativeText = ASL_TB + 19; // Negative gadget text ASLFR_Flags1 = ASL_TB + 20; // Option flags ASLFR_Flags2 = ASL_TB + 22; // Additional option flags ASLFR_Screen = ASL_TB + 40; // Screen to open on if no window ASLFR_PubScreenName = ASL_TB + 41; // Name of public screen ASLFR_PrivateIDCMP = ASL_TB + 42; // Allocate private IDCMP? ASLFR_SleepWindow = ASL_TB + 43; // Block input in ASLFR_Window? ASLFR_DoSaveMode = ASL_TB + 44; // Being used for saving? ASLFR_DoMultiSelect = ASL_TB + 45; // Do multi-select? ASLFR_DoPatterns = ASL_TB + 46; // Display a Pattern gadget? ASLFR_DrawersOnly = ASL_TB + 47; // Don't display files? ASLFR_FilterFunc = ASL_TB + 49; // Function to filter files ASLFR_Locale = ASL_TB + 50; // Locale ASL should use for text ASLFR_TextAttr = ASL_TB + 51; // Text font to use for gadget text ASLFR_UserData = ASL_TB + 52; // What to put in fr_UserData ASLFR_RejectIcons = ASL_TB + 60; // Display .info files? ASLFR_RejectPattern = ASL_TB + 61; // Don't display files matching pat ASLFR_AcceptPattern = ASL_TB + 62; // Accept only files matching pat ASLFR_FilterDrawers = ASL_TB + 63; // Also filter drawers with patterns ASLFR_IntuiMsgFunc = ASL_TB + 70; // Function to handle IntuiMessages ASLFR_SetSortBy = ASL_TB + 124; // Sort criteria (name, date, size) ASLFR_GetSortBy = ASL_TB + 125; ASLFR_SetSortDrawers = ASL_TB + 126; // Placement of drawers in the list ASLFR_GetSortDrawers = ASL_TB + 127; ASLFR_SetSortOrder = ASL_TB + 128; // Order (ascending or descending) ASLFR_GetSortOrder = ASL_TB + 129; // V44 ASLFR_InitialShowVolumes = ASL_TB + 130; // Initially, show the volume list ASLFR_PopToFront = ASL_TB + 131; // Make the requester window visible // V45 ASLFR_Activate = ASL_TB + 132; // Activate the requester window when // Flag bits for the ASLFR_Flags1 tag FRB_FILTERFUNC = 7; FRB_INTUIFUNC = 6; FRB_DOSAVEMODE = 5; FRB_PRIVATEIDCMP = 4; FRB_DOMULTISELECT = 3; FRB_DOPATTERNS = 0; FRF_FILTERFUNC = 1 shl FRB_FILTERFUNC; FRF_INTUIFUNC = 1 shl FRB_INTUIFUNC; FRF_DOSAVEMODE = 1 shl FRB_DOSAVEMODE; FRF_PRIVATEIDCMP = 1 shl FRB_PRIVATEIDCMP; FRF_DOMULTISELECT = 1 shl FRB_DOMULTISELECT; FRF_DOPATTERNS = 1 shl FRB_DOPATTERNS; // Flag bits for the ASLFR_Flags2 tag FRB_DRAWERSONLY = 0; FRB_FILTERDRAWERS = 1; FRB_REJECTICONS = 2; FRF_DRAWERSONLY = 1 shl FRB_DRAWERSONLY; FRF_FILTERDRAWERS = 1 shl FRB_FILTERDRAWERS; FRF_REJECTICONS = 1 shl FRB_REJECTICONS; // Sort criteria for the ASLFR_SetSortBy/ASLFR_GetSortBy tags ASLFRSORTBY_Name = 0; ASLFRSORTBY_Date = 1; ASLFRSORTBY_Size = 2; // Drawer placement for the ASLFR_SetSortDrawers/ASLFR_GetSortDrawers tags ASLFRSORTDRAWERS_First = 0; ASLFRSORTDRAWERS_Mix = 1; ASLFRSORTDRAWERS_Last = 2; // Sort order for the ASLFR_SetSortOrder/ASLFR_GetSortOrder tags ASLFRSORTORDER_Ascend = 0; ASLFRSORTORDER_Descend = 1; {**************************************************************************** * * ASL Font Requester data structures and constants * * This structure must only be allocated by asl.library amd is READ-ONLY! * Control of the various fields is provided via tags when the requester * is created with AllocAslRequest() and when it is displayed via * AslRequest() } type PFontRequester = ^TFontRequester; TFontRequester = record fo_Reserved0: array[0..7] of Byte; fo_Attr: TTextAttr; // Returned TextAttr fo_FrontPen: Byte; // Returned front pen fo_BackPen: Byte; // Returned back pen fo_DrawMode: Byte; // Returned drawing mode fo_Reserved1: Byte; fo_UserData: APTR; // You can store your own data here fo_LeftEdge: SmallInt; // Coordinates Of requester on Exit fo_TopEdge: SmallInt; fo_Width: SmallInt; fo_Height: SmallInt; fo_TAttr: TTTextAttr; // Returned TTextAttr end; // Font requester tag values, used by AllocAslRequest() AND AslRequest() const ASLFO_TitleText = ASL_TB + 1; // Title of requester ASLFO_Window = ASL_TB + 2; // Parent window ASLFO_InitialLeftEdge = ASL_TB + 3; // Initial requester coordinates ASLFO_InitialTopEdge = ASL_TB + 4; ASLFO_InitialWidth = ASL_TB + 5; // Initial requester dimensions ASLFO_InitialHeight = ASL_TB + 6; ASLFO_HookFunc = ASL_TB + 7; // Combined callback function ASLFO_InitialName = ASL_TB + 10; // Initial contents of Name gadget ASLFO_InitialSize = ASL_TB + 11; // Initial contents of Size gadget ASLFO_InitialStyle = ASL_TB + 12; // Initial font style ASLFO_InitialFlags = ASL_TB + 13; // Initial font flags for TextAttr ASLFO_InitialFrontPen = ASL_TB + 14; // Initial front pen ASLFO_InitialBackPen = ASL_TB + 15; // Initial back pen ASLFO_MinHeight = ASL_TB + 16; // Minimum font height to display ASLFO_MaxHeight = ASL_TB + 17; // Maximum font height to display ASLFO_PositiveText = ASL_TB + 18; // Positive gadget text ASLFO_NegativeText = ASL_TB + 19; // Negative gadget text ASLFO_Flags = ASL_TB + 20; // Option flags ASLFO_ModeList = ASL_TB + 21; // Substitute list for drawmodes ASLFO_Screen = ASL_TB + 40; // Screen to open on if no window ASLFO_PubScreenName = ASL_TB + 41; // Name of public screen ASLFO_PrivateIDCMP = ASL_TB + 42; // Allocate private IDCMP? ASLFO_SleepWindow = ASL_TB + 43; // Block input in ASLFO_Window? ASLFO_DoFrontPen = ASL_TB + 44; // Display Front color selector? ASLFO_DoBackPen = ASL_TB + 45; // Display Back color selector? ASLFO_DoStyle = ASL_TB + 46; // Display Style checkboxes? ASLFO_DoDrawMode = ASL_TB + 47; // Display DrawMode cycle gadget? ASLFO_FixedWidthOnly = ASL_TB + 48; // Only allow fixed-width fonts? ASLFO_FilterFunc = ASL_TB + 49; // Function to filter fonts ASLFO_Locale = ASL_TB + 50; // Locale ASL should use for text ASLFO_TextAttr = ASL_TB + 51; // Text font to use for gadget text ASLFO_UserData = ASL_TB + 52; // What to put in fo_UserData ASLFO_InitialDrawMode = ASL_TB + 59; // Initial draw mode ASLFO_FrontPens = ASL_TB + 64; // Color table for front pen palette ASLFO_BackPens = ASL_TB + 65; // Color table for back pen palette ASLFO_MaxFrontPen = ASL_TB + 66; // Max # of colors in front palette ASLFO_MaxBackPen = ASL_TB + 67; // Max # of colors in back palette ASLFO_IntuiMsgFunc = ASL_TB + 70; // Function to handle IntuiMessages // V44 ASLFO_PopToFront = ASL_TB + 131; // Make the requester window visible when it opens // V45 ASLFO_Activate = ASL_TB + 132; // Activate the requester window when it opens ASLFO_SampleText = ASL_TB + 133; // Text to display in font sample area // Flag bits for ASLFO_Flags tag FOB_DOFRONTPEN = 0; FOB_DOBACKPEN = 1; FOB_DOSTYLE = 2; FOB_DODRAWMODE = 3; FOB_FIXEDWIDTHONLY = 4; FOB_PRIVATEIDCMP = 5; FOB_INTUIFUNC = 6; FOB_FILTERFUNC = 7; FOF_DOFRONTPEN = 1 shl FOB_DOFRONTPEN; FOF_DOBACKPEN = 1 shl FOB_DOBACKPEN; FOF_DOSTYLE = 1 shl FOB_DOSTYLE; FOF_DODRAWMODE = 1 shl FOB_DODRAWMODE; FOF_FIXEDWIDTHONLY = 1 shl FOB_FIXEDWIDTHONLY; FOF_PRIVATEIDCMP = 1 shl FOB_PRIVATEIDCMP; FOF_INTUIFUNC = 1 shl FOB_INTUIFUNC; FOF_FILTERFUNC = 1 shl FOB_FILTERFUNC; {**************************************************************************** * * ASL Screen Mode Requester data structures and constants * * This structure must only be allocated by asl.library and is READ-ONLY! * Control of the various fields is provided via tags when the requester * is created with AllocAslRequest() and when it is displayed via * AslRequest() } type PScreenModeRequester = ^TScreenModeRequester; TScreenModeRequester = record sm_DisplayID: Cardinal; // Display mode ID sm_DisplayWidth: Cardinal; // Width of display in pixels sm_DisplayHeight: Cardinal; // Height of display in pixels sm_DisplayDepth: Word; // Number of bit-planes of display sm_OverscanType: Word; // type of overscan of display sm_AutoScroll: WordBool; // Display should auto-scroll? sm_BitMapWidth: Cardinal; // Used to create your own BitMap sm_BitMapHeight: Cardinal; sm_LeftEdge: SmallInt; // Coordinates of requester on Exit sm_TopEdge: SmallInt; sm_Width: SmallInt; sm_Height: SmallInt; sm_InfoOpened: WordBool; // Info window opened on exit? sm_InfoLeftEdge: SmallInt; // Last coordinates of Info window sm_InfoTopEdge: SmallInt; sm_InfoWidth: SmallInt; sm_InfoHeight: SmallInt; sm_UserData: APTR; // You can store your own data here // fields below are available from asl.library V51 sm_MonitorName: STRPTR; // Name of the monitor this sm_DisplayID is tied to To be passed as SA_MonitorName sm_DisplayIDWidth: Cardinal; // sm_DisplayID resolution, to be passed as SA_DisplayWidth/Height in OpenScreen sm_DisplayIDHeight: Cardinal; end; { An Exec list of custom modes can be added to the list of available modes. * The DimensionInfo structure must be completely initialized, including the * Header. See . Custom mode ID's must be in the range * $FFFF0000..$FFFFFFFF. Regular properties which apply to your custom modes * can be added in the dn_PropertyFlags field. Custom properties are not * allowed. } PDisplayMode = ^TDisplayMode; TDisplayMode = record dm_Node: TNode; // see ln_Name dm_DimensionInfo: TDimensionInfo; // mode description dm_PropertyFlags: Cardinal; // applicable properties end; // ScreenMode requester tag values, used by AllocAslRequest() and AslRequest() const ASLSM_TitleText = ASL_TB + 1; // Title of requester ASLSM_Window = ASL_TB + 2; // Parent window ASLSM_InitialLeftEdge = ASL_TB + 3; // Initial requester coordinates ASLSM_InitialTopEdge = ASL_TB + 4; ASLSM_InitialWidth = ASL_TB + 5; // Initial requester dimensions ASLSM_InitialHeight = ASL_TB + 6; ASLSM_PositiveText = ASL_TB + 18; // Positive gadget text ASLSM_NegativeText = ASL_TB + 19; // Negative gadget text ASLSM_Screen = ASL_TB + 40; // Screen to open on if no window ASLSM_PubScreenName = ASL_TB + 41; // Name of public screen ASLSM_PrivateIDCMP = ASL_TB + 42; // Allocate private IDCMP? ASLSM_SleepWindow = ASL_TB + 43; // Block input in ASLSM_Window? ASLSM_Locale = ASL_TB + 50; // Locale ASL should use for text ASLSM_TextAttr = ASL_TB + 51; // Text font to use for gadget text ASLSM_UserData = ASL_TB + 52; // What to put in sm_UserData ASLSM_IntuiMsgFunc = ASL_TB + 70; // Function to handle IntuiMessages ASLSM_InitialDisplayID = ASL_TB + 100; // Initial display mode id ASLSM_InitialDisplayWidth = ASL_TB + 101; // Initial display width ASLSM_InitialDisplayHeight = ASL_TB + 102; // Initial display height ASLSM_InitialDisplayDepth = ASL_TB + 103; // Initial display depth ASLSM_InitialOverscanType = ASL_TB + 104; // Initial type of overscan ASLSM_InitialAutoScroll = ASL_TB + 105; // Initial autoscroll setting ASLSM_InitialInfoOpened = ASL_TB + 106; // Info wndw initially opened? ASLSM_InitialInfoLeftEdge = ASL_TB + 107; // Initial Info window coords. ASLSM_InitialInfoTopEdge = ASL_TB + 108; ASLSM_DoWidth = ASL_TB + 109; // Display Width gadget? ASLSM_DoHeight = ASL_TB + 110; // Display Height gadget? ASLSM_DoDepth = ASL_TB + 111; // Display Depth gadget? ASLSM_DoOverscanType = ASL_TB + 112; // Display Overscan Type gadget? ASLSM_DoAutoScroll = ASL_TB + 113; // Display AutoScroll gadget? ASLSM_PropertyFlags = ASL_TB + 114; // Must have these Property flags ASLSM_PropertyMask = ASL_TB + 115; // Only these should be looked at ASLSM_MinWidth = ASL_TB + 116; // Minimum display width to allow ASLSM_MaxWidth = ASL_TB + 117; // Maximum display width to allow ASLSM_MinHeight = ASL_TB + 118; // Minimum display height to allow ASLSM_MaxHeight = ASL_TB + 119; // Maximum display height to allow ASLSM_MinDepth = ASL_TB + 120; // Minimum display depth ASLSM_MaxDepth = ASL_TB + 121; // Maximum display depth ASLSM_FilterFunc = ASL_TB + 122; // Function to filter mode id's ASLSM_CustomSMList = ASL_TB + 123; // Exec list of struct DisplayMode // V44 ASLSM_PopToFront = ASL_TB + 131; // Make the requester window visible when it opens // V45 ASLSM_Activate = ASL_TB + 132; // Activate the requester window when it opens ASL_LAST_TAG = ASL_TB + 133; {***************************************************************************} { This defines the rendezvous data for setting and querying asl.library's * defaults for the window size and the file requester sort order. The name * of the semaphore is given below; it exists only with asl.library V45 and * IPrefs V45 and beyond. } ASL_SEMAPHORE_NAME: PChar = 'asl.library'; type PAslSemaphore = ^TAslSemaphore; TAslSemaphore = record as_Semaphore: TSignalSemaphore; as_Version: Word; // Must be >= 45 as_Size: Cardinal; // Size of this data structure. as_SortBy: Byte; // File requester defaults; name, date or size as_SortDrawers: Byte; // File requester defaults; first, mix or last as_SortOrder: Byte; // File requester defaults; ascending or descending as_SizePosition: Byte; // See below as_RelativeLeft: Word; // Window position offset as_RelativeTop: Word; as_RelativeWidth: Byte; // Window size factor; this is a percentage of the parent window/screen width. as_RelativeHeight : Byte; end; const // Default position of the ASL window. ASLPOS_DefaultPosition = 0; // Position is calculated according to the builtin rules. ASLPOS_CenterWindow = 1; // Centred within the bounds of the parent window. ASLPOS_CenterScreen = 2; // Centred within the bounds of the parent screen. ASLPOS_WindowPosition = 3; // Relative to the top left corner of the parent window, using the offset values provided in the as_RelativeLeft/as_RelativeTop members. ASLPOS_ScreenPosition = 4; // Relative to the top left corner of the parent screen, using the offset values provided in the as_RelativeLeft/as_RelativeTop members. ASLPOS_CenterMouse = 5; // Directly below the mouse pointer. ASLPOS_MASK = $0F; // Default size of the ASL window. ASLSIZE_DefaultSize = 0 shl 4; // Size is calculated according to the builtin rules. ASLSIZE_RelativeSize = 1 shl 4; // Size is relative to the size of the parent window or screen, using the values provided in // the as_RelativeWidth/as_RelativeHeight members. The as_RelativeWidth/as_RelativeHeight values are // taken as percentage, i.e. a value of "50" stands for 50% of the width/height of the parent window/screen. ASLSIZE_MASK = $30; // Other options. ASLOPTION_ASLOverrides = 1 shl 6; // ASL determines placement and size of requester windows; application's choice is ignored. {**************************************************************************** * * Obsolete ASL definitions, here for source code compatibility only. * Please do NOT use in new code. * * define ASL_V38_NAMES_ONLY to remove these older names } {$define ASL_V38_NAMES_ONLY} {$ifndef ASL_V38_NAMES_ONLY} const ASL_Dummy = TAG_USER + $80000; ASL_Hail = ASL_Dummy + 1; ASL_Window = ASL_Dummy + 2; ASL_LeftEdge = ASL_Dummy + 3; ASL_TopEdge = ASL_Dummy + 4; ASL_Width = ASL_Dummy + 5; ASL_Height = ASL_Dummy + 6; ASL_HookFunc = ASL_Dummy + 7; ASL_File = ASL_Dummy + 8; ASL_Dir = ASL_Dummy + 9; ASL_FontName = ASL_Dummy + 10; ASL_FontHeight = ASL_Dummy + 11; ASL_FontStyles = ASL_Dummy + 12; ASL_FontFlags = ASL_Dummy + 13; ASL_FrontPen = ASL_Dummy + 14; ASL_BackPen = ASL_Dummy + 15; ASL_MinHeight = ASL_Dummy + 16; ASL_MaxHeight = ASL_Dummy + 17; ASL_OKText = ASL_Dummy + 18; ASL_CancelText = ASL_Dummy + 19; ASL_FuncFlags = ASL_Dummy + 20; ASL_ModeList = ASL_Dummy + 21; ASL_ExtFlags1 = ASL_Dummy + 22; ASL_Pattern = ASL_FontName; // remember what I said up there? Do not use these anymore! FILB_DOWILDFUNC = 7; FILB_DOMSGFUNC = 6; FILB_SAVE = 5; FILB_NEWIDCMP = 4; FILB_MULTISELECT = 3; FILB_PATGAD = 0; FILF_DOWILDFUNC = 1 shl FILB_DOWILDFUNC; FILF_DOMSGFUNC = 1 shl FILB_DOMSGFUNC; FILF_SAVE = 1 shl FILB_SAVE; FILF_NEWIDCMP = 1 shl FILB_NEWIDCMP; FILF_MULTISELECT = 1 shl FILB_MULTISELECT; FILF_PATGAD = 1 shl FILB_PATGAD; FIL1B_NOFILES = 0; FIL1B_MATCHDIRS = 1; FIL1F_NOFILES = 1 shl FIL1B_NOFILES; FIL1F_MATCHDIRS = 1 shl FIL1B_MATCHDIRS; FONB_FRONTCOLOR = 0; FONB_BACKCOLOR = 1; FONB_STYLES = 2; FONB_DRAWMODE = 3; FONB_FIXEDWIDTH = 4; FONB_NEWIDCMP = 5; FONB_DOMSGFUNC = 6; FONB_DOWILDFUNC = 7; FONF_FRONTCOLOR = 1 shl FONB_FRONTCOLOR; FONF_BACKCOLOR = 1 shl FONB_BACKCOLOR; FONF_STYLES = 1 shl FONB_STYLES; FONF_DRAWMODE = 1 shl FONB_DRAWMODE; FONF_FIXEDWIDTH = 1 shl FONB_FIXEDWIDTH; FONF_NEWIDCMP = 1 shl FONB_NEWIDCMP; FONF_DOMSGFUNC = 1 shl FONB_DOMSGFUNC; FONF_DOWILDFUNC = 1 shl FONB_DOWILDFUNC; {$endif ASL_V38_NAMES_ONLY} var AslBase: PLibrary = nil; function AllocFileRequest: PFileRequester; SysCall AslBase 030; procedure FreeFileRequest(FileReq: PFileRequester location 'a0'); SysCall AslBase 036; function RequestFile(FileReq: PFileRequester location 'a0'): LongBool; SysCall AslBase 042; function AllocAslRequest(ReqType: Cardinal location 'd0'; TagList: PTagItem location 'a0'): APTR; SysCall AslBase 048; procedure FreeAslRequest(Requester: APTR location 'a0'); SysCall AslBase 054; function AslRequest(Requester: APTR location 'a0'; TagList: PTagItem location 'a1'): LongBool; SysCall AslBase 060; procedure AbortAslRequest(Requester: APTR location 'a0'); SysCall AslBase 078; procedure ActivateAslRequest(Requester: APTR location 'a0'); SysCall AslBase 084; function AllocAslRequestTags(ReqType: Cardinal; const TagList: array of PtrUInt): APTR; Inline; function AslRequestTags(Requester: APTR; const TagList: array of PtrUInt): LongBool; Inline; function InitAslLibrary : boolean; implementation function AllocAslRequestTags(ReqType: Cardinal; const TagList: array of PtrUInt): APTR; Inline; begin AllocAslRequestTags := AllocAslRequest(ReqType, @tagList); end; function AslRequestTags(Requester: APTR; const TagList: array of PtrUInt): LongBool; Inline; begin AslRequestTags := AslRequest(Requester, @TagList); end; const // Change VERSION and LIBVERSION to proper values VERSION : string[2] = '0'; LIBVERSION: LongWord = 0; function InitAslLibrary: Boolean; begin InitAslLibrary := Assigned(AslBase); end; initialization AslBase := OpenLibrary(ASLNAME, LIBVERSION); finalization if Assigned(AslBase) then CloseLibrary(PLibrary(AslBase)); end.