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

  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <sys\stat.h>
  6. #include <fcntl.h>
  7.  
  8. #define black  0x0
  9. #define blue   0x10
  10. #define green  0x20
  11. #define cyan   0x30
  12. #define red    0x40
  13. #define white  0x70
  14.  
  15. #define PgUp 18688
  16. #define PgDn 20736
  17. #define UP   18432
  18. #define DOWN 20480
  19. #define LEFT 19200
  20. #define RIGHT 19712
  21. #define Enter 13
  22. #define Home  18176
  23. #define End   20224
  24. #define ESC   27
  25. #define Ins 20992
  26. #define Del 21248
  27.  
  28. #define  F1    15104
  29. #define  F2    15360
  30. #define  F3    15616
  31. #define  F4    15872
  32. #define  F5    16128
  33. #define  F6    16384
  34. #define  F7    16640
  35. #define  F8    16896
  36. #define  F9    17152
  37. #define  F10   17408
  38.  
  39. typedef struct PPP {              /* this is a database's structure */
  40.     char field[11];
  41.     char type;
  42.     int  length;
  43.     int  dec;
  44.        struct PPP *last;          /* poniter of the last block   */
  45.        struct PPP *next;          /* pointer of the next block   */
  46.     char sele;
  47.     char obj;   /*object flag*/
  48.     int cla;
  49.      }FIELD;
  50.  FIELD *p,*p1,*p2,*p3,*p4;
  51.  
  52. typedef struct MM {            /*store base name*/
  53.     char mean[30];
  54.     char dbname[11];     /* the name of the database */
  55.     char mainkey[4][11];      /* mainkey of the database  */    struct PPP  *sstr;   /* point to the database's structure */
  56.     struct PPP  *estr;/* pointer for end of block of base*/
  57.     char flag;           /*if finish base 0--not finish 1--finish*/
  58.     char serve;
  59.     char path[30];
  60.     char sele;
  61.     int  sort;
  62.     struct MM *last;
  63.     struct MM *next;
  64.       }BASE ;
  65.    BASE  *root,*root1,*root2,*root4,*root3;/* end*/
  66.  
  67.   FILE *fp1,*fp2;
  68.   BASE *disp_opbase();
  69.   FIELD *disp_field(),*NEXT(),*LAST(),*disp_f(),*disp_ch();
  70.   char workname[30],condition[200];
  71.   char *con[]={".and.",".or.",".not.",".and.not.",".or.not.","╜ß╩°"};
  72.   int num,linknum,fselecount=0,selecount=0,basecount=0,ob,f;
  73.   char  linkfield[4][11],PATH[30];
  74.   char file[13],lan;
  75.  
  76.  
  77.  main(argc,argv)
  78.  int argc;
  79.  char *argv[];
  80. {
  81.  int ten,i,k,reuse,j;
  82.  char tail[4],name[13],gsxih[30];
  83.    k=strlen(argv[1]);
  84.  if (strcmp(argv[2],"wy")!=0) return(0);
  85.   if((argc!=3)||(argv[1][k-1]!='\\'))
  86.     exit(0);
  87.    else
  88.      {argv[1][k-1]='\0';
  89.       strcpy(PATH,argv[1]);
  90.      }
  91.      reuse=0;
  92.   clear_win(0,0,24,79,6,0,cyan);
  93.   clear_win(6,18,19,70,6,0,black);
  94.   gframe(6,12,19,68,0,0|30);
  95.   clear_win(6,13,17,66,6,0,blue);
  96.   print(6,32,0|30,"╠¿╒╩─ú┐Θ╠ß╩╛▓╦╡Ñ");
  97.   print(8,25,0|30,"╬ó╗·╣▄└φ╚φ╝■╫╘╢»╔·│╔╞≈╓«╠¿╒╩╫¬╗╗─ú┐Θ");
  98.   print(9,32,0|30,"⌐ñ⌐ñú├ú─ú┬ú┴ú╟ú┤ú«ú░░µ");
  99.   print(11,25,0|30,"╠¿╒╩▓┘╫≈┐Γ í· ╠¿╒╩╜ß╣√┐Γ");
  100.   print(13,22,0|30,"╣ª─▄╦╡├≈ú║");
  101.   print(14,20,0|30,"░┤╠¿╒╩▓┘╫≈┐Γ╡──│╕÷╫╓╖√╨═╫╓╢╬╡─╓╡ú¼░╤─│╕÷╩²╫╓╨═");
  102.   print(15,20,0|30,"╫╓╢╬╡─╓╡╫¬╗╗╬¬╧α╙ª╡─╠¿╒╩╜ß╣√┐Γ╓╨╡─╩²╛▌íú");
  103.   print(17,40,0|30,"▒▒╛⌐║╜┐╒║╜╠∞┤≤╤º╝╞╦π╗·╧╡");
  104.   print(24,1,2|73,"%*s",80," ");
  105.   print(24,3,2|73,"░┤╚╬╥╗╝ⁿ╝╠╨°ú«ú«ú«");
  106.   getcc();
  107.   read_base();
  108.   root->last=NULL;
  109.   if((fp1=fopen("tetris.txt","w"))==NULL)
  110.      exit(0);
  111.   else
  112.      fclose(fp1);
  113. /*  read_stru();*/
  114.  
  115.   condition[0]='\0';
  116. /*  checkey();*/
  117. ss:make_start();
  118.   fselecount=selecount=f=ob=linknum=0;
  119.   select_datbase(2);  selecount=0;
  120.   root2=root;
  121.   while(root2!=NULL)
  122.       { root2->sele='N';
  123.     root2=root2->next;
  124.       }
  125.   select_datbase(1);
  126.   read_stru();
  127.   define_link();
  128.   root2=root;
  129.    while(root2!=NULL)
  130.     { if(root2->sele=='Y')
  131.            { p2=root2->sstr;
  132.          while(p2!=NULL)
  133.             {  p2->sele='Y';
  134.               p2=p2->next;
  135.             }
  136.         }
  137.        root2=root2->next;
  138.        }
  139.    r_mean();
  140.   clear_obj(0);
  141.   strcpy(file,"tt");
  142.   if(reuse==0)
  143.  {
  144.   i=0;
  145.    strcpy(name,file);
  146.    tail[0]=tail[1]=tail[2]=tail[3]='\0';
  147.    itoa(i,tail,10);
  148.    strcat(name,tail);
  149.  
  150.    strcat(name,".prg");
  151.     if((fp1=fopen(name,"r"))==NULL)
  152.        { fclose(fp1);
  153.          num=0;
  154.         }
  155.      else
  156.           {  clear_win(0,0,24,79,6,0,black);
  157.          gframe(5,2,11,76,0,0|30);
  158.          print(7,20,6|1,"─·╘°╛¡╔·│╔╥╗╨⌐┤╦─ú┐Θ╡─╬─╝■╕▓╕╟┬≡ú┐(Y/N) ");
  159.          ten=getcc();
  160.          if((ten=='Y')||(ten=='y'))
  161.              {  num=0;
  162.             system("del tt?.prg >zl");
  163.              }
  164.          else
  165.              { i=1;
  166.                        for(;;)
  167.               {  itoa(i,tail,10);
  168.                  strcpy(name,file);
  169.                  itoa(i,tail,10);
  170.                  strcat(name,tail);
  171.                  strcat(name,".prg");
  172.                  num=i;
  173.                  if((fp1=fopen(name,"r"))==NULL)
  174.                  { fclose(fp1);                   break;
  175.                  }
  176.                  i++;
  177.                 }
  178.                }
  179.  
  180.           }
  181.  }
  182. /*----------------------------------yv field---------------------------*/
  183.   make_t();
  184.   root2=root;
  185.     while(root2!=NULL)
  186.         if(root2->sele=='Y') break;
  187.         else root2=root2->next;
  188.     if(root2->sele=='Y') {
  189.          p=root2->sstr;
  190.          p4=p2=p;    }
  191.     p1=disp_ch(p2);
  192.         print(4,30,6|1,"╟δ╤í╘±╙≥╫¬╗╗╫╓╢╬");
  193.     sele_ch(p2,p1,p4);
  194. /*------------------------------ttt_obfiled------------------------------*/
  195.     make_t();
  196.     root2=root;
  197.     while(root2!=NULL)
  198.         if(root2->sele=='Y') break;
  199.         else root2=root2->next;
  200.     if(root2->sele=='Y') {
  201.          p=root2->sstr;
  202.          p4=p2=p;    }
  203.      /* 0-all1--n*/
  204.     p1=disp_f(p2,1);
  205.         print(4,30,6|1,"╟δ╤í╘±╫¬╗╗╫╓╢╬");
  206.     sele_f(p2,p1,p4,1,0,1);
  207. /*----------------------------statis condition---------------------------*/
  208.     for(;;) {
  209.      make_t();
  210.      print(4,5,6|1,"╟δ╩Σ╚δ╠⌡╝■▒φ┤∩╩╜");
  211.      root2=root;
  212.      while(root2!=NULL)
  213.        if(root2->sele=='Y')
  214.            break;
  215.        else
  216.            root2=root2->next;
  217.      if(root2->sele=='Y') {
  218.         p=root2->sstr;
  219.         p4=p2=p;     }
  220.      clear_win(5,4,9,76,6,0,black);
  221.      p1=disp_f(p2,0);
  222.      if((sele_f(p2,p1,p4,2,0,0))==1)
  223.          break; }
  224. /*----------------------------------------------------------------------*/
  225.   strcpy(name,file);
  226.   itoa(num,tail,10);
  227.   strcat(name,tail);
  228.   w_menu(name);
  229.   strcat(name,".prg");  if((fp1=fopen(name,"w"))==NULL)
  230.      exit(0);
  231. /*-----gene----*/
  232.   root2=root;
  233.   while(root2!=NULL)
  234.     if(root2->sele=='Y')  break;
  235.     else root2=root2->next;    /*op*/
  236.   root4=root;
  237.   while(root4!=NULL)
  238.      if(root4->sort==1) break;
  239.      else root4=root4->next;
  240.      clear_win(5,8,9,70,6,0,black);
  241.      fprintf(fp1,"set talk off\nset echo off\n set safe off\nclose all\n");
  242.      print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  243.     lan=getcc();
  244.     if((lan=='Y')||(lan=='y'))
  245.     fprintf(fp1,"set excl off\n");
  246.     else
  247.        fprintf(fp1,"set excl on\n");
  248.   fprintf(fp1,"sele 2\nuse %s\\%s\n",root4->path,root4->dbname);
  249.   if(((lan=='Y')||(lan=='y'))&&(root4->serve=='Y'))
  250.   {
  251.     fprintf(fp1,"do while .T.\ntime=0\ndo while .not.flock().and.time<250\n");
  252.     fprintf(fp1,"time=time+1\nenddo\nif time<250\n");
  253.    }
  254.   fprintf(fp1,"copy to tetr.dbf\n");
  255.   if(((lan=='y')||(lan=='Y'))&&(root4->serve=='Y'))
  256.      {     fprintf(fp1,"unlock\nexit\nelse\nyes=' '\nclear\n@12,10 say \"╬─╝■╥╤▒╗╞Σ╦√╙├╗º,╝╠╨°╝╙╦°┬≡ú┐(Y/N)\" get  yes\n");
  257.      fprintf(fp1,"read\nclear\nif yes='N'.or.yes='n'\n@15,10 say \"╟δ╣²╥╗╗ß╢∙╘┘╙├\" \nwait\n");
  258.      fprintf(fp1,"canc\nendif\nendif\nenddo\n");
  259.      }
  260.   fprintf(fp1,"sele 2\n use tetr excl\n");
  261.   fprintf(fp1,"sele 1\nuse %s\\%s\n",root2->path,root2->dbname);
  262.   fprintf(fp1,"sele 2\n");
  263. /*  if(((lanP=='Y')||(lan=='y'))
  264.   {
  265.     fprintf(fp1,"do while .T.\ntime=0\ndo while .not.flock().and.time<250\n");
  266.     fprintf(fp1,"time=time+1\nenddo\nif time<250\n");
  267.   }*/
  268.   fprintf(fp1,"index on ");
  269.   for(i=0;i<linknum;i++)
  270.     if (i==0)
  271.       fprintf(fp1," %s",linkfield[i]);
  272.     else
  273.       fprintf(fp1,"+%s",linkfield[i]);
  274.   fprintf(fp1," to tt\n");
  275. /*  if((lan=='y')||(lan=='Y'))
  276.   {
  277.   fprintf(fp1,"unlock\nexit\nelse\nyes=' '\nclear\n@12,10 say \"╬─╝■╥╤▒╗╞Σ╦√╙├╗º,╝╠╨°╝╙╦°┬≡ú┐(Y/N)\" get  yes\n");
  278.   fprintf(fp1,"read\nclear\nif yes='N'.or.yes='n'\n@15,10 say \"╟δ╣²╥╗╗ß╢∙╘┘╙├\" \nwait\n");
  279.   fprintf(fp1,"canc\nendif\nendif\nenddo\n");
  280.   }*/
  281.   fprintf(fp1,"sele 1 \nset relation to ");
  282.   for(i=0;i<linknum;i++)
  283.     if (i==0)
  284.       fprintf(fp1," %s",linkfield[i]);
  285.     else
  286.       fprintf(fp1,"+%s",linkfield[i]);
  287.   fprintf(fp1," into  B\n");
  288.   fprintf(fp1,"go top\ndo while .not.eof()\nsele 2\nif eof()\nappe blan \n");
  289.     for(i=0;i<linknum;i++)
  290.        fprintf(fp1,"repl %s with a->%s\n",linkfield[i],linkfield[i]);
  291.      fprintf(fp1,"endif\nsele 1\nskip\nenddo\nsele 2\n");
  292.      fprintf(fp1,"index on ");
  293.     for(i=0;i<linknum;i++)
  294.     if (i==0)
  295.       fprintf(fp1," %s",linkfield[i]);
  296.     else
  297.       fprintf(fp1,"+%s",linkfield[i]);
  298.       fprintf(fp1," to tt1\nsele 1\n");
  299.       fprintf(fp1,"set relation to ");
  300.   for(i=0;i<linknum;i++)
  301.     if (i==0)
  302.       fprintf(fp1," %s",linkfield[i]);
  303.     else
  304.       fprintf(fp1,"+%s",linkfield[i]);
  305.      fprintf(fp1," into B\n");
  306.      fprintf(fp1,"go top\ndo while .not.eof()\nif ");
  307.      p4=root2->sstr;
  308.      while(p4!=NULL)
  309.        if(p4->obj=='Y') break;
  310.        else p4=p4->next;
  311.      p2=root2->sstr;
  312.      while(p2!=NULL)
  313.     if(p2->cla!=0) break;
  314.     else p2=p2->next;
  315.      fprintf(fp1,"%s \nzl=%s\nzl1=%s\n ",condition,p2->field,p4->field);
  316.    fprintf(fp1,"sele 2\nrepl &zl with &zl+zl1\nendif\nsele 1\nskip\nenddo\nclose all\n");
  317.     fprintf(fp1," !c:brow c:tetr.dbf\n!del c:tt.?dx\n");
  318.    fprintf(fp1,"yes='Y'\nclear\n@10,20 say \"─·╥¬▒ú┴⌠┤╦┤╬╫¬╗╗┬≡ú┐(Y/N): \" get yes\nread\n" );
  319.    fprintf(fp1,"if yes='Y'.or.yes='y'\n");
  320.    fprintf(fp1,"!copy c:tetr.dbf %s\\%s.dbf >zl\nendif\n",root4->path,root4->dbname);
  321.      clear_win(5,8,9,70,6,0,black);
  322.      clear_win(13,4,20,75,6,0,black);
  323.      printf("\033[17;20H┤╦═│╝╞╜ß╣√╥¬╣▓╧φ┬≡ú┐(Y/N)");
  324.      k=getcc();
  325.       if((k=='Y')||(k=='y'))
  326.         { print(19,10,6|1,"╩Σ╚δ╣▓╧φ─┐┬╝╝░╬─╝■├√:  ");
  327.           scanf("%s",gsxih);
  328.           fprintf(fp1,"!copy c:tetr.dbf %s >zl",gsxih);
  329.         }
  330.       print(7,20,6|1,"╒²╘┌╔·│╔,╟δ╔╘║≤...");
  331.       reuse=1;
  332.       num++;
  333.       fprintf(fp1,"clear\n");
  334.       fprintf(fp1,"ser=' '\n@ 10,10 say \"┤╦╫¬╗╗╜ß╣√╥¬▒╕╖▌┬≡ú┐(Y/N)\"  get ser\nread\n");
  335.       fprintf(fp1,"if ser='Y'.or.ser='y'\n ser=space(30)\n@12,10 say \"╟δ╩Σ╚δ─┐┬╝╝░╬─╝■├√│╞:\"  get ser\nread\n");
  336.       fprintf(fp1,"!copy c:tetr.dbf  &ser > zl\nendif\n");
  337.       strcat(file,tail);
  338.       fprintf(fp1,"!copy c:tetr.dbf c:%sj.dbf >zl",file);
  339.       fclose(fp1);
  340.       clear_win(5,8,9,70,6,0,black);
  341.       clear_win(13,4,20,75,6,0,black);
  342.       print(7,20,6|1,"╝╠╨°╔·│╔┬≡ú┐(Y/N): ");
  343.       ten=getcc();
  344.       if((ten=='Y')||(ten=='y'))
  345.          goto ss;
  346.       else
  347.       { fp2=fopen("tcolor.txt","w");
  348.         fprintf(fp2,"#gr+#,#B#,#doub#\n");
  349.             fclose(fp2);
  350.           }
  351. /*-----finish----*/
  352.    system("copy c:\\cdbag4\\tetris.prg *.* >zl");
  353.    system("copy c:\\cdbag4\\tetris.dbf *.* >zl");
  354.    system("copy c:\\cdbag4\\tpage.prg *.* >zl");   system("copy c:\\cdbag4\\tinput.prg *.* >zl");
  355.    system("copy c:\\cdbag4\\tcursor.prg *.* >zl");
  356.    system("copy c:\\cdbag4\\toldcur.prg *.* >zl");
  357.    system("copy c:\\cdbag4\\tstart.prg *.* >zl");
  358.    system("copy c:\\cdbag4\\tcolor.dbf *.* >zl");
  359.    system("copy c:\\cdbag4\\dbstr.dbf *.* >zl");
  360.  
  361. }
  362.  
  363.   select_datbase(maxc)
  364.     int maxc;
  365.        {  clear_win(0,0,24,79,6,0,black);
  366.           print(1,5,0|30,"**%s**","╔·│╔╠¿╒╩╫¬╗╗│╠╨≥");
  367.           print(1,55,0|30,"**ESC->╓╨╢╧═╦│÷**");
  368.           bottom();
  369.           print(4,5,6|1,"╣▓╙╨<%d",0);
  370.           print(4,12,6|1,">╕÷╩²╛▌┐Γ▒╗╤í");
  371.           gframe(5,2,11,78,0,0|30);
  372.           print(11,60,0|30,"PgUp/PgDn");
  373.           gframe(14,2,22,78,1,0|30);
  374.           if(maxc==1)
  375.          print(4,30,6|1,"╟δ╤í╠¿╒╩╫¬╗╗┐Γ");
  376.           else
  377.            print(4,30,6|1,"╟δ╤í╠¿╒╩╜ß╣√┐Γ");
  378.  
  379.               print(14,8,6|1,"╨┼╧ó┤░┐┌");
  380. start:          root2=root;
  381.           root4=root2;
  382.           root1=disp_opbase(root2);
  383.           if((sele_opbase(root2,root1,root4,maxc))==-1) goto start;
  384.       }
  385.  
  386.   error(er)
  387. char er[30];
  388. {
  389.   int i,j;
  390.    i=strlen(er);
  391.    j=(80-i)/2;
  392.   printf("\007");
  393.   printf("\033[24;1H\033[1;36;41m%-*s%-*s%-*s",j," ",i,er,j," ");
  394.   printf("\033[0;37;40m");
  395.   }
  396. /*-----------------------------MAKE START OF DATABASE-----------------------*/
  397.  
  398. make_start() {
  399.  int i;
  400.   root2=root;
  401.   while(root2!=NULL) {
  402.     root2->sele='N';
  403.     root2->sort=0;
  404. /*    free(root2->sstr);*/
  405.     root2->sstr=NULL;
  406. /*    p2=root2->sstr;
  407.     while(p2!=NULL) {
  408.       p2->sele='N';
  409.       p2->cla=0;
  410.       p2->obj='N';      p2=p2->next;  }*/
  411.     root2=root2->next; }
  412.   } /*end fountion*/
  413.  
  414.  
  415. /*------------------------------SELECT DATABASE-----------------------------*/
  416.  
  417. sele_opbase(ptr,ptr1,ptr2,maxcount)
  418. struct MM *ptr,*ptr1,*ptr2;
  419. int maxcount;
  420. {
  421. int i,j,k,key2;
  422. struct MM *tem;
  423. BASE *rr;
  424. ptr2=NULL;
  425.       print(6,10,0|75,"%s",ptr->mean);
  426.       disp_bmess(ptr);
  427.     i=6;j=10;
  428.     for(;;)  {
  429.      key2=getcc();
  430. mv1:     print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->mean);
  431.      switch(key2)
  432.            { case LEFT:
  433.          if(j==10) printf("\007");
  434.          else {
  435.              j=10;
  436.              ptr=ptr->last; }
  437.           break;
  438.         case RIGHT:
  439.                      if((j==40)||(ptr->next==NULL)) printf("\007");
  440.           else { j=40;
  441.             ptr=ptr->next; }
  442.             break;
  443.         case UP:
  444.           if(i==6) printf("\007");
  445.           else {
  446.             i--;
  447.             ptr=ptr->last->last; }
  448.            break;
  449.         case DOWN:
  450.              if((i==10)||((ptr->next)->next==NULL)||(ptr->next==NULL)) printf("\007");
  451.              else {
  452.                i++;
  453.                ptr=ptr->next->next; }
  454.                break;
  455.         case PgUp:
  456.             k=0;
  457.              tem=ptr;
  458.              ptr=ptr2;
  459.              while(k<10) {
  460.               ptr=ptr->last;
  461.              if(ptr==NULL) break;
  462.              k++; }
  463.            if(ptr!=NULL) {              clear_win(5,3,9,76,6,0,black);
  464.               ptr1=disp_opbase(ptr);
  465.               i=6;j=10;
  466.               ptr2=ptr; }
  467.              else {
  468.             ptr=tem;
  469.             printf("\007"); }
  470.            break;
  471.          case PgDn:
  472.             if(ptr1==NULL) printf("\007");
  473.             else  {
  474.             clear_win(5,3,9,76,6,0,black);
  475.             ptr=ptr1;
  476.             ptr1=disp_opbase(ptr);
  477.             i=6;j=10;
  478.             ptr2=ptr;   }
  479.               break;
  480.         case Enter:
  481.         case F5:
  482.          if(maxcount==1)
  483.           {  if(ptr->sort==1)
  484.           { error("╠¿╒╩▓┘╫≈┐Γ║═╜ß╣√┐Γ▓╗─▄╧α═¼úí");
  485.             getcc();
  486.             bottom();
  487.             break;
  488.            }
  489.          if(ptr->sele=='Y')
  490.               { ptr->sele='N';
  491.             selecount=0;
  492.                }
  493.          else
  494.              if(selecount==1)
  495.              {error("╓╗─▄╤í╥╗╕÷┐Γ");
  496.               getcc();
  497.               bottom();
  498.             }
  499.              else
  500.             {  selecount=1;
  501.                ptr->sele='Y';
  502.             }
  503.          }
  504.       else
  505.          {
  506.            if(ptr->sele=='Y')
  507.              { ptr->sele='N';
  508.                ptr->sort=0;
  509.                selecount=0;
  510.              }
  511.          else
  512.         if(selecount==1)
  513.             { error("╓╗─▄╤í╥╗╕÷┐Γ");
  514.               getcc();
  515.               bottom();
  516.             }
  517.         else            {  selecount=1;
  518.                ptr->sele='Y';
  519.                ptr->sort=1;
  520.             }
  521.      }
  522.         break;
  523.         case F6:
  524.          ptr=root;
  525.          selecount=0;
  526.          while(ptr!=NULL)
  527.           {
  528.            ptr->sele='N';
  529.            ptr=ptr->next;
  530.            }
  531.           return(-1);
  532.         case F4:
  533.              if(selecount==1)
  534.             return(1);
  535.               else
  536.             {error("─·▒╪╨δ╤í┐Γúí");
  537.              printf("\007");
  538.              getcc();
  539.              bottom();
  540.             continue;
  541.                }
  542.         default:
  543.                  printf("\007");
  544.                  break;
  545.        }   /*endswitch*/
  546.         print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  547.          disp_bpart(ptr);
  548.          print(4,10,6|1,"%01d",selecount);
  549.         }/*end for*/
  550. }
  551.  
  552. /*----------------------------DISP DATABASE  OF A PAGE--------------------------*/
  553. struct MM *disp_opbase(ptr)
  554.  struct MM *ptr;
  555.  {
  556.  register int i,j;
  557.  i=0;j=10;
  558.    clear_win(5,4,9,76,6,0,black);
  559.      disp_bmess(ptr);
  560.    while((ptr!=NULL)&&(i<5))
  561.      {
  562.       print(i+6,j,(ptr->sele=='N'? 6|1:0|113),"%s",ptr->mean);
  563.       i=(j==10? i : i+1);
  564.       j=(j==10? 40: 10);
  565.       ptr=ptr->next;
  566.       }
  567.      return(ptr);
  568.   }
  569.  
  570. /*----------------------------DISP A PAGE FOR FIELD-----------------------*/
  571.  struct PPP *disp_field(ptr,flag)
  572.    struct PPP *ptr;
  573.    int flag; { register int i,j;
  574.    clear_win(5,4,9,76,6,0,black);
  575.    i=0;j=10;
  576.   disp_fmess(ptr);
  577.    while((ptr!=NULL)&&(i<5)) {
  578.      if(flag==0)
  579.     print(i+6,j,(ptr->sele=='N'? 6|1:0|113),"%s",ptr->field);
  580.      if(flag==1)
  581.     print(i+6,j,(ptr->cla<=0? 6|1:0|113),"%s",ptr->field);
  582.        i=(j==10? i: i+1);
  583.        j=(j==10? 40:10);
  584.        ptr=ptr->next; }
  585.        return(ptr);
  586.     }/*end fountion*/
  587. /*--------------------------DISP HEAD DATABASE MESSAGE----------------------*/
  588.  disp_bmess(ptr)
  589.   struct MM *ptr;
  590.   {
  591.    clear_win(15,4,20,76,6,0,black);
  592.    print(16,10,6|1,"╕├▓┘╫≈╣▓╙╨:%-d ╕÷┐╔╤í┐Γ",basecount);
  593.    print(16,40,6|1,"─·╥╤╤í╘±:%-d ╕÷┐Γ",selecount);
  594.    print(18,10,6|1,"╡▒╟░┐Γ╡─╬─╝■├√(.dbf):%-*s",8,ptr->dbname);
  595.    print(18,40,6|1,"╡▒╟░┐Γ╡─╓≈╣╪╝ⁿ╫╓╬¬:%-*s",11,ptr->mainkey[0]);
  596.    print(20,10,6|1,"╡▒╟░┐Γ╩╟╖±╬¬╣▓╧φ┐Γ: %s",(ptr->serve=='Y' ? "╩╟":"╖±"));
  597.    print(20,40,6|1,"╡▒╟░┐Γ╡─┬╖╛╢ %-*s",25,(ptr->serve=='Y' ? ptr->path:PATH));
  598.   }
  599. /* --------------------------DISP PART DATABASE MESSAGE----------------------*/
  600.   disp_bpart(ptr)
  601.   BASE *ptr; {
  602.    printf("\033[16;21H\033[0;37;40m%-d",basecount);
  603.    printf("\033[16;49H%-d",selecount);
  604.    printf("\033[18;24H(.dbf):%-*s",8,ptr->dbname);
  605.    printf("\033[18;59H%-*s",11,ptr->mainkey[0]);
  606.    printf("\033[20;30H%s",(ptr->serve=='Y' ? "╩╟":"╖±"));
  607.    printf("\033[20;53H%-*s",25,(ptr->serve=='Y' ? ptr->path:PATH));
  608.    }
  609. /*---------------------------DISP HEAD FIELD MESSAGE---------------------------*/
  610.   disp_fmess(ptr)
  611.   struct PPP *ptr;
  612.    {
  613.    clear_win(15,4,20,76,6,0,black);
  614.    print(15,20,6|1,"┐╔╥╘┤╙╓╨╤í╚í╫╓╢╬╡─┐Γ╣▓╙╨:%-d╕÷",selecount);
  615.    print(16,10,6|1,"╡▒╟░╫╓╢╬╡─└α╨═:%c",ptr->type);
  616.    print(16,30,6|1,"╡▒╟░╫╓╢╬╡─╙≥┐φ:%2d",ptr->length);
  617.    print(16,50,6|1,"╡▒╟░╫╓╢╬╡─╨í╩²╙≥┐φ:%2d", ptr->dec);
  618.    print(18,10,6|1,"╡▒╟░┐Γ╡─╬─╝■├√(.dbf):%-*s",8,root2->dbname);
  619.    print(18,40,6|1,"╡▒╟░┐Γ╡─▓╦╡Ñ├√:%-*s",11,root2->mean);
  620.    print(20,10,6|1,"╡▒╟░┐Γ╩╟╖±╬¬╣▓╧φ┐Γ: %s",(root2->serve=='Y' ? "╩╟":"╖±"));
  621.    print(20,40,6|1,"╡▒╟░┐Γ╡─┬╖╛╢ %-*s",25,(root2->serve=='Y' ? root2->path:PATH));
  622.   }
  623. /*----------------------DISP  FIELD CHANGE  PART MESSAGE--------------------*/
  624.   disp_fpart(ptr)
  625.    FIELD *ptr; {
  626.    printf("\033[15;45H\033[0;37;40m%-d",selecount);
  627.    printf("\033[16;25H%c",ptr->type);   printf("\033[16;45H%2d",ptr->length);
  628.    printf("\033[16;69H%2d",ptr->dec);
  629.    printf("\033[18;24H(.dbf):%-*s",8,root2->dbname);
  630.    printf("\033[18;55H%-*s",11,root2->mean);
  631.    printf("\033[20;30H%s",(root2->serve=='Y' ? "╩╟":"╖±"));
  632.    printf("\033[20;53H%-*s",25,(root2->serve=='Y' ? root2->path:PATH));
  633.     }
  634. /*----------------------------WRITE BOTTOM-------------------------------*/
  635. bottom()
  636.  {
  637.   print(24,1,6|1,"  í·í√íⁿí²╥╞╢»╣Γ▒Ω      F4:╠ß╜╗     F5:(Enter)╤í╓╨/▓╗╤í      PgUp/PgDn╟░║≤╖¡╥│  ");
  638. }
  639.  
  640.  read_base()
  641.  {
  642.   char *s,buff[80];
  643.  if((fp1=fopen("db.txt","r"))==NULL)  {
  644.     printf("\033[23;5H\033[1;31;40m don't open db.txt");
  645.     exit(0);   }
  646.   else   {
  647.     root=NULL;
  648.     while(fgets(buff,80,fp1)!=NULL)      {
  649.        get_root();
  650.        if(root==NULL) {
  651.      root=root1;
  652.      root3=root1; }
  653.        else     {
  654.       root1->last=root2;
  655.       root1->next=root2->next;
  656.       if(root2->next!=NULL)
  657.           (root2->next)->last=root1;
  658.       root2->next=root1;      }
  659.      root2=root1;
  660.      root3=root1;
  661.      sscanf(buff,"#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%c#,#%c#,#%[^#]#\n",\
  662.      root2->mean,root2->mainkey[0],root2->mainkey[1],root2->mainkey[2],root2->mainkey[3],\
  663.      root2->dbname,&root2->flag,&root2->serve,root2->path);
  664.      if(root2->serve=='N')
  665.           strcpy(root2->path,PATH);
  666.      basecount++;       }                           /* get a dbname */
  667.        fclose(fp1);
  668.     } /*elseend*/
  669. }/*end read_base*/
  670.  
  671. /*-------------------------READ A DATABASE OF STRUTURE---------------------------*/
  672.  read_stru()
  673.  {
  674.   int i;
  675.   char temp[31],buff[60];
  676.    root2=root;
  677.    for(i=0;i<11;i++)
  678.     temp[i]='\0';
  679.    while(root2!=NULL)
  680.     {
  681.       if (root2->sele!='Y' && root2->sort!=1) {root2=root2->next; continue;}
  682.       strcpy(temp,PATH); strcat(temp,"\\");
  683.       strcat(temp,root2->dbname);      strcat(temp,".txt");
  684.       if((fp2=fopen(temp,"r"))==NULL)
  685.        {
  686.      printf("\033[23;5H\033[1;31;40mdon't found file");
  687.      exit(1);
  688.        }
  689.       else
  690.     while(fgets(buff,60,fp2)!=NULL)
  691.      {
  692.        getmem();
  693.        if(root2->sstr==NULL)
  694.          root2->sstr=p1;
  695.        else
  696.         {
  697.          p1->last=p2;
  698.          p1->next=p2->next;
  699.          if(p2->next!=NULL)
  700.            (p2->next)->last=p1;
  701.          p2->next=p1;
  702.         }
  703.        p2=p1;
  704.        root2->estr=p1;
  705.        sscanf(buff,"#%[^#]#,#%c#,%d,%d\n",p2->field,&p2->type,&p2->length,&p2->dec);
  706.      }
  707.      fclose(fp2);
  708.      root2=root2->next;                     /* get a base's structure */
  709.       } /*else pointer*/
  710.  
  711.   }     /*end read_stru*/
  712. /*-----------------------------GET MEMORY FOR FIELD--------------------------*/
  713.   getmem()
  714.     {
  715.       int i;
  716.       p1=(struct PPP *) malloc(sizeof(struct PPP));
  717.       p1->next=NULL;
  718.       p1->last=NULL;
  719.       for(i=0; i<11; ++i)
  720.      p1->field[i]='\0';
  721.        p1->type=' ';
  722.        p1->sele='N';
  723.        p1->obj='N';
  724.        p1->cla=0;
  725.        p1->length=0;
  726.        p1->dec=0;
  727.     }
  728. /*------------------------GET MEMORY FOR DATABASE----------------------------*/
  729.   get_root(){
  730.   int i,j;
  731.   root1=(struct MM *) malloc(sizeof(struct MM));
  732.   root1->last=root1->next=NULL;
  733.   for (i=0; i<30; ++i)
  734.     root1->mean[i]='\0';
  735.   for(i=0;i<11;i++)
  736.     root1->dbname[i]='\0';
  737.   for(i=0;i<30;i++)    root1->path[i]='\0';
  738.   for(i=0;i<4;i++ )
  739.     for(j=0;j<11;j++)
  740.       root1->mainkey[i][j]='\0';
  741.   root1->sstr=NULL;
  742.   root1->flag=0;
  743.   root1->serve=0;
  744.   root1->sele='N';
  745.   root1->sort=0;
  746.   root1->sstr=NULL;
  747.   root1->estr=NULL;
  748.  
  749.            }
  750.  
  751. /*--------------------------CLEAR SCREEN------------------------------*/
  752. clear_win(startx,starty,endx,endy,action,line,attribe)
  753. int startx,starty;
  754. int endx,endy;
  755. int action,line,attribe;
  756. {
  757. union REGS r;
  758.  
  759. r.h.ah=action;
  760. r.h.al=line;
  761. r.h.bh=attribe;
  762. r.h.ch=startx;
  763. r.h.cl=starty;
  764. r.h.dh=endx;
  765. r.h.dl=endy;
  766. int86(0x10,&r,&r);
  767. return;
  768.  
  769. }
  770. /*-------------------------------READ A CHARACTOR---------------------------*/
  771.  
  772.    getcc(){
  773.    union REGS r;
  774.    r.h.ah=0;
  775.    int86(0x16,&r,&r);
  776.    if (r.h.al==27) exit(0);
  777.    if (r.h.al) return(r.h.al);
  778.    return(r.x.ax);
  779.   }
  780.  
  781. /*-------------------------OUTPUT-------------------------------------*/
  782.  
  783.    print(int prow,int pcol,int attr,char *format,...)
  784. {
  785.     va_list arg;
  786.     char print_str[254],*string;
  787.     va_start(arg,format);
  788.     vsprintf(print_str,format,arg);
  789.     string=print_str;
  790.   _SI =(unsigned int) string;
  791.   _DH =(unsigned char)prow-1;  _DL =(unsigned char)pcol-1;
  792.   _CX=1;
  793.    while(*((char *)_SI)){
  794.    _AH=(unsigned char)2;
  795.    _BH=(unsigned char)0;
  796.    geninterrupt(0x10);
  797.    ++_DL;
  798.   _AH=(unsigned char)9;
  799.   _AL=*((char *)_SI);
  800.   _SI++;
  801.   _BH=(unsigned char)0;
  802.   _BL=(unsigned char)attr;
  803.   geninterrupt(0x10);
  804.  }
  805. }
  806.  
  807.  
  808. /*-----------------------------DRAW A FRAME-------------------------------*/
  809. gframe(startx,starty,endx,endy,i,color)
  810.  int startx,starty;
  811.  int endx,endy;
  812.  int i;
  813.  int color;
  814. {
  815. static char dd[3][6][3]={
  816.       "⌐Ñ","⌐º","⌐│","⌐╖","⌐╗","⌐┐",
  817.       "⌐ñ","⌐ª","⌐░","⌐┤","⌐╕","⌐╝" ,
  818.       "  ","  ","  ","  ","  ","  "
  819.                      };
  820. int row,col;
  821. clear_win(startx,starty,endx,endy,6,0,black);
  822. print(startx,starty,color,"%s",dd[i][2]);
  823. for(col=starty+2; col<endy; col+=2)
  824.    print(startx,col,color,"%s",dd[i][0]);
  825. print(startx,endy,color,"%s",dd[i][3]);
  826.  
  827. for(row=startx+1; row<endx; ++row)
  828. {   print(row,starty,color,"%s",dd[i][1]);
  829.    print(row,endy,color,"%s",dd[i][1]);}
  830.  
  831. print(endx,starty,color,"%s",dd[i][4]);
  832.   for(col=starty+2; col<endy; ++col,++col)
  833.        print(endx,col,color,"%s",dd[i][0]);
  834. print(endx,endy,color,"%s",dd[i][5]);
  835. }
  836.  
  837. /*---------------------------------CHECK    --------------------------------------*/
  838.  checkey() {
  839.    int i;
  840.    root2=root;
  841.    i=0;
  842.    while(root2!=NULL) {
  843.      p2=root2->sstr;
  844.     while(p2!=NULL)
  845.      if((strcmp(root2->mainkey[0],p2->field))==0) {i=1;break;}     else p2=p2->next;
  846.      if(i==0) {print(23,10,6|1,"╙╨┤φ╡─┐Γ╬─╝■├√:%-s;╢╘╙ª╡─▓╦╡Ñ╠ß╩╛├√╬¬:%s",root2->dbname,root2->mean);
  847.            error("╣╪╝ⁿ╫╓▓╗╞Ñ┼Σ,╟δ╝∞▓Θúí"); exit(1);}
  848.      i=0;
  849.      root2=root2->next; }
  850. }
  851.  
  852. /*------------------------------READ A EMNUNAME-----------------------------*/
  853. r_mean()
  854.  {
  855.       clear_win(1,0,24,79,6,0,black);
  856.       gframe(5,10,11,68,0,0|30);
  857.       print(7,20,6|1,"╟δ╩Σ╚δ▒╛┤╬▓┘╫≈╡─▓╦╡Ñ╠ß╩╛├√: ");
  858.       scanf("%s",workname);
  859.  }
  860.  
  861. /*-------------------------------SELE CONDITION-----------------------------------*/
  862.  sele_con(ptr)
  863.  FIELD *ptr; {
  864.   int i,key;
  865.   clear_win(14,4,21,76,6,0,black);
  866.   get_con(ptr);
  867.   for(i=0;i<6;i++)
  868.     print(18,10*i+10,6|1,"%s",con[i]);
  869.   print(18,10,0|75,"%s",con[0]);
  870.   i=0;
  871.   while(1) {
  872.     key=getcc();
  873.     print(18,i*10+10,6|1,con[i]);
  874.     switch(key) {
  875.        case LEFT:
  876.         if(i==0) printf("\007");
  877.         else i--;
  878.          break;
  879.        case RIGHT:
  880.         if(i==5) printf("\007");
  881.         else i++;
  882.         break;
  883.        case Enter:
  884.          if(i!=5) {strcat(condition,con[i]); return(0);}
  885.          else return(1);
  886.       deflaut : printf("\007"); }
  887.       print(18,i*10+10,0|75,con[i]);
  888.       }
  889.   }
  890.  
  891. /*---------------------------------GET CONDITION--------------------------------*/
  892.  
  893.    get_con(ptr)
  894.    FIELD *ptr;
  895.    {
  896.    int i,key;
  897.    char *chr[]={" <"," ="," >","<=","<>",">="};
  898.    char c[50];
  899.    char log[3];   int n;
  900.    switch(ptr->type) {
  901.     case 'N':
  902.     case 'n':
  903.      print(15,20,6|1,"╟δ╦∙╤í╫╓╢╬╡─╛▀╠σ╓╡");
  904.      printf("\033[20;20H ╙├ 'í·' ║═ 'í√' ╤í╘╦╦π╖√; **Enter->╤í╓╨**");
  905.      print(17,10,6|1,"%s ",ptr->field);
  906.      printf("\033[17;%uH",strlen(ptr->field)+12);
  907.      i=0;
  908.      printf("%s",chr[i]);
  909.      for(;;) {
  910.      key=getcc();
  911.      switch(key) {
  912.     case RIGHT: if(i<5) i++;
  913.             else printf("\007");
  914.             break;
  915.     case LEFT: if(i>0) i--;
  916.             else printf("\007");
  917.             break;
  918.     case Enter:  strcat(condition,chr[i]);
  919.             goto kk;
  920.     default: printf("\007"); break;
  921.          }
  922.     printf("\033[17;%uH",strlen(ptr->field)+12);
  923.     printf("%s",chr[i]);
  924.     }
  925.  
  926.  kk:  printf("\033[17;%uH",strlen(ptr->field)+15);
  927.      scanf("%d",&n);
  928.      itoa(n,c,10);
  929.      strcat(condition,c);
  930.       break;
  931.     case 'C':
  932.     case 'c':
  933.       print(17,10,6|1,"%s= ",ptr->field);
  934.       scanf("%s",c);
  935.       strcat(condition,"='");
  936.       strcat(condition,c);
  937.       strcat(condition,"'");
  938.        break;
  939.     case 'l':
  940.     case 'L':
  941.      print(17,10,6|1,"%s= ",ptr->field);
  942.      clear_win(14,10,18,76,6,0,black);
  943.      for(;;) {
  944.        log[0]=getcc();
  945.        if((log[0]!='T')&&(log[0]!='F')&&(log[0]!='f')&&(log[0]!='t')) printf("\007");
  946.        else {strcat(condition,"=.");
  947.          log[1]='\0';
  948.          strcat(condition,log);
  949.          strcat(condition,".");
  950.          break;}
  951.          }
  952.       break;
  953.     case 'D':    case 'd':
  954.        print(15,20,6|1,"╟δ╩Σ╚δ╚╒╞┌╨═╫╓╢╬╡─╓╡->╕±╩╜╚τ╧┬:mm/dd/yy");
  955.        print(17,10,6|1,"%s ",ptr->field);
  956.        printf("\033[17;%uH",strlen(ptr->field)+12);
  957.        i=0;
  958.        printf("%s",chr[i]);
  959.       for(;;) {
  960.       key=getcc();
  961.      switch(key) {
  962.     case RIGHT: if(i<6) i++;
  963.             else printf("\007");
  964.             break;
  965.     case LEFT: if(i>0) i--;
  966.             else printf("\007");
  967.             break;
  968.     case Enter:  strcat(condition,chr[i]);
  969.             goto k1;
  970.     default: printf("\007"); break;
  971.          }
  972.     printf("\033[17;%uH",strlen(ptr->field)+12);
  973.     printf("%s",chr[i]);
  974.     }
  975.  
  976.  k1:  printf("\033[17;%uH",strlen(ptr->field)+15);
  977.       printf("  /  /  ");
  978.       for(;;) {
  979.       printf("\033[17;%uH",strlen(ptr->field)+15);
  980.       scanf("%02d",&key);
  981.       if((key>12)||(key<=0))printf("\007");
  982.       else break; }
  983.       itoa(key,c,10);
  984.       strcat(condition,c);
  985.       c[0]='/';
  986.       c[1]='\0';
  987.       strcat(condition,c);
  988.       for(;;) {
  989.       printf("\033[17;%uH",strlen(ptr->field)+18);
  990.       scanf("%02d",&key);
  991.       if((key>31)||(key<=0)) printf("\007");
  992.       else break; }
  993.       itoa(key,c,10);
  994.       strcat(condition,c);
  995.       c[0]='/';
  996.       c[1]='\0';
  997.       strcat(condition,c);
  998.       for(;;) {
  999.        printf("\033[17;%uH",strlen(ptr->field)+21);
  1000.        scanf("%02d",&key);
  1001.        if(key>0) break;
  1002.        else printf("\007"); }
  1003.        itoa(key,c,10);
  1004.        strcat(condition,c);
  1005.     default: printf("\007");break;
  1006.       }
  1007.    clear_win(14,8,21,76,6,0,black); }
  1008.  
  1009.  
  1010. /*-----------------------------ONE LINE EDITOR---------------------------------*/
  1011.  oneline(pos,fixlen,dislen,fldin)
  1012.  int pos,fixlen,dislen;
  1013. char *fldin;
  1014. {
  1015.  int in,count=0,i,insert=0,sum;
  1016.  int row=10,col=10;
  1017.  char *str;
  1018.  char *tstr;
  1019.  char tem;
  1020.  tstr=(char *)malloc(sizeof(char)*(dislen+1));
  1021.  ncpy(tstr,fldin,0,dislen);
  1022.  printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1023.  row=17;col=pos;
  1024.  for(;;){
  1025.  printf("\033[%u;%uH",row,col);
  1026.  in=getcc();
  1027.  switch(in){
  1028.     case RIGHT:
  1029.         if(fldin[col-pos+count]=='\0'){printf("\007");continue;}
  1030.         {
  1031.         if(col<(pos+dislen-1))
  1032.             {
  1033.                 col++;
  1034.                 continue;
  1035.              }
  1036.           else
  1037.             {
  1038.                 count++;
  1039.                 if(count<strlen(fldin))
  1040.                     ncpy(tstr,fldin,count,dislen);
  1041.                 else
  1042.                     ncpy(tstr,fldin,count,strlen(fldin));
  1043.             }
  1044.          }
  1045.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1046.         continue;
  1047.     case LEFT:
  1048.         if(col==pos && count==0){printf("\007");continue;}
  1049.         else
  1050.         {
  1051.         if(col>pos)
  1052.             {
  1053.                 col--;
  1054.                 continue;
  1055.              }
  1056.           else
  1057.             {
  1058.                 count--;
  1059.                 ncpy(tstr,fldin,count,dislen);
  1060.             }
  1061.         }
  1062.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1063.         continue;
  1064.     case Del:
  1065.         for(i=0;fldin[i]!='\0';i++);sum=i;
  1066.         if(sum==0||fldin[col-(pos)+count]=='\0')
  1067.         {
  1068.             printf("\007");
  1069.             continue;
  1070.         }
  1071.         for(i=col-(pos)+count;i<sum;i++)
  1072.              fldin[i]=fldin[i+1];
  1073.         ncpy(tstr,fldin,count,dislen);
  1074.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1075.         continue;
  1076.     case Ins:
  1077.         insert=(insert==0? 1:0);
  1078.         printf("\033[14;60H\033[0;37;40m%s",(insert==1? "▓σ╚δ":"╕▓╕╟"));
  1079.             continue;
  1080.  
  1081.     case Enter:
  1082.         return(1);
  1083.     default:
  1084.                     print(14,15,6|1,"╟δ═Ω╔╞╘╦╦π▒φ┤∩╩╜");
  1085.            if((unsigned char)in==0)continue;
  1086.            for(i=0;fldin[i]!='\0'&&fldin[0]!='\0';i++);sum=i;
  1087.            if(sum>=fixlen)/* && strncmp(fldin," ",sum)==0)*/
  1088.             {
  1089.                 printf("\033[24;1H\033[1;36;41mOut of Range\033[0;0;7m\007");
  1090.                 continue;
  1091.             }
  1092.                 
  1093.            if(insert==1)
  1094.             {
  1095.               for(i=sum;i>=col-pos+count;i--)
  1096.                 fldin[i]=fldin[i-1];
  1097.              fldin[sum+1]='\0';
  1098.              fldin[i+1]=(char)in;
  1099.              ncpy(tstr,fldin,count,dislen);
  1100.              }
  1101.            else
  1102.              {
  1103.             fldin[col-pos+count]=(char)in;
  1104.             ncpy(tstr,fldin,count,dislen);
  1105.             fldin[sum+1]='\0';
  1106.              }
  1107.             if(col++==(pos+dislen))
  1108.             {
  1109.                 col=pos+dislen;
  1110.                 count++;
  1111.                 if(count<strlen(fldin))
  1112.                      ncpy(tstr,fldin,count,dislen);
  1113.                 else
  1114.                      ncpy(tstr,fldin,count,strlen(fldin));
  1115.             }
  1116.             printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);            continue;
  1117.     }
  1118.     }
  1119.  }
  1120.  
  1121. /*--------------------------------Ncopy------------------------*/
  1122.  ncpy(tstr,fldin,start,no)
  1123. char *tstr;
  1124. char *fldin;
  1125. int start,no;
  1126. {
  1127.  int i=0;
  1128.  if(start!=0)
  1129.  for(i=0;i<start;i++)fldin++;
  1130.  for(i=start;(i<start+no && (*fldin)!='\0');i++)
  1131.      *tstr++=*fldin++;
  1132.  *tstr='\0';
  1133.  }
  1134.  
  1135.  
  1136. /*--------------------------------NEXT---------------------*/
  1137.   FIELD *NEXT(ptr,f)
  1138.   FIELD *ptr;
  1139.   int f;
  1140.   {
  1141.   FIELD *ptr1;
  1142.   ptr1=ptr;
  1143.   ptr1=ptr1->next;
  1144.   if(f==0) while((ptr1->sele!='Y')&&(ptr1!=NULL)) ptr1=ptr1->next;
  1145.   else while(((ptr1->sele!='Y')||(ptr1->type!='N'))&&(ptr1!=NULL))
  1146.          ptr1=ptr1->next;
  1147.     return(ptr1); }
  1148. /*-------------------------------LAST---------------------------*/
  1149.   FIELD *LAST(ptr,f)
  1150.     FIELD *ptr;
  1151.     int f;
  1152.     {
  1153.     FIELD *ptr1;
  1154.     ptr1=ptr;
  1155.     ptr1=ptr1->last;
  1156.   if(f==0) while((ptr1->sele!='Y')&&(ptr1!=NULL)) ptr1=ptr1->last;
  1157.   else while(((ptr1->sele!='Y')||(ptr1->type!='N'))&&(ptr1!=NULL))
  1158.        ptr1=ptr1->last;
  1159.   return(ptr1); }
  1160.  
  1161. /*-------------------------------sele_f--FUNTION USE------------------------------*/
  1162.   sele_f(ptr,ptr1,ptr2,f,f2,f1)
  1163.   FIELD *ptr,*ptr1,*ptr2;
  1164.  int f,f2,f1;
  1165.  {
  1166.  int i,j,k,key2,fen;
  1167.  FIELD *tem,*tem1;
  1168.  ptr2=NULL;
  1169.  fen=0;
  1170.  condition[0]='\0'; if(f==2){ f=0;fen=1;}
  1171.  begin:
  1172.  if(fen==1){
  1173.    if((ptr->sele!='Y')&&(ptr!=NULL))
  1174.       ptr=NEXT(ptr,f);}
  1175.  else
  1176.     if(((ptr->sele!='Y')||(ptr->type!='N'))&&(ptr!=NULL))
  1177.        ptr=NEXT(ptr,f);
  1178.  ptr2=ptr;
  1179.  if(fen==0)
  1180.    print(4,10,6|1,"%d",ob);
  1181.    print(6,10,0|75,"%s",ptr->field);
  1182.       disp_fmess(ptr);
  1183.     i=6;j=10;
  1184.     for(;;)  {
  1185.      key2=getcc();
  1186. mv2:     if(fen==0)
  1187.         print(i,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  1188.      else
  1189.         print(i,j,6|1,"%s",ptr->field);
  1190.      switch(key2)  {
  1191.         case LEFT:
  1192.          if(j==10) printf("\007");
  1193.          else {
  1194.              j=10;
  1195.              ptr=LAST(ptr,f); }
  1196.           break;
  1197.         case RIGHT:
  1198.              if((j==40)||((NEXT(ptr,f))==NULL)) printf("\007");
  1199.           else { j=40;
  1200.             ptr=NEXT(ptr,f); }
  1201.             break;
  1202.         case UP:
  1203.           if(i==6) printf("\007");
  1204.           else {
  1205.             i--;
  1206.             ptr=LAST(ptr,f);
  1207.             ptr=LAST(ptr,f); }
  1208.            break;
  1209.         case DOWN:
  1210.               tem1=NULL;
  1211.              if((i==10)||((tem1=NEXT(ptr,f))==NULL)||((NEXT(tem1,f))==NULL)) printf("\007");
  1212.              else {
  1213.                i++;
  1214.                ptr=NEXT(ptr,f);
  1215.                ptr=NEXT(ptr,f);}
  1216.                break;
  1217.         case PgUp:
  1218.             k=0;
  1219.              tem=ptr;
  1220.              ptr=ptr2;
  1221.              while(k<10) {
  1222.               ptr=LAST(ptr,f);
  1223.              if(ptr==NULL) break;
  1224.              k++; }           if(ptr!=NULL) {
  1225.               clear_win(5,3,9,76,6,0,black);
  1226.               ptr1=disp_f(ptr,f);
  1227.               i=6;j=10;
  1228.               ptr2=ptr; }
  1229.              else {
  1230.             ptr=tem;
  1231.             printf("\007"); }
  1232.            break;
  1233.          case PgDn:
  1234.             if(ptr1==NULL) printf("\007");
  1235.             else  {
  1236.             clear_win(5,3,9,76,6,0,black);
  1237.             ptr=ptr1;
  1238.             ptr1=disp_f(ptr,f);
  1239.             i=6;j=10;
  1240.             ptr2=ptr;   }
  1241.               break;
  1242.         case Enter:
  1243.         case F5:
  1244.          if((f==1)&&(ob==1)&&(ptr->obj=='N'))
  1245.         { error("╓╗─▄╤í╥╗╕÷╫╓╢╬╫≈╬¬╫¬╗╗╫╓╢╬úí");
  1246.           getcc();
  1247.           bottom();
  1248.           break;
  1249.         }
  1250.          if(f2==1) {p2=ptr; goto en;}
  1251.           if(fen==0) {
  1252.           ptr->obj=(ptr->obj=='Y'? 'N':'Y');
  1253.           ptr->obj=='Y'? ob++:ob--;
  1254.                if(j==10)  key2=RIGHT;
  1255.            else
  1256.           if((NEXT(ptr,f)!=NULL)&&(i!=10)) {
  1257.              print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  1258.              print(i,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  1259.              disp_fpart(ptr);
  1260.              print(4,10,6|1,"%d",ob);
  1261.              j=10;
  1262.              ptr=LAST(ptr,f);
  1263.              key2=DOWN; }
  1264.            else  key2=RIGHT;
  1265.           print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  1266.             disp_fpart(ptr);
  1267.           print(4,10,6|1,"%d",ob);
  1268.           goto mv2; }
  1269.           else { strcat(condition,ptr->field);
  1270.              if((sele_con(ptr))==1) {
  1271.               clear_win(15,4,18,76,6,0,black);
  1272.                print(14,30,6|1,"**Enter->╜ß╩°**");
  1273.                oneline(5,199,70,condition);
  1274.                return(1); }
  1275.                else {disp_fmess(ptr);break;}
  1276.                }
  1277. /*        case F1:*/
  1278.         case F6:
  1279.         if(fen==0) {
  1280.          ptr=p;
  1281.          ob=0;
  1282.          while(ptr!=NULL)
  1283.           {
  1284.            ptr->obj='N';
  1285.            ptr=NEXT(ptr,f);
  1286.            }    }
  1287.          else condition[0]='\0';
  1288.          return(-1);
  1289.         case F4: if((fen==1)&&(condition[0]=='\0'))
  1290.               strcpy(condition,".T.");
  1291.     en:       return(1);
  1292.         case End: /* next select's base*/
  1293.            if(f1==0)
  1294.          {
  1295.           root1=root2;
  1296.          while((root2=root2->next)!=NULL) {
  1297.            if(root2->sele=='Y') {
  1298.             ptr=root2->sstr;
  1299.             ptr2=ptr;
  1300.             clear_win(5,4,9,76,6,0,black);
  1301.             ptr1=disp_f(ptr,f);
  1302.              i=0;j=10;
  1303.               goto begin; } /*endif*/
  1304.            }/*endwhile*/
  1305.           if(root2==NULL) {
  1306.                printf("\007");
  1307.                root2=root1; }
  1308.             }
  1309.          break;
  1310.         case Home:/*last select's base*/
  1311.            if(f1==0) {
  1312.            root1=root2;
  1313.            while((root2=root2->last)!=NULL) {
  1314.              if(root2->sele=='Y') {
  1315.              ptr=root2->sstr;
  1316.              ptr2=ptr;
  1317.              clear_win(5,4,9,76,6,0,black);
  1318.              ptr1=disp_f(ptr,f);
  1319.             i=0;j=10;
  1320.             goto begin;}/*endif*/
  1321.             } /*endwhile*/
  1322.         if(root2==NULL) {
  1323.              printf("\007");
  1324.              root2=root1;  }
  1325.              }
  1326.         break;
  1327.         default: printf("\007");break;
  1328.           }   /*endswitch*/
  1329.         if(fen==0) {
  1330.           print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  1331.           print(4,10,6|1,"%d",ob);}
  1332.         else
  1333.           print(i,j,0|75,"%s",ptr->field);         disp_fpart(ptr);
  1334.         }/*end for*/
  1335.  
  1336.  }
  1337.  
  1338. /*-------------------------------disp_f()-----------------------------------*/
  1339.   FIELD *disp_f(ptr,f)
  1340.      FIELD *ptr;
  1341.      int f;
  1342.   { register int i,j;
  1343.     clear_win(5,4,9,76,6,0,black);
  1344.     i=0;j=10;
  1345.     if(f==1) {
  1346.      if(((ptr->sele!='Y')||(ptr->type!='N'))&&(ptr!=NULL)) ptr=NEXT(ptr,f);}
  1347.      else
  1348.      if((ptr->sele!='Y')&&(ptr!=NULL)) ptr=NEXT(ptr,f);
  1349.      while((ptr!=NULL)&&(i<5)) {
  1350.         if(f==0)
  1351.          print(i+6,j,6|1,"%s",ptr->field);
  1352.         else
  1353.            print(i+6,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  1354.            i=(j==10? i: i+1);
  1355.            j=(j==10? 40:10);
  1356.            ptr=NEXT(ptr,f);
  1357.           }
  1358.     return(ptr); }
  1359. /*-----------------------------------disp_ch()-----------------------------------*/
  1360.   FIELD *disp_ch(ptr)
  1361.    FIELD *ptr;
  1362.  { register int i,j;
  1363.    clear_win(5,4,9,76,6,0,black);
  1364.    i=0;j=10;
  1365.     while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1366.        ptr=ptr->next;
  1367.      while((ptr!=NULL)&&(i<5)) {
  1368.       print(i+6,j,ptr->cla==0 ? 6|1:0|113,"%s",ptr->field);
  1369.       i=(j==10? i: i+1);
  1370.       j=(j==10? 40:10);
  1371.        ptr=ptr->next;
  1372.     while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1373.       ptr=ptr->next;}
  1374.     return(ptr);
  1375.     }
  1376.  
  1377. /*-------------------------select linkfield-----------------------*/
  1378.  sele_link(ptr,ptr1,ptr2)
  1379.    struct PPP *ptr,*ptr1,*ptr2;
  1380.  {
  1381.  int i,j,k,key2,f;
  1382.  struct PPP *tem;
  1383.  ptr2=NULL;
  1384.  f=0;
  1385.    root2=root4=root;
  1386.    while((root2->sele!='Y')&&(root2!=NULL))
  1387.     root2=root2->next;   while((root4->sort!=1)&&(root4!=NULL))
  1388.     root4=root4->next;
  1389.    print(4,5,6|1,"╟δ╢¿╥σ░╤ %s(┐Γ├√:%s.dbf) ╫¬╗╗╡╜ %s(┐Γ├√:%s.dbf)╡─▒ú┴⌠╫╓╢╬",root2->mean,root2->dbname,root4->mean,root4->dbname);
  1390. begin:  print(6,10,(ptr->obj=='L'? 0|113:0|75),"%s",ptr->field);
  1391.       disp_fmess(ptr);
  1392.     i=6;j=10;
  1393.     for(;;)  {
  1394.      key2=getcc();
  1395. mv:      print(i,j,(ptr->obj=='L'? 0|113:6|1),"%s",ptr->field);
  1396.      switch(key2)  {
  1397.         case LEFT:
  1398.          if(j==10) printf("\007");
  1399.          else {
  1400.              j=10;
  1401.              ptr=ptr->last; }
  1402.           break;
  1403.         case RIGHT:
  1404.                      if((j==40)||(ptr->next==NULL)) printf("\007");
  1405.           else { j=40;
  1406.             ptr=ptr->next; }
  1407.             break;
  1408.         case UP:
  1409.           if(i==6) printf("\007");
  1410.           else {
  1411.             i--;
  1412.             ptr=ptr->last->last; }
  1413.            break;
  1414.         case DOWN:
  1415.              if((i==10)||((ptr->next)->next==NULL)||(ptr->next==NULL)) printf("\007");
  1416.              else {
  1417.                i++;
  1418.                ptr=ptr->next->next; }
  1419.                break;
  1420.         case PgUp:
  1421.             k=0;
  1422.              tem=ptr;
  1423.              ptr=ptr2;
  1424.              while(k<10) {
  1425.               ptr=ptr->last;
  1426.              if(ptr==NULL) break;
  1427.              k++; }
  1428.            if(ptr!=NULL) {
  1429.               clear_win(5,3,9,76,6,0,black);
  1430.               ptr1=disp_field(ptr,f);
  1431.               i=6;j=10;
  1432.               ptr2=ptr; }
  1433.              else {
  1434.             ptr=tem;
  1435.             printf("\007"); }
  1436.            break;
  1437.          case PgDn:
  1438.             if(ptr1==NULL) printf("\007");
  1439.             else  {
  1440.             clear_win(5,3,9,76,6,0,black);
  1441.             ptr=ptr1;            ptr1=disp_field(ptr,f);
  1442.             i=6;j=10;
  1443.             ptr2=ptr;   }
  1444.               break;
  1445.         case Enter:
  1446.         case F5:
  1447.          if(ptr->obj!='L')
  1448.             if(checklink(ptr)==1)
  1449.             {  ptr->obj='L';
  1450.                f++;
  1451.              }
  1452.              else break;
  1453.          else
  1454.             { ptr->obj='N';
  1455.               f--;
  1456.             }
  1457.             break;
  1458.         case F4:
  1459.          root2=root;
  1460.          while(root2!=NULL)
  1461.            {  if(root2->sele=='Y')
  1462.              break;
  1463.                else
  1464.               root2=root2->next;
  1465.            }
  1466.          if(root2!=NULL)
  1467.             {   p2=root2->sstr;
  1468.             while(p2!=NULL)
  1469.                 {  if(p2->obj=='L')
  1470.                   strcpy(linkfield[linknum++],p2->field);
  1471.                    p2=p2->next;
  1472.                 }
  1473.              }
  1474.          return(1);
  1475.         case F6:
  1476.          linknum=0;
  1477.          return(-1);
  1478.         default: printf("\007");break;
  1479.           }   /*endswitch*/
  1480.          if(ptr->obj=='L')
  1481.         print(i,j,0|113,"%s",ptr->field);
  1482.          else
  1483.         print(i,j,0|75,"%s",ptr->field);
  1484.         disp_fpart(ptr);
  1485.      }/*endfor*/
  1486.     }
  1487.  
  1488.  
  1489. /*---------------------------------define linkfield--------------------------*/
  1490.     define_link()
  1491.       {
  1492.         int i;
  1493. defin:  clear_win(5,4,9,76,6,0,black);
  1494.      clear_win(15,4,20,76,6,0,black);
  1495.      root2=root;     while(root2!=NULL)
  1496.           if(root2->sele=='Y') break;
  1497.           else root2=root2->next;
  1498.        if(root2->sele=='Y') {
  1499.        p=root2->sstr;
  1500.        p2=p;
  1501.        p4=p2;
  1502.        p1=disp_field(p2,0);
  1503.        if((sele_link(p2,p1,p4))==-1) goto defin;
  1504.           }/*endif*/
  1505.        }
  1506. /*------------------------------end define  linkfield-------------------------------*/
  1507. /*------------------sele_char type field--------------------------------*/
  1508.  sele_ch(ptr,ptr1,ptr2)
  1509.  FIELD *ptr,*ptr1,*ptr2;
  1510.  {
  1511.  int i,j,k,key2,var;
  1512.  FIELD *tem,*tem1,*tem2;
  1513.  char ch[4];
  1514.  ptr2=NULL;
  1515. begin:
  1516.    while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1517.       ptr=ptr->next;
  1518.      print(6,10,0|75,"%s",ptr->field);
  1519.       disp_fmess(ptr);
  1520.     i=6;j=10;
  1521.     for(;;)  {
  1522.      key2=getcc();
  1523. mv:      print(i,j,(ptr->cla!=0 ? 0|113:6|1),"%s",ptr->field);
  1524.      switch(key2)  {
  1525.         case LEFT:
  1526.          if(j==10) printf("\007");
  1527.          else {
  1528.             j=10;
  1529.             ptr=ptr->last;
  1530.                         while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1531.                 ptr=ptr->last;
  1532.             }
  1533.           break;
  1534.         case RIGHT:
  1535.             tem1=ptr->next;
  1536.             while((tem1->type!='C')&&(tem1->type!='c')&&(tem1!=NULL))
  1537.                tem1=tem1->next;
  1538.              if((j==40)||(tem1==NULL)) printf("\007");
  1539.           else { j=40;
  1540.            ptr=ptr->next;
  1541.           while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1542.              ptr=ptr->next; }
  1543.             break;
  1544.         case UP:
  1545.           if(i==6) printf("\007");
  1546.           else {
  1547.             i--;
  1548.             ptr=ptr->last;
  1549.             while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))               ptr=ptr->last;
  1550.             ptr=ptr->last;
  1551.                     while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1552.             ptr=ptr->last;
  1553.             }
  1554.            break;
  1555.         case DOWN:
  1556.              tem1=ptr->next;
  1557.              while((tem1->type!='C')&&(tem1->type!='c')&&(tem1!=NULL))
  1558.             tem1=tem1->next;
  1559.              tem2=tem1->next;
  1560.               while((tem2->type!='C')&&(tem2->type!='c')&&(tem2!=NULL))
  1561.             tem2=tem2->next;
  1562.              if((i==10)||((tem2==NULL)||(tem1==NULL))) printf("\007");
  1563.              else {
  1564.                i++;
  1565.             ptr=ptr->next;
  1566.                        while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1567.               ptr=ptr->next;
  1568.              ptr=ptr->next;
  1569.                         while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1570.                ptr=ptr->next;}
  1571.                break;
  1572.         case PgUp:
  1573.             k=0;
  1574.              tem=ptr;
  1575.              ptr=ptr2;
  1576.              while(k<10) {
  1577.              ptr=ptr->last;
  1578.                          while((ptr->type!='C')&&(ptr->type!='c')&&(ptr!=NULL))
  1579.                 ptr=ptr->last;
  1580.              if(ptr==NULL) break;
  1581.              k++; }
  1582.            if(ptr!=NULL) {
  1583.               clear_win(5,3,9,76,6,0,black);
  1584.               ptr1=disp_ch(ptr);
  1585.               i=6;j=10;
  1586.               ptr2=ptr; }
  1587.              else {
  1588.             ptr=tem;
  1589.             printf("\007"); }
  1590.            break;
  1591.          case PgDn:
  1592.             if(ptr1==NULL) printf("\007");
  1593.             else  {
  1594.             clear_win(5,3,9,76,6,0,black);
  1595.             ptr=ptr1;
  1596.             ptr1=disp_ch(ptr);
  1597.             i=6;j=10;
  1598.             ptr2=ptr;   }
  1599.               break;
  1600.         case Enter:
  1601.         case F5:
  1602.         for(var=0;var<linknum;var++)
  1603.             if((strcmp(ptr->field,linkfield[var]))==0)            { error("▒ú┴⌠╫╓╢╬▓╗─▄╙δ╙≥╫¬╗╗╫╓╢╬╧α═¼úí");
  1604.               getcc();
  1605.               bottom();
  1606.               goto zl;
  1607.              }
  1608.            ptr->cla!=0 ? f--:f++;
  1609.            if(ptr->cla==0)
  1610.            ptr->cla=f;
  1611.         else
  1612.           ptr->cla=0;
  1613.            if(f>1)
  1614.            { ptr->cla=0;
  1615.               f--;
  1616.               error("╓╗─▄╤í╥╗╕÷╫╓╢╬!");
  1617.               getcc();
  1618.               bottom();
  1619.            }
  1620. zl:           break;
  1621.         case F6:
  1622.          ptr=p;
  1623.          f=0;
  1624.          while(ptr!=NULL)
  1625.           {
  1626.            ptr->cla=0;
  1627.            ptr=ptr->next;
  1628.            }
  1629.           return(-1);
  1630.         case F4:
  1631.            if (f==1)
  1632.               return(1);
  1633.            else
  1634.             { error("─·▒╪╨δ╤í╘±");
  1635.               getcc();
  1636.               bottom();
  1637.               break;
  1638.             }
  1639.         default: printf("\007");break;
  1640.           }   /*endswitch*/
  1641.            print(i,j,(ptr->cla!=0 ? 0|113:0|75),"%s",ptr->field);
  1642.            print(4,10,6|1,"%d",f);
  1643.            disp_fpart(ptr);
  1644.           }/*end for*/
  1645.     }
  1646.  
  1647.  
  1648. /*-----------------------------make titile ------------------------------*/
  1649.   make_t() {
  1650.        clear_win(0,0,24,79,6,0,black);
  1651.        print(1,5,0|30,"**%s**","╔·│╔╠¿╒╩╫¬╗╗│╠╨≥");
  1652.        print(1,50,0|30,"**ESC->═╦│÷**");
  1653.        gframe(5,2,11,78,0,0|30);
  1654.        print(4,5,6|1,"╣▓╤í");
  1655.        print(4,13,6|1,"╫╓╢╬");
  1656.        print(11,60,0|30,"PgUp/PgDn");
  1657.        gframe(13,2,23,78,0,0|30);       print(13,8,0|30,"╨┼╧ó┤░┐┌");
  1658.        }
  1659. /*------------------------write statis.txt for mean name--------------------------*/
  1660.   w_menu(r)
  1661.   char *r;{
  1662.   FILE *fp;
  1663.     if((fp=fopen("tetris.txt","a"))==NULL) {
  1664.          error("don't open file tetris.txt");
  1665.          exit(1); }
  1666.    fprintf(fp,"#%s#,#%s#\n",workname,r);
  1667.    fclose(fp); }
  1668. /*----------------------------checklink---------------------------------*/
  1669.  checklink(ptr)
  1670.   FIELD *ptr;
  1671.   { FIELD *ptr1;
  1672.     root2=root;
  1673.     while(root2!=NULL)
  1674.        if(root2->sort==1)
  1675.         break;
  1676.        else
  1677.         root2=root2->next;
  1678.      if(root2!=NULL)
  1679.     { ptr1=root2->sstr;
  1680.       while(ptr1!=NULL)
  1681.          { if(strcmp(ptr->field,ptr1->field)==0)
  1682.             return(1);
  1683.            else ptr1=ptr1->next;
  1684.          }
  1685.      }
  1686.       else
  1687.      { error("┴¼╜╙╫╓╢╬╙╨╬≤!");
  1688.        exit(0);
  1689.      }
  1690.       error("┴¼╜╙╫╓╢╬╙╨╬≤!");
  1691.       getcc();
  1692.       bottom();
  1693.       return(-1);
  1694.    }
  1695.  
  1696.  
  1697. /*----------------------------CLEAR OBJ--------------------------------*/
  1698. clear_obj(flag)
  1699.    int flag;
  1700.    {int i;
  1701.      root2=root;
  1702.      while(root2!=NULL) {
  1703.       if(root2->sele=='Y') {
  1704.       p2=root2->sstr;
  1705.       while(p2!=NULL) {
  1706.       p2->obj='N';
  1707.       p2=p2->next ;} }
  1708.       root2=root2->next; }
  1709.  if(flag==1)
  1710.      linknum=0;
  1711.      }
  1712. /*------------------------------ALL END ------------------------------*/
  1713.  
  1714.  
  1715.  
  1716.