1
0
Fork 0
This commit is contained in:
John Bintz 2022-10-10 14:54:54 -04:00
parent dfe5190d72
commit 6d4cdb2ba6
5 changed files with 53 additions and 6 deletions

BIN
justwindow Executable file

Binary file not shown.

17
justwindow.c Normal file
View File

@ -0,0 +1,17 @@
#include <proto/intuition.h>
#include <proto/dos.h>
int main(void) {
struct Window *window;
window = OpenWindowTags(NULL,
WA_Title, "Wow",
TAG_END
);
Delay(200);
CloseWindow(window);
return 0;
}

4
justwindow.lnk Normal file
View File

@ -0,0 +1,4 @@
FROM LIB:c.o "justwindow.o"
TO "justwindow"
LIB LIB:sc.lib LIB:amiga.lib

BIN
main

Binary file not shown.

38
main.c
View File

@ -17,8 +17,9 @@
#include <proto/diskfont.h>
// handle images and sound
#include <proto/datatypes.h>
#include <clib/datatypes_protos.h>
#include <datatypes/datatypesclass.h>
#include <datatypes/soundclass.h>
// timer stuff. using proto/timer.h did not work well, likely
// because of how you have to open the device.
@ -107,6 +108,7 @@ struct MsgPort *timerPort;
#define BELL_FILENAME "bell.8svx"
APTR bellSound = NULL;
struct Library *DataTypesBase;
// our business logic
// for how long should I cook this pizza?
@ -177,6 +179,11 @@ int setup(void) {
// to get the current time.
TimerBase = TimerIO->tr_node.io_Device;
if (NULL == (DataTypesBase = OpenLibrary("datatypes.library", 40))) {
// this is ok, we just won't play sound
printf("no sound!");
}
return 1;
}
@ -185,6 +192,9 @@ int setup(void) {
*/
void teardown(void) {
// http://amigadev.elowar.com/read/ADCD_2.1/Devices_Manual_guide/node0196.html
if (DataTypesBase) {
CloseLibrary(DataTypesBase);
}
if (TimerIO) {
CloseDevice((struct IORequest *)TimerIO);
DeleteExtIO((struct IORequest *)TimerIO);
@ -508,7 +518,7 @@ int openAboutWindow(void) {
WA_DepthGadget, TRUE,
WA_CloseGadget, TRUE,
WA_Activate, TRUE,
WA_Title, "Acout Pizza Timer",
WA_Title, "About Pizza Timer",
TAG_END
);
@ -698,17 +708,29 @@ void handleIntuitionMessage(struct IntuiMessage *iMessage) {
}
}
BYTE waitForSoundSignalNumber;
/**
* Start playing a bell sound, and start a timer to tear down
* the bell data once it's done.
* Start playing a bell sound, then wait for it to finish.
*/
void startBellSound(void) {
struct dtTrigger myTrigger;
struct MsgPort *TimerPort;
ULONG soundPlayResult;
if (bellSound = NewDTObject(BELL_FILENAME, DTA_GroupID, GID_SOUND, TAG_END)) {
// https://amigaworld.net/modules/newbb/viewtopic.php?forum=15&topic_id=39094&post_id=735120&viewmode=thread&order=0#735120
waitForSoundSignalNumber = AllocSignal(-1);
if (bellSound = NewDTObject(
BELL_FILENAME,
DTA_GroupID, GID_SOUND,
// ourselves
SDTA_SignalTask, (ULONG)FindTask(NULL),
// ideally we should use this, but my headers aren't new enough?
// SDTA_SignalBitNumber, waitForSoundSignalNumber,
// so we'll do it this way
SDTA_SignalBit, 1 << waitForSoundSignalNumber,
TAG_END)) {
myTrigger.MethodID = DTM_TRIGGER;
myTrigger.dtt_GInfo = NULL;
myTrigger.dtt_Function = STM_PLAY;
@ -717,6 +739,7 @@ void startBellSound(void) {
// https://github.com/khval/AmosKittens/blob/79f00ba3b81805b54fd4e437f667ea2eecab740d/OS/AmigaOS/animation.cpp#L128
soundPlayResult = DoDTMethodA(bellSound, NULL, NULL, (Msg) &myTrigger);
/**
TimerPort = TimerIO->tr_node.io_Message.mn_ReplyPort;
// eventually wait for the sound to stop playing
@ -724,6 +747,7 @@ void startBellSound(void) {
TimerIO->tr_time.tv_secs = 2;
TimerIO->tr_time.tv_micro = 0;
SendIO((struct IORequest *)TimerIO);
*/
}
}
@ -735,6 +759,7 @@ void waitForBellToFinish(void) {
ULONG timerSignal;
if (bellSound) {
/**
TimerPort = TimerIO->tr_node.io_Message.mn_ReplyPort;
// TODO: move this into the main event loop, so that
@ -743,7 +768,8 @@ void waitForBellToFinish(void) {
// or do we need two timer.devices with two separate IOs?
// https://amigadev.elowar.com/read/ADCD_2.1/Devices_Manual_guide/node00C4.html
timerSignal = 1L << TimerPort->mp_SigBit;
Wait(timerSignal);
*/
Wait(1 << waitForSoundSignalNumber);
DisposeDTObject(bellSound);
}