[comp.lang.pascal] Mystic PASCAL

glidden@morgoth.UUCP (02/03/87)

Has anyone heard of "Mystic Pascal"?


	This is a $16 MS DOS Pascal compiler from:
	
	Mystic Canyon Software
	Pinon Lane
	P.O. Box 1010
	Pecos, NM  87552
	tel. 505-757-6344
	

It sounds too good to be true.  e.g.:
  Uses 640K for prog. & data
  mulit-tasking !?!?!
  8087 support
  etc
  
 Has any tried this or otherwise know if it lives up to its claims?
 

LIVE:   Ken A. Glidden, (617) 969-0050
ARPA:	adelie!morgoth!glidden@harvard.HARVARD.EDU
UUCP:	{harvard | ll-xn | mirror | axiom}!adelie!morgoth!glidden

perkins@bnrmtv.UUCP (02/05/87)

> Has anyone heard of "Mystic Pascal"?
> 	This is a $16 MS DOS Pascal compiler from:
> 	Mystic Canyon Software
> 
> It sounds too good to be true.
> 
> Ken A. Glidden, {harvard | ll-xn | mirror | axiom}!adelie!morgoth!glidden

"Mystic Pascal" is a product of J.R. Tyson, who created "JRT Pascal"
for the CP/M world.  The company went bankrupt amid a flurry of lawsuits
and postal fraud investigations.  JRT had apparently advertised the
program as complete and available, and taken money for copies of same,
BEFORE ANY SUCH PROGRAM EXISTED.

"JRT Pascal" is the classic example of "vaporware".  It is VERY UNLIKELY
that "Mystic Pascal" is as good as it sounds.
-- 
{hplabs,amdahl,3comvax}!bnrmtv!perkins        --Henry Perkins

It is better never to have been born.  But who among us has such luck?
One in a million, perhaps.

felix@uhccux.UUCP (02/07/87)

In article <1389@bnrmtv.UUCP>, perkins@bnrmtv.UUCP (Henry Perkins) writes:
> > Has anyone heard of "Mystic Pascal"?
> > 	This is a $16 MS DOS Pascal compiler from:
> > 	Mystic Canyon Software
> > 
> > It sounds too good to be true.
> > 
> > Ken A. Glidden, {harvard | ll-xn | mirror | axiom}!adelie!morgoth!glidden
> 
> "Mystic Pascal" is a product of J.R. Tyson, who created "JRT Pascal"
> for the CP/M world.  The company went bankrupt amid a flurry of lawsuits
> and postal fraud investigations.  JRT had apparently advertised the
> program as complete and available, and taken money for copies of same,
> BEFORE ANY SUCH PROGRAM EXISTED.
> 
> "JRT Pascal" is the classic example of "vaporware".  It is VERY UNLIKELY
> that "Mystic Pascal" is as good as it sounds.
> -- 
> {hplabs,amdahl,3comvax}!bnrmtv!perkins        --Henry Perkins
> 
I have a copy of Mystic Pascal in hand - the $32.00 version with the
printed manual.  It does indeed do true multi-tasking, although the
current version (1.6) does not support that in a stand-alone mode.  To
take advantage of the multi-tasking you need to run your program from
within the Mystic environment (editor/compiler like Turbo).

Mystic does indeed create compact, fast code (no 12K overhead like Turbo),
but has few "nice-to-have" Pascal extensions other than those supporting
the windowing, graphics, multiple consoles, and multi-tasking.

It is indeed an incremental compiler and speedily compiles small changes
in large programs.

There may be deficiencies I haven't found yet, but Mystic is a solid
product and an excellent value for the money.


Robin Felix, U. of Hawaii Linguistics Dept.
UUCP:           {ihnp4,seismo,ucbvax,dcdwest}!sdcsvax!nosc!uhccux!felix
ARPA:           uhccux!felix@nosc.ARPA
INTERNET:       felix@UHCC.HAWAII.EDU

rsweeney@dasys1.UUCP (02/08/87)

In article <1389@bnrmtv.UUCP> perkins@bnrmtv.UUCP (Henry Perkins) writes:
> [...]
>"JRT Pascal" is the classic example of "vaporware".  It is VERY UNLIKELY
>that "Mystic Pascal" is as good as it sounds.

JRT Pascal wasn't vaporware by the classic definition - it did in fact
exist.  However, it was advertised as being a more or less "full"
implementation of the language, when in fact it was nothing of the sort.
People bought it on such promises, and then discovered its severe
shortcomings - and got more than a little bit angry.

-- 
Robert Sweeney           {allegra,cmcl2,philabs}!phri!\
Datamerica Systems        {harpo,bellcore,cmcl2}!cucard!dasys1!rsweeney
New York, NY.  USA                      {philabs}!tg!/
              "I AM NOT A NUMBER - I AM A FREE MAN!"

belanger@micomvax.UUCP (02/09/87)

In article <332@morgoth.UUCP> you write:
>Has anyone heard of "Mystic Pascal"?
>
>
>	This is a $16 MS DOS Pascal compiler from:
>	
>	Mystic Canyon Software
>	Pinon Lane
>	P.O. Box 1010
>	Pecos, NM  87552
>	tel. 505-757-6344
>	
>
>It sounds too good to be true.  e.g.:
>  Uses 640K for prog. & data
>  mulit-tasking !?!?!
>  8087 support
>  etc
>  
> Has any tried this or otherwise know if it lives up to its claims?
> 
	In fact I have bought it. The first version 1.5C was not worth it but
	for free they send you an update which I got too version 1.6

	I am including a upgrade file from Mystic describing the upgrade 
	from 1.5C to 1.6 and future 1.7 which should be ready by now.

	If you have question, you can email to me. You can also read in the 
	PC Tech Journal July 1986 page 94 for more info.

====================
         Changes from Mystic Pascal Version 1.5 to Version 1.6


1.   Graphics and Consoles
     1.1  Text Consoles
     1.2  Graphics Commands
     1.3  Screen Numbers
     1.4  Color Numbers
     1.5  BORDERCOLOR
     1.6  DRAW
     1.7  DRAWLINES
     1.8  GOTOXY
     1.9  GRAPH
     1.10  MEDIUMBACKGROUND
     1.11  PAGE
     1.12  PALETTE
     1.13  PLOT
     1.14  SCREENS
     1.15  SCREENTITLE
     1.16  TEXTBACKGROUND
     1.17  TEXTCOLOR

2.   8087 Double Precision Math

3.   Creating EXE Files

4.   Message Queues
     4.1  QUEUE declaration
     4.2  OPEN
     4.3  MSGCNT
     4.4  SEND
     4.5  RECEIVE

5.   Minor Changes



======================================================================


1.  Graphics and Consoles

     Mystic Pascal has a very advanced graphics subsystem unlike any
other programming language.  Its features have some similarity to CAD
(computer aided design) software.  A programmer can create useful and
interesting graphic images on up to 20 graphics screens simultaneously.

     The SCREENS procedure is used to allocate up to 10 each of text
