diff options
author | Steve Price <steve@FreeBSD.org> | 1999-12-25 02:22:53 +0000 |
---|---|---|
committer | Steve Price <steve@FreeBSD.org> | 1999-12-25 02:22:53 +0000 |
commit | ac538b4f47e3e1f0c69e6a48eb8f066aae917c3c (patch) | |
tree | a60f072c56eee34d34cc6dd866ebc5bed3125443 /editors/joe | |
parent | Unbreak mc (diff) |
Use file locking similar to vi.
PR: 15330
Submitted by: Oliver Breuninger <ob@seicom.net>
Notes
Notes:
svn path=/head/; revision=24032
Diffstat (limited to 'editors/joe')
-rw-r--r-- | editors/joe/files/patch-ab | 100 | ||||
-rw-r--r-- | editors/joe/files/patch-ad | 68 | ||||
-rw-r--r-- | editors/joe/files/patch-ae | 8 |
3 files changed, 99 insertions, 77 deletions
diff --git a/editors/joe/files/patch-ab b/editors/joe/files/patch-ab index 8268c6c9d4a7..7d9fed0e9226 100644 --- a/editors/joe/files/patch-ab +++ b/editors/joe/files/patch-ab @@ -1,63 +1,37 @@ -*** main.c.old Sun Jan 22 03:21:08 1995 ---- main.c Tue Oct 15 16:54:32 1996 -*************** -*** 18,23 **** ---- 18,27 ---- - - #include <stdio.h> - #include <fcntl.h> -+ #ifdef __FreeBSD__ -+ #include <locale.h> -+ #include <ctype.h> -+ #endif - #include "config.h" - #include "w.h" - #include "tty.h" -*************** -*** 186,191 **** ---- 190,209 ---- - #else - run=namprt(argv[0]); - #endif -+ -+ #ifdef __FreeBSD__ -+ setlocale(LC_ALL, ""); -+ for(c=0;c<256;c++) -+ { int a=0; -+ if(iscntrl(c)) -+ a|=UNDERLINE; -+ if((c&0x80)&&!isprint(c)) -+ a|=INVERSE; -+ xlata[c]=a; -+ if(isprint(c)) -+ xlatc[c]=c; -+ } -+ #endif - - if(s=getenv("LINES")) sscanf(s,"%d",&lines); - if(s=getenv("COLUMNS")) sscanf(s,"%d",&columns); -*** scrn.h.old Thu Oct 6 10:09:04 1994 ---- scrn.h Tue Oct 15 16:42:29 1996 -*************** -*** 254,263 **** - - #define xlat(a,c) \ - ( \ -! (dspasis && ((unsigned)(c)>=128)) ? \ - ((a)=0) \ - : \ -! (((a)=xlata[(unsigned)(c)]), ((c)=xlatc[(unsigned)(c)])) \ - ) - - /* int eraeol(SCRN *t,int x,int y); ---- 254,263 ---- - - #define xlat(a,c) \ - ( \ -! (dspasis && ((unsigned char)(c)>=128)) ? \ - ((a)=0) \ - : \ -! (((a)=xlata[(unsigned char)(c)]), ((c)=xlatc[(unsigned char)(c)])) \ - ) - - /* int eraeol(SCRN *t,int x,int y); +--- main.c.orig Sun Jan 22 01:21:08 1995 ++++ main.c Tue Dec 7 13:57:42 1999 +@@ -19,4 +19,8 @@ + #include <stdio.h> + #include <fcntl.h> ++#ifdef __FreeBSD__ ++#include <locale.h> ++#include <ctype.h> ++#endif + #include "config.h" + #include "w.h" +@@ -188,4 +192,18 @@ + #endif + ++#ifdef __FreeBSD__ ++ setlocale(LC_ALL, ""); ++ for(c=0;c<256;c++) ++ { int a=0; ++ if(iscntrl(c)) ++ a|=UNDERLINE; ++ if((c&0x80)&&!isprint(c)) ++ a|=INVERSE; ++ xlata[c]=a; ++ if(isprint(c)) ++ xlatc[c]=c; ++ } ++#endif ++ + if(s=getenv("LINES")) sscanf(s,"%d",&lines); + if(s=getenv("COLUMNS")) sscanf(s,"%d",&columns); +@@ -366,5 +384,5 @@ + if(help) helpon(maint); + if(!nonotice) +- msgnw(lastw(maint)->object,"\\i** Joe's Own Editor v2.8 ** Copyright (C) 1995 Joseph H. Allen **\\i"); ++ msgnw(lastw(maint)->object,"\\i** Joe's Own Editor v2.8l ** Copyright (C) 1995 Joseph H. Allen **\\i"); + edloop(0); + vclose(vmem); diff --git a/editors/joe/files/patch-ad b/editors/joe/files/patch-ad index a199b2b076d5..258c8c2c2a31 100644 --- a/editors/joe/files/patch-ad +++ b/editors/joe/files/patch-ad @@ -1,18 +1,58 @@ ---- b.c Fri Jan 20 03:38:25 1995 -+++ b.c.new Fri Jul 23 03:36:10 1999 -@@ -21,6 +21,7 @@ - #include <pwd.h> +--- b.c.orig Fri Jan 20 09:38:25 1995 ++++ b.c Tue Dec 7 13:35:11 1999 +@@ -22,4 +22,7 @@ #endif #include <errno.h> ++#include <sys/file.h> +#include <sys/types.h> - ++#include <sys/stat.h> + #include "config.h" - #include "blocks.h" -@@ -1990,6 +1991,7 @@ - { - long tim=time(0); - B *b; -+ mode_t mask=umask(077); /* no access to DEADJOE for others */ - FILE *f=fopen("DEADJOE","a"); - fprintf(f,"\n*** Modified files in JOE when it aborted on %s",ctime(&tim)); - if(sig) fprintf(f,"*** JOE was aborted by signal %d\n",sig); +@@ -202,4 +205,5 @@ + else b->o=pdefault; + mset(b->marks,0,sizeof(b->marks)); ++ b->filehandle = -1; /* initialize filehandle &&& ob */ + b->rdonly=0; + b->orphan=0; +@@ -256,4 +260,8 @@ + if(b && !--b->count) + { ++ if (b->filehandle != -1) { ++ /* close filehandle, free lock &&& ob */ ++ close (b->filehandle); ++ } + if(b->changed) abrerr(b->name); + if(b==errbuf) errbuf=0; +@@ -1672,4 +1680,5 @@ + long skip,amnt; + char *n; ++ struct stat sb; + int nowrite=0; + +@@ -1705,4 +1714,26 @@ + fi=fopen(n,"r"); + if(!fi) nowrite=0; ++/*printf ("nowrite open=%i\n", nowrite); */ ++ ++ /* check file mod, if no write flags set, ++ joe in read only mode. &&& ob */ ++ ++ if (!nowrite) { ++ nowrite = (!stat (n, &sb)) && (!(sb.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH))); ++ } ++/*printf ("nowrite stat=%i\n", nowrite); */ ++ ++ /* lock the file if writable, or go into read only mode if ++ already locked, */ ++ ++ if ((fi) && (!nowrite)) { ++ b->filehandle = dup (fileno (fi)); ++ nowrite = (flock (b->filehandle, LOCK_EX | LOCK_NB)); ++ } ++/*printf ("nowrite flock=%i\n", nowrite); */ ++ ++/*nowrite = 1; */ /* for test purpose */ ++/*printf ("nowrite=%i\n", nowrite); */ ++ + } + joesep(n); diff --git a/editors/joe/files/patch-ae b/editors/joe/files/patch-ae new file mode 100644 index 000000000000..4f01692773cc --- /dev/null +++ b/editors/joe/files/patch-ae @@ -0,0 +1,8 @@ +--- b.h.orig Wed Dec 21 13:04:46 1994 ++++ b.h Tue Dec 7 13:35:11 1999 +@@ -61,4 +61,5 @@ + int internal; /* Set for internal buffers */ + int er; /* Error code when file was loaded */ ++ int filehandle; /* File handle for locking */ + }; + |