(* ------------------------------------------------------------------------ :Program. ReqTools :Contents. Interface to Nico François' reqtools.library :Author. Kai Bolay [kai] (C-Version by Nico François) :Address. Hoffmannstraße 168 :Address. D-7250 Leonberg 1 (Germany) :Address. UUCP: ...!cbmvax!cbmehq!cbmger!depot1!amokle!kai :Address. FIDO: 2:247/706.3 :History. v1.0 [kai] 22-Nov-91 (translated from C) :History. v1.0m [Frank Lömker] 24-Feb-92 Umsetzung nach Modula :Copyright. Freeware :Language. Modula-2 :Translator. M2Amiga V4.0d :Remark. Thanks to Nico for his great library :Bugs. ReqTools/Arq should support each other :Bugs. Font-Hook: ta.name can contain odd pointer :-( ------------------------------------------------------------------------ *) (* ** Filename: reqtools.mod ** Release: 1.0 ** Revision: 37.3 ** ** Modula interface. ** ** (C) Copyright 1991 Nico François ** All Rights Reserved *) DEFINITION MODULE ReqTools{"reqtools.library",37}; FROM IntuitionD IMPORT IntuitionBasePtr,WindowPtr,ScreenPtr,NewWindow; FROM GraphicsD IMPORT GfxBasePtr,TextFontPtr,TextAttr; FROM DosD IMPORT DosLibraryPtr; FROM ExecD IMPORT Library,LibraryPtr; FROM SYSTEM IMPORT ADDRESS,SHORTSET,LONGSET,BPTR; FROM UtilityD IMPORT HookPtr,TagItem,TagItemPtr,Tag,tagUser; TYPE STRPTR=ADDRESS; CONST ReqToolsName = "reqtools.library"; ReqToolsVersion = 37; TYPE ReqToolsBasePtr = POINTER TO ReqToolsBase; VAR reqToolsVersion:INTEGER; reqToolsBase:ReqToolsBasePtr; TYPE ReqToolsBase = RECORD libNode: Library; flags: SHORTSET; pad: ARRAY [0..2] OF SHORTINT; segList: BPTR; (* The following library bases may be read and used by your program *) intuitionBase: IntuitionBasePtr; gfxBase: GfxBasePtr; dosBase: DosLibraryPtr; (* Next two library bases are only (and always) valid on Kickstart 2.0! (1.3 version of reqtools also initializes these when run on 2.0) *) gadToolsBase: LibraryPtr; utilityBase: LibraryPtr; END; CONST (* types of requesters, for AllocRequestA() *) TypeFileReq = 0; TypeReqInfo = 1; TypeFontReq = 2; (*********************** * * * File requester * * * ***********************) (* structure _MUST_ be allocated with AllocRequest() *) TYPE FileRequesterPtr = POINTER TO FileRequester; FileRequester = RECORD reqPos: LONGINT; leftOffset: INTEGER; topOffset: INTEGER; flags: LONGSET; hook: HookPtr; dir: STRPTR; (* READ ONLY! Change with ChangeReqAttrA()! *) matchPat: STRPTR; (* READ ONLY! Change with ChangeReqAttrA()! *) defaultFont: TextFontPtr; waitPointer: ADDRESS; (* Lots of private data follows! HANDS OFF :-) *) END; (* returned by FileRequestA() if multiselect is enabled, free list with FreeFileList() *) FileListPtr = POINTER TO FileList; FileList = RECORD next: FileListPtr; strLen: LONGINT; (* -1 for directories *) name: STRPTR; END; (*********************** * * * Font requester * * * ***********************) (* structure _MUST_ be allocated with AllocRequest() *) FontRequesterPtr = POINTER TO FontRequester; FontRequester = RECORD reqPos: LONGINT; leftOffset: INTEGER; topOffset: INTEGER; flags: LONGSET; hook: HookPtr; attr: TextAttr; (* READ ONLY! *) defaultFont: TextFontPtr; waitPointer: ADDRESS; (* Lots of private data follows! HANDS OFF :-) *) END; (*********************** * * * Requester Info * * * ***********************) (* for EZRequestA(), GetLongA(), GetStringA() and PaletteRequestA(), _MUST_ be allocated with AllocRequest() *) ReqInfoPtr = POINTER TO ReqInfo; ReqInfo = RECORD reqPos: LONGINT; leftOffset: INTEGER; topOffset: INTEGER; width: LONGINT; (* not for EZRequestA() *) reqTitle: STRPTR; (* currently only for EZRequestA() *) flags: LONGSET; (* only for EZRequestA() *) defaultFont: TextFontPtr; (* currently only for PaletteRequestA() *) waitPointer: ADDRESS; (* structure may be extended in future *) END; (*********************** * * * Handler Info * * * ***********************) (* for ReqHandlerA(), will be allocated for you when you use the ReqHandler tag, never try to allocate this yourself! *) HandlerInfoPtr = POINTER TO HandlerInfo; HandlerInfo = RECORD private1: LONGINT; waitMask: LONGSET; doNotWait: LONGINT (* LONGBOOL *); (* ? *) (* Private data follows, HANDS OFF :-) *) END; (* possible return codes from ReqHandlerA() *) CONST CallHandler = 080000000H; (************************************* * * * TAGS * * * *************************************) TagBase = tagUser; (*** tags understood by most requester functions ***) (* optional pointer to window *) Window = TagBase+1; (* idcmp flags requester should abort on (useful for IDCMP_DISKINSERTED) *) IDCMPFlags = TagBase+2; (* position of requester window (see below) - default REQPOS_POINTER *) ReqPos = TagBase+3; (* signal mask to wait for abort signal *) LeftOffset = TagBase+4; (* topedge offset of requester relative to position specified by ReqPos *) TopOffset = TagBase+5; (* name of public screen to put requester on (Kickstart 2.0 only!) *) PubScrName = TagBase+6; (* address of screen to put requester on *) Screen = TagBase+7; (* tagdata must hold the address of (!) an APTR variable *) DoReqHandler = TagBase+8; (* font to use when screen font is rejected, _MUST_ be fixed-width font! (struct TextFont *, not struct TextAttr *!) - default GfxBase->DefaultFont *) DefaultFont = TagBase+9; (* boolean to set the standard wait pointer in window - default FALSE *) WaitPointer = TagBase+10; (*** tags specific to EZRequestA *** *) (* title of requester window - default "Request" or "Information" *) ezReqTitle = TagBase+20; (* TagBase+21 reserved *) (* various flags (see below) *) ezFlags = TagBase+22; (* default response (activated by pressing RETURN) - default TRUE *) ezDefaultResponse = TagBase+23; (*** tags specific to GetLongA *** *) (* minimum allowed value - default MININT *) glMin = TagBase+30; (* maximum allowed value - default MAXINT *) glMax = TagBase+31; (* suggested width of requester window (in pixels) *) glWidth = TagBase+32; (* boolean to show the default value - default TRUE *) glShowDefault = TagBase+33; (*** tags specific to GetStringA *** *) (* suggested width of requester window (in pixels) *) gsWidth = glWidth; (* allow empty string to be accepted - default FALSE *) gsAllowEmpty = TagBase+80; (*** tags specific to FileRequestA *** *) (* various flags (see below) *) fiFlags = TagBase+40; (* suggested height of file requester *) fiHeight = TagBase+41; (* replacement text for 'Ok' gadget (max 6 chars) *) fiOkText = TagBase+42; (*** tags specific to FontRequestA *** *) (* various flags (see below) *) foflags = fiFlags; (* suggested height of font requester *) foHeight = fiHeight; (* replacement text for 'Ok' gadget (max 6 chars) *) foOkText = fiOkText; (* suggested height of font sample display - default 24 *) foSampleHeight= TagBase+60; (* minimum height of font displayed *) foMinHeight = TagBase+61; (* maximum height of font displayed *) foMaxHeight = TagBase+62; (* [TagBase+63 to TagBase+66 used below] *) (*** tags for ChangeReqAttrA *** *) (* file requester - set directory *) fiDir = TagBase+50; (* file requester - set wildcard pattern *) fiMatchPat = TagBase+51; (* file requester - add a file or directory to the buffer *) fiAddEntry = TagBase+52; (* file requester - remove a file or directory from the buffer *) fiRemoveEntry = TagBase+53; (* font requester - set font name of selected font *) foFontName = TagBase+63; (* font requester - set font size *) foFontHeight = TagBase+64; (* font requester - set font style *) foFontStyle = TagBase+65; (* font requester - set font flags *) foFontFlags = TagBase+66; (*** tags for PaletteRequestA *** *) (* initially selected color - default 1 *) paColor = TagBase+70; (*** tags for ReqHandlerA *** *) (* end requester by software control, set tagdata to REQ_CANCEL, REQ_OK or in case of EZRequest to the return value *) rhEndRequest = TagBase+60; (*** tags for AllocRequestA ***) (* no tags defined yet *) (************ * ReqPos * ************) ReqPosPointer = 0; ReqPosCenterWin = 1; ReqPosCenterScr = 2; ReqPosTopLeftWin = 3; ReqPosTopLeftScr = 4; (****************** * RTRH_EndRequest * ******************) ReqCancel = 0; ReqOK = 1; (*************************************** * flags for RTFI_Flags and RTFO_Flags * * or filereq->Flags and fontreq->Flags * ***************************************) fReqNoBuffer = 2; fReqDoWildFunc = 11; (***************************************** * flags for RTFI_Flags or filereq->Flags * *****************************************) fReqMultiSelect = 0; fReqSave = 1; fReqNoFiles = 3; fReqPatGad = 4; fReqSelectDirs = 12; (***************************************** * flags for RTFO_Flags or fontreq->Flags * *****************************************) fReqFixedWidth = 5; fReqColorFonts = 6; fReqChangePalette = 7; fReqLeavePalette = 8; fReqScale = 9; fReqStyle = 10; (***************************************** * flags for RTEZ_Flags or reqinfo->Flags * *****************************************) ezReqNoReturnKey = 0; ezReqLamigaQual = 1; ezReqCenterText = 2; (******** * hooks * ********) ReqHookWildFile = 0; ReqHookWildFont = 1; PROCEDURE AllocRequestA (type{0}: LONGINT; tagList{8}: TagItemPtr): ADDRESS; CODE -30; PROCEDURE AllocRequest (type{0}: LONGINT; tag1{8}: TagItemPtr): ADDRESS; CODE -30; PROCEDURE FreeRequest (req{9}: ADDRESS); CODE -36; PROCEDURE FreeReqBuffer (req{9}: ADDRESS); CODE -42; PROCEDURE ChangeReqAttrA (req{9}: ADDRESS; tagList{8}: TagItemPtr); CODE -48; PROCEDURE ChangeReqAttr (req{9}: ADDRESS; tag1{8}: TagItemPtr); CODE -48; PROCEDURE FileRequestA (fileReq{9}: FileRequesterPtr; (*VAR*) fileName{10}: ADDRESS (*ARRAY OF CHAR*); title{11}: ADDRESS (*ARRAY OF CHAR*); tagList{8}: TagItemPtr): BOOLEAN; CODE -54; PROCEDURE FileRequest (fileReq{9}: FileRequesterPtr; (*VAR*) fileName{10}: ADDRESS (*ARRAY OF CHAR*); title{11}: ADDRESS (*ARRAY OF CHAR*); tag1{8}: TagItemPtr): BOOLEAN; CODE -54; PROCEDURE FreeFileList (fileList{8}: FileListPtr); CODE -60; (* Die nächsten 6 Prozeduren können nicht direkt aus Modula benutzt werden, da sie das Register A4 benötigen. Statt dessen können die Prozeduren aus ReqToolsSupport benutzt werden. *) PROCEDURE EZRequestA (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; argarray{12}: ADDRESS; tagList{8}: TagItemPtr): LONGINT; CODE -66; PROCEDURE EZRequestTags (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; argarray{12}: ADDRESS; tag1{8}: TagItemPtr):LONGINT; CODE -66; PROCEDURE EZRequest (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tagList{8}: TagItemPtr; argarray{12}: ADDRESS (*LONGINT*)): LONGINT; CODE -66; (* Without result.... *) PROCEDURE vEZRequestA (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; argarray{12}: ADDRESS; tagList{8}: TagItemPtr); CODE -66; PROCEDURE vEZRequestTags (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; argarray{12}: ADDRESS; tag1{8}: TagItemPtr); CODE -66; PROCEDURE vEZRequest (bodyfmt{9}, gadfmt{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tagList{8}: TagItemPtr; argarray{12}: ADDRESS (*LONGINT*)); CODE -66; PROCEDURE GetStringA ((*VAR*) buffer{9}: ADDRESS (*ARRAY OF CHAR*); maxchars{0}: LONGINT; title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tagList{8}: TagItemPtr): BOOLEAN; CODE -72; PROCEDURE GetString ((*VAR*) buffer{9}: ADDRESS (*ARRAY OF CHAR*); maxchars{0}: LONGINT; title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tag1{8}: TagItemPtr): BOOLEAN; CODE -72; PROCEDURE GetLongA (VAR long{9}: LONGINT; title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tagList{8}: TagItemPtr): BOOLEAN; CODE -78; PROCEDURE GetLong (VAR long{9}: LONGINT; title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tag1{8}: TagItemPtr): BOOLEAN; CODE -78; PROCEDURE FontRequestA (fontReq{9}: FontRequesterPtr; title{11}: ADDRESS (*ARRAY OF CHAR*); tagList{8}: TagItemPtr): BOOLEAN ; CODE -96; PROCEDURE FontRequest (fontReq{9}: FontRequesterPtr; title{11}: ADDRESS (*ARRAY OF CHAR*); tag1{8}: TagItemPtr):BOOLEAN ; CODE -96; PROCEDURE PaletteRequestA (title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tagList{8}: TagItemPtr): LONGINT; CODE -102; PROCEDURE PaletteRequest (title{10}: ADDRESS (*ARRAY OF CHAR*); reqInfo{11}: ReqInfoPtr; tag1{8}: TagItemPtr): LONGINT; CODE -102; PROCEDURE ReqHandlerA (hinfo{9}: HandlerInfoPtr; sigs{0}: LONGSET; tagList{8}: TagItemPtr): LONGINT; CODE -108; PROCEDURE ReqHandler (hinfo{9}: HandlerInfoPtr; sigs{0}: LONGSET; tag1{8}: TagItemPtr): LONGINT; CODE -108; PROCEDURE SetWaitPointer (window{8}: WindowPtr); CODE -114; PROCEDURE GetVScreenSize (screen{8}: ScreenPtr; VAR width{9},height{10}: LONGINT); CODE -120; PROCEDURE SetReqPosition (reqpos{0}: LONGINT; VAR nw{8}: NewWindow; screen{9}: ScreenPtr; window{10}: WindowPtr); CODE -126; PROCEDURE Spread ((*VAR*) posarray{8}: ADDRESS (*ARRAY OF LONGINT*); sizearray{9}: ADDRESS (*ARRAY OF LONGINT*); totalsize{0}, min{1}, max{2}, num{3}: LONGINT); CODE -132; PROCEDURE ScreenToFrontSafely (screen{8}: ScreenPtr); CODE -138; END ReqTools.