2,14 → 2,7 |
#ifndef __jxl_Date_get_h__ |
#define __jxl_Date_get_h__ |
|
typedef unsigned int uint32_t; |
typedef unsigned char uint8_t; |
typedef unsigned short int uint16_t; |
typedef unsigned long long uint64_t; |
typedef char int8_t; |
typedef short int int16_t; |
typedef int int32_t; |
typedef long long int64_t; |
#include <stdint.h> |
|
static inline uint32_t getDate(void) |
{ |
44,18 → 37,30 |
{ |
int32_t val; |
|
uint8_t dt[28]; // basic information structure. |
struct file_op_t |
{ |
uint32_t fn; |
uint32_t reserved0; |
uint32_t reserved1; |
uint32_t number_of_bytes_to_write; |
void * pointer_to_data; |
char path[1]; |
} *file_op = calloc(sizeof(*file_op) + strlen(path) + 2, 1); // FIXME: Not works on UTF16LE enc |
|
(uint32_t) dt[0] = 2; // subfunction number. |
(uint32_t) dt[4] = 0; // reserved. |
(uint32_t) dt[8] = 0; // reserved. |
(uint32_t) dt[12] = nbytes; // number of bytes to write. |
(uint8_t *) dt[16] = data; // pointer to data. |
(uint32_t) dt[20] = enc; // string encoding (0 = default, 1 = cp866, 2 = UTF-16LE, 3 = UTF-8). |
(uint8_t *) dt[24] = path; // pointer to path. |
file_op->fn = 2; |
file_op->number_of_bytes_to_write = nbytes; |
file_op->pointer_to_data = data; |
if (enc != 0) |
{ |
file_op->path[0] = enc; |
strcpy(file_op->path + 1, path); |
} |
else |
{ |
strcpy(file_op->path, path); |
} |
|
__asm__ __volatile__("int $0x40":"=a"(val):"a"(80), "b"(&dt)); |
|
asm volatile ("int $0x40":"=a"(val):"a"(80), "b"(file_op)); |
return val; |
} |
|