Original README from Shalom ha-Ashkenaz

From FreeM Wiki
Revision as of 15:30, 20 December 2024 by Smw (talk | contribs) (Created page with "{{Historic}} <pre> * * * * * ***************...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
This is a historic document, preserved here for posterity. As such, its contents should not be considered timely or relevant to current FreeM versions.
                              *
                             * *
                            *   *
                       ***************
                        * *       * *
                         *  MUMPS  *
                        * *       * *
                       ***************
                            *   *
                             * *
                              *

Shalom ha-Ashkenaz, 1998/06/18 CE

RE: FreeMUMPS and its source code files

Shalom!

Someone set out to purchase all MUMPS vendors. What is good for Terry
may not be good for the traditional MUMPS community.

MUMPS is fun. MUMPS is OPEN. MUMPS puts YOU in control of affairs.

Somebody is monopolising MUMPS, is cache-ing MUMPS.

So we need a FreeMUMPS, i.e. something even Terry-Bill cannot buy!

Here are files of a preliminary version of FreeMUMPS.

I put them in the hands of MUG with the following guidelines:

1) The aim of the project is to make available FreeMUMPS to
   everybody (even private use for Terry shall be granted :-).

2) As long as there is no manual (preferably in the English language)
   available to the public and as long as there is an unresolved list
   of known problems, FreeMUMPS is ***NOT*** to be made available to
   the general public. Let lousy products be the privilege of MS-Bill.

3) MUG may forward FreeMUMPS at this stage to individuals
   or to non-profit organizations who volunteer to contribute to the
   project. When there is a manual (TeX or LaTeX recommended!, HTML is
   not bad either) and when a MUG task force declares
   FreeMUMPS free of known problems then FreeMUMPS is to be made
   available to the general public.
   
4) FreeMUMPS is not to be placed under the GNU General Public Licence.
   Anybody who wants to produce a proprietary product with parts of
   FreeMUMPS is free to do so: Either with FreeMUMPS as part of
   application programs or with FreeMUMPS as the basis of a new
   commercial MUMPS implementation. However, who passes FreeMUMPS
   or products based on it, must inform the recipient of the
   FreeMUMPS Copyright, and he has to provide the FreeMUMPS
   source codes without additional charges.

5) Everybody passing FreeMUMPS or products based on it should encourage
   the recipient to join in a MUMPS Users Group of her choice.

6) Current FreeMUMPS runs under LINUX and under SCO-UNIX. Minor modifications
   may be needed to make it compile & run under other Unixes. A Windows-98 or
   Windows-NT Version is desirable. char is "signed char".
   under SCO-UNIX you call it with "mumps.sco"
   under LINUX    you call it with "mumps.linux"
   use mcc and mutil to compile FreeMUMPS and associated untilities.

Unresolved List of Known Problems in FreeMUMPS:

- no manual
  main features in a nutshell:
  ,,standard'' MUMPS
  255 char max string length
  no controls in global subscripts
  $C(129) is EOL = EndOfLine character, cannot be used
  $C(130) is subscript delimiter, cannot be used
  $V(17) non standard intrinsic commands
    za zb zd zg zh zi zj zl zn zp zq zr zs zt zw
    zallocate zbreak zdeallocate zgo zhalt zinsert zjob
    zload znew zprint zquit zremove zsave ztrap zwrite
  with VIEW 17 you can remove items from this list
  use of a non standard command that is not in this list
  is processed as a user defined command. "ZFOO argument"
  is processed as
  XECUTE "NEW % SET %=argument DO ^%zfoo"

  $V(18) non standard intrinsic functions
    zb zc zd ze zh zht zk zl zm zn zo zr zs zt
    zboolean zcall zcr zcrc zdata zdate zedit zhorolog
    zkey zlength zlsd zname znext zorder zpiece
    zprevious zreplace zsyntax zsort ztime
  with VIEW 18 you can remove items from this list
  use of a non standard function that is not in this list
  is processed as a user defined function. "$ZFOO(argument)"
  is processed as "$$^%Zfoo(argument)"

  $V(19) non standard intrinsic special variables
    za zb zc zd ze zf zh zi zj zl zn zo zp zr zs zt zv
    zcontrolc zdate zerror zname zhorolog zinrpt zjob
    zlocal zorder zprecision zsystem ztime ztr ztrap
    zreference zversion
  with VIEW 19 you can remove items from this list
 
  routines are stored as LINUX files with extension ".mps"
  use $V(98) for inspection; VIEW 98 to change this

  globals are stored as LINUX files with prefix "^" and
  with no extension
  use $V(96),$V(97) for inspection; VIEW 96,97 to change this

  use SET $H (with root permissions!) to set the system date/time
  use $V(99) and VIEW 99 to set an offset on $H for the current
  job only. This is of tremendous value for date dependend tests (Y2K!).

  %-Routines and %-Globals reside in /usr/lib/mumps. All other routines
  reside in the current directory (There is no UCI).
  change/inspect this with VIEW/$VIEW 3 through 8.

  see views.c to see more features to customize FreeMUMPS.

  there is no explicit limit on the size of routines, local symbol table,
  globals (but it can be controlled via VIEW/$VIEW).

  !  shell escape
  !< shell escape with output to %-array
  !> shell escape with input from % array
  !! shell escape afer HALTing FreeMUMPS
  ***manual should be produced with TeX or LaTeX***

  on startup the routine login.mps is executed. Unless this HALTS,
  programmer mode (directmode) is entered on termination of login.mps

  ,,utilites'' are not needed, as there in a convenient way to call
  LINUX utilies from with FreeMUMPS

  Database errors can be diagnosed with fix/gvalidate. They can be
  repaired with grestore.
  
