// Play a gcode file by considering each line as if it was received on the serial console void Player::play_command( string parameters, StreamOutput *stream ) { // extract any options from the line and terminate the line there string options= extract_options(parameters); // Get filename which is the entire parameter line upto any options found or entire line this->filename = absolute_from_relative(parameters); if(this->playing_file || this->suspended) { stream->printf("Currently printing, abort print first\r\n"); return; } if(this->current_file_handler != NULL) { // must have been a paused print fclose(this->current_file_handler); } this->current_file_handler = fopen( this->filename.c_str(), "r"); if(this->current_file_handler == NULL) { stream->printf("File not found: %s\r\n", this->filename.c_str()); return; } stream->printf("Playing %s\r\n", this->filename.c_str()); this->playing_file = true; // Output to the current stream if we were passed the -v ( verbose ) option if( options.find_first_of("Vv") == string::npos ) { this->current_stream = nullptr; } else { // we send to the kernels stream as it cannot go away this->current_stream = THEKERNEL->streams; } // get size of file int result = fseek(this->current_file_handler, 0, SEEK_END); if (0 != result) { stream->printf("WARNING - Could not get file size\r\n"); file_size = 0; } else { file_size = ftell(this->current_file_handler); fseek(this->current_file_handler, 0, SEEK_SET); stream->printf(" File size %ld\r\n", file_size); } this->played_cnt = 0; this->elapsed_secs = 0; }
emacs_value egit_blame_file(emacs_env *env, emacs_value _repo, emacs_value _path, emacs_value options) { EGIT_ASSERT_REPOSITORY(_repo); EM_ASSERT_STRING(_path); git_repository *repo = EGIT_EXTRACT(_repo); git_blame_options opts; extract_options(env, options, &opts); EM_RETURN_NIL_IF_NLE(); char *path = EM_EXTRACT_STRING(_path); git_blame *blame = NULL; int retval = git_blame_file(&blame, repo, path, &opts); free(path); EGIT_CHECK_ERROR(retval); return egit_wrap(env, EGIT_BLAME, blame, NULL); }