⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdplayer.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
📖 第 1 页 / 共 2 页
字号:
               {
               bcd_pause();
               cd_track_pause = 1;
               }

               else

               {
               bcd_resume();
               cd_track_pause = 0;
               }

           }; break;

           case MSG_STOP : {

               clear_event(event);

               bcd_stop();

               cd_track_pause = 0;

           }; break;

           case MSG_RR : {

                 clear_event(event);

                 bcd_play_ff_or_re( -400);

           }; break;

           case MSG_FF : {

                 clear_event(event);

                 bcd_play_ff_or_re( 200);

           }; break;

           case MSG_OUT : {

               clear_event(event);

               if ( bcd_device_status() & BCD_DOOR_OPEN ) {

                     bcd_close_door();

                     cd_track_max = bcd_get_audio_info();

               } else

                     bcd_open_door();

               cd_track_pause = 0;
               cd_track = 1;


           }; break;

           case MSG_PREV : {

               clear_event(event);

               cd_track = min(cd_track_max, max(1, cd_track-1));

               bcd_play_to_end(cd_track);

               cd_track_pause = 0;

           }; break;

           case MSG_NEXT : {

               clear_event(event);

               cd_track = min(cd_track_max, max(1, cd_track+1));

               bcd_play_to_end(cd_track);

               cd_track_pause = 0;

           }; break;

           case MSG_RBACK : {

               clear_event(event);

               cd_track_in_background = 1;

           }; break;

           case MSG_TIME : {

               clear_event(event);

               time_type ++;
               if (time_type > 2) time_type = 0;

           }; break;

           case MSG_DRIVE : {

               l_int drive;

               clear_event(event);

               bcd_stop();

               drive = bcd_get_num_drives();

               if (cur_drive_no > drive)
                   bcd_set_drive( cur_drive_no + 1);
               else bcd_set_drive(0);

               cd_track_max = bcd_get_audio_info();

               cd_track_pause = 0;
               cd_track = 1;

               update_titel(o, set_format_text(NULL, TXT_TITEL,  bcd_get_drive_letter( cur_drive_no )));

           }; break;

           case MSG_ABOUT:
              seal2_app_about("CD Player", load_image("/system/bmp/cdplayer.ico,32"));
              clear_event(event);
              break;
       };

   };

};



p_object  get_button ( t_rect r, l_text str, l_text stralt, l_dword msg, l_int flags, l_text i_t) {

   p_button  o = button_init(_malloc(sizeof(t_button)),
                             r,
                             str,
                             msg,
                             flags);

  if ( o )
     {

       VIEW(o)->font = get_font_in_size("Symbols", 14, 14);
       if(!VIEW(o)->font){
        VIEW(o)->font=font_system;
        if(o->caption)_free(o->caption);
        o->caption=(l_text)_strdup(stralt);
       }
       VIEW(o)->info_text = strdup(i_t);
     }
  return OBJECT(o);

};


