Forum AmigaOne Zone https://forum.amigaone.pl/ |
|
Programowanie pod AmigaOS 3.1 - kilka pytań. https://forum.amigaone.pl/programowanie-f13/programowanie-pod-amigaos-3-1-kilka-pytan-t935-45.html |
Strona 4 z 4 |
Autor: | Hextreme [ niedziela, 29 paź 2017, 01:26 ] |
Tytuł: | Re: Programowanie pod AmigaOS 3.1 - kilka pytań. |
tchomasz napisał(a): Odkopuję trochę temat. Jak pobrać z systemu aktualną godzinę i datę? Najpierw funkcją GetSysTime() z urządzenia timer.device pobierasz liczbę sekund od 1 stycznia 1978 roku, a następnie funkcją Amiga2Date() z biblioteki utility.library konwertujesz tą liczbę do aktualnej daty i godziny. |
Autor: | tchomasz [ poniedziałek, 30 paź 2017, 00:19 ] |
Tytuł: | Re: Programowanie pod AmigaOS 3.1 - kilka pytań. |
Napisałem coś takiego - z racji tego, że obsługa urządzeń to dla mnie czarna magia, to nie wiem za bardzo dlaczego mi się to wiesza. Wiesza się na GetSysTime. Kod: #include <stdio.h>
#include <stdlib.h> #include <proto/timer.h> #include <proto/exec.h> #include <proto/dos.h> #include <proto/utility.h> #include <devices/timer.h> #include <exec/types.h> static int init(void); static void close(void); struct MsgPort *TimerMP = NULL; struct Device *TimerBase = NULL; struct timerequest *TimerIO = NULL; struct IORequest timereq; struct timeval *currentval = NULL; long error; //OpenDevice static int init(void) { TimerMP=CreateMsgPort(); if (!TimerMP) { return -1; } TimerIO=(struct timerequest *) CreateIORequest(TimerMP, sizeof(struct timerequest)); if (!TimerIO) { return -1; } error=OpenDevice(TIMERNAME, UNIT_ECLOCK, (struct IORequest*)TimerIO, 0); if (0 != error) { return -1; } return 0; } static void close(void) { if (TimerIO) { CloseDevice((struct IORequest*)TimerIO); DeleteIORequest(TimerIO); } if (TimerMP) { DeletePort(TimerMP); } } int main(void) { if (0 == init()) { GetSysTime(currentval); } close(); return 0; } |
Autor: | swinkamor12 [ poniedziałek, 30 paź 2017, 03:39 ] |
Tytuł: | Re: Programowanie pod AmigaOS 3.1 - kilka pytań. |
Brakowało pobrania TimerBase TimerBase = (struct Library *)TimerIO->tr_node.io_Device; TimerBase - wskaźnik typu struct Library * zarezerwowania pamięci na currentval currentval=(struct timeval*)malloc(sizeof(struct timeval)); Poza tym ok Kod: #include <stdio.h>
#include <stdlib.h> #include <proto/timer.h> #include <proto/exec.h> #include <proto/dos.h> #include <proto/utility.h> #include <devices/timer.h> #include <exec/types.h> static int init(void); static void close(void); struct MsgPort *TimerMP = NULL; struct Library *TimerBase = NULL; struct timerequest *TimerIO = NULL; struct IORequest timereq; struct timeval *currentval; long error; //OpenDevice static int init(void) { TimerMP=CreateMsgPort(); if (!TimerMP) { return -1; } TimerIO=(struct timerequest *) CreateIORequest(TimerMP, sizeof(struct timerequest)); if (!TimerIO) { return -1; } error=OpenDevice(TIMERNAME, UNIT_ECLOCK, (struct IORequest*)TimerIO, 0); if (0 != error) { return -1; } TimerBase = (struct Library *)TimerIO->tr_node.io_Device; currentval=(struct timeval*)malloc(sizeof(struct timeval)); if (!currentval) { return -1; } return 0; } static void close(void) { if (currentval) { free(currentval); } if (TimerIO) { CloseDevice((struct IORequest*)TimerIO); DeleteIORequest(TimerIO); } if (TimerMP) { DeletePort(TimerMP); } } int main(void) { if (0 == init()) { GetSysTime(currentval); printf("%d %d \n",currentval->tv_secs,currentval->tv_micro); GetSysTime(currentval); printf("%d %d \n",currentval->tv_secs,currentval->tv_micro); } close(); return 0; } |
Strona 4 z 4 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |