MRPT  1.9.9
freeglut_internal.h File Reference
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <GL/glx.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
Include dependency graph for freeglut_internal.h:

Go to the source code of this file.

Classes

struct  tagSFG_List
 
struct  tagSFG_Node
 
struct  tagSFG_XYUse
 
struct  tagSFG_Time
 
struct  tagSFG_State
 
struct  tagSFG_Display
 
struct  tagSFG_Timer
 
struct  tagSFG_Context
 
struct  tagSFG_WindowState
 
struct  tagSFG_MenuContext
 
struct  tagSFG_Menu
 
struct  tagSFG_MenuEntry
 
struct  tagSFG_Window
 
struct  tagSFG_WindowList
 
struct  tagSFG_Structure
 
struct  tagSFG_Enumerator
 
struct  tagSFG_Font
 
struct  tagSFG_StrokeVertex
 
struct  tagSFG_StrokeStrip
 
struct  tagSFG_StrokeChar
 
struct  tagSFG_StrokeFont
 

Macros

#define VERSION_MAJOR   2
 
#define VERSION_MINOR   4
 
#define VERSION_PATCH   0
 
#define TARGET_HOST_UNIX_X11   1
 
#define TARGET_HOST_WIN32   0
 
#define TARGET_HOST_WINCE   0
 
#define FREEGLUT_MAX_MENUS   3
 
#define M_PI   3.14159265358979323846
 
#define TRUE   1
 
#define FALSE   0
 
#define SET_WCB(window, cbname, func)
 
#define FETCH_WCB(window, cbname)   ((window).CallBacks[CB_##cbname])
 
#define INVOKE_WCB(window, cbname, arg_list)
 
#define FREEGLUT_EXIT_IF_NOT_INITIALISED(string)
 
#define FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED(string)
 
#define FREEGLUT_INTERNAL_ERROR_EXIT(cond, string, function)
 
#define freeglut_return_if_fail(expr)   if (!(expr)) return;
 
#define freeglut_return_val_if_fail(expr, val)   if (!(expr)) return val;
 
#define FREEGLUT_EXIT_IF_NO_WINDOW(string)
 

Typedefs

typedef void(* FGCBDisplay) (void)
 
typedef void(* FGCBReshape) (int, int)
 
typedef void(* FGCBVisibility) (int)
 
typedef void(* FGCBKeyboard) (unsigned char, int, int)
 
typedef void(* FGCBSpecial) (int, int, int)
 
typedef void(* FGCBMouse) (int, int, int, int)
 
typedef void(* FGCBMouseWheel) (int, int, int, int)
 
typedef void(* FGCBMotion) (int, int)
 
typedef void(* FGCBPassive) (int, int)
 
typedef void(* FGCBEntry) (int)
 
typedef void(* FGCBWindowStatus) (int)
 
typedef void(* FGCBSelect) (int, int, int)
 
typedef void(* FGCBJoystick) (unsigned int, int, int, int)
 
typedef void(* FGCBKeyboardUp) (unsigned char, int, int)
 
typedef void(* FGCBSpecialUp) (int, int, int)
 
typedef void(* FGCBOverlayDisplay) (void)
 
typedef void(* FGCBSpaceMotion) (int, int, int)
 
typedef void(* FGCBSpaceRotation) (int, int, int)
 
typedef void(* FGCBSpaceButton) (int, int)
 
typedef void(* FGCBDials) (int, int)
 
typedef void(* FGCBButtonBox) (int, int)
 
typedef void(* FGCBTabletMotion) (int, int)
 
typedef void(* FGCBTabletButton) (int, int, int, int)
 
typedef void(* FGCBDestroy) (void)
 
typedef void(* FGCBIdle) (void)
 
typedef void(* FGCBTimer) (int)
 
typedef void(* FGCBMenuState) (int)
 
typedef void(* FGCBMenuStatus) (int, int, int)
 
typedef void(* FGCBMenu) (int)
 
typedef struct tagSFG_List SFG_List
 
typedef struct tagSFG_Node SFG_Node
 
typedef struct tagSFG_XYUse SFG_XYUse
 
typedef struct tagSFG_Time SFG_Time
 
typedef struct tagSFG_State SFG_State
 
typedef struct tagSFG_Display SFG_Display
 
typedef struct tagSFG_Timer SFG_Timer
 
typedef Window SFG_WindowHandleType
 
typedef GLXContext SFG_WindowContextType
 
typedef struct tagSFG_Context SFG_Context
 
typedef struct tagSFG_WindowState SFG_WindowState
 
typedef void(* SFG_Proc) ()
 
typedef struct tagSFG_MenuContext SFG_MenuContext
 
typedef struct tagSFG_Window SFG_Window
 
typedef struct tagSFG_MenuEntry SFG_MenuEntry
 
typedef struct tagSFG_Menu SFG_Menu
 
typedef struct tagSFG_WindowList SFG_WindowList
 
typedef struct tagSFG_Structure SFG_Structure
 
typedef struct tagSFG_Enumerator SFG_Enumerator
 
typedef void(* FGCBenumerator) (SFG_Window *, SFG_Enumerator *)
 
typedef struct tagSFG_Font SFG_Font
 
typedef struct tagSFG_StrokeVertex SFG_StrokeVertex
 
typedef struct tagSFG_StrokeStrip SFG_StrokeStrip
 
typedef struct tagSFG_StrokeChar SFG_StrokeChar
 
typedef struct tagSFG_StrokeFont SFG_StrokeFont
 

Enumerations

enum  fgExecutionState { GLUT_EXEC_STATE_INIT, GLUT_EXEC_STATE_RUNNING, GLUT_EXEC_STATE_STOP }
 
enum  {
  CB_Display, CB_Reshape, CB_Keyboard, CB_KeyboardUp,
  CB_Special, CB_SpecialUp, CB_Mouse, CB_MouseWheel,
  CB_Motion, CB_Passive, CB_Entry, CB_Visibility,
  CB_WindowStatus, CB_Joystick, CB_Destroy, CB_Select,
  CB_OverlayDisplay, CB_SpaceMotion, CB_SpaceRotation, CB_SpaceButton,
  CB_Dials, CB_ButtonBox, CB_TabletMotion, CB_TabletButton,
  TOTAL_CALLBACKS
}
 

Functions

void fgDeinitialize (void)
 
void fgCreateStructure (void)
 
void fgDestroyStructure (void)
 
XVisualInfo * fgChooseVisual (void)
 
SFG_WindowfgCreateWindow (SFG_Window *parent, const char *title, int x, int y, int w, int h, GLboolean gameMode, GLboolean isMenu)
 
void fgSetWindow (SFG_Window *window)
 
void fgOpenWindow (SFG_Window *window, const char *title, int x, int y, int w, int h, GLboolean gameMode, GLboolean isSubWindow)
 
void fgCloseWindow (SFG_Window *window)
 
void fgAddToWindowDestroyList (SFG_Window *window)
 
void fgCloseWindows ()
 
void fgDestroyWindow (SFG_Window *window)
 
SFG_MenufgCreateMenu (FGCBMenu menuCallback)
 
void fgDestroyMenu (SFG_Menu *menu)
 
int fgJoystickDetect (void)
 
void fgInitialiseJoysticks (void)
 
void fgJoystickClose (void)
 
void fgJoystickPollWindow (SFG_Window *window)
 
int glutJoystickGetNumAxes (int ident)
 
int glutJoystickGetNumButtons (int ident)
 
int glutJoystickNotWorking (int ident)
 
void fgSetCursor (SFG_Window *window, int cursorID)
 
void fgEnumWindows (FGCBenumerator enumCallback, SFG_Enumerator *enumerator)
 
void fgEnumSubWindows (SFG_Window *window, FGCBenumerator enumCallback, SFG_Enumerator *enumerator)
 
SFG_WindowfgWindowByHandle (SFG_WindowHandleType hWindow)
 
SFG_WindowfgWindowByID (int windowID)
 
SFG_MenufgMenuByID (int menuID)
 
void fgUpdateMenuHighlight (SFG_Menu *menu)
 
GLboolean fgCheckActiveMenu (SFG_Window *window, int button, GLboolean pressed, int mouse_x, int mouse_y)
 
void fgDeactivateMenu (SFG_Window *window)
 
void fgDisplayMenu (void)
 
