Example #1
0
def get_wall():
    try:
        connection = httplib.HTTPSConnection('api.parse.com', 443, timeout=5)
        params = urllib.urlencode({"limit": real_limit, "order": "-createdAt"})
        connection.connect()
    except:
        gotwall = 0
        return ""

    connection.request('GET', '/1/classes/wall?%s' % params, '', {
        "X-Parse-Application-Id": idkey,
        "X-Parse-REST-API-Key": restkey
    })

    # Regex for Capitalizing First Letter in each One-liner.
    regex = re.compile("[A-Za-z]")  # find a alpha

    oneliner = ''
    alias = ''
    bbsname = ''
    tstamp = ''
    ostring = ''

    result = json.loads(connection.getresponse().read())
    for item in reversed(result['results']):

        oneliner = str(item['bbstagline'])
        alias = str(item['bbsuser'])
        bbsname = str(item['bbsname'])
        tstamp = str(item['createdAt'])

        # Update TimeStamp
        tstamp = parse_iso8601(tstamp)

        # Cap First Letter in Oneliner string, Look more pretty.
        s = regex.match(oneliner)  # find the first alpha
        if s:
            s = regex.search(oneliner).group()  # find the first alpha
            oneliner = oneliner.replace(s, s.upper(),
                                        1)  # replace only 1 instance

        ilen = len(tstamp[5:-9]) + 1 + len(alias) + 1 + len(bbsname) + 3 + len(
            oneliner)

        if ilen >= real_width:
            oneliner = oneliner[:-(ilen - real_width)]
        ostring = '|08' + tstamp[5:-9].replace(
            '-', '/'
        ) + ' |07<|12' + alias + '|08!|12' + bbsname + '|07> |15' + oneliner + '|CR'

        bbs_io.pyPipe2Ansi(ostring)
Example #2
0
def get_wall():
    try:
        connection = httplib.HTTPSConnection('api.parse.com', 443, timeout=5)
        params = urllib.urlencode({"limit": real_limit, "order": "-createdAt"})
        connection.connect()
    except:
        gotwall = 0
        return ""

    connection.request('GET', '/1/classes/wall?%s' % params, '', {
        "X-Parse-Application-Id": idkey,
        "X-Parse-REST-API-Key": restkey
    })

    # Regex for Capitalizing First Letter in each One-liner.
    regex = re.compile("[A-Za-z]")  # find a alpha

    oneliner = ''
    alias = ''
    bbsname = ''
    tstamp = ''
    ostring = ''

    result = json.loads(connection.getresponse().read())
    for item in reversed(result['results']):

        oneliner = str(item['bbstagline'])
        alias = str(item['bbsuser'])
        bbsname = str(item['bbsname'])
        tstamp = str(item['createdAt'])

        # Update TimeStamp
        tstamp = parse_iso8601(tstamp)

        # Cap First Letter in Oneliner string, Look more pretty.
        s = regex.match(oneliner) # find the first alpha
        if s:
            s = regex.search(oneliner).group() # find the first alpha
            oneliner = oneliner.replace(s, s.upper(), 1) # replace only 1 instance

        ilen = len(tstamp[5:-9])+1 + len(alias)+1 + len(bbsname)+3 + len(oneliner)

        if ilen >= real_width:
            oneliner = oneliner[:-(ilen-real_width)]
        ostring = '|08'+tstamp[5:-9].replace('-', '/') + ' |07<|12' + alias + '|08!|12' + bbsname + '|07> |15' + oneliner + '|CR'

        bbs_io.pyPipe2Ansi(ostring)
Example #3
0
    def shownext(p):
        r = 0
        for y in range(4):
            gotoxy(26, 18 + y)
            echo(" " * 4)

        bbs_io.pyPipe2Ansi("|%02d" % (layoutcolor[p]))

        yoffset = int(len(layout[p][r][0]) < 4)
        xoffset = int(len(layout[p][r]) < 3)
        for y in range(len(layout[p][r])):
            for x in range(len(layout[p][r][y])):
                val = layout[p][r][y][x]
                if val:
                    gotoxy(26 + x + xoffset, 18 + y + yoffset)
                    # echo(u'\u2588\u2588')
                    echo(chr(219) + chr(219))
Example #4
0
def main():

    while True:
        play()

        # Testing the pyGetKey Functions
        bbs_io.pyPipe2Ansi("|CS|CR|11Tetris was ported in python from x/84 for Enthral BBS.")
        bbs_io.pyPipe2Ansi("|CR|07Thanks to x/84 for open code, check out |15telnet://1984.ws")
        bbs_io.pyPipe2Ansi("|CR|03Highscores are in the works.")
        bbs_io.pyPipe2Ansi("|CR|CR|09pLay aGain? [y/n]")

        # ch = the int key code returned from key press.
        while True:
            ch = bbs_io.pyGetKey()
            ch = chr(int(ch))

            if ch in ("y", "Y"):
                break
            elif ch in ("n", "N"):
                return
Example #5
0
    bbs_io.pyAnsiPrintf(ansifile)
    get_wall()
    bbs_io.pyPipe2Ansi("|CR|07Post a line to the wall? |15(|12y|04/|12n|07)|08: ")


# Initial Startup
start_up()

# If Yes, then prompt for one liner message to send.
while True:
    # Wait for Input
    ch = bbs_io.pyGetKey()
    character = chr(int(ch))

    # Add a new One liner
    if character.upper() == 'Y':
        bbs_io.pyPipe2Ansi(character.upper())
        write_tag()
        start_up()

    # Exit Done
    elif character.upper() == 'N':
        bbs_io.pyPipe2Ansi(character.upper())
        bbs_io.pyPipe2Ansi("|CR|12Done. |15|DE")
        break

    # Else, Invalid Key, don't redisplay, just loop back.

