MINCE is an Emacs-like text editor from Mark of the Unicorn, Inc.

MINCE

  • MINCE Is Not Complete[ly] EMACS

Codacy Badge TickgitTODOs LocCount 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)
  • 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.
Owner
Jeffrey H. Johnson
Not RPM developer Jeffrey Johnson. Not XTree developer Jeffrey Johnson. Not Jeffrey Johnson, Google Senior Software Engineer. Not the robotic engineer, either.
Jeffrey H. Johnson
Comments
  • AUG newsletters from MIT-MC[AR0:JCAF]

    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.
    
  • Find out more about MINCE for GEMDOS on the Atari ST

    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
    
  • Restyle Update README.md

    Restyle Update README.md

    Automated style fixes for #26, created by Restyled.

    The following restylers made fixes:

    • prettier-markdown

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Investigate availability of Cliff Lasser's MINCE keyboard macro package

    Investigate availability of Cliff Lasser's MINCE keyboard macro package

    16-Jan-84 11:01:55-MST,699;000000000000
    Return-Path: <@MIT-MC:CAL%[email protected]>
    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: <[email protected]>
    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
    
  • Restyle Format code with black, gofmt, yapf, autopep8, isort, standardrb, standardjs, prettier and rubocop

    Restyle Format code with black, gofmt, yapf, autopep8, isort, standardrb, standardjs, prettier and rubocop

    Automated style fixes for #100, created by Restyled.

    The following restylers made fixes:

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Restyle Update LICENSE.md

    Restyle Update LICENSE.md

    Automated style fixes for #96, created by Restyled.

    The following restylers made fixes:

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Restyle Update README.md

    Restyle Update README.md

    Automated style fixes for #94, created by Restyled.

    The following restylers made fixes:

    • prettier-markdown

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Restyle Update LICENSE.md

    Restyle Update LICENSE.md

    Automated style fixes for #91, created by Restyled.

    The following restylers made fixes:

    • prettier-markdown

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Restyle Update LICENSE.md

    Restyle Update LICENSE.md

    Automated style fixes for #89, created by Restyled.

    The following restylers made fixes:

    • prettier-markdown

    To incorporate these changes, merge this Pull Request into the original. We recommend using the Squash or Rebase strategies.

    NOTE: As work continues on the original Pull Request, this process will re-run and update (force-push) this Pull Request with updated style fixes as necessary. If the style is fixed manually at any point (i.e. this process finds no fixes to make), this Pull Request will be closed automatically.

    Sorry if this was unexpected. To disable it, see our documentation.

  • Dependency Dashboard

    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 v3
    • github/codeql-action v2
    • github/codeql-action v2
    • github/codeql-action v2

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
  • Haiku package builder target (make hpkg) broken on current Haiku Walter

    Haiku package builder target (make hpkg) broken on current Haiku Walter

    It worked with Haiku Walter (rolling) at the time of committing the functionality, but changes in Haiku since then have broken things.

    The build itself works fine, the error is related only to packaging.

  • Portability: Early SGS and PCC compiler errors

    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.
  • Bug: File access broken on Cray VSMP/UNICOS 10

    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.)

  • Additional Window Commands

    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();
    	}
    
  • MINCE global space and BDS C

    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
    
Simple text editor in C++ - Simple editor built upon kilo editor.

GUMBO editor Simple editor built upon kilo editor. Still big work in progress although this is just fun side project to learn more C/C++. From 0.0.2->

Sep 15, 2021
Let's make a text editor like in the 70's
Let's make a text editor like in the 70's

baracle Let's make a text editor like in the 70's Installation Arch Linux and derivatives (AUR) Stable package: baracle Use an AUR helper or git clone

Feb 27, 2022
Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim.

Vimb - the vim like browser is a webkit based web browser that behaves like the vimperator plugin for the firefox and usage paradigms from the great editor vim. The goal of vimb is to build a completely keyboard-driven, efficient and pleasurable browsing-experience.

