'===========================================================================
' Subject: ENCODE/DECODE MESSAGE              Date: 07-17-96 (19:37)       
'  Author: Darryl Schneider                   Code: QB, QBasic, PDS        
'  Origin: fish2@datanet.ab.ca              Packet: TEXT.ABC
'===========================================================================
'QCode - Version 1.0
'
'Messages can be encoded and decoded
'with QCode. A password is required to
'view a message, and is specified when
'writing a message. Make sure everything
'is in the C:\ directory and you will
'have no problem. Enjoy!
'
'Written by Darryl Schneider
'fish2@datanet.ab.ca
'The QBasic Zone
'http://www.geocities.com/SiliconValley/8191/
'
SCREEN 12                              'set screen mode to 12 and
DEFSTR A-B, D-M, R, U                  'give some standard variable
DEFINT N-Q, S-T, V-W                   'settings
DEFLNG X-Z

DIM CURSOR(1 TO 500)                    'draw the triangle cursor
LINE (50, 50)-(50, 66), 3
LINE (50, 50)-(66, 58), 3
LINE (50, 66)-(66, 58), 3
PAINT (55, 55), 6, 3
GET (50, 50)-(66, 66), CURSOR

ENTER = CHR$(13)                        'define all of the arrow keys
UP = CHR$(0) + CHR$(72)
DOWN = CHR$(0) + CHR$(80)
LEFT = CHR$(0) + CHR$(75)
RIGHT = CHR$(0) + CHR$(77)

MAINMENU:                               'just look at the label to
CLS                                     'find out what this section
LINE (160, 48)-(480, 230), 11, BF       'is about
LINE (160, 48)-(480, 63), 12, BF
LOCATE 4, 38: COLOR 14: PRINT "QCode"
COLOR 15
LOCATE 7, 35: PRINT "Write a message"
LOCATE 9, 35: PRINT "View a message"
LOCATE 11, 35: PRINT "About QCode"
LOCATE 13, 35: PRINT "Quit"

MM1:                                     'write a message
LINE (240, 70)-(270, 220), 11, BF
PUT (250, 95), CURSOR
DO
A1 = INKEY$
IF A1 = ENTER THEN GOSUB WRITEMESSAGE
IF A1 = UP THEN GOSUB MM4
IF A1 = DOWN THEN GOSUB MM2
LOOP

MM2:                                     'view a message
LINE (240, 70)-(270, 220), 11, BF
PUT (250, 126), CURSOR
DO
A2 = INKEY$
IF A2 = ENTER THEN GOSUB VIEWMESSAGE
IF A2 = UP THEN GOSUB MM1
IF A2 = DOWN THEN GOSUB MM3
LOOP

MM3:                                     'go to the about screen
LINE (240, 70)-(270, 220), 11, BF
PUT (250, 159), CURSOR
DO
A3 = INKEY$
IF A3 = ENTER THEN GOSUB ABOUT
IF A3 = UP THEN GOSUB MM2
IF A3 = DOWN THEN GOSUB MM4
LOOP

MM4:                                     'quit
LINE (240, 70)-(270, 220), 11, BF
PUT (250, 191), CURSOR
DO
A4 = INKEY$
IF A4 = ENTER THEN GOSUB QUIT
IF A4 = UP THEN GOSUB MM3
IF A4 = DOWN THEN GOSUB MM1
LOOP

WRITEMESSAGE:
CLS
MNAME = ""
MPASSWORD = ""
MESSAGE = ""
MESSAGE1 = ""
SSAVE = 0

OPEN "C:\UNTITLED.MSG" FOR OUTPUT AS #1
WRITE #1, MPASSWORD
WRITE #1, MESSAGE
CLOSE #1