consoles, medium resolution color graphics screens and high resolution
monochrome graphics screens.  These screens are accessed with function
keys F2, F3 and F4 respectively.

     Mystic Pascal graphics uses a standard coordinate system with a
horizontal X axis and vertical Y axis.  Positive X is at the right and
positive Y is at the top.  Line and point plotting may use the entire
integer range -32768 to +32767 and function graphing may use the entire
Real range.

     After a graphics image has been created by your Pascal program,
you can go to the screen to view it.  You can zoom in on any part of
the image or zoom out.  Think of your video display as a viewport
looking onto a vast plane.  With the arrow keys you can move the
viewport to any part of the plane.

     Mystic Pascal supports procedures to create individual points and
lines in any allowed color.  It also has a procedure DRAWLINES which
will draw a complex image of thousands of connected lines whose
coordinates are stored in an array.  Once an image is stored in your
data array, you can place a copy of it at any location by just adding a
positional factor to each data point.  You can also change its size by
multiplying each point by some factor.  With a little more involved
programming, you could rotate the image to any angle.  The sample
program FOREST.PAS demonstrates the use of Drawlines.  After creating
an image of a single pine tree, it creates a forest of hundreds of
trees of different sizes and colors at randomly chosen locations.



1.1  Text Consoles

     After text consoles have been allocated with the SCREENS
procedure, you can access them via the F2 function key.  Up to ten text
consoles may be allocated.  When a text console is displayed on the
video display, any keyboard input is stored in a keyboard queue
associated with that text console.  This queue may be accessed with
standard Read procedures:

     READ( CON1, X, Y );
     READ( CON5, NEW_SETTING );

     The standard Write/writeln procedures may be used to display data
on text consoles.

     WRITELN( CON10, TIME, 'ERROR -- BUSY SIGNAL - ', PHONE_NUM);
     WRITELN( CON5, 'PRESSURE TRANSDUCER',pt,' MALFUNCTION');

     The Bordercolor, Textcolor and Textbackground procedures control
the color attributes of text console output.  These procedures require
use of the screen number (11..20) rather than the symbolic CON1..CON10.



1.2  Graphics Commands

     After a graphics screen has been allocated with the SCREENS
procedure, you can go to it via the F3 and F4 function keys.  It is
best to begin viewing a graphic screen with the End key which provides
a view from a far zoomed out position.

     Key            Function
     ---            --------
     arrow keys     move image 1/10 screen at a time
     +              zoom in by 2X
     -              zoom out by 2X
     Home           center at 0,0 and set pixel size to 1
     End            center at 0,0 and set pixel size to 200
     F5             toggle the axis display to 1 of 3 settings
                      -- display axis, center point and bounds
                      -- display axis and center point
                      -- no axis display



1.3  Screen Numbers

     When reading from or writing to a text console you must use its
symbolic name CON1 to CON10.  All other screen related procedures
require use of the actual screen number as an integer expression.
Version 1.6 does not support writing text to graphics screens.

     TEXTCOLOR(13, 1);        {blue on red}
     TEXTBACKGROUND(13, 4);
     WRITE( CON3, 'Testing text console 3.');


     Screen         Symbol              Name
     ------         ------              ----
     1                                  editor
     2                                  direct mode
     3                                  system display
     4                                  laser display
     5                                  unused
     6                                  unused
     7                                  unused
     8                                  unused
     9                                  unused
     10                                 unused
     11             CON1                text console 1
     12             CON2                text console 2
     13             CON3                text console 3
     14             CON4                text console 4
     15             CON5                text console 5
     16             CON6                text console 6
     17             CON7                text console 7
     18             CON8                text console 8
     19             CON9                text console 9
     20             CON10               text console 10
     21             MED1                medium res graphics 1
     22             MED2                medium res graphics 2
     23             MED3                medium res graphics 3
     24             MED4                medium res graphics 4
     25             MED5                medium res graphics 5
     26             MED6                medium res graphics 6
     27             MED7                medium res graphics 7
     28             MED8                medium res graphics 8
     29             MED9                medium res graphics 9
     30             MED10               medium res graphics 10
     31             HI1                 high res graphics 1
     32             HI2                 high res graphics 2
     33             HI3                 high res graphics 3
     34             HI4                 high res graphics 4
     35             HI5                 high res graphics 5
     36             HI6                 high res graphics 6
     37             HI7                 high res graphics 7
     38             HI8                 high res graphics 8
     39             HI9                 high res graphics 9
     40             HI10                high res graphics 10



1.4  Color Numbers

     The IBM Color/Graphics adapter (and compatible cards) supports up
to 16 colors for text display, 8 colors for the text background and 16
colors for the border color.  The medium resolution graphics screens
may have any one of 16 colors for the background color and a palette of
three other colors.  High resolution graphics are always monochrome.

     The procedures MEDIUMBACKGROUND, TEXTCOLOR and BORDERCOLOR require
a color number from this table in the range of 0 to 15.  TEXTBACKGROUND
requires a color in the range of 0 to 7.  The procedures DRAW,
DRAWLINES, GRAPH and PLOT require a color 0 to 3 depending on the
Palette setting.  Refer to the section on the PALETTE procedure for
those color choices.

     Number         Color
     ------         -----
     0              black
     1              blue
     2              green
     3              cyan
     4              red
     5              magenta
     6              brown
     7              white
     8              gray
     9              light blue
     10             light green
     11             light cyan
     12             light red
     13             light magenta
     14             yellow
     15             high intensity white



1.5  Bordercolor

BORDERCOLOR(console_num, color);

     The Bordercolor sets the color of the border for text consoles
only.  It has no meaning for graphics screens.  The color value may be
0 through 15.



1.6  Draw

DRAW(screen_num, palette_color, x1, y1, x2, y2);

     The Draw procedure draws a straight line on the specified graphics
screen in the specified palette color.  The X and Y values are integer
expressions.

     DRAW(31, 0, x, y, x+50, y-50);
     DRAW(22, 3, 0, 0, data[i].x, data[i].y);



1.7  Drawlines

DRAWLINES(screen_num, palette_color, res, count, array);

     The Drawlines procedure draws a group of connected lines.  A list
of points is stored in an array variable which may be declared as:

     DATA : ARRAY [1..N, 1..2] OF INTEGER;

     The X, Y coordinates of each point are stored in the array by the
Pascal program.  A count of the number of points must be kept.  Up to
16383 lines may be drawn with one execution of Drawlines.  Drawlines
copies the array contents to its own buffer in the Laser area, so the
Pascal program may reuse the array variable without destroying the
graphic image.

     Count is the number of data points in the array which are to be
used.  Count must be an integer expression >= 2.  Palette_color value
is 0 to 3 for medium resolution or 0 for high resolution.

     The term "pixel size" refers to the logical size of each pixel on
