<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kdtop3</id>
	<title>VistApedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://vistapedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kdtop3"/>
	<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php/Special:Contributions/Kdtop3"/>
	<updated>2026-04-11T13:51:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vistapedia.com/index.php?title=Projects&amp;diff=4858</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Projects&amp;diff=4858"/>
		<updated>2007-06-27T13:31:06Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h3&amp;gt;Welcome to the WorldVistA &amp;amp;quot;Brainstorming&amp;amp;quot; Projects Page&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Projects page is the working directory of WorldVistA project ideas.  All&lt;br /&gt;
project concept are welcome - new and old.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;The Process&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Project ideas and description will be collected and published on this&lt;br /&gt;
    page.&lt;br /&gt;
  &amp;lt;li&amp;gt;High-level benefit analysis will be applied.&lt;br /&gt;
  &amp;lt;li&amp;gt;Suggestions will be reviewed, prioritized and endorsed by the WorldVistA&lt;br /&gt;
    leadership.&lt;br /&gt;
  &amp;lt;li&amp;gt;Funding will be sought and teams will be organized for projects that are&lt;br /&gt;
    determined to be of high value and show promise of successful completion.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Brainstorming Rules:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Offer and collect as many ideas as possible.&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;li&amp;gt;All ideas are valuable, the more the better. One crazy idea spawns three&lt;br /&gt;
    rational ideas.&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;li&amp;gt;Don&#039;t spend time discussing details during brainstorming phase. Ideas&lt;br /&gt;
    submitted will be analyzed&amp;amp;nbsp; and deconstructed at length later...&lt;br /&gt;
  &amp;lt;li&amp;gt;Do not be critical of ideas, it stifles the process and make creative&lt;br /&gt;
    thinkers go back into the box.&lt;br /&gt;
  &amp;lt;li&amp;gt;Build on other ideas. Linking one idea to another is powerful.&lt;br /&gt;
  &amp;lt;li&amp;gt;Capture all ideas and make them visible.&lt;br /&gt;
  &amp;lt;li&amp;gt;Set a time limit. This iteration closes on 07/06/2007.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Please supply the following:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Project title&lt;br /&gt;
  &amp;lt;li&amp;gt;Brief description&lt;br /&gt;
  &amp;lt;li&amp;gt;Benefit provided&lt;br /&gt;
  &amp;lt;li&amp;gt;Your name (so we know who to ask for clarification -- anonymous posts are&lt;br /&gt;
    accepted.)&lt;br /&gt;
  &amp;lt;li&amp;gt;Email address (optional)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;link to projects.worldvista.org Project page if exists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;(If you would rather submit your project ideas via email -- send them to&lt;br /&gt;
webmaster@members.worldvista.org with the subject line: WorldVistA Projects)&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Please add your project suggestion(s) here:&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Chris Richardson &amp;lt;/b&amp;gt;(to be detailed)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Training Ideas - Tools, Teachers, and Techniques&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;I18N (Internationalization) - Issues and Answers&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Transport of Medical and Health Records&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Post-Traumatic Stress Disorder - Developments and Impacts&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;New Organizations, MDC (new) and VDC (even newer)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Ontologies and how VistA fits in with them.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Peter Bodtke &amp;lt;/b&amp;gt;(to be detailed)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Internationalization (support foreign languages, i.e. Spanish)&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;li&amp;gt;Patch stream updating system (does this project need assistance?)&lt;br /&gt;
  &amp;lt;li&amp;gt;Marketing and Public Relations: WorldVistA organization and WorldVistA EHR&lt;br /&gt;
    VOE V1.0 software package&lt;br /&gt;
  &amp;lt;li&amp;gt;Installers (WorldVistA EHR VOE w/Registration GUI, VistA/G.TM/Linux)&lt;br /&gt;
  &amp;lt;li&amp;gt;Integration - localization interface wizards&lt;br /&gt;
  &amp;lt;li&amp;gt;Achieve United Nations NGO status&lt;br /&gt;
  &amp;lt;li&amp;gt;Standard Development Architect and Tools&lt;br /&gt;
  &amp;lt;li&amp;gt;VistA Documentation Repository&lt;br /&gt;
  &amp;lt;li&amp;gt;Educational materials / training materials / book&lt;br /&gt;
  &amp;lt;li&amp;gt;VistA Demo Appliance V1.2 (next iteration, including &amp;amp;quot;VistA&lt;br /&gt;
    link&amp;amp;quot;, Vitals, Patient Registration GUI)&lt;br /&gt;
  &amp;lt;li&amp;gt;Community surveys (members skills and needs, adopters registry,&lt;br /&gt;
    integrators registry)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Project topic found on VistApedia (anonymous and other sources) &amp;lt;/b&amp;gt;(to be&lt;br /&gt;
detailed)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;OpenForum (not sure what this project team had in mind)&lt;br /&gt;
  &amp;lt;li&amp;gt;Pediatrics Package (will IHS templates suffice?)&lt;br /&gt;
  &amp;lt;li&amp;gt;OB/GYN Package (will IHS templates suffice?)&lt;br /&gt;
  &amp;lt;li&amp;gt;Billing Package&lt;br /&gt;
  &amp;lt;li&amp;gt;Configuration and Installation&lt;br /&gt;
  &amp;lt;li&amp;gt;Ambulatory Care Data Capture&lt;br /&gt;
  &amp;lt;li&amp;gt;WorldVistA EHR / VOE FAQs need to be updated&lt;br /&gt;
  &amp;lt;li&amp;gt;An information / press kit is needed with key articles, links to demos,&lt;br /&gt;
    etc.&lt;br /&gt;
  &amp;lt;li&amp;gt;WorldVistA.org links to software need to be edited&lt;br /&gt;
  &amp;lt;li&amp;gt;Combine and edit SourceForge sites (VOE project, WorldVistA EHR,&lt;br /&gt;
    WorldVistA, and VistAOutreach) Add abstract/index and improve naming&lt;br /&gt;
    conventions for software&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Kevin Toppenberg (kdtop) &amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Multiple language support (I am working on this)&amp;amp;nbsp;&lt;br /&gt;
  &amp;lt;li&amp;gt;Server data &amp;quot;Save As&amp;quot;... i.e. ability to export site-specific data, for import into another installation.  This would make VistA analogous to Word, which could open, close, transfer, share etc. data sets. &lt;br /&gt;
  &amp;lt;li&amp;gt;Better installation and configuration tools&lt;br /&gt;
  &amp;lt;li&amp;gt;Enable CPRS to run on Linux&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Pharmacy_Issues&amp;diff=5090</id>
		<title>Pharmacy Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Pharmacy_Issues&amp;diff=5090"/>
		<updated>2007-01-11T05:31:51Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* RPC Calls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will contain notes to work out pharmacy programming issues.&lt;br /&gt;