OPEN "C:\UNTITLED.MSG" FOR OUTPUT AS #2
LINE (0, 0)-(640, 17), 12, BF
COLOR 14
LOCATE 1, 28: PRINT "QCode - Writing a Message"
COLOR 15
LOCATE 3, 10: INPUT "Message Name (max. 8 characters): ", MNAME
LOCATE 4, 10: INPUT "Message Password: ", MPASSWORD
MNAME = UCASE$(MNAME)
MPASSWORD = UCASE$(MPASSWORD)           'create a message name and
WRITE #2, MPASSWORD                     'password
LOCATE 6, 10: PRINT "Enter Message: "
N1 = 8
N2 = 1
NEXTLETTER1:
DO                                      'message is entered
B1 = UCASE$(INKEY$)
IF B1 = "A" THEN B2 = "^"               'these are all of the character
IF B1 = "B" THEN B2 = "Z"               'representations
IF B1 = "C" THEN B2 = "<"
IF B1 = "D" THEN B2 = ":"
IF B1 = "E" THEN B2 = "W"
IF B1 = "F" THEN B2 = "Y"
IF B1 = "G" THEN B2 = "~"
IF B1 = "H" THEN B2 = "#"
IF B1 = "I" THEN B2 = "N"
IF B1 = "J" THEN B2 = "F"
IF B1 = "K" THEN B2 = "I"
IF B1 = "L" THEN B2 = "."
IF B1 = "M" THEN B2 = "P"
IF B1 = "N" THEN B2 = "X"
IF B1 = "O" THEN B2 = "*"
IF B1 = "P" THEN B2 = "&"
IF B1 = "Q" THEN B2 = "V"
IF B1 = "R" THEN B2 = "H"
IF B1 = "S" THEN B2 = "C"
IF B1 = "T" THEN B2 = "-"
IF B1 = "U" THEN B2 = "%"
IF B1 = "V" THEN B2 = "L"
IF B1 = "W" THEN B2 = "E"
IF B1 = "X" THEN B2 = "A"
IF B1 = "Y" THEN B2 = "B"
IF B1 = "Z" THEN B2 = "?"
IF B1 = "1" THEN B2 = "9"
IF B1 = "2" THEN B2 = "6"
IF B1 = "3" THEN B2 = "4"
IF B1 = "4" THEN B2 = "3"
IF B1 = "5" THEN B2 = "1"
IF B1 = "6" THEN B2 = "7"
IF B1 = "7" THEN B2 = "8"
IF B1 = "8" THEN B2 = "2"
IF B1 = "9" THEN B2 = "5"
IF B1 = "." THEN B2 = "G"
IF B1 = "," THEN B2 = "$"
IF B1 = "!" THEN B2 = "("
IF B1 = "$" THEN B2 = ")"
IF B1 = "@" THEN B2 = "="
IF B1 = "-" THEN B2 = "+"
IF B1 = "*" THEN B2 = "\"
IF B1 = "?" THEN B2 = "/"
IF B1 = "0" THEN B2 = "S"
IF B1 = " " THEN B2 = " "
IF B1 = "'" THEN B2 = "K"
IF B1 = ENTER THEN GOSUB SAVEMESSAGE
LOOP UNTIL B1 <> ""
LOCATE N1, N2: PRINT B1
N2 = N2 + 1
IF N2 = 60 THEN
        N2 = 1
        N1 = N1 + 1
END IF
MESSAGE1 = MESSAGE1 + B1             'puts all of the letters into
MESSAGE = MESSAGE + B2               'one string
B1 = ""
GOSUB NEXTLETTER1

SAVEMESSAGE:
CLS
LINE (0, 0)-(640, 17), 12, BF
COLOR 14
LOCATE 1, 28: PRINT "QCode - Writing a Message"
COLOR 15
LOCATE 3, 10: PRINT MESSAGE1
LINE (100, 405)-(540, 440), 11, BF
LINE (100, 405)-(540, 440), 12, B
LOCATE 27, 18: PRINT "Save Message"
LOCATE 27, 36: PRINT "Print Message"
LOCATE 27, 55: PRINT "Main Menu"

WM1:                               'saves the message in .msg format
PUT (115, 415), CURSOR
DO
E1 = INKEY$
IF E1 = ENTER THEN
              WRITE #2, MESSAGE
              CLOSE #2
              FILENAME = "C:\" + MNAME + ".MSG"
              NAME "C:\UNTITLED.MSG" AS FILENAME
              CLOSE #2
              SSAVE = 1
              GOSUB WM1
END IF
IF E1 = LEFT THEN
         LINE (115, 415)-(131, 431), 11, BF
         GOSUB WM3
END IF
IF E1 = RIGHT THEN
         LINE (115, 415)-(131, 431), 11, BF
         GOSUB WM2
END IF
LOOP

WM2:                                'prints the message
PUT (260, 415), CURSOR
DO
E2 = INKEY$
IF E2 = ENTER THEN
         LPRINT "QCode Message"
         LPRINT ""
         IF SSAVE = 1 THEN LPRINT "File: "; FILENAME
         LPRINT ""
         LPRINT "Original Message:"
         LPRINT ""
         LPRINT "   "; MESSAGE1
         LPRINT ""
         LPRINT "Coded Message:"
         LPRINT ""
         LPRINT "   "; MESSAGE
         LPRINT ""
         LPRINT ""
         LPRINT "QCode was written by Darryl Schneider"
         LPRINT ""
         LPRINT ""
         LPRINT ""
         GOSUB WM2