the graphic display.  This value changes by a factor of 2 when you zoom
in or out.  For example, if the pixel size is 20, then a horizontal
line of length 200 would span 10 pixels.  The resolution or res field
of Drawlines suppresses the display of the image if the pixel size is
greater than the resolution value.  If resolution is 0, the image is
always (not never) displayed.  Thus detailed features would not appear
until you zoomed in on them.  This also improves display speed.

     DRAWLINES(21, 1, 100, ndx, data);
     DRAWLINES(21, 3, res, lib[50].cnt, lib[50].image);
     DRAWLINES(31, 0, 20000, x, map_of_USA);



1.8  Gotoxy

GOTOXY(console_num, row, column);

     The Gotoxy procedure is used to position the cursor on text
consoles.  The upper left corner is row=1, column=1.



1.9  Graph

GRAPH(screen_num, palette_color, function);

     The Graph procedure automatically graphs a real function on a
medium or high resolution screen.  The function must be the name of a
user-defined Pascal function  -- it may NOT be the name of a builtin
function.  The function must have a result type of real.  It must have
exactly one value parameter also of type real.  VAR parameters are not
allowed.  Here is an example:

     {function header for graphing}
     FUNCTION PARABOLA ( X : REAL ): REAL;


     {graph the parabola on medium screen 1 in red}
     GRAPH(21,2,PARABOLA);

     The Graph procedure operates by computing the X coordinate of each
column of pixels -- 320 times in medium res or 640 in high res.  It
then calls the function, passing the X parameter.  The function return
value is the Y coordinate.  It then adjusts the X,Y coordinates for
scale and displacement and plots one point.  If the change in Y from
one pixel column to the next is greater than 1, then Graph draws a line
instead of only plotting a single point.  This produces a more solid
graph for curves which are rising or declining very steeply.

     You can plot several graphs on one screen and locate their
intersections with the zoom and arrow keys.  This is the graphic method
of solving equations you probably learned in school.  With the F5 key
you can toggle on the display of X,Y axes and the screen center point.
The high resolution screens provide several more digits of precision in
the center point display than the medium resolution.

     WARNING -- You must some care in designing a function that you
want to graph.  You must include code that prevents division by zero,
computation of the square root of negative numbers and other illegal
operations.  When an illegal X parameter occurs, you can return 0.0 or
some other value instead of computing the actual function.



1.10  Mediumbackground

MEDIUMBACKGROUND(screen_num, color);

     The Mediumbackground procedure is used to set the background color
of a medium resolution graphics screen.  The color value may be 0 to
15.



1.11  Page

PAGE(screen_num);

     The Page procedure is used to clear the screen of a text console.
If it is used on a graphics screen it will erase all graphics images
associated with that screen whether they are currently visible or not.
It resets all image buffers for the specified graphics screen.



1.12  Palette

PALETTE(screen_num, value);

     The Palette procedure selects the color palette for a medium
resolution graphics screen.  The palette values are:

     Palette          Color0      Color1      Color2      Color3
     -------          ------      ------      ------      ------
        0             Backgrnd    Green       Red         Brown
        1             Backgrnd    Cyan        Magenta     White



1.13  Plot

PLOT(screen_num, palette_color, x, y);

     The Plot procedure is used to plot a single point on a medium or
high resolution graphics screen.  The X and Y coordinates are integer
expressions.



1.14  Screens

SCREENS(consoles, medium, high);

     The Screens procedure allocates text consoles and medium and high
resolution graphics screens.  Up to 10 of each may be allocated.  These
screens are stored in the Laser area.  Each text console uses 4000
bytes of storage and each graphics screen uses 16384 bytes.

     If Screens is executed more than once, previously allocated
consoles and graphics screens are de-allocated and their images are
lost.  Attempting to allocate the maximum of 30 screens would use
367,680 bytes of Laser space.  This would cause a Laser Storage Error
01 due to insufficient storage unless Mysticin was run to increase the
Laser size.



1.15  Screentitle

SCREENTITLE(screen_num, title_string);

     The Screentitle procedure stores a title string for consoles or
graphics screens of one of the three pop-up menus.  The maximum string
size is 16 bytes.

     SCREENTITLE(11, 'Modem Watch');         {console 1}
     SCREENTITLE(12, 'Error Log');           {console 2}
     SCREENTITLE(21, 'IC Layout');           {medium res 1}
     SCREENTITLE(31, 'Waveform X');          {high res 1}



1.16  Textbackground

TEXTBACKGROUND(console_num, color);

     The Textbackground procedure is used to specify the background
color for a text console.  The color value may be from 0 to 7.  If a
value of 8 is added to the color, the character will blink.



1.17  Textcolor

TEXTCOLOR(console_num, color);

     The Textcolor procedure is used to specify the text color for a
text console.  The color value may be from 0 to 15.




2. 8087 Double Precision Math

     Mystic Pascal supports the 8087 and 80287 math coprocessor chips.
The number range is 4.19E-307 to 1.67E+308.  There are two versions of
Mystic Pascal on the distribution disk:

     MYSTIC.EXE               non-8087 compiler
     MYSTIC87.EXE             8087 compiler

     You should use MYSTIC87 only if an 8087/287 chip is installed in
your computer.  Object modules and EXE files created with MYSTIC87
assume that the 8087/287 chip is present.

     When 8087/287 Real numbers are written to the console or to disk
the default format is:

     '  1.12345678901234E+000'

     There is a leading space followed by either a second space or a
'-' sign.  There is one digit left of the decimal point and 14 digits
to the right.  There are three exponent digits.  The total length of
the field is 23 bytes.



3. Creating EXE files

     Mystic Pascal now creates standalone executable program files.
Mystic directly writes an object module to disk when, after a
successful compile, you give the command F5-O from the Editor screen.
This object module has a filename that is the same as the program name,
not necessarily the same as the name of the source program file.  The
filetype of the object module is OBJ.

     The object module must be processed with the standard DOS Linker
program.  The Mystic library MYSTIC.LIB contains the support code that
the object module needs.  Only the support code that is needed by your
program is linked in by the Linker.  This results in very compact EXE
files.  The minimum file size is about 800 bytes.  Here is a sample
listing from an execution of the Link program:


A>LINK

Microsoft 8086 Object Linker
Version 3.00 (C) Copyright Microsoft Corp 1983, 1984, 1985

Object Modules [.OBJ]: TEST               <-- type module name
Run File [TEST.EXE]:                      <-- enter
List File [NUL.MAP]:                      <-- enter
Libraries [.LIB]: MYSTIC                  <-- type library name

A>

     You may give a file name for the List File followed by /M for a
detailed link map.  Link may also be run as a one line command:

A>LINK TEST,,,MYSTIC                      <-- module, 3 commas, library

     RESTRICTION - Mystic Pascal version 1.6 standalone programs do not
support multi-tasking, graphics or multiple consoles.  All standard
Pascal language features are supported.  A future version will support
standalone programs with multi-tasking and other advanced features.  If
you try to produce such a program, the Link program will report
unresolved reference errors.



4.  Message Queues

     Mystic Pascal programs may Start concurrent procedures as true
