Giter Club home page Giter Club logo

pmince's Introduction

MINCE

  • MINCE Is Not Complete[ly] EMACS

Codacy Badge TickgitTODOs GitHubCodeSize


Overview

  • MINCE is an Emacs-like text editor from Mark of the Unicorn, Inc.
    • Versions were available for many operating sysetms
      • CP/M‑80
      • CP/M‑68K
      • ST/GEMDOS
      • PC/DOS
      • RSX‑11
      • VAX/VMS
      • UNIX

Portable MINCE

  • "Portable MINCE" is real MINCE, plus:
    • CP/M system call translation
    • 8080/Z80 CPU emulation
      • 68000 support planned

Building

  • Required:

    • ANSI/ISO C compiler (gcc, clang, etc.)
    • POSIX cmp, env, and sh (Bourne shell)
    • GNU make
  • Optional:

    • Tcl expect and POSIX sed
      • Needed to override default terminal configuration (24 cols, 80 rows).
  • Review the Makefile for more information.

Usage

Tested configurations

Working

  • ARMv7HF (ARM32)
    • Raspbian (Buster) 10, GNU C 8.3.0 (6+rpi1)
  • ARM64 (AArch64)
    • Debian (Bullseye) 11, GNU C 10.2.1
    • FreeBSD 13.0‑RC4, Clang 11.0.1 (g43ff75f2c3fe)
    • FreeBSD 13.0‑RC5, GNU C 9.3.0
  • x86 (IA32)
    • Debian (Sid) 11, GNU C 10.2.0
    • Haiku 55027, GNU C 2.95.3 (20170720)
    • Haiku 55027, GNU C 8.3.0 (20190524)
  • x86_64 (AMD64)
    • CentOS 8 (Stream), GNU C 10.2.1
    • Fedora 33, GNU C 10.2.1
    • Fedora 33, Intel oneAPI DPC++ 2021.2.0 (20210317)
    • Fedora 34 Beta, AMD AOCC 2.3.0 (20201110)
    • Haiku 55029, GNU C 8.3.0 (20190524)
    • macOS (Big Sur) 11.3 Beta 6, GNU C 10.2.0 (Homebrew GCC 10.2.0‑4)
    • macOS (Big Sur) 11.3 Beta 6, Xcode 12.4 (1200.0.32.29)
    • NetBSD 9.1, GNU C 7.5.0 (nb4-20200810)
    • OpenBSD 6.8, Clang 10.0.1
    • RHEL 8.3, GNU C 8.4.1
    • OpenIndiana 20210407 (Hipster), SunOS/illumos 5.11, GNU C 3.4.3 (20050802)
    • Windows 10.0‑21343 (Insider), GNU C 10.2.0 (Cygwin 3.2.0)
    • Windows, Midipix, GNU C 4.6.4 (Midipix)
  • RISC-V (RV64)
    • Debian (Sid) 11, GNU C 10.2.0

Needs work

  • Cray (VSMP)
    • UNICOS (SV1) 10.0.1.2, Cray Standard C 6.6.0.3
    • UNICOS (J98) 10.0.0.2, Cray Standard C 6.4.0.0
      • Issue: File I/O not working on UNICOS, everything else is OK.
  • Motorola 68000 (M68010)
    • SYSTEM V/68 (VME/10) Release 2 Version 1.0, SGS 1.5 (3/13/83)
      • Issue: "ccpu.c", line 2142: compiler error: switch table overflow

