DIRECTORY BitOps, TamarinOps, TamarinOpsUtils, TamarinPorts, Core, CoreClasses, CoreCreate, CoreProperties, Ports, Rosemary, RosemaryUser; TamarinPortsImpl: CEDAR PROGRAM IMPORTS Ports, TamarinOpsUtils EXPORTS TamarinPorts = BEGIN Word: TYPE = TamarinOps.Word; SetPVal: PUBLIC PROC [p: Ports.Port, port: NAT, value: CARD] = { SELECT p[port].levelType FROM l => p[port].l _ IF value=0 THEN L ELSE H; ls => Ports.LCToLS[value, p[port].ls]; c => p[port].c _ value; lc => p[port].lc _ value; b => SELECT value FROM 0 => p[port].b _ FALSE; 1 => p[port].b _ TRUE; ENDCASE => ERROR; ENDCASE => ERROR; }; GetPVal: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [value: CARD] = { value _ SELECT p[port].levelType FROM l => IF p[port].l = H THEN 1 ELSE 0, ls => Ports.LSToLC[p[port].ls], c => p[port].c, lc => p[port].lc, b => IF p[port].b THEN 1 ELSE 0, ENDCASE => ERROR; }; HasXs: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [hasXs: BOOL _ FALSE] = { SELECT p[port].levelType FROM l => hasXs _ p[port].l = X; ls => FOR bit: NAT IN [0..p[port].ls.size) WHILE NOT hasXs DO hasXs _ p[port].ls[bit] = X; ENDLOOP; c => hasXs _ FALSE; lc => hasXs _ FALSE; b => hasXs _ FALSE; ENDCASE => ERROR; }; SetP: PUBLIC PROC [p: Ports.Port, port: NAT, value: CARD] = { SetPVal[p, port, value]; p[port].d _ force; }; ClrP: PUBLIC PROC [p: Ports.Port, port: NAT, xit: BOOL _ FALSE] = { IF xit THEN SELECT p[port].levelType FROM l => p[port].l _ X; ls => Ports.SetLS[p[port].ls, X]; c => p[port].c _ 0; lc => p[port].lc _ 0; b => p[port].b _ FALSE; ENDCASE => ERROR; p[port].d _ none; }; CheckP: PUBLIC PROC [p: Ports.Port, port: NAT, value: CARD] = { SetPVal[p, port, value]; p[port].d _ expect; }; SetX: PUBLIC PROC [p: Ports.Port, port: NAT] = { ClrP[p, port]; p[port].d _ force; }; PortToBool: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [BOOL] = { RETURN[GetPVal[p, port] = 1]; }; PortToNat: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [NAT] = { RETURN[GetPVal[p, port]]; }; PortToCard: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [CARD] = { RETURN[GetPVal[p, port]]; }; PortToTamWord: PUBLIC PROC [p: Ports.Port, port: NAT] RETURNS [Word] = { RETURN[TamarinOpsUtils.CardToWord[GetPVal[p, port]]]; }; END. ®TamarinPortsImpl.mesa Copyright Ó 1987 by Xerox Corporation. All rights reserved. April 6, 1987 6:06:01 pm PDT Last Edited by: Krivacic April 6, 1987 4:08:37 pm PDT Êæ˜JšÏnœ’Ïk™¥J™šž ˜ Jšœ€˜€—J˜J˜J˜šœžœž˜Jšžœ˜Jšžœ ˜Jšœž˜J˜Icodešœžœ˜K˜š œžœžœžœ žœ˜@šžœž˜Kšœžœ žœžœ˜*Kšœ&˜&K˜K˜˜šžœž˜Kšœžœ˜Kšœžœ˜Kšžœžœ˜——Kšžœžœ˜—Kšœ˜K˜—š œžœžœžœžœ žœ˜IKšœ˜šžœž˜Kšœžœžœžœ˜$Kšœ˜K˜K˜Kšœžœ žœžœ˜"Kšžœžœ˜—Kšœ˜K˜—šœžœžœžœžœ žœžœ˜OK˜šžœž˜Kšœ˜š œžœžœžœžœžœžœ˜>Kšœ˜Kšžœ˜—Kšœ žœ˜Kšœžœ˜Kšœžœ˜Kšžœžœ˜—Kšœ˜K˜—š œžœžœžœ žœ˜=Jšœ˜K˜K˜—K˜š œžœžœžœžœžœ˜Cšžœž˜ šžœž˜Kšœ˜Kšœ!˜!Kšœ˜Kšœ˜Kšœžœ˜—Kšžœžœ˜—K˜K˜—J˜š œžœžœžœ žœ˜?Jšœ˜K˜K˜—K˜šœžœžœžœ˜0Kšœ˜K˜K˜—J˜J˜š œžœžœžœžœžœ˜EJšžœ˜J˜—J˜š œžœžœžœžœžœ˜CJšžœ˜Jšœ˜J˜—š œžœžœžœžœžœ˜EJšžœ˜Jšœ˜—J˜š œžœžœžœžœ ˜HJšžœ/˜5Jšœ˜—J˜Jšžœ˜——…—® B