* external/libhpdf/Makefile
+ Enabled for all dos platforms (dos/watcom currently and
probably all dos builds done on MS-DOS hosts).
+ external/libhpdf/ori_dst
+ external/libhpdf/ori_src
+ external/libhpdf/cnv_hb2o.bat
+ external/libhpdf/cnv_o2hb.bat
- external/libhpdf/hpdf_annotation.c
- external/libhpdf/hpdf_annotation.h
- external/libhpdf/hpdf_array.c
- external/libhpdf/hpdf_binary.c
- external/libhpdf/hpdf_boolean.c
- external/libhpdf/hpdf_catalog.c
- external/libhpdf/hpdf_catalog.h
- external/libhpdf/hpdf_conf.h
- external/libhpdf/hpdf_config.h
- external/libhpdf/hpdf_consts.h
- external/libhpdf/hpdf_destination.c
- external/libhpdf/hpdf_destination.h
- external/libhpdf/hpdf_dict.c
- external/libhpdf/hpdf_doc.c
- external/libhpdf/hpdf_doc.h
- external/libhpdf/hpdf_doc_png.c
- external/libhpdf/hpdf_encoder.c
- external/libhpdf/hpdf_encoder.h
- external/libhpdf/hpdf_encoder_cns.c
- external/libhpdf/hpdf_encoder_cnt.c
- external/libhpdf/hpdf_encoder_jp.c
- external/libhpdf/hpdf_encoder_kr.c
- external/libhpdf/hpdf_encrypt.c
- external/libhpdf/hpdf_encrypt.h
- external/libhpdf/hpdf_encryptdict.c
- external/libhpdf/hpdf_encryptdict.h
- external/libhpdf/hpdf_error.c
- external/libhpdf/hpdf_error.h
- external/libhpdf/hpdf_ext_gstate.c
- external/libhpdf/hpdf_ext_gstate.h
- external/libhpdf/hpdf_font.c
- external/libhpdf/hpdf_font.h
- external/libhpdf/hpdf_font_cid.c
- external/libhpdf/hpdf_font_tt.c
- external/libhpdf/hpdf_font_type1.c
- external/libhpdf/hpdf_fontdef.c
- external/libhpdf/hpdf_fontdef.h
- external/libhpdf/hpdf_fontdef_base14.c
- external/libhpdf/hpdf_fontdef_cid.c
- external/libhpdf/hpdf_fontdef_cns.c
- external/libhpdf/hpdf_fontdef_cnt.c
- external/libhpdf/hpdf_fontdef_jp.c
- external/libhpdf/hpdf_fontdef_kr.c
- external/libhpdf/hpdf_fontdef_tt.c
- external/libhpdf/hpdf_fontdef_type1.c
- external/libhpdf/hpdf_gstate.c
- external/libhpdf/hpdf_gstate.h
- external/libhpdf/hpdf_image.c
- external/libhpdf/hpdf_image.h
- external/libhpdf/hpdf_image_png.c
- external/libhpdf/hpdf_info.c
- external/libhpdf/hpdf_info.h
- external/libhpdf/hpdf_list.c
- external/libhpdf/hpdf_list.h
- external/libhpdf/hpdf_mmgr.c
- external/libhpdf/hpdf_mmgr.h
- external/libhpdf/hpdf_name.c
- external/libhpdf/hpdf_null.c
- external/libhpdf/hpdf_number.c
- external/libhpdf/hpdf_objects.c
- external/libhpdf/hpdf_objects.h
- external/libhpdf/hpdf_outline.c
- external/libhpdf/hpdf_outline.h
- external/libhpdf/hpdf_page_label.c
- external/libhpdf/hpdf_page_label.h
- external/libhpdf/hpdf_page_operator.c
- external/libhpdf/hpdf_pages.c
- external/libhpdf/hpdf_pages.h
- external/libhpdf/hpdf_real.c
- external/libhpdf/hpdf_streams.c
- external/libhpdf/hpdf_streams.h
- external/libhpdf/hpdf_string.c
- external/libhpdf/hpdf_types.h
- external/libhpdf/hpdf_u3d.c
- external/libhpdf/hpdf_u3d.h
- external/libhpdf/hpdf_utils.c
- external/libhpdf/hpdf_utils.h
- external/libhpdf/hpdf_version.h
- external/libhpdf/hpdf_xref.c
+ external/libhpdf/hpdfanno.c
+ external/libhpdf/hpdfanno.h
+ external/libhpdf/hpdfarra.c
+ external/libhpdf/hpdfbina.c
+ external/libhpdf/hpdfbool.c
+ external/libhpdf/hpdfcata.c
+ external/libhpdf/hpdfcata.h
+ external/libhpdf/hpdfcfg.h
+ external/libhpdf/hpdfconf.h
+ external/libhpdf/hpdfcons.h
+ external/libhpdf/hpdfdest.c
+ external/libhpdf/hpdfdest.h
+ external/libhpdf/hpdfdict.c
+ external/libhpdf/hpdfdoc.c
+ external/libhpdf/hpdfdoc.h
+ external/libhpdf/hpdfdocp.c
+ external/libhpdf/hpdfecy.c
+ external/libhpdf/hpdfecyd.c
+ external/libhpdf/hpdfencc.c
+ external/libhpdf/hpdfencj.c
+ external/libhpdf/hpdfenck.c
+ external/libhpdf/hpdfencn.c
+ external/libhpdf/hpdfenco.c
+ external/libhpdf/hpdfenco.h
+ external/libhpdf/hpdfencr.h
+ external/libhpdf/hpdfency.h
+ external/libhpdf/hpdferro.c
+ external/libhpdf/hpdferro.h
+ external/libhpdf/hpdfextg.c
+ external/libhpdf/hpdfextg.h
+ external/libhpdf/hpdffdf.c
+ external/libhpdf/hpdffdf1.c
+ external/libhpdf/hpdffdfb.c
+ external/libhpdf/hpdffdfc.c
+ external/libhpdf/hpdffdfi.c
+ external/libhpdf/hpdffdfj.c
+ external/libhpdf/hpdffdfk.c
+ external/libhpdf/hpdffdfn.c
+ external/libhpdf/hpdffdft.c
+ external/libhpdf/hpdffon1.c
+ external/libhpdf/hpdffonc.c
+ external/libhpdf/hpdffond.h
+ external/libhpdf/hpdffont.c
+ external/libhpdf/hpdffont.h
+ external/libhpdf/hpdffott.c
+ external/libhpdf/hpdfgsta.c
+ external/libhpdf/hpdfgsta.h
+ external/libhpdf/hpdfimag.c
+ external/libhpdf/hpdfimag.h
+ external/libhpdf/hpdfimap.c
+ external/libhpdf/hpdfinfo.c
+ external/libhpdf/hpdfinfo.h
+ external/libhpdf/hpdflist.c
+ external/libhpdf/hpdflist.h
+ external/libhpdf/hpdfmmgr.c
+ external/libhpdf/hpdfmmgr.h
+ external/libhpdf/hpdfname.c
+ external/libhpdf/hpdfnull.c
+ external/libhpdf/hpdfnumb.c
+ external/libhpdf/hpdfobje.c
+ external/libhpdf/hpdfobje.h
+ external/libhpdf/hpdfoutl.c
+ external/libhpdf/hpdfoutl.h
+ external/libhpdf/hpdfpage.c
+ external/libhpdf/hpdfpage.h
+ external/libhpdf/hpdfpago.c
+ external/libhpdf/hpdfpags.c
+ external/libhpdf/hpdfpags.h
+ external/libhpdf/hpdfreal.c
+ external/libhpdf/hpdfstre.c
+ external/libhpdf/hpdfstre.h
+ external/libhpdf/hpdfstri.c
+ external/libhpdf/hpdftype.h
+ external/libhpdf/hpdfu3d.c
+ external/libhpdf/hpdfu3d.h
+ external/libhpdf/hpdfutil.c
+ external/libhpdf/hpdfutil.h
+ external/libhpdf/hpdfvers.h
+ external/libhpdf/hpdfxref.c
* external/libhpdf/hpdf.h
* external/libhpdf/Makefile
* Converted to short filenames. Added converted scripts.
* source/hbpcre/cnv_hb2o.bat
* source/hbpcre/cnv_o2hb.bat
! Fixed typo in prev.
* Removed PCRE references from comment texts.
337 lines
7.2 KiB
C
337 lines
7.2 KiB
C
/*
|
|
* << Haru Free PDF Library >> -- hpdf_list.c
|
|
*
|
|
* URL: http://libharu.org
|
|
*
|
|
* Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
|
|
* Copyright (c) 2007-2008 Antony Dovgal <tony@daylessday.org>
|
|
*
|
|
* Permission to use, copy, modify, distribute and sell this software
|
|
* and its documentation for any purpose is hereby granted without fee,
|
|
* provided that the above copyright notice appear in all copies and
|
|
* that both that copyright notice and this permission notice appear
|
|
* in supporting documentation.
|
|
* It is provided "as is" without express or implied warranty.
|
|
*
|
|
*/
|
|
|
|
#include "hpdfconf.h"
|
|
#include "hpdfutil.h"
|
|
#include "hpdfcons.h"
|
|
#include "hpdflist.h"
|
|
|
|
static HPDF_STATUS
|
|
Resize (HPDF_List list,
|
|
HPDF_UINT count);
|
|
|
|
|
|
/*
|
|
* HPDF_List_new
|
|
*
|
|
* mmgr : handle to a HPDF_MMgr object.
|
|
* items_per_block : number of increases of pointers.
|
|
*
|
|
* return: If HPDF_List_New success, it returns a handle to new HPDF_List
|
|
* object, otherwise it returns NULL.
|
|
*
|
|
*/
|
|
|
|
HPDF_List
|
|
HPDF_List_New (HPDF_MMgr mmgr,
|
|
HPDF_UINT items_per_block)
|
|
{
|
|
HPDF_List list;
|
|
|
|
HPDF_PTRACE((" HPDF_List_New\n"));
|
|
|
|
if (mmgr == NULL)
|
|
return NULL;
|
|
|
|
list = (HPDF_List)HPDF_GetMem (mmgr, sizeof(HPDF_List_Rec));
|
|
if (list) {
|
|
list->mmgr = mmgr;
|
|
list->error = mmgr->error;
|
|
list->block_siz = 0;
|
|
list->items_per_block =
|
|
(items_per_block <= 0 ? HPDF_DEF_ITEMS_PER_BLOCK : items_per_block);
|
|
list->count = 0;
|
|
list->obj = NULL;
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_add
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* item : Pointer to a object to be added.
|
|
*
|
|
* return: If HPDF_List_Add success, it returns HPDF_OK.
|
|
* HPDF_FAILD_TO_ALLOC_MEM is returned when the expansion of the
|
|
* object list is failed.
|
|
*
|
|
*/
|
|
|
|
HPDF_STATUS
|
|
HPDF_List_Add (HPDF_List list,
|
|
void *item)
|
|
{
|
|
HPDF_PTRACE((" HPDF_List_Add\n"));
|
|
|
|
if (list->count >= list->block_siz) {
|
|
HPDF_STATUS ret = Resize (list,
|
|
list->block_siz + list->items_per_block);
|
|
|
|
if (ret != HPDF_OK) {
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
list->obj[list->count++] = item;
|
|
return HPDF_OK;
|
|
}
|
|
|
|
|
|
/*
|
|
* HPDF_List_Insert
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* target : Pointer to the target object.
|
|
* item : Pointer to a object to be inserted.
|
|
*
|
|
* insert the item before the target.
|
|
*
|
|
* return: If HPDF_List_Add success, it returns HPDF_OK.
|
|
* HPDF_FAILD_TO_ALLOC_MEM is returned when the expansion of the
|
|
* object list is failed.
|
|
* HPDF_ITEM_NOT_FOUND is returned where the target object is not
|
|
* found.
|
|
*
|
|
*/
|
|
|
|
HPDF_STATUS
|
|
HPDF_List_Insert (HPDF_List list,
|
|
void *target,
|
|
void *item)
|
|
{
|
|
HPDF_INT target_idx = HPDF_List_Find (list, target);
|
|
void *last_item = list->obj[list->count - 1];
|
|
HPDF_INT i;
|
|
|
|
HPDF_PTRACE((" HPDF_List_Insert\n"));
|
|
|
|
if (target_idx < 0)
|
|
return HPDF_ITEM_NOT_FOUND;
|
|
|
|
/* move the item of the list to behind one by one. */
|
|
for (i = list->count - 2; i >= target_idx; i--)
|
|
list->obj[i + 1] = list->obj[i];
|
|
|
|
list->obj[target_idx] = item;
|
|
|
|
return HPDF_List_Add (list, last_item);
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_Remove
|
|
*
|
|
* Remove the object specified by item parameter from the list object. The
|
|
* memory area that the object uses is not released.
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* item : Pointer to a object to be remove.
|
|
*
|
|
* return: If HPDF_List_Remove success, it returns HPDF_OK.
|
|
* HPDF_ITEM_NOT_FOUND is returned when the object specified by item
|
|
* parameter is not found.
|
|
*
|
|
*/
|
|
|
|
HPDF_STATUS
|
|
HPDF_List_Remove (HPDF_List list,
|
|
void *item)
|
|
{
|
|
HPDF_UINT i;
|
|
void **obj = list->obj;
|
|
|
|
HPDF_PTRACE((" HPDF_List_Remove\n"));
|
|
|
|
for (i = 0; i < list->count; i++) {
|
|
if (*obj == item) {
|
|
HPDF_List_RemoveByIndex(list, i);
|
|
return HPDF_OK;
|
|
} else
|
|
obj++;
|
|
}
|
|
|
|
return HPDF_ITEM_NOT_FOUND;
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_RemoveByIndex
|
|
*
|
|
* Remove the object by index number.
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* index : Index of a object to be remove.
|
|
*
|
|
* return: If HPDF_List_RemoveByIndex success, it returns HPDF_OK.
|
|
* HPDF_ITEM_NOT_FOUND is returned when the value which is specified
|
|
* by index parameter is invalid.
|
|
*
|
|
*/
|
|
|
|
void*
|
|
HPDF_List_RemoveByIndex (HPDF_List list,
|
|
HPDF_UINT index)
|
|
{
|
|
void *tmp;
|
|
|
|
HPDF_PTRACE((" HPDF_List_RemoveByIndex\n"));
|
|
|
|
if (list->count <= index)
|
|
return NULL;
|
|
|
|
tmp = list->obj[index];
|
|
|
|
while (index < list->count - 1) {
|
|
list->obj[index] = list->obj[index + 1];
|
|
index++;
|
|
}
|
|
|
|
list->count--;
|
|
|
|
return tmp;
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_ItemAt
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* index : Index of a object.
|
|
*
|
|
* return: If HPDF_List_at success, it returns a pointer to the object.
|
|
* otherwise it returns NULL.
|
|
*
|
|
*/
|
|
|
|
void*
|
|
HPDF_List_ItemAt (HPDF_List list,
|
|
HPDF_UINT index)
|
|
{
|
|
HPDF_PTRACE((" HPDF_List_ItemAt\n"));
|
|
|
|
return (list->count <= index) ? NULL : list->obj[index];
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_free
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
*
|
|
*/
|
|
|
|
void
|
|
HPDF_List_Free (HPDF_List list)
|
|
{
|
|
HPDF_PTRACE((" HPDF_List_Free\n"));
|
|
|
|
if (!list)
|
|
return ;
|
|
|
|
HPDF_List_Clear (list);
|
|
HPDF_FreeMem (list->mmgr, list);
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_Clear
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
*
|
|
*/
|
|
|
|
void
|
|
HPDF_List_Clear (HPDF_List list)
|
|
{
|
|
HPDF_PTRACE((" HPDF_List_Clear\n"));
|
|
|
|
if (list->obj)
|
|
HPDF_FreeMem (list->mmgr, list->obj);
|
|
|
|
list->block_siz = 0;
|
|
list->count = 0;
|
|
list->obj = NULL;
|
|
}
|
|
|
|
/*
|
|
* Resize
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* count : The size of array of pointers.
|
|
*
|
|
* return: If Resize success, it returns HPDF_OK.
|
|
* otherwise it returns error-code which is set by HPDF_MMgr object.
|
|
*
|
|
*/
|
|
|
|
HPDF_STATUS
|
|
Resize (HPDF_List list,
|
|
HPDF_UINT count)
|
|
{
|
|
void **new_obj;
|
|
|
|
HPDF_PTRACE((" HPDF_List_Resize\n"));
|
|
|
|
if (list->count >= count) {
|
|
if (list->count == count)
|
|
return HPDF_OK;
|
|
else
|
|
return HPDF_INVALID_PARAMETER;
|
|
}
|
|
|
|
new_obj = (void **)HPDF_GetMem (list->mmgr, count * sizeof(void *));
|
|
|
|
if (!new_obj)
|
|
return HPDF_Error_GetCode (list->error);
|
|
|
|
if (list->obj)
|
|
HPDF_MemCpy ((HPDF_BYTE *)new_obj, (HPDF_BYTE *)list->obj,
|
|
list->block_siz * sizeof(void *));
|
|
|
|
list->block_siz = count;
|
|
if (list->obj)
|
|
HPDF_FreeMem (list->mmgr, list->obj);
|
|
list->obj = new_obj;
|
|
|
|
return HPDF_OK;
|
|
}
|
|
|
|
/*
|
|
* HPDF_List_Find
|
|
*
|
|
* list : Pointer to a HPDF_List object.
|
|
* count : the size of array of pointers.
|
|
*
|
|
* return: If HPDF_List_Find success, it returns index of the object.
|
|
* otherwise it returns negative value.
|
|
*
|
|
*/
|
|
|
|
HPDF_INT32
|
|
HPDF_List_Find (HPDF_List list,
|
|
void *item)
|
|
{
|
|
HPDF_UINT i;
|
|
|
|
HPDF_PTRACE((" HPDF_List_Find\n"));
|
|
|
|
for (i = 0; i < list->count; i++) {
|
|
if (list->obj[i] == item)
|
|
return i;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|