Rev 9050 | Rev 9336 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9050 | Rev 9073 | ||
---|---|---|---|
Line 25... | Line 25... | ||
25 | tIntItem = POINTER TO RECORD (List.tItem) |
25 | tIntItem = POINTER TO RECORD (List.tItem) |
26 | adr, val: INTEGER |
26 | adr, val: INTEGER |
27 | END; |
27 | END; |
Line 28... | Line 28... | ||
28 | 28 | ||
29 | tBoolItem = POINTER TO RECORD (List.tItem) |
29 | tBoolItem = POINTER TO RECORD (List.tItem) |
30 | adr: INTEGER; val: BOOLEAN |
30 | adr: INTEGER; val: BOOLEAN; save: BOOLEAN |
31 | END; |
31 | END; |
32 | (* |
32 | (* |
33 | tUntypedPtr = POINTER TO RECORD (List.tItem) |
33 | tUntypedPtr = POINTER TO RECORD (List.tItem) |
34 | p: INTEGER |
34 | p: INTEGER |
Line 37... | Line 37... | ||
37 | tTypedPtr = POINTER TO RECORD (List.tItem) |
37 | tTypedPtr = POINTER TO RECORD (List.tItem) |
38 | p: List.tItem |
38 | p: List.tItem |
39 | END; |
39 | END; |
40 | *) |
40 | *) |
41 | tGuard* = POINTER TO RECORD (List.tItem) |
41 | tGuard* = POINTER TO RECORD (List.tItem) |
42 | - | ||
- | 42 | saved*: BOOLEAN |
|
43 | END; |
43 | END; |
Line 44... | Line 44... | ||
44 | 44 | ||
45 | tLog* = POINTER TO RECORD |
45 | tLog* = POINTER TO RECORD |
46 | Log*: List.tList; |
46 | Log*: List.tList; |
Line 121... | Line 121... | ||
121 | UNTIL item = guard; |
121 | UNTIL item = guard; |
122 | List.append(CL.Log, item) |
122 | List.append(CL.Log, item) |
123 | END clear; |
123 | END clear; |
Line -... | Line 124... | ||
- | 124 | ||
- | 125 | ||
- | 126 | PROCEDURE save* (guard: tGuard); |
|
- | 127 | VAR |
|
- | 128 | item: List.tItem; |
|
- | 129 | BEGIN |
|
- | 130 | item := CL.Log.first; |
|
- | 131 | WHILE item # NIL DO |
|
- | 132 | IF item IS tGuard THEN |
|
- | 133 | item(tGuard).saved := FALSE |
|
- | 134 | END; |
|
- | 135 | item := item.next |
|
- | 136 | END; |
|
- | 137 | guard.saved := TRUE |
|
- | 138 | END save; |
|
124 | 139 | ||
125 | 140 | ||
126 | PROCEDURE changeWord (adrV, adrX: INTEGER); |
141 | PROCEDURE changeWord (adrV, adrX: INTEGER); |
127 | VAR |
142 | VAR |
128 | item: tIntItem; |
143 | item: tIntItem; |
Line 142... | Line 157... | ||
142 | item: tBoolItem; |
157 | item: tBoolItem; |
143 | BEGIN |
158 | BEGIN |
144 | NEW(item); |
159 | NEW(item); |
145 | item.adr := SYSTEM.ADR(v); |
160 | item.adr := SYSTEM.ADR(v); |
146 | item.val := x; |
161 | item.val := x; |
- | 162 | item.save := FALSE; |
|
147 | IF ~CL.isLast THEN |
163 | IF ~CL.isLast THEN |
148 | clear(CL.guard) |
164 | clear(CL.guard) |
149 | END; |
165 | END; |
150 | List.append(CL.Log, item) |
166 | List.append(CL.Log, item) |
151 | END changeBool; |
167 | END changeBool; |
Line -... | Line 168... | ||
- | 168 | ||
- | 169 | ||
- | 170 | PROCEDURE delSaved*; |
|
- | 171 | VAR |
|
- | 172 | boolItem: tBoolItem; |
|
- | 173 | cur: List.tItem; |
|
- | 174 | del: BOOLEAN; |
|
- | 175 | BEGIN |
|
- | 176 | cur := CL.guard.next; |
|
- | 177 | WHILE cur # NIL DO |
|
- | 178 | IF cur IS tBoolItem THEN |
|
- | 179 | boolItem := cur(tBoolItem); |
|
- | 180 | del := boolItem.save |
|
- | 181 | ELSE |
|
- | 182 | del := FALSE |
|
- | 183 | END; |
|
- | 184 | cur := cur.next; |
|
- | 185 | IF del THEN |
|
- | 186 | List.delete(CL.Log, boolItem); |
|
- | 187 | DISPOSE(boolItem) |
|
- | 188 | END |
|
- | 189 | END |
|
- | 190 | END delSaved; |
|
- | 191 | ||
- | 192 | ||
- | 193 | PROCEDURE delCurSaved*; |
|
- | 194 | VAR |
|
- | 195 | boolItem: tBoolItem; |
|
- | 196 | cur: List.tItem; |
|
- | 197 | del: BOOLEAN; |
|
- | 198 | BEGIN |
|
- | 199 | cur := CL.guard.prev; |
|
- | 200 | WHILE (cur # NIL) & ~(cur IS tGuard) DO |
|
- | 201 | IF cur IS tBoolItem THEN |
|
- | 202 | boolItem := cur(tBoolItem); |
|
- | 203 | del := boolItem.save |
|
- | 204 | ELSE |
|
- | 205 | del := FALSE |
|
- | 206 | END; |
|
- | 207 | cur := cur.prev; |
|
- | 208 | IF del THEN |
|
- | 209 | SYSTEM.PUT(boolItem.adr, ~boolItem.val); |
|
- | 210 | List.delete(CL.Log, boolItem); |
|
- | 211 | DISPOSE(boolItem) |
|
- | 212 | END |
|
- | 213 | END |
|
- | 214 | END delCurSaved; |
|
- | 215 | ||
- | 216 | ||
- | 217 | PROCEDURE changeBool2 (VAR v: BOOLEAN; x: BOOLEAN); |
|
- | 218 | VAR |
|
- | 219 | item, boolItem: tBoolItem; |
|
- | 220 | cur: List.tItem; |
|
- | 221 | del: BOOLEAN; |
|
- | 222 | BEGIN |
|
- | 223 | NEW(item); |
|
- | 224 | item.adr := SYSTEM.ADR(v); |
|
- | 225 | item.val := x; |
|
- | 226 | item.save := TRUE; |
|
- | 227 | cur := CL.guard.prev; |
|
- | 228 | WHILE cur # NIL DO |
|
- | 229 | IF cur IS tBoolItem THEN |
|
- | 230 | boolItem := cur(tBoolItem); |
|
- | 231 | del := boolItem.save & (boolItem.adr = SYSTEM.ADR(v)) & (boolItem.val = x) |
|
- | 232 | ELSE |
|
- | 233 | del := FALSE |
|
- | 234 | END; |
|
- | 235 | cur := cur.prev; |
|
- | 236 | IF del THEN |
|
- | 237 | List.delete(CL.Log, boolItem); |
|
- | 238 | DISPOSE(boolItem) |
|
- | 239 | END |
|
- | 240 | END; |
|
- | 241 | List.insert(CL.Log, CL.guard.prev, item) |
|
- | 242 | END changeBool2; |
|
152 | 243 | ||
153 | 244 | ||
154 | PROCEDURE changeInt (VAR v: INTEGER; x: INTEGER); |
245 | PROCEDURE changeInt (VAR v: INTEGER; x: INTEGER); |
155 | BEGIN |
246 | BEGIN |
Line 203... | Line 294... | ||
203 | END create; |
294 | END create; |
Line 204... | Line 295... | ||
204 | 295 | ||
205 | 296 | ||
206 | BEGIN |
297 | BEGIN |
207 | List.init(changeInt, changePtr); |
298 | List.init(changeInt, changePtr); |
208 | Lines.init(changeInt, changePtr, changeBool(*, typedPtr, untypedPtr*)) |
299 | Lines.init(changeInt, changePtr, changeBool, changeBool2(*, typedPtr, untypedPtr*)) |