long fgElapsedTime (void)
 
void fgListInit (SFG_List *list)
 
void fgListAppend (SFG_List *list, SFG_Node *node)
 
void fgListRemove (SFG_List *list, SFG_Node *node)
 
int fgListLength (SFG_List *list)
 
void fgListInsert (SFG_List *list, SFG_Node *next, SFG_Node *node)
 
void fgError (const char *fmt,...)
 
void fgWarning (const char *fmt,...)
 

Variables

SFG_Display fgDisplay
 
SFG_Structure fgStructure
 
SFG_State fgState
 

Macro Definition Documentation

◆ FALSE

#define FALSE   0

Definition at line 97 of file freeglut_internal.h.

◆ FETCH_WCB

#define FETCH_WCB (   window,
  cbname 
)    ((window).CallBacks[CB_##cbname])

Definition at line 382 of file freeglut_internal.h.

◆ FREEGLUT_EXIT_IF_NO_WINDOW

#define FREEGLUT_EXIT_IF_NO_WINDOW (   string)
Value:
{ \
fgError( \
" ERROR: Function <%s> called" \
" with no current window defined.", \
(string)); \
}
SFG_Structure fgStructure
SFG_Window * CurrentWindow

Definition at line 686 of file freeglut_internal.h.

◆ FREEGLUT_EXIT_IF_NOT_INITIALISED

#define FREEGLUT_EXIT_IF_NOT_INITIALISED (   string)
Value:
{ \
fgError( \
" ERROR: Function <%s> called" \
" without first calling 'glutInit'.", \
(string)); \
}
SFG_State fgState
GLboolean Initialised

Definition at line 647 of file freeglut_internal.h.

◆ FREEGLUT_INTERNAL_ERROR_EXIT

#define FREEGLUT_INTERNAL_ERROR_EXIT (   cond,
  string,
  function 
)
Value:
if (!(cond)) \
{ \
fgError( \
" ERROR: Internal error <%s> in function %s", (string), \
(function)); \
}

Definition at line 665 of file freeglut_internal.h.

◆ FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED

#define FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED (   string)
Value:
{ \
fgError( \
" ERROR: Internal <%s> function called" \
" without first calling 'glutInit'.", \
(string)); \
}
SFG_State fgState
GLboolean Initialised

Definition at line 656 of file freeglut_internal.h.

◆ FREEGLUT_MAX_MENUS

#define FREEGLUT_MAX_MENUS   3

Definition at line 37 of file freeglut_internal.h.

◆ freeglut_return_if_fail

#define freeglut_return_if_fail (   expr)    if (!(expr)) return;

Definition at line 677 of file freeglut_internal.h.

◆ freeglut_return_val_if_fail

#define freeglut_return_val_if_fail (   expr,
  val 
)    if (!(expr)) return val;

Definition at line 679 of file freeglut_internal.h.

◆ INVOKE_WCB