END IF
IF E2 = LEFT THEN
         LINE (260, 415)-(276, 431), 11, BF
         GOSUB WM1
END IF
IF E2 = RIGHT THEN
         LINE (260, 415)-(276, 431), 11, BF
         GOSUB WM3
END IF
LOOP

WM3:                                     'return to main menu
PUT (412, 415), CURSOR
DO
E3 = INKEY$
IF E3 = ENTER THEN
         IF SSAVE = 0 THEN
                CLOSE #2
                KILL "C:\UNTITLED.MSG"
         END IF
         GOSUB MAINMENU
END IF
IF E3 = LEFT THEN
         LINE (412, 415)-(428, 431), 11, BF
         GOSUB WM2
END IF
IF E3 = RIGHT THEN
         LINE (412, 415)-(428, 431), 11, BF
         GOSUB WM1
END IF
LOOP

VIEWMESSAGE:
CLS
N3 = 8
N4 = 1
N5 = 8
N6 = 1
MNAME = ""
MPASSWORD = ""
MESSAGE = ""
MP1 = ""
MP2 = ""

LINE (0, 0)-(640, 17), 12, BF
COLOR 14
LOCATE 1, 28: PRINT "QCode - Viewing a Message"
COLOR 15
LOCATE 3, 10: INPUT "Message Name (max. 8 characters): ", DNAME
LOCATE 4, 10: INPUT "Message Password: ", DPASSWORD
DNAME = UCASE$(DNAME)
DPASSWORD = UCASE$(DPASSWORD)
JFILE = "C:\" + DNAME + ".MSG"
OPEN JFILE FOR INPUT AS #3              'opens a QCode file for
INPUT #3, MPASSWORD                     'viewing

VIEWME:
LOCATE 6, 10: PRINT "Message: "; JFILE
INPUT #3, MESSAGE
Y = LEN(MESSAGE)
S = 1
IF DPASSWORD = MPASSWORD THEN                'if password is correct,
        DO                                   'displays decoded message
        B3 = MID$(MESSAGE, S, 1)
        IF B3 = "^" THEN B4 = "A"            'these are all of the
        IF B3 = "Z" THEN B4 = "B"            'character representations
        IF B3 = "<" THEN B4 = "C"
        IF B3 = ":" THEN B4 = "D"
        IF B3 = "W" THEN B4 = "E"
        IF B3 = "Y" THEN B4 = "F"
        IF B3 = "~" THEN B4 = "G"
        IF B3 = "#" THEN B4 = "H"
        IF B3 = "N" THEN B4 = "I"
        IF B3 = "F" THEN B4 = "J"
        IF B3 = "I" THEN B4 = "K"
        IF B3 = "." THEN B4 = "L"
        IF B3 = "P" THEN B4 = "M"
        IF B3 = "X" THEN B4 = "N"
        IF B3 = "*" THEN B4 = "O"
        IF B3 = "&" THEN B4 = "P"
        IF B3 = "V" THEN B4 = "Q"
        IF B3 = "H" THEN B4 = "R"
        IF B3 = "C" THEN B4 = "S"
        IF B3 = "-" THEN B4 = "T"
        IF B3 = "%" THEN B4 = "U"
        IF B3 = "L" THEN B4 = "V"
        IF B3 = "E" THEN B4 = "W"
        IF B3 = "A" THEN B4 = "X"
        IF B3 = "B" THEN B4 = "Y"
        IF B3 = "?" THEN B4 = "Z"
        IF B3 = "9" THEN B4 = "1"
        IF B3 = "6" THEN B4 = "2"
        IF B3 = "4" THEN B4 = "3"
        IF B3 = "3" THEN B4 = "4"
        IF B3 = "1" THEN B4 = "5"
        IF B3 = "7" THEN B4 = "6"
        IF B3 = "8" THEN B4 = "7"
        IF B3 = "2" THEN B4 = "8"
        IF B3 = "5" THEN B4 = "9"
        IF B3 = "S" THEN B4 = "0"
        IF B3 = "G" THEN B4 = "."
        IF B3 = "$" THEN B4 = ","
        IF B3 = "(" THEN B4 = "!"
        IF B3 = ")" THEN B4 = "$"
        IF B3 = "=" THEN B4 = "@"
        IF B3 = "+" THEN B4 = "-"
        IF B3 = "\" THEN B4 = "*"
        IF B3 = "/" THEN B4 = "?"
        IF B3 = " " THEN B4 = " "
        IF B3 = "K" THEN B4 = "'"
        LOCATE N3, N4: PRINT B4
        MP1 = MP1 + B4
        N4 = N4 + 1
        S = S + 1
                IF N4 = 60 THEN
                        N4 = 1
                        N3 = N3 + 1
                END IF
        LOOP UNTIL S = Y + 1
