//string.h Copyright (C) 1989-95 I.Pedley (CTPP) Thu 20-Mar-1997 at 20:50:35

#define NULL 0L

VD  memcpy (VD* dst,VD* src, UL bytes);     //ANSI C 7.11.2.1
VD  memmove(VD* dst,VD* src,UL bytes);      //ANSI C 7.11.2.2
CH* strcpy (CH* str1,CH* str2);             //ANSI C 7.11.2.3
CH* strncpy(CH* str1,CH* str2,UL bytes);    //ANSI C 7.11.2.4

CH* strcat(CH* str1,CH* str2);              //ANSI C 7.11.3.1
CH* strncat(CH* str1,CH* str2,UL maxbytes); //ANSI C 7.11.3.2

SL  memcmp (VD* s1,VD* s2,UL bytes);        //ANSI C 7.11.4.1
SL  strcmp (CH* s1,CH* s2);                 //ANSI C 7.11.4.2
SL  strncmp(CH* s1,CH* s2,UL maxbytes);     //ANSI C 7.11.4.4

VD* memchr (VD* s,SL c,UL bytes);           //ANSI C 7.11.5.1
CH* strchr (CH* s,SL c);                    //ANSI C 7.11.5.2
SL  strcspn(CH* s1,CH* s2);                 //ANSI C 7.11.5.3
CH* strpbrk(CH* s1,CH* s2);                 //ANSI C 7.11.5.4
CH* strrchr(CH* s, SL c);                   //ANSI C 7.11.5.5

VD  memset(VD* ptr,UL value,UL count);      //ANSI C 7.11.6.1
SL  strlen(CH* str);                        //ANSI C 7.11.6.3

SL  astrlen(CH* str);                       //CTPP

SL  memicmp(CH* s1,CH* s2,UL len);          //non-ANSI
SL  stricmp(CH* s1,CH* s2);                 //non-ANSI
SL  strnicmp(CH* s1,CH* s2,UL bytes);       //non-ANSI



CH* strdup(CH* str);                        //non-ANSI

VD  zeroterminate(CH* str,UL len);          //CTPP
VD  toupper      (CH* str,UL len);
VD  strupr       (CH* str);
VD  strlwr       (CH* str);
VD  nullstospaces(CH* str,UL len);
VD  spacestonulls(CH* str,UL len);
UL  trailingspacestonulls(CH* str,UL len);
CH* blanks       (CH* str);

SL  pstrcmp(CH* pstr1,CH* pstr2);           //CTPP
SL  pstricmp(CH* pstr1,CH* pstr2);

CH* inpstr(CH* instr,CH* str);
CH* instr (CH* instr,CH* str);
CH* blkstr(CH* instr,CH* blk,UL blklen);

VD  memset24(VD* ptr, UL  value,UL count);  //CTPP
VD  memcpy24(VD* ptr1,VD* ptr2 ,UL count);  //CTPP
VD  memset16(VD* ptr, UI  value,UL count);  //CTPP
VD  memset32(VD* ptr, UL  value,UL count);  //CTPP

SL  memcmpd(VD* s1,VD* s2,UL dwords);       //CTPP


//pascal-style name table support in ntb.ctp
UL  ntblen  (CH* ntb);
UL  ntbcount(CH* ntb);
CH* ntbfind(CH* ntb,UL idx);
UL  ntbadd  (CH* ntb,CH* name);
UL  ntbmatch(CH* ntb,CH* name);
CH* ntbaddc (CH* ntb,CH* name);
CH* ntbmatchc(CH* ntb,CH* name);
CH* ntbaddcx  (CH* ntb,CH* name,UL* nameidx);
CH* ntbmatchcx(CH* ntb,CH* name,UL* nameidx);

                                                //functions where
CH* ntbaddcxnp  (CH* ntb,CH* name,UL* nameidx); //name is non-pascal string
CH* ntbmatchcxnp(CH* ntb,CH* name,UL* nameidx); //i.e. asciiz
VD  ntbcat      (CH* ntb,CH* dst,UL nameidx);

//a handy place to declare our version of printf
SL  clidisplay(CH* format,...);
//and some fast cga text output routines in gen.ctp
VD  outstr(CH* str,UL row,UL col);