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

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <dos.h>
  4. #define COUNT 40
  5. #define pr(x) fprintf(lp,x)
  6. struct DBF {  struct DB {  char field[11];    /* ╫╓╢╬├√ */
  7.                char type;    /* ╫╓╢╬└α╨═ */
  8.                int len;    /* ╫╓╢╬│ñ╢╚ */
  9.                int dec;    /* ╨í╩²╬╗ */
  10.             } db[COUNT];
  11.           struct DBF *last;
  12.           struct DBF *next;
  13.           int ctc;    /* ╡▒╟░┐Γ╨┼╧ó┐Θ─┌╩╡╝╩┐Γ╡─╕÷╩² */
  14.        }  *wd,*rd,*newd;
  15. struct BASE {  struct BS {  char mean[31];    /* ┐Γ║¼╥σ├√ */
  16.                 char name[9];    /* ┐Γ╬─╝■├√ */
  17.                 struct DBF *dbs;    /* ╓╕╧≥┐Γ╜ß╣╣┐Θ═╖╡╪╓╖ */
  18.              } base[10];
  19.            struct BASE *last;
  20.            struct BASE *next;
  21.            int ctc;    /* ╡▒╟░┐Γ╜ß╣╣┐Θ─┌╩╡╝╩┐Γ╫╓╢╬╡─╕÷╩² */
  22.         }  *wb,*rb,*newb;
  23. int repeat,MAR[6][128];
  24. char *explain,PATH[30];
  25. struct BS ldb[6];    /* ╝╟┬╝ 1--6 ╕÷▓Θ╤»┐Γ╡─╙╨╣╪╨┼╧ó */
  26. int linkflag;
  27. char link[5][31],path[30],*sele,*mj;/*5.8*/
  28. int no,cod=0;/*5.15*/
  29. int m12;/*in_c retrun to scr*/
  30. FILE *mid;
  31. /**/
  32. int duoflag=0;
  33. int ss0[10];
  34. int n1=0;
  35.  
  36. /*-------------------------------------------*/
  37. /*          ╔· │╔ ╧╡ ═│ ╓≈ ┐╪ │╠ ╨≥          */
  38. /*-------------------------------------------*/
  39. main(argc,argv)
  40. int argc;
  41. char *argv[];
  42. {  char s[7][20],lm[7][20];
  43.    int ACT[7],i,j,n,m,r=0,aa,dbctc;/*5.8*/
  44.    char OK,name[9];
  45.    FILE *lp,*fp,*code;
  46. /**/int ii;
  47.    if (strcmp(argv[2],"wy")!=0) return(0);
  48.    getbase(argv[1]);
  49.    strcpy(PATH,argv[1]);
  50.    for(m=0;m<=6;m++)
  51.    strcpy(lm[m],"\0");
  52.    strcpy(s[0],"╦≈╥²┐∞╦┘▓Θ╤»");
  53.    strcpy(s[1],"╞Ñ┼Σ─ú║²▓Θ╤»");
  54.    strcpy(s[2],"╫Θ║╧╣╠╢¿╠⌡╝■▓Θ╤»");
  55.    strcpy(s[3],"╫Θ║╧╚╬╥Γ╠⌡╝■▓Θ╤»");
  56.    strcpy(s[4],"╚╬╥Γ╫╓╢╬▓Θ╤»");
  57.    strcpy(s[5],"╚╬╥Γ╠⌡╝■▓Θ╤»");
  58.    strcpy(s[6],"╕╜╝╙─ú┐Θ");
  59.    for (i=0;i<6;i++) ACT[i]=0;
  60.  
  61. /**/for (ii=0; ii<10; ii++)
  62.      ss0[ii]=0;
  63.    m=0;
  64.    if ((fp=fopen("looki.prg","r"))!=NULL){strcpy(lm[m],s[0]);ACT[m]=1;m++;fclose(fp);}
  65.    if ((fp=fopen("lookp.prg","r"))!=NULL){strcpy(lm[m],s[1]);ACT[m]=2;m++;fclose(fp);}
  66.    if ((fp=fopen("lookf.prg","r"))!=NULL){strcpy(lm[m],s[2]);ACT[m]=3;m++;fclose(fp);}
  67.    if ((fp=fopen("lookm.prg","r"))!=NULL){strcpy(lm[m],s[3]);ACT[m]=4;m++;fclose(fp);}
  68.    if ((fp=fopen("lookj.prg","r"))!=NULL){strcpy(lm[m],s[4]);ACT[m]=5;m++;fclose(fp);}
  69.    if ((fp=fopen("lkr.prg","r"))!=NULL){strcpy(lm[m],s[5]);ACT[m]=6;m++;fclose(fp);}
  70. /*   if(m!=0)m--;*/
  71.    i=0;
  72.    do
  73.    {
  74. /**/cls(1,1,25,80,48|33);
  75.    cls(5,20,16,63,0|1);
  76.    cls(4,19,15,61,0|30);
  77.    frame(3,18,15,60,0|30);
  78.    prt(0,0,0|30,"*** ▓Θ╤»─ú┐Θ╔·│╔ ***");
  79.    prt(4,24,0|30,"***** ▓Θ╤»─ú┐Θ╣ª─▄▓╦╡Ñ *****");
  80.    prt(6,27,0|30,"1 -- ╦≈╥²┐∞╦┘▓Θ╤»");
  81.    prt(7,27,0|30,"2 -- ╞Ñ┼Σ─ú║²▓Θ╤»");
  82.    prt(8,27,0|30,"3 -- ╫Θ║╧╣╠╢¿╠⌡╝■▓Θ╤»");
  83.    prt(9,27,0|30,"4 -- ╫Θ║╧╚╬╥Γ╠⌡╝■▓Θ╤»");
  84.    prt(10,27,0|30,"5 -- ╚╬╥Γ╫╓╢╬▓Θ╤»");
  85.    prt(11,27,0|30,"6 -- ╚╬╥Γ╠⌡╝■▓Θ╤»");
  86.    prt(12,27,0|30,"7 -- ╕╜╝╙─ú┐Θ");
  87.     for (n=0;n<7;n++)
  88.        for (OK=0;OK<7;OK++)
  89.          if (ACT[OK]==n+1)  {  prt(6+n,25,0|30,"*");  }
  90.     prt(20,18,48|33,"─·╡─╧╡═│╓╨╨Φ╥¬──╓╓▓Θ╤»╣ª─▄? ╟δ╤í╘± : ");
  91.     if ((n=getn(0,7,20,55))!=0)
  92.       {  j=0;
  93.               cursor(n+5,25);
  94.           putchar('*');
  95.           prt(23,25,48|33,"╚╖╚╧╖±(Y/N)?  ");
  96.           while (((OK=getchar())!='N')&&(OK!='Y')&&(OK!='y')&&(OK!='n'));
  97.           prt(23,37,48|33," ");
  98.           if (OK!='Y'&&OK!='y')
  99.           {if(i>0){ACT[i+m]=0;}
  100.          continue;  }
  101.           else{
  102.               do{if(ACT[j]==n)j=i+m+2;
  103.          j++;} while (j<=i+m);
  104.           if(j==i+m+1)
  105.          {ACT[i+m]=n;
  106.           strcpy(lm[i+m],s[n-1]);
  107.           i++;
  108.           }
  109.           }
  110.           switch (n)
  111.          {  case 1 : r=exist(s[0],"looki.prg");
  112.                  if(r==2) {index(0);}
  113.                  else{if(r==3)break; else index(1);}
  114.                  break;
  115.             case 2 : r=exist(s[1],"lookp.prg");
  116.                  if(r==2){match(0);}
  117.                  else {if(r==3)break; else match(1);}
  118.                  break;
  119.             case 3 : r=exist(s[2],"lookf.prg");
  120.                  if(r==2){fix(0);}
  121.                  else {if(r==3)break;else fix(1);}
  122.                  break;
  123.             case 4 : r=exist(s[3],"lookm.prg");
  124.                  if(r==2){mix(0);}
  125.                  else {if(r==3)break; else mix(1);}
  126.                  break;
  127.             case 5 : system("copy c:\\cdbag4\\lookj.prg *.* > oztom");
  128.                  system("copy c:\\cdbag4\\dbmenu.prg *.* > oztom");
  129.                  system("copy c:\\cdbag4\\choice.prg *.* > oztom");
  130.                  break;
  131.             case 6 : lp=fopen("lkr.prg","w");
  132.                  fprintf(lp,"PROC LOOKR\nDO WHILE .T.\nRUN FIX %s\nCLEAR\nDO LR\nCLEAR\n",PATH);
  133.                  pr("CON=' '\n@10,20 SAY '╩╟╖±╗╣╥¬╜°╨╨╞Σ╦ⁿ╠⌡╝■╡─▓Θ╤»?(Y/N): ' GET CON PICT '!'\n");
  134.                  pr("READ\nIF CON<>'Y'\nEXIT\nENDIF\nENDDO\nRETURN\n");
  135.                  fclose(lp);
  136.                  system("copy lkr.prg+c:\\cdbag4\\pro.prg lkr.prg > oztom");
  137.                  system("copy \\cdbag4\\fix.exe *.* > oztom");
  138.                  system("copy \\cdbag4\\cre_df.prg *.* > oztom");
  139.                  break;
  140.             case 7 : system("c:\\cdbag4\\caxunf 2 wy");
  141. /*                 cursor(15,10);
  142.                  color_puts("╟δ╩Σ╚δ╕╜╝╙─ú┐Θ╡─┬╖╛╢├√ : ",11);
  143.                  color_puts("                      ",14|16);
  144.                  cursor(15,35);
  145.                  scanf("%s",path);
  146.                  cursor(17,10);
  147.                  color_puts("╟δ╩Σ╚δ╕╜╝╙─ú┐Θ╡─╓┤╨╨╬─╝■├√ : ",11);
  148.                  color_puts("          ",14|16);
  149.                  cursor(17,39);
  150.                  scanf("%s",name);*/
  151.                  break;
  152.          }
  153.           for (dbctc=0;ldb[dbctc].dbs!=NULL;dbctc++) free(ldb[dbctc].dbs);
  154.           OK='N';
  155.           continue;
  156.       }
  157.     cls(1,1,25,80,0|30);
  158.     prt(15,20,0|30,"─·╢╘╟░├µ╔·│╔╡─▓Θ╤»─ú┐Θ┬·╥Γ┬≡ (Y/N) ?");
  159.     OK=readchar(); printf("%c",OK); /*scanf("%c",&OK);*/
  160.     if (OK!='Y'&&OK!='y') {  for (n=m+1;n<6;n++) ACT[n]=0;  i=0;  }
  161.      }  while (OK!='Y'&&OK!='y');
  162.    system("copy \\cdbag4\\ldb.dbf *.* > oztom");
  163.    system("copy \\cdbag4\\lb.dbf  *.* > oztom");
  164.    system("copy \\cdbag4\\lop.dbf *.* > oztom");
  165.    system("copy \\cdbag4\\p?tlook.prg *.* > oztom");
  166.    system("copy \\cdbag4\\pprint.prg *.* > oztom");
  167.    system("copy \\cdbag4\\win.dbf *.* > oztom");
  168.    system("copy \\cdbag4\\ag.prg *.* > oztom");
  169.    lp=fopen("look.prg","w");
  170.    pr("PUBL FMTPRG\nPUBL GS\n");               /*add 5.16*/
  171.    pr("PUBL DF1,DF2,DF3,DF4,DF5,DF6,DF7,DF8,DF9,DF10,DF11,DF12,DF13,DF14\n");
  172.    pr("PUBL DF15,DF16,DF17,DF18,DF19,DF20,DF21,DF22,DF23,DF24,DF25,DF26,DF27,DF28\n");
  173.    pr("PUBL DF29,DF30,DF31,DF32,DF33,DF34,DF35,DF36,DF37,DF38,DF39,DF40,DF41,DF42\n");
  174.    pr("PUBL DF43,DF44,DF45,DF46,DF47,DF48,DF49,DF50,DF51,DF52,DF53,DF54,DF55,DF56\n");
  175.    pr("PUBL DF57,DF58,DF59,DF60,DF61,DF62,DF63,DF64,DF65,DF66,DF67,DF68,DF69,DF70\n");
  176.    pr("PUBL DF71,DF72,DF73,DF74,DF75,DF76,DF77,DF78,DF79,DF80,DF81,DF82,DF83,DF84\n");
  177.    pr("PUBL DF85,DF86,DF87,DF88,DF89,DF90,DF91,DF92,DF93,DF94,DF95,DF96,DF97,DF98,DF99\n");
  178.    pr("PUBL DF100,DF101,DF102,DF103,DF104,DF105,DF106,DF107,DF108,DF109,DF110,DF111,DF112,DF113,DF114\n");
  179.    pr("PUBL DF115,DF116,DF117,DF118,DF119,DF120,DF121,DF122,DF123,DF124,DF125,DF126,DF127,DF128\n");
  180.    pr("PUBL FD\nset talk off\nset safety off\nset exact on\nset scor off\nset excl off\n");
  181. /**/ pr("set procedu to proced\non error do again\n");
  182.  
  183.    if ((code=fopen("code.dbf","r"))!=NULL)
  184.       pr("sele 8\nuse code inde codeinde\n");
  185.    fclose(code);
  186.    pr("do while .T.\n  clear\n");
  187.    pr("set color to w+/w\n");
  188.    pr("clear\n");
  189.    pr("set color to w+/n\n");
  190.    pr("@11,12 clear to 21,72\n");
  191.    pr("set color to w+/b\n");
  192.    pr("@10,10 clear to 20,70\n");
  193.    pr("set color to w+/b\n");
  194.    pr("@6,18 say '     *** ▓Θ╤»─ú┐Θ╣ª─▄▓╦╡Ñ ***     '\n");
  195.    pr("set color to w+/b\n");
  196.      m=i+m;
  197.          for(n=0;n<m;n++)
  198.       {  fprintf(lp,"@%d,18 say '       %d. %s '\n",n+11,n+1,lm[n]); /*8 TO 11*/
  199.       }
  200.    fprintf(lp,"PATH='%s'\nhh=' '\nPATH=SUBSTR(PATH,1,LEN(PATH)-1)\n",argv[1]);
  201.    fprintf(lp,"set color to w/b\ndo while at(hh,'01234567')=0\n");/*R/GR+*/
  202.    pr("set color to w+/b\n");
  203.    fprintf(lp,"@23,10 say '─·╥¬╜°╨╨║╬╓╓▓Θ╤»? ╟δ╤í╘± 1 -- %d (╩Σ 0 ╖╡╗╪) : ' get hh\n",m);/*i to m*/
  204.   pr("read\nenddo\nset color to W/N\nif hh='0'\nreturn\nendif\n");
  205.     pr("do case\n");
  206.    for (n=0;n<m;n++)
  207.       switch (ACT[n])
  208.     {  case 1 : fprintf(lp,"     case hh='%d'\nFMTPRG='indscr'\ndo looki\n",n+1);
  209.             break;                               /*indscr*/
  210.        case 2 : fprintf(lp,"     case hh='%d'\n*set proc to lkp\nFMTPRG='matscr'\ndo lookp\n*close proc\n",n+1);
  211.             break;                                                /*matscr*/
  212.        case 3 : fprintf(lp,"     case hh='%d'\n*set proc to lkf\nFMTPRG='fixscr'\ndo lookf\n*close proc\n",n+1);
  213.             break;                                                /*fixscr*/
  214.        case 4 : fprintf(lp,"     case hh='%d'\n*set proc to lkm\nFMTPRG='mixscr'\ndo lookm\n*close proc\n",n+1);
  215.             break;                                                /*mixscr*/
  216.        case 5 : fprintf(lp,"     case hh='%d'\ndo lookj\n",n+1);
  217.             break;
  218.        case 6 : fprintf(lp,"     case hh='%d'\nFMTPRG='RFYSCR'\nset proc to lkr\ndo lookr\nclose proc\n",n+1);
  219.             break;
  220.        case 7 : fprintf(lp,"     case hh='%d'\ndo caxunf\n",n+1);
  221.             break;
  222.     }
  223.    pr("endcase\n");
  224.    pr("enddo\nsele 8\nuse\nset exact off\nreturn\n");
  225.    fclose(lp);
  226.    system("cls");
  227.    cursor(8,15);
  228.    printf("*** ▓Θ ╤» ─ú ┐Θ ╔· │╔ ═Ω ▒╧ ***");
  229.    dela();
  230. }
  231.  
  232. in_c(i)
  233. int *i;
  234. {  int n=0;
  235.    cls(23,1,24,80,48|33);
  236.    if (ldb[1].dbs!=NULL)
  237.      {  prt(22,10,48|33,"╟δ╤í╘±╠⌡╝■╫╓╢╬ (íⁿ/í²: ╤í┐Γ, PgUp/PgDn: ╖¡╞┴): ");
  238.      }
  239.    else
  240.      {  prt(22,20,48|33,"╟δ╤í╘±╠⌡╝■╫╓╢╬(PgUp/PgDn: ╖¡╞┴): ");
  241.      }
  242.    while (n==0)
  243.      {  if (ldb[1].dbs!=NULL)
  244.       {  while ((n=get(22,57))!=0)
  245.            {  if (n=='u'||n=='d')
  246.             {  if (n=='u'&&*i>0)  {  (*i)--;  rd=ldb[*i].dbs;  wd=ldb[*i].dbs;  }
  247.                else if (*i<5&&ldb[*i+1].dbs!=NULL)  {  (*i)++;  rd=ldb[*i].dbs;  wd=ldb[*i].dbs;  }
  248.                m12=judge(0);
  249.             }
  250.           else  if (n=='U'||n=='D')
  251.               {  m12=judge(n);
  252.                  continue;
  253.               }
  254.             else break;
  255.            }
  256.       }
  257.     else
  258.       {  n=get(22,53);
  259.          if (n=='U'||n=='D')
  260.            {  m12=judge(n);
  261.           n=0;
  262.           continue;
  263.            }
  264.          if (n=='u'||n=='d') {  n=0;  continue;  }
  265.       }
  266.     if (n==0) error();
  267.      }
  268.    if (n%COUNT==0) return(COUNT);
  269.    else return(n%COUNT);
  270. }
  271.  
  272.  
  273. /*-------------------------------------------------*/
  274. /*          ╦≈ ╥² ┐∞ ╦┘ ▓Θ ╤» ─ú ┐Θ ╔· │╔          */
  275. /*-------------------------------------------------*/
  276. index(h)
  277. int h;
  278. {  int m,n,i,j,k,l,/*no,*/rep=1,c,r,wh;
  279.    char tj[9],*s,*sl,st[7],str[20],name[31],ph[30];
  280.    FILE *fq,*fp,*dp,*lp,*sp;
  281.    system("cls");
  282.    cursor(8,20);
  283.    color_puts("*** ╧┬ ├µ ╔· │╔ ╦≈ ╥² ┐∞ ▓Θ ***",10);
  284.    cursor(12,10);
  285.    color_puts("    ╬¬╩╣▓Θ╤»╖╜▒π╤╕╦┘, ╟δ╢╘╕≈┐Γ╛¡│ú▓Θ╤»╡─╫╓╢╬╜¿┴ó╦≈╥². \n\
  286.    \n─·╝╚┐╔╥╘╜°╨╨╡Ñ╫╓╢╬╦≈╥², ╙╓┐╔╥╘╜°╨╨╢α╫╓╢╬╦≈╥².",10);
  287.    cursor(16,12);
  288.    color_puts("╫ó╥Γ: ╢╘╢α╫╓╢╬╦≈╥²╩▒, ╫ε╢α╓╗─▄╜¿┴óú╢╕÷╫╓╢╬╡─╦≈╥².",10);
  289.    go_on();
  290.    explain=(char *)malloc(21*sizeof(char));
  291.    strcpy(explain,"*** ╦≈╥²┐∞╦┘▓Θ╤» ***\0");
  292.    no=0;
  293.    strcpy(ph,PATH);
  294.    strcat(ph,"NDX.TXT");
  295.    if(h==1)
  296.        {strcpy(tj,"li");add(h,tj);
  297.        lp=fopen("looki.prg","w");sp=fopen(ph,"w");fclose(sp);
  298.        dp=fopen("liop.txt","w");
  299.        fp=fopen("li.txt","w");if(fopen("indscr1.prg","r")!=NULL)system("del indscr*.*");
  300.        }
  301.    else
  302.    if(h==0)
  303.     {dp=fopen("liop.txt","a");
  304.     fp=fopen("li.txt","a");
  305.     system("copy looki.prg mid.prg > oztom");
  306.     mj=(char *)malloc(80*sizeof(char));
  307.     mid=fopen("mid.prg","r");
  308.     lp=fopen("looki.prg","w");
  309.     fgets(mj,30,mid);
  310.     while (strncmp("sele 10",mj,7)!=0)
  311.     {fputs(mj,lp);
  312.     fgets(mj,30,mid);
  313.     }
  314.     system("del mid.prg > oztom");
  315.     strcpy(tj,"li");
  316.      no=add(h,tj);
  317.     }
  318.       while (rep)
  319.      {  repeat=1;
  320.     c=getroad(no);
  321.     if (c==0)
  322.       {  rep=0;
  323.          continue;
  324.       }
  325.     n1++;
  326.     if (repeat==0) continue;
  327.     if (c>1)  deflink(name);
  328.     else
  329.        {
  330.        prt(22,15,48|33,"╟δ╢¿╥σ┴¼╜╙┐Γ╡─╩╢▒≡├√(╫ε╢α30╕÷╫╓╖√): ");
  331.        scanf("%30s",name);
  332. /*       strcpy(name,ldb[0].mean);*/
  333.        wd=ldb[0].dbs; rd=ldb[0].dbs;
  334.        }
  335.     sp=fopen(ph,"a");
  336.     cls(1,1,25,80,48|33);
  337.     judge(0);
  338.     m=0;
  339.     prt(16,20,48|33,"╧┬ ├µ ╢¿ ╥σ ╦≈ ╥² ╫╓ ╢╬");
  340.     prt(18,10,48|33,"    ─·╝╚┐╔╥╘╢╘╡Ñ╫╓╢╬╦≈╥², ╙╓┐╔╥╘╜°╨╨╢α╫╓╢╬╦≈╥²,");
  341.     prt(19,10,48|33,"╡½╢α╫╓╢╬╦≈╥²╩▒, ╫╓╢╬╩²╫ε╢α╬¬ 6 ╕÷.");
  342.     prt(21,20,48|33,"╟δ╧╚╤í╘±╡Ñ╦≈╥²╫╓╢╬(0 ╜ß╩°╤í╘±): ");
  343.     while ((n=get(21,52))!=0)
  344.       {  if (n=='U'||n=='D')
  345.            {  judge(n);
  346.           continue;
  347.            }
  348.          mark(n,"*");
  349.          if (n%COUNT==0) n=COUNT-1;
  350.          else n=n%COUNT-1;
  351.          fprintf(lp,"inf%d%d='%s'\n",no+1,m+1,wd->db[n].field);
  352.          fprintf(lp,"ty%d%d='%c'\n",no+1,m+1,wd->db[n].type);
  353.          fprintf(lp,"len%d%d=%d\n",no+1,m+1,wd->db[n].len);
  354.          fprintf(dp,"#%s#,#%c#\n",wd->db[n].field,wd->db[n].type);
  355.          fprintf(sp,"#%s#,#%s#,##,0,0\n",ldb[0].name,wd->db[n].field);
  356.          m++;
  357.       }
  358.     do {cls(1,1,25,80,48|33);
  359.         wd=rd;
  360.         judge(0);
  361.          prt(18,15,48|33,"╩╟╖±╗╣╜°╨╨╢α╫╓╢╬╦≈╥²(Y/N)? ");
  362.          while (((c=getchar())!='N')&&(c!='Y')&&(c!='y')&&(c!='n'));
  363.          if (c=='y'||c=='Y')
  364.            {  prt(18,15,48|33,"                              ");
  365.           k=0;
  366.           c=0;
  367.           l=0;
  368.           prt(20,20,48|33,"╟δ╤í╘±: ");
  369.           fprintf(lp,"inf%d%d='",no+1,m+1);
  370.           fprintf(sp,"#%s#,#",ldb[0].name);
  371.           s=(char *)malloc(70*sizeof(char));
  372.           sl=(char *)malloc(100*sizeof(char));
  373.           strcpy(s,"");
  374.           strcpy(sl,"");
  375.           while ((n=get(20,28))!=0)
  376.             {  if (n=='U'||n=='D')
  377.              {  judge(n);
  378.                 continue;
  379.              }
  380.                if (n%COUNT==0) i=COUNT-1;
  381.                else i=n%COUNT-1;
  382.                if (c) {  fprintf(lp,"+");  fprintf(sp,"+");
  383.                  strcat(s,"+"); strcat(sl,"+"); strcat(st,"+");
  384.                   }
  385.                c=1;
  386.                if (wd->db[i].type=='N')
  387.              {  fprintf(lp,"STR(%s,%d)",wd->db[i].field,wd->db[i].len);
  388.                 fprintf(sp,"STR(%s,%d)",wd->db[i].field,wd->db[i].len);
  389.              }
  390.                if (wd->db[i].type=='D')
  391.              {  fprintf(lp,"DTOC(%s)",wd->db[i].field);
  392.                 fprintf(sp,"DTOC(%s)",wd->db[i].field);
  393.              }
  394.                if (wd->db[i].type=='C')
  395.              {  fprintf(lp,"%s",wd->db[i].field); k=1;
  396.                 fprintf(sp,"%s",wd->db[i].field);
  397.              }
  398.                if (wd->db[n].type=='L'||wd->db[n].type=='M') {  error();  continue;  }
  399.                mark(n,"*");
  400.                strcat(s,wd->db[i].field);
  401.                itoa(wd->db[i].len,str,10);
  402.                strcat(sl,str);
  403.                st[l++]=wd->db[i].type;
  404.             }
  405.           st[l]='\0';
  406.           fprintf(lp,"'\nminf%d%d='%s'\nlen%d%d='%s'\nty%d%d='%s'\n",no+1,m+1,s,no+1,m+1,sl,no+1,m+1,st);
  407.           fprintf(sp,"#,##,0,0\n");
  408.           cursor(20,15);
  409.           prt(20,15,48|33,"╟δ╢¿╥σ╢α╫╓╢╬╦≈╥²╡─╩╢▒≡├√: ");
  410.           scanf("%30s",s);
  411.           if (k==1) fprintf(dp,"#%s#,#C#\n",s);
  412.           else fprintf(dp,"#%s#,##\n",s);
  413.           free(s);
  414.           m++;
  415.            }
  416.          else  break;
  417.        } while (c=='Y'||c=='y');
  418.     strcpy(sele,"ind");
  419.     r=sele_disp(name);/*r=1 sys;=2 use*//* ()*/
  420. /*    fprintf(lp,"gs%d=%d\n",no+1,r);*/
  421.     cre(no,"li");
  422.     cre1(no,lp);
  423.     cre2(name,m,fp,duoflag);
  424.     no++;
  425.     fclose(sp);
  426.     for (wh=0;wh<6 && ldb[wh].dbs!=NULL;wh++) free(ldb[wh].dbs);
  427.      }
  428.    fclose(dp);
  429.    fclose(fp);
  430. /**   pr("road=path\nsele 10\nuse LDB excl\nzap\nappe from li.txt deli with #\n");**/
  431. /**/ pr("dd=' '\n");
  432.    pr("road=path\nsele 10\nuse LB excl\nzap\nappe from li.txt deli with #\n");
  433.    pr("use lop excl\nzap\nappe from liop.txt deli with #\nuse\n");
  434.    pr("link=space(10)\ncty=' '\ndo while .T.\nh='  '\nhh=' '\nno=0\nct=0\ndo &path\\lmenu with 'li'\n");
  435.    pr("if h='0'\nreturn\nendif\ndf=f&h\n");
  436.    pr("set proc to &path\\pro\ndo while .T.\n*SET PROC TO &PATH\\PRO\ndo lop\n");
  437.    pr("if hh='0'\nCLOSE PROC\nexit\nendif\nSELE A\nUSE &PATH\\DB\nLOCA FOR NAME=B1\nIF SHAREFLAG='Y' .OR. SHAREFLAG='y'\nROAD=TRIM(SHAREPATH)\nUSE\n");
  438.    pr("endif\ndo relation with num\nSELE 10\nUSE &ROAD\\NDX\n");
  439.    pr("s='inf'+h+hh\ns=&s\nty='ty'+h+hh\nty=&ty\nclear\nlen='len'+h+hh\nsele 10\n");
  440.    pr("loca for TRIM(╦≈╥²╫╓╢╬)=s.AND.TRIM(┐Γ├√)=B1\nfname=TRIM(╦≈╥²╬─╝■)\nuse\nsele 1\nset index to &ROAD\\&fname\n");
  441.    pr("if at('+',s)=0\ncontent=space(&len)\n@9,15 say '╟δ╩Σ╚δ '+ s +' ╡─╛▀╠σ╓╡: ' get content\nread\n");
  442.    pr("do case\ncase ty='N'\ncon=val(content)\ncontent=s+'='+trim(content)\n");
  443.    pr("case ty='D'\ncon='CTOD(\"'+content+'\")'\ncontent=s+'='+con\ncon=&con\n");
  444.    pr("case ty='C'\nmcon='AT(\"'+TRIM(content)+'\",'+s+')>0'\ncon=content\ncontent=s+'=\"'+content+'\"'\nendcase\n");
  445.    pr("else\n@5,10 say '╟δ╩Σ╚δ▓Θ╒╥╡─╛▀╠σ─┌╚▌:'\ni=1\ncontent=' '\ncon=' '\nmcon=' '\n");
  446.    pr("s='minf'+h+hh\ns=&s\nlen=&len\ndo while .T.\nl=at('+',len)\nif l>0\nn=substr(len,1,l-1)\n");
  447.    pr("len=substr(len,l+1,len(s))\nconp=space(val(n))\nelse\nconp=space(val(len))\nn=len\nendif\n");
  448.    pr("l=at('+',s)\nt=substr(ty,i,1)\nif l<>0\nss=substr(s,1,l-1)\n@i+6,12 say ss get conp\nread\n");
  449.    pr("s=substr(s,l+1,len(s))\ndo case\ncase t='D'\nmcon=mcon+ss+'=CTOD(\"'+conp+'\").AND.'\n");
  450.    pr("con=con+'CTOD(\"'+conp+'\")+'\ncontent=content+ss+'=CTOD(\"'+conp+'\").AND.'\n");
  451.    pr("case t='C'\nmcon=mcon+'AT(\"'+TRIM(conp)+'\",'+ss+')>0.AND.'\ncontent=content+ss+'=\"'+conp+'\".AND.'\n");
  452.    pr("con=con+'\"'+conp+'\"+'\ncase t='N'\nmcon=mcon+ss+'='+TRIM(conp)+'.AND.'\n");
  453.    pr("con=con+'STR('+TRIM(conp)+',&n)+'\ncontent=content+ss+'='+TRIM(conp)+'.AND.'\nendcase\n");
  454.    pr("else\n@i+6,12 say s get conp\nread\ndo case\ncase t='D'\nmcon=mcon+s+'=CTOD(\"'+conp+'\")'\n");
  455.    pr("con=con+'CTOD(\"'+conp+'\"'\ncontent=content+s+'=CTOD(\"'+conp+'\"'\n");
  456.    pr("case t='C'\nmcon=mcon+'AT(\"'+TRIM(conp)+'\",'+s+')>0'\ncontent=content+s+'=\"'+conp+'\"'\n");
  457.    pr("con=con+'\"'+conp+'\"'\ncase t='N'\nmcon=mcon+s+'='+TRIM(conp)\n");
  458.    pr("con=con+'STR('+conp+',&n)'\ncontent=content+s+'='+TRIM(conp)\nendcase\ncon=&con\nexit\nendif\n");
  459.    pr("i=i+1\nenddo\nendif\nseek con\nw=.t.\nset color to w+/b\nclear\n@10,10 say '╒²╘┌▓Θ╤»,╟δ╔╘║≥...'\n");
  460.    pr("if .NOT.EOF()\nif w\ndo &ftprg\nDO REP\nendif\nskip\ndo while .NOT.EOF()\n");/*do form*/
  461. /**   pr("if &content\nif w\n*if gs=1\n*do form\n*else\ndo &ftprg\n*endif\ndo rep\nelse exit\nendif\nendif\nskip\nenddo\nendif\nDO D_P\nDO SHUT\nendif\nenddo\nenddo\n");**/
  462.    pr("if &content\nif w\n");
  463. /**   if (!duoflag)
  464.      pr("*if gs=1\n*do form\n*else\ndo &ftprg\n*endif\n");**/
  465.    pr("if dd=\"0\"\ndo &ftprg\nendif\n");
  466.    pr("do rep\nelse exit\nendif\nendif\nskip\nenddo\nendif\nDO D_P with dd\nDO SHUT\nendif\nenddo\nenddo\n");
  467.    fclose(lp);
  468.    system("cls");
  469.    cursor(8,18);
  470.    color_puts("*** ╦≈ ╥² ▓Θ ╤» ╔· │╔ ═Ω ▒╧ ***",10);
  471.    dela();
  472. }
  473. /*-------------------------------------------*/
  474. /*          ╢¿ ╥σ ╫Θ ║╧ ╚╬ ╥Γ ╠⌡ ╝■          */
  475. /*-------------------------------------------*/
  476. get_mc()
  477. {  int i,n=0,c;
  478.    int row,col,cl,m,con=1,j,k;
  479.    char str[31];
  480.    FILE *fp,*dp;
  481.    system("cls");
  482.    fp=fopen("meno.txt","a");
  483.    dp=fopen("lmop.txt","a");
  484.    i=0;
  485.    wd=ldb[0].dbs;
  486.    rd=ldb[0].dbs;
  487.    judge(0);
  488.    cls(16,1,22,80,48|33);
  489.    n=in_c(&i);
  490.    /*cursor(14,0);
  491.    for (m=1;m<80;m++) putchar('-');*/
  492.    cls(16,1,25,80,48|33);
  493.    prt(15,10,48|33,"╫Θ║╧╠⌡╝■╚τ╧┬ ");
  494. /*   print1(48|33," ");*/
  495.    row=17;
  496.    col=2;
  497.    m=1;
  498.    prt(row,col,0|30,"%d. %s ",m,wd->db[n-1].field);
  499.    fprintf(fp,"#%s#%s#%c#%d",wd->db[n-1].field,ldb[i].name,wd->db[n-1].type,wd->db[n-1].len);
  500.    /*print1(0|30,"#%s#%s#%c#%d",wd->db[n-1].field,ldb[i].name,wd->db[n-1].type,wd->db[n-1].len);*/
  501.    if (wd->db[n-1].type=='C') k=1;
  502.    while (con!=0)
  503.      {   prt(22,0,48|33,"╠⌡╝■╣╪╧╡░ⁿ└¿: 1_.AND. 2_.OR. 3_.NOT. 4_.AND..NOT. 5_.OR..NOT.  ╟δ╤í╘±(0╜ß╩°):");
  504.      while ((con=getn(0,5,22,77))=='u'||con=='U'||con=='d'||con=='D') ;
  505.      /*color_puts(" ",10);*/
  506.      col+=10;
  507.      cursor(row,col);
  508.      switch (con)
  509.        {   case 1 : print1(0|30,".AND.");
  510.             col+=5;
  511.             fprintf(fp,"#.AND.");
  512.             break;
  513.            case 2 : print1(0|30,".OR.");
  514.             col+=4;
  515.             fprintf(fp,"#.OR.");
  516.             break;
  517.            case 3 : print1(0|30,".NOT.");
  518.             col+=5;
  519.             fprintf(fp,"#.NOT.");
  520.             break;
  521.            case 4 : print1(0|30,".AND..NOT.");
  522.             col+=10;
  523.             fprintf(fp,"#.AND..NOT.");
  524.             break;
  525.            case 5 : print1(0|30,".OR..NOT.");
  526.             col+=9;
  527.             fprintf(fp,"#.OR..NOT.");
  528.             break;
  529.            case 0 : cls(23,1,24,80,48|33);
  530.             if (col>15)
  531.               {  prt(22,10,48|33,"╟δ╢¿╥σ▓Θ╤»╠⌡╝■╡─╩╢▒≡├√: ");
  532.                  scanf("%s",str);
  533.                  cls(16,1,24,80,48|33);
  534.               }
  535.             else strcpy(str,wd->db[n-1].field);
  536.             if (k==1) fprintf(dp,"#%s#,#C#\n",str);
  537.             else fprintf(dp,"#%s#,##\n",str);
  538.             prt(22,10,48|33,"╩╟╖±╗╣╙╨╞Σ╦ⁿ╫Θ║╧╠⌡╝■(Y/N)? ");
  539.             if ((c=bioskey(0)%256)!='Y'&&c!='y')  {  fprintf(fp,"#\n#####\n"); continue;  }
  540.             else
  541.               {  m++;
  542.                  row=17;
  543.                  con=1;
  544.                  col=2;
  545.                  k=0;
  546.                  cls(18,1,24,80,0|30);
  547.                  color_puts(" ",10);
  548.                  prt(row,col,0|30,"%d.",m);
  549.                  fprintf(fp,"#\n");
  550.               }
  551.             break;
  552.        }
  553.      n=in_c(&i);
  554.      if (col>68)  {  row++;     col=2;  }
  555.      if (col<10) cursor(row,col+2);
  556.      else cursor(row,col);
  557.      print1(0|30," %s ",wd->db[n-1].field);
  558.      fprintf(fp,"#%s#%s#%c#%d",wd->db[n-1].field,ldb[i].name,wd->db[n-1].type,wd->db[n-1].len);
  559.      if (wd->db[n-1].type=='C') k=1;
  560.      }
  561.    fclose(fp);
  562.    fclose(dp);
  563.    return(m);
  564. }
  565. /*-------------------------------------------------*/
  566. /*          ╫Θ ║╧ ╚╬ ╥Γ ╠⌡ ╝■ ▓Θ ╤» ╔· │╔          */
  567. /*-------------------------------------------------*/
  568. mix(h)
  569. int h;
  570. {  int n,/*no,*/rep,c,i,j,m,len,row,r,wh;
  571.    char tj[9],name[31],*s,fh[11],dbf[9],con[11],ty;
  572.    FILE *fq,*fp,*dp,*lp;
  573.    rep=1;
  574.    system("cls");cursor(8,15);color_puts("*** ╧┬ ├µ ╔· │╔ ╫Θ ║╧ ╚╬ ╥Γ ╠⌡ ╝■ ▓Θ ╤» ***",10);
  575.    cursor(13,8);color_puts("    ╫Θ║╧╚╬╥Γ╠⌡╝■╩╟═¿╣²┬▀╝⌐╣╪╧╡╖√╜½╥╗╕÷╗≥╥╗╕÷╥╘╔╧╡─╫╓╢╬╫Θ\
  576.    \n║╧╞≡└┤, ╩╡╝╩▓Θ╤»╩▒, ╘┘╕°│÷╫╓╢╬╡─╛▀╠σ╓╡. ╒δ╢╘▓╗═¼╟Θ┐÷, ▓Θ\n╤»╠⌡╝■╡─╛▀╠σ╓╡╗ß╙╨╦∙▓╗═¼.\n\
  577.    \n    ─·╝╚┐╔╥╘┤╙╥╗╕÷┐Γ╓╨╤í╫╓╢╬╠ß╠⌡╝■, ╥▓┐╔╥╘╘┌╢¿╥σ┴╦┴¼\n╜╙┐Γ║≤, ┤╙╢α╕÷┐Γ╓╨╤í╫╓╢╬╠ß╠⌡╝■.",10);
  578.    go_on();explain=(char *)malloc(25*sizeof(char));
  579.    strcpy(explain,"*** ╫Θ║╧╚╬╥Γ╠⌡╝■▓Θ╤» ***");no=0;
  580.    if(h==1)
  581.    {strcpy(tj,"lm");
  582.    add(h,tj);
  583.    lp=fopen("lookm.prg","w");
  584.    if(fopen("mixscr1.prg","r")!=NULL)system("del mixscr*.*");
  585.    fp=fopen("lmop.txt","w");fclose(fp);
  586.    dp=fopen("meno.txt","w");fclose(dp);
  587.    dp=fopen("lm.txt","w");
  588.    }
  589.    else
  590.    if(h==0)
  591.    {fp=fopen("lmop.txt","a");
  592.    dp=fopen("lm.txt","a");
  593.    system("copy lookm.prg mid.prg > oztom");
  594.    mj=(char *)malloc(80*sizeof(char));
  595.    mid=fopen("mid.prg","r");
  596.    lp=fopen("lookm.prg","w");
  597.    fgets(mj,30,mid);
  598.    while (strncmp("sele 10",mj,7)!=0)
  599.    { fputs(mj,lp);
  600.    fgets(mj,30,mid);
  601.    }
  602.    system("del mid.prg");
  603.    strcpy(tj,"lm");
  604.    no=add(h,tj);
  605.    }
  606.    while (rep)
  607.      {  repeat=1;
  608.     c=getroad(no);
  609.     if (c==0)
  610.     {rep=0;
  611.      continue;}
  612.     n1++;
  613.     if (repeat==0) continue;
  614.     if (c>1)deflink(name);
  615.     else
  616.        {
  617.        prt(22,15,48|33,"╟δ╢¿╥σ┴¼╜╙┐Γ╡─╩╢▒≡├√(╫ε╢α30╕÷╫╓╖√): ");
  618.        scanf("%30s",name);
  619. /*       strcpy(name,ldb[0].mean);*/
  620.        wd=ldb[0].dbs; rd=ldb[0].dbs;
  621.        }
  622.     n=get_mc();
  623.     strcpy(sele,"mix");
  624.     r=sele_disp(name);
  625. /*    fprintf(lp,"gs%d=%d\n",no+1,r);*/
  626.     cre(no,"lm");
  627.     cre1(no,lp);
  628.     cre2(name,n,dp,duoflag);
  629.     no++;
  630.     for (wh=0;wh<6 && ldb[wh].dbs!=NULL;wh++) free(ldb[wh].dbs);
  631.     }
  632.    fclose(dp);
  633. pr("dd=' '\n");
  634.    fprintf(lp,"sele 10\nuse LB excl\nzap\nappe from lm.txt deli with #\n");
  635.    fprintf(lp,"use lop excl\nzap\nappe from lmop.txt deli with #\nuse\n");
  636.    fprintf(lp,"link=space(10)\ncty=' '\ndo while .T.\nh='  '\nhh=' '\nno=0\nct=0\ndo &path\\lmenu with 'lm'\n");
  637.    fprintf(lp,"if h='0'\nreturn\nendif\ndf=f&h\nset proc to &path\\pro\ndo while .T.\ndo lop\n");
  638.    fprintf(lp,"if hh='0'\nexit\nendif\ndo relation with num\n\nclear\n");
  639.    dp=fopen("meno.txt","r");
  640.    pr("do case\n");
  641.    for (m=1;m<no+1;m++)
  642.      {  fprintf(lp,"case h='%d'\n",m);
  643.     n=1;  row=5;
  644.     s=(char *)malloc(256*sizeof(char));
  645.     while (fgets(s,256,dp)&&strcmp(s,"#####\n")!=0)
  646.       {  j=1;
  647.          fprintf(lp,"do case\ncase hh='%d'\n@3,5 say '╟δ╩Σ╚δ╠⌡╝■╡─╛▀╠σ─┌╚▌: '\ncon=''\nmcon=''\n",n);
  648.          while (s[j]!='\n')
  649.            {  i=0;
  650.           while (s[j]!='#') fh[i++]=s[j++];
  651.           fh[i]='\0';
  652.           i=0; j++;
  653.           while (s[j]!='#') dbf[i++]=s[j++];
  654.           dbf[i]='\0';
  655.           ty=s[j+1];
  656.           i=0; j+=3;
  657.           len=0;
  658.           while (s[j]!='#') len=10*len+s[j++]-'0';
  659.           j++; i=0;
  660.           while (s[j]!='\n'&&s[j]!='#') con[i++]=s[j++];
  661.           con[i]='\0';
  662.           if (s[j]!='\n') j++;
  663.           pr("mark=0\n");
  664.           switch (ty)
  665.             {  case 'C':
  666.                case 'L': fprintf(lp,"value=space(%d)\n@%d,5 say '%s' get value\nread\n",len,row,fh);
  667.                  fprintf(lp,"con=con+'%s->%s=\"'+TRIM(value)+'\"'\nvalue=TRIM(value)\n",dbf,fh);
  668.                  fprintf(lp,"mcon=mcon+'AT(\"&value\",%s->%s)>0'\n",dbf,fh);
  669.                  break;
  670.                case 'N': fprintf(lp,"value=space(%d)\n@%d,5 say '%s ┤≤╙┌ ' get value\nread\n",len,row,fh);
  671.                  pr("v=trim(value)\nif len(v)<>0\n");
  672.                  fprintf(lp,"value=val(value)\ncon=con+'%s->%s>'+str(value,%d)\n",dbf,fh,len);
  673.                  fprintf(lp,"mcon=mcon+'%s->%s>'+str(value,%d)\nmark=1\nendif\n",dbf,fh,len);
  674.                  fprintf(lp,"value=space(%d)\n@%d,30 say ' ╡╚╙┌ ' get value\nread\n",len,row);
  675.                  pr("v=trim(value)\nif len(v)<>0\nif mark=1\ncon=con+'.AND.'\nmcon=mcon+'.AND.'\nendif\n");
  676.                  fprintf(lp,"value=val(value)\ncon=con+'%s->%s='+str(value,%d)\n",dbf,fh,len);
  677.                  fprintf(lp,"mcon=mcon+'%s->%s='+str(value,%d)\nmark=1\nendif\n",dbf,fh,len);
  678.                  fprintf(lp,"value=space(%d)\n@%d,55 say ' ╨í╙┌ ' get value\nread\n",len,row);
  679.                  pr("v=trim(value)\nif len(v)<>0\nif mark=1\ncon=con+'.AND.'\nmcon=mcon+'.AND.'\nendif\n");
  680.                  fprintf(lp,"value=val(value)\ncon=con+'%s->%s<'+str(value,%d)\n",dbf,fh,len);
  681.                  fprintf(lp,"mcon=mcon+'%s->%s<'+str(value,%d)\nendif\n",dbf,fh,len);
  682.                  break;
  683.                case 'D': fprintf(lp,"value='  /  /  '\n@%d,5 say '%s ═φ╙┌ ' get value pict '@D'\nread\n",row,fh);
  684.                  pr("if value<>'  /  /  '\nmark=1\n");
  685.                  fprintf(lp,"con=con+'%s->%s>'+'CTOD(\"'+value+'\")'\n",dbf,fh);
  686.                  fprintf(lp,"mcon=mcon+'%s->%s>'+'CTOD(\"'+value+'\")'\nendif\n",dbf,fh);
  687.                  fprintf(lp,"value='  /  /  '\n@%d,30 say ' ╡╚╙┌ ' get value pict '@D'\nread\n",row);
  688.                  pr("if value<>'  /  /  '\nif mark=1\ncon=con+'.AND.'\nmcon=mcon+'.AND.'\nendif\n");
  689.                  fprintf(lp,"con=con+'%s->%s='+'CTOD(\"'+value+'\")'\n",dbf,fh);
  690.                  fprintf(lp,"mcon=mcon+'%s->%s='+'CTOD(\"'+value+'\")'\nmark=1\nendif\n",dbf,fh);
  691.                  fprintf(lp,"value='  /  /  '\n@%d,55 say ' ╘τ╙┌ ' get value pict '@D'\nread\n",row);
  692.                  pr("if value<>'  /  /  '\nif mark=1\ncon=con+'.AND.'\nmcon=mcon+'.AND.'\nendif\n");
  693.                  fprintf(lp,"con=con+'%s->%s<'+'CTOD(\"'+value+'\")'\n",dbf,fh);
  694.                  fprintf(lp,"mcon=mcon+'%s->%s<'+'CTOD(\"'+value+'\")'\nendif\n",dbf,fh);
  695.                  break;
  696.             }
  697.           if (strcmp(con,"")!=0) {  fprintf(lp,"con=con+'%s'\n",con); fprintf(lp,"mcon=mcon+'%s'\n",con);  }
  698.           row++;
  699.            }
  700.          n++;
  701.          pr("endcase\n");
  702.       }
  703.     free(s);
  704.      }
  705. /**   pr("endcase\ndo lcr\ndo shut\nendif\nenddo\nenddo\nreturn\n");**/
  706. /**/
  707.   pr("endcase\n");
  708. /*   if (duoflag)
  709.      pr("do lcr with \"1\"\n");
  710.    else
  711.      pr("do lcr with \"0\"\n");*/
  712.    pr("do lcr with dd\n");
  713.    pr("do shut\nendif\nenddo\nenddo\nreturn\n");
  714. /**/
  715.    pr("**************************************************\n");
  716.    fclose(lp);
  717.    fclose(dp);
  718.    /*dp=fopen("meno.txt","w");fclose(dp);*/
  719.    system("cls");
  720.    cursor(8,15);
  721.    color_puts("*** ╫Θ ║╧ ╚╬ ╥Γ ╠⌡ ╝■ ▓Θ ╤» ╔· │╔ ═Ω ▒╧ ***",10);
  722.    dela();
  723. }
  724. /*-------------------------------------------*/
  725. /*          ╢¿ ╥σ ╫Θ ║╧ ╣╠ ╢¿ ╠⌡ ╝■          */
  726. /*-------------------------------------------*/
  727. get_fc(l,cp)
  728. int l;
  729. FILE *cp;
  730. {  int i,n=0,N=0,NN=0,mark;
  731.    int c,nf,nd,nt,nm,flag;
  732.    char DD[9],ss[256],dd[120],tt[10],*str,*ms;
  733.    char FF[11],midchr[11];
  734.    int row,col,m,con=1,j,k;
  735.    FILE *sp;
  736.    i=0; strcpy(ss,"#"); strcpy(dd,"#");
  737.    cls(1,1,25,80,48|33);
  738.    sp=fopen("lfop.txt","a");
  739.    rd=ldb[0].dbs;
  740.    wd=ldb[0].dbs;
  741.    judge(0);
  742.    n=in_c(&i);
  743.    col=1;
  744.    prt(16,col,0|30,"%s",wd->db[n-1].field);
  745.    strcat(ss,wd->db[n-1].field);
  746.    strcat(dd,ldb[i].name);
  747.    strcat(dd,"#");
  748.    tt[N++]=wd->db[n-1].type;
  749.    while (con!=0)
  750.      {  prt(22,0,48|33,"╠⌡╝■╣╪╧╡░ⁿ└¿: 1_.AND. 2_.OR. 3_.NOT. 4_.AND..NOT. 5_.OR..NOT.  ╟δ╤í╘±(0╜ß╩°):");
  751.     while ((con=getn(0,5,22,77))=='u'||con=='U'||con=='d'||con=='D') ;
  752.     col+=10;
  753.     cursor(16,col);
  754.     switch (con)
  755.       {   case 1 : print1(0|30,".AND.");
  756.                col+=5;
  757.                strcat(ss,"#.AND.#");
  758.                break;
  759.           case 2 : print1(0|30,".OR.");
  760.                col+=4;
  761.                strcat(ss,"#.OR.#");
  762.                break;
  763.           case 3 : print1(0|30,".NOT.");
  764.                col+=5;
  765.                strcat(ss,"#.NOT.#");
  766.                break;
  767.           case 4 : print1(0|30,".AND..NOT.");
  768.                col+=10;
  769.                strcat(ss,"#.AND..NOT.#");
  770.                break;
  771.           case 5 : print1(0|30,".OR..NOT.");
  772.                col+=9;
  773.                strcat(ss,"#.OR..NOT.#");
  774.                break;
  775.           case 0 : strcat(ss,"#");
  776.                tt[N]='\0';
  777.                fprintf(cp,"con%d%d=\"",l+1,NN+1);
  778.                ms=(char *)malloc(300*sizeof(char));
  779.                for (nm=0;nm<300;nm++) ms[nm]='\0';
  780.                str=(char *)malloc(33*sizeof(char));
  781.                cls(1,2,25,80,0|30);
  782.                prt(0,1,0|30,"%s",explain);
  783.                prt(4,5,0|30,"─·╢¿╥σ╡─▓Θ╤»╠⌡╝■╬¬:");
  784.                cursor(5,1);
  785.                prt(5,1,0|30,"------------------------------------------------------------------------------------------");
  786.                prt(6,3,0|30,"%s",ss);
  787.                prt(8,5,0|30,"▓Θ╤»╠⌡╝■╡─╛▀╠σ╓╡");
  788.                print1(0|30," ");
  789.                /*color_puts(" ",10);*/
  790.                row=9;
  791.                nf=1;
  792.                nd=1;
  793.                nt=0;
  794.                nm=0; getchar();
  795.                while (ss[nf]!='\0')
  796.              {   cursor(row,3);
  797.                  j=0;
  798.                 /* while (dd[nd]!='#') DD[j++]=dd[nd++];
  799.                  DD[j]='\0';
  800.                  j=0;*/
  801.                  while (ss[nf]!='#') {  print1(0|30,"%c",ss[nf]); FF[j++]=ss[nf++];  }
  802.                  FF[j]='\0';
  803.                  j=0;
  804.                  while (dd[nd]!='#') DD[j++]=dd[nd++];
  805.                  DD[j]='\0';
  806.                              cursor(row,13);
  807.                  mark=0;
  808.                  k=0;
  809.                  flag=0;
  810.                  if (tt[nt]=='C') {  strcat(ms,"AT(");  nm +=3;  }
  811.                  else {  strcat(ms,DD);  strcat(ms,"->");  strcat(ms,FF);
  812.                      nm +=strlen(DD)+strlen(FF)+2;
  813.                   }
  814.                  switch (tt[nt])
  815.                    {   case 'C' :
  816.                    case 'L' : print1(0|30," = ");
  817.                           if (tt[nt]=='L') ms[nm++]='=';
  818.                           ms[nm++]='"';
  819.                           fprintf(cp,"%s->%s='",DD,FF);
  820.                           cursor(row,16);
  821.                         while ((c=getchar())!='\n')
  822.                           {fprintf(cp,"%c",c);  ms[nm++]=c;  }
  823.                           fprintf(cp,"'");
  824.                           ms[nm++]='"';
  825.                           break;
  826.                    case 'N' : print1(0|30," >           =           <           ");
  827.                           cursor(row,16);
  828.                           while ((c=getchar())!='\n')
  829.                         {  if (k==0) {  fprintf(cp,"%s->%s>",DD,FF);  ms[nm++]='>';  }
  830.                            k=1;
  831.                            mark=1;
  832.                            fprintf(cp,"%c",c);
  833.                            ms[nm++]=c;
  834.                         }
  835.                           k=0;
  836.                           cursor(row,28);
  837.                           while ((c=getchar())!='\n')
  838.                         {  if (mark&&k==0)
  839.                              {  fprintf(cp,".OR.%s->%s=",DD,FF);
  840.                             strcat(ms,".OR.");  strcat(ms,DD);
  841.                             strcat(ms,"->");  strcat(ms,FF);
  842.                             nm+=strlen(DD)+strlen(FF)+6;  ms[nm++]='=';
  843.                              }
  844.                            else if (k==0) {  fprintf(cp,"%s->%s=",DD,FF);  ms[nm++]='=';  }
  845.                            fprintf(cp,"%c",c);
  846.                            ms[nm++]=c;
  847.                            k=1;
  848.                            mark=1;
  849.                            flag=1;
  850.                         }
  851.                           k=0;
  852.                           cursor(row,40);
  853.                           while ((c=getchar())!='\n')
  854.                         {  if (mark&&k==0) {  if (flag)
  855.                                     {  fprintf(cp,".OR.");  strcat(ms,".OR.");  nm+=4;  }
  856.                                       else
  857.                                     {  fprintf(cp,".AND.");  strcat(ms,".AND.");  nm+=5;  }
  858.                                       fprintf(cp,"%s->%s<",DD,FF);
  859.                                       strcat(ms,DD);  strcat(ms,"->");  strcat(ms,FF);
  860.                                       nm+=strlen(DD)+strlen(FF)+2;  ms[nm++]='<';
  861.                                    }
  862.                            else if (k==0) {  fprintf(cp,"%s->%s<",DD,FF);  ms[nm++]='<';  }
  863.                            fprintf(cp,"%c",c);
  864.                            ms[nm++]=c;
  865.                            k=1;
  866.                         }
  867.                           break;
  868.                    case 'D' : print1(0|30," ╘τ╙┌    /   /     ╡╚╙┌    /   /     ═φ╙┌    /   /   ");
  869.                           if ((c=getn(0,12,row,19))!=0)
  870.                         {  fprintf(cp,"%s->%s<CTOD('",DD,FF);
  871.                            mark=1;
  872.                            strcat(ms,"<CTOD(");
  873.                            nm+=6;  ms[nm++]='"';
  874.                            fprintf(cp,"%d/",c);
  875.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  876.                            while ((c=getn(1,31,row,23))==0) error();
  877.                            fprintf(cp,"%d/",c);
  878.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  879.                            while ((c=getn(1,99,row,27))==0) error();
  880.                            fprintf(cp,"%d')",c);
  881.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);
  882.                            ms[nm++]='"';  ms[nm++]=')';
  883.                         }
  884.                           if ((c=getn(0,12,row,37))!=0)
  885.                         {  if (mark)
  886.                              {  fprintf(cp,".OR.%s->%s=CTOD('",DD,FF);
  887.                             strcat(ms,".OR.");  strcat(ms,DD);  strcat(ms,"->");
  888.                             strcat(ms,FF);  strcat(ms,"=CTOD(");
  889.                             nm+=strlen(DD)+strlen(FF)+8;  ms[nm++]='"';
  890.                              }
  891.                            else {  fprintf(cp,"%s->%s=CTOD('",DD,FF);
  892.                                strcat(ms,"=CTOD(");  nm+=6;  ms[nm++]='"';
  893.                             }
  894.                            mark=1;
  895.                            fprintf(cp,"%d/",c);
  896.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  897.                            while ((c=getn(1,31,row,41))==0) error();
  898.                            fprintf(cp,"%d/",c);
  899.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  900.                            while ((c=getn(1,99,row,45))==0) error();
  901.                            fprintf(cp,"%d')",c);
  902.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);
  903.                            ms[nm++]='"';  ms[nm++]=')';
  904.                            flag=1;
  905.                         }
  906.                           if ((c=getn(0,12,row,55))!=0)
  907.                         {  if (mark) {  if (flag) {  fprintf(cp,".OR.");
  908.                                          strcat(ms,".OR.");  nm+=4;
  909.                                       }
  910.                                 else {  fprintf(cp,".AND.");  strcat(ms,".AND.");  nm+=5;  }
  911.                                 fprintf(cp,"%s->%s>CTOD('",DD,FF);
  912.                                 strcat(ms,DD);  strcat(ms,"->");  strcat(ms,FF);
  913.                                 strcat(ms,">CTOD(");  nm+=strlen(DD)+strlen(FF)+8;  ms[nm++]='"';
  914.                                  }
  915.                            else {  fprintf(cp,"%s->%s>CTOD('",DD,FF);
  916.                                strcat(ms,">CTOD(");  nm+=6;  ms[nm++]='"';
  917.                             }
  918.                            fprintf(cp,"%d/",c);
  919.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  920.                            while ((c=getn(1,31,row,59))==0) error();
  921.                            fprintf(cp,"%d/",c);
  922.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);  ms[nm++]='/';
  923.                            while ((c=getn(1,99,row,63))==0) error();
  924.                            fprintf(cp,"%d')",c);
  925.                            itoa(c,str,10);  strcat(ms,str);  nm+=strlen(str);
  926.                            ms[nm++]='"';  ms[nm++]=')';
  927.                         }
  928.                           break;
  929.                    }
  930.                  if (tt[nt++]=='C')
  931.                    {  ms[nm++]=',';  strcat(ms,DD);  strcat(ms,"->");
  932.                   strcat(ms,FF);  strcat(ms,")>0");  nm+=strlen(DD)+strlen(FF)+5;
  933.                    }
  934.                  row++;
  935.                  nf++;
  936.                  while (ss[nf]!='#'&&ss[nf]!='\0') {  fprintf(cp,"%c",ss[nf]);  ms[nm++]=ss[nf++];  }
  937.                  if (ss[nf]!='\0') nf++;
  938.                  nd++;
  939.              }
  940.                fprintf(cp,"\"\n");
  941.                if (N>1)
  942.              {  prt(23,10,0|30,"╟δ╢¿╥σ▓Θ╤»╠⌡╝■╡─╩╢▒≡├√: ");
  943.                 scanf("%s",str);
  944.                 cls(2,1,24,80,0|30);
  945.              }
  946.                else strcpy(str,wd->db[n-1].field);
  947.                if (strchr(tt,'C')!=NULL)
  948.              {  fprintf(sp,"#%s#,#C#\n",str);  fprintf(cp,"mcon%d%d='%s'\n",l+1,NN+1,ms);  }
  949.                else fprintf(sp,"#%s#,##\n",str);
  950.                free(ms);
  951.                NN++;
  952.                prt(23,20,0|30,"╩╟╖±╝╠╨°╢¿╥σ▓Θ╤»╠⌡╝■(Y/N)? ");
  953. /*               scanf("%c",&c);*/
  954.             while (((c=getchar())!='N')&&(c!='Y')&&(c!='y')&&(c!='n'));
  955.                if (c!='Y'&&c!='y')  { fclose(sp); continue; }
  956.                else
  957.              { cls(1,1,25,80,48|33);
  958. /*             system("cls");*/
  959.                 col=1;
  960.                 judge(0);
  961.                 strcpy(ss,"#");
  962.                 strcpy(dd,"#");
  963.                 N=0;
  964.                 con=1;
  965.              }
  966.                break;
  967.       }
  968.     n=in_c(&i);
  969.     if (col>68)  {  col=1;  cursor(17,col);  }
  970.     else cursor(16,col);
  971.     print1(0|30,"%s",wd->db[n-1].field);
  972.     /*printf("%s",wd->db[n-1].field);*/
  973.     strcat(ss,wd->db[n-1].field);
  974.     strcat(dd,ldb[i].name);
  975.     strcat(dd,"#");
  976.     tt[N++]=wd->db[n-1].type;
  977.      }
  978.    return(NN);
  979. }
  980. /*-------------------------------------------------*/
  981. /*          ╫Θ ║╧ ╣╠ ╢¿ ╠⌡ ╝■ ▓Θ ╤» ╔· │╔          */
  982. /*-------------------------------------------------*/
  983. fix(h)
  984. int h;
  985. {  int /*no,*/rep=1,i,j,c,n,r,wh;
  986.    char tj[9],name[31];
  987.    FILE *fq,*dp,*lp,*fp;
  988.    system("cls");
  989.    cursor(8,15);color_puts("*** ╧┬ ├µ ╔· │╔ ╫Θ ║╧ ╣╠ ╢¿ ╠⌡ ╝■ ▓Θ ╤» ***",10);
  990.    cursor(14,8);color_puts("    ╘┌╙ª╙├╧╡═│╓╨, ╬¬─▄╖╜▒π▓Θ╒╥┬·╫π─│╣╠╢¿▓╗▒Σ╠⌡╝■╡─╝╟┬╝, \n╟δ╢¿╥σ▓Θ╤»╠⌡╝■, ▓ó╕°│÷╠⌡╝■╫╓╢╬╡─╚╖╟╨╓╡.\n\
  991.    \n    ─·╝╚┐╔╥╘┤╙╥╗╕÷┐Γ╓╨╤í╫╓╢╬╠ß╠⌡╝■, ╥▓┐╔╥╘╘┌╢¿╥σ┴╦┴¼╜╙┐Γ\n║≤, ┤╙▓╗═¼┐Γ╓╨╤í╫╓╢╬╠ß╠⌡╝■.",10);
  992.    go_on(); explain=(char *)malloc(25*sizeof(char)); strcpy(explain,"*** ╫Θ║╧╣╠╢¿╠⌡╝■▓Θ╤» ***");
  993.    no=0;
  994.    if(h==1){strcpy(tj,"lf");add(h,tj);lp=fopen("lookf.prg","w");dp=fopen("lf.txt","w");
  995.    if (fopen("lfop.txt","r")!=NULL) system("del lfop.txt");
  996.    if(fopen("fixscr1.prg","r")!=NULL)system("del fixscr*.*");}
  997. else if(h==0){dp=fopen("lf.txt","a");
  998. system("copy lookf.prg mid.prg > oztom");
  999. mj=(char *)malloc(80*sizeof(char));
  1000. mid=fopen("mid.prg","r");lp=fopen("lookf.prg","w");
  1001. fgets(mj,30,mid);
  1002. while (strncmp("sele 10",mj,7)!=0)
  1003. {fputs(mj,lp);
  1004.  fgets(mj,30,mid);}
  1005. system("del mid.prg");
  1006. strcpy(tj,"lf");
  1007. no=add(h,tj);}
  1008.    while (rep)
  1009.      {  repeat=1;
  1010.     c=getroad(no);
  1011.     if (c==0)
  1012.       {  rep=0;
  1013.          continue;
  1014.       }
  1015.     n1++;
  1016.     if (repeat==0) continue;
  1017.     if (c>1)  deflink(name);
  1018.     else
  1019.        {
  1020.        prt(22,15,48|33,"╟δ╢¿╥σ┴¼╜╙┐Γ╡─╩╢▒≡├√(╫ε╢α30╕÷╫╓╖√): ");
  1021.        scanf("%30s",name);
  1022. /*       strcpy(name,ldb[0].mean);*/
  1023.        wd=ldb[0].dbs; rd=ldb[0].dbs;
  1024.        }
  1025.     n=get_fc(no,lp);
  1026.     strcpy(sele,"fix");
  1027.     r=sele_disp(name);
  1028. /*    fprintf(lp,"gs%d=%d\n",no+1,r);*/
  1029.     cre(no,"lf");
  1030.     cre1(no,lp);
  1031.     cre2(name,n,dp,duoflag);
  1032.     no++;
  1033.     for (wh=0;wh<6 && ldb[wh].dbs!=NULL;wh++) free(ldb[wh].dbs);
  1034.      }
  1035.    fclose(dp);
  1036. /**/pr("dd=' '\n");
  1037. /**   pr("sele 10\nuse LDB excl\nzap\nappe from lf.txt deli with #\n");**/
  1038.    pr("sele 10\nuse LB excl\nzap\nappe from lf.txt deli with #\n");
  1039.    pr("use lop excl\nzap\nappe from lfop.txt deli with #\nuse\n");
  1040.    pr("link=space(10)\ncty=' '\ndo while .T.\nh='  '\nhh=' '\nno=0\nct=0\n");
  1041.    pr("do &path\\lmenu with 'lf'\nif h='0'\nreturn\nendif\ndf=f&h\nset proc to &path\\pro\ndo while .T.\ndo lop\n");
  1042.    pr("if hh='0'\nexit\nendif\ndo relation with num\n");
  1043.    pr("con='con'+h+hh\ncon=&con\nif cty='C'\n");
  1044. /**   pr("mcon='mcon'+h+hh\nmcon=&mcon\nendif\ndo lcr\ndo shut\nendif\nenddo\nenddo\nreturn\n");**/
  1045. /**/
  1046.    pr("mcon='mcon'+h+hh\nmcon=&mcon\nendif\n");
  1047. /*   if (duoflag)
  1048.      pr("do lcr with \"1\"\n");
  1049.    else
  1050.      pr("do lcr with \"0\"\n") ;*/
  1051.    pr("do lcr with dd\n");
  1052.    pr("do shut\nendif\nenddo\nenddo\nreturn\n");
  1053.  /**/
  1054.    pr("******************************************************\n");
  1055.    fclose(lp);
  1056.    system("cls");
  1057.    cursor(8,15);
  1058.    printf("*** ╫Θ ║╧ ╣╠ ╢¿ ╠⌡ ╝■ ▓Θ ╤» ╔· │╔ ═Ω ▒╧ ***");
  1059.    dela();
  1060. }
  1061. /*----------------------------------------------*/
  1062. /*          ╤í ╞Ñ ┼Σ ─ú ║² ▓Θ ╤» ╫╓ ╢╬          */
  1063. /*----------------------------------------------*/
  1064. get_mf(l,sp,dp)
  1065. int l;
  1066. FILE *sp,*dp;
  1067. {  int m,n=0,i,j,k=1,ct=0;
  1068.    char M[128];
  1069.    struct DBF *p;
  1070.    system("cls");
  1071.    i=0;
  1072.    j=0;
  1073.    getmemd();
  1074.    wd=newd;
  1075.    rd=newd;
  1076.    p=ldb[0].dbs;
  1077.    m=0;
  1078.    while (m<p->ctc)
  1079.      {  if (p->db[m].type=='C')
  1080.       {  wd->db[i].type=p->db[m].type;
  1081.          wd->db[i].len=p->db[m].len;
  1082.          wd->db[i].dec=p->db[m].dec;
  1083.          strcpy(wd->db[i].field,p->db[m].field);
  1084.          wd->ctc++;
  1085.          i++;
  1086.          M[j++]=0;
  1087.       }
  1088.     m++;
  1089.         if (m==p->ctc&&p->next!=NULL) {  m=0;  p=p->next;  }
  1090.     if (i%COUNT==0&&i!=0)
  1091.       {  getmemd();
  1092.          wd->next=newd;
  1093.          newd->last=wd;
  1094.          wd=newd;
  1095.          i=0;
  1096.       }
  1097.      }
  1098.    wd=rd;
  1099.    Cdisp();
  1100.    prt(16,10,48|33,"╟δ╤í╘±╞Ñ┼Σ─ú║²▓Θ╤»╫╓╢╬: ");
  1101.    while ((n=get(16,34))!=0)
  1102.      {  if (n=='U'||n=='D')
  1103.       {  if (n=='U'&&wd->last!=NULL) wd=wd->last;
  1104.          if (n=='D'&&wd->next!=NULL) wd=wd->next;
  1105.          Cdisp();
  1106.          continue;
  1107.       }
  1108.     else if (M[n-1]!=1)  {  ct++;  M[n-1]=1;  mark(n,"*");  }
  1109.          else {  M[n-1]=0;  mark(n," "); ct--; }
  1110.      }
  1111.    j=0;
  1112.    i=0;
  1113.    wd=rd;
  1114.    while (i<wd->ctc)
  1115.      {  if (M[j++]==1)
  1116.       {  fprintf(sp,"k%d%d='%s'\nlen%d%d=%d\n",l+1,k,wd->db[i].field,l+1,k,wd->db[i].len);
  1117.          k++;
  1118.          fprintf(dp,"#%s#,##\n",wd->db[i].field);
  1119.       }
  1120.     i++;
  1121.     if (i==wd->ctc&&wd->next!=NULL) {  i=0;  wd=wd->next;  }
  1122.      }
  1123.    wd=ldb[0].dbs;/*add*/
  1124.    rd=wd;/*add*/
  1125.    return(ct);
  1126. }
  1127. /*----------------------------------------------*/
  1128. /*          ╧╘ ╩╛ ┐Γ ╓╨ ╫╓ ╖√ ╨═ ╫╓ ╢╬          */
  1129. /*----------------------------------------------*/
  1130. Cdisp()
  1131. {  int row,col,i,j,n=0;
  1132.    struct DBF *p;
  1133.    cls(1,1,25,80,48|33);
  1134.    prt(0,1,0|30,"%s",explain);
  1135.    p=rd;
  1136.    while (p!=wd)  {  n+=p->ctc;  p=p->next;  }
  1137.    prt(1,10,48|33,"┐Γ # %s # ╓╨╫╓╖√╨═╫╓╢╬╚τ╧┬",ldb[0].mean);
  1138.    cls(6,6,17,73,0|1);
  1139.    cls(5,5,16,71,0|30);
  1140.    frame(4,4,16,70,0|30);
  1141.    row=5;
  1142.    col=7;
  1143.    for (i=0;i<wd->ctc;i++)
  1144.       {  prt(row,col,0|30,"%2d. %-s",n+i+1,wd->db[i].field);
  1145.      col+=16;
  1146.      if (col>70)
  1147.        {  row++;
  1148.           col=7;
  1149.        }
  1150.       }
  1151. }
  1152. /*-------------------------------------------*/
  1153. /*          ╞Ñ ┼Σ ─ú ║² ▓Θ ╤» ╔· │╔          */
  1154. /*-------------------------------------------*/
  1155. match(h)
  1156. int h;
  1157. {  int /*no,*/rep=1,c,n,i,j,r,wh;
  1158.    char tj[9],name[21];
  1159.    FILE *fq,*lp,*dp,*sp;
  1160.    system("cls");
  1161.    cursor(8,18);
  1162.    color_puts("*** ╧┬ ├µ ╔· │╔ ╞Ñ ┼Σ ─ú ║² ▓Θ ╤» ***",10);
  1163.    cursor(13,8);
  1164.    color_puts("    ╬¬┴╦─▄╢╘─│╝╟╥Σ─ú║²╡──┌╚▌╜°╨╨▓Θ╤», ─·┐╔╢╘╫╓╢╬▓╔╙├╞Ñ┼Σ\n\n─ú║²▓Θ╤», ╝┤╫╙┤«▓Θ╤».",10);
  1165.    cursor(18,15);
  1166.    color_puts("╫ó╥Γ: ╞Ñ┼Σ─ú║²▓Θ╤»╓╗─▄╢╘╫╓╖√╨═╫╓╢╬.",10);
  1167.    go_on();
  1168.    explain=(char *)malloc(21*sizeof(char));
  1169.    strcpy(explain,"*** ╞Ñ┼Σ─ú║²▓Θ╤» ***");
  1170.    no=0;
  1171.    system("copy c:\\cdbag4\\match.prg *.* > oztom");
  1172.    if(h==1){strcpy(tj,"lp");add(h,tj);lp=fopen("lookp.prg","w");
  1173.        sp=fopen("lpop.txt","w");
  1174.        if(fopen("matscr1.prg","r")!=NULL)system("del matscr*.*");
  1175.        dp=fopen("lp.txt","w");}
  1176. else  if(h==0)
  1177.     {sp=fopen("lpop.txt","a");
  1178.      dp=fopen("lp.txt","a");
  1179.      system("copy lookp.prg mid.prg > oztom");
  1180.      mj=(char *)malloc(80*sizeof(char));
  1181.      mid=fopen("mid.prg","r");
  1182.      lp=fopen("lookp.prg","w");
  1183.      fgets(mj,30,mid);
  1184.      while (strncmp("sele 10",mj,7)!=0)
  1185.      { fputs(mj,lp);
  1186.        fgets(mj,30,mid);
  1187.       }
  1188.     system("del mid.prg");
  1189.     strcpy(tj,"lp");
  1190.     no=add(h,tj);}
  1191.    while (rep)
  1192.      {  repeat=1;
  1193.     c=getroad(no);
  1194.     if (c==0)
  1195.       {  rep=0;
  1196.          continue;
  1197.       }
  1198.     n1++;
  1199.     if (repeat==0) continue;
  1200.     if (c>1)  deflink(name);
  1201.     else
  1202.        {
  1203.        prt(22,15,48|33,"╟δ╢¿╥σ┴¼╜╙┐Γ╡─╩╢▒≡├√(╫ε╢α30╕÷╫╓╖√): ");
  1204.        scanf("%30s",name);
  1205. /*       strcpy(name,ldb[0].mean);*/
  1206.        wd=ldb[0].dbs; rd=ldb[0].dbs;
  1207.        }
  1208.     n=get_mf(no,lp,sp);
  1209.     strcpy(sele,"mat");
  1210.     r=sele_disp(name);
  1211. /*    fprintf(lp,"gs%d=%d\n",no+1,r);*/
  1212.     cre(no,"lp");
  1213.     cre1(no,lp);
  1214.     cre2(name,n,dp,duoflag);
  1215.     no++;
  1216.     for (wh=0;wh<6 && ldb[wh].dbs!=NULL;wh++) free(ldb[wh].dbs);
  1217.      }
  1218.    fclose(dp);
  1219. /**/pr("dd=' '\n");
  1220. /**   pr("road=path\nsele 10\nuse LDB excl\nzap\nappe from lp.txt deli with #\n");**/
  1221. /**/   pr("road=path\nsele 10\nuse LB excl\nzap\nappe from lp.txt deli with #\n");
  1222.    pr("use lop excl\nzap\nappe from lpop.txt deli with #\nuse\n");
  1223.    pr("link=space(10)\ncty=' '\nbool=.F.\ndo while .T.\nh='  '\nhh=' '\n");
  1224.    pr("no=0\nct=0\ndo &path\\lmenu with 'lp'\nif h='0'\nreturn\nendif\ndf=f&h\n");
  1225.    pr("set proc to &path\\pro\ndo while .T.\ndo lop\nif hh='0'\nexit\nendif\n");
  1226.    pr("sele a\nUSE &PATH\\DB\nLOCA FOR NAME=B1\nIF SHAREFLAG='Y' .OR. SHAREFLAG='y'\nROAD=TRIM(SHAREPATH)\nUSE\n");
  1227.    pr("endif\ndo relation with num\nsele 1\ngo top\nclear\n");
  1228.    pr("key='k'+h+hh\nkey=&key\nlen='len'+h+hh\nmat=space(&len)\n");
  1229.    pr("@10,10 say '╟δ╩Σ╚δ &key ╞Ñ┼Σ╫╓┤«: ' get mat\n");
  1230.    pr("read\n");
  1231.    pr("key=trim(key)\n");
  1232.    pr("mat=trim(mat)\n");
  1233.    pr("POINT=1\nRUPT=0\nPAT1=' '\nPAT2=' '\nPAT3=' '\nPSCH=0\nMAT=MAT+'*'\n");
  1234.    pr("DO WHILE POINT<LEN(MAT)\nEOMA=SUBSTR(MAT,POINT,1)\nIF EOMA='*'.OR.EOMA='?'\n");
  1235.    pr("NEXT=SUBSTR(MAT,POINT+1,1)\nXX=NEXT<>'*'.AND.NEXT<>'?'\nIF PSCH=1.AND.XX\nRUPT=RUPT+1\nENDIF\n");
  1236.    pr("ELSE\nPSCH=1\nDO CASE\nCASE RUPT=0\nPAT1=TRIM(PAT1)+EOMA\nCASE RUPT=1\nPAT2=TRIM(PAT2)+EOMA\n");
  1237.    pr("CASE RUPT=2\nPAT3=TRIM(PAT3)+EOMA\nCASE RUPT=3\nEXIT\nENDCASE\nENDIF\nPOINT=POINT+1\nENDDO\n");
  1238.    pr("MAT=SUBSTR(MAT,1,LEN(MAT)-1)\nset color to w+/b\nclear\n@10,10 say '╒²╘┌▓Θ╤»,╟δ╔╘║≥...'\n");
  1239.    pr("ww=.t.\ndo while .not.eof()\nKEY2=TRIM(&KEY)\n");
  1240.    pr("IF (AT(PAT1,KEY2)<>0.OR.PAT1=' ').AND.(AT(PAT2,KEY2)<>0.OR.PAT2=' ').AND.(AT(PAT3,KEY2)<>0.OR.PAT3=' ')\n");
  1241. /**   pr("do match\nENDIF\nclear\nif bool\nif ww\n*if gs=1\n*do form\nif .not. ww\ngo bottom\nendif\n");
  1242.    pr("else\ndo &ftprg\nendif\ndo rep\nelse\nexit\nendif\nbool=.F.\nendif\nskip\n");**/
  1243. /**/
  1244.    pr("do match\nendif\nclea\nif bool\nif ww\n");
  1245. /***   if (!duoflag)***/
  1246. /*     pr("if dd=\"0\"\ndo form\nendif\n");*/
  1247.    pr("if .not. ww\ngo bottom\nendif\n");
  1248. /*   pr("else \n");*/
  1249. /***   if(!duoflag)***/
  1250. /*     pr("if dd=\"0\"\ndo &ftprg\nendif\n");*/
  1251.    pr("do &ftprg\n");
  1252.    pr("do rep\nelse\nexit\nendif\nbool=.F.\nendif\nskip\n");
  1253. /**   pr("pat1=' '\npat2=' '\npat3=' '\nenddo\ndo d_p\ndo shut\nendif\nenddo\nenddo\nreturn\n");**/
  1254. /**/   pr("pat1=' '\npat2=' '\npat3=' '\nenddo\ndo d_p with dd\ndo shut\nendif\nenddo\nenddo\nreturn\n");
  1255.    pr("**************************************\n");
  1256.    fclose(lp);
  1257.    fclose(sp);
  1258.    system("cls");
  1259.    cursor(8,15);
  1260.    color_puts("*** ╞Ñ ┼Σ ─ú ║² ▓Θ ╤» ╔· │╔ ═Ω ▒╧ ***",10);
  1261.    dela();
  1262. }
  1263. /*----------------------------------*/
  1264. /*          ╤╙ │┘ ╫╙ │╠ ╨≥          */
  1265. /*----------------------------------*/
  1266. dela()
  1267. {  int i,j;
  1268.    for (i=0;i<10;i++)
  1269.       for (j=-30000;j<30000;j++) ;
  1270. }
  1271. /*-------------------------------------------------*/
  1272. /*          ╜╙ ╩╒ ╝ⁿ ┼╠ ╩Σ ╚δ ╥╗ ╕÷ ╫╓ ╖√          */
  1273. /*-------------------------------------------------*/
  1274. getcc()
  1275. {  union REGS r;
  1276.    r.h.ah=0;
  1277.    int86(0x16,&r,&r);
  1278.    if (r.h.al==27) exit(0);
  1279.    if (r.h.al) return(r.h.al);
  1280.    return(r.x.ax);
  1281. }
  1282. /*-------------------------------------*/
  1283. /*          ╢┴ ╚í ╥╗ ╕÷ ╩² ╫╓          */
  1284. /*-------------------------------------*/
  1285. getn(i,j,row,col)
  1286. int i,j,row,col;
  1287. {  int key,n=0;
  1288.    cursor(row,col);
  1289.    while ((key=getcc())!=0x0D)
  1290.      {  putchar(key);
  1291.     switch (key)
  1292.       {  case 18688 : return('U');
  1293.          case 20736 : return('D');
  1294.          case 15104 : return('H');
  1295.          case    8  : if (n!=0) n=n/10;
  1296.               else  {  error();  cursor(row,col);  }
  1297.               break;
  1298.          default    : n=10*n+key%256-'0';
  1299.               break;
  1300.       }
  1301.      }
  1302.    if ((n>=i&&n<=j)||n==0) return(n);
  1303.    else {  error();
  1304.        getn(i,j,row,col);
  1305.     }
  1306. }
  1307. /*-------------------------------------*/
  1308. /*          ╢┴ ╚í ╥╗ ╕÷ ╫╓ ╖√          */
  1309. /*-------------------------------------*/
  1310. get(row,col)
  1311. int row,col;
  1312. {  int key,c=0,n=0;
  1313.    struct DBF *p;
  1314. /*   cursor(row,col);
  1315.    printf("   ");*/
  1316.    cursor(row,col);
  1317.    while ((key=getcc())!=0x0D)
  1318.      {  putchar(key);
  1319.     switch (key)
  1320.       {  case 18432 : return('u');
  1321.          case 18688 : return('U');
  1322.          case 20480 : return('d');
  1323.          case 20736 : return('D');
  1324.          case    8  : if (n!=0) n=n/10;
  1325.               else  { error();  cursor(row,col);  }
  1326.               break;
  1327.          default    : n=10*n+key%256-'0';
  1328.               break;
  1329.       }
  1330.      }
  1331.    p=rd;
  1332.    while (p!=wd) {  c+=p->ctc;  p=p->next;  }
  1333.    if ((n>=c+1&&n<=c+wd->ctc)||n==0) return(n);
  1334.       else{    error();
  1335.        get(row,col);
  1336.     }
  1337. }
  1338. /*-------------------------------*/
  1339. /*          ╣Γ ▒Ω ╢¿ ╬╗          */
  1340. /*-------------------------------*/
  1341. cursor(x,y)
  1342. int x,y;
  1343. {  union REGS inregs;
  1344.    union REGS outregs;
  1345.    inregs.h.ah=2;
  1346.    inregs.h.bh=0;
  1347.    inregs.h.dh=x;
  1348.    inregs.h.dl=y;
  1349.    int86(0x10,&inregs,&outregs);
  1350. }
  1351.  
  1352. /*----------------------------------------------*/
  1353. /*          ░┤ ╤╒ ╔½ ╩Σ │÷ ╥╗ ╫╓ ╖√ ┤«          */
  1354. /*----------------------------------------------*/
  1355.  
  1356. color_puts(s,color)
  1357. char *s;
  1358. int color;
  1359. {  union REGS r;
  1360.    int x,y,z;
  1361.    now_cursor(&x,&z);
  1362.    y=z;
  1363.    while (*s)
  1364.      {  if (*s=='\n')
  1365.       {  s++;
  1366.          x++;
  1367.          y=z;
  1368.          continue;
  1369.       }
  1370.     cursor(x,y);
  1371.     r.h.ah=9;
  1372.     r.h.al=*s++;
  1373.     r.h.bl=color;
  1374.     r.h.bh=0;
  1375.     r.x.cx=1;
  1376.     int86(0x10,&r,&r);
  1377.     y++;
  1378.     cursor(x,y);
  1379.      }
  1380.    return;
  1381. }
  1382. /*----------------------------------------*/
  1383. /*          ╚í ╣Γ ▒Ω ╡▒ ╟░ ╬╗ ╓├          */
  1384. /*----------------------------------------*/
  1385. now_cursor(x,y)
  1386. int *x,*y;
  1387. {  union REGS r;
  1388.    r.h.ah=3;
  1389.    r.h.bh=0;
  1390.    int86(0x10,&r,&r);
  1391.    *x = r.h.dh;
  1392.    *y = r.h.dl;
  1393.    return;
  1394. }
  1395. /*-------------------------------------------------------------------*/
  1396. /*          ╚╖ ╢¿ ╡▒ ╟░ ╣ñ ╫≈ ╓╕ ╒δ ▓ó ╧╘ ╩╛ ┐Γ ╜ß ╣╣ ▓╦ ╡Ñ          */
  1397. /*-------------------------------------------------------------------*/
  1398. judge(c)
  1399. int c;
  1400. {  int n=0;
  1401. /*   while (wb->base[n].dbs!=rd&&n<10) {  n++;
  1402.      if (n%10==0&&n!=0&&wb->next!=NULL) {
  1403.      wb=wb->next; n=0;  }  }*/
  1404.    while (ldb[n].dbs!=rd) n++;
  1405.    if (c=='U'&&wd->last!=NULL) {wd=wd->last;}
  1406.    if (c=='D'&&wd->next!=NULL) {wd=wd->next;}
  1407.    disp_base(n);
  1408.    cursor(3,10);
  1409.    return(n);
  1410. }
  1411. /*-------------------------------------*/
  1412. /*          ╩Σ │÷ ╠ß ╩╛ ▒Ω ╓╛          */
  1413. /*-------------------------------------*/
  1414. mark(n,c)
  1415. int n;
  1416. char *c;
  1417. {  int x,y;
  1418.    x=(n%COUNT-1)/4+5;/*3;*/
  1419.    if (n%COUNT==0) x=((n-1)%COUNT-1)/4+5;
  1420.    y=(n-1)%4*16+6;
  1421.    cursor(x,y);
  1422.    prt(x,y,0|30,"%s",c);
  1423. /*   putchar(c);*/
  1424. }
  1425.  
  1426. /*-------------------------------------------------*/
  1427. /*          ╡╚ ┤² ╝ⁿ ╚δ ╥╗ ╫╓ ╖√ ║≤ ╝╠ ╨°          */
  1428. /*-------------------------------------------------*/
  1429. go_on()
  1430. {  cursor(23,5);
  1431.    color_puts("░┤╚╬╥Γ╝ⁿ╝╠╨°íºíºíº",15);
  1432.    bioskey(0);
  1433.    cursor(23,5);
  1434.    color_puts("                  ",10);
  1435. }
  1436. /*-------------------------------------*/
  1437. /*          ╟σ │² ▓┐ ╖╓ ╞┴ ─╗          */
  1438. /*-------------------------------------*/
  1439. clear(d,line,lx,ly,rx,ry)
  1440. int d,line,lx,ly,rx,ry;
  1441. {  union REGS inregs,outregs;
  1442.    inregs.h.ah=d;
  1443.    inregs.h.al=line;
  1444.    inregs.h.ch=lx;
  1445.    inregs.h.cl=ly;
  1446.    inregs.h.dh=rx;
  1447.    inregs.h.dl=ry;
  1448.    inregs.h.bh=0;
  1449.    int86(0x10,&inregs,&outregs);
  1450. }
  1451. /*----------------------------------------*/
  1452. /*          ╔Ω ╟δ ╥╗ ┐Γ ╨┼ ╧ó ┐Θ          */
  1453. /*----------------------------------------*/
  1454. getmemb()
  1455. {  int i,n;
  1456.    newb=(struct BASE *)malloc(sizeof(struct BASE));
  1457.    newb->ctc=0;
  1458.    newb->last=newb->next=NULL;
  1459.    for (i=0;i<10;i++)
  1460.       {  strcpy(newb->base[i].mean,"\0");
  1461.      strcpy(newb->base[i].name,"\0");
  1462. /*     for (n=0;n<4;n++)
  1463.      strcpy(newb->base[i].key[n],"\0");*/
  1464.      newb->base[i].dbs=NULL;
  1465.       }
  1466. }
  1467. /*----------------------------------------------*/
  1468. /*          ╔Ω ╟δ ╥╗ ┐Γ ╜ß ╣╣ ╨┼ ╧ó ┐Θ          */
  1469. /*----------------------------------------------*/
  1470. getmemd()
  1471. {  int i;
  1472.    newd=(struct DBF *)malloc(sizeof(struct DBF));
  1473.    newd->ctc=0;
  1474.    newd->last=newd->next=NULL;
  1475.    for (i=0;i<COUNT;i++)
  1476.       {  strcpy(newd->db[i].field,"\0");
  1477.      newd->db[i].type=' ';
  1478.      newd->db[i].len=0;
  1479.      newd->db[i].dec=0;
  1480.       }
  1481. }
  1482.  
  1483. /*----------------------------------*/
  1484. /*          ╤í ╧╘ ╩╛ ╫╓ ╢╬          */
  1485. /*----------------------------------*/
  1486. sele_disp(dname)
  1487. char dname[31];/*without*/
  1488. {  int r,i,j,n,c,t,k=0,bb=1;/*ldb[bb]*/
  1489. /**/ duoflag=0;
  1490.    system("cls");
  1491.    cursor(0,1);
  1492.    color_puts(explain,14|16);
  1493.    cursor(8,10);
  1494.    color_puts("     *** ╧┬├µ╟δ╢¿╥σ▓Θ╤»╜ß╣√╧╘╩╛╧ε ***\n\n─·╓╗╨Φ┤╙▒╗┴¼╜╙╡─╕≈╕÷┐Γ╓╨╖╓▒≡╤í╘±╚⌠╕╔╫╓╢╬╝┤┐╔.",11);
  1495.    i=0;
  1496.    color_puts(" ",10);
  1497.    cursor(12,10);
  1498.    if (ldb[1].dbs!=NULL)
  1499.       {  printf("─·╢¿╥σ╡─┴¼╜╙┐Γ╬¬ :");  cursor(14,15);  }
  1500.    else
  1501.       printf("─·╓╗╤í╘±┴╦╡Ñ╕÷┐Γ : ");
  1502.    while (ldb[i+1].dbs!=NULL)  printf("┐Γ # %s # --> ",ldb[i++].mean);
  1503.    printf("┐Γ # %s #",ldb[i].mean);
  1504.    go_on();
  1505.    cls(1,1,25,80,48|33);
  1506.    cls(10,12,17,53,0|1);
  1507.    cls(9,11,16,51,0|30);
  1508.    frame(8,10,16,50,0|30);
  1509.    prt(0,1,0|30,"%s",explain);
  1510. /**/
  1511.    prt(9,14,0|30,"*** ▓Θ╤»╜ß╣√╝╟┬╝╧╘╩╛╢¿╥σ ***");
  1512.    prt(11,14,0|30,"1. ╡Ñ╝╟┬╝╖╓▒≡╧╘╩╛");
  1513.    prt(13,14,0|30,"2. ╢α╝╟┬╝│╔┼·╧╘╩╛");
  1514.    prt(18,25,48|33,"╟δ ╤í ╘±: ");
  1515.    r=getn(1,2,18,36);
  1516. /**/
  1517.    if (r==2){
  1518.      duoflag=1;
  1519.      goto ll;
  1520.      }
  1521. /**/
  1522.    cls(1,1,25,80,48|33);
  1523.    cls(10,12,17,53,0|1);
  1524.    cls(9,11,16,51,0|30);
  1525.    frame(8,10,16,50,0|30);
  1526.    prt(0,1,0|30,"%s",explain);
  1527. /**/
  1528.  
  1529.    prt(9,14,0|30,"*** ▓Θ╤»╜ß╣√╧╘╩╛╢¿╥σ╖╜╩╜ ***");
  1530.    prt(11,20,0|30,"1.╧╡ ═│ ╢¿ ╥σ");
  1531.    prt(13,20,0|30,"2.╙├ ╗º ╢¿ ╥σ");
  1532.    prt(18,25,48|33,"╟δ ╤í ╘±: ");
  1533.    r=getn(1,2,18,36);
  1534.    if(r==2) {
  1535.    if(ldb[1].dbs==NULL){draw(ss0,dname,PATH);savedef(sele);}
  1536.    else while(ldb[bb].dbs!=NULL)
  1537.         {draw(ss0,dname,PATH);
  1538.          savedef(sele);
  1539.          bb++;
  1540.         }/*ldb[i].name*/
  1541.    }
  1542.   else
  1543.   if(r==1){
  1544. ll:   i=0;
  1545.    cls(1,1,25,80,48|33);
  1546.    while (ldb[i].dbs!=NULL)
  1547.      {   wd=ldb[i].dbs;
  1548.      rd=ldb[i].dbs;
  1549.      for (k=0;k<128;k++) MAR[i][k]=0;
  1550.      judge(0);
  1551.      n=0;
  1552.      t=0;
  1553.      prt(16,10,48|33,"1--╚½▓┐╧╘╩╛        2--▓┐╖╓╧╘╩╛");
  1554.      prt(18,15,48|33,"                                   ");
  1555.      prt(18,20,48|33,"╟δ╤í╘±:");
  1556.      if ((c=getn(1,2,18,28))==1)
  1557.        while (t<wd->ctc)
  1558.          {  MAR[i][n++]=1;
  1559.         t++;
  1560.         if (t==wd->ctc&&wd->next!=NULL) {  t=0;  wd=wd->next;  }
  1561.          }
  1562.      else
  1563.        {  cls(17,1,19,80,48|33);
  1564.           prt(18,15,48|33,"╨Φ╥¬╧╘╩╛╡─╫╓╢╬╙╨(PgUp/PgDn: ╖¡╞┴): ");          while ((c=get(18,50))!=0)
  1565.         {   if (c=='U'||c=='D')
  1566.               {  judge(c);
  1567.              continue;
  1568.               }
  1569.      if (MAR[i][c-1]!=1) {  mark(c,"*");  MAR[i][c-1]=1;}
  1570.             else {  mark(c," "); MAR[i][c-1]=0;  }
  1571.         }
  1572.        }
  1573.      cls(17,1,19,80,48|33);
  1574.      i++;
  1575.      }
  1576.      }
  1577.    savedef_xits(sele);
  1578.    i=0;
  1579.    while (ldb[i].dbs!=NULL)
  1580.      {   wd=ldb[i].dbs;
  1581.      t=i+1;
  1582.      while (ldb[t].dbs!=NULL)
  1583.        {  k=0;
  1584.           j=0;
  1585.           while (k<wd->ctc&&j<128)
  1586.          {  if ((c=cmp(wd->db[k].field,ldb[t].dbs))>=0)
  1587.               if (MAR[i][j]==1)  MAR[t][c]=0;
  1588.             j++;  k++;
  1589.             if (k==wd->ctc&&wd->next!=NULL) {  k=0;  wd=wd->next;  }
  1590.          }
  1591.           t++;
  1592.        }
  1593.      i++;
  1594.      }
  1595.      return(r);
  1596. }
  1597.  
  1598.  prt(int row,int col,int attr,char *format,...)
  1599. {
  1600.     va_list arg;
  1601.     char print_str[254],*string;
  1602.     va_start(arg,format);
  1603.     vsprintf(print_str,format,arg);
  1604.     string=print_str;
  1605.   _SI =(unsigned int) string;
  1606.   _DH =(unsigned char)row;
  1607.   _DL =(unsigned char)col;
  1608.   _CX=1;
  1609.    while(*((char *)_SI)){
  1610.    _AH=(unsigned char)2;
  1611.    _BH=(unsigned char)0;
  1612.    geninterrupt(0x10);
  1613.    ++_DL;
  1614.   _AH=(unsigned char)9;
  1615.   _AL=*((char *)_SI);
  1616.   _SI++;
  1617.   _BH=(unsigned char)0;
  1618.   _BL=(unsigned char)attr;
  1619.   geninterrupt(0x10);
  1620.  }
  1621. }
  1622.  
  1623. readchar()
  1624. {
  1625.   union REGS regs;
  1626.   int t,m;
  1627.   regs.x.ax=0;
  1628.   int86(0x16,®s,®s);
  1629.   t=regs.x.ax & 0x00ff;
  1630.   m=(regs.x.ax-t)/256;
  1631.   if (t!=0) return(t);
  1632.   return(m+200);
  1633. }
  1634.