home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / d / desklib / !DeskSrc / FN / Libraries / DeskMem / c / Buffer next >
Encoding:
Text File  |  1996-08-14  |  2.5 KB  |  123 lines

  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. #include "Desk.Debug.h"
  5. #include "Defs.h"
  6.  
  7.  
  8. void    Desk_DeskMem_BufferFree( Desk_deskmem_buffer* buffer)
  9. {
  10. Desk_Debug_Assert( buffer);
  11.  
  12. Desk_DeskMem_Free( buffer->data);
  13. buffer->data    = NULL;
  14. buffer->size    = 0;
  15. }
  16.  
  17.  
  18.  
  19.  
  20. void    Desk_DeskMem_BufferEnsure( Desk_deskmem_buffer* buffer, int min)
  21. {
  22. int    l;
  23.  
  24. Desk_Debug5_Printf( "Desk_DeskMem_BufferEnsure buffer=%p, min=%i\n", buffer, min);
  25.  
  26. Desk_Debug_Assert( buffer);
  27. Desk_Debug_Assert( buffer->increment > 0);
  28. Desk_Debug_Assert( min>=0);
  29.  
  30. l = ( 1 + min/buffer->increment) * buffer->increment;
  31.  
  32. if ( l!=buffer->size)    {
  33.     Desk_Debug5_Printf( "Desk_DeskMem_BufferEnsure - reallocating buffer at 0x%p (data 0x%p), new datasize %i (size=%i)\n",
  34.         buffer, buffer->data, min, l
  35.         );
  36.     buffer->data    = Desk_DeskMem_Realloc( buffer->data, l);    
  37.     buffer->size    = l;
  38.     }
  39.  
  40. buffer->datasize    = min;
  41.  
  42. return;
  43. }
  44.  
  45.  
  46.  
  47.  
  48. void    Desk_DeskMem_BufferInit( Desk_deskmem_buffer* buffer, int increment)
  49. {
  50. Desk_Debug_Assert( buffer);
  51. Desk_Debug_Assert( increment>0);
  52.  
  53. Desk_Debug5_Printf( "Desk_DeskMem_BufferInit, buffer=%p, increment=%i\n", buffer, increment);
  54.  
  55. buffer->size        = 0;
  56. buffer->datasize    = 0;
  57. buffer->data        = NULL;
  58. buffer->increment    = increment;
  59.  
  60. /*Desk_DeskMem_BufferEnsure( buffer, 0);*/
  61. }
  62.  
  63.  
  64.  
  65.  
  66. void    Desk_DeskMem_BufferEnsureExtra( Desk_deskmem_buffer *buffer, int extra)
  67. {
  68. Desk_DeskMem_BufferEnsure( buffer, buffer->datasize+extra);
  69. }
  70.  
  71.  
  72.  
  73.  
  74. void    Desk_DeskMem_BufferStrNCat( Desk_deskmem_buffer* buffer, const char* extra, int extralen)
  75. {
  76. int    oldlen;
  77.  
  78. Desk_Debug5_Printf( "Desk_DeskMem_BufferStrNCat buffer=%p, extra=%p, extralen=%i\n",
  79.     buffer, extra, extralen
  80.     );
  81.  
  82. Desk_Debug_Assert( buffer);
  83. Desk_Debug_Assert( buffer->data);
  84. Desk_Debug_Assert( extra);
  85.  
  86. oldlen    = (buffer->data) ? strlen( (char*) buffer->data) : 0;
  87.  
  88. Desk_Debug_Assert( oldlen < buffer->size);
  89. Desk_Debug_Assert( oldlen < buffer->datasize);
  90.  
  91. Desk_DeskMem_BufferEnsure( buffer, oldlen + extralen + 1);
  92.  
  93. strncat( ((char*) buffer->data) + oldlen, extra, extralen);
  94. }
  95.  
  96.  
  97.  
  98.  
  99.  
  100. void    Desk_DeskMem_BufferStrCat( Desk_deskmem_buffer* buffer, const char* extra)
  101. {
  102. Desk_Debug5_Printf( "Desk_DeskMem_BufferStrCat buffer=%p, s=%p\n", buffer, extra);
  103. Desk_Debug_Assert( extra);
  104.  
  105. Desk_DeskMem_BufferStrNCat( buffer, extra, strlen( extra));
  106. }
  107.  
  108.  
  109.  
  110.  
  111. void    Desk_DeskMem_BufferStrCpy( Desk_deskmem_buffer* buffer, const char* s)
  112. {
  113. Desk_Debug5_Printf( "Desk_DeskMem_BufferStrCpy buffer=%p, s=%p\n", buffer, s);
  114.  
  115. Desk_Debug_Assert( s);
  116. Desk_Debug_Assert( buffer);
  117.  
  118. Desk_DeskMem_BufferEnsure( buffer, 1 + strlen( s));
  119.  
  120. strcpy( (char*) buffer->data, s);
  121.  
  122. }
  123.