# Garbage Collection to free memory
gc.collect()
Example #6
0
#garbage Collection (Needed to Clear Memory!)
import gc

bbs = 'hTc'
usrname = u'*****@*****.**'
pssword = u'******'

# Minus the header/Footer
real_limit = bbs_io.pyGetTermHeight() - 12

# Minus 1 col for last doesn't handle |CR Properly in populated with a character
real_width = bbs_io.pyGetTermWidth() - 1

url = 'http://bbs-scene.org/api/onelinerz.php?limit=%s' % str(real_limit)

bbs_io.pyPipe2Ansi("|CS|15 Loading Global BBS-Scene OneLiners|CR|CR")

req = requests.get(url, auth=(usrname, pssword))
if 200 != req.status_code:
    print 'error %s' % req.content
    print 'error %s' % req.status_code
    exit(1)

ansifile = "onelinerz"
bbs_io.pyAnsiPrintf(ansifile)

# can throw exceptions when xml is invalid, as a thread, nobody needs
# to catch it. theres some things that should be CDATA wrapped .. these
# break even viewing it in firefox, but upstream doesn't seem to
# notice, probably upstream does print('<xml_node>' + var +
# '</xml_node>'), i've found more than a few nasty escape flaws,
Example #7
0
def main_module():

    # Clear Screen, Default color 15 = White Text, Background = |18 Dark Green
    bbs_io.pyPipe2Ansi("|CS|15|18")

    # Put Raw Line of Text, No String Parsing
    bbs_io.pyPutLine("This is just a test!, test.py in the src/scripts folder! :) ")

    # Reset Text color to 15 = White, Background |16 = Black with 2 carriage returns
    bbs_io.pyPipe2Ansi("|15|16|CR|CR")

    # Run Pause Prompt
    bbs_io.pyStartPause()

    # Put String with MCI Codes |09 = Light Blue, with |IP Ip address, |DE = Wait 1 second...  CR = Carriage Return
    bbs_io.pyPipe2Ansi("|CR|09This is a Test with MCI Codes: |07{ |15IP ADDRESS |07} |13|IP, |DE|05Wait Over!  |CR|03Did you like the test?|CR")

    #Put String with MCI Codes
    bbs_io.pyPipe2Ansi("|CR|CR|09This is a simple get HotKey Test, hit any key! |CR");

    #Get Hotkey Input into ch, will Contain All Chars, Minus Escape Sequences.. If ch = 27, then ESC Sequence, Arrow Key, etc..

    # Testing the pyGetKey Functions
    bbs_io.pyPipe2Ansi('|15Hotkey Input: |11')

    # ch = the int key code returned from key press.
    ch = bbs_io.pyGetKey()
    
    # Write out the key that was pressed first. 
    # Convery from a String with Number, to Int Number, Then to Character Value.
    print chr(int(ch))

    # Test Key Input, and Extended Esc Sequences
    # if input Ch == 27, & Extended is not blank, Then Escape
    # Other Extended Sequence capture Arrow, Home Insert, F1 keys etc..
    # Then it could be arror keys, Home, Insert etc...  
   
    myStr = "|CR|03Char (Int): |11" + ch
    bbs_io.pyPipe2Ansi(myStr)

    # Check input character.
    if ch == '27':
    	if bbs_io.pyGetKeyExtended() <> "":
            # Means we got an Arror Key, Home, Insert Etc..
            myStr = "|CR|03GetKeyExtended (ESC Sequence): |11" + bbs_io.pyGetKeyExtended()
    	    bbs_io.pyPipe2Ansi(myStr)
	    
    	else:
            # Means we got just the ESC Key
    	    bbs_io.pyPipe2Ansi("|CR|03GetKeyExtended (ESC Sequence) Empty (ESC Hit!)")
    else:
        # Normal Key/Letter Input
        bbs_io.pyPipe2Ansi("|CR|03Normal Input")

    # Reset Text color to 15 = White, Background |16 = Black with 2 carriage returns
    bbs_io.pyPipe2Ansi("|15|16|CR|CR")

    # Set Length of Input to Return to 15 chars.
    bbs_io.pyPipe2Ansi("|15Get Line Input |08(|15Hit ENTER when done.|08) |07: ")

    len = 15
    getstr = bbs_io.pyGetLine(len);

    bbs_io.pyPipe2Ansi("|03|CR|CRPrinting Line Input: |07")
    print getstr


    # Test Fancy Input, input field,  |IN Limits the input field (overide), |FB sets forground and bg colors.
    text = "|CRInput Field Testing.. : "
    
    # Set default length of input field to 10
    len = 10

    # Append input field to text string
    text = bbs_io.pyInputField(text,len);

    # Write out input field
    bbs_io.pyPipe2Ansi(text)


    # Now getline after inputfield!! :)  Fancy.
    getstr = bbs_io.pyGetLine(len);

    bbs_io.pyPipe2Ansi("|03|CR|CRPrinting Inputfield Line Input: |07")
    print getstr


    bbs_io.pyPipe2Ansi("|15|CR|CRDisplaying an ansi file, hit any key to continue|CR|CR")
    bbs_io.pyStartPause()

    # Will printf out ansi.ans in ansi folder leave off extension .ans
    ansifile = "file"
    bbs_io.pyAnsiPrintf(ansifile)

    # Run Pause Prompt
    bbs_io.pyStartPause()

    # Clear Screen,  Move down two lones, then go back to Home |xy coords . Top left of screen!
    bbs_io.pyPipe2Ansi("|CS|CR|CR|XY0101|13Testing XY top left coner of screen")

    # Print Done.
    bbs_io.pyPipe2Ansi("|CR|05done.")

    # Run Pause Prompt
    bbs_io.pyStartPause()