#define INVOKE_WCB (   window,
  cbname,
  arg_list 
)
Value:
do \
{ \
if (FETCH_WCB(window, cbname)) \
{ \
fgSetWindow(&window); \
((FGCB##cbname)FETCH_WCB(window, cbname)) arg_list; \
} \
} while (0)
#define FETCH_WCB(window, cbname)

Definition at line 415 of file freeglut_internal.h.

◆ M_PI

#define M_PI   3.14159265358979323846

Definition at line 89 of file freeglut_internal.h.

◆ SET_WCB

#define SET_WCB (   window,
  cbname,
  func 
)
Value:
do \
{ \
if (FETCH_WCB(window, cbname) != (SFG_Proc)(func)) \
(((window).CallBacks[CB_##cbname]) = (SFG_Proc)(func)); \
} while (0)
void(* SFG_Proc)()
#define FETCH_WCB(window, cbname)

Definition at line 364 of file freeglut_internal.h.

◆ TARGET_HOST_UNIX_X11

#define TARGET_HOST_UNIX_X11   1

Definition at line 32 of file freeglut_internal.h.

◆ TARGET_HOST_WIN32

#define TARGET_HOST_WIN32   0

Definition at line 33 of file freeglut_internal.h.

◆ TARGET_HOST_WINCE

#define TARGET_HOST_WINCE   0

Definition at line 34 of file freeglut_internal.h.

◆ TRUE

#define TRUE   1

Definition at line 93 of file freeglut_internal.h.

◆ VERSION_MAJOR

#define VERSION_MAJOR   2

Definition at line 18 of file freeglut_internal.h.

◆ VERSION_MINOR

#define VERSION_MINOR   4

Definition at line 19 of file freeglut_internal.h.

◆ VERSION_PATCH

#define VERSION_PATCH   0

Definition at line 20 of file freeglut_internal.h.

Typedef Documentation

◆ FGCBButtonBox

typedef void(* FGCBButtonBox) (int, int)

Definition at line 123 of file freeglut_internal.h.

◆ FGCBDestroy

typedef void(* FGCBDestroy) (void)

Definition at line 126 of file freeglut_internal.h.

◆ FGCBDials

typedef void(* FGCBDials) (int, int)

Definition at line 122 of file freeglut_internal.h.

◆ FGCBDisplay

typedef void(* FGCBDisplay) (void)

Definition at line 103 of file freeglut_internal.h.

◆ FGCBEntry

typedef void(* FGCBEntry) (int)

Definition at line 112 of file freeglut_internal.h.

◆ FGCBenumerator

typedef void(* FGCBenumerator) (SFG_Window *, SFG_Enumerator *)

Definition at line 584 of file freeglut_internal.h.

◆ FGCBIdle

typedef void(* FGCBIdle) (void)

Definition at line 129 of file freeglut_internal.h.

◆ FGCBJoystick

typedef void(* FGCBJoystick) (unsigned int, int, int, int)

Definition at line 115 of file freeglut_internal.h.

◆ FGCBKeyboard

typedef void(* FGCBKeyboard) (unsigned char, int, int)

Definition at line 106 of file freeglut_internal.h.

◆ FGCBKeyboardUp

typedef void(* FGCBKeyboardUp) (unsigned char, int, int)

Definition at line 116 of file freeglut_internal.h.

◆ FGCBMenu

typedef void(* FGCBMenu) (int)

Definition at line 135 of file freeglut_internal.h.

◆ FGCBMenuState

typedef void(* FGCBMenuState) (int)

Definition at line 131 of file freeglut_internal.h.

◆ FGCBMenuStatus

typedef void(* FGCBMenuStatus) (int, int, int)

Definition at line 132 of file freeglut_internal.h.

◆ FGCBMotion

typedef void(* FGCBMotion) (int, int)

Definition at line 110 of file freeglut_internal.h.

◆ FGCBMouse

typedef void(* FGCBMouse) (int, int, int, int)

Definition at line 108 of file freeglut_internal.h.

◆ FGCBMouseWheel

typedef void(* FGCBMouseWheel) (int, int, int, int)

Definition at line 109 of file freeglut_internal.h.

◆ FGCBOverlayDisplay

typedef void(* FGCBOverlayDisplay) (void)

Definition at line 118 of file freeglut_internal.h.

◆ FGCBPassive

typedef void(* FGCBPassive) (int, int)

Definition at line 111 of file freeglut_internal.h.

◆ FGCBReshape

typedef void(* FGCBReshape) (int, int)

Definition at line 104 of file freeglut_internal.h.

◆ FGCBSelect

typedef void(* FGCBSelect) (int, int, int)

Definition at line 114 of file freeglut_internal.h.

◆ FGCBSpaceButton

typedef void(* FGCBSpaceButton) (int, int)

Definition at line 121 of file freeglut_internal.h.

◆ FGCBSpaceMotion

typedef void(* FGCBSpaceMotion) (int, int, int)

Definition at line 119 of file freeglut_internal.h.

◆ FGCBSpaceRotation

typedef void(* FGCBSpaceRotation) (int, int, int)

Definition at line 120 of file freeglut_internal.h.

◆ FGCBSpecial

typedef void(* FGCBSpecial) (int, int, int)

Definition at line 107 of file freeglut_internal.h.

◆ FGCBSpecialUp

typedef void(* FGCBSpecialUp) (int, int, int)

Definition at line 117 of file freeglut_internal.h.

◆ FGCBTabletButton

typedef void(* FGCBTabletButton) (int, int, int, int)

Definition at line 125 of file freeglut_internal.h.

◆ FGCBTabletMotion

typedef void(* FGCBTabletMotion) (int, int)

Definition at line 124 of file freeglut_internal.h.

◆ FGCBTimer

typedef void(* FGCBTimer) (int)

Definition at line 130 of file freeglut_internal.h.

◆ FGCBVisibility

typedef void(* FGCBVisibility) (int)

Definition at line 105 of file freeglut_internal.h.

◆ FGCBWindowStatus

typedef void(* FGCBWindowStatus) (int)

Definition at line 113 of file freeglut_internal.h.

◆ SFG_Context

typedef struct tagSFG_Context SFG_Context

Definition at line 299 of file freeglut_internal.h.

◆ SFG_Display

typedef struct tagSFG_Display SFG_Display

Definition at line 232 of file freeglut_internal.h.

◆ SFG_Enumerator

Definition at line 578 of file freeglut_internal.h.

◆ SFG_Font

typedef struct tagSFG_Font SFG_Font

Definition at line 587 of file freeglut_internal.h.

◆ SFG_List

typedef struct tagSFG_List SFG_List

Definition at line 138 of file freeglut_internal.h.

◆ SFG_Menu

typedef struct tagSFG_Menu SFG_Menu

Definition at line 489 of file freeglut_internal.h.

◆ SFG_MenuContext

Definition at line 476 of file freeglut_internal.h.

◆ SFG_MenuEntry

Definition at line 488 of file freeglut_internal.h.

◆ SFG_Node

typedef struct tagSFG_Node SFG_Node

Definition at line 146 of file freeglut_internal.h.

◆ SFG_Proc

typedef void(* SFG_Proc) ()

Definition at line 345 of file freeglut_internal.h.

◆ SFG_State

typedef struct tagSFG_State SFG_State

Definition at line 184 of file freeglut_internal.h.

◆ SFG_StrokeChar

Definition at line 613 of file freeglut_internal.h.

◆ SFG_StrokeFont

Definition at line 621 of file freeglut_internal.h.

◆ SFG_StrokeStrip

Definition at line 606 of file freeglut_internal.h.

◆ SFG_StrokeVertex

Definition at line 600 of file freeglut_internal.h.

◆ SFG_Structure

Definition at line 554 of file freeglut_internal.h.

◆ SFG_Time

typedef struct tagSFG_Time SFG_Time

Definition at line 162 of file freeglut_internal.h.

◆ SFG_Timer

typedef struct tagSFG_Timer SFG_Timer

Definition at line 270 of file freeglut_internal.h.

◆ SFG_Window

typedef struct tagSFG_Window SFG_Window

Definition at line 487 of file freeglut_internal.h.

◆ SFG_WindowContextType

Definition at line 286 of file freeglut_internal.h.

◆ SFG_WindowHandleType

typedef Window SFG_WindowHandleType

Definition at line 285 of file freeglut_internal.h.

◆ SFG_WindowList

Definition at line 546 of file freeglut_internal.h.

◆ SFG_WindowState

Definition at line 315 of file freeglut_internal.h.

◆ SFG_XYUse

typedef struct tagSFG_XYUse SFG_XYUse

Definition at line 154 of file freeglut_internal.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
CB_Display 
CB_Reshape 
CB_Keyboard 
CB_KeyboardUp 
CB_Special 
CB_SpecialUp 
CB_Mouse 
CB_MouseWheel 
CB_Motion 
CB_Passive 
CB_Entry 
CB_Visibility 
CB_WindowStatus 
CB_Joystick 
CB_Destroy 
CB_Select 
CB_OverlayDisplay 
CB_SpaceMotion 
CB_SpaceRotation 
CB_SpaceButton 
CB_Dials 
CB_ButtonBox 
CB_TabletMotion 
CB_TabletButton 
TOTAL_CALLBACKS 

Definition at line 442 of file freeglut_internal.h.

◆ fgExecutionState

Enumerator
GLUT_EXEC_STATE_INIT 
GLUT_EXEC_STATE_RUNNING 
GLUT_EXEC_STATE_STOP 

Definition at line 177 of file freeglut_internal.h.

Function Documentation

◆ fgAddToWindowDestroyList()

void fgAddToWindowDestroyList ( SFG_Window window)

◆ fgCheckActiveMenu()

GLboolean fgCheckActiveMenu ( SFG_Window window,
int  button,
GLboolean  pressed,
int  mouse_x,
int  mouse_y 
)

◆ fgChooseVisual()

XVisualInfo* fgChooseVisual ( void  )

◆ fgCloseWindow()

void fgCloseWindow ( SFG_Window window)

◆ fgCloseWindows()

void fgCloseWindows ( )

◆ fgCreateMenu()

SFG_Menu* fgCreateMenu ( FGCBMenu  menuCallback)

◆ fgCreateStructure()

void fgCreateStructure ( void  )

◆ fgCreateWindow()

SFG_Window* fgCreateWindow ( SFG_Window parent,
const char *  title,
int  x,
int  y,
int  w,
int  h,
GLboolean  gameMode,
GLboolean  isMenu 
)

◆ fgDeactivateMenu()

void fgDeactivateMenu ( SFG_Window window)

◆ fgDeinitialize()

void fgDeinitialize ( void  )

◆ fgDestroyMenu()

void fgDestroyMenu ( SFG_Menu menu)

◆ fgDestroyStructure()

void fgDestroyStructure ( void  )

◆ fgDestroyWindow()

void fgDestroyWindow ( SFG_Window window)

◆ fgDisplayMenu()

void fgDisplayMenu ( void  )

◆ fgElapsedTime()

long fgElapsedTime ( void  )

◆ fgEnumSubWindows()

void fgEnumSubWindows ( SFG_Window window,
FGCBenumerator  enumCallback,
SFG_Enumerator enumerator 
)

◆ fgEnumWindows()

void fgEnumWindows ( FGCBenumerator  enumCallback,
SFG_Enumerator enumerator 
)

◆ fgError()

void fgError ( const char *  fmt,
  ... 
)

◆ fgInitialiseJoysticks()

void fgInitialiseJoysticks ( void  )

◆ fgJoystickClose()

void fgJoystickClose ( void  )

◆ fgJoystickDetect()

int fgJoystickDetect ( void  )

◆ fgJoystickPollWindow()

void fgJoystickPollWindow ( SFG_Window window)

◆ fgListAppend()

void fgListAppend ( SFG_List list,
SFG_Node node 
)

◆ fgListInit()

void fgListInit ( SFG_List list)

◆ fgListInsert()

void fgListInsert ( SFG_List list,
SFG_Node next,
SFG_Node node 
)

◆ fgListLength()

int fgListLength ( SFG_List list)

◆ fgListRemove()

void fgListRemove ( SFG_List list,
SFG_Node node 
)

◆ fgMenuByID()

SFG_Menu* fgMenuByID ( int  menuID)

◆ fgOpenWindow()

void fgOpenWindow ( SFG_Window window,
const char *  title,
int  x,
int  y,
int  w,
int  h,
GLboolean  gameMode,
GLboolean  isSubWindow 
)

◆ fgSetCursor()

void fgSetCursor ( SFG_Window window,
int  cursorID 
)

◆ fgSetWindow()

void fgSetWindow ( SFG_Window window)

◆ fgUpdateMenuHighlight()

void fgUpdateMenuHighlight ( SFG_Menu menu)

◆ fgWarning()

void fgWarning ( const char *  fmt,
  ... 
)

◆ fgWindowByHandle()

SFG_Window* fgWindowByHandle ( SFG_WindowHandleType  hWindow)

◆ fgWindowByID()

SFG_Window* fgWindowByID ( int  windowID)

◆ glutJoystickGetNumAxes()

int glutJoystickGetNumAxes ( int  ident)

◆ glutJoystickGetNumButtons()

int glutJoystickGetNumButtons ( int  ident)

◆ glutJoystickNotWorking()

int glutJoystickNotWorking ( int  ident)

Variable Documentation

◆ fgDisplay

SFG_Display fgDisplay

◆ fgState

SFG_State fgState

◆ fgStructure

SFG_Structure fgStructure



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 7d5e6d718 Fri Aug 24 01:51:28 2018 +0200 at lun nov 2 08:35:50 CET 2020