void cat_command(const std::vector<std::string>& params){ if(!disks::mounted_partition() || !disks::mounted_disk()){ k_print_line("Nothing is mounted"); return; } if(params.size() == 1){ k_print_line("No file provided"); } else { auto file = find_file(params[1]); if(file){ if(!file->directory){ auto content = disks::read_file(params[1]); k_print(content); } else { k_print("cd: Not a file: "); k_print_line(params[1]); } } else { k_print("cd: No such file or directory: "); k_print_line(params[1]); } } }
void echo_command(const std::vector<std::string>& params){ for(uint64_t i = 1; i < params.size(); ++i){ k_print(params[i]); k_print(' '); } k_print_line(); }
void cd_command(const std::vector<std::string>& params){ if(!disks::mounted_partition() || !disks::mounted_disk()){ k_print_line("Nothing is mounted"); return; } //If there are no params, go to / if(params.size() == 1){ disks::current_directory().clear(); } else { if(params[1] == ".."){ if(disks::current_directory().size() > 0){ disks::current_directory().pop_back(); } } else { auto file = find_file(params[1]); if(file){ if(file->directory){ disks::current_directory().push_back(params[1]); } else { k_print("cd: Not a directory: "); k_print_line(params[1]); } } else { k_print("cd: No such file or directory: "); k_print_line(params[1]); } } } }
void help_command(const std::vector<std::string>&){ k_print("Available commands:\n"); for(auto& command : commands){ k_print('\t'); k_print_line(command.name); } }
void pwd_command(const std::vector<std::string>&){ if(!disks::mounted_partition() || !disks::mounted_disk()){ k_print_line("Nothing is mounted"); return; } auto& cd = disks::current_directory(); k_print('/'); for(auto& p : cd){ k_print(p); k_print('/'); } k_print_line(); }
void k_print_memory_info() { int i; uint64_t memTotal = 0; k_print("=========== Phisical Memory Map ==========\n"); for(i = 0; i < k_phisical_memory_map_size; i++) { k_print("0x%08x%08x - 0x%08x%08x %s\n", HIPART(k_phisical_memory_map[i].base), LOPART(k_phisical_memory_map[i].base), HIPART(k_phisical_memory_map[i].base + k_phisical_memory_map[i].length), LOPART(k_phisical_memory_map[i].base + k_phisical_memory_map[i].length), k_phisical_memory_map[i].type == MEMORY_USE_NORMAL ? "Use Normal" : (k_phisical_memory_map[i].type == MEMORY_USE_RESERVED ? "Reserved" : (k_phisical_memory_map[i].type == MEMORY_USE_ACPI_RECLAIMABLE ? "ACPI Reclaimable" : (k_phisical_memory_map[i].type == MEMORY_USE_ACPI_NVS ? "ACPI NVS" : "BAD")))); if(k_phisical_memory_map[i].type == MEMORY_USE_NORMAL) memTotal += k_phisical_memory_map[i].length; } //k_print("Usable memory total: %d bytes\n", (uint32_t)memTotal); }
void k_print_memory_usage_info() { memInfo_t memInfo; int i; get_memory_info(&memInfo); k_print("Memory usage:\n"); k_print("Heap address: 0x%08x\n", memInfo.heapAddress); k_print("Memory cached: %u/%u bytes\n", memInfo.heapCached, memInfo.totalSize); k_print("Memory used: %u bytes\n", memInfo.memoryUsed); k_print("Allocated blocks:\n"); for(i = 0; i < MEMORY_SLICES_MAX_COUNT; i++) { if(memPool.numAllocatedBlocks[i] != 0) k_print("|%dx(%u)|", memPool.numAllocatedBlocks[i], (1<<i)); } k_print("\n"); }
void ls_command(const std::vector<std::string>& params){ if(!disks::mounted_partition() || !disks::mounted_disk()){ k_print_line("Nothing is mounted"); return; } //By default hidden files are not shown bool show_hidden_files = false; bool list = false; //Read options if any if(params.size() > 1){ for(size_t i = 1; i < params.size(); ++i){ if(params[i] == "-a"){ show_hidden_files = true; } else if(params[i] == "-l"){ list = true; } } } auto files = disks::ls(); size_t total = 0; for(auto& file : files){ if(file.hidden && !show_hidden_files){ continue; } ++total; if(list){ if(file.directory){ k_print(" d "); } else { k_print(" f "); } k_print(file.size); k_print(' '); k_print(file.created.day); k_print('.'); k_print(file.created.month); k_print('.'); k_print(1980+file.created.year); k_print(' '); k_print(file.created.hour); k_print(':'); k_print(file.created.minutes); k_print(' '); k_print_line(file.file_name); } else { k_print(file.file_name); k_print(' '); } } if(!list){ k_print('\n'); } k_printf("Total: %u\n", total); }
typename std::enable_if<(sizeof...(Arguments) > 0), void>::type k_print_line(const Arguments&... args){ k_print(args...); k_print('\n'); }
void main() { char *msg = "Hello world from main() in kernel.c \nStart_new_line here ....."; k_set_cursor(23, 0); k_print(msg); k_print("\n\tThere is a tab in the left."); }