multi-tasking processes.  Up to 100 processes may be running
concurrently.  These processes may communicate with each other through
global variables.  Mystic Pascal also provides a more powerful method
for communication among processes -- message queues.  Queues are a
first-in-first-out (FIFO) data structure, that is, messages are
Received from the queue in the same order they were Sent to it.

     Queues also provide an important synchronizing function in this
multi-tasking environment.  When a process attempts to receive a
message from an empty queue, the process is suspended (not allowed to
do any more processing) until a message arrives on that queue.  Also if
a process tries to send a message to a queue that is full (100
messages), that process is suspended until its message is used.

     Multi-tasking programs are often designed with processes set up as
servers -- a process will serve some unique function in the overall
system.  Other processes may send requests to a server to perform some
function.  One example is a printer interface process.  If all multi-
tasking processes could write to a printer at any time, their printouts
would be come chaotically mixed together.  A printer process could
collect all the outputs for each process or output category into
batches and print it on separate pages.  This printer process could
receive its requests from one or more queues to which the other
processes could send their printouts.


4.1  QUEUE declaration

     A Queue data structure is a Mystic Pascal extension and is
regarded as a builtin data type.  A queue may be declared simply like
an Integer, Char or other data type.


     VAR
     Q1, Q2 : QUEUE;


4.2  OPEN

OPEN(queue_variable);

     The Open procedure initializes a queue variable to receive
messages.  Queues MUST always be opened before use.


     OPEN(Q1);
     OPEN(Q2);


4.3  MSGCNT

MSGCNT(queue_variable)

     The Msgcnt function returns an integer indicating the number of
messages stored on a queue variable.


     IF MSGCNT(Q1) > 0 THEN  RECEIVE(Q1, COMMAND);

     IF MSGCNT(Q2) < 100 THEN  SEND(Q2, PRINTLINE);


4.4  SEND

SEND(queue_variable, expression);

     The Send procedure stores a message on a queue variable.  QUEUE
VARIABLES MUST BE OPENED BEFORE USE.  Queue operations do not do type
checking.  The expression may be of any data type, except queue, file
or text.  If the queue contains more than 100 messages, the process
issuing the Send will be placed in a wait state until its message is
consumed.

     SEND(Q1, 'TROLL ALCHEMIST MUTATES');
     SEND(LOGQ, 'reindexing customer file');
     SEND(Q2, 'Compute cmpnd GNP growth without govt overhead.');


4.5  RECEIVE

RECEIVE(queue_variable, variable);

     The Receive procedure retrieves a message from a queue and stores
it in the variable.  QUEUE VARIABLES MUST BE OPENED BEFORE USE.  Queue
operations do not do type checking.  The variable may be of any data
type.  If the variable is shorter than the message, the message is
truncated.  If longer, the message is padded with spaces.  If a process
tries to receive from a queue which contains no messages, the process
is placed in a wait state until a message arrives.  If several
processes are waiting on a queue when a message arrives, the oldest
process receives the message.

     RECEIVE(Q1, DATAITEM);
     RECEIVE(LOGQ, LINE); WRITELN(LST, TIME, '> ', LINE);

     RECEIVE(A2D, SAMPLE);
     WITH SAMPLE DO PLOT(31,0,VOLTAGE,CURRENT);



5.  Minor Changes

1.  Function Key assignments

     F1   Screen Selection
     F2   Consoles
     F3   Medium Res Screens
     F4   High Res Screens
     F5   Editor Commands  (used to be F2)
     F6   Help - Function Keys
     F7   Help - Context Sensitive
     F8   Help - Pascal Language Reference
     F9   Help - Procedures & Functions I
     F10  Help - Procedures & Functions II

2. The old file MYSTIC.LIB has been renamed to MYSTIC.SYS.  A new file
named MYSTIC.LIB is used for linking object files.

3. The old method of inserting a Break into a multi-tasking procedure
by setting the CL register to 0 and using INTR to call interrupt 226
must not be used.  There is now a builtin procedure named Break.  Its
format is simply:

                    BREAK;

In earlier versions of Mystic Pascal, a process switch or break
operation was automatically done with each Write/ln statement.  This is
no longer done.  IF A PROCESS IS STARTED THAT CONTAINS A LOOP AND HAS
NO BREAK PROCEDURE, THE PROCESS MAY MONOPOLIZE THE COMPUTER FORCING A
REBOOT.  Both Send and Receive however now do an implicit break at the
end of their processing.

4. Builtin procedures which allocate Laser space - NEW, DRAWLINES,
DRAW, PLOT, GRAPH - must not be used inside of multi-tasking concurrent
procedures.  If their storage allocation caused an automatic storage
compression of the Laser, some critical system pointers would not be
updated and a crash could result.

5. Pointer variables allocated with NEW are stored in the Laser area
not the Dynamic Storage area.  So they may now occupy up to 640K,
theoretically, rather than 64K.

6. Up to 100 concurrent Pascal procedures may now execute
simultaneously rather than 50.  When a procedure is STARTed, its
initial priority is 100 rather then 20.

7. The old FLOAT function has been renamed to INT.  It takes a real or
integer parameter and returns a real number with the fractional part of
the number removed.

     INT(expression)

8. The Reset Compiler command (F5-R) is provided to permit a completely
fresh compilation of a program.  The Editor in version 1.6 is able to
properly handle most but not all types of modifications to the source
program.  In particular, there are some limitations in modifying,
inserting or deleting complex statements like Case, Repeat, If-Then-
Else which contain other statements.  If incorrect error messages
occur, reseting the compiler and doing a fresh compile will usually
clear them up.

9. The Priority procedure has been enhanced.  Setting the priority of a
Pascal process, not a system process, to 0 causes the process to be
deleted.

     PRIORITY('Monitor',0);             {delete Monitor process}

10. In the System Display map of storage, the Laser section contains a
new number.  This is the number of times Laser storage has been auto-
compressed.  When a storage request is made and there is not a large
enough block immediately available, the Mystic nucleus compresses laser
storage.  All active blocks are copied to the top of storage and all
pointer references to and within active blocks are updated.  With all
free space collected into one block, the storage request can be
fulfilled.

-- 
	Robert Belanger
	...!philabs!micomvax!belanger

To: philabs!prls!pyramid!decwrl!decvax!ucbvax!ucbcad!ames!lll-lcc!mordor!sri-spam!rutgers!mit-eddie!husc6!harvard!adelie!morgoth!glidden
Subject: Re: Mystic PASCAL
Newsgroups: comp.sys.ibm.pc,comp.lang.pascal
In-Reply-To: <332@morgoth.UUCP>
Organization: Philips Information Systems Ltd., St. Laurent - Que., Canada
Cc: 
Bcc: 