Roadmap

  • End-user configuration system, customizable via file or environment variables.
  • Avoid main input busywait/spin‑loop to reduce idle CPU usage.
  • Translation of line endings at run time (use dos2unix as a workaround).
  • Translation of PgUp / PgDn / Home / End / cursor control / arrow keys.
  • Build with GCC ‑fno‑common and reduce ‑Wall warnings.
  • Support crash recovery (by parsing mince.swp) in case of unclean exit.
  • Add support for external filters, such as hexadecimal mode (via xxd).
  • Support for automatic terminal resizing (by catching and handling SIGWINCH).
  • Allow building MINCE binaries with various extensions; produce verified/tested configurations.
  • Build and integrate Scribble, Pencil, and Crayon.
    • Automatic setup for ANSI/ASME Y14.1 (US) and ISO-216 (EU) paper types.
    • End‑user run time switching between different printer defintions.
    • Support for rendering (NEC, Epson, Diablo, etc.) proportional font printer output.
    • Conversion of Crayon output to PDF, PostScript, etc.
    • Automate Scribble formatting to (n)roff / groff, (X)HTML, TeX / LaTeX, etc. (utilizing Pandoc or similar tools for conversion).
  • Add Motorola 68000 CPU core for CP/M‑68K to support MINCE‑68K.
    • Automatically invoke MINCE‑68K version for large input files.
    • End-user configuration of default MINCE flavor (MINCE‑80 or MINCE‑68K).
  • User-configurable key bindings and mapping.
    • Allow user configuration without requiring full recompilation.
    • Normalize key bindings and mappings between MINCE flavors.
  • Support for RSX‑11, VMS, and OS/2 operating systems.
  • Create packages using NFPM / FPM, Homebrew tap / cask, pkgsrc, etc.

Original Authors

  • Portable MINCE: Copyright © 2021 Jeffrey H. Johnson <[email protected]>
  • MINCE: Copyright © 1980—1985 by Mark of the Unicorn, Inc.
  • DIFF: Copyright © 1981 by Mark of the Unicorn, Inc.
  • Scribble, Pencil, Crayon: Copyright © 1981 by Mark of the Unicorn, Inc.
    • MINCE / DIFF / Scribble / Pencil / Crayon: Authored by Jason T. Linhart, Scott ("Gyro") Layson Burson, Craig A. Finseth, Brian N. Hess, and Bill Spitzak.
  • CCOM80 (Derived from COM 3.0): Copyright © 1984—2008 by Jim Cathey, Edmund Ramm, Charlie Gibbs, and Willi Kusche.
  • coffwrap (Derived from bin2c): Copyright © 2015 by Ondrej Novak.

License

  • See the LICENSE file for important details.

pmince's People

Contributors

codacy-badger avatar deepsource-autofix[bot] avatar johnsonjh avatar lgtm-migrator avatar mend-bolt-for-github[bot] avatar redfoxymoon avatar renovate[bot] avatar restyled-commits avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

pmince's Issues

MINCE global space and BDS C

2-Sep-82 10:26:00,3244;000000000000
Date:     2 September 1982 1226-edt
From:     Brian N. Hess              <Hess.Unicorn at MIT-MULTICS>
Subject:  Mince globals
To:       amethyst-users at MIT-MC

Mike --

A quote from the Amethyst Users Group newsletter, September, 1981:
There is one question I would like to answer that everyone keeps asking.
There are in fact several ways for people to get more global space in
Mince for use with personal extensions.

First a little background.  We use the "-e" option in the C compiler to
save space in the resulting programs.  This forces the global address to
appear at the specified address regardless of the size of the code.  L2
and CLINK both get this address, along with the size of the global data
area from the first .CRL file linked.  Mince does dynamic storage
allocation in the region between the global data and the stack, thus the
size of the global data must be accurate.  Further, there is more global
data than there might appear to be -- MINCE.CRL is compiled with a
different version of MINCE.GBL than is distributed, and has extra global
data for the buffer abstraction.

The simplest way to add storage is to have this storage be in the form
of string constants.  The compiler allocates string constants in such a
way that you can write over them so long as you don't exceed their
allocated length.  This is a fair although uncomfortable programming
practice which all of the compilers I know of (...) support.  This can
be done as follows:

Create a function such as:

          Storage()
          {
          return("This returns a string of exactly fifty characters    ");
          }

