home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 5 / amigaformatcd05.iso / mui / developer / oberon / txt / muifilerequester.mod < prev    next >
Text File  |  1996-08-13  |  7KB  |  301 lines

  1. (*------------------------------------------
  2.  
  3.   :Module.      MuiFileRequester.mod
  4.   :Author.      Albert Weinert  [awn]
  5.   :Address.     Krähenweg 21 , 50829 Köln, Germany
  6.   :EMail.       Usenet_> aweinert@darkness.gun.de
  7.   :EMail.       Z-Netz_> A.WEINERT@DARKNESS.ZER
  8.   :Phone.       0221 / 580 29 84
  9.   :Revision.    $Revision: 1.1 $
  10.   :Date.        $Date: 1993/09/15 17:29:00 $
  11.   :Copyright.   Albert Weinert
  12.   :Language.    Oberon-2
  13.   :Translator.  Amiga Oberon 3.00d
  14.   :Contents.    FileRequester die Mui anstatt die ASL Library benutzen
  15.   :Imports.     MuiBasics.mod [awn], Mui.mod
  16.   :Remarks.     Basiert auf FileReq.mod [fbs] welches dem Compiler beilag.
  17.   :Bugs.        <Bekannte Fehler>
  18.   :Usage.       <Angaben zur Anwendung>
  19.   :RCSId.       $Id: MuiFileRequester.mod,v 1.1 1993/09/15 17:29:00 A_Weinert Exp $
  20.   :History.     .0     [awn] 13-Sep-1993 : Erstellt
  21.   $Log: MuiFileRequester.mod,v $
  22. # Revision 1.1  1993/09/15  17:29:00  A_Weinert
  23. # Initial revision
  24. #
  25. --------------------------------------------*)
  26. MODULE MuiFileRequester;
  27.  
  28. IMPORT I   := Intuition,
  29.        e   := Exec,
  30.        Dos,
  31.        Mui,
  32.        mb  := MuiBasics,
  33.        asl := ASL,
  34.        u   := Utility,
  35.        sys := SYSTEM;
  36.  
  37.  
  38. (*------------------------------------------------------------------------*)
  39.  
  40.  
  41. VAR
  42.   fr: asl.FileRequesterPtr;
  43.   pattern*: ARRAY 80 OF CHAR;
  44.   defaultWidth  * ,
  45.   defaultHeight * ,
  46.   defaultLeft   * ,
  47.   defaultTop    * : INTEGER;
  48.  
  49. (*------------------------------------------------------------------------*)
  50.  
  51.  
  52. (****i* MuiFileRequester/Open ***********************************************
  53. *
  54. *   NAME
  55. *       Open --
  56. *
  57. *   SYNOPSIS
  58. *       Open( hail: ARRAY OF CHAR;
  59. *             VAR name: ARRAY OF CHAR;
  60. *             save, drawersonly: BOOLEAN;
  61. *             window : Mui.Object ): BOOLEAN;
  62. *
  63. *   FUNCTION
  64. *
  65. *   INPUTS
  66. *
  67. *   RESULTS
  68. *
  69. *   EXAMPLE
  70. *
  71. *   NOTES
  72. *
  73. *   BUGS
  74. *
  75. *   SEE ALSO
  76. *
  77. *****************************************************************************
  78. * 10 Jan 1994 - [awn] :
  79. *       An die 40.16 Interfaces angepasst bei s : e.STRPTR -> e.LSTRPTR;
  80. * 05 Dec 1993 - [awn] :
  81. *        Erstellt
  82. *
  83. *)
  84.  
  85. PROCEDURE Open( hail: ARRAY OF CHAR;
  86.                 VAR name: ARRAY OF CHAR;
  87.                 save, drawersonly: BOOLEAN;
  88.                 window : Mui.Object ): BOOLEAN;
  89.  
  90. VAR
  91.   i,j: INTEGER;
  92.   Dirname: ARRAY 256 OF CHAR;
  93.   Filename: ARRAY 64 OF CHAR;
  94.   s : e.LSTRPTR;
  95.   flags1: LONGSET;
  96.   flags2: LONGSET;
  97.   res: BOOLEAN;
  98.   buf : CHAR;
  99.   l,t,w,h: INTEGER;
  100.   win : I.WindowPtr;
  101.  
  102. BEGIN
  103.   (* $OddChk- *)
  104.   s := Dos.FilePart( name );
  105.   IF s # NIL THEN
  106.     COPY( s^, Filename );
  107.   ELSE
  108.     Filename := "";
  109.   END;
  110.   s := Dos.PathPart( name );
  111.   IF s # NIL THEN
  112.     buf := s[0]; s[0] := CHR( 0 );
  113.     COPY ( name, Dirname );
  114.     s[0] := buf;
  115.   ELSE
  116.     Dirname := "";
  117.   END;
  118.   (* $OddChk= *)
  119.   win := NIL;
  120.   IF window # NIL THEN
  121.     mb.Get( window, Mui.aWindow, win );
  122.   END;
  123.  
  124.   IF fr=NIL THEN
  125.     l := defaultLeft;
  126.     t := defaultTop;
  127.     w := defaultWidth;
  128.     h := defaultHeight;
  129.     IF win#NIL THEN
  130.       IF win.width  - 40 > w THEN l := win.leftEdge + 20; w := win.width  - 40; IF w>320 THEN w := 320 END END;
  131.       IF win.height - 40 > h THEN t := win.topEdge  + 20; h := win.height - 40 END;
  132.     END;
  133.     fr := Mui.AllocAslRequestTags(asl.fileRequest,
  134.                                   asl.initialLeftEdge,l,
  135.                                   asl.initialTopEdge, t,
  136.                                   asl.initialWidth,   w,
  137.                                   asl.initialHeight,  h,
  138.                                   u.done);
  139.     IF fr=NIL THEN HALT(20) END;
  140.   END;
  141.   
  142.   flags1 := LONGSET{ asl.frDoPatterns };
  143.   flags2 := LONGSET{ };
  144.   IF save THEN INCL( flags1, asl.frDoSaveMode ) END;
  145.   IF drawersonly THEN INCL( flags2, asl.frDrawersOnly ) END;
  146.  
  147.   IF window # NIL THEN
  148.     mb.Set( window, Mui.aWindowSleep, e.true );
  149.   END;
  150.  
  151.   res := Mui.AslRequestTags(fr,
  152.                             asl.titleText,      sys.ADR(hail),
  153.                             asl.initialFile,    sys.ADR(Filename),
  154.                             asl.initialDrawer,  sys.ADR(Dirname),
  155.                             asl.window,   win,
  156.                             asl.initialPattern,  sys.ADR(pattern),
  157.                             asl.flags1, flags1,
  158.                             asl.flags2, flags2,
  159.                             u.done);
  160.   IF window # NIL THEN
  161.     mb.Set( window, Mui.aWindowSleep, e.false );
  162.   END;
  163.  
  164.   (* $OddChk- *)
  165.   COPY(fr.dir^,Dirname);
  166.   (* $OddChk= *)
  167.  
  168.   defaultLeft   := fr.leftEdge;
  169.   defaultTop    := fr.topEdge;
  170.   defaultHeight := fr.height;
  171.   defaultWidth  := fr.width;
  172.  
  173.   IF ~ res THEN
  174.     RETURN FALSE;
  175.   ELSE
  176.     COPY( Dirname, name );
  177.     IF fr.file # NIL THEN
  178.      (* $OddChk- *)
  179.       RETURN Dos.AddPart( name, fr.file^, LEN( name ) );
  180.      (* $OddChk= *)
  181.     ELSE
  182.       RETURN TRUE;
  183.     END;
  184.   END;
  185.  
  186. END Open;
  187.  
  188.  
  189. (*------------------------------------------------------------------------*)
  190.  
  191.  
  192. (****** MuiFileRequester/OpenForSave ****************************************
  193. *
  194. *   NAME
  195. *       OpenForSave -- Öffnet FileRequester zum Speichern von Dateien
  196. *
  197. *   SYNOPSIS
  198. *       OpenForSave*( hail: ARRAY OF CHAR;
  199. *                     VAR name: ARRAY OF CHAR;
  200. *                     win:  Mui.Object ): BOOLEAN;
  201. *
  202. *   FUNCTION
  203. *
  204. *   INPUTS
  205. *
  206. *   RESULTS
  207. *
  208. *   EXAMPLE
  209. *
  210. *   NOTES
  211. *
  212. *   BUGS
  213. *
  214. *   SEE ALSO
  215. *
  216. *****************************************************************************
  217. * 05 Dec 1993 - [awn] :
  218. *        Erstellt
  219. *
  220. *)
  221.  
  222. PROCEDURE OpenForSave*( hail: ARRAY OF CHAR;
  223.                         VAR name: ARRAY OF CHAR;
  224.                         win:  Mui.Object ): BOOLEAN;
  225.  
  226. (* öffnet ARP/ASL-FileRequester zum Speichern. Ergebnis ist FALSE wenn CANCEL
  227.  * gedrückt wurde oder der gewählte name zu lang ist.
  228.  * Beispiel: IF FileReqWinSave("Save File:",name,mywin) THEN Save(name) END;
  229.  *)
  230.  
  231. BEGIN RETURN Open( hail, name, TRUE, FALSE, win) END OpenForSave;
  232.  
  233.  
  234.  
  235. (****** MuiFileRequester/OpenForLoad ****************************************
  236. *
  237. *   NAME
  238. *       OpenForLoad -- Öffnet FileRequester zum Laden von Dateien
  239. *
  240. *   SYNOPSIS
  241. *       OpenForLoad*( hail: ARRAY OF CHAR;
  242. *                     VAR name: ARRAY OF CHAR;
  243. *                     win:  Mui.Object ): BOOLEAN;
  244. *
  245. *   FUNCTION
  246. *
  247. *   INPUTS
  248. *
  249. *   RESULTS
  250. *
  251. *   EXAMPLE
  252. *
  253. *   NOTES
  254. *
  255. *   BUGS
  256. *
  257. *   SEE ALSO
  258. *
  259. *****************************************************************************
  260. * 05 Dec 1993 - [awn] :
  261. *        Erstellt
  262. *
  263. *)
  264.  
  265. PROCEDURE OpenForLoad*( hail: ARRAY OF CHAR;
  266.                         VAR name: ARRAY OF CHAR;
  267.                         win:  Mui.Object ): BOOLEAN;
  268.  
  269. (* öffnet ARP/ASL-FileRequester zum Laden. Ergebnis ist FALSE wenn CANCEL
  270.  * gedrückt wurde oder der gewählte name zu lang ist.
  271.  * Beispiel: IF FileReqWin("Load File:",name,mywin) THEN Load(name) END;
  272.  *)
  273.  
  274. BEGIN RETURN Open( hail, name, FALSE, FALSE, win) END OpenForLoad;
  275.  
  276. PROCEDURE OpenForDrawer*( hail: ARRAY OF CHAR;
  277.                         VAR name: ARRAY OF CHAR;
  278.                         win:  Mui.Object ): BOOLEAN;
  279.  
  280. (* öffnet ARP/ASL-FileRequester zum Laden. Ergebnis ist FALSE wenn CANCEL
  281.  * gedrückt wurde oder der gewählte name zu lang ist.
  282.  * Beispiel: IF FileReqWin("Load File:",name,mywin) THEN Load(name) END;
  283.  *)
  284.  
  285. BEGIN RETURN Open( hail, name, FALSE, TRUE, win) END OpenForDrawer;
  286.  
  287. BEGIN
  288.  
  289.   defaultTop   := 20;
  290.   defaultLeft  := 20;
  291.   defaultWidth := 300;
  292.   defaultHeight:= 180;
  293.  
  294.   pattern := "~(#?.info)";
  295.  
  296. CLOSE
  297.  
  298.   IF fr # NIL THEN Mui.FreeAslRequest(fr)  END;
  299.  
  300. END MuiFileRequester.
  301.