Made arg_parse more readable.
authorWerner Koch <wk@gnupg.org>
Wed, 12 Nov 2008 17:41:49 +0000 (17:41 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 12 Nov 2008 17:41:49 +0000 (17:41 +0000)
33 files changed:
doc/ChangeLog
g10/ChangeLog
g10/gpg.c
jnlib/ChangeLog
jnlib/argparse.c
jnlib/argparse.h
po/be.po
po/ca.po
po/cs.po
po/da.po
po/de.po
po/el.po
po/eo.po
po/es.po
po/et.po
po/fi.po
po/fr.po
po/gl.po
po/hu.po
po/id.po
po/it.po
po/ja.po
po/nb.po
po/pl.po
po/pt.po
po/pt_BR.po
po/ro.po
po/ru.po
po/sk.po
po/sv.po
po/tr.po
po/zh_CN.po
po/zh_TW.po

index 3f3bc68..82e728f 100644 (file)
@@ -18,7 +18,7 @@
 
 2008-08-30  Werner Koch  <wk@g10code.com>
 
-       * yat2m.c (write_th): Print a not ethat this is generated source.
+       * yat2m.c (write_th): Print a notthat this is generated source.
        (VERSION): Bump up to 1.0.
 
 2008-07-30  Werner Koch  <wk@g10code.com>
index 130ebd5..c098a20 100644 (file)
@@ -1,3 +1,7 @@
+2008-11-11  Werner Koch  <wk@g10code.com>
+
+       * gpg.c (opts): Use new ARGPARSE macros for clarity.
+
 2008-10-24  Werner Koch  <wk@g10code.com>
 
        * keyedit.c (change_passphrase): Clear passphrase cache.
index 8349365..b5b27f7 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -367,358 +367,387 @@ enum cmd_and_opt_values
 
 static ARGPARSE_OPTS opts[] = {
 
-    { 300, NULL, 0, N_("@Commands:\n ") },
-
-    { aSign, "sign",      256, N_("|[file]|make a signature")},
-    { aClearsign, "clearsign", 256, N_("|[file]|make a clear text signature")},
-    { aDetachedSign, "detach-sign", 256, N_("make a detached signature")},
-    { aEncr, "encrypt",   256, N_("encrypt data")},
-    { aEncrFiles, "encrypt-files", 256, "@"},
-    { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")},
-    { aStore, "store",     256, "@"},
-    { aDecrypt, "decrypt",   256, N_("decrypt data (default)")},
-    { aDecryptFiles, "decrypt-files", 256, "@"},
-    { aVerify, "verify"   , 256, N_("verify a signature")},
-    { aVerifyFiles, "verify-files" , 256, "@" },
-    { aListKeys, "list-keys", 256, N_("list keys")},
-    { aListKeys, "list-public-keys", 256, "@" },
-    { aListSigs, "list-sigs", 256, N_("list keys and signatures")},
-    { aCheckKeys, "check-sigs",256, N_("list and check key signatures")},
-    { oFingerprint, "fingerprint", 256, N_("list keys and fingerprints")},
-    { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")},
-    { aKeygen,    "gen-key",  256, N_("generate a new key pair")},
-    { aDeleteKeys,"delete-keys",256,N_("remove keys from the public keyring")},
-    { aDeleteSecretKeys, "delete-secret-keys",256,
-                                   N_("remove keys from the secret keyring")},
-    { aSignKey,  "sign-key"   ,256, N_("sign a key")},
-    { aLSignKey, "lsign-key"  ,256, N_("sign a key locally")},
-    { aEditKey,  "edit-key"   ,256, N_("sign or edit a key")},
-    { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")},
-    { aDesigRevoke, "desig-revoke",256, "@" },
-    { aExport, "export"           , 256, N_("export keys") },
-    { aSendKeys, "send-keys"     , 256, N_("export keys to a key server") },
-    { aRecvKeys, "recv-keys"     , 256, N_("import keys from a key server") },
-    { aSearchKeys, "search-keys" , 256,
-                                    N_("search for keys on a key server") },
-    { aRefreshKeys, "refresh-keys", 256,
-                                    N_("update all keys from a keyserver")},
-    { aLocateKeys, "locate-keys", 256, "@"},
-    { aFetchKeys, "fetch-keys" , 256, "@" },
-    { aExportSecret, "export-secret-keys" , 256, "@" },
-    { aExportSecretSub, "export-secret-subkeys" , 256, "@" },
-    { aImport, "import",      256     , N_("import/merge keys")},
-    { aFastImport, "fast-import",  256 , "@"},
+  ARGPARSE_group (300, N_("@Commands:\n ")),
+
+  ARGPARSE_c (aSign, "sign", N_("|[file]|make a signature")),
+  ARGPARSE_c (aClearsign, "clearsign", N_("|[file]|make a clear text signature")),
+  ARGPARSE_c (aDetachedSign, "detach-sign", N_("make a detached signature")),
+  ARGPARSE_c (aEncr, "encrypt",   N_("encrypt data")),
+  ARGPARSE_c (aEncrFiles, "encrypt-files", "@"),
+  ARGPARSE_c (aSym, "symmetric", N_("encryption only with symmetric cipher")),
+  ARGPARSE_c (aStore, "store",     "@"),
+  ARGPARSE_c (aDecrypt, "decrypt",   N_("decrypt data (default)")),
+  ARGPARSE_c (aDecryptFiles, "decrypt-files", "@"),
+  ARGPARSE_c (aVerify, "verify"   , N_("verify a signature")),
+  ARGPARSE_c (aVerifyFiles, "verify-files" , "@" ),
+  ARGPARSE_c (aListKeys, "list-keys", N_("list keys")),
+  ARGPARSE_c (aListKeys, "list-public-keys", "@" ),
+  ARGPARSE_c (aListSigs, "list-sigs", N_("list keys and signatures")),
+  ARGPARSE_c (aCheckKeys, "check-sigs",N_("list and check key signatures")),
+  ARGPARSE_c (oFingerprint, "fingerprint", N_("list keys and fingerprints")),
+  ARGPARSE_c (aListSecretKeys, "list-secret-keys", N_("list secret keys")),
+  ARGPARSE_c (aKeygen,    "gen-key",  N_("generate a new key pair")),
+  ARGPARSE_c (aDeleteKeys,"delete-keys", 
+              N_("remove keys from the public keyring")),
+  ARGPARSE_c (aDeleteSecretKeys, "delete-secret-keys",
+              N_("remove keys from the secret keyring")),
+  ARGPARSE_c (aSignKey,  "sign-key"   ,N_("sign a key")),
+  ARGPARSE_c (aLSignKey, "lsign-key"  ,N_("sign a key locally")),
+  ARGPARSE_c (aEditKey,  "edit-key"   ,N_("sign or edit a key")),
+  ARGPARSE_c (aGenRevoke, "gen-revoke",N_("generate a revocation certificate")),
+  ARGPARSE_c (aDesigRevoke, "desig-revoke","@" ),
+  ARGPARSE_c (aExport, "export"           , N_("export keys") ),
+  ARGPARSE_c (aSendKeys, "send-keys"     , N_("export keys to a key server") ),
+  ARGPARSE_c (aRecvKeys, "recv-keys"     , N_("import keys from a key server") ),
+  ARGPARSE_c (aSearchKeys, "search-keys" , 
+              N_("search for keys on a key server") ),
+  ARGPARSE_c (aRefreshKeys, "refresh-keys", 
+              N_("update all keys from a keyserver")),
+  ARGPARSE_c (aLocateKeys, "locate-keys", "@"),
+  ARGPARSE_c (aFetchKeys, "fetch-keys" , "@" ),
+  ARGPARSE_c (aExportSecret, "export-secret-keys" , "@" ),
+  ARGPARSE_c (aExportSecretSub, "export-secret-subkeys" , "@" ),
+  ARGPARSE_c (aImport, "import", N_("import/merge keys")),
+  ARGPARSE_c (aFastImport, "fast-import", "@"),
 #ifdef ENABLE_CARD_SUPPORT
-    { aCardStatus,  "card-status", 256, N_("print the card status")},
-    { aCardEdit,   "card-edit",  256, N_("change data on a card")},
-    { aChangePIN,  "change-pin", 256, N_("change a card's PIN")},
+  ARGPARSE_c (aCardStatus,  "card-status", N_("print the card status")),
+  ARGPARSE_c (aCardEdit,   "card-edit",  N_("change data on a card")),
+  ARGPARSE_c (aChangePIN,  "change-pin", N_("change a card's PIN")),
 #endif
-    { aListConfig, "list-config", 256, "@"},
-    { aGPGConfList, "gpgconf-list", 256, "@" },
-    { aGPGConfTest, "gpgconf-test", 256, "@" },
-    { aListPackets, "list-packets",256, "@"},
-    { aExportOwnerTrust, "export-ownertrust", 256, "@"},
-    { aImportOwnerTrust, "import-ownertrust", 256, "@"},
-    { aUpdateTrustDB,
-             "update-trustdb",0 , N_("update the trust database")},
-    { aCheckTrustDB, "check-trustdb", 0, "@"},
-    { aFixTrustDB, "fix-trustdb", 0, "@"},
-    { aDeArmor, "dearmor", 256, "@"},
-    { aDeArmor, "dearmour", 256, "@"},
-    { aEnArmor, "enarmor", 256, "@"},
-    { aEnArmor, "enarmour", 256, "@"},
-    { aPrintMD,  "print-md" , 256, N_("|algo [files]|print message digests")},
-    { aPrimegen, "gen-prime" , 256, "@" },
-    { aGenRandom, "gen-random", 256, "@" },
-    { aServer,   "server",      256, N_("run in server mode")},
-
-    { 301, NULL, 0, N_("@\nOptions:\n ") },
-
-    { oArmor, "armor",     0, N_("create ascii armored output")},
-    { oArmor, "armour",     0, "@" },
-    { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")},
-    { oHiddenRecipient, "hidden-recipient", 2, "@" },
-    { oRecipient, "remote-user", 2, "@"},  /* old option name */
-    { oDefRecipient, "default-recipient", 2, "@"},
-    { oDefRecipientSelf, "default-recipient-self", 0, "@"},
-    { oNoDefRecipient, "no-default-recipient", 0, "@" },
-    { oTempDir, "temp-directory", 2, "@" },
-    { oExecPath, "exec-path", 2, "@" },
-    { oEncryptTo, "encrypt-to", 2, "@" },
-    { oHiddenEncryptTo, "hidden-encrypt-to", 2, "@" },
-    { oNoEncryptTo, "no-encrypt-to", 0, "@" },
-    { oLocalUser, "local-user",2, N_("use this user-id to sign or decrypt")},
-    { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") },
-    { oCompressLevel, "compress-level", 1, "@" },
-    { oBZ2CompressLevel, "bzip2-compress-level", 1, "@" },
-    { oBZ2DecompressLowmem, "bzip2-decompress-lowmem", 0, "@" },
-    { oTextmodeShort, NULL,   0, "@"},
-    { oTextmode, "textmode",  0, N_("use canonical text mode")},
-    { oNoTextmode, "no-textmode",  0, "@"},
-    { oExpert, "expert",   0, "@"},
-    { oNoExpert, "no-expert",   0, "@"},
-    { oDefSigExpire, "default-sig-expire", 2, "@"},
-    { oAskSigExpire, "ask-sig-expire",   0, "@"},
-    { oNoAskSigExpire, "no-ask-sig-expire",   0, "@"},
-    { oDefCertExpire, "default-cert-expire", 2, "@"},
-    { oAskCertExpire, "ask-cert-expire",   0, "@"},
-    { oNoAskCertExpire, "no-ask-cert-expire",   0, "@"},
-    { oDefCertLevel, "default-cert-level", 1, "@"},
-    { oMinCertLevel, "min-cert-level", 1, "@"},
-    { oAskCertLevel, "ask-cert-level",   0, "@"},
-    { oNoAskCertLevel, "no-ask-cert-level",   0, "@"},
-    { oOutput, "output",    2, N_("|FILE|write output to FILE")},
-    { oMaxOutput, "max-output", 16|4, "@" },
-    { oVerbose, "verbose",   0, N_("verbose") },
-    { oQuiet,  "quiet",   0, "@"},
-    { oNoTTY, "no-tty", 0, "@"},
-    { oForceV3Sigs, "force-v3-sigs", 0, "@"},
-    { oNoForceV3Sigs, "no-force-v3-sigs", 0, "@"},
-    { oForceV4Certs, "force-v4-certs", 0, "@"},
-    { oNoForceV4Certs, "no-force-v4-certs", 0, "@"},
-    { oForceMDC, "force-mdc", 0, "@"},
-    { oNoForceMDC, "no-force-mdc", 0, "@" },
-    { oDisableMDC, "disable-mdc", 0, "@"},
-    { oNoDisableMDC, "no-disable-mdc", 0, "@" },
-    { oDryRun, "dry-run",   0, N_("do not make any changes") },
-    { oInteractive, "interactive", 0, N_("prompt before overwriting") },
-    { oUseAgent, "use-agent",0, "@"},
-    { oNoUseAgent, "no-use-agent",0, "@"},
-    { oGpgAgentInfo, "gpg-agent-info",2, "@"},
-    { oBatch, "batch", 0, "@"},
-    { oAnswerYes, "yes", 0, "@"},
-    { oAnswerNo, "no", 0, "@"},
-    { oKeyring, "keyring", 2, "@"},
-    { oPrimaryKeyring, "primary-keyring",2, "@" },
-    { oSecretKeyring, "secret-keyring", 2, "@"},
-    { oShowKeyring, "show-keyring", 0, "@"},
-    { oDefaultKey, "default-key", 2, "@"},
-    { oKeyServer, "keyserver", 2, "@"},
-    { oKeyServerOptions, "keyserver-options",2,"@"},
-    { oImportOptions, "import-options",2,"@"},
-    { oExportOptions, "export-options",2,"@"},
-    { oListOptions, "list-options",2,"@"},
-    { oVerifyOptions, "verify-options",2,"@"},
-    { oDisplayCharset, "display-charset", 2, "@"},
-    { oDisplayCharset, "charset", 2, "@"},
-    { oOptions, "options", 2, "@"},
-    { oDebug, "debug"     ,4|16, "@"},
-    { oDebugLevel, "debug-level" ,2, "@"},
-    { oDebugAll, "debug-all" ,0, "@"},
-    { oStatusFD, "status-fd" ,1, "@"},
-    { oStatusFile, "status-file" ,2, "@"},
-    { oAttributeFD, "attribute-fd" ,1, "@" },
-    { oAttributeFile, "attribute-file" ,2, "@" },
-    { oNoop, "sk-comments", 0,   "@"},
-    { oNoop, "no-sk-comments", 0,   "@"},
-    { oCompletesNeeded, "completes-needed", 1, "@"},
-    { oMarginalsNeeded, "marginals-needed", 1, "@"},
-    { oMaxCertDepth,   "max-cert-depth", 1, "@" },
-    { oTrustedKey, "trusted-key", 2, "@"},
-    { oLoadExtension, "load-extension", 2, "@"},
-    { oGnuPG, "gnupg",   0, "@"},
-    { oGnuPG, "no-pgp2", 0, "@"},
-    { oGnuPG, "no-pgp6", 0, "@"},
-    { oGnuPG, "no-pgp7", 0, "@"},
-    { oGnuPG, "no-pgp8", 0, "@"},
-    { oRFC1991, "rfc1991",   0, "@"},
-    { oRFC2440, "rfc2440", 0, "@" },
-    { oRFC4880, "rfc4880", 0, "@" },
-    { oOpenPGP, "openpgp", 0, N_("use strict OpenPGP behavior")},
-    { oPGP2, "pgp2", 0, N_("generate PGP 2.x compatible messages")},
-    { oPGP6, "pgp6", 0, "@"},
-    { oPGP7, "pgp7", 0, "@"},
-    { oPGP8, "pgp8", 0, "@"},
-    { oRFC2440Text, "rfc2440-text", 0, "@"},
-    { oNoRFC2440Text, "no-rfc2440-text", 0, "@"},
-    { oS2KMode, "s2k-mode", 1, "@"},
-    { oS2KDigest, "s2k-digest-algo", 2, "@"},
-    { oS2KCipher, "s2k-cipher-algo", 2, "@"},
-    { oS2KCount, "s2k-count", 1, "@"},
-    { oSimpleSKChecksum, "simple-sk-checksum", 0, "@"},
-    { oCipherAlgo, "cipher-algo", 2, "@"},
-    { oDigestAlgo, "digest-algo", 2, "@"},
-    { oCertDigestAlgo, "cert-digest-algo", 2 , "@" },
-    { oCompressAlgo,"compress-algo", 2, "@"},
-    { oCompressAlgo, "compression-algo", 2, "@"}, /* Alias */
-    { oThrowKeyids, "throw-keyid", 0, "@"},
-    { oThrowKeyids, "throw-keyids", 0, "@"},
-    { oNoThrowKeyids, "no-throw-keyid", 0, "@" },
-    { oNoThrowKeyids, "no-throw-keyids", 0, "@" },
-    { oShowPhotos,   "show-photos", 0, "@" },
-    { oNoShowPhotos, "no-show-photos", 0, "@" },
-    { oPhotoViewer,  "photo-viewer", 2, "@" },
-    { oSetNotation,  "set-notation", 2, "@" },
-    { oSetNotation,  "notation-data", 2, "@" }, /* Alias */
-    { oSigNotation,  "sig-notation", 2, "@" },
-    { oCertNotation, "cert-notation", 2, "@" },
-
-    { 302, NULL, 0, N_(
+  ARGPARSE_c (aListConfig, "list-config", "@"),
+  ARGPARSE_c (aGPGConfList, "gpgconf-list", "@" ),
+  ARGPARSE_c (aGPGConfTest, "gpgconf-test", "@" ),
+  ARGPARSE_c (aListPackets, "list-packets","@"),
+  ARGPARSE_c (aExportOwnerTrust, "export-ownertrust", "@"),
+  ARGPARSE_c (aImportOwnerTrust, "import-ownertrust", "@"),
+  ARGPARSE_c (aUpdateTrustDB,"update-trustdb",
+              N_("update the trust database")),
+  ARGPARSE_c (aCheckTrustDB, "check-trustdb", "@"),
+  ARGPARSE_c (aFixTrustDB, "fix-trustdb", "@"),
+  ARGPARSE_c (aDeArmor, "dearmor", "@"),
+  ARGPARSE_c (aDeArmor, "dearmour", "@"),
+  ARGPARSE_c (aEnArmor, "enarmor", "@"),
+  ARGPARSE_c (aEnArmor, "enarmour", "@"),
+  ARGPARSE_c (aPrintMD, "print-md", N_("|algo [files]|print message digests")),
+  ARGPARSE_c (aPrimegen, "gen-prime", "@" ),
+  ARGPARSE_c (aGenRandom,"gen-random", "@" ),
+  ARGPARSE_c (aServer,   "server",  N_("run in server mode")),
+
+  ARGPARSE_group (301, N_("@\nOptions:\n ")),
+
+  ARGPARSE_s_n (oArmor, "armor", N_("create ascii armored output")),
+  ARGPARSE_s_n (oArmor, "armour", "@"),
+
+  ARGPARSE_s_s (oRecipient, "recipient", N_("|NAME|encrypt for NAME")),
+  ARGPARSE_s_s (oHiddenRecipient, "hidden-recipient", "@"),
+  ARGPARSE_s_s (oRecipient, "remote-user", "@"),  /* (old option name) */
+  ARGPARSE_s_s (oDefRecipient, "default-recipient", "@"),
+  ARGPARSE_s_n (oDefRecipientSelf,  "default-recipient-self", "@"),
+  ARGPARSE_s_n (oNoDefRecipient, "no-default-recipient", "@"),
+
+  ARGPARSE_s_s (oTempDir,  "temp-directory", "@"),
+  ARGPARSE_s_s (oExecPath, "exec-path", "@"),
+  ARGPARSE_s_s (oEncryptTo,      "encrypt-to", "@"),
+  ARGPARSE_s_n (oNoEncryptTo, "no-encrypt-to", "@"),
+  ARGPARSE_s_s (oHiddenEncryptTo, "hidden-encrypt-to", "@"),
+  ARGPARSE_s_s (oLocalUser, "local-user",
+                N_("use this user-id to sign or decrypt")),
+
+  ARGPARSE_s_i (oCompress, NULL, N_("|N|set compress level N (0 disables)")),
+  ARGPARSE_s_i (oCompressLevel, "compress-level", "@"),
+  ARGPARSE_s_i (oBZ2CompressLevel, "bzip2-compress-level", "@"),
+  ARGPARSE_s_n (oBZ2DecompressLowmem, "bzip2-decompress-lowmem", "@"),
+
+  ARGPARSE_s_n (oTextmodeShort, NULL, "@"),
+  ARGPARSE_s_n (oTextmode,      "textmode", N_("use canonical text mode")),
+  ARGPARSE_s_n (oNoTextmode, "no-textmode", "@"),
+
+  ARGPARSE_s_n (oExpert,      "expert", "@"),
+  ARGPARSE_s_n (oNoExpert, "no-expert", "@"),
+
+  ARGPARSE_s_s (oDefSigExpire, "default-sig-expire", "@"),
+  ARGPARSE_s_n (oAskSigExpire,      "ask-sig-expire", "@"),
+  ARGPARSE_s_n (oNoAskSigExpire, "no-ask-sig-expire", "@"),
+  ARGPARSE_s_s (oDefCertExpire, "default-cert-expire", "@"),
+  ARGPARSE_s_n (oAskCertExpire,      "ask-cert-expire", "@"),
+  ARGPARSE_s_n (oNoAskCertExpire, "no-ask-cert-expire", "@"),
+  ARGPARSE_s_i (oDefCertLevel, "default-cert-level", "@"),
+  ARGPARSE_s_i (oMinCertLevel, "min-cert-level", "@"),
+  ARGPARSE_s_n (oAskCertLevel,      "ask-cert-level", "@"),
+  ARGPARSE_s_n (oNoAskCertLevel, "no-ask-cert-level", "@"),
+
+  ARGPARSE_s_s (oOutput, "output", N_("|FILE|write output to FILE")),
+  ARGPARSE_p_u (oMaxOutput, "max-output", "@"),
+
+  ARGPARSE_s_n (oVerbose, "verbose", N_("verbose")),
+  ARGPARSE_s_n (oQuiet,          "quiet",   "@"),
+  ARGPARSE_s_n (oNoTTY,   "no-tty",  "@"),
+
+  ARGPARSE_s_n (oForceV3Sigs,      "force-v3-sigs", "@"),
+  ARGPARSE_s_n (oNoForceV3Sigs, "no-force-v3-sigs", "@"),
+  ARGPARSE_s_n (oForceV4Certs,     "force-v4-certs", "@"),
+  ARGPARSE_s_n (oNoForceV4Certs, "no-force-v4-certs", "@"),
+  ARGPARSE_s_n (oForceMDC, "force-mdc", "@"),
+  ARGPARSE_s_n (oNoForceMDC, "no-force-mdc", "@"),
+  ARGPARSE_s_n (oDisableMDC, "disable-mdc", "@"),
+  ARGPARSE_s_n (oNoDisableMDC, "no-disable-mdc", "@"),
+
+  ARGPARSE_s_n (oDryRun, "dry-run", N_("do not make any changes")),
+  ARGPARSE_s_n (oInteractive, "interactive", N_("prompt before overwriting")),
+
+  ARGPARSE_s_n (oUseAgent,      "use-agent", "@"),
+  ARGPARSE_s_n (oNoUseAgent, "no-use-agent", "@"),
+  ARGPARSE_s_s (oGpgAgentInfo, "gpg-agent-info", "@"),
+
+  ARGPARSE_s_n (oBatch, "batch", "@"),
+  ARGPARSE_s_n (oAnswerYes, "yes", "@"),
+  ARGPARSE_s_n (oAnswerNo, "no", "@"),
+  ARGPARSE_s_s (oKeyring, "keyring", "@"),
+  ARGPARSE_s_s (oPrimaryKeyring, "primary-keyring", "@"),
+  ARGPARSE_s_s (oSecretKeyring, "secret-keyring", "@"),
+  ARGPARSE_s_n (oShowKeyring, "show-keyring", "@"),
+  ARGPARSE_s_s (oDefaultKey, "default-key", "@"),
+
+  ARGPARSE_s_s (oKeyServer, "keyserver", "@"),
+  ARGPARSE_s_s (oKeyServerOptions, "keyserver-options", "@"),
+  ARGPARSE_s_s (oImportOptions, "import-options", "@"),
+  ARGPARSE_s_s (oExportOptions, "export-options", "@"),
+  ARGPARSE_s_s (oListOptions,   "list-options", "@"),
+  ARGPARSE_s_s (oVerifyOptions, "verify-options", "@"),
+
+  ARGPARSE_s_s (oDisplayCharset, "display-charset", "@"),
+  ARGPARSE_s_s (oDisplayCharset, "charset", "@"),
+  ARGPARSE_s_s (oOptions, "options", "@"),
+
+  ARGPARSE_p_u (oDebug, "debug", "@"),
+  ARGPARSE_s_s (oDebugLevel, "debug-level", "@"),
+  ARGPARSE_s_n (oDebugAll, "debug-all", "@"),
+  ARGPARSE_s_i (oStatusFD, "status-fd", "@"),
+  ARGPARSE_s_s (oStatusFile, "status-file", "@"),
+  ARGPARSE_s_i (oAttributeFD, "attribute-fd", "@"),
+  ARGPARSE_s_s (oAttributeFile, "attribute-file", "@"),
+
+  ARGPARSE_s_n (oNoop, "sk-comments", "@"),
+  ARGPARSE_s_n (oNoop, "no-sk-comments", "@"),
+
+  ARGPARSE_s_i (oCompletesNeeded, "completes-needed", "@"),
+  ARGPARSE_s_i (oMarginalsNeeded, "marginals-needed", "@"),
+  ARGPARSE_s_i (oMaxCertDepth, "max-cert-depth", "@" ),
+  ARGPARSE_s_s (oTrustedKey, "trusted-key", "@"),
+
+  ARGPARSE_s_s (oLoadExtension, "load-extension", "@"),  /* Dummy.  */
+
+  ARGPARSE_s_n (oGnuPG, "gnupg",   "@"),
+  ARGPARSE_s_n (oGnuPG, "no-pgp2", "@"),
+  ARGPARSE_s_n (oGnuPG, "no-pgp6", "@"),
+  ARGPARSE_s_n (oGnuPG, "no-pgp7", "@"),
+  ARGPARSE_s_n (oGnuPG, "no-pgp8", "@"),
+  ARGPARSE_s_n (oRFC1991, "rfc1991", "@"),
+  ARGPARSE_s_n (oRFC2440, "rfc2440", "@"),
+  ARGPARSE_s_n (oRFC4880, "rfc4880", "@"),
+  ARGPARSE_s_n (oOpenPGP, "openpgp", N_("use strict OpenPGP behavior")),
+  ARGPARSE_s_n (oPGP2, "pgp2", N_("generate PGP 2.x compatible messages")),
+  ARGPARSE_s_n (oPGP6, "pgp6", "@"),
+  ARGPARSE_s_n (oPGP7, "pgp7", "@"),
+  ARGPARSE_s_n (oPGP8, "pgp8", "@"),
+
+  ARGPARSE_s_n (oRFC2440Text,      "rfc2440-text", "@"),
+  ARGPARSE_s_n (oNoRFC2440Text, "no-rfc2440-text", "@"),
+  ARGPARSE_s_i (oS2KMode, "s2k-mode", "@"),
+  ARGPARSE_s_s (oS2KDigest, "s2k-digest-algo", "@"),
+  ARGPARSE_s_s (oS2KCipher, "s2k-cipher-algo", "@"),
+  ARGPARSE_s_i (oS2KCount, "s2k-count", "@"),
+  ARGPARSE_s_n (oSimpleSKChecksum, "simple-sk-checksum", "@"),
+  ARGPARSE_s_s (oCipherAlgo, "cipher-algo", "@"),
+  ARGPARSE_s_s (oDigestAlgo, "digest-algo", "@"),
+  ARGPARSE_s_s (oCertDigestAlgo, "cert-digest-algo", "@"),
+  ARGPARSE_s_s (oCompressAlgo,"compress-algo", "@"),
+  ARGPARSE_s_s (oCompressAlgo, "compression-algo", "@"), /* Alias */
+  ARGPARSE_s_n (oThrowKeyids, "throw-keyid", "@"),
+  ARGPARSE_s_n (oThrowKeyids, "throw-keyids", "@"),
+  ARGPARSE_s_n (oNoThrowKeyids, "no-throw-keyid", "@"),
+  ARGPARSE_s_n (oNoThrowKeyids, "no-throw-keyids", "@"),
+  ARGPARSE_s_n (oShowPhotos,   "show-photos", "@"),
+  ARGPARSE_s_n (oNoShowPhotos, "no-show-photos", "@"),
+  ARGPARSE_s_s (oPhotoViewer,  "photo-viewer", "@"),
+  ARGPARSE_s_s (oSetNotation,  "set-notation", "@"),
+  ARGPARSE_s_s (oSetNotation,  "notation-data", "@"), /* Alias */
+  ARGPARSE_s_s (oSigNotation,  "sig-notation", "@"),
+  ARGPARSE_s_s (oCertNotation, "cert-notation", "@"),
+
+  ARGPARSE_group (302, N_(
   "@\n(See the man page for a complete listing of all commands and options)\n"
-                     )},
+                     )),
 
-    { 303, NULL, 0, N_("@\nExamples:\n\n"
+  ARGPARSE_group (303, N_("@\nExamples:\n\n"
     " -se -r Bob [file]          sign and encrypt for user Bob\n"
     " --clearsign [file]         make a clear text signature\n"
     " --detach-sign [file]       make a detached signature\n"
     " --list-keys [names]        show keys\n"
-    " --fingerprint [names]      show fingerprints\n"  ) },
-
-  /* hidden options */
-    { aPrintMDs, "print-mds" , 256, "@"}, /* old */
-    { aListTrustDB, "list-trustdb",0 , "@"},
-    /* Not yet used */
-    /* { aListTrustPath, "list-trust-path",0, "@"}, */
-    { oPasswd, "passphrase",2, "@" },
-    { oPasswdFD, "passphrase-fd",1, "@" },
-    { oPasswdFile, "passphrase-file",2, "@" },
-    { oPasswdRepeat, "passphrase-repeat", 1, "@"},
-    { oCommandFD, "command-fd",1, "@" },
-    { oCommandFile, "command-file",2, "@" },
-    { oQuickRandom, "debug-quick-random", 0, "@"},
-    { oNoVerbose, "no-verbose", 0, "@"},
-    { oTrustDBName, "trustdb-name", 2, "@" },
-    { oNoSecmemWarn, "no-secmem-warning", 0, "@" },
-    { oRequireSecmem,"require-secmem", 0, "@" },
-    { oNoRequireSecmem,"no-require-secmem", 0, "@" },
-    { oNoPermissionWarn, "no-permission-warning", 0, "@" },
-    { oNoMDCWarn, "no-mdc-warning", 0, "@" },
-    { oNoArmor, "no-armor",   0, "@"},
-    { oNoArmor, "no-armour",   0, "@"},
-    { oNoDefKeyring, "no-default-keyring", 0, "@" },
-    { oNoGreeting, "no-greeting", 0, "@" },
-    { oNoOptions, "no-options", 0, "@" }, /* shortcut for --options /dev/null */
-    { oHomedir, "homedir", 2, "@" },   /* defaults to "~/.gnupg" */
-    { oNoBatch, "no-batch", 0, "@" },
-    { oWithColons, "with-colons", 0, "@"},
-    { oWithKeyData,"with-key-data", 0, "@"},
-    { oWithSigList,"with-sig-list", 0, "@"},
-    { oWithSigCheck,"with-sig-check", 0, "@"},
-    { aListKeys, "list-key", 0, "@" }, /* alias */
-    { aListSigs, "list-sig", 0, "@" }, /* alias */
-    { aCheckKeys, "check-sig",0, "@" }, /* alias */
-    { oSkipVerify, "skip-verify",0, "@" },
-    { oCompressKeys, "compress-keys",0, "@"},
-    { oCompressSigs, "compress-sigs",0, "@"},
-    { oDefCertLevel, "default-cert-check-level", 1, "@"}, /* Old option */
-    { oAlwaysTrust, "always-trust", 0, "@"},
-    { oTrustModel, "trust-model", 2, "@"},
-    { oForceOwnertrust, "force-ownertrust", 2, "@"},
-    { oSetFilename, "set-filename", 2, "@" },
-    { oForYourEyesOnly, "for-your-eyes-only", 0, "@" },
-    { oNoForYourEyesOnly, "no-for-your-eyes-only", 0, "@" },
-    { oSetPolicyURL, "set-policy-url", 2, "@" },
-    { oSigPolicyURL, "sig-policy-url", 2, "@" },
-    { oCertPolicyURL, "cert-policy-url", 2, "@" },
-    { oShowPolicyURL, "show-policy-url", 0, "@" },
-    { oNoShowPolicyURL, "no-show-policy-url", 0, "@" },
-    { oSigKeyserverURL, "sig-keyserver-url", 2, "@" },
-    { oShowNotation, "show-notation", 0, "@" },
-    { oNoShowNotation, "no-show-notation", 0, "@" },
-    { oComment, "comment", 2, "@" },
-    { oDefaultComment, "default-comment", 0, "@" },
-    { oNoComments, "no-comments", 0, "@" },
-    { oEmitVersion, "emit-version", 0, "@"},
-    { oNoEmitVersion, "no-emit-version", 0, "@"},
-    { oNoEmitVersion, "no-version", 0, "@"}, /* alias */
-    { oNotDashEscaped, "not-dash-escaped", 0, "@" },
-    { oEscapeFrom, "escape-from-lines", 0, "@" },
-    { oNoEscapeFrom, "no-escape-from-lines", 0, "@" },
-    { oLockOnce, "lock-once", 0, "@" },
-    { oLockMultiple, "lock-multiple", 0, "@" },
-    { oLockNever, "lock-never", 0, "@" },
-    { oLoggerFD, "logger-fd",1, "@" },
-    { oLoggerFile, "log-file",2, "@" },
-    { oLoggerFile, "logger-file",2, "@" },  /* For 1.4 compatibility.  */
-    { oUseEmbeddedFilename, "use-embedded-filename", 0, "@" },
-    { oNoUseEmbeddedFilename, "no-use-embedded-filename", 0, "@" },
-    { oUtf8Strings, "utf8-strings", 0, "@" },
-    { oNoUtf8Strings, "no-utf8-strings", 0, "@" },
-    { oWithFingerprint, "with-fingerprint", 0, "@" },
-    { oDisableCipherAlgo,  "disable-cipher-algo", 2, "@" },
-    { oDisablePubkeyAlgo,  "disable-pubkey-algo", 2, "@" },
-    { oAllowNonSelfsignedUID, "allow-non-selfsigned-uid", 0, "@" },
-    { oNoAllowNonSelfsignedUID, "no-allow-non-selfsigned-uid", 0, "@" },
-    { oAllowFreeformUID, "allow-freeform-uid", 0, "@" },
-    { oNoAllowFreeformUID, "no-allow-freeform-uid", 0, "@" },
-    { oNoLiteral, "no-literal", 0, "@" },
-    { oSetFilesize, "set-filesize", 20, "@" },
-    { oHonorHttpProxy,"honor-http-proxy", 0, "@" },
-    { oFastListMode,"fast-list-mode", 0, "@" },
-    { oFixedListMode,"fixed-list-mode", 0, "@" },
-    { oListOnly, "list-only", 0, "@"},
-    { oIgnoreTimeConflict, "ignore-time-conflict", 0, "@" },
-    { oIgnoreValidFrom,    "ignore-valid-from",    0, "@" },
-    { oIgnoreCrcError, "ignore-crc-error", 0,"@" },
-    { oIgnoreMDCError, "ignore-mdc-error", 0,"@" },
-    { oShowSessionKey, "show-session-key", 0, "@" },
-    { oOverrideSessionKey, "override-session-key", 2, "@" },
-    { oNoRandomSeedFile,  "no-random-seed-file", 0, "@" },
-    { oAutoKeyRetrieve, "auto-key-retrieve", 0, "@" },
-    { oNoAutoKeyRetrieve, "no-auto-key-retrieve", 0, "@" },
-    { oNoSigCache,         "no-sig-cache", 0, "@" },
-    { oNoSigCreateCheck,   "no-sig-create-check", 0, "@" },
-    { oAutoCheckTrustDB, "auto-check-trustdb", 0, "@"},
-    { oNoAutoCheckTrustDB, "no-auto-check-trustdb", 0, "@"},
-    { oMergeOnly,        "merge-only", 0, "@" },
-    { oAllowSecretKeyImport, "allow-secret-key-import", 0, "@" },
-    { oTryAllSecrets,  "try-all-secrets", 0, "@" },
-    { oEnableSpecialFilenames, "enable-special-filenames", 0, "@" },
-    { oNoExpensiveTrustChecks, "no-expensive-trust-checks", 0, "@" },
-    { aDeleteSecretAndPublicKeys, "delete-secret-and-public-keys",256, "@" },
-    { aRebuildKeydbCaches, "rebuild-keydb-caches", 256, "@"},
-    { oPreservePermissions, "preserve-permissions", 0, "@"},
-    { oDefaultPreferenceList,  "default-preference-list", 2, "@"},
-    { oDefaultKeyserverURL,  "default-keyserver-url", 2, "@"},
-    { oPersonalCipherPreferences,  "personal-cipher-preferences", 2, "@"},
-    { oPersonalDigestPreferences,  "personal-digest-preferences", 2, "@"},
-    { oPersonalCompressPreferences,  "personal-compress-preferences", 2, "@"},
-    /* Aliases.  I constantly mistype these, and assume other people
-       do as well. */
-    { oPersonalCipherPreferences, "personal-cipher-prefs", 2, "@"},
-    { oPersonalDigestPreferences, "personal-digest-prefs", 2, "@"},
-    { oPersonalCompressPreferences, "personal-compress-prefs", 2, "@"},
-    { oAgentProgram, "agent-program", 2 , "@" },
-    { oDisplay,    "display",     2, "@" },
-    { oTTYname,    "ttyname",     2, "@" },
-    { oTTYtype,    "ttytype",     2, "@" },
-    { oLCctype,    "lc-ctype",    2, "@" },
-    { oLCmessages, "lc-messages", 2, "@" },
-    { oXauthority, "xauthority",  2, "@" },
-    { oGroup,      "group",       2, "@" },
-    { oUnGroup,    "ungroup",     2, "@" },
-    { oNoGroups,   "no-groups",    0, "@" },
-    { oStrict,     "strict",      0, "@" },
-    { oNoStrict,   "no-strict",   0, "@" },
-    { oMangleDosFilenames, "mangle-dos-filenames", 0, "@" },
-    { oNoMangleDosFilenames, "no-mangle-dos-filenames", 0, "@" },
-    { oEnableProgressFilter, "enable-progress-filter", 0, "@" },
-    { oMultifile, "multifile", 0, "@" },
-    { oKeyidFormat, "keyid-format", 2, "@" },
-    { oExitOnStatusWriteError, "exit-on-status-write-error", 0, "@" },
-    { oLimitCardInsertTries, "limit-card-insert-tries", 1, "@"},
-
-    { oAllowMultisigVerification, "allow-multisig-verification", 0, "@"},
-    { oEnableDSA2, "enable-dsa2", 0, "@"},
-    { oDisableDSA2, "disable-dsa2", 0, "@"},
-    { oAllowMultipleMessages, "allow-multiple-messages", 0, "@"},
-    { oNoAllowMultipleMessages, "no-allow-multiple-messages", 0, "@"},
-
-    /* These two are aliases to help users of the PGP command line
-       product use gpg with minimal pain.  Many commands are common
-       already as they seem to have borrowed commands from us.  Now
-       I'm returning the favor. */
-    { oLocalUser, "sign-with", 2, "@" },
-    { oRecipient, "user", 2, "@" },
-
-    { oRequireCrossCert, "require-backsigs", 0, "@"},
-    { oRequireCrossCert, "require-cross-certification", 0, "@"},
-    { oNoRequireCrossCert, "no-require-backsigs", 0, "@"},
-    { oNoRequireCrossCert, "no-require-cross-certification", 0, "@"},
-    { oAutoKeyLocate, "auto-key-locate", 2, "@"},
-    { oNoAutoKeyLocate, "no-auto-key-locate", 0, "@"},
-
-    {0,NULL,0,NULL}
+    " --fingerprint [names]      show fingerprints\n")),
+
+  /* More hidden commands and options. */
+  ARGPARSE_c (aPrintMDs, "print-mds", "@"), /* old */
+  ARGPARSE_c (aListTrustDB, "list-trustdb", "@"),
+  /* Not yet used: 
+     ARGPARSE_c (aListTrustPath, "list-trust-path", "@"), */
+  ARGPARSE_c (aDeleteSecretAndPublicKeys,
+              "delete-secret-and-public-keys", "@"),
+  ARGPARSE_c (aRebuildKeydbCaches, "rebuild-keydb-caches", "@"),
+
+  ARGPARSE_s_s (oPasswd, "passphrase", "@"),
+  ARGPARSE_s_i (oPasswdFD, "passphrase-fd", "@"),
+  ARGPARSE_s_s (oPasswdFile, "passphrase-file", "@"),
+  ARGPARSE_s_i (oPasswdRepeat, "passphrase-repeat", "@"),
+  ARGPARSE_s_i (oCommandFD, "command-fd", "@"),
+  ARGPARSE_s_s (oCommandFile, "command-file", "@"),
+  ARGPARSE_s_n (oQuickRandom, "debug-quick-random", "@"),
+  ARGPARSE_s_n (oNoVerbose, "no-verbose", "@"),
+  ARGPARSE_s_s (oTrustDBName, "trustdb-name", "@"),
+  ARGPARSE_s_n (oNoSecmemWarn, "no-secmem-warning", "@"),
+  ARGPARSE_s_n (oRequireSecmem, "require-secmem", "@"),
+  ARGPARSE_s_n (oNoRequireSecmem, "no-require-secmem", "@"),
+  ARGPARSE_s_n (oNoPermissionWarn, "no-permission-warning", "@"),
+  ARGPARSE_s_n (oNoMDCWarn, "no-mdc-warning", "@"),
+  ARGPARSE_s_n (oNoArmor, "no-armor", "@"),
+  ARGPARSE_s_n (oNoArmor, "no-armour", "@"),
+  ARGPARSE_s_n (oNoDefKeyring, "no-default-keyring", "@"),
+  ARGPARSE_s_n (oNoGreeting, "no-greeting", "@"),
+  ARGPARSE_s_n (oNoOptions, "no-options", "@"), 
+  ARGPARSE_s_s (oHomedir, "homedir", "@"), 
+  ARGPARSE_s_n (oNoBatch, "no-batch", "@"),
+  ARGPARSE_s_n (oWithColons, "with-colons", "@"),
+  ARGPARSE_s_n (oWithKeyData,"with-key-data", "@"),
+  ARGPARSE_s_n (oWithSigList,"with-sig-list", "@"),
+  ARGPARSE_s_n (oWithSigCheck,"with-sig-check", "@"),
+  ARGPARSE_s_n (aListKeys, "list-key", "@"),   /* alias */
+  ARGPARSE_s_n (aListSigs, "list-sig", "@"),   /* alias */
+  ARGPARSE_s_n (aCheckKeys, "check-sig", "@"), /* alias */
+  ARGPARSE_s_n (oSkipVerify, "skip-verify", "@"),
+  ARGPARSE_s_n (oCompressKeys, "compress-keys", "@"),
+  ARGPARSE_s_n (oCompressSigs, "compress-sigs", "@"),
+  ARGPARSE_s_i (oDefCertLevel, "default-cert-check-level", "@"), /* old */
+  ARGPARSE_s_n (oAlwaysTrust, "always-trust", "@"),
+  ARGPARSE_s_s (oTrustModel, "trust-model", "@"),
+  ARGPARSE_s_s (oForceOwnertrust, "force-ownertrust", "@"),
+  ARGPARSE_s_s (oSetFilename, "set-filename", "@"),
+  ARGPARSE_s_n (oForYourEyesOnly, "for-your-eyes-only", "@"),
+  ARGPARSE_s_n (oNoForYourEyesOnly, "no-for-your-eyes-only", "@"),
+  ARGPARSE_s_s (oSetPolicyURL,  "set-policy-url", "@"),
+  ARGPARSE_s_s (oSigPolicyURL,  "sig-policy-url", "@"),
+  ARGPARSE_s_s (oCertPolicyURL, "cert-policy-url", "@"),
+  ARGPARSE_s_n (oShowPolicyURL,      "show-policy-url", "@"),
+  ARGPARSE_s_n (oNoShowPolicyURL, "no-show-policy-url", "@"),
+  ARGPARSE_s_s (oSigKeyserverURL, "sig-keyserver-url", "@"),
+  ARGPARSE_s_n (oShowNotation,      "show-notation", "@"),
+  ARGPARSE_s_n (oNoShowNotation, "no-show-notation", "@"),
+  ARGPARSE_s_s (oComment, "comment", "@"),
+  ARGPARSE_s_n (oDefaultComment, "default-comment", "@"),
+  ARGPARSE_s_n (oNoComments, "no-comments", "@"),
+  ARGPARSE_s_n (oEmitVersion,      "emit-version", "@"),
+  ARGPARSE_s_n (oNoEmitVersion, "no-emit-version", "@"),
+  ARGPARSE_s_n (oNoEmitVersion, "no-version", "@"), /* alias */
+  ARGPARSE_s_n (oNotDashEscaped, "not-dash-escaped", "@"),
+  ARGPARSE_s_n (oEscapeFrom,      "escape-from-lines", "@"),
+  ARGPARSE_s_n (oNoEscapeFrom, "no-escape-from-lines", "@"),
+  ARGPARSE_s_n (oLockOnce,     "lock-once", "@"),
+  ARGPARSE_s_n (oLockMultiple, "lock-multiple", "@"),
+  ARGPARSE_s_n (oLockNever,    "lock-never", "@"),
+  ARGPARSE_s_i (oLoggerFD,   "logger-fd", "@"),
+  ARGPARSE_s_s (oLoggerFile, "log-file", "@"),
+  ARGPARSE_s_s (oLoggerFile, "logger-file", "@"),  /* 1.4 compatibility.  */
+  ARGPARSE_s_n (oUseEmbeddedFilename,      "use-embedded-filename", "@"),
+  ARGPARSE_s_n (oNoUseEmbeddedFilename, "no-use-embedded-filename", "@"),
+  ARGPARSE_s_n (oUtf8Strings,      "utf8-strings", "@"),
+  ARGPARSE_s_n (oNoUtf8Strings, "no-utf8-strings", "@"),
+  ARGPARSE_s_n (oWithFingerprint, "with-fingerprint", "@"),
+  ARGPARSE_s_s (oDisableCipherAlgo,  "disable-cipher-algo", "@"),
+  ARGPARSE_s_s (oDisablePubkeyAlgo,  "disable-pubkey-algo", "@"),
+  ARGPARSE_s_n (oAllowNonSelfsignedUID,      "allow-non-selfsigned-uid", "@"),
+  ARGPARSE_s_n (oNoAllowNonSelfsignedUID, "no-allow-non-selfsigned-uid", "@"),
+  ARGPARSE_s_n (oAllowFreeformUID,      "allow-freeform-uid", "@"),
+  ARGPARSE_s_n (oNoAllowFreeformUID, "no-allow-freeform-uid", "@"),
+  ARGPARSE_s_n (oNoLiteral, "no-literal", "@"),
+  ARGPARSE_p_u (oSetFilesize, "set-filesize", "@"),
+  ARGPARSE_s_n (oHonorHttpProxy, "honor-http-proxy", "@"),
+  ARGPARSE_s_n (oFastListMode, "fast-list-mode", "@"),
+  ARGPARSE_s_n (oFixedListMode, "fixed-list-mode", "@"),
+  ARGPARSE_s_n (oListOnly, "list-only", "@"),
+  ARGPARSE_s_n (oIgnoreTimeConflict, "ignore-time-conflict", "@"),
+  ARGPARSE_s_n (oIgnoreValidFrom,    "ignore-valid-from", "@"),
+  ARGPARSE_s_n (oIgnoreCrcError, "ignore-crc-error", "@"),
+  ARGPARSE_s_n (oIgnoreMDCError, "ignore-mdc-error", "@"),
+  ARGPARSE_s_n (oShowSessionKey, "show-session-key", "@"),
+  ARGPARSE_s_s (oOverrideSessionKey, "override-session-key", "@"),
+  ARGPARSE_s_n (oNoRandomSeedFile,  "no-random-seed-file", "@"),
+  ARGPARSE_s_n (oAutoKeyRetrieve, "auto-key-retrieve", "@"),
+  ARGPARSE_s_n (oNoAutoKeyRetrieve, "no-auto-key-retrieve", "@"),
+  ARGPARSE_s_n (oNoSigCache,         "no-sig-cache", "@"),
+  ARGPARSE_s_n (oNoSigCreateCheck,   "no-sig-create-check", "@"),
+  ARGPARSE_s_n (oAutoCheckTrustDB, "auto-check-trustdb", "@"),
+  ARGPARSE_s_n (oNoAutoCheckTrustDB, "no-auto-check-trustdb", "@"),
+  ARGPARSE_s_n (oMergeOnly,      "merge-only", "@" ),
+  ARGPARSE_s_n (oAllowSecretKeyImport, "allow-secret-key-import", "@"),
+  ARGPARSE_s_n (oTryAllSecrets,  "try-all-secrets", "@"),
+  ARGPARSE_s_n (oEnableSpecialFilenames, "enable-special-filenames", "@"),
+  ARGPARSE_s_n (oNoExpensiveTrustChecks, "no-expensive-trust-checks", "@"),
+  ARGPARSE_s_n (oPreservePermissions, "preserve-permissions", "@"),
+  ARGPARSE_s_s (oDefaultPreferenceList,  "default-preference-list", "@"),
+  ARGPARSE_s_s (oDefaultKeyserverURL,  "default-keyserver-url", "@"),
+  ARGPARSE_s_s (oPersonalCipherPreferences, "personal-cipher-preferences","@"),
+  ARGPARSE_s_s (oPersonalDigestPreferences, "personal-digest-preferences","@"),
+  ARGPARSE_s_s (oPersonalCompressPreferences,
+                                         "personal-compress-preferences", "@"),
+
+  /* Aliases.  I constantly mistype these, and assume other people do
+     as well. */
+  ARGPARSE_s_s (oPersonalCipherPreferences, "personal-cipher-prefs", "@"),
+  ARGPARSE_s_s (oPersonalDigestPreferences, "personal-digest-prefs", "@"),
+  ARGPARSE_s_s (oPersonalCompressPreferences, "personal-compress-prefs", "@"),
+  ARGPARSE_s_s (oAgentProgram, "agent-program", "@"),
+  ARGPARSE_s_s (oDisplay,    "display",    "@"),
+  ARGPARSE_s_s (oTTYname,    "ttyname",    "@"),
+  ARGPARSE_s_s (oTTYtype,    "ttytype",    "@"),
+  ARGPARSE_s_s (oLCctype,    "lc-ctype",   "@"),
+  ARGPARSE_s_s (oLCmessages, "lc-messages","@"),
+  ARGPARSE_s_s (oXauthority, "xauthority", "@"),
+  ARGPARSE_s_s (oGroup,      "group",      "@"),
+  ARGPARSE_s_s (oUnGroup,    "ungroup",    "@"),
+  ARGPARSE_s_n (oNoGroups,   "no-groups",  "@"),
+  ARGPARSE_s_n (oStrict,     "strict",     "@"),
+  ARGPARSE_s_n (oNoStrict,   "no-strict",  "@"),
+  ARGPARSE_s_n (oMangleDosFilenames,      "mangle-dos-filenames", "@"),
+  ARGPARSE_s_n (oNoMangleDosFilenames, "no-mangle-dos-filenames", "@"),
+  ARGPARSE_s_n (oEnableProgressFilter, "enable-progress-filter", "@"),
+  ARGPARSE_s_n (oMultifile, "multifile", "@"),
+  ARGPARSE_s_s (oKeyidFormat, "keyid-format", "@"),
+  ARGPARSE_s_n (oExitOnStatusWriteError, "exit-on-status-write-error", "@"),
+  ARGPARSE_s_i (oLimitCardInsertTries, "limit-card-insert-tries", "@"),
+  
+  ARGPARSE_s_n (oAllowMultisigVerification, 
+                "allow-multisig-verification", "@"),
+  ARGPARSE_s_n (oEnableDSA2, "enable-dsa2", "@"),
+  ARGPARSE_s_n (oDisableDSA2, "disable-dsa2", "@"),
+  ARGPARSE_s_n (oAllowMultipleMessages,      "allow-multiple-messages", "@"),
+  ARGPARSE_s_n (oNoAllowMultipleMessages, "no-allow-multiple-messages", "@"),
+
+  /* These two are aliases to help users of the PGP command line
+     product use gpg with minimal pain.  Many commands are common
+     already as they seem to have borrowed commands from us.  Now I'm
+     returning the favor. */
+  ARGPARSE_s_s (oLocalUser, "sign-with", "@"),
+  ARGPARSE_s_s (oRecipient, "user", "@"),
+
+  ARGPARSE_s_n (oRequireCrossCert, "require-backsigs", "@"),
+  ARGPARSE_s_n (oRequireCrossCert, "require-cross-certification", "@"),
+  ARGPARSE_s_n (oNoRequireCrossCert, "no-require-backsigs", "@"),
+  ARGPARSE_s_n (oNoRequireCrossCert, "no-require-cross-certification", "@"),
+
+  /* New options.  Fixme: Should go more to the top.  */
+  ARGPARSE_s_s (oAutoKeyLocate, "auto-key-locate", "@"),
+  ARGPARSE_s_n (oNoAutoKeyLocate, "no-auto-key-locate", "@"),
+
+  ARGPARSE_end ()
 };
 
 
@@ -2880,7 +2909,9 @@ main (int argc, char **argv)
 
          case oNoop: break;
 
-         default : pargs.err = configfp? 1:2; break;
+         default: 
+            pargs.err = configfp? ARGPARSE_PRINT_WARNING:ARGPARSE_PRINT_ERROR;
+            break;
          }
       }
 
index ba1f197..8b6404d 100644 (file)
@@ -1,3 +1,9 @@
+2008-11-11  Werner Koch  <wk@g10code.com>
+
+       * argparse.h: Add a bunch of macros and constants.
+       * argparse.c: Use the new macros.  Re-indent the code.  Change
+       license back to LGPL 2.1.
+
 2008-11-04  Werner Koch  <wk@g10code.com>
 
        * w32-gettext.c: Merged with code from libgpg-error and rewrote
index 5813b9b..e9905e3 100644 (file)
@@ -6,7 +6,7 @@
  *
  * JNLIB is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 3 of
+ * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * JNLIB is distributed in the hope that it will be useful, but
  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifdef HAVE_CONFIG_H
 #include <config.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
@@ -296,7 +299,7 @@ optfile_parse (FILE *fp, const char *filename, unsigned *lineno,
               idx = i;
               arg->r_opt = opts[idx].short_opt;
               if (!opts[idx].short_opt )
-                arg->r_opt = ((opts[idx].flags & 256)
+                arg->r_opt = ((opts[idx].flags & ARGPARSE_OPT_COMMAND)
                               ? ARGPARSE_INVALID_COMMAND
                               : ARGPARSE_INVALID_OPTION);
               else if (!(opts[idx].flags & 7)) 
@@ -421,7 +424,7 @@ optfile_parse (FILE *fp, const char *filename, unsigned *lineno,
                 }
               else 
                 {
-                  arg->r_opt = ((opts[idx].flags & 256)
+                  arg->r_opt = ((opts[idx].flags & ARGPARSE_OPT_COMMAND)
                                 ? ARGPARSE_INVALID_COMMAND
                                 : ARGPARSE_INVALID_OPTION);
                   state = -1; /* Skip rest of line and leave.  */
@@ -554,205 +557,253 @@ find_long_option( ARGPARSE_ARGS *arg,
 int
 arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts)
 {
-    int idx;
-    int argc;
-    char **argv;
-    char *s, *s2;
-    int i;
-
-    initialize( arg, NULL, NULL );
-    argc = *arg->argc;
-    argv = *arg->argv;
-    idx = arg->internal.idx;
+  int idx;
+  int argc;
+  char **argv;
+  char *s, *s2;
+  int i;
+  
+  initialize( arg, NULL, NULL );
+  argc = *arg->argc;
+  argv = *arg->argv;
+  idx = arg->internal.idx;
 
-    if( !idx && argc && !(arg->flags & (1<<4)) ) { /* skip the first entry */
-       argc--; argv++; idx++;
+  if (!idx && argc && !(arg->flags & ARGPARSE_FLAG_ARG0))
+    {
+      /* Skip the first argument.  */
+      argc--; argv++; idx++;
     }
-
-  next_one:
-    if( !argc ) { /* no more args */
-       arg->r_opt = 0;
-       goto leave; /* ready */
+  
+ next_one:
+  if (!argc) 
+    { 
+      /* No more args.  */
+      arg->r_opt = 0;
+      goto leave; /* Ready. */
     }
 
-    s = *argv;
-    arg->internal.last = s;
+  s = *argv;
+  arg->internal.last = s;
 
-    if( arg->internal.stopped && (arg->flags & (1<<1)) ) {
-       arg->r_opt = ARGPARSE_IS_ARG;  /* Not an option but an argument.  */
-       arg->r_type = 2;
-       arg->r.ret_str = s;
-       argc--; argv++; idx++; /* set to next one */
+  if (arg->internal.stopped && (arg->flags & ARGPARSE_FLAG_KEEP)) 
+    {
+      arg->r_opt = ARGPARSE_IS_ARG;  /* Not an option but an argument.  */
+      arg->r_type = 2;
+      arg->r.ret_str = s;
+      argc--; argv++; idx++; /* set to next one */
     }
-    else if( arg->internal.stopped ) { /* ready */
-       arg->r_opt = 0;
-       goto leave;
+  else if( arg->internal.stopped ) 
+    {
+      arg->r_opt = 0;
+      goto leave; /* Ready.  */
     }
-    else if( *s == '-' && s[1] == '-' ) { /* long option */
-       char *argpos;
-
-       arg->internal.inarg = 0;
-       if( !s[2] && !(arg->flags & (1<<3)) ) { /* stop option processing */
-           arg->internal.stopped = 1;
-           argc--; argv++; idx++;
-           goto next_one;
+  else if ( *s == '-' && s[1] == '-' )
+    {
+      /* Long option.  */
+      char *argpos;
+      
+      arg->internal.inarg = 0;
+      if (!s[2] && !(arg->flags & ARGPARSE_FLAG_MIXED))
+        { 
+          /* Stop option processing.  */
+          arg->internal.stopped = 1;
+          argc--; argv++; idx++;
+          goto next_one;
        }
 
-       argpos = strchr( s+2, '=' );
-       if( argpos )
-           *argpos = 0;
-       i = find_long_option( arg, opts, s+2 );
-       if( argpos )
-           *argpos = '=';
+      argpos = strchr( s+2, '=' );
+      if ( argpos )
+        *argpos = 0;
+      i = find_long_option ( arg, opts, s+2 );
+      if ( argpos )
+        *argpos = '=';
 
-       if( i < 0 && !strcmp( "help", s+2) )
-           show_help(opts, arg->flags);
-       else if( i < 0 && !strcmp( "version", s+2) ) {
-           if( !(arg->flags & (1<<6)) ) {
-               show_version();
-               exit(0);
-           }
+      if ( i < 0 && !strcmp ( "help", s+2) )
+        show_help (opts, arg->flags);
+      else if ( i < 0 && !strcmp ( "version", s+2) )
+        {
+          if (!(arg->flags & ARGPARSE_FLAG_NOVERSION))
+            {
+              show_version ();
+              exit(0);
+            }
        }
-       else if( i < 0 && !strcmp( "warranty", s+2) ) {
-           puts( strusage(16) );
-           exit(0);
+      else if ( i < 0 && !strcmp( "warranty", s+2))
+        {
+          puts ( strusage (16) );
+          exit (0);
        }
-       else if( i < 0 && !strcmp( "dump-options", s+2) ) {
-           for(i=0; opts[i].short_opt; i++ ) {
-               if( opts[i].long_opt )
-                   printf( "--%s\n", opts[i].long_opt );
+      else if ( i < 0 && !strcmp( "dump-options", s+2) )
+        {
+          for (i=0; opts[i].short_opt; i++ )
+            {
+              if ( opts[i].long_opt )
+                printf ("--%s\n", opts[i].long_opt);
            }
-           fputs("--dump-options\n--help\n--version\n--warranty\n", stdout );
-           exit(0);
+          fputs ("--dump-options\n--help\n--version\n--warranty\n", stdout);
+          exit (0);
        }
-
-       if( i == -2 )
-           arg->r_opt = ARGPARSE_AMBIGUOUS_OPTION;
-       else if( i == -1 ) {
-           arg->r_opt = ARGPARSE_INVALID_OPTION;
-           arg->r.ret_str = s+2;
+      
+      if ( i == -2 )
+        arg->r_opt = ARGPARSE_AMBIGUOUS_OPTION;
+      else if ( i == -1 )
+        {
+          arg->r_opt = ARGPARSE_INVALID_OPTION;
+          arg->r.ret_str = s+2;
        }
-       else
-           arg->r_opt = opts[i].short_opt;
-       if( i < 0 )
-           ;
-       else if( (opts[i].flags & 7) ) {
-           if( argpos ) {
-               s2 = argpos+1;
-               if( !*s2 )
-                   s2 = NULL;
+      else
+        arg->r_opt = opts[i].short_opt;
+      if ( i < 0 )
+        ;
+      else if ( (opts[i].flags & 0x07) )
+        {
+          if ( argpos )
+            {
+              s2 = argpos+1;
+              if ( !*s2 )
+                s2 = NULL;
            }
-           else
-               s2 = argv[1];
-           if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/
-               arg->r_type = 0;               /* because it is optional */
+          else
+            s2 = argv[1];
+          if ( !s2 && (opts[i].flags & ARGPARSE_OPT_OPTIONAL) )
+            {
+              arg->r_type = ARGPARSE_TYPE_NONE; /* Argument is optional.  */
            }
-           else if( !s2 ) {
-               arg->r_opt = ARGPARSE_MISSING_ARG;
+          else if ( !s2 )
+            {
+              arg->r_opt = ARGPARSE_MISSING_ARG;
            }
-           else if( !argpos && *s2 == '-' && (opts[i].flags & 8) ) {
-               /* the argument is optional and the next seems to be
-                * an option. We do not check this possible option
-                * but assume no argument */
-               arg->r_type = 0;
+          else if ( !argpos && *s2 == '-' 
+                    && (opts[i].flags & ARGPARSE_OPT_OPTIONAL) ) 
+            {
+              /* The argument is optional and the next seems to be an
+                 option.  We do not check this possible option but
+                 assume no argument */
+              arg->r_type = ARGPARSE_TYPE_NONE;
            }
-           else {
-               set_opt_arg(arg, opts[i].flags, s2);
-               if( !argpos ) {
-                   argc--; argv++; idx++; /* skip one */
+          else 
+            {
+              set_opt_arg (arg, opts[i].flags, s2);
+              if ( !argpos ) 
+                {
+                  argc--; argv++; idx++; /* Skip one.  */
                }
            }
        }
-       else { /* does not take an argument */
-           if( argpos )
-               arg->r_type = -6; /* argument not expected */
-           else
-               arg->r_type = 0;
+      else
+        { 
+          /* Does not take an argument. */
+          if ( argpos )
+            arg->r_type = ARGPARSE_UNEXPECTED_ARG; 
+          else
+            arg->r_type = 0;
        }
-       argc--; argv++; idx++; /* set to next one */
+      argc--; argv++; idx++; /* Set to next one.  */
     }
-    else if( (*s == '-' && s[1]) || arg->internal.inarg ) { /* short option */
+    else if ( (*s == '-' && s[1]) || arg->internal.inarg ) 
+      {
+        /* Short option.  */
        int dash_kludge = 0;
+
        i = 0;
-       if( !arg->internal.inarg ) {
+       if ( !arg->internal.inarg ) 
+          {
            arg->internal.inarg++;
-           if( arg->flags & (1<<5) ) {
-               for(i=0; opts[i].short_opt; i++ )
-                   if( opts[i].long_opt && !strcmp( opts[i].long_opt, s+1)) {
-                       dash_kludge=1;
-                       break;
+           if ( (arg->flags & ARGPARSE_FLAG_ONEDASH) )
+              {
+                for (i=0; opts[i].short_opt; i++ )
+                  if ( opts[i].long_opt && !strcmp (opts[i].long_opt, s+1))
+                    {
+                      dash_kludge = 1;
+                      break;
                    }
-           }
-       }
+              }
+          }
        s += arg->internal.inarg;
 
-       if( !dash_kludge ) {
-           for(i=0; opts[i].short_opt; i++ )
-               if( opts[i].short_opt == *s )
-                   break;
-       }
-
-       if( !opts[i].short_opt && ( *s == 'h' || *s == '?' ) )
-           show_help(opts, arg->flags);
+       if (!dash_kludge )
+          {
+           for (i=0; opts[i].short_opt; i++ )
+              if ( opts[i].short_opt == *s )
+                break;
+          }
+        
+       if ( !opts[i].short_opt && ( *s == 'h' || *s == '?' ) )
+          show_help (opts, arg->flags);
 
        arg->r_opt = opts[i].short_opt;
-       if( !opts[i].short_opt ) {
-           arg->r_opt = (opts[i].flags & 256)?
+       if (!opts[i].short_opt )
+          {
+           arg->r_opt = (opts[i].flags & ARGPARSE_OPT_COMMAND)?
               ARGPARSE_INVALID_COMMAND:ARGPARSE_INVALID_OPTION;
-           arg->internal.inarg++; /* point to the next arg */
+           arg->internal.inarg++; /* Point to the next arg.  */
            arg->r.ret_str = s;
-       }
-       else if( (opts[i].flags & 7) ) {
-           if( s[1] && !dash_kludge ) {
+          }
+       else if ( (opts[i].flags & 7) )
+          {
+           if ( s[1] && !dash_kludge )
+              {
                s2 = s+1;
-               set_opt_arg(arg, opts[i].flags, s2);
-           }
-           else {
+               set_opt_arg (arg, opts[i].flags, s2);
+              }
+           else
+              {
                s2 = argv[1];
-               if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/
-                   arg->r_type = 0;               /* because it is optional */
-               }
-               else if( !s2 ) {
+               if ( !s2 && (opts[i].flags & ARGPARSE_OPT_OPTIONAL) )
+                  {
+                   arg->r_type = ARGPARSE_TYPE_NONE;
+                  }
+               else if ( !s2 )
+                  {
                    arg->r_opt = ARGPARSE_MISSING_ARG;
-               }
-               else if( *s2 == '-' && s2[1] && (opts[i].flags & 8) ) {
-                   /* the argument is optional and the next seems to be
-                    * an option. We do not check this possible option
-                    * but assume no argument */
-                   arg->r_type = 0;
-               }
-               else {
-                   set_opt_arg(arg, opts[i].flags, s2);
-                   argc--; argv++; idx++; /* skip one */
-               }
-           }
-           s = "x"; /* so that !s[1] yields false */
-       }
-       else { /* does not take an argument */
-           arg->r_type = 0;
-           arg->internal.inarg++; /* point to the next arg */
-       }
-       if( !s[1] || dash_kludge ) { /* no more concatenated short options */
+                  }
+               else if ( *s2 == '-' && s2[1]
+                          && (opts[i].flags & ARGPARSE_OPT_OPTIONAL) )
+                  {
+                   /* The argument is optional and the next seems to
+                      be an option.  We do not check this possible
+                      option but assume no argument.  */
+                   arg->r_type = ARGPARSE_TYPE_NONE;
+                  }
+               else
+                  {
+                   set_opt_arg (arg, opts[i].flags, s2);
+                   argc--; argv++; idx++; /* Skip one.  */
+                  }
+              }
+           s = "x"; /* This is so that !s[1] yields false.  */
+          }
+       else
+          {
+            /* Does not take an argument.  */
+           arg->r_type = ARGPARSE_TYPE_NONE;
+           arg->internal.inarg++; /* Point to the next arg.  */
+          }
+       if ( !s[1] || dash_kludge )
+          {
+            /* No more concatenated short options.  */
            arg->internal.inarg = 0;
            argc--; argv++; idx++;
-       }
-    }
-    else if( arg->flags & (1<<2) ) {
-       arg->r_opt = ARGPARSE_IS_ARG;
-       arg->r_type = 2;
-       arg->r.ret_str = s;
-       argc--; argv++; idx++; /* set to next one */
+          }
+      }
+  else if ( arg->flags & ARGPARSE_FLAG_ALL )
+    {
+      arg->r_opt = ARGPARSE_IS_ARG;
+      arg->r_type = 2;
+      arg->r.ret_str = s;
+      argc--; argv++; idx++; /* Set to next one.  */
     }
-    else {
-       arg->internal.stopped = 1; /* stop option processing */
-       goto next_one;
+  else
+    {
+      arg->internal.stopped = 1; /* Stop option processing.  */
+      goto next_one;
     }
 
 leave:
-    *arg->argc = argc;
-    *arg->argv = argv;
-    arg->internal.idx = idx;
-    return arg->r_opt;
+ leave:
+  *arg->argc = argc;
+  *arg->argv = argv;
+  arg->internal.idx = idx;
+  return arg->r_opt;
 }
 
 
@@ -760,22 +811,23 @@ arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts)
 static int
 set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s)
 {
-    int base = (flags & 16)? 0 : 10;
+  int base = (flags & 16)? 0 : 10;
 
-    switch( arg->r_type = (flags & 7) ) {
-      case 1: /* takes int argument */
-       arg->r.ret_int = (int)strtol(s,NULL,base);
-       return 0;
-      case 3: /* takes long argument   */
-       arg->r.ret_long= strtol(s,NULL,base);
-       return 0;
-      case 4: /* takes ulong argument  */
-       arg->r.ret_ulong= strtoul(s,NULL,base);
-       return 0;
-      case 2: /* takes string argument */
-      default:
-       arg->r.ret_str = s;
-       return 1;
+  switch ( (arg->r_type = (flags & 7)) )
+    {
+    case ARGPARSE_TYPE_INT:
+      arg->r.ret_int = (int)strtol(s,NULL,base);
+      return 0;
+    case ARGPARSE_TYPE_LONG:
+      arg->r.ret_long= strtol(s,NULL,base);
+      return 0;
+    case ARGPARSE_TYPE_ULONG:
+      arg->r.ret_ulong= strtoul(s,NULL,base);
+      return 0;
+    case ARGPARSE_TYPE_STRING:
+    default:
+      arg->r.ret_str = s;
+      return 1;
     }
 }
 
@@ -807,6 +859,7 @@ long_opt_strlen( ARGPARSE_OPTS *o )
   return n;
 }
 
+
 /****************
  * Print formatted help. The description string has some special
  * meanings:
@@ -819,123 +872,149 @@ long_opt_strlen( ARGPARSE_OPTS *o )
  *    bar and the next one as arguments of the long option.
  */
 static void
-show_help( ARGPARSE_OPTS *opts, unsigned flags )
+show_help (ARGPARSE_OPTS *opts, unsigned int flags)
 {
-    const char *s;
+  const char *s;
+  
+  show_version ();
+  putchar ('\n');
+  s = strusage(41);
+  puts (s);
+  if ( opts[0].description )
+    {
+      /* Auto format the option description.  */
+      int i,j, indent;
 
-    show_version();
-    putchar('\n');
-    s = strusage(41);
-    puts(s);
-    if( opts[0].description ) { /* auto format the option description */
-       int i,j, indent;
-       /* get max. length of long options */
-       for(i=indent=0; opts[i].short_opt; i++ ) {
-           if( opts[i].long_opt )
-               if( !opts[i].description || *opts[i].description != '@' )
-                   if( (j=long_opt_strlen(opts+i)) > indent && j < 35 )
-                        indent = j;
+      /* Get max. length of long options.  */
+      for (i=indent=0; opts[i].short_opt; i++ )
+        {
+          if ( opts[i].long_opt )
+            if ( !opts[i].description || *opts[i].description != '@' )
+              if ( (j=long_opt_strlen(opts+i)) > indent && j < 35 )
+                indent = j;
        }
-       /* example: " -v, --verbose   Viele Sachen ausgeben" */
-       indent += 10;
-       if( *opts[0].description != '@' )
-           puts("Options:");
-       for(i=0; opts[i].short_opt; i++ ) {
-           s = _( opts[i].description );
-           if( s && *s== '@' && !s[1] ) /* hide this line */
-               continue;
-           if( s && *s == '@' ) { /* unindented comment only line */
-               for(s++; *s; s++ ) {
-                   if( *s == '\n' ) {
-                       if( s[1] )
-                           putchar('\n');
+
+      /* Example: " -v, --verbose   Viele Sachen ausgeben" */
+      indent += 10;
+      if ( *opts[0].description != '@' )
+        puts ("Options:");
+      for (i=0; opts[i].short_opt; i++ )
+        {
+          s = _( opts[i].description );
+          if ( s && *s== '@' && !s[1] ) /* Hide this line.  */
+            continue;
+          if ( s && *s == '@' )  /* Unindented comment only line.  */
+            { 
+              for (s++; *s; s++ ) 
+                {
+                  if ( *s == '\n' )
+                    {
+                      if( s[1] )
+                        putchar('\n');
                    }
-                   else
-                       putchar(*s);
+                  else
+                    putchar(*s);
                }
-               putchar('\n');
-               continue;
+              putchar('\n');
+              continue;
            }
 
-           j = 3;
-           if( opts[i].short_opt < 256 ) {
-               printf(" -%c", opts[i].short_opt );
-               if( !opts[i].long_opt ) {
-                   if(s && *s == '|' ) {
-                       putchar(' '); j++;
-                       for(s++ ; *s && *s != '|'; s++, j++ )
-                           putchar(*s);
-                       if( *s )
-                           s++;
+          j = 3;
+          if ( opts[i].short_opt < 256 )
+            {
+              printf (" -%c", opts[i].short_opt);
+              if ( !opts[i].long_opt ) 
+                {
+                  if (s && *s == '|' ) 
+                    {
+                      putchar (' '); j++;
+                      for (s++ ; *s && *s != '|'; s++, j++ )
+                        putchar (*s);
+                      if ( *s )
+                        s++;
                    }
                }
            }
-           else
-               fputs("   ", stdout);
-           if( opts[i].long_opt ) {
-               j += printf("%c --%s", opts[i].short_opt < 256?',':' ',
-                                      opts[i].long_opt );
-               if(s && *s == '|' ) {
-                   if( *++s != '=' ) {
-                       putchar(' ');
-                       j++;
+          else
+            fputs("   ", stdout);
+          if ( opts[i].long_opt ) 
+            {
+              j += printf ("%c --%s", opts[i].short_opt < 256?',':' ',
+                           opts[i].long_opt );
+              if (s && *s == '|' ) 
+                {
+                  if ( *++s != '=' )
+                    {
+                      putchar(' ');
+                      j++;
                    }
-                   for( ; *s && *s != '|'; s++, j++ )
-                       putchar(*s);
-                   if( *s )
-                       s++;
+                  for ( ; *s && *s != '|'; s++, j++ )
+                    putchar(*s);
+                  if ( *s )
+                    s++;
                }
-               fputs("   ", stdout);
-               j += 3;
+              fputs ("   ", stdout);
+              j += 3;
            }
-           for(;j < indent; j++ )
-               putchar(' ');
-           if( s ) {
-               if( *s && j > indent ) {
-                   putchar('\n');
-                   for(j=0;j < indent; j++ )
-                       putchar(' ');
+          for (;j < indent; j++ )
+            putchar(' ');
+          if ( s )
+            {
+              if ( *s && j > indent )
+                {
+                  putchar('\n');
+                  for (j=0;j < indent; j++ )
+                    putchar (' ');
                }
-               for(; *s; s++ ) {
-                   if( *s == '\n' ) {
-                       if( s[1] ) {
-                           putchar('\n');
-                           for(j=0;j < indent; j++ )
-                               putchar(' ');
+              for (; *s; s++ )
+                {
+                  if ( *s == '\n' )
+                    {
+                      if ( s[1] ) 
+                        {
+                          putchar ('\n');
+                          for (j=0; j < indent; j++ )
+                            putchar (' ');
                        }
                    }
-                   else
-                       putchar(*s);
+                  else
+                    putchar (*s);
                }
            }
-           putchar('\n');
+          putchar ('\n');
        }
-       if( flags & 32 )
-           puts("\n(A single dash may be used instead of the double ones)");
+       if ( (flags & ARGPARSE_FLAG_ONEDASH) )
+           puts ("\n(A single dash may be used instead of the double ones)");
     }
-    if( (s=strusage(19)) ) {  /* bug reports to ... */
-        char *s2;
-
-       putchar('\n');
-        s2 = strstr (s, "@EMAIL@");
-        if (s2)
-          {
-            if (s2-s)
-              fwrite (s, s2-s, 1, stdout);
-            fputs (PACKAGE_BUGREPORT, stdout);
-            s2 += 7;
-            if (*s2)
-              fputs (s2, stdout);
-          }
-        else
-          fputs(s, stdout);
+  if ( (s=strusage(19)) )
+    { 
+      /* bug reports to ... */
+      char *s2;
+      
+      putchar('\n');
+      s2 = strstr (s, "@EMAIL@");
+      if (s2)
+        {
+          if (s2-s)
+            fwrite (s, s2-s, 1, stdout);
+#ifdef PACKAGE_BUGREPORT
+          fputs (PACKAGE_BUGREPORT, stdout);
+#else
+          fputs ("bug@example.org", stdout);
+#endif
+          s2 += 7;
+          if (*s2)
+            fputs (s2, stdout);
+        }
+      else
+        fputs(s, stdout);
     }
-    fflush(stdout);
-    exit(0);
+  fflush(stdout);
+  exit(0);
 }
 
 static void
-show_version()
+show_version ()
 {
   const char *s;
   int i;
@@ -965,7 +1044,7 @@ show_version()
   for (i=30; i < 40; i++ )
     if ( (s=strusage (i)) )
       fputs (s, stdout);
-  fflush(stdout);
+  fflush (stdout);
 }
 
 
@@ -1016,23 +1095,24 @@ usage (int level)
 const char *
 strusage( int level )
 {
-    const char *p = strusage_handler? strusage_handler(level) : NULL;
-
-    if( p )
-       return p;
-
-    switch( level ) {
-      case 10: p = ("License GPLv3+: GNU GPL version 3 or later "
-                    "<http://gnu.org/licenses/gpl.html>");
-        break;
-      case 11: p = "foo"; break;
-      case 13: p = "0.0"; break;
-      case 14: p = "Copyright (C) 2008 Free Software Foundation, Inc."; break;
-      case 15: p =
+  const char *p = strusage_handler? strusage_handler(level) : NULL;
+  
+  if ( p )
+    return p;
+  
+  switch ( level )
+    {
+    case 10: p = ("License GPLv3+: GNU GPL version 3 or later "
+                  "<http://gnu.org/licenses/gpl.html>");
+      break;
+    case 11: p = "foo"; break;
+    case 13: p = "0.0"; break;
+    case 14: p = "Copyright (C) 2008 Free Software Foundation, Inc."; break;
+    case 15: p =
 "This is free software: you are free to change and redistribute it.\n"
 "There is NO WARRANTY, to the extent permitted by law.\n";
-        break;
-      case 16: p =
+      break;
+    case 16: p =
 "This is free software; you can redistribute it and/or modify\n"
 "it under the terms of the GNU General Public License as published by\n"
 "the Free Software Foundation; either version 3 of the License, or\n"
@@ -1043,18 +1123,18 @@ strusage( int level )
 "GNU General Public License for more details.\n\n"
 "You should have received a copy of the GNU General Public License\n"
 "along with this software.  If not, see <http://www.gnu.org/licenses/>.\n";
-       break;
-      case 40: /* short and long usage */
-      case 41: p = ""; break;
+      break;
+    case 40: /* short and long usage */
+    case 41: p = ""; break;
     }
-
-    return p;
+  
+  return p;
 }
 
 void
-set_strusage( const char *(*f)( int ) )
+set_strusage ( const char *(*f)( int ) )
 {
-    strusage_handler = f;
+  strusage_handler = f;
 }
 
 
@@ -1072,19 +1152,20 @@ static struct {
 int
 main(int argc, char **argv)
 {
-    ARGPARSE_OPTS opts[] = {
-    { 'v', "verbose",   0 , "Laut sein"},
-    { 'e', "echo"   ,   0 , ("Zeile ausgeben, damit wir sehen, was wir ein"
-                             " gegeben haben")},
-    { 'd', "debug",     0 , "Debug\nfalls mal etwas\nschief geht"},
-    { 'o', "output",    2   },
-    { 'c', "cross-ref", 2|8, "cross-reference erzeugen\n" },
+  ARGPARSE_OPTS opts[] = {
+    ARGPARSE_x('v', "verbose", NONE, 0, "Laut sein"),
+    ARGPARSE_s_n('e', "echo"   , ("Zeile ausgeben, damit wir sehen, "
+                                  "was wir ein gegeben haben")),
+    ARGPARSE_s_n('d', "debug", "Debug\nfalls mal etwas\nschief geht"),
+    ARGPARSE_s_s('o', "output", 0 ),
+    ARGPARSE_o_s('c', "cross-ref", "cross-reference erzeugen\n" ),
     /* Note that on a non-utf8 terminal the ß might garble the output. */
-    { 's', "street",  0,     "|Straße|set the name of the street to Straße" },
-    { 'm', "my-option", 1|8 },
-    { 500, "a-long-option", 0 },
-    {0} };
-    ARGPARSE_ARGS pargs = { &argc, &argv, 2|4|32 };
+    ARGPARSE_s_n('s', "street","|Straße|set the name of the street to Straße"),
+    ARGPARSE_o_i('m', "my-option", 0),
+    ARGPARSE_s_n(500, "a-long-option", 0 ),
+    ARGPARSE_end
+  };
+  ARGPARSE_ARGS pargs = { &argc, &argv, 2|4|32 };
     int i;
 
     while( arg_parse ( &pargs, opts) ) {
@@ -1097,7 +1178,7 @@ main(int argc, char **argv)
          case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break;
          case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break;
          case 500: opt.a_long_one++;  break;
-         default : pargs.err = 1; break; /* force warning output */
+         default : pargs.err = ARGPARSE_PRINT_WARNING; break; 
        }
     }
     for(i=0; i < argc; i++ )
index a0ce43a..b211e5f 100644 (file)
@@ -1,11 +1,11 @@
-/* argparse.h
+/* argparse.h - Argument parser for option handling.
  *     Copyright (C) 1998,1999,2000,2001,2006 Free Software Foundation, Inc.
  *
  * This file is part of JNLIB.
  *
  * JNLIB is free software; you can redistribute it and/or modify it
  * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 3 of
+ * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * JNLIB is distributed in the hope that it will be useful, but
 #include <stdio.h>
 #include "types.h"
 
-typedef struct {
-     int  *argc;           /* pointer to argc (value subject to change) */
-     char ***argv;         /* pointer to argv (value subject to change) */
-     unsigned flags;       /* Global flags (DO NOT CHANGE) */
-     int err;              /* print error about last option */
-                           /* 1 = warning, 2 = abort */
-     int r_opt;            /* return option */
-     int r_type;           /* type of return value (0 = no argument found)*/
-     union {
-        int   ret_int;
-        long  ret_long;
-        unsigned long ret_ulong;
-        char *ret_str;
-     } r;                  /* Return values */
-     struct {
-        int idx;
-        int inarg;
-        int stopped;
-        const char *last;
-        void *aliases;
-        const void *cur_alias;
-     } internal;           /* DO NOT CHANGE */
+typedef struct
+{                  
+  int  *argc;        /* Pointer to ARGC (value subject to change). */
+  char ***argv;              /* Pointer to ARGV (value subject to change). */
+  unsigned int flags; /* Global flags.  May be set prior to calling the
+                         parser.  The parser may change the value.  */
+  int err;            /* Print error description for last option. 
+                         Either 0,  ARGPARSE_PRINT_WARNING or
+                         ARGPARSE_PRINT_ERROR.  */
+
+  int r_opt;         /* Returns option code. */
+  int r_type;        /* Returns type of option value.  */
+  union {
+    int   ret_int;
+    long  ret_long;
+    unsigned long ret_ulong;
+    char *ret_str;
+  } r;               /* Return values */
+
+  struct {
+    int idx;
+    int inarg;
+    int stopped;
+    const char *last;
+    void *aliases;
+    const void *cur_alias;
+  } internal;      /* Private - do not change. */
 } ARGPARSE_ARGS;
 
-typedef struct {
-    int        short_opt;
-    const char *long_opt;
-    unsigned flags;
-    const char *description; /* optional option description */
+typedef struct
+{
+  int          short_opt;
+  const char  *long_opt;
+  unsigned int flags;
+  const char  *description; /* Optional option description. */
 } ARGPARSE_OPTS;
 
 
+/* Global flags (ARGPARSE_ARGS).  */
+#define ARGPARSE_FLAG_KEEP       1   /* Do not remove options form argv.     */
+#define ARGPARSE_FLAG_ALL        2   /* Do not stop at last option but return
+                                        remaining args with R_OPT set to -1. */
+#define ARGPARSE_FLAG_MIXED      4   /* Assume options and args are mixed.   */
+#define ARGPARSE_FLAG_NOSTOP     8   /* Do not stop processing at "--".      */
+#define ARGPARSE_FLAG_ARG0      16   /* Do not skip the first arg.           */
+#define ARGPARSE_FLAG_ONEDASH   32   /* Allow long options with one dash.    */
+#define ARGPARSE_FLAG_NOVERSION 64   /* No output for "--version".           */
+
+/* Flags for each option (ARGPARSE_OPTS).  The type code may be
+   ORed with the OPT flags.  */
+#define ARGPARSE_TYPE_NONE        0  /* Does not take an argument.        */
+#define ARGPARSE_TYPE_INT         1  /* Takes an int argument.            */
+#define ARGPARSE_TYPE_STRING      2  /* Takes a string argument.          */
+#define ARGPARSE_TYPE_LONG        3  /* Takes a long argument.            */
+#define ARGPARSE_TYPE_ULONG       4  /* Takes an unsigned long argument.  */
+#define ARGPARSE_OPT_OPTIONAL (1<<3) /* Argument is optional.             */ 
+#define ARGPARSE_OPT_PREFIX   (1<<4) /* Allow 0x etc. prefixed values.    */
+#define ARGPARSE_OPT_COMMAND  (1<<8) /* The argument is a command.        */
+
+/* A set of macros to make option definitions easier to read.  */
+#define ARGPARSE_x(s,l,t,f,d) \
+     { (s), (l), ARGPARSE_TYPE_ ## t | (f), (d) }
+
+#define ARGPARSE_s(s,l,t,d) \
+     { (s), (l), ARGPARSE_TYPE_ ## t, (d) }
+#define ARGPARSE_s_n(s,l,d) \
+     { (s), (l), ARGPARSE_TYPE_NONE, (d) }
+#define ARGPARSE_s_i(s,l,d) \
+     { (s), (l), ARGPARSE_TYPE_INT, (d) }
+#define ARGPARSE_s_s(s,l,d) \
+     { (s), (l), ARGPARSE_TYPE_STRING, (d) }
+#define ARGPARSE_s_l(s,l,d) \
+     { (s), (l), ARGPARSE_TYPE_LONG, (d) }
+#define ARGPARSE_s_u(s,l,d) \
+     { (s), (l), ARGPARSE_TYPE_ULONG, (d) }
+
+#define ARGPARSE_o(s,l,t,d) \
+     { (s), (l), (ARGPARSE_TYPE_ ## t  | ARGPARSE_OPT_OPTIONAL), (d) }
+#define ARGPARSE_o_n(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_NONE   | ARGPARSE_OPT_OPTIONAL), (d) }
+#define ARGPARSE_o_i(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_INT    | ARGPARSE_OPT_OPTIONAL), (d) }
+#define ARGPARSE_o_s(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_STRING | ARGPARSE_OPT_OPTIONAL), (d) }
+#define ARGPARSE_o_l(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_LONG   | ARGPARSE_OPT_OPTIONAL), (d) }
+#define ARGPARSE_o_u(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_ULONG  | ARGPARSE_OPT_OPTIONAL), (d) }
+
+#define ARGPARSE_p(s,l,t,d) \
+     { (s), (l), (ARGPARSE_TYPE_ ## t  | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_p_n(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_NONE   | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_p_i(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_INT    | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_p_s(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_STRING | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_p_l(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_LONG   | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_p_u(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_ULONG  | ARGPARSE_OPT_PREFIX), (d) }
+
+#define ARGPARSE_op(s,l,t,d) \
+     { (s), (l), (ARGPARSE_TYPE_ ## t \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_op_n(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_NONE \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_op_i(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_INT \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_op_s(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_STRING \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_op_l(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_LONG \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+#define ARGPARSE_op_u(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_ULONG \
+                  | ARGPARSE_OPT_OPTIONAL | ARGPARSE_OPT_PREFIX), (d) }
+
+#define ARGPARSE_c(s,l,d) \
+     { (s), (l), (ARGPARSE_TYPE_NONE | ARGPARSE_OPT_COMMAND), (d) }
+
+
+#define ARGPARSE_group(s,d) \
+     { (s), NULL, 0, (d) } 
+
+#define ARGPARSE_end()  { 0, NULL, 0, NULL }
+
+
+/* Other constants.  */
+#define ARGPARSE_PRINT_WARNING  1
+#define ARGPARSE_PRINT_ERROR    2
+
+
 /* Error values.  */
 #define ARGPARSE_IS_ARG            (-1)
 #define ARGPARSE_INVALID_OPTION    (-2)
index f501d13..16cb05a 100644 (file)
--- a/po/be.po
+++ b/po/be.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.2\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2003-10-30 16:35+0200\n"
 "Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
 "Language-Team: Belarusian <i18n@mova.org>\n"
index 1d7d3ca..3fdfe37 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -27,7 +27,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.4.0\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2005-02-04 02:04+0100\n"
 "Last-Translator: Jordi Mallach <jordi@gnu.org>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
index 4031758..61f7266 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-1.3.92\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-11-26 09:12+0200\n"
 "Last-Translator: Roman Pavlik <rp@tns.cz>\n"
 "Language-Team: Czech <translations.cs@gnupg.cz>\n"
index 6d84f6f..b7107ed 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.0.0h\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2003-12-03 16:11+0100\n"
 "Last-Translator: Birger Langkjer <birger.langkjer@image.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
index 53a94fb..bf52599 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-2.0.6\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-11-04 18:44+0100\n"
 "Last-Translator: Walter Koch <koch@u32.de>\n"
 "Language-Team: German <de@li.org>\n"
@@ -233,12 +233,8 @@ msgid ""
 msgid_plural ""
 "Warning: You have entered an insecure passphrase.%%0AA passphrase should be "
 "at least %u characters long."
-msgstr[0] ""
-"WARNUNG:  Sie haben eine offensichtlich unsichere%%0APassphrase eingegeben.  "
-"Eine Passphrase sollte%%0A mindestens %u Zeichen lang sein."
-msgstr[1] ""
-"WARNUNG:  Sie haben eine offensichtlich unsichere%%0APassphrase eingegeben.  "
-"Eine Passphrase sollte%%0A mindestens %u Zeichen lang sein."
+msgstr[0] "WARNUNG:  Sie haben eine offensichtlich unsichere%%0APassphrase eingegeben.  Eine Passphrase sollte%%0Amindestens %u Zeichen lang sein."
+msgstr[1] "WARNUNG:  Sie haben eine offensichtlich unsichere%%0APassphrase eingegeben.  Eine Passphrase sollte%%0Amindestens %u Zeichen lang sein."
 
 #: agent/genkey.c:214
 #, c-format
@@ -254,7 +250,7 @@ msgstr[0] ""
 "enthalten."
 msgstr[1] ""
 "WARNUNG:  Sie haben eine offensichtlich unsichere%%0APassphrase eingegeben.  "
-"Eine Passphrase sollte%%0A mindestens %u Sonderzeichen oder Ziffern "
+"Eine Passphrase sollte%%0Amindestens %u Sonderzeichen oder Ziffern "
 "enthalten."
 
 #: agent/genkey.c:237
index bdb4ab5..ba76945 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-1.1.92\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2003-06-27 12:00+0200\n"
 "Last-Translator: Dokianakis Theofanis <madf@hellug.gr>\n"
 "Language-Team: Greek <nls@tux.hellug.gr>\n"
index abaf2e2..a41ba2e 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.0.6d\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2002-04-14 14:33+0100\n"
 "Last-Translator: Edmund GRIMLEY EVANS <edmundo@rano.org>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
index cfeca74..47678b2 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 2.0.9\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-05-27 22:38+0100\n"
 "Last-Translator: Jaime Suárez <jaime@mundocripto.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
index b7c4dd3..a8cf466 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.2\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-06-17 11:04+0300\n"
 "Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
index f1d2a63..bcc2b9c 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -22,7 +22,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.2\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-06-16 22:40+0300\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
index 3502ceb..518c556 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.4.2rc2\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-09-30 19:38+0200\n"
 "Last-Translator: Gaël Quéri <gael@lautre.net>\n"
 "Language-Team: French <traduc@traduc.org>\n"
index 81f309d..a5d937f 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.4\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2003-12-04 11:39+0100\n"
 "Last-Translator: Jacobo Tarrio <jtarrio@trasno.net>\n"
 "Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n"
index 19021e5..64a6626 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.5\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-06-19 21:53+0200\n"
 "Last-Translator: Nagy Ferenc László <nfl@nfllab.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
index d79ebc6..ccdedb2 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-id\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-06-17 16:32+0700\n"
 "Last-Translator: Tedi Heriyanto <tedi_h@gmx.net>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
index 580cd96..28923db 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.1.92\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-05-26 12:02+0200\n"
 "Last-Translator: Marco d'Itri <md@linux.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
index 2d063f9..7e8b9b2 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.3.92\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-11-23 11:14+0900\n"
 "Last-Translator: IIDA Yosiaki <iida@gnu.org>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
index 92766d8..3f0e7fa 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.4.3\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2006-06-13 20:31+0200\n"
 "Last-Translator: Trond Endrestøl <Trond.Endrestol@fagskolen.gjovik.no>\n"
 "Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
index c76f5f8..a5236a8 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-2.0.7\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2007-11-26 19:01+0100\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
index 9535c12..7778438 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2002-09-13 18:26+0100\n"
 "Last-Translator: Pedro Morais <morais@kde.org>\n"
 "Language-Team: pt <morais@kde.org>\n"
index 21f8a17..17501f3 100644 (file)
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.0\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2007-08-16 11:35+0200\n"
 "Last-Translator:\n"
 "Language-Team: ?\n"
index c5215e6..0343c27 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.4.2rc1\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2005-05-31 22:00-0500\n"
 "Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
index 6206c61..a055667 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GnuPG 2.0.0\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2006-11-07 19:31+0300\n"
 "Last-Translator: Maxim Britov <maxim.britov@gmail.com>\n"
 "Language-Team: Russian <gnupg-ru@gnupg.org>\n"
index 5b69b92..2a56b0e 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.2.5\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2004-07-20 15:52+0200\n"
 "Last-Translator: Michal Majer <mmajer@econ.umb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
index 1d2084e..27c3cf4 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -24,7 +24,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg trunk\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-07-21 09:04+0200\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
index 6230656..4286fee 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.9.94\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2006-11-04 03:45+0200\n"
 "Last-Translator: Nilgün Belma Bugüner <nilgun@belgeler.gen.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
index 8f0d2e8..d9ff867 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 1.4.4\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2006-07-02 10:58+0800\n"
 "Last-Translator: Meng Jie <zuxyhere@eastday.com>\n"
 "Language-Team: Chinese (simplified) <i18n-translation@lists.linux.net.cn>\n"
index 6661110..b6b05f2 100644 (file)
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg 2.0.9\n"
 "Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"POT-Creation-Date: 2008-11-11 08:40+0100\n"
+"POT-Creation-Date: 2008-11-11 12:05+0100\n"
 "PO-Revision-Date: 2008-03-26 22:35+0800\n"
 "Last-Translator: Jedi Lin <Jedi@Jedi.org>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"