[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@52.14.201.216: ~ $
# Coroutine example:  general coroutine transfers
#
# The program is a variation of a Simula 67 program due to Dahl & Hoare,
# (Dahl/Dijkstra/Hoare, Structured Programming; Academic Press, 1972)
# who in turn credit the original example to Conway.
#
# We have a number of input lines, terminated by a 0 byte.  The problem
# is to squash them together into output lines containing 72 characters
# each.  A semicolon must be added between input lines.  Runs of blanks
# and tabs in input lines must be squashed into single blanks.
# Occurrences of "**" in input lines must be replaced by "^".
#
# Here's a test case:

test = """\
   d    =   sqrt(b**2  -  4*a*c)
twoa    =   2*a
   L    =   -b/twoa
   R    =   d/twoa
  A1    =   L + R
  A2    =   L - R\0
"""

# The program should print:

# d = sqrt(b^2 - 4*a*c);twoa = 2*a; L = -b/twoa; R = d/twoa; A1 = L + R;
#A2 = L - R
#done

# getline: delivers the next input line to its invoker
# disassembler: grabs input lines from getline, and delivers them one
#    character at a time to squasher, also inserting a semicolon into
#    the stream between lines
# squasher:  grabs characters from disassembler and passes them on to
#    assembler, first replacing "**" with "^" and squashing runs of
#    whitespace
# assembler: grabs characters from squasher and packs them into lines
#    with 72 character each, delivering each such line to putline;
#    when it sees a null byte, passes the last line to putline and
#    then kills all the coroutines
# putline: grabs lines from assembler, and just prints them

from Coroutine import *

def getline(text):
    for line in string.splitfields(text, '\n'):
        co.tran(codisassembler, line)

def disassembler():
    while 1:
        card = co.tran(cogetline)
        for i in range(len(card)):
            co.tran(cosquasher, card[i])
        co.tran(cosquasher, ';')

def squasher():
    while 1:
        ch = co.tran(codisassembler)
        if ch == '*':
            ch2 = co.tran(codisassembler)
            if ch2 == '*':
                ch = '^'
            else:
                co.tran(coassembler, ch)
                ch = ch2
        if ch in ' \t':
            while 1:
                ch2 = co.tran(codisassembler)
                if ch2 not in ' \t':
                    break
            co.tran(coassembler, ' ')
            ch = ch2
        co.tran(coassembler, ch)

def assembler():
    line = ''
    while 1:
        ch = co.tran(cosquasher)
        if ch == '\0':
            break
        if len(line) == 72:
            co.tran(coputline, line)
            line = ''
        line = line + ch
    line = line + ' ' * (72 - len(line))
    co.tran(coputline, line)
    co.kill()

def putline():
    while 1:
        line = co.tran(coassembler)
        print line

import string
co = Coroutine()
cogetline = co.create(getline, test)
coputline = co.create(putline)
coassembler = co.create(assembler)
codisassembler = co.create(disassembler)
cosquasher = co.create(squasher)

co.tran(coputline)
print 'done'

# end of example

Filemanager

Name Type Size Permission Actions
.Coroutine.pyo.40009 File 4.15 KB 0644
.Generator.pyo.40009 File 3.24 KB 0644
.fcmp.pyo.40009 File 1.65 KB 0644
.find.pyo.40009 File 3.78 KB 0644
.squasher.pyo.40009 File 2.06 KB 0644
.sync.pyo.40009 File 10.85 KB 0644
.telnet.pyo.40009 File 2.47 KB 0644
Coroutine.py File 5.39 KB 0644
Coroutine.pyc File 4.15 KB 0644
Coroutine.pyo File 4.15 KB 0644
Generator.py File 2.48 KB 0644
Generator.pyc File 3.24 KB 0644
Generator.pyo File 3.24 KB 0644
README File 440 B 0644
fcmp.py File 1.71 KB 0644
fcmp.pyc File 1.65 KB 0644
fcmp.pyo File 1.65 KB 0644
find.py File 4.12 KB 0644
find.pyc File 3.78 KB 0644
find.pyo File 3.78 KB 0644
squasher.py File 2.97 KB 0644
squasher.pyc File 2.06 KB 0644
squasher.pyo File 2.06 KB 0644
sync.py File 21.15 KB 0644
sync.pyc File 10.85 KB 0644
sync.pyo File 10.85 KB 0644
telnet.py File 3 KB 0644
telnet.pyc File 2.47 KB 0644
telnet.pyo File 2.47 KB 0644