--- /dev/null
+#!/bin/sh
+
+# zpm-list [-s status] [-vn] [ -f pkgfile ] [pkgid ...]
+
+verbose=0
+nameonly=0
+
+while getopts :s:f:vn opt; do
+ case $opt in
+ f) pkgfile="$OPTARG" ;;
+ s) status="$OPTARG" ;;
+ v) verbose=1 ;;
+ n) nameonly=1 ;;
+ esac
+done
+shift $(( OPTIND - 1))
+
+: ${pkgfile:=$ZPMDB}
+
+if [ -z "$pkgfile" ]; then
+ echo "must specify package file"
+ exit 1
+fi
+
+if [ -n "$status" ]; then
+ status=$(zpm quote "$status")
+fi
+
+if [ $nameonly -eq 0 ]; then
+ cols="pkgid"
+else
+ cols="package"
+fi
+
+if [ $verbose -eq 1 ]; then
+ cols="$cols,coalesce(status,'-')"
+fi
+
+if [ -n "$status" ]; then
+ where="where status = '$status'"
+fi
+
+pkgid=$1
+
+if [ -n "$pkgid" ]; then
+ eval $(zpm parse -E "$pkgid")
+ if [ -n "$package" ]; then
+ package=$(zpm quote "$package")
+ where="$where and package = '$package'"
+ fi
+ if [ -n "$version" ]; then
+ version=$(zpm quote "$version")
+ where="$where and version = '$version'"
+ fi
+ if [ -n "$release" ]; then
+ release=$(zpm quote "$release")
+ where="$where and release = '$release'"
+ fi
+fi
+
+zpm shell $pkgfile <<EOS
+.separator "\t"
+select $cols from packages_pkgid $where
+;
+EOS
+