head 1.2; access; symbols pkgsrc-2026Q1:1.2.0.192 pkgsrc-2026Q1-base:1.2 pkgsrc-2025Q4:1.2.0.190 pkgsrc-2025Q4-base:1.2 pkgsrc-2025Q3:1.2.0.188 pkgsrc-2025Q3-base:1.2 pkgsrc-2025Q2:1.2.0.186 pkgsrc-2025Q2-base:1.2 pkgsrc-2025Q1:1.2.0.184 pkgsrc-2025Q1-base:1.2 pkgsrc-2024Q4:1.2.0.182 pkgsrc-2024Q4-base:1.2 pkgsrc-2024Q3:1.2.0.180 pkgsrc-2024Q3-base:1.2 pkgsrc-2024Q2:1.2.0.178 pkgsrc-2024Q2-base:1.2 pkgsrc-2024Q1:1.2.0.176 pkgsrc-2024Q1-base:1.2 pkgsrc-2023Q4:1.2.0.174 pkgsrc-2023Q4-base:1.2 pkgsrc-2023Q3:1.2.0.172 pkgsrc-2023Q3-base:1.2 pkgsrc-2023Q2:1.2.0.170 pkgsrc-2023Q2-base:1.2 pkgsrc-2023Q1:1.2.0.168 pkgsrc-2023Q1-base:1.2 pkgsrc-2022Q4:1.2.0.166 pkgsrc-2022Q4-base:1.2 pkgsrc-2022Q3:1.2.0.164 pkgsrc-2022Q3-base:1.2 pkgsrc-2022Q2:1.2.0.162 pkgsrc-2022Q2-base:1.2 pkgsrc-2022Q1:1.2.0.160 pkgsrc-2022Q1-base:1.2 pkgsrc-2021Q4:1.2.0.158 pkgsrc-2021Q4-base:1.2 pkgsrc-2021Q3:1.2.0.156 pkgsrc-2021Q3-base:1.2 pkgsrc-2021Q2:1.2.0.154 pkgsrc-2021Q2-base:1.2 pkgsrc-2021Q1:1.2.0.152 pkgsrc-2021Q1-base:1.2 pkgsrc-2020Q4:1.2.0.150 pkgsrc-2020Q4-base:1.2 pkgsrc-2020Q3:1.2.0.148 pkgsrc-2020Q3-base:1.2 pkgsrc-2020Q2:1.2.0.144 pkgsrc-2020Q2-base:1.2 pkgsrc-2020Q1:1.2.0.124 pkgsrc-2020Q1-base:1.2 pkgsrc-2019Q4:1.2.0.146 pkgsrc-2019Q4-base:1.2 pkgsrc-2019Q3:1.2.0.142 pkgsrc-2019Q3-base:1.2 pkgsrc-2019Q2:1.2.0.140 pkgsrc-2019Q2-base:1.2 pkgsrc-2019Q1:1.2.0.138 pkgsrc-2019Q1-base:1.2 pkgsrc-2018Q4:1.2.0.136 pkgsrc-2018Q4-base:1.2 pkgsrc-2018Q3:1.2.0.134 pkgsrc-2018Q3-base:1.2 pkgsrc-2018Q2:1.2.0.132 pkgsrc-2018Q2-base:1.2 pkgsrc-2018Q1:1.2.0.130 pkgsrc-2018Q1-base:1.2 pkgsrc-2017Q4:1.2.0.128 pkgsrc-2017Q4-base:1.2 pkgsrc-2017Q3:1.2.0.126 pkgsrc-2017Q3-base:1.2 pkgsrc-2017Q2:1.2.0.122 pkgsrc-2017Q2-base:1.2 pkgsrc-2017Q1:1.2.0.120 pkgsrc-2017Q1-base:1.2 pkgsrc-2016Q4:1.2.0.118 pkgsrc-2016Q4-base:1.2 pkgsrc-2016Q3:1.2.0.116 pkgsrc-2016Q3-base:1.2 pkgsrc-2016Q2:1.2.0.114 pkgsrc-2016Q2-base:1.2 pkgsrc-2016Q1:1.2.0.112 pkgsrc-2016Q1-base:1.2 pkgsrc-2015Q4:1.2.0.110 pkgsrc-2015Q4-base:1.2 pkgsrc-2015Q3:1.2.0.108 pkgsrc-2015Q3-base:1.2 pkgsrc-2015Q2:1.2.0.106 pkgsrc-2015Q2-base:1.2 pkgsrc-2015Q1:1.2.0.104 pkgsrc-2015Q1-base:1.2 pkgsrc-2014Q4:1.2.0.102 pkgsrc-2014Q4-base:1.2 pkgsrc-2014Q3:1.2.0.100 pkgsrc-2014Q3-base:1.2 pkgsrc-2014Q2:1.2.0.98 pkgsrc-2014Q2-base:1.2 pkgsrc-2014Q1:1.2.0.96 pkgsrc-2014Q1-base:1.2 pkgsrc-2013Q4:1.2.0.94 pkgsrc-2013Q4-base:1.2 pkgsrc-2013Q3:1.2.0.92 pkgsrc-2013Q3-base:1.2 pkgsrc-2013Q2:1.2.0.90 pkgsrc-2013Q2-base:1.2 pkgsrc-2013Q1:1.2.0.88 pkgsrc-2013Q1-base:1.2 pkgsrc-2012Q4:1.2.0.86 pkgsrc-2012Q4-base:1.2 pkgsrc-2012Q3:1.2.0.84 pkgsrc-2012Q3-base:1.2 pkgsrc-2012Q2:1.2.0.82 pkgsrc-2012Q2-base:1.2 pkgsrc-2012Q1:1.2.0.80 pkgsrc-2012Q1-base:1.2 pkgsrc-2011Q4:1.2.0.78 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q3:1.2.0.76 pkgsrc-2011Q3-base:1.2 pkgsrc-2011Q2:1.2.0.74 pkgsrc-2011Q2-base:1.2 pkgsrc-2011Q1:1.2.0.72 pkgsrc-2011Q1-base:1.2 pkgsrc-2010Q4:1.2.0.70 pkgsrc-2010Q4-base:1.2 pkgsrc-2010Q3:1.2.0.68 pkgsrc-2010Q3-base:1.2 pkgsrc-2010Q2:1.2.0.66 pkgsrc-2010Q2-base:1.2 pkgsrc-2010Q1:1.2.0.64 pkgsrc-2010Q1-base:1.2 pkgsrc-2009Q4:1.2.0.62 pkgsrc-2009Q4-base:1.2 pkgsrc-2009Q3:1.2.0.60 pkgsrc-2009Q3-base:1.2 pkgsrc-2009Q2:1.2.0.58 pkgsrc-2009Q2-base:1.2 pkgsrc-2009Q1:1.2.0.56 pkgsrc-2009Q1-base:1.2 pkgsrc-2008Q4:1.2.0.54 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.52 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.50 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.48 pkgsrc-2008Q2-base:1.2 cwrapper:1.2.0.46 pkgsrc-2008Q1:1.2.0.44 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.42 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.40 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.38 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.36 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.34 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.32 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.30 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.28 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.26 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.24 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.22 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.20 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.18 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.16 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.2.0.14 pkgsrc-2004Q2-base:1.2 pkgsrc-2004Q1:1.2.0.12 pkgsrc-2004Q1-base:1.2 pkgsrc-2003Q4:1.2.0.10 pkgsrc-2003Q4-base:1.2 netbsd-1-6-1:1.2.0.6 netbsd-1-6-1-base:1.2 netbsd-1-6:1.2.0.8 netbsd-1-6-RELEASE-base:1.2 pkgviews:1.2.0.4 pkgviews-base:1.2 buildlink2:1.2.0.2 buildlink2-base:1.2 netbsd-1-5-PATCH003:1.2 netbsd-1-5-PATCH001:1.2 netbsd-1-5-RELEASE:1.2 netbsd-1-4-PATCH003:1.2 pkgsrc-base:1.1.1.1 TNF:1.1.1; locks; strict; comment @# @; 1.2 date 2000.07.10.18.26.55; author tron; state Exp; branches; next 1.1; 1.1 date 2000.04.01.00.21.27; author dmcmahill; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2000.04.01.00.21.27; author dmcmahill; state Exp; branches; next ; desc @@ 1.2 log @Update "mg2a" package to version to version 1.11: Don't attempt to edit non regular files. Patches supplied by John Refling in PR pkg/10536. @ text @$NetBSD: patch-am 00/05/31 16:39:52 refling $ --- file.c.orig Sun Jul 3 10:48:57 1988 +++ file.c Wed May 31 16:36:36 2000 @@@@ -2,6 +2,10 @@@@ * File commands. */ #include "def.h" +#include // refling +#include +#include + BUFFER *findbuffer(); VOID makename(); @@@@ -447,14 +451,147 @@@@ writeout(bp, fn) register BUFFER *bp; char *fn; { register int s; +// ------------------> refling, for mirroring the original once +// ------------------> if .original subdir exists in the same dir as +// ------------------> the file to save, and there is an EMPTY file +// ------------------> name with the same name as we wish to save + +// main(int argc, char **argv) { + char *last_slash, *file_name_no_dir, dir_name[1000], cmd[1000], *end_of_dirname; +// in[1000]; + struct stat stat_struct; + const char nil[] = "nil"; + int originaled, journaled, diffoed; + + // fn is the incoming string to use, never altered. This is for the + // command line transfer. Not needed in final program. +// if (1 == argc) strcpy(fn, ""); +// else strcpy(fn, argv[1]); + + // extract the dirname part of the argument: + + // handle case where string is null, just in case + if (0 == strlen(fn)) { + strcpy(dir_name, "."); + file_name_no_dir = (char *)nil; // default: filename in cwd + } + + // this case is when there is no slash, so is filename + else if (NULL == (last_slash = (char *)strrchr(fn, '/'))) { + strcpy(dir_name, "."); + file_name_no_dir = fn; + } + + // this case is /filename + else if (last_slash == fn) { + strcpy(dir_name, "/"); + file_name_no_dir = last_slash + 1; + } + + // this case is normal case + else { + *last_slash = 0; + strcpy(dir_name, fn); + *last_slash = '/'; + file_name_no_dir = last_slash + 1; + } + + // at this point, we have dirname in dir_name. Store its end, so we + // can recover just the dirname later, after concatinating other stuff, + // and a pointer to the stuff following the dirname + end_of_dirname = dir_name + strlen(dir_name); + + // get rid of unwanted filenames for this particular application + if (0 == strlen(file_name_no_dir)) file_name_no_dir = (char *)nil; + if (!strcmp(file_name_no_dir, ".")) file_name_no_dir = (char *)nil; + // printf("dir=%s file=%s\n", dir_name, file_name_no_dir); + + +// /////////////////////////////////////////////////////////////////////////// +// // start .original: concat the .original directory and filename to dir_name +// if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/"); +// strcat(dir_name, ".original/"); +// + originaled = 0; +// // test if .original flag dir exists and the .original/filename does not exist +// if (0 == stat(dir_name, &stat_struct) && S_ISDIR(stat_struct.st_mode) && +// 0 != stat(dir_name, &stat_struct)) { // .original/filename does not exist +// // test if the initially edited file exists +// if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) { +// strcat(dir_name, file_name_no_dir); +// sprintf(cmd, "/bin/cp %s %s", fn, dir_name); +// if (0 != system(cmd)) printf(".original/fn backup failed: '%s'\n", cmd); +// else originaled = 1; +// } +// else if ( 0 != stat(fn, &stat_struct)) { +// sprintf(cmd, "/usr/bin/touch %s", fn); +// if (0 != system(cmd)) printf(".original/fn touch failed: '%s'\n", cmd); +// else originaled = 1; +// printf(".original/fn touch: '%s'\n", cmd); +// } +// } +// +// // restore dir_name to be used in next phase +// *end_of_dirname = 0; + + /////////////////////////////////////////////////////////////////////////// + // start MG_DOT_ORIG test + diffoed = 0; + if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/"); + strcat(dir_name, file_name_no_dir); + strcat(dir_name, ".orig"); + // if MG_DOT_ORIG set and there is no .orig for the edited file + if (NULL != getenv("MG_DOT_ORIG") && 0 != stat(dir_name, &stat_struct)) { + // if edited file already exists and is a file, copy it to .orig + if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) { + sprintf(cmd, "/bin/cp %s %s", fn, dir_name); + if (0 != system(cmd)) printf(".orig backup failed: '%s'\n", cmd); + else diffoed = 1; + } + // if edited file does not exist yet, touch the .orig since it was empty + else if (0 != stat(fn, &stat_struct)) { + sprintf(cmd, "/usr/bin/touch %s", dir_name); + if (0 != system(cmd)) printf(".orig touch failed: '%s'\n", cmd); + else diffoed = 1; + } + } + + // restore dir_name to be used in next phase + *end_of_dirname = 0; + + /////////////////////////////////////////////////////////////////////////// + // start journal: concat the .journal directory and filename to dir_name + if (dir_name[strlen(dir_name) - 1] != '/') strcat(dir_name, "/"); + strcat(dir_name, ".journal/"); + + journaled = 0; + // test if .journal flag directory exists + if (0 == stat(dir_name, &stat_struct) && S_ISDIR(stat_struct.st_mode)) { + // test if the initially edited file exists + if (0 == stat(fn, &stat_struct) && S_ISREG(stat_struct.st_mode)) { + sprintf(cmd, "/bin/cp %s %s%s-@@%ld", fn, dir_name, file_name_no_dir, time(NULL)); + if (0 != system(cmd)) printf("journal failed: '%s'\n", cmd); + else journaled = 1; + } + else if (0 != stat(fn, &stat_struct)) { + sprintf(cmd, "/usr/bin/touch %s%s-@@%ld", dir_name, file_name_no_dir, time(NULL)); + if (0 != system(cmd)) printf(".journal/fn touch failed: '%s'\n", cmd); + else journaled = 1; + } + } if ((s=ffwopen(fn)) != FIOSUC) /* Open writes message. */ return (FALSE); s = ffputbuf(bp); if (s == FIOSUC) { /* No write error. */ s = ffclose(); - if (s==FIOSUC) - ewprintf("Wrote %s", fn); + if (s==FIOSUC && !diffoed && !journaled) ewprintf("Wrote %s", fn); + if (s==FIOSUC && !diffoed && journaled) ewprintf("Wrote(j) %s", fn); + if (s==FIOSUC && diffoed && !journaled) ewprintf("Wrote(o) %s", fn); + if (s==FIOSUC && diffoed && journaled) ewprintf("Wrote(o+j) %s", fn); } else /* Ignore close error */ + +// ------------------> refling, for originaling and journaling, end + (VOID) ffclose(); /* if a write error. */ return s == FIOSUC; } @ 1.1 log @Initial revision @ text @d1 1 a1 1 $NetBSD$ d3 14 a16 3 --- ./file.c.orig Sun Jul 3 10:48:57 1988 +++ ./file.c Thu Mar 30 08:37:30 2000 @@@@ -447,14 +447,151 @@@@ a23 4 + +#include +#include +#include @ 1.1.1.1 log @initial import of mg2a-1.10. Mg (mg) is a Public Domain EMACS style editor. It is "broadly" compatible with GNU Emacs. Mg was formerly named MicroGnuEmacs, but is not associated with the GNU project. This program is intended to be a small, fast, and portable editor for people who can't (or don't want to) run real Emacs. @ text @@