TweetFollow Us on Twitter

Time Retrieval
Volume Number:5
Issue Number:1
Column Tag:Basic School

Related Info: Time Manager

Time Retrieval and Storage Techniques

By Dave Kelly, MacTutor Editorial Board

Note: Source code files accompanying article are located on MacTech CD-ROM or source code disks.

Time Retrieval and Storage Techniques

It’s only a matter of time. Anybody see the ad for the MacTutor of the future in the November, 1988 MacTutor? The ad may sound like a joke about the 100th anniversary of MacTutor, but some of the “future” has already been invented. I did some thought on the subject of the Basic School column described in the ad, which is also the title of this column. There are two basic subjects implied by the title, time retrieval and time storage.

From a philosophical point of view you may ask, how can time be saved or retrieved? Looking at the answer from that perspective would lead us to a discussion of Einstein and his theory of relativity which is beyond the scope and intent of this column. Instead let’s look at some ways which we can use time to our advantage and see how storage and retrieval fits into the scheme of things.

From a user level on the Macintosh there is one time retrieval/storage mechanism that is accessible to all “the rest of us”. The example I refer to is the Alarm mechanism built into the clock chip. The date and time setting is copied (“retrieved”) at system startup from the clock chip into its own low-memory location. It’s stored there as the number of seconds since midnight, January 1, 1904, and is updated every second. The range of the clock chip is from January 1, 1904 through February 6, 2040 (does that mean that 51 years from now I’ll need to replace my clock chip?). The low-memory location can be access by your program. BASIC (every brand) includes its own time retrieval command. In True Basic the TIME and TIME$ functions are provided. TIME returns the number of seconds since midnight in tenths of seconds. The TIME$ function returns a string that contains the time as measured by the 24-hour clock with resolution in seconds. ZBasic and MS QuickBASIC uses the TIMER function which returns the seconds since midnight (similar to the True Basic TIME function) and TIME$ which works the same as in True Basic. The problem is that the TIMER function does not provide enough resolution. At least the True Basic TIME function provided tenths of seconds or better resolution. Since we know that other languages are able to access the time in greater resolution, we may use the same function (ROM) to retrieve the time in greater resolution. This is especially important for benchmark tests where two compiled programs are being timed and the difference is tenths of seconds or better. In benchmarks that have been done in the past, sometimes the TIME function was used and there was rounding off to either 0 or 1 second. A program running in 0 seconds is absurd, but that was the best we could do with MS Basic at the time. QuickBASIC and ZBasic both allow access to the TickCount call (Macintosh ROM). In QuickBASIC a typical benchmark might be implemented such as:

Figure 1. The Time Machine

First initialize the ToolBox routine:

TOOLBOX “I”

This must be used before any other ToolBox statement in the program. Now define a sub program or routine that can be called to replace the other time functions usually used in the benchmark.

SUB Tick (Count&) STATIC
TrapNo% = &HA975
Count& = 0&  : ‘Define the variable
ToolBox “L”, TrapNo%, Count&
END SUB

Now call Tick(Count&) whenever you need the time. A tick is one-sixtieth of a second, enough for the tenth of a second accuracy provided by True BASIC’s function. In ZBasic it is even easier to call TickCount. In ZBasic just use the function directly:

Count&=FN TICKCOUNT

As you can see, accessing real time is really the simple part of the job. Accessing stored time is another aspect. I’ll leave the subject of how the stored time became stored for later except to say that the Parameter RAM also stores the alarm setting. You can set the alarm with the Alarm Clock DA (included with your system software).

The Analog Alarm Clock program included here demonstrates how you can retrieve the stored alarm time from the low-memory area. The Alarm time is stored at $200. The getAlarm routine retrieves the time by peeking at memory directly. The result is then converted to date information via the secs2date toolbox routine. The Analog Clock program reveals some problems. The date conversion library routines are used to convert seconds to dates and dates to seconds. Secs2Date works fine, but there is a problem with the Date2Secs routine. This means that the Date2Secs routine must be called a different way. Fortunately, QuickBASIC provides the ToolBox call which allows you to make ROM calls yourself. The following lines replace the Date2Secs library routine:

ToolBox “I”

...   (Don’t forget to initialize the toolbox)


TrapNo%=&HA9C7
ToolBox “R”, TrapNo%, ReturnArray&(0),VARPTR(DtRec%(0))
Al&=ReturnArray&(2)

It’s unfortunate that we have to go through that trouble, but that’s just the way it goes. I confess it took awhile before I realized that I wasn’t going to be able to get it to work without the ToolBox library call.

