15. ⒊⒄②籔⒀闽玒
15-1 STACK 矪瞶
INFORMIX-4GL
㎝⒀ぇ丁戈肚癳琌ノ戈挡篶い stack мォㄓ笷Θㄢ
ぇ丁笲
≌粂猭Α≈
CALL
function_name(arg1arg2argn)
15-2 ㊣﹚
啤讽 informix-4gl
㊣⒀穦盢ㄧ计い把计パオ溃(PUSH) STACKい
р把计计肚倒⒀τ⒀ゲ斗 STACK いㄌはΩ POP ┮
Τ把计
脾讽⒀饼肚跑计倒 informix-4gl
把计溃抖ゲ斗籔 4gl い returning
把计抖碞琌弧礚阶琌计┪戈篈常ゲ斗㎝ returning
把计抖璓
15-3 4GL籔⒀ㄧ计
戈篈 ﹚竡 POPPING ㄧ计 PUSHING ㄧ计
int i popint(&i)
retint(i)
short s popshort(&s) retshort(s)
long l poplong(&l) retlong(l)
float f popflo(&f)
retflo(&f)
double d popdub(&d)
retdub(&d)
char str[m]
popquote(str,m) retquote(str)
癘眔⒀い程︽痹瓃璶 returnτ return い斑把计琌ノㄓ肚
患饼砆肚计ㄏ⊿Τ肚把计璶 return(0)
”ㄒ
CALL bankopen(account_no,3,salary,"bankdisk.txt")
#include
<stdio.h>
FILE *fopen(),
*fp;
static int
Is_Open = 1;
static int
serial_no = 0;
bankopen(n)
int n;
{
int net_income,summary_ty,i,j,len;
char
account_no[8],a[8],bank_file[12],open_file[12];
serial_no++;
if (n != 4)
exit(1);
popquote(bank_file,12);
popint(&net_income);
popint(&summary_ty);
popquote(account_no,8);
len = strlen(bank_file);
if (Is_Open) {
fp =
fopen(bank_file,"w");
Is_Open = 0;
}
fprintf(fp," %06d
03",serial_no);
len = strlen(account_no);
for (i = 0; i < len; i++)
if (isdigit(account_no[i])) {
a[i] =
account_no[i];
}
else {
a[i] = '\0';
break;
}
len = 7 - strlen(a);
for (i = 0; i < len; i++)
fprintf(fp,"0");
fprintf(fp,"%s ",a);
switch (summary_ty) {
case 1 :
fprintf(fp,"PM");
break;
case 2 : fprintf(fp,"PR");
break;
case 3 :
fprintf(fp,"TH");
break;
}
if (net_income > 0)
fprintf(fp," C %08d\n",net_income);
else
fprintf(fp," D %08d\n",net_income);
return 0;
}