The mixin class ConditionalCommand allows an icon or button in the magic lamp to decide whether or not it is appropriate for it to be visible. Viewables that do not necessarily need to be visible all the time should mix in with this class and override the operation ShowCommand() to make this decision.
The Magicbus peripheral number is an index rather than a hardware related number. This peripheral number is returned by PeripheralInfo().The command codes sent by clients are sequential numbers instead of being actual hardware commands.
Peripheral requests can now be anywhere from two to sixteen bytes long, as opposed to being limited to just two bytes.
The interface to the SendMagicBusCmd(), ReadPeripheral(), WritePeripheral() and QueueMagicBusCmd() operations of class MagicBus have changed. The buffer point parameters for these methods are now pointers to unsigned long instead of pointers to unsigned characters because the new hardware requires longword alignment of memory blocks.
Removed the class definitions of unused MagicBus clients.
The Rosemary simulator includes some new features.There is no longer a separate simulator required for screen shots. This functionality has been moved into a new menu item in the Edit menu.
The Macintosh simulator now uses 16-bit samples to play sound. This means that Macintosh System Software 7.5.3 is required to be able to run the simulator.
The Macintosh simulator is now Power Mac native. It will no longer run on 680x0 Macintoshes.
Object dumping no longer limits the length of object names to 64 characters.
The Examine menu contains a new command that allows you to dump the change in size and position of an object after having stretched it. This is useful for localization layout changes.
The Examine menu contains a new command that allows you to find an object by its tag.
It is possible to paste and type Japanese text in the simulator provided that you have a Japanese input method running on the Mac. The simulator supports switching between Japanese and European keyboards on the Mac.
Many simulator menu items which are no longer relavent in the new runtime have been removed: "Fill Transient Memory," "Find System References," "Find Indexical Candidates," "Monitor Memory Management," and "Log Packing."
Rosemary does not support MagicMail mail services. PersonaLink, which was a concrete implementation of the MagicMail framework, has been removed. Many MagicMail and PersonaLink classes have been removed.The new mail framework in Rosemary provides new classes to make it easier for Magic Cap to communicate with existing mail services, and with Internet services.
Rosemary splits Magic Cap mail into several component pieces. The mail framework component is the low level framework that defines the interface for communication with external mail services. This framework is completely new for Rosemary. The goal for the new framework is to allow easier connectivity to existing mail services and mail servers. This means that it has little knowledge of the higher level components such as the user interface.The most important parts of the new framework are the encoders and decoders. These are used to translate text, images and other types of content for transmission over mail or other network services. A system can have multiple encoders and decoders, maintained in registries. Magic Cap uses the MIME encoding standard so that it can communicate with other mail services.
The interface for sending mail is implemented by three classes: MailHandler, MailFormatter and MagicCapMailFormatter. Class MailHandler defines the interface for how mail should be sent to mail services. Class MailFormatter is responsible for taking the contents of telecards and passing them to mail handlers. Class MagicCapMailFormatter implements the MIME-based Magic Cap mail format. The class MagicCapMailExtras is used to encapsulate everything about a telecard which can't be expressed in MIME.
Class ContentTypeLabel allows mail formatters and mail handlers to talk to each other about the content of mail, described as MIME parts.
Instances of class UndecodedPartStamp are used to represent MIME parts which couldn't be decoded. Tapping these stamps brings up a window which displays a description of the part. The stamp and window are referenced by the indexicals iUndecodedPartStamp and iUndecodedPartWindow respectively.
MIME parts without an explicit content type default to "text/plain; charset=US-ASCII".
The new mail framework uses the encoders to encode message contents, instead of the wireline encoding used in Magic Cap 1.0. The new class PartEncoder can encode any Magic Cap object. It also provides the base class for other encoders. The 1.x mail framework used wireline encoding to flatten objects before they are sent. The new mail framework uses a new flattener, implemented by the Flattener class.
The flattener is used to convert objects into the frozen format that is used for sending objects. This replaces the conversion that the wireline encoder did for Magic Cap 1.x. The frozen object format consists of a frozen header, which is a compat form of locators and block header flags; the object name, if it exists; the length of the object; the words of the object.
Directory requests are initiated by the "get info" button in the name cards scene. The interface for starting a request is defined by ElectronicMailService_RequestDirectoryInfo.
Renamed ElectronicMailService_Send and SendAnother() to Transfer() and TransferAnother() respectively, since they don't necessarily send anything, and naming is now consistent with AbortTransfer(), CompleteTransfer(), etc. Renamed Connection_TransferAnother to TransferNext() so ElectronicMailService can use the TransferAnother name.
The system no longer has a concept of a preferred service provider. The indexical iPreferredServiceProvider has been moved into the PersonaLink package and renamed iPersonaLinkProvider.
In the place of a preferred service provider, Rosemary introduces the new class ServiceChoice. A service choice uniquely identifies the combination of a communications service client, a service provider and service information (i.e. a specific mailbox). Moved the CollectMail() operation from the ProviderAddressCard and ServiceProviderAddresses classes into ServiceChoice. In many places, a ServiceChoice is passed around instead of a ProviderAddressCard.
Class ServiceChoice contains a field, means, which allows the preferred means to be overridden. This replaces the means fields in classes DeliveryChoice and TransferTicket, both of which contain a ServiceChoice.
The method ServiceChoices_CanSharedConnection allows two services choices to decide whether they can share an underlying connection. This allows Internet mail service clients to send and collect mail on the same connection.
The DeliveryChoice class now stores a ServiceChoice instead of an ElectronicMailService. DeliveryChoice also stores a Means object instead of a Way. Way was never used as other than a way... er, rather... a means of storing a Means. The Way object is now created on the fly when it's needed. Renamed operations that had "Way" in the name to use "Means". Class PostageDisplay stores a list of Means instead of a list of Ways. Removed the image and means fields from DeliveryChoice. The Means() and Image() attributes now call Means() and PostageImage() on the delivery choice's service choice.
TransferTickets now store a ServiceChoice instead of a service. This means that ProviderAddressCard objects no longer need to be stored in TransferTicket mixins since storing the ServiceChoice in the TransferTicket provides all the necessary information.
Because ProviderAddressCards are no longer passed around, the indexicals iBeamProviderCard, iSendingMailProviders and iCollectinMailProviders are no longer needed.
The Post Office no longer "contacts mail services". Instead, it uses mail service clients to contact service providers. Some methods have been renamed to reflect this new lingo. PostOffice_ContactMailServices has been renamed PostOffice_InitiateMailServices and InitiateIncomingMail() is now called CollectMailForServiceChoice(). Similarly, the indexical iEnabledCollectingMailProviders has been renamed iCollectingMailServiceChoices.
PostOffice_InitiateMailServices is now passed a parameter indicating which services (send and/or collect) are desired rather than a usage parameter that indicated where it was called from.
Removed the MemoryReserve() and ProtocolClass() attributes from the ElectronicMailService class. These attributes were hooks for MagicMail.
Because of the way the alpha simulator handles packages, calling Message_EachDeliveryChoice wil cause Magic Cap to crash.
Because Form objects are shared in Rosemary, received forms should be created with CopySharedNear() instead of CopyNear().
Added class ServiceChoiceList which overrides Search() to use FindSameChoice(), and provides the interface UpdateServiceChoicesForCollectingMail(). This is used as a condition for the mail collection rules.
Added support for RFC1522 encoding and decoding.
Added hooks for mail summaries. Added the methods CollectServiceChoicesForMailSummary() and MakeSummaryTransferTicket() to ElectronicMailService. Added PostOffice_MailSummaryForServiceChoice, which kicks off a mail summary collection for a particular service choice. Added a MailSummaryScene() read only attribute to ElectronicMailService. This is the scene a mail service uses to display mailbox summaries. Tapping the "report" button in the in box for a mailbox will take the user to the summary scene specified by this attribute for that mail service. The indexical iCurrentMailSummaryChoice is the summary scene that will appear when the user option-taps the "report" button.
Added the attribute ElectronicMailService_ConnectionWillUseModem. The service can use this attribute to determine if the connection will go over the phone line. This is useful for providing delays to allow the modem to reset when necessary. The FaxService class specifies true for this attribute.
The field TransferTicket_serviceChoice is no longer weak. Transfer tickets now store a copy of the requested service choice.
The method PostOffice_AbortAll is called during a warm boot to clean up any communication transfers that were in progress. However, AbortAll() was originally designed for aborting communication sessions due to the device running out of memory. Created a new intrinsic, PostOffice_AbortAllCommsOutOfMemory that is used to deal with the memory specific stuff. AbortAll() is now used just to deal with cleaning up transfers in progress.
The new operation PostOffice_CollectServiceChoicesForMailSummary which asks all mail services listed in iSummaryMailServices to collect a list of the mailboxes they can get summaries for.
Added the intrinsic ChooseTextEncoding() for deciding which MIME character set and transfer encoding to use for a given text. It tries ASCII, then Latin-1, then the local-defined encoding, if any.
Added the field MailFormatter_formToFormat, and the corresponding attribute. The form specified in this field is now sent with the telecard instead of the form specified by InstalledForm.
The MakeTransferTicket() and CollectServiceChoicesFor() call families are no longer defined as noMethod. If your mail service does not support mail summaries, it no longer needs to define dummy overrides.
Removed the following obsolete fields from TransferTicket: desiredDuration, maximumDuration, data, connection, incoming, serviceTimeOffset, and transferAborted. These have all been renamed reserved.
Removed the operation ElectronicTransferTicket_ConnectionWillUseModem.
Renamed Message_originatorCard to Message_sender and replaced the OriginatorCard() attributes with a read only Sender() attribute. The Sender() attribute in Telecard is now read only as well.
Rosemary splits Magic Cap mail into several component pieces. The user interface component contains the classes which define the UI pieces that the user deals with. This includes the in and out boxes, delivery and summary reports, etc.All mail statistics data and operations have been moved into class MailStatView, instead of being spread out across several classes. Any mail service should now be able to use this class. Packages should create their own instance of MailStatView, the old iMailStatView indexical does not exist in Rosemary.
The delivery report and tracking framework has been cleaned up and heavily restructured in Rosemary. The interface has been changed from being data-driven (based on Magicmail classes) to a simple procedural interface. Merged class MultiDeliveryReportCard into class DeliveryReportCard and removed iDeliveryReportServices in favor of explicit attributes of class ElectronicMailService. New routines to create and maintain delivery report cards have been added. Removed the operation Telecard_HasDeliveryTracking. Clients now decide for themselves.
There are a couple of differences in how mail summaries work in Rosemary and in older versions of Magic Cap. Rosemary mail summaries do not allow you to forward a message without collecting it. Removing a message from a mail summary and tapping "update" will not remove the message from the service mailbox, in accordance with POP standards. When multiple mail services that implement summaries are present, tapping the "report" button in the in box will bring up a list of mailboxes that can offer summaries.
Removed the "set time using mail service" rule and related objects. Removed iDateIsIncorrectText, iSynchronizeOrNotText and iSystemAndServiceTimeDifferGreatly. Removed field System_synchronizedToService and the corresponding attribute. Removed the operation System_SynchronizeWith.
Because Magic Cap has been broken into packages, objects are going to wind up in strange places in memory. Replaced Stationery_CreateMessage with Stationery_CreateMessageNear to make people think about where the message should be going.
The send button in the message creation scene now displays a different image depending on whether or not a rich content message is being sent.
Merged the operation HandleNotReadyToSend() into IsReadyToSend(). IsReadyToSend() takes an additional boolean parameter that tells it whether or not to do something in the case when Magic Cap is not ready to send in addition to just returning whether it can send or not.
The measure card feature has been removed.
Removed the defaultTool field of MessageCreationScene. The flags field of this class has been split into individual boolean attributes.
Class PostageDisplay stores a list of Means instead of a list of Ways. The flags field of this class has been split into individual attributes.
Added new classes MailCheckboxListView and MailChoiceBox which generate to handle the interface for the "collect from multiple services" window. Their choices are based on Post Office functions.
The Rosemary Magic Cap API tries to avoid having multiple operations have the same name but different interfaces. Since Magic Cap doesn't do polymorphism, this is just plain confusing. Many operations have been removed or renamed to avoid this problem. All occurences of Entity() in Magic Cap are now attributes. Some classes had defined two operations, Entity() and SetEntity().
Rosemary introduces many routines to convert numbers into text representations and back. The new API uses the term numeral to describe a Text object which contains a numeric value. For example, the method NumeralFromDouble() takes a floating point value and returns a Text object containing that value.Most numerals returned by Magic Cap will be formatted according to the local numeric formatting results. To get an unformatted textual representation of a number, use the PlainNumeral() method.
Magic Cap communicators based on Rosemary implement a software based modem. The methodology for connecting and communicating with the modem remains unchanged; you should use the modem object referred to by the iModem indexical. Be aware that because the modem is software based, performance of your package will degrade while a communication session is in progress.Class ExternalModem was introduced in Magic Cap 1.5 to support additional modems on versions of Magic Cap running on desktop computers. It defines the interface for finding the correct command string for putting modems into a sane state, into fax mode, and into data mode. ExternalModem is abstract; each Magic Cap platform will provide a concrete subclass.
The Modem class is now abstract. Two classes, SoftwareModem and HardwareModem are the two system classes that implement modem functionality.
Added the operation Modem_WriteModemCommand, which lets you specify a text object with a modem command to be send to the modem.
Renamed Modem_OpenPort and Modem_ClosePort to OpenModemPort() and CloseModemPort(). Renamed SerialServer_OpenPort and SerialServer_ClosePort to OpenSerialPort() and CloseSerialPort().
Modem_CanConnect now returns !InUse(self) instead of always returning true. Pushed the code in Modem_WaitForLiteral down to the new method HardwareStream_SearchWithTimeout so it can be shared by other types of streams.
Added the method AnswerCall(). This allows Magic Cap to support modem answering. A second method, AnswerModem(), allows Magic Cap to answer a call in fax mode.
The Rosemary Magic Cap API tries to avoid having multiple operations have the same name but different interfaces. Since Magic Cap doesn't do polymorphism, this is just plain confusing. Many operations have been removed or renamed to avoid this problem. Renamed DialNumber() to DialNumberWithResultCode() since the interface of this operation in class Modem doesn't match the interface defined by the phone server.