ds(3)

NAME

   ds - Dynamic strings and vectors

SYNOPSIS

   #include "dsslib.h"

   Ds *ds_init(Ds *ods);

   Ds *ds_init_size(Ds *ods, size_t nbytes);

   Ds *ds_alloc(void);

   Ds *ds_alloc_size(size_t nbytes);

   Ds *ds_reinit(Ds *ds);

   Ds *ds_reinit_size(Ds *ods, size_t nbytes);

   Ds *ds_reset(Ds *ds);

   Ds *ds_reset_buf(Ds *ds);

   Ds *ds_trim(Ds *ds);

   Ds *ds_grow(Ds *ds);

   void ds_free(Ds *ds);

   int ds_appendc(Ds *ds, int ch);

   int ds_copyb(Ds *ds, void *src, size_t len, unsigned int offset);

   int ds_insertb(Ds *ds, void *src, size_t len, unsigned int offset);

   int ds_append(Ds *ds, char *str);

   int ds_concat(Ds *ds, char *str);

   int ds_concatc(Ds *ds, int ch);

   int ds_concatn(Ds *ds, char *str, size_t len);

   Ds *ds_set(Ds *ds, char *str);

   Ds *ds_setn(Ds *ds, unsigned char *s, size_t slen);

   Ds *ds_range(Ds *ds, char *str, char *range_spec, Range_syntax *ors);

   int ds_getc(Ds *ds, FILE *fp, int *ch_ptr);

   Dsio *dsio_set(Ds *ds, FILE *fp, char *buf, unsigned long len,
                  int have_length);

   int dsio_free(Ds *ds);

   int dsio_eof(Ds *ds);

   int dsio_nextc(Ds *ds, int *ch_ptr);

   int dsio_peekc(Ds *ds, int *ch_ptr);

   char *dsio_agets(Ds *ds);

   char *dsio_gets(Ds *ds);

   int dsio_load(Ds *ds);

   char *dsio_load_str(Ds *ds);

   char *ds_gets(Ds *ds, FILE *fp);

   char *ds_agets(Ds *ds, FILE *fp);

   char *ds_agets_buf(Ds *ds, char *buf);

   char *ds_prompt(Ds *ds, char *prompt, unsigned int flag);

   char *ds_readline(Ds *ds, char *prompt, char *cprompt);

   Ds *ds_load_file(Ds *ds, char *pathname);

   Ds *ds_agetf(Ds *ds, FILE *fp);

   Ds *ds_getf(FILE *fp);

   int ds_sprintf(Ds *ds, unsigned int offset, char *fmt, ...);

   int ds_asprintf(Ds *ds, char *fmt, ...);

   int ds_vasprintf(Ds *ds, char *fmt, va_list ap);

   char *ds_xprintf(char *fmt, ...);

   char *ds_vxprintf(char *fmt, va_list ap);

   FILE *ds_fopen_secure(const char *path, const char *mode, size_t size);

   int ds_fclose(FILE *fp);

   int ds_fclean(FILE *fp);

   Dsvec *dsvec_init(Dsvec *dsv, size_t size);

   Dsvec *dsvec_alloc(size_t size);

   Dsvec *dsvec_init_size(Dsvec *dsv, size_t size, int n);

   Dsvec *dsvec_alloc_size(size_t size, int n);

   void dsvec_free(Dsvec *dsv);

   Dsvec *dsvec_grow(Dsvec *dsv, unsigned int new_nelements);

   Dsvec *dsvec_subset(Dsvec *dsv, Dsvec *old_dsv, unsigned int start,
                       int len);

   Dsvec *dsvec_copy(Dsvec *dsv, Dsvec *old_dsv);

   void *dsvec_ptr_index(Dsvec *dsv, unsigned int ind);

   int dsvec_delete_ptr_index(Dsvec *dsv, unsigned int ind);

   int dsvec_delete_ptr(Dsvec *dsv, void *ptr);

   int dsvec_replace_ptr(Dsvec *dsv, void *ptr, unsigned int ind);

   int dsvec_streq(Dsvec *dsv1, Dsvec *dsv2);

   int dsvec_strneq(Dsvec *dsv1, Dsvec *dsv2, size_t len);

   int dsvec_rotate(Dsvec *dsv, int npos);

   Dsvec *dsvec_strlist(Dsvec *dsv, char *str_spec);

   Dsvec *dsvec_slice(Dsvec *dsv, Dsvec *primary, unsigned int ind,
                      unsigned int len);

   Dsvec *dsvec_range(Dsvec *dsv, Dsvec *primary, char *range_spec,
                      Range_syntax *ors);

   int dsvec_replace(Dsvec *primary, unsigned int ind,
                     unsigned int delete_len, Dsvec *secondary);

   int dsvec_append(Dsvec *primary, Dsvec *secondary);

   int dsvec_insert_ptr(Dsvec *dsv, unsigned int ind, void *ptr);

   int dsvec_add_ptr(Dsvec *dsv, void *ptr);

   int dsvec_insert(Dsvec *primary, unsigned int ind, Dsvec *secondary);

   int dsvec_delete(Dsvec *dsv, unsigned int ind, unsigned int ndelete);

   int dsvec_add_obj(Dsvec *dsv);

   void dsvec_sort(Dsvec *dsv, int (*compar)(const void *, const void *));

   Dsvec *dsvec_load(Ds *ds, Dsvec *dsv);

   Dsvec *ds_mkargv_add(Dsvec *dsv, char *el);

   Dsvec *ds_mkargv_addv(Dsvec *dsv, int argc, char **argv);

                         typedef struct Mkargv {
                           int keepq;
                           int keepws;
                           char *ifs;
                           char *startq;
                           char *endq;
                         } Mkargv;

   Dsvec *ds_mkargv(Dsvec *dsv, char *str, Mkargv *conf);

   char *ds_buf(Ds *ds);

   size_t ds_len(Ds *ds);

   size_t ds_size(Ds *ds);

   int ds_eq(Ds *ds1, Ds *ds2);

   (TYPE) dsvec_ptr(Ds *DSV, unsigned int IND, TYPE);

   (TYPE) dsvec_obj(Ds *DSV, unsigned int IND, TYPE);

   (TYPE) dsvec_new_obj(Ds *DSV, TYPE);

   (TYPE) dsvec_base_type(Ds *DSV, TYPE);

   void **dsvec_base(Dsvec *dsv);

   unsigned int dsvec_len(Dsvec *dsv);

                          extern int ds_default_clear_flag;
                          extern int ds_default_delnl_flag;
                          extern size_t ds_default_len_limit;
                          extern void *(*ds_default_malloc_func)(size_t size);
                          extern void *(*ds_default_free_func)(void *ptr);

DESCRIPTION

   The DS library is a collection of functions for creating, manipulating,
   and formatting strings of bytes. The memory used by these strings is
   dynamically allocated and released as necessary. When used correctly,
   bugs caused by buffer overruns and other programming errors can be
   avoided. There are also functions for creating and manipulating dynamic
   vectors of pointers and objects.

   Byte Strings
   A Ds data structure represents a dynamic string. It must be initialized
   before it can be used. A Ds variable contains several fields that may
   be set after initialization but before it is first used. Default values
   for some of these fields are copied from global variables exported by
   the library.

   Initialization
   Manipulation
   Formatting
   Vectors



Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.


Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.

Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.


Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.

Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.


Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.

Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.