Example #8
0
def write_tag():
    bbs_io.pyPipe2Ansi("|CR")

    # Get currnet UserName from BBS
    username = bbs_io.pyPipe2String("|UH")

    bbsline = '|08  NOW |07<|12' + username + '|04!|12' + bbs + '|07> '

    # Set default length of input field to 10
    strlen = 0
    strlen = len(bbsline) - 22
    strlen = 75 - strlen

    # Append input field to text string
    text = bbs_io.pyInputField(bbsline, strlen)

    # Write out input field
    bbs_io.pyPipe2Ansi(text)

    # Now getline after inputfield!! :)  Fancy.
    getstr = bbs_io.pyGetLine(strlen)

    bbs_io.pyPipe2Ansi("|CR")

    strlen = 0
    strlen = len(getstr.strip())

    if strlen > 0:
        try:
            connection = httplib.HTTPSConnection('api.parse.com',
                                                 443,
                                                 timeout=5)
            connection.connect()
        except:
            return ""

        connection.request(
            'POST', '/1/classes/wall',
            json.dumps({
                "bbsname": bbs,
                "bbsfakeuser": False,
                "bbsuser": username.strip(),
                "bbstagline": getstr.strip()
            }), {
                "X-Parse-Application-Id": idkey,
                "X-Parse-REST-API-Key": restkey,
                "Content-Type": "application/json"
            })
        result = json.loads(connection.getresponse().read())
        results_length = len(result)
        if results_length == 0:
            bbs_io.pyPipe2Ansi(
                "|CR|04Message Error, Unable to Connect! |CR|CR|PA")
        else:
            bbs_io.pyPipe2Ansi("|CR|15Message Posted Successfully.|CR|CR|PA")
    else:
        bbs_io.pyPipe2Ansi("|CR|12aborted. |CR|CR|PA")
Example #9
0
                        del field[line]
                        field.insert(0, [0] * field_width)

                    if lines >= level * 10:
                        level += 1
                        ticksize = 0.4 - level * 0.02
                    drawstats()

                    # Redraw complete field
                    rr.merge(0, 0, field_width, field_height)

                # Time for a new piece
                p = nextpiece
                nextpiece = randint(0, len(layout) - 1)
                r = 0
                xpos = 4
                ypos = -len(layout[p][0])
                showpiece(xpos, ypos, p, r)
                shownext(nextpiece)


# Start Main Loop
main()

# Turn cursor back on & reset FG/BG colors.
bbs_io.pyPipe2Ansi("\x1b[?25h")
bbs_io.pyPipe2Ansi("|07|16")

# Garbage Collection to free memory
gc.collect()
Example #10
0
def write_tag():
    bbs_io.pyPipe2Ansi("|CR")

    # Get currnet UserName from BBS
    username = bbs_io.pyPipe2String("|UH")

    bbsline = '|08  NOW |07<|12' + username + '|04!|12' + bbs + '|07> '

    # Set default length of input field to 10
    strlen = 0
    strlen = len(bbsline) - 22
    strlen = 75 - strlen

    # Append input field to text string
    text = bbs_io.pyInputField(bbsline, strlen)

    # Write out input field
    bbs_io.pyPipe2Ansi(text)

    # Now getline after inputfield!! :)  Fancy.
    getstr = bbs_io.pyGetLine(strlen)

    bbs_io.pyPipe2Ansi("|CR")

    strlen = 0
    strlen = len(getstr.strip())

    if strlen > 0:
        try:
            connection = httplib.HTTPSConnection('api.parse.com', 443, timeout=5)
            connection.connect()
        except:
            return ""

        connection.request('POST', '/1/classes/wall', json.dumps({
            "bbsname": bbs,
            "bbsfakeuser": False,
            "bbsuser": username.strip(),
            "bbstagline": getstr.strip()
        }), {
            "X-Parse-Application-Id": idkey,
            "X-Parse-REST-API-Key": restkey,
            "Content-Type": "application/json"
        })
        result = json.loads(connection.getresponse().read())
        results_length = len(result)
        if results_length == 0:
            bbs_io.pyPipe2Ansi("|CR|04Message Error, Unable to Connect! |CR|CR|PA")
        else:
            bbs_io.pyPipe2Ansi("|CR|15Message Posted Successfully.|CR|CR|PA")
    else:
        bbs_io.pyPipe2Ansi("|CR|12aborted. |CR|CR|PA")
