#!/usr/bin/awk -f # # prt-view - list available CRUX ports # # Jürgen Daubert # Verion 0.2.1 2006-06-21 # function html_header() { if ("SERVER_NAME" in ENVIRON) print "Content-type: text/html\r\n" print "" print "" print "CRUX Ports Overview" print "" print "

CRUX Ports Overview

" } function html_table_start() { print "" print "" print "" print "" print "" print "" print "" print "" } function html_footer() { print "" printf "\n", Ports_available printf "\n", Ports_installed print "" printf "", Prog, Version printf "\n", strftime() print "
CollectionPortInstalledDescription


Ports available:%s
Ports installed:%s

%s %s%s
" } function clear_vars() { pkg_desc = "" pkg_url = "" } function create_cmdline_filelist( filelist) { ARGC = 1 filelist = "find " BASEDIR "/* -follow -name Pkgfile | sort" while (filelist | getline) ARGV[ARGC++] = $0 } function is_pkg_installed() { if ( ! INST_PKG[0] ) { RS = "" while ( getline < PKGDB ) INST_PKG[$1] = $2 RS = "\n" INST_PKG[0] = 1 } if ( pkg_name in INST_PKG) return INST_PKG[pkg_name] else return 0 } function html_ports_line( row_color) { if ( (Ports_available % 2) == 0 ) row_color = "bgcolor=\"#EFEFEF\"" else row_color ="" printf "%s", row_color, pkg_collection() printf "%s", pkg_directory(), pkg_name printf "%s", pkg_inst_flag() printf "%s\n", pkg_url, pkg_desc } function pkg_inst_flag( ver_rel) { if (ver_rel = is_pkg_installed()) { Ports_installed++ if (ver_rel == pkg_ver "-" pkg_rel) return "Yes" else return "Diff" } else { return "" } } function pkg_directory() { return gensub(/Pkgfile/, "", 1, FILENAME) } function pkg_collection( coll) { coll = gensub(/\/[^\/]*\/Pkgfile/, "", 1, FILENAME) return gensub(BASEDIR "/", "", 1 , coll) } BEGIN { Prog = "prt-view" Version = "0.2.1" BASEDIR = "/usr/ports" PKGDB = "/var/lib/pkg/db" INST_PKG[0] = 0 Ports_available = 0 Ports_installed = 0 pat_desc = "^#[ \t]*Description:[ \t]*" pat_url = "^#[ \t]*URL:[ \t]*" pat_name = "^name=" pat_ver = "^version=" pat_rel = "^release=" pat_build = "^[ \t]*build" create_cmdline_filelist() html_header() html_table_start() } $0 ~ pat_desc { pkg_desc = gensub(pat_desc, "", 1); next } $0 ~ pat_url { pkg_url = gensub(pat_url, "", 1); next } $0 ~ pat_name { pkg_name = gensub(pat_name, "", 1); next } $0 ~ pat_ver { pkg_ver = gensub(pat_ver, "", 1); next } $0 ~ pat_rel { pkg_rel = gensub(pat_rel, "", 1); next } $0 ~ pat_build { html_ports_line() clear_vars() Ports_available++ nextfile } END { html_footer() } # End of file