🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

10 total messages Started by Joseph H Allen Thu, 18 Aug 1994 22:03
JOE 1.0.12 - Blurb
#3005
Author: Joseph H Allen
Date: Thu, 18 Aug 1994 22:03
155 lines
7175 bytes
                           Joe's Own Editor 1.0.12

                  A Free ASCII-Text Screen Editor for UNIX
                               by Joseph Allen


Get it by anonymous ftp
from: 'ftp.std.com', file '/src/editors/joe1.0.12.tar.Z'

If you have questions, problems or suggestions,
send email to: 'jhallen@world.std.com'


	JOE is the professional freeware ASCII text screen editor for UNIX. 
It makes full use of the power and versatility of UNIX, but lacks the steep
learning curve and basic nonsense you have to deal with in every other UNIX
editor. JOE has the feel of most IBM PC text editors: The key-sequences are
reminiscent of WordStar and Turbo-C.  JOE is much more powerful than those
editors, however.  JOE has all of the features a UNIX user should expect:
full use of termcap/terminfo, better screen update optimizations than even
GNU-emacs (JOE is fully usable at 2400 baud), simple installation, and all
of the UNIX-integration features of VI.

Features:

	JOE has a well thought-out user-interface with great attention to
detail.  The Page Up and Page Down functions do not move the cursor relative
to the edges of the screen.  Left and Right arrow keys work at the beginning
and ends of lines.  The cursor can move past the ends of lines without
jumping, but also without inserting or deleting extra spaces at the ends of
lines. Control characters and characters above 127 can be displayed and
entered- even ^Q and ^S.  The cursor's row and column number can be
displayed in the status line.

	The key layout is made to reduce terminal incompatibility nonsense. 
^Q and ^S are not used and both ^H and DEL are mapped to backspace.  Case
does not matter in key sequences- ^K E, ^K e, and ^K ^E are each mapped to
the same function.  The arrow keys and PageUp, PageDown, Home, End, Insert
and Delete keypad keys are read from the termcap entry and are assigned to
the proper functions.  A simple initialization file, similar to Semware's
Q-EDIT, allows key-bindings, simple macros and help windows to be defined.

	JOE has full termcap/terminfo support and will work on any terminal. 
JOE has the best screen update optimization algorithm available.  It uses
VT100-style scrolling regions the way they are supposed to be used (I.E.,
without building insert and delete line functions out of them) and has a
powerful line shifting (insert/delete character) algorithm which works even
if text goes past the ends of lines.  JOE has deferred screen update to
handle typeahead and uses the baud rate reported by 'stty' to ensure that
deferral is not bypassed by tty buffering.

	JOE has multiple windows and lacks the confusing notion of a named
buffers.  You just have files and windows.  When there are more windows than
can fit on the screen, the Goto-Next-Window function scrolls through them. 
The same file can have multiple windows opened on it.

	JOE has VI-style unix integration.  You can filter a highlighted
block through a UNIX command.  Also, each place in joe which accepts a file
name (including the command line) will also accept:

		!command		to pipe into or out of a command
		>>filename		to append to a file
		filename,start,size	to edit a portion of a file/device
		-			to use stdin or stdout

	File names on the command line may be preceeded by +nnn to start
editing at a specified line.

	JOE has shell windows.  You can run a shell in a window and any
output from commands run in the shell gets stored in a buffer.

	JOE has an orthogonal event-driven design.  Each prompt is actually
a normal edit buffer containing a history of all of the responses entered
for that prompt.  You can use all of the normal edit commands to create file
names and search strings.  You can use the up arrow key (or search backwards
and any other appropriate edit command) to go back through the history of
previous responses.  Prompts are reentrant- meaning that edit commands which
require prompts can still be used inside of prompts.

	JOE has TAB-completion and file selection menus.  If you hit tab in
a file name prompt, the name is either completed or a menu of possible
matches appears.

	JOE stores edit files in a doubly linked list of gap buffers which