Example #11
0
def bootup_sequence():
    
    # Startup Message
    bbs_io.pyPipe2Ansi("|CS|07|16Starting Bootup Sequence... |DE|DE|CS")

    ansifile = "osload"
    bbs_io.pyAnsiPrintf(ansifile)

    bbs_io.pyPipe2Ansi("|CR|CR                             |15Enthral OS |07v|151.0 |07Alpha")
    bbs_io.pyPipe2Ansi("|CR|CR                           '-[                   ]-'")

    bootup_done = False

    # Loop Bootup Bar
    barLen = 20
    percent = 0
    progress = ""
    color = 3

    # Setup Bootup Percentage Bar (ESC) Will abort.
    for i in range(barLen): 

        # Listen for ESC Key, if Hit Abort Mem Test       
        while stdin in select([stdin], [], [], 0)[0]:
            ch = bbs_io.pyGetKey()
            if ch == '27':
                escsequence = bbs_io.pyGetKeyExtended()                
                if not escsequence: # we jsut just ESC no arror keys
                    # We got Escape, exit loop.
                    bootup_done = True                

                    # Display full pencentage bar
                    # Repeat string to max length after abort
                    output = format("\r\x1b[31G|%02d" % (color))
                    bbs_io.pyPipe2Ansi(output)

                    color = 11
                    progress = chr(177)
                    bbs_io.pyPipe2Ansi(repstr(progress,19))
            
                    break

        else:

            # Test if loop is done.
            if bootup_done is True:
                break


            if i < int(barLen * percent):
                progress += chr(177)

            # Format Output with color Pipe Codes.            
            output = format("\r\x1b[31G|%02d" % (color))
            bbs_io.pyPipe2Ansi(output)

            # Slide Fade the update on progress bar.
            for o in range(len(progress)):
                bbs_io.pyPipe2Ansi(progress[o])
                sleep(0.02)

            # Delay between drawing redrawing bar
            sleep(0.15)

            percent += 1

            # Alternate high/low colors.
            if color == 3:
                color = 11
            else:
                color = 3

    bbs_io.pyPipe2Ansi("|CR|CR                                   |07OS Loaded|08.")
    bbs_io.pyPipe2Ansi("|DE|DE")
    bbs_io.pyPipe2Ansi("|CS|07")
Example #12
0
def main_module():

    # Clear Screen, Default color 15 = White Text, Background = |18 Dark Green
    bbs_io.pyPipe2Ansi("|CS|15|18")

    # Put Raw Line of Text, No String Parsing
    bbs_io.pyPutLine(
        "This is just a test!, test.py in the src/scripts folder! :) ")

    # Reset Text color to 15 = White, Background |16 = Black with 2 carriage returns
    bbs_io.pyPipe2Ansi("|15|16|CR|CR")

    # Run Pause Prompt
    bbs_io.pyStartPause()

    # Put String with MCI Codes |09 = Light Blue, with |IP Ip address, |DE = Wait 1 second...  CR = Carriage Return
    bbs_io.pyPipe2Ansi(
        "|CR|09This is a Test with MCI Codes: |07{ |15IP ADDRESS |07} |13|IP, |DE|05Wait Over!  |CR|03Did you like the test?|CR"
    )

    #Put String with MCI Codes
    bbs_io.pyPipe2Ansi(
        "|CR|CR|09This is a simple get HotKey Test, hit any key! |CR")

    #Get Hotkey Input into ch, will Contain All Chars, Minus Escape Sequences.. If ch = 27, then ESC Sequence, Arrow Key, etc..

    # Testing the pyGetKey Functions
    bbs_io.pyPipe2Ansi('|15Hotkey Input: |11')

    # ch = the int key code returned from key press.
    ch = bbs_io.pyGetKey()

    # Write out the key that was pressed first.
    # Convery from a String with Number, to Int Number, Then to Character Value.
    print chr(int(ch))

    # Test Key Input, and Extended Esc Sequences
    # if input Ch == 27, & Extended is not blank, Then Escape
    # Other Extended Sequence capture Arrow, Home Insert, F1 keys etc..
    # Then it could be arror keys, Home, Insert etc...

    myStr = "|CR|03Char (Int): |11" + ch
    bbs_io.pyPipe2Ansi(myStr)

    # Check input character.
    if ch == '27':
        if bbs_io.pyGetKeyExtended() <> "":
            # Means we got an Arror Key, Home, Insert Etc..
            myStr = "|CR|03GetKeyExtended (ESC Sequence): |11" + bbs_io.pyGetKeyExtended(
            )
            bbs_io.pyPipe2Ansi(myStr)

        else:
            # Means we got just the ESC Key
            bbs_io.pyPipe2Ansi(
                "|CR|03GetKeyExtended (ESC Sequence) Empty (ESC Hit!)")
    else:
        # Normal Key/Letter Input
        bbs_io.pyPipe2Ansi("|CR|03Normal Input")

    # Reset Text color to 15 = White, Background |16 = Black with 2 carriage returns
    bbs_io.pyPipe2Ansi("|15|16|CR|CR")

    # Set Length of Input to Return to 15 chars.
    bbs_io.pyPipe2Ansi(
        "|15Get Line Input |08(|15Hit ENTER when done.|08) |07: ")

    len = 15
    getstr = bbs_io.pyGetLine(len)

    bbs_io.pyPipe2Ansi("|03|CR|CRPrinting Line Input: |07")
    print getstr

    # Test Fancy Input, input field,  |IN Limits the input field (overide), |FB sets forground and bg colors.
    text = "|CRInput Field Testing.. : "

    # Set default length of input field to 10
    len = 10

    # Append input field to text string
    text = bbs_io.pyInputField(text, len)

    # Write out input field
    bbs_io.pyPipe2Ansi(text)

    # Now getline after inputfield!! :)  Fancy.
    getstr = bbs_io.pyGetLine(len)

    bbs_io.pyPipe2Ansi("|03|CR|CRPrinting Inputfield Line Input: |07")
    print getstr

    bbs_io.pyPipe2Ansi(
        "|15|CR|CRDisplaying an ansi file, hit any key to continue|CR|CR")
    bbs_io.pyStartPause()

    # Will printf out ansi.ans in ansi folder leave off extension .ans
    ansifile = "file"
    bbs_io.pyAnsiPrintf(ansifile)

    # Run Pause Prompt
    bbs_io.pyStartPause()

    # Clear Screen,  Move down two lones, then go back to Home |xy coords . Top left of screen!
    bbs_io.pyPipe2Ansi(
        "|CS|CR|CR|XY0101|13Testing XY top left coner of screen")

    # Print Done.
    bbs_io.pyPipe2Ansi("|CR|05done.")

    # Run Pause Prompt
    bbs_io.pyStartPause()
