[Coco] OS9 Programming question

Bill Pierce ooogalapasooo at aol.com
Fri Jan 18 13:07:01 EST 2013


Mr Gault,
First, the program is my Sound Chaser program. The forked programs are the players. 
If I didn't use the intercept, the <break> key would just terminate the players leaving midi notes hanging without sending a midi noteoff to the midi device which is an external device. The notes will then just play until the external midi device is reset. The intercept has to be there to direct the program to turn all notes off before exiting.
The overlay windows are created by the players and also removed on exit (either on end or break terminated).
Also, the calling program sets the "wait(0)" state after the fork to suspend operation until the forked program is terminated.
I'm beginning to think the problem is that the players being intercepted are returning ERROR #2 since the break key was pressed (according to the manual). Either that or the signal is being returned as well, but if it's a signal, it should be caught by the initial program's intercept. 
Also, in one of the player intercepts, there was a function that would print a warning if there is a "odd" signal (not 2 or 3). It was printing signal 4. According to the manual, signal 4 is S$Window - Window change. At this point, the process is still running and the overlay window is open. 

I never noticed this when playing individual songs. Now I have a selection routine that allows the user to select a list of songs and play them in order of selection. After playing a list of 20 songs, you get  20 screen "blips" when they're done. It's odd that it waits till all the songs are over and returns to the menu loop as the loop returns to the main program before calling the next player. Then it seems accept the errors/signals as keystrokes on the keyin loop. This is where the "blip" is occuring. I may need a way to clear the input buffer. fflush(STDIN/STDOUT/STDERR) does nothing (I tried all three). Which this would just throw them all out at one time anyway.

The calling routine looks something like:

for(sngnum = 0; sngnum <= numsng; sngnum++) {
    fname = selection[sngnum];
    args = parms[sngnum];
    os9fork(fname,len,args,1,1,80);
    wait(0);
}

any ideas?
Bill P

Music from the Tandy/Radio Shack Color Computer 2 & 3
https://sites.google.com/site/dabarnstudio/
Bill Pierce
ooogalapasooo at aol.com




-----Original Message-----
From: Robert Gault <robert.gault at att.net>
To: CoCoList for Color Computer Enthusiasts <coco at maltedmedia.com>
Sent: Fri, Jan 18, 2013 12:16 pm
Subject: Re: [Coco] OS9 Programming question


Bill Pierce wrote:
>
> Hi guys,
> I have an OS9 program that runs a loop that forks several other programs in 
succession in overlay windows. Each program sets an intercept that catches the 
break key and terminates on break and goes to the next program until the loop is 
finished. When the loop exits and returns to the main window, all the "break" 
keys that were pressed in the other programs all echo to the main window. The 
screen redraws for each break key that was pressed for each of the programs that 
was run.
> Is there some way to clear those signals so they don't come back to the main 
program? The main program has it's own intercept which is reset on return, but 
it doesn't seem to do any good in this case. If I don't "break" the other 
programs and let them finish, the program runs fine on return.
> All the program are written in C and Asm.
>
> Any suggestions?
> Bill P
>

The OS-9 manual says an intercept routine prevents a process from terminating on 

a signal but you say you want the process to be killed. Do you also want the 
overlay windows to be removed? What happens if the forked programs do not have 
intercept routines?


--
Coco mailing list
Coco at maltedmedia.com
http://five.pairlist.net/mailman/listinfo/coco

 



More information about the Coco mailing list