END IF

IF NOT DPASSWORD = MPASSWORD THEN          'if password is incorrect,
        DO                                 'displays encoded message
        B5 = MID$(MESSAGE, S, 1)
        LOCATE N5, N6: PRINT B5
        MP2 = MP2 + B5
        N6 = N6 + 1
        S = S + 1
                IF N6 = 60 THEN
                        N6 = 1
                        N5 = N5 + 1
                END IF
        LOOP UNTIL S = Y + 1
END IF
       
CLOSE #3

LINE (170, 405)-(470, 440), 11, BF
LINE (170, 405)-(470, 440), 12, B
LOCATE 27, 28: PRINT "Print Message"
LOCATE 27, 48: PRINT "Main Menu"

VM1:                                     'prints the message
PUT (195, 415), CURSOR
DO
E4 = INKEY$
IF E4 = ENTER THEN
         LPRINT "QCode Message"
         LPRINT ""
         IF SSAVE = 1 THEN LPRINT "File: "; FILENAME
         LPRINT ""
         LPRINT "Original Message:"
         LPRINT ""
         IF MP1 <> "" THEN LPRINT "   "; MP1
         IF MP2 <> "" THEN LPRINT "    Sorry, you need the password!"
         LPRINT ""
         LPRINT "Coded Message:"
         LPRINT ""
         LPRINT "   "; MESSAGE
         LPRINT ""
         LPRINT ""
         LPRINT "QCode was written by Darryl Schneider"
         LPRINT ""
         LPRINT ""
         LPRINT ""
         GOSUB VM1
END IF
IF E4 = LEFT THEN
         LINE (195, 415)-(211, 431), 11, BF
         GOSUB VM2
END IF
IF E4 = RIGHT THEN
         LINE (195, 415)-(211, 431), 11, BF
         GOSUB VM2
END IF
LOOP

VM2:                                    'returns to main menu
PUT (355, 415), CURSOR
DO
E5 = INKEY$
IF E5 = ENTER THEN
         GOSUB MAINMENU
END IF
IF E5 = LEFT THEN
         LINE (355, 415)-(371, 431), 11, BF
         GOSUB VM1
END IF
IF E5 = RIGHT THEN
         LINE (355, 415)-(371, 431), 11, BF
         GOSUB VM1
END IF
LOOP

ABOUT:                                'the infamous about screen
CLS
LINE (0, 0)-(640, 17), 12, BF
COLOR 14
LOCATE 1, 35: PRINT "About QCode"
COLOR 15
PRINT ""
PRINT ""
PRINT "QCode was written in Microsoft QuickBasic by Darryl Schneider. The"
PRINT "program is a message encoder/decoder. To use the program, first write"
PRINT "a message. All message files are saved to the C:\ drive. The message"
PRINT "name that you choose can be a maximum of 8 characters. No file extension"
PRINT "or drive specification is required in the message name. The password"
PRINT "is the key to opening the message. You must know the password to that"
PRINT "particular message in order to decode it. Once you have finished writing"
PRINT "the message, you may view it by selecting the option at the main menu."
PRINT "Then just type in the message name and the password for that message,"
PRINT "and it will be decoded. I included a print option so you can print"
PRINT "out each of the messages. I hope you like the program. Enjoy!"
PRINT ""
PRINT "Darryl Schneider"
PRINT "fish2@datanet.ab.ca"
PRINT "The QBasic Zone"
PRINT "http://www.geocities.com/SiliconValley/8191/"

LINE (270, 405)-(370, 440), 11, BF          'draw the box at the
LINE (270, 405)-(370, 440), 12, B           'bottom of the screen
LOCATE 27, 38: PRINT "Main Menu"

PUT (275, 415), CURSOR
DO
G1 = INKEY$
IF G1 = ENTER THEN GOSUB MAINMENU           'return to the main menu
LOOP

QUIT:
END

'End of QCode