Example #13
0
 def drawstats():
     bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 1, level))
     bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 3, lines))
     bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 4, score))
Example #14
0
 def flush():
     global charcache
     bbs_io.pyPipe2Ansi(charcache)
     charcache = ""
Example #15
0
def play():
    import time
    from random import randint
    import os

    field = []
    global charcache
    charcache = ""
    field_width = 10
    field_height = 20
    # Access scheme looks like this:
    #   layout[p][r][ypox][xpos]
    # layoutcolor = [ 7,2,3,4,4,6,7 ]
    layout = [
        #  ##
        #  ##
        [[[1, 1], [1, 1]]],
        #  #
        #  #
        #  #
        #  #
        [
            [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]],
            [[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]],
        ],
        #  ###
        #   #
        [
            [[0, 0, 0], [1, 1, 1], [0, 1, 0]],
            [[0, 1, 0], [0, 1, 1], [0, 1, 0]],
            [[0, 1, 0], [1, 1, 1], [0, 0, 0]],
            [[0, 1, 0], [1, 1, 0], [0, 1, 0]],
        ],
        #  #
        #  #
        #  ##
        [
            [[0, 1, 0], [0, 1, 0], [0, 1, 1]],
            [[0, 0, 1], [1, 1, 1], [0, 0, 0]],
            [[1, 1, 0], [0, 1, 0], [0, 1, 0]],
            [[0, 0, 0], [1, 1, 1], [1, 0, 0]],
        ],
        #   #
        #   #
        #  ##
        [
            [[0, 1, 0], [0, 1, 0], [1, 1, 0]],
            [[0, 0, 0], [1, 1, 1], [0, 0, 1]],
            [[0, 1, 1], [0, 1, 0], [0, 1, 0]],
            [[1, 0, 0], [1, 1, 1], [0, 0, 0]],
        ],
        #  ##
        #   ##
        [[[0, 1, 0], [1, 1, 0], [1, 0, 0]], [[0, 0, 0], [1, 1, 0], [0, 1, 1]]],
        #   ##
        #  ##
        [[[0, 1, 0], [0, 1, 1], [0, 0, 1]], [[0, 0, 0], [0, 1, 1], [1, 1, 0]]],
    ]

    fieldx1 = 32
    fieldy1 = 10
    scorex1 = 11
    scorey1 = 11

    class RectRedraw:
        x1 = None
        y1 = None
        x2 = None
        y2 = None

        def max(r, val, valmax):
            if val > valmax:
                return valmax
            return val

        def min(r, val, valmin):
            if val < valmin:
                return valmin
            return val

        def merge(r, x1, y1, x2, y2):
            if r.x1 is None or r.x1 > x1:
                r.x1 = r.min(x1, 0)
            if r.y1 is None or r.y1 > y1:
                r.y1 = r.min(y1, 0)
            if r.x2 is None or r.x2 < x2:
                r.x2 = r.max(x2, field_width)
            if r.y2 is None or r.y2 < y2:
                r.y2 = r.max(y2, field_height)
            # print r.x1,r.y1,r.x2,r.y2

        def clean(r):
            r.x1 = None
            r.y1 = None
            r.x2 = None
            r.y2 = None

    rr = RectRedraw()
    for _ in range(field_height):
        field.append([0] * field_width)

    def echo(s):
        global charcache
        charcache += s

    # Turn off the Cursor
    bbs_io.pyPipe2Ansi("\x1b[?25l")

    # Display Welcome Message
    bbs_io.pyPipe2Ansi("|CS|CR|CR|09REAdY YOUR tERMiNAl! |CR|CR|03PRESS ANY kEY")

    # get key from user, wait for input.
    bbs_io.pyGetKey()

    # Clear the Screen First
    bbs_io.pyPipe2Ansi("|CS")

    # Display ANSI screen .ans extension is assumed.
    bbs_io.pyAnsiPrintf("tetris")

    def gotoxy(x, y):
        echo("|XY%02d%02d" % (x + 1, y + 1))

    def plotblock(color, lastcolor):
        if color:
            # c = u'\u2588\u2588'  # '\xDB\xDB'
            c = chr(219) + chr(219)
        else:  # both empty
            c = "  "
            color = 0
        # Output optimization
        if color % 8 == 0:
            color = color / 8
        if color == lastcolor:
            echo(c)
        else:
            if color:
                fg = str(30 + color % 8)
            else:
                fg = "37"
            if color >= 8:
                bg = ";%d" % (40 + color / 8)
            else:
                bg = ""
            echo("\x1b[0;" + fg + bg + "m")
            echo(c)
            lastcolor = color
        return lastcolor

    def drawfield():
        lastcolor = ""
        for y in range(0, field_height, 2):
            gotoxy(fieldx1 + 2, fieldy1 + 1 + y / 2)
            # Which block to show, full, half-up, half-down or empty.
            for x in range(field_width):
                color = field[y][x] + field[y + 1][x] * 8
                if field[y][x] and field[y + 1][x]:
                    # c = u'\u2588'  # '\xDB'
                    c = chr(219)
                    if field[y][x] == field[y + 1][x]:
                        color = color % 8
                    else:
                        # c = u'\u2580'  # '\xDF'
                        c = chr(223)
                elif field[y][x] and not field[y + 1][x]:
                    # c = u'\u2580'  # '\xDF'
                    c = chr(223)
                elif not field[y][x] and field[y + 1][x]:
                    # c = u'\u2584'  # '\xDC'
                    c = chr(220)
                else:  # both empty
                    c = " "
                # Output optimization
                if color % 8 == 0:
                    color = color / 8
                if color == lastcolor:
                    echo(c)
                else:
                    if color:
                        fg = str(30 + color % 8)
                    else:
                        fg = "37"
                    if color >= 8:
                        bg = ";%d" % (40 + color / 8)
                    else:
                        bg = ""
                    echo("\x1b[0;" + fg + bg + "m")
                    echo(c)
                    lastcolor = color
        # echo(term.normal)
        echo("|07|16")  # reset background color

    layoutcolor = [7, 2, 7, 6, 3, 6, 3]
    # p    = -1  # Current piece type
    nextpiece = randint(0, len(layout) - 1)
    p = randint(0, len(layout) - 1)
    p = 1
    r = 0  # Current rotation
    xpos = 4  # X position
    # ypos = -2  # Y position
    ypos = -len(layout[p][0])
    level = 1
    score = 0
    lines = 0

    def flush():
        global charcache
        bbs_io.pyPipe2Ansi(charcache)
        charcache = ""

    def fillpiece(x, y, p, r, value):
        row = 0
        for line in layout[p][r]:
            col = 0
            for c in line:
                if c and (y + row) >= 0:
                    field[y + row][x + col] = value
                col += 1
            row += 1

    def showpiece(x, y, p, r):
        fillpiece(x, y, p, r, layoutcolor[p])

    def hidepiece():
        fillpiece(xpos, ypos, p, r, 0)

    def testpiece(x, y, newr):
        hidepiece()
        # Space at the new location?
        row = 0
        for line in layout[p][newr]:
            col = 0
            for c in line:
                try:
                    if c:
                        if (y + row) >= 0 and field[y + row][x + col] or (x + col) < 0 or (x + col) > 9:
                            return 0
                except IndexError:
                    return 0
                col += 1
            row += 1
        # Movement possible
        return 1

    def movepiece(x, y, newr):
        if testpiece(x, y, newr):
            # Build redraw rectangle
            rr.merge(xpos, ypos, xpos + len(layout[p][0][0]), ypos + len(layout[p][0]))
            rr.merge(x, y, x + len(layout[p][0][0]), y + len(layout[p][0]))
            showpiece(x, y, p, newr)
            return (x, y, newr, 1)
        else:
            showpiece(xpos, ypos, p, r)
            return (xpos, ypos, r, 0)

    def shownext(p):
        r = 0
        for y in range(4):
            gotoxy(26, 18 + y)
            echo(" " * 4)

        bbs_io.pyPipe2Ansi("|%02d" % (layoutcolor[p]))

        yoffset = int(len(layout[p][r][0]) < 4)
        xoffset = int(len(layout[p][r]) < 3)
        for y in range(len(layout[p][r])):
            for x in range(len(layout[p][r][y])):
                val = layout[p][r][y][x]
                if val:
                    gotoxy(26 + x + xoffset, 18 + y + yoffset)
                    # echo(u'\u2588\u2588')
                    echo(chr(219) + chr(219))

    def drawstats():
        bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 1, level))
        bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 3, lines))
        bbs_io.pyPipe2Ansi("|XY%02d%02d%d" % (scorex1, scorey1 + 4, score))

    drawstats()
    ticksize = 0.4
    nexttick = time.time() + ticksize
    showpiece(xpos, ypos, p, r)
    gotoxy(26, 17)
    # echo(term.blue_reverse('next'))
    echo("|09|17n|00|17ext|07|16")
    shownext(nextpiece)

    # Full redraw first frame
    rr.merge(0, 0, field_width, field_height)

    buf = ""
    key = ""
    while True:
        drawfield()
        slice = nexttick - time.time()
        if slice < 0:
            slice = 0
        echo(buf)
        buf = ""
        flush()

        # Get User Key presses for block movement {Non-Blocking)
        if stdin in select([stdin], [], [], slice + 0.01)[0]:
            key = bbs_io.pyGetKey()
            if key != "":
                # if we got an escape sequence, then reassign the key
                if key == "27":
                    # Get Extended ESC Sequence
                    key = bbs_io.pyGetKeyExtended()
                else:
                    # Translate int to char value.
                    key = chr(int(key))
        else:
            key = ""

        now = time.time()
        # hidepiece()
        if key is not None:
            if key in ("q", "Q"):
                return (0, 0, 0)
            elif key in ("[D", "h"):
                xpos, ypos, r, m = movepiece(xpos - 1, ypos, r)
            elif key in ("[C", "l"):
                xpos, ypos, r, m = movepiece(xpos + 1, ypos, r)
            elif key in ("[A", "k"):
                xpos, ypos, r, m = movepiece(xpos, ypos, (r + 1) % len(layout[p]))
            elif key in ("[B", "j"):
                xpos, ypos, r, m = movepiece(xpos, ypos + 1, r)
            elif key in (" ",):
                m = True
                c = 0
                while m:
                    xpos, ypos, r, m = movepiece(xpos, ypos + 1, r)
                    if m:
                        c += 1
                if c:
                    nexttick = time.time() + ticksize

        # New tick?
        if now > nexttick:
            nexttick += ticksize
            # Move down piece
            xpos, ypos, r, moved = movepiece(xpos, ypos + 1, r)
            # Piece has touched down?
            if not moved:
                # Is the player dead?
                if ypos <= -len(layout[p][0]):

                    # End of Game Message
                    bbs_io.pyPipe2Ansi("|XY3324|12!! |04gAME OVeR |12!!|07")
                    bbs_io.pyGetKey()

                    #                    death_win = AnsiWindow(height=6, width=40,
                    #                                           yloc=fieldy1 + 10 / 2, xloc=fieldx1 - 11)
                    #                    death_win.colors['border'] = term.bold_black
                    #                    echo_unbuffered(death_win.clear() + death_win.border())
                    #                    echo_unbuffered(
                    #                        term.move(fieldy1 + 10 / 2 + 1, fieldx1 - 11))
                    #                    echo_unbuffered((
                    #                                    u'!! gAME OVeR!! Score was: %i' % (score,)).center(40))
                    #                    echo_unbuffered(
                    #                        term.move(fieldy1 + 10 / 2 + 3, fieldx1 - 11))
                    #                    echo_unbuffered(u'press RETURN'.center(40))
                    #                    while True:
                    #                        inp = getch()
                    #                        if inp in (u'\r', term.KEY_ENTER):
                    #                            break
                    return (score, level, lines)

                # Any complete rows to remove?
                complete = []
                for y in range(field_height):
                    x = 0
                    while x < field_width:
                        if field[y][x] == 0:
                            break
                        x += 1
                    if x == field_width:
                        complete.append(y)
                if len(complete) > 0:
                    # Add score
                    lines += len(complete)
                    score += len(complete) * len(complete) * 100
                    # Shrink field
                    for line in complete:
                        del field[line]
                        field.insert(0, [0] * field_width)

                    if lines >= level * 10:
                        level += 1
                        ticksize = 0.4 - level * 0.02
                    drawstats()

                    # Redraw complete field
                    rr.merge(0, 0, field_width, field_height)

                # Time for a new piece
                p = nextpiece
                nextpiece = randint(0, len(layout) - 1)
                r = 0
                xpos = 4
                ypos = -len(layout[p][0])
                showpiece(xpos, ypos, p, r)
                shownext(nextpiece)