In the program, alarm time is taken from parameter RAM and then it’s updated when changed when the alarm is turned on. Be careful when poking around the parameter RAM. If the wrong parameter gets changed you may have to Zap the parameter RAM to get started. You can do this by removing your MacPlus battery for a few minutes when your power is off or by holding down command-option when opening the control panel on newer Mac systems.

Flashing the menu bar like the Alarm Clock DA does will be left for another day. Anybody know how to do that from Basic? What I’m not sure of is where the alarm status is stored. Happy New Year!

‘Analog Alarm Clock Program
‘©1989 MacTutor
‘by Dave Kelly

DIM DtRec%(6),CenterRect%(3),pattern%(3)
ToolBox “I”
DIM ReturnArray&(5)
GOSUB getAlarm
false=0:true=NOT false
PI=3.14159

‘Set up menus
MENU 1,0,1,”File”
MENU 1,1,1,”Turn Alarm On ”
MENU 1,2,0,”-”
MENU 1,3,1,”Quit”
CmdKey 1,3,”Q”

‘ Get Screen size
sheight=SYSTEM(6)
swidth=SYSTEM(5)
WINDOW 1,”Analog Alarm Clock”,(4,44)-(swidth-4,sheight-4),6

‘Find the center of the window, centerx%,centery%
‘ This should work with any size of screen
wheight%=WINDOW(3)
wwidth%=WINDOW(2)
centerx%=wwidth%/2
centery%=wheight%/2
circledia=centery%-25
GOSUB SetupClock
ON MENU GOSUB MenuEvent
ON DIALOG GOSUB DialogEvent
DIALOG ON:MENU ON

Loop:
forecolor 33:’ change color to black
t$=TIME$:’ Get the current time and separate into variables
hour$=LEFT$(t$,2)
Min$=MID$(t$,4,2)
Sec$=RIGHT$(t$,2)
H=VAL(hour$):M=VAL(Min$):S=VAL(Sec$)
IF H>12 THEN H=H-12
H=H+M/60

‘ Compute the angles for each hand of the clock
SecAngle=(360-S*6)*PI/180
MinAngle=(360-M*6)*PI/180
HAngle=(360-H*30)*PI/180

‘Draw the second hand
CALL MOVETO (centerx%,centery%)
ypoint=(circledia*COS(SecAngle))*.98
xpoint=(circledia*SIN(SecAngle))*.98
CALL LINE (-xpoint,-ypoint)
IF SecAngle<>OldSec THEN
    CALL MOVETO (centerx%,centery%)
    CALL PENMODE (11)
    ypoint=(circledia*COS(OldSec))*.98
    xpoint=(circledia*SIN(OldSec))*.98
    CALL LINE (-xpoint,-ypoint)
    CALL PENMODE(8)
END IF

‘Draw the minute hand
CALL PENSIZE(2,2)
CALL MOVETO (centerx%,centery%)
ypoint=(circledia*COS(MinAngle))*.9
xpoint=(circledia*SIN(MinAngle))*.9
CALL LINE (-xpoint,-ypoint)
IF MinAngle<>OldMin THEN
    CALL MOVETO (centerx%,centery%)
    CALL PENMODE (11)
    ypoint=(circledia*COS(OldMin))*.9
    xpoint=(circledia*SIN(OldMin))*.9
    CALL LINE (-xpoint,-ypoint)
    CALL PENMODE(8)
END IF

‘Draw the hour hand
CALL PENSIZE(4,4)
CALL MOVETO (centerx%,centery%)
ypoint=(circledia/2*COS(HAngle))
xpoint=(circledia/2*SIN(HAngle))
CALL LINE (-xpoint,-ypoint)
IF MinAngle<>OldMin THEN
    CALL MOVETO (centerx%,centery%)
    CALL PENMODE (11)
    ypoint=(circledia/2*COS(OldH))
    xpoint=(circledia/2*SIN(OldH))
    CALL LINE (-xpoint,-ypoint)
    CALL PENMODE(8)
END IF
CALL PENSIZE(1,1)

forecolor 205:’ Change color to red
LOCATE 1,1:PRINT “AlarmTime: “;AlarmTime$
forecolor 33:’ Change color to black
LOCATE 2,1:PRINT “Current Time: “;t$
CALL TEXTMODE(0)
OldT$=t$:OldSec=SecAngle:OldMin=MinAngle:OldH=HAngle
CALL FILLOVAL(VARPTR(CenterRect%(0)),VARPTR(pattern%(0)))
IF Alrm=false THEN
    forecolor 273
    LOCATE 3,1:PRINT “Alarm is off”:GOTO Loop