In article <332@morgoth.UUCP> you write:
>Has anyone heard of "Mystic Pascal"?
>
>
>	This is a $16 MS DOS Pascal compiler from:
>	
>	Mystic Canyon Software
>	Pinon Lane
>	P.O. Box 1010
>	Pecos, NM  87552
>	tel. 505-757-6344
>	
>
>It sounds too good to be true.  e.g.:
>  Uses 640K for prog. & data
>  mulit-tasking !?!?!
>  8087 support
>  etc
>  
> Has any tried this or otherwise know if it lives up to its claims?
> 
	In fact I have bought it. The first version 1.5C was not worth it but
	for free they send you an update which I got too version 1.6

	I am including a upgrade file from Mystic describing the upgrade 
	from 1.5C to 1.6 and future 1.7 which should be ready by now.

	If you have question, you can email to me. You can also read in the 
	PC Tech Journal July 1986 page 94 for more info.

====================
         Changes from Mystic Pascal Version 1.5 to Version 1.6


1.   Graphics and Consoles
     1.1  Text Consoles
     1.2  Graphics Commands
     1.3  Screen Numbers
     1.4  Color Numbers
     1.5  BORDERCOLOR
     1.6  DRAW
     1.7  DRAWLINES
     1.8  GOTOXY
     1.9  GRAPH
     1.10  MEDIUMBACKGROUND
     1.11  PAGE
     1.12  PALETTE
     1.13  PLOT
     1.14  SCREENS
     1.15  SCREENTITLE
     1.16  TEXTBACKGROUND
     1.17  TEXTCOLOR

2.   8087 Double Precision Math

3.   Creating EXE Files

4.   Message Queues
     4.1  QUEUE declaration
     4.2  OPEN
     4.3  MSGCNT
     4.4  SEND
     4.5  RECEIVE

5.   Minor Changes



======================================================================


1.  Graphics and Consoles

     Mystic Pascal has a very advanced graphics subsystem unlike any
other programming language.  Its features have some similarity to CAD
(computer aided design) software.  A programmer can create useful and
interesting graphic images on up to 20 graphics screens simultaneously.

     The SCREENS procedure is used to allocate up to 10 each of text
consoles, medium resolution color graphics screens and high resolution
monochrome graphics screens.  These screens are accessed with function
keys F2, F3 and F4 respectively.

     Mystic Pascal graphics uses a standard coordinate system with a
horizontal X axis and vertical Y axis.  Positive X is at the right and
positive Y is at the top.  Line and point plotting may use the entire
integer range -32768 to +32767 and function graphing may use the entire
Real range.

     After a graphics image has been created by your Pascal program,
you can go to the screen to view it.  You can zoom in on any part of
the image or zoom out.  Think of your video display as a viewport
looking onto a vast plane.  With the arrow keys you can move the
viewport to any part of the plane.

     Mystic Pascal supports procedures to create individual points and
lines in any allowed color.  It also has a procedure DRAWLINES which
will draw a complex image of thousands of connected lines whose
coordinates are stored in an array.  Once an image is stored in your
data array, you can place a copy of it at any location by just adding a
positional factor to each data point.  You can also change its size by
multiplying each point by some factor.  With a little more involved
programming, you could rotate the image to any angle.  The sample
program FOREST.PAS demonstrates the use of Drawlines.  After creating
an image of a single pine tree, it creates a forest of hundreds of
trees of different sizes and colors at randomly chosen locations.



1.1  Text Consoles

     After text consoles have been allocated with the SCREENS
procedure, you can access them via the F2 function key.  Up to ten text
consoles may be allocated.  When a text console is displayed on the
video display, any keyboard input is stored in a keyboard queue
associated with that text console.  This queue may be accessed with
standard Read procedures:

     READ( CON1, X, Y );
     READ( CON5, NEW_SETTING );

     The standard Write/writeln procedures may be used to display data
on text consoles.

     WRITELN( CON10, TIME, 'ERROR -- BUSY SIGNAL - ', PHONE_NUM);
     WRITELN( CON5, 'PRESSURE TRANSDUCER',pt,' MALFUNCTION');

     The Bordercolor, Textcolor and Textbackground procedures control
the color attributes of text console output.  These procedures require
use of the screen number (11..20) rather than the symbolic CON1..CON10.



1.2  Graphics Commands

     After a graphics screen has been allocated with the SCREENS
procedure, you can go to it via the F3 and F4 function keys.  It is
best to begin viewing a graphic screen with the End key which provides
a view from a far zoomed out position.

     Key            Function
     ---            --------
     arrow keys     move image 1/10 screen at a time
     +              zoom in by 2X
     -              zoom out by 2X
     Home           center at 0,0 and set pixel size to 1
     End            center at 0,0 and set pixel size to 200
     F5             toggle the axis display to 1 of 3 settings
                      -- display axis, center point and bounds
                      -- display axis and center point
                      -- no axis display



1.3  Screen Numbers

     When reading from or writing to a text console you must use its
symbolic name CON1 to CON10.  All other screen related procedures
require use of the actual screen number as an integer expression.
Version 1.6 does not support writing text to graphics screens.

     TEXTCOLOR(13, 1);        {blue on red}
     TEXTBACKGROUND(13, 4);
     WRITE( CON3, 'Testing text console 3.');


     Screen         Symbol              Name
     ------         ------              ----
     1                                  editor
     2                                  direct mode
     3                                  system display
     4                                  laser display
     5                                  unused
     6                                  unused
     7                                  unused
     8                                  unused
     9                                  unused
     10                                 unused
     11             CON1                text console 1
     12             CON2                text console 2
     13             CON3                text console 3
     14             CON4                text console 4
     15             CON5                text console 5
     16             CON6                text console 6
     17             CON7                text console 7
     18             CON8                text console 8
     19             CON9                text console 9
     20             CON10               text console 10
     21             MED1                medium res graphics 1
     22             MED2                medium res graphics 2
     23             MED3                medium res graphics 3
     24             MED4                medium res graphics 4
     25             MED5                medium res graphics 5
     26             MED6                medium res graphics 6
     27             MED7                medium res graphics 7
     28             MED8                medium res graphics 8
     29             MED9                medium res graphics 9
     30             MED10               medium res graphics 10
     31             HI1                 high res graphics 1
     32             HI2                 high res graphics 2
     33             HI3                 high res graphics 3
     34             HI4                 high res graphics 4
     35             HI5                 high res graphics 5
     36             HI6                 high res graphics 6
     37             HI7                 high res graphics 7
     38             HI8                 high res graphics 8
     39             HI9                 high res graphics 9
     40             HI10                high res graphics 10



1.4  Color Numbers

     The IBM Color/Graphics adapter (and compatible cards) supports up
to 16 colors for text display, 8 colors for the text background and 16
colors for the border color.  The medium resolution graphics screens
may have any one of 16 colors for the background color and a palette of
three other colors.  High resolution graphics are always monochrome.

     The procedures MEDIUMBACKGROUND, TEXTCOLOR and BORDERCOLOR require
a color number from this table in the range of 0 to 15.  TEXTBACKGROUND
requires a color in the range of 0 to 7.  The procedures DRAW,
DRAWLINES, GRAPH and PLOT require a color 0 to 3 depending on the
Palette setting.  Refer to the section on the PALETTE procedure for
those color choices.

     Number         Color
     ------         -----
     0              black
     1              blue
     2              green
     3              cyan
     4              red
     5              magenta
     6              brown
     7              white
     8              gray
     9              light blue
     10             light green
     11             light cyan
     12             light red
     13             light magenta
     14             yellow
     15             high intensity white



