5 * Copyright (c) 2000 by Jean-Claude Batista
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32 #include "wine/debug.h"
34 WINE_DEFAULT_DEBUG_CHANNEL(richedit
);
36 extern HANDLE RICHED32_hHeap
;
38 void CHARLIST_Enqueue( CHARLIST
* pCharList
, char myChar
)
40 CHARLISTENTRY
* pNewEntry
= HeapAlloc(RICHED32_hHeap
, 0,sizeof(CHARLISTENTRY
));
41 pNewEntry
->pNext
= NULL
;
42 pNewEntry
->myChar
= myChar
;
46 if(pCharList
->pTail
== NULL
)
48 pCharList
->pHead
= pCharList
->pTail
= pNewEntry
;
52 CHARLISTENTRY
* pCurrent
= pCharList
->pTail
;
53 pCharList
->pTail
= pCurrent
->pNext
= pNewEntry
;
59 char CHARLIST_Dequeue(CHARLIST
* pCharList
)
61 CHARLISTENTRY
* pCurrent
;
66 if(pCharList
->nCount
== 0)
70 myChar
= pCharList
->pHead
->myChar
;
71 pCurrent
= pCharList
->pHead
->pNext
;
72 HeapFree(RICHED32_hHeap
, 0,pCharList
->pHead
);
74 if(pCharList
->nCount
== 0)
76 pCharList
->pHead
= pCharList
->pTail
= NULL
;
80 pCharList
->pHead
= pCurrent
;
86 int CHARLIST_GetNbItems(CHARLIST
* pCharList
)
90 return pCharList
->nCount
;
93 void CHARLIST_FreeList(CHARLIST
* pCharList
){
96 while(pCharList
->nCount
)
97 CHARLIST_Dequeue(pCharList
);
100 /* this function counts the number of occurrences of a caracter */
101 int CHARLIST_CountChar(CHARLIST
* pCharList
, char myChar
)
103 CHARLISTENTRY
*pCurrent
;
108 for(pCurrent
=pCharList
->pHead
;pCurrent
;pCurrent
=pCurrent
->pNext
)
109 if(pCurrent
->myChar
== myChar
)
115 int CHARLIST_toBuffer(CHARLIST
* pCharList
, char* pBuffer
, int nBufferSize
)
120 /* we add one to store a NULL caracter */
121 if(nBufferSize
< pCharList
->nCount
+ 1)
122 return pCharList
->nCount
;
124 for(;pCharList
->nCount
;pBuffer
++)
125 *pBuffer
= CHARLIST_Dequeue(pCharList
);