TweetFollow Us on Twitter

September 95 - Newton Q & A: Ask the Llama

Newton Q & A: Ask the Llama

Q I have a program that communicates with the desktop. Part of the information sent is real numbers. I've found functions to stuff almost every other type of data into a binary object except real numbers. How do I do that?

A You have two choices. First, you could just print the real number as a string (using SPrintObject), send the string, and convert it back on the other side. Clearly this isn't a good idea if you want to maintain a high degree of precision. The other choice is to construct the correct type of binary object for the target desktop machine. In other words, take the Newton real representation and convert it into, say, IEEE floating point. Then you can use BinaryMunger to stuff the binary object into whatever packet of data you're constructing.

Note that Newton uses SANE representation for real numbers that are in the representable range. However, the representation of exceptions (such as NAN and infinity) are different and undocumented. At this time you should avoid converting these types of real numbers.

Q Can you give me a short and clear description of the different types of Newton memory?

A There are three important "pools" of so-called internal memory, each with different tradeoffs.

The NewtonScript heap (about 90K to 96K on current devices) is where all the runtime data from NewtonScript lives. Any result from the Clone family of calls will take up NewtonScript heap space. The view frame made at run time from your application templates will take up this heap space. NewtonScript heap space is very precious, so you should try to use as little of it as possible, especially when your application's base view isn't open.

The user store (192K in the MessagePad 100, larger on other devices) is where application packages stored internally live, and where soups are located. The entries in the soups are located in this space. While not quite as precious as the NewtonScript heap, this space can certainly run out. This is the space that's "extended" when a RAM PCMCIA card is inserted.

There is also some system heap space, which is used for, well, everything else. The viewCObjects and drawing objects live here. Recognition uses memory from here. You can run out of this space (in which case you get the Cancel/Restart dialog) but it's less of a programming issue.

Q I have an application that uses a protoRollBrowser. When I expand the items, they have lines separating them. I can't seem to get rid of them. Is this a bug?

A What you're seeing is part of the default definition of a protoRollItem. It includes a 1-pixel border. You can remove that border by modifying the viewFormat of your rollItems. In addition, you may want to set the fill to white.

Q I'm using a protoRoll (not protoRollBrowser) in my application. But it never shows up. What's the problem?

A You need to give it a viewFlags slot and make sure the Visible bit is checked. The default is Application and Clipping, but this won't make the protoRoll visible if it's included inside another view.

Q I have a text view that the user can use to enter text. I wanted to extend a selection. I knew the insertion caret was at the end of the selection, so I called SetHilite(newPoint, newPoint, nil), where newPoint is the new position for the selection extension, but I got no highlight. What's going wrong?

A The behavior is actually perfectly correct. There's a not quite obvious interaction between the caret and SetHilite. As shown in the table below, how SetHilite behaves depends on four things: the start and end character positions (the first two arguments) being equal, the value of unique (the third argument), the presence of a previously highlighted selection, and the presence of the caret. Note that the following explanation refers to the case of a single paragraph view, in which there can be only one selection; if there are multiple paragraph views, it's possible (with unique nil) to have multiple discontiguous selections.

Q I have an application that uses ADSP to connect to a server on the desktop. I want the server to handle multiple Newtons connected simultaneously. Unfortunately, if a connection fails after it's opened, the server doesn't seem to be able to identify it as a new connection when the Newton reconnects. This causes problems in the server's ability to handle multiple connections. Can you help?

A We'll assume that the Newton tries to reconnect shortly after losing the connection. In that case, the Newton doesn't generate a new connection ID, so your server probably acts as if the connection didn't close, while the Newton is acting as if it's establishing a new connection. Currently the only solution is to force the Newton to wait three minutes after an improper disconnect before trying to reconnect.

Q I have a communications program that always sends a string of the same size to the desktop. The string is quite large, and I would like to preallocate it and fill it with a particular value. What's the best way to do this?

A As with all things in programming, the answer is a tradeoff between space and time. Let's assume that you want a string of 2K characters filled with the character A, and that you control the contents of the string (that is, if you get user input, you make sure the input is a string). The first option is to allocate the string at compile time. Note that you shouldn't allocate your string constant with a double-quoted string ("a string"), since typing 2K (less the terminator) characters is monotonous and error prone. The way to allocate the string is with the following SetLength trick:

