<> <> <> <> DIRECTORY Basics, IO, Rope, RoseTransduce, RoseWireClasses, RoseWireTypes, VFonts; RoseDriveImpl: CEDAR PROGRAM IMPORTS EXPORTS RoseWireClasses = BEGIN OPEN RoseWireTypes; GetDrive: PUBLIC PROC RETURNS [RoseWireClass] = {RETURN[driveClass]}; driveSuperClass: RoseWireSuperClass _ NEW[RoseWireSuperClassRec _ [ GetType: DriveGetType, ListFormats: NIL, GetFormat: NIL, Bits: DriveBits, MesaRepresentation: DriveMesaRepresentation, MesaRepAux: DriveMesaRepAux, flavor: drive ]]; driveClass: RoseWireClass _ NEW[RoseWireClassRec _ [ structure: atom, dereference: FALSE, addressContaining: FALSE, classData: NIL, super: driveSuperClass]]; DriveGetType: PROC [rwc: RoseWireClass, wire: Wire] RETURNS [rwt: RoseWireType] = { IF wire.structure # atom THEN ERROR; RETURN[driveType]; }; driveType: PUBLIC RoseWireType _ NEW[RoseWireTypeRec _ [ class: driveClass, typeData: NIL, length: 0, other: NIL]]; BitsPerDrive: NAT = SIZE[PACKED ARRAY [0 .. 32) OF Drive] / SIZE[PACKED ARRAY [0 .. 32) OF BOOL]; DriveBits: PROC [rwt: RoseWireType] RETURNS [n: INT] = {RETURN[BitsPerDrive]}; DriveMesaRepresentation: PROC [rwc: RoseWireClass] RETURNS [mesa: Mesa] = { mesa _ [mesa: "Drive"]}; DriveMesaRepAux: PROC [rwc: RoseWireClass] RETURNS [mesa: Mesa] = { mesa _ [ mesa: "Drive: TYPE = RoseBehavior.Drive", directory: LIST["RoseBehavior"] ]; }; END.