home *** CD-ROM | disk | FTP | other *** search
/ ftp.pasteur.org/FAQ/ / ftp-pasteur-org-FAQ.zip / FAQ / m-technology-faq / part2 < prev   
Text File  |  1998-06-21  |  51KB  |  1,254 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-out.internetmci.com!newsfeed.internetmci.com!206.251.127.50!worldfeed.gte.net!uunet!in2.uu.net!world!trask
  3. From: trask@world.std.com
  4. Subject: M Technology and MUMPS Language FAQ, Part 2/2
  5. Message-ID: <Euv8pM.MF1@world.std.com>
  6. Followup-To: comp.lang.mumps
  7. Summary: Should be read by those interested in M and those who wish to
  8.          post to the newsgroup comp.lang.mumps
  9. Sender: trask@world.std.com (Gardner S Trask)
  10. Reply-To: trask@world.std.com (FAQ Comments address)
  11. Organization: The World Public Access UNIX, Brookline, MA
  12. Date: Sat, 20 Jun 1998 19:56:10 GMT
  13. Approved: news-answers-request@MIT.EDU
  14. Lines: 1238
  15. Xref: senator-bedfellow.mit.edu comp.lang.mumps:10510 sci.med.informatics:10923 comp.answers:31790 news.answers:132872 sci.answers:8480
  16.  
  17. Archive-name: m-technology-faq/part2
  18. Last-modified: 04/06/1998
  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.  
  39. Editors: Gardner Trask, trask@world.std.com
  40.          Jon Diamond, jdiamond@btinternet.com
  41.  
  42. ---------------------------------------------------------
  43. Contents/Questions
  44.  
  45. [M FAQ - Part 1 of 2]
  46.  
  47. 1. What is M?
  48. 2. Where can I get a no-cost version of M?
  49. 3. What is comp.lang.mumps?  How can I subscribe to it?
  50. 4. What are some books about M?
  51. 5. What do M programmers love about M?
  52. 6. What things about M are generally disliked?
  53. 7. Why is M called a "database language?"
  54. 8. Is M an RDBMS?
  55. 9. Is M compiled or interpreted?
  56. 10. How fast is M?
  57. 11. Does M support Microsoft Windows and other GUIs?
  58. 12. Are there any M magazines or journals?
  59. 13. Which is the "official" name, M or MUMPS?
  60. 14. Is M a mainstream language?
  61. 15. Is M useful for non-medical applications?
  62. 16. Is M object-oriented?
  63. 17. Is M structured?
  64. 18. Is M suitable for multiuser systems?
  65. 19. Does M work on LANs?
  66. 20. Is M standard?
  67. 21. Is M portable?
  68. 22. How does M compare to SQL?
  69. 23. How does M compare to BASIC?
  70. 24. How does M compare to X-Base?
  71. 25. Are there M-based 4GLs and application generators?
  72. 26. Are there M bulletin boards? M FTP sites? M WEB sites? M Newsgroups?
  73. 27. "What happened in 1841?"
  74. 28. How do I list a global directory on this unfamiliar M system?
  75. 29. Do comments really affect efficiency?
  76. 30. What is the MDC?
  77. 31. A Brief History of M.
  78. 32. How exactly does $ORDER work?
  79. 33. M as a first computer language
  80.  
  81.  
  82. [M FAQ - Part 2 of 2]
  83. Appendix 1: List of M Vendors
  84. Appendix 2: The M Technology Association
  85. Appendix 3. USA Local M Users Groups
  86. Appendix 4: Is the official name of the language "M" or "MUMPS?"
  87. Appendix 5: A "secret decoder ring:" highlights of the M language
  88. Appendix 6: An example of "textbook" M coding style
  89. Appendix 7: An example of "traditional" M coding style
  90. Appendix 8: Mumps, A Solution Looking For A Problem, By Chris Richardson
  91. Appendix 9: Testimonials, Accolades, and Articles from outside the community.
  92. Appendix 10: Contact information: e-mail and URL's
  93. Appendix 11: FAQ Change history
  94.  
  95. ------------------------------------------------------------------
  96.  
  97.  
  98. Appendix 1: List of M Vendors
  99.  
  100.  
  101.  
  102. [1/08/95] InterSystems has acquired Digital's DSM product line.
  103.  
  104. Digital Equipment Corporation was formerly listed first (alphabetically) in 
  105. this section. According to material published by InterSystems corporation on 
  106. 1/2/95, specifically the files dsmpr.txt, dsmqam.txt, and dsmlet.txt in 
  107. their public FTP area, "Digital Equipment Corporation and InterSystems have 
  108. formed a strategic partnership to expand the worldwide use of M Technology, 
  109. particularly in the enterprise client/server arena.  Simultaneously, 
  110. InterSystems has acquired the DSM software product line, Digital's 
  111. implementation of M."  
  112.  
  113. "DSM will be marketed and sold by InterSystems' world-wide network of direct 
  114. sales staff and distributors.  In addition, Digital will continue to sell 
  115. DSM in Japan and to certain customers under existing multi-year contracts."
  116.  
  117. dsmqam.txt lists the following contacts for more information:
  118.  
  119.      Gerry Sunderland
  120.      Digital Equipment Corporation
  121.      151 Taylor Street  TAY1-1/B6
  122.      Littleton, MA  01460-1407  USA
  123.      Telephone: 508-952-4119
  124.  
  125.      Paul Schaut
  126.      InterSystems Corporation
  127.      One Memorial Drive
  128.      Cambridge, MA 02142 USA
  129.      Telephone: 617-621-0600
  130.      Fax: 617-494-1631
  131.      Internet: schaut@intersys.com
  132.  
  133.  
  134. Digital Equipment Corporation: see InterSystems corporation
  135.  
  136. Extensao Informatica e Tecnologia
  137. Rua da Gloria 290/10 andar
  138. 20241 Rio de Janeiro RJ, Brazil
  139. Phone: +55-21-224-9321
  140. Fax: +55-21-224-6044
  141. Contact: Luiz Carlos Lobo Filho
  142.  
  143. Greystone Technology Corporation
  144. 100 Unicorn Park Drave
  145. Woburn, MA 01801-6707, USA
  146. Phone: +1 617-637-9000
  147. Fax: +1 617-937-9022
  148. Contact: Chris Neikam
  149.  
  150. International Business Machines
  151. 1701 North St.
  152. Mail Drop G98G Bldg 017
  153. Endicott, NY 13760, USA
  154. Phone: +1 607-752-5179
  155. Contact: Frank Samuel
  156. Also: Offices is most countries
  157.  
  158. InterSystems Corporation
  159. One Memorial Drive
  160. Cambridge, MA 02142
  161. Phone: +1 617-621-0600
  162. Fax: +1 617-494-1631
  163. Contact: Maureen Flaherty
  164. Also: Offices in UK, Germany
  165.  
  166. MGlobal International, Inc.
  167. P.O. Box 459
  168. Orange, TX 77631
  169. Phone: +1 409-883-8537
  170. Fax: +1 409-883-3721
  171. Contact: David Brown
  172.  
  173. Micronetics Design Corporation
  174. 1375 Piccard Drive
  175. Rockville, MD 20850, USA
  176. Phone: +1 301-258-2605
  177. Fax: +1 301-840-8943
  178. WWW address:  www.micronetics.com
  179. Contact: Randy Crow, Janet Spadola, Aloysius Ring, John Streppa, Steve Obert
  180. Also: Offices in UK, Germany, Australia, and distributors worldwide 
  181.  
  182.  
  183. MUMPS Systems Laboratory
  184. 39-15 Daikan-cho
  185. Higashi-ku, Nagoya, Japan
  186. Phone: +81-52-936-5660
  187. Fax: +81-52-935-5435
  188. Contact: Ichiro Wakai, M.D
  189.  
  190. Patterson, Gray and Associates
  191. 1701 E. Woodfield Road
  192. Suite 850
  193. Schaumburg, IL 60173, USA
  194. Phone: +1 708-619-7500
  195. Fax: +1 708-619-7530
  196. Contact: Jeffrey Shirk
  197.  
  198. PFCS Corporation
  199. Post Office Box 1806
  200. Manchester, MO 63011-8806, USA
  201. Phone: +1 314-230-8847
  202. Fax: +1 314-230-9897
  203. Contact: Harlan Stenn
  204.  
  205. VISO-DATA Computer AG
  206. Rainergasse 1
  207. A-1040 Vienna, Austria
  208. Phone: +43-1-5055734
  209. Fax: +43-1-5055734-34
  210. Contact: Sandy R. Schorr
  211.  
  212.  
  213. ------------------------------------------------------------------------
  214. Appendix 2: The M Technology Association
  215.  
  216. For current pricing information, please contact the relevant group.
  217.  
  218. Membership for almost all MTAs includes:
  219.  - M Computing (technical journal)
  220.  - MTA's Annual Meeting (discount for members)
  221.  - The MTA Publications Library (discount for members)
  222.  
  223. MTA-North America also provides
  224.  - MSources (member, vendor, and business directory)
  225.  - MTA's Job Referral Service
  226.  - M Resource File
  227.  - M Technology Association BBS
  228.  
  229. Other MTAs provide additional services. For example M Professional 
  230. (technical journal from MTA-Europe).
  231.  
  232. M Technology Association 
  233. 1738 Elton Road, Suite 205 
  234. Silver Spring, MD 20903-1725 
  235. USA                             
  236. Phone: +1 301-431-4070 
  237. Fax: +1 301-431-0017 
  238. www.mtechnology.org
  239. email: mta@mtechnology.org
  240. Publication: M Computing
  241.  
  242. MTA-Europe
  243. c/o datika nv
  244. keerbergsesteenweg 19
  245. B-3150 Haacht
  246. Belgium
  247. phone : + 32 16 60 61 12
  248. fax : + 32 16 60 61 17
  249. e-mail : brothstein@compuserve.com
  250. Web page: http://www.mta-europe.org
  251.  
  252. There are official MTA's/MUG's associated with MTA-Europe in Belgium, the
  253. Netherlands, and Finland.  Spain and Italy have local groups who are not
  254. officially associated with MTA-Europe.  And of course, UK+Ireland and
  255. Germany have there own, realtively large groups, which are no longer
  256. affiliated with MTA-E.
  257.  
  258. There are also reported MTAs in Brazil, Bulgaria, China, Czech/Slovak 
  259. Republics, Germany, Ireland, Israel, Italy, Japan, and Russia.
  260. Confirmation would be appreciated. 
  261.  
  262. Please contact either of the above addresses for current information.
  263.  
  264.  
  265. ------------------------------------------------------------------------
  266.  
  267. Appendix 3. USA Local M Users Groups
  268.  
  269.  Baltimore-Washington MUG                    
  270.  
  271.  CONTACT: Susan Schluederberg                
  272.  The Connections Group, Ltd.                 
  273.  1100 Sunsett Drive
  274.  Bel Air, MD 21014 
  275.  Phone #: 410-838-6062                           
  276.                                                        
  277. COSTAR Users' Group 
  278. CONTACT: COSTAR Users' Group
  279. 23715 W. Malibu Road
  280. Malibu, CA 90265
  281. Phone #: 310-456-9322
  282. 810-869-6301
  283.  
  284.  
  285. Chicago Area LUG                                
  286. CONTACT: John Campbell on BBS         
  287. Phone #: 312-929-6793                           
  288.  
  289.  
  290. DECUS MUMPS SIG
  291. CONTACT: Mitch Bell
  292. 200 Rector Place, #9P
  293. New York, NY 10280
  294. Phone #: 212-657-3321                                                        
  295.  
  296.  
  297. Central Florida MUG                              
  298. (Orlando-Tampa) 
  299. 213 East Bay Street 
  300. Winter Gardens, FL 34787                    
  301. CONTACT: Mike Minor 
  302.          Mark Gerszewski                    
  303. Phone #: 407-656-4990                       
  304.          813-978-9181                               
  305.             
  306.  
  307. Delaware Valley MUG
  308. CONTACT: D-V MUG Coordinator
  309. P.O. Box 323
  310. Reading, PA 19607-0323                                                  
  311. Phone: 215-748-2145
  312.  
  313.  
  314. MUMPS of Georgia (MGA)
  315. 8351 Roswell Road  Suite 221
  316. Atlanta, Georgia 30350
  317. Secretary's phone: 1.770.968.3715
  318. email: mga@mindspring.com
  319. website:  http://www.mindspring.com/~mga/
  320.  
  321.  
  322. La MUG (Los Angeles)
  323. Contact: Steve Atlas
  324. 5408 Rozie Ave.
  325. Woodland Hills, CA 91367
  326. Phone #: 818-883-1206
  327.                                  
  328.                                                                   
  329.  
  330. Minnesota M Users' Group                    
  331. (Minneapolis-St. Paul) 
  332. CONTACT: Chris Hawkins 
  333. P.O. Box 14486 
  334. Minneapolis, MN 55414            
  335. Phone #: 612-627-6166               
  336.                                       
  337.  
  338. New England MUG (Boston)
  339. CONTACT: Gardner Trask 508-927-7637
  340. 7 Galloupe Avenue
  341. Beverly, MA. 01915
  342.  
  343.  
  344. Pacific Northwest MUG                           
  345. (Seattle)                                             
  346. CONTACT: Arden Forrey                       
  347. Health Info. Admin. Program 
  348. Dept. of Health Services                        
  349. School of Public Health and                      
  350. Community Medicine                               
  351. 1107 NE 45th St., #355
  352. Seattle, WA 98105
  353. Phone #: 206-543-8810                 
  354.  
  355.  
  356. Pittsburgh Regional MUG
  357. CONTACT: Bill Harvey
  358. Computer Information Systems
  359. Robert Morris College
  360. 600 5th Ave.
  361. Pittsburgh, PA 15219-3099
  362. Phone #: 412-262-8467
  363.  
  364.  
  365. San Francisco Area MUG 
  366. CONTACT: Julie Dijailia                          
  367. 51 Ridgewood Ave.                                
  368. San Francisco, CA 94112                              
  369. Phone #: 415-262-8467                            
  370.                                                        
  371.                                                       
  372. Southwest MUG (Dallas-Fort Worth)
  373. CONTACTS: Carol Anzaldua, Peter Flores
  374. 1901 North Highway 360, #351
  375. Grand Prairie, TX 75050
  376. Phone: 817-633-3944
  377. 214-437-5255                                                
  378.  
  379.  
  380. Sunshine MUG                                    
  381. (Southern Florida)                               
  382. CONTACT: Mark Fedora                        
  383. Phone #: 305-882-5319                            
  384. Eastern Financial Credit Union 
  385. 700 South Poinciana Blvd.              
  386. Miami Springs, FL 33166                
  387. CONTACT: Rob Atlas                     
  388. Phone #: 407-394-5888                  
  389.  
  390.  
  391. Tri-State LUG (New York)
  392. CONTACT: Mitch Bell
  393. 200 Rector Place, #9P
  394. New York, NY 10280
  395. Phone #: 212-657-3321
  396.  
  397.  
  398. ------------------------------------------------------------------------
  399.  
  400. Appendix 4: Is the official name of the language "M" or "MUMPS?"
  401.  
  402. This is the M community's very own little religious war. Not everyone 
  403. prefers the name M.  Many feel strongly about the issue. Ed de Moel says 
  404. that "within the M[UMPS] community, there is a strong sentiment that MUMPS 
  405. is not the right name for the language; there is an (equally?) strong 
  406. sentiment that MUMPS is a better name than any of the proposed 
  407. alternatives."
  408.  
  409. All of the following opinions can and have been supported:
  410.  
  411.      The name became M in 1993.
  412.      The name will become M when the new ANSI standard is adopted.
  413.      Both M and MUMPS are officially accepted names.
  414.      M is only an "alternate name" or "nickname" for the language.
  415.  
  416. The following samples show the diversity of opinions.  I have given Ed de 
  417. Moel, a member of the MUMPS Development Committee, the last word.  (However, 
  418. it is possible to find other views within the MDC membership).
  419.  
  420.      [DPBS]
  421.  
  422. I'm curious as to how long it will take "M" to fully replace "MUMPS". I was 
  423. disappointed that [comp.lang.mumps] wasn't created with that name.
  424.  
  425.      [Russell Haddleton]
  426.  
  427. The name of the language is MUMPS.  'M Technology' is a marketing ploy that 
  428. ignores the language; what it's called doesn't change what it IS. (The MDC 
  429. has NOT changed the name of the language as far as I know -- they permitted 
  430. M as an alternate name)
  431.  
  432.      [Ben Bishop]
  433.  
  434. The name of the group should be comp.lang.m. I understand the issue of 
  435. "grep'ing" on M prohibitive, but I can't see throwing out all the hard work 
  436. of the MTA. M is the name.
  437.  
  438.      [Gardner Trask]
  439.  
  440. DSM stands for Digital Standard M now. In recent advertising DataTree refers 
  441. to their product as DataTree M.
  442.  
  443. I thought the official name of the language was M too, but this is not the 
  444. case. The primary name for the language is still MUMPS.  The ANSI standard 
  445. refers to the language as MUMPS with M as an alternate name.  The M 
  446. Technology Association decided to use M as the primary _reference_ to the 
  447. language MUMPS.
  448.  
  449.      [Doug Preiser]
  450.  
  451. > Can anyone think of something you can do in some other language
  452. > that you can't do in MUMPS ?
  453.  
  454. Well, let's try using 'M' instead of MUMPS for a start, before any
  455. XJ-11 people start flaming. 
  456.  
  457.      [Richard Nason]
  458.  
  459. M is a well-accepted nickname for a programming language called MUMPS. 
  460. MUMPS, in turn, is an acronym that stands for Massachusetts (General 
  461. Hospital) Utility Multi Programming System.
  462.  
  463. MUMPS is a language that goes by many names. Since a number of years, there 
  464. has been a strong movement to change the name of the language to something 
  465. else than MUMPS, countered by an equally strong movement to keep the name as 
  466. is was.
  467.  
  468. The first official request to change the name of the language to "M" was in 
  469. 1980, when Terry Ragon (now president of InterSystems) wrote a letter to the 
  470. MUMPS Development Committee, requesting this change. At that moment in time, 
  471. it was decided to keep the name MUMPS, but the movement to change the name 
  472. did not disappear.
  473.  
  474. Over the years, there has been a number of informal requests to change the 
  475. name of the language, but, oddly, there never was a formal proposal to do 
  476. this before the MUMPS Development Committee (the only body that can change 
  477. the name of the language).
  478.  
  479. The only thing that happened officially was that the nickname "M" became 
  480. accepted as an alternate name. The language is still officially called 
  481. MUMPS. Other official designations are ANSI X11.1 (1990) and ISO 11756 
  482. (1991).
  483.  
  484. Several of the user's groups have adopted the nickname, and changed their 
  485. name to reflect that adoption, so we now have a MTA (USA), MTA-Japan, MTA-
  486. Europe, but Germany uses MUG-Deutschland (M Users Group) and Soyuz-DIAMS in 
  487. Russia.
  488.  
  489. The most recent formal resolution that was passed by the MUMPS Development 
  490. Committee regarding the name was to use the nickname throughout the document 
  491. that is currently being circulated through the canvass process as the new 
  492. draft ANSI standard.  Evidently, this strongly promotes the use of the 
  493. nickname over the 'real' name, but it still doesn't change the name of the 
  494. language.
  495.  
  496. Maybe one day, someone will submit a formal proposal to the MUMPS 
  497. Development Committee, but until such a proposal is submitted and favourably 
  498. voted upon, "M" will remain a (well accepted) nickname for MUMPS.
  499.  
  500.      [Ed de Moel]
  501.  
  502. ------------------------------------------------------------------------
  503. Appendix 5: A "secret decoder ring:" highlights of the M language
  504.  
  505. This incomplete, informal sketch seeks to give programmers familiar with 
  506. other languages a feeling for what M is like.  It doesn't tell you enough to 
  507. write M code; it may help you to read it.  Neither the language description 
  508. and the descriptions of each feature are complete, and many very significant 
  509. features have been omitted for brevity.
  510.  
  511. DATA TYPES: one universal datatype, interpreted/converted to string, 
  512. integer, or floating-point number as context requires. Like Visual BASIC 
  513. "variant" type.
  514.  
  515. BOOLEANS: In IF statements and other conditionals, any nonzero value is 
  516. treated as True.  a<b yields 1 if a is less than b, 0 otherwise.
  517.  
  518. DECLARATIONS: NONE. Everything dynamically created on first reference.
  519.  
  520. LINES: important synactic entities. Multiple statements per line are 
  521. idiomatic. Scope of IF and FOR is "remainder of current line."  
  522.  
  523. CASE SENSITIVITY: Commands and intrinsic functions are case-insensitive.  
  524. Variable names and labels are case-sensitive.  No specified meaning for 
  525. upper vs. lower-case and no widely accepted conventions.  Percent sign (%) 
  526. is legal as first character of variables and labels. 
  527.  
  528. POSTCONDITIONALS: SET:N<10 A="FOO"  sets A to "FOO" if N is less than 10; 
  529. DO:N>100 PRINTERR performs PRINTERR if N is greater than 100. Provides a 
  530. conditional whose scope is less than the full line.
  531.  
  532. ARRAYS: created dynamically, stored sparsely as B-trees, any number of 
  533. subscripts, subscripts can be strings or integers. Always automatically 
  534. stored in sorted order. $ORDER and $QUERY functions allow traversal.
  535.  
  536.      for i=10000:1:12345 set sqtable(i)=i*i
  537.      set address("Smith","Daniel")="dpbsmith@world.std.com"
  538.  
  539. LOCAL ARRAYS: names not beginning with caret; stored in process space; 
  540. private to your process; expire when process terminates; available storage 
  541. depends on partition size but is typically small (32K)
  542.  
  543. GLOBAL ARRAYS: ^abc, ^def. Stored on disk, available to all processes, 
  544. persist when process terminates. Very large globals (hundreds of megabytes) 
  545. are practical and efficient. This is M's main "database" mechanism. Used 
  546. instead of files for internal, machine-readable recordkeeping.
  547.  
  548. INDIRECTION: in many contexts, @VBL can be used and effectively substitutes 
  549. the contents of VBL into the statement. SET XYZ="ABC" SET @XYZ=123 sets the 
  550. variable ABC to 123. SET SUBROU="REPORT" DO @SUBROU performs the subroutine 
  551. named REPORT. Operational equivalent of "pointers" in other languages.    
  552.  
  553. PIECE FUNCTION: Treats variables as broken into pieces by a separator. 
  554. $PIECE(STRINGVAR,"^",3) means the "third caret-separated piece of 
  555. STRINGVAR." Can appear as an assignment target. After 
  556.  
  557.     SET X="dpbsmith@world.std.com" 
  558.  
  559. $PIECE("world.std.com",".",2) yields "std".  SET $P(X,"@",1)="office" causes 
  560. X to become "office@world.std.com".
  561.  
  562. ORDER FUNCTION:
  563.  
  564.      Set stuff(6)="xyz",stuff(10)=26,stuff(15)=""  
  565.  
  566. $Order(stuff("")) yields 6, $Order(stuff(6)) yields 10, $Order(stuff(8)) 
  567. yields 10, $Order(stuff(10)) yields 15, $Order(stuff(15)) yields "". 
  568.  
  569.      Set i="" For  Set i=$O(stuff(i)) Quit:i=""  Write !,i,?10,stuff(i)
  570.  
  571. The argumentless For iterates until stopped by the Quit.  Prints a table of 
  572. i and stuff(i) where i is successively 6, 10, and 15. 
  573.  
  574. COMMANDS: may be abbreviated to one letter, case-insensitive.
  575.  
  576.    DO XYZ                        call subroutine at label XYZ
  577.    DO PQR(arg1,arg2,arg3)        call with parameter passing
  578.    ELSE  stmnt1 stmnt2 stmnt3    opposite of last IF
  579.    FOR  stmnt1 stmnt2 stmnt3     repeat until a QUIT breaks you out
  580.    FOR i=1:1:100 stmnt1 ...      iteration, i=1, 2, 3, ... 100
  581.    GOTO                          yes, there is one
  582.    IF cnd stmnt1 stmnt2 stmnt3   conditionally execute rest of line 
  583.    KILL vbl                      return vbl to "undefined" state
  584.    NEW vbl1,vbl2,vbl3            stack old values, create fresh
  585.                                  "undefined" state. Pop on QUIT.
  586.    QUIT                          return from subroutine
  587.    QUIT value                    return from extrinsic function
  588.    READ "Prompt:",x              on current I/O stream, first write
  589.                                  "Prompt:", then read line into variable x  
  590.    SET a=22,name="Dan",(c,d)=0   variable assignment
  591.    USE 23                        switch I/O stream to device 23
  592.    WRITE !,"x=",x                output to current I/O stream. ! = new line
  593.    XECUTE("set a=5 do xyz")      execute arbitrary data as M code
  594.  
  595. OPERATORS:  No precedence, executed left to right, parenthesize as desired. 
  596. 2+3*10 yields 50.
  597.  
  598.    +  -  *  /                  sum, difference, product, quotient
  599.    \                           integer division, 1234\10 yields 123
  600.    #                           modulo
  601.    _                           concatenation, "nice"_2_"use" --> "nice2use"
  602.    & ! ' <  >                  and, or, not, less, greater, equal
  603.    [                           string contains.  "ABCD"["BC" --> 1
  604.    ]                           string lexically follows. "Z"]"A" --> 1
  605.    ?                           pattern match operator
  606.  
  607. INTRINSIC (built-in) FUNCTIONS:
  608.  
  609. Important structural components of the language (not commonly
  610. found in other languages):
  611.  
  612.    $DATA(V)                    tests if a V is defined (has data) or not
  613.    $ORDER, $QUERY              traverse arrays in sorted order
  614.    $ORDER(a("abc"))            value v is the next subscript, following
  615.                                "abc", according to the M collating sequence,
  616.                                such that a(v) is defined.                   
  617.    $PIECE                      see above
  618.    $SELECT(c1:v1,c2:v2,1:v3)   if c1 is true yields v1, else if c2 is true
  619.                                yields v2, otherwise yields v3          
  620.    $TEXT(FOO+3)                returns text of source code at line FOO+3
  621.  
  622. Convenience functions similar to library functions in other languages:
  623.  
  624.    $ASCII, $CHAR               text-to-ASCII-code and inverse
  625.    $EXTRACT(string,5,10)       characters 5 through 10 of string; may be
  626.                                assignment target
  627.    $FIND(string,find,from)     substring search
  628.    $FNUMBER                    floating point formatting
  629.    $LENGTH(string)             just what you think
  630.    $RANDOM(100)                random # in range 0 to 99 inclusive
  631.    $TRANSLATE("abcd","ab","AB") character substitution; yields "ABcd"
  632.  
  633.  
  634.    [DPBS]
  635. ------------------------------------------------------------------------
  636. Appendix 6: An example of "textbook" M coding style
  637.  
  638. This is based on an example from a well-known M textbook, "The Complete 
  639. MUMPS" by John Lewkowicz.  It shows how M can support a "modern" appearance 
  640. and coding style.  See notes below for more detail.  Lines are numbered for 
  641. reference only; the line numbers are NOT part of the M code.     
  642.  
  643.  1 zsample ;dpb;09:18 PM  6 Aug 1994
  644.  2 
  645.  3         ;Test the Stats routine:        
  646.  4         ;Calculate 1000 points w. approx. Gaussian distribution,
  647.  5         ;then call Stats on the result
  648.  6         ;Execution time: 5 seconds with DTM on a 33 MHz 386DX
  649.  7 
  650.  8         New Data,i,j,output
  651.  9         For i=1:1:1000 Set Data(i)=$$Normal
  652. 10         Do Stats("Data",.output)
  653. 11         Write !,output
  654. 12         Quit
  655. 13      
  656. 14         ;------------------------------------------------------------
  657. 15         ;Based on Lewkowicz, "The Complete MUMPS," examples 9.15-9.17
  658. 16         ;Modified slightly:
  659. 17         ;Used argumentless Do instead of two If's for Num>1 block
  660. 18         ;Corrected calculation of the standard error
  661. 19         ;------------------------------------------------------------
  662. 20      
  663. 21 Stats(Ref,Results) ; Calculate simple Statistics on Array nodes
  664. 22         New High,i,Low,Mean,Num,StdDev,StdErr,s,Sum,SumSQ,Var
  665. 23         Set High=-1E25,Low=1E25,(Sum,SumSQ,Num)=0,s=""
  666. 24         For  Set s=$O(@Ref@(s)) Q:s=""  Do StatsV(@Ref@(s))
  667. 25         If 'Num Set Results="" Goto StatsX
  668. 26         Set Mean=Sum/Num
  669. 27         Set (StdDev,StdErr,Var)=""
  670. 28         If Num>1 Do
  671. 29         . Set Var=-Num*Mean*Mean+SumSQ/(Num-1)
  672. 30         . Set StdDev=$$SQroot(Var)
  673. 31         . Set StdErr=StdDev/$$SQroot(Num)
  674. 32         Set Results=Num_";"_Low_";"_High_";"_Mean
  675. 33         Set Results=Results_";"_Var_";"_StdDev_";"_StdErr
  676. 34         Goto StatsX
  677. 35 StatsV(Val) ;Process an individual value
  678. 36           Set Val=$$NumChk(Val) Quit:Val=""
  679. 37          Set Num=Num+1,Sum=Sum+Val,SumSQ=Val*Val+SumSQ
  680. 38          Set:Val<Low Low=Val Set:Val>High High=Val
  681. 39          Quit
  682. 40 StatsX   Quit
  683. 41 
  684. 42 SQroot(Num) ;Return the SQUARE ROOT of abs(Num)
  685. 43         New prec,Root Set Root=0 Goto SQrootX:Num=0
  686. 44         Set:Num<0 Num=-Num Set Root=$S(Num>1:Num\1,1:1/Num)
  687. 45         Set Root=$E(Root,1,$L(Root)+1\2) Set:Num'>1 Root=1/Root
  688. 46         For prec=1:1:6 Set Root=Num/Root+Root*.5
  689. 47 SQrootX      Quit Root
  690. 48 
  691. 49 NumChk(Data,Range,Dec) ;Check for valid NUMBER
  692. 50         Set Data=$TR(Data,"+ $,")
  693. 51         Goto NumChkE:Data'?.E1N.E,NumChkE:Data'?."-".N.".".N
  694. 52         If $D(Dec),Dec?1N.N g NumChkE:$L($P(Data,".",2))>Dec
  695. 53         Set:'$D(Range) Range="" Set:Range="" Range="-1E25:1E25"
  696. 54         If $P(Range,":")'="" Goto NumChkE:Data<$P(Range,":")
  697. 55         If $P(Range,":",2)'="" Goto NumChkE:Data>$P(Range,":",2)
  698. 56         Set Data=+Data Goto NumChkX
  699. 57 NumChkE      Set Data=""
  700. 58 NumChkX Quit Data
  701. 59      ;
  702. 60      ;------------------------------------------------------------------
  703. 61      ;
  704. 62      ;Part of demo/test code, Dan Smith, 8/26/94
  705. 63 Normal() ;Return random # with approximately Gaussian distribution
  706. 64         New i,x,n ;n=# iterations
  707. 65         Set x=0,n=3 ;Higher n = slower, better Gaussian approximation
  708. 66         ;$random(1201) has approx. mean=600, variance=120000
  709. 67         For i=1:1:n*n Set x=x+$random(1201)-600
  710. 68         Set x=x/(346.4101615*n) ;variance now 1
  711. 69         Quit x
  712.  
  713. [Lines 21-58 are from Examples 9.15, 9.17 and 9.18 of "The Complete MUMPS," 
  714. by John Lewkowicz, ISBN 0-13-162141-6, 1989, Prentice-Hall, Englewood Cliff, 
  715. New Jersey and are copyright 1989 by Prentice-Hall, Inc.  Permission to use 
  716. these examples has been solicited from Prentice-Hall, but no reply has been 
  717. received.  This Appendix may be modified or omitted in future versions if 
  718. Prentice-Hall objects to its inclusion].
  719.  
  720. Notes:
  721.  
  722. Line 8:
  723.  
  724. Command names: Command names in M are case-insensitive, and may either be 
  725. spelled out in full or abbreviated to a single character.  Thus, the NEW 
  726. command could be written as "NEW" or "New" or "new" or "N" or "n".  
  727. Lewkowicz consistently spells them out in full, with mixed case.
  728.  
  729. NEW command: This is not a declaration, but an executable command.  In M, 
  730. this is the way you effectively make a variable private to a subroutine.  On 
  731. entry to zsample, the variables Data, i, j, and output may or may not have 
  732. values.  The New command stacks the old identity of these variables, which 
  733. now become undefined.  zsample may freely use the variables.  On Quit-ing 
  734. from the subroutine, any values the subroutine established for them are 
  735. discarded and the old values restored.
  736.  
  737. It is good practice to New the variables used for temporary storage within a 
  738. subroutine, and some programmers do this systematically.  Lewkowicz does it, 
  739. and alphabetizes the order of the names in the New list to make maintenance 
  740. easier.
  741.  
  742. Lines 8, 10, and 21: Passing an array reference as an argument.  "Stats"
  743. is a subroutine which takes a parameter list.  It is designed to work 
  744. generally using any array, local or global, or array reference.  The 
  745. argument that is passed is a string; here, the string "Data", which names a 
  746. local array.  Within the subroutine, the "subscript indirection" mechanism 
  747. is used; i.e. because Ref has been set equal to the string "Data", the 
  748. expression @Ref@(s) refers to Data(s). If Ref were set to "^Permanent", the 
  749. expression @Ref@(s) would refer to ^Permanent(s).  Ref could also be set to 
  750. an array subnode.
  751.  
  752. Line 28: An "argumentless DO."  This structure causes the set of lines 
  753. beginning with periods to be executed.  Argumentless "DO's" can be nested.  
  754. They stack and restore the value of $T.  Using these tools it is possible to 
  755. write nested "If-Else" structures that behave as expected. 
  756.  
  757.     If condition1 Do
  758.     . If condition2 Do
  759.     . . <code> ;executes if condition1 and 2 are both true
  760.     . . <code>
  761.     . . <code>
  762.     . Else  Do
  763.     . . <code> ;executes if condition1 is true but not condition2
  764.     . . <code>
  765.     . . <code>
  766.     Else  Do
  767.     . <code> ;executes if condition1 is false
  768.     . <code>
  769.     . <code>
  770.     
  771.  
  772. ------------------------------------------------------------------------
  773.  
  774. Appendix 7: An example of "traditional" M coding style
  775.  
  776. %DTC
  777. %DTC ; SF/XAK - DATE/TIME OPERATIONS ;1/16/92  11:36 AM
  778.      ;;19.0;VA FileMan;;Jul 14, 1992
  779.      D    I 'X1!'X2 S X="" Q
  780.      S X=X1 D H S X1=%H,X=X2,X2=%Y+1 D H S X=X1-%H,%Y=%Y+1&X2
  781.      K %H,X1,X2 Q
  782.      ;
  783. C    S X=X1 Q:'X  D H S %H=%H+X2 D YMD S:$P(X1,".",2) X=X_"."_$P(X1,".",2) 
  784. K X1,X2 Q
  785. S    S %=%#60/100+(%#3600\60)/100+(%\3600)/100 Q
  786.      ;
  787. H    I X<1410000 S %H=0,%Y=-1 Q
  788.      S %Y=$E(X,1,3),%M=$E(X,4,5),%D=$E(X,6,7)
  789.      S %T=$E(X_0,9,10)*60+$E(X_"000",11,12)*60+$E(X_"00000",13,14)
  790. TOH  S 
  791. %H=%M>2&'(%Y#4)+$P("^31^59^90^120^151^181^212^243^273^304^334","^",%M)+%D
  792.      S %='%M!'%D,%Y=%Y-141,%H=%H+(%Y*365)+(%Y\4)-(%Y>59)+%,%Y=$S(%:-
  793. 1,1:%H+4#7)
  794.      K %M,%D,% Q
  795.      ;
  796. DOW  D H S Y=%Y K %H,%Y Q
  797. DW   D H S Y=%Y,X=$P("SUN^MON^TUES^WEDNES^THURS^FRI^SATUR","^",Y+1)_"DAY"
  798.      S:Y<0 X="" Q
  799. 7    S %=%H>21608+%H-.1,%Y=%\365.25+141,%=%#365.25\1
  800.      S %D=%+306#(%Y#4=0+365)#153#61#31+1,%M=%-%D\29+1
  801.      S X=%Y_"00"+%M_"00"+%D Q
  802.      ;
  803. YX   D YMD S Y=X_% G DD^%DT
  804. YMD  D 7 S %=$P(%H,",",2) D S K %D,%M,%Y Q
  805. T    F %=1:1 S Y=$E(X,%) Q:"+-"[Y  G 1^%DT:$E("TODAY",%)'=Y
  806.      S X=$E(X,%+1,99) G PM:Y="" I +X'=X D DMW S X=%
  807.      G:'X 1^%DT
  808. PM   S @("%H=$H"_Y_X) D TT G 1^%DT:%I(3)'?3N,D^%DT
  809. N    F %=2:1 S Y=$E(X,%) Q:"+-"[Y  G 1^%DT:$E("NOW",%)'=Y
  810.      I Y="" S %H=$H G RT
  811.      S X=$E(X,%+1,99)
  812.      I X?1.N1"H" S X=X*3600,%H=$H,@("X=$P(%H,"","",2)"_Y_X),%=$S(X<0:-
  813. 1,1:0)+(X\86400),X=X#86400,%H=$P(%H,",")+%_","_X G RT
  814.      D DMW G 1^%DT:'% S @("%H=$H"_Y_%),%H=%H_","_$P($H,",",2)
  815. RT   D TT S %=$P(%H,",",2) D S S %=X_% I %DT'["S" S %=+$E(%,1,12)
  816.      Q:'$D(%(0))  S Y=% G E^%DT
  817. PF   S %H=$H D YMD S %(9)=X,X=%DT["F"*2-1 I @("%I(1)*100+%I(2)"_$E("> 
  818. <",X+2)_"$E(%(9),4,7)") S %I(3)=%I(3)+X
  819.      Q
  820. TT   D 7 S %I(1)=%M,%I(2)=%D,%I(3)=%Y K %M,%D,%Y Q
  821. NOW  S %H=$H,%H=$S($P(%H,",",2):%H,1:%H-1)
  822.      D TT S %=$P(%H,",",2) D S S %=X_$S(%:%,1:.24) Q
  823. DMW  S %=$S(X?1.N1"D":+X,X?1.N1"W":X*7,X?1.N1"M":X*30,+X=X:X,1:0)
  824.      Q
  825. COMMA     ;
  826.      S %D=X<0 S:%D X=-X S %=$S($D(X2):+X2,1:2),X=$J(X,1,%),%=$L(X)-3-
  827. $E(23456789,%),%L=$S($D(X3):X3,1:12)
  828.      F %=%:-3 Q:$E(X,%)=""  S X=$E(X,1,%)_","_$E(X,%+1,99)
  829.      S:$D(X2) X=$E("$",X2["$")_X S X=$J($E("(",%D)_X_$E(" )",%D+1),%L) K 
  830. %,%D,%L
  831.      Q
  832. HELP S DDH=$S($D(DDH):DDH,1:0),A1="Examples of Valid Dates:" D %
  833.      S A1="  JAN 20 1957 or 20 JAN 57 or 1/20/57"_$S(%DT'["N":" or 
  834. 012057",1:"") D %
  835.      S A1="  T   (for TODAY),  T+1 (for TOMORROW),  T+2,  T+7,  etc." D %
  836.      S A1="  T-1 (for YESTERDAY),  T-3W (for 3 WEEKS AGO), etc." D %
  837.      S A1="If the year is omitted, the computer "_$S(%DT["P":"assumes a 
  838. date in the PAST.",1:"uses the CURRENT YEAR.") D %
  839.      I %DT'["X" S A1="You may omit the precise day, as:  JAN, 1957" D %
  840.      I %DT'["T",%DT'["R" G 0
  841.      S A1="If the date is omitted, the current date is assumed." D %
  842.      S A1="Follow the date with a time, such as JAN 20@10, T@10AM, 10:30, 
  843. etc." D %
  844.      S A1="You may enter a time, such as NOON, MIDNIGHT or NOW." D %
  845.      I %DT["S" S A1="Seconds may be entered as 10:30:30 or 103030AM." D %
  846.      I %DT["R" S A1="Time is REQUIRED in this response." D %
  847. 0    Q:'$D(%DT(0))
  848.      S A1=" " D % S A1="Enter a date which is "_$S(%DT(0)["-
  849. ":"less",1:"greater")_" than or equal to " D %
  850.      S Y=$S(%DT(0)["-":$P(%DT(0),"-",2),1:%DT(0)) D DD^%DT:Y'["NOW"
  851.      I '$D(DDS) W Y,"." K A1 Q
  852.      S DDH(DDH,"T")=DDH(DDH,"T")_Y_"." K A1 Q
  853.      ;
  854. %    I '$D(DDS) W !,"     ",A1 Q
  855.      S DDH=DDH+1,DDH(DDH,"T")="     "_A1 Q
  856.  
  857.  
  858. [NOTE: this example is extracted from VA FileMan Version 19.0.  There is no 
  859. copyright notice in the text of the source code or any of the accompanying 
  860. documents; FMANPROG.TXT and FMANUSER.TXT each specifically contain the 
  861. statement "VA FileMan is a public domain software package that is developed 
  862. and maintained by the Department of Veterans Affairs."  I therefore believe 
  863. no permission is required to reproduce this passage.--Daniel P. B. Smith]
  864.  
  865. 1) The "New" command is not used; all variables are treated as universal in 
  866. scope.
  867.  
  868. 2) There is no use of the DO parameter passing mechanism, and no use of 
  869. extrinsic functions.  Information is passed in and out of subroutines by 
  870. setting variables.  
  871.  
  872. Practices 1 and 2 make it difficult to understand which variables are used 
  873. for input, which for output, and which are for temporary local processing 
  874. (and could just as well be private to the routine).  They also make it 
  875. difficult to add new code to a project because of the possibility of 
  876. variable name conflicts.  
  877.  
  878. 3) M commands are uniformly abbreviated to a single character.
  879.  
  880. 4) Variable names are short, frequently a single character.  The single 
  881. percent sign is used as a variable name, and also as an array.
  882.  
  883. 5) Labels are short.  Some label consist of single characters or even single 
  884. numerals.  The percent sign is used as a label. 
  885.  
  886. Practices 3, 4, and 5 make the code difficult to read for novices, but are 
  887. much less of a problem for experienced M programmers.  
  888.  
  889. It can be argued practice 3 is beneficial because it aids in visual 
  890. identification of "argumentless" commands.  In M, "argumentless" commands 
  891. ("Do", "Quit", "For") are semantically different from same commands with 
  892. arguments ("Do REPORT","Quit retvalue", "For I=1:1:100").  Unfortunately, 
  893. the M whitespace rules say that a command and its arguments must be 
  894. separated by precisely one space, and an "argumentless" command is 
  895. identified by being followed by two or more spaces.
  896.  
  897. 6) Some lines are considerably in excess of 80 characters and wrap
  898. when displayed or printed. 
  899.  
  900. Line scope is significant in M; "For" and "If" operate on the rest of the 
  901. current line.  Multistatement lines are natural to M, and M permits lines to 
  902. be up to 255 characters long.  When the natural logic of a statement calls 
  903. for more than eighty characters, the programmer can choose to write a long 
  904. line, or rework the logic to avoid this.  The argumentless DO and block 
  905. structure make this easy to do; for example
  906.  
  907.      I X?1.N1"H" S X=X*3600,%H=$H,@("X=$P(%H,"","",2)"_Y_X),%=$S(X<0:-
  908. 1,1:0)+(X\86400),X=X#86400,%H=$P(%H,",")+%_","_X G RT
  909.  
  910.       can be rewritten as
  911.  
  912.      If X?1.N1"H" Do  Go RT
  913.       . Set X=X*3600,%H=$H,@("X=$P(%H,"","",2)"_Y_X)
  914.      . Set %=$S(X<0:1,1:0)+(X\86400)
  915.      . Set X=X#86400,%H=$P(%H,",")+%_","_X
  916.  
  917. However, some programmers see no need for this, and just as there are syntax 
  918. purists, there are efficiency purists who will point out that the rewritten 
  919. version must take at least some additional execution time and must consume 
  920. at least some additional program space.
  921.  
  922. 7) There are eleven goto (G) statements.  Note that six of them
  923. transfer control to labels in routines other than %DTC itself.
  924.  
  925. 8) The only uses of comments are the two heading lines, and in blank
  926. lines used to separate subroutines for readability.
  927.  
  928. -------------------------------------------------------------------------------------------
  929.  
  930. Appendix 8: Mumps, A Solution Looking For A Problem, By Chris Richardson
  931.  
  932.  
  933. This article on MUMPS appeared in an old issue of a computer newsletter:
  934.  
  935. Mumps, A Solution Looking For A Problem
  936. By Chris Richardson
  937.  
  938. (Copyright (c) 1993 Personal Systems, the monthly journal of the San
  939. Diego Computer Society; all rights reserved. Permission to reproduce
  940. this article is granted to other non-profit organizations such as
  941. computer user groups for non-commercial use as long as credit to the
  942. author and group is given and provided a copy of the newsletter is 
  943. sent to us at: San Diego Computer Society, ATTN: Editor, Personal
  944. Systems; 5694 Mission Center Road; Suite 602, Box 350; San Diego, CA
  945. 92108)
  946.  
  947.  
  948.  
  949. What is MUMPS?  Is it a programming language that thinks it is a
  950. database, or is it a database that thinks it is a programming
  951. language?  Actually, it is both.  And it is an ANSI Standard Language
  952. to boot.  
  953.  
  954. What does that mean to anyone who is knocking out little
  955. applications on a home PC or Apple?  Well, the nice thing about an
  956. ANSI Standard language is that the code you write on the Apple in
  957. standard MUMPS transports nicely to the IBM PC without any change. 
  958. And if that other system is a mainframe, like a Vax or a large IBM
  959. system, your application will work there also.
  960.  
  961. Where did MUMPS come from and what does MUMPS stand for?  MUMPS was
  962. originally developed in the middle 60's on a National Institute of
  963. Health Grant at Massachusetts General Hospital.  It was originally
  964. designed to run on a large machine (at that time...) 4K of memory
  965. (that is 4,000 bytes, not megabytes) and 100 megabyte disk storage.  
  966.  
  967. If it was written by a hospital, does it only do hospital problems? 
  968. It was designed to solve the problem of tracking patient data.  How
  969. does patient data differ from auto supply inventory or a check book? 
  970. A patient can have many attributes that describe each encounter.  For
  971. instance, suppose a patient gets admitted to a hospital with a
  972. traditional square record database, and is known to have six 
  973. allergies, but there is only room for five allergies in the record.
  974.  
  975. Which allergy will you elect not to record?  If this patient dies
  976. because of that one allergy that you did not record, your hospital may
  977. change ownership in settling his estate.  For the majority of
  978. patients, the space reserved for the five allergies will not be used
  979. and is wasted space.  That means that your hospital will be buying
  980. more disk space a lot sooner.
  981.  
  982. In the MUMPS environment, the database disk space is not allocated
  983. until it is needed (run-time).  This means that the patient record
  984. expands to fit the amount of data required for that patient.  If the
  985. space is not used, it is not allocated.  If you have 12 patients in
  986. your database, you have only the space for these 12 records allocated. 
  987.  
  988. In most traditional databases, you must allocate as many records as you 
  989. expect before the first record is allocated.  With MUMPS, many databases can 
  990. be described but they will not take up any space until actual records are 
  991. created.  There is no theoretic maximum number of records that a specific 
  992. database can contain.  It is only bound by the actual amount of disk space 
  993. that is available to be assigned.  Talk about getting 10 pounds in a 5 pound 
  994. sack. 
  995. Many database environments already exist for the PC, why should you be 
  996. interested in another?  MUMPS is unlike most other databases in that it is 
  997. also a special type of programming language called an interpreter.  OK, we 
  998. hear the moans from the BASIC programming crowd. And did you think you got
  999. rid of interpreters when BASIC compilers came out.  Well, you didn't.  
  1000. Interpreters don't have to be slow and most database environments actually 
  1001. do go interpretive when they service user queries.  Anyway, even if
  1002. the MUMPS interpreter was slow (which it isn't) the levels of run-time 
  1003. and error-time support is worth the difference.  
  1004. When a MUMPS application stops for some reason, the symbol table remains 
  1005. intact at the line of code being executed when the error occurred.  
  1006. In the event of an error, control may be passed to another routine to capture 
  1007. the conditions of the failure or even attempt to recover from the error
  1008. condition.  Traditionally, MUMPS database applications have a short 
  1009. mean-time-to-repair (MTTR) of just a few minutes and a long up-time record.   
  1010. Also, in many cases, the application that blew up can be re-started from 
  1011. where it left off. 
  1012.  
  1013. What does MUMPS look like? 
  1014. MUMPS has only a single data type, strings (of characters).  This makes the 
  1015. conversion from one data type to another easier. Most MUMPS commands may be abbreviated to a single character.  Or spell them out if you choose.  Code generation is quick.
  1016. MUMPS commands can be easily combined to form more complex and complicated 
  1017. structures.  Each line of code is a block of code. MUMPS makes little distinction between data and code.  Code can be created and executed from a database or the symbol table at run-time.  Data can be stored in a routine and accessed at run-time.
  1018. MUMPS is a sparse matrix array processor.  This means that arrays are allocated at run-time; the arrays may be created in any order.  Array 
  1019. element 1000000 can be created and then element 2 can be created and yet the 
  1020. array only has 2 elements in it.
  1021. Because there are only string data types, the subscripts of a MUMPS array are 
  1022. strings.  What a concept!  You can subscript an array by "APPLES" and 
  1023. "ORANGES", and "AVOCADOS".  Now for the good news, when those subscripts are 
  1024. created, they are sorted alphabetically.  MUMPS means never having to say 
  1025. you're sorting.
  1026. The language is still growing.  Every ANSI Standard has a built-in sunset of 
  1027. seven years.  That means that if nothing is done with a standard in seven 
  1028. years, it ceases to be a standard.  Well, MUMPS has had an ANSI standard for 
  1029. 1977, 1984, 1990, and the MUMPS Development Committee is attempting to 
  1030. release a 1993 standard.  Additional standards for WINDOWING, Networking, 
  1031. and Transaction Processing are currently in process.
  1032. MUMPS is transportable.  It doesn't matter if MUMPS code is running under 
  1033. MS-DOS, Windows NT, UNIX, VMS, VM, or nearly any operating system you might 
  1034. mention, the code and database will still run.  In fact, in some 
  1035. implementations MUMPS is also the operating system.
  1036. Who uses MUMPS?  Probably a lot more than you might think.  How about
  1037. the Veteran's Administration.  Well, the VA did such a good job of
  1038. putting a Fourth Generation Language together in MUMPS that the Indian
  1039. Health Service decided to use it, then the U. S. Public Health
  1040. Service, and finally the Department of Defense for the Army, Navy, and
  1041. Air Force hospitals and clinics around the world.  By the way, the 
  1042. VA's 4GL, File Manager is in the public domain.  If you can find a
  1043. source, you can get it free!  Another advantage is that the package is
  1044. distributed as source code because MUMPS is an interpreter.
  1045.  
  1046. Is it just for hospitals?  No, MUMPS is an excellent choice for nearly
  1047. any database operation, especially if not every aspect of the
  1048. situation is known.  MUMPS is being used by banks and credit unions. 
  1049. Do you travel on airlines?  You have probably been scheduled on a
  1050. MUMPS system.  All of the postage stamp sales for the U.S. Postal
  1051. Service are tallied on a MUMPS system each evening.  Auto parts houses
  1052. keep track of their inventories with MUMPS systems. Language
  1053. translators have been implemented in MUMPS and it also works
  1054. well with artificial intelligence projects.
  1055.  
  1056. If MUMPS was developed here, is it only used in this country?  The
  1057. national health services of Finland and England, as well as a few
  1058. other countries are currently using MUMPS.  Ever gamble in the
  1059. gambling houses in London?  They use MUMPS to track high rollers from
  1060. one gambling house to the next.  The British Stock Exchange also uses
  1061. MUMPS.  The largest department store chain in Spain uses MUMPS.  The
  1062. Russians acquired a copy of MUMPS and modified it to run their 
  1063. national health services and track containerized freight.
  1064.  
  1065. If MUMPS is so good, why haven't I heard of it?  This is an
  1066. interesting point.  The computer industry lives on some very simple
  1067. rules, 1) sell products with follow-on (things that need other things
  1068. to work properly or better) and 2) sell items that make it difficult
  1069. to migrate to another vendor's hardware or software (also known as
  1070. product loyalty).  MUMPS provides the programming language,
  1071. the database, the screen handler, and soon, windows of any platform
  1072. that will have a MUMPS interpreter (which is just about any platform). 
  1073. MUMPS code is extremely transportable.  Standard MUMPS code works fine
  1074. on whatever platform you run it on.
  1075.  
  1076. When a MUMPS implementation is installed to replace an existing
  1077. traditional system, usually there are sufficient resources for the
  1078. MUMPS environment, with plenty of resources left for future expansion.
  1079.  
  1080. Alright, I'm sold.  Where can I get MUMPS for my system?  Now for some
  1081. good news, there is an evaluation version of MUMPS for MS-DOS that is
  1082. free, especially if you happen to be a student.  The vendor only asks
  1083. that you register your use of the product.  
  1084.  
  1085. By the way, there is extensive documentation available for this
  1086. product.  There is a MUMPS Users' Group (now called the M Technology
  1087. Association) which can be contacted at:
  1088.  
  1089. MUMPS Users' Group of North America
  1090. 1738 Elton Road, Suite 205
  1091. Silver Spring, MD 20903
  1092. Phone: (301)-431-4070
  1093. Fax:   (301)-431-0017
  1094.  
  1095.  
  1096. (Author Profile:  Chris Richardson is a Software Engineer with Science
  1097. Applications International Corporation in San Diego and is a member of
  1098. the MUMPS Development Committee, the ANSI Standards writing
  1099. organization for the MUMPS language.  He has worked for NASA, the U.
  1100. S. Public Health Service, the U. S. Navy, Army, and the Air Force as
  1101. well as Computer Sciences Corporation and Singer-Link in Houston.  He
  1102. has taught Real-time FORTRAN and MUMPS to professionals in the 
  1103. industry and government).
  1104.  
  1105.  
  1106.  
  1107. ------------------------------------------------------------------
  1108.  
  1109.  
  1110. Appendix 9: Testimonials, Accolades, and Articles from outside the community.
  1111.  
  1112.  
  1113. This section is dedicated to mentioning articles, white papers, research, 
  1114. et al that is no produced by the M Community, but by someone in the "Real 
  1115. World". I will accept submissions of articles, pointers, etc. for 
  1116. published matertials (electronic or physical) as of 1/1/96 on.
  1117.  
  1118. Older submissions may be included if they are of a unique, or highly 
  1119. informative nature.
  1120.  
  1121.  
  1122.  
  1123. I. Computer Language Rating Table:
  1124.  
  1125.  
  1126. Source:    Newsgroups: comp.lang.mumps
  1127. Date: Mon, 7 Oct 1996 09:06:20 -0500
  1128.  
  1129. >>> Try looking at http://www.spr.com/library/langtbl.htm.  It contains a
  1130. >>> language ranking, based on the amount of effort required to code a
  1131. >>> function point and M ranks very well.
  1132.  
  1133.  
  1134. II. ?
  1135.  
  1136.  
  1137. -------------------------------------------------------------------
  1138.  
  1139. Appendix 10: Contact information: E-mail and URL addresses:
  1140.  
  1141. This document contains url's and addresses that were acurate at the 
  1142. time of the original inclusion. URL's and e-mail addresses change
  1143. however, and will (when notified) be reflected in Appendix 10.
  1144. So, if you wish to reach a contributor, confirm addresses there.
  1145.  
  1146. Ellis A. Bauman, <ellis.bauman@uwmf.wisc.edu>
  1147. Ben Bishop, aci@shore.net
  1148. Dennis J Brevik, <dbrevik@ix.netcom.com>
  1149. Steve Clay, <sbc@pobox.com>
  1150. Etienne Cherdlu, <gz64@cityscape.co.uk>
  1151. Floyd Dennis, <fbdennis@mindspring.com>
  1152. Jon Diamond <jdiamond@btinternet.com>
  1153. Rod Dorman, <rodd@panix.com>
  1154. John D. Godfrey, Godfrey@msmail.vet.cornell.edu
  1155. Gavin Greig, ggreig@mcs.dundee.ac.uk
  1156. Russell Haddleton, rfh2y@uvacs.cs.Virginia.EDU
  1157. Brett Hunt, BrettH@Micronetics.com
  1158. Lev Jacob, lev@TRENDLINE.CO.IL
  1159. Scott P. Jones, scott@INTERSYS.COM
  1160. John E. Kemker, III,  kemker.j@atlanta.va.gov
  1161. Mark Komarinski, komarimf@craft.camp.clarkson.edu
  1162. Monika Kratzmann, <monika@INTERSYS.COM>
  1163. Jeff Loeb, JEFFREY.L.LOEB@cpmx.saic.com 
  1164. Keith F. Lynch, kfl@access.digex.net
  1165. Jim McIntosh, <jim@american.edu>
  1166. Ed de Moel, DEMOEL@saltmine.radix.net
  1167. Steve J. Morris, sjm2@shore.net
  1168. Kevin O'Gorman, kevin@kosman.uucp
  1169. Paul Perrin, <Admin@admatic.com>
  1170. Doug Preiser, preiser@cancer.unm.edu
  1171. Harold Pritchett, <harold@UGA.CC.UGA.EDU>
  1172. Aaron Seidman, seidman@world.std.com
  1173. Kate Schell, cschell@jacquardsystems.com, http://jacquardsystems.com
  1174. Tilman Schmidt, ts@gb1.sema.de
  1175. Arthur B. Smith, ART@vets.vetmed.missouri.edu
  1176. Daniel P. B. Smith, <dpbsmith@world.std.com>
  1177. Richard J. Tomlinson, Richard@rtsysgen.demon.co.uk
  1178. Gardner Trask, trask@shore.net
  1179. David Whitten, whitten@netcom.com
  1180.  
  1181.  
  1182. ------------------------------------------------------------------------
  1183.  
  1184.  
  1185.  
  1186. Appendix 11: FAQ Change History
  1187.  
  1188.  
  1189. Changes since version 1.6: 8/1/97
  1190.  
  1191. -- Typo's, edits, new URL's and e-mail addresses submitted by 
  1192.       you, the viewing audience.
  1193. -- Addition of a review by Daniel P.B. Smith for the books section. 
  1194.    READ IT !!   
  1195. -- Move section 30 up to 24 and renumber for a more logical flow.
  1196. -- categorized and cleaned up of web references in section 26.
  1197.  
  1198.  
  1199. Changes since version 1.5: 5/1/97
  1200.  
  1201.    -- Typo's, edits, and new e-mail addresses. Keep those cards and letters
  1202.       coming.
  1203.  
  1204.    -- New Section 32 on how $ORDER really works
  1205.  
  1206.    -- New Section 33 on M as a Learning Language
  1207.  
  1208.    -- Redo of Section 4 to include new books available.
  1209.  
  1210.    -- Some more URL edits and additions to section
  1211.  
  1212.    -- Implementation of a great idea from Dan Baer about an e-mail and URL appendix.
  1213.      Basically, I will now refer to people and companies by name, and add an appendix 
  1214.      of e-mail and URL addresses. A One-Stop-shop for contact information.
  1215.  
  1216.    -- Changes to all sections to remove 'hard-coded' e-mail addresses.
  1217.    
  1218.    --  Change history moved to Appendix 11. Only current changes will appear at top of FAQ.
  1219.  
  1220.  
  1221. Changes since version 1.4: 1/1/97
  1222.  
  1223.    Typo's, edits, and new e-mail addresses. Keep those cards and letters
  1224.     coming.
  1225.    Additional (author unknown) definition to section 1. what is M?
  1226.  
  1227. Changes since version 1.3: 10/1/96
  1228.  
  1229.    Expansion of Section 25 to include M Web addresses and Newsgroups
  1230.    Addition of Section 31: A Brief History of M
  1231.    Addition of Appendix 9: Testimonials and Articles
  1232.    Minor editorial changes and spelling corrections.
  1233.    Removed Editorial History prior to 1995
  1234.  
  1235. Changes since Version 1.2: 07/01/96:
  1236.  
  1237.    Addition of X-base vs. M answer - Question 30
  1238.    Addition of Appendix 8 - Mumps, A Solution Looking For A Problem, By Chris Richardson
  1239.    Request for new blood.
  1240.    Change to Mumps of GA address
  1241.     General cleanup and spellcheck.
  1242.  
  1243.  
  1244. Changes since Version 1.1: 01/01/95:
  1245.  
  1246.    Change to the Connections Group address
  1247.    Request for thoughts on inclusion of MSM white papers.
  1248.  
  1249. -- 
  1250.   ''   Gardner S. Trask III                    trask@world.std.com      
  1251.  O\/O  "First .cultured man on the Internet"   alt.culture.gard-trask
  1252.  (  )  Creator of 'Circut, the Internet Owl(tm)'
  1253.   ""   Best One-Line Slam: 'You have a ponytail, don't you." -Alex Suter
  1254.