home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / APP / ANIPL218 / PROG / MANIPLAY / MANIPLAY.C next >
C/C++ Source or Header  |  1997-12-25  |  3KB  |  131 lines

  1. /* Module MANIPLAY for HORLOGEP in no freezing mode */
  2. /* Start ANIPLAYER in PRG or ACC mode */
  3.  
  4. #include <aes.h>
  5. #include <tos.h>
  6. #include <portab.h>
  7. #include <string.h>
  8.  
  9. #include "midnight.h"    /* ACC_str + MOD_str + defines for Module + ACC */
  10.  
  11. #define Ms MOD_struct
  12.  
  13. #define VA_START 0x4711
  14. #define AV_SENDKEY 0x4710
  15.  
  16. extern MOD_str    MOD_struct;
  17.  
  18. Value Values[3]=
  19. {
  20.     T_TITEL,0,0,"V1.0, MEQUIGNON Didier December 1997",
  21.     T_TITEL,0,0,"Path Aniplayer (.INF): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  22.     T_TITEL|T_END,0,0,"Options & Video: 01234567890123456789012345678901234567890123456789012345678901234567890123456789"
  23. };
  24.  
  25. Value *Value_s = Values;
  26.  
  27. ULONG MOD_main(int Mode,ACC_str *As)
  28.  
  29. {
  30.     static char buffer[256];
  31.     static char *cmde;
  32.     static int fin,id,id_app,wi_id;
  33.     static message[8];
  34.     register int i,handle;
  35.     register char *p1,*p2;
  36.     int x,y,w,h;
  37.     
  38.     switch(Mode)
  39.     {    
  40.     case M_INIT:
  41.         MOD_struct.U.b=0x003f;
  42.         fin=0;
  43.         p1=Value_s[1].Name;
  44.         for(i=0;*p1 && *p1!=':';i++,p1++);
  45.         p1+=2;
  46.         *p1=0;
  47.         p2=Value_s[2].Name;
  48.         for(i=0;*p2 && *p2!=':';i++,p2++);
  49.         p2+=2;
  50.         *p2=0;
  51.         strcpy(&MOD_struct.MyName[strlen(MOD_struct.MyName)-3],"INF");
  52.         handle=Fopen(MOD_struct.MyName,0);            /* open INF file */
  53.         if(handle<0)
  54.             return(0);
  55.         if(Fread(handle,255,buffer)<=0)
  56.         {
  57.             Fclose(handle);
  58.             return(0);
  59.         }
  60.         Fclose(handle);
  61.         for(i=0;buffer[i] && i<256;i++)
  62.         {
  63.             if(buffer[i]==13 || buffer[i]==10)
  64.                 buffer[i]=0;
  65.         }
  66.         cmde=buffer;
  67.         for(i=0;*cmde!=' ' && i<256;i++,cmde++);
  68.         if(i>=256)
  69.             return(0);
  70.         *cmde++=0;
  71.         for(i=0;buffer[i] && i<80;*p1++=buffer[i++]);
  72.         *p1=0;
  73.         for(i=0;cmde[i] && i<80;*p2++=cmde[i++]);
  74.         *p2=0;
  75.         id_app=appl_find(0);
  76.         break;
  77.     case M_SWITCH:
  78.         break;
  79.     case M_DO_IT:
  80.         if((id=appl_find("ANIPLAY "))<=0)            /* search Aniplayer */
  81.         {
  82.             if((wi_id=wind_find(1,1))!=0)            /* window for module */
  83.                 wind_get(wi_id,WF_CURRXYWH,&x,&y,&w,&h);
  84.             shel_write(1,1,100,buffer,"");            /* if PRG start */
  85.             EVNT_ask(1000);
  86.             if(wi_id && w >= As->w && h >= As->h)
  87.             {
  88.                 x=i=0;
  89.                 while(x!=wi_id && i<5)                /* window in TOP */
  90.                 {                                    /* after start PRG */
  91.                     EVNT_ask(1000);
  92.                     wind_set(wi_id,WF_TOP,0,0,0,0);
  93.                     wind_get(wi_id,WF_TOP,&x,&y,&w,&h);
  94.                     i++;                            /* time-out ! */
  95.                 }    
  96.             }
  97.         }
  98.         if((id=appl_find("ANIPLAY "))>0)
  99.         {
  100.             message[0]=VA_START;                    /* cmde line and file in INF */
  101.             message[1]=id_app;
  102.             message[2]=0;
  103.             *((char **)(&message[3]))=cmde;
  104.             message[5]=message[6]=message[7]=0;
  105.             appl_write(id,16,message);
  106.         }
  107.         else
  108.         {
  109.             form_alert(1,"[2][No communication|with ANIPLAY][Cancel]");
  110.             return(0);
  111.         }
  112.         do
  113.         {
  114.             fin=EVNT_ask(10);                        /* tempo in mS */
  115.         }
  116.         while(!fin);
  117.         if((id=appl_find("ANIPLAY "))>0)
  118.         {
  119.             message[0]=AV_SENDKEY;
  120.             message[1]=id_app;
  121.             message[4]=0x1b;                        /* ESC for end */
  122.             message[2]=message[3]=message[5]=message[6]=message[7]=0;
  123.             appl_write(id,16,message);
  124.         }
  125.         break;
  126.     case M_EXIT:
  127.         break;
  128.     }
  129.     return(1);
  130. }
  131.