Reference Section
ARRAY_ALLOC {
void *location;
ARRAY_ALLOC (array1, 3, 4, str_cmp); /* use ASM cmpf */
_array_insert(array1.array, "cat", array1.array[0]);
_array_append(array1.array, "car");
if(_array_bfind("aaa",array1.array, &location) != 0)
_array_insert(array1.array,"aaa",location);
/* make room for new element */
...
}
{
char *str;
ARRAY_ALLOC (array1, 2, 4, str_cmp);/* use ASM cmpf */
lea bx,array1.array/* BX -> element[0] in array */
str = "cat";
mov si,str/* SI = offset of "cat" */
mov di,bx /* DI -> location to insert element */
array_insert();/* insert "cat" in array */
str = "can";
mov si,str/* SI = offset of "can" */
array_append(); /* append "can" in array */
...
}
Source file SA_ARRAY.H ASM equiv.ARRAY_ALLOC
...
ARRAY_ALLOC (array1, 2, 4, str_cmp);/* use ASM cmpf */
_array_insert(array1.array, "cat", array1.array[0]);
_array_append(array1.array, "car");
if(_array_append(array1.array, "can") == -1)
_put_str("\n\rUnable to append element.");
...
{
char *str;
void *array_ptr; /* pointer to dynamic (structured) array */
...
if((array_ptr = (char *)malloc(20+HEADER_SIZE)) == NULL)
exit(0);
mov di,array_ptr/* DI -> array */
mov cx,4 /* CX = size of elements */
mov bx,5 /* BX = number of elements */
mov ax,offset str_cmp
array_init();
mov di,bx
str = "aaa";
mov si,str /* SI -> "aaa" */
array_insert(); /* insert "aaa" */
str = "bbb";
mov si,str /* SI -> "bbb" */
array_append();/* append "bbb" */
free(array_ptr);
...
}
Source file _ARAPPND.ASM ASM equiv ARRAY_APPEND
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);/* use ASM cmpf */
_array_insert(array1.array, "bbb", array1.array[0]);
_array_append(array1.array, "ccc");
if(_array_bfind("aaa",array1.array, &location) != 0)
_array_insert(array1.array,"aaa",location);
/* make room for new element */
...
{
char *key;
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
/* allocate static array */
lea bx,array1.array/* BX -> array1.array */
key = "aaa";
mov si,key /* SI -> element to insert */
mov di,bx /* DI -> array1.array */
array_insert(); /* insert "bbb" in array */
key = "bbb";
mov si,key /* SI -> element to insert */
array_append(); /* insert "ccc" in array */
key = "ccc";
mov si,key /* SI -> comparison key */
array_bfind(); /* is "aaa" in array? */
jnca_bfnd_100/* y: jump out */
array_append(); /* n: insert in array */
...
a_bfnd_100:
...
}
Source file _ARBFIND.ASM ASM equiv ARRAY_BFIND
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
/* use ASM comparison function */
_array_insert(array1.array, "bbb", array1.array[0]);
_array_delete(array1.array,array1.array[0]);
ARRAY_CLEAR(array1.array);/* set array count == 0 */
...
(Not applicable)
Source file SA_ARRAY.H ASM equiv .ARRAY_CLEAR
{
char outbuf[80];
ARRAY_ALLOC (array1, 3, 4, str_cmp);
/* use ASM comparison function */
#if __LARGE_CODE__
_put_str(_ul_to_dec(ARRAY_CMPF(array1.array), outbuf));
#else
_put_str(_ui_to_dec(ARRAY_CMPF(array1.array), outbuf));
#endif
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv None
{
char outbuf[80];
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
_put_str(_i_to_dec(ARRAY_COUNT(array1.array), outbuf));
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv.ARRAY_COUNT
{
unsigned index;
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);/* use ASM cmpf */
_array_insert(array1.array,"bbb",array1.array[0]);
_array_append(array1.array,"ccc");
index = _array_curn(array1.array,array1.array[1]);
/* index = 1 */
...
}
{
char *element;
unsigned index;
ARRAY_ALLOC (array1, 3, 4, str_cmp);
lea bx,array1.array;
element = "bbb";
mov si,element/* SI -> "bbb" */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert first element */
element = "ccc";
mov si,element/* SI -> "ccc" */
array_append(); /* append "ccc" */
array_bfind(); /* find "ccc", return address */
index = array_curn();/* index = 1 */
...
}
Source file _ARCURN.ASM ASM equiv ARRAY_CURN
{
unsigned index;
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);/* use ASM cmpf */
_array_insert(array1.array,"bbb",array1.array[0]);
_array_delete(array1.array,array1.array[0]);
if(array1.cnt == 0)
_put_str("\n\rNo current elements in array.");
...
}
{
char *element;
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);/* use ASM cmpf */
lea bx,array1.array; /* BX = offset of array1.array[0] */
element = "bbb";
mov si,element /* SI = offset "bbb" */
mov di,bx /* DI = offset of array1.array[0] */
array_insert(); /* insert element */
array_delete(); /* delete element */
...
}
Source file _ARDELET.ASM ASM equiv ARRAY_DELETE
{
char outbuf[80];
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
if(ARRAY_EMPTY(array1.array))
_put_str("Array is now empty.");
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv.ARRAY_EMPTY
{
char outbuf[80];
...
ARRAY_ALLOC(array1, 3, 4, str_cmp);
_put_str(_i_to_dec(ARRAY_ESIZE(array1.array), outbuf));
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv.ARRAY_ESIZE
{
char outbuf[80];
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
if(ARRAY_FULL(array1.array))
_put_str("Array is now full.");
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv.ARRAY_FULL
{
char outbuf[80];
...
ARRAY_ALLOC (array1, 3, 4, str_cmp);
if(_array_full(array1.array))
_put_str("Array is now full.");
...
}
{
char *element;
char str[] = "Array is now full.";
...
ARRAY_ALLOC (array1, 3, 4, str_cmp); /* use ASM cmpf */
lea bx,array1.array; /* BX = offset of array1.array[0] */
array_full();
jnelabel_020
lea si,str
put_str();
...
label_020:
...
}
Source file _ARFULL.ASM ASM equiv ARRAY_FULL
{
int num;
void *array_ptr, *heap_array;
... /* pointer to dynamic array */
if((array_ptr = (char *)malloc(20+HEADER_SIZE)) == NULL)
_put_str("Not enough memory for array initialization.");
else
heap_array = _array_init(array_ptr,5,4,str_cmp);
_array_insert(heap_array,"aaa",(char *)heap_array);
_array_append(heap_array,"bbb");
num = ARRAY_COUNT(heap_array);
/* num = number of elements (2) */
free(array_ptr);
...
}
int test14(void)
{
char *str;
void *array_ptr; /* pointer to dynamic (structured) array */
...
if((array_ptr = (char *)malloc(20+HEADER_SIZE)) == NULL)
exit(0);
mov di,array_ptr/* DI -> array */
mov cx,4 /* CX = size of elements */
mov bx,5 /* BX = number of elements */
mov ax,offset str_cmp
array_init();
mov di,bx
str = "aaa";
mov si,str /* SI -> "aaa" */
array_insert(); /* insert "aaa" */
str = "bbb";
mov si,str /* SI -> "bbb" */
array_append();/* append "bbb" */
free(array_ptr);
...
}
Source file _ARINIT.ASM ASM equiv ARRAY_INIT
ARRAY_ALLOC (array1, 2, 4, str_cmp);/* use ASM cmpf */
...
_array_insert(array1.array, "cat", array1.array[0]);
/* insert "cat" as first element in array */
...
{
char str[] = "cat";
ARRAY_ALLOC (array1, 2, 4, str_cmp);/* use ASM cmpf */
lea bx,array1.array;/* BX -> array1.array[0] */
lea si,str /* SI -> "cat" */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert "cat" */
...
}
Source file _ARINSRT.ASM ASM equiv ARRAY_INSERT
{
char outstr[20], *location;
int num;
ARRAY_ALLOC(array1, 3, 4, mem_cmp);
...
num = 1111;
_array_insert(array1.array, &num, array1.array[0]);
num = 3333;
_array_append(array1.array, &num);
num = 2222;
if((location = _array_lfind(&num, array1.array)) == NULL)
_array_append (array1.array, &num); /* append 222 */
else
{
_put_str(_ui_to_dec((int)location, outstr));
_put_str(" found.");
_put_newline();
}
...
}
{
int num;
ARRAY_ALLOC(array1, 3, 4, mem_cmp);
...
lea bx,array1.array;/* BX -> array1.array */
lea si,num /* SI -> num */
num = 111;
mov di,bx /* DI -> array1.array */
array_insert(); /* insert 111 */
num = 333;
array_append(); /* append 333 */
num = 222;
array_lfind(); /* is 222 in array? */
jnca_lfind_100 /* y: continue */
mov di,bx /* reset DI */
array_append(); /* append 222 */
...
a_lfind_100:
...
}
Source file _ARLFIND.ASM ASM equiv ARRAY_LFIND
{
char outstr[20], *location;
int num;
ARRAY_ALLOC(array1, 3, 4, mem_cmp);
...
num = 1111;
_array_insert(array1.array, &num, array1.array[0]);
num = 3333;
_array_append(array1.array, &num);
num = 2222;
if((location = _array_lfindr(&num, array1.array)) == NULL)
_array_append (array1.array, &num); /* append 2222 */
else
{
_put_str(_ui_to_dec((int)location, outstr));
_put_str(" found.");
_put_newline();
}
...
}
{
int num;
ARRAY_ALLOC(array1, 3, 4, mem_cmp);
...
lea bx,array1.array;/* BX -> array */
lea si,num /* SI -> num */
num = 111;
mov di,bx /* DI -> array1[0] */
array_insert(); /* insert 111 */
num = 333;
array_append(); /* append 333 */
num = 222;
array_lfindr(); /* is 222 in array? */
jncl_rfind_100/* y: continue */
mov di,bx /* reset DI -> array1[0] */
array_append(); /* append 222 */
l_rfind_100:
...
}
Source file _ARRFIND.ASM ASM equiv ARRAY_LFINDR
{
char outbuf[80];
...
ARRAY_ALLOC(array1, 3, 4, str_cmp);
_put_str(_i_to_dec(ARRAY_MAX(array1.array), outbuf));
...
}
(Not applicable)
Source file SA_ARRAY.H ASM equiv None
{
ARRAY_ALLOC (array1, 5, 4, str_cmp);
...
_array_insert(array1.array,"aaa",array1.array[0]);
_array_append(array1.array,"bbb");
_put_str(_array_next(array1.array, array1.array[0]));
/* "bbb" */
...
}
{
char *element;
ARRAY_ALLOC(array1, 5, 4, str_cmp);
...
lea bx,array1.array;/* BX -> array[0] */
element = "aaa";
mov si,element/* SI -> "aaa" */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert "aaa" */
element = "bbb";
mov si,element/* SI -> element to insert */
array_append(); /* append "bbb" */
array_next();
mov si,di /* SI -> next element */
put_str(); /* "bbb" */
...
}
Source file _ARNEXT.ASM ASM equiv ARRAY_NEXT
{
ARRAY_ALLOC (array1, 5, 4, str_cmp);
...
_array_insert(array1.array,"aaa",array1.array[0]);
_array_append(array1.array,"bbb");
_put_str(_array_nth(array1.array, 0)); /* "aaa" */
...
}
{
char *array, *element;
ARRAY_ALLOC (array1, 5, 4, str_cmp);
...
lea bx,array1.array;
element = "aaa";
mov si,element/* SI -> element to insert */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert "aaa" */
element = "bbb";
mov si,element/* SI -> element to insert */
array_append(); /* append "bbb" */
mov ax,0 /* element to return address of */
array_nth();
mov si,di /* SI -> 0 element */
put_str(); /* "aaa" */
put_newline();
...
}
Source file _ARNTH.ASM ASM equiv ARRAY_NTH
ARRAY_ALLOC (array1, 5, 4, str_cmp);
...
_array_insert(array1.array,"aaa",array1.array[0]);
_array_append(array1.array,"bbb");
_put_str(_array_prev(array1.array, array1.array[1]));
/* "aaa" */
...
}
{
char *element;
...
ARRAY_ALLOC (array1, 5, 4, str_cmp); /* use ASM cmpf */
lea bx,array1.array /* BX -> first element */
element = "aaa";
mov si,element/* SI -> "aaa" */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert "aaa" */
element = "bbb";
mov si,element/* SI -> "bbb" */
array_append(); /* append "bbb" */
add di,4 /* DI -> array1.array[1] */
array_prev(); /* locate previous element */
mov si,di /* SI -> array1.array[0] */
put_str(); /* "aaa" */
...
}
Source file _ARPREV.ASM ASM equiv ARRAY_PREV
{
int i;
ARRAY_ALLOC (array1, 3, 4, str_cmp);
...
_array_insert(array1.array, "cat", array1.array[0]);
_array_append(array1.array, "cap");
_array_append(array1.array, "can");
_array_qsort(array1.array); /* sort the array */
for (i = 0; i < 3; i++)
{ _put_str(array1.array[i]); _put_chr(' ');};
/* "can cap cat" */
...
}
{
char *element;
ARRAY_ALLOC (array1, 3, 4, str_cmp);
...
lea bx,array1.array;/* BX -> array1.array[0] */
element = "cat";
mov si,element/* SI -> "cat" */
mov di,bx /* DI -> array1.array[0] */
array_insert(); /* insert "cat" */
element = "can";
mov si,element/* SI -> "can" */
array_append(); /* append "can" */
element = "cap";
mov si,element/* SI -> "cap" */
array_append(); /* append "cap" */
array_qsort(); /* sort elements */
mov si,bx /* SI -> array1.array[0] */
mov cx,3 /* CX = number of elements */
mov al,' ' /* AL = space character */
a_out_100:
put_str(); /* display string element */
put_chr(); /*
add si,ARRAY_ESIZE/* SI -> next element */
loop a_out_100 /* "can cap cat" */
...
}
Source file _ARQSORT.ASM ASM equiv ARRAY_QSORT
{
char *location;
char array2[3][4];
_str_cpy(array2[0],"bbb");
_str_cpy(array2[1],"ccc");
if(_bin_search("aaa",(char *)array2[0], 5, sizeof(array2[0]),
str_cmp, &location) != 0)
_str_cpy(location,"aaa");/* add new element */
...
}
#include <inline.h>
{
char *str;
char array2[3][4];
str = "bbb";
mov si,str /* SI = offset of str */
lea di,array2[0]
str_cpy(); /* copy element to array */
str = "ccc";
mov si,str /* SI = offset of str */
add di,4 /* DI = offset of array2[1] */
str_cpy(); /* append "ccc" to array */
str = "aaa";
mov si,str /* SI = offset of str */
sub di,4 /* DI = offset of array2[0] */
mov bx,2 /* BX = number of elements */
mov cx,4 /* CX = size of elements */
lea ax,str_cmp/* AX = offset of cmpf */
bin_search(); /* is "aaa" in array? */
jncb_srch_100/* y: continue */
str = "aaa"; /* n: append "aaa" */
mov si,str /* SI = offset of "aaa" */
add di,8 /* di = offset of next element */
str_cpy(); /* copy "aaa" into array */
b_srch_100:
...
}
Source file _ARBFND2.ASM ASM equiv BIN_SEARCH
{
char array1[3][4];
char *location;
_str_cpy (array1[0],"aaa");
_str_cpy (array1[1],"ccc");
if((location = (char *)_lin_rsearch("bbb",(void *)array1, 3,
sizeof(array1[0]), str_cmp)) == NULL)
_str_cpy (array1[2], "bbb"); /* if "bbb" is not found */
else
{
_put_str(location); _put_str(" already in array.");
_put_newline();
}
...
}
#include <inline.h>
{
char *str;
char array1[3][4];
...
lea di,array1[0];/* DI = offset array1[0] */
str = "aaa";
mov si,str /* SI = offset "aaa" */
str_cpy(); /* add element to array */
str = "ccc";
mov si,str /* SI = offset "ccc" */
add di,4 /* DI -> array1[1] */
str_cpy(); /* add element to array */
str = "bbb";
mov si,str /* SI = offset "bbb" */
add di,4 /* DI -> array[2] */
mov cx,3 /* CX = number of elements */
mov bx,4 /* BX = size of each element */
mov ax,offset str_cmp /* AX = offset of cmpf */
lin_rsearch(); /* is "bbb" in array? */
jncl_rsrch_100
str_cpy(); /* n: add to array */
l_rsrch_100:
...
}
Source file _ARRFND2.ASM ASM equiv LIN_RSEARCH
{
char array1[3][4];
char *location;
_str_cpy (array1[0],"aaa");
_str_cpy (array1[1],"ccc");
if((location = (char *)_lin_search("bbb",(void *)array1, 3,
sizeof(array1[0]), str_cmp)) == NULL)
_str_cpy (array1[2], "bbb"); /* if "bbb" is not found */
else
{
_put_newline();
_put_str(location); _put_str("already in array.");
}
...
}
#include <include.h>
{
char *str;
char array1[3][4];
...
lea di,array1[0];/* DI = offset array1[0] */
str = "aaa";
mov si,str /* SI = offset "aaa" */
str_cpy(); /* add element to array */
str = "ccc";
mov si,str /* SI = offset "ccc" */
add di,4 /* DI -> array1[1] */
str_cpy(); /* add element to array */
str = "bbb";
mov si,str /* SI = offset "bbb" */
sub di,4 /* DI -> array[0] */
mov cx,3 /* CX = number of elements */
mov bx,4 /* BX = size of each element */
mov ax,offset str_cmp /* AX = offset of cmpf */
lin_search(); /* is "bbb" in array? */
jncl_rsrch_100
add di,8 /* DI -> array[2] */
str_cpy(); /* n: add to array */
l_rsrch_100:
...
}
Source file _ARLFND2.ASM ASM equiv LIN_SEARCH
{
char array2[5][4];
_str_cpy (array2[0],"cat");
_str_cpy (array2[1],"car");
_str_cpy (array2[2],"cab");
_str_cpy (array2[3],"cap");
_str_cpy (array2[4],"can");
_quick_sort((void *)array2, 5, sizeof(array2[0]), str_cmp);
...
}
#include <inline.h>
{
char *element;
char array1[5][4];
...
pushss
pop es /* ES=SS (segment of array) */
lea di,array1[0]/* DI = offset of array1[0] */
mov bx,di /* BX = saved array offset */
element = "aaa";
mov si,element/* SI = offset of "aaa" */
str_cpy(); /* insert "aaa" */
add di,4 /* DI = offset of array1[1] */
element = "ddd";
mov si,element/* SI = offset of "ddd" */
str_cpy(); /* insert "ddd" */
add di,4 /* DI = offset of array1[2] */
element = "bbb";
mov si,element/* SI = offset of "bbb" */
str_cpy(); /* insert "bbb" */
add di,4 /* DI = offset of "array1[3] */
element = "ccc";
mov si,element/* SI = offset of "ccc" */
str_cpy(); /* insert "ccc" */
add di,4 /* DI = offset of "array[4] */
element = "eee";
mov si,element/* SI = offset of "eee" */
str_cpy(); /* insert "eee" */
mov di,bx /* reset DI = offset of array1 */
mov bx,5 /* BX = number of elements */
mov cx,4 /* CX = size of each element */
mov ax,offset str_cmp /* AX = offset of cmpf */
#if __LARGE_CODE__
mov dx,seg str_cmp/* DX = segment of cmpf */
#endif
quick_sort(); /* sort array */
...
}
Source file _ARQSRT2.ASM ASM equiv QUICK_SORT