&lt;br /&gt;
Initiated by K. Toppenberg 4/2005&lt;br /&gt;
&lt;br /&gt;
=== Keys Needed for Pharm. Setup ===&lt;br /&gt;
We searched pharmacy routines and found keys that were needed for some of the pharmacy setup routines.  Here are the keys that were found:&lt;br /&gt;
PSA ORDERS, PSAMGR, PSJ RPWARN, PSB MANAGER, PSB CPRS MED BUTTON, PSB INSTRUCTOR, PROVIDER, PSD TECH, PSDMGR, PSD BUMGR, PSD ERROR, PSD PARAM, PSD TRAN&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Files and Relationships ===&lt;br /&gt;
*&amp;lt;b&amp;gt;VA PRODUCT&amp;lt;/b&amp;gt; file (file #50.68, ^PSNDF(50.68,*)) holds ALL possible drugs.  Some people refer to this as the National Drug File. [[File Info: 50dot68]]&lt;br /&gt;
*&amp;lt;b&amp;gt;VA GENERIC&amp;lt;/b&amp;gt; file (file #50.6, ^PSNDF(50.6))&lt;br /&gt;
*&amp;lt;b&amp;gt;DRUG&amp;lt;/b&amp;gt; file (file #50, ^PSDRUG(*)) holds all the drugs in the local formulary. This links to above. [[File Info: 50]]&lt;br /&gt;
*&amp;lt;b&amp;gt;PHARMACY ORDERABLE ITEM&amp;lt;/b&amp;gt; file (file #50.7, ^PS(50.7,*)) holds things that can be ordered from the pharmacy. This links to above. [[File Info 50dot7]]&lt;br /&gt;
*&amp;lt;b&amp;gt;ORDERABLE ITEM&amp;lt;/b&amp;gt; file (file #101.43, ^ORD(101.43,*)) holds things that can be ordered, including labs and drugs. This links to above. [[File Info 101dot43]]&lt;br /&gt;
*&amp;lt;b&amp;gt;ORDER QUICK VIEW&amp;lt;/b&amp;gt; file (file #101.44, ^ORD(101.44,*)) holds &amp;quot;quick order&amp;quot; entries. This links to above. [[File Info 101dot44]]&lt;br /&gt;
&lt;br /&gt;
[[Summary of Pharmacy File Linkages]]&lt;br /&gt;
&lt;br /&gt;
What I Have Learned so Far&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;File 50.7 (PHARMACY ORDERABLE ITEM):&#039;&#039;&#039;&lt;br /&gt;
  **A record in this file should be created first.  &lt;br /&gt;
  .01 field should be the generic name of the drug.&lt;br /&gt;
  When the record is created, an entry in fle 101.43 (ORDERABLE ITEM) will automatically be made.&lt;br /&gt;
  Also, a record in in ORDER QUICK VIEW will also be created (but it is incomplete--see below.)&lt;br /&gt;
  Note: new drugs may not be added unless PSEDITNM&amp;gt;0.  So to setup a drug in fileman,&lt;br /&gt;
        set PSEDITNM=1 from the command-line, then DO D^DI to get into Fileman with vars intact.&lt;br /&gt;
  In the MED ROUTE field, the input transform does not allow an input of &amp;quot;ORAL&amp;quot;.  (If left&lt;br /&gt;
  blank ORAL will be shown in CPRS)&lt;br /&gt;
  This file can hold the synonyms of a drug etc.&lt;br /&gt;
  When this record is created, for some reason it is automatically given the current&lt;br /&gt;
    date in the INACTIVE DATE field--meaning it is created in an inactive state.  One must&lt;br /&gt;
    go back and edit the record a second time to remove the entry from this field.&lt;br /&gt;
  File 101.43 (ORDERABLE ITEM), field ID holds a text pointer to this file, e.g. &lt;br /&gt;
  &amp;quot;10;99PSP&amp;quot; &amp;lt;---- 10 is IEN in file #50.7&lt;br /&gt;
  There is no pointer field from file 50.7 up to file 50.  The link is FROM file #50 &lt;br /&gt;
  TO #50.7 (via file #50&#039;s field 2.1(PHARMACY ORDERABLE ITEM)).  HOWEVER, File #50&#039;s &lt;br /&gt;
  &amp;quot;ASP&amp;quot; cross-reference for the field &amp;quot;PHARMACY ORDERABLE ITEM (#2.1) i.e. &lt;br /&gt;
  ^PSDRUG(&amp;quot;ASP&amp;quot;,IEN_in_50.7,*), contains list of linked records in file #50&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
2. In &#039;&#039;&#039;file# 50 (DRUG, ^PSDRUG):&#039;&#039;&#039;&lt;br /&gt;
  This file will hold a separate record for every different medication/tablet size.&lt;br /&gt;
  For example, there will be one for AMOXICILLIN 250, and another for AMOXICILLIN 500.&lt;br /&gt;
  Both of the above records would be linked to one record in the PHARMACY ORDERABLE ITEM,&lt;br /&gt;
  i.e. an AMOXICILLIN record.&lt;br /&gt;
  The link should be in field 2.1 (the PHARMACY ORDERABLE ITEM field), which will&lt;br /&gt;
    hold a pointer to file 50.7 (PHARMACY ORDERABLE ITEM file)&lt;br /&gt;
  &lt;br /&gt;
3. In &#039;&#039;&#039;file 101.43 (ORDERABLE ITEM)&#039;&#039;&#039; an entry for the drug must exist like this:&lt;br /&gt;
   This entry should have been made automatically when the PHARMACY ORDERABLE ITEM was&lt;br /&gt;
   created.&lt;br /&gt;
  &lt;br /&gt;
  file 101.43&lt;br /&gt;
  record: .01 NAME = LISINOPRIL&lt;br /&gt;
            2 ID = &amp;quot;Unique identifier, created from primary key passed in the &lt;br /&gt;
                   Orderable Items update message from each package; it will be &lt;br /&gt;
                   in the form of &#039;package code;99XXX&#039; where XXX indicates the &lt;br /&gt;
                   package table originating this item (i.e. RAP,LRT,etc.)&lt;br /&gt;
                   [e.g. in my system, then entry for DILTIAZEM TAB is 1;99PSP]&lt;br /&gt;
                   &amp;quot;Package code&amp;quot; should be the IEN on the PHARMACY ORDERABLE ITEM (#50.7)&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;101.44 (ORDER QUICK VIEW)&#039;&#039;&#039;  For meds to show up in the dialog box in CPRS, it must have a entry like this:&lt;br /&gt;
  Again, this entry should have been created automatically when the PHARMACY ORDERABLE ITEM&lt;br /&gt;
  was created.  But for some reason, the DISPLAY TEXT field is not filled in.  Without this,&lt;br /&gt;
  the drug will not appear in CPRS.  So this must be manually supplied.&lt;br /&gt;
&lt;br /&gt;
 file: 101.44 (ORDER QUICK VIEW);  &lt;br /&gt;
  record: ORWDSET O RX;  &lt;br /&gt;
    subfile: SET MEMBER (101.442)&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
&lt;br /&gt;
=== Example of Data===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File 101.44 (ORDER QUICK VIEW)&lt;br /&gt;
   .01-NAME : ORWDSET O RX&lt;br /&gt;
     6-LAST UPDATE : 60414,61441&lt;br /&gt;
    20-SET MEMBER :&lt;br /&gt;
       -snip-&lt;br /&gt;
       Multiple Entry #15  &amp;lt;--- notice that there are no doses&lt;br /&gt;
       .01-SET MEMBER : SILDENAFIL TAB  &amp;lt;-- pointer to 101.43&lt;br /&gt;
         2-DISPLAY TEXT : SILDENAFIL TAB&lt;br /&gt;
       -snip-&lt;br /&gt;
       Multiple Entry #17  &amp;lt;--- notice that there are no doses&lt;br /&gt;
       .01-SET MEMBER : SILDENAFIL TAB  &amp;lt;-- pointer to 101.43&lt;br /&gt;
         2-DISPLAY TEXT : VIAGRA     &amp;lt;SILDENAFIL TAB&amp;gt;&lt;br /&gt;
       -snip-&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 101.43 (ORDERABLE ITEM)&lt;br /&gt;
   .01-NAME : SILDENAFIL TAB&lt;br /&gt;
     1-SYNONYMS :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SYNONYM : VIAGRA&lt;br /&gt;
   1.1-PACKAGE NAME : SILDENAFIL TAB&lt;br /&gt;
     2-ID : 4;99PSP   &amp;lt;--- pointer to IEN=4 in 50.7&lt;br /&gt;
     5-DISPLAY GROUP : PHARMACY&lt;br /&gt;
     9-SET MEMBERSHIP :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SET : RX&lt;br /&gt;
   -snip-&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 50.7 (PHARMACY ORDERABLE ITEM)&lt;br /&gt;
   .01-NAME : SILDENAFIL&lt;br /&gt;
   .02-DOSAGE FORM : TAB&lt;br /&gt;
   .05-DAY (nD) or DOSE (nL) LIMIT : 2L&lt;br /&gt;
   .07-SCHEDULE TYPE : FILL ON REQUEST&lt;br /&gt;
     2-SYNONYM :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SYNONYM : VIAGRA  &amp;lt;-- free text&lt;br /&gt;
     7-PATIENT INSTRUCTIONS : [Do not take with nitroglycerin]&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
ASP index in file 50 allows link from 50.7 --&amp;gt; 50&lt;br /&gt;
 ^PSDRUG(&amp;quot;ASP&amp;quot;,4,7118) =   IEN# 4 in 50.7 --&amp;gt; IEN# 7118 in 50&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 50 (DRUG file)  (some noncontributory fields edited)&lt;br /&gt;
  .001-NUMBER : 7118&lt;br /&gt;
   .01-GENERIC NAME : SILDENAFIL (Viagra) 50MG TAB&lt;br /&gt;
   2.1-PHARMACY ORDERABLE ITEM : SILDENAFIL&lt;br /&gt;
     9-SYNONYM :&lt;br /&gt;
       Multiple Entry #2&lt;br /&gt;
       .01-SYNONYM : VIAGRA&lt;br /&gt;
         1-INTENDED USE : TRADE NAME&lt;br /&gt;
  14.5-DISPENSE UNIT : TAB&lt;br /&gt;
    20-NATIONAL DRUG FILE ENTRY : SILDENAFIL&lt;br /&gt;
    21-VA PRODUCT NAME : SILDENAFIL CITRATE 50MG TAB&lt;br /&gt;
    22-PSNDF VA PRODUCT NAME ENTRY : SILDENAFIL CITRATE 50MG TAB&lt;br /&gt;
   101-MESSAGE : Use for 25mg dose only&lt;br /&gt;
   215-QUANTITY DISPENSE MESSAGE : MAX 4 DOSE/MO-CONTRAINDICATED WITH NITRATES&lt;br /&gt;
   901-STRENGTH : 50&lt;br /&gt;
   902-UNIT : MG&lt;br /&gt;
   903-POSSIBLE DOSAGES :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 1&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
       Multiple Entry #2&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : .5&lt;br /&gt;
         2-PACKAGE : O&lt;br /&gt;
       Multiple Entry #3&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 1&lt;br /&gt;
         1-DOSE : 50&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
       Multiple Entry #4&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 2&lt;br /&gt;
         1-DOSE : 100&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Example Entry ===&lt;br /&gt;
&lt;br /&gt;
Here is an example of entering the drug the &amp;quot;proper&amp;quot; way, via menu options:&lt;br /&gt;
[[Drug Entry Edit Example]]&lt;br /&gt;
&lt;br /&gt;
Here is a sample inquirery of one successfuly added drug: furosemide&lt;br /&gt;
(NOTICE: in this system, there is only 1 orderable drug from CPRS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: NEW PERSON// 50.7  PHARMACY ORDERABLE ITEM&lt;br /&gt;
                                           (1 entry)&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: ?&lt;br /&gt;
     Answer with PHARMACY ORDERABLE ITEM NAME, or SYNONYM, or OI-DRUG TEXT ENTRY:&lt;br /&gt;
    FUROSEMIDE      FUROSEMIDE     TAB&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: furOSEMIDE       TAB&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 1                               &lt;br /&gt;
   NAME: FUROSEMIDE&lt;br /&gt;
   SYNONYM: LASIX&lt;br /&gt;
   DOSAGE FORM: TAB&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: 101.43  ORDERABLE ITEMS//&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select ORDERABLE ITEMS NAME: furose&lt;br /&gt;
      1   FUROSEMIDE&lt;br /&gt;
      2   FUROSEMIDE TAB&lt;br /&gt;
 CHOOSE 1-2: 1  FUROSEMIDE&lt;br /&gt;
 ANOTHER ONE: furo&lt;br /&gt;
      1   FUROSEMIDE&lt;br /&gt;
      2   FUROSEMIDE TAB&lt;br /&gt;
 CHOOSE 1-2: 2  FUROSEMIDE TAB&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 774                             &lt;br /&gt;
   NAME: FUROSEMIDE&lt;br /&gt;
   ID: 828;99LRT                         &lt;br /&gt;
   DISPLAY GROUP: LABORATORY&lt;br /&gt;
   PACKAGE NAME: FUROSEMIDE&lt;br /&gt;
   SYNONYM: LASIX&lt;br /&gt;
   SET: LAB&lt;br /&gt;
   TYPE: both&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 1659                            &lt;br /&gt;
   NAME: FUROSEMIDE TAB&lt;br /&gt;
   ID: 1;99PSP  &amp;lt;---- x;99PSP  x=IEN in file# 50.7 (PHARMACY ORDERABLE ITEM)&lt;br /&gt;
   DISPLAY GROUP: PHARMACY&lt;br /&gt;
   PACKAGE NAME: FUROSEMIDE TAB&lt;br /&gt;
   SET: RX&lt;br /&gt;
   SET: UD RX&lt;br /&gt;
   SET: O RX&lt;br /&gt;
     INPATIENT MED: YES                    &lt;br /&gt;
     OUTPATIENT MED: YES&lt;br /&gt;
     IV BASE: NO                           &lt;br /&gt;
     IV ADDITIVE: NO&lt;br /&gt;
     SUPPLY: NO                            &lt;br /&gt;
     NON-FORMULARY: NO&lt;br /&gt;
     NON-VA MEDS: NO&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Select ORDERABLE ITEMS NAME:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: 101.44  ORDER QUICK VIEW&lt;br /&gt;
                                           (2 entries)&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select ORDER QUICK VIEW NAME: ?&lt;br /&gt;
     Answer with ORDER QUICK VIEW NAME&lt;br /&gt;
    Choose from:&lt;br /&gt;
    ORWDQ PKG35 DO&lt;br /&gt;
    ORWDSET O RX&lt;br /&gt;
 &lt;br /&gt;
 Select ORDER QUICK VIEW NAME: orwdset O RX&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 2                               &lt;br /&gt;
   NAME: ORWDSET O RX&lt;br /&gt;
   LAST UPDATE: 60201,74282&lt;br /&gt;
   SET MEMBER: FUROSEMIDE TAB              &lt;br /&gt;
     DISPLAY TEXT: FUROSEMIDE TAB&lt;br /&gt;
 &lt;br /&gt;
 Select ORDER QUICK VIEW NAME:&lt;br /&gt;
&lt;br /&gt;
=== Other Important Pharmacy Files and Relationships ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to Adding One Drug / Making Available in CPRS ===&lt;br /&gt;
&lt;br /&gt;
 GTM&amp;gt;set PSEDITNM=1&lt;br /&gt;
 GTM&amp;gt;D D^DI&lt;br /&gt;
 &lt;br /&gt;
 VA FileMan 22.0&lt;br /&gt;
 Select OPTION: enter OR EDIT FILE ENTRIES&lt;br /&gt;
 &lt;br /&gt;
 INPUT TO WHAT FILE: DRUG// 50.7  PHARMACY ORDERABLE ITEM&lt;br /&gt;
                                           (3 entries)&lt;br /&gt;
 EDIT WHICH FIELD: ALL//&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: VIAGRA&lt;br /&gt;
  Are you adding &#039;VIAGRA&#039; as a new PHARMACY ORDERABLE ITEM (the 4TH)? No// Y&lt;br /&gt;
  (Yes)&lt;br /&gt;
   PHARMACY ORDERABLE ITEM DOSAGE FORM: tab&lt;br /&gt;
     1   TAB&lt;br /&gt;
     2   TAB,BUCC,SA&lt;br /&gt;
     3   TAB,BUCCAL&lt;br /&gt;
     4   TAB,CHEWABLE&lt;br /&gt;
     5   TAB,CHEWG GUM&lt;br /&gt;
 Press &amp;lt;RETURN&amp;gt; to see more, &#039;^&#039; to exit this list, OR&lt;br /&gt;
 CHOOSE 1-5: 1  TAB&lt;br /&gt;
   PHARMACY ORDERABLE ITEM INACTIVE DATE:&lt;br /&gt;
 DOSAGE FORM: TAB//   (No Editing)&lt;br /&gt;
 IV FLAG:&lt;br /&gt;
 INACTIVE DATE:&lt;br /&gt;
 DAY (nD) or DOSE (nL) LIMIT: ??&lt;br /&gt;
     Type a whole number between 0 and 99, 0 decimal digits, followed by either&lt;br /&gt;
     a &amp;quot;D&amp;quot; (for NUMBER OF DAYS) or an &amp;quot;L&amp;quot; (for DOSE LIMIT).&lt;br /&gt;
 DAY (nD) or DOSE (nL) LIMIT: 2L&lt;br /&gt;
 MED ROUTE:&lt;br /&gt;
 SCHEDULE TYPE: r  FILL ON REQUEST&lt;br /&gt;
 SCHEDULE:&lt;br /&gt;
 SUPPLY:&lt;br /&gt;
 Select SYNONYM: VIAGRA&lt;br /&gt;
  Are you adding &#039;VIAGRA&#039; as a new SYNONYM (the 1ST for this PHARMACY ORDERABLE ITEM)? No// Y  (Yes)&lt;br /&gt;
 Select SYNONYM:&lt;br /&gt;
 Select OI-DRUG TEXT ENTRY:&lt;br /&gt;
 PATIENT INSTRUCTIONS: [Do not take with nitroglycerin]&lt;br /&gt;
 &lt;br /&gt;
 [Do not take with nitroglycerin]&lt;br /&gt;
 OTHER LANGUAGE INSTRUCTIONS:&lt;br /&gt;
 NON-VA MED:&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME:&lt;br /&gt;
 &lt;br /&gt;
 Select OPTION:&lt;br /&gt;
&lt;br /&gt;
Note: You have to go back and edit the INACTIVE DATE, and delete the value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
Now create link from #50, field 2.1 --&amp;gt; 50.7&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
 Select OPTION: eNTER OR EDIT FILE ENTRIES&lt;br /&gt;
 &lt;br /&gt;
 INPUT TO WHAT FILE: DRUG// 50  DRUG       (5173 entries)&lt;br /&gt;
 EDIT WHICH FIELD: ALL// pharmACY ORDERABLE ITEM&lt;br /&gt;
 THEN EDIT FIELD:&lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME: viagra&lt;br /&gt;
 1  VIAGRA  SILDENAFIL (Viagra) 50MG TAB   GU900  Use for 25mg dose only&lt;br /&gt;
 2  VIAGRA  SILDENAFIL (Viagra) 100MG TAB  GU900  ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 CHOOSE 1-2: 1  SILDENAFIL (Viagra) 50MG TAB  GU900  Use for 25mg dose only&lt;br /&gt;
 PHARMACY ORDERABLE ITEM: viagra  TAB  04-25-2005 &amp;lt;--- Date is an INACTIVE data. Delete value in 50.7 &lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME: viag&lt;br /&gt;
 1  VIAGRA  SILDENAFIL (Viagra) 50MG TAB   GU900  Use for 25mg dose only&lt;br /&gt;
 2  VIAGRA  SILDENAFIL (Viagra) 100MG TAB  GU900  ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 CHOOSE 1-2: 2  SILDENAFIL (Viagra) 100MG TAB  GU900 ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 PHARMACY ORDERABLE ITEM: viagra   TAB  04-25-2005 &amp;lt;--- Date is an INACTIVE data. Delete value in 50.7&lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME:&lt;br /&gt;
 &lt;br /&gt;
 Select OPTION:&lt;br /&gt;
 &lt;br /&gt;
... to be continued later.....&lt;br /&gt;
&lt;br /&gt;
=== Relevent Menu Options ===&lt;br /&gt;
&lt;br /&gt;
Here is a pharmacy option/menu setup I gathered:&lt;br /&gt;
&lt;br /&gt;
   ADD    Drug Enter/Edit [PSS DRUG ENTER/EDIT]&lt;br /&gt;
   cv     Protocol Conversion Utilities ... [ORCM CONVERSION UTILITIES]&lt;br /&gt;
   EOI    Edit Orderable Items [PSS EDIT ORDERABLE ITEMS]&lt;br /&gt;
   Mgr    Pharmacy Data Management ... [PSS MGR]&lt;br /&gt;
   NDF    National Drug File Menu ... [PSNMGR]&lt;br /&gt;
   Out    Outpatient Pharmacy Manager ... [PSO MANAGER]&lt;br /&gt;
   xxx    Enter/Edit a Drug [PSA DRUG ENTER/EDIT]  &amp;lt;--- don&#039;t use this one&lt;br /&gt;
          Drug Accountability Menu ... [PSA DRUG ACCOUNTABILITY MENU]&lt;br /&gt;
          Drug Receipt History Review [PSA DRUG HISTORY]&lt;br /&gt;
          Drug Transaction History [PSA DRUG DISPLAY]&lt;br /&gt;
          Inquire/Compare DRUG file/ITEM MASTER file [PSA DRUG INQUIRE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Emails Regarding Adding Drugs ===&lt;br /&gt;
Moved here: [[Pharmacy Setup Emails]]&lt;br /&gt;
&lt;br /&gt;
=== Instructions for entering a drug through menus ===&lt;br /&gt;
Helpful post here:  [[Instructions for New Drug Entry]]&lt;br /&gt;
&lt;br /&gt;
=== RPC Calls ===&lt;br /&gt;
ORWUL^FVSUB -- gets the list of drugs to display in the box.&lt;br /&gt;
&lt;br /&gt;
ORWDXA ISACTOI&lt;br /&gt;
&lt;br /&gt;
ORWDPS1 FAILDEA&lt;br /&gt;
&lt;br /&gt;
ORWOR PKISITE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a drug is selected in the new medicine dialog, the following RPC&#039;s are called:&lt;br /&gt;
&lt;br /&gt;
 ORWDPS2 OISLCT&lt;br /&gt;
 example params:  1158,0,1,Y,N&lt;br /&gt;
&lt;br /&gt;
 Remote procedure file details for this:&lt;br /&gt;
 OISLCT^ORWDPS2(LST,OI,PSTYPE,ORVP,NEEDPI,PKIACTIV)&lt;br /&gt;
&lt;br /&gt;
This returns defaults for ordering&lt;br /&gt;
&lt;br /&gt;
 Example:&lt;br /&gt;
 Params ------------------------------------------------------------------&lt;br /&gt;
 literal	1158&lt;br /&gt;
 literal	O&lt;br /&gt;
 literal	1&lt;br /&gt;
 literal	Y&lt;br /&gt;
 literal	N&lt;br /&gt;
  &lt;br /&gt;
 Results -----------------------------------------------------------------&lt;br /&gt;
 ~Medication&lt;br /&gt;
 d1158^ACYCLOVIR CAP,ORAL &lt;br /&gt;
 ~Verb&lt;br /&gt;
 dTAKE&lt;br /&gt;
 ~Preposition&lt;br /&gt;
 dBY&lt;br /&gt;
 ~PtInstr&lt;br /&gt;
 ~AllDoses&lt;br /&gt;
 i200MG^5671^200&amp;amp;MG&amp;amp;1&amp;amp;CAPSULE&amp;amp;200MG&amp;amp;5671&amp;amp;200&amp;amp;MG&lt;br /&gt;
 i400MG^5671^400&amp;amp;MG&amp;amp;2&amp;amp;CAPSULES&amp;amp;400MG&amp;amp;5671&amp;amp;200&amp;amp;MG&lt;br /&gt;
  NOTE: format-- iDrugName^Strength^NF^TDose&amp;amp;Units&amp;amp;U/D&amp;amp;Noun&amp;amp;LDose&amp;amp;Stren^&lt;br /&gt;
                 DoseText^CostText^MaxRefills^DispUnits^CanSplit&lt;br /&gt;
 ~Dosage&lt;br /&gt;
 iACYCLOVIR 200MG^200MG^^200&amp;amp;MG&amp;amp;1&amp;amp;CAPSULE&amp;amp;200MG&amp;amp;5671&amp;amp;200&amp;amp;MG^200MG^^11^CAP&lt;br /&gt;
 iACYCLOVIR 200MG^200MG^^400&amp;amp;MG&amp;amp;2&amp;amp;CAPSULES&amp;amp;400MG&amp;amp;5671&amp;amp;200&amp;amp;MG^400MG^^11^CAP&lt;br /&gt;
  NOTE: format-- iDrugName^Strength^NF^TDose&amp;amp;Units&amp;amp;U/D&amp;amp;Noun&amp;amp;LDose&amp;amp;Stren^&lt;br /&gt;
                 DoseText^CostText^MaxRefills^DispUnits^CanSplit&lt;br /&gt;
 ~Dispense&lt;br /&gt;
 i5671^200^MG^ACYCLOVIR 200MG^0&lt;br /&gt;
  NOTE: format-- DrugIEN^Strength^Units^Name^Splict&lt;br /&gt;
 ~Route&lt;br /&gt;
 i1^ORAL^PO^MOUTH^0&lt;br /&gt;
 ~Schedule&lt;br /&gt;
 ~Guideline&lt;br /&gt;
 ~Message&lt;br /&gt;
 ~DEASchedule&lt;br /&gt;
 d&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Pharmacy_Issues&amp;diff=4542</id>
		<title>Pharmacy Issues</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Pharmacy_Issues&amp;diff=4542"/>
		<updated>2007-01-11T03:50:08Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* RPC Calls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will contain notes to work out pharmacy programming issues.&lt;br /&gt;
&lt;br /&gt;
Initiated by K. Toppenberg 4/2005&lt;br /&gt;
&lt;br /&gt;
=== Keys Needed for Pharm. Setup ===&lt;br /&gt;
We searched pharmacy routines and found keys that were needed for some of the pharmacy setup routines.  Here are the keys that were found:&lt;br /&gt;
PSA ORDERS, PSAMGR, PSJ RPWARN, PSB MANAGER, PSB CPRS MED BUTTON, PSB INSTRUCTOR, PROVIDER, PSD TECH, PSDMGR, PSD BUMGR, PSD ERROR, PSD PARAM, PSD TRAN&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Files and Relationships ===&lt;br /&gt;
*&amp;lt;b&amp;gt;VA PRODUCT&amp;lt;/b&amp;gt; file (file #50.68, ^PSNDF(50.68,*)) holds ALL possible drugs.  Some people refer to this as the National Drug File. [[File Info: 50dot68]]&lt;br /&gt;
*&amp;lt;b&amp;gt;VA GENERIC&amp;lt;/b&amp;gt; file (file #50.6, ^PSNDF(50.6))&lt;br /&gt;
*&amp;lt;b&amp;gt;DRUG&amp;lt;/b&amp;gt; file (file #50, ^PSDRUG(*)) holds all the drugs in the local formulary. This links to above. [[File Info: 50]]&lt;br /&gt;
*&amp;lt;b&amp;gt;PHARMACY ORDERABLE ITEM&amp;lt;/b&amp;gt; file (file #50.7, ^PS(50.7,*)) holds things that can be ordered from the pharmacy. This links to above. [[File Info 50dot7]]&lt;br /&gt;
*&amp;lt;b&amp;gt;ORDERABLE ITEM&amp;lt;/b&amp;gt; file (file #101.43, ^ORD(101.43,*)) holds things that can be ordered, including labs and drugs. This links to above. [[File Info 101dot43]]&lt;br /&gt;
*&amp;lt;b&amp;gt;ORDER QUICK VIEW&amp;lt;/b&amp;gt; file (file #101.44, ^ORD(101.44,*)) holds &amp;quot;quick order&amp;quot; entries. This links to above. [[File Info 101dot44]]&lt;br /&gt;
&lt;br /&gt;
[[Summary of Pharmacy File Linkages]]&lt;br /&gt;
&lt;br /&gt;
What I Have Learned so Far&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;File 50.7 (PHARMACY ORDERABLE ITEM):&#039;&#039;&#039;&lt;br /&gt;
  **A record in this file should be created first.  &lt;br /&gt;
  .01 field should be the generic name of the drug.&lt;br /&gt;
  When the record is created, an entry in fle 101.43 (ORDERABLE ITEM) will automatically be made.&lt;br /&gt;
  Also, a record in in ORDER QUICK VIEW will also be created (but it is incomplete--see below.)&lt;br /&gt;
  Note: new drugs may not be added unless PSEDITNM&amp;gt;0.  So to setup a drug in fileman,&lt;br /&gt;
        set PSEDITNM=1 from the command-line, then DO D^DI to get into Fileman with vars intact.&lt;br /&gt;
  In the MED ROUTE field, the input transform does not allow an input of &amp;quot;ORAL&amp;quot;.  (If left&lt;br /&gt;
  blank ORAL will be shown in CPRS)&lt;br /&gt;
  This file can hold the synonyms of a drug etc.&lt;br /&gt;
  When this record is created, for some reason it is automatically given the current&lt;br /&gt;
    date in the INACTIVE DATE field--meaning it is created in an inactive state.  One must&lt;br /&gt;
    go back and edit the record a second time to remove the entry from this field.&lt;br /&gt;
  File 101.43 (ORDERABLE ITEM), field ID holds a text pointer to this file, e.g. &lt;br /&gt;
  &amp;quot;10;99PSP&amp;quot; &amp;lt;---- 10 is IEN in file #50.7&lt;br /&gt;
  There is no pointer field from file 50.7 up to file 50.  The link is FROM file #50 &lt;br /&gt;
  TO #50.7 (via file #50&#039;s field 2.1(PHARMACY ORDERABLE ITEM)).  HOWEVER, File #50&#039;s &lt;br /&gt;
  &amp;quot;ASP&amp;quot; cross-reference for the field &amp;quot;PHARMACY ORDERABLE ITEM (#2.1) i.e. &lt;br /&gt;
  ^PSDRUG(&amp;quot;ASP&amp;quot;,IEN_in_50.7,*), contains list of linked records in file #50&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
2. In &#039;&#039;&#039;file# 50 (DRUG, ^PSDRUG):&#039;&#039;&#039;&lt;br /&gt;
  This file will hold a separate record for every different medication/tablet size.&lt;br /&gt;
  For example, there will be one for AMOXICILLIN 250, and another for AMOXICILLIN 500.&lt;br /&gt;
  Both of the above records would be linked to one record in the PHARMACY ORDERABLE ITEM,&lt;br /&gt;
  i.e. an AMOXICILLIN record.&lt;br /&gt;
  The link should be in field 2.1 (the PHARMACY ORDERABLE ITEM field), which will&lt;br /&gt;
    hold a pointer to file 50.7 (PHARMACY ORDERABLE ITEM file)&lt;br /&gt;
  &lt;br /&gt;
3. In &#039;&#039;&#039;file 101.43 (ORDERABLE ITEM)&#039;&#039;&#039; an entry for the drug must exist like this:&lt;br /&gt;
   This entry should have been made automatically when the PHARMACY ORDERABLE ITEM was&lt;br /&gt;
   created.&lt;br /&gt;
  &lt;br /&gt;
  file 101.43&lt;br /&gt;
  record: .01 NAME = LISINOPRIL&lt;br /&gt;
            2 ID = &amp;quot;Unique identifier, created from primary key passed in the &lt;br /&gt;
                   Orderable Items update message from each package; it will be &lt;br /&gt;
                   in the form of &#039;package code;99XXX&#039; where XXX indicates the &lt;br /&gt;
                   package table originating this item (i.e. RAP,LRT,etc.)&lt;br /&gt;
                   [e.g. in my system, then entry for DILTIAZEM TAB is 1;99PSP]&lt;br /&gt;
                   &amp;quot;Package code&amp;quot; should be the IEN on the PHARMACY ORDERABLE ITEM (#50.7)&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;101.44 (ORDER QUICK VIEW)&#039;&#039;&#039;  For meds to show up in the dialog box in CPRS, it must have a entry like this:&lt;br /&gt;
  Again, this entry should have been created automatically when the PHARMACY ORDERABLE ITEM&lt;br /&gt;
  was created.  But for some reason, the DISPLAY TEXT field is not filled in.  Without this,&lt;br /&gt;
  the drug will not appear in CPRS.  So this must be manually supplied.&lt;br /&gt;
&lt;br /&gt;
 file: 101.44 (ORDER QUICK VIEW);  &lt;br /&gt;
  record: ORWDSET O RX;  &lt;br /&gt;
    subfile: SET MEMBER (101.442)&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
      record: SET MEMBER: _IEN_ pointer to 101.43 (ORDERABLE ITEM)   ... a drug would go here&lt;br /&gt;
              DISPLAY TEXT: &amp;quot;A name to appear in CPRS appears here.&lt;br /&gt;
&lt;br /&gt;
=== Example of Data===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File 101.44 (ORDER QUICK VIEW)&lt;br /&gt;
   .01-NAME : ORWDSET O RX&lt;br /&gt;
     6-LAST UPDATE : 60414,61441&lt;br /&gt;
    20-SET MEMBER :&lt;br /&gt;
       -snip-&lt;br /&gt;
       Multiple Entry #15  &amp;lt;--- notice that there are no doses&lt;br /&gt;
       .01-SET MEMBER : SILDENAFIL TAB  &amp;lt;-- pointer to 101.43&lt;br /&gt;
         2-DISPLAY TEXT : SILDENAFIL TAB&lt;br /&gt;
       -snip-&lt;br /&gt;
       Multiple Entry #17  &amp;lt;--- notice that there are no doses&lt;br /&gt;
       .01-SET MEMBER : SILDENAFIL TAB  &amp;lt;-- pointer to 101.43&lt;br /&gt;
         2-DISPLAY TEXT : VIAGRA     &amp;lt;SILDENAFIL TAB&amp;gt;&lt;br /&gt;
       -snip-&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 101.43 (ORDERABLE ITEM)&lt;br /&gt;
   .01-NAME : SILDENAFIL TAB&lt;br /&gt;
     1-SYNONYMS :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SYNONYM : VIAGRA&lt;br /&gt;
   1.1-PACKAGE NAME : SILDENAFIL TAB&lt;br /&gt;
     2-ID : 4;99PSP   &amp;lt;--- pointer to IEN=4 in 50.7&lt;br /&gt;
     5-DISPLAY GROUP : PHARMACY&lt;br /&gt;
     9-SET MEMBERSHIP :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SET : RX&lt;br /&gt;
   -snip-&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 50.7 (PHARMACY ORDERABLE ITEM)&lt;br /&gt;
   .01-NAME : SILDENAFIL&lt;br /&gt;
   .02-DOSAGE FORM : TAB&lt;br /&gt;
   .05-DAY (nD) or DOSE (nL) LIMIT : 2L&lt;br /&gt;
   .07-SCHEDULE TYPE : FILL ON REQUEST&lt;br /&gt;
     2-SYNONYM :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-SYNONYM : VIAGRA  &amp;lt;-- free text&lt;br /&gt;
     7-PATIENT INSTRUCTIONS : [Do not take with nitroglycerin]&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
ASP index in file 50 allows link from 50.7 --&amp;gt; 50&lt;br /&gt;
 ^PSDRUG(&amp;quot;ASP&amp;quot;,4,7118) =   IEN# 4 in 50.7 --&amp;gt; IEN# 7118 in 50&lt;br /&gt;
  ||&lt;br /&gt;
  ||&lt;br /&gt;
  \/&lt;br /&gt;
&lt;br /&gt;
File 50 (DRUG file)  (some noncontributory fields edited)&lt;br /&gt;
  .001-NUMBER : 7118&lt;br /&gt;
   .01-GENERIC NAME : SILDENAFIL (Viagra) 50MG TAB&lt;br /&gt;
   2.1-PHARMACY ORDERABLE ITEM : SILDENAFIL&lt;br /&gt;
     9-SYNONYM :&lt;br /&gt;
       Multiple Entry #2&lt;br /&gt;
       .01-SYNONYM : VIAGRA&lt;br /&gt;
         1-INTENDED USE : TRADE NAME&lt;br /&gt;
  14.5-DISPENSE UNIT : TAB&lt;br /&gt;
    20-NATIONAL DRUG FILE ENTRY : SILDENAFIL&lt;br /&gt;
    21-VA PRODUCT NAME : SILDENAFIL CITRATE 50MG TAB&lt;br /&gt;
    22-PSNDF VA PRODUCT NAME ENTRY : SILDENAFIL CITRATE 50MG TAB&lt;br /&gt;
   101-MESSAGE : Use for 25mg dose only&lt;br /&gt;
   215-QUANTITY DISPENSE MESSAGE : MAX 4 DOSE/MO-CONTRAINDICATED WITH NITRATES&lt;br /&gt;
   901-STRENGTH : 50&lt;br /&gt;
   902-UNIT : MG&lt;br /&gt;
   903-POSSIBLE DOSAGES :&lt;br /&gt;
       Multiple Entry #1&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 1&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
       Multiple Entry #2&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : .5&lt;br /&gt;
         2-PACKAGE : O&lt;br /&gt;
       Multiple Entry #3&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 1&lt;br /&gt;
         1-DOSE : 50&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
       Multiple Entry #4&lt;br /&gt;
       .01-DISPENSE UNITS PER DOSE : 2&lt;br /&gt;
         1-DOSE : 100&lt;br /&gt;
         2-PACKAGE : IO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Example Entry ===&lt;br /&gt;
&lt;br /&gt;
Here is an example of entering the drug the &amp;quot;proper&amp;quot; way, via menu options:&lt;br /&gt;
[[Drug Entry Edit Example]]&lt;br /&gt;
&lt;br /&gt;
Here is a sample inquirery of one successfuly added drug: furosemide&lt;br /&gt;
(NOTICE: in this system, there is only 1 orderable drug from CPRS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: NEW PERSON// 50.7  PHARMACY ORDERABLE ITEM&lt;br /&gt;
                                           (1 entry)&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: ?&lt;br /&gt;
     Answer with PHARMACY ORDERABLE ITEM NAME, or SYNONYM, or OI-DRUG TEXT ENTRY:&lt;br /&gt;
    FUROSEMIDE      FUROSEMIDE     TAB&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: furOSEMIDE       TAB&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 1                               &lt;br /&gt;
   NAME: FUROSEMIDE&lt;br /&gt;
   SYNONYM: LASIX&lt;br /&gt;
   DOSAGE FORM: TAB&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: 101.43  ORDERABLE ITEMS//&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select ORDERABLE ITEMS NAME: furose&lt;br /&gt;
      1   FUROSEMIDE&lt;br /&gt;
      2   FUROSEMIDE TAB&lt;br /&gt;
 CHOOSE 1-2: 1  FUROSEMIDE&lt;br /&gt;
 ANOTHER ONE: furo&lt;br /&gt;
      1   FUROSEMIDE&lt;br /&gt;
      2   FUROSEMIDE TAB&lt;br /&gt;
 CHOOSE 1-2: 2  FUROSEMIDE TAB&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 774                             &lt;br /&gt;
   NAME: FUROSEMIDE&lt;br /&gt;
   ID: 828;99LRT                         &lt;br /&gt;
   DISPLAY GROUP: LABORATORY&lt;br /&gt;
   PACKAGE NAME: FUROSEMIDE&lt;br /&gt;
   SYNONYM: LASIX&lt;br /&gt;
   SET: LAB&lt;br /&gt;
   TYPE: both&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 1659                            &lt;br /&gt;
   NAME: FUROSEMIDE TAB&lt;br /&gt;
   ID: 1;99PSP  &amp;lt;---- x;99PSP  x=IEN in file# 50.7 (PHARMACY ORDERABLE ITEM)&lt;br /&gt;
   DISPLAY GROUP: PHARMACY&lt;br /&gt;
   PACKAGE NAME: FUROSEMIDE TAB&lt;br /&gt;
   SET: RX&lt;br /&gt;
   SET: UD RX&lt;br /&gt;
   SET: O RX&lt;br /&gt;
     INPATIENT MED: YES                    &lt;br /&gt;
     OUTPATIENT MED: YES&lt;br /&gt;
     IV BASE: NO                           &lt;br /&gt;
     IV ADDITIVE: NO&lt;br /&gt;
     SUPPLY: NO                            &lt;br /&gt;
     NON-FORMULARY: NO&lt;br /&gt;
     NON-VA MEDS: NO&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Select ORDERABLE ITEMS NAME:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 OUTPUT FROM WHAT FILE: 101.44  ORDER QUICK VIEW&lt;br /&gt;
                                           (2 entries)&lt;br /&gt;
 (NOTE: reformatted for easier reading)&lt;br /&gt;
 Select ORDER QUICK VIEW NAME: ?&lt;br /&gt;
     Answer with ORDER QUICK VIEW NAME&lt;br /&gt;
    Choose from:&lt;br /&gt;
    ORWDQ PKG35 DO&lt;br /&gt;
    ORWDSET O RX&lt;br /&gt;
 &lt;br /&gt;
 Select ORDER QUICK VIEW NAME: orwdset O RX&lt;br /&gt;
 ANOTHER ONE:&lt;br /&gt;
 STANDARD CAPTIONED OUTPUT? Yes//   (Yes)&lt;br /&gt;
 Include COMPUTED fields:  (N/Y/R/B): NO// b  BOTH Computed Fields and Record Number (IEN)&lt;br /&gt;
 &lt;br /&gt;
 NUMBER: 2                               &lt;br /&gt;
   NAME: ORWDSET O RX&lt;br /&gt;
   LAST UPDATE: 60201,74282&lt;br /&gt;
   SET MEMBER: FUROSEMIDE TAB              &lt;br /&gt;
     DISPLAY TEXT: FUROSEMIDE TAB&lt;br /&gt;
 &lt;br /&gt;
 Select ORDER QUICK VIEW NAME:&lt;br /&gt;
&lt;br /&gt;
=== Other Important Pharmacy Files and Relationships ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Steps to Adding One Drug / Making Available in CPRS ===&lt;br /&gt;
&lt;br /&gt;
 GTM&amp;gt;set PSEDITNM=1&lt;br /&gt;
 GTM&amp;gt;D D^DI&lt;br /&gt;
 &lt;br /&gt;
 VA FileMan 22.0&lt;br /&gt;
 Select OPTION: enter OR EDIT FILE ENTRIES&lt;br /&gt;
 &lt;br /&gt;
 INPUT TO WHAT FILE: DRUG// 50.7  PHARMACY ORDERABLE ITEM&lt;br /&gt;
                                           (3 entries)&lt;br /&gt;
 EDIT WHICH FIELD: ALL//&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME: VIAGRA&lt;br /&gt;
  Are you adding &#039;VIAGRA&#039; as a new PHARMACY ORDERABLE ITEM (the 4TH)? No// Y&lt;br /&gt;
  (Yes)&lt;br /&gt;
   PHARMACY ORDERABLE ITEM DOSAGE FORM: tab&lt;br /&gt;
     1   TAB&lt;br /&gt;
     2   TAB,BUCC,SA&lt;br /&gt;
     3   TAB,BUCCAL&lt;br /&gt;
     4   TAB,CHEWABLE&lt;br /&gt;
     5   TAB,CHEWG GUM&lt;br /&gt;
 Press &amp;lt;RETURN&amp;gt; to see more, &#039;^&#039; to exit this list, OR&lt;br /&gt;
 CHOOSE 1-5: 1  TAB&lt;br /&gt;
   PHARMACY ORDERABLE ITEM INACTIVE DATE:&lt;br /&gt;
 DOSAGE FORM: TAB//   (No Editing)&lt;br /&gt;
 IV FLAG:&lt;br /&gt;
 INACTIVE DATE:&lt;br /&gt;
 DAY (nD) or DOSE (nL) LIMIT: ??&lt;br /&gt;
     Type a whole number between 0 and 99, 0 decimal digits, followed by either&lt;br /&gt;
     a &amp;quot;D&amp;quot; (for NUMBER OF DAYS) or an &amp;quot;L&amp;quot; (for DOSE LIMIT).&lt;br /&gt;
 DAY (nD) or DOSE (nL) LIMIT: 2L&lt;br /&gt;
 MED ROUTE:&lt;br /&gt;
 SCHEDULE TYPE: r  FILL ON REQUEST&lt;br /&gt;
 SCHEDULE:&lt;br /&gt;
 SUPPLY:&lt;br /&gt;
 Select SYNONYM: VIAGRA&lt;br /&gt;
  Are you adding &#039;VIAGRA&#039; as a new SYNONYM (the 1ST for this PHARMACY ORDERABLE ITEM)? No// Y  (Yes)&lt;br /&gt;
 Select SYNONYM:&lt;br /&gt;
 Select OI-DRUG TEXT ENTRY:&lt;br /&gt;
 PATIENT INSTRUCTIONS: [Do not take with nitroglycerin]&lt;br /&gt;
 &lt;br /&gt;
 [Do not take with nitroglycerin]&lt;br /&gt;
 OTHER LANGUAGE INSTRUCTIONS:&lt;br /&gt;
 NON-VA MED:&lt;br /&gt;
 &lt;br /&gt;
 Select PHARMACY ORDERABLE ITEM NAME:&lt;br /&gt;
 &lt;br /&gt;
 Select OPTION:&lt;br /&gt;
&lt;br /&gt;
Note: You have to go back and edit the INACTIVE DATE, and delete the value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
Now create link from #50, field 2.1 --&amp;gt; 50.7&lt;br /&gt;
------------------------------------------------------------------------------&lt;br /&gt;
 Select OPTION: eNTER OR EDIT FILE ENTRIES&lt;br /&gt;
 &lt;br /&gt;
 INPUT TO WHAT FILE: DRUG// 50  DRUG       (5173 entries)&lt;br /&gt;
 EDIT WHICH FIELD: ALL// pharmACY ORDERABLE ITEM&lt;br /&gt;
 THEN EDIT FIELD:&lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME: viagra&lt;br /&gt;
 1  VIAGRA  SILDENAFIL (Viagra) 50MG TAB   GU900  Use for 25mg dose only&lt;br /&gt;
 2  VIAGRA  SILDENAFIL (Viagra) 100MG TAB  GU900  ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 CHOOSE 1-2: 1  SILDENAFIL (Viagra) 50MG TAB  GU900  Use for 25mg dose only&lt;br /&gt;
 PHARMACY ORDERABLE ITEM: viagra  TAB  04-25-2005 &amp;lt;--- Date is an INACTIVE data. Delete value in 50.7 &lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME: viag&lt;br /&gt;
 1  VIAGRA  SILDENAFIL (Viagra) 50MG TAB   GU900  Use for 25mg dose only&lt;br /&gt;
 2  VIAGRA  SILDENAFIL (Viagra) 100MG TAB  GU900  ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 CHOOSE 1-2: 2  SILDENAFIL (Viagra) 100MG TAB  GU900 ONLY 4 DOSES PER MONTH ALLOWED&lt;br /&gt;
 PHARMACY ORDERABLE ITEM: viagra   TAB  04-25-2005 &amp;lt;--- Date is an INACTIVE data. Delete value in 50.7&lt;br /&gt;
 &lt;br /&gt;
 Select DRUG GENERIC NAME:&lt;br /&gt;
 &lt;br /&gt;
 Select OPTION:&lt;br /&gt;
 &lt;br /&gt;
... to be continued later.....&lt;br /&gt;
&lt;br /&gt;
=== Relevent Menu Options ===&lt;br /&gt;
&lt;br /&gt;
Here is a pharmacy option/menu setup I gathered:&lt;br /&gt;
&lt;br /&gt;
   ADD    Drug Enter/Edit [PSS DRUG ENTER/EDIT]&lt;br /&gt;
   cv     Protocol Conversion Utilities ... [ORCM CONVERSION UTILITIES]&lt;br /&gt;
   EOI    Edit Orderable Items [PSS EDIT ORDERABLE ITEMS]&lt;br /&gt;
   Mgr    Pharmacy Data Management ... [PSS MGR]&lt;br /&gt;
   NDF    National Drug File Menu ... [PSNMGR]&lt;br /&gt;
   Out    Outpatient Pharmacy Manager ... [PSO MANAGER]&lt;br /&gt;
   xxx    Enter/Edit a Drug [PSA DRUG ENTER/EDIT]  &amp;lt;--- don&#039;t use this one&lt;br /&gt;
          Drug Accountability Menu ... [PSA DRUG ACCOUNTABILITY MENU]&lt;br /&gt;
          Drug Receipt History Review [PSA DRUG HISTORY]&lt;br /&gt;
          Drug Transaction History [PSA DRUG DISPLAY]&lt;br /&gt;
          Inquire/Compare DRUG file/ITEM MASTER file [PSA DRUG INQUIRE]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Emails Regarding Adding Drugs ===&lt;br /&gt;
Moved here: [[Pharmacy Setup Emails]]&lt;br /&gt;
&lt;br /&gt;
=== Instructions for entering a drug through menus ===&lt;br /&gt;
Helpful post here:  [[Instructions for New Drug Entry]]&lt;br /&gt;
&lt;br /&gt;
=== RPC Calls ===&lt;br /&gt;
ORWUL^FVSUB -- gets the list of drugs to display in the box.&lt;br /&gt;
&lt;br /&gt;
ORWDXA ISACTOI&lt;br /&gt;
&lt;br /&gt;
ORWDPS1 FAILDEA&lt;br /&gt;
&lt;br /&gt;
ORWOR PKISITE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a drug is selected in the new medicine dialog, the following RPC&#039;s are called:&lt;br /&gt;
&lt;br /&gt;
ORWDPS2 OISLCT&lt;br /&gt;
example params:  1158,0,1,Y,N&lt;br /&gt;
&lt;br /&gt;
Remote procedure file details for this:&lt;br /&gt;
OISLCT^ORWDPS2(LST,OI,PSTYPE,ORVP,NEEDPI,PKIACTIV)&lt;br /&gt;
&lt;br /&gt;
This returns defaults for ordering&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
Params ------------------------------------------------------------------&lt;br /&gt;
literal	1158&lt;br /&gt;
literal	O&lt;br /&gt;
literal	1&lt;br /&gt;
literal	Y&lt;br /&gt;
literal	N&lt;br /&gt;
 &lt;br /&gt;
Results -----------------------------------------------------------------&lt;br /&gt;
~Medication&lt;br /&gt;
d1158^ACYCLOVIR CAP,ORAL &lt;br /&gt;
~Verb&lt;br /&gt;
dTAKE&lt;br /&gt;
~Preposition&lt;br /&gt;
dBY&lt;br /&gt;
~PtInstr&lt;br /&gt;
~AllDoses&lt;br /&gt;
i200MG^5671^200&amp;amp;MG&amp;amp;1&amp;amp;CAPSULE&amp;amp;200MG&amp;amp;5671&amp;amp;200&amp;amp;MG&lt;br /&gt;
i400MG^5671^400&amp;amp;MG&amp;amp;2&amp;amp;CAPSULES&amp;amp;400MG&amp;amp;5671&amp;amp;200&amp;amp;MG&lt;br /&gt;
~Dosage&lt;br /&gt;
iACYCLOVIR 200MG^200MG^^200&amp;amp;MG&amp;amp;1&amp;amp;CAPSULE&amp;amp;200MG&amp;amp;5671&amp;amp;200&amp;amp;MG^200MG^^11^CAP&lt;br /&gt;
iACYCLOVIR 200MG^200MG^^400&amp;amp;MG&amp;amp;2&amp;amp;CAPSULES&amp;amp;400MG&amp;amp;5671&amp;amp;200&amp;amp;MG^400MG^^11^CAP&lt;br /&gt;
~Dispense&lt;br /&gt;
i5671^200^MG^ACYCLOVIR 200MG^0&lt;br /&gt;
~Route&lt;br /&gt;
i1^ORAL^PO^MOUTH^0&lt;br /&gt;
~Schedule&lt;br /&gt;
~Guideline&lt;br /&gt;
~Message&lt;br /&gt;
~DEASchedule&lt;br /&gt;
d&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGTPSTP.m&amp;diff=504</id>
		<title>TMGTPSTP.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGTPSTP.m&amp;diff=504"/>
		<updated>2005-04-18T22:13:19Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; GT.M STEP TRAP&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; K. Toppenberg&lt;br /&gt;
        ;&amp;quot; 4-13-2005&lt;br /&gt;
        ;&amp;quot; License: GPL Applies&lt;br /&gt;
        ;&amp;quot; &lt;br /&gt;
        ;&amp;quot; This code module will allow tracing through code.&lt;br /&gt;
        ;&amp;quot; It is used as follows:&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        ;&amp;quot; zstep into&lt;br /&gt;
        ;&amp;quot; do ^MyFunction   ;&amp;quot;&amp;lt;--- put the function you want to trace here&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;&amp;lt;---turn off step capture&lt;br /&gt;
        ;&amp;quot; quit&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; Dependencies:&lt;br /&gt;
        ;&amp;quot;   Uses TMGTERM&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;Notes:&lt;br /&gt;
        ;&amp;quot;  This function will be called inbetween lines of the main &lt;br /&gt;
        ;&amp;quot;  program that is being traced.  Thus is function can&#039;t do&lt;br /&gt;
        ;&amp;quot;  anything that might change the environment of the main&lt;br /&gt;
        ;&amp;quot;  program.  This includes accessing global variables --&lt;br /&gt;
        ;&amp;quot;  because it will mess up the &amp;quot;naked reference&amp;quot;.&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
     STEPTRAP(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each zstep event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point, and &lt;br /&gt;
                ;&amp;quot;	query user as to plans for future execution: run/step/ etc.&lt;br /&gt;
        &lt;br /&gt;
        new tpBlankLine&lt;br /&gt;
        new tpAction&lt;br /&gt;
        new tpKeyIn&lt;br /&gt;
        new tpRunMode,tpStepMode&lt;br /&gt;
        new tpI&lt;br /&gt;
        new tpDone&lt;br /&gt;
        new result set result=1  ;1=step into, 2=step over&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;Run modes: 0=running mode  &lt;br /&gt;
        ;&amp;quot;           1=stepping mode &lt;br /&gt;
        ;&amp;quot;           2=Don&#039;t show code &lt;br /&gt;
        ;&amp;quot;	    3=running SLOW mode&lt;br /&gt;
        ;&amp;quot;          -1=quit&lt;br /&gt;
        &lt;br /&gt;
        set tpRunMode=$get(TMGRunMode,1)&lt;br /&gt;
        set tpStepMode=$get(TMGStepMode,&amp;quot;into&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,80)&lt;br /&gt;
        &lt;br /&gt;
        set tpBlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for tpI=1:1:ScrWidth-1 set tpBlankLine=tpBlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        if tpRunMode&#039;=2 do&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        else  do&lt;br /&gt;
        . do CUP^TMGTERM(1,2)&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if (tpRunMode=0)!(tpRunMode=3)!(tpRunMode=2) do&lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;(Press any key to pause)&amp;quot;,!&lt;br /&gt;
        . read *tpKeyIn:0&lt;br /&gt;
        . if (tpKeyIn&amp;gt;0) set tpRunMode=1&lt;br /&gt;
        . else  if tpRunMode=3 hang 1&lt;br /&gt;
        &lt;br /&gt;
        if tpRunMode=2 goto SPDone ;&amp;quot;Don&#039;t showmode --&amp;gt; goto SPDone&lt;br /&gt;
        &lt;br /&gt;
        set tpDone=0&lt;br /&gt;
        if tpRunMode=1 for  do  quit:tpDone=1&lt;br /&gt;
        . new DefAction set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        . do CUP^TMGTERM(1,ScrHeight+4) ;&amp;quot;Cursor to line (x,y) &lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;Action (? for help): &amp;quot;&lt;br /&gt;
        . if tpStepMode=&amp;quot;into&amp;quot; write &amp;quot;step INTO// &amp;quot; set DefAction=&amp;quot;I&amp;quot;&lt;br /&gt;
        . else  write &amp;quot;step OVER// &amp;quot; set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . read tpAction,!&lt;br /&gt;
        . if tpAction=&amp;quot;&amp;quot; set tpAction=DefAction&lt;br /&gt;
        . if &amp;quot;rR&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=0&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;lL&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=3&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;mM&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(1)&lt;br /&gt;
        . . new tpLine&lt;br /&gt;
        . . read &amp;quot; enter M code: &amp;quot;,tpLine,!&lt;br /&gt;
        . . xecute tpLine&lt;br /&gt;
        . if &amp;quot;iI&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;into&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Oo&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;over&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep over zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Hh&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=2&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . else  do  quit&lt;br /&gt;
        . . new tpNLines&lt;br /&gt;
        . . for tpNLines=1:1:5 write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(5)&lt;br /&gt;
        . . write &amp;quot; L  -- run in sLow mode&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; M  -- enter any line of M code&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; O  -- step OVER line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; I  -- step INTO line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; R  -- run&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; H  -- Hide debug code&amp;quot;,!&lt;br /&gt;
        &lt;br /&gt;
     SPDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        set TMGRunMode=tpRunMode&lt;br /&gt;
        if tpStepMode=&amp;quot;into&amp;quot; set result=1&lt;br /&gt;
        else  set result=2&lt;br /&gt;
        set TMGStepMode=tpStepMode&lt;br /&gt;
        quit result&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
     ErrTrap(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each ztrap event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point &lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,70)&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        &lt;br /&gt;
        ETDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        quit &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
     ShowCode(Pos,ScrWidth,ScrHeight,Wipe)&lt;br /&gt;
        ;&amp;quot;Purpose: This will display code at the top of the screen&lt;br /&gt;
        ;&amp;quot;Input: Pos -- string like this: X+2^ROUTINE[$DMOD]&lt;br /&gt;
        ;&amp;quot;      ScrWidth -- width of code display (Num of columns)&lt;br /&gt;
        ;	&lt;br /&gt;
        ;&amp;quot;      Wipe -- OPTIONAL.  if 1, then code area is wiped blank&lt;br /&gt;
        &lt;br /&gt;
        new i&lt;br /&gt;
        new Routine,Label,Offest,s&lt;br /&gt;
        new LastRou,LastLabel,LastOffset&lt;br /&gt;
        new dbFGColor,bBGColor,nlFGColor,nlBGColor&lt;br /&gt;
        new BlankLine        &lt;br /&gt;
        new StartOffset&lt;br /&gt;
        &lt;br /&gt;
        set ScrWidth=$get(ScrWidth,80)&lt;br /&gt;
        set ScrHeight=$get(ScrHeight,10)&lt;br /&gt;
        &lt;br /&gt;
        set nlFGColor=$get(TMGNlFGColor,3)&lt;br /&gt;
        set nlBGColor=$get(TMGNlBGColor,0)&lt;br /&gt;
        set dbFGColor=$get(TMGDbFGColor,0)&lt;br /&gt;
        set dbBGColor=$get(TMGDbBGColor,3)&lt;br /&gt;
        &lt;br /&gt;
        set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        do CUP^TMGTERM(1,1) ;&amp;quot;Cursor to line (1,1) &lt;br /&gt;
        write BlankLine,!  ;&amp;quot;This is needed for some reason...&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if $get(Wipe)=1 do  goto SCDone&lt;br /&gt;
        . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . for i=0:1:ScrHeight+1 write BlankLine&lt;br /&gt;
        &lt;br /&gt;
        set s=$piece(Pos,&amp;quot;$&amp;quot;,1)  ;&amp;quot;e.g. X+2^ROUTINE$DMOD--&amp;gt;X+2^ROUTINE&lt;br /&gt;
        set Routine=$piece(s,&amp;quot;^&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(s,&amp;quot;^&amp;quot;,1)&lt;br /&gt;
        set Offset=+$piece(Label,&amp;quot;+&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(Label,&amp;quot;+&amp;quot;,1)&lt;br /&gt;
        &lt;br /&gt;
        set s=&amp;quot;=== Routine: ^&amp;quot;_Routine_&amp;quot; &amp;quot; write s&lt;br /&gt;
        for i=1:1:ScrWidth-$length(s) write &amp;quot;=&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
        if Offset&amp;gt;(ScrHeight) do&lt;br /&gt;
                set StartOffset=(Offset-ScrHeight)&lt;br /&gt;
        else  set StartOffset=0&lt;br /&gt;
        &lt;br /&gt;
        for i=StartOffset:1:(ScrHeight+StartOffset) do&lt;br /&gt;
        . new line,Bl,ref,LoopOffset&lt;br /&gt;
        . set ref=Label_&amp;quot;+&amp;quot;_i_&amp;quot;^&amp;quot;_Routine&lt;br /&gt;
        . set line=$text(@ref)&lt;br /&gt;
        . if (i=Offset) do &lt;br /&gt;
        . . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . . write &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        . else  write &amp;quot; &amp;quot;&lt;br /&gt;
        . if $length(line)&amp;gt;(ScrWidth-1) do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-4),&amp;quot;...&amp;quot;,!&lt;br /&gt;
        . else  do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-1)&lt;br /&gt;
        . . write $extract(BlankLine,1,ScrWidth-$length(line)-1),!&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        for i=1:1:ScrWidth write &amp;quot;~&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
     SCDone&lt;br /&gt;
        ;&amp;quot;do VCULOAD^TMGTERM&lt;br /&gt;
        do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;do CUD^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=502</id>
		<title>TMGIDE.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=502"/>
		<updated>2005-04-18T22:12:34Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; GT.M STEP TRAP&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; K. Toppenberg&lt;br /&gt;
        ;&amp;quot; 4-13-2005&lt;br /&gt;
        ;&amp;quot; License: GPL Applies&lt;br /&gt;
        ;&amp;quot; &lt;br /&gt;
        ;&amp;quot; This code module will allow tracing through code.&lt;br /&gt;
        ;&amp;quot; It is used as follows:&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        ;&amp;quot; zstep into&lt;br /&gt;
        ;&amp;quot; do ^MyFunction   ;&amp;quot;&amp;lt;--- put the function you want to trace here&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;&amp;lt;---turn off step capture&lt;br /&gt;
        ;&amp;quot; quit&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; Dependencies:&lt;br /&gt;
        ;&amp;quot;   Uses TMGTERM&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;Notes:&lt;br /&gt;
        ;&amp;quot;  This function will be called inbetween lines of the main &lt;br /&gt;
        ;&amp;quot;  program that is being traced.  Thus is function can&#039;t do&lt;br /&gt;
        ;&amp;quot;  anything that might change the environment of the main&lt;br /&gt;
        ;&amp;quot;  program.  This includes accessing global variables --&lt;br /&gt;
        ;&amp;quot;  because it will mess up the &amp;quot;naked reference&amp;quot;.&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
     STEPTRAP(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each zstep event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point, and &lt;br /&gt;
                ;&amp;quot;	query user as to plans for future execution: run/step/ etc.&lt;br /&gt;
        &lt;br /&gt;
        new tpBlankLine&lt;br /&gt;
        new tpAction&lt;br /&gt;
        new tpKeyIn&lt;br /&gt;
        new tpRunMode,tpStepMode&lt;br /&gt;
        new tpI&lt;br /&gt;
        new tpDone&lt;br /&gt;
        new result set result=1  ;1=step into, 2=step over&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;Run modes: 0=running mode  &lt;br /&gt;
        ;&amp;quot;           1=stepping mode &lt;br /&gt;
        ;&amp;quot;           2=Don&#039;t show code &lt;br /&gt;
        ;&amp;quot;	    3=running SLOW mode&lt;br /&gt;
        ;&amp;quot;          -1=quit&lt;br /&gt;
        &lt;br /&gt;
        set tpRunMode=$get(TMGRunMode,1)&lt;br /&gt;
        set tpStepMode=$get(TMGStepMode,&amp;quot;into&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,80)&lt;br /&gt;
        &lt;br /&gt;
        set tpBlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for tpI=1:1:ScrWidth-1 set tpBlankLine=tpBlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        if tpRunMode&#039;=2 do&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        else  do&lt;br /&gt;
        . do CUP^TMGTERM(1,2)&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if (tpRunMode=0)!(tpRunMode=3)!(tpRunMode=2) do&lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;(Press any key to pause)&amp;quot;,!&lt;br /&gt;
        . read *tpKeyIn:0&lt;br /&gt;
        . if (tpKeyIn&amp;gt;0) set tpRunMode=1&lt;br /&gt;
        . else  if tpRunMode=3 hang 1&lt;br /&gt;
        &lt;br /&gt;
        if tpRunMode=2 goto SPDone ;&amp;quot;Don&#039;t showmode --&amp;gt; goto SPDone&lt;br /&gt;
        &lt;br /&gt;
        set tpDone=0&lt;br /&gt;
        if tpRunMode=1 for  do  quit:tpDone=1&lt;br /&gt;
        . new DefAction set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        . do CUP^TMGTERM(1,ScrHeight+4) ;&amp;quot;Cursor to line (x,y) &lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;Action (? for help): &amp;quot;&lt;br /&gt;
        . if tpStepMode=&amp;quot;into&amp;quot; write &amp;quot;step INTO// &amp;quot; set DefAction=&amp;quot;I&amp;quot;&lt;br /&gt;
        . else  write &amp;quot;step OVER// &amp;quot; set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . read tpAction,!&lt;br /&gt;
        . if tpAction=&amp;quot;&amp;quot; set tpAction=DefAction&lt;br /&gt;
        . if &amp;quot;rR&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=0&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;lL&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=3&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;mM&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(1)&lt;br /&gt;
        . . new tpLine&lt;br /&gt;
        . . read &amp;quot; enter M code: &amp;quot;,tpLine,!&lt;br /&gt;
        . . xecute tpLine&lt;br /&gt;
        . if &amp;quot;iI&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;into&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Oo&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;over&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep over zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Hh&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=2&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . else  do  quit&lt;br /&gt;
        . . new tpNLines&lt;br /&gt;
        . . for tpNLines=1:1:5 write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(5)&lt;br /&gt;
        . . write &amp;quot; L  -- run in sLow mode&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; M  -- enter any line of M code&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; O  -- step OVER line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; I  -- step INTO line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; R  -- run&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; H  -- Hide debug code&amp;quot;,!&lt;br /&gt;
        &lt;br /&gt;
     SPDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        set TMGRunMode=tpRunMode&lt;br /&gt;
        if tpStepMode=&amp;quot;into&amp;quot; set result=1&lt;br /&gt;
        else  set result=2&lt;br /&gt;
        set TMGStepMode=tpStepMode&lt;br /&gt;
        quit result&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
     ErrTrap(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each ztrap event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point &lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,70)&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        &lt;br /&gt;
        ETDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        quit &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
     ShowCode(Pos,ScrWidth,ScrHeight,Wipe)&lt;br /&gt;
        ;&amp;quot;Purpose: This will display code at the top of the screen&lt;br /&gt;
        ;&amp;quot;Input: Pos -- string like this: X+2^ROUTINE[$DMOD]&lt;br /&gt;
        ;&amp;quot;      ScrWidth -- width of code display (Num of columns)&lt;br /&gt;
        ;	&lt;br /&gt;
        ;&amp;quot;      Wipe -- OPTIONAL.  if 1, then code area is wiped blank&lt;br /&gt;
        &lt;br /&gt;
        new i&lt;br /&gt;
        new Routine,Label,Offest,s&lt;br /&gt;
        new LastRou,LastLabel,LastOffset&lt;br /&gt;
        new dbFGColor,bBGColor,nlFGColor,nlBGColor&lt;br /&gt;
        new BlankLine        &lt;br /&gt;
        new StartOffset&lt;br /&gt;
        &lt;br /&gt;
        set ScrWidth=$get(ScrWidth,80)&lt;br /&gt;
        set ScrHeight=$get(ScrHeight,10)&lt;br /&gt;
        &lt;br /&gt;
        set nlFGColor=$get(TMGNlFGColor,3)&lt;br /&gt;
        set nlBGColor=$get(TMGNlBGColor,0)&lt;br /&gt;
        set dbFGColor=$get(TMGDbFGColor,0)&lt;br /&gt;
        set dbBGColor=$get(TMGDbBGColor,3)&lt;br /&gt;
        &lt;br /&gt;
        set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        do CUP^TMGTERM(1,1) ;&amp;quot;Cursor to line (1,1) &lt;br /&gt;
        write BlankLine,!  ;&amp;quot;This is needed for some reason...&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if $get(Wipe)=1 do  goto SCDone&lt;br /&gt;
        . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . for i=0:1:ScrHeight+1 write BlankLine&lt;br /&gt;
        &lt;br /&gt;
        set s=$piece(Pos,&amp;quot;$&amp;quot;,1)  ;&amp;quot;e.g. X+2^ROUTINE$DMOD--&amp;gt;X+2^ROUTINE&lt;br /&gt;
        set Routine=$piece(s,&amp;quot;^&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(s,&amp;quot;^&amp;quot;,1)&lt;br /&gt;
        set Offset=+$piece(Label,&amp;quot;+&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(Label,&amp;quot;+&amp;quot;,1)&lt;br /&gt;
        &lt;br /&gt;
        set s=&amp;quot;=== Routine: ^&amp;quot;_Routine_&amp;quot; &amp;quot; write s&lt;br /&gt;
        for i=1:1:ScrWidth-$length(s) write &amp;quot;=&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
        if Offset&amp;gt;(ScrHeight) do&lt;br /&gt;
                set StartOffset=(Offset-ScrHeight)&lt;br /&gt;
        else  set StartOffset=0&lt;br /&gt;
        &lt;br /&gt;
        for i=StartOffset:1:(ScrHeight+StartOffset) do&lt;br /&gt;
        . new line,Bl,ref,LoopOffset&lt;br /&gt;
        . set ref=Label_&amp;quot;+&amp;quot;_i_&amp;quot;^&amp;quot;_Routine&lt;br /&gt;
        . set line=$text(@ref)&lt;br /&gt;
        . if (i=Offset) do &lt;br /&gt;
        . . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . . write &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        . else  write &amp;quot; &amp;quot;&lt;br /&gt;
        . if $length(line)&amp;gt;(ScrWidth-1) do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-4),&amp;quot;...&amp;quot;,!&lt;br /&gt;
        . else  do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-1)&lt;br /&gt;
        . . write $extract(BlankLine,1,ScrWidth-$length(line)-1),!&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        for i=1:1:ScrWidth write &amp;quot;~&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
     SCDone&lt;br /&gt;
        ;&amp;quot;do VCULOAD^TMGTERM&lt;br /&gt;
        do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;do CUD^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=366</id>
		<title>TMGIDE.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=366"/>
		<updated>2005-04-18T22:09:26Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; GT.M STEP TRAP&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; K. Toppenberg&lt;br /&gt;
        ;&amp;quot; 4-13-2005&lt;br /&gt;
        ;&amp;quot; License: GPL Applies&lt;br /&gt;
        ;&amp;quot; &lt;br /&gt;
        ;&amp;quot; This code module will allow tracing through code.&lt;br /&gt;
        ;&amp;quot; It is used as follows:&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        ;&amp;quot; zstep into&lt;br /&gt;
        ;&amp;quot; do ^MyFunction   ;&amp;quot;&amp;lt;--- put the function you want to trace here&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;&amp;lt;---turn off step capture&lt;br /&gt;
        ;&amp;quot; quit&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; Dependencies:&lt;br /&gt;
        ;&amp;quot;   Uses TMGTERM&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;Notes:&lt;br /&gt;
        ;&amp;quot;  This function will be called inbetween lines of the main &lt;br /&gt;
        ;&amp;quot;  program that is being traced.  Thus is function can&#039;t do&lt;br /&gt;
        ;&amp;quot;  anything that might change the environment of the main&lt;br /&gt;
        ;&amp;quot;  program.  This includes accessing global variables --&lt;br /&gt;
        ;&amp;quot;  because it will mess up the &amp;quot;naked reference&amp;quot;.&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        &lt;br /&gt;
        STEPTRAP(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each zstep event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point, and &lt;br /&gt;
                ;&amp;quot;	query user as to plans for future execution: run/step/ etc.&lt;br /&gt;
        &lt;br /&gt;
        new tpBlankLine&lt;br /&gt;
        new tpAction&lt;br /&gt;
        new tpKeyIn&lt;br /&gt;
        new tpRunMode,tpStepMode&lt;br /&gt;
        new tpI&lt;br /&gt;
        new tpDone&lt;br /&gt;
        new result set result=1  ;1=step into, 2=step over&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;Run modes: 0=running mode  &lt;br /&gt;
        ;&amp;quot;           1=stepping mode &lt;br /&gt;
        ;&amp;quot;           2=Don&#039;t show code &lt;br /&gt;
        ;&amp;quot;	    3=running SLOW mode&lt;br /&gt;
        ;&amp;quot;          -1=quit&lt;br /&gt;
        &lt;br /&gt;
        set tpRunMode=$get(TMGRunMode,1)&lt;br /&gt;
        set tpStepMode=$get(TMGStepMode,&amp;quot;into&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,80)&lt;br /&gt;
        &lt;br /&gt;
        set tpBlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for tpI=1:1:ScrWidth-1 set tpBlankLine=tpBlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        if tpRunMode&#039;=2 do&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        else  do&lt;br /&gt;
        . do CUP^TMGTERM(1,2)&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if (tpRunMode=0)!(tpRunMode=3)!(tpRunMode=2) do&lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;(Press any key to pause)&amp;quot;,!&lt;br /&gt;
        . read *tpKeyIn:0&lt;br /&gt;
        . if (tpKeyIn&amp;gt;0) set tpRunMode=1&lt;br /&gt;
        . else  if tpRunMode=3 hang 1&lt;br /&gt;
        &lt;br /&gt;
        if tpRunMode=2 goto SPDone ;&amp;quot;Don&#039;t showmode --&amp;gt; goto SPDone&lt;br /&gt;
        &lt;br /&gt;
        set tpDone=0&lt;br /&gt;
        if tpRunMode=1 for  do  quit:tpDone=1&lt;br /&gt;
        . new DefAction set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        . do CUP^TMGTERM(1,ScrHeight+4) ;&amp;quot;Cursor to line (x,y) &lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;Action (? for help): &amp;quot;&lt;br /&gt;
        . if tpStepMode=&amp;quot;into&amp;quot; write &amp;quot;step INTO// &amp;quot; set DefAction=&amp;quot;I&amp;quot;&lt;br /&gt;
        . else  write &amp;quot;step OVER// &amp;quot; set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . read tpAction,!&lt;br /&gt;
        . if tpAction=&amp;quot;&amp;quot; set tpAction=DefAction&lt;br /&gt;
        . if &amp;quot;rR&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=0&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;lL&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=3&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;mM&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(1)&lt;br /&gt;
        . . new tpLine&lt;br /&gt;
        . . read &amp;quot; enter M code: &amp;quot;,tpLine,!&lt;br /&gt;
        . . xecute tpLine&lt;br /&gt;
        . if &amp;quot;iI&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;into&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Oo&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;over&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep over zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Hh&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=2&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . else  do  quit&lt;br /&gt;
        . . new tpNLines&lt;br /&gt;
        . . for tpNLines=1:1:5 write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(5)&lt;br /&gt;
        . . write &amp;quot; L  -- run in sLow mode&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; M  -- enter any line of M code&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; O  -- step OVER line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; I  -- step INTO line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; R  -- run&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; H  -- Hide debug code&amp;quot;,!&lt;br /&gt;
        &lt;br /&gt;
        SPDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        set TMGRunMode=tpRunMode&lt;br /&gt;
        if tpStepMode=&amp;quot;into&amp;quot; set result=1&lt;br /&gt;
        else  set result=2&lt;br /&gt;
        set TMGStepMode=tpStepMode&lt;br /&gt;
        quit result&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        ErrTrap(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each ztrap event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point &lt;br /&gt;
        &lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,70)&lt;br /&gt;
        &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        &lt;br /&gt;
        ETDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        quit &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        ShowCode(Pos,ScrWidth,ScrHeight,Wipe)&lt;br /&gt;
        ;&amp;quot;Purpose: This will display code at the top of the screen&lt;br /&gt;
        ;&amp;quot;Input: Pos -- string like this: X+2^ROUTINE[$DMOD]&lt;br /&gt;
        ;&amp;quot;      ScrWidth -- width of code display (Num of columns)&lt;br /&gt;
        ;	&lt;br /&gt;
        ;&amp;quot;      Wipe -- OPTIONAL.  if 1, then code area is wiped blank&lt;br /&gt;
        &lt;br /&gt;
        new i&lt;br /&gt;
        new Routine,Label,Offest,s&lt;br /&gt;
        new LastRou,LastLabel,LastOffset&lt;br /&gt;
        new dbFGColor,bBGColor,nlFGColor,nlBGColor&lt;br /&gt;
        new BlankLine        &lt;br /&gt;
        new StartOffset&lt;br /&gt;
        &lt;br /&gt;
        set ScrWidth=$get(ScrWidth,80)&lt;br /&gt;
        set ScrHeight=$get(ScrHeight,10)&lt;br /&gt;
        &lt;br /&gt;
        set nlFGColor=$get(TMGNlFGColor,3)&lt;br /&gt;
        set nlBGColor=$get(TMGNlBGColor,0)&lt;br /&gt;
        set dbFGColor=$get(TMGDbFGColor,0)&lt;br /&gt;
        set dbBGColor=$get(TMGDbBGColor,3)&lt;br /&gt;
        &lt;br /&gt;
        set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        do CUP^TMGTERM(1,1) ;&amp;quot;Cursor to line (1,1) &lt;br /&gt;
        write BlankLine,!  ;&amp;quot;This is needed for some reason...&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        if $get(Wipe)=1 do  goto SCDone&lt;br /&gt;
        . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . for i=0:1:ScrHeight+1 write BlankLine&lt;br /&gt;
        &lt;br /&gt;
        set s=$piece(Pos,&amp;quot;$&amp;quot;,1)  ;&amp;quot;e.g. X+2^ROUTINE$DMOD--&amp;gt;X+2^ROUTINE&lt;br /&gt;
        set Routine=$piece(s,&amp;quot;^&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(s,&amp;quot;^&amp;quot;,1)&lt;br /&gt;
        set Offset=+$piece(Label,&amp;quot;+&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(Label,&amp;quot;+&amp;quot;,1)&lt;br /&gt;
        &lt;br /&gt;
        set s=&amp;quot;=== Routine: ^&amp;quot;_Routine_&amp;quot; &amp;quot; write s&lt;br /&gt;
        for i=1:1:ScrWidth-$length(s) write &amp;quot;=&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
        if Offset&amp;gt;(ScrHeight) do&lt;br /&gt;
                set StartOffset=(Offset-ScrHeight)&lt;br /&gt;
        else  set StartOffset=0&lt;br /&gt;
        &lt;br /&gt;
        for i=StartOffset:1:(ScrHeight+StartOffset) do&lt;br /&gt;
        . new line,Bl,ref,LoopOffset&lt;br /&gt;
        . set ref=Label_&amp;quot;+&amp;quot;_i_&amp;quot;^&amp;quot;_Routine&lt;br /&gt;
        . set line=$text(@ref)&lt;br /&gt;
        . if (i=Offset) do &lt;br /&gt;
        . . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . . write &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        . else  write &amp;quot; &amp;quot;&lt;br /&gt;
        . if $length(line)&amp;gt;(ScrWidth-1) do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-4),&amp;quot;...&amp;quot;,!&lt;br /&gt;
        . else  do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-1)&lt;br /&gt;
        . . write $extract(BlankLine,1,ScrWidth-$length(line)-1),!&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        &lt;br /&gt;
        for i=1:1:ScrWidth write &amp;quot;~&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
        &lt;br /&gt;
        SCDone&lt;br /&gt;
        ;&amp;quot;do VCULOAD^TMGTERM&lt;br /&gt;
        do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        &lt;br /&gt;
        ;&amp;quot;do CUD^TMGTERM(2)&lt;br /&gt;
        &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=365</id>
		<title>TMGIDE.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=365"/>
		<updated>2005-04-18T22:03:57Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; GT.M STEP TRAP&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; K. Toppenberg&lt;br /&gt;
        ;&amp;quot; 4-13-2005&lt;br /&gt;
        ;&amp;quot; License: GPL Applies&lt;br /&gt;
        ;&amp;quot; &lt;br /&gt;
        ;&amp;quot; This code module will allow tracing through code.&lt;br /&gt;
        ;&amp;quot; It is used as follows:&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        ;&amp;quot; zstep into&lt;br /&gt;
        ;&amp;quot; do ^MyFunction   ;&amp;quot;&amp;lt;--- put the function you want to trace here&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;&amp;lt;---turn off step capture&lt;br /&gt;
        ;&amp;quot; quit&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot; Dependencies:&lt;br /&gt;
        ;&amp;quot;   Uses TMGTERM&lt;br /&gt;
        ;&amp;quot;&lt;br /&gt;
        ;&amp;quot;Notes:&lt;br /&gt;
        ;&amp;quot;  This function will be called inbetween lines of the main &lt;br /&gt;
        ;&amp;quot;  program that is being traced.  Thus is function can&#039;t do&lt;br /&gt;
        ;&amp;quot;  anything that might change the environment of the main&lt;br /&gt;
        ;&amp;quot;  program.  This includes accessing global variables --&lt;br /&gt;
        ;&amp;quot;  because it will mess up the &amp;quot;naked reference&amp;quot;.&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
        ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
        STEPTRAP(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each zstep event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point, and &lt;br /&gt;
                ;&amp;quot;	query user as to plans for future execution: run/step/ etc.&lt;br /&gt;
&lt;br /&gt;
        new tpBlankLine&lt;br /&gt;
        new tpAction&lt;br /&gt;
        new tpKeyIn&lt;br /&gt;
        new tpRunMode,tpStepMode&lt;br /&gt;
        new tpI&lt;br /&gt;
        new tpDone&lt;br /&gt;
        new result set result=1  ;1=step into, 2=step over&lt;br /&gt;
&lt;br /&gt;
        ;&amp;quot;Run modes: 0=running mode  &lt;br /&gt;
        ;&amp;quot;           1=stepping mode &lt;br /&gt;
        ;&amp;quot;           2=Don&#039;t show code &lt;br /&gt;
        ;&amp;quot;	    3=running SLOW mode&lt;br /&gt;
        ;&amp;quot;          -1=quit&lt;br /&gt;
&lt;br /&gt;
        set tpRunMode=$get(TMGRunMode,1)&lt;br /&gt;
        set tpStepMode=$get(TMGStepMode,&amp;quot;into&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,80)&lt;br /&gt;
&lt;br /&gt;
        set tpBlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for tpI=1:1:ScrWidth-1 set tpBlankLine=tpBlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        if tpRunMode&#039;=2 do&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        else  do&lt;br /&gt;
        . do CUP^TMGTERM(1,2)&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        write tpBlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
&lt;br /&gt;
        if (tpRunMode=0)!(tpRunMode=3)!(tpRunMode=2) do&lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;(Press any key to pause)&amp;quot;,!&lt;br /&gt;
        . read *tpKeyIn:0&lt;br /&gt;
        . if (tpKeyIn&amp;gt;0) set tpRunMode=1&lt;br /&gt;
        . else  if tpRunMode=3 hang 1&lt;br /&gt;
&lt;br /&gt;
        if tpRunMode=2 goto SPDone ;&amp;quot;Don&#039;t showmode --&amp;gt; goto SPDone&lt;br /&gt;
&lt;br /&gt;
        set tpDone=0&lt;br /&gt;
        if tpRunMode=1 for  do  quit:tpDone=1&lt;br /&gt;
        . new DefAction set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
        . do CUP^TMGTERM(1,ScrHeight+4) ;&amp;quot;Cursor to line (x,y) &lt;br /&gt;
        . write tpBlankLine,!&lt;br /&gt;
        . do CUU^TMGTERM(1)&lt;br /&gt;
        . write &amp;quot;Action (? for help): &amp;quot;&lt;br /&gt;
        . if tpStepMode=&amp;quot;into&amp;quot; write &amp;quot;step INTO// &amp;quot; set DefAction=&amp;quot;I&amp;quot;&lt;br /&gt;
        . else  write &amp;quot;step OVER// &amp;quot; set DefAction=&amp;quot;O&amp;quot;&lt;br /&gt;
        . read tpAction,!&lt;br /&gt;
        . if tpAction=&amp;quot;&amp;quot; set tpAction=DefAction&lt;br /&gt;
        . if &amp;quot;rR&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=0&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;lL&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=3&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;mM&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(1)&lt;br /&gt;
        . . new tpLine&lt;br /&gt;
        . . read &amp;quot; enter M code: &amp;quot;,tpLine,!&lt;br /&gt;
        . . xecute tpLine&lt;br /&gt;
        . if &amp;quot;iI&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;into&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Oo&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpStepMode=&amp;quot;over&amp;quot;&lt;br /&gt;
        . . ;&amp;quot;set $ZSTEP=&amp;quot;do STEPTRAP^TMGTPSTP($ZPOS) zstep over zcontinue&amp;quot;&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . if &amp;quot;Hh&amp;quot;[tpAction do  quit&lt;br /&gt;
        . . set tpRunMode=2&lt;br /&gt;
        . . set tpDone=1&lt;br /&gt;
        . else  do  quit&lt;br /&gt;
        . . new tpNLines&lt;br /&gt;
        . . for tpNLines=1:1:5 write tpBlankLine,!&lt;br /&gt;
        . . do CUU^TMGTERM(5)&lt;br /&gt;
        . . write &amp;quot; L  -- run in sLow mode&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; M  -- enter any line of M code&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; O  -- step OVER line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; I  -- step INTO line&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; R  -- run&amp;quot;,!&lt;br /&gt;
        . . write &amp;quot; H  -- Hide debug code&amp;quot;,!&lt;br /&gt;
&lt;br /&gt;
        SPDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        set TMGRunMode=tpRunMode&lt;br /&gt;
        if tpStepMode=&amp;quot;into&amp;quot; set result=1&lt;br /&gt;
        else  set result=2&lt;br /&gt;
        set TMGStepMode=tpStepMode&lt;br /&gt;
        quit result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        ErrTrap(Pos)&lt;br /&gt;
                ;&amp;quot;Purpose: This is the line that is called by GT.M for each ztrap event.&lt;br /&gt;
                ;&amp;quot;	It will be used to display the current code execution point &lt;br /&gt;
&lt;br /&gt;
        new ScrHeight,ScrWidth&lt;br /&gt;
        set ScrHeight=$get(TMGScrHeight,10)&lt;br /&gt;
        set ScrWidth=$get(TMGScrWidth,70)&lt;br /&gt;
&lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        do ShowCodePos(Pos,ScrWidth,ScrHeight)&lt;br /&gt;
&lt;br /&gt;
        ETDone&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
        quit &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        ShowCode(Pos,ScrWidth,ScrHeight,Wipe)&lt;br /&gt;
        ;&amp;quot;Purpose: This will display code at the top of the screen&lt;br /&gt;
        ;&amp;quot;Input: Pos -- string like this: X+2^ROUTINE[$DMOD]&lt;br /&gt;
        ;&amp;quot;      ScrWidth -- width of code display (Num of columns)&lt;br /&gt;
        ;	&lt;br /&gt;
        ;&amp;quot;      Wipe -- OPTIONAL.  if 1, then code area is wiped blank&lt;br /&gt;
&lt;br /&gt;
        new i&lt;br /&gt;
        new Routine,Label,Offest,s&lt;br /&gt;
        new LastRou,LastLabel,LastOffset&lt;br /&gt;
        new dbFGColor,bBGColor,nlFGColor,nlBGColor&lt;br /&gt;
        new BlankLine        &lt;br /&gt;
        new StartOffset&lt;br /&gt;
&lt;br /&gt;
        set ScrWidth=$get(ScrWidth,80)&lt;br /&gt;
        set ScrHeight=$get(ScrHeight,10)&lt;br /&gt;
&lt;br /&gt;
        set nlFGColor=$get(TMGNlFGColor,3)&lt;br /&gt;
        set nlBGColor=$get(TMGNlBGColor,0)&lt;br /&gt;
        set dbFGColor=$get(TMGDbFGColor,0)&lt;br /&gt;
        set dbBGColor=$get(TMGDbBGColor,3)&lt;br /&gt;
&lt;br /&gt;
        set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
&lt;br /&gt;
        do CUP^TMGTERM(1,1) ;&amp;quot;Cursor to line (1,1) &lt;br /&gt;
        write BlankLine,!  ;&amp;quot;This is needed for some reason...&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
&lt;br /&gt;
        if $get(Wipe)=1 do  goto SCDone&lt;br /&gt;
        . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . for i=0:1:ScrHeight+1 write BlankLine&lt;br /&gt;
&lt;br /&gt;
        set s=$piece(Pos,&amp;quot;$&amp;quot;,1)  ;&amp;quot;e.g. X+2^ROUTINE$DMOD--&amp;gt;X+2^ROUTINE&lt;br /&gt;
        set Routine=$piece(s,&amp;quot;^&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(s,&amp;quot;^&amp;quot;,1)&lt;br /&gt;
        set Offset=+$piece(Label,&amp;quot;+&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(Label,&amp;quot;+&amp;quot;,1)&lt;br /&gt;
&lt;br /&gt;
        set s=&amp;quot;=== Routine: ^&amp;quot;_Routine_&amp;quot; &amp;quot; write s&lt;br /&gt;
        for i=1:1:ScrWidth-$length(s) write &amp;quot;=&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
&lt;br /&gt;
        if Offset&amp;gt;(ScrHeight) do&lt;br /&gt;
                set StartOffset=(Offset-ScrHeight)&lt;br /&gt;
        else  set StartOffset=0&lt;br /&gt;
&lt;br /&gt;
        for i=StartOffset:1:(ScrHeight+StartOffset) do&lt;br /&gt;
        . new line,Bl,ref,LoopOffset&lt;br /&gt;
        . set ref=Label_&amp;quot;+&amp;quot;_i_&amp;quot;^&amp;quot;_Routine&lt;br /&gt;
        . set line=$text(@ref)&lt;br /&gt;
        . if (i=Offset) do &lt;br /&gt;
        . . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . . write &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        . else  write &amp;quot; &amp;quot;&lt;br /&gt;
        . if $length(line)&amp;gt;(ScrWidth-1) do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-4),&amp;quot;...&amp;quot;,!&lt;br /&gt;
        . else  do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-1)&lt;br /&gt;
        . . write $extract(BlankLine,1,ScrWidth-$length(line)-1),!&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
&lt;br /&gt;
        for i=1:1:ScrWidth write &amp;quot;~&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
&lt;br /&gt;
        SCDone&lt;br /&gt;
        ;&amp;quot;do VCULOAD^TMGTERM&lt;br /&gt;
        do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
&lt;br /&gt;
        ;&amp;quot;do CUD^TMGTERM(2)&lt;br /&gt;
&lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=369</id>
		<title>Debugging with GT.M</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=369"/>
		<updated>2005-04-14T22:26:05Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* Simple &amp;#039;IDE&amp;#039; with GT.M */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Simple &#039;IDE&#039; with GT.M ===&lt;br /&gt;
&lt;br /&gt;
This is a simple (pre pre alpha) IDE created with GT.M debugging commands:&lt;br /&gt;
&lt;br /&gt;
It will currently show the source code, with the current line highlighted, as it steps through the code.&lt;br /&gt;
&lt;br /&gt;
Here are the modules&lt;br /&gt;
[[TMGIDE.m]]&lt;br /&gt;
[[TMGTERM.m]]&lt;br /&gt;
[[TMGTPSTP.m]]&lt;br /&gt;
&lt;br /&gt;
To invoke:&lt;br /&gt;
 do ^TMGIDE&lt;br /&gt;
&lt;br /&gt;
K. Toppenberg&lt;br /&gt;
&lt;br /&gt;
=== GT.M Debugging commands ===&lt;br /&gt;
This information is from the GT.M Programmer&#039;s Manual.  I&#039;ll just summarize a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* $ECODE&lt;br /&gt;
    This is a list of past errors, separated by commas. &lt;br /&gt;
    Subsequent errors are added to the end of the list.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ECODE&lt;br /&gt;
      ,M6,Z150373850, &lt;br /&gt;
    Errors beginning with: &amp;quot;M&amp;quot; are standard errors&lt;br /&gt;
                           &amp;quot;U&amp;quot; are user errors&lt;br /&gt;
                           &amp;quot;Z&amp;quot; are GT.M errors&lt;br /&gt;
&lt;br /&gt;
* $ZSTATUS&lt;br /&gt;
    This is detail about the most recent error.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ZSTATUS&lt;br /&gt;
      150373850,SubName+3^MyFunct,%GTM-E-UNDEF, Undefined local variable: Jxack&lt;br /&gt;
&lt;br /&gt;
* $ZMESSAGE(x)&lt;br /&gt;
    This will give a text message for a given error number.&lt;br /&gt;
    Example: To get details about the error number, 150373850, given above...&lt;br /&gt;
      GTM&amp;gt;w $ZMESSAGE(150373850)&lt;br /&gt;
      %GTM-E-UNDEF, Undefined local variable: !AD&lt;br /&gt;
&lt;br /&gt;
* ZPRINT x  (e.g. ZPRINT SubName+3^MyFunct)&lt;br /&gt;
    This will display the line that cause the program exception.&lt;br /&gt;
    The &#039;x&#039; may be obtained from $ZSTATUS, or from $ZPOS (see below)&lt;br /&gt;
&lt;br /&gt;
* $ZPOSITION (OR $ZPOS)&lt;br /&gt;
    Shows the current position of the current line of execution &lt;br /&gt;
   (or the last line exececuted in case of an error)&lt;br /&gt;
&lt;br /&gt;
* ZWRITE&lt;br /&gt;
    Shows the entire variable table, displaying all defined variables.&lt;br /&gt;
&lt;br /&gt;
* ZBREAK address&lt;br /&gt;
    Toggles a break point at address&lt;br /&gt;
    It is possible to have the breakpoint execute code, and then resume.  See manual.&lt;br /&gt;
&lt;br /&gt;
* ZSTEP x&lt;br /&gt;
    Will execute the program one line at a time.  I think this would be typically&lt;br /&gt;
    used after a ZBREAK drops command back to GT.M&amp;gt; prompt.&lt;br /&gt;
      ZSTEP INTO -- start execution at current execution point, and stops at&lt;br /&gt;
                    next line (even if that line is in a subroutine).&lt;br /&gt;
      ZSTEP [OVER] -- start execution at current exec. point, and stop at the &lt;br /&gt;
                    next line at the same level on the invocation stack.&lt;br /&gt;
      ZSTEP OUTOF -- ??&lt;br /&gt;
&lt;br /&gt;
* ZCONTINUE&lt;br /&gt;
    Continue execution from break point.&lt;br /&gt;
&lt;br /&gt;
* $STACK AND $ZLEVEL&lt;br /&gt;
    $STACK starts at 0 and each DO inc&#039;s the value, each QUIT dec&#039;s it&lt;br /&gt;
    $ZLEVEL is $STACK+1&lt;br /&gt;
&lt;br /&gt;
.. More later&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGTERM.m&amp;diff=509</id>
		<title>TMGTERM.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGTERM.m&amp;diff=509"/>
		<updated>2005-04-14T22:24:31Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; ;&amp;quot;--------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;Terminal interface &lt;br /&gt;
 ;&amp;quot;ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals&lt;br /&gt;
 ;&amp;quot;      in alphabetic order by mnemonic&lt;br /&gt;
 &lt;br /&gt;
 EscN(Num,N2,Cmd)&lt;br /&gt;
        write $char(27,91)_Num&lt;br /&gt;
        if $data(N2) write &amp;quot;;&amp;quot;_N2&lt;br /&gt;
        if $data(Cmd) write Cmd&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 CBT(Pn) ;&amp;quot;CBT  Cursor Backward Tab  Esc [ Pn Z&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;Z&amp;quot;)&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 CCH     ;&amp;quot;Cancel Previous Character Esc T&lt;br /&gt;
        write $char(27)_&amp;quot;T&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 CHA(Pn) ;&amp;quot;Cursor Horzntal Absolute  Esc [ Pn G&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;G&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CHT(Pn) ;&amp;quot;Cursor Horizontal Tab     Esc [ Pn I&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;I&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CNL(Pn) ;&amp;quot;Cursor Next Line          Esc [ Pn E&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;E&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CPL(Pn) ;&amp;quot;Cursor Preceding Line     Esc [ Pn F&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;F&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CPR(Pn,P2) ;&amp;quot;Cursor Position Report Esc [ Pn ; Pn R     VT100&lt;br /&gt;
        do EscN(.Pn,.P2,&amp;quot;R&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CTC(Pn) ;&amp;quot;Cursor Tab Control        Esc [ Ps W&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;W&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUB(Pn) ;&amp;quot;Cursor Backward           Esc [ Pn D          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;D&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUD(Pn) ;&amp;quot;Cursor Down               Esc [ Pn B          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;B&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUF(Pn) ;&amp;quot;Cursor Forward            Esc [ Pn C          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;C&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUP(X,Y) ;&amp;quot;Cursor Position        Esc [ Pn ; Pn H     VT100&lt;br /&gt;
        do EscN(.Y,.X,&amp;quot;H&amp;quot;) quit&lt;br /&gt;
                                                                         &lt;br /&gt;
 HOME    ;&amp;quot;Cursor Home               Esc [ H&lt;br /&gt;
        w $char(27,91)_&amp;quot;H&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 CUU(Pn) ;&amp;quot;Cursor Up                 Esc [ Pn A          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CVT(Pn) ;&amp;quot;Cursor Vertical Tab       Esc [ Pn Y&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;Y&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 DCH(Pn) ;&amp;quot;Delete Character          Esc [ Pn P&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;P&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 DL(Pn)  ;&amp;quot;Delete Line               Esc [ Pn M&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;M&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EA(Pn)  ;&amp;quot;Erase in Area             Esc [ Ps O&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;O&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ECH(Pn) ;&amp;quot;Erase Character           Esc [ Pn X&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;X&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ED(Pn)  ;&amp;quot;Erase in Display          Esc [ Ps J         VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EF(Pn)  ;&amp;quot;Erase in Field            Esc [ Ps N&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;N&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EL(Pn)  ;&amp;quot;Erase in Line             Esc [ Ps K         VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EPA     ;&amp;quot;End of Protected Area     Esc W&lt;br /&gt;
        w $char(27)_&amp;quot;W&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 ESA     ;&amp;quot;End of Selected Area      Esc G&lt;br /&gt;
        w $char(27)_&amp;quot;G&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 FNT(Pn,P2) ;&amp;quot;Font Selection            Esc [ Pn ; Pn Space D&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;D&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 GSM(Pn,P2) ;&amp;quot;Graphic Size Modify       Esc [ Pn ; Pn Space B&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;B&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 GSS(Pn) ;&amp;quot;Graphic Size Selection    Esc [ Pn Space C&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;C&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HPA(Pn) ;&amp;quot;Horz Position Absolute    Esc [ Pn `&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;`&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HPR(Pn) ;&amp;quot;Horz Position Relative    Esc [ Pn a&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;a&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HTJ     ;&amp;quot;Horz Tab w/Justification  Esc I&lt;br /&gt;
        w $char(27)_&amp;quot;I&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 HTS     ;&amp;quot;Horizontal Tab Set        Esc H             VT100&lt;br /&gt;
        w $char(27)_&amp;quot;H&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 HVP(Pn,P2) ;&amp;quot;Horz &amp;amp; Vertical Position  Esc [ Pn ; Pn f  VT100&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ICH(Pn) ;&amp;quot;Insert Character          Esc [ Pn @&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;@&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IL(Pn)  ;&amp;quot;Insert Line               Esc [ Pn L&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;L&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IND     ;&amp;quot;Index                     Esc D           VT100&lt;br /&gt;
        w $char(27)_&amp;quot;D&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 NEL     ;&amp;quot;Next Line                 Esc E           VT100&lt;br /&gt;
        w $char(27)_&amp;quot;E&amp;quot; quit&lt;br /&gt;
                                                                                                                                                  &lt;br /&gt;
 NP(Pn)  ;&amp;quot;Next Page                 Esc [ Pn U&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;U&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 PP(Pn)  ;&amp;quot;Preceding Page            Esc [ Pn V&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;V&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IS      ;&amp;quot;Reset to Initial State    Esc c&lt;br /&gt;
        w $char(27)_&amp;quot;c&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 RM(Pn)  ;&amp;quot;Reset Mode                Esc [ Ps l     VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;l&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SD(Pn)  ;&amp;quot;Scroll Down               Esc [ Pn T&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;T&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SL(Pn)  ;&amp;quot;Scroll Left               Esc [ Pn Space @&lt;br /&gt;
        do EscN(.Pn,,&amp;quot; @&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SM(Pn)  ;&amp;quot;Select Mode               Esc [ Ps h     VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;h&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SPA     ;&amp;quot;Start of Protected Area   Esc V&lt;br /&gt;
        w $char(27)_&amp;quot;V&amp;quot; quit&lt;br /&gt;
                                          &lt;br /&gt;
 SPI(Pn,P2) ;&amp;quot;Spacing Increment         Esc [ Pn ; Pn Space G&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot; G&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SR(Pn)  ;&amp;quot;Scroll Right              Esc [ Pn Space A&lt;br /&gt;
        do EscN(.Pn,,&amp;quot; A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SA      ;&amp;quot;Start of Selected Area    Esc F&lt;br /&gt;
        w $char(27)_&amp;quot;F&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 ST      ;&amp;quot;String Terminator         Esc \&lt;br /&gt;
        w $char(27)_&amp;quot;\&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 SU(Pn)  ;&amp;quot;Scroll Up                 Esc [ Pn S&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;S&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 TBC(Pn) ;&amp;quot;Tab Clear                 Esc [ Ps g        VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;g&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VPA(Pn) ;&amp;quot;Vert Position Absolute    Esc [ Pn d&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;d&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VPR(Pn) ;&amp;quot;Vert Position Relative    Esc [ Pn e&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;e&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
                      &lt;br /&gt;
 VCULOAD ;&amp;quot;Unsave Cursor                              ESC [ u&lt;br /&gt;
        w $char(27,91)_&amp;quot;u&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCUSAV2 ;&amp;quot;Save Cursor &amp;amp; Attrs                        ESC 7&lt;br /&gt;
        w $char(27)_&amp;quot;7&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD2 ;&amp;quot;Restore Cursor &amp;amp; Attrs                    ESC 8&lt;br /&gt;
        w $char(27)_&amp;quot;8&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VTATRIB(n) ;&amp;quot;Set Text attributes    &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        ;&amp;quot;0-Reset all attributes&lt;br /&gt;
        ;&amp;quot;1-Bright&lt;br /&gt;
        ;&amp;quot;2-Dim&lt;br /&gt;
        ;&amp;quot;4-Underscore&lt;br /&gt;
        ;&amp;quot;5-Blink&lt;br /&gt;
        ;&amp;quot;7-Reverse&lt;br /&gt;
        ;&amp;quot;8-Hidden&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VFGCOLOR(n) ;&amp;quot;Set Text Foreground Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+30&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
                                                                              &lt;br /&gt;
 ;&amp;quot;--------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;VT100 specific calls&lt;br /&gt;
 ;&amp;quot;Terminal interface&lt;br /&gt;
 &lt;br /&gt;
 VCEL    ;&amp;quot;Erase from cursor to end of line           Esc [ 0 K    or Esc [ K&lt;br /&gt;
        do EscN(&amp;quot;0&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCBL    ;&amp;quot;Erase from beginning of line to cursor     Esc [ 1 K&lt;br /&gt;
        do EscN(&amp;quot;1&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VEL     ;&amp;quot;Erase line containing cursor               Esc [ 2 K&lt;br /&gt;
        do EscN(&amp;quot;2&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCES    ;&amp;quot;Erase from cursor to end of screen         Esc [ 0 J    or Esc [ J&lt;br /&gt;
        do EscN(&amp;quot;0&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCBS    ;&amp;quot;Erase from beginning of screen to cursor   Esc [ 1 J&lt;br /&gt;
        do EscN(&amp;quot;1&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCS     ;&amp;quot;Erase entire screen                        Esc [ 2 J&lt;br /&gt;
        do EscN(&amp;quot;2&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
                                                                         &lt;br /&gt;
 VCUSAV  ;&amp;quot;Save Cursor                                ESC [ s&lt;br /&gt;
        w $char(27,91)_&amp;quot;s&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD ;&amp;quot;Unsave Cursor                              ESC [ u&lt;br /&gt;
        w $char(27,91)_&amp;quot;u&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCUSAV2 ;&amp;quot;Save Cursor &amp;amp; Attrs                        ESC 7&lt;br /&gt;
        w $char(27)_&amp;quot;7&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD2 ;&amp;quot;Restore Cursor &amp;amp; Attrs                    ESC 8&lt;br /&gt;
        w $char(27)_&amp;quot;8&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VTATRIB(n) ;&amp;quot;Set Text attributes    &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        ;&amp;quot;0-Reset all attributes&lt;br /&gt;
        ;&amp;quot;1-Bright&lt;br /&gt;
        ;&amp;quot;2-Dim&lt;br /&gt;
        ;&amp;quot;4-Underscore&lt;br /&gt;
        ;&amp;quot;5-Blink&lt;br /&gt;
        ;&amp;quot;7-Reverse&lt;br /&gt;
        ;&amp;quot;8-Hidden&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VFGCOLOR(n) ;&amp;quot;Set Text Foreground Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+30&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
                                                             &lt;br /&gt;
 VBGCOLOR(n) ;&amp;quot;Set Text Background Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+40&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCOLORS(FG,BG) ;Set Text Colors   &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set FG=FG+30&lt;br /&gt;
        set BG=BG+40&lt;br /&gt;
        do EscN(FG,BG,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 SetGlobals&lt;br /&gt;
        set TMGcBlack=0&lt;br /&gt;
        set TMGcRed=1&lt;br /&gt;
        set TMGcGreen=2&lt;br /&gt;
        set TMGcYellow=3&lt;br /&gt;
        set TMGcBlue=4&lt;br /&gt;
        set TMGcMagenta=5&lt;br /&gt;
        set TMGcCyan=6&lt;br /&gt;
        set TMGcWhite=7&lt;br /&gt;
 &lt;br /&gt;
        quit&lt;br /&gt;
                                       &lt;br /&gt;
 KillGlobals&lt;br /&gt;
        kill TMGcBlack&lt;br /&gt;
        kill TMGcRed&lt;br /&gt;
        kill TMGcGreen&lt;br /&gt;
        kill TMGcYellow&lt;br /&gt;
        kill TMGcBlue&lt;br /&gt;
        kill TMGcMagenta&lt;br /&gt;
        kill TMGcCyan&lt;br /&gt;
        kill TMGcWhite&lt;br /&gt;
 &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGTERM.m&amp;diff=362</id>
		<title>TMGTERM.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGTERM.m&amp;diff=362"/>
		<updated>2005-04-14T22:24:04Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; ;&amp;quot;--------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;Terminal interface &lt;br /&gt;
 ;&amp;quot;ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals&lt;br /&gt;
 ;&amp;quot;      in alphabetic order by mnemonic&lt;br /&gt;
 &lt;br /&gt;
 EscN(Num,N2,Cmd)&lt;br /&gt;
        write $char(27,91)_Num&lt;br /&gt;
        if $data(N2) write &amp;quot;;&amp;quot;_N2&lt;br /&gt;
        if $data(Cmd) write Cmd&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 CBT(Pn) ;&amp;quot;CBT  Cursor Backward Tab  Esc [ Pn Z&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;Z&amp;quot;)&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 CCH     ;&amp;quot;Cancel Previous Character Esc T&lt;br /&gt;
        write $char(27)_&amp;quot;T&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 CHA(Pn) ;&amp;quot;Cursor Horzntal Absolute  Esc [ Pn G&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;G&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CHT(Pn) ;&amp;quot;Cursor Horizontal Tab     Esc [ Pn I&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;I&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CNL(Pn) ;&amp;quot;Cursor Next Line          Esc [ Pn E&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;E&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CPL(Pn) ;&amp;quot;Cursor Preceding Line     Esc [ Pn F&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;F&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CPR(Pn,P2) ;&amp;quot;Cursor Position Report Esc [ Pn ; Pn R     VT100&lt;br /&gt;
        do EscN(.Pn,.P2,&amp;quot;R&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CTC(Pn) ;&amp;quot;Cursor Tab Control        Esc [ Ps W&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;W&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUB(Pn) ;&amp;quot;Cursor Backward           Esc [ Pn D          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;D&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUD(Pn) ;&amp;quot;Cursor Down               Esc [ Pn B          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;B&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUF(Pn) ;&amp;quot;Cursor Forward            Esc [ Pn C          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;C&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CUP(X,Y) ;&amp;quot;Cursor Position        Esc [ Pn ; Pn H     VT100&lt;br /&gt;
        do EscN(.Y,.X,&amp;quot;H&amp;quot;) quit&lt;br /&gt;
                                                                         &lt;br /&gt;
 HOME    ;&amp;quot;Cursor Home               Esc [ H&lt;br /&gt;
        w $char(27,91)_&amp;quot;H&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 CUU(Pn) ;&amp;quot;Cursor Up                 Esc [ Pn A          VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 CVT(Pn) ;&amp;quot;Cursor Vertical Tab       Esc [ Pn Y&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;Y&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 DCH(Pn) ;&amp;quot;Delete Character          Esc [ Pn P&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;P&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 DL(Pn)  ;&amp;quot;Delete Line               Esc [ Pn M&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;M&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EA(Pn)  ;&amp;quot;Erase in Area             Esc [ Ps O&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;O&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ECH(Pn) ;&amp;quot;Erase Character           Esc [ Pn X&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;X&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ED(Pn)  ;&amp;quot;Erase in Display          Esc [ Ps J         VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EF(Pn)  ;&amp;quot;Erase in Field            Esc [ Ps N&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;N&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EL(Pn)  ;&amp;quot;Erase in Line             Esc [ Ps K         VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 EPA     ;&amp;quot;End of Protected Area     Esc W&lt;br /&gt;
        w $char(27)_&amp;quot;W&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 ESA     ;&amp;quot;End of Selected Area      Esc G&lt;br /&gt;
        w $char(27)_&amp;quot;G&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 FNT(Pn,P2) ;&amp;quot;Font Selection            Esc [ Pn ; Pn Space D&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;D&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 GSM(Pn,P2) ;&amp;quot;Graphic Size Modify       Esc [ Pn ; Pn Space B&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;B&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 GSS(Pn) ;&amp;quot;Graphic Size Selection    Esc [ Pn Space C&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;C&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HPA(Pn) ;&amp;quot;Horz Position Absolute    Esc [ Pn `&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;`&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HPR(Pn) ;&amp;quot;Horz Position Relative    Esc [ Pn a&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;a&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 HTJ     ;&amp;quot;Horz Tab w/Justification  Esc I&lt;br /&gt;
        w $char(27)_&amp;quot;I&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 HTS     ;&amp;quot;Horizontal Tab Set        Esc H             VT100&lt;br /&gt;
        w $char(27)_&amp;quot;H&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 HVP(Pn,P2) ;&amp;quot;Horz &amp;amp; Vertical Position  Esc [ Pn ; Pn f  VT100&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot;A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 ICH(Pn) ;&amp;quot;Insert Character          Esc [ Pn @&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;@&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IL(Pn)  ;&amp;quot;Insert Line               Esc [ Pn L&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;L&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IND     ;&amp;quot;Index                     Esc D           VT100&lt;br /&gt;
        w $char(27)_&amp;quot;D&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 NEL     ;&amp;quot;Next Line                 Esc E           VT100&lt;br /&gt;
        w $char(27)_&amp;quot;E&amp;quot; quit&lt;br /&gt;
                                                                                                                                                  &lt;br /&gt;
 NP(Pn)  ;&amp;quot;Next Page                 Esc [ Pn U&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;U&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 PP(Pn)  ;&amp;quot;Preceding Page            Esc [ Pn V&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;V&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 IS      ;&amp;quot;Reset to Initial State    Esc c&lt;br /&gt;
        w $char(27)_&amp;quot;c&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 RM(Pn)  ;&amp;quot;Reset Mode                Esc [ Ps l     VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;l&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SD(Pn)  ;&amp;quot;Scroll Down               Esc [ Pn T&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;T&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SL(Pn)  ;&amp;quot;Scroll Left               Esc [ Pn Space @&lt;br /&gt;
        do EscN(.Pn,,&amp;quot; @&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SM(Pn)  ;&amp;quot;Select Mode               Esc [ Ps h     VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;h&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SPA     ;&amp;quot;Start of Protected Area   Esc V&lt;br /&gt;
        w $char(27)_&amp;quot;V&amp;quot; quit&lt;br /&gt;
                                          &lt;br /&gt;
 SPI(Pn,P2) ;&amp;quot;Spacing Increment         Esc [ Pn ; Pn Space G&lt;br /&gt;
        do EscN(.Pn,P2,&amp;quot; G&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SR(Pn)  ;&amp;quot;Scroll Right              Esc [ Pn Space A&lt;br /&gt;
        do EscN(.Pn,,&amp;quot; A&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 SA      ;&amp;quot;Start of Selected Area    Esc F&lt;br /&gt;
        w $char(27)_&amp;quot;F&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 ST      ;&amp;quot;String Terminator         Esc \&lt;br /&gt;
        w $char(27)_&amp;quot;\&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 SU(Pn)  ;&amp;quot;Scroll Up                 Esc [ Pn S&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;S&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 TBC(Pn) ;&amp;quot;Tab Clear                 Esc [ Ps g        VT100&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;g&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VPA(Pn) ;&amp;quot;Vert Position Absolute    Esc [ Pn d&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;d&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VPR(Pn) ;&amp;quot;Vert Position Relative    Esc [ Pn e&lt;br /&gt;
        do EscN(.Pn,,&amp;quot;e&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
                      &lt;br /&gt;
 VCULOAD ;&amp;quot;Unsave Cursor                              ESC [ u&lt;br /&gt;
        w $char(27,91)_&amp;quot;u&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCUSAV2 ;&amp;quot;Save Cursor &amp;amp; Attrs                        ESC 7&lt;br /&gt;
        w $char(27)_&amp;quot;7&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD2 ;&amp;quot;Restore Cursor &amp;amp; Attrs                    ESC 8&lt;br /&gt;
        w $char(27)_&amp;quot;8&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VTATRIB(n) ;&amp;quot;Set Text attributes    &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        ;&amp;quot;0-Reset all attributes&lt;br /&gt;
        ;&amp;quot;1-Bright&lt;br /&gt;
        ;&amp;quot;2-Dim&lt;br /&gt;
        ;&amp;quot;4-Underscore&lt;br /&gt;
        ;&amp;quot;5-Blink&lt;br /&gt;
        ;&amp;quot;7-Reverse&lt;br /&gt;
        ;&amp;quot;8-Hidden&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VFGCOLOR(n) ;&amp;quot;Set Text Foreground Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+30&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
                                                                              &lt;br /&gt;
 ;&amp;quot;--------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;VT100 specific calls&lt;br /&gt;
 ;&amp;quot;Terminal interface&lt;br /&gt;
 &lt;br /&gt;
 VCEL    ;&amp;quot;Erase from cursor to end of line           Esc [ 0 K    or Esc [ K&lt;br /&gt;
        do EscN(&amp;quot;0&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
&lt;br /&gt;
 VCBL    ;&amp;quot;Erase from beginning of line to cursor     Esc [ 1 K&lt;br /&gt;
        do EscN(&amp;quot;1&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VEL     ;&amp;quot;Erase line containing cursor               Esc [ 2 K&lt;br /&gt;
        do EscN(&amp;quot;2&amp;quot;,,&amp;quot;K&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCES    ;&amp;quot;Erase from cursor to end of screen         Esc [ 0 J    or Esc [ J&lt;br /&gt;
        do EscN(&amp;quot;0&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCBS    ;&amp;quot;Erase from beginning of screen to cursor   Esc [ 1 J&lt;br /&gt;
        do EscN(&amp;quot;1&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCS     ;&amp;quot;Erase entire screen                        Esc [ 2 J&lt;br /&gt;
        do EscN(&amp;quot;2&amp;quot;,,&amp;quot;J&amp;quot;) quit&lt;br /&gt;
                                                                         &lt;br /&gt;
 VCUSAV  ;&amp;quot;Save Cursor                                ESC [ s&lt;br /&gt;
        w $char(27,91)_&amp;quot;s&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD ;&amp;quot;Unsave Cursor                              ESC [ u&lt;br /&gt;
        w $char(27,91)_&amp;quot;u&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCUSAV2 ;&amp;quot;Save Cursor &amp;amp; Attrs                        ESC 7&lt;br /&gt;
        w $char(27)_&amp;quot;7&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VCULOAD2 ;&amp;quot;Restore Cursor &amp;amp; Attrs                    ESC 8&lt;br /&gt;
        w $char(27)_&amp;quot;8&amp;quot; quit&lt;br /&gt;
 &lt;br /&gt;
 VTATRIB(n) ;&amp;quot;Set Text attributes    &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        ;&amp;quot;0-Reset all attributes&lt;br /&gt;
        ;&amp;quot;1-Bright&lt;br /&gt;
        ;&amp;quot;2-Dim&lt;br /&gt;
        ;&amp;quot;4-Underscore&lt;br /&gt;
        ;&amp;quot;5-Blink&lt;br /&gt;
        ;&amp;quot;7-Reverse&lt;br /&gt;
        ;&amp;quot;8-Hidden&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VFGCOLOR(n) ;&amp;quot;Set Text Foreground Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+30&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
                                                             &lt;br /&gt;
 VBGCOLOR(n) ;&amp;quot;Set Text Background Color  &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set n=n+40&lt;br /&gt;
        do EscN(n,,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
 &lt;br /&gt;
 VCOLORS(FG,BG) ;Set Text Colors   &amp;lt;ESC&amp;gt;[{attr1};...;{attrn}m&lt;br /&gt;
        set FG=FG+30&lt;br /&gt;
        set BG=BG+40&lt;br /&gt;
        do EscN(FG,BG,&amp;quot;m&amp;quot;) quit&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 SetGlobals&lt;br /&gt;
        set TMGcBlack=0&lt;br /&gt;
        set TMGcRed=1&lt;br /&gt;
        set TMGcGreen=2&lt;br /&gt;
        set TMGcYellow=3&lt;br /&gt;
        set TMGcBlue=4&lt;br /&gt;
        set TMGcMagenta=5&lt;br /&gt;
        set TMGcCyan=6&lt;br /&gt;
        set TMGcWhite=7&lt;br /&gt;
 &lt;br /&gt;
        quit&lt;br /&gt;
                                       &lt;br /&gt;
 KillGlobals&lt;br /&gt;
        kill TMGcBlack&lt;br /&gt;
        kill TMGcRed&lt;br /&gt;
        kill TMGcGreen&lt;br /&gt;
        kill TMGcYellow&lt;br /&gt;
        kill TMGcBlue&lt;br /&gt;
        kill TMGcMagenta&lt;br /&gt;
        kill TMGcCyan&lt;br /&gt;
        kill TMGcWhite&lt;br /&gt;
 &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGTPSTP.m&amp;diff=367</id>
		<title>TMGTPSTP.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGTPSTP.m&amp;diff=367"/>
		<updated>2005-04-14T22:15:56Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; GT.M STEP TRAP&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; K. Toppenberg&lt;br /&gt;
 ;&amp;quot; 4-13-2005&lt;br /&gt;
 ;&amp;quot; License: GPL Applies&lt;br /&gt;
 ;&amp;quot; &lt;br /&gt;
 ;&amp;quot; This code module will allow tracing through code.&lt;br /&gt;
 ;&amp;quot; It is used as follows:&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
 ;&amp;quot; zstep into&lt;br /&gt;
 ;&amp;quot; do ^MyFunction   ;&amp;quot;&amp;lt;--- put the function you want to trace here&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;&amp;lt;---turn off step capture&lt;br /&gt;
 ;&amp;quot; quit&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; Dependencies:&lt;br /&gt;
 ;&amp;quot;   Uses TMGTERM&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
    &lt;br /&gt;
 STEPTRAP(Pos)&lt;br /&gt;
 &lt;br /&gt;
        do VCUSAV2^TMGTERM&lt;br /&gt;
        do ShowCodePos(Pos)&lt;br /&gt;
        do VCULOAD2^TMGTERM&lt;br /&gt;
 &lt;br /&gt;
        new KeyIn&lt;br /&gt;
        new PauseMode set PauseMode=0&lt;br /&gt;
        new RunMode set RunMode=$get(^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Run Mode&amp;quot;))&lt;br /&gt;
 &lt;br /&gt;
        if RunMode=2 goto SPDone ;&amp;quot;Don&#039;t showmode --&amp;gt; goto SPDone&lt;br /&gt;
        if RunMode=1 hang 1&lt;br /&gt;
 SPLoop&lt;br /&gt;
        read *KeyIn:0&lt;br /&gt;
        if KeyIn=27 set PauseMode=2&lt;br /&gt;
        if KeyIn=32 do&lt;br /&gt;
        . w $c(7)&lt;br /&gt;
        . set PauseMode=&#039;PauseMode&lt;br /&gt;
        if PauseMode=1 goto SPLoop&lt;br /&gt;
 SPDone&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Run Mode&amp;quot;)=PauseMode&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
 ShowCode(Pos,Wipe)&lt;br /&gt;
        ;&amp;quot;Purpose: This will display code at the top of the screen&lt;br /&gt;
        ;&amp;quot;Input: Pos -- string like this: X+2^ROUTINE[$DMOD]&lt;br /&gt;
        ;&amp;quot;      Wipe -- OPTIONAL.  if 1, then code area is wiped blank&lt;br /&gt;
 &lt;br /&gt;
        new Action,i&lt;br /&gt;
        new Routine,Label,Offest,s&lt;br /&gt;
        set ScrWidth=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrWidth&amp;quot;)&lt;br /&gt;
        set ScrHeight=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrHeight&amp;quot;)&lt;br /&gt;
        new LastRou,LastLabel,LastOffset&lt;br /&gt;
        new dbFGColor,bBGColor,nlFGColor,nlBGColor&lt;br /&gt;
        set nlFGColor=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Foreground Color&amp;quot;)&lt;br /&gt;
        set nlBGColor=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Background Color&amp;quot;)&lt;br /&gt;
        set dbFGColor=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Foreground Color&amp;quot;)&lt;br /&gt;
        set dbBGColor=^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Background Color&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
        new BlankLine set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        ;&amp;quot;write &amp;quot;dbFG=&amp;quot;,dbFGColor,&amp;quot; dbBG=&amp;quot;,dbBGColor,!&lt;br /&gt;
        do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
        ;do VFGCOLOR^TMGTERM(dbFGColor)&lt;br /&gt;
        ;do VBGCOLOR^TMGTERM(dbBGColor)&lt;br /&gt;
 &lt;br /&gt;
        do CUP^TMGTERM(1,1) ;&amp;quot;Cursor to line (1,1)                               write BlankLine,!  ;&amp;quot;This is needed for some reason...&lt;br /&gt;
        do CUU^TMGTERM(2)&lt;br /&gt;
 &lt;br /&gt;
        if $get(Wipe)=1 do  goto SCDone&lt;br /&gt;
        . do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . for i=0:1:ScrHeight+1 write BlankLine&lt;br /&gt;
 &lt;br /&gt;
        set s=$piece(Pos,&amp;quot;$&amp;quot;,1)  ;&amp;quot;e.g. X+2^ROUTINE$DMOD--&amp;gt;X+2^ROUTINE&lt;br /&gt;
        set Routine=$piece(s,&amp;quot;^&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(s,&amp;quot;^&amp;quot;,1)&lt;br /&gt;
        set Offset=+$piece(Label,&amp;quot;+&amp;quot;,2)&lt;br /&gt;
        set Label=$piece(Label,&amp;quot;+&amp;quot;,1)&lt;br /&gt;
 &lt;br /&gt;
        set LastRou=$get(^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP ROUTINE&amp;quot;))&lt;br /&gt;
        set LastLabel=$get(^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP LABEL&amp;quot;))&lt;br /&gt;
        set LastOffset=$get(^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP OFFSET&amp;quot;))&lt;br /&gt;
 &lt;br /&gt;
        set s=&amp;quot;=== Routine: ^&amp;quot;_Routine_&amp;quot; &amp;quot; write s&lt;br /&gt;
        for i=1:1:ScrWidth-$length(s) write &amp;quot;=&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
 &lt;br /&gt;
        for i=0:1:ScrHeight do&lt;br /&gt;
        . new line,Bl,ref&lt;br /&gt;
        . set ref=Label_&amp;quot;+&amp;quot;_i_&amp;quot;^&amp;quot;_Routine&lt;br /&gt;
        . set line=$text(@ref)&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
        . if (i=Offset) write &amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        . else  write &amp;quot; &amp;quot;&lt;br /&gt;
        . if $length(line)&amp;gt;(ScrWidth-1) do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-4),&amp;quot;...&amp;quot;,!&lt;br /&gt;
        . else  do&lt;br /&gt;
        . . write $extract(line,1,ScrWidth-1)&lt;br /&gt;
        . . write $extract(BlankLine,1,ScrWidth-$length(line)-1),!&lt;br /&gt;
        . if (i=Offset) do VCOLORS^TMGTERM(dbFGColor,dbBGColor)&lt;br /&gt;
 &lt;br /&gt;
        for i=1:1:ScrWidth write &amp;quot;~&amp;quot;&lt;br /&gt;
        write !&lt;br /&gt;
 &lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP ROUTINE&amp;quot;)=Routine&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP LABEL&amp;quot;)=Label&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;DISP OFFSET&amp;quot;)=Offset&lt;br /&gt;
 &lt;br /&gt;
 SCDone&lt;br /&gt;
        do VCULOAD^TMGTERM&lt;br /&gt;
        do VCOLORS^TMGTERM(nlFGColor,nlBGColor)&lt;br /&gt;
 &lt;br /&gt;
        do CUD^TMGTERM(2)&lt;br /&gt;
 &lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=364</id>
		<title>TMGIDE.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=364"/>
		<updated>2005-04-14T22:12:28Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; GT.M Debug Tracer&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; K. Toppenberg&lt;br /&gt;
 ;&amp;quot; 4-13-2005&lt;br /&gt;
 ;&amp;quot; License: GPL Applies&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; This program will launch a shell for the TMG STEP TRAP debugger&lt;br /&gt;
 ;&amp;quot; It provides the user with a prompt, like this:&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;      (^ to quit) IDE&amp;gt;&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; Any valid M code may be entered here.  To use the tracing&lt;br /&gt;
 ;&amp;quot; ability, launch a function, like this:&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;      (^ to quit) IDE&amp;gt;do ^MyFunction&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot; Dependancies:&lt;br /&gt;
 ;&amp;quot;     Uses TMGTRSTP,TMGTERM&lt;br /&gt;
 ;&amp;quot;&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 ;&amp;quot;------------------------------------------------------------&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
 Start&lt;br /&gt;
        new ScrHeight set ScrHeight=10 ;&amp;quot;defined in ShowCode also&lt;br /&gt;
        new ScrWidth set ScrWidth=70   ;&amp;quot;defined in ShowCode also&lt;br /&gt;
 &lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrWidth&amp;quot;)=ScrWidth&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrHeight&amp;quot;)=ScrHeight&lt;br /&gt;
 &lt;br /&gt;
        do SetGlobals^TMGTERM&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Foreground Color&amp;quot;)=TMGcYellow&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Background Color&amp;quot;)=TMGcBlack&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Foreground Color&amp;quot;)=TMGcBlack&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Background Color&amp;quot;)=TMGcWhite&lt;br /&gt;
 &lt;br /&gt;
        ;&amp;quot;write #  ;&amp;quot;formfeed&lt;br /&gt;
        ;&amp;quot;do CUP^TMGTERM(1,ScrHeight+1)&lt;br /&gt;
        for i=1:1:80 write !&lt;br /&gt;
        write !,&amp;quot;Welcome to the TMG debugging environment&amp;quot;,!&lt;br /&gt;
        write &amp;quot;Enter any valid M command...&amp;quot;,!&lt;br /&gt;
        set $ZTRAP=&amp;quot;write !,&amp;quot;&amp;quot;This is a ZTRAP line&amp;quot;&amp;quot;,! break&amp;quot;&lt;br /&gt;
        set $ZSTATUS=&amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        ;&amp;quot;Run modes: 0=fast mode  1=slow mode 2=Don&#039;t show code&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Run Mode&amp;quot;)=0&lt;br /&gt;
        new BlankLine set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
        do Prompt&lt;br /&gt;
 Done&lt;br /&gt;
        do ShutDown&lt;br /&gt;
        quit&lt;br /&gt;
 &lt;br /&gt;
 ;&amp;quot;-------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 Prompt&lt;br /&gt;
        new Line&lt;br /&gt;
        write !,BlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(1)&lt;br /&gt;
        read &amp;quot;(^ to quit) IDE&amp;gt;&amp;quot;,Line&lt;br /&gt;
 &lt;br /&gt;
        if Line=&amp;quot;^&amp;quot; set $ZSTEP=&amp;quot;&amp;quot; quit&lt;br /&gt;
        set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        zstep into&lt;br /&gt;
        xecute Line&lt;br /&gt;
        set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;turn off step capture&lt;br /&gt;
        goto Prompt&lt;br /&gt;
 &lt;br /&gt;
 ShutDown&lt;br /&gt;
        ;&amp;quot;do ShowCode(&amp;quot;&amp;quot;,1)&lt;br /&gt;
        kill ^TMP(&amp;quot;TMGIDE&amp;quot;,$J)&lt;br /&gt;
        do KillGlobals^TMGTERM&lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=361</id>
		<title>TMGIDE.m</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=TMGIDE.m&amp;diff=361"/>
		<updated>2005-04-14T22:11:25Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;quot;------------------------------------------------------------&lt;br /&gt;
;&amp;quot;------------------------------------------------------------&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot; GT.M Debug Tracer&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot; K. Toppenberg&lt;br /&gt;
;&amp;quot; 4-13-2005&lt;br /&gt;
;&amp;quot; License: GPL Applies&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot; This program will launch a shell for the TMG STEP TRAP debugger&lt;br /&gt;
;&amp;quot; It provides the user with a prompt, like this:&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot;      (^ to quit) IDE&amp;gt;&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot; Any valid M code may be entered here.  To use the tracing&lt;br /&gt;
;&amp;quot; ability, launch a function, like this:&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot;      (^ to quit) IDE&amp;gt;do ^MyFunction&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot; Dependancies:&lt;br /&gt;
;&amp;quot;     Uses TMGTRSTP,TMGTERM&lt;br /&gt;
;&amp;quot;&lt;br /&gt;
;&amp;quot;------------------------------------------------------------&lt;br /&gt;
;&amp;quot;------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Start&lt;br /&gt;
        new ScrHeight set ScrHeight=10 ;&amp;quot;defined in ShowCode also&lt;br /&gt;
        new ScrWidth set ScrWidth=70   ;&amp;quot;defined in ShowCode also&lt;br /&gt;
&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrWidth&amp;quot;)=ScrWidth&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;ScrHeight&amp;quot;)=ScrHeight&lt;br /&gt;
&lt;br /&gt;
        do SetGlobals^TMGTERM&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Foreground Color&amp;quot;)=TMGcYellow&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Normal Background Color&amp;quot;)=TMGcBlack&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Foreground Color&amp;quot;)=TMGcBlack&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Debug Background Color&amp;quot;)=TMGcWhite&lt;br /&gt;
&lt;br /&gt;
        ;&amp;quot;write #  ;&amp;quot;formfeed&lt;br /&gt;
        ;&amp;quot;do CUP^TMGTERM(1,ScrHeight+1)&lt;br /&gt;
        for i=1:1:80 write !&lt;br /&gt;
        write !,&amp;quot;Welcome to the TMG debugging environment&amp;quot;,!&lt;br /&gt;
        write &amp;quot;Enter any valid M command...&amp;quot;,!&lt;br /&gt;
        set $ZTRAP=&amp;quot;write !,&amp;quot;&amp;quot;This is a ZTRAP line&amp;quot;&amp;quot;,! break&amp;quot;&lt;br /&gt;
        set $ZSTATUS=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        ;&amp;quot;Run modes: 0=fast mode  1=slow mode 2=Don&#039;t show code&lt;br /&gt;
        set ^TMP(&amp;quot;TMGIDE&amp;quot;,$J,&amp;quot;Run Mode&amp;quot;)=0&lt;br /&gt;
        new BlankLine set BlankLine=&amp;quot; &amp;quot;&lt;br /&gt;
        for i=1:1:ScrWidth-1 set BlankLine=BlankLine_&amp;quot; &amp;quot;&lt;br /&gt;
&lt;br /&gt;
        do Prompt&lt;br /&gt;
Done&lt;br /&gt;
        do ShutDown&lt;br /&gt;
        quit&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;-------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Prompt&lt;br /&gt;
        new Line&lt;br /&gt;
        write !,BlankLine,!&lt;br /&gt;
        do CUU^TMGTERM(1)&lt;br /&gt;
        read &amp;quot;(^ to quit) IDE&amp;gt;&amp;quot;,Line&lt;br /&gt;
&lt;br /&gt;
        if Line=&amp;quot;^&amp;quot; set $ZSTEP=&amp;quot;&amp;quot; quit&lt;br /&gt;
        set $ZSTEP=&amp;quot;do STEPTRAP^TMGTRSTP($ZPOS) zstep into zcontinue&amp;quot;&lt;br /&gt;
        zstep into&lt;br /&gt;
        xecute Line&lt;br /&gt;
        set $ZSTEP=&amp;quot;&amp;quot;  ;&amp;quot;turn off step capture&lt;br /&gt;
        goto Prompt&lt;br /&gt;
&lt;br /&gt;
ShutDown&lt;br /&gt;
        ;&amp;quot;do ShowCode(&amp;quot;&amp;quot;,1)&lt;br /&gt;
        kill ^TMP(&amp;quot;TMGIDE&amp;quot;,$J)&lt;br /&gt;
        do KillGlobals^TMGTERM&lt;br /&gt;
        quit&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=363</id>
		<title>Debugging with GT.M</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=363"/>
		<updated>2005-04-14T22:09:18Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* Simple &amp;#039;IDE&amp;#039; with GT.M */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Simple &#039;IDE&#039; with GT.M ===&lt;br /&gt;
&lt;br /&gt;
This is a simple (pre pre alpha) IDE created with GT.M debugging commands:&lt;br /&gt;
&lt;br /&gt;
[[TMGIDE.m]]&lt;br /&gt;
[[TMGTERM.m]]&lt;br /&gt;
[[TMGTPSTP.m]]&lt;br /&gt;
&lt;br /&gt;
=== GT.M Debugging commands ===&lt;br /&gt;
This information is from the GT.M Programmer&#039;s Manual.  I&#039;ll just summarize a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* $ECODE&lt;br /&gt;
    This is a list of past errors, separated by commas. &lt;br /&gt;
    Subsequent errors are added to the end of the list.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ECODE&lt;br /&gt;
      ,M6,Z150373850, &lt;br /&gt;
    Errors beginning with: &amp;quot;M&amp;quot; are standard errors&lt;br /&gt;
                           &amp;quot;U&amp;quot; are user errors&lt;br /&gt;
                           &amp;quot;Z&amp;quot; are GT.M errors&lt;br /&gt;
&lt;br /&gt;
* $ZSTATUS&lt;br /&gt;
    This is detail about the most recent error.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ZSTATUS&lt;br /&gt;
      150373850,SubName+3^MyFunct,%GTM-E-UNDEF, Undefined local variable: Jxack&lt;br /&gt;
&lt;br /&gt;
* $ZMESSAGE(x)&lt;br /&gt;
    This will give a text message for a given error number.&lt;br /&gt;
    Example: To get details about the error number, 150373850, given above...&lt;br /&gt;
      GTM&amp;gt;w $ZMESSAGE(150373850)&lt;br /&gt;
      %GTM-E-UNDEF, Undefined local variable: !AD&lt;br /&gt;
&lt;br /&gt;
* ZPRINT x  (e.g. ZPRINT SubName+3^MyFunct)&lt;br /&gt;
    This will display the line that cause the program exception.&lt;br /&gt;
    The &#039;x&#039; may be obtained from $ZSTATUS, or from $ZPOS (see below)&lt;br /&gt;
&lt;br /&gt;
* $ZPOSITION (OR $ZPOS)&lt;br /&gt;
    Shows the current position of the current line of execution &lt;br /&gt;
   (or the last line exececuted in case of an error)&lt;br /&gt;
&lt;br /&gt;
* ZWRITE&lt;br /&gt;
    Shows the entire variable table, displaying all defined variables.&lt;br /&gt;
&lt;br /&gt;
* ZBREAK address&lt;br /&gt;
    Toggles a break point at address&lt;br /&gt;
    It is possible to have the breakpoint execute code, and then resume.  See manual.&lt;br /&gt;
&lt;br /&gt;
* ZSTEP x&lt;br /&gt;
    Will execute the program one line at a time.  I think this would be typically&lt;br /&gt;
    used after a ZBREAK drops command back to GT.M&amp;gt; prompt.&lt;br /&gt;
      ZSTEP INTO -- start execution at current execution point, and stops at&lt;br /&gt;
                    next line (even if that line is in a subroutine).&lt;br /&gt;
      ZSTEP [OVER] -- start execution at current exec. point, and stop at the &lt;br /&gt;
                    next line at the same level on the invocation stack.&lt;br /&gt;
      ZSTEP OUTOF -- ??&lt;br /&gt;
&lt;br /&gt;
* ZCONTINUE&lt;br /&gt;
    Continue execution from break point.&lt;br /&gt;
&lt;br /&gt;
* $STACK AND $ZLEVEL&lt;br /&gt;
    $STACK starts at 0 and each DO inc&#039;s the value, each QUIT dec&#039;s it&lt;br /&gt;
    $ZLEVEL is $STACK+1&lt;br /&gt;
&lt;br /&gt;
.. More later&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=360</id>
		<title>Debugging with GT.M</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=360"/>
		<updated>2005-04-14T22:09:03Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* Simple &amp;#039;IDE&amp;#039; with GT.M */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Simple &#039;IDE&#039; with GT.M ===&lt;br /&gt;
&lt;br /&gt;
This is a simple (pre pre alpha) IDE created with GT.M debugging commands:&lt;br /&gt;
&lt;br /&gt;
[[TMGIDE.m]]&lt;br /&gt;
[TMGTERM.m]]&lt;br /&gt;
[[TMGTPSTP.m]]&lt;br /&gt;
&lt;br /&gt;
=== GT.M Debugging commands ===&lt;br /&gt;
This information is from the GT.M Programmer&#039;s Manual.  I&#039;ll just summarize a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* $ECODE&lt;br /&gt;
    This is a list of past errors, separated by commas. &lt;br /&gt;
    Subsequent errors are added to the end of the list.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ECODE&lt;br /&gt;
      ,M6,Z150373850, &lt;br /&gt;
    Errors beginning with: &amp;quot;M&amp;quot; are standard errors&lt;br /&gt;
                           &amp;quot;U&amp;quot; are user errors&lt;br /&gt;
                           &amp;quot;Z&amp;quot; are GT.M errors&lt;br /&gt;
&lt;br /&gt;
* $ZSTATUS&lt;br /&gt;
    This is detail about the most recent error.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ZSTATUS&lt;br /&gt;
      150373850,SubName+3^MyFunct,%GTM-E-UNDEF, Undefined local variable: Jxack&lt;br /&gt;
&lt;br /&gt;
* $ZMESSAGE(x)&lt;br /&gt;
    This will give a text message for a given error number.&lt;br /&gt;
    Example: To get details about the error number, 150373850, given above...&lt;br /&gt;
      GTM&amp;gt;w $ZMESSAGE(150373850)&lt;br /&gt;
      %GTM-E-UNDEF, Undefined local variable: !AD&lt;br /&gt;
&lt;br /&gt;
* ZPRINT x  (e.g. ZPRINT SubName+3^MyFunct)&lt;br /&gt;
    This will display the line that cause the program exception.&lt;br /&gt;
    The &#039;x&#039; may be obtained from $ZSTATUS, or from $ZPOS (see below)&lt;br /&gt;
&lt;br /&gt;
* $ZPOSITION (OR $ZPOS)&lt;br /&gt;
    Shows the current position of the current line of execution &lt;br /&gt;
   (or the last line exececuted in case of an error)&lt;br /&gt;
&lt;br /&gt;
* ZWRITE&lt;br /&gt;
    Shows the entire variable table, displaying all defined variables.&lt;br /&gt;
&lt;br /&gt;
* ZBREAK address&lt;br /&gt;
    Toggles a break point at address&lt;br /&gt;
    It is possible to have the breakpoint execute code, and then resume.  See manual.&lt;br /&gt;
&lt;br /&gt;
* ZSTEP x&lt;br /&gt;
    Will execute the program one line at a time.  I think this would be typically&lt;br /&gt;
    used after a ZBREAK drops command back to GT.M&amp;gt; prompt.&lt;br /&gt;
      ZSTEP INTO -- start execution at current execution point, and stops at&lt;br /&gt;
                    next line (even if that line is in a subroutine).&lt;br /&gt;
      ZSTEP [OVER] -- start execution at current exec. point, and stop at the &lt;br /&gt;
                    next line at the same level on the invocation stack.&lt;br /&gt;
      ZSTEP OUTOF -- ??&lt;br /&gt;
&lt;br /&gt;
* ZCONTINUE&lt;br /&gt;
    Continue execution from break point.&lt;br /&gt;
&lt;br /&gt;
* $STACK AND $ZLEVEL&lt;br /&gt;
    $STACK starts at 0 and each DO inc&#039;s the value, each QUIT dec&#039;s it&lt;br /&gt;
    $ZLEVEL is $STACK+1&lt;br /&gt;
&lt;br /&gt;
.. More later&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=359</id>
		<title>Debugging with GT.M</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=359"/>
		<updated>2005-04-14T22:07:59Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: /* Simple &amp;#039;IDE&amp;#039; with GT.M */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Simple &#039;IDE&#039; with GT.M ===&lt;br /&gt;
&lt;br /&gt;
This is a simple (pre pre alpha) IDE created with GT.M debugging commands:&lt;br /&gt;
&lt;br /&gt;
[[GT.M IDE]]&lt;br /&gt;
&lt;br /&gt;
=== GT.M Debugging commands ===&lt;br /&gt;
This information is from the GT.M Programmer&#039;s Manual.  I&#039;ll just summarize a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* $ECODE&lt;br /&gt;
    This is a list of past errors, separated by commas. &lt;br /&gt;
    Subsequent errors are added to the end of the list.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ECODE&lt;br /&gt;
      ,M6,Z150373850, &lt;br /&gt;
    Errors beginning with: &amp;quot;M&amp;quot; are standard errors&lt;br /&gt;
                           &amp;quot;U&amp;quot; are user errors&lt;br /&gt;
                           &amp;quot;Z&amp;quot; are GT.M errors&lt;br /&gt;
&lt;br /&gt;
* $ZSTATUS&lt;br /&gt;
    This is detail about the most recent error.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ZSTATUS&lt;br /&gt;
      150373850,SubName+3^MyFunct,%GTM-E-UNDEF, Undefined local variable: Jxack&lt;br /&gt;
&lt;br /&gt;
* $ZMESSAGE(x)&lt;br /&gt;
    This will give a text message for a given error number.&lt;br /&gt;
    Example: To get details about the error number, 150373850, given above...&lt;br /&gt;
      GTM&amp;gt;w $ZMESSAGE(150373850)&lt;br /&gt;
      %GTM-E-UNDEF, Undefined local variable: !AD&lt;br /&gt;
&lt;br /&gt;
* ZPRINT x  (e.g. ZPRINT SubName+3^MyFunct)&lt;br /&gt;
    This will display the line that cause the program exception.&lt;br /&gt;
    The &#039;x&#039; may be obtained from $ZSTATUS, or from $ZPOS (see below)&lt;br /&gt;
&lt;br /&gt;
* $ZPOSITION (OR $ZPOS)&lt;br /&gt;
    Shows the current position of the current line of execution &lt;br /&gt;
   (or the last line exececuted in case of an error)&lt;br /&gt;
&lt;br /&gt;
* ZWRITE&lt;br /&gt;
    Shows the entire variable table, displaying all defined variables.&lt;br /&gt;
&lt;br /&gt;
* ZBREAK address&lt;br /&gt;
    Toggles a break point at address&lt;br /&gt;
    It is possible to have the breakpoint execute code, and then resume.  See manual.&lt;br /&gt;
&lt;br /&gt;
* ZSTEP x&lt;br /&gt;
    Will execute the program one line at a time.  I think this would be typically&lt;br /&gt;
    used after a ZBREAK drops command back to GT.M&amp;gt; prompt.&lt;br /&gt;
      ZSTEP INTO -- start execution at current execution point, and stops at&lt;br /&gt;
                    next line (even if that line is in a subroutine).&lt;br /&gt;
      ZSTEP [OVER] -- start execution at current exec. point, and stop at the &lt;br /&gt;
                    next line at the same level on the invocation stack.&lt;br /&gt;
      ZSTEP OUTOF -- ??&lt;br /&gt;
&lt;br /&gt;
* ZCONTINUE&lt;br /&gt;
    Continue execution from break point.&lt;br /&gt;
&lt;br /&gt;
* $STACK AND $ZLEVEL&lt;br /&gt;
    $STACK starts at 0 and each DO inc&#039;s the value, each QUIT dec&#039;s it&lt;br /&gt;
    $ZLEVEL is $STACK+1&lt;br /&gt;
&lt;br /&gt;
.. More later&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
	<entry>
		<id>https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=358</id>
		<title>Debugging with GT.M</title>
		<link rel="alternate" type="text/html" href="https://vistapedia.com/index.php?title=Debugging_with_GT.M&amp;diff=358"/>
		<updated>2005-04-14T22:07:04Z</updated>

		<summary type="html">&lt;p&gt;Kdtop3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Simple &#039;IDE&#039; with GT.M ===&lt;br /&gt;
&lt;br /&gt;
[[GT.M IDE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GT.M Debugging commands ===&lt;br /&gt;
This information is from the GT.M Programmer&#039;s Manual.  I&#039;ll just summarize a few points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* $ECODE&lt;br /&gt;
    This is a list of past errors, separated by commas. &lt;br /&gt;
    Subsequent errors are added to the end of the list.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ECODE&lt;br /&gt;
      ,M6,Z150373850, &lt;br /&gt;
    Errors beginning with: &amp;quot;M&amp;quot; are standard errors&lt;br /&gt;
                           &amp;quot;U&amp;quot; are user errors&lt;br /&gt;
                           &amp;quot;Z&amp;quot; are GT.M errors&lt;br /&gt;
&lt;br /&gt;
* $ZSTATUS&lt;br /&gt;
    This is detail about the most recent error.&lt;br /&gt;
    Example:&lt;br /&gt;
      GTM&amp;gt;w $ZSTATUS&lt;br /&gt;
      150373850,SubName+3^MyFunct,%GTM-E-UNDEF, Undefined local variable: Jxack&lt;br /&gt;
&lt;br /&gt;
* $ZMESSAGE(x)&lt;br /&gt;
    This will give a text message for a given error number.&lt;br /&gt;
    Example: To get details about the error number, 150373850, given above...&lt;br /&gt;
      GTM&amp;gt;w $ZMESSAGE(150373850)&lt;br /&gt;
      %GTM-E-UNDEF, Undefined local variable: !AD&lt;br /&gt;
&lt;br /&gt;
* ZPRINT x  (e.g. ZPRINT SubName+3^MyFunct)&lt;br /&gt;
    This will display the line that cause the program exception.&lt;br /&gt;
    The &#039;x&#039; may be obtained from $ZSTATUS, or from $ZPOS (see below)&lt;br /&gt;
&lt;br /&gt;
* $ZPOSITION (OR $ZPOS)&lt;br /&gt;
    Shows the current position of the current line of execution &lt;br /&gt;
   (or the last line exececuted in case of an error)&lt;br /&gt;
&lt;br /&gt;
* ZWRITE&lt;br /&gt;
    Shows the entire variable table, displaying all defined variables.&lt;br /&gt;
&lt;br /&gt;
* ZBREAK address&lt;br /&gt;
    Toggles a break point at address&lt;br /&gt;
    It is possible to have the breakpoint execute code, and then resume.  See manual.&lt;br /&gt;
&lt;br /&gt;
* ZSTEP x&lt;br /&gt;
    Will execute the program one line at a time.  I think this would be typically&lt;br /&gt;
    used after a ZBREAK drops command back to GT.M&amp;gt; prompt.&lt;br /&gt;
      ZSTEP INTO -- start execution at current execution point, and stops at&lt;br /&gt;
                    next line (even if that line is in a subroutine).&lt;br /&gt;
      ZSTEP [OVER] -- start execution at current exec. point, and stop at the &lt;br /&gt;
                    next line at the same level on the invocation stack.&lt;br /&gt;
      ZSTEP OUTOF -- ??&lt;br /&gt;
&lt;br /&gt;
* ZCONTINUE&lt;br /&gt;
    Continue execution from break point.&lt;br /&gt;
&lt;br /&gt;
* $STACK AND $ZLEVEL&lt;br /&gt;
    $STACK starts at 0 and each DO inc&#039;s the value, each QUIT dec&#039;s it&lt;br /&gt;
    $ZLEVEL is $STACK+1&lt;br /&gt;
&lt;br /&gt;
.. More later&lt;/div&gt;</summary>
		<author><name>Kdtop3</name></author>
	</entry>
</feed>