diff options
author | lukem <lukem@pkgsrc.org> | 2009-08-07 16:39:20 +0000 |
---|---|---|
committer | lukem <lukem@pkgsrc.org> | 2009-08-07 16:39:20 +0000 |
commit | 11a5c5c5c10a3f9583ab196377426ba56ecb1bd1 (patch) | |
tree | 4077196f40a37b0d435079500d9730e02e96a1a0 /editors | |
parent | 1a4481982794fd72abcbf11afd8ce844a7f27c78 (diff) | |
download | pkgsrc-11a5c5c5c10a3f9583ab196377426ba56ecb1bd1.tar.gz |
Apply various features and fixes from NetBSD basesrc:
* Implement options:
expandtab
gtagsmode
matchchars
* Fix tty garbling when quitting from recovery mode.
* Don't coredump during autoindent edge case.
* Set internal version to "nvi-1.81.6nb4 (2009-08-07)"
* Crank pkgrevision to nb4.
Diffstat (limited to 'editors')
29 files changed, 1277 insertions, 7 deletions
diff --git a/editors/nvi/Makefile b/editors/nvi/Makefile index ba5af830544..c493f86ed7e 100644 --- a/editors/nvi/Makefile +++ b/editors/nvi/Makefile @@ -1,8 +1,8 @@ -# $NetBSD: Makefile,v 1.36 2009/02/22 12:20:17 obache Exp $ +# $NetBSD: Makefile,v 1.37 2009/08/07 16:39:20 lukem Exp $ # DISTNAME= nvi-1.81.6 -PKGREVISION= 3 +PKGREVISION= 4 CATEGORIES= editors MASTER_SITES= ${HOMEPAGE} EXTRACT_SUFX= .tar.bz2 diff --git a/editors/nvi/distinfo b/editors/nvi/distinfo index 5c97877f0eb..74a7cff284a 100644 --- a/editors/nvi/distinfo +++ b/editors/nvi/distinfo @@ -1,6 +1,32 @@ -$NetBSD: distinfo,v 1.10 2008/12/21 23:02:24 epg Exp $ +$NetBSD: distinfo,v 1.11 2009/08/07 16:39:20 lukem Exp $ SHA1 (nvi-1.81.6.tar.bz2) = d3445ed69166102735335a2ff60d092d9a9143c6 RMD160 (nvi-1.81.6.tar.bz2) = 0db8568bea96392d9a027044177c60317c8ade36 Size (nvi-1.81.6.tar.bz2) = 1758309 bytes -SHA1 (patch-aa) = 3dcd5033fd0d50a17dd3963640ae8f2aea2c8884 +SHA1 (patch-aa) = 05b8dedd194b09ed5af1fb62273e771ebd7f4326 +SHA1 (patch-ab) = 3687d1006015e84c1f9746b84e167602ae37b7fb +SHA1 (patch-ac) = 3c345cb8871cb887a07ce83bbd43b1c49ebe4b33 +SHA1 (patch-ad) = d940a8c748c087aaf131817902d1f51d48b752c6 +SHA1 (patch-ae) = ad1f45c2feb26ab68626825cd5a1be1b33c30afb +SHA1 (patch-af) = 69b9fff85c852df143eb1ff99a9d45aa7d83d2c4 +SHA1 (patch-ag) = 01df157bd10e03fe28dad7cbb06205c2cfc75691 +SHA1 (patch-ah) = c76390627309fecc852fd4fe7b73fc83aedeb060 +SHA1 (patch-ai) = 0a08e7f24adb0e6f2868e62cf6016d69ae728bb6 +SHA1 (patch-aj) = b81d2f3c320910b11dbb487fff8cd33aa2c23c04 +SHA1 (patch-ak) = 1e83a5f50fdb97c37e93536ac90e58513e81f77d +SHA1 (patch-al) = 3d48b2af0f8651b100b82044e267b4d81b6c2772 +SHA1 (patch-am) = 65fb052102c91991af9326defeac7c729ba560b5 +SHA1 (patch-an) = a6535dfdaceb41209261d729d8b8c2da813149ea +SHA1 (patch-ao) = 5dde6860125272f0687f5156485f3d1f43f6d93b +SHA1 (patch-ap) = f7d23b584a9ea29cf62abf6a1a2e19e6ed120b34 +SHA1 (patch-aq) = 88b7c21c564fc817d615f3ae72fbc0dd517bc5f6 +SHA1 (patch-ar) = c2f139cc92e8a815345ae81e7cb57d2109ad4564 +SHA1 (patch-as) = ca88e0416999ad81098a41d041e51031092d2f4d +SHA1 (patch-at) = 1fc5d51b90d282de9a8c2ed13ff85498167e98f3 +SHA1 (patch-au) = c34912b6d07acf95973426b352f55110c936a66f +SHA1 (patch-av) = 218174e98f01ed8344aae44dcc28db77cc0fdc60 +SHA1 (patch-aw) = 678945c18fbbd9c5908aee4b1348ddfc2a3bda00 +SHA1 (patch-ax) = a93cc5271ff924d561b7d532dec280093637f42d +SHA1 (patch-ay) = db7c5d05a28bb14fb351645de9426b34b659ed4b +SHA1 (patch-az) = ba04f94a768c0c9d72f9810689c2f0c46e2e4e92 +SHA1 (patch-ba) = 3249565cb20d4b73acce2cc27945bddb0f9ab0da diff --git a/editors/nvi/patches/patch-aa b/editors/nvi/patches/patch-aa index 508be3cbd70..c3af045f01e 100644 --- a/editors/nvi/patches/patch-aa +++ b/editors/nvi/patches/patch-aa @@ -1,10 +1,10 @@ -$NetBSD: patch-aa,v 1.3 2008/12/21 23:02:24 epg Exp $ +$NetBSD: patch-aa,v 1.4 2009/08/07 16:39:20 lukem Exp $ BDB 4.4 and up requires DB_CREATE or it will spew "DB_CREATE must be specified to create databases." when nvi edits a file. ---- ../common/db.h.orig 2007-11-18 16:41:42.000000000 +0000 -+++ ../common/db.h 2008-12-21 00:18:11.000000000 +0000 +--- ../common/db.h.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/db.h @@ -16,7 +16,10 @@ (env)->remove(env, path, NULL, flags) #endif diff --git a/editors/nvi/patches/patch-ab b/editors/nvi/patches/patch-ab new file mode 100644 index 00000000000..34e6ac88598 --- /dev/null +++ b/editors/nvi/patches/patch-ab @@ -0,0 +1,13 @@ +$NetBSD: patch-ab,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/exf.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/exf.c +@@ -184,7 +184,7 @@ file_init(SCR *sp, FREF *frp, char *rcv_ + CALLOC_RET(sp, ep, EXF *, 1, sizeof(EXF)); + CIRCLEQ_INIT(&ep->scrq); + sp->c_lno = ep->c_nlines = OOBLNO; +- ep->rcv_fd = ep->fcntl_fd = -1; ++ ep->fd = ep->rcv_fd = ep->fcntl_fd = -1; + F_SET(ep, F_FIRSTMODIFY); + + /* diff --git a/editors/nvi/patches/patch-ac b/editors/nvi/patches/patch-ac new file mode 100644 index 00000000000..ec13931602b --- /dev/null +++ b/editors/nvi/patches/patch-ac @@ -0,0 +1,14 @@ +$NetBSD: patch-ac,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../catalog/dutch.base.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../catalog/dutch.base +@@ -43,8 +43,7 @@ + 044 "De lisp optie is niet ondersteund" + 045 "messages niet uitgeschakeld: %s" + 046 "messages niet geactiveerd: %s" +-048 "De paragraph optie moet karakter paren bevatten" +-049 "De section optie moet karakter paren bevatten" ++047 "set: de %s optie moet karakter paren bevatten" + 053 "De standaard buffer is leeg" + 054 "Buffer %s is leeg" + 055 "Bestanden met newlines in de naam kunnen niet hersteld worden" diff --git a/editors/nvi/patches/patch-ad b/editors/nvi/patches/patch-ad new file mode 100644 index 00000000000..a4a103fca7d --- /dev/null +++ b/editors/nvi/patches/patch-ad @@ -0,0 +1,14 @@ +$NetBSD: patch-ad,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../catalog/french.base.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../catalog/french.base +@@ -43,8 +43,7 @@ + 044 "L'option lisp n'est pas implémentée" + 045 "Les messages ne sont pas désactivés : %s" + 046 "Les messages ne sont pas activés : %s" +-048 "L'option de paragraphe doit être en groupe de deux caractères" +-049 "L'option de section doit être en groupe de deux caractères" ++047 "D‚finition : l'option de %s doit ˆtre en groupe de deux caractŠres" + 053 "Le tampon par défaut est vide" + 054 "Le tampon %s est vide" + 055 "Les fichiers dont le nom contient des caractères de saut de ligne sont irrécupérables" diff --git a/editors/nvi/patches/patch-ae b/editors/nvi/patches/patch-ae new file mode 100644 index 00000000000..05fe280a22b --- /dev/null +++ b/editors/nvi/patches/patch-ae @@ -0,0 +1,14 @@ +$NetBSD: patch-ae,v 1.5 2009/08/07 16:39:21 lukem Exp $ + +--- ../catalog/german.base.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../catalog/german.base +@@ -43,8 +43,7 @@ + 044 "Die lisp-Option ist nicht implementiert" + 045 "Meldungen nicht abgeschaltet: %s" + 046 "Meldungen nicht eingeschaltet: %s" +-048 "Die paragraph-Option muß Gruppen zu zwei Zeichen enthalten" +-049 "Die section-Option muß Gruppen zu zwei Zeichen enthalten" ++047 "set: Die %s Option muss Gruppen zu zwei Zeichen enthalten" + 053 "Der Standardpuffer ist leer" + 054 "Puffer %s ist leer" + 055 "Dateien mit newlines im Namen sind nicht wiederherstellbar" diff --git a/editors/nvi/patches/patch-af b/editors/nvi/patches/patch-af new file mode 100644 index 00000000000..b8593a6cc3f --- /dev/null +++ b/editors/nvi/patches/patch-af @@ -0,0 +1,14 @@ +$NetBSD: patch-af,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../catalog/spanish.base.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../catalog/spanish.base +@@ -43,8 +43,7 @@ + 044 "La opci¢n lisp no est implementada" + 045 "mensajes no desconectados: %s" + 046 "mensajes no conectados: %s" +-048 "La opci¢n de p rrafo debe estar en dos grupos de caracteres" +-049 "La opci¢n de secci¢n debe estar en dos grupos de caracteres" ++047 "determinar: La opci¢n de %s debe estar en dos grupos de caracteres" + 053 "El buffer por omisi¢n est vac¡o" + 054 "El buffer %s est vac¡o" + 055 "Los archivos con nuevas l¡neas en el nombre son irrecuperables" diff --git a/editors/nvi/patches/patch-ag b/editors/nvi/patches/patch-ag new file mode 100644 index 00000000000..24ba381100f --- /dev/null +++ b/editors/nvi/patches/patch-ag @@ -0,0 +1,14 @@ +$NetBSD: patch-ag,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../catalog/swedish.base.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../catalog/swedish.base +@@ -43,8 +43,7 @@ + 044 "Lisp flaggan är inte implementerad" + 045 "meddelanden är inte avslagna: %s" + 046 "meddelanden är inte påslagna: %s" +-048 "Paragraph flaggan måste ges i teckengrupper om två" +-049 "Section flaggan måste ges i teckengrupper om två" ++047 "set: %s flaggan måste ges i teckengrupper om två" + 053 "Standardbufferten är tom" + 054 "Buffer %s är tom" + 055 "Filer med radmatning i namnet kan inte återskapas" diff --git a/editors/nvi/patches/patch-ah b/editors/nvi/patches/patch-ah new file mode 100644 index 00000000000..40385b2916c --- /dev/null +++ b/editors/nvi/patches/patch-ah @@ -0,0 +1,25 @@ +$NetBSD: patch-ah,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/options.awk.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/options.awk +@@ -2,6 +2,18 @@ + + /^\/\* O_[0-9A-Z_]*/ { +- printf("#define %s %d\n", $2, cnt++); +- next; ++ opt = $2 ++ printf("#define %s %d\n", opt, cnt++) ++ ofs = FS ++ FS="\"" ++ do getline ++ while ($1 != " {L(") ++ FS=ofs ++ opt_name = $2 ++ if (opt_name < prev_name) { ++ printf "missorted %s: \"%s\" < \"%s\"\n", opt, opt_name, prev_name >"/dev/stderr" ++ exit 1 ++ } ++ prev_name = opt_name ++ next + } + END { diff --git a/editors/nvi/patches/patch-ai b/editors/nvi/patches/patch-ai new file mode 100644 index 00000000000..d2da35ddd56 --- /dev/null +++ b/editors/nvi/patches/patch-ai @@ -0,0 +1,111 @@ +$NetBSD: patch-ai,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/options.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/options.c +@@ -48,6 +48,8 @@ static int opts_print __P((SCR *, OPT + * + * HPUX noted options and abbreviations are from "The Ultimate Guide to the + * VI and EX Text Editors", 1990. ++ * ++ * This list must be sorted... + */ + OPTLIST const optlist[] = { + /* O_ALTWERASE 4.4BSD */ +@@ -76,10 +78,12 @@ OPTLIST const optlist[] = { + {L("directory"), NULL, OPT_STR, 0}, + /* O_EDCOMPATIBLE 4BSD */ + {L("edcompatible"),NULL, OPT_0BOOL, 0}, +-/* O_ESCAPETIME 4.4BSD */ +- {L("escapetime"), NULL, OPT_NUM, 0}, + /* O_ERRORBELLS 4BSD */ + {L("errorbells"), NULL, OPT_0BOOL, 0}, ++/* O_ESCAPETIME 4.4BSD */ ++ {L("escapetime"), NULL, OPT_NUM, 0}, ++/* O_EXPANDTAB NetBSD 5.0 */ ++ {L("expandtab"), NULL, OPT_0BOOL, 0}, + /* O_EXRC System V (undocumented) */ + {L("exrc"), NULL, OPT_0BOOL, 0}, + /* O_EXTENDED 4.4BSD */ +@@ -90,6 +94,8 @@ OPTLIST const optlist[] = { + {L("fileencoding"),f_encoding, OPT_STR, OPT_WC}, + /* O_FLASH HPUX */ + {L("flash"), NULL, OPT_1BOOL, 0}, ++/* O_GTAGSMODE FreeBSD/NetBSD */ ++ {L("gtagsmode"),NULL, OPT_1BOOL, 0}, + /* O_HARDTABS 4BSD */ + {L("hardtabs"), NULL, OPT_NUM, 0}, + /* O_ICLOWER 4.4BSD */ +@@ -120,6 +126,8 @@ OPTLIST const optlist[] = { + {L("lock"), NULL, OPT_1BOOL, 0}, + /* O_MAGIC 4BSD */ + {L("magic"), NULL, OPT_1BOOL, 0}, ++/* O_MATCHCHARS netbsd 2.0 */ ++ {L("matchchars"), NULL, OPT_STR, OPT_PAIRS}, + /* O_MATCHTIME 4.4BSD */ + {L("matchtime"), NULL, OPT_NUM, 0}, + /* O_MESG 4BSD */ +@@ -146,7 +154,7 @@ OPTLIST const optlist[] = { + /* O_OPTIMIZE 4BSD */ + {L("optimize"), NULL, OPT_1BOOL, 0}, + /* O_PARAGRAPHS 4BSD */ +- {L("paragraphs"), f_paragraph, OPT_STR, 0}, ++ {L("paragraphs"), NULL, OPT_STR, OPT_PAIRS}, + /* O_PATH 4.4BSD */ + {L("path"), NULL, OPT_STR, 0}, + /* O_PRINT 4.4BSD */ +@@ -170,7 +178,7 @@ OPTLIST const optlist[] = { + /* O_SEARCHINCR 4.4BSD */ + {L("searchincr"), NULL, OPT_0BOOL, 0}, + /* O_SECTIONS 4BSD */ +- {L("sections"), f_section, OPT_STR, 0}, ++ {L("sections"), NULL, OPT_STR, OPT_PAIRS}, + /* O_SECURE 4.4BSD */ + {L("secure"), NULL, OPT_0BOOL, OPT_NOUNSET}, + /* O_SHELL 4BSD */ +@@ -255,7 +263,9 @@ static OABBREV const abbrev[] = { + {L("dir"), O_TMP_DIRECTORY}, /* 4BSD */ + {L("eb"), O_ERRORBELLS}, /* 4BSD */ + {L("ed"), O_EDCOMPATIBLE}, /* 4BSD */ ++ {L("et"), O_EXPANDTAB}, /* NetBSD 5.0 */ + {L("ex"), O_EXRC}, /* System V (undocumented) */ ++ {L("gt"), O_GTAGSMODE}, /* FreeBSD, NetBSD */ + {L("fe"), O_FILEENCODING}, + {L("ht"), O_HARDTABS}, /* 4BSD */ + {L("ic"), O_IGNORECASE}, /* 4BSD */ +@@ -307,6 +317,13 @@ opts_init(SCR *sp, int *oargs) + CHAR_T *wp; + size_t wlen; + ++ if (sizeof optlist / sizeof optlist[0] - 1 != O_OPTIONCOUNT) { ++ fprintf(stderr, "vi: option table size error (%d != %d)\n", ++ (int)(sizeof optlist / sizeof optlist[0] - 1), ++ O_OPTIONCOUNT); ++ exit(1); ++ } ++ + a.bp = b2; + b.bp = NULL; + a.len = b.len = 0; +@@ -358,6 +375,7 @@ opts_init(SCR *sp, int *oargs) + OI(O_TMP_DIRECTORY, b2); + OI(O_ESCAPETIME, L("escapetime=1")); + OI(O_KEYTIME, L("keytime=6")); ++ OI(O_MATCHCHARS, L("matchchars=()[]{}<>")); + OI(O_MATCHTIME, L("matchtime=7")); + (void)SPRINTF(b2, SIZE(b2), L("msgcat=%s"), _PATH_MSGCAT); + OI(O_MSGCAT, b2); +@@ -708,6 +726,14 @@ badnum: INT2CHAR(sp, name, STRLEN(nam + break; + } + ++ /* Check for strings that must have even length */ ++ if (F_ISSET(op, OPT_PAIRS) && STRLEN(sep) & 1) { ++ msgq_wstr(sp, M_ERR, name, ++ "047|set: the %s option must be in two character groups"); ++ rval = 1; ++ break; ++ } ++ + /* + * Do nothing if the value is unchanged, the underlying + * functions can be expensive. diff --git a/editors/nvi/patches/patch-aj b/editors/nvi/patches/patch-aj new file mode 100644 index 00000000000..ccff4b1ec9f --- /dev/null +++ b/editors/nvi/patches/patch-aj @@ -0,0 +1,12 @@ +$NetBSD: patch-aj,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/options.h.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/options.h +@@ -89,6 +89,7 @@ struct _optlist { + #define OPT_NOSET 0x010 /* Option may not be set. */ + #define OPT_NOUNSET 0x020 /* Option may not be unset. */ + #define OPT_NOZERO 0x040 /* Option may not be set to 0. */ ++#define OPT_PAIRS 0x080 /* String with even length */ + u_int8_t flags; + }; + diff --git a/editors/nvi/patches/patch-ak b/editors/nvi/patches/patch-ak new file mode 100644 index 00000000000..988cae610f5 --- /dev/null +++ b/editors/nvi/patches/patch-ak @@ -0,0 +1,154 @@ +$NetBSD: patch-ak,v 1.3 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/options_def.h.orig 2007-11-19 03:43:54.000000000 +1100 ++++ ../common/options_def.h +@@ -1,4 +1,3 @@ +-/* Do not edit: automatically built by build/distrib. */ + #define O_ALTWERASE 0 + #define O_AUTOINDENT 1 + #define O_AUTOPRINT 2 +@@ -12,72 +11,75 @@ + #define O_COMMENT 10 + #define O_TMP_DIRECTORY 11 + #define O_EDCOMPATIBLE 12 +-#define O_ESCAPETIME 13 +-#define O_ERRORBELLS 14 +-#define O_EXRC 15 +-#define O_EXTENDED 16 +-#define O_FILEC 17 +-#define O_FILEENCODING 18 +-#define O_FLASH 19 +-#define O_HARDTABS 20 +-#define O_ICLOWER 21 +-#define O_IGNORECASE 22 +-#define O_INPUTENCODING 23 +-#define O_KEYTIME 24 +-#define O_LEFTRIGHT 25 +-#define O_LINES 26 +-#define O_LISP 27 +-#define O_LIST 28 +-#define O_LOCKFILES 29 +-#define O_MAGIC 30 +-#define O_MATCHTIME 31 +-#define O_MESG 32 +-#define O_MODELINE 33 +-#define O_MSGCAT 34 +-#define O_NOPRINT 35 +-#define O_NUMBER 36 +-#define O_OCTAL 37 +-#define O_OPEN 38 +-#define O_OPTIMIZE 39 +-#define O_PARAGRAPHS 40 +-#define O_PATH 41 +-#define O_PRINT 42 +-#define O_PROMPT 43 +-#define O_READONLY 44 +-#define O_RECDIR 45 +-#define O_REDRAW 46 +-#define O_REMAP 47 +-#define O_REPORT 48 +-#define O_RULER 49 +-#define O_SCROLL 50 +-#define O_SEARCHINCR 51 +-#define O_SECTIONS 52 +-#define O_SECURE 53 +-#define O_SHELL 54 +-#define O_SHELLMETA 55 +-#define O_SHIFTWIDTH 56 +-#define O_SHOWMATCH 57 +-#define O_SHOWMODE 58 +-#define O_SIDESCROLL 59 +-#define O_SLOWOPEN 60 +-#define O_SOURCEANY 61 +-#define O_TABSTOP 62 +-#define O_TAGLENGTH 63 +-#define O_TAGS 64 +-#define O_TERM 65 +-#define O_TERSE 66 +-#define O_TILDEOP 67 +-#define O_TIMEOUT 68 +-#define O_TTYWERASE 69 +-#define O_VERBOSE 70 +-#define O_W1200 71 +-#define O_W300 72 +-#define O_W9600 73 +-#define O_WARN 74 +-#define O_WINDOW 75 +-#define O_WINDOWNAME 76 +-#define O_WRAPLEN 77 +-#define O_WRAPMARGIN 78 +-#define O_WRAPSCAN 79 +-#define O_WRITEANY 80 +-#define O_OPTIONCOUNT 81 ++#define O_ERRORBELLS 13 ++#define O_ESCAPETIME 14 ++#define O_EXPANDTAB 15 ++#define O_EXRC 16 ++#define O_EXTENDED 17 ++#define O_FILEC 18 ++#define O_FILEENCODING 19 ++#define O_FLASH 20 ++#define O_GTAGSMODE 21 ++#define O_HARDTABS 22 ++#define O_ICLOWER 23 ++#define O_IGNORECASE 24 ++#define O_INPUTENCODING 25 ++#define O_KEYTIME 26 ++#define O_LEFTRIGHT 27 ++#define O_LINES 28 ++#define O_LISP 29 ++#define O_LIST 30 ++#define O_LOCKFILES 31 ++#define O_MAGIC 32 ++#define O_MATCHCHARS 33 ++#define O_MATCHTIME 34 ++#define O_MESG 35 ++#define O_MODELINE 36 ++#define O_MSGCAT 37 ++#define O_NOPRINT 38 ++#define O_NUMBER 39 ++#define O_OCTAL 40 ++#define O_OPEN 41 ++#define O_OPTIMIZE 42 ++#define O_PARAGRAPHS 43 ++#define O_PATH 44 ++#define O_PRINT 45 ++#define O_PROMPT 46 ++#define O_READONLY 47 ++#define O_RECDIR 48 ++#define O_REDRAW 49 ++#define O_REMAP 50 ++#define O_REPORT 51 ++#define O_RULER 52 ++#define O_SCROLL 53 ++#define O_SEARCHINCR 54 ++#define O_SECTIONS 55 ++#define O_SECURE 56 ++#define O_SHELL 57 ++#define O_SHELLMETA 58 ++#define O_SHIFTWIDTH 59 ++#define O_SHOWMATCH 60 ++#define O_SHOWMODE 61 ++#define O_SIDESCROLL 62 ++#define O_SLOWOPEN 63 ++#define O_SOURCEANY 64 ++#define O_TABSTOP 65 ++#define O_TAGLENGTH 66 ++#define O_TAGS 67 ++#define O_TERM 68 ++#define O_TERSE 69 ++#define O_TILDEOP 70 ++#define O_TIMEOUT 71 ++#define O_TTYWERASE 72 ++#define O_VERBOSE 73 ++#define O_W1200 74 ++#define O_W300 75 ++#define O_W9600 76 ++#define O_WARN 77 ++#define O_WINDOW 78 ++#define O_WINDOWNAME 79 ++#define O_WRAPLEN 80 ++#define O_WRAPMARGIN 81 ++#define O_WRAPSCAN 82 ++#define O_WRITEANY 83 ++#define O_OPTIONCOUNT 84 diff --git a/editors/nvi/patches/patch-al b/editors/nvi/patches/patch-al new file mode 100644 index 00000000000..e7fcaad25ac --- /dev/null +++ b/editors/nvi/patches/patch-al @@ -0,0 +1,64 @@ +$NetBSD: patch-al,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/options_f.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/options_f.c +@@ -60,7 +60,7 @@ f_columns(SCR *sp, OPTION *op, char *str + * number of lines/columns for the screen, but at least we don't drop + * core. + */ +-#define MAXIMUM_SCREEN_COLS 500 ++#define MAXIMUM_SCREEN_COLS 4000 + if (*valp > MAXIMUM_SCREEN_COLS) { + msgq(sp, M_ERR, "041|Screen columns too large, greater than %d", + MAXIMUM_SCREEN_COLS); +@@ -90,7 +90,7 @@ f_lines(SCR *sp, OPTION *op, char *str, + * number of lines/columns for the screen, but at least we don't drop + * core. + */ +-#define MAXIMUM_SCREEN_ROWS 500 ++#define MAXIMUM_SCREEN_ROWS 4000 + if (*valp > MAXIMUM_SCREEN_ROWS) { + msgq(sp, M_ERR, "043|Screen lines too large, greater than %d", + MAXIMUM_SCREEN_ROWS); +@@ -143,20 +143,6 @@ f_msgcat(SCR *sp, OPTION *op, char *str, + } + + /* +- * PUBLIC: int f_paragraph __P((SCR *, OPTION *, char *, u_long *)); +- */ +-int +-f_paragraph(SCR *sp, OPTION *op, char *str, u_long *valp) +-{ +- if (strlen(str) & 1) { +- msgq(sp, M_ERR, +- "048|The paragraph option must be in two character groups"); +- return (1); +- } +- return (0); +-} +- +-/* + * PUBLIC: int f_print __P((SCR *, OPTION *, char *, u_long *)); + */ + int +@@ -226,20 +212,6 @@ f_reformat(SCR *sp, OPTION *op, char *st + } + + /* +- * PUBLIC: int f_section __P((SCR *, OPTION *, char *, u_long *)); +- */ +-int +-f_section(SCR *sp, OPTION *op, char *str, u_long *valp) +-{ +- if (strlen(str) & 1) { +- msgq(sp, M_ERR, +- "049|The section option must be in two character groups"); +- return (1); +- } +- return (0); +-} +- +-/* + * PUBLIC: int f_ttywerase __P((SCR *, OPTION *, char *, u_long *)); + */ + int diff --git a/editors/nvi/patches/patch-am b/editors/nvi/patches/patch-am new file mode 100644 index 00000000000..0f2751cbb06 --- /dev/null +++ b/editors/nvi/patches/patch-am @@ -0,0 +1,99 @@ +$NetBSD: patch-am,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../docs/vi.man/vi.1.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../docs/vi.man/vi.1 +@@ -17,7 +17,7 @@ ex, vi, view \- text editors + .SH SYNOPSIS + .B ex + [\c +-.B -eFRrSsv\c ++.B -eFGRrSsv\c + ] [\c + .BI -c " cmd"\c + ] [\c +@@ -39,7 +39,7 @@ ex, vi, view \- text editors + .br + .B view + [\c +-.B -eFRrSv\c ++.B -eFGRrSv\c + ] [\c + .BI -c " cmd"\c + ] [\c +@@ -118,6 +118,9 @@ Don't copy the entire file when first st + (The default is to make a copy in case someone else modifies + the file during your edit session.) + .TP ++.B \-G ++Start editing in gtags mode, as if the gtagsmode option was set. ++.TP + .B \-l + Start editing with the lisp and showmatch options set. + .TP +@@ -429,6 +432,8 @@ commands or cancel partial commands. + .TP + .B "<control-]>" + Push a tag reference onto the tag stack. ++In gtagsmode, if at the first column of line, ++locate function references otherwise function definitions. + .TP + .B "<control-^>" + Switch to the most recently edited file. +@@ -774,6 +779,11 @@ and + characters to move forward to the next + .B shiftwidth + column boundary. ++If ++.B expandtab ++is set, only insert ++.I <space> ++characters. + .TP + .B "<erase> + .TP +@@ -940,6 +950,9 @@ Grow or shrink the current screen. + .B "rew[ind][!]" + Rewind the argument list. + .TP ++.B "rta[g][!] tagstring" ++Edit the file refering the specified tag. (Only in gtagsmode) ++.TP + .B "se[t] [option[=[value]] ...] [nooption ...] [option? ...] [all]" + Display or set editor options. + .TP +@@ -1095,6 +1108,15 @@ command. + only. + Announce error messages with a bell. + .TP ++.B "expandtab, et [off]" ++Prevent the use of ++.I <tab> ++characters in leading whitespace when shifting text, autoindenting, ++indenting with ++.BR "<control-T>" , ++or outdenting with ++.BR "<control-D>" . ++.TP + .B "exrc, ex [off]" + Read the startup files in the local directory. + .TP +@@ -1110,6 +1132,9 @@ command line. + .B "flash [on]" + Flash the screen instead of beeping the keyboard on error. + .TP ++.B "gtagsmode, gt [off]" ++Use GTAGS and GRTAGS instead of tags. ++.TP + .B "hardtabs, ht [8]" + Set the spacing between hardware tab settings. + .TP +@@ -1151,6 +1176,9 @@ read or written. + .B "magic [on]" + Treat certain characters specially in regular expressions. + .TP ++.B "matchchars [[]{}()<>]" ++Character pairs looked for by the % command. ++.TP + .B "matchtime [7]" + .I \&Vi + only. diff --git a/editors/nvi/patches/patch-an b/editors/nvi/patches/patch-an new file mode 100644 index 00000000000..d325441868a --- /dev/null +++ b/editors/nvi/patches/patch-an @@ -0,0 +1,49 @@ +$NetBSD: patch-an,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../docs/vi.ref/set.opt.texi.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../docs/vi.ref/set.opt.texi +@@ -97,7 +97,10 @@ the first nonblank character of the line + Lines are indented using tab characters to the extent possible (based on + the value of the + @OP{tabstop} +-option) and then using space characters as necessary. ++option, ++and if ++@OP{expandtab} ++is not set) and then using space characters as necessary. + For commands inserting text into the middle of a line, any blank characters + to the right of the cursor are discarded, and the first nonblank character + to the right of the cursor is aligned as described above. +@@ -407,6 +410,16 @@ only. + error messages are normally presented in inverse video. + If that is not possible for the terminal, setting this option causes + error messages to be announced by ringing the terminal bell. ++@cindex expandtab ++@IP{expandtab, et [off]} ++ ++Prevent the use of ++@LI{<tab>} ++characters in leading whitespace when shifting text, autoindenting, ++indenting with ++@CO{<control-T>}, ++or outdenting with ++@CO{<control-D>}. + @cindex exrc + @IP{exrc, ex [off]} + +@@ -593,6 +606,15 @@ character. + See the section entitled + @QB{Regular Expressions and Replacement Strings} + for more information. ++@cindex matchchars ++@IP{matchchars [[]{}()<>]} ++ ++@CO{Vi} ++only. ++This option defines the character pairs used by the ++@CO{%} ++command. ++ + @cindex matchtime + @IP{matchtime [7]} + diff --git a/editors/nvi/patches/patch-ao b/editors/nvi/patches/patch-ao new file mode 100644 index 00000000000..33a95e94bab --- /dev/null +++ b/editors/nvi/patches/patch-ao @@ -0,0 +1,32 @@ +$NetBSD: patch-ao,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../docs/vi.ref/vi.cmd.texi.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../docs/vi.ref/vi.cmd.texi +@@ -1044,13 +1044,23 @@ None. + @deftypefn Command {} {%} + + Move to the matching character. +-The cursor moves to the parenthesis or curly brace which ++The cursor moves to the bracket character which + @emph{matches} +-the parenthesis or curly brace found at the current cursor position ++the bracket found at the current cursor position + or which is the closest one to the right of the cursor on the line. +-It is an error to execute the ++The bracket characters are defined by the ++@OP{matchchars} ++option. ++An error will be reported if none of the ++@OP{matchchars} ++characters is found, or if no matching character is found. ++If the open and close brackes are identical (e.g.: if they are ++@QT{'} ++or ++@QT{"}, ++then repeating a + @CO{%} +-command on a line without a parenthesis or curly brace. ++command will perform a backwards search from the original opening bracket. + Historically, any + @LI{count}specified to the + @CO{%} diff --git a/editors/nvi/patches/patch-ap b/editors/nvi/patches/patch-ap new file mode 100644 index 00000000000..26e1b8ab72e --- /dev/null +++ b/editors/nvi/patches/patch-ap @@ -0,0 +1,111 @@ +$NetBSD: patch-ap,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../vi/v_match.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../vi/v_match.c +@@ -39,6 +39,19 @@ v_match(SCR *sp, VICMD *vp) + size_t cno, len, off; + int cnt, isempty, matchc, startc, (*gc)__P((SCR *, VCS *)); + CHAR_T *p; ++ char *cp; ++ char *match_chars; ++ ++ static int match_lno, match_col, match_dir; ++ ++ /* ++ * Historically vi would match (), {} and [] however ++ * an update included <>. This is ok for editing HTML ++ * but a pain in the butt for C source. ++ * Making it an option lets the user decide what is 'right'. ++ * Also fixed to do something sensible with "". ++ */ ++ match_chars = O_STR(sp, O_MATCHCHARS); + + /* + * !!! +@@ -58,44 +71,27 @@ v_match(SCR *sp, VICMD *vp) + nomatch: msgq(sp, M_BERR, "184|No match character on this line"); + return (1); + } +- switch (startc = p[off]) { +- case '(': +- matchc = ')'; +- gc = cs_next; +- break; +- case ')': +- matchc = '('; +- gc = cs_prev; +- break; +- case '[': +- matchc = ']'; +- gc = cs_next; +- break; +- case ']': +- matchc = '['; +- gc = cs_prev; +- break; +- case '{': +- matchc = '}'; +- gc = cs_next; +- break; +- case '}': +- matchc = '{'; +- gc = cs_prev; ++ startc = p[off]; ++ cp = strchr(match_chars, startc); ++ if (cp != NULL) + break; +- case '<': +- matchc = '>'; +- gc = cs_next; +- break; +- case '>': +- matchc = '<'; +- gc = cs_prev; +- break; +- default: +- continue; +- } +- break; + } ++ cnt = cp - match_chars; ++ matchc = match_chars[cnt ^ 1]; ++ ++ /* Alternate back-forward search if startc and matchc the same */ ++ if (startc == matchc) { ++ /* are we continuing from where last match finished? */ ++ if (match_lno == vp->m_start.lno && match_col ==vp->m_start.cno) ++ /* yes - continue in sequence */ ++ match_dir++; ++ else ++ /* no - go forward, back, back, forward */ ++ match_dir = 1; ++ if (match_dir & 2) ++ cnt++; ++ } ++ gc = cnt & 1 ? cs_prev : cs_next; + + cs.cs_lno = vp->m_start.lno; + cs.cs_cno = off; +@@ -109,10 +105,10 @@ nomatch: msgq(sp, M_BERR, "184|No match + break; + continue; + } ++ if (cs.cs_ch == matchc && --cnt == 0) ++ break; + if (cs.cs_ch == startc) + ++cnt; +- else if (cs.cs_ch == matchc && --cnt == 0) +- break; + } + if (cnt) { + msgq(sp, M_BERR, "185|Matching character not found"); +@@ -139,6 +135,9 @@ nomatch: msgq(sp, M_BERR, "184|No match + else + vp->m_final = vp->m_stop; + ++ match_lno = vp->m_final.lno; ++ match_col = vp->m_final.cno; ++ + /* + * !!! + * If the motion is across lines, and the earliest cursor position diff --git a/editors/nvi/patches/patch-aq b/editors/nvi/patches/patch-aq new file mode 100644 index 00000000000..60da9e2179b --- /dev/null +++ b/editors/nvi/patches/patch-aq @@ -0,0 +1,48 @@ +$NetBSD: patch-aq,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../common/main.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../common/main.c +@@ -62,6 +62,7 @@ editor(WIN *wp, int argc, char **argv) + size_t len; + u_int flags; + int ch, flagchk, lflag, secure, startup, readonly, rval, silent; ++ int gtags = 0; + char *tag_f, *wsizearg, path[256]; + CHAR_T *w; + size_t wlen; +@@ -102,11 +103,13 @@ editor(WIN *wp, int argc, char **argv) + /* Set the file snapshot flag. */ + F_SET(gp, G_SNAPSHOT); + ++ while ((ch = getopt(argc, argv, "c:" + #ifdef DEBUG +- while ((ch = getopt(argc, argv, "c:D:eFlRrSsT:t:vw:")) != EOF) +-#else +- while ((ch = getopt(argc, argv, "c:eFlRrSst:vw:")) != EOF) ++ "D:" + #endif ++ "eF" ++ "G" ++ "lRrSsT:t:vw:")) != EOF) + switch (ch) { + case 'c': /* Run the command. */ + /* +@@ -147,6 +150,9 @@ editor(WIN *wp, int argc, char **argv) + case 'l': /* Set lisp, showmatch options. */ + lflag = 1; + break; ++ case 'G': /* gtags mode. */ ++ gtags = 1; ++ break; + case 'R': /* Readonly. */ + readonly = 1; + break; +@@ -240,6 +246,8 @@ editor(WIN *wp, int argc, char **argv) + } + if (readonly) + *oargp++ = O_READONLY; ++ if (gtags) ++ *oargp++ = O_GTAGSMODE; + if (secure) + *oargp++ = O_SECURE; + *oargp = -1; /* Options initialization. */ diff --git a/editors/nvi/patches/patch-ar b/editors/nvi/patches/patch-ar new file mode 100644 index 00000000000..1e6749e029f --- /dev/null +++ b/editors/nvi/patches/patch-ar @@ -0,0 +1,12 @@ +$NetBSD: patch-ar,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex.h.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../ex/ex.h +@@ -152,6 +152,7 @@ struct _excmd { + #define E_SEARCH_WMSG 0x01000000 /* Display search-wrapped message. */ + #define E_USELASTCMD 0x02000000 /* Use the last command. */ + #define E_VISEARCH 0x04000000 /* It's really a vi search command. */ ++#define E_REFERENCE 0x08000000 /* locate function references */ + u_int32_t flags; /* Current flags. */ + }; + diff --git a/editors/nvi/patches/patch-as b/editors/nvi/patches/patch-as new file mode 100644 index 00000000000..d748863c0de --- /dev/null +++ b/editors/nvi/patches/patch-as @@ -0,0 +1,16 @@ +$NetBSD: patch-as,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex_cmd.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../ex/ex_cmd.c +@@ -302,6 +302,11 @@ EXCMDLIST const cmds[] = { + "!", + "rew[ind][!]", + "re-edit all the files in the file argument list"}, ++/* C_RTAG */ ++ {L("rtag"), ex_rtag_push, E_NEWSCREEN, ++ "!w1o", ++ "rta[g][!] [string]", ++ "edit the file containing the tag"}, + /* + * !!! + * Adding new commands starting with 's' may break the substitute command code diff --git a/editors/nvi/patches/patch-at b/editors/nvi/patches/patch-at new file mode 100644 index 00000000000..e7a011e60e7 --- /dev/null +++ b/editors/nvi/patches/patch-at @@ -0,0 +1,69 @@ +$NetBSD: patch-at,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex_def.h.orig 2007-11-19 03:43:54.000000000 +1100 ++++ ../ex/ex_def.h +@@ -48,33 +48,34 @@ + #define C_RECOVER 46 + #define C_RESIZE 47 + #define C_REWIND 48 +-#define C_SUBSTITUTE 49 +-#define C_SCRIPT 50 +-#define C_SET 51 +-#define C_SHELL 52 +-#define C_SOURCE 53 +-#define C_STOP 54 +-#define C_SUSPEND 55 +-#define C_T 56 +-#define C_TAG 57 +-#define C_TAGNEXT 58 +-#define C_TAGPOP 59 +-#define C_TAGPREV 60 +-#define C_TAGTOP 61 +-#define C_TCLCMD 62 +-#define C_UNDO 63 +-#define C_UNABBREVIATE 64 +-#define C_UNMAP 65 +-#define C_V 66 +-#define C_VERSION 67 +-#define C_VISUAL_EX 68 +-#define C_VISUAL_VI 69 +-#define C_VIUSAGE 70 +-#define C_VSPLIT 71 +-#define C_WRITE 72 +-#define C_WN 73 +-#define C_WQ 74 +-#define C_XIT 75 +-#define C_YANK 76 +-#define C_Z 77 +-#define C_SUBTILDE 78 ++#define C_RTAG 49 ++#define C_SUBSTITUTE 50 ++#define C_SCRIPT 51 ++#define C_SET 52 ++#define C_SHELL 53 ++#define C_SOURCE 54 ++#define C_STOP 55 ++#define C_SUSPEND 56 ++#define C_T 57 ++#define C_TAG 58 ++#define C_TAGNEXT 59 ++#define C_TAGPOP 60 ++#define C_TAGPREV 61 ++#define C_TAGTOP 62 ++#define C_TCLCMD 63 ++#define C_UNDO 64 ++#define C_UNABBREVIATE 65 ++#define C_UNMAP 66 ++#define C_V 67 ++#define C_VERSION 68 ++#define C_VISUAL_EX 69 ++#define C_VISUAL_VI 70 ++#define C_VIUSAGE 71 ++#define C_VSPLIT 72 ++#define C_WRITE 73 ++#define C_WN 74 ++#define C_WQ 75 ++#define C_XIT 76 ++#define C_YANK 77 ++#define C_Z 78 ++#define C_SUBTILDE 79 diff --git a/editors/nvi/patches/patch-au b/editors/nvi/patches/patch-au new file mode 100644 index 00000000000..18491a35cc7 --- /dev/null +++ b/editors/nvi/patches/patch-au @@ -0,0 +1,179 @@ +$NetBSD: patch-au,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex_tag.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../ex/ex_tag.c +@@ -46,6 +46,8 @@ static char *binary_search __P((char *, + static int compare __P((char *, char *, char *)); + static void ctag_file __P((SCR *, TAGF *, char *, char **, size_t *)); + static int ctag_search __P((SCR *, CHAR_T *, size_t, char *)); ++static int getentry __P((char *, char **, char **, char **)); ++static TAGQ *gtag_slist __P((SCR *, CHAR_T *, int)); + static int ctag_sfile __P((SCR *, TAGF *, TAGQ *, char *)); + static TAGQ *ctag_slist __P((SCR *, CHAR_T *)); + static char *linear_search __P((char *, char *, char *, long)); +@@ -87,6 +89,21 @@ ex_tag_first(SCR *sp, CHAR_T *tagarg) + } + + /* ++ * ex_rtag_push -- ^] ++ * :rtag[!] [string] ++ * ++ * Enter a new TAGQ context based on a ctag string. ++ * ++ * PUBLIC: int ex_rtag_push __P((SCR *, EXCMD *)); ++ */ ++int ++ex_rtag_push(SCR *sp, EXCMD *cmdp) ++{ ++ F_SET(cmdp, E_REFERENCE); ++ return ex_tag_push(sp, cmdp); ++} ++ ++/* + * ex_tag_push -- ^] + * :tag[!] [string] + * +@@ -129,6 +146,11 @@ ex_tag_push(SCR *sp, EXCMD *cmdp) + } + + /* Get the tag information. */ ++ if (O_ISSET(sp, O_GTAGSMODE)) { ++ if ((tqp = gtag_slist(sp, exp->tag_last, ++ F_ISSET(cmdp, E_REFERENCE))) == NULL) ++ return (1); ++ } else + if ((tqp = ctag_slist(sp, exp->tag_last)) == NULL) + return (1); + +@@ -980,6 +1002,131 @@ notfound: tag_msg(sp, TAG_SEARCH, tag) + } + + /* ++ * getentry -- ++ * get tag information from current line. ++ * ++ * gtags temporary file format. ++ * <tag> <lineno> <file> <image> ++ * ++ * sample. ++ * +------------------------------------------------ ++ * |main 30 main.c main(argc, argv) ++ * |func 21 subr.c func(arg) ++ */ ++static int ++getentry(char *buf, char **tag, char **file, char **line) ++{ ++ char *p = buf; ++ ++ for (*tag = p; *p && !isspace(*p); p++) /* tag name */ ++ ; ++ if (*p == 0) ++ goto err; ++ *p++ = 0; ++ for (; *p && isspace(*p); p++) /* (skip blanks) */ ++ ; ++ if (*p == 0) ++ goto err; ++ *line = p; /* line no */ ++ for (*line = p; *p && !isspace(*p); p++) ++ ; ++ if (*p == 0) ++ goto err; ++ *p++ = 0; ++ for (; *p && isspace(*p); p++) /* (skip blanks) */ ++ ; ++ if (*p == 0) ++ goto err; ++ *file = p; /* file name */ ++ for (*file = p; *p && !isspace(*p); p++) ++ ; ++ if (*p == 0) ++ goto err; ++ *p = 0; ++ ++ /* value check */ ++ if (strlen(*tag) && strlen(*line) && strlen(*file) && atoi(*line) > 0) ++ return 1; /* OK */ ++err: ++ return 0; /* ERROR */ ++} ++ ++/* ++ * gtag_slist -- ++ * Search the list of tags files for a tag, and return tag queue. ++ */ ++static TAGQ * ++gtag_slist(SCR *sp, CHAR_T *tag, int ref) ++{ ++ EX_PRIVATE *exp; ++ TAGF *tfp; ++ TAGQ *tqp; ++ size_t len, nlen, slen, wlen; ++ int echk; ++ TAG *tp; ++ char *np; ++ char *name, *file, *search; ++ char command[BUFSIZ]; ++ char buf[BUFSIZ]; ++ CHAR_T *wp; ++ FILE *fp; ++ ++ /* Allocate and initialize the tag queue structure. */ ++ INT2CHAR(sp, tag, STRLEN(tag) + 1, np, nlen); ++ len = nlen - 1; ++ CALLOC_GOTO(sp, tqp, TAGQ *, 1, sizeof(TAGQ) + len + 1); ++ CIRCLEQ_INIT(&tqp->tagq); ++ tqp->tag = tqp->buf; ++ memcpy(tqp->tag, np, (tqp->tlen = len) + 1); ++ ++ /* ++ * Find the tag, only display missing file messages once, and ++ * then only if we didn't find the tag. ++ */ ++ snprintf(command, sizeof(command), "global -%s '%s'", ref ? "rx" : "x", ++ np); ++ if (fp = popen(command, "r")) { ++ while (fgets(buf, sizeof(buf), fp)) { ++ if (buf[strlen(buf)-1] == '\n') /* chop(buf) */ ++ buf[strlen(buf)-1] = 0; ++ else ++ while (fgetc(fp) != '\n') ++ ; ++ if (getentry(buf, &name, &file, &search) == 0) { ++ echk = 1; ++ F_SET(tfp, TAGF_ERR); ++ break; ++ } ++ slen = strlen(search); ++ CALLOC_GOTO(sp, tp, ++ TAG *, 1, sizeof(TAG) + strlen(file) + 1 + ++ (slen + 1) * sizeof(CHAR_T)); ++ tp->fname = (char *)tp->buf; ++ strcpy(tp->fname, file); ++ tp->fnlen = strlen(file); ++ tp->search = (CHAR_T *)(tp->fname + tp->fnlen + 1); ++ CHAR2INT(sp, search, slen + 1, wp, wlen); ++ MEMCPYW(tp->search, wp, (tp->slen = slen) + 1); ++ CIRCLEQ_INSERT_TAIL(&tqp->tagq, tp, q); ++ } ++ pclose(fp); ++ } ++ ++ /* Check to see if we found anything. */ ++ if (tqp->tagq.cqh_first == (void *)&tqp->tagq) { ++ msgq_str(sp, M_ERR, np, "162|%s: tag not found"); ++ free(tqp); ++ return (NULL); ++ } ++ ++ tqp->current = tqp->tagq.cqh_first; ++ return (tqp); ++ ++alloc_err: ++ return (NULL); ++} ++ ++/* + * ctag_slist -- + * Search the list of tags files for a tag, and return tag queue. + */ diff --git a/editors/nvi/patches/patch-av b/editors/nvi/patches/patch-av new file mode 100644 index 00000000000..057f1349a21 --- /dev/null +++ b/editors/nvi/patches/patch-av @@ -0,0 +1,12 @@ +$NetBSD: patch-av,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/extern.h.orig 2007-11-19 03:43:54.000000000 +1100 ++++ ../ex/extern.h +@@ -91,6 +91,7 @@ int re_compile __P((SCR *, + CHAR_T *, size_t, CHAR_T **, size_t *, regex_t *, u_int)); + void re_error __P((SCR *, int, regex_t *)); + int ex_tag_first __P((SCR *, CHAR_T *)); ++int ex_rtag_push __P((SCR *, EXCMD *)); + int ex_tag_push __P((SCR *, EXCMD *)); + int ex_tag_next __P((SCR *, EXCMD *)); + int ex_tag_prev __P((SCR *, EXCMD *)); diff --git a/editors/nvi/patches/patch-aw b/editors/nvi/patches/patch-aw new file mode 100644 index 00000000000..9e2fdd934a9 --- /dev/null +++ b/editors/nvi/patches/patch-aw @@ -0,0 +1,14 @@ +$NetBSD: patch-aw,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../vi/v_ex.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../vi/v_ex.c +@@ -209,6 +209,9 @@ v_tagpush(SCR *sp, VICMD *vp) + { + EXCMD cmd; + ++ if (O_ISSET(sp, O_GTAGSMODE) && vp->m_start.cno == 0) ++ ex_cinit(sp, &cmd, C_RTAG, 0, OOBLNO, 0, 0); ++ else + ex_cinit(sp, &cmd, C_TAG, 0, OOBLNO, 0, 0); + argv_exp0(sp, &cmd, VIP(sp)->keyw, STRLEN(VIP(sp)->keyw) + 1); + return (v_exec_ex(sp, vp, &cmd)); diff --git a/editors/nvi/patches/patch-ax b/editors/nvi/patches/patch-ax new file mode 100644 index 00000000000..52f219dde9e --- /dev/null +++ b/editors/nvi/patches/patch-ax @@ -0,0 +1,22 @@ +$NetBSD: patch-ax,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex_shift.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../ex/ex_shift.c +@@ -131,10 +131,13 @@ shift(SCR *sp, EXCMD *cmdp, enum which r + * Build a new indent string and count the number of + * characters it uses. + */ +- for (tbp = bp, newidx = 0; +- newcol >= O_VAL(sp, O_TABSTOP); ++newidx) { +- *tbp++ = '\t'; +- newcol -= O_VAL(sp, O_TABSTOP); ++ tbp = bp; ++ newidx = 0; ++ if (!O_ISSET(sp, O_EXPANDTAB)) { ++ for (; newcol >= O_VAL(sp, O_TABSTOP); ++newidx) { ++ *tbp++ = '\t'; ++ newcol -= O_VAL(sp, O_TABSTOP); ++ } + } + for (; newcol > 0; --newcol, ++newidx) + *tbp++ = ' '; diff --git a/editors/nvi/patches/patch-ay b/editors/nvi/patches/patch-ay new file mode 100644 index 00000000000..bf1b6bd6e3b --- /dev/null +++ b/editors/nvi/patches/patch-ay @@ -0,0 +1,19 @@ +$NetBSD: patch-ay,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/ex_txt.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../ex/ex_txt.c +@@ -403,8 +403,12 @@ txt_dent(SCR *sp, TEXT *tp) + * + * Count up spaces/tabs needed to get to the target. + */ +- for (cno = 0, tabs = 0; cno + COL_OFF(cno, ts) <= scno; ++tabs) +- cno += COL_OFF(cno, ts); ++ cno = 0; ++ tabs = 0; ++ if (!O_ISSET(sp, O_EXPANDTAB)) { ++ for (; cno + COL_OFF(cno, ts) <= scno; ++tabs) ++ cno += COL_OFF(cno, ts); ++ } + spaces = scno - cno; + + /* Make sure there's enough room. */ diff --git a/editors/nvi/patches/patch-az b/editors/nvi/patches/patch-az new file mode 100644 index 00000000000..00b01cfa370 --- /dev/null +++ b/editors/nvi/patches/patch-az @@ -0,0 +1,106 @@ +$NetBSD: patch-az,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../vi/v_txt.c.orig 2007-11-19 03:41:42.000000000 +1100 ++++ ../vi/v_txt.c +@@ -948,7 +948,7 @@ k_escape: LINE_RESOLVE; + + switch (carat) { + case C_CARATSET: /* ^^D */ +- if (tp->ai == 0 || tp->cno > tp->ai + tp->offset + 1) ++ if (tp->ai == 0 || tp->cno != tp->ai + tp->offset + 1) + goto ins_ch; + + /* Save the ai string for later. */ +@@ -961,17 +961,18 @@ k_escape: LINE_RESOLVE; + carat = C_NOCHANGE; + goto leftmargin; + case C_ZEROSET: /* 0^D */ +- if (tp->ai == 0 || tp->cno > tp->ai + tp->offset + 1) ++ if (tp->ai == 0 || tp->cno != tp->ai + tp->offset + 1) + goto ins_ch; + + carat = C_NOTSET; + leftmargin: tp->lb[tp->cno - 1] = ' '; + tp->owrite += tp->cno - tp->offset; +- tp->ai = 0; + tp->cno = tp->offset; + break; ++ case C_NOCHANGE: /* ^D after reset with ^^D */ ++ /* FALLTHROUGH */ + case C_NOTSET: /* ^D */ +- if (tp->ai == 0 || tp->cno > tp->ai + tp->offset) ++ if (tp->ai == 0 || tp->cno != tp->ai + tp->offset) + goto ins_ch; + + (void)txt_dent(sp, tp, 0); +@@ -1719,13 +1720,19 @@ txt_ai_resolve(SCR *sp, TEXT *tp, int *c + /* + * If there are no spaces, or no tabs after spaces and less than + * ts spaces, it's already minimal. ++ * Keep analysing if expandtab is set. + */ +- if (!spaces || !tab_after_sp && spaces < ts) ++ if ((!spaces || (!tab_after_sp && spaces < ts)) && ++ !O_ISSET(sp, O_EXPANDTAB)) + return; + + /* Count up spaces/tabs needed to get to the target. */ +- for (cno = 0, tabs = 0; cno + COL_OFF(cno, ts) <= scno; ++tabs) +- cno += COL_OFF(cno, ts); ++ cno = 0; ++ tabs = 0; ++ if (!O_ISSET(sp, O_EXPANDTAB)) { ++ for (; cno + COL_OFF(cno, ts) <= scno; ++tabs) ++ cno += COL_OFF(cno, ts); ++ } + spaces = scno - cno; + + /* +@@ -1889,7 +1896,6 @@ txt_dent(SCR *sp, TEXT *tp, int isindent + CHAR_T ch; + u_long sw, ts; + size_t cno, current, spaces, target, tabs, off; +- int ai_reset; + + ts = O_VAL(sp, O_TABSTOP); + sw = O_VAL(sp, O_SHIFTWIDTH); +@@ -1921,16 +1927,6 @@ txt_dent(SCR *sp, TEXT *tp, int isindent + target -= --target % sw; + + /* +- * The AI characters will be turned into overwrite characters if the +- * cursor immediately follows them. We test both the cursor position +- * and the indent flag because there's no single test. (^T can only +- * be detected by the cursor position, and while we know that the test +- * is always true for ^D, the cursor can be in more than one place, as +- * "0^D" and "^D" are different.) +- */ +- ai_reset = !isindent || tp->cno == tp->ai + tp->offset; +- +- /* + * Back up over any previous <blank> characters, changing them into + * overwrite characters (including any ai characters). Then figure + * out the current screen column. +@@ -1957,15 +1953,16 @@ txt_dent(SCR *sp, TEXT *tp, int isindent + if (current >= target) + spaces = tabs = 0; + else { +- for (cno = current, +- tabs = 0; cno + COL_OFF(cno, ts) <= target; ++tabs) +- cno += COL_OFF(cno, ts); ++ cno = current; ++ tabs = 0; ++ if (!O_ISSET(sp, O_EXPANDTAB)) { ++ for (; cno + COL_OFF(cno, ts) <= target; ++tabs) ++ cno += COL_OFF(cno, ts); ++ } + spaces = target - cno; + } + +- /* If we overwrote ai characters, reset the ai count. */ +- if (ai_reset) +- tp->ai = tabs + spaces; ++ tp->ai = tabs + spaces; + + /* + * Call txt_insch() to insert each character, so that we get the diff --git a/editors/nvi/patches/patch-ba b/editors/nvi/patches/patch-ba new file mode 100644 index 00000000000..596109dd703 --- /dev/null +++ b/editors/nvi/patches/patch-ba @@ -0,0 +1,7 @@ +$NetBSD: patch-ba,v 1.1 2009/08/07 16:39:21 lukem Exp $ + +--- ../ex/version.h.orig 2007-11-19 03:43:55.000000000 +1100 ++++ ../ex/version.h +@@ -1 +1 @@ +-#define VI_VERSION "nvi-1.81.6 (2007-11-18)" ++#define VI_VERSION "nvi-1.81.6nb4 (2009-08-07)" |