This function can now be used in another place to get a pointer to use
for storage as in:

          Munge(arg)                    /* Store arg in storage */
          char *arg
          {
          if (strlen(arg) > 50) Error("String too long");
          else strcpy(Storage(),arg);
          Echo("String now is: ");
          TNLPrnt(Storage());
          }

Another way to get extra storage is to create some room between the end
of the code and the start of the global data area by elimination of some
code or use of the L*.CRL files.  The routines can simply KNOW that this
space is there and use it.  This can get tricky to maintain since the
end of the code is likely to change every time you work on the program.
One good thing to do is to have your routine check the location of the
end of the code with the BDS-C function codend().

The final way to ge more storage is a little-known feature of L2.  L2,
unlike CLINK, does not require the first function linked to be the main
function.  Thus, you can compile BINDINGS.C with extra global
definitions and link BINDINGS first and then MINCE.  The trick is that
you have to leave extra space (more than 1000 and less than 1100 bytes;
1100 works [and I counted once and got 1086 -- bnh]) for the globals
that you cannot see.  The only way to know this number exactly is to put
a function in Mince that prints the address of the last visible global
and also the value returned by the BDS-C function that gives the address
of the end of the global area.
                            
Good luck,
Brian

Bug: File access broken on Cray VSMP/UNICOS 10

Need to figure out what's wrong here, and, hopefully, a fix will increase compatibility generally.

  • Cray (VSMP)
    • UNICOS (SV1) 10.0.1.2, Cray Standard C Version 6.6.0.3
    • UNICOS (J98) 10.0.0.2, Cray Standard C Version 6.4.0.0

Good news, all the 8080 and CP/M functionality otherwise checks out.

(A fix is likely trivial once I decide to figure out TotalView.)

Investigate availability of Cliff Lasser's MINCE keyboard macro package

16-Jan-84 11:01:55-MST,699;000000000000
Return-Path: <@MIT-MC:CAL%MIT-OZ@MIT-MC>
Received: from MIT-MC by SIMTEL20.ARPA with TCP; Mon 16 Jan 84 11:01:35-MST
Date: Sun, 15 Jan 1984  15:08 EST
Message-ID: <CAL.11983870893.BABYL@MIT-OZ>
From: Cliff Lasser <CAL%[email protected]>
To:   Info-cpm @SIMTEL20.ARPA
Cc:   [email protected], Cliff Lasser <CAL%[email protected]>
Subject: Mince keyboard macros
In-reply-to: Msg of 13 Jan 1984  18:52-EST from Rich $alz <DCB.TECH%MIT-OZ at MIT-MC.ARPA>

I have put the sources for my mince keyboard macros in MIT-MC:FJW;MMODS
TXT.  They will be there until FJW moves the file over to the Simtel20.  If
you have any problems with it, don't hesitate to let me know.

	-Cliff

AUG newsletters from MIT-MC[AR0:JCAF]

31-Oct-82 18:49:00,261;000000000000
Date: 31 October 1982 20:49-EST
From: Paul L. Kelley <PLK at MIT-MC>
Subject:  AUG newsletters
To: CSL.JLH.Celoni at SU-SCORE
cc: AMETHYST-USERS at MIT-MC


Dear Father Celoni,

The AUG users group disk is in AR0:JCAF; on MIT-MC if that is a help.

DIRED for MINCE

21-Nov-83 08:12:56-MST,1438;000000000000
Return-Path: <[email protected]>
Received: from MIT-MULTICS.ARPA by SIMTEL20.ARPA with TCP; Mon 21 Nov 83 08:12:04-MST
Date:  19 November 1983 00:55 est
From:  Hess.Unicorn at MIT-MULTICS
Subject:  Dired
To:  madler at MIT-MC
cc:  amethyst-users at SIMTEL20
In-Reply-To:  Your message of 8/26/83 to AMETHYST-USERS @ MIT-MC

Took a long time to answer, but...