constant kNumberOfUnicodeCharsForString := 2048;   // 2K chars
DefConst('kMyBigString, call func()
   begin
      // SetLength uses bytes; Unicode chars are 2 bytes each
      local aStr := SetLength("", 
            2 * kNumberOfUnicodeCharsForString + 2);
      // initialize the string
      for i := 0 to k1KUnicodeChars - 1 do
         aStr[i] := $A;
      return aStr;
   end with ());

At run time you can clone kMyBigString and do what you need to fill it with characters. Note that the object is not a string; you would need to use StuffByte to put in individual characters.

The advantage of this method is that it's very fast: it averages less than one tick (60th of a second) for the clone. The disadvantage is that it puts a 4K object in your package (Unicode strings are two bytes per character). If you can't afford the 4K in your package, you need to generate the string at run time. Using the above code at run time averages 52 ticks.

Another possible runtime method is to use smart strings, which allow you to preallocate strings and concatenate them in a more efficient way. The first attempt at doing this seems to be inefficient, at an average of 175 ticks:

// defined constant somewhere in your project
constant  kNumberOfUnicodeCharsForString := 2048;

local s := SmartStart(2 * kNumberOfUnicodeCharsForString + 2);
local l := 0;
for i := 1 to kNumberOfUnicodeCharsForString do 
   l := SmartConcat(s, l, "A");
SmartStop(s, l);

However, simply concatenating two characters at a time reduces the average to 88 ticks; four characters reduces it to 44; and so on. A lesson here is that testing and measurement are your friends.

Q I'd like to train my dog to code in NewtonScript. How can I do that?

A I'm afraid the prospect isn't promising. Dr. J. L. Fredericks at SITAP (Stanford Institute for Training Animal Programmers) has been trying for ten years to train different animal species to program computers. Although he's had some success training dogs to do simple programs, he says, "Anything more than a simple statement is beyond them. No loops, no conditionals." Besides which, paws don't work well for moving mice. For Newton programming the best he has been able to achieve is training a rat to reset the Newton on command. As Dr. Fredericks says, "Never underestimate the usefulness of a ratset."

The llama is the unofficial mascot of Developer Technical Support in Apple's Newton Systems Group. Send your Newton-related questions to NewtonMail DRLLAMA or AppleLink DR.LLAMA. The first time we use a question from you, we'll send you a T-shirt.*

Thanks to our Newton Partners for the questions used in this column, and to jXopher Bell, Bob Ebert, David Fedor, Neil Rhodes, Jim Schram, Maurice Sharp, and Bruce Thompson for the answers. Thanks especially to Bob Ebert for the Newton memory description.*

Have more questions? Take a look at Newton Developer Info on AppleLink.*

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Top Mobile Game Discounts
Every day, we pick out a curated list of the best mobile discounts on the App Store and post them here. This list won't be comprehensive, but it every game on it is recommended. Feel free to check out the coverage we did on them in the links... | Read more »
Price of Glory unleashes its 1.4 Alpha u...
As much as we all probably dislike Maths as a subject, we do have to hand it to geometry for giving us the good old Hexgrid, home of some of the best strategy games. One such example, Price of Glory, has dropped its 1.4 Alpha update, stocked full... | Read more »
The SLC 2025 kicks off this month to cro...
Ever since the Solo Leveling: Arise Championship 2025 was announced, I have been looking forward to it. The promotional clip they released a month or two back showed crowds going absolutely nuts for the previous competitions, so imagine the... | Read more »
Dive into some early Magicpunk fun as Cr...
Excellent news for fans of steampunk and magic; the Precursor Test for Magicpunk MMORPG Crystal of Atlan opens today. This rather fancy way of saying beta test will remain open until March 5th and is available for PC - boo - and Android devices -... | Read more »
Prepare to get your mind melted as Evang...
If you are a fan of sci-fi shooters and incredibly weird, mind-bending anime series, then you are in for a treat, as Goddess of Victory: Nikke is gearing up for its second collaboration with Evangelion. We were also treated to an upcoming... | Read more »
Square Enix gives with one hand and slap...
We have something of a mixed bag coming over from Square Enix HQ today. Two of their mobile games are revelling in life with new events keeping them alive, whilst another has been thrown onto the ever-growing discard pile Square is building. I... | Read more »
Let the world burn as you have some fest...
It is time to leave the world burning once again as you take a much-needed break from that whole “hero” lark and enjoy some celebrations in Genshin Impact. Version 5.4, Moonlight Amidst Dreams, will see you in Inazuma to attend the Mikawa Flower... | Read more »
Full Moon Over the Abyssal Sea lands on...
Aether Gazer has announced its latest major update, and it is one of the loveliest event names I have ever heard. Full Moon Over the Abyssal Sea is an amazing name, and it comes loaded with two side stories, a new S-grade Modifier, and some fancy... | Read more »
Open your own eatery for all the forest...
Very important question; when you read the title Zoo Restaurant, do you also immediately think of running a restaurant in which you cook Zoo animals as the course? I will just assume yes. Anyway, come June 23rd we will all be able to start up our... | Read more »
Crystal of Atlan opens registration for...
Nuverse was prominently featured in the last month for all the wrong reasons with the USA TikTok debacle, but now it is putting all that behind it and preparing for the Crystal of Atlan beta test. Taking place between February 18th and March 5th,... | Read more »