can spill into temporary files.  You can edit files of any size up to the
amount of free disk space and there are no line-length restrictions.  Since
the buffering system is block-based, JOE will incur only a minimum of
swapping on heavily loaded systems.

	When you ask for help, you get a small menu of help screens to
choose from (all definable in an initialization file).  Once a help screen
is selected, the help remains on while you continue to use the editor.  Here
is the first help screen:

CURSOR           GO TO            BLOCK      DELETE   MISC         EXIT
^B left ^F right ^U  prev. screen ^KB begin  ^D char. ^KJ reformat ^KX save
^P up   ^N down  ^V  next screen  ^KK end    ^Y line  ^TT overtype ^C  abort
^Z previous word ^A  beg. of line ^KM move   ^W >word ^@  insert   ^KZ shell
^X next word     ^E  end of line  ^KC copy   ^O word< ^R  retype   FILE
SEARCH           ^KU top of file  ^KW file   ^J >line QUOTE        ^KE new
^KF find text    ^KV end of file  ^KY delete ^_ undo  `   Ctrl-    ^KR insert
^L  find next    ^KL to line No.  ^K/ filter ^^ redo  ^\  Meta-    ^KD save

	JOE has a powerful set of editing commands suitable for editing both
text files and programs:

		- search and replace system, including powerful regular 
		  expressions (including matching of balanced C expressions).

		- tags file search

		- paragraph format

		- undo and redo

		- position history allows you to get back to previous
		  editing contexts and allows you to quickly flip between
		  editing contexts

		- multiple keyboard macros

		- block move/copy/delete/filter

		- rectangle (columnar) mode

		- overtype/insert modes

		- indent/unindent

		- goto matching ( [ {

		- auto-indent mode

	Plus many options can be set:

		- can have EMACS-style cursor re-centering on scrolls

		- characters between 128-255 can be shown as-is for
		  Scandinavian characters

		- Final newline can be forced on end of file

		- Can start with a help screen on

		- Left/Right margin settings

		- Tab width

		- Indentation step and fill character
-- 
/*  jhallen@world.std.com (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Re: JOE 1.0.12 - Blurb
#3006
Author: Joseph H Allen
Date: Tue, 23 Aug 1994 21:17
66 lines
3170 bytes
In article <Cur3x5.A95@world.std.com>,
Joseph H Allen <jhallen@world.std.com> wrote:
>
>                           Joe's Own Editor 1.0.12

The latest version is now 1.0.13: please wait until that appears in the ftp
directory before getting joe.

Version 1.0.13 includes fixes for these bugs:

- A long sequence of searches or a search & replace with a lot of
  replacements would cause the editor to exit and display an 'Out of memory'
  message.

- If you deleted characters on a long line on a terminal which has a delete
  character command, spaces would someimtes be shifted in place of some of
  the characters.

- If you hit SPACE BACKSPACE RETURN on an otherwise empty prompt line, the
  editor would hang.

- If you typeahead a bunch of returns as the editor is starting, they would
  be converted to ^Js by the tty, which is the kill-line function in joe.

- When a backup file is created, any existing file of the same name is first
  deleted.  This fixes a problem when joe is being used for ELM- other
  people's backup files in the /tmp directory would prevent you from saving
  your own file.  This is also useful when root edits a file in some user's
  account.  The user wouldn't then be able to save his file because joe
  couldn't write to root-owned backup file.

Also these improvements to the search & replace system were made:

The wildcard \* now will not cross line boundaries.  This ends up being more
useful.

\+ now tries to make the longest possible match, instead of the shortest. 
This is much more intuitive:

	\[A-Za-z_]\+\[A-Za-z0-9_]  is all that's needed to match C
                                   identifiers.  It used to be:

	\[A-Za-z_]\+[A-Za-z0-9_]\[^A-Za-z0-9_]

\* still makes the shortest possible match though.  \c (like \*- but don't
stop in balanced expressions) should be used in 99% of all cases you needed
\* to make a longed match.

A full set of backslash escape sequnces is now available for search:

	\a, \n, \r, \b, \t, \e, \f

	match ascii: BEL, LF, CR, BS, TAB, ESC, FF.

	\377		Octal
	\xFF		Hex

	Can be used to match a character with specific ASCII code given in
octal or hex.

The escape sequences can be used inside of \[...] as well.
-- 
/*  jhallen@world.std.com (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Re: JOE 1.0.12 - Blurb
#3008
Author: Kari Likovuori
Date: Wed, 24 Aug 1994 09:00
19 lines
1528 bytes
Joseph H Allen (jhallen@world.std.com) wrote:
> 	\377		Octal
> 	\xFF		Hex

> 	Can be used to match a character with specific ASCII code given in
> octal or hex.

    It would be nice if you could insert a character by it's
    ASCII code. I think it would be even more useful than
    functions "Next char is a control char" and "Next char has 7
    bit set".

    -=Kari=-
--
      Kari Likovuori - Helsingin yliopisto - Atk-keskus
            INTERNET: Kari.Likovuori@Helsinki.Fi              .~~.
      ** Akateemiset Hyv"an Oluen Yst"av"at (AHOY) **         |--|]
           ** Suomen Kotiolutyhdistys (SKOOL) **              |__|
   ** Suomen Itsen"aisten Olutseurojen Liitto (FINNLIBS) **
Re: JOE 1.0.12 - Blurb
#3007
Author: Joseph H Allen
Date: Wed, 24 Aug 1994 14:56
21 lines
1340 bytes
In article <Cv0B4q.EDu@world.std.com>,
Joseph H Allen <jhallen@world.std.com> wrote:
>In article <Cur3x5.A95@world.std.com>,
>Joseph H Allen <jhallen@world.std.com> wrote:
>>
>>                           Joe's Own Editor 1.0.12
>
>The latest version is now 1.0.13: please wait until that appears in the ftp
>directory before getting joe.
>
>Version 1.0.13 includes fixes for these bugs:

Also fixed in this release:

- A problem where a lot of OOPSs were printed when using the terminfo
  database on some systems.
-- 
/*  jhallen@world.std.com (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Re: JOE 1.0.12 - Blurb
#3009
Author: Joseph H Allen
Date: Wed, 24 Aug 1994 18:38
27 lines
1716 bytes
In article <33f26u$fu5@kantti.Helsinki.FI>,
Kari Likovuori <likovuor@cc.Helsinki.FI> wrote:
>Joseph H Allen (jhallen@world.std.com) wrote:
>> 	\377		Octal
>> 	\xFF		Hex
>
>> 	Can be used to match a character with specific ASCII code given in
>> octal or hex.
>
>    It would be nice if you could insert a character by it's
>    ASCII code. I think it would be even more useful than
>    functions "Next char is a control char" and "Next char has 7
>    bit set".

That's a good idea- I just put it into version 1.0.13, which the sysop here
has still not coppied to the ftp directory (ftp.std.com, file:
src/editors/joe1.0.13.tar.Z).

You can type: `255  or  `xFF  or  `o377

