From a19a216bc60160c162e616145ef091dd18ce4e61 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Tue, 16 Feb 2021 14:40:46 -0600 Subject: Python 0.9.1 as posted in alt.sources --- shar/python-0.9.1-19-21.shar | 1997 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1997 insertions(+) create mode 100644 shar/python-0.9.1-19-21.shar (limited to 'shar/python-0.9.1-19-21.shar') diff --git a/shar/python-0.9.1-19-21.shar b/shar/python-0.9.1-19-21.shar new file mode 100644 index 0000000..c52113b --- /dev/null +++ b/shar/python-0.9.1-19-21.shar @@ -0,0 +1,1997 @@ +: This is a shell archive. +: Extract with 'sh this_file'. +: +: Extract part 01 first since it makes all directories +echo 'Start of pack.out, part 19 out of 21:' +if test -s 'demo/scripts/xxci.py' +then echo '*** I will not over-write existing file demo/scripts/xxci.py' +else +echo 'x - demo/scripts/xxci.py' +sed 's/^X//' > 'demo/scripts/xxci.py' << 'EOF' +X#! /ufs/guido/bin/sgi/python +X +X# xxci +X# +X# check in files for which rcsdiff returns nonzero exit status +X +Ximport sys +Ximport posix +Ximport stat +Ximport path +Ximport commands +X +XMAXSIZE = 200*1024 # Files this big must be binaries and are skipped. +X +Xdef getargs(): +X args = sys.argv[1:] +X if args: +X return args +X print 'No arguments, checking almost *' +X for file in posix.listdir('.'): +X if not skipfile(file): +X args.append(file) +X if not args: +X print 'Nothing to do -- exit 1' +X sys.exit(1) +X args.sort() +X return args +X +Xbadnames = ['tags', 'xyzzy'] +Xbadprefixes = ['.', ',', '@', '#', 'o.'] +Xbadsuffixes = \ +X ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not'] +X# XXX Should generalize even more to use fnmatch! +X +Xdef skipfile(file): +X if file in badnames or \ +X badprefix(file) or badsuffix(file) or \ +X path.islink(file) or path.isdir(file): +X return 1 +X # Skip huge files -- probably binaries. +X try: +X st = posix.stat(file) +X except posix.error: +X return 1 # Doesn't exist -- skip it +X return st[stat.ST_SIZE] >= MAXSIZE +X +Xdef badprefix(file): +X for bad in badprefixes: +X if file[:len(bad)] = bad: return 1 +X return 0 +X +Xdef badsuffix(file): +X for bad in badsuffixes: +X if file[-len(bad):] = bad: return 1 +X return 0 +X +Xdef go(args): +X for file in args: +X print file + ':' +X if run('rcsdiff -c', file): +X if askyesno('Check in ' + file + ' ? '): +X sts = run('rcs -l', file) # ignored +X # can't use run() here because it's interactive +X sts = posix.system('ci -l ' + file) +X +Xdef run(cmd, file): +X sts, output = commands.getstatusoutput(cmd + commands.mkarg(file)) +X if sts: +X print output +X print 'Exit status', sts +X return sts +X +Xdef askyesno(prompt): +X s = raw_input(prompt) +X return s in ['y', 'yes'] +X +Xgo(getargs()) +EOF +chmod +x 'demo/scripts/xxci.py' +fi +if test -s 'demo/sgi/gl_panel/apanel/apanel.s' +then echo '*** I will not over-write existing file demo/sgi/gl_panel/apanel/apanel.s' +else +echo 'x - demo/sgi/gl_panel/apanel/apanel.s' +sed 's/^X//' > 'demo/sgi/gl_panel/apanel/apanel.s' << 'EOF' +X;;; This file was automatically generated by the panel editor. +X;;; If you read it into gnu emacs, it will automagically format itself. +X +X(panel (prop help creator:user-panel-help) +X(prop user-panel #t) +X(label "Audio Control Panel") +X(x 395) +X(y 69) +X(al (pnl_filled_vslider (name "outputgain") +X(prop help creator:user-act-help) +X(label "output gain") +X(x 6.5) +X(y 0.75) +X(w 0.4) +X(h 4.35) +X(val 0.329) +X(labeltype 13) +X(downfunc move-then-resize) +X) +X(pnl_frame (prop help creator:user-frame-help) +X(x 0.25) +X(y 2.75) +X(w 5.1) +X(h 2.3) +X(downfunc move-then-resize) +X(al (pnl_filled_hslider (name "recordsize") +X(prop help creator:user-act-help) +X(label "recording length") +X(x -0.75) +X(w 3.3) +X(h 0.4) +X(val 0.1) +X(labeltype 11) +X(downfunc move-then-resize) +X) +X(pnl_label (prop help creator:user-act-help) +X(label "(max 10 seconds)") +X(x -0.75) +X(y -0.75) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "recordbutton") +X(prop help creator:user-act-help) +X(label "record from microphone...") +X(x -0.75) +X(y 0.75) +X(w 4.7) +X(downfunc move-then-resize) +X) +X) +X) +X(pnl_wide_button (name "playbackbutton") +X(prop help creator:user-act-help) +X(label "playback to speaker") +X(x 0.25) +X(y 2) +X(w 5.15) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "quitbutton") +X(prop help creator:user-act-help) +X(label "quit") +X(x 0.25) +X(y 0.25) +X(w 1.75) +X(downfunc move-then-resize) +X) +X) +X) +X;;; Local Variables: +X;;; mode: scheme +X;;; eval: (save-excursion (goto-char (point-min)) (kill-line 3)) +X;;; eval: (save-excursion (goto-char (point-min)) (replace-regexp "[ \n]*)" ")")) +X;;; eval: (indent-region (point-min) (point-max) nil) +X;;; eval: (progn (kill-line -3) (delete-backward-char 1) (save-buffer)) +X;;; End: +EOF +fi +if test -s 'demo/sgi/gl_panel/flying/light.s' +then echo '*** I will not over-write existing file demo/sgi/gl_panel/flying/light.s' +else +echo 'x - demo/sgi/gl_panel/flying/light.s' +sed 's/^X//' > 'demo/sgi/gl_panel/flying/light.s' << 'EOF' +X;;; This file was automatically generated by the panel editor. +X;;; If you read it into gnu emacs, it will automagically format itself. +X +X(panel (prop help creator:user-panel-help) +X(prop user-panel #t) +X(label "Light Sources") +X(al (pnl_hslider (name "X") +X(prop help creator:user-act-help) +X(label "x") +X(y 4) +X(w 3.3) +X(h 0.4) +X(val 0.50) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X(pnl_hslider (name "Y") +X(prop help creator:user-act-help) +X(label "y") +X(y 3.5) +X(w 3.3) +X(h 0.4) +X(val 0.50) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X(pnl_hslider (name "Z") +X(prop help creator:user-act-help) +X(label "z") +X(y 3) +X(w 3.3) +X(h 0.4) +X(val 0.50) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X(pnl_radio_button (name "light2") +X(prop help creator:user-act-help) +X(label "light 2") +X(x 5) +X(y 4) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_radio_button (name "light1") +X(prop help creator:user-act-help) +X(label "light 1") +X(x 5) +X(y 4.5) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_toggle_button (name "local") +X(prop help creator:user-act-help) +X(label "local") +X(x 5) +X(y 2.75) +X(downfunc move-then-resize) +X) +X(pnl_filled_hslider (name "B") +X(prop help creator:user-act-help) +X(label "B") +X(w 3.3) +X(h 0.4) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X(pnl_filled_hslider (name "G") +X(prop help creator:user-act-help) +X(label "G") +X(y 0.5) +X(w 3.3) +X(h 0.4) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X(pnl_filled_hslider (name "R") +X(prop help creator:user-act-help) +X(label "R") +X(y 1) +X(w 3.3) +X(h 0.4) +X(labeltype 0) +X(downfunc move-then-resize) +X) +X) +X) +X;;; Local Variables: +X;;; mode: scheme +X;;; eval: (save-excursion (goto-char (point-min)) (kill-line 3)) +X;;; eval: (save-excursion (goto-char (point-min)) (replace-regexp "[ \n]*)" ")")) +X;;; eval: (indent-region (point-min) (point-max) nil) +X;;; eval: (progn (kill-line -3) (delete-backward-char 1) (save-buffer)) +X;;; End: +EOF +fi +if test -s 'demo/sgi/gl_panel/flying/panel.s' +then echo '*** I will not over-write existing file demo/sgi/gl_panel/flying/panel.s' +else +echo 'x - demo/sgi/gl_panel/flying/panel.s' +sed 's/^X//' > 'demo/sgi/gl_panel/flying/panel.s' << 'EOF' +X;;; This file was automatically generated by the panel editor. +X;;; If you read it into gnu emacs, it will automagically format itself. +X +X(panel (prop help creator:user-panel-help) +X(prop user-panel #t) +X(label "Panel Control") +X(x 394) +X(y 622) +X(al (pnl_radio_button (name "button4") +X(prop help creator:user-act-help) +X(y 2.5) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_radio_button (name "button3") +X(prop help creator:user-act-help) +X(y 3) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_radio_button (name "button2") +X(prop help creator:user-act-help) +X(y 3.5) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_radio_button (name "button1") +X(prop help creator:user-act-help) +X(y 4) +X(h 0.36) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "title1") +X(prop help creator:user-act-help) +X(x 0.75) +X(y 4.75) +X(w 2.44) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "title2") +X(prop help creator:user-act-help) +X(x 3.5) +X(y 4.75) +X(w 2.44) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "title3") +X(prop help creator:user-act-help) +X(x 6.25) +X(y 4.75) +X(w 2.44) +X(downfunc move-then-resize) +X) +X(pnl_wide_button (name "title4") +X(prop help creator:user-act-help) +X(x 9) +X(y 4.75) +X(w 2.44) +X(downfunc move-then-resize) +X) +X(pnl_button (name "root") +X(prop help creator:user-act-help) +X(label "R") +X(y 4.75) +X(labeltype 16) +X(downfunc move-then-resize) +X) +X) +X) +X;;; Local Variables: +X;;; mode: scheme +X;;; eval: (save-excursion (goto-char (point-min)) (kill-line 3)) +X;;; eval: (save-excursion (goto-char (point-min)) (replace-regexp "[ \n]*)" ")")) +X;;; eval: (indent-region (point-min) (point-max) nil) +X;;; eval: (progn (kill-line -3) (delete-backward-char 1) (save-buffer)) +X;;; End: +EOF +fi +if test -s 'lib/Abstract.py' +then echo '*** I will not over-write existing file lib/Abstract.py' +else +echo 'x - lib/Abstract.py' +sed 's/^X//' > 'lib/Abstract.py' << 'EOF' +X# Abstract classes for parents and children. +X# +X# Do not use as base class -- this is for documentation only. +X# +X# Note that the tree must be built top down (create the parent, +X# then add the children). +X# +X# Also note that the creation methods are not standardized -- +X# these have extra parameters dependent on the widget type. +X# For historical reasons, button creation methods are called +X# define() while split creation methods are called create(). +X +Xclass AbstractParent(): +X # +X # Upcalls from child to parent +X # +X def addchild(self, child): unimpl() +X def delchild(self, child): unimpl() +X # +X def need_mouse(self, child): unimpl() +X def no_mouse(self, child): unimpl() +X # +X def need_timer(self, child): unimpl() +X def no_timer(self, child): unimpl() +X # +X # XXX need_kbd, no_kbd; focus??? +X # +X def begindrawing(self): return unimpl() +X def beginmeasuring(self): return unimpl() +X # +X def change(self, area): unimpl() +X def scroll(self, (area, (dh, dv))): unimpl() +X def settimer(self, itimer): unimpl() +X +Xclass AbstractChild(): +X # +X # Downcalls from parent to child +X # +X def destroy(self): unimpl() +X # +X def minsize(self, m): return unimpl() +X def getbounds(self): return unimpl() +X def setbounds(self, bounds): unimpl() +X def draw(self, (d, area)): unimpl() +X # +X # Downcalls only made after certain upcalls +X # +X def mouse_down(self, detail): unimpl() +X def mouse_move(self, detail): unimpl() +X def mouse_up(self, detail): unimpl() +X # +X def timer(self): unimpl() +X +X# A "Split" is a child that manages one or more children. +X# (This terminology is due to DEC SRC, except for CSplits.) +X# A child of a split may be another split, a button, a slider, etc. +X# Certain upcalls and downcalls can be handled transparently, but +X# for others (e.g., all geometry related calls) this is not possible. +X +Xclass AbstractSplit() = AbstractChild(), AbstractParent(): +X pass +EOF +fi +if test -s 'lib/StripChart.py' +then echo '*** I will not over-write existing file lib/StripChart.py' +else +echo 'x - lib/StripChart.py' +sed 's/^X//' > 'lib/StripChart.py' << 'EOF' +X# Module 'StripChart' +X +Ximport rect +Xfrom Buttons import LabelAppearance, NoReactivity +X +X# A StripChart doesn't really look like a label but it needs a base class. +X# LabelAppearance allows it to be disabled and hilited. +X +Xclass StripChart() = LabelAppearance(), NoReactivity(): +X # +X def define(self, (parent, scale)): +X self.parent = parent +X parent.addchild(self) +X self.init_appearance() +X self.init_reactivity() +X self.ydata = [] +X self.scale = scale +X self.resetbounds() +X return self +X # +X def setbounds(self, bounds): +X LabelAppearance.setbounds(self, bounds) +X self.resetbounds() +X # +X def resetbounds(self): +X (left, top), (right, bottom) = self.bounds +X self.width = right-left +X self.height = bottom-top +X excess = len(self.ydata) - self.width +X if excess > 0: +X del self.ydata[:excess] +X elif excess < 0: +X while len(self.ydata) < self.width: +X self.ydata.insert(0, 0) +X # +X def append(self, y): +X self.ydata.append(y) +X excess = len(self.ydata) - self.width +X if excess > 0: +X del self.ydata[:excess] +X if self.bounds <> rect.empty: +X self.parent.scroll(self.bounds, (-excess, 0)) +X if self.bounds <> rect.empty: +X (left, top), (right, bottom) = self.bounds +X i = len(self.ydata) +X area = (left+i-1, top), (left+i, bottom) +X self.draw(self.parent.begindrawing(), area) +X # +X def draw(self, (d, area)): +X area = rect.intersect(area, self.bounds) +X if area = rect.empty: +X print 'mt' +X return +X d.cliprect(area) +X d.erase(self.bounds) +X (a_left, a_top), (a_right, a_bottom) = area +X (left, top), (right, bottom) = self.bounds +X height = bottom - top +X i1 = a_left - left +X i2 = a_right - left +X for i in range(max(0, i1), min(len(self.ydata), i2)): +X split = bottom-self.ydata[i]*height/self.scale +X d.paint((left+i, split), (left+i+1, bottom)) +X if not self.enabled: +X self.flipenable(d) +X if self.hilited: +X self.fliphilite(d) +X d.noclip() +EOF +fi +if test -s 'lib/cmp.py' +then echo '*** I will not over-write existing file lib/cmp.py' +else +echo 'x - lib/cmp.py' +sed 's/^X//' > 'lib/cmp.py' << 'EOF' +X# Module 'cmp' +X +X# Efficiently compare files, boolean outcome only (equal / not equal). +X +X# Tricks (used in this order): +X# - Files with identical type, size & mtime are assumed to be clones +X# - Files with different type or size cannot be identical +X# - We keep a cache of outcomes of earlier comparisons +X# - We don't fork a process to run 'cmp' but read the files ourselves +X +Ximport posix +X +Xcache = {} +X +Xdef cmp(f1, f2): # Compare two files, use the cache if possible. +X # Return 1 for identical files, 0 for different. +X # Raise exceptions if either file could not be statted, read, etc. +X s1, s2 = sig(posix.stat(f1)), sig(posix.stat(f2)) +X if s1[0] <> 8 or s2[0] <> 8: +X # Either is a not a plain file -- always report as different +X return 0 +X if s1 = s2: +X # type, size & mtime match -- report same +X return 1 +X if s1[:2] <> s2[:2]: # Types or sizes differ, don't bother +X # types or sizes differ -- report different +X return 0 +X # same type and size -- look in the cache +X key = f1 + ' ' + f2 +X try: +X cs1, cs2, outcome = cache[key] +X # cache hit +X if s1 = cs1 and s2 = cs2: +X # cached signatures match +X return outcome +X # stale cached signature(s) +X except RuntimeError: +X # cache miss +X pass +X # really compare +X outcome = do_cmp(f1, f2) +X cache[key] = s1, s2, outcome +X return outcome +X +Xdef sig(st): # Return signature (i.e., type, size, mtime) from raw stat data +X # 0-5: st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid +X # 6-9: st_size, st_atime, st_mtime, st_ctime +X type = st[0] / 4096 +X size = st[6] +X mtime = st[8] +X return type, size, mtime +X +Xdef do_cmp(f1, f2): # Compare two files, really +X bufsize = 8096 # Could be tuned +X fp1 = open(f1, 'r') +X fp2 = open(f2, 'r') +X while 1: +X b1 = fp1.read(bufsize) +X b2 = fp2.read(bufsize) +X if b1 <> b2: return 0 +X if not b1: return 1 +EOF +fi +if test -s 'lib/commands.py' +then echo '*** I will not over-write existing file lib/commands.py' +else +echo 'x - lib/commands.py' +sed 's/^X//' > 'lib/commands.py' << 'EOF' +X# Module 'commands' +X# +X# Various tools for executing commands and looking at their output and status. +X +Ximport rand +Ximport posix +Ximport stat +Ximport path +X +X +X# Get 'ls -l' status for an object into a string +X# +Xdef getstatus(file): +X return getoutput('ls -ld' + mkarg(file)) +X +X +X# Get the output from a shell command into a string. +X# The exit status is ignored; a trailing newline is stripped. +X# Assume the command will work with ' >tempfile 2>&1' appended. +X# XXX This should use posix.popen() instead, should it exist. +X# +Xdef getoutput(cmd): +X return getstatusoutput(cmd)[1] +X +X +X# Ditto but preserving the exit status. +X# Returns a pair (sts, output) +X# +Xdef getstatusoutput(cmd): +X tmp = '/usr/tmp/wdiff' + `rand.rand()` +X sts = -1 +X try: +X sts = posix.system(cmd + ' >' + tmp + ' 2>&1') +X text = readfile(tmp) +X finally: +X altsts = posix.system('rm -f ' + tmp) +X if text[-1:] = '\n': text = text[:-1] +X return sts, text +X +X +X# Return a string containing a file's contents. +X# +Xdef readfile(fn): +X st = posix.stat(fn) +X size = st[stat.ST_SIZE] +X if not size: return '' +X try: +X fp = open(fn, 'r') +X except: +X raise posix.error, 'readfile(' + fn + '): open failed' +X try: +X return fp.read(size) +X except: +X raise posix.error, 'readfile(' + fn + '): read failed' +X +X +X# Make command argument from directory and pathname (prefix space, add quotes). +X# +Xdef mk2arg(head, x): +X return mkarg(path.cat(head, x)) +X +X +X# Make a shell command argument from a string. +X# Two strategies: enclose in single quotes if it contains none; +X# otherwis, enclose in double quotes and prefix quotable characters +X# with backslash. +X# +Xdef mkarg(x): +X if '\'' not in x: +X return ' \'' + x + '\'' +X s = ' "' +X for c in x: +X if c in '\\$"': +X s = s + '\\' +X s = s + c +X s = s + '"' +X return s +EOF +fi +if test -s 'lib/getopt.py' +then echo '*** I will not over-write existing file lib/getopt.py' +else +echo 'x - lib/getopt.py' +sed 's/^X//' > 'lib/getopt.py' << 'EOF' +X# module getopt -- Standard command line processing. +X +X# Function getopt.getopt() has a different interface but provides the +X# same functionality as the Unix getopt() function. +X +X# It has two arguments: the first should be argv[1:] (it doesn't want +X# the script name), the second the string of option letters as passed +X# to Unix getopt() (i.e., a string of allowable option letters, with +X# options requiring an argument followed by a colon). +X +X# It raises the exception getopt.error with a string argument if it +X# detects an error. +X +X# It returns two items: +X# (1) a list of pairs (option, option_argument) giving the options in +X# the order in which they were specified. (I'd use a dictionary +X# but applications may depend on option order or multiple +X# occurrences.) Boolean options have '' as option_argument. +X# (2) the list of remaining arguments (may be empty). +X +Xerror = 'getopt error' +X +Xdef getopt(args, options): +X list = [] +X while args and args[0][0] = '-' and args[0] <> '-': +X if args[0] = '--': +X args = args[1:] +X break +X optstring, args = args[0][1:], args[1:] +X while optstring <> '': +X opt, optstring = optstring[0], optstring[1:] +X if classify(opt, options): # May raise exception as well +X if optstring = '': +X if not args: +X raise error, 'option -' + opt + ' requires argument' +X optstring, args = args[0], args[1:] +X optarg, optstring = optstring, '' +X else: +X optarg = '' +X list.append('-' + opt, optarg) +X return list, args +X +Xdef classify(opt, options): # Helper to check type of option +X for i in range(len(options)): +X if opt = options[i] <> ':': +X return options[i+1:i+2] = ':' +X raise error, 'option -' + opt + ' not recognized' +EOF +fi +if test -s 'lib/rect.py' +then echo '*** I will not over-write existing file lib/rect.py' +else +echo 'x - lib/rect.py' +sed 's/^X//' > 'lib/rect.py' << 'EOF' +X# Module 'rect'. +X# +X# Operations on rectangles. +X# There is some normalization: all results return the object 'empty' +X# if their result would contain no points. +X +X +X# Exception. +X# +Xerror = 'rect.error' +X +X +X# The empty rectangle. +X# +Xempty = (0, 0), (0, 0) +X +X +X# Check if a rectangle is empty. +X# +Xdef is_empty((left, top), (right, bottom)): +X return left >= right or top >= bottom +X +X +X# Compute the intersection or two or more rectangles. +X# This works with a list or tuple argument. +X# +Xdef intersect(list): +X if not list: raise error, 'intersect called with empty list' +X if is_empty(list[0]): return empty +X (left, top), (right, bottom) = list[0] +X for rect in list[1:]: +X if is_empty(rect): +X return empty +X (l, t), (r, b) = rect +X if left < l: left = l +X if top < t: top = t +X if right > r: right = r +X if bottom > b: bottom = b +X if is_empty((left, top), (right, bottom)): +X return empty +X return (left, top), (right, bottom) +X +X +X# Compute the smallest rectangle containing all given rectangles. +X# This works with a list or tuple argument. +X# +Xdef union(list): +X (left, top), (right, bottom) = empty +X for (l, t), (r, b) in list[1:]: +X if not is_empty((l, t), (r, b)): +X if l < left: left = l +X if t < top: top = t +X if r > right: right = r +X if b > bottom: bottom = b +X res = (left, top), (right, bottom) +X if is_empty(res): +X return empty +X return res +X +X +X# Check if a point is in a rectangle. +X# +Xdef pointinrect((h, v), ((left, top), (right, bottom))): +X return left <= h < right and top <= v < bottom +X +X +X# Return a rectangle that is dh, dv inside another +X# +Xdef inset(((left, top), (right, bottom)), (dh, dv)): +X left = left + dh +X top = top + dv +X right = right - dh +X bottom = bottom - dv +X r = (left, top), (right, bottom) +X if is_empty(r): +X return empty +X else: +X return r +X +X +X# Conversions between rectangles and 'geometry tuples', +X# given as origin (h, v) and dimensions (width, height). +X# +Xdef rect2geom((left, top), (right, bottom)): +X return (left, top), (right-left, bottom-top) +X +Xdef geom2rect((h, v), (width, height)): +X return (h, v), (h+width, v+height) +EOF +fi +if test -s 'lib/selection.py' +then echo '*** I will not over-write existing file lib/selection.py' +else +echo 'x - lib/selection.py' +sed 's/^X//' > 'lib/selection.py' << 'EOF' +X# DAWKINS' BLIND WATCHMAKER -- "METHINKS IT IS LIKE A WEASEL" EXAMPLE +X# +X# Start with a random phrase. Successively: +X# Breed a next generation by copying with small mutations. +X# Choose the member of the next generation that most closely resembles +X# the target phrase to start breeding the next generation. +X# How many generations will it take before the target is reached? +X +Xfrom whrandom import random +X +X# Parameters determining the problem space +XTarget = 'methinks it is like a weasel' +XAlphabet = ' abcdefghijklmnopqrstuvwxyz' +X +X# Parameters to play with +XGenerationSize = 100 +XMutationChance = 1.0/28.0 +X +XIndexSet = range(len(Target)) # Used to speed up loops +X +Xdef choice(sequence): +X n = len(sequence) +X i = int(random() * float(n)) % n +X return sequence[i] +X +Xdef random_phrase(): +X phrase = '' +X for i in IndexSet: +X phrase = phrase + choice(Alphabet) +X return phrase +X +Xdef mutate_phrase(phrase): +X mutant = phrase +X for i in range(int(0.5 + MutationChance*float(len(phrase)))): +X i = choice(IndexSet) +X c = choice(Alphabet) +X mutant = mutant[:i] + c + mutant[i+1:] +X #print `mutant` +X return mutant +X +Xdef matching_factor(phrase): +X factor = 0 +X for i in IndexSet: +X if phrase[i] = Target[i]: factor = factor + 1 +X return factor +X +Xdef breed_generation(phrase): +X generation = [phrase] +X while len(generation) < GenerationSize: +X generation.append(mutate_phrase(phrase)) +X return generation +X +Xdef select_best(generation): +X factor, selected = -1, '' +X for phrase in generation: +X f = matching_factor(phrase) +X if f > factor: +X factor, selected = f, phrase +X return selected +X +Xdef main(): +X gen = 0 +X phrase = random_phrase() +X print gen, `phrase` +X while phrase <> Target: +X next_generation = breed_generation(phrase) +X #print next_generation +X phrase = select_best(next_generation) +X gen = gen+1 +X print gen, `phrase` +X +Xmain() +EOF +fi +if test -s 'lib/statcache.py' +then echo '*** I will not over-write existing file lib/statcache.py' +else +echo 'x - lib/statcache.py' +sed 's/^X//' > 'lib/statcache.py' << 'EOF' +X# Module 'statcache' +X# +X# Maintain a cache of file stats. +X# There are functions to reset the cache or to selectively remove items. +X +Ximport posix +Xfrom stat import * +X +X# The cache. +X# Keys are pathnames, values are `posix.stat' outcomes. +X# +Xcache = {} +X +X +X# Stat a file, possibly out of the cache. +X# +Xdef stat(path): +X if cache.has_key(path): +X return cache[path] +X cache[path] = ret = posix.stat(path) +X return ret +X +X +X# Reset the cache completely. +X# Hack: to reset a global variable, we import this module. +X# +Xdef reset(): +X import statcache +X # Check that we really imported the same module +X if cache is not statcache.cache: +X raise 'sorry, statcache identity crisis' +X statcache.cache = {} +X +X +X# Remove a given item from the cache, if it exists. +X# +Xdef forget(path): +X if cache.has_key(path): +X del cache[path] +X +X +X# Remove all pathnames with a given prefix. +X# +Xdef forget_prefix(prefix): +X n = len(prefix) +X for path in cache.keys(): +X if path[:n] = prefix: +X del cache[path] +X +X +X# Forget about a directory and all entries in it, but not about +X# entries in subdirectories. +X# +Xdef forget_dir(prefix): +X if prefix[-1:] = '/' and prefix <> '/': +X prefix = prefix[:-1] +X forget(prefix) +X if prefix[-1:] <> '/': +X prefix = prefix + '/' +X n = len(prefix) +X for path in cache.keys(): +X if path[:n] = prefix: +X rest = path[n:] +X if rest[-1:] = '/': rest = rest[:-1] +X if '/' not in rest: +X del cache[path] +X +X +X# Remove all pathnames except with a given prefix. +X# Normally used with prefix = '/' after a chdir(). +X# +Xdef forget_except_prefix(prefix): +X n = len(prefix) +X for path in cache.keys(): +X if path[:n] <> prefix: +X del cache[path] +X +X +X# Check for directory. +X# +Xdef isdir(path): +X try: +X st = stat(path) +X except posix.error: +X return 0 +X return S_ISDIR(st[ST_MODE]) +EOF +fi +if test -s 'src/allobjects.h' +then echo '*** I will not over-write existing file src/allobjects.h' +else +echo 'x - src/allobjects.h' +sed 's/^X//' > 'src/allobjects.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* "allobjects.c" -- Source for precompiled header "allobjects.h" */ +X +X#include +X#include +X +X#include "PROTO.h" +X +X#include "object.h" +X#include "objimpl.h" +X +X#include "intobject.h" +X#include "floatobject.h" +X#include "stringobject.h" +X#include "tupleobject.h" +X#include "listobject.h" +X#include "dictobject.h" +X#include "methodobject.h" +X#include "moduleobject.h" +X#include "funcobject.h" +X#include "classobject.h" +X#include "fileobject.h" +X +X#include "errors.h" +X#include "malloc.h" +X +Xextern char *strdup PROTO((const char *)); +EOF +fi +if test -s 'src/bitset.h' +then echo '*** I will not over-write existing file src/bitset.h' +else +echo 'x - src/bitset.h' +sed 's/^X//' > 'src/bitset.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Bitset interface */ +X +X#define BYTE char +X +Xtypedef BYTE *bitset; +X +Xbitset newbitset PROTO((int nbits)); +Xvoid delbitset PROTO((bitset bs)); +X/* int testbit PROTO((bitset bs, int ibit)); /* Now a macro, see below */ +Xint addbit PROTO((bitset bs, int ibit)); /* Returns 0 if already set */ +Xint samebitset PROTO((bitset bs1, bitset bs2, int nbits)); +Xvoid mergebitset PROTO((bitset bs1, bitset bs2, int nbits)); +X +X#define BITSPERBYTE (8*sizeof(BYTE)) +X#define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE) +X +X#define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE) +X#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE) +X#define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit)) +X#define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE) +X +X#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0) +EOF +fi +if test -s 'src/cgensupport.h' +then echo '*** I will not over-write existing file src/cgensupport.h' +else +echo 'x - src/cgensupport.h' +sed 's/^X//' > 'src/cgensupport.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Definitions used by cgen output */ +X +Xtypedef char *string; +X +X#define mknewlongobject(x) newintobject(x) +X#define mknewshortobject(x) newintobject((long)x) +X#define mknewfloatobject(x) newfloatobject(x) +X +Xextern object *mknewcharobject PROTO((int c)); +X +Xextern int getiobjectarg PROTO((object *args, int nargs, int i, object **p_a)); +Xextern int getilongarg PROTO((object *args, int nargs, int i, long *p_a)); +Xextern int getishortarg PROTO((object *args, int nargs, int i, short *p_a)); +Xextern int getifloatarg PROTO((object *args, int nargs, int i, float *p_a)); +Xextern int getistringarg PROTO((object *args, int nargs, int i, string *p_a)); +EOF +fi +if test -s 'src/classobject.h' +then echo '*** I will not over-write existing file src/classobject.h' +else +echo 'x - src/classobject.h' +sed 's/^X//' > 'src/classobject.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Class object interface */ +X +X/* +XClasses are really hacked in at the last moment. +XIt should be possible to use other object types as base classes, +Xbut currently it isn't. We'll see if we can fix that later, sigh... +X*/ +X +Xextern typeobject Classtype, Classmembertype, Classmethodtype; +X +X#define is_classobject(op) ((op)->ob_type == &Classtype) +X#define is_classmemberobject(op) ((op)->ob_type == &Classmembertype) +X#define is_classmethodobject(op) ((op)->ob_type == &Classmethodtype) +X +Xextern object *newclassobject PROTO((object *, object *)); +Xextern object *newclassmemberobject PROTO((object *)); +Xextern object *newclassmethodobject PROTO((object *, object *)); +X +Xextern object *classmethodgetfunc PROTO((object *)); +Xextern object *classmethodgetself PROTO((object *)); +EOF +fi +if test -s 'src/compile.h' +then echo '*** I will not over-write existing file src/compile.h' +else +echo 'x - src/compile.h' +sed 's/^X//' > 'src/compile.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Definitions for compiled intermediate code */ +X +X +X/* An intermediate code fragment contains: +X - a string that encodes the instructions, +X - a list of the constants, +X - and a list of the names used. */ +X +Xtypedef struct { +X OB_HEAD +X stringobject *co_code; /* instruction opcodes */ +X object *co_consts; /* list of immutable constant objects */ +X object *co_names; /* list of stringobjects */ +X object *co_filename; /* string */ +X} codeobject; +X +Xextern typeobject Codetype; +X +X#define is_codeobject(op) ((op)->ob_type == &Codetype) +X +X +X/* Public interface */ +Xcodeobject *compile PROTO((struct _node *, char *)); +EOF +fi +if test -s 'src/dictobject.h' +then echo '*** I will not over-write existing file src/dictobject.h' +else +echo 'x - src/dictobject.h' +sed 's/^X//' > 'src/dictobject.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* +XDictionary object type -- mapping from char * to object. +XNB: the key is given as a char *, not as a stringobject. +XThese functions set errno for errors. Functions dictremove() and +Xdictinsert() return nonzero for errors, getdictsize() returns -1, +Xthe others NULL. A successful call to dictinsert() calls INCREF() +Xfor the inserted item. +X*/ +X +Xextern typeobject Dicttype; +X +X#define is_dictobject(op) ((op)->ob_type == &Dicttype) +X +Xextern object *newdictobject PROTO((void)); +Xextern object *dictlookup PROTO((object *dp, char *key)); +Xextern int dictinsert PROTO((object *dp, char *key, object *item)); +Xextern int dictremove PROTO((object *dp, char *key)); +Xextern int getdictsize PROTO((object *dp)); +Xextern char *getdictkey PROTO((object *dp, int i)); +Xextern object *getdictkeys PROTO((object *dp)); +EOF +fi +if test -s 'src/errors.h' +then echo '*** I will not over-write existing file src/errors.h' +else +echo 'x - src/errors.h' +sed 's/^X//' > 'src/errors.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Error handling definitions */ +X +Xvoid err_set PROTO((object *)); +Xvoid err_setval PROTO((object *, object *)); +Xvoid err_setstr PROTO((object *, char *)); +Xint err_occurred PROTO((void)); +Xvoid err_get PROTO((object **, object **)); +Xvoid err_clear PROTO((void)); +X +X/* Predefined exceptions */ +X +Xextern object *RuntimeError; +Xextern object *EOFError; +Xextern object *TypeError; +Xextern object *MemoryError; +Xextern object *NameError; +Xextern object *SystemError; +Xextern object *KeyboardInterrupt; +X +X/* Some more planned for the future */ +X +X#define IndexError RuntimeError +X#define KeyError RuntimeError +X#define ZeroDivisionError RuntimeError +X#define OverflowError RuntimeError +X +X/* Convenience functions */ +X +Xextern int err_badarg PROTO((void)); +Xextern object *err_nomem PROTO((void)); +Xextern object *err_errno PROTO((object *)); +Xextern void err_input PROTO((int)); +X +Xextern void err_badcall PROTO((void)); +EOF +fi +if test -s 'src/grammar1.c' +then echo '*** I will not over-write existing file src/grammar1.c' +else +echo 'x - src/grammar1.c' +sed 's/^X//' > 'src/grammar1.c' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Grammar subroutines needed by parser */ +X +X#include "pgenheaders.h" +X#include "assert.h" +X#include "grammar.h" +X#include "token.h" +X +X/* Return the DFA for the given type */ +X +Xdfa * +Xfinddfa(g, type) +X grammar *g; +X register int type; +X{ +X register int i; +X register dfa *d; +X +X for (i = g->g_ndfas, d = g->g_dfa; --i >= 0; d++) { +X if (d->d_type == type) +X return d; +X } +X assert(0); +X /* NOTREACHED */ +X} +X +Xchar * +Xlabelrepr(lb) +X label *lb; +X{ +X static char buf[100]; +X +X if (lb->lb_type == ENDMARKER) +X return "EMPTY"; +X else if (ISNONTERMINAL(lb->lb_type)) { +X if (lb->lb_str == NULL) { +X sprintf(buf, "NT%d", lb->lb_type); +X return buf; +X } +X else +X return lb->lb_str; +X } +X else { +X if (lb->lb_str == NULL) +X return tok_name[lb->lb_type]; +X else { +X sprintf(buf, "%.32s(%.32s)", +X tok_name[lb->lb_type], lb->lb_str); +X return buf; +X } +X } +X} +EOF +fi +if test -s 'src/malloc.h' +then echo '*** I will not over-write existing file src/malloc.h' +else +echo 'x - src/malloc.h' +sed 's/^X//' > 'src/malloc.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Lowest-level memory allocation interface */ +X +X#ifdef THINK_C +X#define ANY void +X#ifndef THINK_C_3_0 +X#define HAVE_STDLIB +X#endif +X#endif +X +X#ifdef __STD_C__ +X#define ANY void +X#define HAVE_STDLIB +X#endif +X +X#ifndef ANY +X#define ANY char +X#endif +X +X#ifndef NULL +X#define NULL 0 +X#endif +X +X#define NEW(type, n) ( (type *) malloc((n) * sizeof(type)) ) +X#define RESIZE(p, type, n) \ +X if ((p) == NULL) \ +X (p) = (type *) malloc((n) * sizeof(type)); \ +X else \ +X (p) = (type *) realloc((char *)(p), (n) * sizeof(type)) +X#define DEL(p) free((char *)p) +X#define XDEL(p) if ((p) == NULL) ; else DEL(p) +X +X#ifdef HAVE_STDLIB +X#include +X#else +Xextern ANY *malloc PROTO((unsigned int)); +Xextern ANY *calloc PROTO((unsigned int, unsigned int)); +Xextern ANY *realloc PROTO((ANY *, unsigned int)); +Xextern void free PROTO((ANY *)); /* XXX sometimes int on Unix old systems */ +X#endif +EOF +fi +if test -s 'src/node.h' +then echo '*** I will not over-write existing file src/node.h' +else +echo 'x - src/node.h' +sed 's/^X//' > 'src/node.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Parse tree node interface */ +X +Xtypedef struct _node { +X int n_type; +X char *n_str; +X int n_lineno; +X int n_nchildren; +X struct _node *n_child; +X} node; +X +Xextern node *newtree PROTO((int type)); +Xextern node *addchild PROTO((node *n, int type, char *str, int lineno)); +Xextern void freetree PROTO((node *n)); +X +X/* Node access functions */ +X#define NCH(n) ((n)->n_nchildren) +X#define CHILD(n, i) (&(n)->n_child[i]) +X#define TYPE(n) ((n)->n_type) +X#define STR(n) ((n)->n_str) +X +X/* Assert that the type of a node is what we expect */ +X#ifndef DEBUG +X#define REQ(n, type) { /*pass*/ ; } +X#else +X#define REQ(n, type) \ +X { if (TYPE(n) != (type)) { \ +X fprintf(stderr, "FATAL: node type %d, required %d\n", \ +X TYPE(n), type); \ +X abort(); \ +X } } +X#endif +X +Xextern void listtree PROTO((node *)); +Xextern void listnode PROTO((FILE *, node *)); +EOF +fi +if test -s 'src/parser.h' +then echo '*** I will not over-write existing file src/parser.h' +else +echo 'x - src/parser.h' +sed 's/^X//' > 'src/parser.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Parser interface */ +X +X#define MAXSTACK 100 +X +Xtypedef struct _stackentry { +X int s_state; /* State in current DFA */ +X dfa *s_dfa; /* Current DFA */ +X struct _node *s_parent; /* Where to add next node */ +X} stackentry; +X +Xtypedef struct _stack { +X stackentry *s_top; /* Top entry */ +X stackentry s_base[MAXSTACK];/* Array of stack entries */ +X /* NB The stack grows down */ +X} stack; +X +Xtypedef struct { +X struct _stack p_stack; /* Stack of parser states */ +X struct _grammar *p_grammar; /* Grammar to use */ +X struct _node *p_tree; /* Top of parse tree */ +X} parser_state; +X +Xparser_state *newparser PROTO((struct _grammar *g, int start)); +Xvoid delparser PROTO((parser_state *ps)); +Xint addtoken PROTO((parser_state *ps, int type, char *str, int lineno)); +Xvoid addaccelerators PROTO((grammar *g)); +EOF +fi +if test -s 'src/pgenheaders.h' +then echo '*** I will not over-write existing file src/pgenheaders.h' +else +echo 'x - src/pgenheaders.h' +sed 's/^X//' > 'src/pgenheaders.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Include files and extern declarations used by most of the parser. +X This is a precompiled header for THINK C. */ +X +X#include +X#include +X +X#ifdef THINK_C +X/* #define THINK_C_3_0 /*** TURN THIS ON FOR THINK C 3.0 ****/ +X#define label label_ +X#undef label +X#endif +X +X#ifdef THINK_C_3_0 +X#include +X#endif +X +X#ifdef THINK_C +X#ifndef THINK_C_3_0 +X#include +X#endif +X#endif +X +X#include "PROTO.h" +X#include "malloc.h" +X +Xextern void fatal PROTO((char *)); +EOF +fi +if test -s 'src/pythonrun.h' +then echo '*** I will not over-write existing file src/pythonrun.h' +else +echo 'x - src/pythonrun.h' +sed 's/^X//' > 'src/pythonrun.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Interfaces to parse and execute pieces of python code */ +X +Xvoid initall PROTO((void)); +X +Xint run PROTO((FILE *, char *)); +X +Xint run_script PROTO((FILE *, char *)); +Xint run_tty_1 PROTO((FILE *, char *)); +Xint run_tty_loop PROTO((FILE *, char *)); +X +Xint parse_string PROTO((char *, int, struct _node **)); +Xint parse_file PROTO((FILE *, char *, int, struct _node **)); +X +Xobject *eval_node PROTO((struct _node *, char *, object *, object *)); +X +Xobject *run_string PROTO((char *, int, object *, object *)); +Xobject *run_file PROTO((FILE *, char *, int, object *, object *)); +Xobject *run_err_node PROTO((int, struct _node *, char *, object *, object *)); +Xobject *run_node PROTO((struct _node *, char *, object *, object *)); +X +Xvoid print_error PROTO((void)); +X +Xvoid goaway PROTO((int)); +EOF +fi +if test -s 'src/regexp.h' +then echo '*** I will not over-write existing file src/regexp.h' +else +echo 'x - src/regexp.h' +sed 's/^X//' > 'src/regexp.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* +X * Definitions etc. for regexp(3) routines. +X * +X * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof], +X * not the System V one. +X */ +X +X#define MULTILINE +X +X#define NSUBEXP 10 +Xtypedef struct regexp { +X char *startp[NSUBEXP]; +X char *endp[NSUBEXP]; +X char regstart; /* Internal use only. */ +X char reganch; /* Internal use only. */ +X char *regmust; /* Internal use only. */ +X int regmlen; /* Internal use only. */ +X char program[1]; /* Unwarranted chumminess with compiler. */ +X} regexp; +X +Xextern regexp *regcomp(); +Xextern int regexec(); +X#ifdef MULTILINE +Xextern int reglexec(); +X#endif +Xextern void regsub(); +Xextern void regerror(); +EOF +fi +if test -s 'src/sigtype.h' +then echo '*** I will not over-write existing file src/sigtype.h' +else +echo 'x - src/sigtype.h' +sed 's/^X//' > 'src/sigtype.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* The type of signal handlers is somewhat problematic. +X This file encapsulates my knowledge about it: +X - on the Mac (THINK C), it's int for 3.0, void for 4.0 +X - on other systems, it's usually void, except it's int on vax Ultrix. +X Pass -DSIGTYPE=... to cc if you know better. */ +X +X#ifndef SIGTYPE +X +X#ifdef THINK_C +X +X#ifdef THINK_C_3_0 +X#define SIGTYPE int +X#else +X#define SIGTYPE void +X#endif +X +X#else /* !THINK_C */ +X +X#if defined(vax) && !defined(AMOEBA) +X#define SIGTYPE int +X#else +X#define SIGTYPE void +X#endif +X +X#endif /* !THINK_C */ +X +X#endif /* !SIGTYPE */ +EOF +fi +if test -s 'src/token.h' +then echo '*** I will not over-write existing file src/token.h' +else +echo 'x - src/token.h' +sed 's/^X//' > 'src/token.h' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Token types */ +X +X#define ENDMARKER 0 +X#define NAME 1 +X#define NUMBER 2 +X#define STRING 3 +X#define NEWLINE 4 +X#define INDENT 5 +X#define DEDENT 6 +X#define LPAR 7 +X#define RPAR 8 +X#define LSQB 9 +X#define RSQB 10 +X#define COLON 11 +X#define COMMA 12 +X#define SEMI 13 +X#define PLUS 14 +X#define MINUS 15 +X#define STAR 16 +X#define SLASH 17 +X#define VBAR 18 +X#define AMPER 19 +X#define LESS 20 +X#define GREATER 21 +X#define EQUAL 22 +X#define DOT 23 +X#define PERCENT 24 +X#define BACKQUOTE 25 +X#define LBRACE 26 +X#define RBRACE 27 +X#define OP 28 +X#define ERRORTOKEN 29 +X#define N_TOKENS 30 +X +X/* Special definitions for cooperation with parser */ +X +X#define NT_OFFSET 256 +X +X#define ISTERMINAL(x) ((x) < NT_OFFSET) +X#define ISNONTERMINAL(x) ((x) >= NT_OFFSET) +X#define ISEOF(x) ((x) == ENDMARKER) +X +X +Xextern char *tok_name[]; /* Token names */ +Xextern int tok_1char PROTO((int)); +EOF +fi +if test -s 'src/typeobject.c' +then echo '*** I will not over-write existing file src/typeobject.c' +else +echo 'x - src/typeobject.c' +sed 's/^X//' > 'src/typeobject.c' << 'EOF' +X/*********************************************************** +XCopyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The +XNetherlands. +X +X All Rights Reserved +X +XPermission to use, copy, modify, and distribute this software and its +Xdocumentation for any purpose and without fee is hereby granted, +Xprovided that the above copyright notice appear in all copies and that +Xboth that copyright notice and this permission notice appear in +Xsupporting documentation, and that the names of Stichting Mathematisch +XCentrum or CWI not be used in advertising or publicity pertaining to +Xdistribution of the software without specific, written prior permission. +X +XSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +XTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +XFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +XFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +XWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +XACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +XOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +X +X******************************************************************/ +X +X/* Type object implementation */ +X +X#include "allobjects.h" +X +X/* Type object implementation */ +X +Xstatic void +Xtype_print(v, fp, flags) +X typeobject *v; +X FILE *fp; +X int flags; +X{ +X fprintf(fp, "", v->tp_name); +X} +X +Xstatic object * +Xtype_repr(v) +X typeobject *v; +X{ +X char buf[100]; +X sprintf(buf, "", v->tp_name); +X return newstringobject(buf); +X} +X +Xtypeobject Typetype = { +X OB_HEAD_INIT(&Typetype) +X 0, /* Number of items for varobject */ +X "type", /* Name of this type */ +X sizeof(typeobject), /* Basic object size */ +X 0, /* Item size for varobject */ +X 0, /*tp_dealloc*/ +X type_print, /*tp_print*/ +X 0, /*tp_getattr*/ +X 0, /*tp_setattr*/ +X 0, /*tp_compare*/ +X type_repr, /*tp_repr*/ +X}; +EOF +fi +echo 'Part 19 out of 21 of pack.out complete.' +exit 0 -- cgit v1.2.3