home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / MM1 / SOUNDUTILS / mm1_tracker.lzh / TRACKER4.6 / Amiga / requester.c < prev    next >
Text File  |  1994-11-24  |  3KB  |  130 lines

  1. /* requester.c 
  2.     vi:ts=3 sw=3:
  3.  */
  4.  
  5. /* $Id: requester.c,v 1.6 1994/06/22 21:54:12 Espie Exp Espie $
  6.  * $Log: requester.c,v $
  7.  * Revision 1.3  1994/01/09  04:49:18  Espie
  8.  * File requester !
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14.  
  15. #include <libraries/reqtools.h>
  16. #include <proto/reqtools.h>
  17. #include <proto/exec.h>
  18. #include <proto/dos.h>
  19. #include <dos/dos.h>
  20.  
  21. #include "defs.h"
  22. #include "extern.h"
  23. #include "amiga/amiga.h"
  24.  
  25. ID("$Id: requester.c,v 1.6 1994/06/22 21:54:12 Espie Exp Espie $")
  26. LOCAL void init_requester(void);
  27.  
  28. LOCAL struct ReqToolsBase *ReqToolsBase = 0;
  29.  
  30. LOCAL void (*INIT)(void) = init_requester;
  31.  
  32. LOCAL struct rtFileRequester *req = 0;
  33. LOCAL struct rtHandlerInfo *myhandler = 0;
  34.  
  35.  
  36.  
  37. LOCAL void close_requester()
  38.    {
  39.    if (myhandler)
  40.       rtReqHandler(myhandler, 0, RTRH_EndRequest, REQ_CANCEL, TAG_END);
  41.    if (req)
  42.       rtFreeRequest(req);
  43.    if (ReqToolsBase)
  44.       CloseLibrary(ReqToolsBase);
  45.    myhandler = 0;
  46.    req = 0;
  47.    ReqToolsBase = 0;
  48.    }
  49.  
  50. LOCAL void init_requester()
  51.    {
  52.    ReqToolsBase = OpenLibrary("reqtools.library", 38);
  53.    if (!ReqToolsBase)
  54.       {
  55.       requested_file(0);
  56.       return;
  57.       }
  58.    at_end(close_requester);
  59.    req = rtAllocRequestA(RT_FILEREQ, NULL);
  60.    }
  61.  
  62. LOCAL char fname[108];
  63.  
  64. void handle_requester(ULONG received)
  65.    {   
  66.    struct amiganame *new;
  67.    int total;
  68.    struct rtFileList *flist, *sweep;
  69.    struct MinList temp;
  70.    int result;
  71.  
  72.    if ( (result = rtReqHandler(myhandler, received, TAG_END)) == CALL_HANDLER)
  73.       return;
  74.    remove_req_handler();
  75.    myhandler = 0;
  76.    flist = (struct rtFileList *)result;
  77.  
  78.    if (flist)
  79.       {
  80.       NewList(&temp);      /* use temp as a `place holder' */
  81.       sweep = flist;
  82.       while(sweep)
  83.          {
  84.          total = strlen(req->Dir) + strlen(sweep->Name) + 2;
  85.          new = malloc(sizeof(struct amiganame) + total);
  86.          if (!new)
  87.             continue;
  88.          AddPart(strcpy(new->s, req->Dir), sweep->Name, total);
  89.          new->i = TRUE;
  90.          AddTail(&temp, new);
  91.          sweep = sweep->Next;
  92.          }
  93.       rtFreeFileList(flist);
  94.       
  95.       if (temp.mlh_TailPred != &temp)
  96.          {
  97.          /* unscrew the first element of temp out and loop the elements */
  98.  
  99.          new = temp.mlh_Head;
  100.          new->n.mln_Pred = temp.mlh_TailPred;
  101.          temp.mlh_TailPred->mln_Succ = new;
  102.    
  103.          requested_file(new);
  104.          }
  105.       else
  106.          requested_file(0);
  107.       }
  108.    else
  109.       requested_file(0);
  110.    }
  111.    
  112. void launch_requester()
  113.    {
  114.    INIT_ONCE;
  115.    
  116.    if (myhandler || !req)
  117.       return;
  118.    if (CALL_HANDLER != (int)rtFileRequest(req, fname, "Load song", 
  119.       RTFI_Flags, FREQF_MULTISELECT,
  120.       RT_ReqHandler, &myhandler, TAG_END))
  121.       {
  122.       myhandler = 0;
  123.       return;
  124.       }
  125.    install_req_handler(myhandler->WaitMask, handle_requester);
  126.    if (myhandler->DoNotWait)
  127.       handle_requester(0);
  128.    }
  129.  
  130.