1.5  Bordercolor

BORDERCOLOR(console_num, color);

     The Bordercolor sets the color of the border for text consoles
only.  It has no meaning for graphics screens.  The color value may be
0 through 15.



1.6  Draw

DRAW(screen_num, palette_color, x1, y1, x2, y2);

     The Draw procedure draws a straight line on the specified graphics
screen in the specified palette color.  The X and Y values are integer
expressions.

     DRAW(31, 0, x, y, x+50, y-50);
     DRAW(22, 3, 0, 0, data[i].x, data[i].y);



1.7  Drawlines

DRAWLINES(screen_num, palette_color, res, count, array);

     The Drawlines procedure draws a group of connected lines.  A list
of points is stored in an array variable which may be declared as:

     DATA : ARRAY [1..N, 1..2] OF INTEGER;

     The X, Y coordinates of each point are stored in the array by the
Pascal program.  A count of the number of points must be kept.  Up to
16383 lines may be drawn with one execution of Drawlines.  Drawlines
copies the array contents to its own buffer in the Laser area, so the
Pascal program may reuse the array variable without destroying the
graphic image.

     Count is the number of data points in the array which are to be
used.  Count must be an integer expression >= 2.  Palette_color value
is 0 to 3 for medium resolution or 0 for high resolution.

     The term "pixel size" refers to the logical size of each pixel on
the graphic display.  This value changes by a factor of 2 when you zoom
in or out.  For example, if the pixel size is 20, then a horizontal
line of length 200 would span 10 pixels.  The resolution or res field
of Drawlines suppresses the display of the image if the pixel size is
greater than the resolution value.  If resolution is 0, the image is
always (not never) displayed.  Thus detailed features would not appear
until you zoomed in on them.  This also improves display speed.

     DRAWLINES(21, 1, 100, ndx, data);
     DRAWLINES(21, 3, res, lib[50].cnt, lib[50].image);
     DRAWLINES(31, 0, 20000, x, map_of_USA);



1.8  Gotoxy

GOTOXY(console_num, row, column);

     The Gotoxy procedure is used to position the cursor on text
consoles.  The upper left corner is row=1, column=1.



1.9  Graph

GRAPH(screen_num, palette_color, function);

     The Graph procedure automatically graphs a real function on a
medium or high resolution screen.  The function must be the name of a
user-defined Pascal function  -- it may NOT be the name of a builtin
function.  The function must have a result type of real.  It must have
exactly one value parameter also of type real.  VAR parameters are not
allowed.  Here is an example:

     {function header for graphing}
     FUNCTION PARABOLA ( X : REAL ): REAL;


     {graph the parabola on medium screen 1 in red}
     GRAPH(21,2,PARABOLA);

     The Graph procedure operates by computing the X coordinate of each
column of pixels -- 320 times in medium res or 640 in high res.  It
then calls the function, passing the X parameter.  The function return
value is the Y coordinate.  It then adjusts the X,Y coordinates for
scale and displacement and plots one point.  If the change in Y from
one pixel column to the next is greater than 1, then Graph draws a line
instead of only plotting a single point.  This produces a more solid
graph for curves which are rising or declining very steeply.

     You can plot several graphs on one screen and locate their
intersections with the zoom and arrow keys.  This is the graphic method
of solving equations you probably learned in school.  With the F5 key
you can toggle on the display of X,Y axes and the screen center point.
The high resolution screens provide several more digits of precision in
the center point display than the medium resolution.

     WARNING -- You must some care in designing a function that you
want to graph.  You must include code that prevents division by zero,
computation of the square root of negative numbers and other illegal
operations.  When an illegal X parameter occurs, you can return 0.0 or
some other value instead of computing the actual function.



1.10  Mediumbackground

MEDIUMBACKGROUND(screen_num, color);

     The Mediumbackground procedure is used to set the background color
of a medium resolution graphics screen.  The color value may be 0 to
15.



1.11  Page

PAGE(screen_num);

     The Page procedure is used to clear the screen of a text console.
If it is used on a graphics screen it will erase all graphics images
associated with that screen whether they are currently visible or not.
It resets all image buffers for the specified graphics screen.



1.12  Palette

PALETTE(screen_num, value);

     The Palette procedure selects the color palette for a medium
resolution graphics screen.  The palette values are:

     Palette          Color0      Color1      Color2      Color3
     -------          ------      ------      ------      ------
        0             Backgrnd    Green       Red         Brown
        1             Backgrnd    Cyan        Magenta     White



1.13  Plot

PLOT(screen_num, palette_color, x, y);

     The Plot procedure is used to plot a single point on a medium or
high resolution graphics screen.  The X and Y coordinates are integer
expressions.



1.14  Screens

SCREENS(consoles, medium, high);

     The Screens procedure allocates text consoles and medium and high
resolution graphics screens.  Up to 10 of each may be allocated.  These
screens are stored in the Laser area.  Each text console uses 4000
bytes of storage and each graphics screen uses 16384 bytes.

     If Screens is executed more than once, previously allocated
consoles and graphics screens are de-allocated and their images are
lost.  Attempting to allocate the maximum of 30 screens would use
367,680 bytes of Laser space.  This would cause a Laser Storage Error
01 due to insufficient storage unless Mysticin was run to increase the
Laser size.



1.15  Screentitle

SCREENTITLE(screen_num, title_string);

     The Screentitle procedure stores a title string for consoles or
graphics screens of one of the three pop-up menus.  The maximum string
size is 16 bytes.

     SCREENTITLE(11, 'Modem Watch');         {console 1}
     SCREENTITLE(12, 'Error Log');           {console 2}
     SCREENTITLE(21, 'IC Layout');           {medium res 1}
     SCREENTITLE(31, 'Waveform X');          {high res 1}



1.16  Textbackground

TEXTBACKGROUND(console_num, color);

     The Textbackground procedure is used to specify the background
color for a text console.  The color value may be from 0 to 7.  If a
value of 8 is added to the color, the character will blink.



1.17  Textcolor

TEXTCOLOR(console_num, color);

     The Textcolor procedure is used to specify the text color for a
text console.  The color value may be from 0 to 15.




2. 8087 Double Precision Math

     Mystic Pascal supports the 8087 and 80287 math coprocessor chips.
The number range is 4.19E-307 to 1.67E+308.  There are two versions of
Mystic Pascal on the distribution disk:

     MYSTIC.EXE               non-8087 compiler
     MYSTIC87.EXE             8087 compiler

     You should use MYSTIC87 only if an 8087/287 chip is installed in
your computer.  Object modules and EXE files created with MYSTIC87
assume that the 8087/287 chip is present.

     When 8087/287 Real numbers are written to the console or to disk
the default format is:

     '  1.12345678901234E+000'

     There is a leading space followed by either a second space or a
'-' sign.  There is one digit left of the decimal point and 14 digits
to the right.  There are three exponent digits.  The total length of
the field is 23 bytes.



