home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / MIDNIGHT.ZIP / MIDNIGHT / SOURCE / MESSAGE.C < prev    next >
C/C++ Source or Header  |  1993-02-14  |  5KB  |  236 lines

  1.  
  2. #include <vdi.h>
  3. #include <tos.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <portab.h>
  7.  
  8. #include "midnight.h"    /* ACC_str + MOD_str + defines für Module + ACC */
  9.  
  10. extern MOD_str MOD_struct;
  11. #define Ms MOD_struct
  12.  
  13.  
  14. char    Fonts[17*17];            /* Platz für bis zu 16 Fontnamen        */
  15. char    melde[1000]= "DON'T PANIC\0Kaffeepause...\0Teepause...\0\
  16. Bin gleich wieder da !\0Nicht stören, ich denke...\0I'am BUSY\0\0";
  17.                 /* Vorgegebene Strings. Existiert eine Datei MESSAGE.DAT*/
  18.                 /* in der durch 0 (NUL) getrennte Strings stehen, so    */
  19.                 /* werden diese hier eingeschrieben.                    */
  20.  
  21. Value    Values[6]=
  22.     {    T_POPUP,0,(long)Fonts,
  23.             "Fontauswahl",
  24.         T_EDIT,1,500,"Punktgrö₧e des Fonts",
  25.         T_POPUP,0,(long)"jumping\0\3 scrollen\0\2 scrollen\0\
  26. \4 scrollen\0\1 scrollen\0\0",
  27.             "Art der Bewegung",
  28.         T_POPUP,0,(long)melde,
  29.             "Sprüche",
  30.         T_BUTTON,0,(long)"Farbscroll","\0",
  31.         T_TITEL|T_END,0,0,"V1.0, HzN 1.93 (Blabla..)"
  32.     };
  33.  
  34. Value    *Value_s = Values;        /* zeigt auf eine Liste von Pointern    */
  35.  
  36.  
  37. /*
  38.     GRUNDLEGENDES !
  39.     Da die Module ab und zu einmal aufgerufen werden und eben nicht
  40.     kontinuierlich die Kontrolle über die Register haben, kann es bei
  41.     Benutzung einer Variablen über mehrere Programmteile (M_INIT,M_SWITCH...)
  42.     zu Problemen kommen, da ja inzwischen wieder 'Sonstwer' in den Registern
  43.     'rumgespielt hat. Deshalb sind solche Variablen als 'static' zu deklarieren,
  44.     im Notfall (wenn's nicht klappt) auch als Volatile.
  45.     Sicher ist sicher...
  46. */
  47.  
  48.  
  49.  
  50. int        pxy[10];
  51. char    str[100];
  52. volatile static int handle;        /* darf nicht im Register stehn            */
  53. int        Set_num,col;
  54. ACC_str    *As;
  55.  
  56. void texter( void );
  57.  
  58.  
  59. ULONG MOD_main( int Mode, ACC_str *ACCs )
  60. {
  61.     int i;
  62.     long l;
  63.     char *ch;
  64.  
  65.     As= ACCs;
  66.     switch( Mode )
  67.     {    case M_INIT:
  68.             MOD_struct.U.b = 0x003f;
  69.             v_opnvwk( As->work_in,&handle,As->work_out );
  70.             if( !handle ) return( 0 );
  71.  
  72.             strcpy( Fonts,"Sytemfont       " );
  73.             if( vq_gdos() )            /* wenn GEDOS, dann Fonts scannen    */
  74.             {    Set_num= vst_load_fonts( handle,0 );
  75.                 if( Set_num>15 ) Set_num=15;    /* Maximal 16 Fonts!    */
  76.                 if( Set_num<Ms.Werte[0] ) Ms.Werte[0]= Set_num;
  77.                 for( i=1;i<=Set_num;i++ )
  78.                 {    ch= &Fonts[i*17];
  79.                     strcpy( ch,"                " );
  80.                     vqt_name( handle,i,str );    /* Fontnamen holen        */
  81.                     strncpy( ch,str,strlen( str ) );
  82.                 }
  83.             }
  84.             else Ms.Werte[0]= 0;
  85.  
  86.             strcpy( &Ms.MyName[strlen(Ms.MyName)-3],"DAT" );
  87.             if( (i=Fopen( Ms.MyName,FO_READ ))>=0 )
  88.             {    l=Fseek( 0,i,2 );
  89.                 Fseek( 0,i,0 );
  90.                 if( l<998 )
  91.                 {    Fread( i,l,melde );
  92.                     melde[l]=0;
  93.                     melde[l+1]=0;
  94.                 }
  95.                 Fclose( i );
  96.             }
  97.  
  98.             pxy[0]=As->x;
  99.             pxy[1]=As->y;
  100.             pxy[2]=As->x+As->w;
  101.             pxy[3]=As->y+As->h;
  102.             vs_clip( handle,1,pxy );
  103.             break;
  104.         case M_SWITCH:
  105.             v_bar( handle,pxy );
  106.             break;
  107.         case M_DO_IT:
  108.             if( vq_gdos() )
  109.                 vst_font( handle,vqt_name( handle,Ms.Werte[0]+1,str ) );
  110.             vst_alignment( handle,0,2,&i,&i );
  111.             vst_point( handle,Ms.Werte[1],&i,&i,&i,&i );
  112.             vqt_attributes( handle,pxy );
  113.             vsf_perimeter( handle,0 );
  114.             pxy[0]= pxy[8];
  115.             pxy[1]= pxy[9];
  116.  
  117.             col= 2;
  118.             vswr_mode( handle,MD_TRANS );
  119.  
  120.             texter();
  121.  
  122.             break;
  123.         case M_EXIT:
  124.             if( handle )
  125.             {    if( Set_num && vq_gdos() ) vst_unload_fonts( handle,0 );
  126.                 v_clsvwk( handle );
  127.             }
  128.             break;
  129.     }
  130.  
  131.     return( 1 );
  132. }
  133.  
  134.  
  135. int txt_and_wait( char *str,int x,int y,long wait )
  136. {
  137.     int ex;
  138.     int p[4];
  139.  
  140.     vst_color( handle,0 );
  141.     if( As->planes>1 )
  142.     {    ex= 1<<(As->planes>8?8:As->planes);
  143.         if( Ms.Werte[4] ) col= (--col%(ex-2))+2;
  144.         vst_color( handle,col );
  145.     }
  146.     v_gtext( handle,x,y,str );
  147.     ex= 0;
  148.     if( ex=EVNT_ask(wait) ) return(ex);
  149.     p[0]= x;
  150.     p[1]= y;
  151.     p[2]= x+pxy[0]-1;
  152.     p[3]= y+pxy[1]-1;
  153.     v_bar( handle,p );
  154. /*    vst_color( handle,1 );
  155.     v_gtext( handle,x,y,str );*/
  156.     return(ex);
  157. }
  158.  
  159. void get_col( void )
  160. {
  161.     if( !Ms.Werte[4] )
  162.         col=( Random()%((1<<(As->planes>8?8:As->planes))-2)+2 );
  163. }
  164.  
  165. void texter( void )
  166. {
  167.     int x,y, ex;
  168.     char *cp;
  169.  
  170.     ex=0;
  171.     cp= melde;
  172.     for( x=0;(x<Ms.Werte[3]) && *cp;x++ )
  173.     {    for( ;*cp;cp++ );
  174.         cp++;
  175.     }
  176.     if( !*cp ) cp= melde;
  177.  
  178.     strcpy( str,cp );
  179.     pxy[0] *= strlen( str );
  180.     switch( Ms.Werte[2] )
  181.     {
  182.         case 0:
  183.             for(;;)
  184.             {    x= Random()%(As->w-pxy[0])+As->x;
  185.                 y= Random()%(As->h-pxy[1])+As->y;
  186.                 get_col();
  187.                 if( txt_and_wait( str,x,y,1000 ) ) break;
  188.             }
  189.             break;
  190.  
  191.         case 1:
  192.             while( !ex )
  193.             {    x= -pxy[0];
  194.                 y= Random()%(As->h-pxy[1])+As->y;
  195.                 get_col();
  196.                 for( ;(x<As->w+As->x) && !ex;x+=4 )
  197.                 {    ex= txt_and_wait( str,x,y,100 );
  198.                 }
  199.             }
  200.             break;
  201.  
  202.         case 2:
  203.             while( !ex )
  204.             {    x= Random()%(As->w-pxy[0])+As->x;
  205.                 y= -pxy[1];
  206.                 get_col();
  207.                 for( ;(y<As->h+As->y) && !ex;y+=4 )
  208.                 {    ex= txt_and_wait( str,x,y,100 );
  209.                 }
  210.             }
  211.             break;
  212.         case 3:
  213.             while( !ex )
  214.             {    x= As->x+As->w;
  215.                 y= Random()%(As->h-pxy[1])+As->y;
  216.                 get_col();
  217.                 for( ;(x>-pxy[0]) && !ex;x-=4 )
  218.                 {    ex= txt_and_wait( str,x,y,100 );
  219.                 }
  220.             }
  221.             break;
  222.  
  223.         case 4:
  224.             while( !ex )
  225.             {    x= Random()%(As->w-pxy[0])+As->x;
  226.                 y= As->y+As->h;
  227.                 get_col();
  228.                 for( ;(y>-pxy[1]) && !ex;y-=4 )
  229.                 {    ex= txt_and_wait( str,x,y,100 );
  230.                 }
  231.             }
  232.             break;
  233.     }
  234. }
  235.  
  236.