diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-12-26 11:00:19 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-12-26 11:00:19 -0500 |
commit | 115076941358f58e13b9a8e79840fa741f70a84f (patch) | |
tree | b8d5d59c9f467fb264c6e3bc402aba4c4c898fec /src | |
parent | b7e55876614b1c55bb4e9cf58003de61c1dd8932 (diff) | |
download | spmc-115076941358f58e13b9a8e79840fa741f70a84f.tar.gz |
Listing packages and printing banners
Diffstat (limited to 'src')
-rw-r--r-- | src/spm.c | 67 | ||||
-rw-r--r-- | src/strings.c | 18 |
2 files changed, 62 insertions, 23 deletions
@@ -7,6 +7,7 @@ int RUNTIME_INSTALL = 0; int RUNTIME_ROOTDIR = 0; +int RUNTIME_LIST = 0; int RUNTIME_SEARCH = 0; const int PACKAGE_MAX = 0xff; @@ -18,6 +19,7 @@ void usage(const char *program_name) { " -v, --verbose show more information\n" " -I, --install install package(s)\n" " -S --search search for a package\n" + " -L --list list available packages\n" " -r --root installation prefix (requires --install)\n" , program_name ); @@ -75,7 +77,10 @@ int main(int argc, char *argv[]) { manifest_free(info); exit(0); } - else if (strcmp(arg, "--search") == 0) { + else if (strcmp(arg, "-L") == 0 || strcmp(arg, "--list") == 0) { + RUNTIME_LIST = 1; + } + else if (strcmp(arg, "-S") == 0 || strcmp(arg, "--search") == 0) { RUNTIME_SEARCH = 1; if (arg_next == NULL) { fprintf(stderr, "--search requires a package name\n"); @@ -230,7 +235,7 @@ int main(int argc, char *argv[]) { dep_free(&deps); } - if (RUNTIME_SEARCH) { + if (RUNTIME_SEARCH || RUNTIME_LIST) { Manifest *info = manifest_read(); char name[255]; char op[25]; @@ -250,33 +255,49 @@ int main(int argc, char *argv[]) { name[j] = package_search_str[p]; } - // Populate op - for (int j = 0; package_search_str[p] != '\0'; j++, p++) { - if (!isrelational(package_search_str[p])) { - break; + if (RUNTIME_SEARCH) { + // Populate op + for (int j = 0; package_search_str[p] != '\0'; j++, p++) { + if (!isrelational(package_search_str[p])) { + break; + } + op[j] = package_search_str[p]; } - op[j] = package_search_str[p]; - } - if (strlen(op)) { - // Populate version - for (int j = 0; package_search_str[p] != '\0'; j++, p++) { - ver[j] = package_search_str[p]; + if (strlen(op)) { + // Populate version + for (int j = 0; package_search_str[p] != '\0'; j++, p++) { + ver[j] = package_search_str[p]; + } + } else { + // No operator, so find all versions instead + strcpy(op, ">="); + ver[0] = '0'; } - } - else { - // No operator, so find all versions instead - strcpy(op, ">="); - ver[0] = '0'; - } - ManifestPackage **package = find_by_spec(info, name, op, ver); + } + int banner_size = 77; + printf("# "); + print_banner("-", banner_size); printf("# %-20s %-20s %-20s %-20s\n", "name", "version", "revision", "size"); - for (int p = 0; package[p] != NULL; p++) { - char *package_hsize = human_readable_size(package[p]->size); - printf(" %-20s %-20s %-20s %-20s\n", package[p]->name, package[p]->version, package[p]->revision, package_hsize); - free(package_hsize); + printf("# "); + print_banner("-", banner_size); + + if (RUNTIME_SEARCH) { + ManifestPackage **package = find_by_spec(info, name, op, ver); + for (int p = 0; package[p] != NULL; p++) { + char *package_hsize = human_readable_size(package[p]->size); + printf(" %-20s %-20s %-20s %-20s\n", package[p]->name, package[p]->version, package[p]->revision, package_hsize); + free(package_hsize); + } + } + else if(RUNTIME_LIST) { + for (int p = 0; p < info->records; p++) { + char *package_hsize = human_readable_size(info->packages[p]->size); + printf(" %-20s %-20s %-20s %-20s\n", info->packages[p]->name, info->packages[p]->version, info->packages[p]->revision, package_hsize); + free(package_hsize); + } } exit(0); diff --git a/src/strings.c b/src/strings.c index e50daeb..38cc4d3 100644 --- a/src/strings.c +++ b/src/strings.c @@ -503,3 +503,21 @@ int isrelational(char ch) { } return 0; } + +/** + * Repeatedly print string `s`, `len` times + * @param s + * @param len + */ +void print_banner(const char *s, int len) { + size_t s_len = strlen(s); + if (!s || !s_len) { + return; + } + for (int i = 0; i < (len / s_len); i++) { + for (int c = 0; c < s_len; c++) { + putchar(s[c]); + } + } + putchar('\n'); +} |