REM *************************************************************************
REM *
REM * (C) Copyright Sutter Instrument Company 1996
REM *     Version 1.3    February 1996
REM *     Version 1.2    July 1995
REM *
REM * N.B.: This is written in Power BASIC
REM *
REM * Important modifications:
REM *
REM *	1) Parity can now be accomodated if desired. Use:
REM *         OPEN "COM1:9600,E,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
REM *
REM *   2) The parameter RSPEED now comes in on the 32 byte stats string
REM *         Now, all 32 bytes are read;  See SHOWSTATS
REM *
REM *	3) The display has been revised
REM *
REM *   4) The input and display for the MOVE command has been revised such
REM *      that the step and æm displays are valid for 50 and 10 æsteps/step.
REM *
REM *   5) Three new commands have been added.
REM *         N   "reNew" causes a complete rewrite of the VFD display
REM *         D   toggles the position display and input from steps to æm
REM *         Z   sends an invalid command ("z") to test SIO error 4
REM *
REM *   Note: N, Z do not behave properly unless vectors are displayed on VFD
REM *         Only the D command is documented on the program display
REM *         Parity must be implemented by modifying the lines below
REM *
REM *   6) Speeds are now in terms of æSteps/s rather than intervals in æs
REM *
REM *************************************************************************

ROBOFILE$ = "TEST.DAT"
SAVEFILE$ = "MP185.DAT"
KEY 15, CHR$(&H03, &H037)
ON KEY (15) GOSUB MP185END
KEY (15) ON
OPEN SAVEFILE$ FOR OUTPUT AS #2

UNION fourbytes
    longfield  AS LONG
    fourstring AS STRING*4
END UNION

UNION twobytes
    wordfield  AS INTEGER
    twostring  AS STRING*2
END UNION

UNION onebyte
    bytefield  AS BYTE
    onestring  AS STRING*1
END UNION

DIM XVAL     AS fourbytes
DIM YVAL     AS fourbytes
DIM ZVAL     AS fourbytes
DIM FLAGS    AS onebyte
DIM UDIRX    AS onebyte
DIM UDIRY    AS onebyte
DIM UDIRZ    AS onebyte
DIM DEAD     AS twobytes
DIM UOFFSET  AS twobytes
DIM URANGE   AS twobytes
DIM PULSE    AS twobytes
DIM USPEED   AS twobytes
DIM POWER    AS onebyte
DIM ECHOSTAT AS onebyte
DIM SAFELO   AS twobytes
DIM SAFEHI   AS twobytes
DIM BAUDHI   AS onebyte
DIM BAUDLO   AS onebyte
DIM STEPDIV  AS twobytes
DIM STEPMUL  AS twobytes
DIM RSPEED   AS twobytes
DIM XPARAM   AS twobytes

DIM USTEPS AS WORD

DISPLAYTYPE%=1
PULSESTR$="PULSE speed (æSteps/s):"
BAUDRATE=9600
RSPEED.wordfield=10000.0
GOSUB MP185INIT

