(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) (* by Steve Glassman, Mark Manasse and Greg Nelson *) (* Last modified on Tue Mar 10 19:02:43 1992 by steveg *) (* modified on Mon Feb 24 13:56:35 PST 1992 by muller *) (* modified on Wed Sep 11 15:22:03 PDT 1991 by msm *) <*PRAGMA LL*> UNSAFE MODULE Batch; IMPORT VBTTuning, BatchRep, Rect, BatchUtil; VAR freemu := NEW(MUTEX); free: T; batchSize := VBTTuning.BatchSize; PROCEDURE New(len: INTEGER := -1): T = VAR res: T; BEGIN IF len = -1 THEN len := batchSize END; IF len > batchSize THEN res := NEW(T); res.b := NEW(BatchRep.Array, (3 * len) DIV 2) ELSE LOCK freemu DO res := free; IF res # NIL THEN free := free.link END END; IF res = NIL THEN res := NEW(T); res.b := NEW(BatchRep.Array, batchSize) END END; res.link := NIL; res.clipped := BatchUtil.ClipState.Tight; res.next := ADR(res.b[0]); res.scrollSource := Rect.Empty; res.clip := Rect.Empty; RETURN res END New; PROCEDURE Free(VAR ba: T) = BEGIN LOCK freemu DO (* put ba on free list if it is standard size *) IF NUMBER(ba.b^) = batchSize THEN ba.link := free; free := ba ELSE DISPOSE(ba.b); DISPOSE(ba) END END; ba := NIL END Free; BEGIN END Batch.