home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a014 / 1.ddi / CDBINC.EXE / TJ_CONTR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-04  |  61.7 KB  |  2,485 lines

  1.  
  2. #include <stdio.h>
  3. #include <dos.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #include <sys\stat.h>
  7. #include <fcntl.h>
  8.  
  9. #define black  0x0
  10. #define blue   0x10
  11. #define green  0x20
  12. #define cyan   0x30
  13. #define red    0x40
  14. #define white  0x70
  15.  
  16. #define PgUp 18688
  17. #define PgDn 20736
  18. #define UP   18432
  19. #define DOWN 20480
  20. #define LEFT 19200
  21. #define RIGHT 19712
  22. #define Enter 13
  23. #define Home  18176
  24. #define End   20224
  25. #define ESC   27
  26. #define Ins 20992
  27. #define Del 21248
  28.  
  29. #define  F1    15104
  30. #define  F2    15360
  31. #define  F3    15616
  32. #define  F4    15872
  33. #define  F5    16128
  34. #define  F6    16384
  35. #define  F7    16640
  36. #define  F8    16896
  37. #define  F9    17152
  38. #define  F10   17408
  39.  
  40. typedef struct PPP {              /* this is a database's structure */
  41.     char field[11];
  42.     char type;
  43.     int  length;
  44.     int  dec;
  45.        struct PPP *last;          /* poniter of the last block   */
  46.        struct PPP *next;          /* pointer of the next block   */
  47.     char sele;
  48.     char obj;   /*object flag*/
  49.     int cla;
  50.      }FIELD;
  51.  FIELD *p,*p1,*p2,*p3,*p4;
  52.  
  53. typedef struct MM {            /*store base name*/
  54.     char mean[30];
  55.     char dbname[11];     /* the name of the database */
  56.     char mainkey[4][11];      /* mainkey of the database  */
  57.     struct PPP  *sstr;   /* point to the database's structure */
  58.     struct PPP  *estr;/* pointer for end of block of base*/
  59.     char flag;           /*if finish base 0--not finish 1--finish*/
  60.     char serve;
  61.     char path[30];
  62.     char sele;
  63.     int  sort;
  64.     char join;
  65.     struct MM *last;
  66.     struct MM *next;
  67.       }BASE ;
  68.    BASE  *root,*root1,*root2,*root4,*root3,*root5,*root6,*root9;/* end*/
  69.    BASE  *opbase[6],*roothead,*conv;
  70.   FILE *fp1,*fp2;
  71.   BASE *disp_opbase();
  72.   FIELD *disp_field(),*NEXT(),*LAST(),*disp_f(),*disp_ch();
  73.   int sub1,sub2;
  74.   int froecolor=7,backcolor=1,frame=1,basecount=0,selecount=0,fselecount=0,ob=0,f=0;
  75.   char workname[30],condition[200];
  76.   char *con[]={".and.",".or.",".not.",".and.not.",".or.not.","╜ß╩°"};
  77.   int number=0,add_funtion;
  78.   int num[6],use=0,linknum,link[5];
  79.   char  linkfield[5][4][11],linktype,PATH[30],lan,insert='N';
  80.   char class[3][100],classbak[3][11];
  81.   char file[13];
  82.   char *title2[]={
  83.          "╕─▒Σ╡─╟░╛░╔½",
  84.          "╕─▒Σ╡─▒│╛░╔½",
  85.          "╕─▒Σ▒▀┐≥╨╬╫┤",
  86.          "▒ú┤µ╦∙╤í┼Σ╓├",
  87.          "╖┼╞·╦∙╤í┼Σ╓├",
  88.          };
  89.  
  90.   char *title3[]={
  91.          "╔·│╔╠⌡╝■╫╓╢╬═│╝╞─ú┐Θ",
  92.          "╔·│╔║ß╧≥═│╝╞╙δ╝╞╦π  ",
  93.          "╔·│╔╫▌╧≥═│╝╞╙δ╝╞╦π  ",
  94.          "╔·│╔╖╓└α╠⌡╝■═│╝╞─ú┐Θ",
  95.          "╔·│╔┐∞╦┘╠⌡╝■╗π╫▄═│╝╞",
  96.                  "╔·│╔└█╝╞═│╝╞╙δ╝╞╦π  ",
  97.          "╔·│╔╙├╗º└⌐│Σ─ú┐Θ╜╙┐┌",
  98.          "▒ú┤µ╔·│╔╡─╘┤│╠╨≥═╦│÷",
  99.                  "╖┼╞·╔·│╔╡─╘┤│╠╨≥═╦│÷",
  100.         };
  101.  
  102.     char *color[8]={"0--║┌╔½","1--└╝╔½","2--┬╠╔½","3--╔ε└╝","4--║∞╔½","5--╞╖║∞","6--░╫╔½","7--╗╞╔½"};
  103.     char *shift[8]={"N","B","G","BG","R","RB","W","GR+"};
  104.     char filename[30];
  105.  
  106. main(argc,argv)
  107.  int argc;
  108.  char *argv[];
  109. {
  110. int ten,k;
  111. /*--------------------------------MAKE START & READ DATA BASE STRUCTURE-----------------------------------*/
  112. k=strlen(argv[1]);
  113. if (strcmp(argv[2],"wy")!=0) return(0);
  114. if((argc!=3)||(argv[1][k-1]!='\\'))
  115.       exit(0);
  116. else
  117.    { argv[1][k-1]='\0';
  118.      strcpy(PATH,argv[1]);
  119.    }
  120. read_base();
  121. roothead=root;
  122. if((fp1=fopen("statis.txt","w"))==NULL) exit(0);
  123. else  fclose(fp1);
  124. /*read_stru();*/
  125. root->last=NULL;
  126. condition[0]='\0';
  127. /*checkey();*/
  128. ten=0;
  129. sub1=-1;
  130. sub2=-1;
  131.  
  132. /*-----------------------------------MAIN MENU---------------------------------------*/
  133. for(;;) {
  134. ll: if((ten=main_menu(sub1))==-1) continue;
  135.     else  sub1=ten;
  136. for(;;){
  137.  switch(sub1)
  138.   {
  139.     case 0:
  140.       if((ten=menu1(sub2))==-1)
  141.       { sub1=0;
  142.         goto ll;
  143.       }
  144.       else sub2=ten;
  145.        break;
  146.     case 1:
  147.        if((ten=menu2(sub2))==-1)
  148.        { sub1=1;
  149.          goto ll;
  150.        }
  151.        else  sub2=ten;
  152.        break;
  153.     case 2:
  154.     w_color();
  155.     exit(0);
  156.    }/*endswitch*/
  157.   if(work(sub1,sub2)==1)
  158.        break;
  159.   }
  160.   }/*end for*/
  161. }/*end main*/
  162. /*---------------------------color menu-------------------------------*/
  163.  menu1(sub)
  164.    int sub;
  165.   { int i,row,key2;
  166.    if(sub==-1)
  167.      sub=0;
  168.    clear_win(0,0,24,79,6,0,cyan);
  169.    clear_win(5,8,18,71,6,0,black);
  170.    clear_win(4,6,17,69,6,0,blue);
  171.    mgframe(6,9,18,67,0,0|30);
  172. /*   clear_win(18,6,19,13,6,0,cyan);
  173.    clear_win(6,13,16,67,6,0,blue);*/
  174.    print(6,28,0|30,"╕─▒Σ╙ª╙├╧╡═│┼Σ╓├▓╦╡Ñ");
  175.    for(i=0;i<5;i++)
  176.        print(8+i*2,30,0|30,"%s",title2[i]);
  177.    row=sub*2+8;
  178.    print(8+sub*2,30,0|113,"%s",title2[sub]);
  179.   for(;;)
  180.     {  key2=getcc();
  181.        print(row,30,0|30,"%s",title2[sub]);
  182.        switch(key2)
  183.       {  case UP:
  184.         if(row>8)
  185.             {   row -=2;
  186.             sub--;
  187.             }
  188.          else
  189.             {
  190.                row=16;
  191.                sub=4;
  192.              }
  193.           break;
  194.        case DOWN:
  195.         if(row<16)
  196.             {  row +=2;
  197.                sub++;
  198.             }
  199.         else
  200.             {
  201.                row=8;
  202.                sub=0;
  203.             }
  204.            break;
  205.      case F6: /*EXIT(1)*/
  206.          clear_win(0,0,24,79,6,0,cyan);
  207.          return(-1);
  208.      case Enter:
  209.          clear_win(0,0,24,79,6,0,cyan);
  210.          return(sub);
  211.      default: printf("\007"); break;
  212.       } /*end switch*/
  213.        print(row,30,0|113,"%s",title2[sub]);
  214.     } /*end for*/
  215.   } /*end sun_menu*/
  216.  
  217. /*------------------------------MAIN MENU------------------------------*/
  218. main_menu(sub)
  219.  int sub;
  220. {
  221.  char *line[]={"1_╕─▒Σ╙ª╙├╧╡═│▓╦╡Ñ┼Σ╓├",
  222.            "2_═│╝╞╙δ╝╞╦π╣ª─▄╡─╔·│╔",
  223.            "3_═╦│÷═│╝╞╙δ╝╞╦π─ú┐Θ  " };
  224.  
  225. int key1,i,mrow;
  226.   clear_win(0,0,24,79,6,0,cyan);
  227.   clear_win(6,13,17,71,6,0,black);
  228.   clear_win(5,11,16,69,6,0,blue);
  229.   mgframe(7,14,17,67,0,0|30);
  230. /*  print(18,14,0|30,"%*s",53," ");
  231.   clear_win(7,17,15,63,6,0,blue);*/
  232.   print(7,30,0|30,"═│╝╞╙δ╝╞╦π─ú┐Θ╓≈▓╦╡Ñ");
  233.   for(i=0;i<3;i++)
  234.       print(9+i*3,30,0|30,"%s",line[i]);
  235.   if(sub==-1)
  236.       { sub=0;
  237.     mrow=9;
  238.        }
  239.    else
  240.        mrow=9+sub*3;
  241.   print(mrow,30,0|113,"%s",line[sub]);
  242.   for(;;)
  243.      {  key1=getcc();
  244.     print(mrow,30,0|30,"%s",line[sub]);
  245.     switch(key1)
  246.         {    case DOWN:
  247.               if(mrow>=13)
  248.               {  mrow=9;
  249.                  sub=0;
  250.                }
  251.                else
  252.                {
  253.                   mrow +=3;
  254.                   sub++;
  255.                 }
  256.                break;
  257.          case UP:
  258.             if(mrow<=9)
  259.                 {  mrow=15;
  260.                    sub=2;
  261.                  }
  262.              else
  263.                  {
  264.                 mrow -=3;
  265.                 sub--;
  266.                   }
  267.               break;
  268.           case Enter:
  269.               return(sub);
  270.           case F6: return(-1);/*fail*/
  271.           default: printf("\007"); break;
  272.         } /*end switch*/
  273.     print(mrow,30,0|113,"%s",line[sub]);
  274.      }/*endfor*/
  275. } /*end founction*/
  276.  
  277. /*----------------------------------MAIN CONTROL---------------------------*/
  278. work(s1,s2)
  279. int s1,s2;
  280. {
  281.  int ten;
  282.  FILE *ff;
  283.  int i,j,k,selectc;
  284.  char st[11],ta[3];
  285.  ob=0;
  286.  ta[0]=ta[1]=ta[2]='\0';
  287.  make_start(0);
  288.  switch(s1)
  289.   {  case 0:
  290.          switch(s2) {
  291.             case 0:
  292.          froecolor=make_color();
  293.               break;
  294.         case 1:
  295.          backcolor=make_color();
  296.               break;
  297.         case 2:
  298.            clear_win(0,0,24,79,6,0,black);
  299.            print(1,5,0|30,"**%s**",title2[s2]);
  300.            print(1,55,0|30,"**ESC->╓╨╢╧═╦│÷**");
  301.            print(4,20,6|1,"╙ª╙├╧╡═│╡─▒▀┐≥╨╬╩╜");
  302.         gframe(5,10,11,60,0,0|30);
  303.         print(6,20,6|1,"0--╡Ñ╧▀▒▀┐≥(╚τ:⌐ñ⌐ñ⌐ñ⌐ñ)");
  304.         print(8,20,6|1,"1--┤╓╧▀▒▀┐≥(╚τ:⌐Ñ⌐Ñ⌐Ñ⌐Ñ)");
  305.         print(10,20,6|1,"╟δ╤í╘±─·╡─╙ª╙├╧╡═│▒▀┐≥╨╬╩╜:");
  306.         for(;;) {
  307.          fflush(stdin);
  308.          printf("\033[10;47H");
  309.          scanf("%01d",&ten);
  310.          if((ten<0)||(ten>1))
  311.             { printf("\007");
  312.               clear_win(9,15,9,58,6,0,black);
  313.               print(10,25,6|1,"╖┼╞·╤í╘±┬≡ú┐(Y/N): ");
  314.               ten=getcc();
  315.               if((ten=='Y')||(ten=='y'))
  316.                { ten=0;
  317.                  break;
  318.                }
  319.                else
  320.                {  clear_win(9,15,9,58,6,0,black);
  321.                   print(10,20,6|1,"╟δ╤í╘±─·╡─╙ª╙├╧╡═│▒▀┐≥╨╬╩╜:");
  322.                }
  323.             }/*endif*/
  324.          else break; }
  325.          frame=ten;
  326.          break;
  327.         case 3:  /*w_color();*/ return(1);
  328.         case 4:  froecolor=7;backcolor=0;frame=0;return(-1);
  329.         } /*endswitch*/
  330.       break;
  331.     case 1:/*fountion*/
  332.        for (selectc=0;selectc<6;selectc++)
  333.        {
  334.        opbase[selectc]->sele='N';
  335.        opbase[selectc]->sort=0;
  336.        opbase[selectc]->join='N' ;
  337.        opbase[selectc]=NULL;
  338.        }
  339.        fselecount=selecount=0;
  340.        root=roothead;
  341.        switch(s2) {
  342.       case 0:
  343.          clear_win(0,0,24,79,6,0,black);
  344.          make_start(1);
  345.          gframe(3,4,14,70,0,0|30);
  346.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  347.          lan=getcc();
  348.            select_datbase(6);
  349.            convert();
  350.            define_link(0);
  351.            root2=root;
  352.            while(root2!=NULL)
  353.           { if(root2->sele=='Y')
  354.                { p2=root2->sstr;
  355.              while(p2!=NULL)
  356.                 {  p2->sele='Y';
  357.                   p2=p2->next;
  358.                 }
  359.             }
  360.                root2=root2->next;
  361.            }
  362.  
  363.            clear_obj(0);
  364.            tj_f();
  365.            free(root);
  366.           break;
  367.      case 1:
  368.          clear_win(0,0,24,79,6,0,black);
  369.          make_start(1);
  370.          gframe(3,4,14,70,0,0|30);
  371.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  372.          lan=getcc();
  373.            select_datbase(6);
  374.            convert();
  375.            define_link(0);
  376.            clear_win(5,4,9,76,6,0,black);
  377.            make_data();
  378. /*           r_mean();*/
  379.         clear_obj(0);
  380.            tj_h();
  381.            free(root);
  382.            break;
  383.      case 2:
  384.                 clear_win(0,0,24,79,6,0,black);
  385.          gframe(3,4,14,70,0,0|30);
  386.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  387.          make_start(1);
  388.          lan=getcc();
  389.           select_datbase(6);
  390.           convert();
  391.           define_link(0);
  392.               clear_win(5,4,9,76,6,0,black);
  393.           make_data();
  394. /*          r_mean();*/
  395.           clear_obj(0);
  396.           tj_z();
  397.           free(root);
  398.           break;
  399.      case 3:
  400.                 clear_win(0,0,24,79,6,0,black);
  401.          gframe(3,4,14,70,0,0|30);
  402.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  403.          lan=getcc();
  404.          make_start(1);
  405.           select_datbase(6);
  406.           convert();
  407.           define_link(0);
  408.            root2=root;
  409.            p3=NULL;
  410.            while(root2!=NULL)
  411.           { if(root2->sele=='Y')
  412.             { p2=root2->sstr;
  413.              while(p2!=NULL)
  414.                 {  root4=root;
  415.                    while(root4!=root2)
  416.                   { if(root4->sele=='Y')
  417.                       { p3=root4->sstr;
  418.                     while(p3!=NULL)
  419.                       { if(p3->sele=='Y')
  420.                            if(strcmp(p2->field,p3->field)!=0)
  421.                             p3=p3->next;
  422.                         else break;
  423.                          else
  424.                         p3=p3->next;
  425.                         }
  426.                      }
  427.                       if(p3==NULL)
  428.                        root4=root4->next;
  429.                       else
  430.                       break;
  431.                     }
  432.                    if(p3==NULL)
  433.                     p2->sele='Y';
  434.                 p2=p2->next;
  435.                 p3=NULL;
  436.                 }
  437.             }
  438.              root2=root2->next;
  439.              p3=NULL;
  440.            }
  441. /*          r_mean();*/
  442.           clear_obj(0);
  443.           tj_t();
  444.           free(root);
  445.           break;
  446.      case 4:
  447.            make_start(1);
  448.                clear_win(0,0,24,79,6,0,black);
  449.          gframe(3,4,14,70,0,0|30);
  450.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  451.          lan=getcc();
  452.          select_datbase(6);
  453.          convert();
  454.  
  455.          define_link(0);
  456.          clear_win(5,4,9,76,6,0,black);
  457.          make_data();
  458.     /*     r_mean();*/
  459.          clear_obj(0);
  460.          tj_q();
  461.          free(root);
  462.          break;
  463.      case 5:
  464.            make_start(1);
  465.                clear_win(0,0,24,79,6,0,black);
  466.            gframe(3,4,14,70,0,0|30);
  467.          print(7,20,6|1,"─·╥¬╔·│╔═°┬τ╢α╙├╗º│╠╨≥┬≡ú┐(Y/N): ");
  468.         lan=getcc();
  469.          select_datbase(1);
  470.          select_datbase(10);
  471.          convert();
  472.          root2=root;
  473.          while(root2!=NULL)
  474.          if(root2->sort==1)
  475.               { root2->sele='Y';
  476.             break;
  477.               }
  478.          else
  479.                root2=root2->next;
  480.          selecount=2;
  481.          linktype='A';
  482.          define_link(1);
  483.     /*     r_mean();*/
  484.          clear_obj(0);
  485.          tj_s();
  486.          free(root);
  487.        break;
  488.      case 6:
  489.        system("c:\\cdbag4\\tsjif 2 wy");
  490. /*       clear_win(0,0,24,79,6,0,black);
  491.        if(add_funtion==0)
  492.          {
  493.           gframe(5,10,13,68,0,0|30);
  494.           printf("\033[8;17H\033[0;37;40m╟δ╩Σ╚δ┬╖╛╢╝░╬─╝■├√:");
  495.           printf("\033[8;38H");
  496.           scanf("%s",filename);
  497.           add_funtion=1;
  498.          }
  499.        system(filename);*/
  500.        break;
  501.      case 7:
  502.            for(i=0;i<7;i++) {
  503.           strcpy(file,"statis");
  504.           itoa(i,ta,10);
  505.           strcat(file,ta);
  506.           strcat(file,".txt");
  507.           if((ff=fopen(file,"r"))==NULL)
  508.                continue;
  509.            else
  510.                if((fp1=fopen("statis.txt","a"))==NULL)
  511.                  exit(1);
  512.             else
  513.                {  while(1)
  514.                  { fscanf(ff,"#%[^#]#,#%[^#]#\n",workname,st);
  515.                    fprintf(fp1,"#%s#,#%s#\n",workname,st);
  516.                    if(feof(ff)) break;
  517.                  }
  518.                  fclose(ff);
  519.             /*     unlink(file);*/
  520.                  fclose(fp1);
  521.                }
  522.             }
  523. /*-----------------------------make statis.txt----------------------*/
  524.            printf("\033[12;22H\033[0;0;7m╒²╘┌╔·│╔ú¼╟δ╔╘║≥ú«ú«ú«  \n");
  525.            system("copy c:\\cdbag4\\statis.prg *.* >zl");
  526.            system("copy c:\\cdbag4\\statis.dbf *.* >zl");
  527.            system("copy c:\\cdbag4\\page.prg *.* >zl");
  528.            system("copy c:\\cdbag4\\input.prg *.* >zl");
  529.            system("copy c:\\cdbag4\\cursor.prg *.* >zl");
  530.            system("copy c:\\cdbag4\\oldcur.prg *.* >zl");
  531.            system("copy c:\\cdbag4\\color.dbf *.* >zl");
  532.            system("copy c:\\cdbag4\\jg.dbf *.* >zl");
  533.            system("copy c:\\cdbag4\\dbstr.dbf *.* >zl");
  534.            system("copy c:\\cdbag4\\start.prg *.* >zl");
  535.            system("copy c:\\cdbag4\\brow.exe *.* >zl");
  536.  
  537.            return(1);
  538.       case 8:
  539.           unlink("statis.txt");
  540.          return(-1);
  541.     }
  542.        break;
  543.     case 2:
  544.     /*  w_color();*/
  545.       return(1);
  546.    }/*endswitch*/
  547. }
  548.  
  549. /*------------------------------DISP ERROR ----------------------------*/
  550. error(er)
  551. char er[80];
  552. {
  553.   int i,j;
  554.   printf("\007");
  555.   i=strlen(er);
  556.   j=(79-i)/2;
  557.   printf("\033[24;1H\033[1;36;41m%-*s%-*s%-*s",j," ",i,er,j," ");
  558.   printf("\033[0;37;40m");
  559.   }
  560. /*-----------------------------MAKE START OF DATABASE-----------------------*/
  561.  
  562. make_start(f)
  563. int f;
  564. {
  565.  int i;
  566.   root2=root;
  567.   while(root2!=NULL) {
  568.     root2->sele='N';
  569.     if(f==1)
  570.       root2->sort=0;
  571.     p2=root2->sstr;
  572.     while(p2!=NULL) {
  573.       p2->sele='N';
  574.       p2->cla=0;
  575.       p2->obj='N';
  576.       p2=p2->next;  }
  577.     root2=root2->next; }
  578. /*    fselecount=selecount=0;*/
  579.     for(i=0;i<5;i++)
  580.      link[i]=0;
  581.  
  582.     ob=0;
  583.     f=0;
  584.   } /*end fountion*/
  585.  
  586. /*------------------------------SELECT FIELD--------------------------------*/
  587.  
  588. sele_field(ptr,ptr1,ptr2,flag)
  589.  struct PPP *ptr,*ptr1,*ptr2;
  590.  int flag;
  591.  {
  592.  int i,j,k,key2,f,fin;
  593.  struct PPP *tem;
  594.  ptr2=NULL;
  595.  f=0;
  596.  begin:     print(6,10,0|75,"%s",ptr->field);
  597.       disp_fmess(ptr);
  598.     i=6;j=10;
  599.     for(;;)  {
  600.      key2=getcc();
  601. mv:      if(flag==1)
  602.           print(i,j,(ptr->cla>0? 0|113:6|1),"%s",ptr->field);
  603.      else
  604.           print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->field);
  605.      switch(key2)  {
  606.         case LEFT:
  607.          if(j==10) printf("\007");
  608.          else {
  609.              j=10;
  610.              ptr=ptr->last; }
  611.           break;
  612.         case RIGHT:
  613.                      if((j==40)||(ptr->next==NULL)) printf("\007");
  614.           else { j=40;
  615.             ptr=ptr->next; }
  616.             break;
  617.         case UP:
  618.           if(i==6) printf("\007");
  619.           else {
  620.             i--;
  621.             ptr=ptr->last->last; }
  622.            break;
  623.         case DOWN:
  624.              if((i==10)||((ptr->next)->next==NULL)||(ptr->next==NULL)) printf("\007");
  625.              else {
  626.                i++;
  627.                ptr=ptr->next->next; }
  628.                break;
  629.         case PgUp:
  630.             k=0;
  631.              tem=ptr;
  632.              ptr=ptr2;
  633.              while(k<10) {
  634.               ptr=ptr->last;
  635.              if(ptr==NULL) break;
  636.              k++; }
  637.            if(ptr!=NULL) {
  638.               clear_win(5,3,9,76,6,0,black);
  639.               ptr1=disp_field(ptr,flag);
  640.               i=6;j=10;
  641.               ptr2=ptr; }
  642.              else {
  643.             ptr=tem;
  644.             printf("\007"); }
  645.            break;
  646.          case PgDn:
  647.             if(ptr1==NULL) printf("\007");
  648.             else  {
  649.             clear_win(5,3,9,76,6,0,black);
  650.             ptr=ptr1;
  651.             ptr1=disp_field(ptr,flag);
  652.             i=6;j=10;
  653.             ptr2=ptr;   }
  654.               break;
  655.         case Enter:
  656.         case F5:
  657.         if(flag==0){
  658.           ptr->sele=(ptr->sele=='N'? 'Y':'N');
  659.           ptr->sele=='Y'? fselecount++:fselecount--;
  660.           if(ptr->sele=='Y')
  661.           check(root,ptr,0);
  662.           if(j==10)  key2=RIGHT;
  663.           else
  664.              if((ptr->next!=NULL)&&(i!=10)) {
  665.              print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->field);
  666.              print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->field);
  667.              disp_fpart(ptr);
  668.              print(4,10,6|1,"%02d",fselecount);
  669.              j=10;
  670.              ptr=ptr->last;
  671.               key2=DOWN; }
  672.               else  key2=RIGHT;
  673.           print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->field);
  674.             disp_fpart(ptr);
  675.           print(4,10,6|1,"%02d",fselecount);
  676.           goto mv; }
  677.           if(flag==1)
  678.               {   ptr->cla=fselecount;
  679.              return(1);
  680.               }
  681.            break;
  682. /*        case F1:*/
  683.         case F2:          /*allselect*/
  684.     /*     if(flag==1) break;*/
  685.            ptr1=ptr;
  686.            ptr=ptr2;
  687.            k=0;
  688.           while((ptr!=NULL)&&(k<10))  {
  689.             ptr->sele=='Y'? fselecount--:delay(0);
  690.             ptr->sele='Y';
  691.             fselecount++;
  692.             ptr=ptr->next;
  693.             k++;   }
  694.            ptr1=disp_field(ptr,0);
  695.            ptr=ptr1;
  696.            break;
  697.         case F3:          /*all not select*/
  698.         /* if(flag==1) break;*/
  699.           ptr1=ptr;
  700.           ptr=ptr2;
  701.            k=0;
  702.           while((ptr!=NULL)&&(k<10))
  703.           {
  704.            ptr->sele=='N'? fselecount++:delay(0);
  705.            ptr->sele='N';
  706.            fselecount--;
  707.            ptr=ptr->next;
  708.            k++;
  709.            }
  710.            ptr1=disp_field(ptr,0);
  711.            ptr=ptr1;
  712.            break;
  713.         case F6:
  714.          ptr=p;
  715.          fselecount=0;
  716.          while(ptr!=NULL)
  717.           {
  718.            ptr->sele='N';
  719.            ptr=ptr->next;
  720.            }
  721.           return(-1);
  722.         case F4:
  723.             p2=NULL;
  724.             if((sub1==1)&&(sub2==5))
  725.              goto jj;
  726.             root2=root;
  727.             while((root2=root2->next)!=NULL)
  728.                if(root2->sele=='Y')
  729.                 { p2=root2->sstr;
  730.                   while(p2->sele!='Y')
  731.                 { p2=p2->next;
  732.                   if(p2==NULL) break;
  733.                 }
  734.                    if(p2==NULL)
  735.                     { clear_win(5,4,9,76,6,0,black);
  736.                       clear_win(14,4,20,76,6,0,black);
  737.                        print(7,12,6|1,"╗╣╙╨┐╔╤í┐Γ├╗▒╗╩╣╙├,╝╠╨°╢¿╥σ┬≡ú┐(Y/N): ");
  738.                        fin=getcc();
  739.                        if((fin=='Y')||(fin=='y'))
  740.                        { ptr=root2->sstr;
  741.                          ptr2=ptr;
  742.                           clear_win(5,4,9,76,6,0,black);
  743.                           ptr1=disp_field(ptr,f);
  744.                           i=0;j=10;
  745.                           goto begin;
  746.                        }
  747.                                         else break;
  748.                       }
  749.                    }
  750.         jj:   if(flag==1)
  751.                return(2);
  752.              else
  753.                return(1);
  754.         case End: /* next select's base*/
  755.          if(flag!=0) break;
  756.           root1=root2;
  757.          while((root2=root2->next)!=NULL) {
  758.            if(root2->sele=='Y') {
  759.             ptr=root2->sstr;
  760.             ptr2=ptr;
  761.             clear_win(5,4,9,76,6,0,black);
  762.             ptr1=disp_field(ptr,f);
  763.              i=0;j=10;
  764.               goto begin; } /*endif*/
  765.            }/*endwhile*/
  766.           if(root2==NULL) {
  767.                printf("\007");
  768.                root2=root1; }
  769.          break;
  770.         case Home:/*last select's base*/
  771.           if(flag!=0) break;
  772.         root1=root2;
  773.            while((root2=root2->last)!=NULL) {
  774.              if(root2->sele=='Y') {
  775.              ptr=root2->sstr;
  776.              ptr2=ptr;
  777.              clear_win(5,4,9,76,6,0,black);
  778.              ptr1=disp_field(ptr,f);
  779.             i=0;j=10;
  780.             goto begin;}/*endif*/
  781.             } /*endwhile*/
  782.         if(root2==NULL) {
  783.              printf("\007");
  784.              root2=root1;  }
  785.         break;
  786.         default:
  787.             printf("\007");
  788.             break;
  789.                }
  790.         print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->field);
  791.         print(4,10,6|1,"%02d",fselecount);
  792.         disp_fpart(ptr);
  793.         }
  794.  }
  795. /*------------------------------SELECT DATABASE-----------------------------*/
  796. sele_opbase(ptr,ptr1,ptr2,maxcount)
  797. struct MM *ptr,*ptr1,*ptr2;
  798. int maxcount;
  799. {
  800. int i,j,k,key2,fin,selectc;
  801. struct MM *tem;
  802. BASE *rr;
  803. ptr2=NULL;
  804. fin=0;
  805.       print(6,10,0|75,"%s",ptr->mean);
  806.       disp_bmess(ptr);
  807.     i=6;j=10;
  808.     for(;;)  {
  809.      key2=getcc();
  810. mv1:     print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->mean);
  811.      switch(key2)
  812.            { case LEFT:
  813.          if(j==10) printf("\007");
  814.          else {
  815.              j=10;
  816.              ptr=ptr->last; }
  817.           break;
  818.         case RIGHT:
  819.                      if((j==40)||(ptr->next==NULL)) printf("\007");
  820.           else { j=40;
  821.             ptr=ptr->next; }
  822.             break;
  823.         case UP:
  824.           if(i==6) printf("\007");
  825.           else {
  826.             i--;
  827.             ptr=ptr->last->last; }
  828.            break;
  829.         case DOWN:
  830.              if((i==10)||((ptr->next)->next==NULL)||(ptr->next==NULL)) printf("\007");
  831.              else {
  832.                i++;
  833.                ptr=ptr->next->next; }
  834.                break;
  835.         case PgUp:
  836.             k=0;
  837.              tem=ptr;
  838.              ptr=ptr2;
  839.              while(k<10) {
  840.               ptr=ptr->last;
  841.              if(ptr==NULL) break;
  842.              k++; }
  843.            if(ptr!=NULL) {
  844.               clear_win(5,3,9,76,6,0,black);
  845.               ptr1=disp_opbase(ptr);
  846.               i=6;j=10;
  847.               ptr2=ptr; }
  848.              else {
  849.             ptr=tem;
  850.             printf("\007"); }
  851.            break;
  852.          case PgDn:
  853.             if(ptr1==NULL) printf("\007");
  854.             else  {
  855.             clear_win(5,3,9,76,6,0,black);
  856.             ptr=ptr1;
  857.             ptr1=disp_opbase(ptr);
  858.             i=6;j=10;
  859.             ptr2=ptr;   }
  860.               break;
  861.         case Enter:
  862.         case F5:
  863.            if((maxcount==10)&&(ptr->sort==0))
  864.             {  rr=root;
  865.                while(rr!=NULL)
  866.                { if(rr->sort!=0)
  867.                  { rr->sele='Y';
  868.                    break;
  869.                   }
  870.                  else  rr=rr->next;
  871.                }
  872.                if(checkbase(ptr)==1)
  873.                { rr=root;
  874.                  while(rr!=NULL)
  875.                 {  rr->sele='N';
  876.                    rr=rr->next;
  877.                 }
  878.                  ptr->sele='Y';
  879.                  ptr->sort=10;
  880.                  opbase[selecount++]=ptr;
  881.                  fin=1;
  882.                  return(1);
  883.                }
  884.                else
  885.                { rr=root;
  886.                  while(rr!=NULL)
  887.                 {  rr->sele='N';
  888.                    rr=rr->next;
  889.                 }
  890.                  error("▓╗─▄╘┌▓╗═¼╡─╣ñ╫≈╟°═¼╩▒┤≥┐¬═¼╥╗╕÷╬─╝■");
  891.                  getcc();
  892.                  bottom();
  893.                  continue;
  894.  
  895.                }
  896.             }
  897.         if((ptr->sort!=0)&&(maxcount==10))
  898.               {  error("▓╗─▄╤í╙δ└█╝╞▓┘╫≈┐Γ╧α═¼╡─╬─╝■╫≈╬¬└█╝╞╜ß╣√┐Γ");
  899.              getcc();
  900.              bottom();
  901.              continue;
  902.               }
  903.            if(ptr->sele=='N')
  904.            {  if(checkbase(ptr)==1)
  905.               {  if(selecount<maxcount)
  906.                  {   ptr->sele=(ptr->sele=='N'? 'Y':'N');
  907.                   if (ptr->sele=='Y') opbase[selecount]=ptr;
  908.                                      else
  909.                                         {
  910.                     for (selectc=0;selectc<selecount && opbase[selectc]!=ptr;selectc++);
  911.                                         for (;selectc<selecount-1;selectc++) opbase[selectc]=opbase[selectc+1];
  912.                                         opbase[selectc]=NULL;
  913.                                         }
  914.                      ptr->sele=='Y'? selecount++:selecount--;
  915.                      if(ptr->sele=='Y')
  916.                        ptr->sort=selecount;
  917.                      else
  918.                         ptr->sort=0;
  919.                      if(j==10)
  920.                         key2=RIGHT;
  921.                       else
  922.                        if((ptr->next!=NULL)&&(i!=10))
  923.                            {  print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  924.                           print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->mean);
  925.                           disp_bpart(ptr);
  926.                           print(4,10,6|1,"%02d",selecount);
  927.                           j=10;
  928.                           ptr=ptr->last;
  929.                           key2=DOWN;
  930.                          }
  931.                         else
  932.                          key2=RIGHT;
  933.                       print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  934.                       disp_bpart(ptr);
  935.                       print(4,10,6|1,"%02d",selecount);
  936.                        goto mv1;
  937.                   }
  938.                  else
  939.                   {  if(maxcount==6)
  940.                        error("╦∙╤í╡─┴¼╜╙▓┘╫≈┐Γ▓╗─▄│¼╣²┴∙╕÷");
  941.                       else
  942.                         error("┤╦─ú┐Θ╓╗╓º│╓╡Ñ┐Γ▓┘╫≈");
  943.                       getcc();
  944.                       bottom();
  945.                       if(j==10)
  946.                         key2=RIGHT;
  947.                       else
  948.                         if((ptr->next!=NULL)&&(i!=10))
  949.                          {  print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  950.                             print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->mean);
  951.                             disp_bpart(ptr);
  952.                             print(4,10,6|1,"%02d",selecount);
  953.                             j=10;
  954.                             ptr=ptr->last;
  955.                             key2=DOWN;
  956.                          }
  957.                           else key2=RIGHT;
  958.                        print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  959.                        disp_bpart(ptr);
  960.                        print(4,10,6|1,"%02d",selecount);
  961.                        goto mv1;
  962.                   }
  963.               }
  964.              else
  965.               { error("don't use same file in many select!");
  966.                 getcc();
  967.                 bottom();
  968.                }
  969.            }
  970.           else
  971.            {   ptr->sele=(ptr->sele=='N'? 'Y':'N');
  972.  
  973.                if (ptr->sele=='Y') opbase[selecount]=ptr;
  974.                        else
  975.                           {
  976.               for (selectc=0;selectc<selecount && opbase[selectc]!=ptr;selectc++);
  977.               for (;selectc<selecount-1;selectc++) opbase[selectc]=opbase[selectc+1];
  978.                           opbase[selectc]=NULL;
  979.                           }
  980.                        ptr->sele=='Y'? selecount++:selecount--;
  981.                if(ptr->sele=='Y')
  982.                   ptr->sort=selecount;
  983.             else
  984.                   ptr->sort=0;
  985.             if(j==10)
  986.                  key2=RIGHT;
  987.             else
  988.                  if((ptr->next!=NULL)&&(i!=10))
  989.                    { print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  990.                      print(i,j,(ptr->sele=='Y'? 0|113:6|1),"%s",ptr->mean);
  991.                      disp_bpart(ptr);
  992.                      print(4,10,6|1,"%02d",selecount);
  993.                      j=10;
  994.                      ptr=ptr->last;
  995.                      key2=DOWN;
  996.                     }
  997.                  else
  998.                    key2=RIGHT;
  999.              print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  1000.              disp_bpart(ptr);
  1001.              print(4,10,6|1,"%02d",selecount);
  1002.              goto mv1;
  1003.            }
  1004.         break;
  1005. /*        case F1:*/
  1006.         case F2:          /*allselect*/
  1007.            ptr1=ptr;
  1008.            ptr=ptr2;
  1009.            k=0;
  1010.           while((ptr!=NULL)&&(k<10))  {
  1011.             ptr->sele=='Y'? selecount--:delay(0);
  1012.             ptr->sele='Y';
  1013.             selecount++;
  1014.             ptr=ptr->next;
  1015.             k++;   }
  1016.            ptr1=disp_opbase(ptr);
  1017.            ptr=ptr1;
  1018.            break;
  1019.         case F3:          /*all not select*/
  1020.           ptr1=ptr;
  1021.           ptr=ptr2;
  1022.            k=0;
  1023.           while((ptr!=NULL)&&(k<10))
  1024.           {
  1025.            ptr->sele=='N'? selecount++:delay(0);
  1026.            ptr->sele='N';
  1027.            selecount--;
  1028.            ptr=ptr->next;
  1029.            k++;
  1030.            }
  1031.            ptr1=disp_opbase(ptr);
  1032.            ptr=ptr1;
  1033.            break;
  1034.         case F6:
  1035.          ptr=root;
  1036.          selecount=0;
  1037.          while(ptr!=NULL)
  1038.           {
  1039.            ptr->sele='N';
  1040.            ptr=ptr->next;
  1041.            }
  1042.           return(-1);
  1043.         case F4:
  1044.          if(maxcount==10)
  1045.              if(fin==1)
  1046.             return(1);
  1047.               else
  1048.             continue;
  1049.          else
  1050.               return(1);
  1051.         default:
  1052.                  printf("\007");
  1053.                  break;
  1054.        }   /*endswitch*/
  1055.         print(i,j,(ptr->sele=='Y'? 0|113:0|75),"%s",ptr->mean);
  1056.          disp_bpart(ptr);
  1057.          print(4,10,6|1,"%02d",selecount);
  1058.         }/*end for*/
  1059. }
  1060.  
  1061.  
  1062. /*----------------------------DISP DATABASE  OF A PAGE--------------------------*/
  1063. struct MM *disp_opbase(ptr)
  1064.  struct MM *ptr;
  1065.  {
  1066.  register int i,j;
  1067.  i=0;j=10;
  1068.    clear_win(5,4,9,76,6,0,black);
  1069.      disp_bmess(ptr);
  1070.    while((ptr!=NULL)&&(i<5))
  1071.      {
  1072.       print(i+6,j,(ptr->sele=='N'? 6|1:0|113),"%s",ptr->mean);
  1073.       i=(j==10? i : i+1);
  1074.       j=(j==10? 40: 10);
  1075.       ptr=ptr->next;
  1076.       }
  1077.      return(ptr);
  1078.   }
  1079.  
  1080. /*----------------------------DISP A PAGE FOR FIELD-----------------------*/
  1081.  struct PPP *disp_field(ptr,flag)
  1082.    struct PPP *ptr;
  1083.    int flag;
  1084.  { register int i,j;
  1085.    clear_win(5,4,9,76,6,0,black);
  1086.    i=0;j=10;
  1087.   disp_fmess(ptr);
  1088.    while((ptr!=NULL)&&(i<5)) {
  1089.      if(flag==0)
  1090.     print(i+6,j,(ptr->sele=='N'? 6|1:0|113),"%s",ptr->field);
  1091.      if(flag==1)
  1092.     print(i+6,j,(ptr->cla<=0? 6|1:0|113),"%s",ptr->field);
  1093.        i=(j==10? i: i+1);
  1094.        j=(j==10? 40:10);
  1095.        ptr=ptr->next; }
  1096.        return(ptr);
  1097.     }/*end fountion*/
  1098. /*--------------------------DISP HEAD DATABASE MESSAGE----------------------*/
  1099.  disp_bmess(ptr)
  1100.   struct MM *ptr;
  1101.   {
  1102.    clear_win(15,4,20,76,6,0,black);
  1103.    print(16,10,6|1,"╕├▓┘╫≈╣▓╙╨:%-d ╕÷┐╔╤í┐Γ",basecount);
  1104.    print(16,40,6|1,"─·╥╤╤í╘±:%-d ╕÷┐Γ",selecount);
  1105.    print(18,10,6|1,"╡▒╟░┐Γ╡─╬─╝■├√(.dbf):%-*s",8,ptr->dbname);
  1106.    print(18,40,6|1,"╡▒╟░┐Γ╡─╓≈╣╪╝ⁿ╫╓╬¬:%-*s",11,ptr->mainkey[0]);
  1107.    print(20,10,6|1,"╡▒╟░┐Γ╩╟╖±╬¬╣▓╧φ┐Γ: %s",(ptr->serve=='Y' ? "╩╟":"╖±"));
  1108.    print(20,40,6|1,"╡▒╟░┐Γ╡─┬╖╛╢ %-*s",25,(ptr->serve=='Y' ? ptr->path:PATH));
  1109.   }
  1110. /* --------------------------DISP PART DATABASE MESSAGE----------------------*/
  1111.   disp_bpart(ptr)
  1112.   BASE *ptr; {
  1113.    printf("\033[16;21H\033[0;37;40m%-d",basecount);
  1114.    printf("\033[16;49H%-d",selecount);
  1115.    printf("\033[18;24H(.dbf):%-*s",8,ptr->dbname);
  1116.    printf("\033[18;59H%-*s",11,ptr->mainkey[0]);
  1117.    printf("\033[20;30H%s",(ptr->serve=='Y' ? "╩╟":"╖±"));
  1118.    printf("\033[20;53H%-*s",25,(ptr->serve=='Y' ? ptr->path:PATH));
  1119.    }
  1120. /*---------------------------DISP HEAD FIELD MESSAGE---------------------------*/
  1121.   disp_fmess(ptr)
  1122.   struct PPP *ptr;
  1123.    {
  1124.    clear_win(15,4,20,76,6,0,black);
  1125.    print(15,20,6|1,"┐╔╥╘┤╙╓╨╤í╚í╫╓╢╬╡─┐Γ╣▓╙╨:%-d╕÷",selecount);
  1126.    print(16,10,6|1,"╡▒╟░╫╓╢╬╡─└α╨═:%c",ptr->type);
  1127.    print(16,30,6|1,"╡▒╟░╫╓╢╬╡─╙≥┐φ:%2d",ptr->length);
  1128.    print(16,50,6|1,"╡▒╟░╫╓╢╬╡─╨í╩²╙≥┐φ:%2d", ptr->dec);
  1129.    print(18,10,6|1,"╡▒╟░┐Γ╡─╬─╝■├√(.dbf):%-*s",8,root2->dbname);
  1130.    print(18,40,6|1,"╡▒╟░┐Γ╡─▓╦╡Ñ├√:%-*s",11,root2->mean);
  1131.    print(20,10,6|1,"╡▒╟░┐Γ╩╟╖±╬¬╣▓╧φ┐Γ: %s",(root2->serve=='Y' ? "╩╟":"╖±"));
  1132.    print(20,40,6|1,"╡▒╟░┐Γ╡─┬╖╛╢ %-*s",25,(root2->serve=='Y' ? root2->path:PATH));
  1133.   }
  1134. /*----------------------DISP  FIELD CHANGE  PART MESSAGE--------------------*/
  1135.   disp_fpart(ptr)
  1136.    FIELD *ptr; {
  1137.    printf("\033[15;45H\033[0;37;40m%-d",selecount);
  1138.    printf("\033[16;25H%c",ptr->type);
  1139.    printf("\033[16;45H%2d",ptr->length);
  1140.    printf("\033[16;69H%2d",ptr->dec);
  1141.    printf("\033[18;24H(.dbf):%-*s",8,root2->dbname);
  1142.    printf("\033[18;55H%-*s",11,root2->mean);
  1143.    printf("\033[20;30H%s",(root2->serve=='Y' ? "╩╟":"╖±"));
  1144.    printf("\033[20;53H%-*s",25,(root2->serve=='Y' ? root2->path:PATH));
  1145.     }
  1146. /*----------------------------WRITE BOTTOM-------------------------------*/
  1147. bottom()
  1148.  {
  1149.   print(24,1,6|1," í·í√íⁿí²:╥╞╢»╣Γ▒Ω   F5╗≥╗╪│╡:╤í╓╨/▓╗╤í  F4:╠ß╜╗  PgUp/PgDn╖¡╥│   Home/End╤í┐Γ ");
  1150. }
  1151.  
  1152. /*--------------------------DISP NEXT MENU----------------------------------*/
  1153.  menu2(sub)
  1154.  int sub;
  1155.  {  int i,key2;
  1156.     int row;
  1157.    if (sub==-1) sub=0;
  1158.    clear_win(0,0,24,79,6,0,cyan);
  1159. /*   clear_win(6,15,18,67,6,0,black);*/
  1160.    clear_win(5,10,18,73,6,0,black);
  1161.    clear_win(4,7,17,71,6,0,blue);
  1162.    mgframe(6,10,18,69,0,0|30);
  1163. /*   print(19,11,0|30,"%*s",59," ");
  1164.    clear_win(6,15,16,63,6,0,blue);*/
  1165.    print(6,30,0|30,"═│╝╞╙δ╝╞╦π─ú┐Θ╣ª─▄▓╦╡Ñ");
  1166.    for(i=0;i<9;i++)
  1167.        print(8+i,30,0|30,"%s",title3[i]);
  1168.    row=sub+8;
  1169.    print(8+sub,30,0|113,"%s",title3[sub]);
  1170.   for(;;)
  1171.     {  key2=getcc();
  1172.        print(row,30,0|30,"%s",title3[sub]);
  1173.        switch(key2)
  1174.       {  case UP:
  1175.         if(row>8)
  1176.             {   row--;
  1177.             sub--;
  1178.             }
  1179.          else
  1180.             {
  1181.                row=16;
  1182.                sub=8;
  1183.              }
  1184.           break;
  1185.        case DOWN:
  1186.         if(row<16)
  1187.             {  row++;
  1188.                sub++;
  1189.             }
  1190.         else
  1191.             {
  1192.                row=8;
  1193.                sub=0;
  1194.             }
  1195.            break;
  1196.      case F6: /*EXIT(1)*/
  1197.          clear_win(0,0,24,79,6,0,cyan);
  1198.          return(-1);
  1199.      case Enter:
  1200.          clear_win(0,0,24,79,6,0,cyan);
  1201.          return(sub);
  1202.      default: printf("\007"); break;
  1203.       } /*end switch*/
  1204.        print(row,30,0|113,"%s",title3[sub]);
  1205.     } /*end for*/
  1206.   } /*end sun_menu*/
  1207.  
  1208. /*-----------------READ DATABASE MEAN NAME MAINKEY ect-------------------------*/
  1209.  
  1210.  read_base()
  1211.  {
  1212.   char *s;
  1213.  if((fp1=fopen("db.txt","r"))==NULL)  {
  1214.     printf("\033[23;5H\033[1;31;40m don't open db.txt");
  1215.     exit(0);   }
  1216.   else   {
  1217.     root=NULL;
  1218.     while(!feof(fp1))      {
  1219.        get_root();
  1220.        if(root==NULL) {
  1221.      root=root1;
  1222.      root3=root1; }
  1223.        else     {
  1224.       root1->last=root2;
  1225.       root1->next=root2->next;
  1226.       if(root2->next!=NULL)
  1227.           (root2->next)->last=root1;
  1228.       root2->next=root1;      }
  1229.      root2=root1;
  1230.      root3=root1;
  1231.      fscanf(fp1,"#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%[^#]#,#%c#,#%c#,#%[^#]#\n",\
  1232.      root2->mean,root2->mainkey[0],root2->mainkey[1],root2->mainkey[2],root2->mainkey[3],\
  1233.      root2->dbname,&root2->flag,&root2->serve,root2->path);
  1234.      if(root2->serve=='N')
  1235.           strcpy(root2->path,PATH);
  1236.      basecount++;       }                           /* get a dbname */
  1237.        fclose(fp1);
  1238.     } /*elseend*/
  1239. }/*end read_base*/
  1240.  
  1241. /*-------------------------READ A DATABASE OF STRUTURE---------------------------*/
  1242.  read_stru()
  1243.  {
  1244.   int i;
  1245.   char temp[30];
  1246.    root2=root;
  1247.    for(i=0;i<11;i++)
  1248.     temp[i]='\0';
  1249.    while(root2!=NULL)
  1250.     {
  1251.       strcpy(temp,PATH);
  1252.       strcat(temp,"\\");
  1253.       strcat(temp,root2->dbname);
  1254.       strcat(temp,".txt");
  1255.       if((fp2=fopen(temp,"r"))==NULL)
  1256.        {
  1257.      printf("\033[23;5H\033[1;31;40mdon't found file");
  1258.      exit(1);
  1259.        }
  1260.       else
  1261.     while(!feof(fp2))
  1262.      {
  1263.        getmem();
  1264.        if(root2->sstr==NULL)
  1265.          root2->sstr=p1;
  1266.        else
  1267.         {
  1268.          p1->last=p2;
  1269.          p1->next=p2->next;
  1270.          if(p2->next!=NULL)
  1271.            (p2->next)->last=p1;
  1272.          p2->next=p1;
  1273.         }
  1274.        p2=p1;
  1275.        root2->estr=p1;
  1276.        fscanf(fp2,"#%[^#]#,#%c#,%d,%d\n",p2->field,&p2->type,&p2->length,&p2->dec);
  1277.      }
  1278.      fclose(fp2);
  1279.      root2=root2->next;                     /* get a base's structure */
  1280.       } /*else pointer*/
  1281.  
  1282.   }     /*end read_stru*/
  1283. /*-----------------------------GET MEMORY FOR FIELD--------------------------*/
  1284.   getmem()
  1285.     {
  1286.       int i;
  1287.       p1=(struct PPP *) malloc(sizeof(struct PPP));
  1288.  
  1289.       p1->next=NULL;
  1290.       p1->last=NULL;
  1291.       for(i=0; i<11; ++i)
  1292.      p1->field[i]='\0';
  1293.        p1->type=' ';
  1294.        p1->sele='N';
  1295.        p1->obj='N';
  1296.        p1->cla=0;
  1297.        p1->length=0;
  1298.        p1->dec=0;
  1299.     }
  1300. /*------------------------GET MEMORY FOR DATABASE----------------------------*/
  1301.   get_root(){
  1302.   int i,j;
  1303.   root1=(struct MM *) malloc(sizeof(struct MM));
  1304.   root1->last=root1->next=NULL;
  1305.   for (i=0; i<30; ++i)
  1306.     root1->mean[i]='\0';
  1307.   for(i=0;i<11;i++)
  1308.     root1->dbname[i]='\0';
  1309.   for(i=0;i<30;i++)
  1310.     root1->path[i]='\0';
  1311.   for(i=0;i<4;i++ )
  1312.     for(j=0;j<11;j++)
  1313.       root1->mainkey[i][j]='\0';
  1314.   root1->sstr=NULL;
  1315.   root1->flag=0;
  1316.   root1->serve=0;
  1317.   root1->sele='N';
  1318.   root1->join='N';
  1319.   root1->sort=0;
  1320.   root1->sstr=NULL;
  1321.   root1->estr=NULL;
  1322.   }
  1323.  
  1324. /*--------------------------CLEAR SCREEN------------------------------*/
  1325. clear_win(startx,starty,endx,endy,action,line,attribe)
  1326. int startx,starty;
  1327. int endx,endy;
  1328. int action,line,attribe;
  1329. {
  1330. union REGS r;
  1331.  
  1332. r.h.ah=action;
  1333. r.h.al=line;
  1334. r.h.bh=attribe;
  1335. r.h.ch=startx;
  1336. r.h.cl=starty;
  1337. r.h.dh=endx;
  1338. r.h.dl=endy;
  1339. int86(0x10,&r,&r);
  1340. return;
  1341.  
  1342. }
  1343. /*-------------------------------READ A CHARACTOR---------------------------*/
  1344.  
  1345.    getcc(){
  1346.    union REGS r;
  1347.    r.h.ah=0;
  1348.    int86(0x16,&r,&r);
  1349.    if (r.h.al==27) exit(0);
  1350.    if (r.h.al) return(r.h.al);
  1351.    return(r.x.ax);
  1352.   }
  1353.  
  1354. /*-------------------------OUTPUT-------------------------------------*/
  1355.  
  1356.    print(int prow,int pcol,int attr,char *format,...)
  1357. {
  1358.     va_list arg;
  1359.     char print_str[254],*string;
  1360.     va_start(arg,format);
  1361.     vsprintf(print_str,format,arg);
  1362.     string=print_str;
  1363.   _SI =(unsigned int) string;
  1364.   _DH =(unsigned char)prow-1;
  1365.   _DL =(unsigned char)pcol-1;
  1366.   _CX=1;
  1367.    while(*((char *)_SI)){
  1368.    _AH=(unsigned char)2;
  1369.    _BH=(unsigned char)0;
  1370.    geninterrupt(0x10);
  1371.    ++_DL;
  1372.   _AH=(unsigned char)9;
  1373.   _AL=*((char *)_SI);
  1374.   _SI++;
  1375.   _BH=(unsigned char)0;
  1376.   _BL=(unsigned char)attr;
  1377.   geninterrupt(0x10);
  1378.  }
  1379. }
  1380.  
  1381. /*-----------------------------DRAW A  FRAME-------------------------------*/
  1382. gframe(startx,starty,endx,endy,i,color)
  1383.  int startx,starty;
  1384.  int endx,endy;
  1385.  int i;
  1386.  int color;
  1387. {
  1388. static char dd[3][6][3]={
  1389.       "⌐Ñ","⌐º","⌐│","⌐╖","⌐╗","⌐┐",
  1390.       "⌐ñ","⌐ª","⌐░","⌐┤","⌐╕","⌐╝" ,
  1391.       "  ","  ","  ","  ","  ","  "
  1392.                      };
  1393. int row,col;
  1394. clear_win(startx,starty,endx,endy,6,0,black);
  1395. print(startx,starty,color,"%s",dd[i][2]);
  1396. for(col=starty+2; col<endy; col+=2)
  1397.    print(startx,col,color,"%s",dd[i][0]);
  1398. print(startx,endy,color,"%s",dd[i][3]);
  1399.  
  1400. for(row=startx+1; row<endx; ++row)
  1401. {   print(row,starty,color,"%s",dd[i][1]);
  1402.    print(row,endy,color,"%s",dd[i][1]);}
  1403.  
  1404. print(endx,starty,color,"%s",dd[i][4]);
  1405.   for(col=starty+2; col<endy; ++col,++col)
  1406.        print(endx,col,color,"%s",dd[i][0]);
  1407. print(endx,endy,color,"%s",dd[i][5]);
  1408. }
  1409.  
  1410.  
  1411.  
  1412. /*-----------------------------DRAW A menu FRAME-------------------------------*/
  1413. mgframe(startx,starty,endx,endy,i,color)
  1414.  int startx,starty;
  1415.  int endx,endy;
  1416.  int i;
  1417.  int color;
  1418. {
  1419. static char dd[3][6][3]={
  1420.       "⌐Ñ","⌐º","⌐│","⌐╖","⌐╗","⌐┐",
  1421.       "⌐ñ","⌐ª","⌐░","⌐┤","⌐╕","⌐╝" ,
  1422.       "  ","  ","  ","  ","  ","  "
  1423.                      };
  1424. int row,col;
  1425. print(startx,starty,color,"%s",dd[i][2]);
  1426. for(col=starty+2; col<endy; col+=2)
  1427.    print(startx,col,color,"%s",dd[i][0]);
  1428. print(startx,endy,color,"%s",dd[i][3]);
  1429.  
  1430. for(row=startx+1; row<endx; ++row)
  1431. {   print(row,starty,color,"%s",dd[i][1]);
  1432.    print(row,endy,color,"%s",dd[i][1]);}
  1433.  
  1434. print(endx,starty,color,"%s",dd[i][4]);
  1435.   for(col=starty+2; col<endy; ++col,++col)
  1436.        print(endx,col,color,"%s",dd[i][0]);
  1437. print(endx,endy,color,"%s",dd[i][5]);
  1438. }
  1439.  
  1440. /*---------------------------SELECT COLOR-------------------------------*/
  1441. make_color(){
  1442.  int i,j,k;
  1443.  int ten;
  1444.   clear_win(0,0,24,79,6,0,black);
  1445.  print(1,5,0|30,"**%s**",title2[sub2]);
  1446.  print(1,55,0|30,"**ESC->╓╨╢╧═╦│÷**");
  1447.  print(5,25,6|1,"╙ª╙├╧╡═│╡─╤╒╔½▒φ");
  1448.  gframe(6,10,11,60,0,0|30);
  1449.  i=7;j=20;k=0;
  1450.  while(i<11) {
  1451.    print(i,j,6|1,"%s",color[k++]);
  1452.    i=(j==40? i+1:i);
  1453.    j=(j==40? j=20:40);  }
  1454.  print(13,18,6|1,"╟δ╤í╘±╤╒╔½╨≥║┼:");
  1455.  printf("\033[23;1H\033[0;0;7m%*s",79," ");
  1456.  if((sub1==0)&&(sub2==0))
  1457.       printf("\033[23;21H╧╡═│╚▒╩í╟░╛░╔½╬¬:\033[1;33;44m'╗╞╔½'(gr+)\033[0;0;7m");
  1458.   else
  1459.       printf("\033[23;21H╧╡═│╚▒╩í▒│╛░╔½╬¬:\033[1;33;44m'└╝╔½'( B )\033[0;0;7m");
  1460.  for(;;) {
  1461.    fflush(stdin);
  1462.    printf("\033[13;34H");
  1463.    scanf("%d",&ten);
  1464.    if((ten<0)||(ten>7)) {
  1465.       printf("\007");
  1466.       clear_win(12,0,12,78,6,0,black);
  1467.       print(13,18,6|1,"╖┼╞·╤í╘±┬≡ú┐: ");
  1468.       ten=getcc();
  1469.       if((ten=='Y')||(ten=='y')) {
  1470.          ten=(sub2==0? 7:0);
  1471.          break; }
  1472.        else { clear_win(12,0,12,70,6,0,black);
  1473.           print(13,18,6|1,"╟δ╤í╘±╤╒╔½╨≥║┼: ");} }/*endif*/
  1474.    else break; }
  1475.    return(ten);
  1476.    }
  1477.  
  1478. /*------------------------------------CHECK              ------------------*/
  1479.   check(r,ptr,ff)
  1480.     FIELD  *ptr;
  1481.     BASE *r;
  1482.     int ff;
  1483.  {   BASE *root6;
  1484.      FIELD *p5;
  1485.      root6=r;
  1486.      while(root6!=NULL) {
  1487.        if(root6->sele=='Y') {
  1488.      p5=root6->sstr;
  1489.      while(p5!=NULL) {
  1490.         if((p5->sele=='Y')&&(p5!=ptr))
  1491.            if((strcmp(p5->field,ptr->field))==0) {
  1492.            error("╦∙╤í╫╓╢╬▓╗─▄╓╪╕┤úí");
  1493.            getcc();
  1494.            print(24,1,6|1,"%-80s"," ");
  1495.            bottom();
  1496.            if(ff==1) return(-1);
  1497.            ptr->sele='N';
  1498.            fselecount--;
  1499.            return(-1); }
  1500.         p5=p5->next;   } /*endwhile*/
  1501.             } /*endif*/
  1502.        root6=root6->next;} /*endwhile*/
  1503.   }/*end fountion*/
  1504.  
  1505. /*---------------------------------CHECK    --------------------------------------*/
  1506.  checkey() {
  1507.    int i;
  1508.    root2=root;
  1509.    i=0;
  1510.    while(root2!=NULL) {
  1511.      p2=root2->sstr;
  1512.     while(p2!=NULL)
  1513.      if((strcmp(root2->mainkey[0],p2->field))==0) {i=1;break;}
  1514.      else p2=p2->next;
  1515.      if(i==0) {print(23,10,6|1,"╙╨┤φ╡─┐Γ╬─╝■├√:%-s;╢╘╙ª╡─▓╦╡Ñ╠ß╩╛├√╬¬:%s",root2->dbname,root2->mean);
  1516.            error("╣╪╝ⁿ╫╓▓╗╞Ñ┼Σ,╟δ╝∞▓Θúí"); exit(1);}
  1517.      i=0;
  1518.      root2=root2->next; }
  1519. }
  1520.  
  1521. /*------------------------------READ A EMNUNAME-----------------------------*/
  1522. r_mean()
  1523.  {
  1524.   if(selecount>=1)
  1525.        {  clear_win(1,0,24,79,6,0,black);
  1526.       gframe(5,10,11,68,0,0|30);
  1527. h:        print(7,20,6|1,"╟δ╩Σ╚δ▒╛┤╬▓┘╫≈╡─▓╦╡Ñ╠ß╩╛├√: ");
  1528.       scanf("%s",workname);
  1529.       root2=root;
  1530.       while(root2!=NULL)
  1531.            {  if((strcmp(workname,root2->mean))==0)
  1532.               {  error("╦∙╝╙▓╦╡Ñ╠ß╩╛├√▓╗─▄╙δ╥╤╙╨╡─╓╪╕┤úí");
  1533.              bottom();
  1534.              goto   h;
  1535.               }
  1536.           root2=root2->next;
  1537.            }
  1538.        }
  1539.  else
  1540. /*    if(selecount==1)
  1541.         { root2=root;
  1542.           while(root2!=NULL)
  1543.             if(root2->sele=='Y') break;
  1544.             else root2=root2->next;
  1545.           strcpy(workname,root2->mean);
  1546.         }
  1547.     else*/
  1548.        { error("╟δ╧╚╤í▓┘╫≈┐Γúí");
  1549.          workname[0]='\0';
  1550.          getcc();
  1551.        }
  1552.  }
  1553.  
  1554.  
  1555. /*--------------------------CHECK LINKFIELD-------------------------------*/
  1556.  checklink(p)
  1557.    struct PPP *p;
  1558.    {
  1559.    struct MM *rr;
  1560.    struct PPP *pp;
  1561.    int su,count;
  1562.      if((linktype=='C')||(linktype=='c'))
  1563.      rr=root4;
  1564.      else
  1565.      rr=root2;
  1566.      pp=rr->sstr;
  1567.      while(pp!=NULL)
  1568.        if(strcmp(pp->field,p->field)==0) break;
  1569.        else pp=pp->next;
  1570.      if(pp==NULL)
  1571.      return(-1);
  1572.      else
  1573.       return(1);
  1574.     }
  1575.  
  1576.  
  1577.  
  1578.  
  1579. /*-------------------------------SELE CONDITION-----------------------------------*/
  1580.  sele_con(ptr)
  1581.  FIELD *ptr; {
  1582.   int i,key;
  1583.   clear_win(14,4,21,76,6,0,black);
  1584.   get_con(ptr);
  1585.   for(i=0;i<6;i++)
  1586.     print(18,10*i+10,6|1,"%s",con[i]);
  1587.   print(18,10,0|75,"%s",con[0]);
  1588.   i=0;
  1589.   while(1) {
  1590.     key=getcc();
  1591.     print(18,i*10+10,6|1,con[i]);
  1592.     switch(key) {
  1593.        case LEFT:
  1594.         if(i==0) printf("\007");
  1595.         else i--;
  1596.          break;
  1597.        case RIGHT:
  1598.         if(i==5) printf("\007");
  1599.         else i++;
  1600.         break;
  1601.        case Enter:
  1602.          if(i!=5) {strcat(condition,con[i]); return(0);}
  1603.          else return(1);
  1604.       deflaut : printf("\007"); }
  1605.       print(18,i*10+10,0|75,con[i]);
  1606.       }
  1607.   }
  1608.  
  1609. /*---------------------------------GET CONDITION--------------------------------*/
  1610.  
  1611.    get_con(ptr)
  1612.    FIELD *ptr;
  1613.    {
  1614.    int i,key;
  1615.    char *chr[]={" <"," ="," >","<=","<>",">="};
  1616.    char c[50];
  1617.    char log[3];
  1618.    int n;
  1619.    switch(ptr->type) {
  1620.     case 'N':
  1621.     case 'n':
  1622.      print(15,20,6|1,"╟δ╦∙╤í╫╓╢╬╡─╛▀╠σ╓╡");
  1623.      printf("\033[20;20H ╙├ 'í·' ║═ 'í√' ╤í╘╦╦π╖√; **Enter->╤í╓╨**");
  1624.      print(17,10,6|1,"%s ",ptr->field);
  1625.      printf("\033[17;%uH",strlen(ptr->field)+12);
  1626.      i=0;
  1627.      printf("%s",chr[i]);
  1628.      for(;;) {
  1629.      key=getcc();
  1630.      switch(key) {
  1631.     case RIGHT: if(i<5) i++;
  1632.             else printf("\007");
  1633.             break;
  1634.     case LEFT: if(i>0) i--;
  1635.             else printf("\007");
  1636.             break;
  1637.     case Enter:  strcat(condition,chr[i]);
  1638.             goto kk;
  1639.     default: printf("\007"); break;
  1640.          }
  1641.     printf("\033[17;%uH",strlen(ptr->field)+12);
  1642.     printf("%s",chr[i]);
  1643.     }
  1644.  
  1645.  kk:  printf("\033[17;%uH",strlen(ptr->field)+15);
  1646.      scanf("%d",&n);
  1647.      itoa(n,c,10);
  1648.      strcat(condition,c);
  1649.       break;
  1650.     case 'C':
  1651.     case 'c':
  1652.       print(17,10,6|1,"%s= ",ptr->field);
  1653.       scanf("%s",c);
  1654.       strcat(condition,"='");
  1655.       strcat(condition,c);
  1656.       strcat(condition,"'");
  1657.        break;
  1658.     case 'l':
  1659.     case 'L':
  1660.      print(17,10,6|1,"%s= ",ptr->field);
  1661.      clear_win(14,10,18,76,6,0,black);
  1662.      for(;;) {
  1663.        log[0]=getcc();
  1664.        if((log[0]!='T')&&(log[0]!='F')&&(log[0]!='f')&&(log[0]!='t')) printf("\007");
  1665.        else {strcat(condition,"=.");
  1666.          log[1]='\0';
  1667.          strcat(condition,log);
  1668.          strcat(condition,".");
  1669.          break;}
  1670.          }
  1671.       break;
  1672.     case 'D':
  1673.     case 'd':
  1674.        print(15,20,6|1,"╟δ╩Σ╚δ╚╒╞┌╨═╫╓╢╬╡─╓╡->╕±╩╜╚τ╧┬:mm/dd/yy");
  1675.        print(17,10,6|1,"%s ",ptr->field);
  1676.        printf("\033[17;%uH",strlen(ptr->field)+12);
  1677.        i=0;
  1678.        printf("%s",chr[i]);
  1679.       for(;;) {
  1680.       key=getcc();
  1681.      switch(key) {
  1682.     case RIGHT: if(i<6) i++;
  1683.             else printf("\007");
  1684.             break;
  1685.     case LEFT: if(i>0) i--;
  1686.             else printf("\007");
  1687.             break;
  1688.     case Enter:  strcat(condition,chr[i]);
  1689.             goto k1;
  1690.     default: printf("\007"); break;
  1691.          }
  1692.     printf("\033[17;%uH",strlen(ptr->field)+12);
  1693.     printf("%s",chr[i]);
  1694.     }
  1695.  
  1696.  k1:  printf("\033[17;%uH",strlen(ptr->field)+15);
  1697.       printf("  /  /  ");
  1698.       for(;;) {
  1699.       printf("\033[17;%uH",strlen(ptr->field)+15);
  1700.       scanf("%02d",&key);
  1701.       if((key>12)||(key<=0))printf("\007");
  1702.       else break; }
  1703.       itoa(key,c,10);
  1704.       strcat(condition,c);
  1705.       c[0]='/';
  1706.       c[1]='\0';
  1707.       strcat(condition,c);
  1708.       for(;;) {
  1709.       printf("\033[17;%uH",strlen(ptr->field)+18);
  1710.       scanf("%02d",&key);
  1711.       if((key>31)||(key<=0)) printf("\007");
  1712.       else break; }
  1713.       itoa(key,c,10);
  1714.       strcat(condition,c);
  1715.       c[0]='/';
  1716.       c[1]='\0';
  1717.       strcat(condition,c);
  1718.       for(;;) {
  1719.        printf("\033[17;%uH",strlen(ptr->field)+21);
  1720.        scanf("%02d",&key);
  1721.        if(key>0) break;
  1722.        else printf("\007"); }
  1723.        itoa(key,c,10);
  1724.        strcat(condition,c);
  1725.     default: printf("\007");break;
  1726.       }
  1727.    clear_win(14,8,21,76,6,0,black);
  1728.  }
  1729.  
  1730. /*------------------------------WRITE COLOP.TXT-------------------------------*/
  1731.   w_color() {
  1732.      FILE *fq;
  1733.   if((fq=fopen("color.txt","w"))==NULL)
  1734.      {
  1735.        printf("don't open color.txt");
  1736.     printf("\007");
  1737.     exit(0); }
  1738.   else
  1739.       {
  1740.        fprintf(fq,"#%s#,#%s#,#%s#\n",shift[froecolor],shift[backcolor],frame==0? "  ":"doub");
  1741.        fclose(fq); }
  1742.       }
  1743.  
  1744.  
  1745. /*-----------------------------ONE LINE EDITOR---------------------------------*/
  1746.  oneline(pos,fixlen,dislen,fldin)
  1747.  int pos,fixlen,dislen;
  1748. char *fldin;
  1749. {
  1750.  int in,count=0,i,insert=0,sum;
  1751.  int row=10,col=10;
  1752.  char *str;
  1753.  char *tstr;
  1754.  char tem;
  1755.  tstr=(char *)malloc(sizeof(char)*(dislen+1));
  1756.  ncpy(tstr,fldin,0,dislen);
  1757.  printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1758.  row=17;col=pos;
  1759.  for(;;){
  1760.  printf("\033[%u;%uH",row,col);
  1761.  in=getcc();
  1762.  switch(in){
  1763.     case RIGHT:
  1764.         if(fldin[col-pos+count]=='\0'){printf("\007");continue;}
  1765.         {
  1766.         if(col<(pos+dislen-1))
  1767.             {
  1768.                 col++;
  1769.                 continue;
  1770.              }
  1771.           else
  1772.             {
  1773.                 count++;
  1774.                 if(count<strlen(fldin))
  1775.                     ncpy(tstr,fldin,count,dislen);
  1776.                 else
  1777.                     ncpy(tstr,fldin,count,strlen(fldin));
  1778.             }
  1779.          }
  1780.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1781.         continue;
  1782.     case LEFT:
  1783.         if(col==pos && count==0){printf("\007");continue;}
  1784.         else
  1785.         {
  1786.         if(col>pos)
  1787.             {
  1788.                 col--;
  1789.                 continue;
  1790.              }
  1791.           else
  1792.             {
  1793.                 count--;
  1794.                 ncpy(tstr,fldin,count,dislen);
  1795.             }
  1796.         }
  1797.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1798.         continue;
  1799.     case Del:
  1800.         for(i=0;fldin[i]!='\0';i++);sum=i;
  1801.         if(sum==0||fldin[col-(pos)+count]=='\0')
  1802.         {
  1803.             printf("\007");
  1804.             continue;
  1805.         }
  1806.         for(i=col-(pos)+count;i<sum;i++)
  1807.              fldin[i]=fldin[i+1];
  1808.         ncpy(tstr,fldin,count,dislen);
  1809.         printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1810.         continue;
  1811.     case Ins:
  1812.         insert=(insert==0? 1:0);
  1813.         printf("\033[14;60H\033[0;37;40m%s",(insert==1? "▓σ╚δ":"╕▓╕╟"));
  1814.             continue;
  1815.  
  1816.     case Enter:
  1817.         return(1);
  1818.     default:
  1819.                     print(14,15,6|1,"╟δ═Ω╔╞╘╦╦π▒φ┤∩╩╜");
  1820.            if((unsigned char)in==0)continue;
  1821.            for(i=0;fldin[i]!='\0'&&fldin[0]!='\0';i++);sum=i;
  1822.            if(sum>=fixlen)/* && strncmp(fldin," ",sum)==0)*/
  1823.             {
  1824.                 printf("\033[24;1H\033[1;36;41mOut of Range\033[0;0;7m\007");
  1825.                 continue;
  1826.             }
  1827.                 
  1828.            if(insert==1)
  1829.             {
  1830.               for(i=sum;i>=col-pos+count;i--)
  1831.                 fldin[i]=fldin[i-1];
  1832.              fldin[sum+1]='\0';
  1833.              fldin[i+1]=(char)in;
  1834.              ncpy(tstr,fldin,count,dislen);
  1835.              }
  1836.            else
  1837.              {
  1838.             fldin[col-pos+count]=(char)in;
  1839.             ncpy(tstr,fldin,count,dislen);
  1840.             fldin[sum+1]='\0';
  1841.              }
  1842.             if(col++==(pos+dislen))
  1843.             {
  1844.                 col=pos+dislen;
  1845.                 count++;
  1846.                 if(count<strlen(fldin))
  1847.                      ncpy(tstr,fldin,count,dislen);
  1848.                 else
  1849.                      ncpy(tstr,fldin,count,strlen(fldin));
  1850.             }
  1851.             printf("\033[%u;%uH%-.*s",17,pos,dislen,tstr);
  1852.             continue;
  1853.     }
  1854.     }
  1855.  }
  1856.  
  1857. /*--------------------------------Ncopy------------------------*/
  1858.  ncpy(tstr,fldin,start,no)
  1859. char *tstr;
  1860. char *fldin;
  1861. int start,no;
  1862. {
  1863.  int i=0;
  1864.  if(start!=0)
  1865.  for(i=0;i<start;i++)fldin++;
  1866.  for(i=start;(i<start+no && (*fldin)!='\0');i++)
  1867.      *tstr++=*fldin++;
  1868.  *tstr='\0';
  1869.  }
  1870.  
  1871.  
  1872. /*--------------------------------NEXT---------------------*/
  1873.   FIELD *NEXT(ptr,f)
  1874.   FIELD *ptr;
  1875.   int f;
  1876.   {
  1877.   FIELD *ptr1;
  1878.   ptr1=ptr;
  1879.   ptr1=ptr1->next;
  1880.   if(f==0) while((ptr1->sele!='Y')&&(ptr1!=NULL)) ptr1=ptr1->next;
  1881.   else while(((ptr1->sele!='Y')||(ptr1->type!='N'))&&(ptr1!=NULL))
  1882.          ptr1=ptr1->next;
  1883.     return(ptr1); }
  1884. /*-------------------------------LAST---------------------------*/
  1885.   FIELD *LAST(ptr,f)
  1886.     FIELD *ptr;
  1887.     int f;
  1888.     {
  1889.     FIELD *ptr1;
  1890.     ptr1=ptr;
  1891.     ptr1=ptr1->last;
  1892.   if(f==0) while((ptr1->sele!='Y')&&(ptr1!=NULL)) ptr1=ptr1->last;
  1893.   else while(((ptr1->sele!='Y')||(ptr1->type!='N'))&&(ptr1!=NULL))
  1894.        ptr1=ptr1->last;
  1895.   return(ptr1); }
  1896.  
  1897. /*-------------------------------sele_f--FUNTION USE------------------------------*/
  1898.   sele_f(ptr,ptr1,ptr2,f,f2,f1)
  1899.   FIELD *ptr,*ptr1,*ptr2;
  1900.  int f,f2,f1;
  1901.  {
  1902.  int i,j,k,key2,fen,select;
  1903.  FIELD *tem,*tem1;
  1904.  char tt[2];
  1905.  ptr2=NULL;
  1906.  tt[0]=tt[1]='\0';
  1907.  fen=select=0;
  1908.  condition[0]='\0';
  1909.  if(f==2){ f=0;fen=1;}
  1910.  begin:
  1911.  if(fen==1){
  1912.    if((ptr->sele!='Y')&&(ptr!=NULL))
  1913.       ptr=NEXT(ptr,f);}
  1914.  else
  1915.     if(((ptr->sele!='Y')||(ptr->type!='N'))&&(ptr!=NULL))
  1916.        ptr=NEXT(ptr,f);
  1917.  ptr2=ptr;
  1918.  if(fen==0)
  1919.    print(4,10,6|1,"%d",ob);
  1920.    print(6,10,0|75,"%s",ptr->field);
  1921.       disp_fmess(ptr);
  1922.     i=6;j=10;
  1923.     for(;;)  {
  1924.      key2=getcc();
  1925. mv2:     if(fen==0)
  1926.         print(i,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  1927.      else
  1928.         print(i,j,6|1,"%s",ptr->field);
  1929.      switch(key2)  {
  1930.         case LEFT:
  1931.          if(j==10) printf("\007");
  1932.          else {
  1933.              j=10;
  1934.              ptr=LAST(ptr,f); }
  1935.           break;
  1936.         case RIGHT:
  1937.              if((j==40)||((NEXT(ptr,f))==NULL)) printf("\007");
  1938.           else { j=40;
  1939.             ptr=NEXT(ptr,f); }
  1940.             break;
  1941.         case UP:
  1942.           if(i==6) printf("\007");
  1943.           else {
  1944.             i--;
  1945.             ptr=LAST(ptr,f);
  1946.             ptr=LAST(ptr,f); }
  1947.            break;
  1948.         case DOWN:
  1949.               tem1=NULL;
  1950.              if((i==10)||((tem1=NEXT(ptr,f))==NULL)||((NEXT(tem1,f))==NULL)) printf("\007");
  1951.              else {
  1952.                i++;
  1953.                ptr=NEXT(ptr,f);
  1954.                ptr=NEXT(ptr,f);}
  1955.                break;
  1956.         case PgUp:
  1957.             k=0;
  1958.              tem=ptr;
  1959.              ptr=ptr2;
  1960.              while(k<10) {
  1961.               ptr=LAST(ptr,f);
  1962.              if(ptr==NULL) break;
  1963.              k++; }
  1964.            if(ptr!=NULL) {
  1965.               clear_win(5,3,9,76,6,0,black);
  1966.               ptr1=disp_f(ptr,f);
  1967.               i=6;j=10;
  1968.               ptr2=ptr; }
  1969.              else {
  1970.             ptr=tem;
  1971.             printf("\007"); }
  1972.            break;
  1973.          case PgDn:
  1974.             if(ptr1==NULL) printf("\007");
  1975.             else  {
  1976.             clear_win(5,3,9,76,6,0,black);
  1977.             ptr=ptr1;
  1978.             ptr1=disp_f(ptr,f);
  1979.             i=6;j=10;
  1980.             ptr2=ptr;   }
  1981.               break;
  1982.         case Enter:
  1983.         case F5: if(f2==1) {p2=ptr; goto en;}
  1984.           if(fen==0) {
  1985.           ptr->obj=(ptr->obj=='Y'? 'N':'Y');
  1986.           ptr->obj=='Y'? ob++:ob--;
  1987.                if(j==10)  key2=RIGHT;
  1988.            else
  1989.           if((NEXT(ptr,f)!=NULL)&&(i!=10)) {
  1990.              print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  1991.              print(i,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  1992.              disp_fpart(ptr);
  1993.              print(4,10,6|1,"%d",ob);
  1994.              j=10;
  1995.              ptr=LAST(ptr,f);
  1996.              key2=DOWN; }
  1997.            else  key2=RIGHT;
  1998.           print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  1999.             disp_fpart(ptr);
  2000.           print(4,10,6|1,"%d",ob);
  2001.           goto mv2; }
  2002.           else { if((sub1==1)&&(sub2==0))
  2003.              { tt[0]=select+65;
  2004.                strcat(condition,tt);
  2005.                strcat(condition,"->");
  2006.              }
  2007.              strcat(condition,ptr->field);
  2008.              if((sele_con(ptr))==1) {
  2009.               clear_win(15,4,18,76,6,0,black);
  2010.                print(14,30,6|1,"**Enter->╜ß╩°**");
  2011.                oneline(5,199,70,condition);
  2012.                return(1); }
  2013.                else {disp_fmess(ptr);break;}
  2014.                }
  2015. /*        case F1:*/
  2016.         case F6:
  2017.         if(fen==0) {
  2018.          ptr=p;
  2019.          ob=0;
  2020.          while(ptr!=NULL)
  2021.           {
  2022.            ptr->obj='N';
  2023.            ptr=NEXT(ptr,f);
  2024.            }    }
  2025.          else condition[0]='\0';
  2026.          return(-1);
  2027.         case F4: if((fen==1)&&(condition[0]=='\0'))
  2028.               strcpy(condition,".T.");
  2029.     en:       return(1);
  2030.         case End: /* next select's base*/
  2031.            if(f1==0)
  2032.          {
  2033.           root1=root2;
  2034.          while((root2=root2->next)!=NULL) {
  2035.            if(root2->sele=='Y') {
  2036.             ptr=root2->sstr;
  2037.             select++;
  2038.             ptr2=ptr;
  2039.             clear_win(5,4,9,76,6,0,black);
  2040.             ptr1=disp_f(ptr,f);
  2041.              i=0;j=10;
  2042.               goto begin; } /*endif*/
  2043.            }/*endwhile*/
  2044.           if(root2==NULL) {
  2045.                printf("\007");
  2046.                root2=root1; }
  2047.             }
  2048.          break;
  2049.         case Home:/*last select's base*/
  2050.            if(f1==0) {
  2051.            root1=root2;
  2052.            while((root2=root2->last)!=NULL) {
  2053.              if(root2->sele=='Y') {
  2054.              select--;
  2055.              ptr=root2->sstr;
  2056.              ptr2=ptr;
  2057.              clear_win(5,4,9,76,6,0,black);
  2058.              ptr1=disp_f(ptr,f);
  2059.             i=0;j=10;
  2060.             goto begin;}/*endif*/
  2061.             } /*endwhile*/
  2062.         if(root2==NULL) {
  2063.              printf("\007");
  2064.              root2=root1;  }
  2065.              }
  2066.         break;
  2067.         default: printf("\007");break;
  2068.           }   /*endswitch*/
  2069.         if(fen==0) {
  2070.           print(i,j,(ptr->obj=='Y'? 0|113:0|75),"%s",ptr->field);
  2071.           print(4,10,6|1,"%d",ob);}
  2072.         else
  2073.           print(i,j,0|75,"%s",ptr->field);
  2074.          disp_fpart(ptr);
  2075.         }/*end for*/
  2076.  
  2077.  }
  2078.  
  2079. /*-------------------------------disp_f()-----------------------------------*/
  2080.   FIELD *disp_f(ptr,f)
  2081.      FIELD *ptr;
  2082.      int f;
  2083.   { register int i,j;
  2084.     clear_win(5,4,9,76,6,0,black);
  2085.     i=0;j=10;
  2086.     if(f==1) {
  2087.      if(((ptr->sele!='Y')||(ptr->type!='N'))&&(ptr!=NULL)) ptr=NEXT(ptr,f);}
  2088.      else
  2089.      if((ptr->sele!='Y')&&(ptr!=NULL)) ptr=NEXT(ptr,f);
  2090.      while((ptr!=NULL)&&(i<5)) {
  2091.         if(f==0)
  2092.          print(i+6,j,6|1,"%s",ptr->field);
  2093.         else
  2094.            print(i+6,j,(ptr->obj=='Y'? 0|113:6|1),"%s",ptr->field);
  2095.            i=(j==10? i: i+1);
  2096.            j=(j==10? 40:10);
  2097.            ptr=NEXT(ptr,f);
  2098.           }
  2099.     return(ptr); }
  2100. /*-----------------------------------disp_ch()-----------------------------------*/
  2101.        FIELD *disp_ch(ptr)
  2102.    FIELD *ptr;
  2103.  { register int i,j;
  2104.    clear_win(5,4,9,76,6,0,black);
  2105.    i=0;j=10;
  2106.     while(((ptr->type=='L')||(ptr->sele=='N')||(ptr->type=='l'))&&(ptr!=NULL))
  2107.        ptr=ptr->next;
  2108.      while((ptr!=NULL)&&(i<5)) {
  2109.       print(i+6,j,ptr->cla==0 ? 6|1:0|113,"%s",ptr->field);
  2110.       i=(j==10? i: i+1);
  2111.       j=(j==10? 40:10);
  2112.        ptr=ptr->next;
  2113.   while(((ptr->type=='L')||(ptr->sele=='N')||(ptr->type=='l'))&&(ptr!=NULL))
  2114.       ptr=ptr->next;}
  2115.     return(ptr);
  2116.     }/*end fountion*/
  2117.  
  2118.  
  2119. /*-------------------------select linkfield-----------------------*/
  2120.  sele_link(ptr,ptr1,ptr2)
  2121.    struct PPP *ptr,*ptr1,*ptr2;
  2122.  {
  2123.  int i,j,k,key2,f;
  2124.  struct PPP *tem;
  2125. kk: ptr2=NULL;
  2126.  f=0;
  2127.  if((linktype=='C')||(linktype=='c')) {
  2128.      root4=root2->next;
  2129.      while((root4->sele!='Y')&&(root2!=NULL))
  2130.        root4=root4->next;
  2131.      print(4,5,6|1,"╟δ╢¿╥σ %s(┐Γ├√:%s.dbf) --> %s(┐Γ├√:%s.dbf)╡─┴¼╜╙╫╓╢╬ ",root2->mean,root2->dbname,root4->mean,root4->dbname);
  2132.      }
  2133.  else {
  2134. /*   if(linknum==0)
  2135.     root2=root2->next;*/
  2136.    while((root2->sele!='Y')&&(root2!=NULL))
  2137.     root2=root2->next;
  2138.    if((linktype=='B')||(linktype=='b'))
  2139.       print(4,5,6|1,"╟δ╢¿╥σ %s(┐Γ├√:%s.dbf) --> %s(┐Γ├√:%s.dbf)╡─┴¼╜╙╫╓╢╬ ",root4->mean,root4->dbname,root2->mean,root2->dbname);
  2140.    else
  2141.      print(4,5,6|1,"╟δ╢¿╥σ %s(┐Γ├√:%s.dbf) --> %s(┐Γ├√:%s.dbf)╡─╣╪╝ⁿ╫╓▒φ┤∩╩╜",root2->mean,root2->dbname,root2->next->mean,root2->next->dbname);
  2142.       }
  2143.  
  2144. begin:  print(6,10,(ptr->obj=='L'? 0|113:0|75),"%s",ptr->field);
  2145.       disp_fmess(ptr);
  2146.     i=6;j=10;
  2147.     for(;;)  {
  2148.      key2=getcc();
  2149. mv:      print(i,j,(ptr->obj=='L'? 0|113:6|1),"%s",ptr->field);
  2150.      switch(key2)  {
  2151.         case LEFT:
  2152.          if(j==10) printf("\007");
  2153.          else {
  2154.              j=10;
  2155.              ptr=ptr->last; }
  2156.           break;
  2157.         case RIGHT:
  2158.                      if((j==40)||(ptr->next==NULL)) printf("\007");
  2159.           else { j=40;
  2160.             ptr=ptr->next; }
  2161.             break;
  2162.         case UP:
  2163.           if(i==6) printf("\007");
  2164.           else {
  2165.             i--;
  2166.             ptr=ptr->last->last; }
  2167.            break;
  2168.         case DOWN:
  2169.              if((i==10)||((ptr->next)->next==NULL)||(ptr->next==NULL)) printf("\007");
  2170.              else {
  2171.                i++;
  2172.                ptr=ptr->next->next; }
  2173.                break;
  2174.         case PgUp:
  2175.             k=0;
  2176.              tem=ptr;
  2177.              ptr=ptr2;
  2178.              while(k<10) {
  2179.               ptr=ptr->last;
  2180.              if(ptr==NULL) break;
  2181.              k++; }
  2182.            if(ptr!=NULL) {
  2183.               clear_win(5,3,9,76,6,0,black);
  2184.               ptr1=disp_field(ptr,f);
  2185.               i=6;j=10;
  2186.               ptr2=ptr; }
  2187.              else {
  2188.             ptr=tem;
  2189.             printf("\007"); }
  2190.            break;
  2191.          case PgDn:
  2192.             if(ptr1==NULL) printf("\007");
  2193.             else  {
  2194.             clear_win(5,3,9,76,6,0,black);
  2195.             ptr=ptr1;
  2196.             ptr1=disp_field(ptr,f);
  2197.             i=6;j=10;
  2198.             ptr2=ptr;   }
  2199.               break;
  2200.         case Enter:
  2201.         case F5:
  2202.            if(ptr->obj!='L')
  2203.              {  if(checklink(ptr)==-1)
  2204.                  {  printf("\007");
  2205.                     error("┤φ╬≤╡─┴¼╜╙╫╓╢╬,╟δ╓╪╨┬╤í╘±!");
  2206.                     getcc();
  2207.                     bottom();
  2208.                   }
  2209.                else
  2210.                   {  ptr->obj='L';
  2211.                      strcpy(linkfield[linknum][link[linknum]++],ptr->field);
  2212.                      if(link[linknum]>3)
  2213.                        { linknum++;
  2214.                          link[linknum]=0;
  2215.                          root2=root2->next;
  2216.                          return(1);
  2217.                        }
  2218.                       else break;
  2219.                     }
  2220.              }
  2221.             else
  2222.              { link[linknum]--;
  2223.                ptr->obj='N';
  2224.                break;
  2225.               }
  2226.  
  2227.             break;
  2228.         case F4:
  2229.          if(link[0]>=1)
  2230.              { linknum++;
  2231.                link[linknum]=0;
  2232.                linknum=0;
  2233.             root2=root2->next;
  2234.             return(1);
  2235.              }
  2236.           else
  2237.                { printf("\007");
  2238.              error("─·╢¿╥σ┴╦╢α╕÷▓┘╫≈┐Γ,╥≥┤╦▒╪╨δ╢¿╥σ┴¼╜╙╫╓╢╬úí");
  2239.              getcc();
  2240.              bottom();
  2241.              root2=root;
  2242.              linknum=0;
  2243.              if((linktype=='C')||(linktype=='c'))
  2244.                  {    while(root2!=NULL)
  2245.                      if(root2->sele=='Y')
  2246.                         break;
  2247.                       else
  2248.                       root2=root2->next;
  2249.                     if(root2->sele=='Y')
  2250.                       { p=root2->sstr;
  2251.                     p2=p;
  2252.                     p4=p2;
  2253.                     p1=disp_field(p2,0);
  2254.                        }
  2255.                    }
  2256.                else
  2257.                 {  while(root2!=NULL)
  2258.                        if(root2->sele=='Y')
  2259.                           break;
  2260.                        else
  2261.                          root2=root2->next;
  2262.                     if(root2->sele=='Y')
  2263.                     {  p=root2->sstr;
  2264.                        if(i==selecount-1)
  2265.                           root4=root2;
  2266.                        p2=p;
  2267.                        p4=p2;
  2268.                        p1=disp_field(p2,0);
  2269.                     }
  2270.                    }
  2271.              ptr=p2;
  2272.              ptr1=p1;
  2273.              ptr2=p4;
  2274.              goto kk;
  2275.              }
  2276.  
  2277.         case F6:
  2278.          linknum=0;
  2279.          link[linknum]=0;
  2280.          clear_obj(1);
  2281.          return(-1);
  2282.         default: printf("\007");break;
  2283.           }   /*endswitch*/
  2284.          if(ptr->obj=='L')
  2285.         print(i,j,0|113,"%s",ptr->field);
  2286.          else
  2287.         print(i,j,0|75,"%s",ptr->field);
  2288.         disp_fpart(ptr);
  2289.      }/*endfor*/
  2290.     }
  2291.  
  2292.  
  2293.  
  2294.  
  2295. /*----------------------------------SELECT DATBASE ------------------------------------------*/
  2296.       select_datbase(maxc)
  2297.     int maxc;
  2298.        {  make_start(0);
  2299.           use=0;
  2300.           clear_win(0,0,24,79,6,0,black);
  2301.           print(1,5,0|30,"** %s **",title3[sub2]);
  2302.           print(1,55,0|30,"**ESC->╓╨╢╧═╦│÷**");
  2303.           bottom();
  2304.           print(4,5,6|1,"╣▓╙╨<%02d",0);
  2305.           print(4,12,6|1,">╕÷╩²╛▌┐Γ▒╗╤í");
  2306.           gframe(5,2,11,78,0,0|30);
  2307.           print(11,60,0|30,"PgUp/PgDn");
  2308.           gframe(14,2,22,78,1,0|30);
  2309.           if(maxc==1)
  2310.                    print(4,30,6|1,"╤í└█╝╞▓┘╫≈┐Γ");
  2311.               else
  2312.                   if(maxc==10)
  2313.                        print(4,30,6|1,"╤í└█╝╞╜ß╣√┐Γ");
  2314.                   else
  2315.                        print(4,30,6|1,"╢¿╥σ═│╝╞▓┘╫≈┐Γ");
  2316.               print(14,8,6|1,"╨┼╧ó┤░┐┌");
  2317. start:          root2=root;
  2318.           root4=root2;
  2319.           root1=disp_opbase(root2);
  2320.           if((sele_opbase(root2,root1,root4,maxc))==-1) goto start;
  2321.       }
  2322.  
  2323. /*---------------------------------define linkfield--------------------------*/
  2324.       define_link(f0)
  2325.         int f0;
  2326.       {
  2327.         int i;
  2328.             if(f0==0) {
  2329.           if(selecount>1) {
  2330.                    clear_win(5,4,9,76,6,0,black);
  2331.            clear_win(15,4,20,76,6,0,black);
  2332.                    print(6,15,6|1,"╟δ╧╚╢¿╥σ┴¼╜╙└α╨═");
  2333.            print(7,15,6|1,"C_┤«╨═┴¼╜╙(╙├╙┌DBASEPLUS╝░FOXBASEPLUS)");
  2334.            print(8,15,6|1,"B_╨╟╨═┴¼╜╙(╜÷╙├╙┌FOXBASEPLUS╓╨)");
  2335.            print(9,20,6|1,"╟δ╩Σ╚δ╤í╘±(C/B): ");
  2336.            printf("\033[9;38H");
  2337.            linktype=getcc();
  2338.            if ((linktype=='C')||(linktype=='c')) {
  2339.     defin:        root2=root;
  2340.             linknum=0;
  2341.             for(i=selecount-1;i>0;i--) {
  2342.                  clear_win(5,4,9,76,6,0,black);
  2343.                  clear_win(15,4,20,76,6,0,black);
  2344.                 while(root2!=NULL)
  2345.                 if(root2->sele=='Y') break;
  2346.                 else root2=root2->next;
  2347.                 if(root2->sele=='Y') {
  2348.                    p=root2->sstr;
  2349.                    p2=p;
  2350.                    p4=p2;
  2351.                    p1=disp_field(p2,0);
  2352.                    if((sele_link(p2,p1,p4))==-1) goto defin;
  2353.                    }/*endif*/
  2354.               }/*endfor*/
  2355.               }/*endif*/
  2356.            else  {  /*B start b*/
  2357. defin2:             root2=root;
  2358.              linknum=0;
  2359.              for(i=selecount-1;i>0;i--) {
  2360.                  clear_win(5,4,9,76,6,0,black);
  2361.                  clear_win(15,4,20,76,6,0,black);
  2362.                /*  print(8,15,6|1,"╟δ╖╓▒≡╩Σ╚δ╕≈┐Γ╡─┴¼╜╙╫╓╢╬!");
  2363.                  getcc();*/
  2364.                  while(root2!=NULL)
  2365.                  if(root2->sele=='Y') break;
  2366.                  else root2=root2->next;
  2367.                  if(root2->sele=='Y') {
  2368.                 p=root2->sstr;
  2369.                 if(i==selecount-1) {root4=root2; root2=root2->next;}
  2370.                 p2=p;
  2371.                 p4=p2;
  2372.                 p1=disp_field(p2,0);
  2373.                 if((sele_link(p2,p1,p4))==-1) goto defin2; }/*endif*/
  2374.                       }/*endfor*/
  2375.                  }/*endelse*/
  2376.             }
  2377.                 }
  2378.                 else
  2379.                     {    clear_win(5,4,9,76,6,0,black);
  2380.              clear_win(15,4,20,76,6,0,black);
  2381.              root2=root;
  2382.               while(root2!=NULL)
  2383.                     if(root2->sele=='Y') break;
  2384.                   else root2=root2->next;
  2385.               if(root2->sele=='Y')
  2386.                               { p=root2->sstr;
  2387.                     p2=p;
  2388.                     p4=p2;
  2389.                     p1=disp_field(p2,0);
  2390.                 sele_link(p2,p1,p4);
  2391.                               }
  2392.                       }
  2393.  
  2394.        }
  2395. /*------------------------------end define  linkfield-------------------------------*/
  2396.       make_data()
  2397.      {
  2398.       int ten;
  2399.           if(selecount>0) {
  2400.         clear_win(5,4,9,76,6,0,black);
  2401.         clear_win(14,4,20,76,6,0,black);
  2402.         clear_win(2,3,3,70,6,0,black);
  2403.         print(4,32,6|1,"╟δ╤í╜ß╣√┐Γ╫╓╢╬");
  2404. start2:           root2=root;
  2405.            /*print(1,5,0|30, "**╤í╜ß╣√┐Γ╫╓╢╬**");*/
  2406.            print(4,5,6|1,"╣▓╙╨<%02d",0);
  2407.            print(4,12,6|1,">╕÷╫╓╢╬▒╗╤í");
  2408.            print(11,10,0|30,"Home/End╤í╞Σ╦ⁿ┐Γ");
  2409.            while(root2!=NULL)
  2410.               if(root2->sele=='Y') break;
  2411.               else root2=root2->next;
  2412.              if(root2->sele=='Y') {
  2413.               p=root2->sstr;
  2414.               p2=p;
  2415.              p4=p2;
  2416.              p1=disp_field(p2,0);
  2417.              if((sele_field(p2,p1,p4,0))==-1) goto start2;
  2418.               }
  2419.               }/*endif*/
  2420.            }
  2421. /*------------------------------------MAKE OPDATBASE ----------------------------*/
  2422. /*-----------------------------check dbname---------------------------*/
  2423.   checkbase(r)
  2424.    BASE *r;
  2425.    { BASE *rr;
  2426.      if(r->sele=='N')
  2427.     { rr=root;
  2428.       while(rr!=NULL)
  2429.           if((strcmp(rr->dbname,r->dbname)==0)&&(rr->sele=='Y'))
  2430.            return(-1);
  2431.           else
  2432.            rr=rr->next;
  2433.      }
  2434.          return(1);
  2435.     }
  2436.  
  2437.  
  2438. /*------------------------------------END ALL -----------------------------*/
  2439. convert()
  2440. {
  2441.    int selectc;
  2442.    get_root();
  2443.    roothead=NULL;
  2444.    for (selectc=0;selectc<selecount;selectc++)
  2445.        {
  2446.        get_root();
  2447.        if(roothead==NULL) {
  2448.      roothead=root1;
  2449.      root3=root1; }
  2450.        else     {
  2451.       root1->last=root2;
  2452.       root1->next=root2->next;
  2453.       if(root2->next!=NULL)
  2454.           (root2->next)->last=root1;
  2455.       root2->next=root1;      }
  2456.      root2=root1;
  2457.      root3=root1;
  2458.        strcpy(root2->mean,opbase[selectc]->mean);
  2459.        strcpy(root2->dbname,opbase[selectc]->dbname);
  2460.        root2->flag=opbase[selectc]->flag;
  2461.        root2->serve=opbase[selectc]->serve;
  2462.        root2->sele=opbase[selectc]->sele;
  2463.        strcpy(root2->path,opbase[selectc]->path);
  2464.        root2->join=opbase[selectc]->join;
  2465.        root2->sort=opbase[selectc]->sort;
  2466.        }
  2467.    conv=root;
  2468.    root=roothead;
  2469.    roothead=conv;
  2470.    read_stru();
  2471. }
  2472. /*convert()
  2473. {
  2474.    int selectc;
  2475.  
  2476.    root2=root;
  2477.    for (selectc=0;selectc<selecount;selectc++)
  2478.        {
  2479.        if (opbase[selectc]->last==NULL) continue;
  2480.        opbase[selectc]->last->next=opbase[selectc]->next;
  2481.        opbase[selectc]->next->last=opbase[selectc]->last;
  2482.        opbase[selectc]->last=root2->last;
  2483.        opbase[selectc]->next=root2;
  2484.        root2->last=opbase[selectc];
  2485.   */