home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d575 / reqtools.lha / ReqTools / oberoninterface / ReqTools.mod next >
Text File  |  1991-12-22  |  16KB  |  444 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       ReqTools
  3.   :Contents.      Interface to Nico François' reqtools.library
  4.   :Author.        Kai Bolay [kai] (C-Version by Nico François)
  5.   :Address.       Hoffmannstraße 168
  6.   :Address.       D-7250 Leonberg 1 (Germany)
  7.   :Address.       UUCP: ...!cbmvax!cbmehq!cbmger!depot1!amokle!kai
  8.   :Address.       FIDO: 2:247/706.3
  9.   :History.       v1.0 [kai] 22-Nov-91 (translated from C)
  10.   :History.       v1.0 Nico  29-Nov-91 (comment added about ta.name bug)
  11.   :Copyright.     Freeware
  12.   :Language.      Oberon
  13.   :Translator.    AMIGA OBERON v2.12e, A+L AG
  14.   :Remark.        Thanks to Nico for his great library
  15.   :Bugs.          ReqTools/Arq should support each other
  16.   :Bugs.          Font-Hook: ta.name can contain odd pointer :-(
  17.                   <odd Pointer is fault of AvailFonts function> - Nico
  18. ------------------------------------------------------------------------ *)
  19.  
  20. (*
  21. **  Filename: reqtools.mod
  22. **  Release: 1.0
  23. **  Revision: 37.3
  24. **
  25. **  Oberon interface.
  26. **
  27. **  (C) Copyright 1991 Nico François
  28. **      All Rights Reserved
  29. *)
  30.  
  31. MODULE ReqTools;
  32.  
  33. IMPORT
  34.   e: Exec, d: Dos, I: Intuition, g: Graphics, u: Utility;
  35.  
  36. CONST
  37.   ReqToolsName* = "reqtools.library";
  38.   ReqToolsVersion* = 37;
  39.  
  40. TYPE
  41.   ReqToolsBasePtr* = POINTER TO ReqToolsBase;
  42.   ReqToolsBase* = STRUCT (libNode: e.Library)
  43.     flags*: SHORTSET;
  44.     pad: ARRAY 3 OF SHORTINT;
  45.     segList*: e.BPTR;
  46.     (* The following library bases may be read and used by your program *)
  47.     intuitionBase*: I.IntuitionBasePtr;
  48.     gfxBase*: g.GfxBasePtr;
  49.     dosBase*: d.DosLibraryPtr;
  50.     (* Next two library bases are only (and always) valid on Kickstart 2.0!
  51.        (1.3 version of reqtools also initializes these when run on 2.0) *)
  52.     gadToolsBase*: e.LibraryPtr;
  53.     utilityBase*: e.LibraryPtr;
  54.   END;
  55.  
  56. CONST
  57.   (* types of requesters, for AllocRequestA() *)
  58.   TypeFileReq* = 0;
  59.   TypeReqInfo* = 1;
  60.   TypeFontReq* = 2;
  61.  
  62. TYPE
  63.   ReqToolsReqPtr = POINTER TO ReqToolsReq;
  64.   ReqToolsReq = STRUCT END; (* make them compatible.. *)
  65.  
  66.  
  67. (***********************
  68. *                      *
  69. *    File requester    *
  70. *                      *
  71. ***********************)
  72.  
  73. (* structure _MUST_ be allocated with AllocRequest() *)
  74.  
  75. TYPE
  76.   FileRequesterPtr* = POINTER TO FileRequester;
  77.   FileRequester* = STRUCT (dummy: ReqToolsReq)
  78.     reqPos*: LONGINT;
  79.     leftOffset*: INTEGER;
  80.     topOffset*: INTEGER;
  81.     flags*: LONGSET;
  82.     hook*: u.HookPtr;
  83.     dir*: e.STRPTR;                (* READ ONLY! Change with ChangeReqAttrA()! *)
  84.     matchPat*: e.STRPTR;           (* READ ONLY! Change with ChangeReqAttrA()! *)
  85.     defaultFont*: g.TextFontPtr;
  86.     waitPointer*: e.ADDRESS;
  87.     (* Lots of private data follows! HANDS OFF :-) *)
  88.   END;
  89.  
  90. (* returned by FileRequestA() if multiselect is enabled,
  91.    free list with FreeFileList() *)
  92.  
  93.   FileListPtr* = POINTER TO FileList;
  94.   FileList* = STRUCT
  95.     next*: FileListPtr;
  96.     strLen*: LONGINT;  (* -1 for directories *)
  97.     name*: e.STRPTR;
  98.   END;
  99.  
  100. (***********************
  101. *                      *
  102. *    Font requester    *
  103. *                      *
  104. ***********************)
  105.  
  106. (* structure _MUST_ be allocated with AllocRequest() *)
  107.  
  108.   FontRequesterPtr* = POINTER TO FontRequester;
  109.   FontRequester* = STRUCT (dummy: ReqToolsReq)
  110.     reqPos*: LONGINT;
  111.     leftOffset*: INTEGER;
  112.     topOffset*: INTEGER;
  113.     flags*: LONGSET;
  114.     hook*: u.HookPtr;
  115.     attr*: g.TextAttr;  (* READ ONLY! *)
  116.     defaultFont*: g.TextFontPtr;
  117.     waitPointer*: e.ADDRESS;
  118.     (* Lots of private data follows! HANDS OFF :-) *)
  119.   END;
  120.  
  121. (***********************
  122. *                      *
  123. *    Requester Info    *
  124. *                      *
  125. ***********************)
  126.  
  127.   (* for EZRequestA(), GetLongA(), GetStringA() and PaletteRequestA(),
  128.    _MUST_ be allocated with AllocRequest() *)
  129.  
  130.   ReqInfoPtr* = POINTER TO ReqInfo;
  131.   ReqInfo* = STRUCT (dummy: ReqToolsReq)
  132.     reqPos*: LONGINT;
  133.     leftOffset*: INTEGER;
  134.     topOffset*: INTEGER;
  135.     width*: LONGINT;              (* not for EZRequestA() *)
  136.     reqTitle*: e.STRPTR;          (* currently only for EZRequestA() *)
  137.     flags*: LONGSET;              (* only for EZRequestA() *)
  138.     defaultFont*: g.TextFontPtr;  (* currently only for PaletteRequestA() *)
  139.     waitPointer*: e.ADDRESS;
  140.     (* structure may be extended in future *)
  141.   END;
  142.  
  143. (***********************
  144. *                      *
  145. *     Handler Info     *
  146. *                      *
  147. ***********************)
  148.  
  149. (* for ReqHandlerA(), will be allocated for you when you use
  150.    the ReqHandler tag, never try to allocate this yourself! *)
  151.  
  152.   HandlerInfoPtr* = POINTER TO HandlerInfo;
  153.   HandlerInfo* = STRUCT
  154.     private1: LONGINT;
  155.     waitMask*: LONGSET;
  156.     doNotWait*: I.LONGBOOL; (* ? *)
  157.     (* Private data follows, HANDS OFF :-) *)
  158.   END;
  159.  
  160. (* possible return codes from ReqHandlerA() *)
  161. CONST
  162.   CallHandler* = 080000000H;
  163.  
  164.  
  165. (*************************************
  166. *                                    *
  167. *                TAGS                *
  168. *                                    *
  169. *************************************)
  170.  
  171.   TagBase* = u.user;
  172.  
  173.   (*** tags understood by most requester functions ***)
  174.   (* optional pointer to window *)
  175.   Window* = TagBase+1;
  176.   (* idcmp flags requester should abort on (useful for IDCMP_DISKINSERTED) *)
  177.   IDCMPFlags* = TagBase+2;
  178.   (* position of requester window (see below) - default REQPOS_POINTER *)
  179.   ReqPos* = TagBase+3;
  180.   (* signal mask to wait for abort signal *)
  181.   LeftOffset* = TagBase+4;
  182.   (* topedge offset of requester relative to position specified by ReqPos *)
  183.   TopOffset* = TagBase+5;
  184.   (* name of public screen to put requester on (Kickstart 2.0 only!) *)
  185.   PubScrName* = TagBase+6;
  186.   (* address of screen to put requester on *)
  187.   Screen* = TagBase+7;
  188.   (* tagdata must hold the address of (!) an APTR variable *)
  189.   DoReqHandler* = TagBase+8;
  190.   (* font to use when screen font is rejected, _MUST_ be fixed-width font!
  191.    (struct TextFont *, not struct TextAttr *!)
  192.    - default GfxBase->DefaultFont *)
  193.   DefaultFont* = TagBase+9;
  194.   (* boolean to set the standard wait pointer in window - default FALSE *)
  195.   WaitPointer* = TagBase+10;
  196.  
  197.   (*** tags specific to EZRequestA ***
  198.   *)
  199.   (* title of requester window - default "Request" or "Information" *)
  200.   ezReqTitle* = TagBase+20;
  201.   (* TagBase+21 reserved *)
  202.   (* various flags (see below) *)
  203.   ezFlags* = TagBase+22;
  204.   (* default response (activated by pressing RETURN) - default TRUE *)
  205.   ezDefaultResponse* = TagBase+23;
  206.  
  207. (*** tags specific to GetLongA ***
  208. *)
  209.   (* minimum allowed value - default MININT *)
  210.   glMin* = TagBase+30;
  211.   (* maximum allowed value - default MAXINT *)
  212.   glMax* = TagBase+31;
  213.   (* suggested width of requester window (in pixels) *)
  214.   glWidth* = TagBase+32;
  215.   (* boolean to show the default value - default TRUE *)
  216.   glShowDefault* = TagBase+33;
  217.  
  218. (*** tags specific to GetStringA ***
  219. *)
  220.   (* suggested width of requester window (in pixels) *)
  221.   gsWidth* = glWidth;
  222.   (* allow empty string to be accepted - default FALSE *)
  223.   gsAllowEmpty* = TagBase+80;
  224.  
  225. (*** tags specific to FileRequestA ***
  226. *)
  227.   (* various flags (see below) *)
  228.   fiFlags* = TagBase+40;
  229.   (* suggested height of file requester *)
  230.   fiHeight* = TagBase+41;
  231.   (* replacement text for 'Ok' gadget (max 6 chars) *)
  232.   fiOkText* = TagBase+42;
  233.  
  234. (*** tags specific to FontRequestA ***
  235. *)
  236.   (* various flags (see below) *)
  237.   foflags* = fiFlags;
  238.   (* suggested height of font requester *)
  239.   foHeight* = fiHeight;
  240.   (* replacement text for 'Ok' gadget (max 6 chars) *)
  241.   foOkText* = fiOkText;
  242.   (* suggested height of font sample display - default 24 *)
  243.   foSampleHeight= TagBase+60;
  244.   (* minimum height of font displayed *)
  245.   foMinHeight* = TagBase+61;
  246.   (* maximum height of font displayed *)
  247.   foMaxHeight* = TagBase+62;
  248.   (* [TagBase+63 to TagBase+66 used below] *)
  249.  
  250. (*** tags for ChangeReqAttrA ***
  251. *)
  252.   (* file requester - set directory *)
  253.   fiDir* = TagBase+50;
  254.   (* file requester - set wildcard pattern *)
  255.   fiMatchPat* = TagBase+51;
  256.   (* file requester - add a file or directory to the buffer *)
  257.   fiAddEntry* = TagBase+52;
  258.   (* file requester - remove a file or directory from the buffer *)
  259.   fiRemoveEntry* = TagBase+53;
  260.   (* font requester - set font name of selected font *)
  261.   foFontName* = TagBase+63;
  262.   (* font requester - set font size *)
  263.   foFontHeight* = TagBase+64;
  264.   (* font requester - set font style *)
  265.   foFontStyle* = TagBase+65;
  266.   (* font requester - set font flags *)
  267.   foFontFlags* = TagBase+66;
  268.  
  269. (*** tags for PaletteRequestA ***
  270. *)
  271.   (* initially selected color - default 1 *)
  272.   paColor* = TagBase+70;
  273.  
  274. (*** tags for ReqHandlerA ***
  275. *)
  276.   (* end requester by software control, set tagdata to REQ_CANCEL, REQ_OK or
  277.    in case of EZRequest to the return value *)
  278.   rhEndRequest* = TagBase+60;
  279.  
  280. (*** tags for AllocRequestA ***)
  281.   (* no tags defined yet *)
  282.  
  283.  
  284. (************
  285. * ReqPos *
  286. ************)
  287.   ReqPosPointer* = 0;
  288.   ReqPosCenterWin* = 1;
  289.   ReqPosCenterScr* = 2;
  290.   ReqPosTopLeftWin* = 3;
  291.   ReqPosTopLeftScr* = 4;
  292.  
  293. (******************
  294. * RTRH_EndRequest *
  295. ******************)
  296.   ReqCancel* = 0;
  297.   ReqOK* = 1;
  298.  
  299. (***************************************
  300. * flags for RTFI_Flags and RTFO_Flags  *
  301. * or filereq->Flags and fontreq->Flags *
  302. ***************************************)
  303.   fReqNoBuffer* = 2;
  304.   fReqDoWildFunc* = 11;
  305.  
  306. (*****************************************
  307. * flags for RTFI_Flags or filereq->Flags *
  308. *****************************************)
  309.   fReqMultiSelect* = 0;
  310.   fReqSave* = 1;
  311.   fReqNoFiles* = 3;
  312.   fReqPatGad* = 4;
  313.   fReqSelectDirs* = 12;
  314.  
  315. (*****************************************
  316. * flags for RTFO_Flags or fontreq->Flags *
  317. *****************************************)
  318.   fReqFixedWidth* = 5;
  319.   fReqColorFonts* = 6;
  320.   fReqChangePalette* = 7;
  321.   fReqLeavePalette* = 8;
  322.   fReqScale* = 9;
  323.   fReqStyle* = 10;
  324.  
  325. (*****************************************
  326. * flags for RTEZ_Flags or reqinfo->Flags *
  327. *****************************************)
  328.   ezReqNoReturnKey* = 0;
  329.   ezReqLamigaQual* = 1;
  330.   ezReqCenterText* = 2;
  331.  
  332. (********
  333. * hooks *
  334. ********)
  335.   ReqHookWildFile* = 0;
  336.   ReqHookWildFont* = 1;
  337.  
  338. VAR
  339.   req*: ReqToolsBasePtr;
  340.  
  341. PROCEDURE AllocRequestA* {req, -30} (type{0}: LONGINT;
  342.                                      tagList{8}: ARRAY OF u.TagItem): ReqToolsReqPtr;
  343. PROCEDURE AllocRequest* {req, -30} (type{0}: LONGINT;
  344.                                     tag1{8}..: u.Tag): ReqToolsReqPtr;
  345. PROCEDURE FreeRequest* {req, -36} (req{9}: ReqToolsReqPtr);
  346. PROCEDURE FreeReqBuffer* {req, -42} (req{9}: ReqToolsReqPtr);
  347. PROCEDURE ChangeReqAttrA* {req, -48} (req{9}: ReqToolsReqPtr;
  348.                                       tagList{8}: ARRAY OF u.TagItem);
  349. PROCEDURE ChangeReqAttr* {req, -48} (req{9}: ReqToolsReqPtr;
  350.                                      tag1{8}..: u.Tag);
  351. PROCEDURE FileRequestA* {req, -54} (fileReq{9}: FileRequesterPtr;
  352.                                     VAR fileName{10}: ARRAY OF CHAR;
  353.                                     title{11}: ARRAY OF CHAR;
  354.                                     tagList{8}: ARRAY OF u.TagItem): BOOLEAN;
  355. PROCEDURE FileRequest* {req, -54} (fileReq{9}: FileRequesterPtr;
  356.                                    VAR fileName{10}: ARRAY OF CHAR;
  357.                                    title{11}: ARRAY OF CHAR;
  358.                                    tag1{8}..: u.Tag): BOOLEAN;
  359. PROCEDURE FreeFileList* {req, -60} (fileList{8}: FileListPtr);
  360. PROCEDURE EZRequestA* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  361.                                   reqInfo{11}: ReqInfoPtr;
  362.                                   argarray{12}: e.ADDRESS;
  363.                                   tagList{8}: ARRAY OF u.TagItem): LONGINT;
  364. PROCEDURE EZRequestTags* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  365.                                      reqInfo{11}: ReqInfoPtr;
  366.                                      argarray{12}: e.ADDRESS;
  367.                                      tag1{8}..: u.Tag):LONGINT;
  368. PROCEDURE EZRequest* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  369.                                  reqInfo{11}: ReqInfoPtr;
  370.                                  tagList{8}: ARRAY OF u.TagItem;
  371.                                  argarray{12}..: LONGINT): LONGINT;
  372. (* Without result.... *)
  373. PROCEDURE vEZRequestA* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  374.                                    reqInfo{11}: ReqInfoPtr;
  375.                                    argarray{12}: e.ADDRESS;
  376.                                    tagList{8}: ARRAY OF u.TagItem);
  377. PROCEDURE vEZRequestTags* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  378.                                       reqInfo{11}: ReqInfoPtr;
  379.                                       argarray{12}: e.ADDRESS;
  380.                                       tag1{8}..: u.Tag);
  381. PROCEDURE vEZRequest* {req, -66} (bodyfmt{9}, gadfmt{10}: ARRAY OF CHAR;
  382.                                   reqInfo{11}: ReqInfoPtr;
  383.                                   tagList{8}: ARRAY OF u.TagItem;
  384.                                   argarray{12}..: LONGINT);
  385. PROCEDURE GetStringA* {req, -72} (VAR buffer{9}: ARRAY OF CHAR;
  386.                                   maxchars{0}: LONGINT;
  387.                                   title{10}: ARRAY OF CHAR;
  388.                                   reqInfo{11}: ReqInfoPtr;
  389.                                   tagList{8}: ARRAY OF u.TagItem): BOOLEAN;
  390. PROCEDURE GetString* {req, -72} (VAR buffer{9}: ARRAY OF CHAR;
  391.                                  maxchars{0}: LONGINT;
  392.                                  title{10}: ARRAY OF CHAR;
  393.                                  reqInfo{11}: ReqInfoPtr;
  394.                                  tag1{8}..: u.Tag): BOOLEAN;
  395. PROCEDURE GetLongA* {req, -78} (VAR long{9}: LONGINT; title{10}: ARRAY OF CHAR;
  396.                                 reqInfo{11}: ReqInfoPtr;
  397.                                 tagList{8}: ARRAY OF u.TagItem): BOOLEAN;
  398. PROCEDURE GetLong* {req, -78} (VAR long{9}: LONGINT; title{10}: ARRAY OF CHAR;
  399.                                reqInfo{11}: ReqInfoPtr;
  400.                                tag1{8}..: u.Tag): BOOLEAN;
  401. PROCEDURE FontRequestA* {req, -96} (fontReq{9}: FontRequesterPtr;
  402.                                     title{11}: ARRAY OF CHAR;
  403.                                     tagList{8}: ARRAY OF u.TagItem): BOOLEAN  ;
  404. PROCEDURE FontRequest* {req, -96} (fontReq{9}: FontRequesterPtr;
  405.                                    title{11}: ARRAY OF CHAR;
  406.                                    tag1{8}..: u.Tag):BOOLEAN  ;
  407. PROCEDURE PaletteRequestA* {req, -102} (title{10}: ARRAY OF CHAR;
  408.                                         reqInfo{11}: ReqInfoPtr;
  409.                                         tagList{8}: ARRAY OF u.TagItem): LONGINT;
  410. PROCEDURE PaletteRequest* {req, -102} (title{10}: ARRAY OF CHAR;
  411.                                        reqInfo{11}: ReqInfoPtr;
  412.                                        tag1{8}..: u.Tag): LONGINT;
  413. PROCEDURE ReqHandlerA* {req, -108} (hinfo{9}: HandlerInfoPtr;
  414.                                     sigs{0}: LONGSET;
  415.                                     tagList{8}: ARRAY OF u.TagItem): LONGINT;
  416. PROCEDURE ReqHandler* {req, -108} (hinfo{9}: HandlerInfoPtr;
  417.                                    sigs{0}: LONGSET;
  418.                                    tag1{8}..: u.Tag): LONGINT;
  419. PROCEDURE SetWaitPointer* {req, -114} (window{8}: I.WindowPtr);
  420. PROCEDURE GetVScreenSize* {req, -120} (screen{8}: I.ScreenPtr;
  421.                                        VAR width{9},height{10}: LONGINT);
  422. PROCEDURE SetReqPosition* {req, -126} (reqpos{0}: LONGINT;
  423.                                        VAR nw{8}: I.NewWindow;
  424.                                        screen{9}: I.ScreenPtr;
  425.                                        window{10}: I.WindowPtr);
  426. PROCEDURE Spread* {req, -132} (VAR posarray{8}: ARRAY OF LONGINT;
  427.                                sizearray{9}: ARRAY OF LONGINT;
  428.                                totalsize{0}, min{1}, max{2}, num{3}: LONGINT);
  429. PROCEDURE ScreenToFrontSafely* {req, -138} (screen{8}: I.ScreenPtr);
  430.  
  431. BEGIN
  432.    req := e.OpenLibrary (ReqToolsName, ReqToolsVersion);
  433.    IF req = NIL THEN
  434.       IF I.DisplayAlert (I.recoveryAlert,
  435.            "\x00\x64\x14missing reqtools.library V37\o\o", 50) THEN END;
  436.       HALT (20)
  437.    END; (* IF *)
  438. CLOSE
  439.    IF req # NIL THEN
  440.       e.CloseLibrary (req);
  441.       req := NIL;
  442.    END; (* IF *)
  443. END ReqTools.
  444.