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/