The wizard of Mince tells me that yes, if you set the DMA address to
something random, it will be valid when Mince attempts to do I/O.  And
that you have chosen the only way to get Dired to work.  However, he
says "if you must" to your question about setting the modified flag to
false after writing to the buffer.  Being a purist, he feels that the
changes to the directory should not be made until you exit from Dired
mode, which should delete the buffer so that the question about modified
buffers on exiting Mince would never appear.  (Of course, when
confronted with the fact that it's a drag keeping around the information
until Dired is exited and that The FinalWord doesn't even go to such
great lengths, he relented, but only in view that there is so little
free memory for storing linked lists of files to rename/delete or code
for reparsing the buffer to catch all the deleted files upon exiting
Dired.)

I hope that somebody said that they were interested in the routine;
someone once asked for such a thing about a year ago.

Portability: Early SGS and PCC compiler errors

Example: Motorola SYSTEM V/68, Release 2, Version 1.0, VME/10 68010:

$ cc -c -O -DSYSV -DRUNOPTS -DUSEDIRENT ccpu.c
"ccpu.c", line 2142: compiler error: switch table overflow

Other systems using AT&T System V SGS compiler derivatives have the same trouble (e.g. Multics C).

On these compilers, the maximum switch table size is a preprocessor defintion set at compile time, so not trivial to patch.

Possible solutions (besides updating the compiler):

  1. Add #ifdef to leave out undocumented instructions.
  2. Convert switch/case to if/else.

Additional Window Commands

14-Sep-82 11:04:00,849;000000000000
Date: Tuesday, 14 Sep 1982 10:04-PDT
To: Amethyst-Users at MIT-MC
From: bridger at RAND-UNIX
Cc: bridger at RAND-UNIX
Subject: Some Window commands

Here are several commands I've come to enjoy:

	1. M-, ==> point to start-of-window

	2. M-. ==> point to end-of-window
	
	The bindings follow the Gosling EMACS; M-, and M-. conveniently
	mimic the start-of-buffer, end-of buffer pair:  M-< and M->.

	3. M-! ==> line-to-start-of-window & point to beginning-of-line

	The trick here is to temporarily reset the preferred row to the top
	row.


MBeginWind()	/* on  M-, */	
{
	BPntToMrk(sstart);
	TForce();
	}
MEndWind()	/* on M-. */
{
	BPntToMrk(send);
	BMove(-1);
	TForce();
	}
MMoveToTop()	/* 'M-!' ==> line to top of buffer */
{
 	tmp=prefrow;
	prefrow=0;
	ScrnRange();
	prefrow=tmp;
	ToBegLine();
	}

Investigate updating BDS C libraries and L2 linker.

As noted on AMETHYST-USERS by Brian Hess on 6-Jun-1984:

6-Jun-84 21:05:46-MDT,1059;000000000000
Return-Path: <[email protected]>
Received: from MIT-MULTICS.ARPA by SIMTEL20.ARPA with TCP; Wed 6 Jun 84 21:05:34-MDT
Date:  Wed, 6 Jun 84 22:55 EDT
From:  [email protected]
Subject:  Mince under CP/M 3.0
To:  [email protected]
Message-ID:  <[email protected]>

We use BDS C 1.5 and L2 1.3 internally; I'll check with L2's author to
see if 1.3 is distributed, and if so or not, why so or not...  You can
use 1.45 or 1.45a to compile your old source code, andif you want to use
1.5, you can get an update from Mark of the Unicorn for your old disk
and $25.

Mince's author says that the distributed Mince works properly under CP/M
3.0, and can't think of any good things that might be wrong to cause
intermittent deviation in some COMMn.C routines.

He also said that on CP/M, the printf does indeed send stuff out right
away, and that TERM.C doesn't use printf (at least not the standard
large version) anyway; therefore, that can't be the problem with some
messages not appearing.

Brian

Find out more about MINCE for GEMDOS on the Atari ST

23-Apr-85 14:02:57-MST,630;000000000000
Return-Path: <@MIT-MC:[email protected]>
Received: from MIT-MC by SIMTEL20.ARPA with TCP; Tue 23 Apr 85 14:02:29-MST
Received: from MIT-MULTICS.ARPA by MIT-MC.ARPA; 23 APR 85 15:54:40 EST
Date:  Mon, 22 Apr 85 20:47 EST
From:  [email protected]
Subject:  Oops...
To:  [email protected]
Message-ID:  <[email protected]>

I forgot to tell you all that MINCE is up and running on the Atari ST
series under Gem DOS.  We have tested it on the 520 but not the smaller
one (130?)  yet.  Usual price, but source won't be supplied until the
compiler/library/ROMs settle.

Brian

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/codeql.yml
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
  • github/codeql-action v3

  • Check this box to trigger a request for Renovate to run again on this repository

Things that are currently lost, but, hopefully, might be found.

  • Distributions of MINCE for PDP/RSX-11 or UNIX (and maybe PC/DOS or CP/M-86) binary, source, or partial source.

For reference (1985):

[Here's a word count from the IBM PC version.  (Note: Your mileage may vary.)]

% cd /u3/M/IBMDIST && ls
READ.ME         bindings.c      comm1.c         comm2.c         comm3.c
config.gbl      conv.com        mc.asm          mc.bat          mc.obj
mcc.bat         mconfig         mconfig.c       mince           mince.c
mince.gbl       mlib.asm        mlib.lib        support.c       term.c
util.c          vbuff1.c        vbuff2.c

% wc *.c *.gbl
    226   1085    7822 bindings.c
    371    923    6840 comm1.c
    325    774    6013 comm2.c
    388   1021    8501 comm3.c
    597   1802   12209 mconfig.c
    356   1017    8371 mince.c
    658   1715   13167 support.c
    361   1264    7989 term.c
    188    631    4413 util.c
    466   1094   11020 vbuff1.c
    509   1167   10542 vbuff2.c
     38    148    1071 config.gbl
    194    753    4998 mince.gbl
   4677  13394  102956 total
%
[ lines  words   chars file name]

[--BNH]
  • Any pre-2.5, *post-*2.6 (but pre-PW), unreleased, development, or beta MINCE artifacts.

  • Other SCRIBBLE (and Crayon, Pencil, etc.) releases, especially any non-CP/M-80 binary, source, or partial source distribution kits.

    "Scribble distribution was halted because of source code update problems, keeping users current, and a complete re-write which was done [in 1982]. … The current version of Scribble is 1.4."

  • Site-specific or user-created extensions and customizations, especially anything for non-CP/M-80 platforms (UNIX, RSX-11, etc.)

  • "MOTU authorized" third-party content, including AMETHYST-USERS archives, AUG files, AUGment newsletters, physical mailings, and similar.

  • Perfect Writer source code.

  • Any Post-Perfect Writer 1.01 artifacts.

  • MINCE (or Perfect Writer) files and postings from BITNET, BIX, CompuServe CIS SIGs (CP/M, KUG, etc.), The Source, Delphi, GEnie, or similar services.

  • The following files, from GEnie's National CP/M RoundTable Software Library, as of November 1989:

PW.TZT		Printing PW documents
PW1.TZT 	Perfect Writer options/techniques
PW2.TZT 	Perfect Writer tips
PWCMND.TZT	Bypassing menu of Perfect Writer
PWCPM.TZT	Perfect Writer wildcards
PWPAGE.TZT	Perfect Writer page breaks
PWSCROLL.TZT	Moving around fast in Perfect Writer
PWSUGG.TZT	Perfect Writer quick printing
PF-INST.IQF	Install printer for Perfect Writer
POW.LBR 	Processor of Words - test formatter
PPG213.LBR	Print DOC, source, text files
PRFCTDIR.LBR	Get sorted DIR in Perfect Writer
102794527 Mince 1982
102790987 Perfect Writer 1983
102794423 Perfect Writer 1982
102791089 Perfect Writer 1982
102790988 Perfect Writer Perfect Speller Edit Disk 1983

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.