void  init_cdplayer ( void )
{

   t_rect r = rect_assign(0, 0, 225, 150);
   t_rect t = r;
   p_button button = NULL;

   p_appwin o = appwin_init(_malloc(sizeof(t_appwin)), /* make window */
                            r,
                            "",
                            0x02,
                            ap_id, /* application id */
                            &trans_ev);


   VIEW(o)->align |= TX_ALIGN_CENTER; /* set alignment */

   o->icon16 = load_image("/system/bmp/cdplayer.ico,16");

   o->menu = standard_system_menu_items(o,
                new_menu_line(
                new_menu_item("About CD Player...", 0, 0, MSG_ABOUT, NULL,
   NULL)));

   OBJECT(desktop)->insert(OBJECT(desktop), OBJECT(o)); /* insert it on the desktop */

   update_titel(OBJECT(o), set_format_text(NULL, TXT_TITEL,  bcd_get_drive_letter( cur_drive_no )));

   VIEW(o)->info_text = strdup(TXT_CDPLAYER);

   r = VIEW(o)->size_limits(VIEW(o));

   r = rect_assign(r.a.x+10, r.a.y+10, r.a.x+210, r.a.y+65);

   OBJECT(o)->insert(OBJECT(o), OBJECT(trackinfo_init(_malloc(sizeof(t_view)), r)));

   //r = rect_assign(r.b.x+10, r.a.y, r.b.x+2, r.b.y);

   r = rect_assign(r.a.x+2, r.b.y+5, r.b.x, r.b.y+55);

   t = r;

   r = rect_assign(r.a.x, r.a.y, r.a.x+64, r.a.y+25); /* play button */

   OBJECT(o)->insert(OBJECT(o), get_button(r, "b","Play", MSG_PLAY, BF_NORMAL, TXT_PLAY)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.a.y+25); /* play at background button */

   OBJECT(o)->insert(OBJECT(o), get_button(r, "M","Quit", MSG_PLAYATBACKGROUND, BF_NORMAL, TXT_PLAYBACKGROUND)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* pause button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "a","||", MSG_PAUSE, BF_NORMAL, TXT_PAUSE)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* stop button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "W","Stop", MSG_STOP, BF_NORMAL, TXT_STOP)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(t.a.x, r.b.y+5, t.a.x+30, r.b.y+30); /* |<< button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "Z","|<<", MSG_PREV, BF_NORMAL, TXT_LAST)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* << button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "X","<<", MSG_RR, BF_NORMAL, TXT_REWIND)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* >> button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "Y",">>", MSG_FF, BF_NORMAL, TXT_FORWARD)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* >>| button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "c",">>|", MSG_NEXT, BF_NORMAL, TXT_NEXT)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* /\ button */
   OBJECT(o)->insert(OBJECT(o), get_button(r, "d","Eject", MSG_OUT, BF_NORMAL, TXT_OPEN_CLOSE)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.b.x+4, r.a.y, r.b.x+34, r.b.y); /* time button */
   button = BUTTON(get_button(r, "T","T", MSG_TIME, BF_NORMAL, TXT_TIME));
   VIEW(button)->font = get_font_in_size("ActivaCE", 14, 14);
   if(!VIEW(button)->font){
    VIEW(button)->font=font_system;
    if(button->caption)_free(button->caption);
    button->caption=(l_text)_strdup("Time");
   }
   OBJECT(o)->insert(OBJECT(o), OBJECT(button)); /* insert button to window ...see get_button function under this function */

   r = rect_assign(r.a.x, r.a.y - 30, r.b.x, r.a.y - 5); /* drive button */
   button = BUTTON(get_button(r, "D","D", MSG_DRIVE, BF_NORMAL, TXT_DRIVE));
   VIEW(button)->font = get_font_in_size("ActivaCE", 14, 14);
   if(!VIEW(button)->font){
    VIEW(button)->font=font_system;
    if(button->caption)_free(button->caption);
    button->caption=(l_text)_strdup("Drive");
   }
   OBJECT(o)->insert(OBJECT(o), OBJECT(button)); /* insert button to window ...see get_button function under this function */
};


static l_int get_track ( l_text args )
{
  if ( args ) {

     l_text x = args;
     l_text s;
     l_int  i = 0;

     while ( *x && ( (*x < '0') || (*x > '9') ) ) x++;
     args = x;
     while ( *x && (*x >= '0') && (*x <= '9') ) x++;

     s = stridup(args, strsize(args, x));

     if ( s ) i = atol(s);

     _free(s);

     return i;

  };

  return 0;
};


app_begin ( void ) {


  if ( ap_process == AP_INIT ) {

    l_int err = 0;
    l_int i   = 0;

    AP_SETNUMOFCALLS(1); /* set max num of calls */

    bcd_open();

    err = bcd_audio_busy();

    if ( !err ) { /* audio is not play, ok ! */

       bcd_reset();

    } else if ( err == -1 ) /* audio error */

         seal_error(ERR_INFO, "%s !", TXT_ERRORINLOADINGAUDIO);

    else /* audio is play now */

      cd_track = bcd_now_playing();

    cd_track_max = bcd_get_audio_info();

    init_cdplayer();

    i = get_track(ap_args);

    if ( i > 0 ) {

         cd_track = min(cd_track_max, max(1, i));

         bcd_play_to_end(cd_track);

    };

  };

  if ( ap_process == AP_FREE ) {

     if ( !cd_track_in_background ) {

         bcd_stop();

         bcd_close();

     };

  };

} app_end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -