home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-04-10 | 2.3 KB | 116 lines | [TEXT/CWIE] |
- unit MyTimeManager;
-
- interface
-
- uses
- Timer, Types,
- MyCallProc;
-
- type
- XTMTask = record
- tm: TMTask;
- completion: UniversalProcPtr;
- end;
- XTMTaskPtr = ^XTMTask;
-
- procedure StartupTimeManager;
- { WARNING: xtm must be locked in memory from XInsertTime to XRemoveTime }
- procedure XInsertTime (xtm: XTMTaskPtr);
- procedure XRemoveTime (xtm: XTMTaskPtr);
- procedure XPrimeTime (xtm: XTMTaskPtr; completion: UniversalProcPtr; count: longint);
- { procedure completion(xtm: XTMTaskPtr); }
-
- const
- uppXTimerProcInfo = uppPascal04ProcInfo;
-
- function NewXTimerProc(userRoutine: ProcPtr): UniversalProcPtr;
- {$IFC not GENERATINGPOWERPC }
- inline
- $2E9F;
- {$ENDC}
-
- implementation
-
- uses
- MixedMode, OSUtils,
- MyLowLevel, PreserveA5, MyStartup, MyAssertions;
-
- {$ifc do_debug}
- var
- startup_check: integer;
- {$endc}
-
- var
- gTimeMangerProc : TimerUPP;
-
- {$IFC GENERATINGPOWERPC}
-
- procedure TimeManger(xtmp: XTMTaskPtr);
- begin
- if xtmp^.completion <> nil then begin
- CallPascal04(xtmp, xtmp^.completion);
- end;
- end;
-
- {$ELSEC}
-
- procedure TimeManger;
- var
- xtmp: XTMTaskPtr;
- olda5: Ptr;
- begin
- xtmp := XTMTaskPtr(GetRegA1);
- olda5 := SetPreservedA5;
- if xtmp^.completion <> nil then begin
- CallPascal04(xtmp, xtmp^.completion);
- end;
- RestoreA5(olda5);
- end;
-
- {$ENDC}
-
- {$IFC GENERATINGPOWERPC }
- function NewXTimerProc(userRoutine: ProcPtr): UniversalProcPtr;
- begin
- NewXTimerProc:=NewRoutineDescriptor(userRoutine,uppXTimerProcInfo,GetCurrentISA);
- end;
- {$ENDC}
-
- procedure XInsertTime (xtm: XTMTaskPtr);
- begin
- AssertDidStartup( startup_check );
- xtm^.tm.tmCount := 0;
- xtm^.tm.tmAddr := gTimeMangerProc;
- xtm^.tm.tmWakeUp := 0;
- xtm^.tm.tmReserved := 0;
- xtm^.completion := nil;
- InsXTime(QElemPtr(xtm));
- end;
-
- procedure XRemoveTime (xtm: XTMTaskPtr);
- begin
- RmvTime(QElemPtr(xtm));
- end;
-
- procedure XPrimeTime (xtm: XTMTaskPtr; completion: ProcPtr; count: longint);
- begin
- Assert(xtm^.tm.tmAddr = gTimeMangerProc);
- Assert(xtm^.tm.tmAddr <> nil);
- xtm^.completion := completion;
- PrimeTime(QElemPtr(xtm), count);
- end;
-
- function XInitTimeManager(var msg: integer): OSStatus;
- begin
- {$unused(msg)}
- DidStartup( startup_check );
- gTimeMangerProc := NewTimerProc(@TimeManger);
- XInitTimeManager := noErr;
- end;
-
- procedure StartupTimeManager;
- begin
- SetStartup(XInitTimeManager, nil, 0, nil);
- end;
-
- end.