Path: utzoo!attcan!utgpu!news-server.csri.toronto.edu!rutgers!rochester!cornell!vax5.cit.cornell.edu!q4kx From: q4kx@vax5.cit.cornell.edu (Joel Sumner) Newsgroups: comp.sys.apple2 Subject: PIF/TIF Sample Message-ID: <1990Oct14.141319.381@vax5.cit.cornell.edu> Date: 14 Oct 90 18:13:19 GMT Distribution: comp Lines: 78 Actually, there really is nothing mysterious about writing a PIF or TIF file. I wrote BlankINIT in TML Pascal v1.5 with no problems. A PIF is no more than a program that gets executed at boot time and then stays in memory. A TIF is the same but it gets dumped from memory when it is finished. Sample PIF Program MyPIF; type TaskRecord = Record nextTask:=longint; interval:=integer; signature:=integer; somecode:=array[1..3] of byte; myProcPtr:=ProcPtr; end; var MyMemoryID:integer; TaskRec:TaskRecord; Function CheckSomething:Boolean; begin end; Procedure DoSomething; begin end; Procedure TheInterrupt; begin if CheckSomething then DoSomething; TaskRec.interval:=1; {Reset the interval} end; begin {main program, gets executed at boot time} MyMemoryID:=MMStartUp; MTStartup; with TaskRec do interval:=1; {1/60th of a sec, 60:=1 sec, etc..} signature:=$a55a; someCode[1]:=$C2; {REP} someCode[2]:=$30; someCode[3]:=$5c; {JMP Long} myProcPtr:=@TheInterrupt; end; SetHeartBeat(@TaskRec); MTShutDown; MMShutDown(MyMemoryID); end; The TaskRec/SetHeartBeat code is courtesy of Dave Lyons. I have not had success with this using ORCA/Pascal and I cannot determine why. It may have to do with the range checking. It tends to trash the stack. But it may just be me (more likely ). Now, you are probably saying to yourself, "This looks just like a regular application, what is the difference?" Exactly, there isn't much difference. There are three things you MUST do. 1 - Change the filetype to PIF (STR) 2 - Move it to the */SYSTEM/SYSTEM.SETUP subdir 3 - Use Block Warden, etc.. to change the QUIT command to an RTL. When this code is compiled with TML, it seems to consistently be placed at $54 but this may not be 100% certain. That's all there is to it. For a TIF, you DON'T want to install an interrupt (because the Interrupt procedure will be dumped from memory) but it is just like a regular application. Again, you have to change the filetype to TIF, copy the file, and change the QUIT to an RTL. Have I missed anything? -- Joel Sumner GENIE:JOEL.SUMNER These opinions are q4kx@cornella.ccs.cornell.edu q4kx@cornella warranted for 90 days or q4kx@vax5.cit.cornell.edu q4kx@crnlvax5 60,000 miles. Whichever .................................................... comes first. Never test for an error condition that you can't handle.