Subversion Repositories Kolibri OS

Rev

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*))