3. Creating EXE files

     Mystic Pascal now creates standalone executable program files.
Mystic directly writes an object module to disk when, after a
successful compile, you give the command F5-O from the Editor screen.
This object module has a filename that is the same as the program name,
not necessarily the same as the name of the source program file.  The
filetype of the object module is OBJ.

     The object module must be processed with the standard DOS Linker
program.  The Mystic library MYSTIC.LIB contains the support code that
the object module needs.  Only the support code that is needed by your
program is linked in by the Linker.  This results in very compact EXE
files.  The minimum file size is about 800 bytes.  Here is a sample
listing from an execution of the Link program:


A>LINK

Microsoft 8086 Object Linker
Version 3.00 (C) Copyright Microsoft Corp 1983, 1984, 1985

Object Modules [.OBJ]: TEST               <-- type module name
Run File [TEST.EXE]:                      <-- enter
List File [NUL.MAP]:                      <-- enter
Libraries [.LIB]: MYSTIC                  <-- type library name

A>

     You may give a file name for the List File followed by /M for a
detailed link map.  Link may also be run as a one line command:

A>LINK TEST,,,MYSTIC                      <-- module, 3 commas, library

     RESTRICTION - Mystic Pascal version 1.6 standalone programs do not
support multi-tasking, graphics or multiple consoles.  All standard
Pascal language features are supported.  A future version will support
standalone programs with multi-tasking and other advanced features.  If
you try to produce such a program, the Link program will report
unresolved reference errors.



4.  Message Queues

     Mystic Pascal programs may Start concurrent procedures as true
multi-tasking processes.  Up to 100 processes may be running
concurrently.  These processes may communicate with each other through
global variables.  Mystic Pascal also provides a more powerful method
for communication among processes -- message queues.  Queues are a
first-in-first-out (FIFO) data structure, that is, messages are
Received from the queue in the same order they were Sent to it.

     Queues also provide an important synchronizing function in this
multi-tasking environment.  When a process attempts to receive a
message from an empty queue, the process is suspended (not allowed to
do any more processing) until a message arrives on that queue.  Also if
a process tries to send a message to a queue that is full (100
messages), that process is suspended until its message is used.

     Multi-tasking programs are often designed with processes set up as
servers -- a process will serve some unique function in the overall
system.  Other processes may send requests to a server to perform some
function.  One example is a printer interface process.  If all multi-
tasking processes could write to a printer at any time, their printouts
would be come chaotically mixed together.  A printer process could
collect all the outputs for each process or output category into
batches and print it on separate pages.  This printer process could
receive its requests from one or more queues to which the other
processes could send their printouts.


4.1  QUEUE declaration

     A Queue data structure is a Mystic Pascal extension and is
regarded as a builtin data type.  A queue may be declared simply like
an Integer, Char or other data type.


     VAR
     Q1, Q2 : QUEUE;


4.2  OPEN

OPEN(queue_variable);

     The Open procedure initializes a queue variable to receive
messages.  Queues MUST always be opened before use.


     OPEN(Q1);
     OPEN(Q2);


4.3  MSGCNT

MSGCNT(queue_variable)

     The Msgcnt function returns an integer indicating the number of
messages stored on a queue variable.


     IF MSGCNT(Q1) > 0 THEN  RECEIVE(Q1, COMMAND);

     IF MSGCNT(Q2) < 100 THEN  SEND(Q2, PRINTLINE);


4.4  SEND

SEND(queue_variable, expression);

     The Send procedure stores a message on a queue variable.  QUEUE
VARIABLES MUST BE OPENED BEFORE USE.  Queue operations do not do type
checking.  The expression may be of any data type, except queue, file
or text.  If the queue contains more than 100 messages, the process
issuing the Send will be placed in a wait state until its message is
consumed.

     SEND(Q1, 'TROLL ALCHEMIST MUTATES');
     SEND(LOGQ, 'reindexing customer file');
     SEND(Q2, 'Compute cmpnd GNP growth without govt overhead.');


4.5  RECEIVE

RECEIVE(queue_variable, variable);

     The Receive procedure retrieves a message from a queue and stores
it in the variable.  QUEUE VARIABLES MUST BE OPENED BEFORE USE.  Queue
operations do not do type checking.  The variable may be of any data
type.  If the variable is shorter than the message, the message is
truncated.  If longer, the message is padded with spaces.  If a process
tries to receive from a queue which contains no messages, the process
is placed in a wait state until a message arrives.  If several
processes are waiting on a queue when a message arrives, the oldest
process receives the message.

     RECEIVE(Q1, DATAITEM);
     RECEIVE(LOGQ, LINE); WRITELN(LST, TIME, '> ', LINE);

     RECEIVE(A2D, SAMPLE);
     WITH SAMPLE DO PLOT(31,0,VOLTAGE,CURRENT);



5.  Minor Changes

1.  Function Key assignments

     F1   Screen Selection
     F2   Consoles
     F3   Medium Res Screens
     F4   High Res Screens
     F5   Editor Commands  (used to be F2)
     F6   Help - Function Keys
     F7   Help - Context Sensitive
     F8   Help - Pascal Language Reference
     F9   Help - Procedures & Functions I
     F10  Help - Procedures & Functions II

2. The old file MYSTIC.LIB has been renamed to MYSTIC.SYS.  A new file
named MYSTIC.LIB is used for linking object files.

3. The old method of inserting a Break into a multi-tasking procedure
by setting the CL register to 0 and using INTR to call interrupt 226
must not be used.  There is now a builtin procedure named Break.  Its
format is simply:

                    BREAK;

In earlier versions of Mystic Pascal, a process switch or break
operation was automatically done with each Write/ln statement.  This is
no longer done.  IF A PROCESS IS STARTED THAT CONTAINS A LOOP AND HAS
NO BREAK PROCEDURE, THE PROCESS MAY MONOPOLIZE THE COMPUTER FORCING A
REBOOT.  Both Send and Receive however now do an implicit break at the
end of their processing.

4. Builtin procedures which allocate Laser space - NEW, DRAWLINES,
DRAW, PLOT, GRAPH - must not be used inside of multi-tasking concurrent
procedures.  If their storage allocation caused an automatic storage
compression of the Laser, some critical system pointers would not be
updated and a crash could result.

5. Pointer variables allocated with NEW are stored in the Laser area
not the Dynamic Storage area.  So they may now occupy up to 640K,
theoretically, rather than 64K.

6. Up to 100 concurrent Pascal procedures may now execute
simultaneously rather than 50.  When a procedure is STARTed, its
initial priority is 100 rather then 20.

7. The old FLOAT function has been renamed to INT.  It takes a real or
integer parameter and returns a real number with the fractional part of
the number removed.

     INT(expression)

8. The Reset Compiler command (F5-R) is provided to permit a completely
fresh compilation of a program.  The Editor in version 1.6 is able to
properly handle most but not all types of modifications to the source
program.  In particular, there are some limitations in modifying,
inserting or deleting complex statements like Case, Repeat, If-Then-
Else which contain other statements.  If incorrect error messages
occur, reseting the compiler and doing a fresh compile will usually
clear them up.

