home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a014 / 1.ddi / CDBINC.EXE / SUB7.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-16  |  29.1 KB  |  1,102 lines

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <alloc.h>
  4. #include<dos.h>
  5. #define pr(x)  fprintf(fp,x)
  6. #define  MAXP  10
  7. #define CONT 20
  8. #define CB 14
  9. typedef struct bb{
  10.          char MEAN[21],DB[9],KEY[4][11],COFLAG,COPATH[11];
  11.          int no;
  12.          struct bb *next;
  13.         }BASE;
  14. typedef struct cc {
  15.          char field[128][11],ftype[128];
  16.          int len1[128];
  17.                  int NN;
  18.          int no;
  19.          struct cc *next;
  20.            }CONTENT;
  21. typedef struct ll {
  22.             int  MAR[9][128];
  23.             int  no;
  24.             struct ll *next;
  25.             }LINK;
  26. LINK *flink, *mylink;
  27. BASE *fbase;
  28. CONTENT *fcon;
  29. char *explain="***│╔┼·╩²╛▌╨▐╕─***";
  30. int NB,repeat,I,J,II,JJ,linkflag;
  31. char lname[5][31],PATH[31];
  32. /**/char lnamebak[5][3][11];
  33.  
  34. main(int argc,char *argv[])
  35. {
  36.   FILE *fp;
  37.   int road[30][6],i=0,fs[30],aa,j,modi_ctc;
  38.   char buff[60]    ;
  39.   int p,k    ;
  40.   BASE *mybase;
  41.   CONTENT *mycon;
  42.   static char dname[30][20]    ;
  43.  
  44.    if(argc<2)
  45.      return;
  46.    strcpy(PATH,argv[1]);
  47.   fp=fopen("creat\\meno1.txt","w");
  48.   fclose(fp);
  49.   fp=fopen("creat\\meno2.txt","w");
  50.   fclose(fp);
  51.   i=0;
  52.   if ((fp = fopen("creat\\pmod.txt", "r"))!=NULL)
  53.     {
  54.        fscanf(fp,"%d\n",&i)    ;
  55.        for(p=0; p<i; p++)
  56.        fscanf(fp,"%s",dname[p])    ;
  57.     }
  58.   getbase();
  59. /*  getcontent(argv[1]);*/
  60.   modi_ctc=i;
  61.   for(;;)
  62.   {
  63.      clear_win(0,0,24,79,0x70);
  64.      clear_win(8,22,14,62,0);
  65.      clear_win(7,20,13,60,30);
  66.      color_puts("─· ╥╤ ╔· │╔ ┴╦    ╕÷ ▓┘ ╫≈ ─ú ┐Θ",30,8,24);
  67.      cursor(8,39);
  68.      printf("%d",modi_ctc);
  69.      color_puts("╟δ ╩Σ ╚δ ─· ╜½ ╨▐ ╕─ ╔· │╔ ─ú ┐Θ",30,9,24);
  70.      color_puts("╡─ ╨≥ ║┼ (0 ╬¬ ═╦ │÷,   ┤≤ ╙┌  ",30,10,24);
  71.      printf("%d",modi_ctc);
  72.      color_puts("╘≥ ╠φ ╝╙ ╔· │╔,╖± ╘≥,╨▐ ╕─ ╔· │╔",30,11,24);
  73.      cursor(12,40);
  74.      scanf("%d",&i);
  75.      if (i==0) break;
  76.      if (i>modi_ctc) modi_ctc++;
  77.      i=(i>modi_ctc)?(modi_ctc-1):i-1;
  78.   if((aa=getroad(argv[1],road[i],i))!=0)
  79.     {
  80.        if(aa==1)
  81.        { /*j=0;
  82.      mybase=fbase;
  83.      while(mybase->no!=(road[i][0]-1))
  84.         mybase=mybase->next;
  85.      while (mybase->MEAN[j]!='\0')
  86.         dname[i][j]=mybase->MEAN[j++];
  87.      dname[i][j]='\0';*/
  88.      clear_win(15,36,19,72,0)    ;
  89.      clear_win(14,34,18,70,0|53)    ;
  90.      color_puts("╢¿╥σ┴¼╜╙┐Γ╡─╩╢▒≡├√(╫ε╢α20╕÷╫╓╖√): ",0|53,15,36)    ;
  91.      color_puts("                         ",0|53,17,40)    ;
  92.      cursor( 17, 43 )    ;
  93.      scanf("%s",dname[i]);
  94.        }
  95.        else
  96.         deflink(road[i],dname[i]);
  97.        getm(&aa);
  98.        if(aa!=0)
  99.      {
  100.        if(aa==2) get_dc(road[i]);
  101.        if(aa==3) get_fc(road[i]);
  102.        fs[i]=aa;
  103.       }
  104.      cr_sub7(road[i],i,fs[i],PATH);
  105.      i++;
  106.      free(flink);
  107.      mycon=fcon;
  108.      while (fcon!=NULL)
  109.           {
  110.           fcon=fcon->next;
  111.           mycon->next=NULL;
  112.           free(mycon);
  113.           mycon=fcon;
  114.           }
  115.      }
  116.   else break;
  117.   }
  118.   i=modi_ctc;
  119.   system("cls");
  120.   cursor(12,20);
  121.   printf("╒²╘┌╔·│╔│╔┼·╩²╛▌╨▐╕─│╠╨≥,╟δ╔╘║≥!");
  122.   replace();
  123.   repd();
  124.   cr_sub71(dname,i);
  125.  
  126.    fp = fopen("creat\\pmod.txt","w")    ;
  127.   fprintf(fp,"%d\n",i)    ;
  128.   for(k=0; k<i; k++)
  129.     fprintf(fp,"%s\n",dname[k])    ;
  130.   fclose(fp)    ;
  131.  
  132.  
  133.  }
  134.  
  135. getm(int *ii)
  136. {
  137.  int cc;
  138.  char dd;
  139.   clear_win(0,0,24,79,0)    ;
  140.   color_puts(explain,14,2,2);
  141.    for(;;)
  142.      {
  143.       clear_win(0,0,24,80,0x70)    ;
  144.       color_puts(explain,90,2,3);
  145.       clear_win(10,17,18,52,0)    ;
  146.       clear_win(9,15,17,50,0x10)    ;
  147.       color_puts("====== ╟δ╨▐╕─╩Σ╚δ╖╜╩╜  [   ]  ======",30,9,15);
  148.       color_puts("1.  ╦∙ ╙╨ ╝╟ ┬╝",30,11,23)    ;
  149.       color_puts("2.  ╣╠ ╢¿ ╠⌡ ╝■",30,12,23)    ;
  150.       color_puts("3.  ╫Θ ║╧ ╠⌡ ╝■",30,13,23)    ;
  151.       color_puts("4.  ╚╬ ╥Γ ╠⌡ ╝■",30,14,23)    ;
  152.       color_puts("0.  ═╦ │÷ ",30,15,23)    ;
  153.       color_puts("====================================",30,17,15);
  154.       cc=get((long)0,(long)4,9,39);
  155.       color_puts("─π─▄╚╖╚╧┬≡? (Y/N) [ ]",30,20,20);
  156.       cursor(20,39);
  157.       dd=readchar();         /*scanf("%c",&dd);*/
  158.       if(dd=='y'||dd=='Y')
  159.       break;
  160.     }
  161.     *ii=cc;
  162. }
  163.  
  164.  
  165. cr_sub7(s,i,fs,aarr)
  166. int i,*s,fs;
  167. char *aarr;
  168. {FILE *fp,*dp,*tp;
  169.  char name[15],buff[130],nname[15],cname[15],tname[5];
  170.  int j,k,l,ii,ll,jj,kk,la,lb,lla,llb,row,col,m,n;
  171.  BASE *mybase;
  172.  CONTENT *mycon;
  173.  dp=fopen("creat\\meno2.txt","r");
  174.  tp=fopen("creat\\meno1.txt","r");
  175.   if (i+1<10) {tname[0]='1'+i;tname[1]='\0';}
  176.   if (i+1>9)  {tname[0]='0'+(i+1)/10; tname[1]='0'+(i+1)%10; tname[2]='\0';}
  177.   strcpy(name,"psub"); strcat(name,tname); strcat(name,".prg");
  178.   strcpy(nname,"tpn"); strcat(nname,tname); strcat(nname,".prg");
  179.   strcpy(cname,"chg"); strcat(cname,tname); strcat(cname,".prg");
  180.  k=i;
  181.    fp=fopen(name,"w");
  182.    j=0;
  183.    pr("clear\nset color to w+/B\n");
  184.     n=s[0]-1;
  185.     mybase=fbase;
  186.     while(mybase->no!=n)
  187.     mybase=mybase->next;
  188.     if( mybase->COFLAG == 'Y' || mybase->COFLAG == 'y')
  189.     fprintf(fp,"sele A\nuse %s%s\ncopy to s%s stru exte\n",mybase->COPATH,mybase->DB,mybase->DB);
  190.     else
  191.     fprintf(fp,"sele A\nuse %s%s exclusive\ncopy to s%s stru exte\n",aarr,mybase->DB,mybase->DB)    ;
  192.     fprintf(fp,"sele 10\nuse %sndx\n",aarr);
  193.     j=1;
  194.     while(s[j]!=0)
  195.      {
  196.        mybase=fbase;
  197.        while(mybase->no!=(s[j]-1))
  198.      mybase=mybase->next;
  199.        fprintf(fp,"sele 10\ngo top\n");
  200. /*       fprintf(fp,"loca for trim(╦≈╥²╫╓╢╬)='%s'.and.trim(┐Γ├√)='%s'\n",lname[j-1],mybase->DB);
  201.        fprintf(fp,"nf=trim(╦≈╥²╬─╝■)\n");
  202.        fprintf(fp,"select %c\n",j+1+64);*/
  203.        if( mybase->COFLAG != 'Y' && mybase->COFLAG != 'y')
  204.       {
  205.      fprintf(fp,"sele 10\n use %sndx exclusive\ngo top\n",aarr);
  206.        fprintf(fp,"loca for trim(╦≈╥²╫╓╢╬)='%s'.and.trim(┐Γ├√)='%s'\n",lname[j-1],mybase->DB);
  207.        fprintf(fp,"nf=trim(╦≈╥²╬─╝■)\n");
  208.        fprintf(fp,"select %c\n",j+65);
  209.        fprintf(fp,"use %s%s inde %s&nf exclusive\naflag%c=1\n",aarr,mybase->DB,aarr,s[j]+64)    ;
  210.       }
  211.        else
  212.       {
  213.        fprintf(fp,"sele 10\n use %sndx \ngo top\n",mybase->COPATH);
  214.        fprintf(fp,"loca for trim(╦≈╥²╫╓╢╬)='%s'.and.trim(┐Γ├√)='%s'\n",lname[j-1],mybase->DB);
  215.        fprintf(fp,"nf=trim(╦≈╥²╬─╝■)\n");
  216.        fprintf(fp,"select %c\n",j+65);
  217.         fprintf(fp,"use %s%s inde %s&nf\naflag%c=1\n",mybase->COPATH,mybase->DB,mybase->COPATH,s[j]+64)    ;
  218.         fprintf(fp,"sele 10\nuse %sndx exclusive\n",aarr)    ;
  219.       }
  220.        fprintf(fp,"copy to s%s stru exte\n",mybase->DB);
  221.        if (linkflag==0)
  222.       fprintf(fp,"sele A\nset rela to %s into %c \n",lname[j-1],j+65);
  223.        else
  224.       fprintf(fp,"sele %c\nset rela to %s into %c addi\n",j+64,lname[j-1],j+65);
  225.        j++;
  226.      }
  227.    fprintf(fp,"goon=.t.\n");
  228.    repn(j,k,s,nname);
  229.    change(j,k,cname,s,nname,lname);
  230.    if(k==3)
  231.      k=3;
  232.    if(fs==1)
  233.      {pr("condition='.T.'\n");
  234.       pr("rr='Y'\n");
  235.       pr("do while rr='Y'\n");
  236.       pr("@1,1 say '╨▐ ╕─ ╦∙ ╙╨ ╝╟ ┬╝ '\n");
  237.       cfield(k,j,s,fp);
  238.       pr("@3,0 clear to 24,79\n");
  239.       pr("go renu\n");
  240.       pr("fl=FIELD_LEN\n");
  241.       pr("ft=FIELD_TYPE\n");
  242.       pr("fname=FIELD_NAME\n");
  243.       fprintf(fp,"do %s with ft,fl,fname,condition\n",cname);
  244.       pr("rr=' '\n");
  245.       pr("@3,0 clear to 24,70\n");
  246.       pr("@14,20 say '╗╣╥¬╨▐╕─╞Σ╦ⁿ╫╓╢╬┬≡?  ' get rr picture '!'\n");
  247.       pr("read\n");
  248.       pr("enddo\nset color to W+/B\n");
  249.  }
  250.  if(fs==2)
  251.      {
  252.     while(fgets(buff,120,dp))
  253.       { if(buff[1]=='#')  break;
  254.         l=0;
  255.         color_puts("please assure condition :", 0x56,24,0)    ;
  256.         line_edit(24,25,31,buff,60)    ;
  257.         while(buff[l]!='\n') l++;
  258.         buff[l]='\0';
  259.         fprintf(fp,"condition=\"%s\"\n",buff);
  260.             pr("rr='Y'\n");
  261.         pr("do while rr='Y'\n");
  262.         fprintf(fp,"@1,1 say \"╕ⁿ ╨┬  %s  ╡─ ╝╟ ┬╝\"\n",buff);
  263.         cfield(k,j,s,fp);
  264.         pr("@3,0 clear to 24,79\n");
  265.         pr("go renu\n");
  266.         pr("fl=FIELD_LEN\n");
  267.         pr("ft=FIELD_TYPE\n");
  268.         pr("fname=FIELD_NAME\n");
  269.         fprintf(fp,"do %s with ft,fl,fname,condition\n",cname);
  270.             pr("rr=' '\n");
  271.         pr("@3,0 clear to 24,79\n");
  272.         pr("@14,20 say '╗╣╥¬╨▐╕─╞Σ╦ⁿ╫╓╢╬┬≡?  ' get rr picture '!'\n");
  273.         pr("read\n");
  274.         pr("enddo\n");
  275.       }
  276.     }
  277.    if(fs==3)
  278.     {
  279.         while(fgets(buff,120,tp))
  280.          { if(buff[1]=='#') break;
  281.            mcon(fp,buff);
  282.                pr("rr='Y'\n");
  283.            pr("do while rr='Y'\n");
  284.            pr("@1,1 say '╕ⁿ ╨┬ ╫Θ ║╧ ╠⌡ ╝■ ╝╟ ┬╝ '\n");
  285.            cfield(k,j,s,fp);
  286.            pr("@3,0 clear to 24,79\n");
  287.            pr("go renu\n");
  288.            pr("fl=FIELD_LEN\n");
  289.            pr("ft=FIELD_TYPE\n");
  290.            pr("fname=FIELD_NAME\n");
  291.            fprintf(fp,"do %s with ft,fl,fname,condition\n",cname);
  292.                pr("rr=' '\n");
  293.            pr("@3,0 clear to 24,79\n");
  294.            pr("@14,20 say '╗╣╥¬╨▐╕─╞Σ╦ⁿ╫╓╢╬┬≡?  ' get rr picture '!'\n");
  295.            pr("read\n");
  296.            pr("enddo\n");
  297.       }
  298.     }
  299.    if(fs==4)
  300.   {
  301.     pr("set color to w+/B\n@0,0 say '╚╬╥Γ╠⌡╝■'\n");
  302.     pr("condition=''\n");
  303.     pr("cb=1\n");
  304.     pr("cs=.t.\n");
  305.     pr("do while cs\n");
  306.     rcon(k,j,s,fp);
  307.     pr("clear\n");
  308.     pr("do rcon with renu,cb,condition,cs\n");
  309.     pr("enddo\n");
  310.     pr("rr='Y'\n");
  311.     pr("do while rr='Y'\n");
  312.     pr("@1,1 say '╨▐ ╕─ '+condition+' ╡─ ╝╟ ┬╝ '\n");
  313.     cfield(k,j,s,fp);
  314.     pr("@3,0 clear to 24,79\n");
  315.     pr("go renu\n");
  316.     pr("fl=FIELD_LEN\n");
  317.     pr("ft=FIELD_TYPE\n");
  318.     pr("fname=FIELD_NAME\n");
  319.     fprintf(fp,"do %s with ft,fl,fname,condition\n",cname);
  320.     pr("rr=' '\n");
  321.     pr("@3,0 clear to 24,79\n");
  322.     pr("@14,20 say '╗╣╥¬╨▐╕─╞Σ╦ⁿ╫╓╢╬┬≡?  ' get rr picture '!'\n");
  323.     pr("read\n");
  324.     pr("enddo\n");
  325.  }
  326. /***    fprintf(fp,"sele 10\nuse ndx\n");****/
  327.     fprintf(fp,"sele 10\nuse %sndx\n",aarr) ;
  328.     j=0;
  329.     while(s[j]!=0)
  330.      {
  331.        mybase=fbase;
  332.        while(mybase->no!=(s[j]-1))
  333.      mybase=mybase->next;
  334.        fprintf(fp,"sele 10\ngo top\n");
  335.        fprintf(fp,"loca for trim(┐Γ├√)='%s'\n",mybase->DB);
  336.        fprintf(fp,"do while .not.eof()\nnf=trim(╦≈╥²╬─╝■)\n");
  337.        fprintf(fp,"select %c\n",j+1+64);
  338.        if( mybase->COFLAG == 'Y' || mybase->COFLAG == 'y' )
  339.         fprintf(fp,"use %s%s inde %s&nf exclusive\nreinde\nuse\nsele 10\ncontinue\nenddo\n",
  340.                 mybase->COPATH,mybase->DB,mybase->COPATH)    ;
  341.        else
  342.         fprintf(fp,"use %s%s inde %s&nf exclusive\nreindex\nuse\nsele 10\ncontinue\nenddo\n",
  343.                 aarr,mybase->DB,aarr)    ;
  344.        j++;
  345.      }
  346.  pr("return\n");
  347.  fclose(fp);
  348.  fclose(dp);
  349.  fclose(tp);
  350. }
  351.  
  352.  
  353.  
  354.  
  355. replace()
  356. { FILE *fp;
  357.   fp=fopen("ty_cl.prg","w");
  358.   pr("parameters fname,value\n");
  359.   pr("pp='╧╓╘┌╠µ╗╗  '+fname+'╫╓╢╬ '\n");
  360.   pr("set color to w+/B\n@5,10 say  pp\n");
  361.   pr("y=.T.\n");
  362.   pr("do while y\nset color to w+/b\n");
  363.   pr("@10,20 say ' ╟δ╩Σ╚δ╠µ╗╗║≤╡─╓╡ ' get value\n");
  364.   pr("read\n");
  365.   pr("yy=' '\n");
  366.   pr("@23,20 say '─·─▄╚╖╚╧┬≡ ?' get yy\n");
  367.   pr("read\n");
  368.   pr("if upper(yy)='Y'\n");
  369.   pr("y=.F.\n");
  370.   pr("endif\nset color to W+/b\n");
  371.   pr("enddo\n");
  372.   pr("return\n");
  373.   fclose(fp);
  374. }
  375.  
  376. repd()
  377. {
  378.   FILE *fp;
  379.   fp=fopen("tyd.prg","w");
  380.   pr("parameters fname,value,k1,sy\n");
  381.   pr("pp='╧╓╘┌╠µ╗╗  '+fname+'╫╓╢╬ '\n");
  382.   pr("set color to w+/B\n@5,10 say  pp\n");
  383.   pr("y=.T.\n");
  384.   pr("do while y\nset color to W+/B\n");
  385.   pr("@19,5 to 22,74 double\n");
  386.   pr("@20,10 say '╒Γ╩╟╚╒╞┌╨═╫╓╢╬,╓╗─▄╜°╨╨(+/-)╘╦╦π,╗≥╠µ╗╗(0)'\n");
  387.   pr("symbol=' '\n");
  388.   pr("do while symbol<>'+' .AND. symbol<>'-' .AND. symbol<>'0'\n");
  389.   pr("set color to w+/b\n@21,10 say '╟δ╩Σ╚δ─·╡─▓┘╫≈ ' get symbol\n");
  390.   pr("read\n");
  391.   pr("if symbol='+'\n");
  392.   pr(" sy='╝╙'\n");
  393.   pr("else\n");
  394.   pr(" if symbol='-'\n");
  395.   pr("   sy='╝⌡'\n");
  396.   pr(" else\n");
  397.   pr("   sy='╠µ╗╗'\n");
  398.   pr("endif\n");
  399.   pr("endif\nset color to W+/b\n");
  400.   pr("enddo\n");
  401.   pr("if symbol='0'\n");
  402.   pr("set color to w+/b\n@10,20 say ' ╟δ╩Σ╚δ╠µ╗╗║≤╡─╓╡ ' get k1\n");
  403.   pr("read\n");
  404.   pr("else\n");
  405.   pr("@10,20 say ' '+sy+':' get value picture '99999'\n");
  406.   pr("@10,31 say '╠∞'\n");
  407.   pr("read\n");
  408.   pr("endif\n");
  409.   pr("yy=' '\n");
  410.   pr("@23,20 say '─·─▄╚╖╚╧┬≡ ?' get yy\n");
  411.   pr("read\n");
  412.   pr("if upper(yy)='Y'\n");
  413.   pr("y=.F.\n");
  414.   pr("endif\n");
  415.   pr("set color to W+/b\n@10,0 clear\n");
  416.   pr("enddo\n");
  417.   pr("return\n");
  418.   fclose(fp);
  419. }
  420.  
  421.  
  422.  
  423. repn(int j,int k,int *s,char *nname)
  424. {
  425.   FILE *fp;
  426.   fp=fopen(nname,"w");
  427.   pr("parameters expr,value,fname\n");
  428.   pr("yy='N'\n");
  429.   pr("do while yy<>'Y'\n");
  430.   pr("set color to /W\nclear\n")    ;
  431.   pr("expr=''\n");
  432.   pr("@4,0 clear to 17,79\n");
  433.   pr("pp='╧╓╘┌╠µ╗╗  '+fname+'╫╓╢╬ '\n");
  434.   pr("set color to w+/B\n@5,10 say  pp\n");
  435.   pr("set color to /N\n@8,14 clear to 16,70\n")    ;
  436.   pr("set color to W+/B\n@7,12 clear to 15,68\n")    ;
  437.   pr("set color to w+/B\n")    ;
  438.   pr("@9,19 say '╕├╫╓╢╬╩╟╩²╫╓╨═,─·┐╔╙├╩²╫╓,╥▓┐╔╙├▒φ┤∩╩╜╠µ╗╗'\n");
  439.   pr("@10,19 say '╫ó╥Γ:   D---╚╒╞┌╨═,     N---╩²╫╓╨═       '\n");
  440.   pr("@11,19 say '▒φ┤∩╩╜╓╨╚╒╞┌╨═╓╗─▄╙δ╚╒╞┌╨═╫≈╝⌡ (-) ▓┘╫≈ ,'\n");
  441.   pr("@12,19 say '╟δ╩Σ╚δ─·╡─▓┘╫≈: 1---╙├╩²╫╓╠µ╗╗'\n");
  442.   pr("@13,19 say '                2---╙├▒φ┤∩╩╜╠µ╗╗'\n");
  443.   pr("choice=0\n");
  444.   pr("do while choice<>2 .AND. choice<>1\n");
  445.   pr("@15,40 get choice picture '9'\n");
  446.   pr("read\n");
  447.   pr("enddo\nset color to w+/b\n");
  448.   pr("do case\n");
  449.   pr("case choice=1\n");
  450.   pr("@7,0 clear to 15,79\n");
  451.   pr("@12,20 say '╟δ ╩Σ ╚δ ╩² ╛▌ ' get value picture '999999'\n");
  452.   pr("read\n");
  453.   pr("case choice=2\n");
  454.   pr("@5,0 clear to 17,0\n");
  455.   pr("@3,0 say '╙├ ▒φ ┤∩ ╩╜ ╠µ ╗╗'\n");
  456.   expression(k,j,s,fp);
  457.   pr("endcase\n");
  458.   pr("yy=' '\n");
  459.   pr("@23,20 say '─·─▄╚╖╚╧┬≡ ?' get yy picture '!'\n");
  460.   pr("read\nset color to W+/b\n");
  461.   pr("@23,20 clear\n");
  462.   pr("enddo\n");
  463.   fclose(fp);
  464. }
  465.  
  466.  
  467.  
  468. cfield(int k,int j,int *s,FILE *fp)
  469. { int row,col,l,ll;
  470.   BASE *mybase;
  471.   CONTENT *mycon;
  472.     pr("ccs=.t.\n");
  473.     pr("cb=1\n");
  474.     pr("do while ccs\n");
  475.     pr("do case\n");
  476.     for(l=1;l<=j;l++)
  477.       { fprintf(fp,"case cb=%d\n",l);
  478.     pr("select 10\n");
  479.     pr("name='s'\n");
  480.     mybase=fbase;
  481.     mycon=fcon;
  482.     while(mybase->no!=(s[l-1]-1)) mybase=mybase->next;
  483.     while(mycon->no!=(s[l-1]-1)) mycon=mycon->next;
  484. /*     {
  485.       mybase=mybase->next;
  486.       mycon=mycon->next;
  487.      }*/
  488.     fprintf(fp,"name=name+'%s'\n",mybase->DB);
  489.     pr("use &name exclusive\n");
  490.     if(mycon->NN>68)
  491.       { pr("@5,0 clear to 21,79\n");
  492.         pr("cf=1\n");
  493.         pr("cc=.t.\n");
  494.         pr("do while cc\n");
  495.         pr("renu=0\n");
  496.         pr("do case\n");
  497.         pr("case cf=1\n");
  498.         row=5; col=5;
  499.         for(ll=0;ll<68;ll++)
  500.           { fprintf(fp,"@%d,%d say '%2d.%s'\n",row,col,ll+1,mycon->field[ll]);
  501.         if(col==65) { row++;col=5;}
  502.         else col+=20;
  503.           }
  504.         pr("skeyboar='  '\n");
  505.         pr("@22,0 say '╩╣╙├ PgUp,PgDn ╤í╘±▓┘╫≈┐Γ,íⁿ/í² ╤í╘±▒╛┐Γ╞Σ╙α╫╓╢╬'\n");
  506.         pr("@23,0 say '╗≥╤í╘±╫╓╢╬(1--68)╫≈╬¬╨▐╕─╫╓╢╬'\n");
  507.         pr("read\n");
  508.         pr("i=readkey()\n");
  509.         pr("do case\n");
  510.         pr("case i=6 .or. i=7\n");
  511.         pr("ccs=.f.\n");
  512.         pr("cc=.f.\n");
  513.         pr("if i=7\n");
  514.         pr("cb=cb+1\n");
  515.         fprintf(fp,"if cb>%d\n",j);
  516.         pr("cb=1\n");
  517.         pr("endif\n");
  518.         pr("else\n");
  519.         pr("cb=cb-1\n");
  520.         pr("if cb=0\n");
  521.         pr("cb=1\n");
  522.         pr("endif\n");
  523.         pr("endif\n");
  524.         pr("case i=5 .or. i=4\n");
  525.         pr("cf=2\n");
  526.         pr("case skeyboar>'0' .or. skeyboar<'69'\n");
  527.         pr("renu=val(skeyboar)\n");
  528.         pr("cc=.f.\n");
  529.         pr("endcase\n");
  530.         pr("case cf=2\n");
  531.         pr("@5,0 clear to 21,79\n");
  532.         row=5;col=5;
  533.         for(ll=68;ll<mycon->NN;ll++)
  534.           { fprintf(fp,"@%d,%d say '%3d.%s'\n",row,col,ll+1,mycon->field[ll]);
  535.         if(col==65) { row++;col=5;}
  536.         else col+=20;
  537.           }
  538.         pr("skeyboar='  '\n");
  539.         pr("@22,0 say '╩╣╙├ PgUp,PgDn ╤í╘±▓┘╫≈┐Γ'\n");
  540.         fprintf(fp,"@23,0 say '╗≥╤í╘±╫╓╢╬ (68--%d) ╫≈╬¬╨▐╕─╫╓╢╬ ' get skeyboar\n",mycon->NN);
  541.         pr("read\n");
  542.         pr("i=readkey\n");
  543.         pr("do case\n");
  544.         pr("case i=6 .or. i=7\n");
  545.         pr("cc=.f\n");
  546.         pr("if i=7\n");
  547.         pr("cb=cb+1\n");
  548.         fprintf(fp,"if cb>%d\n",j);
  549.         pr("cb=1\n");
  550.         pr("else\n");
  551.         pr("cb=cb-1\n");
  552.         pr("if cb=0\n");
  553.         pr("cb=1\n");
  554.         pr("endif\n");
  555.         pr("endif\n");
  556.         pr("case i=5 .or. i=4\n");
  557.         pr("cf=1\n");
  558.         fprintf(fp,"case skeyboar>'68' .or. skeyboar<='%d'\n",mycon->NN);
  559.         pr("renu=val(skeyboar)\n");
  560.         pr("ccs=.f.\n");
  561.         pr("cc=.f\n");
  562.         pr("endcase\n");
  563.         pr("endcase\n");
  564.         pr("enddo\n");
  565.       }
  566.       else
  567.      {  pr("@5,0 clear to 21,79\n");
  568.         row=5;col=5;
  569.         for(ll=0;ll<mycon->NN;ll++)
  570.           { fprintf(fp,"@%d,%d say '%2d.%s'\n",row,col,ll+1,mycon->field[ll]);
  571.         if(col==65) { row++;col=5;}
  572.         else col+=20;
  573.           }
  574.         pr("skeyboar='  '\n");
  575.         pr("@22,0 say '╩╣╙├ PgUp,PgDn ╤í╘±▓┘╫≈┐Γ'\n");
  576.         fprintf(fp,"@23,0 say '╗≥╤í╘±╫╓╢╬ (1--%d) ╫≈╬¬╨▐╕─╫╓╢╬ ' get skeyboar\n",mycon->NN);
  577.         pr("read\n");
  578.         pr("i=readkey()\n");
  579.         pr("do case\n");
  580.         pr("case i=6 .or. i=7\n");
  581.         pr("if i=7\n");
  582.         pr("cb=cb+1\n");
  583.         fprintf(fp,"if cb>%d\n",j);
  584.         pr("cb=1\n");
  585.         pr("endif\n");
  586.         pr("else\n");
  587.         pr("cb=cb-1\n");
  588.         pr("if cb=0\n");
  589.         pr("cb=1\n");
  590.         pr("endif\n");
  591.         pr("endif\n");
  592.         fprintf(fp,"case skeyboar>='1' .or. skeyboar<='%d'\n",mycon->NN);
  593.         pr("ccs=.f.\n");
  594.         pr("renu=val(skeyboar)\n");
  595.         pr("endcase\n");
  596.      }
  597.     }
  598.     pr("endcase\n");
  599.     pr("enddo\n");
  600. }
  601.  
  602.  
  603.  
  604. expression(int k,int j,int *s,FILE *fp)
  605. { int row,col,l,ll;
  606.   BASE *mybase;
  607.   CONTENT *mycon;
  608.     pr("do while .T.\n");
  609.     pr("pp='╧╓╘┌╠µ╗╗  '+fname+'╫╓╢╬ '\n");
  610.     pr("@1,54 say  pp\n");
  611.     pr("@4,10 say expr\n");
  612.     pr("@5,0 clear to 20,79\n");
  613.     pr("ty=' '\n");
  614.     pr("do while ty<>'0' .AND. ty<>'1' .AND. ty<>'2' .AND. ty<>'3'\n");
  615.     pr("set color to /W\nclear\n")    ;
  616.     pr("set color to /N\n@9,22 clear to 16,57\n")    ;
  617.     pr("set color to W/B\n@8,20 clear to 15,55\n")    ;
  618.     pr("set color to w+/B\n")    ;
  619.     pr("@10,30 say '1. ╩Σ ╚δ ╩² ╛▌ '\n");
  620.     pr("@11,30 say '2. ╩Σ ╚δ ▒Σ ┴┐ '\n");
  621.     pr("@12,30 say '3. ╩Σ ╚δ  ('\n");
  622.     pr("@13,30 say '0.EXIT '\n");
  623.     pr("@22,20 say '╟δ ╩Σ ╚δ ▓┘ ╫≈ ╖╜ ╩╜ 'get ty\n");
  624.     pr("read\n");
  625.     pr("enddo\n");
  626.     pr("if ty='0'\n");
  627.     pr("exit\n");
  628.     pr("endif\n");
  629.     pr("if ty='3'\n");
  630.     pr("expr=expr+'('\n");
  631.     pr("loop\n");
  632.     pr("endif\n");
  633.     pr("if ty='1'\n");
  634.     pr("@5,0 clear to 22,79\n");
  635.     pr("vv=space(10)\n");
  636.     pr("@10,20 say '╟δ ╩Σ ╚δ ╩² ╛▌' get vv \n");
  637.     pr("read\n");
  638.     pr("expr=expr+trim(vv)\n");
  639.     pr("else\n");
  640.     pr("ccs=.t.\n");
  641.     pr("cb=1\n");
  642.     pr("do while ccs\n");
  643.     pr("do case\n");
  644.     for(l=1;l<=j;l++)
  645.       { fprintf(fp,"case cb=%d\n",l);
  646.         pr("@5,0 clear to 21,79\n");
  647.     pr("select 10\n");
  648.     pr("name='s'\n");
  649.         mybase=fbase;
  650.     mycon=fcon;
  651.     while(mybase->no!=(s[l-1]-1)) mybase=mybase->next;
  652.     while(mycon->no!=(s[l-1]-1)) mycon=mycon->next;
  653. /*    while(mybase->no!=(s[l-1]-1))
  654.      {
  655.       mybase=mybase->next;
  656.       mycon=mycon->next;
  657.      }*/
  658.     fprintf(fp,"name=name+'%s'\n",mybase->DB);
  659.     pr("use &name exclusive\n");
  660.     pr("go top\n");
  661.     pr("row=5\n");
  662.     pr("col=5\n");
  663.     pr("num=1\n");
  664.     pr("do while .NOT. eof()\n");
  665.     pr("fftt=FIELD_TYPE\n");
  666.     pr("if fftt='N' .OR. fftt='D'\n");
  667.     pr("@row,col say str(num,2,0)\n");
  668.     pr("vv='.'+FIELD_NAME+'('+FIELD_TYPE+')'\n");
  669.     pr("@row,col+2 say vv\n");
  670.     pr("if col=65\n");
  671.     pr("col=5\n");
  672.     pr("row=row+1\n");
  673.     pr("else\n");
  674.     pr("col=col+20\n");
  675.     pr("endif\n");
  676.     pr("endif\n");
  677.     pr("num=num+1\n");
  678.     pr("skip\n");
  679.     pr("enddo\n");
  680.     pr("skeyboar='  '\n");
  681.     pr("@22,0 say '╩╣╙├ PgUp,PgDn ╤í╘±▓┘╫≈┐Γ'\n");
  682.     fprintf(fp,"@23,0 say '╗≥╤í╘±╫╓╢╬ (1--%d) ╫≈╬¬▓┘╫≈╫╓╢╬ ' get skeyboar\n",mycon->NN);
  683.     pr("read\n");
  684.     pr("i=readkey()\n");
  685.     pr("do case\n");
  686.     pr("case i=6 .or. i=7\n");
  687.     pr("if i=7\n");
  688.     pr("cb=cb+1\n");
  689.     fprintf(fp,"if cb>%d\n",j);
  690.     pr("cb=1\n");
  691.     pr("endif\n");
  692.     pr("else\n");
  693.     pr("cb=cb-1\n");
  694.     pr("if cb=0\n");
  695.     pr("cb=1\n");
  696.     pr("endif\n");
  697.     pr("endif\n");
  698.     fprintf(fp,"case skeyboar>='1' .or. skeyboar<='%d'\n",mycon->NN);
  699.     pr("renu=val(skeyboar)\n");
  700.     pr("go renu\n");
  701.     pr("if eof() .OR. FIELD_TYPE <>'N'\n");
  702.     pr("@23,0 say '╩Σ ╚δ ┤φ ! └α ╨═ ▓╗ ╞Ñ ┼Σ'\n");
  703.     pr("else\n");
  704.     pr("ccs=.f.\n");
  705.         pr("b=asc('A')+cb-1\n");
  706.     pr("b=chr(b)\n");
  707.     pr("expr=expr+b+'->'+FIELD_NAME\n");
  708.     pr("endif\n");
  709.     pr("endcase\n");
  710.        }
  711.     pr("endcase\n");
  712.     pr("enddo\n");
  713.     pr("endif\n");
  714.     pr("ii=.T.\n");
  715.     pr("do while ii\n");
  716.     pr("@4,10 say expr\n");
  717.     pr("@5,0 clear to 24,79\n");
  718.     pr("@10,20 say '─· ┐╔ ╩Σ ╚δ ╧┬ ┴╨ ╫╓ ╖√:'\n");
  719.     pr("@12,30 say '+     ,       -'\n");
  720.     pr("@13,30 say '*     ,       /'\n");
  721.     pr("@14,30 say ')     ,       0: ═╦│÷'\n");
  722.     pr("@11,20 to 16,60 double\n");
  723.     pr("cc=' '\n");
  724.     pr("@17,30 say '╟δ ╩Σ ╚δ !'get cc\n");
  725.     pr("read\n");
  726.     pr("if cc='0'\n");
  727.     pr("ii=.F.\n");
  728.     pr("endif\n");
  729.     pr("if AT(cc,'+-*/)')<>0\n");
  730.     pr("expr=expr+cc\n");
  731.     pr("ii=.F.\n");
  732.     pr("endif\n");
  733.     pr("if cc=')'\n");
  734.     pr("ii=.T.\n");
  735.     pr("endif\n");
  736.     pr("enddo\n");
  737.     pr("if cc='0'\n");
  738.     pr("exit\n");
  739.     pr("endif\n");
  740.     pr("enddo\n");
  741. }
  742.  
  743.  
  744.  
  745.  
  746.  
  747. change(int j,int k,char *cname,int *s,char *nname)
  748. {
  749.       FILE *fp;
  750.       int kk;
  751.       BASE *mybase;
  752.       fp=fopen(cname,"w");
  753.       pr("parameters ft,fl,fname,condition\n");
  754. /**/  pr("set proc to proced\n");
  755.       pr("do case\n");
  756.       pr("case ft='C' .OR. ft='L'\n");
  757.       pr("value=space(fl)\n");
  758.       pr("use\n");
  759.       pr("do ty_cl with fname,value\n");
  760.       pr("select 1\n");
  761.       pr("go top\n");
  762.       pr("do while .NOT. eof()\n");
  763.       pr("if goon\n");
  764.       pr("if &condition\n");
  765.       for(kk=0;kk<j;kk++)
  766.        {
  767.      mybase=fbase;
  768.      while(mybase->no!=(s[kk]-1))
  769.        mybase=mybase->next;
  770.      fprintf(fp,"sname='S'+'%s'\n",mybase->DB);
  771.      pr("select 10\n");
  772.      pr("use &sname exclusive\n");
  773.      pr("go top\n");
  774.      pr("locate for FIELD_NAME=fname\n");
  775.      pr("if .NOT. eof()\n");
  776.      fprintf(fp,"select %d\n",kk+1);
  777. /***/    pr("do rlock24\n")   ;
  778.      pr("replace &fname with value \n");
  779. /***/    pr("unlock\n");
  780.      pr("endif\n");
  781.        }
  782.       pr("endif\n");
  783.       pr("endif\n");
  784.       pr("select 1\n");
  785.       pr("skip\n");
  786.       pr("enddo\n");
  787.       pr("case ft='D'\n");
  788.       pr("value=0\n");
  789.       pr("sy=' '\n");
  790.       pr("k1=ctod('00/00/00')\n");
  791.       pr("do tyd with fname,value,k1,sy\n");
  792.       pr("select 1\n");
  793.       pr("go top\n");
  794.       pr("do while .NOT. eof()\n");
  795.       pr("if goon\n");
  796.       pr("if &condition\n");
  797.       for(kk=0;kk<j;kk++)
  798.        {
  799.      mybase=fbase;
  800.      while(mybase->no!=(s[kk]-1))
  801.        mybase=mybase->next;
  802.      fprintf(fp,"sname='S'+'%s'\n",mybase->DB);
  803.      pr("select 10\n");
  804.      pr("use &sname exclusive\n");
  805.      pr("go top\n");
  806.      pr("locate for FIELD_NAME=fname\n");
  807.      pr("if .NOT. eof()\n");
  808.      fprintf(fp,"select %d\n",kk+1);
  809.      pr("do case\n");
  810.      pr("case sy='╠µ╗╗'\n");
  811. /***/    pr("do rlock24\n");
  812.      pr("replace &fname with k1  \n");
  813. /****/   pr("unlock\n");
  814.      pr("case sy='╝╙'\n");
  815. /****/   pr("do rlock24\n");
  816.      pr("replace  &fname with &fname+value \n");
  817. /***/    pr("unlock\n");
  818.      pr("case sy='╝⌡'\n");
  819. /**/     pr("do rlock24\n");
  820.      pr("replace &fname with &fname-value \n");
  821. /***/    pr("unlock\n");
  822.      pr("endcase\n");
  823.      pr("endif\n");
  824.        }
  825.       pr("endif\n");
  826.       pr("endif\n");
  827.       pr("select 1\n");
  828.       pr("skip\n");
  829.       pr("enddo\n");
  830.       pr("case ft='N'\n");
  831.       pr("expr=''\n");
  832.       pr("value=0\n");
  833.       fprintf(fp,"do %s with expr,value,fname\n",nname);
  834.       pr("select 1\n");
  835.       pr("go top\n");
  836.       pr("do while .NOT. eof()\n");
  837.       pr("if goon\n");
  838.       pr("if &condition\n");
  839.       for(kk=0;kk<j;kk++)
  840.        {
  841.      mybase=fbase;
  842.      while(mybase->no!=(s[kk]-1))
  843.        mybase=mybase->next;
  844.      fprintf(fp,"sname='S'+'%s'\n",mybase->DB);
  845.      pr("select 10\n");
  846.      pr("use &sname exclusive\n");
  847.      pr("go top\n");
  848.      pr("locate for FIELD_NAME=fname\n");
  849.      pr("if .NOT. eof()\n");
  850.      fprintf(fp,"select %d\n",kk+1);
  851.      pr("if len(expr)=0\n");
  852. /***/    pr("do rlock24\n");
  853.      pr("replace &fname with value\n");
  854. /**/     pr("unlock\n");
  855.      pr("else\n");
  856. /***/    pr("do rlock24\n");
  857.      pr("replace  &fname with &expr \n");
  858. /***/    pr("unlock\n");
  859.      pr("endif\n");
  860.      pr("endif\n");
  861.        }
  862.        pr("endif\n");
  863.        pr("endif\n");
  864.        pr("select 1\n");
  865.        pr("skip\n");
  866.        pr("enddo\n");
  867.        pr("endcase\n");
  868.        fclose(fp);
  869. }
  870.  
  871.  
  872.  
  873.  
  874. cr_sub71(dname,i)
  875. int i;
  876. char dname[30][20];
  877. {FILE *fp;
  878.  int k,row,col;
  879.  fp=fopen("pmod.prg","w");
  880.  pr("set talk off\ndo while .t.\nset color to /w\nclear\nset color to w+/B\n");
  881.  pr("@0,0 say '***│╔┼·╩²╛▌╨▐╕─***'\n");
  882.  pr("@2,25 say '─·┐╔╢╘╧┬┴╨┐Γ╜°╨╨▓┘╫≈'\n");
  883.  pr("@3,25 say '~~~~~~~~~~~~~~~~~~~~'\nset color to W/B\n");
  884.  fprintf(fp,"set color to w+/n\n@6,15 clea to %d,65\n",6+i/2+i%2+1);
  885.  fprintf(fp,"set color to w+/b\n@5,13 clea to %d,63\n",5+i/2+i%2+1);
  886.  row=6;col=15;
  887.  for(k=0;k<i;k++)
  888.  { fprintf(fp,"@%d,%d say '%d. %s'\n",row,col,k+1,dname[k]);
  889.    if(col==45) {col=15;row++;}
  890.    else col+=30;
  891.  }
  892.  for(k=1;k<=6;k++)
  893.  fprintf(fp,"select %d\nuse\n",k);
  894.  pr("choice=space(2)\nset color to w+/b\n");
  895.  pr("@22,10 say '╟δ╩Σ╚δ─·╡─╤í╘±,0▒φ╩╛═╦│÷  :      ' get choice\n read\n");
  896.  pr("set color to W+/N\n@22,0 clear\n");
  897.  pr("if trim(choice)='0'\n");
  898.  pr("return\nendif\n");
  899.  pr("nn='psub'+trim(choice)+'.prg'\n");
  900.  pr("if FILE(nn)\n");
  901.  pr("do psub&choice\n");
  902.  pr("endif\n");
  903.  pr("enddo\n");
  904.  fclose(fp);
  905.  }
  906.  
  907.  
  908.  
  909. /*---------------- This is a line editer -----------------------*/
  910. /*        row,col     posite the starting cursor         */
  911. /*        color       denote the color of the        */
  912. /*                  blackbord and the  character    */
  913. /*        buff        line-editer's interal denoting    */
  914. /*--------------------------------------------------------------*/
  915. line_edit(int row, int col, int color, char *buff, int len)
  916. {
  917.     int in_number=0, ins=0, i, j, flag=0    ;
  918.     char *str    ;
  919.     union {
  920.         int i;
  921.         char ch[2];
  922.           }key;
  923.  
  924.     len -= 2    ;
  925.     color_puts(buff, color, row, col )    ;
  926.     while(1)
  927.       {
  928.         cursor( row, col+in_number )    ;
  929.         key.i = bioskey(0)    ;
  930.         switch(key.i)
  931.           {
  932.             case 15104:    /*    F1    */
  933.                 break    ;
  934.  
  935.             case 19200:    /*    left arrow    */
  936.                 if(in_number)
  937.                     in_number=confirm(buff,in_number-1);
  938.                 cursor( row, col+in_number )    ;
  939.                 break    ;
  940.  
  941.             case 19712:    /*    right arrow    */
  942.                 if( buff[in_number]=='\0' )
  943.                     buff[in_number]=' '    ;
  944.                 if((unsigned)buff[in_number]>128 && (unsigned)buff[in_number]>128)
  945.                     in_number+=2    ;
  946.                 else
  947.                     in_number++    ;
  948.                 if(in_number>len)
  949.                     in_number=0    ;
  950.                 break    ;
  951.  
  952.             case 29440:    /*    Ctrl_left    */
  953.                 in_number=confirm(buff,in_number-8)    ;
  954.                 if( in_number <0 )
  955.                     in_number=0    ;
  956.                 break    ;
  957.  
  958.             case 29696:    /*    ctrl_right    */
  959.                 in_number = confirm(buff, in_number+8)    ;
  960.                 if( in_number>(i=strlen(buff)))
  961.                     in_number = i    ;
  962.                 break    ;
  963.  
  964.             case 18176:    /*    Home    */
  965.                 in_number=0    ;
  966.                 cursor( row, col )    ;
  967.                 break    ;
  968.  
  969.             case 20224:    /*    End    */
  970.                 in_number=strlen(buff)    ;
  971.                 cursor( row, col+in_number )    ;
  972.                 break    ;
  973.  
  974.             case 21248:     /*    Del    */
  975.                 if( in_number==strlen(buff) )
  976. /*                    printf("\007");*/    ;
  977.                 else
  978.                   {
  979.                     if( (unsigned)buff[in_number]>128 && (unsigned)buff[in_number]>128 )
  980.                       {
  981.                         for( i=in_number+2,j=strlen(buff); i<=j; i++ )
  982.                             buff[i-2]=buff[i]    ;
  983.                         color_puts( "  ", color, row, col+j-2 )    ;
  984.                       }
  985.                     else
  986.                       {
  987.                         for( i=in_number+1,j=strlen(buff); i<=j; i++)
  988.                             buff[i-1] = buff[i]    ;
  989.                         color_puts( " ", color, row, col+j-1 )    ;
  990.                       }
  991.                     str = &buff[in_number]    ;
  992.                     color_puts(str, color, row, col+in_number)    ;
  993.                   }
  994.                 break    ;
  995.  
  996.             case 3592:    /*    Backspace    */
  997.                 if(in_number)
  998.                   {
  999.                     if( (unsigned)buff[in_number-1]>128 && (unsigned)buff[in_number-2]>128 && in_number>1 )
  1000.                       {
  1001.                         for( i=in_number,j=strlen(buff); i<=j; i++)
  1002.                             buff[i-2] = buff[i]    ;
  1003.                         in_number-=2    ;
  1004.                         color_puts( "  ", color, row, col+j-2 )    ;
  1005.                       }
  1006.                     else
  1007.                       {
  1008.                         for( i=in_number,j=strlen(buff); i<=j; i++)
  1009.                             buff[i-1] = buff[i]    ;
  1010.                         in_number--    ;
  1011.                         color_puts( " ", color, row, col+j-1 )    ;
  1012.                       }
  1013.                     str = &buff[in_number]    ;
  1014.                     color_puts( str, color, row, col+in_number )    ;
  1015.                   }
  1016.                 else
  1017.                     /*  printf("\007"); */    ;
  1018.                 break    ;
  1019.  
  1020.             case 20992:    /*    Ins    */
  1021.                 ins=(ins?0:1)    ;
  1022.                 break    ;
  1023.  
  1024.             case 7181:    /*    Enter    */
  1025.                 for( i=strlen(buff)-1; buff[i]==' '&&i>=0; i--);
  1026.                 buff[i+1]='\0'    ;
  1027.                 return    ;
  1028.  
  1029.             default:
  1030.                 if( ins )
  1031.                   {
  1032.  
  1033.                     if( strlen(buff)>=len || key.ch[0]==0)
  1034.                     /*    printf("\007")    ;    */;
  1035.                     else
  1036.                       {
  1037.                         for( i=strlen(buff); i>in_number; i--)
  1038.                             buff[i] = buff[i-1]    ;
  1039.                         buff[in_number] = key.ch[0]    ;
  1040.                         if( (unsigned)key.ch[0]>128 )
  1041.                            if( flag==0 )    /*    the forehalf of chinese    */
  1042.                              {
  1043.                             flag++    ;
  1044.                             in_number++    ;
  1045.                              }
  1046.                            else
  1047.                              {
  1048.                             flag--    ;
  1049.                             str = &buff[in_number-1]    ;
  1050.                             color_puts( str, color, row, col-1+in_number++ )    ;
  1051.                              }
  1052.                         else
  1053.                           {
  1054.                             str = &buff[in_number]    ;
  1055.                             color_puts( str, color,row, col+in_number++ )    ;
  1056.                           }
  1057.                       }
  1058.                   }
  1059.                 else
  1060.                   {
  1061.                     if( in_number>=len || key.ch[0]==0 )
  1062.                     /*    printf("\007")    ;    */;
  1063.                     else
  1064.                       {
  1065.                         if(buff[in_number]=='\0')    buff[in_number+1]='\0'    ;
  1066.                         buff[in_number] = key.ch[0]    ;
  1067.                         str = &buff[in_number]    ;
  1068.                         color_puts( str, color, row, col+in_number++ )    ;
  1069.                       }
  1070.                   }
  1071.  
  1072.          }
  1073.     }
  1074. }
  1075.  
  1076.  
  1077. /*-----  if the charater is chinese , and then the cursor must be in the first position----*/
  1078. confirm(char *s, int col)
  1079. {
  1080.     int i    ;
  1081.     if( (unsigned)s[col]<128)
  1082.         return(col)    ;
  1083.     for(i=col; (unsigned)s[i]>128&&i>0; i--)    ;
  1084.     if((col-i)%2!=0)
  1085.         return(col)    ;
  1086.     else
  1087.         return(col-1)    ;
  1088. }
  1089.  
  1090.  
  1091. readchar()
  1092. {
  1093.   union REGS regs;
  1094.   int t,m;
  1095.   regs.x.ax=0;
  1096.   int86(0x16,®s,®s);
  1097.   t=regs.x.ax & 0x00ff;
  1098.   m=(regs.x.ax-t)/256;
  1099.   if (t!=0) return(t);
  1100.   return(m+200);
  1101. }
  1102.