|
|
1.1 root 1: % Copyright Barbara Liskov 1985
2:
3: x_geometry = proc (spec, defspec: string)
4: returns (int, int, int, int, bool, bool, bool)
5: i1: int := string$indexc('x', defspec)
6: i2: int
7: if i1 = 0
8: then i1 := string$indexc('+', defspec)
9: i2 := string$indexc('-', defspec)
10: if i2 > 0 cand (i1 = 0 cor i2 < i1)
11: then i1 := i2 end
12: if i1 = 0
13: then i1 := string$size(defspec) + 1 end
14: end
15: dw: int := int$parse(string$substr(defspec, 2, i1 - 2))
16: except others: dw := 1 end
17: if i1 <= string$size(defspec) cand defspec[i1] = 'x'
18: then i1 := i1 + 1 end
19: defspec := string$rest(defspec, i1)
20: i1 := string$indexc('+', defspec)
21: i2 := string$indexc('-', defspec)
22: dxp: bool := true
23: if i2 > 0 cand (i1 = 0 cor i2 < i1)
24: then i1 := i2
25: dxp := false
26: end
27: if i1 = 0
28: then i1 := string$size(defspec) + 1 end
29: dh: int := int$parse(string$substr(defspec, 1, i1 - 1))
30: except others: dh := 1 end
31: defspec := string$rest(defspec, i1 + 1)
32: except when bounds: defspec := "" end
33: i1 := string$indexc('+', defspec)
34: dyp: bool := true
35: if i1 = 0
36: then i1 := string$indexc('-', defspec)
37: if i1 = 0
38: then i1 := string$size(defspec) + 1
39: else dyp := false
40: end
41: end
42: dx: int := int$parse(string$substr(defspec, 1, i1 - 1))
43: except others: dx := 1 end
44: dy: int := int$parse(string$rest(defspec, i1 + 1))
45: except others: dy := 1 end
46:
47: i1 := string$indexc('x', spec)
48: if i1 = 0
49: then i1 := string$indexc('+', spec)
50: i2 := string$indexc('-', spec)
51: if i2 > 0 cand (i1 = 0 cor i2 < i1)
52: then i1 := i2 end
53: if i1 = 0
54: then i1 := string$size(spec) + 1 end
55: end
56: width: int := int$parse(string$substr(spec, 2, i1 - 2))
57: except others: width := dw end
58: if width <= 0
59: then width := dw end
60: if i1 <= string$size(spec) cand spec[i1] = 'x'
61: then i1 := i1 + 1 end
62: spec := string$rest(spec, i1)
63: i1 := string$indexc('+', spec)
64: i2 := string$indexc('-', spec)
65: xplus: bool := true
66: place: bool := true
67: if i2 > 0 cand (i1 = 0 cor i2 < i1)
68: then i1 := i2
69: xplus := false
70: end
71: if i1 = 0
72: then i1 := string$size(defspec) + 1
73: place := false
74: end
75: height: int := int$parse(string$substr(spec, 1, i1 - 1))
76: except others: height := dh end
77: if height <= 0
78: then height := dh end
79: spec := string$rest(spec, i1 + 1)
80: except when bounds: spec := "" end
81: i1 := string$indexc('+', spec)
82: yplus: bool := true
83: if i1 = 0
84: then i1 := string$indexc('-', spec)
85: if i1 = 0
86: then i1 := string$size(spec) + 1
87: else yplus := false
88: end
89: end
90: x: int := int$parse(string$substr(spec, 1, i1 - 1))
91: except others:
92: x := dx
93: xplus := dxp
94: end
95: y: int := int$parse(string$rest(spec, i1 + 1))
96: except others:
97: y := dy
98: yplus := dyp
99: end
100: return(width, height, x, y, xplus, yplus, place)
101: end x_geometry
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.