Price Scanner via MacPrices.net

AT&T is offering a 65% discount on the ne...
AT&T is offering the new iPhone 16e for up to 65% off their monthly finance fee with 36-months of service. No trade-in is required. Discount is applied via monthly bill credits over the 36 month... Read more
Use this code to get a free iPhone 13 at Visi...
For a limited time, use code SWEETDEAL to get a free 128GB iPhone 13 Visible, Verizon’s low-cost wireless cell service, Visible. Deal is valid when you purchase the Visible+ annual plan. Free... Read more
M4 Mac minis on sale for $50-$80 off MSRP at...
B&H Photo has M4 Mac minis in stock and on sale right now for $50 to $80 off Apple’s MSRP, each including free 1-2 day shipping to most US addresses: – M4 Mac mini (16GB/256GB): $549, $50 off... Read more
Buy an iPhone 16 at Boost Mobile and get one...
Boost Mobile, an MVNO using AT&T and T-Mobile’s networks, is offering one year of free Unlimited service with the purchase of any iPhone 16. Purchase the iPhone at standard MSRP, and then choose... Read more
Get an iPhone 15 for only $299 at Boost Mobil...
Boost Mobile, an MVNO using AT&T and T-Mobile’s networks, is offering the 128GB iPhone 15 for $299.99 including service with their Unlimited Premium plan (50GB of premium data, $60/month), or $20... Read more
Unreal Mobile is offering $100 off any new iP...
Unreal Mobile, an MVNO using AT&T and T-Mobile’s networks, is offering a $100 discount on any new iPhone with service. This includes new iPhone 16 models as well as iPhone 15, 14, 13, and SE... Read more
Apple drops prices on clearance iPhone 14 mod...
With today’s introduction of the new iPhone 16e, Apple has discontinued the iPhone 14, 14 Pro, and SE. In response, Apple has dropped prices on unlocked, Certified Refurbished, iPhone 14 models to a... Read more
B&H has 16-inch M4 Max MacBook Pros on sa...
B&H Photo is offering a $360-$410 discount on new 16-inch MacBook Pros with M4 Max CPUs right now. B&H offers free 1-2 day shipping to most US addresses: – 16″ M4 Max MacBook Pro (36GB/1TB/... Read more
Amazon is offering a $100 discount on the M4...
Amazon has the M4 Pro Mac mini discounted $100 off MSRP right now. Shipping is free. Their price is the lowest currently available for this popular mini: – Mac mini M4 Pro (24GB/512GB): $1299, $100... Read more
B&H continues to offer $150-$220 discount...
B&H Photo has 14-inch M4 MacBook Pros on sale for $150-$220 off MSRP. B&H offers free 1-2 day shipping to most US addresses: – 14″ M4 MacBook Pro (16GB/512GB): $1449, $150 off MSRP – 14″ M4... Read more

Jobs Board

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.