static int saidread=0;
+ /* load the list of files in this package into memory, or update the
+ * list if it is there but stale
+ */
void ensure_packagefiles_available(struct pkginfo *pkg) {
static struct varbuf fnvb;
- static char stdiobuf[8192];
FILE *file;
const char *filelistfile;
struct fileinlist **lendp, *newent, *current;
struct filepackages *packageslump;
- int search, findlast, putat= 0, l;
- char *thefilename;
- char linebuf[1024];
+ int search, findlast, putat;
+ struct stat stat_buf;
+ char *loaded_list, *loaded_list_end, *thisline, *nextline, *ptr;
+ ssize_t bytes, readden;
if (pkg->clientdata && pkg->clientdata->fileslistvalid) return;
ensure_package_clientdata(pkg);
push_cleanup(cu_closefile,ehflag_bombout, 0,0, 1,(void*)file);
- if (setvbuf(file,stdiobuf,_IOFBF,sizeof(stdiobuf)))
- ohshite(_("unable to set buffering on `%.250s'"),filelistfile);
+ if(fstat(fileno(file), &stat_buf))
+ ohshite("unable to stat files list file for package `%.250s'",pkg->name);
+ loaded_list = nfmalloc(stat_buf.st_size);
+ loaded_list_end = loaded_list + stat_buf.st_size;
+ /* stdio is an extra copy, hence we use read() */
+ readden = 0; /* write->written, read->readden */
+ while (readden < stat_buf.st_size) {
+ bytes = read(fileno(file),
+ loaded_list + readden, stat_buf.st_size - readden);
+ if (bytes < 0) {
+ if (errno == EINTR) continue;
+ ohshite("unable to read files list for package `%.250s'",pkg->name);
+ }
+ if (!bytes)
+ ohshit("unexpected end of file in files list for package `%.250s'",pkg->name);
+ readden += bytes;
+ }
lendp= &pkg->clientdata->files;
- varbufreset(&fnvb);
- while (fgets(linebuf,sizeof(linebuf),file)) {
- /* This is a very important loop, and it is therefore rather messy.
- * We break the varbuf abstraction even more than usual, and we
- * avoid copying where possible.
- */
- l= strlen(linebuf);
- if (l == 0) ohshit(_("fgets gave an empty null-terminated string from `%.250s'"),
- filelistfile);
- l--;
- if (linebuf[l] != '\n') {
- varbufaddstr(&fnvb,linebuf);
- continue;
- } else if (!fnvb.used && l>0 && linebuf[l-1] != '/') { /* fast path */
- linebuf[l]= 0;
- thefilename= linebuf;
- } else {
- if (l>0 && linebuf[l-1] == '/') l--; /* strip trailing slashes */
- linebuf[l]= 0;
- varbufaddstr(&fnvb,linebuf);
- varbufaddc(&fnvb,0);
- fnvb.used= 0;
- thefilename= fnvb.buf;
- }
- if (!*thefilename)
+ thisline = loaded_list;
+ while (thisline < loaded_list_end) {
+ if (!(ptr = memchr(thisline, '\n', loaded_list_end - thisline)))
+ ohshit("files list file for package `%.250s' is missing final newline",pkg->name);
+ /* where to start next time around */
+ nextline = ptr + 1;
+ /* strip trailing "/" */
+ if (ptr > thisline && ptr[-1] == '/') ptr--;
+ /* add the file to the list */
+ if (ptr == thisline)
ohshit(_("files list file for package `%.250s' contains empty filename"),pkg->name);
+ *ptr = 0;
newent= nfmalloc(sizeof(struct fileinlist));
- newent->namenode= findnamenode(thefilename);
+ newent->namenode= findnamenode(thisline, fnn_nocopy);
newent->next= 0;
*lendp= newent;
lendp= &newent->next;
+ thisline = nextline;
}
- if (ferror(file))
- ohshite(_("error reading files list file for package `%.250s'"),pkg->name);
pop_cleanup(ehflag_normaltidy); /* file= fopen() */
if (fclose(file))
ohshite(_("error closing files list file for package `%.250s'"),pkg->name);
if (l == 0) ohshit(_("fgets gave an empty string from diversions [i]"));
if (linebuf[--l] != '\n') ohshit(_("diversions file has too-long line or EOF [i]"));
linebuf[l]= 0;
- oialtname->camefrom= findnamenode(linebuf);
+ oialtname->camefrom= findnamenode(linebuf, 0);
oialtname->useinstead= 0;
if (!fgets(linebuf,sizeof(linebuf),file)) {
if (l == 0) ohshit(_("fgets gave an empty string from diversions [ii]"));
if (linebuf[--l] != '\n') ohshit(_("diversions file has too-long line or EOF [ii]"));
linebuf[l]= 0;
- oicontest->useinstead= findnamenode(linebuf);
+ oicontest->useinstead= findnamenode(linebuf, 0);
oicontest->camefrom= 0;
if (!fgets(linebuf,sizeof(linebuf),file)) {
/*** Data structures for low-memory-footprint in-core files database ***/
+/* the idea is that you have a tree structure in memory which has the
+ same structure as the names themselves.
+
+ Each node in the tree gets an fdirnode. This may have a
+ filenamenode attached to it (if there is really a filename
+ corresponding to the path down the tree to get here) and an
+ fdirents (if there is anything below this point.)
+
+ The fdirents structure lists the entries in a directory. If there
+ is only 1 node below us then there's just one fdirents with a
+ single entry; if there are more then then next one (as defined by
+ the 'more' field) contains two entries; the next four; etc.
+
+ This doubling effect is enforced by findnamenow_low() rather than
+ by a count field in the structure.
+
+ 1999-07-26 RJK
+
+*/
+
struct fdirents {
struct fdirents *more;
struct { const char *component; struct fdirnode *go; } entries[1];
}
}
-static struct filenamenode *findnamenode_high(const char *name);
-static struct filenamenode *findnamenode_low(const char *name);
+static struct filenamenode *findnamenode_high(const char *name,
+ enum fnnflags flags);
+static struct filenamenode *findnamenode_low(const char *name,
+ enum fnnflags flags);
-struct filenamenode *findnamenode(const char *name) {
+struct filenamenode *findnamenode(const char *name, enum fnnflags flags) {
switch (f_largemem) {
case 1:
- return findnamenode_high(name);
+ return findnamenode_high(name, flags);
case -1:
- return findnamenode_low(name);
+ return findnamenode_low(name, flags);
default:
internerr("findnamenode no f_largemem");
}
/*** Code for low-memory-footprint in-core files database ***/
-static struct filenamenode *findnamenode_low(const char *name) {
+static struct filenamenode *findnamenode_low(const char *name,
+ enum fnnflags flags) {
struct fdirnode *traverse;
struct fdirents *ents, **addto;
const char *nameleft, *slash;
char *p;
struct filenamesblock *newblock;
int n, i, nentrieshere, alloc;
-
+ const char *orig_name = name;
+
/* We skip initial slashes and ./ pairs, and add our own single leading slash. */
name= skip_slash_dotslash(name);
traverse->here->divert= 0;
traverse->here->filestat= 0;
- n= strlen(name)+2;
- if (namesarealeft < n) {
- newblock= m_malloc(sizeof(struct filenamesblock));
- alloc= 256*1024;
- if (alloc<n) alloc= n;
- newblock->data= m_malloc(alloc);
- newblock->next= namesarea;
- namesarea= newblock;
- namesarealeft= alloc;
+ if((flags & fnn_nocopy) && name > orig_name && name[-1] == '/') {
+ traverse->here->name = (char *)name - 1;
+ } else {
+ n= strlen(name)+2;
+ if (namesarealeft < n) {
+ newblock= m_malloc(sizeof(struct filenamesblock));
+ alloc= 256*1024;
+ if (alloc<n) alloc= n;
+ newblock->data= m_malloc(alloc);
+ newblock->next= namesarea;
+ namesarea= newblock;
+ namesarealeft= alloc;
+ }
+ namesarealeft-= n;
+ p= namesarea->data+namesarealeft;
+ traverse->here->name= p; *p++= '/'; strcpy(p,name);
}
- namesarealeft-= n;
- p= namesarea->data+namesarealeft;
- traverse->here->name= p; *p++= '/'; strcpy(p,name);
traverse->here->next= allfiles;
allfiles= traverse->here;
return v;
}
-struct filenamenode *findnamenode_high(const char *name) {
+struct filenamenode *findnamenode_high(const char *name,
+ enum fnnflags flags) {
struct filenamenode **pointerp, *newnode;
+ const char *orig_name = name;
/* We skip initial slashes and ./ pairs, and add our own single leading slash. */
name= skip_slash_dotslash(name);
newnode= nfmalloc(sizeof(struct filenamenode));
newnode->packages= 0;
- newnode->name= nfmalloc(strlen(name)+2);
- newnode->name[0]= '/'; strcpy(newnode->name+1,name);
+ if((flags & fnn_nocopy) && name > orig_name && name[-1] == '/')
+ newnode->name = (char *)name - 1;
+ else {
+ newnode->name= nfmalloc(strlen(name)+2);
+ newnode->name[0]= '/'; strcpy(newnode->name+1,name);
+ }
newnode->flags= 0;
newnode->next= 0;
newnode->divert= 0;
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-10-30 15:10+0200\n"
+"POT-Creation-Date: 1999-12-05 18:52+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid " conflicts with "
msgstr ""
-#: main/depcon.c:209
+#: main/depcon.c:136
+msgid " enhances "
+msgstr ""
+
+#: main/depcon.c:211
#, c-format
msgid " %.250s is to be removed.\n"
msgstr ""
-#: main/depcon.c:212
+#: main/depcon.c:214
#, c-format
msgid " %.250s is to be deconfigured.\n"
msgstr ""
-#: main/depcon.c:216
+#: main/depcon.c:218
#, c-format
msgid " %.250s is to be installed, but is version %.250s.\n"
msgstr ""
-#: main/depcon.c:224
+#: main/depcon.c:226
#, c-format
msgid " %.250s is installed, but is version %.250s.\n"
msgstr ""
-#: main/depcon.c:239
+#: main/depcon.c:241
#, c-format
msgid " %.250s is unpacked, but has never been configured.\n"
msgstr ""
-#: main/depcon.c:243
+#: main/depcon.c:245
#, c-format
msgid " %.250s is unpacked, but is version %.250s.\n"
msgstr ""
-#: main/depcon.c:249
+#: main/depcon.c:251
#, c-format
msgid " %.250s latest configured version is %.250s.\n"
msgstr ""
-#: main/depcon.c:258
+#: main/depcon.c:260
#, c-format
msgid " %.250s is %s.\n"
msgstr ""
-#: main/depcon.c:294
+#: main/depcon.c:296
#, c-format
msgid " %.250s provides %.250s but is to be removed.\n"
msgstr ""
-#: main/depcon.c:298
+#: main/depcon.c:300
#, c-format
msgid " %.250s provides %.250s but is to be deconfigured.\n"
msgstr ""
-#: main/depcon.c:303
+#: main/depcon.c:305
#, c-format
msgid " %.250s provides %.250s but is %s.\n"
msgstr ""
#. If the package wasn't installed at all, and we haven't said
#. * yet why this isn't satisfied, we should say so now.
#.
-#: main/depcon.c:317
+#: main/depcon.c:319
#, c-format
msgid " %.250s is not installed.\n"
msgstr ""
-#: main/depcon.c:348
+#: main/depcon.c:350
#, c-format
msgid " %.250s (version %.250s) is to be installed.\n"
msgstr ""
-#: main/depcon.c:362
+#: main/depcon.c:364
#, c-format
msgid " %.250s (version %.250s) is %s.\n"
msgstr ""
#. conflicts and provides the same
-#: main/depcon.c:387
+#: main/depcon.c:389
#, c-format
msgid " %.250s provides %.250s and is to be installed.\n"
msgstr ""
-#: main/depcon.c:418
+#: main/depcon.c:420
#, c-format
msgid " %.250s provides %.250s and is %s.\n"
msgstr ""
" "
msgstr ""
-#: main/filesdb.c:120
+#: main/filesdb.c:123
#, c-format
msgid "unable to open files list file for package `%.250s'"
msgstr ""
-#: main/filesdb.c:125
+#: main/filesdb.c:128
#, c-format
msgid ""
"dpkg: serious warning: files list file for package `%.250s' missing, "
"assuming package has no files currently installed.\n"
msgstr ""
-#: main/filesdb.c:136
-#, c-format
-msgid "unable to set buffering on `%.250s'"
-msgstr ""
-
-#: main/filesdb.c:146
-#, c-format
-msgid "fgets gave an empty null-terminated string from `%.250s'"
-msgstr ""
-
-#: main/filesdb.c:164
+#: main/filesdb.c:167
#, c-format
msgid "files list file for package `%.250s' contains empty filename"
msgstr ""
-#: main/filesdb.c:172
-#, c-format
-msgid "error reading files list file for package `%.250s'"
-msgstr ""
-
-#: main/filesdb.c:175
+#: main/filesdb.c:178
#, c-format
msgid "error closing files list file for package `%.250s'"
msgstr ""
-#: main/filesdb.c:177
+#: main/filesdb.c:180
#, c-format
msgid "files list file for package `%.250s' is truncated"
msgstr ""
-#: main/filesdb.c:208
+#: main/filesdb.c:211
msgid "(Reading database ... "
msgstr ""
-#: main/filesdb.c:208
+#: main/filesdb.c:211
msgid "(Scanning database ... "
msgstr ""
-#: main/filesdb.c:216
+#: main/filesdb.c:219
#, c-format
msgid "%d files and directories currently installed.)\n"
msgstr ""
-#: main/filesdb.c:247
+#: main/filesdb.c:250
#, c-format
msgid "unable to create updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:257
+#: main/filesdb.c:260
#, c-format
msgid "failed to write to updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:259
+#: main/filesdb.c:262
#, c-format
msgid "failed to flush updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:261
+#: main/filesdb.c:264
#, c-format
msgid "failed to sync updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:264
+#: main/filesdb.c:267
#, c-format
msgid "failed to close updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:266
+#: main/filesdb.c:269
#, c-format
msgid "failed to install updated files list file for package %s"
msgstr ""
-#: main/filesdb.c:330
+#: main/filesdb.c:333
msgid "failed to open diversions file"
msgstr ""
-#: main/filesdb.c:334
+#: main/filesdb.c:337
msgid "failed to fstat previous diversions file"
msgstr ""
-#: main/filesdb.c:336
+#: main/filesdb.c:339
msgid "failed to fstat diversions file"
msgstr ""
-#: main/filesdb.c:356
+#: main/filesdb.c:359
msgid "fgets gave an empty string from diversions [i]"
msgstr ""
-#: main/filesdb.c:357
+#: main/filesdb.c:360
msgid "diversions file has too-long line or EOF [i]"
msgstr ""
-#: main/filesdb.c:363
+#: main/filesdb.c:366
msgid "read error in diversions [ii]"
msgstr ""
-#: main/filesdb.c:364
+#: main/filesdb.c:367
msgid "unexpected EOF in diversions [ii]"
msgstr ""
-#: main/filesdb.c:367
+#: main/filesdb.c:370
msgid "fgets gave an empty string from diversions [ii]"
msgstr ""
-#: main/filesdb.c:368 main/filesdb.c:379
+#: main/filesdb.c:371 main/filesdb.c:382
msgid "diversions file has too-long line or EOF [ii]"
msgstr ""
-#: main/filesdb.c:374
+#: main/filesdb.c:377
msgid "read error in diversions [iii]"
msgstr ""
-#: main/filesdb.c:375
+#: main/filesdb.c:378
msgid "unexpected EOF in diversions [iii]"
msgstr ""
-#: main/filesdb.c:378
+#: main/filesdb.c:381
msgid "fgets gave an empty string from diversions [iii]"
msgstr ""
-#: main/filesdb.c:386
+#: main/filesdb.c:389
#, c-format
msgid "conflicting diversions involving `%.250s' or `%.250s'"
msgstr ""
-#: main/filesdb.c:395
+#: main/filesdb.c:398
msgid "read error in diversions [i]"
msgstr ""
"below\n"
" dpkg --help | --version show this help / version number\n"
" dpkg --force-help | -Dh|--debug=help help on forcing resp. debugging\n"
-" dpkg --licence print copyright licencing terms\n"
+" dpkg --licence print copyright licensing terms\n"
"\n"
"Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|\n"
" -x|--extract|-X|--vextract|--fsys-tarfile on archives (type %s --help.)\n"
msgid "package architecture (%s) does not match system (%s)"
msgstr ""
-#: main/processarc.c:236
+#: main/processarc.c:240
#, c-format
msgid ""
"dpkg: regarding %s containing %s, pre-dependency problem:\n"
"%s"
msgstr ""
-#: main/processarc.c:239
+#: main/processarc.c:243
#, c-format
msgid "pre-dependency problem - not installing %.250s"
msgstr ""
-#: main/processarc.c:240
+#: main/processarc.c:244
msgid "dpkg: warning - ignoring pre-dependency problem !\n"
msgstr ""
-#: main/processarc.c:254
+#: main/processarc.c:258
#, c-format
msgid "Preparing to replace %s %s (using %s) ...\n"
msgstr ""
-#: main/processarc.c:259
+#: main/processarc.c:263
#, c-format
msgid "Unpacking %s (from %s) ...\n"
msgstr ""
-#: main/processarc.c:279
+#: main/processarc.c:283
#, c-format
msgid "name of conffile (starting `%.250s') is too long (>%d characters)"
msgstr ""
-#: main/processarc.c:333
+#: main/processarc.c:337
#, c-format
msgid "read error in %.250s"
msgstr ""
#. conff= fopen()
-#: main/processarc.c:335
+#: main/processarc.c:339
#, c-format
msgid "error closing %.250s"
msgstr ""
-#: main/processarc.c:337
+#: main/processarc.c:341
#, c-format
msgid "error trying to open %.250s"
msgstr ""
-#: main/processarc.c:370
+#: main/processarc.c:374
#, c-format
msgid "De-configuring %s, so that we can remove %s ...\n"
msgstr ""
-#: main/processarc.c:427
+#: main/processarc.c:431
#, c-format
msgid "Unpacking replacement %.250s ...\n"
msgstr ""
-#: main/processarc.c:506
+#: main/processarc.c:510
msgid "unable to exec dpkg-deb to get filesystem archive"
msgstr ""
-#: main/processarc.c:514
+#: main/processarc.c:518
msgid "unable to fdopen dpkg-deb extract pipe"
msgstr ""
-#: main/processarc.c:520
+#: main/processarc.c:524
msgid "error reading dpkg-deb tar output"
msgstr ""
-#: main/processarc.c:523
+#: main/processarc.c:527
msgid "unexpected EOF in filesystem tarfile - corrupted package archive"
msgstr ""
-#: main/processarc.c:525
+#: main/processarc.c:529
msgid "corrupted filesystem tarfile - corrupted package archive"
msgstr ""
-#: main/processarc.c:621
+#: main/processarc.c:625
#, c-format
msgid "dpkg: warning - unable to delete old file `%.250s': %s\n"
msgstr ""
-#: main/processarc.c:643 main/processarc.c:880 main/remove.c:396
+#: main/processarc.c:647 main/processarc.c:884 main/remove.c:396
msgid "cannot read info directory"
msgstr ""
-#: main/processarc.c:656
+#: main/processarc.c:660
#, c-format
msgid "old version of package has overly-long info file name starting `%.250s'"
msgstr ""
-#: main/processarc.c:668
+#: main/processarc.c:672
#, c-format
msgid "unable to remove obsolete info file `%.250s'"
msgstr ""
-#: main/processarc.c:671
+#: main/processarc.c:675
#, c-format
msgid "unable to install (supposed) new info file `%.250s'"
msgstr ""
-#: main/processarc.c:678
+#: main/processarc.c:682
msgid "unable to open temp control directory"
msgstr ""
-#: main/processarc.c:687
+#: main/processarc.c:691
#, c-format
msgid "package contains overly-long control info file name (starting `%.50s')"
msgstr ""
-#: main/processarc.c:692
+#: main/processarc.c:696
#, c-format
msgid "package control info contained directory `%.250s'"
msgstr ""
-#: main/processarc.c:694
+#: main/processarc.c:698
#, c-format
msgid "package control info rmdir of `%.250s' didn't say not a dir"
msgstr ""
-#: main/processarc.c:700
+#: main/processarc.c:704
#, c-format
msgid "dpkg: warning - package %s contained list as info file"
msgstr ""
-#: main/processarc.c:707
+#: main/processarc.c:711
#, c-format
msgid "unable to install new info file `%.250s' as `%.250s'"
msgstr ""
-#: main/processarc.c:860
+#: main/processarc.c:864
#, c-format
msgid "(Noting disappearance of %s, which has been completely replaced.)\n"
msgstr ""
-#: main/processarc.c:896
+#: main/processarc.c:900
#, c-format
msgid "unable to delete disappearing control info file `%.250s'"
msgstr ""
msgid "--contents takes exactly one argument"
msgstr ""
-#: dpkg-deb/main.c:44 dselect/main.cc:78
+#: dpkg-deb/main.c:44
msgid "Debian Linux `"
msgstr ""
msgid "unable to exec mksplit"
msgstr ""
-#: md5sum/md5sum.c:106
+#: utils/md5sum.c:106
#, c-format
msgid "%s: read error on stdin\n"
msgstr ""
-#: md5sum/md5sum.c:124 md5sum/md5sum.c:250
+#: utils/md5sum.c:124 utils/md5sum.c:250
#, c-format
msgid "%s: error reading %s\n"
msgstr ""
-#: md5sum/md5sum.c:138
+#: utils/md5sum.c:138
msgid ""
"usage: md5sum [-bv] [-c [file]] | [file...]\n"
"Generates or checks MD5 Message Digests\n"
"that is printed on stdout by this program when it generates digests.\n"
msgstr ""
-#: md5sum/md5sum.c:211
+#: utils/md5sum.c:211
#, c-format
msgid "%s: unrecognized line: %s"
msgstr ""
-#: md5sum/md5sum.c:245
+#: utils/md5sum.c:245
#, c-format
msgid "%s: can't open %s\n"
msgstr ""
-#: md5sum/md5sum.c:258
+#: utils/md5sum.c:258
msgid "FAILED\n"
msgstr ""
-#: md5sum/md5sum.c:260
+#: utils/md5sum.c:260
#, c-format
msgid "%s: MD5 check failed for '%s'\n"
msgstr ""
-#: md5sum/md5sum.c:263
+#: utils/md5sum.c:263
msgid "OK\n"
msgstr ""
-#: md5sum/md5sum.c:267
+#: utils/md5sum.c:267
#, c-format
msgid "%s: %d of %d file(s) failed MD5 check\n"
msgstr ""
-#: md5sum/md5sum.c:269
+#: utils/md5sum.c:269
#, c-format
msgid "%s: no files checked\n"
msgstr ""
-#: dselect/basecmds.cc:99
+#: dselect/basecmds.cc:101
msgid "Search for ? "
msgstr ""
-#: dselect/basecmds.cc:126
+#: dselect/basecmds.cc:132
msgid "Help: "
msgstr ""
-#: dselect/basecmds.cc:132
+#: dselect/basecmds.cc:138
msgid ""
"? = help menu Space = exit help . = next help or a help page key "
msgstr ""
-#: dselect/basecmds.cc:140
+#: dselect/basecmds.cc:146
msgid "Help information is available under the following topics:"
msgstr ""
-#: dselect/basecmds.cc:148
+#: dselect/basecmds.cc:154
msgid ""
"Press a key from the list above, Space to exit help,\n"
" or `.' (full stop) to read each help page in turn. "
msgstr ""
-#: dselect/basecmds.cc:154
+#: dselect/basecmds.cc:160
msgid "error reading keyboard in help"
msgstr ""
msgstr ""
#: dselect/main.cc:51
-msgid "Type "
+msgid "Type dselect --help for help."
msgstr ""
#: dselect/main.cc:66
msgid "menu"
msgstr ""
+#: dselect/main.cc:78
+#, c-format
+msgid "Debian Linux `%s' package handling frontend."
+msgstr ""
+
#: dselect/main.cc:81
-msgid "Version "
+#, c-format
+msgid ""
+"Version %s. Copyright (C) 1994-1996 Ian Jackson. This is\n"
+"free software; see the GNU General Public Licence version 2 or later for\n"
+"copying conditions. There is NO warranty. See dselect --licence for "
+"details.\n"
msgstr ""
-#: dselect/main.cc:91
+#: dselect/main.cc:93
msgid ""
"Usage: dselect [options]\n"
" dselect [options] action ...\n"
"Actions: access update select install config remove quit menu\n"
msgstr ""
-#: dselect/main.cc:137
+#: dselect/main.cc:139
#, c-format
msgid "couldn't open debug file `%.255s'\n"
msgstr ""
-#: dselect/main.cc:163
+#: dselect/main.cc:165
msgid "Terminal does not appear to support cursor addressing.\n"
msgstr ""
-#: dselect/main.cc:165
+#: dselect/main.cc:167
msgid "Terminal does not appear to support highlighting.\n"
msgstr ""
-#: dselect/main.cc:166
+#: dselect/main.cc:168
msgid ""
"Set your TERM variable correctly, use a better terminal,\n"
"or make do with the per-package management tool "
msgstr ""
-#: dselect/main.cc:168
+#: dselect/main.cc:170
msgid "terminal lacks necessary features, giving up"
msgstr ""
-#: dselect/main.cc:242
+#: dselect/main.cc:244
msgid ""
"\n"
"\n"
"\n"
msgstr ""
-#: dselect/main.cc:260
+#: dselect/main.cc:262
msgid "failed to getch in main menu"
msgstr ""
-#: dselect/main.cc:331
+#: dselect/main.cc:333
#, c-format
msgid "unknown action string `%.50s'"
msgstr ""
msgid "getch failed"
msgstr ""
-#: dselect/methlist.cc:165 dselect/pkgdepcon.cc:243
+#: dselect/methlist.cc:165 dselect/pkgdepcon.cc:239 dselect/pkgdepcon.cc:278
msgid "[none]"
msgstr ""
msgid "replaces"
msgstr ""
-#: dselect/pkgdisplay.cc:77
-msgid "Req"
+#: dselect/pkgdisplay.cc:75
+msgid "enhances"
msgstr ""
#: dselect/pkgdisplay.cc:78
-msgid "Imp"
+msgid "Req"
msgstr ""
#: dselect/pkgdisplay.cc:79
-msgid "Std"
+msgid "Imp"
msgstr ""
#: dselect/pkgdisplay.cc:80
-msgid "Rec"
+msgid "Std"
msgstr ""
#: dselect/pkgdisplay.cc:81
-msgid "Opt"
+msgid "Rec"
msgstr ""
#: dselect/pkgdisplay.cc:82
-msgid "Xtr"
+msgid "Opt"
msgstr ""
#: dselect/pkgdisplay.cc:83
-msgid "Ctb"
+msgid "Xtr"
msgstr ""
#: dselect/pkgdisplay.cc:84
-msgid "bUG"
+msgid "Ctb"
msgstr ""
#: dselect/pkgdisplay.cc:85
+msgid "bUG"
+msgstr ""
+
+#: dselect/pkgdisplay.cc:86
msgid "?"
msgstr ""
-#: dselect/pkgdisplay.cc:93 dselect/pkgdisplay.cc:113
+#: dselect/pkgdisplay.cc:94 dselect/pkgdisplay.cc:114
msgid "Broken"
msgstr ""
-#: dselect/pkgdisplay.cc:94
+#: dselect/pkgdisplay.cc:95
msgid "New"
msgstr ""
-#: dselect/pkgdisplay.cc:95
+#: dselect/pkgdisplay.cc:96
msgid "Updated"
msgstr ""
-#: dselect/pkgdisplay.cc:96
+#: dselect/pkgdisplay.cc:97
msgid "Obsolete/local"
msgstr ""
-#: dselect/pkgdisplay.cc:97
+#: dselect/pkgdisplay.cc:98
msgid "Up-to-date"
msgstr ""
-#: dselect/pkgdisplay.cc:98
+#: dselect/pkgdisplay.cc:99
msgid "Available"
msgstr ""
-#: dselect/pkgdisplay.cc:99 dselect/pkgdisplay.cc:115
+#: dselect/pkgdisplay.cc:100 dselect/pkgdisplay.cc:116
msgid "Removed"
msgstr ""
-#: dselect/pkgdisplay.cc:100 dselect/pkgdisplay.cc:109
+#: dselect/pkgdisplay.cc:101 dselect/pkgdisplay.cc:110
msgid "Brokenly installed packages"
msgstr ""
-#: dselect/pkgdisplay.cc:101
+#: dselect/pkgdisplay.cc:102
msgid "Newly available packages"
msgstr ""
-#: dselect/pkgdisplay.cc:102
+#: dselect/pkgdisplay.cc:103
msgid "Updated packages (newer version is available)"
msgstr ""
-#: dselect/pkgdisplay.cc:103
+#: dselect/pkgdisplay.cc:104
msgid "Obsolete and local packages present on system"
msgstr ""
-#: dselect/pkgdisplay.cc:104
+#: dselect/pkgdisplay.cc:105
msgid "Up to date installed packages"
msgstr ""
-#: dselect/pkgdisplay.cc:105
+#: dselect/pkgdisplay.cc:106
msgid "Available packages (not currently installed)"
msgstr ""
-#: dselect/pkgdisplay.cc:106
+#: dselect/pkgdisplay.cc:107
msgid "Removed and no longer available packages"
msgstr ""
-#: dselect/pkgdisplay.cc:110
+#: dselect/pkgdisplay.cc:111
msgid "Installed packages"
msgstr ""
-#: dselect/pkgdisplay.cc:111
+#: dselect/pkgdisplay.cc:112
msgid "Removed packages (configuration still present)"
msgstr ""
-#: dselect/pkgdisplay.cc:112
+#: dselect/pkgdisplay.cc:113
msgid "Purged packages and those never installed"
msgstr ""
-#: dselect/pkgdisplay.cc:114
+#: dselect/pkgdisplay.cc:115
msgid "Installed"
msgstr ""
-#: dselect/pkgdisplay.cc:116
+#: dselect/pkgdisplay.cc:117
msgid "Purged"
msgstr ""
-#: dselect/pkgdisplay.cc:194
+#: dselect/pkgdisplay.cc:195
msgid "dselect - recursive package listing"
msgstr ""
-#: dselect/pkgdisplay.cc:195
+#: dselect/pkgdisplay.cc:196
msgid "dselect - inspection of package states"
msgstr ""
-#: dselect/pkgdisplay.cc:196
+#: dselect/pkgdisplay.cc:197
msgid "dselect - main package listing"
msgstr ""
-#: dselect/pkgdisplay.cc:204
+#: dselect/pkgdisplay.cc:205
msgid " (by section)"
msgstr ""
-#: dselect/pkgdisplay.cc:207
+#: dselect/pkgdisplay.cc:208
msgid " (avail., section)"
msgstr ""
-#: dselect/pkgdisplay.cc:210
+#: dselect/pkgdisplay.cc:211
msgid " (status, section)"
msgstr ""
-#: dselect/pkgdisplay.cc:219
+#: dselect/pkgdisplay.cc:220
msgid " (by priority)"
msgstr ""
-#: dselect/pkgdisplay.cc:222
+#: dselect/pkgdisplay.cc:223
msgid " (avail., priority)"
msgstr ""
-#: dselect/pkgdisplay.cc:225
+#: dselect/pkgdisplay.cc:226
msgid " (status, priority)"
msgstr ""
-#: dselect/pkgdisplay.cc:234 dselect/pkgdisplay.cc:246
+#: dselect/pkgdisplay.cc:235 dselect/pkgdisplay.cc:247
msgid " (alphabetically)"
msgstr ""
-#: dselect/pkgdisplay.cc:237
+#: dselect/pkgdisplay.cc:238
msgid " (by availability)"
msgstr ""
-#: dselect/pkgdisplay.cc:240
+#: dselect/pkgdisplay.cc:241
msgid " (by status)"
msgstr ""
-#: dselect/pkgdisplay.cc:254
+#: dselect/pkgdisplay.cc:255
msgid " mark:+/=/- terse:v help:?"
msgstr ""
-#: dselect/pkgdisplay.cc:255
+#: dselect/pkgdisplay.cc:256
msgid " mark:+/=/- verbose:v help:?"
msgstr ""
-#: dselect/pkgdisplay.cc:256
+#: dselect/pkgdisplay.cc:257
msgid " terse:v help:?"
msgstr ""
-#: dselect/pkgdisplay.cc:257
+#: dselect/pkgdisplay.cc:258
msgid " verbose:v help:?"
msgstr ""