void VisionApp::ArgvReceived(int32 ac, char** av) { for (int32 i = 1; i < ac; ++i) { if (strcmp(av[i], "-!") == 0) { fDebugRecv = true; fDebugSend = true; fDebugSettings = true; fNumBench = true; fDebugShutdown = true; } else if (strcmp(av[i], "-r") == 0) fDebugRecv = true; else if (strcmp(av[i], "-s") == 0) fDebugSend = true; else if (strcmp(av[i], "-S") == 0) fDebugSettings = true; else if (strcmp(av[i], "-u") == 0) fDebugShutdown = true; else if (strcmp(av[i], "-n") == 0) fNumBench = true; else if (strcmp(av[i], "-a") == 0) fDisableAutostart = true; else if (strcmp(av[i], "-T") == 0) { #if 0 TestScript *tscript = new TestScript(); delete tscript; #endif if (IsLaunching()) Quit(); } else if (strcmp(av[i], "--help") == 0) { printf("Vision command line switches:\n"); printf("Devel:\n"); printf("\t-T\t\tRun TestScript() and quit\n"); printf("Debug:\n"); printf("\t-!\t\tPrint everything\n"); printf("\t-r\t\tPrint data received across the network\n"); printf("\t-s\t\tPrint data sent across the network\n"); printf("\t-S\t\tPrint settings debug information\n"); printf("\t-u\t\tPrint state debug information on shutdown\n"); printf("\t-a\t\tDisable auto-connect\n"); printf("\n"); if (IsLaunching()) Quit(); } } }
void WorkspacesApp::ArgvReceived(int32 argc, char **argv) { for (int i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] == '-') { // evaluate --arguments if (!strcmp(argv[i], "--notitle")) fWindow->SetLook(B_MODAL_WINDOW_LOOK); else if (!strcmp(argv[i], "--noborder")) fWindow->SetLook(B_NO_BORDER_WINDOW_LOOK); else if (!strcmp(argv[i], "--avoidfocus")) fWindow->SetFlags(fWindow->Flags() | B_AVOID_FOCUS); else if (!strcmp(argv[i], "--notmovable")) fWindow->SetFlags(fWindow->Flags() | B_NOT_MOVABLE); else if (!strcmp(argv[i], "--alwaysontop")) fWindow->SetFeel(B_FLOATING_ALL_WINDOW_FEEL); else if (!strcmp(argv[i], "--autoraise")) fWindow->SetAutoRaise(true); else { const char *programName = strrchr(argv[0], '/'); programName = programName ? programName + 1 : argv[0]; Usage(programName); } } else if (isdigit(*argv[i])) { // check for a numeric arg, if not already given activate_workspace(atoi(argv[i])); // if the app is running, don't quit // but if it isn't, cancel the complete run, so it doesn't // open any window if (IsLaunching()) Quit(); } else if (!strcmp(argv[i], "-")) { activate_workspace(current_workspace() - 1); if (IsLaunching()) Quit(); } else if (!strcmp(argv[i], "+")) { activate_workspace(current_workspace() + 1); if (IsLaunching()) Quit(); } else { // some unknown arguments were specified fprintf(stderr, "Invalid argument: %s\n", argv[i]); if (IsLaunching()) Quit(); } } }
void TermApp::RefsReceived(BMessage* message) { // Works Only Launced by Double-Click file, or Drags file to App. if (!IsLaunching()) return; entry_ref ref; if (message->FindRef("refs", 0, &ref) != B_OK) return; BFile file; if (file.SetTo(&ref, B_READ_WRITE) != B_OK) return; BNodeInfo info(&file); char mimetype[B_MIME_TYPE_LENGTH]; info.GetType(mimetype); // if App opened by Pref file if (strcmp(mimetype, PREFFILE_MIMETYPE) == 0) { BEntry ent(&ref); BPath path(&ent); PrefHandler::Default()->OpenText(path.Path()); return; } // if App opened by Shell Script if (strcmp(mimetype, "text/x-haiku-shscript") == 0) { // Not implemented. // beep(); return; } }
void UAE::RefsReceived(BMessage *msg) { if (!IsLaunching()) return; entry_ref ref; if (msg->FindRef("refs", &ref) == B_NO_ERROR) { BEntry entry(&ref); if (entry.InitCheck() == B_NO_ERROR) { BPath path; entry.GetPath(&path); // set default settings entry // gSettingsEntry = new BEntry(entry); int32_t argc = 3; char **argv = new char *[argc]; argv[0] = argvCopy[0]; // fake command line arguments argv[1] = "-f"; argv[2] = (char *)path.Path(); freeCopiedArgs(); copyArgs(argc,argv); } } }
void DjVuApp::Pulse() { // Bug: The BFilePanel is automatically closed if the volume that // is displayed is unmounted. if (!IsLaunching() && CountWindows() <= WINDOWS_TO_IGNORE) // If the application is not launching and // all windows are closed except for the file open panel, // quit the application PostMessage(B_QUIT_REQUESTED); }
void ZipOMatic::RefsReceived(BMessage* message) { entry_ref ref; if (message->FindRef("refs", &ref) == B_OK) { _UseExistingOrCreateNewWindow(message); fGotRefs = true; } else if (!IsLaunching()) { PostMessage(B_SILENT_RELAUNCH); } }
void WorkspacesApp::Usage(const char *programName) { printf("Usage: %s [options] [workspace]\n" "where \"options\" is one of:\n" " --notitle\t\ttitle bar removed. border and resize kept.\n" " --noborder\t\ttitle, border, and resize removed.\n" " --avoidfocus\t\tprevents the window from being the target of keyboard events.\n" " --alwaysontop\t\tkeeps window on top\n" " --notmovable\t\twindow can't be moved around\n" " --autoraise\t\tauto-raise the workspace window when it's at the screen corner\n" " --help\t\tdisplay this help and exit\n" "and \"workspace\" is the number of the Workspace to which to switch (0-31)\n", programName); // quit only if we aren't running already if (IsLaunching()) Quit(); }
bool Job::CanBeLaunched() const { // Services cannot be launched while they are running return IsEnabled() && !IsLaunching() && (!IsService() || !IsRunning()); }
void MyApplication::RefsReceived(BMessage *message) { // be_app->Lock(); uint32 ref_num; entry_ref ref; BMediaTrack *audTrack(NULL); media_format format; memset(&format, 0, sizeof(format)); // media_raw_audio_format *raf(NULL); // short audioFrameSize(1); // char *audioData(NULL); int32 frame_size, channels = 1; Pool.sample_type = NONE; // for frame moving / resize bool temp_pause = play_cookie.pause;; ref_num=0; if (message->FindRef("refs",ref_num, &ref) == B_OK){ BMediaFile inFile(&ref); if (inFile.InitCheck() == B_OK){ char s[B_FILE_NAME_LENGTH +20]; sprintf(s, "BeAE - %s", ref.name); mainWindow->SetTitle(s); Pool.sample_view_dirty = true; // update the sample-view Pool.update_index = true; Pool.RedrawWindow(); play_cookie.pause = true; // gather the necessary format information int32 tracks = inFile.CountTracks(); for (int32 i = 0; i < tracks; i++) { BMediaTrack *inTrack = inFile.TrackAt(i); inTrack->EncodedFormat(&format); if (format.IsAudio()) { audTrack = inTrack; inTrack->DecodedFormat(&format); // Pool.m_format = format; memcpy(&Pool.m_format, &format, sizeof(Pool.m_format)); Pool.sample_bits = (format.u.raw_audio.format & 0xf)*8; Pool.selection = NONE; Pool.frequency = format.u.raw_audio.frame_rate; // printf("format : %x\n", format.u.raw_audio.format); Pool.size = audTrack->CountFrames()-1; channels = format.u.raw_audio.channel_count; Pool.StartProgress(Language.get("LOADING_FILE"), Pool.size); frame_size = (format.u.raw_audio.format & 0xf)*channels; #ifndef __VM_SYSTEM //RAM if (Pool.sample_memory) // create buffer for sample memory, add an extra frame to be able to do free(Pool.sample_memory); // 32bit to 16 bit conversions Pool.sample_memory = (float*)malloc(Pool.size * channels *4 +1024); #endif }else{ inFile.ReleaseAllTracks(); } } int64 frameCount, framesRead; status_t err; media_header mh; int32 lastPercent, currPercent; float completePercent; BString status; char *buffer = (char*)malloc(format.u.raw_audio.buffer_size); // temp memory #ifndef __VM_SYSTEM //RAM float *mem = Pool.sample_memory; // dest memory // read audio from source and write to destination, if necessary if (mem) { #else VM.Reset(); float *convert_buffer = (float*)malloc(format.u.raw_audio.buffer_size*4); // make sure there can be floats in it // read audio from source and write to destination, if necessary if (convert_buffer) { float *mem = NULL; #endif frameCount = audTrack->CountFrames(); int64 count =0; lastPercent = -1; for (int64 i = 0; i < frameCount; i += framesRead) { #ifdef __VM_SYSTEM //RAM mem = convert_buffer; #endif // clear buffer first memset( buffer, 0, format.u.raw_audio.buffer_size); if ((err = audTrack->ReadFrames(buffer, &framesRead, &mh)) != B_OK) { printf("Error reading audio frames: %s\n", strerror(err)); break; } count += framesRead; // now correct for crashes if bigger than file if (count > frameCount) framesRead -= (count - frameCount); switch(format.u.raw_audio.format){ case 0x24: // 0 == mid, -1.0 == bottom, 1.0 == top (the preferred format for non-game audio) { float *tmp = (float*)buffer; float x; for (int32 count = 0; count<framesRead*channels; count++){ x = *tmp++; if (x<-1.0) x = -1.0; else if (x>1.0) x = 1.0; *mem++ = x; } } break; case 0x4: // 0 == mid, 0x80000001 == bottom, 0x7fffffff == top (all >16-bit formats, left-adjusted) { int32 *tmp = (int32*)buffer; float x; for (int32 count = 0; count<framesRead*channels; count++){ x = *tmp++/0x80000000; if (x<-1.0) x = -1.0; else if (x>1.0) x = 1.0; *mem++ = x; } } break; case 0x2: // 0 == mid, -32767 == bottom, +32767 == top { int16 *tmp = (int16*)buffer; float x; for (int32 count = 0; count<framesRead*channels; count++){ x = *tmp++/32767.0; if (x<-1.0) x = -1.0; else if (x>1.0) x = 1.0; *mem++ = x; } } break; case 0x11: // 128 == mid, 1 == bottom, 255 == top (discouraged but supported format) { uint8 *tmp = (uint8*)buffer; float x; for (int32 count = 0; count<framesRead*channels; count++){ x = *tmp++/127.0 -1.0; if (x<-1.0) x = -1.0; else if (x>1.0) x = 1.0; *mem++ = x; } } break; case 0x1: // 0 == mid, -127 == bottom, +127 == top (not officially supported format) { int8 *tmp = (int8*)buffer; float x; for (int32 count = 0; count<framesRead*channels; count++){ x = *tmp++/127.0; // xor 128 to invert sign bit if (x<-1.0) x = -1.0; else if (x>1.0) x = 1.0; *mem++ = x; } } break; } #ifdef __VM_SYSTEM //RAM VM.WriteBlock( convert_buffer, framesRead*channels ); #endif Pool.ProgressUpdate( framesRead ); completePercent = ((float)i) / ((float)frameCount) * 100; currPercent = (int16)floor(completePercent); if (currPercent > lastPercent) { lastPercent = currPercent; } } inFile.ReleaseAllTracks(); #ifdef __VM_SYSTEM //RAM free(convert_buffer); #endif }else{ Pool.play_mode = NONE; Pool.pointer = 0; Pool.play_pointer = 0; Pool.l_pointer = 0; Pool.r_pointer = 0; Pool.r_sel_pointer = 0; Pool.size = 0; Pool.selection = NONE; Pool.sample_type = NONE; Pool.sample_bits = 16; Pool.frequency = 41400.0; (new BAlert(NULL,Language.get("MEM_ERROR"),Language.get("OK")))->Go(); } if (channels == 1) Pool.sample_type = MONO; else Pool.sample_type = STEREO; Pool.r_pointer = Pool.size; Pool.pointer = 0; Pool.r_sel_pointer = Pool.pointer; Pool.l_pointer = 0; #ifndef __VM_SYSTEM //RAM play_cookie.mem = Pool.sample_memory; play_cookie.start_mem = Pool.sample_memory; play_cookie.end_mem = Pool.sample_memory + Pool.size*Pool.sample_type; play_cookie.frequency = Pool.frequency; play_cookie.add = 0; #else play_cookie.mem = 0; play_cookie.start_mem = 0; // play_cookie.end_mem = Pool.size*Pool.sample_type; play_cookie.frequency = Pool.frequency; play_cookie.add = 0; #endif Pool.changed = false; Pool.HideProgress(); // create the PeakFile Pool.ResetIndexView(); Hist.Reset(); // reset undo class if (IsLaunching() && Prefs.play_when_loaded) Pool.mainWindow->PostMessage(TRANSPORT_PLAYS); }else{ (new BAlert(NULL,Language.get("LOADING_NO_AUDIO"),Language.get("OK")))->Go(); } } Pool.sample_view_dirty = true; // update the sample-view Pool.update_draw_cache = true; // update the draw cache Pool.update_index = true; // update the draw cache Pool.update_peak = true; Pool.RedrawWindow(); Pool.InitBufferPlayer( Pool.frequency ); play_cookie.pause = temp_pause; Pool.UpdateMenu(); mainWindow->UpdateRecent(); // be_app->Unlock(); } //------------------------------------------------------------------ Save void MyApplication::Save(BMessage *message){ // Grab the stuff we know is there .. or should be :P entry_ref dir_ref, file_ref; const char *name; BFile newFile; BDirectory dir; float t; if ((message->FindRef("directory", &dir_ref) == B_OK) && (message->FindString("name", &name) == B_OK)) { dir.SetTo(&dir_ref); if (dir.InitCheck() != B_OK) return; dir.CreateFile(name, &newFile); BEntry entry(&dir, name); if (entry.InitCheck() != B_OK) { (new BAlert(NULL, Language.get("CANT_OVERWRITE_FILE"), Language.get("OK")))->Go(); return; } entry.GetRef(&file_ref); media_codec_info *audioCodec; media_file_format *fileFormat; media_raw_audio_format *raf(NULL), *raf_in(NULL); media_format format; memset(&format, 0, sizeof(format)); char *buffer(NULL); int32 frame_size(1); fSavePanel->GetSelectedFormatInfo(&fileFormat, &audioCodec); if (audioCodec != NULL){ // format = Pool.m_format; memcpy(&format, &Pool.m_format, sizeof(format)); raf_in = &(format.u.raw_audio); format.type = B_MEDIA_RAW_AUDIO; if (raf_in->format == 1) raf_in->format = 0x11; // create media file BMediaFile file(&file_ref, fileFormat, B_MEDIA_FILE_REPLACE_MODE); if (file.InitCheck() != B_OK){ (new BAlert(NULL, Language.get("CANT_OVERWRITE_FILE"), Language.get("OK")))->Go(); return; } BMediaTrack *outTrack = file.CreateTrack(&format, audioCodec); if (outTrack){ file.CommitHeader(); if (save_start == 0){ // save as char s[B_FILE_NAME_LENGTH +20]; sprintf(s, "BeAE - %s", file_ref.name); mainWindow->SetTitle(s); } raf = &(format.u.raw_audio); buffer = (char*)malloc(raf->buffer_size); int32 channels = raf->channel_count; frame_size = (raf->format & 0xf) * raf->channel_count; int32 buffer_step = raf->buffer_size / frame_size; #ifndef __VM_SYSTEM //RAM float *mem = Pool.sample_memory + save_start*Pool.sample_type; // src memory #else float *convert_buffer = (float*)malloc(buffer_step*channels*4); // make sure there can be floats in it // read audio from source and write to destination, if necessary if (convert_buffer) { VM.ReadBlockAt(save_start, convert_buffer, buffer_step*channels ); float *mem = convert_buffer; #endif Pool.StartProgress(Language.get("SAVING_FILE"), save_end-save_start); for (int64 i=save_start; i<save_end; i+=buffer_step){ // fill up the buffer int32 block = MIN( (save_end-i) , buffer_step); switch(format.u.raw_audio.format){ case 0x24: // 0 == mid, -1.0 == bottom, 1.0 == top (the preferred format for non-game audio) { float *tmp = (float*)buffer; for (int32 count = 0; count<block*channels; count++){ *tmp++ = *mem++; } } break; case 0x4: // 0 == mid, 0x80000001 == bottom, 0x7fffffff == top (all >16-bit formats, left-adjusted) { int32 *tmp = (int32*)buffer; for (int32 count = 0; count<block*channels; count++){ t = *mem++; *tmp++ = ROUND(t*0x7fffffff); } } break; case 0x2: // 0 == mid, -32767 == bottom, +32767 == top { int16 *tmp = (int16*)buffer; for (int32 count = 0; count<block*channels; count++){ t = *mem++; *tmp++ = ROUND(t*32767.0); } } break; case 0x11: // 128 == mid, 1 == bottom, 255 == top (discouraged but supported format) { uint8 *tmp = (uint8*)buffer; for (int32 count = 0; count<block*channels; count++){ t = *mem++; *tmp = ROUND(t*127.0); tmp++; *tmp = *tmp ^ 0x80; } } break; case 0x1: // 0 == mid, -127 == bottom, +127 == top (not officially supported format) { int8 *tmp = (int8*)buffer; for (int32 count = 0; count<block*channels; count++){ t = *mem++; *tmp++ = ROUND(t*127.0); // xor 128 to invert sign bit } } break; } Pool.ProgressUpdate( block ); outTrack->WriteFrames(buffer, block); #ifdef __VM_SYSTEM //RAM VM.ReadBlock(convert_buffer, block*channels ); mem = convert_buffer; #endif } #ifdef __VM_SYSTEM //RAM free(convert_buffer); } #endif Pool.changed = false; outTrack->Flush(); BMimeType result; BEntry ent(&dir,name); entry_ref fref; ent.GetRef(&fref); BMimeType::GuessMimeType(&fref,&result); BNodeInfo ninfo(&newFile); ninfo.SetType(result.Type()); }else{ (new BAlert(NULL, Language.get("CODEC_FORMAT_ERROR"), Language.get("OK")))->Go(); } file.CloseFile(); free(buffer); Pool.HideProgress(); } }else{ (new BAlert(NULL, Language.get("SAVE_ERROR"), Language.get("OK")))->Go(); } if (Pool.save_mode == 2) PostMessage(B_QUIT_REQUESTED); if (Pool.save_mode == 1) mainWindow->PostMessage(OPEN); Pool.save_mode = 0; }