9. The Priority procedure has been enhanced.  Setting the priority of a
Pascal process, not a system process, to 0 causes the process to be
deleted.

     PRIORITY('Monitor',0);             {delete Monitor process}

10. In the System Display map of storage, the Laser section contains a
new number.  This is the number of times Laser storage has been auto-
compressed.  When a storage request is made and there is not a large
enough block immediately available, the Mystic nucleus compresses laser
storage.  All active blocks are copied to the top of storage and all
pointer references to and within active blocks are updated.  With all
free space collected into one block, the storage request can be
fulfilled.

-- 
	Robert Belanger
	...!philabs!micomvax!belanger
-- 
	Robert Belanger
	...!philabs!micomvax!belanger

samlb@well.UUCP (02/09/87)

	JRT Pascal was _not_ a scam -- I got copies of both Version 1 and
Version 3.  Whatever its other defects, JRT Pascal actually existed, and
was being shipped.  (I even have a copy of JRT Modula-2).

	Jim Tyson's problem was not vaporware, it was inadequate business
planning -- he did not succeed in raising enough captial through sales or
financing to cope with the thundering tide of orders he received, and had
to give up.

	The man is a technical genius -- I've met him -- but painfully shy,
and not a businessman.  A lot of other people in the early micro market fell
into the same category, but not all of them did as much work as Jim did to
try to fulfill their promises.

	I have not tried Mystic Pascal (UCSD & Turbo are enough for me to cope
with), so I can't say anything about them, other than to wish J.R.T. well . . .

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sam'l Bassett, Self-Employed Writer -- My words & ideas are my own!
34 Oakland Ave., San Anselmo  CA  94960;
DDD:         (415) 454-7282;     /  dual\
UUCP:        {...known world...}! lll-crg!well!samlb;
Compuserve:  71735,1776;         \hplabs/

psc@lzaz.UUCP (02/10/87)

In article <1389@bnrmtv.UUCP>, perkins@bnrmtv.UUCP writes:
> > Has anyone heard of "Mystic Pascal"?
> > 	This is a $16 MS DOS Pascal compiler from:
> > 	Mystic Canyon Software
> > It sounds too good to be true.
> > Ken A. Glidden, {harvard|ll-xn|mirror|axiom}!adelie!morgoth!glidden
> 
> "Mystic Pascal" is a product of J.R. Tyson, who created "JRT Pascal"
> for the CP/M world.  The company went bankrupt amid a flurry of lawsuits
> and postal fraud investigations.  JRT had apparently advertised the
> program as complete and available, and taken money for copies of same,
> BEFORE ANY SUCH PROGRAM EXISTED.
> {hplabs,amdahl,3comvax}!bnrmtv!perkins        --Henry Perkins

Now *wait* a minute.  JRT Pascal was a real product.  It wasn't a real
*good* product; it had lots of bugs, and was an extremely limited
implementation of the language.  JRT was unable to turn checks into
shipped products fast enough (this was back when you didn't have to be
a good businessperson to make money in the personal computer industry -
for a while), and was one of the first well-known micro companies to go
bust.  Yes, many people did lose their money (thirty dollars, I think),
but it wasn't designed to be a scam.

PC Tech Journal reviewed Mystic Pascal in a big Pascal review early in
1986 (February or March or so, I think).  Mystic has *no* support for
variable length strings, and is still not a super implementation.  On
the plus side, it comes with a smart editor that does syntax checking
and "incremental compilation", which means that it compiles while you
type.  The perceived compilation speed is thus pretty darn fast.  It's
$16 with documentation on disk, or $32 with printed documentation.
Mystic Pascal is *not* public domain or shareware, just an inexpensive
commercial product.

JRT Pascal was bought up by Utah Computing or some such, and is now
sold under the name of Utah Pascal.  This is not a recommendation.

-Paul S. R. Chisholm, UUCP {ihnp4,cbosgd,allegra,vax135,mtgzz}!lznv!psc
AT&T Mail !psrchisholm, Internet mtgzz!lznv!psc@rutgers.rutgers.edu
The above history lesson has not been approved by any telecomm company.

pozar@hoptoad.UUCP (02/10/87)

In article <216@dasys1.UUCP> rsweeney@dasys1.UUCP (Robert Sweeney) writes:
>In article <1389@bnrmtv.UUCP> perkins@bnrmtv.UUCP (Henry Perkins) writes:
>> [...]
>>"JRT Pascal" is the classic example of "vaporware".  It is VERY UNLIKELY
>>that "Mystic Pascal" is as good as it sounds.
>
>JRT Pascal wasn't vaporware by the classic definition - it did in fact
>exist.  However, it was advertised as being a more or less "full"
>implementation of the language, when in fact it was nothing of the sort.
>People bought it on such promises, and then discovered its severe
>shortcomings - and got more than a little bit angry.
>

   I agree that JRT wasn't vaporware, but I felt I wasn't ever mislead 
concerning the "fullness" of the product.  I bought the pascal from JRT for
$29.95 after reading quite of bit of information that was available about the
package at the time.  BYTE was giving JRT a lot of ink before and during it's
release.  Also JRT never stated that it was a full Pascal.  For $29.95 which
include an eight inch CP/M disc, mucho software and a resonable manual, I was
quite please.

aland@hpscda.UUCP (02/11/87)

> > Has anyone heard of "Mystic Pascal"?
> > 	This is a $16 MS DOS Pascal compiler from:
> > 	Mystic Canyon Software
> > 
> > It sounds too good to be true.
> > 
> > Ken A. Glidden, {harvard | ll-xn | mirror | axiom}!adelie!morgoth!glidden
> 
> "Mystic Pascal" is a product of J.R. Tyson, who created "JRT Pascal"
> for the CP/M world.  The company went bankrupt amid a flurry of lawsuits
> and postal fraud investigations.  JRT had apparently advertised the
> program as complete and available, and taken money for copies of same,
> BEFORE ANY SUCH PROGRAM EXISTED.
> 
> "JRT Pascal" is the classic example of "vaporware".  It is VERY UNLIKELY
> that "Mystic Pascal" is as good as it sounds.
> -- 
> {hplabs,amdahl,3comvax}!bnrmtv!perkins        --Henry Perkins

Actually, JRT Pascal was a very clever stunt  - it  was a multi-phase
vaporware product.  They accepted orders for the  first version until
they absolutely had  to ship  something.    The  first product barely
worked.  EVen by 2.0, fully 50% of your code lines were to get around
compiler  problems.    They  then  announced  version 3  (at a higher
price), and took order  and upgrade  orders.   No product  for a very
long time.  About when they  started to  ship version  3 (no better),
they had announced version 4.

If you buy it, don't expect it  on time  (if ever).   If  you get it,
don't expect it to work as advertised.   Don't  ever expect  to get a
version that does work as advertised.

					Alan Davis
					hpscda!aland