Program 1
#include
#include
#include
#include
union regs
regs;
void
cls()
{
regs.h.ah
= 15; int86( 0x10, ®s, ®s );
regs.h.ah
= 0; int86( 0x10, ®s, ®s );
}
void main()
{
cls();
printf("Setting
mode to 40x25 color.\n");
printf("Press
any key....\n");
getchar();
regs.h.ah
= 0;
regs.h.al
= 1;
int86(
0x10, ®s, ®s);
printf("Mode
has been set.\n");
}
Program 2
#include
#include
#include
#include
#include
#define vector_ok 0
#define vector_null_error 1
#define vector_size_error 2
#define vector_alloc_error 3
structvector
{
int*data;
size_tsize;
};
intcreate_vector(structvector*vc,size_tnum)
{
if(vc==NULL)
{
returnvector_null_error;
}
vc->data=0;
vc->size=0;
if(num==0||size_max/num<sizeof(int))
{
errno=enomem;
returnvector_size_error;
}
vc->data=calloc(num,sizeof(int));
if(vc->data==NULL)
{
returnvector_alloc_error;
}
vc->size=num*sizeof(int);
returnvector_ok;
}
intgrow_vector(structvector*vc)
{
void*newptr=0;
size_tnewsize;
if(vc==NULL)
{
returnvector_null_error;
}
if(vc->size==0||size_max/2<vc->size)
{
errno=enomem;
returnvector_size_error;
}
newsize=vc->size*2;
newptr=realloc(vc->data,newsize);
if(newptr==NULL)
{
returnvector_alloc_error;
}
vc->data=newptr;
vc->size=newsize;
returnvector_ok;
}
Program 3
#include
#include
#include
#define max_ref_obj 100
#define rc_error -1
struct mem_obj_t
{
void*ptr;
uint16_tcount;
};
staticstructmem_obj_treferences[max_ref_obj];
staticuint16_treference_count=0;
uint16_tcreate(size_tsize)
{
if(reference_count>=max_ref_obj)
returnrc_error;
if(size)
{
void*ptr=calloc(1,size);
if(ptr!=NULL)
{
references[reference_count].ptr=ptr;
references[reference_count].count=0;
returnreference_count++;
}
}
returnrc_error;
}
void*retain(uint16_thandle)
{
if(handle<reference_count&&handle>=0)
{
references[handle].count++;
returnreferences[handle].ptr;
}
else
{
returnNULL;
}
}
voidrelease(uint16_thandle)
{
printf("release\n");
if(handle<reference_count&&handle>=0){
structmem_obj_t*object=&references[handle];
if(object->count<=1)
{
printf("released\n");
free(object->ptr);
reference_count--;
}
else
{
printf("decremented\n");
object->count--;
}
}
}
Program
4
#include
#include
struct pool_t
{
void*ptr;
size_tsize;
size_tused;
};
structpool_t*create_pool(size_tsize)
{
structpool_t*pool=calloc(1,sizeof(structpool_t));
if(pool==NULL)
returnNULL;
if(size)
{
void*mem=calloc(1,size);
if(mem!=NULL)
{
pool->ptr=mem;
pool->size=size;
pool->used=0;
returnpool;
}
}
returnNULL;
}
void*pool_alloc(structpool_t*pool,size_tsize)
{
if(pool==NULL)
returnNULL;
size_tavail_size=pool->size-pool->used;
if(size&&size<=avail_size)
{
void*mem=pool->ptr+pool->used;
pool->used+=size;
returnmem;
}
returnNULL;
}
voiddelete_pool(structpool_t*pool)
{
if(pool!=NULL)
{
free(pool->ptr);
free(pool);
}
}
Program
5
#include
#include
#define size 8
int16_ta[size],b[size];
void addtwo()
{
int16_ti=0;
while(i<size)
{
a[i]=b[i]+2;
i++;
}
}
int main()
{
addtwo();
returna[0];
}
No comments:
Post a Comment