OSDN Git Service

* CreateFile: test_libedittext_undoedit.c
[drdeamon64/drdeamon64.git] / libedittext / drd64_libedittext_system.c
1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2
3                          D r . D e a m o n  6 4
4                         for INTEL64(R), AMD64(R)
5         
6    Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
10
11  1. Redistributions of source code must retain the above copyright notice,
12     this list of conditions and the following disclaimer.
13  2. Redistributions in binary form must reproduce the above copyright
14     notice, this list of conditions and the following disclaimer in the
15     documentation and/or other materials provided with the distribution.
16
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30
31 /* File Info -----------------------------------------------------------
32 File: drd64_.c
33 Function: 
34 Comment: 
35 ----------------------------------------------------------------------*/
36
37 #define DRD64_SRC_LIBEDITTEXT_SYSTEM
38 #include"drd64_libedittext.h"
39
40 #define LOCATION(n)     DRD64_ERR_LOCATION( \
41                                         DRD64_ERROR_MODULE_LIBEDITTEXT, DRD64_ERROR_ARCH_NODEPEND, \
42                                         DRD64_SRC_LIBEDITTEXT_SYSTEM_SRCID, (n))
43
44
45 /*----------------------------------------------------------------------
46 ----------------------------------------------------------------------*/
47 #define FUNCID_LibEditText_System_GetMaxNum_TextInfo    0x01
48 DWord
49         LibEditText_System_GetMaxNum_TextInfo(
50                         void )
51 {
52         return gdw_max_textinfo;
53 }
54
55
56 /*----------------------------------------------------------------------
57 ----------------------------------------------------------------------*/
58 #define FUNCID_LibEditText_System_GetAllocNum_TextInfo  0x02
59 DWord
60         LibEditText_System_GetAllocNum_TextInfo(
61                         void )
62 {
63         return gdw_alloc_textinfo;
64 }
65
66
67 /*----------------------------------------------------------------------
68 ----------------------------------------------------------------------*/
69 #define FUNCID_LibEditText_System_GetNoneNameFiles      0x03
70 LIBEDITTEXT_SYSTEM_EXTERN
71 DWord
72         LibEditText_System_GetNoneNameFiles(
73                         void )
74 {
75         return ++gdw_nonenamefiles;
76 }
77
78
79 /*----------------------------------------------------------------------
80 ----------------------------------------------------------------------*/
81 #define FUNCID_LibEditText_System_GetTextInfo   0x04
82 LIBEDITTEXT_SYSTEM_EXTERN
83 LibEditText_TextInfo    *
84         LibEditText_System_GetTextInfo(
85                         int i_tinfoid )
86 {
87         if( ( 0 > i_tinfoid ) || ( gdw_max_textinfo <= i_tinfoid ))             {
88                 LibBrownie_Error_SetErrorInfo(
89                                 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
90                                 LOCATION( FUNCID_LibEditText_System_GetTextInfo ),
91                                 errno, (QWord)i_tinfoid, (QWord)0x00, __LINE__ ); 
92
93                 return NULL;
94         }
95
96         return (gp_textinfo + i_tinfoid);
97 }
98
99
100 /*----------------------------------------------------------------------
101 ----------------------------------------------------------------------*/
102 #define FUNCID_LibEditText_System_ExpandTextBuffer      0x05
103 LIBEDITTEXT_SYSTEM_EXTERN
104 int
105         LibEditText_System_ExpandTextBuffer(
106                         LibEditText_TextInfo    *p_tinfo,
107                         DWord   dw_expandsize )
108 {
109         Byte    *pb_text;
110         Byte    *pb_attr;
111
112         assert( NULL != p_tinfo );
113
114         if( 0 == dw_expandsize )        {
115                 LibBrownie_Error_SetErrorInfo(
116                                 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
117                                 LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
118                                 errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ ); 
119
120                 return -0x01;
121         }
122
123         pb_text = (Byte *)realloc( p_tinfo->pb_text,
124                                                 (p_tinfo->dw_bufsize + dw_expandsize
125                                                 + DRD64_LIBEDITTEXT_DEFAULT_COPYBUFFER) );
126         if( NULL == pb_text )   {
127                 LibBrownie_Error_SetErrorInfo(
128                                 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x02 ),
129                                 LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
130                                 errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ ); 
131
132                 return -0x02;
133         }
134         p_tinfo->pb_text                = pb_text;
135
136         pb_text += p_tinfo->dw_bufsize;
137         memset( pb_text, 0x00, dw_expandsize );
138
139         if( NULL != p_tinfo->pb_attr )  {
140                 pb_attr = (Byte *)realloc( p_tinfo->pb_attr,
141                                                 (p_tinfo->dw_bufsize + dw_expandsize ) );
142                 if( NULL == pb_attr )   {
143                         LibBrownie_Error_SetErrorInfo(
144                                         DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x03 ),
145                                         LOCATION( FUNCID_LibEditText_System_ExpandTextBuffer ),
146                                         errno, (QWord)dw_expandsize, (QWord)0x00, __LINE__ ); 
147
148                         return -0x03;
149                 }
150                 p_tinfo->pb_attr                = pb_attr;
151
152                 pb_attr += p_tinfo->dw_bufsize;
153                 memset( pb_attr, 0x00, dw_expandsize );
154         }
155
156         p_tinfo->dw_bufsize             += dw_expandsize;
157
158         return 0x00;
159 }
160
161
162 /*----------------------------------------------------------------------
163 ----------------------------------------------------------------------*/
164 #define FUNCID_LibEditText_System_InitTextInfo  0x06
165 LIBEDITTEXT_SYSTEM_EXTERN
166 int
167         LibEditText_System_InitTextInfo(
168                         LibEditText_TextInfo    *p_tinfo,
169                         Word    w_subtype,
170                         DWord   dw_maxline,
171                         DWord   dw_bufline,
172                         DWord   dw_bufsize )
173 {
174         int             i_result;
175         LibEditText_LineInfo            *p_line;
176         Byte    *pb_text;
177         Byte    *pb_attr;
178
179         if(( NULL == p_tinfo ) || ( 0 == dw_bufsize ) || ( 0 == dw_bufline))    {
180                 LibBrownie_Error_SetErrorInfo(
181                                 DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
182                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
183                                 errno, (QWord)dw_bufsize, (QWord)dw_bufline, __LINE__ ); 
184
185                 return -0x01;
186         }
187         
188         /* Alloc Text Buffer Memory --- */
189         pb_text = (Byte *)malloc( dw_bufsize + DRD64_LIBEDITTEXT_DEFAULT_COPYBUFFER );
190         if( NULL == pb_text )   {
191                 LibBrownie_Error_SetErrorInfo(
192                                 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x11 ),
193                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
194                                 errno, (QWord)dw_bufsize, (QWord)0x00, __LINE__ ); 
195
196                 return -0x11;
197         }
198         memset( pb_text, 0x00, dw_bufsize );
199
200         /* Alloc Attribute Buffer Memory --- */
201         pb_attr = (Byte *)malloc( dw_bufsize );
202         if( NULL == pb_attr )   {
203                 LibBrownie_Error_SetErrorInfo(
204                                 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x12 ),
205                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
206                                 errno, (QWord)dw_bufsize, (QWord)0x00, __LINE__ ); 
207
208                 return -0x12;
209         }
210         memset( pb_attr, 0x00, dw_bufsize );
211
212         /* Alloc LineInfo Struct --- */
213         p_line  = LibEditText_LineInfo_Init( p_tinfo, dw_bufline );
214         if( NULL == p_line )    {
215                 LibBrownie_Error_SetErrorInfo(
216                                 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x13 ),
217                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
218                                 errno, (QWord)dw_bufline, (QWord)0x00, __LINE__ ); 
219
220                 return -0x13;
221         }
222
223         /* Set Param. to TextInfo Struct --- */
224         p_tinfo->w_subtype              = w_subtype;
225         p_tinfo->pb_text                = pb_text;
226         p_tinfo->pb_attr                = pb_attr;
227         p_tinfo->p_lineinfo             = p_line;
228         p_tinfo->dw_bufsize             = dw_bufsize;
229         p_tinfo->dw_attrsize    = dw_bufsize;
230         p_tinfo->dw_maxline             = dw_maxline;
231         p_tinfo->dw_line_start  = INVALID_LINE;
232         p_tinfo->dw_line_end    = INVALID_LINE;
233
234         i_result        = LibEditText_Section_InitSection( p_tinfo );
235         if( 0x00 != i_result )  {
236                 LibBrownie_Error_SetErrorInfo(
237                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x14 ),
238                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
239                                 errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
240
241                 return -0x014;
242         }
243
244         i_result        = LibEditText_CursorInfo_InitCursor( p_tinfo );
245         if( 0x00 != i_result )  {
246                 LibBrownie_Error_SetErrorInfo(
247                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x15 ),
248                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
249                                 errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
250
251                 return -0x015;
252         }
253
254         i_result        = LibEditText_UndoInfo_Init( p_tinfo );
255         if( 0x00 != i_result )  {
256                 LibBrownie_Error_SetErrorInfo(
257                                 DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x16 ),
258                                 LOCATION( FUNCID_LibEditText_System_InitTextInfo ),
259                                 errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
260
261                 return -0x016;
262         }
263         
264         return 0x00;
265 }
266
267
268 /*----------------------------------------------------------------------
269 ----------------------------------------------------------------------*/
270 #define FUNCID_LibEditText_System_SearchEmptyTextInfo   0x07
271 DWord
272         LibEditText_System_SearchEmptyTextInfo(
273                         void )
274 {
275         DWord                                   dw_cnt  = 0;
276         LibEditText_TextInfo            *p_tinfo        = NULL;
277
278         for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- )  {
279                 p_tinfo = (gp_textinfo + dw_cnt - 1);
280
281                 assert( NULL != p_tinfo );
282                 if( -1 == p_tinfo->i_id )       { break; }
283         }
284
285         return dw_cnt;
286 }
287
288
289 /*----------------------------------------------------------------------
290 Alloc
291 ----------------------------------------------------------------------*/
292 #define FUNCID_LibEditText_System_AllocTextInfo 0x08
293 LIBEDITTEXT_SYSTEM_EXTERN
294 LibEditText_TextInfo *
295         LibEditText_System_AllocTextInfo(
296                         void )
297 {
298         int                     i_tmp;
299         DWord           dw_size;
300         DWord           dw_cnt;
301         LibEditText_TextInfo            *p_textinfo     = NULL;
302         LibEditText_TextInfo            *p_tmp;
303
304         dw_cnt  = LibEditText_System_SearchEmptyTextInfo();
305
306         if( 0 == dw_cnt )       {
307                 if( gdw_max_textinfo == gdw_alloc_textinfo )    {
308                         dw_size = sizeof( LibEditText_TextInfo )
309                                                 * (gdw_alloc_textinfo + DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO);
310                         p_textinfo      = (LibEditText_TextInfo *)realloc( gp_textinfo, dw_size );
311                         if( NULL == p_textinfo )        {
312                                 LibBrownie_Error_SetErrorInfo(
313                                                 DRD64_ERROR( DRD64_ERROR_PTN_NOMEMORY, 0x01, 0x00 ),
314                                                 LOCATION( FUNCID_LibEditText_System_AllocTextInfo ),
315                                                 errno, (QWord)0x00, (QWord)dw_size, __LINE__ ); 
316
317                                 return NULL;
318                         }
319
320                         p_tmp   = p_textinfo + gdw_max_textinfo;
321                         memset( p_tmp, 0x00,
322                                         sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
323                         for( i_tmp = 0; i_tmp < DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO; i_tmp++, p_tmp++ )
324                                 { p_tmp->i_id   = -1; } 
325
326                         gp_textinfo                     = p_textinfo;
327                         gdw_alloc_textinfo      += DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO;
328                         p_textinfo      = NULL;
329                 }
330                 dw_cnt  = gdw_max_textinfo + 1;
331         }
332
333         if( 0 < dw_cnt )        {
334                 p_textinfo      = (gp_textinfo + dw_cnt - 1);
335                 memset( p_textinfo, 0x00, sizeof( LibEditText_TextInfo ) );
336
337                 p_textinfo->i_id                = (int)(dw_cnt - 1);
338                 p_textinfo->pb_text             = NULL;
339                 p_textinfo->p_lineinfo  = NULL;
340                 p_textinfo->dw_bufsize  = 0;
341                 p_textinfo->dw_maxline  = 0;
342                 p_textinfo->dw_bufline  = 0;
343         }
344
345         if(     dw_cnt == gdw_max_textinfo + 1 )
346                 { gdw_max_textinfo++; }
347
348         gdw_used_textinfo++;
349
350         return p_textinfo;
351 }
352
353
354 /*----------------------------------------------------------------------
355 ----------------------------------------------------------------------*/
356 #define FUNCID_LibEditText_System_ClearTextInfo 0x09
357 LIBEDITTEXT_SYSTEM_EXTERN
358 int
359         LibEditText_System_ClearTextInfo(
360                         LibEditText_TextInfo    *p_tinfo )
361 {
362         int             i_result;
363
364         if( NULL == p_tinfo )   {
365                 LibBrownie_Error_SetErrorInfo(
366                         DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
367                         LOCATION( FUNCID_LibEditText_System_ClearTextInfo ),
368                         errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
369
370                 return -0x01;
371         }
372
373         i_result        = LibEditText_Section_TermSection( p_tinfo );
374         if( 0x00 != i_result )  {
375                 LibBrownie_Error_SetErrorInfo(
376                         DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
377                         LOCATION( FUNCID_LibEditText_System_ClearTextInfo ),
378                         errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
379
380                 return -0x02;
381         }
382
383         assert( NULL != p_tinfo->pb_text );
384         free( p_tinfo->pb_text );
385
386         assert( NULL != p_tinfo->pb_attr );
387         free( p_tinfo->pb_attr );
388
389         assert( NULL != p_tinfo->p_lineinfo );
390         free( p_tinfo->p_lineinfo );
391
392         p_tinfo->pb_text                = NULL;
393         p_tinfo->pb_attr                = NULL;
394         p_tinfo->p_lineinfo             = NULL;
395         p_tinfo->dw_bufsize             = 0;
396         p_tinfo->dw_attrsize    = 0;
397         p_tinfo->dw_maxline             = 0;
398         p_tinfo->dw_bufline             = 0;
399
400         return 0x00;
401 }
402
403
404 /*----------------------------------------------------------------------
405 Alloc
406 ----------------------------------------------------------------------*/
407 #define FUNCID_LibEditText_System_FreeTextInfo  0x0a
408 LIBEDITTEXT_SYSTEM_EXTERN
409 int
410         LibEditText_System_FreeTextInfo(
411                 LibEditText_TextInfo            *p_tinfo )
412 {
413         int                                             i_oldid;
414         DWord                                   dw_cnt  = 0;
415         LibEditText_TextInfo            *p_tmp;
416
417         if( NULL == p_tinfo )           {
418                 LibBrownie_Error_SetErrorInfo(
419                         DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x01 ),
420                         LOCATION( FUNCID_LibEditText_System_FreeTextInfo ),
421                         errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
422
423                 return -0x01;
424         }
425         if( -1 == p_tinfo->i_id )       {
426                 LibBrownie_Error_SetErrorInfo(
427                         DRD64_ERROR( DRD64_ERROR_PTN_FAILED_ARG, 0x01, 0x02 ),
428                         LOCATION( FUNCID_LibEditText_System_FreeTextInfo ),
429                         errno, (QWord)p_tinfo->i_id, (QWord)0x00, __LINE__ ); 
430
431                 return -0x02;
432         }
433
434         LibEditText_UndoInfo_Term( p_tinfo );
435         LibEditText_CursorInfo_TermCursor( p_tinfo );
436
437         /* Clear TextInfo Struct */
438         i_oldid                         = p_tinfo->i_id;
439         p_tinfo->i_id           = -1;
440         p_tinfo->pb_text        = NULL;
441
442         gdw_used_textinfo--;
443
444         if( 0 == gdw_used_textinfo )
445                 { gdw_max_textinfo      = 0; }
446         else if( i_oldid == gdw_max_textinfo - 1 )      {
447
448                 gdw_max_textinfo--;
449
450                 for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- )  {
451                         p_tmp   = (gp_textinfo + dw_cnt - 1);
452
453                         assert( NULL != p_tmp );
454                         if( -1 != p_tmp->i_id ) { break; }
455                 }
456                 if( 0 < dw_cnt )
457                         { gdw_max_textinfo      = dw_cnt; }
458         }
459         
460         return 0x00;
461 }
462
463
464 /*----------------------------------------------------------------------
465 Init
466 ----------------------------------------------------------------------*/
467 #define FUNCID_LibEditText_Init 0x0b
468 LIBEDITTEXT_API_SYSTEM
469 int
470         LibEditText_Init(
471                         void )
472 {
473         int                                             i_cnt;
474         int                                             i_result;
475         LibEditText_TextInfo    *p_textinfo;
476         LibEditText_TextInfo    *p_tmp;
477
478         if( NULL != gp_textinfo )       { return 0x01; }
479
480         i_result        = LibBrownie_Init();
481         if( 0x00 != i_result )          { return -0x02; }
482
483         i_result        = LibFileType_Init();
484         if( 0x00 != i_result )          {
485                 LibBrownie_Error_SetErrorInfo(
486                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x03 ),
487                         LOCATION( FUNCID_LibEditText_Init ),
488                         errno, (QWord)i_result, (QWord)0x00, __LINE__ ); 
489
490                 return -0x03;
491         }
492
493         p_textinfo      = (LibEditText_TextInfo *)malloc(
494                                         sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
495         if( NULL == p_textinfo )        {
496                 LibBrownie_Error_SetErrorInfo(
497                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x04 ),
498                         LOCATION( FUNCID_LibEditText_Init ),
499                         errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
500
501                 return -0x04;
502         }
503         memset( p_textinfo, 0x00,
504                         sizeof( LibEditText_TextInfo ) * DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO );
505
506         gp_textinfo                     = p_textinfo;
507         gdw_max_textinfo        = 0;
508         gdw_alloc_textinfo      = DRD64_LIBEDITTEXT_DEFAULT_ALLOC_TEXTINFO;
509
510         p_tmp   = p_textinfo;
511         for( i_cnt = 0; i_cnt < gdw_alloc_textinfo; i_cnt++, p_tmp++ )
512                 { p_tmp->i_id           = -1; }
513
514         return 0x00;
515 }
516
517
518 /*----------------------------------------------------------------------
519 Term
520 ----------------------------------------------------------------------*/
521 #define FUNCID_LibEditText_Term 0x0c
522 LIBEDITTEXT_API_SYSTEM
523 int
524         LibEditText_Term(
525                         void )
526 {
527         DWord   dw_cnt;
528         LibEditText_TextInfo    *p_textinfo;
529
530         if( NULL == gp_textinfo)        {
531                 LibBrownie_Error_SetErrorInfo(
532                         DRD64_ERROR( DRD64_ERROR_PTN_CALLFUNC, 0x01, 0x01 ),
533                         LOCATION( FUNCID_LibEditText_Term ),
534                         errno, (QWord)0x00, (QWord)0x00, __LINE__ ); 
535
536                 return -0x01;
537         }
538
539         for( dw_cnt = gdw_max_textinfo; dw_cnt > 0; dw_cnt-- )  {
540                 p_textinfo      = (gp_textinfo + dw_cnt - 1);
541                 assert( NULL != p_textinfo );
542
543                 p_textinfo->i_id        = -1;
544         }
545
546         free( gp_textinfo );
547         gp_textinfo     = NULL;
548
549         LibFileType_Term();
550         LibBrownie_Term();
551
552         return 0x00;
553 }
554
555
556 /* EOF of drd64_.c ---------------------------------- */
557