- accuracy of power operator (**) with non-integer exponents needs
  careful evaluation.

- accuracy of division may be controlled with $ZPRECISION, but
  is not clean.

- local variable module handles arrays inefficiently.

- call by reference has a problem: if the formal name and the
  actual name differ, all action should be visible under both
  names, with the exception of the NEW command. FreeMUMPS does
  not honor this exception.

- $QUERY with negative second argument returns wrong results.
  $ORDER with arbitrary second argument (intexpr) is OK.

- standard error handling not implemented. So far only traditional
  non-standard error handling with SET $ZTRAP="entryref"

- transaction processing not implemented. But probably it is not
  possible to do so in an efficient manner.

- MERGE, KVALUE, KDATA not implemented

- ssvn not implemented, but hook in expr.c included.

- &sql{} binding, OMI, MWAPI, GKS binding not implemented.

- extentions for values (i.e. number+unit) so far only implemented
  for CURRENCY with the official conversion rates for the currencies of
  the euro club.
  try IF 1DEM<1EUR WRITE 1DEM+.5EUR WRITE 10EUR#2ATS
 
- there are restrictions in the use of characters. Printable ASCII
  are OK. ASCII-Controls cannot be used in global subscripts.
  Otherwise all 7-bit chars are O.K.
  Strings in LINUX are delimited with $C(0). $C(0) is no problem. But
  $C(129) -lowest possible value in signed chars- is used as EOL =
  End_Of_Line symbol in FreeMUMPS strings. $C(130) is internally used
  as a separator in subscripts of (local/global) arrays. All other
  values may be used ( control this with VIEW/$VIEW 80)
  it is desirable to change FreeMUMPS either to use unsigned chars
  with $C(254) as DELIMiter in subscripts and $C(255) as EOL. Or
  even better: Instead of defining a string as a sequence of characters
  being terminated by a certain char, a better implentasion uses a counter
  plus a number of arbitrary (UNICODE?) chars.

- VIEW/$VIEW should be retired completely. All functionality currently
  using VIEW should be changed to ssvn.

- UNICODE should be adopted as the internal character set.

- if COLOR is made undefined /* commented in mpsdef0 */ FreeMUMPS
  works under SCO-UNIX, but it crashes immediately under LINUX.
  Therefore let it compile with COLOR defined, even if LINUX does
  not honor the color codes meant for scounix.

Have much fun, get involved with FreeMUMPS, and do not forget
to observe Sabbath Kaddish,

Yours,

Shalom ha-Ashkenaz

Filenames under MS-DOS are uppercase only.
For use under unix                        -> please rename

COPYRIGH          1322 11.01.99   14:51   -> COPYRIGHT
README            8198 11.01.99   16:26
BENCH    MPS      1567 11.01.99   14:51   -> bench.mps
COMPACT  C        9324 11.01.99   14:51   -> compact.c
EXPR     C      109452 11.01.99   14:52   -> expr.c
FIX               6024 11.01.99   14:52   -> fix
FIX      C        6334 11.01.99   14:53   -> fix.c
GCOMPACT         30400 11.01.99   14:53   -> gcompact
GL                6700 11.01.99   14:53   -> gl
GL       C        8335 11.01.99   14:53   -> gl.c
GLOBAL   C       68467 11.01.99   14:54   -> global.c
GRESTORE         30128 11.01.99   14:54   -> grestore
GVALIDAT          7976 11.01.99   14:54   -> gvalidate
LOCKS             4820 11.01.99   14:54   -> locks
LOCKS    C        7562 11.01.99   14:54   -> locks.c
LOGIN    MPS       135 11.01.99   14:54   -> login.mps
MCC                554 11.01.99   14:54   -> mcc
MPS      MAK      1186 11.01.99   14:59   -> mps.make
MPSDEF           18076 11.01.99   14:59   -> mpsdef
MPSDEF0           9908 11.01.99   14:59   -> mpsdef0
MUMPS    C       45641 11.01.99   15:00   -> mumps.c
MUMPS    LIN    215296 11.01.99   15:01   -> mumps.linux
MUMPS    SCO    224480 11.01.99   15:02   -> mumps.scounix
MUTIL              953 11.01.99   15:02   -> mutil
OPERATOR C       45021 11.01.99   15:03   -> operator.c
RESTORE  C        8674 11.01.99   15:03   -> restore.c
SERVICE  C       97693 11.01.99   15:04   -> service.c
STRINGS  C        2477 11.01.99   15:04   -> strings.c
SYMTAB   C       39881 11.01.99   15:04   -> symtab.c
VALIDATE C       13897 11.01.99   15:04   -> validate.c
VIEWS    C       45765 11.01.99   15:05   -> views.c
XECLINE  C       78992 11.01.99   15:06   -> xecline.c