Example #16
0
def start_up():
    # Main Startup
    bbs_io.pyAnsiPrintf(ansifile)
    get_wall()
    bbs_io.pyPipe2Ansi("|CR|07Post a line to the wall? |15(|12y|04/|12n|07)|08: ")
Example #17
0
    get_wall()
    bbs_io.pyPipe2Ansi(
        "|CR|07Post a line to the wall? |15(|12y|04/|12n|07)|08: ")


# Initial Startup
start_up()

# If Yes, then prompt for one liner message to send.
while True:
    # Wait for Input
    ch = bbs_io.pyGetKey()
    character = chr(int(ch))

    # Add a new One liner
    if character.upper() == 'Y':
        bbs_io.pyPipe2Ansi(character.upper())
        write_tag()
        start_up()

    # Exit Done
    elif character.upper() == 'N':
        bbs_io.pyPipe2Ansi(character.upper())
        bbs_io.pyPipe2Ansi("|CR|12Done. |15|DE")
        break

    # Else, Invalid Key, don't redisplay, just loop back.

# Garbage Collection to free memory
gc.collect()
Example #18
0
def start_up():
    # Main Startup
    bbs_io.pyAnsiPrintf(ansifile)
    get_wall()
    bbs_io.pyPipe2Ansi(
        "|CR|07Post a line to the wall? |15(|12y|04/|12n|07)|08: ")
