memory.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*====================================================================*
  2. *
  3. * memory.h - memory encode/decode definitions and delcaration;
  4. *
  5. * this file is a subset of the original that includes only those
  6. * definitions and declaration needed for toolkit programs;
  7. *
  8. * Motley Tools by Charles Maier;
  9. * Copyright 2001-2006 by Charles Maier Associates;
  10. * Licensed under the Internet Software Consortium License;
  11. *
  12. *--------------------------------------------------------------------*/
  13. #ifndef MEMORY_HEADER
  14. #define MEMORY_HEADER
  15. /*====================================================================*
  16. * system header files;
  17. *--------------------------------------------------------------------*/
  18. #include <stdio.h>
  19. #include <unistd.h>
  20. #include <stdint.h>
  21. #include <netinet/in.h>
  22. /*====================================================================*
  23. * custom header files;
  24. *--------------------------------------------------------------------*/
  25. #include "../tools/types.h"
  26. #include "../tools/endian.h"
  27. /*====================================================================*
  28. *
  29. *--------------------------------------------------------------------*/
  30. #define IPv4_LEN 4
  31. #define IPv6_LEN 16
  32. /*====================================================================*
  33. *
  34. *--------------------------------------------------------------------*/
  35. #ifndef offset
  36. #define offset(struct, member) (signed)(&struct.member)-(signed)(&struct)
  37. #endif
  38. /*====================================================================*
  39. *
  40. *--------------------------------------------------------------------*/
  41. #define HEXSTRING(string, memory) hexstring (string, sizeof (string), memory, sizeof (memory))
  42. #define HEXDUMP_HEADER "-------- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------\n"
  43. #define REGVIEW32_HEADER "REGISTER CONTENTS 31----24 23----16 15----08 07----00\n"
  44. #define REGVIEW16_HEADER "ADDR DATA 5432 1098 7654 3210\n"
  45. #define ADDRSIZE 8
  46. /*====================================================================*
  47. * macro expansions;
  48. *--------------------------------------------------------------------*/
  49. #define NEW(object) (object *)(emalloc(sizeof(object)))
  50. #define STR(length) (char *)(emalloc((length)+1))
  51. /*====================================================================*
  52. * memory increment/decrement functions;
  53. *--------------------------------------------------------------------*/
  54. signed strincr (void * memory, size_t extent, byte min, byte max);
  55. signed strdecr (void * memory, size_t extent, byte min, byte max);
  56. signed memincr (void * memory, size_t extent);
  57. signed memdecr (void * memory, size_t extent);
  58. /*====================================================================*
  59. *
  60. *--------------------------------------------------------------------*/
  61. bool memseek (void const * memory, size_t extent, void const * buffer, size_t length);
  62. /*====================================================================*
  63. * memory allocation functions;
  64. *--------------------------------------------------------------------*/
  65. void * emalloc (size_t length);
  66. /*====================================================================*
  67. * memory movement functions;
  68. *--------------------------------------------------------------------*/
  69. void memswap (void *, void *, size_t extent);
  70. void reverse (void * memory, size_t extent);
  71. /*====================================================================*
  72. * memory validation functions (deprecated);
  73. *--------------------------------------------------------------------*/
  74. uint32_t checksum_32 (const uint32_t memory [], size_t extent, uint32_t checksum);
  75. uint32_t fdchecksum_32 (int fd, size_t extent, uint32_t checksum);
  76. /*====================================================================*
  77. * memory validation functions;
  78. *--------------------------------------------------------------------*/
  79. uint32_t checksum32 (void const * memory, size_t extent, uint32_t checksum);
  80. uint32_t fdchecksum32 (int fd, size_t extent, uint32_t checksum);
  81. /*====================================================================*
  82. * memory encode functions;
  83. *--------------------------------------------------------------------*/
  84. size_t memencode (void * memory, size_t extent, char const * format, char const * string);
  85. size_t hexencode (void * memory, size_t extent, char const * string);
  86. size_t hexcopy (void * memory, size_t extent, char const * string);
  87. size_t decencode (void * memory, size_t extent, char const * string);
  88. size_t memdecode (void const * memory, size_t extent, char const * format, char const * string);
  89. size_t hexdecode (void const * memory, size_t extent, char buffer [], size_t length);
  90. size_t decdecode (void const * memory, size_t extent, char buffer [], size_t length);
  91. char * hexstring (char buffer [], size_t length, void const * memory, size_t extent);
  92. char * decstring (char buffer [], size_t length, void const * memory, size_t extent);
  93. char * hexoffset (char buffer [], size_t length, off_t offset);
  94. size_t bytespec (char const * string, void * memory, size_t extent);
  95. size_t dataspec (char const * string, void * memory, size_t extent);
  96. size_t ipv4spec (char const * string, void * memory);
  97. size_t ipv6spec (char const * string, void * memory);
  98. /*====================================================================*
  99. * memory input functions;
  100. *--------------------------------------------------------------------*/
  101. size_t hexload (void * memory, size_t extent, FILE *fp);
  102. /*====================================================================*
  103. * memory output functions;
  104. *--------------------------------------------------------------------*/
  105. void hexwrite (signed fd, void const * memory, size_t extent);
  106. void hexsave (void const * memory, size_t extent, size_t column, FILE *fp);
  107. void hexdump (void const * memory, size_t offset, size_t extent, FILE *fp);
  108. void bindump (void const * memory, size_t offset, size_t extent, FILE *fp);
  109. void hexview (void const * memory, size_t offset, size_t extent, FILE *fp);
  110. void hexpeek (void const * memory, size_t origin, size_t offset, size_t extent, size_t window, FILE * fp);
  111. void regview16 (void const * memory, size_t offset, size_t extent, FILE *fp);
  112. void regview32 (void const * memory, size_t offset, size_t extent, FILE *fp);
  113. void hexout (void const * memory, size_t extent, char c, char e, FILE *fp);
  114. void decout (void const * memory, size_t extent, char c, char e, FILE *fp);
  115. void binout (void const * memory, size_t extent, char c, char e, FILE *fp);
  116. void chrout (void const * memory, size_t extent, char c, char e, FILE *fp);
  117. void memout (void const * memory, size_t extent, char const * format, unsigned group, char c, char e, FILE *fp);
  118. /*====================================================================*
  119. * end definitions;
  120. *--------------------------------------------------------------------*/
  121. #endif