Dec 30, 2022
IDA Debugger Module to Dynamically Synchronize Memory and Registers with third-party Backends (Tenet, Unicorn, GDB, etc.)
IDA Debugger Module to Dynamically Synchronize Memory and Registers with third-party Backends (Tenet, Unicorn, GDB, etc.)

IDA Debug Bridge IDA Debugger Module to Dynamically Synchronize Memory and Registers with third-party Backends (Tenet, Unicorn, GDB, etc.) By synchron

Sep 5, 2022
Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU.
Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU.

Unicorn Engine Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU. Unicorn offers some unparalleled fe

Nov 7, 2021
Qnicorn: a cutting edge version of unicorn-engine.org
Qnicorn: a cutting edge version of unicorn-engine.org

Qnicorn Engine Qnicorn is a cutting edge and community-driven version of unicorn-engine. Qnicorn offers the features below: All features that Unicorn2

Sep 10, 2022
Unicorn CPU emulator framework (ARM, AArch64, M68K, Mips, Sparc, PowerPC, RiscV, X86)

Unicorn Engine Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework based on QEMU. Unicorn offers some unparalleled fea

Jan 3, 2023
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more

Archived cquery is no longer under development. clangd and ccls are both good replacements. cquery cquery is a highly-scalable, low-latency language s

Jan 2, 2023
A C/C++ minor mode for Emacs powered by libclang

Irony-Mode A C/C++ minor mode powered by libclang irony-mode is an Emacs minor-mode that aims at improving the editing experience for the C, C++ and O

Dec 22, 2022
C++ font-lock for Emacs
C++ font-lock for Emacs

Syntax highlighting support for "Modern C++" - until C++20 and Technical Specification. This package aims to provide a simple highlight of the C++ lan

Dec 1, 2022
tree-sitter grammar for emacs lisp

Tree-sitter Grammar for Emacs Lisp A simple tree-sitter grammar for elisp. Syntax supported: Atoms (integers, floats, strings, characters, symbols) Li

Dec 7, 2022
Typewriter Effect with Rich Text + *Correct* Text Wrapping
Typewriter Effect with Rich Text + *Correct* Text Wrapping

Typewriter Effect with Rich Text + Correct Text Wrapping I've spent way too long getting this right. This is meant as a base class for a UMG dialogue

Nov 29, 2022
Text - A spicy text library for C++ that has the explicit goal of enabling the entire ecosystem to share in proper forward progress towards a bright Unicode future.

ztd.text Because if text works well in two of the most popular systems programming languages, the entire world over can start to benefit properly. Thi

Dec 25, 2022
Jittey - A public domain text editor written in C and Win32
Jittey  - A public domain text editor written in C and Win32

Jittey (Jacob's Terrific Text Editor) is a single-file basic text editor written in pure C and Win32, there is no real reason to use it, but it

Dec 15, 2022
A very minimal & simple text editor written in C with only Standard C Library.
A very minimal & simple text editor written in C with only Standard C Library.

Texterm Text Editor A very minimal & simple text editor written in C with only Standard Library. Syntax highlighting supported for C JavaScript Python

Dec 8, 2022
C.impl is a small portable C interpreter integrated with a line text editor

C.impl C.impl is a small portable C interpreter integrated with a line text editor, originally developed for the ELLO 1A computer: http://ello.cc The

Nov 21, 2022
This repository is for my coding practice, making a text editor from scratch in C.

text-editor-practice This repository will contain my coding practice, making a text editor from scratch. I based this practice from this wonderful res

Dec 13, 2021
yedit - A text editor made with ncurses and C++
yedit - A text editor made with ncurses and C++

yedit A text editor made with ncurses and C++ dependencies ∙ ncurses in Debian you can install dependencies with this command: # apt install libncurse

Oct 5, 2022
Programmer's text editor

README file for JED. For installation instructions on Unix: read INSTALL.unx VMS: read INSTALL.vms Windows:

Dec 5, 2022