to enter decimanl, hex or octal ASCII values directly.

-- 
/*  jhallen@world.std.com (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Re: JOE 1.0.12 - Blurb
#3010
Author: Peter da Silva
Date: Thu, 25 Aug 1994 02:03
12 lines
1124 bytes
In article <Cv1o5M.2GC@world.std.com>,
Joseph H Allen <jhallen@world.std.com> wrote:
> - A problem where a lot of OOPSs were printed when using the terminfo
>   database on some systems.

Term*INFO*?  Yeesh.  Termlib I believe, but I haven't heard of terminfo
doing that.
-- 
Peter da Silva                                            `-_-'
Network Management Technology Incorporated                 'U`
1601 Industrial Blvd.     Sugar Land, TX  77478  USA
+1 713 274 5180                       "Hast Du heute schon Deinen Wolf umarmt?"
Re: JOE 1.0.12 - Blurb
#3011
Author: Joseph H Allen
Date: Fri, 26 Aug 1994 03:01
30 lines
1554 bytes
In article <Cv1o5M.2GC@world.std.com>,
Joseph H Allen <jhallen@world.std.com> wrote:

>>>                           Joe's Own Editor 1.0.12
>>The latest version is now 1.0.13:

I got JOE working on an HP-9000/735.  It's the weirdest problem yet:
arithmetic involving shorts doesn't appear to work right.  Does anyone have
any idea why?  Here's a program to demonstrate the problem:

unsigned short a=1024;
unsigned short b=1024;
int c=311;
char *d="Hello there";

main()
 {
 printf("%x %x\n",d+c,d+a-(b-c));
 }

This printed: 40001207 400012d7

The fix for JOE is to change the two 'unsigned short's in the file b.h to
'int's.  This is truly a bizzare problem.

-- 
/*  jhallen@world.std.com (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
Re: JOE 1.0.12 - Blurb
#3012
Author: Norman Diamond
Date: Fri, 26 Aug 1994 10:25
15 lines
1261 bytes
In article <Cv4GDy.GMr@world.std.com> jhallen@world.std.com (Joseph H Allen) writes:
>unsigned short a=1024;
>unsigned short b=1024;
>int c=311;
>char *d="Hello there";
>main() { printf("%x %x\n",d+c,d+a-(b-c)); }

>The fix for JOE is to change the two 'unsigned short's in the file b.h to
>'int's.  This is truly a bizzare problem.

The correct fix is to change the two '%x' conversions to '%hx' conversions.
%x requires an unsigned int argument; %hx requires an unsigned short argument.
--
 <<  If this were the company's opinion, I would not be allowed to post it.  >>
segmentation fault (california dumped)
Re: JOE 1.0.12 - Blurb
#3013
Author: Thomas Wolff
Date: Fri, 26 Aug 1994 10:53
19 lines
1494 bytes
diamond@jrd.dec.com (Norman Diamond) writes:

: In article <Cv4GDy.GMr@world.std.com> jhallen@world.std.com (Joseph H Allen) writes:
: >unsigned short a=1024;
: >unsigned short b=1024;
: >int c=311;
: >char *d="Hello there";
: >main() { printf("%x %x\n",d+c,d+a-(b-c)); }

: >The fix for JOE is to change the two 'unsigned short's in the file b.h to
: >'int's.  This is truly a bizzare problem.

: The correct fix is to change the two '%x' conversions to '%hx' conversions.
: %x requires an unsigned int argument; %hx requires an unsigned short argument.

In cases like this I'd say the correct fix is to finally dispose of 
that junk language "C".
Sorry - I could not resist once again. No replies necessary.
Thomas Wolff@inf.fu-berlin.de
Re: JOE 1.0.12 - Blurb
#3014
Author: Norman Diamond
Date: Mon, 29 Aug 1994 01:27
27 lines
2097 bytes
In article <33kfu1$eff@usenet.pa.dec.com> diamond@jrd.dec.com (Norman Diamond) writes:
>In article <Cv4GDy.GMr@world.std.com> jhallen@world.std.com (Joseph H Allen) writes:
>>unsigned short a=1024;
>>unsigned short b=1024;
>>int c=311;
>>char *d="Hello there";
>>main() { printf("%x %x\n",d+c,d+a-(b-c)); }
>>
>>The fix for JOE is to change the two 'unsigned short's in the file b.h to
>>'int's.  This is truly a bizzare problem.

>The correct fix is to change the two '%x' conversions to '%hx' conversions.
>%x requires an unsigned int argument; %hx requires an unsigned short argument.

Sorry, I had noticed the "unsigned short" declarations and had not noticed
the "char *" declarations.  Someone pointed out by e-mail that these are
pointer expressions.  The correct fix is to use %p format (and pedantically,
to cast the pointer expressions to type (void *), but it is "intended" to
work without it because char * and void * have the same representation).
However, %hx or %x or %lx might work on some machines if you know the
sizes of the corresponding integral types and of char *.

[Notice to jik:  Sorry the amount of source here is only a few characters,
changing x or hx to p.  It is still source.]
--
 <<  If this were the company's opinion, I would not be allowed to post it.  >>
segmentation fault (california dumped)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads