static adv_error cmd_offvideo_test(int userkey) { adv_crtc* crtc; adv_crtc crtc_save; adv_bool modify = 0; crtc = menu_current(); if (!crtc) return -1; crtc_save = *crtc; modify = test_exe_crtc(userkey, crtc); if (!modify) { sound_warn(); return 0; } menu_modify(); if (strcmp(crtc->name, DEFAULT_TEXT_MODE)==0) { if (!crtc_clock_check(&the_monitor, crtc) && crtc_clock_check(&the_monitor, &crtc_save)) { *crtc = crtc_save; sound_error(); return 0; } text_reset(); } return 0; }
static adv_error cmd_exit(void) { if (the_modes_modified) { adv_error res; sound_warn(); res = cmd_input_key(" Save before exiting : ", "yn"); if (res < 0) return 0; if (res == 0) cmd_save(); } return 1; }
static adv_error cmd_onvideo_test(void) { adv_crtc* crtc; adv_mode mode; adv_bool done; adv_crtc crtc_save; adv_bool dirty = 1; adv_bool crtc_save_modified; mode_reset(&mode); crtc = menu_current(); if (!crtc) return -1; if (!crtc_is_fake(crtc) && !crtc_clock_check(&the_monitor, crtc)) return -1; if (video_mode_generate(&mode, crtc, the_mode_index)!=0) { return -1; } if (text_mode_set(&mode) != 0) { text_reset(); return -1; } crtc_save = *crtc; crtc_save_modified = the_modes_modified; done = 0; while (!done) { int userkey; adv_bool modify = 0; adv_crtc last_crtc = *crtc; adv_mode last_mode = mode; adv_bool vm_last_modified = the_modes_modified; if (dirty) { video_write_lock(); test_draw(1, 1, &mode); video_write_unlock(0, 0, 0, 0, 0); dirty = 0; } video_wait_vsync(); target_idle(); os_poll(); userkey = inputb_get(); switch (userkey) { case INPUTB_ESC : done = 1; /* restore */ *crtc = crtc_save; the_modes_modified = crtc_save_modified; break; case INPUTB_ENTER : done = 1; break; } if (!done) { modify = test_exe_crtc(userkey, crtc); if (modify) { the_modes_modified = 1; dirty = 1; if ((crtc_is_fake(crtc) || crtc_clock_check(&the_monitor, crtc)) && video_mode_generate(&mode, crtc, the_mode_index)==0) { if (text_mode_set(&mode) != 0) { text_reset(); /* abort */ *crtc = crtc_save; the_modes_modified = crtc_save_modified; return -1; } } else { /* restore */ mode = last_mode; *crtc = last_crtc; the_modes_modified = vm_last_modified; dirty = 1; sound_error(); } } else { sound_warn(); } } } return 0; }
int esd_play_sound_data (Binbyte *data, size_t length, int UNUSED (vol)) { /* #### FIXME: vol is ignored */ size_t (*parsesndfile)(void **dayta,size_t *sz,void **outbuf); size_t (*sndcnv)(void **dayta,size_t *sz,void **); fmtType ffmt; int fmt,speed,tracks; unsigned char *pptr,*optr,*cptr,*sptr; Bytecount wrtn, crtn; size_t prtn; int flags, sock; /* analyze_format needs at least this many bytes to work with */ if (length < HEADERSZ) return 0; ffmt = analyze_format(data,&fmt,&speed,&tracks,&parsesndfile); if (ffmt != fmtRaw && ffmt != fmtSunAudio && ffmt != fmtWave) { sound_warn("Unsupported file format (neither RAW, nor Sun/DECAudio, nor WAVE)"); return 0; } /* convert header information into ESD flags */ flags = ESD_STREAM|ESD_PLAY; sndcnv = sndcnvnop; switch (fmt) { case AFMT_MU_LAW: sndcnv = sndcnvULaw_2linear; flags |= ESD_BITS8; break; case AFMT_S8: sndcnv = sndcnv2unsigned; /* ESD needs unsigned bytes */ case AFMT_U8: flags |= ESD_BITS8; break; case AFMT_S16_BE: sndcnv = sndcnv16swap; /* ESD wants little endian */ case AFMT_S16_LE: flags |= ESD_BITS16; break; default: { Extbyte warn_buf[255]; sprintf (warn_buf, "byte format %d unimplemented", fmt); sound_warn (warn_buf); return 0; } } switch (tracks) { case 1: flags |= ESD_MONO; break; case 2: flags |= ESD_STEREO; break; default: { Extbyte warn_buf[255]; sprintf (warn_buf, "%d channels - only 1 or 2 supported", tracks); sound_warn (warn_buf); return 0; } } sock = esd_play_stream(flags, speed, NULL, "xemacs"); if (sock < 0) return 0; reset_parsestate(); for (pptr = data; (prtn = parsesndfile((void **)&pptr,&length, (void **)&optr)) > 0; ) for (cptr = optr; (crtn = sndcnv((void **)&cptr,&prtn, (void **)&sptr)) > 0; ) { if ((wrtn = write(sock,sptr,crtn)) < 0) { sound_perror ("write error"); goto END_OF_PLAY; } if (wrtn != crtn) { Extbyte warn_buf[255]; sprintf (warn_buf, "only wrote %ld of %ld bytes", wrtn, crtn); sound_warn (warn_buf); goto END_OF_PLAY; } } if (ffmt == fmtWave) parse_wave_complete(); END_OF_PLAY: /* Now cleanup all used resources */ close(sock); return 1; }