Example #19
0
#garbage Collection (Needed to Clear Memory!)
import gc

bbs = 'hTc'
usrname = u'*****@*****.**'
pssword = u'******'

# Minus the header/Footer
real_limit = bbs_io.pyGetTermHeight() - 12

# Minus 1 col for last doesn't handle |CR Properly in populated with a character
real_width = bbs_io.pyGetTermWidth() - 1

url = 'http://bbs-scene.org/api/onelinerz.php?limit=%s' % str(real_limit)

bbs_io.pyPipe2Ansi("|CS|15 Loading Global BBS-Scene OneLiners|CR|CR")

req = requests.get(url, auth=(usrname, pssword))
if 200 != req.status_code:
    print 'error %s' % req.content
    print 'error %s' % req.status_code
    exit(1)

ansifile = "onelinerz"
bbs_io.pyAnsiPrintf(ansifile)

# can throw exceptions when xml is invalid, as a thread, nobody needs
# to catch it. theres some things that should be CDATA wrapped .. these
# break even viewing it in firefox, but upstream doesn't seem to
# notice, probably upstream does print('<xml_node>' + var +
# '</xml_node>'), i've found more than a few nasty escape flaws,
Example #20
0
def main_module():

    # Clear Screen, Default color 07 = Grey Text, Background = |16 Black
    bbs_io.pyPipe2Ansi("|CS|07|16Wake on Lan Detected... |DE|DE|CS")

    # Write out BIOS Info Line
    bbs_io.pyPipe2Ansi("|15Enthral |07Python BIOS v1.0, An |15BBS-Scene |07Alley (|15irc.bbs-scene.org #|07enthral, |15#|07bbs|07)|CR")
    bbs_io.pyPipe2Ansi("Copyright (c) 2004-2014, Michael Griffin                  (|15irc.bbses.info |15#|07bbs|07)|CR|CR")

    #Detect and write out Basic CPU Info
    command = "cat /proc/cpuinfo"
    all_info = check_output(command, shell=True).strip()
    for line in all_info.split("\n"):
        if "model name" in line:
            bbs_io.pyPipe2Ansi(sub(".*model name.*:", "", line,1).strip()+"|CR")
            break

    # Clear Data
    del all_info

    #Detect Memory size in KB
    command = "cat /proc/meminfo"
    all_info = check_output(command, shell=True).strip()
    for line in all_info.split("\n"):
        if "MemTotal" in line:
            mem_string = sub(".*MemTotal.*:", "", line,1).strip()
            mem_size = sub(r"kB", "", mem_string,1).strip()   
            break

    # Clear Data
    del all_info

    # Convert String to Number for Loop.
    iMem_size = int(mem_size)

    # Memory test.
    bbs_io.pyPipe2Ansi("Memory Test : \x1b[30G|15ESC |07to Abort Memory Test|07")

    # Break from look when done.
    memtest_done = False

    try:
        # Loop Memory Test Counter
        for i in range(iMem_size): 

            # Listen for ESC Key, if Hit Abort Mem Test       
            while stdin in select([stdin], [], [], 0)[0]:
                ch = bbs_io.pyGetKey();
                if ch == '27':
                    escsequence = bbs_io.pyGetKeyExtended()                
                    if not escsequence:# we jsut just ESC no arror keys
                        # We got Escape, exit loop.
                        memtest_done = True
                        break               
            else:                            
                # Test if loop is done.
                if memtest_done is True:
                    break

                # Write out counter
                if 0 == i % 1024:
                    stdout.write("\r\x1b[15G%dK" %i)
                    stdout.flush()

    except:
        sys.exit(1)        

    # Write out final counter
    stdout.write("\r\x1b[15G%dK OK" % iMem_size)
    stdout.flush()

    # Write Generic Information, can't detect this. 
    bbs_io.pyPipe2Ansi("|CR|07Memory Information: |15DDR 400 mhz CL 2, T2 Dual Channel, 128 bit|CR")

    # Write Generic Init Output With a Delay at the End.
    bbs_io.pyPipe2Ansi("|CR|07Enthral Plug and Play Extensions v1.0A")
    bbs_io.pyPipe2Ansi("|CRInitialize Python Extensions...")
    bbs_io.pyPipe2Ansi("|CRPython Init Completed|DE|DE")

    # Detect Hard Drives (dmesg) - Wmvare  
    #[    1.869546] scsi 1:0:0:0: CD-ROM            NECVMWar VMware IDE CDR10 1.00 PQ: 0 ANSI: 5
    #[    2.652638] scsi 2:0:0:0: Direct-Access     VMware,  VMware Virtual S 1.0  PQ: 0 ANSI: 2

    bbs_io.pyPipe2Ansi("|CR|CRDetecting Hard Disks...|CR|DE")

    # Detect Hard Disks and PNP devices from dmesg 
    # Currently setup for Arch Linux
    command = "dmesg"
    all_info = check_output(command, shell=True).strip()
    for line in all_info.split("\n"):
        # Get Fist Scsi Drive
        if "scsi 0:0:0:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Primary  : |07");
            tmp = sub(".*scsi 0:0:0:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")

        # Get Second Scsi Drive
        elif "scsi 0:0:1:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Secondary: |07");
            tmp = sub(".*scsi 0:0:1:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")
        
        elif "scsi 2:0:0:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Primary  : |07");
            tmp = sub(".*scsi 2:0:0:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")

        # Get Second Scsi Drive
        elif "scsi 3:0:0:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Secondary: |07");
            tmp = sub(".*scsi 3:0:0:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")
                        
        # Get Second Scsi Drive
        elif "scsi 4:0:0:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Primary  : |07");
            tmp = sub(".*scsi 4:0:0:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")
            
        # Get Second Scsi Drive
        elif "scsi 4:0:1:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Secondary: |07");
            tmp = sub(".*scsi 4:0:1:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")
            
        # Get Second Scsi Drive
        elif "scsi 5:0:0:0:" in line:
            bbs_io.pyPipe2Ansi("|15SCSI Secondary: |07");
            tmp = sub(".*scsi 5:0:0:0:*:", "", line,1).strip()
            value = tmp.split("PQ:")
            bbs_io.pyPipe2Ansi(value[0] + "|CR")
            

        # Get Plug and Play (Mouse)
        elif "i8042: PNP:" in line:
            pnp = sub(".*i8042: PNP:*:", "", line,1).strip()    

        # Get Input Keyboard
        elif "serio: i8042 KBD" in line:
            value = line.split("serio: i8042")
            pnp2 = value[1].strip()

        # Get Input Mouse
        elif "serio: i8042 AUX" in line:
            value = line.split("serio: i8042")
            pnp3 = value[1].strip()

    # Clear Data
    del all_info

    bbs_io.pyPipe2Ansi("|CRDetecting PNP Devices...|CR|DE")
    bbs_io.pyPipe2Ansi("|15Detected : |07" + pnp);
    bbs_io.pyPipe2Ansi("|CR|15Detected : |07" + pnp2);
    bbs_io.pyPipe2Ansi("|CR|15Detected : |07" + pnp3);

    bbs_io.pyPipe2Ansi("|CR");
    
    loopcount = 4
    
    bbs_io.pyPipe2Ansi("|CR|15ESC |07to Continue Bootup Sequence or |15Wait ")

    # Listen for ESC Key, to Exit Script and Continue into BBS.
    #while True:
    #    ch = bbs_io.pyGetKey()
    #    if ch == "27":
    #        break
    # Listen for ESC Key, if Hit Abort Mem Test       
    
    # 4 Seconds until we start boot up sequence if ESC is not hit.
    waittest_done = False
    for i in range(10,-1,-1):
        while stdin in select([stdin], [], [], 0)[0]:
            ch = bbs_io.pyGetKey();
            if ch == '27':
                escsequence = bbs_io.pyGetKeyExtended()                
                if not escsequence: # we just just ESC no arrow keys
                    # We got Escape, exit loop.
                    waittest_done = True
                    break            
        else:

            # Format Output with color Pipe Codes.            
            output = format("\r\x1b[41G|07%01d seconds." % i)
            bbs_io.pyPipe2Ansi(output)

            sleep(1)
            if waittest_done is True:
                break