DIRECTORY Path; PathImpl: CEDAR MONITOR EXPORTS Path ~ BEGIN OPEN Path; RealsFromSegs: PROC[nSegs: NAT, type: SegType] RETURNS[NAT] ~ { realsPerSeg: NAT ~ (SELECT type FROM curve => 6, conic => 5, arc => 4, ENDCASE => 2); n: INT ~ nSegs*realsPerSeg; RETURN[MIN[n, NAT.LAST]]; }; New: PUBLIC PROC[nSegs: NAT, expectedType: SegType _ move] RETURNS[PATH] ~ { segsMax: NAT ~ MAX[4, nSegs]; realsMax: NAT ~ RealsFromSegs[segsMax, expectedType]; segs: Segs ~ NEW[SegsRep[segsMax] _ [length: 0, array: ]]; reals: Reals ~ NEW[RealsRep[realsMax] _ [length: 0, array: ]]; RETURN[NEW[PathRep _ [segs: segs, reals: reals, lp: [0, 0]]]]; }; nScratch: NAT ~ 3; ScratchIndex: TYPE ~ [0..nScratch); scratch: ARRAY ScratchIndex OF PATH _ ALL[NIL]; Alloc: ENTRY PROC RETURNS[PATH] ~ { FOR i: ScratchIndex IN ScratchIndex DO path: PATH ~ scratch[i]; IF path#NIL THEN { scratch[i] _ NIL; RETURN[path] }; ENDLOOP; RETURN[NIL]; }; Free: ENTRY PROC[path: PATH] ~ { FOR i: ScratchIndex DECREASING IN ScratchIndex DO IF scratch[i]=NIL THEN { scratch[i] _ path; RETURN }; ENDLOOP; }; ObtainScratch: PUBLIC PROC[nSegs: NAT, expectedType: SegType _ move] RETURNS[PATH] ~ { ERROR; }; ReleaseScratch: PUBLIC PROC[path: PATH] ~ { ERROR; }; LastPoint: PUBLIC PROC[path: PATH] RETURNS[x, y: REAL] ~ { RETURN[path.lp.x, path.lp.y]; }; LastPointP: PUBLIC PROC[path: PATH] RETURNS[Pair] ~ { RETURN[path.lp]; }; GetSegs: PROC[path: PATH] RETURNS[Segs] ~ { segs: Segs ~ path.segs; IF segs.length moveToP[[reals[i], reals[i+1]]]; line => lineToP[[reals[i], reals[i+1]]]; curve => curveToP[[reals[i], reals[i+1]], [reals[i+2], reals[i+3]], [reals[i+4], reals[i+5]]]; conic => conicToP[[reals[i], reals[i+1]], [reals[i+2], reals[i+3]], reals[i+4]]; arc => arcToP[[reals[i], reals[i+1]], [reals[i+2], reals[i+3]]]; ENDCASE => ERROR; ENDLOOP; }; END. DPathImpl.mesa Doug Wyatt, June 28, 1984 11:21:20 am PDT Ê?˜šœ ™ J™)J˜—šÏk ˜ J˜J˜—Jšœ œ˜Jšœ˜ Jšœœœ˜J˜š Ïn œœœœœ˜?Jš œ œœœ#œ˜UJšœœ˜Jšœœœœ˜J˜J˜—š žœœœœ œœ˜LJšœ œœ ˜Jšœ œ(˜5Jšœ œ*˜:Jšœœ,˜>Jšœœ4˜>J˜J˜—Jšœ œ˜Jšœœ˜#Jš œ œœœœœ˜/J˜š žœœœœœ˜#šœœ˜&Jšœœ˜Jš œœœœœ ˜4Jšœ˜—Jšœœ˜ J˜J˜—šžœœœœ˜ šœ œœ˜1Jšœ œœœ˜5Jšœ˜—J˜J˜—šž œœœœ˜DJšœœ˜Jšœ˜J˜—šžœœœœ˜+Jšœ˜J˜J˜—J˜š ž œœœœœœ˜:Jšœ˜J˜J˜—š ž œœœœœ ˜5Jšœ ˜J˜J™—šžœœœœ ˜+J˜Jšœœœ˜)Jšœœ˜ J˜J˜—š žœœœœœ ˜5Jšœ˜Jšœœœ˜1Jšœœ˜ J˜J˜—š žœœœœœ˜/J˜J˜!Jšœœ˜Jšœœ˜J˜!J˜J˜ J˜J˜J˜J˜—šžœœœœ˜-J˜J˜J™—š žœœœœœ˜/J˜J˜!Jšœœ˜Jšœœ˜J˜!J˜J˜ J˜J˜J˜J˜—šžœœœœ˜-J˜J˜J™—š žœœœœœ˜-J˜J˜—š žœœœœœ˜-J˜J˜J™—š žœœœœœ˜BJ˜J˜!Jšœœ˜Jšœœ˜J˜"J˜J˜J˜J˜J˜J˜J˜J˜J˜J˜—šžœœœœ˜7J˜2J˜J˜—š žœœœœœœ˜CJ˜J˜!Jšœœ˜Jšœœ˜J˜"J˜J˜J˜J˜J˜J˜J˜Jšœ˜J˜—š žœœœœœ˜