home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / m-technology-faq / part1 next >
Text File  |  1999-11-08  |  94KB  |  2,224 lines

  1. Newsgroups: comp.lang.mumps,sci.med.informatics,comp.answers,news.answers,sci.answers
  2. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!news-stl.cp.verio.net!news.verio.net!newshub.northeast.verio.net!nntp.abs.net!uunet!ffx.uu.net!world!trask
  3. From: trask@gt3.com
  4. Subject: M Technology and MUMPS Language FAQ, Part 1/2
  5. Summary: Should be read by those interested in M and those who wish to
  6.          post to the newsgroup comp.lang.mumps
  7. Sender: trask@world.std.com (Gardner S Trask)
  8. Message-ID: <FKu0LK.19p@world.std.com>
  9. Approved: news-answers-request@MIT.EDU
  10. Date: Sun, 7 Nov 1999 14:36:56 GMT
  11. Reply-To: trask@gt3.com (FAQ Comments address)
  12. Organization: The World Public Access UNIX, Brookline, MA
  13. Followup-To: comp.lang.mumps
  14. Lines: 2208
  15. Xref: senator-bedfellow.mit.edu comp.lang.mumps:13596 sci.med.informatics:12475 comp.answers:38408 news.answers:170613 sci.answers:10818
  16.  
  17. Archive-name: m-technology-faq/part1
  18. Last-modified: 04/06/1999
  19. Version: 1.9
  20. Posting-Frequency: monthly
  21.  
  22. M Technology and MUMPS Language FAQ
  23.  
  24.  
  25. This FAQ is copyright 1997 by Gardner S. Trask III.  All rights reserved.
  26. Permission is granted for this FAQ to be redistributed provided:
  27.  
  28.     a) the redistribution is free, at no cost to the recipient;
  29.     b) the redistribution includes the complete FAQ, without modification,
  30.        including this notice;
  31.     c) this FAQ is current, as determined by any of the following: it is
  32.        less than 60 days old; or, it has been obtained directly from
  33.        newsgroup comp.lang.mumps; or, you have queried the editor.
  34.  
  35. Post comments or suggestions to comp.lang.mumps or email to 
  36. trask@world.std.com.
  37.  
  38. NOTE: This document contains URL's and addresses that were accurate at the 
  39. time of the original inclusion. URL's and e-mail addresses change
  40. however, and will (when notified) be reflected in Appendix 10.
  41. So, if you wish to reach a contributor, confirm addresses there.
  42.  
  43. Editors: Gardner Trask, trask@world.std.com
  44.          Jon Diamond, jdiamond@btinternet.com
  45.  
  46.  
  47. Questions that need answers:
  48.   
  49.    -- Hierarchical / Relational / Post-relational: Where does M fit?
  50.    -- Brief descriptions of specific, real-world, non-hospital applications;
  51.    -- More information on performance/speed/benchmarks
  52.    -- Concise descriptions or capsule commentaries on major M products,   
  53.       strengths/weaknesses, as seen by users (not vendors).
  54.    -- Should we include vendor white papers in the FAQ?
  55.    -- What do we do to add to the FAQ?
  56.    -- New Web Sites
  57.    -- Notable Mentions for Appendix 9
  58.    -- Anything about OMEGA
  59.    
  60.  
  61. Changes since 1.8: 01/12/98
  62.  
  63. -- Some e-mail changes in part II
  64. -- mondo typos.
  65. -- addition of new section 34 - M as a web scripting language.
  66.  
  67. Changes since version 1.7: 11/01/97
  68.  
  69. -- Addition of Brett Hunt's comments to question 1 and 11
  70. -- typos
  71. -- email changes in part II
  72.  
  73.  
  74. Sources/contributors/reviewers/participants:
  75.  
  76. Ben Bishop
  77. Jon Diamond 
  78. John D. Godfrey
  79. Gavin Greig
  80. Russell Haddleton
  81. Brett Hunt
  82. Scott P. Jones
  83. John E. Kemker, III
  84. Mark Komarinski
  85. Jeff Loeb
  86. Keith F. Lynch
  87. Ed de Moel
  88. Steve J. Morris
  89. Kevin O'Gorman
  90. Doug Preiser
  91. Aaron Seidman
  92. Kate Schell
  93. Tilman Schmidt
  94. Arthur B. Smith
  95. Daniel P. B. Smith
  96. Richard J. Tomlinson
  97. Gardner Trask
  98. David Whitten
  99.  
  100. Indirect Contributors: Those for whom postings and approved e-mail was included.
  101.  
  102. Ellis A. Bauman
  103. Dennis J Brevik
  104. Etienne Cherdlu
  105. Floyd Dennis
  106. Rod Dorman
  107. Lev Jacob
  108. Monika Kratzmann
  109. Paul Perrin 
  110.  
  111.  
  112.  
  113.  
  114. ------------------------------------------------------------------------
  115. Contents/Questions
  116.  
  117. [M FAQ - Part 1 of 2]
  118.  
  119. 1. What is M?
  120. 2. Where can I get a no-cost version of M?
  121. 3. What is comp.lang.mumps?  How can I subscribe to it?
  122. 4. What are some books about M?
  123. 5. What do M programmers love about M?
  124. 6. What things about M are generally disliked?
  125. 7. Why is M called a "database language?"
  126. 8. Is M an RDBMS?
  127. 9. Is M compiled or interpreted?
  128. 10. How fast is M?
  129. 11. Does M support Microsoft Windows and other GUIs?
  130. 12. Are there any M magazines or journals?
  131. 13. Which is the "official" name, M or MUMPS?
  132. 14. Is M a mainstream language?
  133. 15. Is M useful for non-medical applications?
  134. 16. Is M object-oriented?
  135. 17. Is M structured?
  136. 18. Is M suitable for multiuser systems?
  137. 19. Does M work on LANs?
  138. 20. Is M standard?
  139. 21. Is M portable?
  140. 22. How does M compare to SQL?
  141. 23. How does M compare to BASIC?
  142. 24. How does M compare to X-Base?
  143. 25. Are there M-based 4GLs and application generators?
  144. 26. Are there M bulletin boards? M FTP sites? M WEB sites? M Newsgroups?
  145. 27. "What happened in 1841?"
  146. 28. How do I list a global directory on this unfamiliar M system?
  147. 29. Do comments really affect efficiency?
  148. 30. What is the MDC?
  149. 31. A Brief History of M.
  150. 32. How exactly does $ORDER work?
  151. 33. M as a first computer language
  152. 34. M as a web scripting language.
  153.  
  154.  
  155. [M FAQ - Part 2 of 2]
  156. Appendix 1: List of M Vendors
  157. Appendix 2: The M Technology Association
  158. Appendix 3. USA Local M Users Groups
  159. Appendix 4: Is the official name of the language "M" or "MUMPS?"
  160. Appendix 5: A "secret decoder ring:" highlights of the M language
  161. Appendix 6: An example of "textbook" M coding style
  162. Appendix 7: An example of "traditional" M coding style
  163. Appendix 8: Mumps, A Solution Looking For A Problem, By Chris Richardson
  164. Appendix 9: Testimonials, Accolades, and Articles from outside the community.
  165. Appendix 10: Contact information: e-mail and URL's
  166. Appendix 11: FAQ Change history
  167.  
  168.  
  169.  
  170.  
  171. ------------------------------------------------------------------------
  172. 1. What is M?
  173.  
  174. M is a procedural, interpreted general-purpose programming language
  175. oriented towards database applications.  Its characteristic features
  176. are:
  177.  
  178. - untyped variables, converted automatically between numeric and
  179.   string;
  180.  
  181. - multi-dimensional associative arrays;
  182.  
  183. - persistent variables ("globals")
  184.  
  185. - good string handling capabilities: better than BASIC,
  186.   not as good as SNOBOL4 (e.g. no full regular expressions;)
  187.  
  188. - "indirection:" can use strings computed at runtime as part of
  189.   M program text;
  190.  
  191. - built-in multiuser/multitasking support.
  192.  
  193.      [Tilman Schmidt ed. DPBS]
  194.  
  195.  
  196. Though M historically was a character-based, closed environment (it
  197. seems to me that this phrase could apply to nearly every programming
  198. environment that is more than ten years old), this can no longer be said
  199. of more recent M implementations.  With the advent of ODBC, all
  200. competitive implementations of M can now be accessed from tools that are
  201. commonly available on PC workstations.
  202.  
  203. In addition, with the release of MSM-Workstation in 1996, by Micronetics
  204. Design Corporation, M is now fully OLE compliant.  Previously, MSM could
  205. be accessed as an OLE object via the MSM-API.  Now, M can also act as an
  206. OLE controller through MSM-Workstation.  The same product allows the
  207. developer to create M-based applications for MS Windows and MS Windows
  208. NT that can be distributed royalty free.  M-based applications can now
  209. be distributed as shareware.
  210.  
  211. The MSM suite of products from Micronetics continues to evolve with the
  212. technology.  In 1997, MSM-PDQ/Web was released, providing easy access to
  213. M-data via the Web.  Later the same year, access to MSM databases via
  214. Java was made available as well.
  215.  
  216. In sum, M is no longer a character-based, closed technology.  To the
  217. end-user, there is no visible distinction between an M-based
  218. application, and a non-M application.  M is a powerful, dynamic    
  219. technology which is now easily accessible to the most common workstation
  220. and server environments in use today.
  221.  
  222.     [Brett Hunt, Micronetics, October 29, 1997]
  223.  
  224. M has many good points: high productivity, low hardware requirements, good 
  225. scalability.  But M also has some weaknesses: low transaction reliability, 
  226. character-based screens, poor integration with other environments, and few 
  227. development tools. 
  228.  
  229.     [Thomas C. Salander, M Computing, June 1994, p.74]
  230.  
  231. M is a lousy language with one great data type.
  232.  
  233.     [Steve J. Morris]
  234.  
  235.  
  236.    
  237.                                      MUMPS
  238.                                        
  239.    
  240.    
  241.    (Or "M") Massachusetts General Hospital Utility Multi-Programming
  242.    System.
  243.    
  244.    A programming language with extensive tools for the support of
  245.    database management systems. MUMPS was originally used for medical
  246.    records and is now widely used where multiple users access the same
  247.    databases simultaneously, e.g. banks, stock exchanges, travel
  248.    agencies, hospitals.
  249.    
  250.    Early MUMPS implementations for PDP-11 and IBM PC were complete
  251.    operating systems, as well as programming languages, but current-day
  252.    implementations usually run under a normal host operating system.
  253.    
  254.    A MUMPS program hardly ever explicitly performs low-level operations
  255.    such as opening a file - there are programming constructs in the
  256.    language that will do so implicitly, and most MUMPS programmers are
  257.    not even aware of the operating system activity that MUMPS performs.
  258.    
  259.    Syntactically MUMPS has only one data-type: strings. Semantically, the
  260.    language has many data-types: Text strings, binary strings, floating
  261.    point values, integer values, Boolean values. Interpretation of
  262.    strings is done inside functions, or implicitly while applying
  263.    mathematical operators. Since many operations involve only moving data
  264.    from one location to another, it is faster to just move uninterpreted
  265.    strings. Of course, when a value is used multiple times in the context
  266.    of arithmetical operations, optimized implementations will typically
  267.    save the numerical value of the string.
  268.    
  269.    MUMPS was designed for portability. Currently, it is possible to share
  270.    the same MUMPS database between radically different architectures,
  271.    because all values are stored as text strings. The worst an
  272.    implementation may have to do is swap pairs of bytes. Such multi-CPU
  273.    databases are actually in use, some offices share databases between
  274.    VAX, DEC Alpha, SUN, IBM PC and HP workstations.
  275.    
  276.    Versions of MUMPS are available on practically all hardware, from the
  277.    smallest (IBM PC, Apple Macintosh, Acorn Archimedes), to the largest
  278.    mainframe. MSM (Micronetics Standard MUMPS) runs on IBM PC RT and
  279.    R6000; DSM (Digital Standard Mumps) on the PDP-11, VAX, DEC Alpha,
  280.    and Windows-NT; Datatree MUMPS from InterSystems runs on IBM PC; and
  281.    MGlobal MUMPS on the Macintosh. Multi-platform versions include
  282.    M/SQL, available from InterSystems, PFCS <mumps@pfcs.com> and MSM.
  283.    
  284.    Greystone Technologies' GT/M runs on VAX and DEC Alpha. This is a
  285.    compiler whereas the others are interpreters. GT/SQL is their SQL
  286.    pre-processor.
  287.    
  288.    ISO standard 11756 (1991). ANSI standard: "MUMPS Language Standard",
  289.    X11.1 (1977, 1984, 1990, 1995?).
  290.    
  291.    The MUMPS User's Group is known as the M Technology Association.
  292.    
  293.    Mailing list: MUMPS-L@UGA.BITNET.
  294.    
  295.    Usenet newsgroups: comp.lang.mumps, comp.std.mumps.
  296.    
  297.    (10 Jan 1995)
  298.    
  299.    [Submitted by: "Daniel P. B. Smith" Original Author unknown]
  300.  
  301.  
  302. ------------------------------------------------------------------------
  303. 2. Where can I get a no-cost version of M?
  304.  
  305. InterSystems DT-Student
  306.  
  307. MS-DOS implementation of M with capacity restrictions and a licensing 
  308. agreement prohibiting commercial use. Documentation is on-disk and includes 
  309. both an M language manual and a programmer's manual. Requests for copies 
  310. should be made in writing by mail or fax to Tommy Smith, InterSystems 
  311. Corporation, One Memorial Drive, Cambridge, MA 02042. Phone 617 621-0600, 
  312. Fax 617 494-1631. DT-Student can also be obtained via anonymous FTP from 
  313. /pub/dtstudent at openmsql.intersys.com; in URL format,
  314.  
  315.         ftp://openmsql.intersys.com//pub/dtstudent/
  316.  
  317. As of 8/94, it also appears to be available for downloading from the 
  318. InterSystems BBS +1 617-225-0475, the NEMUG BBS +1 508-921-6681, and the 
  319. MTA-NA BBS +1 301-942-5359.
  320.  
  321. [10/97] The ftp site listed for Intersystems DT-Student is no longer current.
  322.         openmsql.intersys.com site has moved to ftp.intersys.com, but
  323.         the student version seems not to be there.
  324.         [per email from epc2@juno.com]
  325.          
  326.  
  327.  
  328. Micronetics MSM-Explorer
  329.  
  330. Call the MTA-NA office (not Micronetics) at +1 301-431-4070 to order a 
  331. complimentary copy and to get information on other student versions. The 
  332. address for Micronetics Design Corporation itself is: 1375 Piccard Drive, 
  333. Rockville, MD 20850, 301-258-2605, fax +1 301-840-8943.
  334.  
  335. [10/97] Micronetics MSM-Explorer is available by anonymous ftp from
  336.         ftp.micronetics.com in /misc/MSM/Explorer in files:
  337.         EXP1.EXE, EXP2.EXE, LICENSE.MSM (needed beyond 10/31/97) and README.TXT.
  338.         (move files to c:\exp and unpack)
  339.         [per email from epc2@juno.com]
  340.  
  341.  
  342.  
  343. UCD MicroMUMPS
  344.  
  345. True public domain version. (8/94) Available for downloading from the NEMUG 
  346. BBS +1 508-921-6681, and the MTA-NA BBS +1 301-942-5359  Also available for 
  347. $xx from D-M Information Systems, 1403 Fifth Street, Box 1918, Davis, CA 
  348. 95617, +1 916-753-0362. There is no support. D-M describes the documentation 
  349. as consisting of two READ.ME files. According to the author, this is not a 
  350. full implementation of the current M, but is specifically intended for 
  351. novices and is easier to use than the versions derived from commercial 
  352. systems.  It is best used in conjunction with the book, "ABCs of MUMPS: An 
  353. Introduction for Novice and Intermediate Programmers," by Richard F. 
  354. Walters, Digital Press, 1989, ISBN 1-55558-017-3.  This book can be ordered 
  355. from MTA-NA (see below).
  356.  
  357. ------------------------------------------------------------------------
  358. 3. What is comp.lang.mumps?  How can I subscribe to it?
  359.  
  360. (11/94) comp.lang.mumps is a "USENET newsgroup." It was created in July, 
  361. 1994.  It is an unmoderated newsgroup; anyone can post messages to it and 
  362. anyone can read all the messages posted to it.  The newsgroup's charter is 
  363. given below.  The charter is what was voted on by the USENET community when 
  364. the group was created.  As with all unmoderated newsgroups, the health of 
  365. the newsgroup depends on goodwill, courtesy, and voluntary adherence to the 
  366. spirit of the charter.  
  367.  
  368. Since its inception, comp.lang.mumps has been a friendly newsgroup with a 
  369. comfortable volume, typically one to five messages per day.  Recent topics 
  370. have included: M coding standards/practices/conventions; rumors about 
  371. possible M vendor mergers; job postings; and inquiries about specific 
  372. problems with particular M implementations. 
  373.  
  374.     CHARTER of comp.lang.mumps
  375.  
  376.     The proposed unmoderated newsgroup comp.lang.mumps will be
  377.     open to discussions on almost all topics related to versions of
  378.     the M technology and the M language (also known as MUMPS).
  379.     Appropriate topics would include, but not be limited to,
  380.  
  381.         advocacy
  382.         bindings to GUI platforms (M Windowing API)
  383.         discussions of commercial products
  384.         object-oriented extensions
  385.         PC networking issues
  386.         programming techniques
  387.         tools
  388.  
  389.            etc.
  390.  
  391.     The only topic that is excluded is:
  392.  
  393.         discussion of the standard for the M (MUMPS) language, ANSI X11.1
  394.         which should be discussed in the existing group comp.std.mumps.
  395.  
  396. Subsequent custom has established that informal discussions of standards-
  397. related issues are very welcome in this newsgroup.  MDC members have 
  398. suggested that they welcome informal discussions be conducted in 
  399. comp.lang.mumps, while formal proposals should be posted to comp.std.mumps.  
  400. It is also clear that the membership welcomes job postings and job 
  401. information.
  402.  
  403. SUBSCRIBING TO COMP.LANG.MUMPS
  404.  
  405. There are different kinds of Internet access.  One common situation is a 
  406. company that "has Internet access" via their internal e-mail system.  Such 
  407. arrangements often are e-mail only; if so, you must use the "MUMPS-L 
  408. gateway" access method described below.  Other sites have direct access to 
  409. the USENET newsgroups.  This is common for academic and government sites, 
  410. and commercial services. Find out whether your site has direct access to the 
  411. newsgroups. If you have it, this is the best way to read and post to 
  412. comp.lang.mumps.  
  413.  
  414. If you are on a typical UNIX host at an academic or government institution, 
  415. one way to check is to type the names of the most popular "newsreaders" -- 
  416. rn, trn, tin, and nn -- at the command prompt and see if any of them are 
  417. installed.  If not, you probably do not have USENET access and should use 
  418. the MUMPS-L gateway.  If you find that a newsreader is installed, consult an 
  419. Internet-savvy colleague, system administrator or help desk for more 
  420. information.
  421.  
  422. (11/94) Most of the commercial services, including America On-Line, 
  423. CompuServe, DELPHI, and Prodigy now offer direct newsgroup access.  Details 
  424. for CompuServe are noted below.
  425.  
  426. THE MUMPS-L GATEWAY
  427.  
  428. (8/94) Anybody with Internet E-mail can participate in comp.lang.mumps by 
  429. making use of a gateway and mailing list provided by American University and 
  430. BITNET.  Out of courtesy to the host organization, please use this method 
  431. only if you cannot get access to comp.lang.mumps in any other way.
  432.  
  433. For those who CANNOT get comp.lang.mumps in ANY other way:
  434.  
  435. To receive MUMPS-L and comp.lang.mumps:
  436.  
  437. Send an e-mail message To: LISTSERV@uga.cc.uga.edu
  438. The subject line doesn't matter.
  439. The message text should consist of the single line: SUBSCRIBE MUMPS-L
  440.  
  441. Within a short time, you'll get an automated acknowledgement from
  442. the list server confirming your subscription and giving other
  443. information, and you'll start getting the comp.lang.mumps and MUMPS-L
  444. posts.
  445.  
  446. To post a message to MUMPS-L and comp.lang.mumps:
  447. Send an e-mail message To: MUMPS-L@uga.cc.uga.edu
  448.  
  449. IMPORTANT: NOTICE THE DIFFERENCE IN THE ADDRESSES.  To start and stop
  450. subscriptions, you address the request to LISTSERV.
  451.  
  452. Thanks to:
  453.    American University, for hosting and operating the gateway;
  454.    Jim McIntosh, jim@american.edu, for administering it;
  455.    Harold Pritchett, harold@UGA.CC.UGA.EDU, owner and administrator
  456.          of the MUMPS-L list;
  457.    and the BITNET organization generally.
  458.  
  459. COMPUSERVE
  460.  
  461. (1/95) Some users have advised making sure that you understand CompuServe's 
  462. rates, terms, and conditions before using CompuServe to access 
  463. comp.lang.mumps, as the charges may be higher than anticipated.  As of 
  464. 11/28/94, according to a CompuServe representative (Julie Borders), 
  465. Newsgroup access is an "extended service" charged by the hour at the same 
  466. rate as other extended services.  "To send Internet e-mail it is 
  467. $.15 for the first 7500 characters and $.05 for each additional 2500 
  468. characters.  It is the same rate to receive Internet e-mail." -- [DPBS]
  469.  
  470. (11/94) CompuServe now offers direct newsreader access to the Usenet 
  471. newsgroups.  CompuServe subscribers may already using the MUMPS-L gateway, 
  472. as described above.  If you are doing this now and are satisfied with this 
  473. system, there's no need to change.
  474.  
  475. Here are the steps I took to read comp.lang.mumps on CIS.  Depending on 
  476. exactly how you're set up (for example, whether you're using CIM), the 
  477. details may be different for you, but everything should be clear once you GO 
  478. USENET.
  479.  
  480. For me: the steps were
  481.     I typed "GO USENET"
  482.     I chose #6, "USENET Newsreader"
  483.     I read some pages of warnings, disclaimers, and advice
  484.     I chose #3, "Subscribe to newsgroups"
  485.     I chose #1, "Subscribe to one known newsgroup"
  486.     I typed "comp.lang.mumps" in response to the prompt "Newsgroup name"
  487.     I typed "m" to return to the previous menu
  488.     I chose #1, "Access your USENET newsgroups."
  489.     It listed "comp.lang.mumps (18 articles) " as the only newsgroup 
  490.       I'm subscribed to, then offered choices.
  491.     I chose #3, "Read articles"
  492.  
  493.   --[DPBS]
  494.  
  495.   
  496.  
  497. ------------------------------------------------------------------------
  498.  
  499. 4. What are some books about M?
  500.  
  501.  
  502. A review of Richard F. Walters' new book, "M Programming:
  503. A Comprehensive Guide" (Digital Press, ISBN 1-55558-167-6) to
  504. http://www.amazon.com:
  505.  
  506.    The book I've been waiting for. 
  507.  
  508.    M is a delightful applications language. Recently I've been struggling
  509.    with C++ STL, trying to use the "map" container to get perhaps a tenth
  510.    of the functionality you get from an ordinary M variable, and, believe
  511.    me, I miss M.
  512.    
  513.    This is the M book we've all been waiting for, and it delivers exactly
  514.    what it promises. It is, as the blurb says, "the only source M
  515.    programmers at all levels need."
  516.    
  517.    The style and presentation reminds me a little of Stoustrup's book on
  518.    C++: the organization and style are tutorial, but not elementary. It
  519.    is up-to-date with the current standard.
  520.    
  521.    What I particularly admire about it, and what is all too rare in
  522.    computer books (especially those written by professors of computer
  523.    science) is that it displays an intelligent awareness of real-world
  524.    commercial implementations of M. Too many books either describe a
  525.    pure-standards abstraction on the one hand, or a specific vendor
  526.    extension on the other. Walters identifies popular M implementations
  527.    by name and calls attention to variations where appropriate. Like M
  528.    itself, Walters' book is directed at real programmers trying to solve
  529.    real problems in the real world.
  530.    
  531.    There are a few places where one can see that the book is an
  532.    (extensive) rewrite of his older book, rather than a completely new
  533.    work. I thought it was harder to locate the "argumentless DO" than it
  534.    should have been, and I felt there should have been a coherent
  535.    discussion in one place explaining the (historically weird) relations
  536.    between the various forms of DO, and when $T is and isn't stacked.
  537.    Similarly, it is disconcerting to see on page 199 that the "NEW"
  538.    command is described as a "recent extension... not yet formally
  539.    included in the standard." These are cosmetic problems that do not
  540.    seriously mar the book I've been waiting for.
  541.    
  542.    [Daniel P. B. Smith]
  543.  
  544.  
  545.  
  546. The following books can be ordered from any M Technology Association.  
  547. Contact them for prices.  In the USA, contact: M Technology Association, 
  548. 1738 Elton Road, Suite 205, Silver Spring, MD 20903. Telephone +1-301-431-
  549. 4070. 
  550.  
  551.  
  552.  
  553. MUMPS POCKET GUIDE - 1990 by Joel Achtenberg, revised by Thomas C. Salander  
  554. (MTA item #2018)
  555.  
  556. A COOKBOOK OF MUMPS by David B. Brown & Donald H. Glaeser, D.Sc.(MTA item 
  557. #2024)
  558.  
  559. Introductions and Tutorials:
  560.  
  561. M Programming: A Comprehensive Guide
  562.  
  563.  M Programming: A Comprehensive Guide is a complete update to ABC's of MUMPS
  564.  
  565.  While ABC's of MUMPS was an introduction for novice and intermediate M programmers, M Programming: A Comprehensive Guide, has a new section containing advanced material. This new section addresses features such as transaction   processing, networking, st
  566. ructured system variables, and interfaces to other standards. Five new chapters have been added, covering an overview of M for readers familiar with other languages; M and the Windows environment; interaction between M and the underlying system; transacti
  567. on processing; interfacing M with other standards; and error handling. Sections on interactive programming and futures have been extensively updated. M Programming: A Comprehensive Guide is an invaluable resource for everyone who is learning or using M.
  568.  
  569.  
  570. M[UMPS] by Example
  571.  
  572.  Need to know how M can be used? Need lots of examples to show you how? M[UMPS] by Example is your answer!! This book can be used as a first step to explain the language elements, including the most current additions. Here you'll find out how to use the l
  573. anguage and take advantage of its strong points. You will also be shown the spectrum of M -- from the very beginnings to the latest -- as well as developments that are currently being formulated. Created by Ed de Moel, past Chair of the MUMPS Development 
  574. Committee (MDC), this book is up-to-date Information.
  575.  
  576.  
  577. ABC's of MUMPS
  578.  
  579.  This book is no longer available.
  580.  See the new title, M Programming: A Comprehensive Guide to order.
  581.  
  582. The Complete MUMPS
  583.  
  584.  This excellent book is both a learning tool and a reference manual. It explores the basics of M's unique file structure, using examples and exercises to demonstrate specific functions. The well organized appendices and index provide rapid access to speci
  585. fic information needed to develop complex applications. The text includes functions of the 1990 standard.
  586.  
  587. Introduction to Standard MUMPS
  588.  
  589.  Subtitled: A Guide for the Novice, this work introduces beginning programmers to key aspects to M as a programming language and an operating system. Each chapter leads users through a series of exercises and follows with review questions based on the new
  590.  material. Appendices include additional review questions and solutions to each chapter's mini-tutorials. This is an important starter' volume for anyone interested in the M language.
  591.  
  592. The MUMPS Handbook of Efficiency Techniques
  593.  
  594.  This handbook contains 125 ways to make M applications run faster, based on actual case studies of M installations over an 11 year period. Plus, this book contains code for a software package called ANALYZER that determines which M code is slowing down t
  595. he programs within an application. If you need to finetune an existing application or create a new one, this book's for you!
  596.  
  597. Standard M Pocket Guide
  598.  
  599.  This is the must have pocket reference for any M programmer! Use this pocket-sized booklet covering the 1995 standard for a quick reference, or use it to refresh your understanding of the elements of the language. It's a practical guide for beginning and
  600.  experienced programmers alike. And inexpensive enough to afford a copy for everyone!
  601.  
  602. M Programming Language Standard ANSI/MDC X11.1-1995
  603.  
  604.  This 1995 reference work contains a three section description of various aspects of the M computer programming language. Section 1, the M Language Specification, consists of a stylized English narrative of the M language. Section 2, the M Portability Req
  605. uirements, identifies constraints on the implementation and use of the language for the benefit of parties interested in achieving M portability. Section 3 is a binding to ANSI X3.64 (Terminal Device Control Mnemonics).
  606.  
  607. How To Make A Computer Work For You -- An Introduction to the File Manager System
  608.  
  609.  Learn how to computerize your own information management needs with the power of VA FileMan. This introductory volume is especially well-suited for non-programmers who can learn how to design, edit, and retrieve database information. It's the perfect sup
  610. plement to your VA FileMan documentation!
  611.  
  612. FileMan Database Management -- System User's Technical Manual
  613.  
  614.  Discover the uses and features that make VA FileMan today's database management system of choice. You'll learn the basics and advanced concepts about data input and retrieval options, database setup, programmer tools, and the data dictionary.
  615.  
  616. FileMan: Database Manager User Manual Volume II
  617.  
  618.  The VA FileMan manual introduces two different groups of people to the VA FileMan database manager: those with newly acquired interest in learning about advanced database managers; and experienced database managers. Volume II covers advanced database the
  619. ory and practice to provide a comprehensive reference for the non-programmer user of VA FileMan.
  620.  
  621.  MDC2
  622.  
  623.   MDC Type A Document Collection: Extensions to ANSI/MDC X11.1-1995
  624.   Aren't you wondering how the NEXT ANSI Standard will be different from the 1995 Standard? Well, the answer is Now Available. The documents in this collection are approved by the MDC as proposed enhancements and extensions to the current ANSI Standard, A
  625. NSI/MDC X11.1-1995 M Programming Language. They are part of the current MDC Standard. Also included in this collection are the documents that are approved by the MDC as proposed enhancements and extensions to the current ANSI Standards, ANSI/MDC X11.2-199
  626. 5 Open MUMPS Interconnect and ANSI/MDC X11.6-1994 M Windowing API. They are all part of the current MDC Standards.
  627.  
  628. ------------------------------------------------------------------------
  629.  
  630. 5. What do M programmers love about M?
  631.  
  632. High productivity, low hardware requirements, good scalability.
  633.      
  634.      [Thomas C. Salander in M Computing, June 1994, p.74]
  635.  
  636. I still program with other languages (Pascal, C, APL, LISP, and so on), but 
  637. almost always find myself saying, 'but it's so much easier in MUMPS!' ... 
  638. it's just plain quicker to implement most applications MUMPS.  MUMPS is a 
  639. powerful computing language designed to solve real-world problems.
  640.  
  641.      [John Lewkowicz, The Complete MUMPS, p. xii]
  642.  
  643. When I was first at the VA, Greg here gave me a 1 page batch of M code and 
  644. asked if I could do it any faster in C.  Two weeks, a lot of aspirin, and 
  645. two compilers later, I had 'barely' working code (it would only run *once*).
  646.  
  647.      [Mark Komarinski]
  648.  
  649. M is powerful and succinct.  It's excellent for general hacking.  If I 
  650. suddenly get a hankering for the first thousand digits of pi, or for all the 
  651. order 4 magic squares, or for a table of word frequencies in a document, I 
  652. don't know of any language I can accomplish this in faster.
  653.  
  654.      [Keith F. Lynch]
  655.  
  656. f p=2,3:2 s q=1 x "f f=3:2 q:f*f>p!'q  s q=p#f" w:q p,?$x\8+1*8
  657.   
  658.      [part of Keith Lynch's .signature; it prints a table of primes,        
  659.       including code to format it neatly into columns--DPBS]
  660.  
  661. I really like the way that the global tree is "just there" without any
  662. file opening, record declarations, and the like.
  663.  
  664.      [Kevin O'Gorman]
  665.  
  666. Indirection.  Execute strings.  String subscripts.  Enormously valuable.
  667. No other language has all of them.
  668.  
  669.      [Ricardo Garcia]
  670.  
  671. I haven't touched MUMPS since the late 70's.  I`ve been missing globals ever 
  672. since. While I was using MUMPS I implemented a simple programming tool 
  673. couple of pages of MUMPS code. I've missed that tool ever since, as well as 
  674. how easy it was to implement. 
  675.  
  676.      [Steve J. Morris]
  677.  
  678.  
  679. ------------------------------------------------------------------------
  680.  
  681. 6. What things about M are generally disliked?
  682.   
  683. Low transaction reliability, character-based screens, poor integration with 
  684. other environments, and few development tools.
  685.  
  686.      [Thomas C. Salander in M Computing, June 1994, p.74]
  687.  
  688.  
  689. Are all vendors utilities crap?  Having worked with DTM, DSM, MSM it seems 
  690. lots of effort went into the M and no thought went into the programmer 
  691. utilities. 
  692.  
  693.      [Richard J. Tomlinson]
  694.  
  695. When I look back on my Fortran code from school I am a little embarrassed 
  696. but I understand it. When I look back on my MUMPS I can't even read it 
  697. without slow token by token translation. It's amazing to me how fluent I was 
  698. when I wrote it and how fluent I'm not when I read it.  
  699.  
  700.      [Steve J. Morris] 
  701.  
  702. It's possible to write completely obfuscated MUMPS code, and too many MUMPS 
  703. programmers do it.  Some even brag about nobody else being able to read 
  704. their code.  Fortunately for those of us in the VA who have to maintain that 
  705. code, they are becoming a minority.  
  706.  
  707.     [John E. Kemker, III]
  708.  
  709. ------------------------------------------------------------------------
  710.  
  711. 7. Why is M called a "database language?" 
  712.  
  713. M is a programming language with a strong emphasis on text
  714. handling and database management. However, M is NOT a data base
  715. management system. The disadvantage of being a programming language is that 
  716. it takes more expertise to apply the language to create a working data base,
  717. but the advantage of not being a dedicated database management system
  718. is that it is infinitely more flexible.
  719.  
  720.     [Ed de Moel]
  721.  
  722. ------------------------------------------------------------------------
  723. 8. Is M an RDBMS?
  724.  
  725. The so-called DBMS component of M is another name for the feature of
  726. persistent associative array variables, i.e. arrays that can be
  727. indexed by strings, on an arbitrary number of levels, and that survive
  728. the termination of the program, being transparently stored on a
  729. permanent medium (hard disk).
  730.  
  731. This feature is comparable to what ISAM (Indexed Sequential Access
  732. Method) packages offer for other languages, but it is more powerful 
  733. than ISAM and it is seamlessly integrated into the language.  It is 
  734. *not* a relational database system, although it can serve as a basis
  735. for implementing one and does so in several commercial products. 
  736.  
  737.      [Tilman Schmidt]
  738.  
  739. Databases that have a lot of many-to-many relations, and/or a lot of sparse 
  740. information (fields that are more often empty than filled in) do not fit the 
  741. relational model well. While a relational database can represent this data, 
  742. it does it with great complexity or inefficiency.  
  743.  
  744. The sparse hierarchical array structure assumed by M is a much more 
  745. natural fit for this type of data.  
  746.  
  747.     [Arthur B. Smith]
  748.  
  749.  
  750. The M standards suite includes a standard for embedded SQL, and embedded SQL 
  751. is provided in commercial products such as InterSystems' M/SQL and KBase's 
  752. KB/SQL.
  753.  
  754.     [David Whitten]
  755.  
  756. Initial development of the "relational model" of databases appeared to place 
  757. MUMPS at a disadvantage, but recent advances in so-called non-first-normal 
  758. form, a reference to hierarchical structures characteristic of MUMPS, open the 
  759. door for MUMPS to take a leadership role in current research in that field.
  760.  
  761.     [Richard F. Walters, "The ABCs of MUMPS"]
  762.  
  763. ------------------------------------------------------------------------
  764. 9. Is M compiled or interpreted?
  765.  
  766. M was designed to be interpreted.  Real compilation of an M program
  767. into a machine program for the target machine is not feasible due to
  768. the following of M's features:
  769.  
  770. - The XECUTE verb allows execution of a runtime string value as an M
  771.   program, and indirection allows substitution of runtime string
  772.   values into the executed source code.  Therefore a complete M
  773.   interpreter must be present at runtime, anyway.
  774.  
  775. - Indirection allows variable names and labels to be taken from string
  776.   variables, so all names of variables and labels in the source text
  777.   must be available at runtime, i.e. stored within the compiled
  778.   program.
  779.  
  780. - The $TEXT function allows access to the program source text at
  781.   runtime, so in principle the whole source must be kept together with
  782.   the compiled program.
  783.  
  784. In practice, most M interpreters precompiled programs into an
  785. intermediate, binary form that is more compact to store, and more
  786. efficient to execute.  The requirement of keeping the source text
  787. around is relaxed by conventions limiting the use of $TEXT to comment
  788. lines, or to comments starting with two semicolons, and M interpreters
  789. often offer the option of keeping just these parts of the source
  790. (which of course breaks programs not respecting the convention).
  791.  
  792.      [Tilman Schmidt]
  793.  
  794. Greystone has a product that compiles to .EXE files that are comparable
  795. in size to C source .Exe.
  796.  
  797.      [David Whitten]
  798.  
  799. Most of the versions of MUMPS these days are pre-compilers; a
  800. tokenized version of the routine is actually stored separately and
  801. usually runs faster.
  802.  
  803.      [Ben Bishop]
  804.  
  805. The reasons to use a pseudo-code approach instead of trying to generate 
  806. machine code has a lot to do with memory efficiency - M has a well deserved 
  807. reputation for requiring very little in the way of hardware resources, such 
  808. as RAM.  It also has a lot to do with what people do in M.  If you do 
  809. profiles on M applications, you find that much of the time they are doing 
  810. things that wouldn't be helped by trying to compile to assembly code anyway 
  811. (they are accessing globals, doing I/O, etc.).   Also,  with a good C 
  812. implementation of M, I can port to a new Unix platform in a day or so (and 
  813. then take a few weeks more if we want to assembly optimize the most commonly 
  814. executed simple tokens - which I have done for most of the current 
  815. architectures (Intel, Alpha, Mips, RS/6000-PowerPC, Motorola 68K, Motorola 
  816. 88K, and Sparc).  That would not be possible with an implementation that 
  817. actually compiled to machine code. (Look at the delays of moving VC++ 2.0 to 
  818. non-Intel architectures).  Finally, with pseudo-code (we call ours m-code), 
  819. you can share a compiled routine across all platforms (as we do with our 
  820. M/SQL code).
  821.  
  822.      [Scott P. Jones]
  823.  
  824. ------------------------------------------------------------------------
  825. 10. How fast is M?
  826.  
  827.  
  828. One company developing heavily in MUMPS ran tests to determine performance
  829. characteristics of MUMPS vs. Oracle.  MUMPS ran approximately six times
  830. faster.  Digital's DSM (Digital Standard MUMPS) consistently sets benchmark
  831. records for transaction processing.
  832.  
  833.      [John E. Kemker, III]
  834.  
  835. In benchmarking MUMPS and alternatives such as RPG, BASIC, COBOL and 
  836. FORTRAN, Casimiro Alonso reports that "A user choosing MUMPS for interactive 
  837. data base applications can expect up to five times more power from a given 
  838. computer" and that "the applications development took about one-third the 
  839. amount of time forecast for the use of other languages...." with the MUMPS 
  840. database occupying "only one-half to one-quarter of the disk space required 
  841. by others.
  842.  
  843.      [C. Alonso, A Case for MUMPS, Computerworld, January 9, 1984, as
  844.      cited by William J. Harvey and Frederick G. Kohun in the article,
  845.      "MUMPS," from Encyclopedia of Microcomputers, 1993.] 
  846.  
  847. Very rough tests suggest that DTM is about twice as fast as Visual BASIC's 
  848. implementation of the BASIC language.  These tests involve simple code, 
  849. coded similarly in each language, that exercise fundamental operations that 
  850. are common to, and natural in, both languages (FOR loops involving 
  851. arithmetic and fundamental string operations).  On a 33MHz 386DX, Visual 
  852. BASIC runs at very roughly 1000-2000 commands/second, DTM about twice that.  
  853. Double that for a 486 DX2, quadruple that for a Pentium.
  854.  
  855.      [DPBS]   
  856.  
  857. ------------------------------------------------------------------------
  858. 11. Does M support Microsoft Windows and other GUI's?
  859.  
  860. A 1994 addition to the M standard, the M Windowing API (MWAPI), defines an 
  861. interface between the M language and windowing systems.
  862.  
  863. InterSystems and Micronetics offer versions of M that implement the MWAPI in 
  864. a Microsoft Windows environment. Digital has an implementation [is it 
  865. commercially released? Details?] for Windows NT. 
  866.  
  867. The M Windowing API and its commercial implementations are relatively new 
  868. and have rough edges. The MWAPI has the advantage of portability and 
  869. platform-independence, but has some limitations associated with the "least-
  870. common-denominator" approach.
  871.  
  872. A unique feature of the MWAPI is that this "API" does not consist of 
  873. subroutine calls (except for a few incidental functions). MWAPI programming 
  874. consists mainly of performing sets and kills into a "structured system 
  875. variable," which looks like a standard M global. For example, to set the 
  876. title of a window to "M Technology Demonstration," you write
  877.  
  878.      s ^$WINDOW("main","TITLE")="M Technology Demonstration"
  879.  
  880. To make its dimensions 300 by 200, you write
  881.  
  882.      s ^$WINDOW("main","SIZE")="300,200"
  883.  
  884. The MWAPI is currently offered for Microsoft Windows by InterSystems and 
  885. Micronetics, and for Windows NT by Digital Equipment Corporation.  It is 
  886. often presented as the windowing future for M technology.
  887.  
  888. VISUAL-BASIC-LIKE APPROACHES
  889.  
  890. InterSystems' "Visual M" is a set of tools which link M with Microsoft 
  891. Visual Basic, creating an integrated dual-language environment. M code can 
  892. be accessed and edited from within the VB design environment, can access VB 
  893. control properties, and can be triggered by VB events.  
  894.  
  895. Micronetics' MSM-Workstation product provides a Visual-Basic-like
  896. environment "WRITE-SLASH" APPROACHES entirely based on M and the MWAPI.
  897.  
  898. InterSystems' "DT-Windows," MGlobal's MGM-PC (for MS-Windows) and MGM-Mac 
  899. (for the Macintosh) use a feature of the M standard that allows the language 
  900. to be extended for device-specific purposes by means of the "write-slash" 
  901. syntax.  In DT-Windows and MGM, the windowing system is treated as a 
  902. "device" with an unusually rich repertoire of device-specific commands.  
  903. Although DT-Windows and MGM are conceptually similar, they are incompatible 
  904. with each other.  They are ad-hoc language extensions.  Neither seems to 
  905. have set a de facto standard.  Why do these products (DT-Windows and MGM) 
  906. provide a nonstandard approach?  The answer, in part, is that they were 
  907. introduced prior to the finalization of the MWAPI standard.  Why do they 
  908. still exist?  Because they are closer to their underlying windowing platform 
  909. than the MWAPI, they arguably provide better performance and broader access 
  910. to the GUI system's functionality.  
  911.  
  912. Examples from the DT-Windows manual and MGM product literature, 
  913. respectively, show how an "OK" button is added to a dialog box:
  914.  
  915.     DT-Windows
  916.         w /waddbutton(2,65,40,10,20,1,1,1,0,0,0,"OK",1)
  917.  
  918.     MGM
  919.         W /DBUTTON("OK",2,9) 
  920.  
  921. ------------------------------------------------------------------------
  922. 12. Are there any M magazines or journals?
  923.  
  924. The M Technology Association publishes "M Computing," a technical journal.  
  925. Members receive it free.  See Appendix 2.  
  926.  
  927. MTA-Europe publishes "M Professional" a news/technical journal in English 3 
  928. times a year. MTA-Europe members receive it free. Non-members can order a 
  929. subscription.
  930.  
  931. Other MTAs also produce newsletters, mostly in local languages. Contact them 
  932. directly for more information.
  933.  
  934. ------------------------------------------------------------------------
  935.  
  936. 13. Which is the "official" name, M or MUMPS?
  937.  
  938. This topic seems to be the M community's very own little religious war.  The 
  939. following represents the editor's opinion.  Other views, including one from 
  940. a member of the MUMPS Development Committee, are represented in Appendix 4.
  941.  
  942. M and MUMPS are alternate names for the same language.
  943.  
  944. M, the newer name, is now very widely accepted in the M community. The name 
  945. change was introduced to address long-standing problems with the name MUMPS.  
  946. The name MUMPS gave many the impression that the language was specifically 
  947. for hospitals and health care applications.  Many also felt it was 
  948. undignified.  
  949.  
  950. M/MUMPS has evolved rapidly, with new ANSI standards being successfully 
  951. issued in 1977, 1984, 1990, and a new standard now in canvass, which will 
  952. probably issue in 1995. It is not the same language that it was in 1967.   
  953.  
  954.  
  955.     [DPBS]    
  956.  
  957. ------------------------------------------------------------------------
  958. 14. Is M a mainstream language?
  959.  
  960. 1991 worldwide revenue in the M marketplace was estimated at $1 billion, 
  961. projected to grow to $2 billion by 1996.
  962.  
  963. Approximately 2,000 individuals/organizations belong to M Technology 
  964. Association-North America, with approximately another 1,000 belonging to 
  965. other MTAs. 
  966.  
  967. Versions of the M language are available from twelve vendors on every 
  968. significant hardware platform. Some versions provide direct support for non-
  969. English languages, for example German, Russian, Japanese.
  970.  
  971. But: "The national meeting of the MTA draws fewer attendees than the 
  972. northeast regional meeting of the SAS Users' Group." [Thomas C. Salander, M 
  973. Computing, June 1994, p. 72].
  974.  
  975. ------------------------------------------------------------------------
  976. 15. Is M useful for non-medical applications?
  977.   
  978. Although it originated in a medical environment, nothing in the
  979. language is specific to medical applications.  Non-medical
  980. applications can be, and have been, implemented successfully in M.
  981.  
  982. The Gartner Group report, "1992 MUMPS Assessment and Opportunity," notes: 
  983. "[M-based trust software from NCS] is used by several of the top 200 U.S. 
  984. banks to control more than 375 accounts totaling $600 billion in trust 
  985. assets.  Lloyds of London, Barclays, and Bank of Bermuda ... use M 
  986. systems... M moved into communication, shipping and transportation, law 
  987. enforcement and other areas in the 1970s and 1980s.  The Veteran's 
  988. Administration, Discovery Channel, Coca-Cola and Schweppes, Ltd. Star 
  989. Shipping, and the Law School Admission Service are among the M users."
  990.  
  991. A recent M Technology Association press release describes how M Systems
  992. Plus won a contract with American Express's Travel Related Service Division 
  993. (AMEX) in Atlanta contract to convert 2,000 cruise bookings acquired from a 
  994. West Coast firm.  It is said that the M System was designed and developed 
  995. within two and a half weeks, and was up and running on schedule, processing 
  996. over 500 telephone booking inquiries the first day.  It has since been 
  997. expanded to include brochure fulfillment, customer service, word processing, 
  998. questionnaires that gauge customer reaction, and agent telephone activity 
  999. tracking.
  1000.  
  1001.     [DPBS]
  1002.  
  1003.  
  1004. ------------------------------------------------------------------------
  1005. 16. Is M object-oriented?
  1006.  
  1007. No. A working group within MDC (the MUMPS development committee) is, 
  1008. however, actively considering object-oriented extensions.  
  1009.  
  1010. One vendor, ESI is marketing a development system, ESIObjects, that allows 
  1011. fully object-oriented programming in M. ESI, 5 Commonwealth Road, Natick, MA 
  1012. 01760, +1-508-651-1400, FAX +1-508-651-0708
  1013.  
  1014.      [DPBS]
  1015.  
  1016. However, M has many of the characteristics of newer OO languages. For 
  1017. example: dynamic memory usage, late-binding, encapsulation possibilities.
  1018.  
  1019.      [Jon Diamond]
  1020.      
  1021.  
  1022. ------------------------------------------------------------------------
  1023. 17. Is M structured?
  1024.  
  1025. Yes, no, maybe, sort of.  M syntax is not for purists or academicians. 
  1026.  
  1027. If you want to code in a structured style:
  1028.  
  1029.     -- you may not love M's syntax, but you can live with it;  
  1030.     -- the necessary features are there;
  1031.     -- they do, however, have an "add-on" or "makeshift" flavor.
  1032.  
  1033. M does not enforce a structured style.  And because the features that 
  1034. support structured programming were absent from the MUMPS of the early 
  1035. eighties, there is a substantial body of unstructured legacy code still in 
  1036. use, and a substantial number of M programmers comfortable with what might 
  1037. be called the "traditional" coding style.
  1038.  
  1039. The M "ELSE" statement is a simple executable statement.  It is not 
  1040. syntactically paired with an IF.  The semantics are, approximately: a 
  1041. special system value, $TEST, is reminiscent of the "condition bits" in some 
  1042. processor.  An IF statement sets the value of $TEST according to whether the 
  1043. condition was true or false.  An ELSE statement is equivalent to IF '$TEST 
  1044. (the apostrophe is the "not" operator).  Unfortunately, the traditional 
  1045. MUMPS subroutine does not push and pop the state of $TEST.  Thus,
  1046.  
  1047.      If a>b Write !,"a is greater."
  1048.      Else  Write !,"b is greater."
  1049.  
  1050. performs as expected, but 
  1051.  
  1052.      If a>b Do REPORT1
  1053.      Else  Do REPORT2
  1054.  
  1055. may not, particularly if the REPORT1 subroutine itself contains If 
  1056. statements of its own.
  1057.  
  1058. This problem is solved by a feature called the "argumentless Do." Actually 
  1059. the argumently Do plays three separate roles in M programming:  
  1060.  
  1061.    -- It can do the job performed by continuation lines in other languages;
  1062.    -- It provides a mechanism for multiline IF's and FOR's; 
  1063.    -- because an argumentless Do, unlike a standard Do (!), does stack 
  1064.       and pop the value of $TEST, it can be used to write structures that 
  1065.       look and act like nested IF-THEN-ELSE statements in other languages.
  1066.  
  1067.     If condition1 Do
  1068.     . If condition2 Do
  1069.     . . <code> ;executes if condition1 and 2 are both true
  1070.     . . <code>
  1071.     . . <code>
  1072.     . Else  Do
  1073.     . . <code> ;executes if condition1 is true but not condition2
  1074.     . . <code>
  1075.     . . <code>
  1076.     Else  Do
  1077.     . <code> ;executes if condition1 is false
  1078.     . <code>
  1079.     . <code>
  1080.  
  1081.  
  1082.      [DPBS]
  1083.  
  1084. Is MUMPS structured? I think it is.  We haven't outlawed the GOTO true, but 
  1085. we have named subroutines, controlled loops (while loop is the same as 
  1086. argumentless FOR with a QUIT), iterated loops (FOR), Parameter Passing to 
  1087. subroutines, functions with return values... We also have line scoping on 
  1088. IFs, ELSEs and FORs. What else do you need to be structured?
  1089.  
  1090.      [David Whitten]
  1091.  
  1092. What about declaration of variables? What about scope of variables aside 
  1093. from line scope?
  1094.  
  1095. I'm not convinced that the "while" exactly counts as a feature of MUMPS - in 
  1096. fact, an argumentless FOR with a QUIT is a "repeat...until", for a "while" 
  1097. you would need to perform an initial IF. Do such composite statements really 
  1098. count as proper controlled loops?
  1099.  
  1100. Even if MUMPS is technically structured, it goes (IMHO) against the spirit 
  1101. of structured programming with commands reduced to a single letter whenever 
  1102. possible, short variable names encouraged, and no white space. The 
  1103. significance of the space character (in argumentless commands) is completely 
  1104. counter intuitive. 
  1105.  
  1106. I can't say that technically you're not correct in mentioning the above 
  1107. features but one of the primary aims of structured programming is to make 
  1108. support of existing code easier. In my experience, MUMPS encourages hacking 
  1109. and badly designed code.
  1110.  
  1111.     [Gavin Greig]
  1112.  
  1113. ------------------------------------------------------------------------
  1114. 18. Is M suitable for multiuser systems?
  1115.  
  1116. Yes.  An important feature of the M language is that the standard language 
  1117. core includes multiuser and multitasking features.  These facilitate writing 
  1118. portable distributed-processing applications.
  1119.  
  1120. A "JOB" command allows one process to initiate other, independent processes.  
  1121. Processes can arbitrate access to resources with each other via a "LOCK" 
  1122. command.  
  1123.  
  1124. There is no specific formal interprocess communication.  Interprocess 
  1125. communication is achieved via the LOCK mechanism and shared use of "global" 
  1126. data (which are available to all processes)     
  1127.  
  1128.    [--DPBS]
  1129.  
  1130. ------------------------------------------------------------------------
  1131. 19. Does M work on LANs?
  1132.  
  1133. Yes. The primary method of implentation might be termed "remote global 
  1134. access." Globals residing on a remote system can be accessed and locked 
  1135. simply by using extended syntax to refer to them. For example, 
  1136. ^HERE(name,address) refers to a piece of data on my local system, while 
  1137. ^|DENVER|THERE(name,address) might refer to a piece of data on a remove 
  1138. system. 
  1139.  
  1140. Thus, the same programming techniques used to build multiuser and 
  1141. multiprocess applications on a single system can be used to build 
  1142. distributed network systems.
  1143.  
  1144. In addition to this explicit networking most vendors allow for implicit 
  1145. network referencing, allowing system managers to choose the location of data 
  1146. independent of the application programs.
  1147.  
  1148. A networking protocol standard, "Open MUMPS Interconnect," provides least-
  1149. common-denominator capability so that systems from different vendors can 
  1150. participate on the same network. In addition, for competitive reasons, most 
  1151. vendors support the major protocols of their competitors.
  1152.  
  1153. An M-based LAN system in use at Brigham and Women's hospital, with 3,000 PC 
  1154. clients and over 100 servers, is a well-known and very successful 
  1155. application of the technology. 
  1156.  
  1157. There are also a number of systems with M operating in more complex 
  1158. client/server situations, with M acting as a front-end to other systems and 
  1159. also a back-end via RPC etc to applications created using other tools, for 
  1160. example Visual Basic, C++ and so on.
  1161.  
  1162. ------------------------------------------------------------------------
  1163. 20. Is M standard?
  1164.  
  1165. 1977: accepted as an ANSI standard, ANSI/MDC X11.1
  1166.  
  1167. 1984: revised ANSI standard ANSI/MDC X11.1-1984
  1168.  
  1169. 1986: approved as a Federal Information Processing Standard (FIPS)
  1170.  
  1171. 1990: revised ANSI standard ANSI/MDC X11.1-1990
  1172.  
  1173. 1992: accepted as an international standard, ISO/IEC 11756-1992
  1174.  
  1175. 1993: revised FIPS 125-1
  1176.  
  1177. 1995: revised standard in ANSI canvass procedure for approval as 
  1178. ANSI/MDC X11.1-1994 (or maybe 1995) and distributed for comments in ISO as 
  1179. ISO/IEC 11756-1995.
  1180.  
  1181. 1995: M Standard: December 1995, ANSI approved X11.1 (1995 Programming Language) and X11.2 (Open MUMPS Interconnect)
  1182.  
  1183. ------------------------------------------------------------------------
  1184. 21. Is M portable?
  1185.  
  1186. As a standardized language, M is portable as long as only the features
  1187. defined in the standard are used.  In practice, the portability of M
  1188. programs is typically as good as or better than that of C, and much
  1189. better than BASIC, because, unlike BASIC for example, standard MUMPS is
  1190. sufficiently rich to implement real-world applications mostly without
  1191. resorting to vendor-specific extensions.
  1192.  
  1193.      [Tilman Schmidt]
  1194.  
  1195. The contents of the ISO standard is IDENTICAL to the contents of the
  1196. ANSI standard. This is another thing that makes M[UMPS] special:
  1197. it is not uncommon that nationally accepted versions of standards
  1198. differ in details from their internationally accepted counterparts.
  1199.  
  1200.      [Ed de Moel]
  1201.  
  1202. MUMPS has better portability than C or any other language I'm aware of.  The 
  1203. VA has successfully run the same 15000 routine system on almost every 
  1204. platform imaginable.  VA Kernel and FileMan, the core of Decentralized 
  1205. Hospital Computer Program (DHCP) and CHCS (The DoD version of DHCP) and IHS 
  1206. (Indian Health Services) has been run, with very few changes, on machines 
  1207. ranging from PC's (over 80 VA Medical Centers running on 486's) to VAXen 
  1208. (other VA's running VMS) to Alpha AXP's (the replacement for the VAXen and 
  1209. some 486 sites) to IBM RS/6000's running AIX (DoD with CHCS from SAIC) . 
  1210.  
  1211.     [John E. Kemker, III]
  1212.  
  1213. MUMPS is available for at least the following platforms:
  1214.       MSDOS v2.0+ (single-user or multi-user)
  1215.      Unix - Altos, AT&T 3B2, Bull XPS and DPX/2, Control Data 4000, 
  1216.              Data General AViiON, Digital Equipment VAX/Alpha, 
  1217.              Hewlett Packard 9000, IBM RS/6000, ICL DRS 6000, 
  1218.              Motorola Delta, Phillips P9000, MIPS, Nixdorf Targon 31, 
  1219.              NCR Tower, Pyramid, Sequent, Siemens, Sun, 
  1220.              Texas Instruments 1500, Unisys 5000 and 6000
  1221.      Apple Macintosh OS
  1222.      VMS - Digital Equipment VAX/Alpha
  1223.      VM - IBM mainframe
  1224.      Netware
  1225.      Windows 3.1
  1226.      Windows NT
  1227.  
  1228.     [Jon Diamond]
  1229.  
  1230.  
  1231. ------------------------------------------------------------------------
  1232. 22. How does M compare to SQL?
  1233.  
  1234. M is a full-featured procedural general-purpose programming language.
  1235. SQL is a declarative language for relational database queries only,
  1236. and must be embedded in a general-purpose programming language in
  1237. order to achieve Turing completeness.
  1238.  
  1239. M accesses its database at low level, almost like programming in ISAM level.  
  1240. SQL works on the relational level, a higher level of abstraction.
  1241. ------------------------------------------------------------------------
  1242. 23. How does M compare to BASIC:
  1243.  
  1244.  
  1245. Both are procedural, interpreted applications languages.
  1246.  
  1247. Both have a line-oriented, verb-object type syntax.
  1248.  
  1249. M has additional features: better string handling, multidimensional
  1250. string-indexed arrays, persistent variables, multitasking, multi-user
  1251. support, dynamic code.
  1252.  
  1253. M offers greater standardization and portability. Although there is an ANSI 
  1254. standard for BASIC, it is of little practical importance because few vendors 
  1255. conform to it, it is not rich enough to permit development of real-world 
  1256. applications within the standard, and there is a tradition of non-standard 
  1257. vendor extensions. 
  1258.  
  1259. The state of M standardization is superior. The Veterans' Administration, in 
  1260. particular, took a leadership role in writing validation suites that assure 
  1261. vendor conformance to the standard.   
  1262.  
  1263. Vendor choice: BASIC is currently dominated by a single company, Microsoft. 
  1264. There are other vendors but few have any practical importance.  M is 
  1265. available from a wider range of vendors.
  1266. ------------------------------------------------------------------------
  1267. 24. How does x-base compare to M?
  1268.  
  1269. Compare M with the Xbase languages
  1270.  
  1271. Answering complex questions is one of the biggest reasons we invest in the 
  1272. time and expense of using a database management system. Several types of 
  1273. graphical products exist today to help you query your database. Of these, 
  1274. dedicated front-end query and reporting tools such as Borland ReportSmith 
  1275. for Windows and Intersolve Q+E are probably the best-known in corporate 
  1276. environments. Such tools are typically client applications designed to query 
  1277. data from corporate databases residing on client servers. Typically, these 
  1278. products have no built-in data-management capabilities; many require you to 
  1279. have a detailed knowledge of your database and the workings of relational 
  1280. databases in general.
  1281.  
  1282. PC-based database management systems let you construct queries and produce 
  1283. reports. You need a fair amount of database savvy to construct a query that 
  1284. produces the right result. Fortunately, the products are getting better at 
  1285. making this process easier. The two leading PC-based database management 
  1286. systems are Microsoft Access 2.0 and Borland Paradox for Windows 5.0.
  1287.  
  1288. A query is a request for information from a database. Methods for specifying 
  1289. a query have improved over time. Traditionally, one would have used SQL, or 
  1290. structured query language. In the late 1970s, IBM Research developed a new 
  1291. query technique called QBE, or query by example. In QBE, one supplies query 
  1292. details by filling in a table with values. For instance, to locate rows where 
  1293. the state value is New York, one would move to the State column and enter NY. 
  1294. To find salaries greater than $40000, one would enter > 40000. The basic idea 
  1295. of QBE is to make the dialogue easy to learn and reduce any reliance on 
  1296. keywords or language syntax.
  1297.  
  1298. It is possible to set up a database in M using a tool such as the VA Fileman 
  1299. package. Reports can be generated by means of the Report Writer feature of 
  1300. VA Fileman. Related records in a database are organized together to form 
  1301. a file, or in MUMPS terms a global. A field is a unique observation or data 
  1302. element. A record is comprised of one or more fields, a file (or global in M)
  1303. is a collection of records and a database is the collection of all files 
  1304. comprising an application. 
  1305.  
  1306.      [ Jeff Loeb ]
  1307. -----------------------------------------------------------
  1308. 25. Are there M-based 4GLs and application generators?
  1309.  
  1310. DASL (DSM Application Software Library). Based on DSM (Digital Standard M), 
  1311. it allows one to build database applications by defining data items and 
  1312. interactively designing screen placement.  DASL runs on VMS and Unix 
  1313. platforms.
  1314.  
  1315. "I used to build apps with DASL... One of the things I really liked about 
  1316. DASL is that it handled a lot of routine stuff, allowing me to build apps in 
  1317. about 30% of the time that it would have taken with straight M coding--
  1318. which, in turn, is considerably faster than coding in most other languages 
  1319. :^) Because DASL is written in M it was easy to modify to add special 
  1320. features."
  1321.  
  1322.      [Aaron Seidman]
  1323.  
  1324. Others include:
  1325.  
  1326.     InterSystems Open M/SQL.
  1327.     Micronetics ViEW.
  1328.     Hoskyns MDM.
  1329.     Cybertools CyberM.
  1330.     Veterans Administration Kernel (public-domain).
  1331.  
  1332.     [Jon Diamond]
  1333.  
  1334.  
  1335. ------------------------------------------------------------------------
  1336. 26. Are there M bulletin boards? M FTP sites? M Web Pages? M Newsgroups?
  1337.  
  1338.  
  1339. [01/95] Arthur B. Smith, ART@vets.vetmed.missouri.edu, has recently launched 
  1340. what is probably the first general-purpose public M FTP site.  You can reach 
  1341. it by anonymous ftp.  The location, in URL format, is:
  1342.  
  1343.         ftp://vets.vetmed.missouri.edu//mumps/
  1344.  
  1345. For conventional ftp access, issue the command ftp 
  1346. vets.vetmed.missouri.edu. The beginning of a session looks like this:
  1347.  
  1348.         ftp vets.vetmed.missouri.edu
  1349.         Connected to vets.vetmed.missouri.edu.
  1350.         Name (vets.vetmed.missouri.edu:dpbsmith): anonymous
  1351.         331 Anonymous Login OK, send id as password.
  1352.         Password: [type in your e-mail address here]
  1353.         230-User logged in
  1354.         230- Welcome to the University of Missouri-Columbia Department of 
  1355.         230- Veterinary Medicine and Surgery FTP Server.
  1356.  
  1357. As of 1/95, this location appears to contain everything from the NEMUG BBS,
  1358. as well as DT-STUDENT and the M FAQ.  See the description of the NEMUB BGS, 
  1359. below. --DPBS
  1360.  
  1361. (7/94) Approximately 150 M-related files available for download; 
  1362. examples:
  1363.  
  1364.  
  1365. MUGLIB1.LZH    Part 1 of MUGLIB Disk 11.  Use LHA to extract  (06-20-92)
  1366. XPORT.RO       Short M routine to change globals  (06-27-93)
  1367. UTILS.EXE      Various MUMPS utilities  (08-17-92)
  1368. CALC.EXE       M CALCULATOR - VER 3.00 - PKZIP EXE  (11-14-92)
  1369. COWRITER.EXE   This is a Free CoWriter Demo.  (03-18-92)
  1370. DSRECOV.ZIP    Recover crashed DataTree %dsbackups  (09-09-92)
  1371. DTM-EDTR.LZH   Full-Screen editor for DataTree MUMPS. Use LH  (06-19-92)
  1372. HASEDIT.EXE    MUMPS Editor from High Altitude.  (10-19-90)
  1373. KERM-MGB.LZH   KERMIT-M for CCSM MUMPS. Use LHA to extract f  (06-19-92)
  1374. MSMSHELL.UTL   MSM's Programmer Shell Utility  (12-30-91)
  1375. MUMPS53.LZH    UC Davis MicroMUMPS Ver 5.23 ($H Fix).  (06-11-92)
  1376. NOUS134.LZH    NOUS is a MUMPS Interpreter which contains Pr  (09-23-92)
  1377. STUDENT.EXE    DT-STUDENT. FREE MUMPS System. Auto Pkunzip.  (09-15-92)
  1378. TMM.LZH        TURBO-MicroMUMPS is a MUMPS Interpreter.  (10-19-92)
  1379. FMV20.ZIP      VA FileMan Verion 20  (09-23-93)
  1380. FMPRO.LZH      VA FileMan Programmer Manual.  Use LHA210.EXE  (06-15-92)
  1381. XMTECH32.LZH   MailMan 3.2 Technical Manual. Use LHA210.EXE   (06-15-92)
  1382. HURST.ZIP      MUMPS games and files for ISC's M/VX.  (09-16-91)
  1383. IDEAFACT.EXE   The Idea Factory by C. Volkstorf  (03-23-92)
  1384. MBBS792.TXT    Other known MUMPS BBS Boards as of 7/92  (07-24-92)
  1385. POSTNET.ZIP    print USPS POSTNET barcodes using M  (06-01-93)
  1386. SSVN.TXT       Guy Gardner's paper on SSVN's for Windowing  (03-04-92)
  1387.  
  1388.  
  1389. (All of the BBS'es listed here are in the USA. --DPBS)
  1390.  
  1391. DHCP BBS: (801)583-0135
  1392.  
  1393. Focussed on the VA's Distributed Hospital Computer Program (DHCP); not a 
  1394. general-use M BBS. 
  1395.  
  1396.                             ****************
  1397.  
  1398.  
  1399. InterSystems BBS: 
  1400.  
  1401.      General Users 617 225-0475
  1402.      VARS 617 494-0867
  1403.  
  1404.                             ****************
  1405.  
  1406.  
  1407. Micronetics on CompuServe: GO PCVENH, Section 8 and DL 8
  1408.  
  1409. (7/94) CompuServe forum "PC Vendors (H)" is shared by a number of vendors; 
  1410. Micronetics occupies section 8 for messages, and DL 8 for files. The forum 
  1411. has received about five postings in the last two weeks, and is basically an 
  1412. extension of Micronetics' support services.  Most threads begin as customer 
  1413. questions addressed to Micronetics support, and most files are product 
  1414. patches press releases, etc.
  1415.  
  1416.                             ****************
  1417.  
  1418. Micronetics Customer Support BBS: (301) 948-6825
  1419.  
  1420. (7/94) Content similar to Micronetics section on CompuServe. Primarily a 
  1421. customer support mechanism. [Micronetics Explorer, a student version of MSM, 
  1422. appears to be available for downloading from this BBS as EXP1.ZIP and 
  1423. EXP2.ZIP]. 
  1424.  
  1425. Some examples of files available for downloading:
  1426.  
  1427. %ZAB.RTN     MUMPS      624 05/94 Display $ZA bit settings for device...
  1428. 3C507.COM    MAIN      5.4K 03/91 3COM 3C507 Packet Driver
  1429. 408H.NOT     MUMPS     7.9K 05/94 Release notes for Version 4.0.8H
  1430. AGENDAS.ASC  MUMPS      24K 09/91 MSM COURSE DESCRIPTIONS
  1431. BISMMARK.RTN MUMPS     8.3K 04/94 Benchmark routines...
  1432. COLOR.RTN    MUMPS     1.8K 02/94 COLOR DEMO -- GUI
  1433. EXP1.ZIP     MUMPS     1.3M 12/93 Explorer File (Database) 1 of 2...
  1434. EXP2.ZIP     MUMPS     1.0M 12/93 Explorer File (Executables) 2 of 2...
  1435. GBMAINT1.RTN MUMPS     7.0K 05/94 GLB Compression fix for PC/Plus ver 4.0.9 
  1436. only
  1437.                             ****************
  1438.  
  1439.  
  1440. (8/94) 150 files for downloading, including VA Fileman 20.0 and no less than 
  1441. five versions of M: 
  1442.  
  1443.    MUMPS Interpreters located in file area "MUMPS Programs & Utilities"
  1444.  
  1445.    MSM-EXPLORER Version 1.0 - File names for downloading are MSMEXP_1.EXE,
  1446.    MSMEXP_2.EXE and MSM_INST.HLP.
  1447.  
  1448.    DT Student Version 1.1 - File names for downloading are STUDENT1.LZH
  1449.    (DT Student part 1) and STUDENT2.LZH (VA FileMan 19 and Documentation
  1450.    part 2)
  1451.  
  1452.    NOUS Version 1.34 - File name for downloading is NOUS134.LZH
  1453.  
  1454.    TURBO-MicroMUMPS - Filename for downloading TMM.LZH
  1455.  
  1456.    UC Davis MicroMUMPS Version 5.23 - File name for downloading
  1457.    is MUMPS53.LZH
  1458.  
  1459.                             ****************
  1460.  
  1461.  
  1462. New England MUG BBS: - Discontinued due to the popularity of the Internet.
  1463.  
  1464.           Sysop: Gardner Trask
  1465.           Baud: 300, 1200, 2400 and 9600
  1466.           8 bits, no parity, one stop bit
  1467.           MNP5 error correction protocol 2400/9600 baud
  1468.           24 hours, free
  1469.  
  1470. The New England M BBS was the largest and longest running BBS dedicated 
  1471. to the M community. It served as a communication point at a time when the 
  1472. Internet was still not available to the public. The popularity and 
  1473. explosion of the net made the BBS mute.
  1474.  
  1475.  
  1476.     ********************************
  1477.  
  1478. M Newsgroups?
  1479.  
  1480.  
  1481. Currently, there is one newsgroup dedicated to M on the internet. It is:
  1482.  
  1483. comp.lang.mumps
  1484.  
  1485. Previously, a moderated newsgroup dealing with M standards was abandoned 
  1486. whem c.l.m.'s popularity grew.
  1487.  
  1488.  
  1489.     *********************************
  1490.  
  1491. M Web Pages:
  1492.  
  1493. This list is never quite complete, and subject to old links. Please 
  1494. inform Gardner of any new, deleted, or modified Web Addresses:
  1495.  
  1496. (In no particular order)
  1497.  
  1498. Vendors:
  1499.  
  1500. www.micronetics.com                      Micronetics Design Corp.
  1501. www.intersys.com                         InterSystems Corp.
  1502. www.riosoft.softex.br/~x10tech/          Extensao Software Corporation
  1503.  
  1504.  
  1505. M Language technical resources and enhancement projects:
  1506.  
  1507. www.vmth.ucdavis.edu/M/mhttp.htm         Jim Self's MHTTP Server
  1508. www.mcenter.com/mtrc                     M Technology Resource Center
  1509. ftp://vets.vetmed.missouri.edu/mumps     FTP site for M files
  1510.  
  1511. MDC, MTA, User Groups, and Standards Bodies:
  1512.  
  1513. www.radix.net/~demoel/mdc/               Mumps Development Committee
  1514. www.members.aol.com/mta1994/mta.htm      M Technology Association
  1515. www.mindspring.com/~mga                  Mumps of Georgia Users Group
  1516. www.mtauki.co.uk/                        MTA - UK & I
  1517. www.ua.ac.be/mta/                        MTA - Europe
  1518. www.klinik.uni-frankfurt.de/mug-d        MUG of Deutschland
  1519. www.uku.fi/jarjestot/myhdistys/          MUG - Finland
  1520. www.montagar.com/~swmug                  The Southwest Mumps Users Group
  1521. www.itl.nist.gov/                        Computer Information Laboratory
  1522. www.mcis.duke.edu/standards/guide.htm    Healthcare Informatics Standards
  1523. www.itl.nist.gov/div897/                 Software Diagnostics & Conformance 
  1524.                                          Testing Division  of NIST 
  1525.  
  1526.  
  1527. M publications, e-zines, software, etc.
  1528.  
  1529. www.geocities.com/SiliconValley/7041/mwm.html    MWM: an electronic e-zine on M 
  1530. www.members.aol.com/mta1994/public.htm    Books on M Technology
  1531. www.mtauki.co.uk/mtapubs.htm              Books on M Technology from MTA-UK&I
  1532. www.members.aol.com/mta1994/softwar.htm   M Technology Software
  1533. www.mtauki.co.uk/mtasoftw.htm             M Technology Software from MTA-UK&I
  1534. ftp://vets.vetmed.missouri.edu/mumps      FTP site for miscellaneous M files
  1535. www.va.gov/dhcp/cdrom/software.htm        MUMPS programs on the VA server
  1536. www.mtechnology.org/mtapubs.html          M Publications from MTA-NA
  1537.  
  1538.  
  1539. Classes/Tutorials:
  1540.  
  1541. www.isc.rit.edu/~nat4087/MUMPS/           Rochester Institute of Technology
  1542.  
  1543.  
  1544. M people:
  1545.  
  1546. www.geocities.com/SilliconValley/7041     Chris Bonnici's M Home Page
  1547. www.cs.uni.edu/~okane                     Kevin C. O'Kane
  1548. homepages.enterprise.net/andreww/         Andrew Webb's Homepage
  1549. www.world.std.com/~seidman/aaron.html     Aaron Seidman 's Homepage
  1550. www.i1.net/~jelkins/                      The Jim Elkins Home Page 
  1551.  
  1552.  
  1553. Other Companies related to, using, enhancing M:
  1554.  
  1555. www.atlasdev.com                          Atlas Development
  1556. www.connexsys.com                         Connex Systems
  1557. www.seasystems.com                        Sea Change Systems     
  1558. www.cytools.com                           Cybertools
  1559. www.kbsystems.com                         KB Systems
  1560. www.sentientsystems.com                   Sentient Systems
  1561. www.tiac.net/users/kra/                   Kogan-Rose Associates
  1562. www.hwsl.co.uk/mgw                        M/Gateway Developments Ltd
  1563. www.henryelliottandco.com/                Henry Elliott & Company
  1564. www.mcenter.com/tyler/                    The Tyler Group
  1565. www.mindspring.com/~mga/corp-01.html#CPU  Career Professionals Unlimited
  1566. www.techassociates.com/                   Tech Associates
  1567. www.megaforceusa.com/                     MegaForce
  1568. www.dice.com/prc/                         Professional Recruiting Consultants
  1569. www.members.gnn.com/Emergent/et-top.htm   Emergent Technologies
  1570. www.beaconpartners.com/red.html           Beacon Partners Consultants
  1571. www.eskimo.com/~lci/                      LCI  Homepage
  1572. www.yonder.com/                           Yonder Technologies
  1573. www.cyberspy.com/~kaycom/                 Kay Communications
  1574. www.fthill.com/                           Foothill Solutions
  1575. www.esitechnology.com                     ESI Technology
  1576. www.arnet.com/                            Digi International
  1577. www.dht.com/                              Dynamic Healthcare
  1578. www.idx.com/                              IDX Systems
  1579. www.partners.org/bwh/home.html            Brigham and Women's Hospital
  1580. www.hboc.com                              HBO&Company
  1581. www.kaiperm.org                           Kaiser Permanente
  1582. www.consult.hsc.wvu.edu/                  WV Consult
  1583. www.va.gov/vama.htm#DHCP                  Department of Veterans Affairs
  1584. www.omegalegal.com/                       Omega Legal System
  1585. www.isg-us.com/                           International Software Group
  1586. www.georgejames.com/marina/               George James Software
  1587. www.srcorp.com                            System Resources Corporation
  1588. www.bender.brooks.af.mil/www/             MEDSITE
  1589. www.corningbesselaar.co.uk/               Corning Pharmaceutical Services
  1590. www.labcorp.com/                          LabCorp
  1591. www.hogan1.atiin.com/uniband/             UniBand
  1592. www.epic.net/asianterminals/              Asian Terminals
  1593. www.ultranet.com/~scision/strate.html     StrateCision
  1594. www.ctg.com/                              Computer Task Group
  1595. www.intraco.com/                          Intraco Systems
  1596. www.epicsys.com/                          Epic Systems
  1597. http://jacquardsystems.com                  Jacquard Systems Research   
  1598. www.partners.org                          Partners Healthcare System, 
  1599. www.sunquest.com                          Sunquest Information Systems, Inc.
  1600.  
  1601.  
  1602. ------------------------------------------------------------------------
  1603.  
  1604. 27. "What happened in 1841?"
  1605.  
  1606. In M, the current date and time is contained in a special system variable, 
  1607. $H (for "HOROLOG").  The format is a pair of integers separated by a comma, 
  1608. e.g. "54321,12345"  The first number is the number of days since December 
  1609. 31st, 1840, i.e. day number 1 is January 1st, 1841; the second is the number 
  1610. of seconds since midnight.
  1611.  
  1612. But why 1841?  According to Steve Clay, sbc@pobox.com, the following 
  1613. answer appeared in the "Just Ask!" column of the September 1993 issue of 
  1614. "M Computing," a publication of the M Technology Association, Silver Spring, 
  1615. MD 20903 (Phone: 301-431-4070), in the form of a letter from James M. 
  1616. Poitras: 
  1617.  
  1618. "Starting in early 1969, our group created the Chemistry Lab application at 
  1619. Massachusetts General Hospital (MGH), which was the first package in the MGH 
  1620. MUMPS with Global Data Storage and many of the features of the language 
  1621. today...
  1622.  
  1623. "When we started programming, there were no utility programs of any type. We 
  1624. had to write them all: time, date, verify database, global tally, print 
  1625. routine, etc. I ended up writing initial versions of most of these.
  1626.  
  1627. "When I decided on specifications for the date routine, I remembered reading 
  1628. of the oldest (one of the oldest?) U.S. citizen, a Civil War veteran, who 
  1629. was 121 years old at the time. Since I wanted to be able to represent dates 
  1630. in a Julian-type form so that age could be easily calculated and to be able 
  1631. to represent any birth date in the numeric range selected, I decided that a 
  1632. starting date in the early 1840s would be 'safe.' Since my algorithm worked 
  1633. most logically when every fourth year was a leap year, the first year was 
  1634. taken as 1841. The zero point was then December 30, 1840... 
  1635.  
  1636. "That's the origin of December 31, 1840 or January 1, 1841. I wasn't party 
  1637. to the MDC negotiations, but I did explain the logic of my choice to members 
  1638. of the Committee." 
  1639.  
  1640. ------------------------------------------------------------------------
  1641. 28. How do I list a global directory on this unfamiliar M system?
  1642.  
  1643. Although the M language itself is standardized, the operating environment 
  1644. and utilities, alas, are not. And they are nonstandardized in the worst way: 
  1645. the actual functionality doesn't vary much across vendors, but the details 
  1646. do.
  1647.  
  1648. Gardner Trask has provided the following guide:
  1649.  
  1650.  
  1651. Function           MSM         DSM         MVX/MSQL       DTM
  1652. -------------------------------------------------------------
  1653. Utility Menu       %UTL        %UTL        UTIL           zzu
  1654. Routine Directory  %RD/%ROU    %RD/%RDX    %RD/%RDISP     %rd
  1655. Routine Print      %RP         %RS/%ZTPP   %RO/ZP         %rsave
  1656. Routine Change     %RCHANGE    %RCE        %RCHANGE       %rsearch
  1657. Routine COmpare    %RCMP       %RCMP       %RCMP          %rloadcompare
  1658. Global Directory   %GD/%GLO    %GD         %GD/%GDISP     %gd
  1659. Global List        %GL         %G          %G             %g
  1660. Global Edit        %GEDIT      %GEDT       %GED           %gedit
  1661. Global Change      %GCHANGE    %ZGE        %GCHANGE       %gedit
  1662. Global Transfer    %GCOPY      %GC         %GOQ/%GIQ
  1663.  
  1664.     [Gardner Trask]
  1665.  
  1666. 29. Do comments really affect efficiency?
  1667.  
  1668. [In case anyone is not familiar with Scott Jones, let me say, in a offhand, 
  1669. understated way, that he knows what he is talking about--DPBS]
  1670.  
  1671. A number of people have talked about the performance/maintenance issues with 
  1672. comments, so I thought I'd clear things up a bit, at least for the 
  1673. implementations that I deal with (ISM,DTM).  
  1674.  
  1675. Double semi-colon comments are placed in-line into the object code, so it is 
  1676. best (from a maintenance view as well) to have a separate label for each 
  1677. logical section of data, followed by lines of ;; data,  that is not in any 
  1678. path of execution.  
  1679.  
  1680. For normal comments, if they are at the end of a line that already has code 
  1681. on it - there is absolutely NO effect at all on performance, so comment to 
  1682. your hearts content.  
  1683.  
  1684. If the comment is all that is on the line, there is still a beginning of 
  1685. line token - which can be expensive, esp. in frequently executed loops.  The 
  1686. reason is that the BOL token does a lot of work after every so many lines, 
  1687. such as allow the next process to run (on systems like DTM), or check for 
  1688. ^C,RESJOB, or other inter-process communication.  
  1689.  
  1690. For long runs of comments, such as the maintenance section at the top of a 
  1691. well written routine, if you have M/SQL (for ISM,DTM,DSM or MSM), you can 
  1692. simply use the macro pre-processor and bracket the code in #if 0 ... #endif.  
  1693. This technique totally eliminats the overhead, but it does mean that the 
  1694. maintenance section is not present in the M source, only in the macro source 
  1695. (this can be an advantage if you ship M source to customers, but don't want 
  1696. them to see all of your descriptions of bug fixes). Alternatively, try not 
  1697. to start execution on the first line, but use a label after the comment 
  1698. section. (i.e. DO entry^foobar instead of DO ^foobar) 
  1699.  
  1700.     [Scott P. Jones]
  1701.  
  1702.  
  1703. --------------------------------------------
  1704.  
  1705. 30. What is the MDC?
  1706.  
  1707. The MUMPS Development Committee (MDC) is responsible for defining the M 
  1708. Standard. Unlike other language standards bodies (such as ANSI and ISO), the 
  1709. MDC is dominated by users - systems developers, rather than implementors. 
  1710. Anyone with an interest in the M language can join the MDC and all members 
  1711. have a single vote. 
  1712.  
  1713. MTA-North America acts as the MDC Secretariat and publishes all documents 
  1714. pertaining to ANSI X11.1, including the Standard, bindings specifications 
  1715. (for example, X Windows, SQL and GKS) and MDC proceedings.
  1716.  
  1717. There are also counterparts to the MDC in Europe, Brazil and Japan (MDCCs) 
  1718. which feed in non-US contributions and have voting rights at the MDC.
  1719.  
  1720.     [Jon Diamond]
  1721.  
  1722.  
  1723. ----------------------------------------------------
  1724. 31. A Brief History of M
  1725.  
  1726.  
  1727. As told in a series of e-mail exchanges in comp.lang.mumps in Sept/Oct 1996.
  1728. Accuracy is not insured. 
  1729.  
  1730.  
  1731. From: Monika Kratzmann <monika@INTERSYS.COM>
  1732.  
  1733.         We are looking for some historical information on the evolution of M
  1734. to be published in an article.  It seems natural to turn to the members of
  1735. this newsgroup inviting you to provide any information on this you may have.
  1736. Your consideration in providing us with your knowledge about the history of
  1737. M is deeply appreciated.
  1738.  
  1739. Thank you one and all.
  1740.  
  1741. Monika Kratzmann
  1742. InterSystems Corporation
  1743.  
  1744. --
  1745.  
  1746.  
  1747. "Ellis A. Bauman, 608-829-5334" 
  1748.  
  1749. It's not clear what specific kinds of info you're looking for, but here's a
  1750. brief note on the beginnings, at least as far as I recall:
  1751.  
  1752. The language was developed at Massachusetts General Hospital in a lab run by
  1753. Dr. Octo Barnett.  It was developed with federal grant money --- hence was in
  1754. the public domain, and the name MUMPS stems from
  1755.      Massachusetts General Hospital Utility Multi-Programming System
  1756.      =                              =       =     =           =
  1757.  
  1758. Among the chief developers was Neil Pappilardo who later left Mass Gen, and
  1759. started Meditech, adding some proprietary features to MUMPS and calling the
  1760. result MIIS (Meditech Interactive Information System) --- marketing medical
  1761.              =        =           =           =
  1762. records systems to hospitals, clinics, medical labs, etc.
  1763. At Mass Gen, the language was used to deal with clinical medical data --- hence
  1764. its strengths in string handling (lots of text data), sparse arrays (not every
  1765. patient undergoes every possible lab test), and other such features.  The
  1766. original platform was (at least I think it was) a PDP-15.  It was later ported
  1767. to the PDP-11 and other similar "minis" such as the Data General machines like
  1768. Novas and Eclipses.
  1769.  
  1770. As the idea spread among other medical researchers, people began adding other
  1771. features, and there soon developed a whole bunch of "dialects" which frustrated
  1772. the researchers because they couldn't exchange software very easily.  To solve
  1773. that problem, the MUMPS Users' Group was formed and efforts to standardize the
  1774. language began.  Dr. Barnett was among those who was most forceful in arguing
  1775. for the creation of MUG and the standardization effort.  I do not remember who
  1776. first proposed that ANSI approval be pursued.  The current MTA organization is
  1777. what MUG has evolved into, via the name change.  I believe Joan Zimmerman was
  1778. the first MUG staff member, and she wrote (or edited?) some of the first MUMPS
  1779. tutorial materials published by MUG.
  1780.  
  1781. There is probably lots more material, and details, available from the MTA
  1782. "archives", and other people who were involved in those early days.  Perhaps
  1783. some of the other newsgroup members will know how to contact some of the people
  1784. I've mentioned.  For example, there is a short history in Chapter 1 of "The
  1785. Complete MUMPS" by John Lewkowicz.  There are also some historical notes in
  1786. the MUMPS FAQ (for example, "What happened in 1841?").
  1787.  
  1788. I hope the above is both accurate and helpful.
  1789.  
  1790.  
  1791.  
  1792. --
  1793.  
  1794.  
  1795. From: (Rod Dorman)
  1796.  
  1797.  
  1798. As I recall it, the original platform was the PDP-9.
  1799.  
  1800. -- 
  1801.  
  1802.  
  1803. From: Lev Jacob 
  1804.  
  1805. I think the original plarform was a PDP-8.
  1806. When the language was adopted by DEC it was a stand-alone OS called
  1807. MUMPS-11 on PDP's.
  1808.  
  1809. I ca'nt remember MUMPS for Novas but I can remember MUMPS for Tandem Main
  1810. Frames with a Multi-Cpu built in functionality.
  1811.  
  1812. Good luck.
  1813.  
  1814. Jacob Lev.
  1815.  
  1816.  
  1817. --
  1818.  
  1819. From: Dennis J Brevik 
  1820.  
  1821.  
  1822. The original platform was a PDP-9.  When the MGH version was picked up by 
  1823. DEC it was productized onto the PDP-15.  A couple years later it was 
  1824. rewritten by DEC for the PDP-11.  The systems were standalone.  The date 
  1825. that DEC officially picked up a magtape of MUMPS (PDP-9) from LCS at MGH 
  1826. was October 3, 1970.  It was a pleasant fall day.  The PDP-15 MUMPS 
  1827. system was installed at its first site (Health Data Management Systems of 
  1828. Denver) in May 1971.  It took two hours to install, amazing everybody on 
  1829. the site, who were expecting a week or two effort.
  1830.  
  1831. Dr. Octo Barnett was in charge at the Laboratory of Computer Science at 
  1832. MGH.  Neil Papalardo and Bob Greenes were major contributors.  Neil went 
  1833. on to form Medical Information Technology (Meditech), Greenes was a 
  1834. medical doctor as well as holding a PhD in computer science - both 
  1835. degrees awarded simultaneously from Harvard.  Bob went on to be President 
  1836. of Automated Health Systems of Wakefield MA and Burlingame CA.
  1837.  
  1838. In a Boston meeting in Fall 1972 Bruce Waxman of NIH told the audience in 
  1839. no uncertain terms that if they wanted to get NIH money for their 
  1840. computer projects they damned well better be using MUMPS, that NIH was 
  1841. not interested in reinventing THAT wheel, thank you.  MUMPS took off.
  1842.  
  1843. I was the original product line and technical leader on MUMPS-15 at DEC. 
  1844. Paul Stylos was the technical leader for MUMPS-11.  Evelyn Dow was the 
  1845. original Marketing representative.  And let us not forget Dave Ensor of 
  1846. Scotland, who made significant technical contributions.  The DEC 
  1847. executive who originally saw the value in MUMPS was Stan Olsen.  Sam 
  1848. Moulton was also on the technical side.  
  1849.  
  1850. Respecfully,
  1851.  
  1852. Dan Brevik
  1853.  
  1854.  
  1855. --
  1856.  
  1857.  
  1858. From: "Ellis A. Bauman, 608-829-5334" 
  1859.  
  1860.  
  1861. Well, Jacob, all I can say is that when I first encountered MUMPS (in the early
  1862. to mid 1970s), it was MIIS on a PDP-15, and I later worked on a Data General
  1863. machine, also MIIS.  Both of those were stand-alone systems, dedicated to MUMPS
  1864. (or at least a MUMPS-like, derivative, language).
  1865.  
  1866.  
  1867. --
  1868.  
  1869. From: Daniel P. B. Smith
  1870.  
  1871.  
  1872. Hi, Monika... There is a 16-page article, "History of the Development of
  1873. Medical Information Systems at the Laboratory of Computer Science at
  1874. Massachusetts General Hospital" by G. Octo Barnett, MD, in "A History
  1875. of Medical Informatics," edited by Bruce I Blum and Karen Duncan,
  1876. published by the ACM Press (Addison-Wesley), 1990, ISBN 0-201-50128-7.
  1877. I bought it on sale for five bucks at Quantum.  It's almost certainly
  1878. out of print but it couldn't hurt to ask Quantum if they have any more
  1879. copies kicking around.  
  1880.  
  1881. According to the article, the first implementation, of a language called
  1882. MUMPS, by Neil Pappalardo, was on a PDP-7.  Not a PDP-15 or a PDP-9, a
  1883. PDP-7.
  1884.  
  1885. He traces its origins from JOSS through BBN's Telecomp and StringComp.
  1886.  
  1887. Richard Walters' "An ABC of MUMPS" contains a "Brief History of MUMPS"
  1888. on pp. 20-22 with a family tree showing the root in Rand Corporation
  1889. JOSS, through BBN JOSS, via TELCOMP and STRINGCOMP to MGH MUMPS.
  1890.  
  1891. -- 
  1892. Daniel P. B. Smith
  1893.  
  1894.  
  1895.  
  1896. --
  1897.  
  1898.  
  1899. From: Etienne Cherdlu 
  1900.  
  1901.  
  1902. Now this brings back some memories.  I remember using TELCOMP back in 
  1903. 1969 (27 years ago).  We used it, via a dial up line, on a PDP-7 (TELCOMP 
  1904. II) and later on a PDP-10 (TELCOMP III).
  1905.  
  1906. I don't remember much about the machines that we used other than that we 
  1907. leased time from a company called Time Sharing Limited of Great Portland 
  1908. Street, London. I also have a note from that time about on-line storage 
  1909. charges. It cost 30p (about 45 cents) per 640 byte block per month!
  1910.  
  1911. The family resemblance between TELCOMP and M is just about recognizable 
  1912. especially if you were familiar with MUMPS-11.
  1913.  
  1914. The following is a fragment of TELCOMP code that was written on 12 
  1915. December 1971:
  1916.  
  1917. 1.04 TYPE #,"ENTER ONE OF THE FOLLOWING:-";MENU
  1918. 1.05 TYPE FORM X FOR X=1:1:4 FOR END=10^15
  1919. 1.06 READ GRNO IN FORM 15
  1920. 1.065 DONE IF GRNO=END
  1921. 1.07 TO STEP 1.06 IF GRNO>4
  1922. 1.08 TO PART GRNO+1
  1923.  
  1924. 2.01 DO PART 50
  1925. 2.02 READ N,K
  1926. 2.03 DO PART 51
  1927. 2.04 TO PART 15
  1928.  
  1929. ..
  1930.  
  1931. 15.01 LINE FOR X=1:1:3
  1932. 15.02 TYPE MINPL,MAXPL IN FORM 17
  1933. 15.03 TYPE FORM 17
  1934. 15.04 DO PART GRNO+15 FOR X=MNPL:STPL:MXPL
  1935.  
  1936. 16.01 Y=(X^N)+K
  1937. 16.02 Y1[X]=(((Y-MNPL)/(MXPL-MNPL))*2)-1
  1938.  
  1939. ..
  1940.  
  1941. FORM 15
  1942. ITEM NUMBER?   #####
  1943. FORM 17
  1944. MINIMUM ##### MAXIMUM ######
  1945.  
  1946. Comparison with M:
  1947. 1) No variable declaration.  No data typing (String support in TELCOMP 
  1948. III?)
  1949. 2) Sparse local arrays.  No globals.  File I/O was conventional, I think.
  1950. 3) For loop construct.
  1951. 4) TYPE command identical to MUMPS-11
  1952. 5) Part/Step numbering identical to MUMPS-11
  1953. 6) Form Input/Output feature was unique to TELCOMP.
  1954. 7) Do label+offset still exists in M today.
  1955.  
  1956. Clearly some of the origins of M can be seen in TELCOMP.  Does anyone 
  1957. know where the idea for globals originated?  What elements did other 
  1958. languages, such as JOSS bring to M?
  1959.  
  1960. Regards
  1961. Etienne Cherdlu
  1962.  
  1963.  
  1964. --
  1965.  
  1966. From: Jon Diamond 
  1967.  
  1968.  
  1969. This takes me back too! Oh for the good old days - when programmers were 
  1970. really programmers, disks were 2.5Mb in size and part numbers ranged from 
  1971. 0.01 to 327.67 (or some such obvious number)!!!!
  1972.  
  1973. Well, the comment is not totally accurate - line numbers only had 2 
  1974. decimal places if you're being really picky.
  1975.  
  1976. BTW I used to know magic numbers - 84, 84*84 84*84*84 etc FWIW. I've now 
  1977. forgotten what they were, but I'm sure some of you MUMPS-11 people must 
  1978. remember? I do know why I needed to know them, but that's another 
  1979. story...
  1980.  
  1981. -- 
  1982.  
  1983. Jon Diamond, Cap Gemini UK
  1984. Go Proverb: "On the second line 6 die, 8 live"
  1985.  
  1986.  
  1987. ------------------------------------------------------------------
  1988.  
  1989. 32. How Exactly does $ORDER work?
  1990.  
  1991.  
  1992.  
  1993. The first thing to be aware of is "arrays" as they work in
  1994. other languages: when you have a "set" of components (like
  1995. the states in the USA) you want to use a method of reference
  1996. that allows you to manipulate the "set" as a unit when that
  1997. is convenient, and its members when you are dealing with
  1998. the properties of the individual members of that set.
  1999.  
  2000. Now, in languages like Pascal and C, you would create an
  2001. array with 50 members, and you would build a table:
  2002.   State[0] = (pointer to string) "Alabama"
  2003.   State[1] =                     "Alaska"
  2004.   ...
  2005.   State[49] =                    "Wyoming"
  2006. and probably some associated tables:
  2007.   Capital[0]  = "Montgomery"; Abbrev[0]  = "AL";
  2008.   Capital[1]  = "Juneau";     Abbrev[1]  = "AK";
  2009.   ...
  2010.   Capital[49] = "Cheyenne";   Abbrev[49] = "WY";
  2011.  
  2012. If you want to loop through these arrays, you don't need
  2013. any special functions: there are 50 elements in each,
  2014. and "for i = 0 to 49" or for (i = 0; i < 50; i++) will do
  2015. just fine.
  2016.  
  2017. In M[UMPS], arrays can be done in the same fashion, in which case
  2018. For i=0:1:49 would do just fine to loop through all states,
  2019. but it is much more common to use a different method of
  2020. indexing the array(s), using a string as an index.
  2021. You could store the array as:
  2022.    State["AL"] = "Alabama/Montgomery"
  2023.    State["AK"] = "Alaska/Juneau"
  2024.    ...
  2025.    State["WY"] = "Wyoming/Cheyenne"
  2026. (or, if your method of usage would make that more convenient
  2027. you could use State["Alaska"]="AK/Juneau"
  2028. State["Juneau"] = "AK/Alaska" for that matter).
  2029.  
  2030. However you "index" the array, the addressing will not be as
  2031. simple and straightforward as in traditional languages:
  2032.  - Your language processor will need to build an internal table to
  2033.    link storage positions to defined indexes.
  2034.  - This table will typically be invisible to the programmer,
  2035.    but you will want to query it with questions like:
  2036.     "i am at element "xxx", what is the next one that you have?"
  2037.  
  2038. Or, a simple loop across all states would look like:
  2039.  Set index="" For  Set index=$order(State(index)) Quit:index=""  do...
  2040. The function $order looks at this internal table, and tells you
  2041. what the next index is after the one that you specify.
  2042.  
  2043. So... At the first call, the specified index is "" (empty string),
  2044. and $order will look for the first entry in the table. Currently
  2045. this is "AK". After "AK", $order would find "AL", "AR", "AZ",
  2046. etcetera, up to "WY".
  2047. When called with the "last" index ("WY"), $order would return
  2048. the value "" (empty string) to signal that it could find no more
  2049. members.
  2050.  
  2051. Now, that seems fair for an array like this, and we'll always have
  2052. the same 50 members, and always find the same ones in the same
  2053. order, so why go through all this bother?
  2054. Well, that will become clear when you're dealing with sets that
  2055. are more dynamic in nature. Suppose that Good Old Fidel finally
  2056. steps down and Cuba requests membership as a state, there would
  2057. be a storm of protests, but let's assume that the request would
  2058. be approved. In most other languages, we would have to do a
  2059. lot of recoding to insert Cuba in the "proper" place in the
  2060. new array of states. In M[UMPS], all we have to do is
  2061.   Set State("CU")="Cuba/Havana"
  2062.  
  2063. $order(State("CT")) currently returns "DE", but after this
  2064. insertion, it would suddenly return "CU", and $order(State("CU"))
  2065. would return "DE": by the way of indexing that M[UMPS] does for
  2066. you "behind the scenes", indexes are always stored in alphabetic
  2067. order, and you won't have to worry where things are, or how
  2068. to get them into the proper sequence.
  2069.  
  2070. Of course, this is where it starts to matter what value you
  2071. use for an index:
  2072.  - quite often, you won't store a value "as it is entered"
  2073.    For instance, converting a proper name to "all upper case"
  2074.    (or all lower case for that matter).
  2075.    In this example, I used upper case only abbreviations,
  2076.    but if the full name of the state were the index, there
  2077.    is no predicting whether an end-user would type Alaska,
  2078.    alaska, ALASKA, or (very popular typo:) ALaska.
  2079.  - it matters which "property" you use for an index.
  2080.    If the input to your program is "the abbreviation", you'll
  2081.    be fine with this set-up, but if you're doing taxes, and
  2082.    the input to your program is the city to which the forms are
  2083.    to be sent (which is not even always the capital), you may
  2084.    very well want to build a support-table that has your
  2085.    "search" data as a subscript, and the essential index into
  2086.    the "real" table as a value
  2087.  
  2088. In this example, I also used another "idiosyncracy" of M[UMPS]:
  2089. I stored "State/Capital" into one single value. You would use
  2090. the function $Piece to separate out these values. Whether you
  2091. would use a set-up like I depicted above, or
  2092.    State(abbreviation,"Cap")=capital
  2093.    State(abbreviation,"Name")=name
  2094. is up to the needs of your application.
  2095.  
  2096. Of course (and I don't want to say that M[UMPS] is an object
  2097. oriented language, it's 30 years old now, and definitely showing
  2098. its age), this is a feature that you see a lot nowadays in
  2099. object oriented programming as well: you pass the complete object,
  2100. and leave it to the recipient-software to figure out which
  2101. properties of the object are interesting to it.
  2102.  
  2103.                                  [Ed de Moel]
  2104.  
  2105.  
  2106. ---------------------------
  2107.  
  2108. 33. M as a first computer language.
  2109.  
  2110. A lively debate concerning M as a first language for non computer types 
  2111. had varied and interesting opinions. Here are some of them;
  2112.  
  2113. --
  2114. From:  Paul Perrin
  2115.  
  2116. I think M is a *perfect* language to learn about fundamental programming 
  2117. principles.
  2118.  
  2119. Software engineering can come later - and is abusable in any language.
  2120.  
  2121. A computer handles three types of execution - sequential, conditional 
  2122. and iterative. Each type can be demonstrated (and learned) in M with 
  2123. _no_ messing about - no 'declarations', no 'introductions', no 
  2124. 'directives', no compiling etc...
  2125.  
  2126. Experienced programmers _forget_ how they learned to program - Ken 
  2127. Knecht's 1979 definition of a string in 'Microsoft Basic' from the 
  2128. dilithium Press as 'a group of alphanumeric characters surrounded by 
  2129. double quotes' left me blank for weeks - what did he mean by group?
  2130.  
  2131. Character mode M is (at least) as good as the original 'basic's were for 
  2132. discovering what computers can 'decide' and 'think' and 'store'.
  2133.  
  2134. Don't listen to the experts -- they forget from whence they came.
  2135.  
  2136. Show him M (and follow up with Java).
  2137.  
  2138. Regards
  2139.  
  2140. Paul Perrin 
  2141.  
  2142. --
  2143.  
  2144. From:              fbdennis@REMOVETOREPLYmindspring.com (Floyd Dennis)
  2145.  
  2146. Paul Perrin  wrote:
  2147.  
  2148. >I think M is a *perfect* language to learn about fundamental programming 
  2149. >principles.
  2150.  
  2151. For some reason, it surprises me that I tend to agree. <g>  Before a
  2152. "beginner" can even begin to grasp such things as "structured
  2153. programming", "top-down", etc., they have to get a good feel for the
  2154. basics.  Things like Control, ALU, I/O, and Storage.  M brings you a
  2155. lot closer to the basics than many higher(?)-level languages.
  2156.  
  2157. Also - for educational purposes, interpreted languages are great.
  2158. Nothing is going to give a better instant gratification kick than
  2159. being able to type a command directly and get an immediate answer. <g>
  2160.  
  2161. ><snip>
  2162. >Show him M (and follow up with Java).
  2163. >
  2164.  
  2165. *THAT* will send him running back to M in a hurry.  :)
  2166.  
  2167.  
  2168. Floyd Dennis
  2169.  
  2170.  
  2171.  
  2172. ---------------------------
  2173.  
  2174. 33. M as a web scripting language.
  2175.  
  2176. M has been used quite sucessfully as a web server / web scripting language as of late.
  2177. I look for more additions to the FAQ concerning this. 
  2178.  
  2179.  
  2180. First up is a description of the work done by Kevin O'Kane in this area:
  2181.  
  2182.  
  2183.  
  2184. M-based Internet Extentions / languages 
  2185.  
  2186.  
  2187. A. http://www.cs.uni.edu/~okane/ --   
  2188.  
  2189.       Kevin C. O'Kane 
  2190.           Resume 
  2191.           Schedule and Contact Information 
  2192.           This site contains a research Mumps interpreter for medical informatics
  2193.     applications. This interpreter  is for a subset dialect of Mumps and is
  2194.     designed to provide medical records access for Internet and Intranet Web
  2195.     servers.   This system works directly through the Web Server Cgi-Bin
  2196.     interface without the need for intermediate programs or files, unlike other
  2197.     systems. Versions are available for download for several systems as listed
  2198.     below.  The system is small, reliable, portable and extremely fast. A
  2199.     recent test of this system operating under Linux with the Apache web server
  2200.     on an unoptimized Pentium 120 gave data base response times in excess of 
  2201.     25 data base transactions per second. This result is scalable to larger
  2202.     processors and faster commercial servers. Due to the hierarchical nature of
  2203.     the data base, the data base is easily distributed among multiple servers. 
  2204.     See the documentation links below for complete details including
  2205.     downloading a prototype medical records system written in MumpsVM. 
  2206.         Documentation       MumpsVM Language Manual Including Prototype Medical
  2207.     Record System 
  2208.      
  2209.         [Steve Graham, <Steve.Graham@airmail.net>, January 26, 1998]
  2210.  
  2211.  
  2212.  
  2213. ---------------------------  End MFAQ Section 1  ----------------------
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219. -- 
  2220.   ''   Gardner S. Trask III                    trask@world.std.com      
  2221.  O\/O  "First .cultured man on the Internet"   alt.culture.gard-trask
  2222.  (  )  Creator of 'Circut, the Internet Owl(tm)'
  2223.   ""   Best One-Line Slam: 'You have a ponytail, don't you." -Alex Suter
  2224.