Files
harbour-core/harbour/external/libhpdf/hpdflist.c
Viktor Szakats 2cc4903d82 2009-09-10 09:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* 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.
2009-09-10 08:02:45 +00:00

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;
}