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
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(richedit
);
35 extern HANDLE RICHED32_hHeap
;
37 void CHARLIST_Enqueue( CHARLIST
* pCharList
, char myChar
)
39 CHARLISTENTRY
* pNewEntry
= HeapAlloc(RICHED32_hHeap
, 0,sizeof(CHARLISTENTRY
));
40 pNewEntry
->pNext
= NULL
;
41 pNewEntry
->myChar
= myChar
;
45 if(pCharList
->pTail
== NULL
)
47 pCharList
->pHead
= pCharList
->pTail
= pNewEntry
;
51 CHARLISTENTRY
* pCurrent
= pCharList
->pTail
;
52 pCharList
->pTail
= pCurrent
->pNext
= pNewEntry
;
58 void CHARLIST_Push( CHARLIST
* pCharList
, char myChar
)
60 CHARLISTENTRY
* pNewEntry
= malloc(sizeof(CHARLISTENTRY
));
64 pNewEntry
->myChar
= myChar
;
66 if(pCharList
->pHead
== NULL
)
68 pCharList
->pHead
= pCharList
->pTail
= pNewEntry
;
69 pNewEntry
->pNext
= NULL
;
74 pNewEntry
->pNext
= pCharList
->pHead
;
75 pCharList
->pHead
= pNewEntry
;
81 char CHARLIST_Dequeue(CHARLIST
* pCharList
)
83 CHARLISTENTRY
* pCurrent
;
88 if(pCharList
->nCount
== 0)
92 myChar
= pCharList
->pHead
->myChar
;
93 pCurrent
= pCharList
->pHead
->pNext
;
94 HeapFree(RICHED32_hHeap
, 0,pCharList
->pHead
);
96 if(pCharList
->nCount
== 0)
98 pCharList
->pHead
= pCharList
->pTail
= NULL
;
102 pCharList
->pHead
= pCurrent
;
108 int CHARLIST_GetNbItems(CHARLIST
* pCharList
)
112 return pCharList
->nCount
;
115 void CHARLIST_FreeList(CHARLIST
* pCharList
){
118 while(pCharList
->nCount
)
119 CHARLIST_Dequeue(pCharList
);
122 /* this function counts the number of occurrences of a caracter */
123 int CHARLIST_CountChar(CHARLIST
* pCharList
, char myChar
)
125 CHARLISTENTRY
*pCurrent
;
130 for(pCurrent
=pCharList
->pHead
;pCurrent
;pCurrent
=pCurrent
->pNext
)
131 if(pCurrent
->myChar
== myChar
)
137 int CHARLIST_toBuffer(CHARLIST
* pCharList
, char* pBuffer
, int nBufferSize
)
142 /* we add one to store a NULL caracter */
143 if(nBufferSize
< pCharList
->nCount
+ 1)
144 return pCharList
->nCount
;
146 for(;pCharList
->nCount
;pBuffer
++)
147 *pBuffer
= CHARLIST_Dequeue(pCharList
);