static function status($pos, $len) { if (self::$in_file != self::$source_name) { if (self::$in_file != "") { self::clear_progress(); } self::verbose("Loading " . self::$source_name . "...\n"); self::$in_file = self::$source_name; } if (!self::$progress) { return; } $progress_size = 2; $min_width = 8 + 2 + $progress_size + 2 + 5 + 1; # "%" $min_filename_length = 3; # if there's no way to fit the progress bar on this screen, just return if ($min_width + $min_filename_length >= self::$width) { self::$progress = false; return; } $filename = self::$source_name; # if we can fit the entire filename on the line then we size the progress bar if ($min_width + strlen(self::$source_name) < self::$width - 1) { $progress_size = self::$width - ($min_width + strlen($filename) + 1); } else { $filename = substr($filename, 0, self::$width - ($min_width + 1)); } $percent_per_file = 1 / self::$source_count; $already_done = (self::$source_index - 1) * $percent_per_file; $in_file = $len == 0 ? 1 : $pos / $len; $overall = $already_done + $percent_per_file * $in_file; $fill_count = floor($overall * $progress_size); $blank_count = ceil($progress_size - $fill_count); $fill = str_repeat("*", $fill_count); $blank = str_repeat("-", $blank_count); self::warn(sprintf("\rLoading %s [%s%s] %2.1f%%", $filename, $fill, $blank, $overall * 100)); }