From d9faf6bba4dbd1ebf838f72a63092a57a0085064 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 25 Nov 2022 09:22:57 -0500 Subject: [PATCH] way better timer handling logic and headers usage --- .gitignore | 1 + justwindow | Bin 2144 -> 2240 bytes justwindow.c | 10 ++++++++- justwindow.info | Bin 0 -> 831 bytes main | Bin 13324 -> 13184 bytes main.c | 55 ++++++++++++++++++++++++++++++++++-------------- main.info | Bin 0 -> 831 bytes 7 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 justwindow.info create mode 100644 main.info diff --git a/.gitignore b/.gitignore index 5761abc..3b39e34 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.o +*.uaem diff --git a/justwindow b/justwindow index 18ec2581620a3b1858e6c09ea894244f37aa0663..30531f570ed7f3f84ed5b4edd477cb10961b74a9 100755 GIT binary patch delta 1228 zcmX|BUq~Bw9RFN$Cc(PRN~U%&dOL5fXVY8$?y2&KELmu z-|zeHQf^*5nr(Y$8$dVU{tJ+{Lysr-wUCDQ|DzOv8<5WnHj{=z8@v*Ab^dapP<^iV zVNJJ?or~yG`Q;o=$0JGrr#%@OWpooOYBwZE)>8FMIAg=rLfON*HeaNNil$L$@Q<`p zcTexZ-EVVP>8W5rxoIu!X;D|uQyp(a7jMc=vGaz+Hcbx0exv8Q7%~ZOe+3kTOW))LC0Wi?JwA)Yx zn^ux28op2xGs-YDeHb#0S{NT1wuEz7u$x5QbiXHDf?=Ak*iC8@4}~Q|3eu`*DMkqCd$*=0t+BZCv#VvQpDoJ|LAoD$ z4A0pIp&O8lZuai$I{T{5zO1upGJnl3US~sO{WY0Q_HT_PSUJ?#CxaI7 z(A#B-6yoXluk3O4jPju{AX`bHcPk2O%2?5YZ^8u z5Y8sb$0j&on~FDh+#0h!z1Y_y2DLpnV>c_Gllh%X?zSTe_rAk@#(hd!cb428FPoej zT>E0KusMDG#Jd%Q&R6iUv+X{ougRwLG-z7Ssu4i6*gy<>>A^m62aDC(brsE=ypj`< zZKD+Zj@2&NKw%&wYX4^@ErohSW*nw6hteMdo~ra=)MaN^{_)LH!Xw6u14M})!f!E1 ztG!#phyq>4i?#Dw!#R}g=79_|FFR`uuSzNB_lCEPVxlqd0Z(5KBI@VFTvL6T_;mlS zN&g5UeA^!Fd4`{iBh2cN^PcA;sp!mmMvgu@n3cT}<|@a(AyFFhBfpM63_phSR`%{6QZ_6Bf;fLk*lfL_#2-o{a41vV@l-8$WU77 zO~A_!Oss|y`S1Z}e>S|Gt#T)~Z&j=OmHE_`-0k>$Cr=4OHi3T;>;%zHh>KkWgTf#Y JAh_I5{s$ecVrKvV delta 1132 zcmX|AO>7%Q6#mxU+E!}7jZBiFK$p$7>Za~4a41z2(7I677_(MF1nC8BD&viWo2C&d zK{ByhRWyelY&M4qafncW99B^d5h_s*2Ib&G4^|YR93rJcLWL>jgB>^Q=rc+tBu%Pxsf@Ci?`_g3>fp+TV|F`-LMyQC6K|}m< z7j3h85|yufEF^buTe)s8?rKiJu$X3!_=eg$iVwdPAq)FCAGL9){ne*OpDX4=<2eU- zsDFYxSoJjN!Su0@aIP?N@`l44Ceay8ewh7An zWynSWb8OCCS5_>$QsPCg3Fnq$d)misH!A98_^b#q(sW;NqiO;3!jqH?devM-5LOdd zb%pNxmaRy?n!UL9rPD4njGb{K)ZG+u+>5kbQjTS|OVjpb&ig6QUW##K{>P9$NIgL4 z+z+f2W{bTsim`8DFT2x~{QaXvK8Q6XY#g&Ens6 zj9~Yd;jBGrUuAI}y;l(9OR0PFvTN3zui2ft3)Bb8qF29{C!|zTl*ZvV_=w^oz+;s$ zq}}lP4t@7(Js%R!fdi*TPvPDOq?OF}C>)^Ie0Kl7jp*BZ0LQd=KT@6d}QNbw!53; zC9vh?!>2m8+_-8TSoSVe>twS@Y_7-Lg-{Stx+Pj13To=0p?eD=h^B@#sL4SpTmtWvS|SI%sXw66 zA^(G$ivEiu#o4hyxSk&;IMj>!dEd`{eNMkO%76j1&fx;KU=1uh8%}P+b#j}UuPlBT zX2MBc1*CNRroF7PfTk>gxm`A6Psqf3=C_>Fmav%@1~sP9(Rs=nP-_SaUH-m)XAkw^ z8=v!ykZBcSnt_~ec@9{o|L|G-%9G~2(2HnIff0q^D;r-LUVWADRT)0*-jD4&=+j@~ z_a4Q!F^S%d{8i3J;~UOboBnzGBku0MqJVSpPA)H%^AXd&Ma z&)7M8?EFt+=j5sDMUtJb3}m_U9@yM@6%==Vf<7JM9zAtVzFo9^^ltPbJ_^NqJM2{{ ymE=5iPWk>sd}Stig`Km<&S^e%&iBR6*<>AolJ$Q&=*kEA_k!-Fvye15)?%h>SjjyBSjsAsuAiU)KsV~rSf*zZg(bS zL%hHHY|`v@M_Nbc-FweH=bm%V*S$9Lfv;@H=Z~LdmEl{7%VWoK!*fkl@h7#qW_z6Z^ykX0AgiF`3iS%(OOkBGhPNQg%y1 zOptxy#4r|mixKAt3qvVUi&@y#!QRVQYC^JG9Ew>KO&nyDP^l(_4aa1ru;P|1F@_t< z&Gjo#H$1-ds#?e};O&f=z}wFF(6(Xjd3jUgeByZcm_EaoBo;cT_;rufpC*f2lUhJG z4J*CLoJAABLXOl3>|J2b8rZjhX*)HCm3ZJz8n{;j7iAyt4N4Pe2b%s!0_M(R?nvNb z;9`W{X_2$(rwrV~H~6(0n>6Q>>{(6Derh++aPTeCY&bMeaT<{o_r zhB;>UphmYNWb15gQqA!U=%>nj;`?#V{nPL$TuNV%jwU7$ zlitSpcHtw4WL7a0Da|Ufb|HArTPwTig5nl$TuDYt6*rAJ+~TdPC!!XIn=U)u;zv^h zv1SkYfH4mRHLeO-@L7aP$KhUk;36A&>XRl~4P8bR?163R^mQjfAd$HRB8y9-3*rrY z$HZIsUKT%UoNu%&t7FTlbA-how-ZZD|F0mhLToTXt3PaQigRi$1WiBDPx(~NdVxzM zvvzYoFeMLVbKw` zpVQZk=xUD8((iyX_NTvYGLptNis%9kbR$`Aa5gZ`tYb5GR!Gim)E0+i30pnPwEI7{ zszu0r$JnZ|v8qn8qZnLs??ZsS%XqTe+p)AOPL1;_En70@Sep&eRU6Xi%8zCmhz0tS zKDrWXj8LXec8k~E$S>M6;|kDtASK=a+yZ=LIOzk!Nw*Cr-F>njHTx=dy+dseT!jBG z7=EtA?k+)#tQ`*LZxB;#q#w`U@ZtpPWqqG@J-A2M3UIg(KK3tZmXT}fP#-^_3;5oq zF?{dR<$%T{J+gzg9bj7C(#fp1)=)NS^0xOAi#cvUKWy{rb>^qIHvJ#Wo45x3Epzpz z^W;V5R2iA$_LxE0N1UNGss%TqSFC;#`N6(Z_-@hvadk0w(-=R*x7^|}%lnjWs%Ng$ zzh1os%a&TI@olht&u?rPE*N7DkF&$1n+gs;=Tj>TKTN5`Ol)q!6)H5& zYbaaG_VQ-!wb}}MAq+Ox;xL(uy{x~NONrZssC_zbbte32-XWWCe$2_NTHi#bmb-j( z4%OP}=_it&Kzjd%N_%*ZpUTmbW#1m8y#5|bkIYyNVy|%!g~i5%AIg(M5cgY|%ZWz<(K#kFym>rxJ)0ZLtUEncgea?NCk=DWSc|G{krBkkm27-`b1*^+ z4;fcBlJZ#v!y)obPcEzzGb1S)mw8+_)&zVJ%CAFmKTzD_2M+H3z{m+FfB%&;1NUD6 z=5`kI>A z8kk&YEG;z7HyBC&*ixnk*{YKZo$H`yv<+eZvQdpf-=M}^SOqh>|RyCXjv9GFLwLou8D_vrP8VFg@A>=s{~n1~$3FeprqDHuL{Gv7keL zt!Ue}^l?(X?rkK5q*$RzA|Yz=t_sfJLR%RgRvCuJjb;-&?X3CI4)RmzPMt zQKA$JxFRal`%kCl{xI-zC3!Fzwb9cz$2yZ#Wi zRI#BfVc0CrxqSRA6aDD+?uRrQ&)tU~eOTpV_udur@8Al#)fE(4R+yk3CI~*27TREj zIJ+|}jUMpDR&ot~`g8xoO!4kCe|5`HAIq6E%6JQ&0#h4WY9&+X#Ea6ERNm(=ndAA) zQMiIDRa#zJ6%L%JdM2L4KU|?QeR%ZVfLTjiz%TLKN~g01@})?TEdlzpA7(` z50v*>Bspp|BB@xiPx2c@Zqr1UW$IUCitY^kiYQhG!{LO%HPqsI0jH0wJ1chZh&Q!j zW7$L(o*_;Uz*U!&-4kHzs#V-lseY#7m;Q+(c;fIAm1Mjq?F^qiZrE!xYBr==B)j^) z;(O{o*|unsOyqh-lD9OFfKjRb@}{3~gOeX@vU0rSn7k_=5ep@xmwPX~Hd{j~?q9-L z{jjr~mwbA^b3ZTH^qWqtP|7_i*rP;h00i~$*6QyEWA<+!8>i+FBn^NdbHB$5msVk~ zD>)m%*{qL)v-vxmjo@tli<~XsY}Kum)!%RZ4rdEETmK?w8#qfW`sXfvagD+IoLl>P6d*b`WhZ(rgg@c2_Vj zjeZ=E1Pn8GB-cuvMq4QL8EvsNl*{^AxQw``kwAFeB0X#&-0$&tt0dWh^EmHIxCF1z zI!VJ(bnWfmGtVf&P#FsCFXA43PRR%6ZAboux0IsF-iKV=SPD;P_^hkCq(HUc1yA-4 z8|a4gH>$TJ&PM3-ApQeTfTvza*@w|ij5P5vC9ue;A>b8dbykU-vQR|QDk@BmV@ zsMY_FK2%Iu6(!A-CSH0`e-G}~vQ@z0Lq6V?ea0&PhW{gsN+XHQN618@U>#MADx72Q zkNSXnZF#wV)r*LGr62EBb;qV`qnjZF)uR^aGZKHnO?RsW}Mzd85rcdJ>z`uyt&$S;P34rmsDZmWi z9AE@EJHQOUFYhbB7a%*Rw{5Ey88<(9a+{gk)BD0p9X&Pe9WTG|vks!?x+2eO9dd8C z+#T=el8wpD^#7pIPuKkC_I0g9l@6kqG08YtTE*)ndKj$wql|H)g8 zi5%NCH>b=9OA`7{is*w#X2+%dRJ{hq#p}+0(<~BpcK}-1i%*f v^MJE}Hvup@KMWWG3<8n>@bZ0tUdSr|!1Q7v)_4GbxrB0T_>O+3w(`FLsz?}v delta 5242 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 // handle images and sound -#include +#include #include #include -// timer stuff. using proto/timer.h did not work well, likely -// because of how you have to open the device. -#include +#include // this is the manual for the original intuition stuff. // not much here is different: https://ia801905.us.archive.org/33/items/Amiga_Intuition_Reference_Manaual_1985_Adn-Wesley_Publishing_Company/Amiga_Intuition_Reference_Manaual_1985_Addison-Wesley_Publishing_Company.pdf @@ -80,8 +78,10 @@ struct MenuData { int id; }; -#define MENU_ABOUT_ID 0 -#define MENU_QUIT_ID 1 +// Start this at 1, otherwise not selecting a menu item is the same as +// opening the menu and picking the item with ID 0 +#define MENU_ABOUT_ID 1 +#define MENU_QUIT_ID 2 struct MenuData MENU_ABOUT = { MENU_ABOUT_ID }; struct MenuData MENU_QUIT = { MENU_QUIT_ID }; @@ -98,7 +98,6 @@ struct Menu *menu; // timer stuff #define TIMER_INTERVAL 200000 -struct Device *TimerBase; struct timerequest *TimerIO; struct timeval currentSystemTime; struct MsgPort *timerPort; @@ -176,10 +175,6 @@ int setup(void) { return 0; } - // this allows us to use GetSysTime, rather than performing an IO operation - // 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!"); @@ -200,7 +195,6 @@ void teardown(void) { FreeSignal(waitForSoundSignalNumber); } if (TimerIO) { - CloseDevice((struct IORequest *)TimerIO); DeleteExtIO((struct IORequest *)TimerIO); } if (timerPort) { @@ -390,13 +384,21 @@ void setTimerText(void) { * Ask the timer to send a message to our message port * after a defined number of milliseconds. */ -void startTimer(void) { +int startTimer(void) { + // TODO: handle timer.device not being available + if (0 != (OpenDevice(TIMERNAME, UNIT_MICROHZ, (struct IORequest *)TimerIO, 0L))) { + printf("Unable to open timer!"); + return 1; + } + TimerIO->tr_node.io_Command = TR_ADDREQUEST; TimerIO->tr_time.tv_secs = 0; TimerIO->tr_time.tv_micro = TIMER_INTERVAL; // SendIO is async, it doesn't wait for the IO to complete before continuing SendIO((struct IORequest *)TimerIO); + + CloseDevice((struct IORequest *)TimerIO); } /** @@ -422,6 +424,26 @@ void clearUI(void) { FreeGadgets(windowGadgets); } +/** + * Get the current system time. + */ +int getSysTime(void) { + struct Device* TimerBase; + + if (0 != (OpenDevice(TIMERNAME, UNIT_MICROHZ, (struct IORequest *)TimerIO, 0L))) { + printf("Unable to open timer!"); + return 1; + } + + TimerBase = TimerIO->tr_node.io_Device; + + GetSysTime(¤tSystemTime); + + CloseDevice((struct IORequest *)TimerIO); + + return 0; +} + /** * Toggle the timer between started and stopped. */ @@ -429,8 +451,8 @@ void handleToggleTimer(void) { timerIsRunning = !timerIsRunning; if (timerIsRunning) { - // http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node04FA.html - GetSysTime(¤tSystemTime); + // TODO: handle timer.device not being available + getSysTime(); // timers are microsecond resolution timerStartTime = currentSystemTime.tv_secs * 1000000 + currentSystemTime.tv_micro; @@ -774,7 +796,8 @@ void endTimer(void) { } void handleTimerMessage(void) { - GetSysTime(¤tSystemTime); + // TODO: handle timer.device not being available + getSysTime(); timerDistance = ((currentSystemTime.tv_secs * 1000000 + currentSystemTime.tv_micro) - timerStartTime) / 1000000; timerBuild = (originalUiHours * 3600 + originalUiMinutes * 60 + originalUiSeconds) - timerDistance; diff --git a/main.info b/main.info new file mode 100644 index 0000000000000000000000000000000000000000..35e5509b01053695646421c9be3979eedccb41e5 GIT binary patch literal 831 zcmZ{hze@sP7{{MeI}l7wArwTE?hkNiC@4B;$Sa5-ni|q28XTlTg1~#FmdHVGYK}&S z{10yG$A598I6D>y*Yo2Q9O^~=yzl3}KBwOsrNIDNr*H=AunH!g4Lh5-v9rrIUs?Px zqA@%E?2}UZO?z1-0ZoZOWa}cTJt3|4%x^iTOkp!8^lMC`qjHotpwT{6EYyNbH=R8Ffx<7KQ#T)98$ZaIRU9>*`%tANsgaK%EoKyb|&a z@r<3b$IkyGc21tUUL@K1N<)S_?}5dgSHR)UkI<(A+@q(?$+ruZhrSvz<