WHILE(1)
REM OPEN "COM1:19200,E,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    GOSUB OPENCOM
    WHILE NOT INSTAT
        GOSUB GETLOCATION
        GOSUB SHOWLOCATION
	DELAY 0.1
    WEND
    MYKEY$ = INKEY$
    IF     MYKEY$ = " "                 THEN
        GOSUB QUIETCOMMAND
    ELSEIF MYKEY$ = "P" OR MYKEY$ = "p" THEN
        GOSUB PLAYCOMMAND
    ELSEIF MYKEY$ = "F" OR MYKEY$ = "f" THEN
        GOSUB INFILECOMMAND
    ELSEIF MYKEY$ = "W" OR MYKEY$ = "w" THEN
        GOSUB OUTFILECOMMAND
    ELSEIF MYKEY$ = "M" OR MYKEY$ = "m" THEN
        GOSUB MOVECOMMAND
    ELSEIF MYKEY$ = "O" OR MYKEY$ = "o" THEN
        GOSUB ORIGINCOMMAND
    ELSEIF MYKEY$ = "V" OR MYKEY$ = "v" THEN
        GOSUB VELOCITYCOMMAND
    ELSEIF MYKEY$ = "G" OR MYKEY$ = "g" THEN
        GOSUB GETLOCUSCOMMAND
    ELSEIF MYKEY$ = "B" OR MYKEY$ = "b" THEN
        GOSUB GETSPEEDCOMMAND
    ELSEIF MYKEY$ = "A" OR MYKEY$ = "a" THEN
        GOSUB GETSTATSCOMMAND
    ELSEIF MYKEY$ = "S" OR MYKEY$ = "s" THEN
        GOSUB SHOWSTATSCOMMAND
    ELSEIF MYKEY$ = "N" OR MYKEY$ = "n" THEN
        GOSUB VFDRENEWCOMMAND
    ELSEIF MYKEY$ = "Z" OR MYKEY$ = "z" THEN
        GOSUB BOGUSCOMMAND
    ELSEIF MYKEY$ = "D" OR MYKEY$ = "d" THEN
        GOSUB DISPLAYTOGGLECOMMAND
    ELSEIF MYKEY$ = "Q" OR MYKEY$ = "q" THEN
        GOTO  MP185END
    ELSEIF MYKEY$ = "E" OR MYKEY$ = "e" THEN
        GOTO  MP185END
    ELSEIF LEN(MYKEY$) = 2              THEN
        GOTO  MP185END
    ELSE
        IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
        PRINT #1, CHR$(03);
        PRINT #1, CHR$(13);
        DONEFLAG$ = INPUT$(1,#1)
    END IF
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    CLOSE #1
WEND

QUIETCOMMAND:
    LOCATE 1,1,0
    PRINT "REMOTE DISABLED ... press any key to resume";
    LOCATE 3,60,0
    PRINT"Remote  disabled";
    WHILE NOT INSTAT
        ON KEY (15) GOSUB MP185END
    WEND
    MYKEY$ = INKEY$
    MYKEY$ = "s"
    LOCATE 1,1,0
    PRINT "                                           ";
    GOSUB SHOWSTATSCOMMAND
    RETURN

INFILECOMMAND:
    GOSUB GETFILENAME
    ROBOFILE$ = WHATFILE$
    LOCATE 24,43,0
    PRINT "                    "
    LOCATE 24,43,0
    PRINT ROBOFILE$
    LCOUNTER = 1
    LOCATE 24,63,0
    PRINT "              "
    RETURN

OUTFILECOMMAND:
    GOSUB GETFILENAME
    IF WHATFILE$ <> "" THEN
    	CLOSE #2
        SAVEFILE$ = WHATFILE$
        OPEN SAVEFILE$ FOR OUTPUT AS #2
    END IF
    LOCATE 24,63,0
    PRINT "                "
    LOCATE 24,63,0
    PRINT SAVEFILE$
    RETURN

PLAYCOMMAND:
    LOCATE 1,1,0
    ENDLESSLOOP=0
    INPUT "Loop continuously? (Y=yes)";ANSWER$
    IF ANSWER$="Y" OR ANSWER$="y" THEN ENDLESSLOOP=1
    LOCATE 1,1,0
    PRINT "Now executing             "; ROBOFILE$
    PRINT "Press any key to halt"
    WHILE NOT INSTAT
        OPEN ROBOFILE$ FOR INPUT AS #3
        WHILE NOT EOF(3)
            IF INSTAT THEN EXIT
            INPUT #3, CMD$
            IF     CMD$="m" THEN
                INPUT #3, XVAL.longfield
                INPUT #3, YVAL.longfield
                INPUT #3, ZVAL.longfield
                GOSUB PUTLOCATION
                GOSUB SHOWLOCATION
            ELSEIF CMD$="v" THEN
                INPUT #3, USPEED.wordfield
                GOSUB PUTVELOCITY
                GOSUB SHOWSTATSCOMMAND
            ELSEIF CMD$="o" THEN
                GOSUB ORIGINCOMMAND
            ELSEIF CMD$="d" THEN
                INPUT #3, SNOOZETIME!
                SLEEP SNOOZETIME
            ELSEIF CMD$="s" THEN
                GOSUB SHOWSTATSCOMMAND
            ELSE
            END IF
            IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
REM         FOR I=0 TO 1000
REM         NEXT I
        WEND
        CLOSE #3
        IF ENDLESSLOOP=0 THEN EXIT
    WEND
    IF INSTAT THEN
        IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
        PRINT #1, CHR$(03);
        PRINT #1, CHR$(13);
        DONEFLAG$ = INPUT$(1,#1)
    END IF
    LOCATE 1,1,0
    PRINT "                                           "
    PRINT "                      "
    MYKEY$ = INKEY$
    MYKEY$ = ""
    RETURN

MOVECOMMAND:
    LOCATE 5,30,0
    PRINT " Move to:";
    IF DISPLAYTYPE%=1 THEN
    	LOCATE 7,36,0
    	INPUT "X = ";X
    	LOCATE 8,36,0
    	INPUT "Y = ";Y
    	LOCATE 9,36,0
    	INPUT "Z = ";Z
	XVAL.longfield = X * STEPDIV.wordfield
    	YVAL.longfield = Y * STEPDIV.wordfield
    	ZVAL.longfield = Z * STEPDIV.wordfield
    ELSE
    	LOCATE 7,36,0
    	INPUT "XSteps = ";XS
        LOCATE 7,52,0
        INPUT "XæSteps = ";XUS
    	LOCATE 8,36,0
    	INPUT "YSteps = ";YS
        LOCATE 8,52,0
        INPUT "YæSteps = ";YUS
    	LOCATE 9,36,0
    	INPUT "ZSteps = ";ZS
        LOCATE 9,52,0
        INPUT "ZæSteps = ";ZUS
        XVAL.longfield = (XS*USTEPS)+XUS
        YVAL.longfield = (YS*USTEPS)+YUS
        ZVAL.longfield = (ZS*USTEPS)+ZUS
    END IF
    LOCATE 5,30,0
    PRINT "               ";
    LOCATE 7,36,0
    PRINT "                                ";
    LOCATE 8,36,0
    PRINT "                                ";
    LOCATE 9,36,0
    PRINT "                                ";
    GOSUB PUTLOCATION
    RETURN

ORIGINCOMMAND:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "o"
    PRINT #1, CHR$(13);
    DONEFLAG$ = INPUT$(1,#1)
    RETURN

VFDRENEWCOMMAND:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "n"
    PRINT #1, CHR$(13);
    DONEFLAG$ = INPUT$(1,#1)
    RETURN

BOGUSCOMMAND:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "Z"
    DONEFLAG$ = INPUT$(1,#1)
    LOCATE 13,69,0
    PRINT DONEFLAG$;" "
    LOCATE 1,1,0
    PRINT "Bogus command sent"
    PRINT "Check SIO report sites then press a key"
    WHILE NOT INSTAT
    WEND
    GOSUB VFDRENEWCOMMAND
    LOCATE 1,1,0
    PRINT "                  "
    PRINT "                                       ";
    MYKEY$ = "X"
    RETURN

VELOCITYCOMMAND:
    LOCATE 1,1,0
    INPUT "Step Interval:  ", RSPEED.wordfield
    GOSUB PUTVELOCITY
    GOSUB SHOWSTATSCOMMAND
    LOCATE 1,1,0
    PRINT "                   "
    RETURN

GETSPEEDCOMMAND:
    GOSUB SHOWSTATSCOMMAND
    WRITE #2, "v",USPEED.wordfield
    LOCATE 24,63,0
    PRINT "Line ";LCOUNTER;" saved"
    LCOUNTER = LCOUNTER + 1
    RETURN

GETSTATSCOMMAND:
    GOSUB SHOWSTATSCOMMAND
    WRITE #2, "a",FLAGS.bytefield,UDIRX.bytefield,UDIRY.bytefield,UDIRZ.bytefield,_
              DEAD.wordfield,UOFFSET.wordfield,URANGE.wordfield,PULSE.wordfield,_
              USPEED.wordfield,POWER.bytefield,ECHOSTAT.bytefield,_
              SAFELO.wordfield,SAFEHI.wordfield,RSPEED.wordfield
    LOCATE 24,63,0
    PRINT "Line ";LCOUNTER;" saved"
    LCOUNTER = LCOUNTER + 1
    RETURN

DISPLAYTOGGLECOMMAND:
    DISPLAYTYPE% = DISPLAYTYPE% XOR 1
    LOCATE 10,16,0
    IF DISPLAYTYPE%=1 THEN
	PRINT "            "
    ELSE
	PRINT "steps.æsteps"
    END IF
    GOSUB SHOWSTATSCOMMAND
    GOSUB SHOWLOCATION
    RETURN

GETLOCUSCOMMAND:
    GOSUB GETLOCATION
    GOSUB SHOWLOCATION
    WRITE #2, "m",XVAL.longfield, YVAL.longfield, ZVAL.longfield
    LOCATE 24,63,0
    PRINT "Line ";LCOUNTER;" saved"
    LCOUNTER = LCOUNTER + 1
    RETURN

GETLOCATION:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "c";
    PRINT #1, CHR$(13);
    XVAL.fourstring = INPUT$(4,#1)
    YVAL.fourstring = INPUT$(4,#1)
    ZVAL.fourstring = INPUT$(4,#1)
    DONEFLAG$       = INPUT$(1,#1)
    RETURN

SHOWSTATSCOMMAND:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "s";
    PRINT #1, CHR$(13);
    GOSUB GETSTATS
    GOSUB SHOWSTATS
    LOCATE 3,60,0
    PRINT"       OK       ";
    DELAY 0.5
    LOCATE 3,60,0
    PRINT"**** Online ****";
    RETURN

GETSTATS:
    FLAGS.onestring   = INPUT$(1,#1)
    UDIRX.onestring   = INPUT$(1,#1)
    UDIRY.onestring   = INPUT$(1,#1)
    UDIRZ.onestring   = INPUT$(1,#1)
    DEAD.twostring    = INPUT$(2,#1)
    UOFFSET.twostring = INPUT$(2,#1)
    URANGE.twostring  = INPUT$(2,#1)
    PULSE.twostring   = INPUT$(2,#1)
    USPEED.twostring  = INPUT$(2,#1)
    POWER.onestring   = INPUT$(1,#1)
    ECHOSTAT.onestring= INPUT$(1,#1)
    SAFELO.twostring  = INPUT$(2,#1)
    SAFEHI.twostring  = INPUT$(2,#1)
    BAUDHI.onestring  = INPUT$(2,#1)
    BAUDLO.onestring  = INPUT$(2,#1)
    STEPDIV.twostring = INPUT$(2,#1)
    STEPMUL.twostring = INPUT$(2,#1)
    XPARAM.twostring  = INPUT$(2,#1)
    RSPEED.twostring  = INPUT$(2,#1)
    DONEFLAG$         = INPUT$(1,#1)
    IF STEPMUL.wordfield=25 THEN USTEPS=10.0
    IF STEPMUL.wordfield=5  THEN USTEPS=50.0
    RETURN

GETFILENAME:
    LOCATE 1,1,0
    INPUT "Filename:  ", WHATFILE$
    LOCATE 1,1,0
    PRINT "                                       "
    RETURN

PUTVELOCITY:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "v";
    PRINT #1, RSPEED.twostring;
    PRINT #1, CHR$(13);
    DONEFLAG$ = INPUT$(1,#1)
    LOCATE 14,68,0
    PRINT RSPEED.wordfield
    RETURN

PUTLOCATION:
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "m";
    PRINT #1, XVAL.fourstring;
    PRINT #1, YVAL.fourstring;
    PRINT #1, ZVAL.fourstring;
    PRINT #1, CHR$(13);
    DONEFLAG$ = "X"
    BLINKCOUNTER = 0
    WHILE NOT INSTAT
        LOCATE 3,60,0
        IF BLINKCOUNTER < 1000 THEN PRINT "Move in progress";
        IF BLINKCOUNTER > 1000 AND BLINKCOUNTER < 2000 THEN PRINT "                ";
        IF BLINKCOUNTER > 2000 THEN BLINKCOUNTER = 0
        BLINKCOUNTER = BLINKCOUNTER + 1
        IF LOC(1)>0 THEN
            DONEFLAG$=INPUT$(1,#1)
            EXIT
        END IF
    WEND
    IF DONEFLAG$="X" THEN
        PRINT #1, CHR$(03)
        DONEFLAG$=INPUT$(1,#1)
        LOCATE 3,60,0
        PRINT"Move interrupted";
    ELSE
        LOCATE 3,60,0
    	PRINT" Move completed ";
    END IF
    RETURN

SHOWLOCATION:
    LOCATE 7,1,0
    IF DISPLAYTYPE%=1 THEN
	PRINT USING "           X =+#####.### um  ";XVAL.longfield/STEPDIV.wordfield
	PRINT USING "           Y =+#####.### um  ";YVAL.longfield/STEPDIV.wordfield
	PRINT USING "           Z =+#####.### um  ";ZVAL.longfield/STEPDIV.wordfield
    ELSE
    	IF USTEPS=10 THEN
    	    PRINT USING "           X =+#####.#     ";XVAL.longfield/USTEPS
	    PRINT USING "           Y =+#####.#     ";YVAL.longfield/USTEPS
	    PRINT USING "           Z =+#####.#     ";ZVAL.longfield/USTEPS
        ELSE
    	    PRINT USING "           X =+#####.      ";XVAL.longfield/USTEPS
	    PRINT USING "           Y =+#####.      ";YVAL.longfield/USTEPS
	    PRINT USING "           Z =+#####.      ";ZVAL.longfield/USTEPS
            LOCATE 7,22,0
    	    PRINT USING "##";XVAL.longfield mod USTEPS
            LOCATE 8,22,0
	    PRINT USING "##";YVAL.longfield mod USTEPS
            LOCATE 9,22,0
	    PRINT USING "##";ZVAL.longfield mod USTEPS
        END IF
    END IF
    LOCATE 13,69,0
    IF DONEFLAG$=CHR$(13) THEN
        PRINT "OK"
    ELSE
    	PRINT DONEFLAG$;" "
    END IF
    MYKEY$ = "X"
    RETURN

SHOWSTATS:
    GOSUB CLEARSTATS
    LOCATE 13,69,0
    IF DONEFLAG$=CHR$(13) THEN
        PRINT "OK"
    ELSE
    	PRINT DONEFLAG$;" "
    END IF
    LOCATE 14,68,0
    PRINT RSPEED.wordfield
    LOCATE 14,30,0
    IF (FLAGS.bytefield AND 64) THEN
        PRINT "CONSTANT"
    ELSE
        PRINT "PULSE   "
    END IF
    LOCATE 15,68,0
    PRINT USTEPS
    LOCATE 15,30,0
    IF (FLAGS.bytefield AND 32) THEN
        PRINT "RELATIVE"
    ELSE
        PRINT "ABSOLUTE"
    END IF
    LOCATE 16,29,0
    PRINT URANGE.wordfield
    LOCATE 17,29,0
    PRINT UOFFSET.wordfield
    LOCATE 18,29,0
    PRINT SAFELO.wordfield
    LOCATE 19,29,0
    PRINT SAFEHI.wordfield
    LOCATE 20,29,0
    PRINT PULSE.wordfield
    LOCATE 21,29,0
    PRINT USPEED.wordfield
    LOCATE 22,29,0
    IF (128 AND FLAGS.bytefield) > 0 THEN
        PRINT (15 AND FLAGS.bytefield)+1
    ELSE
        PRINT "    "
    END IF
    LOCATE 23,29,0
    PRINT BAUDRATE
    LOCATE 24,29,0
    PRINT USTEPS
    RETURN

CLEARSTATS:
    LOCATE 13,69,0
    PRINT "      "
    LOCATE 14,68,0
    PRINT "      "
    LOCATE 14,30,0
    PRINT "        "
    LOCATE 15,68,0
    PRINT "      "
    LOCATE 15,30,0
    PRINT "        "
    LOCATE 16,29,0
    PRINT "        "
    LOCATE 17,29,0
    PRINT "        "
    LOCATE 18,29,0
    PRINT "        "
    LOCATE 19,29,0
    PRINT "        "
    LOCATE 20,29,0
    PRINT "        "
    LOCATE 21,29,0
    PRINT "        "
    LOCATE 22,29,0
    PRINT "        "
    LOCATE 23,29,0
    PRINT "        "
    LOCATE 24,29,0
    PRINT "        "
    RETURN

MP185INIT:
    COLOR 15,1,8
    CLS
    LCOUNTER = 1
    GOSUB INITCOM
    IF LOC(1)>0 THEN MP185$=INPUT$(LOC(1),#1)
    PRINT #1, "v";
    PRINT #1, RSPEED.twostring;
    PRINT #1, CHR$(13);
    DONEFLAG$ = INPUT$(1,#1)
    GOSUB REFRESHDISPLAY
    CLOSE #1
    LOCATE 3,60,0
    PRINT"**** Online ****";
    MYKEY$ = ""
    RETURN

REFRESHDISPLAY:
    LOCATE 1,1,0
    PRINT "                           "
    PRINT "                                                         ";CHR$(201);"----- Status -----";CHR$(187);
    PRINT "                                                         ";CHR$(186);"                  ";CHR$(186);
    PRINT "                                                         ";CHR$(200);"------------------";CHR$(188);
    PRINT " Current Absolute Location:"
    PRINT
    PRINT REM        X = _____.___ um
    PRINT REM        Y = _____.___ um
    PRINT REM        Z = _____.___ um
    PRINT
    PRINT
    PRINT "-----INTERNAL PROGRAM PARAMETERS-----   ";CHR$(201);"------Remote Control Parameters------";CHR$(187);
    PRINT "                                        ";CHR$(186);" Serial port status is:              ";CHR$(186);
    PRINT "  Manual operation mode is:             ";CHR$(186);" Remote æSteps per sec:              ";CHR$(186);
    PRINT "       VFD display mode is:             ";CHR$(186);" æSteps per full Step:               ";CHR$(186);
    PRINT " Constant mode speed range:             ";CHR$(204);"---------Program Control Keys--------";CHR$(185);
    PRINT "      Constant mode offset:             ";CHR$(186);" <Space> = disable   Q = stop program";CHR$(186);
    PRINT "Constant mode speed cutoff:             ";CHR$(186);" P = play input file S = update stats";CHR$(186);
    PRINT "     Min constant interval:             ";CHR$(186);" M = move to XYZ     A = save stats  ";CHR$(186);
    PRINT "No. 25 nm usteps per PULSE:             ";CHR$(186);" O = reset origin    G = save XYZ    ";CHR$(186);
    PRINT           "    ";PULSESTR$;"             ";CHR$(186);" V = change interval B = save intrval";CHR$(186);
    PRINT "     Stored program in use:             ";CHR$(186);" D = toggle display  N = renew disp. ";CHR$(186);
    PRINT "         Current Baud rate:             ";CHR$(186);" F = input file      W = output file ";CHR$(186);
    PRINT "      æSteps per full Step:             ";CHR$(200);"-------------------------------------";CHR$(188);
    LOCATE 24,43,0
    PRINT ROBOFILE$
    LOCATE 24,63,0
    PRINT SAVEFILE$
    GOSUB SHOWSTATSCOMMAND
RETURN

INITCOM:
    CLS
    PRINT"Default Baud rate is 9600"
    INPUT"Enter serial IO Baud rate: ",BAUDSTR$
    IF BAUDSTR$ = "" THEN
        BAUDRATE = 9600
    ELSE
    	BAUDRATE = VAL(BAUDSTR$)
    END IF
OPENCOM:
    IF     BAUDRATE=1200 THEN
        OPEN   "COM1:1200,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=2400 THEN
        OPEN   "COM1:2400,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=4800 THEN
        OPEN   "COM1:4800,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=9600 THEN
        OPEN   "COM1:9600,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=19200 THEN
        OPEN  "COM1:19200,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=38400 THEN
        OPEN  "COM1:38400,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSEIF BAUDRATE=115200 THEN
        OPEN "COM1:115200,N,8,1,CD0,CS0,DS0,RS" AS #1 LEN = 1024
    ELSE
        PRINT"Illegal Baud rate"
        GOTO INITCOM
    END IF
    RETURN

MP185END:
    CLOSE #1
    CLOSE #2
    CLS
END

