15.  ⒊⒄②籔⒀闽玒

 

15-1 STACK 矪瞶

 

INFORMIX-4GL ㎝⒀ぇ丁戈肚癳琌ノ戈挡篶い stack мォㄓ笷Θㄢ

ぇ丁笲

 

≌粂猭Α≈

CALL function_name(arg1arg2argn)

 

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;

}