END IF
forecolor 341:’Change color to Green
LOCATE 3,1:PRINT “Alarm is on “
‘Sound the alarm if time is up!
IF t$=AlarmTime$ THEN
    BEEP:BEEP:BEEP
    LOCATE 4,1:PRINT “Alarm event occurred”
END IF
GOTO Loop
DIALOG OFF

SetupClock:’ Set up the face of the clock
activewindow=WINDOW(0)
WINDOW OUTPUT 1
CALL TEXTSIZE(14)
CALL MOVETO(centerx%-8,centery%-circledia-4):PRINT “12”;
CALL MOVETO(centerx%-8,centery%+circledia+20):PRINT “ 6”;
CALL MOVETO(centerx%-circledia-20,centery%+7):PRINT “9”;
CALL MOVETO(centerx%+circledia+10,centery%+7):PRINT “3”;
PSET (centerx%,centery%)
forecolor 205:’ Change color to red
CALL PENSIZE(2,2)
CIRCLE (centerx%,centery%),circledia
CALL PENSIZE(1,1)
SetRect CenterRect%(0),centerx%-5,centery%-5,centerx%+5,centery%+5
forecolor 33:’ Change color to black
SetRect pattern%(0),&HFFFF,&HFFFF,&HFFFF,&HFFFF
CALL FILLOVAL(VARPTR(CenterRect%(0)),VARPTR(pattern%(0)))
WINDOW OUTPUT activewindow
RETURN

DialogEvent:
d=DIALOG(0)
SELECT CASE d
    CASE 1
        IF DIALOG(1)=1 THEN editwindow=true
    CASE 4
        GOTO Quit
    CASE 5
        IF DIALOG(5)=1 THEN GOSUB SetupClock
    CASE ELSE
END SELECT
RETURN

MenuEvent:
menunumber=MENU(0)
menuitem=MENU(1)
MENU
IF menunumber=1 THEN
    IF menuitem=1 THEN GOSUB SetAlarm
    IF menuitem=3 THEN Quit
END IF
RETURN

SetAlarm:’ Set the alarm
Alrm=NOT Alrm
DoSet:
IF Alrm THEN
    MENU 1,1,1,”Turn Alarm Off”
    WINDOW 2,””,(50,50)-(250,150),2
    LOCATE 2,1:PRINT “Alarm Time:”
    IF AlarmTime$=”” THEN AlarmTime$=TIME$
    EDIT FIELD 1,AlarmTime$,(100,17)-(165,32),1
    BUTTON 1,1,”OK”,(40,45)-(170,75),1
    editwindow=false
    WHILE editwindow=false
    WEND
    AlarmTime$=EDIT$(1)
    a$=””:i=1
    WHILE MID$(AlarmTime$,i,1)<>”:”
        a$=a$+MID$(AlarmTime$,i,1)
        i=i+1
    WEND
    Ahour=VAL(a$)
    IF Ahour>24 OR Ahour<0 THEN GOTO DoSet
    a$=””
    i=i+1
    WHILE MID$(AlarmTime$,i,1)<>”:”
        a$=a$+MID$(AlarmTime$,i,1)
        i=i+1
    WEND
    Amin=VAL(a$)
    IF Amin>59 OR Amin<0 THEN GOTO DoSet
    a$=””
    i=i+1
WHILE i<=LEN(AlarmTime$)
        a$=a$+MID$(AlarmTime$,i,1)
        i=i+1
WEND
Asec=VAL(a$)
IF Asec>59 OR Asec<0 THEN GOTO DoSet
a$=””
IF Ahour<10 THEN a$=”0"+STR$(Ahour) ELSE a$=STR$(Ahour)
a$=a$+”:”
IF Amin<10 THEN a$=a$+”0"+STR$(Amin) ELSE a$=a$+STR$(Amin)
a$=a$+”:”
IF Asec<10 THEN a$=a$+”0"+STR$(Asec) ELSE a$=a$+STR$(Asec)
AlarmTime$=””
FOR i=1 TO LEN(a$)
    IF MID$(a$,i,1)<>” “ THEN AlarmTime$=AlarmTime$+MID$(a$,i,1)
NEXT i
DtRec%(3)=Ahour
DtRec%(4)=Amin
DtRec%(5)=Asec
‘Call Date2secs routine (QuickBASIC Date2secs does not work right)
TrapNo%=&HA9C7
ToolBox “R”, TrapNo%, ReturnArray&(0),VARPTR(DtRec%(0))
Al&=ReturnArray&(2)
POKEL &H200, Al&
    WINDOW CLOSE 2
ELSE
    TEXTMODE (0):LOCATE 2,1:PRINT”                                   
     “
    MENU 1,1,1,”Turn Alarm On ”
END IF
RETURN

getAlarm:’ Retrieve
Al&= PEEKL(&H200)
secs2Date Al&,DtRec%(0)
a$=””
IF DtRec%(3)<10 THEN a$=”0"+STR$(DtRec%(3)) ELSE a$=STR$(DtRec%(3))
a$=a$+”:”
IF DtRec%(4)<10 THEN a$=a$+”0"+STR$(DtRec%(4)) ELSE a$=a$+STR$(DtRec%(4))
a$=a$+”:”
IF DtRec%(5)<10 THEN a$=a$+”0"+STR$(DtRec%(5)) ELSE a$=a$+STR$(DtRec%(5))
AlarmTime$=””
FOR i=1 TO LEN(a$)
    IF MID$(a$,i,1)<>” “ THEN AlarmTime$=AlarmTime$+MID$(a$,i,1)
NEXT i
RETURN

Quit:
WINDOW CLOSE 1
END

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Apple iBooks Author 2.5 - Create and pub...
Apple iBooks Author helps you create and publish amazing Multi-Touch books for iPad. Now anyone can create stunning iBooks textbooks, cookbooks, history books, picture books, and more for iPad. All... Read more
MYStuff Pro 2.0.26 - $39.99
MYStuff Pro is the most flexible way to create detail-rich inventories for your home or small business. Add items to MYStuff by dragging and dropping existing information, uploading new images, or... Read more
MarsEdit 3.7.8 - Quick and convenient bl...
MarsEdit is a blog editor for OS X that makes editing your blog like writing email, with spell-checking, drafts, multiple windows, and even AppleScript support. It works with with most blog services... Read more
Yasu 3.0.3 - System maintenance app; per...
Yasu was created with System Administrators who service large groups of workstations in mind, Yasu (Yet Another System Utility) was made to do a specific group of maintenance tasks quickly within a... Read more
Yasu 3.0.3 - System maintenance app; per...
Yasu was created with System Administrators who service large groups of workstations in mind, Yasu (Yet Another System Utility) was made to do a specific group of maintenance tasks quickly within a... Read more
MYStuff Pro 2.0.26 - $39.99
MYStuff Pro is the most flexible way to create detail-rich inventories for your home or small business. Add items to MYStuff by dragging and dropping existing information, uploading new images, or... Read more
MarsEdit 3.7.8 - Quick and convenient bl...
MarsEdit is a blog editor for OS X that makes editing your blog like writing email, with spell-checking, drafts, multiple windows, and even AppleScript support. It works with with most blog services... Read more
Apple iBooks Author 2.5 - Create and pub...
Apple iBooks Author helps you create and publish amazing Multi-Touch books for iPad. Now anyone can create stunning iBooks textbooks, cookbooks, history books, picture books, and more for iPad. All... Read more
TunnelBear 3.0.1 - Subscription-based pr...
TunnelBear is a subscription-based virtual private network (VPN) service and companion app, enabling you to browse the internet privately and securely. Features Browse privately - Secure your data... Read more
ExpanDrive 5.4.0 - Access cloud storage...
ExpanDrive builds cloud storage in every application, acts just like a USB drive plugged into your Mac. With ExpanDrive, you can securely access any remote file server directly from the Finder or... Read more

Frost - Survival card game (Games)
Frost - Survival card game 1.12.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.12.1 (iTunes) Description: *Warning: the game will work on iPhone 5C and above and iPad Pro / 4. Other devices are not supported* | Read more »
How to build and care for your team in D...
Before you hit the trail and become a dog sledding legend, there’s actually a fair bit of prep work to be done. In Dog Sled Saga, you’re not only racing, you’re also building and caring for a team of furry friends. There’s a lot to consider—... | Read more »
How to win every race in Dog Sled Saga
If I had to guess, I’d say Dog Sled Saga is the most adorable racing game on the App Store right now. It’s a dog sled racing sim full of adorable, loyal puppies. Just look at those fluffy little tails wagging. Behind that cute, pixelated facade is... | Read more »
Let the war games commence in Gunship Ba...
Buzz Lightyear famously said, “This isn’t flying, this is falling – with style!” In the case of Gunship Battle: Second War, though, this really is flying - with style! The flight simulator app from Joycity puts you in control of 20 faithfully... | Read more »
How to get a high score in Fired Up
Fired Up is Noodlecake Games’ high score chasing, firefighting adventure. You take control of a wayward firefighter who propels himself up the side of a highrise with blasts of water. Sound silly? It is. It’s also pretty difficult. You can’t... | Read more »
NBA 2K17 (Games)
NBA 2K17 1.0 Device: iOS iPhone Category: Games Price: $7.99, Version: 1.0 (iTunes) Description: Following the record-breaking launch of NBA 2K16, the NBA 2K franchise continues to stake its claim as the most authentic sports video... | Read more »
Dog Sled Saga (Games)
Dog Sled Saga 1.0.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0.1 (iTunes) Description: A game by Dan + Lisa As a rookie musher, foster a dogsledding team whose skills will grow if they're treated right. Week by... | Read more »
60 Seconds! Atomic Adventure (Games)
60 Seconds! Atomic Adventure 1.2 Device: iOS Universal Category: Games Price: $2.99, Version: 1.2 (iTunes) Description: 60 Seconds! is a dark comedy atomic adventure of scavenge and survival. Collect supplies and rescue your family... | Read more »
Tons of Bullets! (Games)
Tons of Bullets! 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Tons of BulletsA retro 2D pixel platformer infused with tons of bullets and tons of features!Fight as Kenji the Ninja and... | Read more »
Sorcery! 4 (Games)
Sorcery! 4 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: *** PLEASE NOTE: Sorcery! 4 requires a minimum of iPad 3 or iPhone 4 *** An epic adventure through a cursed citadel of monsters,... | Read more »

Price Scanner via MacPrices.net

21-inch iMacs on sale for up to $120 off MSRP
B&H Photo has 21″ iMacs on sale for up to $120 off MSRP including free shipping plus NY sales tax only: - 21″ 3.1GHz iMac 4K: $1379 $120 off MSRP - 21″ 2.8GHz iMac: $1199.99 $100 off MSRP - 21″ 1... Read more
13-inch 2.7GHz/256GB Retina MacBook Pro on sa...
Amazon.com has the 13″ 2.7GHz/256GB Retina Apple MacBook Pro on sale for $151 off MSRP including free shipping: - 13″ 2.7GHz/256GB Retina MacBook Pro (sku MF840LL/A): $1348 $151 off MSRP Read more
Apple TVs on sale for up to $50 off MSRP
Best Buy has 32GB and 64GB Apple TVs on sale for $40-$50 off MSRP on their online store. Choose free shipping or free local store pickup (if available). Sale prices for online orders only, in-store... Read more
Apple refurbished 13-inch Retina MacBook Pros...
Apple has Certified Refurbished 13″ Retina MacBook Pros available for up to $270 off the cost of new models. An Apple one-year warranty is included with each model, and shipping is free: - 13″ 2.7GHz... Read more
Duplicate Sweeper Free On Mac App Store For O...
To celebrate the launch of Apple’s latest macOS Sierra, Stafford, United Kingdom based Wide Angle Software has announced that its duplicate file finder software, Duplicate Sweeper, is now available... Read more
13-inch Retina MacBook Pros on sale for up to...
B&H Photo has 13″ Retina Apple MacBook Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1174.99 $125 off MSRP - 13... Read more
Evidence Surfaces Pointing To New A10X Chip F...
Citing a job description for a Project Lead position at Apple’s Austin, Texas engineering labs, Motley Fool’s Ashraf Eassa deduces that development is progressing well on Apple’s next-generation in-... Read more
Check Print’R for macOS Allows Anyone to Easi...
Delaware-based Match Software has announced the release and immediate availability of Check Print’R 3.21, an important update to their easy-to-use check printing application for macOS. Check Print’R... Read more
Apple refurbished 11-inch MacBook Airs availa...
Apple has Certified Refurbished 11″ MacBook Airs (the latest models), available for up to $170 off the cost of new models. An Apple one-year warranty is included with each MacBook, and shipping is... Read more
Apple refurbished 15-inch Retina MacBook Pros...
Apple has Certified Refurbished 2015 15″ Retina MacBook Pros available for up to $380 off the cost of new models. An Apple one-year warranty is included with each model, and shipping is free: - 15″ 2... Read more

Jobs Board

*Apple* Retail - Multiple Positions- Manhatt...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
Sr. *Apple* Mac Engineer - Net2Source Inc....
…staffing, training and technology. We have following position open with our client. Sr. Apple Mac Engineer6+ Months CTH Start date : 19th Sept Travelling Job If Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Restaurant Manager (Neighborhood Captain) - A...
…in every aspect of daily operation. WHY YOU'LL LIKE IT: You'll be the Big Apple . You'll solve problems. You'll get to show your ability to handle the stress and Read more
US- *Apple* Store Leader Program - Apple (Un...
…Summary Learn and grow as you explore the art of leadership at the Apple Store. You'll master our retail business inside and out through training, hands-on Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.