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