Module : tbl_scanstack
<module title="Automatically generated module">
<routine name="tbl_get_scanstack_pos" type="sort" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+0);
</routine>
<routine name="tbl_put_scanstack_pos" parameter="rec" type="number" parameter="val" type="sort" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.pos\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+0)=v_val;
</routine>
<routine name="tbl_add_scanstack_pos" parameter="rec" type="number" parameter="val" type="sort" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.pos\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+0)+=v_val;
</routine>
<routine name="tbl_sub_scanstack_pos" parameter="rec" type="number" parameter="val" type="sort" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("Error in subtraction from field scanstack.pos\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+0)-=v_val;
</routine>
<routine name="tbl_get_scanstack_file" type="number" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return null;
return *(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+4);
</routine>
<routine name="tbl_put_scanstack_file" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.file\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+4)=v_val;
</routine>
<routine name="tbl_add_scanstack_file" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.file\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+4)+=v_val;
</routine>
<routine name="tbl_sub_scanstack_file" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("Error in subtraction from field scanstack.file\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+4)-=v_val;
</routine>
<routine name="tbl_get_scanstack_outfile" type="number" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return null;
return *(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+8);
</routine>
<routine name="tbl_put_scanstack_outfile" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.outfile\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+8)=v_val;
</routine>
<routine name="tbl_add_scanstack_outfile" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.outfile\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+8)+=v_val;
</routine>
<routine name="tbl_sub_scanstack_outfile" parameter="rec" type="number" parameter="val" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("Error in subtraction from field scanstack.outfile\n");
return;
}
*(long int*)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+8)-=v_val;
</routine>
<routine name="tbl_get_scanstack_ch" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+12);
</routine>
<routine name="tbl_put_scanstack_ch" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.ch\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+12)=v_val;
</routine>
<routine name="tbl_add_scanstack_ch" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.ch\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+12)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+12), v_val);
</routine>
<routine name="tbl_get_scanstack_nextch" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+16);
</routine>
<routine name="tbl_put_scanstack_nextch" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.nextch\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+16)=v_val;
</routine>
<routine name="tbl_add_scanstack_nextch" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.nextch\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+16)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+16), v_val);
</routine>
<routine name="tbl_get_scanstack_chwhat" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+20);
</routine>
<routine name="tbl_put_scanstack_chwhat" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chwhat\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+20)=v_val;
</routine>
<routine name="tbl_add_scanstack_chwhat" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chwhat\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+20)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+20), v_val);
</routine>
<routine name="tbl_get_scanstack_chwhere" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+24);
</routine>
<routine name="tbl_put_scanstack_chwhere" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chwhere\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+24)=v_val;
</routine>
<routine name="tbl_add_scanstack_chwhere" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chwhere\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+24)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+24), v_val);
</routine>
<routine name="tbl_get_scanstack_chmess" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+28);
</routine>
<routine name="tbl_put_scanstack_chmess" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chmess\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+28)=v_val;
</routine>
<routine name="tbl_add_scanstack_chmess" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chmess\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+28)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+28), v_val);
</routine>
<routine name="tbl_get_scanstack_chline" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+32);
</routine>
<routine name="tbl_put_scanstack_chline" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chline\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+32)=v_val;
</routine>
<routine name="tbl_add_scanstack_chline" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chline\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+32)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+32), v_val);
</routine>
<routine name="tbl_get_scanstack_chold" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+36);
</routine>
<routine name="tbl_put_scanstack_chold" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chold\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+36)=v_val;
</routine>
<routine name="tbl_add_scanstack_chold" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chold\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+36)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+36), v_val);
</routine>
<routine name="tbl_get_scanstack_chbetween" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+40);
</routine>
<routine name="tbl_put_scanstack_chbetween" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chbetween\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+40)=v_val;
</routine>
<routine name="tbl_add_scanstack_chbetween" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chbetween\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+40)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+40), v_val);
</routine>
<routine name="tbl_get_scanstack_chnew" type="constr" parameter="rec" type="number" system>
if (v_rec<0 || v_rec>=u_table[3].len) return 0;
return *(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+44);
</routine>
<routine name="tbl_put_scanstack_chnew" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in filling field scanstack.chnew\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+44)=v_val;
</routine>
<routine name="tbl_add_scanstack_chnew" parameter="rec" type="number" parameter="val" type="string" system>
if (v_rec<0 || v_rec>=u_table[3].len) {
printf("error in adding to field scanstack.chnew\n");
return;
}
*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+44)=
sadd(*(char**)(u_table[3].ptr[v_rec/250]+(v_rec%250)*u_table[3].size+44), v_val);
</routine>
<routine name="tbl_search_scanstack"
type="^scanstack"
parameter="p_pos" type="number" special>
var level as byte
var curr as number
var branch as number
var idx as ^scanstack
var ptr as ^scanstack
var brfnd as boolean
var nxt as byte
level=1
curr=-1
branch=-1
brfnd=false
loop
curr=searchindex(curr, level, nxt, maxbranch(4)+1)
idx=getpointer(curr, 0, 4)
if curr=-1 or idx=null then break endif
nxt=0
nxt=check(p_pos, idx.pos)
if nxt<=0 then branch=curr ptr=idx endif
if nxt=0 then brfnd=true endif
level+=1
do
if branch>0 then branch-=1 endif
if branch=-1 then branch=maxbranch(4) endif
level=1
curr=-1
loop
curr=searchindex(curr, level, nxt, maxleaf(branch, 4)+1)
idx=getpointer(branch, curr, 4)
if curr=-1 or idx=null then break endif
nxt=0
nxt=check(p_pos, idx.pos)
if nxt<=0 then ptr=idx endif
level+=1
do
if brfnd and ptr=null then
ptr=getpointer(branch+1, 0, 4)
endif
return ptr
</routine>
<routine name="tbl_add_scanstack"
type="^scanstack" parameter="new" type="^scanstack" special>
var idx_scanstack as ^scanstack
var last as ^scanstack
new.pos=999999999
idx_scanstack=tbl_search_scanstack(new.pos)
if idx_scanstack=null then
last=getpointer(maxbranch(4), maxleaf(maxbranch(4), 4), 4)
else
last=ptrmin1(idx_scanstack, 4)
endif
if last=null then
new.pos=1
else
new.pos=last.pos+1
endif
addindex(idx_scanstack, tablelen(3)-1, 4)
output "add scanstack(3):"+new.pos+"|"+new.file+"|"+new.outfile+"|"+new.ch+"|"+new.nextch+"|"+new.chwhat+"|"+new.chwhere+"|"+new.chmess+"|"+new.chline+"|"+new.chold+"|"+new.chbetween+"|"+new.chnew+"|" to log
flush(log)
if last=null then return getpointer(0, 0, 4) endif
return ptrplus1(last, 4)
</routine>
<routine name="tbl_delete_scanstack"
parameter="delrec" type="number" special>
var last as ^scanstack
var chk as ^scanstack
var del as ^scanstack
del=getrecptr(delrec, 3)
output "delete scanstack(3):"+del.pos+"|"+del.file+"|"+del.outfile+"|"+del.ch+"|"+del.nextch+"|"+del.chwhat+"|"+del.chwhere+"|"+del.chmess+"|"+del.chline+"|"+del.chold+"|"+del.chbetween+"|"+del.chnew+"|" to log
flush(log)
chk=tbl_search_scanstack(del.pos)
deleteindex(chk, 4)
chk=tbl_search_scanstack(del.pos+1)
del.ch=null
del.nextch=null
del.chwhat=null
del.chwhere=null
del.chmess=null
del.chline=null
del.chold=null
del.chbetween=null
del.chnew=null
if getrec(del, 3)<>tablelen(3)-1 then
last=getrecptr(tablelen(3)-1, 4)
changeindex(tbl_search_scanstack(last.pos), delrec, 4)
endif
deleterecord(delrec, 3)
if chk=null then return endif
chk=recalcptr(chk, 4)
var rec as number
loop
if chk=null or chk.pos=1 then break endif
rec=getrec(chk, 3)
chk.pos-=1
chk=ptrplus1(chk, 4)
do
</routine>
<routine name="tbl_update_scanstack"
type="^scanstack" parameter="rec" type="number" special>
var new as ^scanstack
var del as ^scanstack
del=getrecptr(rec, 3)
new=tbl_search_scanstack(del.pos)
deleteindex(new, 4)
deleterecord(rec, 3)
addindex(tbl_search_scanstack(new.pos), getrec(new, 4), 4)
if new=null then
new=getpointer(0, 0, 3)
endif
output "update scanstack:"+new.pos+"|"+new.file+"|"+new.outfile+"|"+new.ch+"|"+new.nextch+"|"+new.chwhat+"|"+new.chwhere+"|"+new.chmess+"|"+new.chline+"|"+new.chold+"|"+new.chbetween+"|"+new.chnew+"|" to log
flush(log)
return new
</routine>
<routine name="tbl_clear_scanstack" system>
long int r=0;
long int branch;
while (r < u_table[3].len) {
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+12)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+12)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+12)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+16)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+16)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+16)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+20)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+20)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+20)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+24)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+24)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+24)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+28)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+28)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+28)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+32)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+32)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+32)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+36)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+36)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+36)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+40)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+40)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+40)=0;}
if (*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+44)!=0) {free(*(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+44)); *(char**)(u_table[3].ptr[r/250]+(r%250)*u_table[3].size+44)=0;}
r++;
}
free(u_table[3].ptr);
u_table[3].ptr=0;
u_table[3].len=0;
for(branch=0; branch < u_index[4].scale; branch++)
{ free(u_index[4].ptr[branch]);
}
free(u_index[4].len);
free(u_index[4].ptr);
u_index[4].scale=0;
u_index[4].len=0;
u_index[4].ptr=0;
fprintf(v_log, "clear scanstack(3)\n");
fflush(v_log);
</routine>
<routine name="tbl_tablelength_scanstack" type="number" system>
return u_table[3].len;
</routine>
<routine name="tbl_init_scanstack" system>
u_table[3].len=0;
u_table[3].size=48;
u_table[3].ptr=0;
u_index[4].tbl=3;
u_index[4].scale=0;
u_index[4].len=0;
u_index[4].ptr=0;
u_index[4].ptrs=0;
u_index[4].padm=0;
</routine>
<routine name="tbl_write_scanstack" parameter="ptr" type="^scanstack" parameter="stream" type="stream">
write(ptr.pos, stream)
write(ptr.file, stream)
write(ptr.outfile, stream)
write(ptr.ch, stream)
write(ptr.nextch, stream)
write(ptr.chwhat, stream)
write(ptr.chwhere, stream)
write(ptr.chmess, stream)
write(ptr.chline, stream)
write(ptr.chold, stream)
write(ptr.chbetween, stream)
write(ptr.chnew, stream)
</routine>
<routine name="tbl_read_scanstack" type="^scanstack" parameter="stream" type="stream">
add scanstack as new
new.pos=read(stream)
new.file=read(stream)
new.outfile=read(stream)
new.ch=readtext(stream)
new.nextch=readtext(stream)
new.chwhat=readtext(stream)
new.chwhere=readtext(stream)
new.chmess=readtext(stream)
new.chline=readtext(stream)
new.chold=readtext(stream)
new.chbetween=readtext(stream)
new.chnew=readtext(stream)
update
return new
</routine>