home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c.doc / 10.prn < prev   
Encoding:
Text File  |  1990-12-06  |  50.3 KB  |  1,681 lines

  1.                                   âïÇéÇ 10                     -- 1 --
  2.                                   --------
  3.  
  4.                        æÄçäÇìêà èÄîîàÉùàæèêò äêÇâÉÇîî
  5.      -----------------------------------------------------------------
  6.  
  7.           é ñá¡¡«⌐  ú½áóÑ  ¼δ αáºαáí«ΓáѼ ¿ «»¿ΦѼ »α«úαá¼¼δ,  ¬«Γ«αδÑ
  8.      ¼«úπΓ íδΓ∞  ¿ß»«½∞º«óá¡δ  ñ½∩  ß«ºñá¡¿∩  ¡á¿í«½ÑÑ  πñ«í¡«ú«  ó¿ñá
  9.      »αÑñßΓáó½Ñ¡¿∩   ¬«¼¼ÑατÑ߬¿σ   ñá¡¡δσ   -  ñ¿áúαá¼¼.  é«º¼«ª¡«ßΓ∞
  10.      »«½πτ¿Γ∞ τ¿ß½«óπε ¿¡Σ«α¼áµ¿ε ó ó¿ºπá½∞¡«⌐ Σ«α¼Ñ τáßΓ« «¬áºδóáÑΓß∩
  11.      «τÑ¡∞  »«½Ñº¡«⌐.  èᬠ óδ ó߬«αÑ πíÑñ¿ΓÑß∞,  ß«ºñá¡¿Ñ ñ¿áúαá¼¼ ¡Ñ
  12.      »αÑñßΓáó½∩ÑΓ Γᬿσ Γαπñ¡«ßΓÑ⌐, ¬á¬ φΓ« »Ñαó«¡áτá½∞¡« ¬áªÑΓß∩.
  13.  
  14.           â½áóá X ¡áτ¿¡áÑΓß∩  «»¿ß᡿Ѽ    »α«ßΓ«ú«    ¿¡ßΓαπ¼Ñ¡Γáα¿∩,
  15.      »«ºó«½∩εΘÑú«  ßΓα«¿Γ∞  ñ¿áúαá¼¼δ.  éΓ«αá∩  τáßΓ∞  ú½áóδ  ß«ñÑনΓ
  16.      «»¿ßá¡¿∩,  ¬á¬ φëà ¿¡ßΓπ¼Ñ¡Γáα¿⌐  ¼«ªÑΓ  íδΓ∞  ¿ß»«½∞º«óá¡  ñ½∩
  17.      »«ßΓα«Ñ¡¿∩  »α«ßΓδσ,  ¡«  »«½Ñº¡δσ  »α«úαá¼¼,  ¬«Γ«αδÑ  »«ºó«½∩εΓ
  18.      óδó«ñ¿Γ∞ ¡Ñ߬«½∞¬« ñ¿áúαá¼¼ «ñ¡«óαѼѡ¡«.
  19.  
  20.           Åα¿¼Ñαδ ó ú½áóÑ ¡á»¿ßá¡δ  ñ½∩  ¬«¼»∞εΓÑα«ó  ßѼÑ⌐ßΓóá  Éæ  ß
  21.      µóÑΓ¡δ¼ úαáΣ¿τÑ߬¿¼ áñá»ΓÑα«¼. êß»«½∞ºπÑΓß∩ τÑΓóÑαΓδ⌐ ó¿ñÑ«αѪ¿¼,
  22.      Γᬠ¬á¬ «¡ »«ññÑনóáÑΓ óßÑ ó¿ñδ µóÑΓ¡δσ  áñá»ΓÑα«ó.  Äñ¡á¬«,  óδ
  23.      ¼«ªÑΓÑ  ½Ñú¬«  ¿º¼Ñ¡¿Γ∞  »αÑñ½«ªÑ¡¡δÑ  Σπ¡¬µ¿¿  ñ½∩  Γ«ú«,  τΓ«íδ
  24.      αáí«ΓáΓ∞ ß ñαπú¿¼¿ Γ¿»á¼¿ áñá»ΓÑα«ó.
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  61. â½áóá X                                                       -- 2 --
  62.  
  63.  
  64.                             ìÄÉîÇïêçÇûꃠäÇìì¢ò
  65.      -----------------------------------------------------------------
  66.  
  67.           ÅÑαÑñ αáºαáí«Γ¬«⌐ »α«úαá¼¼δ «Γ«íαáªÑ¡¿∩ ñá¡¡δσ ¡á φ¬αá¡Ñ óá¼
  68.      ß½ÑñπÑΓ   π∩ß¡¿Γ∞,   ¬á¬   τ¿ß½Ñ¡¡δÑ   º¡áτÑ¡¿∩   »ÑαÑó«ñ∩Γß∩   ó
  69.      ß««ΓóÑΓßΓóπεΘ¿Ñ  ¬««αñ¿¡áΓδ φ¬αá¡á.  èᬠóδ »«¼¡¿ΓÑ,  αẼÑα¡«ßΓ∞
  70.      φ¬αá¡á  ó   τÑΓóÑαΓ«¼   ó¿ñÑ«αѪ¿¼Ñ   320*200,   »α¿τѼ   320   -
  71.      ú«α¿º«¡Γá½∞¡á∩  αẼÑα¡«ßΓ∞ ¿ 200 - óÑαΓ¿¬á½∞¡á∩.  ôτ¿Γδóá∩,  τΓ«
  72.      ñ¿áúαá¼¼δ ¿º«íαáªáεΓß∩ óÑαΓ¿¬á½∞¡δ¼¿ »«½«ßἿ, ñá¡¡δÑ ñ«½ª¡δ íδΓ∞
  73.      »αÑ«íαẫóá¡δ  Γᬿ¼  «íαẫ¼,  τΓ«íδ  «¡¿  »α¿¡¿¼á½¿  º¡áτÑ¡¿∩ ó
  74.      ñ¿á»áº«¡Ñ «Γ 0 ñ« 199.  äá¡¡δ⌐ »α«µÑßß »αÑ«íαẫóá¡¿∩  ¡áºδóáÑΓß∩
  75.      ¡«α¼á½¿ºáµ¿Ñ⌐.
  76.  
  77.           ùΓ«íδ ¡«α¼á½¿º«óáΓ∞  º¡áτÑ¡¿Ñ,  ¡Ñ«íσ«ñ¿¼«  π¼¡«ª¿Γ∞  Ñú« ¡á
  78.      ¡Ñ¬«Γ«αδ⌐  ¬«φΣΣ¿µ¿Ñ¡Γ,  úáαá¡Γ¿απεΘ¿⌐  »«½πτÑ¡¿Ñ  αѺπ½∞ΓáΓá   ó
  79.      ñ¿á»áº«¡Ñ   αẼÑαá   φ¬αá¡á.   ä½∩   «»αÑñѽѡ¿∩   ¬«φΣΣ¿µ¿Ñ¡Γá,
  80.      ¡Ñ«íσ«ñ¿¼«  º¡áΓ∞  ¼á¬ß¿¼á½∞¡«Ñ  ¿  ¼¿¡¿¼á½∞¡«Ñ  º¡áτÑ¡¿∩  τ¿ßѽ,
  81.      óδó«ñ¿¼δσ   ó   ó¿ñÑ   ñ¿áúαá¼¼δ.   ä½∩  «»αÑñѽѡ¿∩  »«ñσ«ñ∩ΘÑú«
  82.      ¬«φΣΣ¿µ¿Ñ¡Γá,  ¡Ñ«íσ«ñ¿¼«   óδτÑßΓ∞   ¼¿¡¿¼á½∞¡«Ñ   º¡áτÑ¡¿Ñ   ¿º
  83.      ¼á¬ß¿¼á½∞¡«ú«  ¿  »«ñѽ¿Γ∞  óÑαΓ¿¬á½∞¡πε  αẼÑα¡«ßΓ∞  φ¬αá¡á  ¡á
  84.      »«½πτÑ¡¡πε  αạ«ßΓ∞.  ê¡δ¼¿  ß½«óἿ,   ñ½∩   4-ú«   ó¿ñÑ«αѪ¿¼á
  85.      ¡«α¼¿απεΘ¿⌐ ¼¡«ª¿Γѽ∞ «»αÑñѽ∩ÑΓß∩ »« Σ«α¼π½Ñ:
  86.  
  87.                   ¡«α¼¿απεΘ¿⌐_¼¡«ª¿Γѽ∞ = 200 / (¼áσ - min)
  88.  
  89.           Æá¬¿¼ «íαẫ¼,   ¬áªñδ⌐   φ½Ñ¼Ñ¡Γ  ñá¡¡δσ  ¡«α¼á½¿ºπÑΓß∩  »«
  90.      Σ«α¼π½Ñ:
  91.  
  92.        ¡«α¼á½¿º«óá¡¡«Ñ_ñá¡¡«Ñ = ¡Ñ«íαáí«Γá¡¡«Ñ_ñá¡¡«Ñ * ¡«α¼_¼¡«ª¿Γѽ∞
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  121. â½áóá X                                                       -- 3 --
  122.  
  123.  
  124.                    ÉÇçÉÇüÄÆèÇ öôìèûêë ÅÄæÆÉÄàìꃠäêÇâÉÇîî
  125.      -----------------------------------------------------------------
  126.  
  127.           ÅαѪñÑ,   τѼ  αáºαáíáΓδóáΓ∞  Σπ¡¬µ¿ε,  α¿ßπεΘπε  ñ¿áúαá¼¼δ,
  128.      ¡Ñ«íσ«ñ¿¼« Γ«τ¡« «»αÑñѽ¿Γ∞, τΓ« «¡á íπñÑΓ ñѽáΓ∞. é«-»Ñαóδσ, «¡á
  129.      ñ«½ª¡á óδ»«½¡∩Γ∞ ßó«ε  ú½áó¡πε ºáñáτπ  -  óδó«ñ¿Γ∞ ñá¡¡δÑ  ó ó¿ñÑ
  130.      ñ¿áúαá¼¼.  öπ¡¬µ¿∩  ñ«½ª¡á  ñ«»π߬áΓ∞  ¿ß»«½∞º«óá¡¿Ñ  ó  ¬áτÑßΓóÑ
  131.      óσ«ñ¡«ú«  »áαá¼ÑΓαá   ¼áßß¿óá   τ¿ßѽ   ß   »½áóáεΘÑ⌐   Γ«τ¬«⌐  ¿
  132.      »αÑ«íαẫóδóáΓ∞ ¿σ ó ¡«α¼á½¿º«óá¡¡δÑ µÑ½δÑ φ¬ó¿óá½Ñ¡Γδ. Åα«úαá¼¼á
  133.      ñ«½ª¡á  íδΓ∞  αÑÑ¡ΓÑαáíѽ∞¡«⌐  ¿  »«ºó«½∩Γ∞   α¿ß«óáΓ∞  ¡Ñ߬«½∞¬«
  134.      ñ¿áúαá¼¼ «ñ¡«óαѼѡ¡«.  öπ¡¬µ¿∩ ñ«½ª¡á ΓᬪѠ ß«ñÑαªáΓ∞ áαúπ¼Ñ¡Γ,
  135.      «»αÑñѽ∩εΘ¿⌐  αáßßΓ«∩¡¿Ñ   ¼Ñªñπ   ñ¿áúαἼἿ,  ß««ΓóÑΓßΓóπεΘ¿¼¿
  136.      αáº¡δ¼  »«ß½Ññ«óáΓѽ∞¡«ßΓ∩¼   ñá¡¡δσ,   ¿,  ¡á¬«¡Ñµ,  «¡á  ñ«½ª¡á
  137.      »«ºó«½∩Γ∞ «»αÑñѽ∩Γ∞ Γ«½Θ¿¡π ½¿¡¿⌐ ñ¿áúαá¼¼δ.
  138.  
  139.           Åα«úαἼᠠ  Σπ¡¬µ¿¿    bargraph(),     »α¿óÑñÑ¡¡á∩    ¡¿ªÑ,
  140.      πñ«ó½ÑΓó«α∩ÑΓ φΓ¿¼ ΓαÑí«óá¡¿∩¼.
  141.  
  142.  
  143.           /* éδó«ñ ñ¿áúαá¼¼δ */
  144.      void bargraph(data,num,offset,min,max,width)
  145.      double *data;      /* ¼áßß¿ó ñá¡¡δσ */
  146.      int num;           /* ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ¼áßß¿óÑ */
  147.      int offset;        /* αáßßΓ«∩¡¿Ñ ¼Ñªñπ ñ¿áúαἼἿ */
  148.      int min,max;       /* ¼¿¡. ¿ ¼á¬. óδó«ñ¿¼δÑ º¡áτÑ¡¿∩ */
  149.      int width;         /* Γ«½Θ¿¡á ½¿¡¿⌐ */
  150.      {
  151.           int y,t,incr;
  152.           double norm_data,norm_ratio,spread;
  153.           char s[80];
  154.           static int color = 0;
  155.           int tempwidth;
  156.  
  157.           /* óßÑúñá ¿ß»«½∞ºπ⌐ΓÑ αẽ¿τ¡δÑ µóÑΓá */
  158.           color++;
  159.           if ( color > 3 ) color = 1;
  160.  
  161.           /* «»αÑñѽѡ¿Ñ ¡«α¼¿απεΘÑú« ¼¡«ª¿Γѽ∩ */
  162.           spread = (double)max-min;
  163.           norm_ratio = 180/spread;
  164.  
  165.           incr = 280/num;/* «»αÑñѽѡ¿Ñ »α«¼ÑªπΓ¬á ¼Ñªñπ º¡áτÑ¡¿∩¼¿ */
  166.           tempwidth = width;
  167.           for (t=0;t<num;++t) {
  168.                norm_data = data[t];
  169.  
  170.           /* »«ñú«¡¬á «Γα¿µáΓѽ∞¡δσ º¡áτÑ¡¿⌐ */
  171.                norm_data = norm_data-(double)min;
  172.                norm_data *= norm_ratio; /* ¡«α¼¿α«óá¡¿Ñ */
  173.                y = (int)norm_data; /* »αÑ«íαẫóá¡¿Ñ Γ¿»á */
  174.                do {
  175.                     Line(179,((t*incr)+20+offset+width),179-y,
  176.                       ((t*incr)+20+offset+width),color);
  177.                width--;
  178.  
  179.  
  180.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  181. â½áóá X                                                       -- 4 --
  182.  
  183.  
  184.                } while(width);
  185.                width = tempwidth;
  186.                }
  187.           }
  188.  
  189.           äáóá⌐ΓÑ ΓΘáΓѽ∞¡«   αáºíÑαѼ   ñá¡¡πε   »α«úαá¼¼π.   öπ¡¬µ¿∩
  190.      bargraph() »«½πτáÑΓ τÑαѺ óσ«ñ¡δÑ »áαá¼ÑΓαδ: ¼áßß¿ó ñá¡¡δσ, τ¿ß½«
  191.      φ½Ñ¼Ñ¡Γ«ó  ó  ¼áßß¿óÑ,  αáßßΓ«∩¡¿Ñ  ¼Ñªñπ ñ¿áúαἼἿ (ñ½∩ ß½πτá∩
  192.      «ñ¡«óαѼѡ¡«ú«  óδó«ñá  ¡Ñ߬«½∞¬¿σ   ñ¿áúαá¼¼),   ¼¿¡¿¼á½∞¡«Ñ   ¿
  193.      ¼á¬ß¿¼á½∞¡«Ñ  º¡áτÑ¡¿∩  ñá¡¡δσ  ¿  Φ¿α¿¡π  ½¿¡¿⌐ ñ¿áúαá¼¼ (Φ¿α¿¡á
  194.      ½¿¡¿¿ ºáñáÑΓß∩ ó Ññ¿¡¿µáσ αáßΓαá).  æΓáΓ¿τÑ߬á∩ »ÑαѼѡ¡á∩  color
  195.      «»αÑñѽ∩ÑΓ  ¡«óδ⌐  µóÑΓ  »α¿  »«óΓ«α¡δσ  «íαáΘÑ¡¿∩σ ¬ bargraph().
  196.      Æá¬¿¼  «íαẫ¼,  αẽ¿τ¡δÑ  »«ß½Ññ«óáΓѽ∞¡«ßΓ¿  ñá¡¡δσ   »α¿   ¿σ
  197.      «ñ¡«óαѼѡ¡«¼  óδó«ñÑ  íπñπΓ  ¿º«íαáªÑ¡δ  ñ¿áúαἼἿ  αẽ¿τ¡«ú«
  198.      µóÑΓá.  Åα¿ óδτ¿ß½Ñ¡¿¿ ¡«α¼¿απεΘÑú« ¼¡«ª¿Γѽ∩ ó¼ÑßΓ« ¼á¬ß¿¼á½∞¡«⌐
  199.      óδß«Γδ  φ¬αá¡á  (200  ñ½∩  4-ú« ó¿ñÑ«αѪ¿¼á) ¿ß»«½∞º«óá¡« ¼Ñ¡∞ΦÑÑ
  200.      τ¿ß½« - 180,  τΓ« ó »«ß½ÑñπεΘѼ »«ºó«½¿Γ ¿ß»«½∞º«óáΓ∞ ñóÑ  ßΓ᫬¿
  201.      φ¬αá¡á  ñ½∩  óδó«ñá »«∩ß¡∩εΘÑ⌐ ¿¡Σ«α¼áµ¿¿.  Äíδτ¡« πñ«í¡ÑÑ,  Ñß½¿
  202.      ñ¿áúαἼᠠ»«½¡«ßΓ∞ε  ºá¡¿¼áÑΓ  φ¬αá¡  ¡Ñºáó¿ß¿¼«  «Γ  ¬«½¿τÑßΓóá
  203.      óδó«ñ¿¼δσ  τ¿ßѽ.  ìá»α¿¼Ñα,  ñ¿áúαá¼¼á,  «ΓαáªáεΘá∩ ¼á½δÑ ¡áí«αδ
  204.      ñá¡¡δσ,  óδú½∩ñ¿Γ í«½ÑÑ »α¿ó½Ñ¬áΓѽ∞¡«⌐,  Ñß½¿ «¡á ºá¡¿¼áÑΓ  óÑß∞
  205.      φ¬αá¡,  á  ¡Ñ  ß«ó«¬π»¡«ßΓ∞ ßí¿óΦ¿σß∩ ó ¬πτπ óÑαΓ¿¬á½∞¡δσ »«½«ß ó
  206.      «ñ¡«¼ ¿º πú½«ó  φ¬αá¡á.  ä½∩  αẼÑΘÑ¡¿∩  ñ¿áúαá¼¼δ  «Γ¡«ß¿Γѽ∞¡«
  207.      Φ¿α¿¡δ  φ¬αá¡á »«ß½Ññ¡∩∩ (ºñÑß∞ ΓᬪѠµÑ½Ñß««íαạÑÑ ¿ß»«½∞º«óáΓ∞
  208.      ¼Ñ¡∞ΦÑÑ τ¿ß½« 280 ó¼ÑßΓ« 300)  ñѽ¿Γß∩  ¡á  ¬«½¿τÑßΓó«  óδó«ñ¿¼δσ
  209.      φ½Ñ¼Ñ¡Γ«ó,  »«½πτÑ¡¡δ⌐ αѺπ½∞ΓáΓ ºáΓѼ ¿ß»«½∞ºπεΓ »α¿ «»αÑñѽѡ¿¿
  210.      ú«α¿º«¡Γá½∞¡δ󠬫«αñ¿¡áΓ ßΓÑভÑ⌐ ñ¿áúαá¼¼δ.  é  ¬«¡µÑ  »α«úαá¼¼δ
  211.      óδ»«½¡∩ÑΓß∩  µ¿¬½¿τÑ߬á∩ ¡«α¼á½¿ºáµ¿∩ ñá¡¡δσ ¿ óδτÑατ¿óá¡¿Ñ ½¿¡¿⌐
  212.      ºáñá¡¡«⌐ Γ«½Θ¿¡δ ß π¬áºá¡¡δ¼ ß¼ÑΘÑ¡¿Ñ¼.
  213.  
  214.           öπ¡¬µ¿∩ bargraph() - ¬½ετÑóá∩ Σπ¡¬µ¿∩, ¡« φΓ« Γ«½∞¬« «ñ¡« ¿º
  215.      ¼¡«ú¿σ  ßαÑñßΓó,  »«ºó«½∩εΘ¿σ óá¼ α¿ß«óáΓ∞ ñ¿áúαá¼¼δ »«τΓ¿ ½εí«ú«
  216.      ó¿ñá.  Äß¡«ó¡δÑ ¿º φΓ¿σ ßαÑñßΓó óδ πº¡áÑΓÑ ó »α«µÑßßÑ ñá½∞¡Ñ⌐ΦÑú«
  217.      ¿º½«ªÑ¡¿∩ ¼áΓÑα¿á½á.
  218.  
  219.  
  220.           éδτÑατ¿óá¡¿Ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩.
  221.           -----------------------------------
  222.  
  223.           ä¿áúαá¼¼á íπñÑΓ óδú½∩ñÑΓ∞ í«½ÑÑ »α¿ó½Ñ¬áΓѽ∞¡«⌐ ¿ ¡áú½∩ñ¡«⌐,
  224.      Ñß½¿  óñ«½∞  ¡¿ª¡Ñú«  ¬αá∩  óδτÑαΓ¿Γ∞  ½¿¡¿ε   ¡π½Ñó«ú«   πα«ó¡∩.
  225.      Åα«úαá¼¼á Σπ¡¬µ¿¿ grid(), »αÑñßΓáó½Ñ¡¡á∩ ó ñá¡¡«¼ αáºñѽÑ, ß½πª¿Γ
  226.      ¿¼Ñ¡¡« ñ½∩ φΓ¿σ µÑ½Ñ⌐.
  227.  
  228.           /* éδó«ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ */
  229.      void grid(min,max)
  230.      int min,max;
  231.      {
  232.           register int t;
  233.  
  234.           goto_xy(22,0); printf("%d",min);
  235.           goto_xy(0,0); printf("%d",max);
  236.           line(180,10,180,300,1);
  237.      }
  238.  
  239.  
  240.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  241. â½áóá X                                                       -- 5 --
  242.  
  243.  
  244.  
  245.           éδ ó¿ñ¿ΓÑ,  τΓ«  Σπ¡¬µ¿∩  grid()  Γᬠ ªÑ,  ¬á¬ ¿ bargraph()
  246.      «ßΓáó½∩ÑΓ ó¡¿ºπ ñóÑ ßΓ᫬¿ ñ½∩ óδó«ñá »«∩ß¡∩εΘ¿σ ¼ÑΓ«¬  ¿  ñαπú«⌐
  247.      ß»αáó«τ¡«⌐ ¿¡Σ«α¼áµ¿¿.
  248.  
  249.  
  250.           éδó«ñ ¼ÑΓ«¬ φ½Ñ¼Ñ¡Γ«ó ñ¿áúαá¼¼.
  251.           -------------------------------
  252.  
  253.           ùáßΓ« »«½∞º«óáΓÑ½ε  ¡Ñ«íσ«ñ¿¼« »«¼ÑτáΓ∞ º¡áτÑ¡¿∩,  óδó«ñ¿¼δÑ
  254.      ñ¿áúαá¼¼«⌐.  ìá»α¿¼Ñα,  ¡á  ñ¿áúαá¼¼Ñ,   »«¬áºδóáεΘÑ⌐   ¿º¼Ñ¡Ñ¡¿Ñ
  255.      »α¿í뫨  ¬«α»«αᵿ¿  ºá  »∩Γ∞ ½ÑΓ,  µÑ½Ñß««íαạ« ¬áªñδ⌐ ßΓÑαªÑ¡∞
  256.      ñ¿áúαá¼¼δ »«¼ÑΓ¿Γ∞  ß««ΓóÑΓßΓóπεΘ¿¼  ú«ñ«¼.  è«¡Ñτ¡«,  óδ  óßÑúñá
  257.      ¼«ªÑΓÑ   φΓ«  ßñѽáΓ∞  óαπτ¡πε,  ¿ß»«½∞ºπ∩  Σπ¡¬µ¿¿  goto_xy()  ¿
  258.      printf();  Σπ¡¬µ¿∩ label(), »αÑñßΓáó½Ñ¡¡á∩ ¡¿ªÑ, «ßó«í«ñ¿Γ óáß «Γ
  259.      φΓ«⌐ απΓ¿¡¡«⌐ αáí«Γδ, «¡á áóΓ«¼áΓ¿τÑ߬¿ óδó«ñ¿Γ ¡Ñ«íσ«ñ¿¼δÑ ¼ÑΓ¬¿
  260.      ó ¡πª¡«¼  ¼ÑßΓÑ  φ¬αá¡á.  éσ«ñ¡δ¼¿  »áαá¼ÑΓαἿ  Σπ¡¬µ¿¿  label()
  261.      ∩ó½∩εΓß∩:  ¼áß߿󠠼ÑΓ«¬  ¿  ¿σ  ¬«½¿τÑßΓó«.  ä½¿¡á  ¬áªñ«⌐ ¼ÑΓ¬¿
  262.      «úαá¡¿τÑ¡á 20 ß¿¼ó«½á¼¿ ( ó¬½ετá∩ π¬áºáΓѽ∞ ¬«¡µá ),  ¡«  φΓ«  ¡Ñ
  263.      ∩ó½∩ÑΓß∩  ªÑßΓ¬¿¼ «úαá¡¿τÑ¡¿Ñ¼ ¿ »α¿ ¡Ñíσ«ñ¿¼«ßΓ¿ óδ ¼«ªÑΓÑ ½Ñú¬«
  264.      ¿º¼Ñ¡¿Γ∞ ¼á¬ß¿¼á½∞¡πε ñ½¿¡π ¼ÑΓ«¬.
  265.  
  266.  
  267.                /* éδó«ñ ¼ÑΓ«¬ ¡á φ¬αá¡ */
  268.      void label(str,num)
  269.      char str[][20]; /* ¼áßß¿ó ¼ÑΓ«¬ */
  270.      int num; /* ¬«½¿τÑßΓó« ¼ÑΓ«¬ */
  271.      {
  272.           int i,j,inc;
  273.  
  274.           inc = 38/num;
  275.           i = 2; /* «»αÑñѽѡ¿Ñ ¡áτá½∞¡«⌐ Γ«τ¬¿ */
  276.           for (j=0;j<num;j++) {
  277.                goto_xy(23,i);
  278.                printf(str[j]);
  279.                i += inc;
  280.           }
  281.      }
  282.  
  283.  
  284.  
  285.  
  286.  
  287.           éδτÑατ¿óá¡¿Ñ óß»«¼«úáΓѽ∞¡δσ ½¿¡¿⌐.
  288.           -----------------------------------
  289.  
  290.           é ¡Ñ¬«Γ«αδσ  ß½πτá∩σ  »«½Ñº¡« óδó«ñ¿Γ∞ ú«α¿º«¡Γá½∞¡δÑ »«½«ßδ
  291.      ñ½∩ ßαáó¡Ñ¡¿∩ óδß«Γ ßΓÑভÑ⌐ ñ¿áúαá¼¼δ.  Æá¬ ¬á¬  ß»½«Φ¡δÑ  ½¿¡¿¿
  292.      ¼«úπΓ «Γó½Ñ¬áΓ∞ »«½∞º«óáΓѽ∩, Γ« ñ½∩ φΓ«⌐ µÑ½¿ ½πτΦÑ ¿ß»«½∞º«óáΓ∞
  293.      »π¡¬Γ¿α¡δÑ ½¿¡¿¿.  öπ¡¬µ¿∩ hashlines(),  »α¿óÑñÑ¡¡á∩ ¡¿ªÑ, α¿ßπÑΓ
  294.      ΓαÑíπѼδÑ »π¡¬Γ¿α¡δÑ ½¿¡¿¿.
  295.  
  296.                /* éδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ */
  297.      void hashlines()
  298.  
  299.  
  300.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  301. â½áóá X                                                       -- 6 --
  302.  
  303.  
  304.      {
  305.           int i,j;
  306.           for (i=10;1<180;i+=10) {
  307.                for (j=10;j<300;j+=5)
  308.                     mempoint(i,j,3); /* «ñ¡á Γ«τ¬á ¡á ¬áªñδÑ 5 Ññ¿¡¿µ
  309.                                         αáßΓαá */
  310.           }
  311.      }
  312.  
  313.           éδó«ñ ¡áñ»¿ßÑ⌐.
  314.           ---------------
  315.  
  316.           Åα¿ «ñ¡«óαѼѡ¡«¼ óδó«ñÑ ¡Ñ߬«½∞¬¿σ ¡áí«α«ó ó  ó¿ñÑ ñ¿áúαá¼¼
  317.      »«½Ñº¡«   «»αÑñѽ¿Γ∞   µóÑΓ  ñ¿áúαá¼¼δ,  ß««ΓóÑΓßΓóπεΘ¿⌐  ¬áªñ«¼π
  318.      ¡áí«απ.  ¥Γ« ¼«ª¡« ßñѽáΓ∞,  ¡á»α¿¼Ñα,  óδñáó ¡áñ»¿ß∞, ß«ñÑαªáΘπε
  319.      ¡á¿¼Ñ¡«óá¡¿Ñ  ¡áí«αá  ¿  ¿ß»«½∞ºπѼδ⌐  ñ½∩  ¡Ñú«  µóÑΓ ñ¿áúαá¼¼δ.
  320.      öπ¡¬µ¿∩ legend(), »α¿óÑñÑ¡¡á∩ ºñÑß∞, óδó«ñ¿Γ ¡á¿¼Ñ¡«óá¡¿∩ ¡áí«α«ó
  321.      ¿   »α∩¼«πú«½∞¡¿¬  ß««ΓóÑΓßΓóπεΘÑú«  µóÑΓá,  ó  ¬áτÑßΓóÑ  óσ«ñ¡δσ
  322.      »áαá¼ÑΓα«ó «¡á ¿ß»«½∞ºπÑΓ ß»¿ß«¬ ¡á¿¼Ñ¡«óá¡¿⌐  ¿  ¿σ  ¬«½¿τÑßΓó«.
  323.      öπ¡¬µ¿∩ legend() ¿ß»«½∞ºπÑΓ Σπ¡¬µ¿ε fill_box(),  «»¿ßá¡¡πε αá¡ÑÑ,
  324.      ñ½∩ óδó«ñá µóÑΓ¡«ú« »α∩¼«πú«½∞¡¿¬á.
  325.  
  326.                /* éδó«ñ ¡áñ»¿ß¿ */
  327.      void legend(names,num)
  328.      char names[][20];
  329.      int num;            /* ¬«½¿τÑßΓ󫠡ῼѡ«óá¡¿⌐ */
  330.      {
  331.           int color = 1,i,j;
  332.  
  333.           goto_xy(24,0); /* ¡áñ»¿ß∞ »α«¿ºó«ñ¿Γß∩ ó »«ß½Ññ¡Ñ⌐ ßΓα«¬Ñ */
  334.           j = 0;
  335.           for (i=0;i<num;i++) {
  336.                /* óδó«ñ ¡á¿¼Ñ¡«óá¡¿∩ */
  337.                printf("%s   ",names[i]);
  338.                /* «»αÑñѽѡ¿Ñ ¬««αñ¿¡áΓδ µóÑΓ¡«ú« »α∩¼«πú«½∞¡¿¬á. é 4
  339.                   αѪ¿¼Ñ ¬áªñ«¼π ½¿ΓÑα¡«¼π ß¿¼ó«½π «Γó«ñ¿Γß∩ 8 Ññ¿¡¿µ
  340.                   αáßΓαá (ó Φ¿α¿¡π)  */
  341.                j += strlen(names[i]) * 8 + 4;
  342.                fill_box(192,j,198,j+12,color);
  343.                j += 28; /* »α«ñó¿ªÑ¡¿Ñ ¬ ß½ÑñπεΘÑ¼π »«½ε óδó«ñá */
  344.                color ++;
  345.                if ( color>3 ) color = 1;
  346.           }
  347.      }
  348.  
  349.      _________________________________________________________________
  350.  
  351.            âαáΣ¿τÑ߬¿⌐ α¿ßπ¡«¬ ¡á ßΓα 355 ¡Ñ ¼«ªÑΓ íδΓ∞ ó«¿ß»α«¿ºóÑñÑ¡
  352.            ¿¼ÑεΘ¿¼¿ß∩ ßαÑñßΓóἿ. (ÉÑñ. »ÑαÑó«ñá ê.üδτ¬«ó߬¿⌐.)
  353.      _________________________________________________________________
  354.  
  355.      É¿ß.10-1. ÉѺπ½∞ΓáΓ αáí«Γδ »α«úαá¼¼δ »«ßΓα«Ñ¡¿∩ ñ¿áúαá¼¼
  356.  
  357.  
  358.  
  359.  
  360.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  361. â½áóá X                                                       -- 7 --
  362.  
  363.  
  364.  
  365.           Åα«ßΓÑ⌐Φá∩ »α«úαá¼¼á óδó«ñá ñ¿áúαá¼¼.
  366.           ------------------------------------
  367.  
  368.           æ½ÑñπεΘá∩ »α«úαἼᠠ»«¬áºδóáÑΓ  óßÑ  «»¿ßá¡¡δÑ  Σπ¡¬µ¿¿   ó
  369.      ñÑ⌐ßΓó¿¿.  ÉѺπ½∞ΓáΓ ÑÑ αáí«Γδ »αÑñßΓáó½Ñ¡ ¡á α¿ß.10-1. Åα«úαá¼¼á
  370.      óδó«ñ¿Γ ßαÑñ¡εε ßΓ«¿¼«ßΓ∞ á¬µ¿⌐ ΓαÑσ ¼¡¿¼δσ  ¬«α»«αᵿ⌐  ºá  »∩Γ∞
  371.      ½ÑΓ.
  372.  
  373.           /* Åα«úαá¼¼¡á∩ ñѼ«¡ßΓαᵿ∩ »«ßΓα«Ñ¡¿∩ ñ¿áúαá¼¼ */
  374.      #include "dos.h"
  375.  
  376.      void bargraph(),mode(),mempoint();
  377.      void line(),goto_xy(),grid(),label();
  378.      void hashlines(),legend(),read_cursor_xy();
  379.      void palette(),color_puts(),fill_box();
  380.  
  381.      main()
  382.      {
  383.           double widget[] = {
  384.                10.1,20,30,35.34,50
  385.                };
  386.           double global[] = {
  387.                19,20,8.8,30,40
  388.                };
  389.           double tower[] = {
  390.                25.25,19,17.4,33,29
  391.                };
  392.           int min,max;
  393.  
  394.           char n[][20] = {
  395.                "widget",
  396.                "global",
  397.                "tower"
  398.                };
  399.           char lab[][20] = {
  400.                "1983",
  401.                "1984",
  402.                "1985",
  403.                "1986",
  404.                "1987"
  405.                };
  406.           mode(4);       /* óδí«α αѪ¿¼á 320*200 */
  407.           palette(0);
  408.           grid(0,50);    /* »«ßΓα«Ñ¡¿Ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ */
  409.           hashlines();   /* óδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ */
  410.           label(lab,5);  /* óδó«ñ τ¿ßѽ */
  411.           legend(n,3);   /* óδó«ñ ¡áñ»¿ßÑ⌐ */
  412.  
  413.           /* óδó«ñ ¬παßá á¬µ¿⌐ ΓαÑσ ¬á¼»á¡¿⌐ */
  414.           bargraph(widget,5,0,0,50,4);
  415.           bargraph(global,5,10,0,50,4);
  416.           bargraph(tower,5,20,0,50,4);
  417.  
  418.  
  419.  
  420.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  421. â½áóá X                                                       -- 8 --
  422.  
  423.  
  424.           getch();
  425.           mode(3);
  426.      }
  427.  
  428.      /* éδó«ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ ñ¿áúαá¼¼δ */
  429.      void grid(min,max)
  430.      int min,max;
  431.      {
  432.           register int t;
  433.  
  434.           goto_xy(22,0); printf("%d",min);
  435.           goto_xy(0,0); printf("%d",max);
  436.           line(180,10,180,300,1);
  437.      }
  438.  
  439.      /* óδó«ñ ¼ÑΓ«¬ ¡á φ¬αá¡ */
  440.      void label(str,num)
  441.      char str[][20]; /* ¼áßß¿ó ¼ÑΓ«¬ */
  442.      int num; /* ¬«½¿τÑßΓó« ¼ÑΓ«¬ */
  443.      {
  444.           int i,j,inc;
  445.  
  446.           inc = 38/num;
  447.           i = 2; /* «»αÑñѽѡ¿Ñ ¡áτá½∞¡«⌐ Γ«τ¬¿ */
  448.           for (j=0;j<num;j++) {
  449.                goto_xy(23,i);
  450.                printf(str[j]);
  451.                i += inc;
  452.           }
  453.      }
  454.  
  455.      /* éδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ ¡á φ¬αá¡ */
  456.      void hashlines()
  457.      {
  458.           int i,j;
  459.  
  460.           for (i=10;1<180;i+=10) {
  461.                for (j=10;j<300;j+=5)
  462.                     mempoint(i,j,3); /* «ñ¡á Γ«τ¬á ¡á ¬áªñδÑ 5 Ññ¿¡¿µ
  463.                                         αáßΓαá */
  464.           }
  465.      }
  466.  
  467.      /* óδó«ñ ¡áñ»¿ß¿ */
  468.      void legend(names,num)
  469.      char names[][20];
  470.      int num; /* ¬«½¿τÑßΓ󫠡ῼѡ«óá¡¿⌐ */
  471.      {
  472.           int color = 1,i,j;
  473.  
  474.           goto_xy(24,0); /* ¡áñ»¿ß∞ »α«¿ºó«ñ¿Γß∩ ó »«ß½Ññ¡Ñ⌐ ßΓα«¬Ñ */
  475.           j = 0;
  476.           for (i=0;i<num;i++) {
  477.                /* óδó«ñ ¡á¿¼Ñ¡«óá¡¿∩ */
  478.  
  479.  
  480.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  481. â½áóá X                                                       -- 9 --
  482.  
  483.  
  484.                printf("%s   ",names[i]);
  485.                /* «»αÑñѽѡ¿Ñ ¬««αñ¿¡áΓδ µóÑΓ¡«ú« »α∩¼«πú«½∞¡¿¬á. é 4
  486.                   αѪ¿¼Ñ ¬áªñ«¼π ½¿ΓÑα¡«¼π ß¿¼ó«½π «Γó«ñ¿Γß∩ 8 Ññ¿¡¿µ
  487.                   αáßΓαá ( ó Φ¿α¿¡π )  */
  488.                j++ = strlen(names[i]*8+4);
  489.                fill_box(192,j,198,j+12,color);
  490.                j++ = 28; /* »α«ñó¿ªÑ¡¿Ñ ¬ ß½ÑñπεΘÑ¼π »«½ε óδó«ñá */
  491.                color ++;
  492.                if ( color>3 ) color = 1;
  493.           }
  494.      }
  495.  
  496.      /* éδτÑατ¿óá¡¿Ñ ñ¿áúαá¼¼δ */
  497.  
  498.      void bargraph(data,num,offset,min,max,width)
  499.      double *data; /* ¼áßß¿ó ñá¡¡δσ */
  500.      int num; /* ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ¼áßß¿óÑ */
  501.      int offset; /* αáßßΓ«∩¡¿Ñ ¼Ñªñπ ñ¿áúαἼἿ */
  502.      int min,max; /* ¼¿¡¿¼á½∞¡«Ñ ¿ ¼á¬ß¿¼á½∞¡«Ñ óδó«ñ¿¼δÑ º¡áτÑ¡¿∩ */
  503.      int width; /* Γ«½Θ¿¡á ½¿¡¿⌐ */
  504.      {
  505.           int y,t,incr;
  506.           double norm_data,norm_ratio,spread;
  507.           char s[80];
  508.           static int color = 0;
  509.           int tempwidth;
  510.  
  511.           /* óßÑúñá ¿ß»«½∞ºπ⌐ΓÑ αẽ¿τ¡δÑ µóÑΓá */
  512.           color++;
  513.           if ( color > 3 ) color = 1;
  514.  
  515.           /* «»αÑñѽѡ¿Ñ ¡«α¼¿απεΘÑú« ¼¡«ª¿Γѽ∩ */
  516.           spread = (double)max-min;
  517.           norm_ratio = 180/spread;
  518.  
  519.           incr = 280/num; /* «»αÑñѽѡ¿Ñ »α«¼ÑªπΓ¬á ¼Ñªñπ º¡áτÑ¡¿∩¼¿*/
  520.           tempwidth = width;
  521.           for (t=0;t<num;++t) {
  522.                norm_data = data[t];
  523.  
  524.           /* »«ñú«¡¬á «Γα¿µáΓѽ∞¡δσ º¡áτÑ¡¿⌐ */
  525.                norm_data = norm_data-(double)min;
  526.                norm_data *= norm_ratio; /* ¡«α¼¿α«óá¡¿Ñ */
  527.                y = (int)norm_data; /* »αÑ«íαẫóá¡¿Ñ Γ¿»á */
  528.                do {
  529.                     line(179,((t*incr)+20+offset+width),179-y,
  530.                       ((t*incr)+20+offset+width),color);
  531.                width--;
  532.                } while(width);
  533.                width = tempwidth;
  534.                }
  535.           }
  536.  
  537.      /* éδó«ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá, ¿ß»«½∞ºπ∩ íẫóδ⌐ á½ú«α¿Γ¼
  538.  
  539.  
  540.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  541. â½áóá X                                                       -- 10 --
  542.  
  543.  
  544.           üαѺѡσá¼á */
  545.      void line(startx,starty,endx,endy,color)
  546.      int startx,starty,endx,endy,color;
  547.      {
  548.           register int t,distance;
  549.           int x=0,y=0,delta_x,delta_y;
  550.           int incx,incy;
  551.  
  552.      /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿⌐ »« «í«¿¼ ¡á»αáó½Ñ¡¿∩¼ */
  553.           delta_x = endx - startx;
  554.           delta_y = endy - starty;
  555.      /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿⌐ πóѽ¿τÑ¡¿∩ ¬««αñ¿¡áΓ, ¡π½Ñó«Ñ
  556.         πóѽ¿τÑ¡¿Ñ ß««ΓóÑΓßΓóπÑΓ ½¿í« óÑαΓ¿¬á½∞¡«⌐, ½¿í«
  557.         ú«α¿º«¡Γá½∞¡«⌐ ½¿¡¿¿ */
  558.           if ( delta_x > 0 ) incx = 1 ;
  559.           else  if (delta_x == 0 ) incx = 0;
  560.           else incx = -1;
  561.           if ( delta_y > 0 ) incy = 1 ;
  562.           else  if (delta_y == 0 ) incy = 0;
  563.           else incy = -1;
  564.      /* «»αÑñѽѡ¿Ñ ¼á¬ß¿¼π¼á ¿º¼Ñ¡Ñ¡¿∩ ¬««αñ¿¡áΓ */
  565.           delta_x = abs(delta_x);
  566.           delta_y = abs(delta_y);
  567.           if ( delta_x > delta_y ) distance = delta_x;
  568.           else distance = delta_y;
  569.      /* óδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
  570.           for (t=0;t<=distance+1;t++) {
  571.                mempoint(startx,starty,color);
  572.                x+= delta_x;
  573.                y+= delta_y;
  574.                if (x>distance) {
  575.                x-=distance;
  576.                startx+=incx;
  577.                }
  578.                if (y>distance) {
  579.                y-=distance;
  580.                starty+=incy;
  581.                }
  582.           }
  583.      }
  584.      /* ¡á»«½¡Ñ¡¿Ñ »α∩¼«πú«½∞¡¿¬á ºáñá¡¡δ¼ µóÑΓ«¼ */
  585.      void fill_box(startx,starty,endx,endy,color_code)
  586.      int startx, starty, endx, endy, color_code;
  587.      {
  588.           register int i,begin,end;
  589.  
  590.           begin = startx < endx ? startx : endx;
  591.           end = startx > endx ? startx : endx;
  592.  
  593.           for (i=begin;i<=end;i++)
  594.                line(i,starty,i,endy,color_code);
  595.      }
  596.      /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA »á¼∩Γ∞ */
  597.      void mempoint(x,y,color_code)
  598.  
  599.  
  600.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  601. â½áóá X                                                       -- 11 --
  602.  
  603.  
  604.      int x,y,color_code;
  605.      {
  606.           union mask {
  607.                char c[2];
  608.                int i;
  609.           } bit_mask;
  610.           int i,index,bit_position;
  611.           unsigned char t;
  612.           char xor; /* xor - µóÑΓ ¿½¿ ¡á½«ªÑ¡¿Ñ */
  613.           char far *ptr = (char far *) 0xB8000000; /* π¬áºáΓѽ∞ ¡á
  614.                                                        CGA  */
  615.           bit_mask.i = 0xFF3F; /* 11111111 00111111 ó ñó«¿τ¡«¼ ¬«ñÑ */
  616.           /* ¬«¡Γα«½∞ ¬««αñ¿¡áΓ ñ½∩ 4 αѪ¿¼á */
  617.           if (x<0 || x>199 || y<0 || y>319) return;
  618.  
  619.           xor = color_code & 128; /* »α«óÑα¬á πßΓᡫ󬿠αѪ¿¼á xor */
  620.           color_code = color_code & 127; /* ¼á߬á 7 ßΓáαΦ¿σ í¿Γ */
  621.  
  622.      /* πßΓá¡«ó¬á bit_mask ¿ color_code ó »αáó¿½∞¡«Ñ »«½«ªÑ¡¿Ñ */
  623.           bit_position = y%4;
  624.           color_code <<= 2*(3-bit_position);
  625.           bit_mask.i >>= 2*bit_position;
  626.  
  627.      /* »«¿ß¬ ß««ΓóÑΓßΓóπεΘÑú« íá⌐Γá ó »á¼∩Γ¿ φ¬αá¡á */
  628.           index = x*40 + (y>>2);
  629.           if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞º«óáΓ∞ óΓ«α«⌐
  630.                                    íá⌐Γ */
  631.      /* ºá»¿ß∞ µóÑΓá */
  632.           if (!xor) { /* αѪ¿¼ ¡á½«ªÑ¡¿∩ */
  633.                t = *(ptr + index) & bit_mask.c[0];
  634.                *(ptr + index) = t | color_code;
  635.           }
  636.           else { /* αѪ¿¼ xor */
  637.                 t = *(ptr + index) | (char)0;
  638.                *(ptr + index) = t | color_code;
  639.           }
  640.      }
  641.  
  642.      /* πßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
  643.      void mode(mode_code)
  644.      int mode_code;
  645.      {
  646.           union REGS r;
  647.  
  648.           r.h.al = mode_code;
  649.           r.h.ah = 0;
  650.           int86(0x10,&r,&r);
  651.      }
  652.  
  653.      /* πßΓá¡«ó¬á ¬παß«αá ó ¬««αñ¿¡áΓδ x,y */
  654.      void goto_xy(x,y)
  655.      int x,y;
  656.      {
  657.           union REGS r;
  658.  
  659.  
  660.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  661. â½áóá X                                                       -- 12 --
  662.  
  663.  
  664.  
  665.           r.h.ah = 2; /* Σπ¡¬µ¿∩ áñαÑßᵿ¿ ¬παß«αá */
  666.           r.h.dl = y; /* ú«α¿º«¡Γá½∞¡á∩ ¬««αñ¿¡áΓá */
  667.           r.h.dh = x; /* óÑαΓ¿¬á½∞¡á∩ ¬««αñ¿¡áΓá */
  668.           r.h.bh = 0; /* ó¿ñÑ«ßΓαá¡¿µá */
  669.           int86(0x10,&r,&r);
  670.      }
  671.  
  672.      /* πßΓá¡«ó¬á µóÑΓ«ó ñ¿áúαá¼¼ */
  673.      void palette(pnum)
  674.      int pnum;
  675.      {
  676.           union REGS r;
  677.  
  678.           r.h.bh = 1; /* ¬«ñ 4 αѪ¿¼á */
  679.           r.h.bl = pnum;
  680.           r.h.ah = 11; /* πßΓá¡«ó¬á Σπ¡¬µ¿¿ µóÑΓá */
  681.           int86(0x10,&r,&r);
  682.      }
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  721. â½áóá X                                                       -- 13 --
  722.  
  723.  
  724.                       ÅÉÄâÉÇîîÇ é¢ùàÉùêéÇìꃠäêÇâÉÇîî
  725.      -----------------------------------------------------------------
  726.  
  727.           éδ ¼«ªÑΓÑ  ¿ß»«½∞º«óáΓ∞  «»¿ßá¡¡δÑ  Σπ¡¬µ¿¿  ñ½∩  »«ßΓα«Ñ¡¿∩
  728.      »α«úαá¼¼δ ß«ºñá¡¿∩  ñ¿áúαá¼¼.  Åα«úαἼᠠ»«ºó«½∩ÑΓ  »«½∞º«óáΓѽε
  729.      óó«ñ¿Γ∞ ¬«½¿τÑßΓó« ¡áí«α«ó ñá¡¡δσ,  ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ¬áªñ«¼
  730.      ¡áí«αÑ,  ¡á¿¼Ñ¡«óá¡¿∩ ¿ ¼ÑΓ¬¿  ß««ΓóÑΓßΓóπεΘ¿σ  ñá¡¡δσ,  á  ΓᬪÑ
  731.      Γ«½Θ¿¡π   ½¿¡¿⌐  ¿  αáßßΓ«∩¡¿∩  ¼Ñªñπ  ñ¿áúαἼἿ.  Å«ß½Ñ  óó«ñá
  732.      π¬áºá¡¡δσ ñá¡¡δσ »α«úαá¼¼á áóΓ«¼áΓ¿τÑ߬¿  óδτÑατ¿óáÑΓ  ñ¿áúαá¼¼π.
  733.      éδ   ΓᬪѠ  ¼«ªÑΓÑ  ¡á»¿ßáΓ∞  »α«úαá¼¼π  ß«σαá¡Ñ¡¿∩  »«ßΓα«Ñ¡¡«⌐
  734.      ñ¿áúαá¼¼δ ó Σá⌐½Ñ ñ½∩ ÑÑ ñá½∞¡Ñ⌐ΦÑú« ¿ß»«½∞º«óá¡¿∩.
  735.  
  736.  
  737.           â½áó¡á∩ »α«úαá¼¼á.
  738.           ------------------
  739.  
  740.           çñÑß∞ »α¿ó«ñ¿Γß∩  «ß¡«ó¡á∩   Σπ¡¬µ¿∩   main(),   «»¿ßδóáεΘá∩
  741.      á½ú«α¿Γ¼ »«ßΓα«Ñ¡¿∩ ñ¿áúαá¼¼ ¿ ß«ñÑαªáΘá∩ ¡Ñ߬«½∞¬« ¼á¬α«ß«ó.
  742.  
  743.  
  744.      #define MAX_SETS 3
  745.      #define MAX_ENTRIES 50
  746.      #define MAX_LABELS 20
  747.      #define MAX_NAMES 20
  748.  
  749.      main()
  750.      {
  751.           double v[MAX_SETS][MAX_ENTRIES]; /* αẼÑΘÑ¡¿Ñ ñá¡¡δσ */
  752.           int num_entries;
  753.           int num_sets;
  754.           int min,max,i;
  755.           int lines,offset;
  756.           char save = 0; /* »α¿º¡á¬ ß«σαá¡Ñ¡¿∩ ñ¿áúαá¼¼δ */
  757.           char names[MAX_NAMES][20];
  758.           char lab[MAX_LABELS][20];
  759.  
  760.      /* ßτ¿Γδóá¡¿Ñ ñá¡¡δσ */
  761.           enter(v,&num_entries,&num_sets);
  762.  
  763.      /* »«¿ß¬ ¼¿¡¿¼á½∞¡«ú« ¿ ¼á¬ß¿¼á½∞¡«ú« º¡áτÑ¡¿∩ */
  764.           min_max(v,num_entries,num_sets,&min,&max);
  765.  
  766.      /* óó«ñ ¡á¿¼Ñ¡«óá¡¿⌐ ñá¡¡δσ */
  767.           get_names(names,num_sets);
  768.  
  769.      /* óó«ñ ¼ÑΓ«¬ ñ½∩ ñ¿áúαá¼¼δ */
  770.           get_labels(lab,num_entries);
  771.  
  772.      /* óó«ñ Γ«½Θ¿¡δ ½¿¡¿¿ */
  773.           lines = get_line_size();
  774.  
  775.      /* óó«ñ ¿¡ΓÑαóá½á ¼Ñªñπ ñ¿áúαἼἿ */
  776.           offset = get_offset();
  777.  
  778.  
  779.  
  780.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  781. â½áóá X                                                       -- 14 --
  782.  
  783.  
  784.      /* ß«σαá¡¿Γ∞ ñ¿áúαá¼¼π ó Σá⌐½Ñ ? */
  785.           printf(" ß«σαá¡¿Γ∞ ñ¿áúαá¼¼π ó Σá⌐½Ñ ? (y/n) ");
  786.           if (tolower(getche()) == 'y') save = 1;
  787.  
  788.           mode(4); /* úαáΣ¿τÑ߬¿⌐ αѪ¿¼ 320*200 */
  789.           palette(0);
  790.  
  791.           grid(min,max); /* óδó«ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ */
  792.           hashlines(); /* óδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ */
  793.           label(lab,num_entries); /* óδó«ñ ¼ÑΓ«¬ ñ¿áúαá¼¼δ */
  794.           legend(names,num_sets); /* óδó«ñ »«∩ß¡¿Γѽ∞¡δσ ¡áñ»¿ßÑ⌐ */
  795.  
  796.           /* óδó«ñ º¡áτÑ¡¿⌐ ó ó¿ñÑ ñ¿áúαá¼¼δ */
  797.           for (i=0;i<num_sets;i++)
  798.                bargraph(v[i],num_entries,i*offset,min,max,lines);
  799.  
  800.           if (save) save_pic();
  801.           getch();
  802.           mode(3);
  803.      }
  804.  
  805.           èᬠóδ   ó¿ñ¿ΓÑ,   Σπ¡¬µ¿∩   main()   ¡áτ¿¡áÑΓß∩   «»¿ß᡿Ѽ
  806.      »ÑαѼѡ¡δσ, º¡áτÑ¡¿∩ ¬«Γ«αδσ πßΓá¡áó½¿óáÑΓ »«½∞º«óáΓѽ∞. îáßß¿ó v
  807.      «»αÑñѽѡ  ñ«ßΓáΓ«τ¡«  í«½∞Φ¿¼,  τΓ«íδ  ß«ñÑαªáΓ∞ ñ« ΓαÑσ ¡áí«α«ó
  808.      ñá¡¡δσ  ñ«   50   φ½Ñ¼Ñ¡Γ«ó   ¬áªñδ⌐.   (¥Γ¿   αẼÑαδ   ∩ó½∩εΓß∩
  809.      »α«¿ºó«½∞¡δ¼¿ ¿ »α¿ ªÑ½á¡¿¿ óδ ¼«ªÑΓÑ ¿σ ¿º¼Ñ¡¿Γ∞.) çáΓѼ Σπ¡¬µ¿∩
  810.      ßτ¿ΓδóáÑΓ  óδó«ñ¿¼δÑ  »«½∞º«óáΓѽѼ  ó  ó¿ñÑ  ñ¿áúαá¼¼  ñá¡¡δÑ  ¿
  811.      «»αÑñѽ∩ÑΓ  ¼¿¡¿¼á½∞¡«Ñ  ¿  ¼á¬ß¿¼á½∞¡«Ñ  º¡áτÑ¡¿Ñ ñá¡¡δσ.  Å«ß½Ñ
  812.      φΓ«ú« ¡á φ¬αá¡ óδó«ñ∩Γß∩ ½¿¡¿∩ ¡π½Ñó«ú« πα«ó¡∩,  »π¡¬Γ¿α¡δÑ ½¿¡¿¿
  813.      πα«ó¡∩,  ¼ÑΓ¬¿  ñ¿áúαá¼¼δ  ¿  ¡á¿¼Ñ¡«óá¡¿Ñ ¡áí«α«ó.  é ºáóÑαΦÑ¡¿Ñ
  814.      óδτÑατ¿óáÑΓß∩ ßá¼á ñ¿áúαá¼¼á. ÅÑαÑñ óδσ«ñ«¼ »α«¿ßσ«ñ¿Γ ß«σαá¡Ñ¡¿Ñ
  815.      ñ¿áúαá¼¼δ  »α¿  »«¼«Θ¿  Σπ¡¬µ¿¿  save_pic().  äáóá⌐ΓÑ  αáßß¼«Γα¿¼
  816.      ¡Ñ¬«Γ«αδÑ ¿ß»«½∞ºπѼδÑ ó »α«úαἼѠ main()  Σπ¡¬µ¿¿,  ¬«Γ«αδÑ  ¡Ñ
  817.      óσ«ñ∩Γ ó «»¿ßá¡¡δÑ óδΦÑ ¿¡ßΓαπ¼Ñ¡Γáα¿¿ »«ßΓα«Ñ¡¿∩ ñ¿áúαá¼¼.
  818.  
  819.  
  820.           öπ¡¬µ¿∩ enter().
  821.           ----------------
  822.  
  823.           Åα¿óÑñÑ¡¡á∩ ºñÑß∞  Σπ¡¬µ¿∩  enter()  ¿ß»«½∞ºπÑΓ  ó  ¬áτÑßΓóÑ
  824.      ßó«¿σ »áαá¼ÑΓα«ó áñαÑß ¼áßß¿óá, ó ¬«Γ«α«¼ íπñπΓ αẼÑΘÑ¡δ ñá¡¡δÑ,
  825.      ¿  áñαÑßá  »ÑαѼѡ¡δσ ñ½∩ αẼÑΘÑ¡¿∩ τ¿ß½á ¬«½¿τÑßΓóá φ½Ñ¼Ñ¡Γ«ó ó
  826.      ¡áí«αÑ ¿ τ¿ß½á ßἿσ ¡áí«α«ó.  öπ¡¬µ¿∩  ¡áτ¿¡áÑΓ  ßó«ε  αáí«Γπ  ß
  827.      ºá»α«ßá   π   »«½∞º«óáΓѽ∩  ¬«½¿τÑßΓóá  ¡áí«α«ó  ñá¡¡δσ  ¿  ºáΓѼ
  828.      ¬«½¿τÑßΓóá φ½Ñ¼Ñ¡Γ«ó ñá¡¡δσ ó ¬áªñ«¼ ¡áí«αÑ. Å«ß½Ñ »«½πτÑ¡¿∩ φΓ«⌐
  829.      ¿¡Σ«α¼áµ¿¿ »α«¿ºó«ñ¿Γß∩ ßτ¿Γδóá¡¿Ñ ñá¡¡δσ ñ½∩ ¬áªñ«ú« ¡áí«αá.
  830.  
  831.           /* æτ¿Γδóá¡¿Ñ ñá¡¡δσ */
  832.      enter(v,entries,sets)
  833.      double v[][MAX_ENTRIES]; /*  ¼áßß¿ó ñá¡¡δσ */
  834.      int *entries; /* ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ¬áªñ«¼ ¡áí«αÑ ñá¡¡δσ */
  835.  
  836.      int *sets; /* ¬«½¿τÑßΓó« ¡áí«α«ó ñá¡¡δσ */
  837.      {
  838.  
  839.  
  840.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  841. â½áóá X                                                       -- 15 --
  842.  
  843.  
  844.           int i,j,count,num;
  845.           char s[80];
  846.  
  847.      printf("éóÑñ¿ΓÑ τ¿ß½« ¡áí«α«ó ñá¡¡δσ («Γ 1 ñ« %d)",MAX_SETS);
  848.           scanf("%d%c",&count,&j);
  849.           if (count>MAX_SETS) count = MAX_SETS; /* óδσ«ñ ºá úαá¡¿µδ
  850.                                                    ¼áßß¿óá */
  851.           *sets = count;
  852.      printf("éóÑñ¿ΓÑ ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó («Γ 1 ñ« %d) ",MAX_ENTRIES);
  853.           scanf("%d%c",&num,&j);
  854.           if (num>MAX_SETS) num = MAX_ENTRIES; /* óδσ«ñ ºá úαá¡¿µδ
  855.                                                   ¼áßß¿óá */
  856.           *entries = num;
  857.  
  858.           j = 0;
  859.  
  860.           /* ßτ¿Γδóá¡¿Ñ º¡áτÑ¡¿⌐ ñá¡¡δσ */
  861.           while((j<count)) {
  862.                printf("ìáí«α ñá¡¡δσ %d\n",j+1);
  863.                for (i=0;i<num;i++) {
  864.                     printf("%d:",i+1);
  865.                     gets(s);
  866.                     sscanf(s,"%lf",&v[j][i]);
  867.                }
  868.                j++;
  869.           }
  870.           return count;
  871.      }
  872.  
  873.  
  874.           öπ¡¬µ¿∩ min_max().
  875.           ------------------
  876.  
  877.           Æá¬ ¬á¬   Σπ¡¬µ¿∩   bargraph()   ¿ß»«½∞ºπÑΓ  ¼á¬ß¿¼á½∞¡«Ñ  ¿
  878.      ¼¿¡¿¼á½∞¡«Ñ  º¡áτÑ¡¿∩  óδó«ñ¿¼δσ  ñá¡¡δσ,  Γ«   ¡á¼   »«ΓαÑíπÑΓß∩
  879.      ß»Ñµ¿á½∞¡á∩  Σπ¡¬µ¿∩  ñ½∩  «»αÑñѽѡ¿∩ φΓ¿σ º¡áτÑ¡¿⌐.  ìÑ«íσ«ñ¿¼«
  880.      ΓᬪѠ«Γ¼ÑΓ¿Γ∞,  τΓ« φΓá  Σπ¡¬µ¿∩  ñ«½ª¡á  ¡Ñ  »α«ßΓ«  «»αÑñѽ∩Γ∞
  881.      ¼¿¡¿¼á½∞¡«Ñ  ¿  ¼á¬ß¿¼á½∞¡«Ñ  º¡áτÑ¡¿∩ ¡áí«αá ñá¡¡δσ,  á ¡áσ«ñ¿Γ∞
  882.      ¡á¿¼Ñ¡∞ΦÑÑ ¼¿¡¿¼á½∞¡«Ñ ¿  ¡á¿í«½∞ΦÑÑ  ¼á¬ß¿¼á½∞¡«Ñ  º¡áτÑ¡¿∩  ñ½∩
  883.      ¡Ñ߬«½∞¬¿σ   ¡áí«α«ó   ñá¡¡δσ,  τΓ«  «íÑß»Ñτ¿Γ  ß««ΓóÑΓßΓó¿Ñ  »α¿
  884.      «ñ¡«óαѼѡ¡«¼  »«ßΓα«Ñ¡¿¿  ßαáºπ  ¡Ñ߬«½∞¬¿σ  ñ¿áúαá¼¼.   öπ¡¬µ¿∩
  885.      min_max(),   »α¿óÑñÑ¡¡á∩   ºñÑß∞,   ó¼ÑßΓÑ  ß  ñóπ¼∩  ó¡πΓαÑ¡¡¿¼¿
  886.      Σπ¡¬µ¿∩¼¿ πñ«ó½ÑΓó«α∩ÑΓ φΓ«¼π ΓαÑí«óá¡¿ε.
  887.  
  888.           /* Å«¿ß¬ ¡á¿¼Ñ¡∞ΦÑú« ¼¿¡¿¼π¼á ¿ ¡á¿í«½∞ΦÑú« ¼á¬ß¿¼π¼á
  889.              ßαÑñ¿ óßÑσ ¡áí«α«ó ñá¡¡δσ */
  890.      void min_max(v,entries,sets,min,max)
  891.      double v[][MAX_ENTRIES]; /*  º¡áτÑ¡¿∩ */
  892.      int entries; /* ¬«½¿τÑßΓó« óσ«ñ«ó ñ½∩ ¬áªñ«ú« ¡áí«αá
  893.                       ñá¡¡δσ */
  894.  
  895.      int sets; /* ¬«½¿τÑßΓó« ¡áí«α«ó ñá¡¡δσ */
  896.      int *min,*max; /* ó«ºóαáΘáÑΓ ¼¿¡¿¼á½∞¡«Ñ ¿ ¼á¬ß¿¼á½∞¡«Ñ
  897.                        º¡áτÑ¡¿Ñ */
  898.  
  899.  
  900.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  901. â½áóá X                                                       -- 16 --
  902.  
  903.  
  904.      {
  905.           int i,j;
  906.           int tmin,tmax;
  907.  
  908.           *min = *max = 0;
  909.  
  910.           for (i=0;i<sets;i++) {
  911.                tmax = getmax(v[i],entries);
  912.                tmin = getmin(v[i],entries);
  913.                if (tmax>*max) *max = tmax;
  914.                if (tmin <*min) *min = tmin;
  915.           }
  916.      }
  917.       /* é«ºóαáΓ ¼á¬ß¿¼á½∞¡«ú« º¡áτÑ¡¿∩ ñá¡¡δσ */
  918.      getmax(data,num)
  919.      double *data;
  920.      int num;
  921.      {
  922.           int t,max;
  923.  
  924.           max = (int)data[0];
  925.           for (t=1;t<num;++t)
  926.                if (data[t]>max) max = (int)data[t];
  927.           return max;
  928.      }
  929.  
  930.      /* é«ºóαáΓ ¼¿¡¿¼á½∞¡«ú« º¡áτÑ¡¿∩ ñá¡¡δσ */
  931.      getmin(data,num)
  932.      double *data;
  933.      int num;
  934.      {
  935.           int t,min;
  936.  
  937.           min = (int)data[0];
  938.           for (t=1;t<num;++t)
  939.                if (data[t]<min) min = (int)data[t];
  940.           return min;
  941.      }
  942.  
  943.  
  944.           Å«½¡δ⌐ ΓѬßΓ »α«úαá¼¼δ óδτÑατ¿óá¡¿∩ ñ¿áúαá¼¼.
  945.           ---------------------------------------------
  946.  
  947.           Å«½¡δ⌐  ΓѬßΓ  »α«úαá¼¼δ  óδτÑατ¿óá¡¿∩  ñ¿áúαá¼¼ »αÑñßΓáó½Ñ¡
  948.      ¡¿ªÑ.
  949.  
  950.  
  951.           /* Åα«úαá¼¼á úÑ¡Ñαᵿ¿ ñ¿áúαá¼¼ */
  952.  
  953.      #include "dos.h"
  954.      #include "stdio.h"
  955.  
  956.      #define MAX_SETS 3
  957.      #define MAX_ENTRIES 50
  958.  
  959.  
  960.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  961. â½áóá X                                                       -- 17 --
  962.  
  963.  
  964.      #define MAX_LABELS 20
  965.      #define MAX_NAMES 20
  966.  
  967.      void bargraph(),mode(),mempoint();
  968.      void line(),goto_xy(),grid(),label();
  969.      void hashlines(),legend(),read_cursor_xy();
  970.      void palette(),color_puts(),fill_box();
  971.      void get_labels(),get_names(),min_max();
  972.      void save_pic();
  973.  
  974.      main()
  975.      {
  976.           double v[MAX_SETS][MAX_ENTRIES]; /* αẼÑΘÑ¡¿Ñ ñá¡¡δσ */
  977.           int num_entries;
  978.           int num_sets;
  979.           int min,max,i;
  980.           int lines,offset;
  981.           char save = 0; /* »α¿º¡á¬ ºá»¿ß¿ ñ¿áúαá¼¼δ */
  982.           char names[MAX_NAMES][20];
  983.           char lab[MAX_LABELS][20];
  984.      /* ßτ¿Γδóá¡¿Ñ ñá¡¡δσ */
  985.           enter(v,&num_entries,&num_sets);
  986.  
  987.      /* »«¿ß¬ ¼¿¡¿¼á½∞¡«ú« ¿ ¼á¬ß¿¼á½∞¡«ú« º¡áτÑ¡¿∩ */
  988.           min_max(v,num_entries,num_sets,&min,&max);
  989.  
  990.      /* óó«ñ ¡á¿¼Ñ¡«óá¡¿⌐ ñá¡¡δσ */
  991.           get_names(names,num_sets);
  992.  
  993.      /* óó«ñ ¼ÑΓ«¬ ñ½∩ ñ¿áúαá¼¼δ */
  994.           get_labels(lab,num_entries);
  995.  
  996.      /* óó«ñ Γ«½Θ¿¡δ ½¿¡¿¿ */
  997.           lines = get_line_size();
  998.  
  999.      /* óó«ñ ¿¡ΓÑαóá½á ¼Ñªñπ ñ¿áúαἼἿ */
  1000.           offset = get_offset();
  1001.  
  1002.      /* ß«σαá¡¿Γ∞ ñ¿áúαá¼¼π ó Σá⌐½Ñ ? */
  1003.           printf(" ß«σαá¡¿Γ∞ ñ¿áúαá¼¼π ó Σá⌐½Ñ ? (y/n) ");
  1004.           if (tolower(getche()) == 'y') save = 1;
  1005.  
  1006.           mode(4); /* úαáΣ¿τÑ߬¿⌐ αѪ¿¼ 320*200 */
  1007.           palette(0);
  1008.  
  1009.           grid(min,max); /* óδó«ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ */
  1010.           hashlines(); /* óδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ */
  1011.           label(lab,num_entries); /* óδó«ñ ¼ÑΓ«¬ ñ¿áúαá¼¼δ */
  1012.           legend(names,num_sets); /* óδó«ñ »«∩ß¡¿Γѽ∞¡δσ ¡áñ»¿ßÑ⌐ */
  1013.  
  1014.           /* óδó«ñ º¡áτÑ¡¿⌐ ó ó¿ñÑ ñ¿áúαá¼¼δ */
  1015.           for (i=0;i<num_sets;i++)
  1016.                bargraph(v[i],num_entries,i*offset,min,max,lines);
  1017.  
  1018.  
  1019.  
  1020.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1021. â½áóá X                                                       -- 18 --
  1022.  
  1023.  
  1024.           if (save) save_pic();
  1025.           getch();
  1026.           mode(3);
  1027.      }
  1028.           /* ßτ¿Γδóá¡¿Ñ ñá¡¡δσ */
  1029.      enter(v,entries,sets)
  1030.      double v[][MAX_ENTRIES]; /*  ¼áßß¿ó ñá¡¡δσ */
  1031.      int *entries;      /* ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ñá¡¡δσ ó ¬áªñ«¼ ¡áí«αÑ
  1032.                            ñá¡¡δσ */
  1033.  
  1034.      int *sets; /* ¬«½¿τÑßΓó« ¡áí«α«ó ñá¡¡δσ */
  1035.      {
  1036.           int i,j,count,num;
  1037.           char s[80];
  1038.  
  1039.      printf("éóÑñ¿ΓÑ τ¿ß½« ¡áí«α«ó ñá¡¡δσ («Γ 1 ñ« %d)",MAX_SETS);
  1040.           scanf("%d%c",&count,&j);
  1041.           if (count>MAX_SETS) count = MAX_SETS; /* óδσ«ñ ºá úαá¡¿µδ
  1042.                                                    ¼áßß¿óá */
  1043.           *sets = count;
  1044.      printf("éÑñ¿ΓÑ τ¿ß½« φ½Ñ¼Ñ¡Γ«ó ñá¡¡δσ («Γ 1 ñ« %d)",MAX_ENTRIES);
  1045.           scanf("%d%c",&num,&j);
  1046.           if (num>MAX_ENTRIES) num = MAX_ENTRIES; /* óδσ«ñ ºá úαá¡¿µδ
  1047.                                                   ¼áßß¿óá */
  1048.           *entries = num;
  1049.  
  1050.           j = 0;
  1051.  
  1052.           /* ßτ¿Γδóá¡¿Ñ º¡áτÑ¡¿⌐ */
  1053.      while((j<count)) {
  1054.           printf(" ìáí«α ñá¡¡δσ %d\n",j+1);
  1055.           for (i = 0;i<num;i++) {
  1056.           printf("%d:",i+1);
  1057.           gets(s);
  1058.           sscanf(s,"%lf",&v[j][i]);
  1059.           }
  1060.           j++;
  1061.         }
  1062.         return count;
  1063.      }
  1064.  
  1065.      /* éó«ñ ¿¼Ñ¡ ¡áí«α«ó */
  1066.      void get_names(n,num)
  1067.      char n[][20];         /* ¼áßß¿ó ñ½∩ ¿¼Ñ¡ */
  1068.      int num;              /* τ¿ß½« ¡áí«α«ó */
  1069.      {
  1070.           int i;
  1071.  
  1072.           for (i=0;i<num;i++) {
  1073.                printf(" éóÑñ¿ΓÑ ¿¼∩: ");
  1074.                gets(n[i]);
  1075.           }
  1076.      }
  1077.  
  1078.  
  1079.  
  1080.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1081. â½áóá X                                                       -- 19 --
  1082.  
  1083.  
  1084.      /* éó«ñ ¼ÑΓ¬¿ ¬áªñ«ú« óσ«ñá */
  1085.      void get_labels(l,num)
  1086.      char l[][20]; /* ¼áßß¿ó ñ½∩ ¼ÑΓ«¬ */
  1087.      int num; /* τ¿ß½« óσ«ñ«ó */
  1088.      {
  1089.           int i;
  1090.  
  1091.           for (i=0;i<num;i++) {
  1092.                printf(" éóÑñ¿ΓÑ ¿¼∩ ¼ÑΓ¬¿: ");
  1093.                gets(l[i]);
  1094.           }
  1095.      }
  1096.  
  1097.      /* éó«ñ ¿¡ΓÑαóá½á ¼Ñªñπ ñ¿áúαἼἿ ó Ññ¿¡¿µáσ αáßΓαá */
  1098.      get_offset()
  1099.      {
  1100.           int i;
  1101.  
  1102.      printf(" éóÑñ¿ΓÑ ¿¡ΓÑαóá½ ¼Ñªñπ ñ¿áúαἼἿ ó Ññ¿¡¿µáσ αáßΓαá");
  1103.           scanf("%d%*c",&i);
  1104.           return i;
  1105.      }
  1106.  
  1107.      /* éó«ñ Γ«½Θ¿¡δ ñ¿áúαá¼¼ ó Ññ¿¡¿µáσ αáßΓαá */
  1108.      get_line_size()
  1109.      {
  1110.           int i;
  1111.  
  1112.      printf("éóÑñ¿ΓÑ Γ«½Θ¿¡π ñ¿áúαá¼¼δ ó Ññ¿¡¿µáσ αáßΓαá : ");
  1113.           scanf("%d",&i);
  1114.           return i;
  1115.      }
  1116.      /* éδó«ñ ½¿¡¿¿ ¡π½Ñó«ú« πα«ó¡∩ ñ¿áúαá¼¼δ */
  1117.      void grid(min,max)
  1118.      int min,max;
  1119.      {
  1120.           register int t;
  1121.  
  1122.           goto_xy(22,0); printf("%d",min);
  1123.           goto_xy(0,0); printf("%d",max);
  1124.           line(180,10,180,300,1);
  1125.      }
  1126.  
  1127.      /* éδó«ñ ¼ÑΓ«¬ ¡á φ¬αá¡ */
  1128.      void label(str,num)
  1129.      char str[][20]; /* ¼áßß¿ó ¼ÑΓ«¬ */
  1130.      int num; /* ¬«½¿τÑßΓó« ¼ÑΓ«¬ */
  1131.      {
  1132.           int i,j,inc;
  1133.  
  1134.           inc = 38/num;
  1135.           i = 2; /* «»αÑñѽѡ¿Ñ ¡áτá½∞¡«⌐ Γ«τ¬¿ */
  1136.           for (j=0;j<num;j++) {
  1137.                goto_xy(23,i);
  1138.  
  1139.  
  1140.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1141. â½áóá X                                                       -- 20 --
  1142.  
  1143.  
  1144.                printf(str[j]);
  1145.                i += inc;
  1146.           }
  1147.      }
  1148.  
  1149.      /* éδó«ñ »π¡¬Γ¿α¡δσ ½¿¡¿⌐ ¡á φ¬αá¡ */
  1150.      void hashlines()
  1151.      {
  1152.           int i,j;
  1153.  
  1154.           for (i=10;1<180;i+=10) {
  1155.                for (j=10;j<300;j+=5)
  1156.                     mempoint(i,j,3); /* «ñ¡á Γ«τ¬á ¡á ¬áªñδÑ 5 Ññ¿¡¿µ
  1157.                                         αáßΓαá */
  1158.           }
  1159.      }
  1160.  
  1161.      /* éδó«ñ ¡áñ»¿ß¿ */
  1162.      void legend(names,num)
  1163.      char names[][20];
  1164.      int num; /* ¬«½¿τÑßΓ󫠡ῼѡ«óá¡¿⌐ */
  1165.      {
  1166.           int color = 1,i,j;
  1167.  
  1168.           goto_xy(24,0); /* ¡áñ»¿ß∞ »α«¿ºó«ñ¿Γß∩ ó »«ß½Ññ¡Ñ⌐ ßΓα«¬Ñ */
  1169.           j = 0;
  1170.           for (i=0;i<num;i++) {
  1171.                /* éδó«ñ ¡á¿¼Ñ¡«óá¡¿∩ */
  1172.                printf("%s   ",names[i]);
  1173.                /* «»αÑñѽѡ¿Ñ ¬««αñ¿¡áΓδ µóÑΓ¡«ú« »α∩¼«πú«½∞¡¿¬á. é 4
  1174.                   αѪ¿¼Ñ ¬áªñ«¼π ½¿ΓÑα¡«¼π ß¿¼ó«½π «Γó«ñ¿Γß∩ 8 Ññ¿¡¿µ
  1175.                   αáßΓαá ( ó Φ¿α¿¡π )  */
  1176.                j += strlen(names[i]) * 8 + 4;
  1177.                fill_box(192,j,198,j+12,color);
  1178.                j += 28; /* »α«ñó¿ªÑ¡¿Ñ ¬ ß½ÑñπεΘÑ¼π »«½ε óδó«ñá */
  1179.                color ++;
  1180.                if ( color>3 ) color = 1;
  1181.           }
  1182.      }
  1183.  
  1184.      void bargraph(data,num,offset,min,max,width)
  1185.      double *data;          /* ¼áßß¿ó ñá¡¡δσ */
  1186.      int num;               /* ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ¼áßß¿óÑ */
  1187.      int offset;            /* αáßßΓ«∩¡¿Ñ ¼Ñªñπ ñ¿áúαἼἿ */
  1188.      int min,max;  /* ¼¿¡¿¼á½∞¡«Ñ ¿ ¼á¬ß¿¼á½∞¡«Ñ óδó«ñ¿¼δÑ º¡áτÑ¡¿∩ */
  1189.      int width;             /* Γ«½Θ¿¡á ½¿¡¿⌐ */
  1190.      {
  1191.           int y,t,incr;
  1192.           double norm_data,norm_ratio,spread;
  1193.           char s[80];
  1194.           static int color = 0;
  1195.           int tempwidth;
  1196.  
  1197.           /* óßÑúñá ¿ß»«½∞ºπ⌐ΓÑ αẽ¿τ¡δÑ µóÑΓá */
  1198.  
  1199.  
  1200.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1201. â½áóá X                                                       -- 21 --
  1202.  
  1203.  
  1204.           color++;
  1205.           if ( color > 3 ) color = 1;
  1206.  
  1207.           /* «»αÑñѽѡ¿Ñ ¡«α¼¿απεΘÑú« ¼¡«ª¿Γѽ∩ */
  1208.           spread = (double)max-min;
  1209.           norm_ratio = 180/spread;
  1210.  
  1211.           incr = 280/num; /* «»αÑñѽѡ¿Ñ »α«¼ÑªπΓ¬á ¼Ñªñπ º¡áτÑ¡¿∩¼¿*/
  1212.           tempwidth = width;
  1213.           for (t=0;t<num;++t) {
  1214.                norm_data = data[t];
  1215.  
  1216.           /* »«ñú«¡¬á «Γα¿µáΓѽ∞¡δσ º¡áτÑ¡¿⌐ */
  1217.                norm_data = norm_data-(double)min;
  1218.                norm_data *= norm_ratio; /* ¡«α¼¿α«óá¡¿Ñ */
  1219.                y = (int)norm_data; /* »αÑ«íαẫóá¡¿Ñ Γ¿»á */
  1220.                do {
  1221.                     Line(179,((t*incr)+20+offset+width),179-y,
  1222.                       ((t*incr)+20+offset+width),color);
  1223.                width--;
  1224.                } while(width);
  1225.                width = tempwidth;
  1226.                }
  1227.           }
  1228.  
  1229.           /* »«¿ß¬ ¡á¿¼Ñ¡∞ΦÑú« ¼¿¡¿¼π¼á ¿ ¡á¿í«½∞ΦÑú« ¼á¬ß¿¼π¼á
  1230.              ßαÑñ¿ óßÑσ ¡áí«α«ó ñá¡¡δσ */
  1231.      void min_max(v,entries,sets,min,max)
  1232.      double v[][MAX_ENTRIES]; /*  º¡áτÑ¡¿∩ */
  1233.      int entries; /* ¬«½¿τÑßΓó« óσ«ñ«ó ñ½∩ ¬áªñ«ú« ¡áí«αá
  1234.                       ñá¡¡δσ */
  1235.  
  1236.      int sets; /* ¬«½¿τÑßΓó« ¡áí«α«ó ñá¡¡δσ */
  1237.      int *min,*max; /* ó«ºóαáΘáÑΓ ¼¿¡¿¼á½∞¡«Ñ ¿ ¼á¬ß¿¼á½∞¡«Ñ
  1238.                        º¡áτÑ¡¿Ñ */
  1239.      {
  1240.           int i,j;
  1241.           int tmin,tmax;
  1242.  
  1243.           *min = *max = 0;
  1244.  
  1245.           for (i=0;i<sets;i++) {
  1246.                tmax = getmax(v[i],entries);
  1247.                tmin = getmin(v[i],entries);
  1248.                if (tmax>*max) *max = tmax;
  1249.                if (tmin <*min) *min = tmin;
  1250.           }
  1251.      }
  1252.       /* é«ºóαáΓ ¼á¬ß¿¼á½∞¡«ú« º¡áτÑ¡¿∩ ñá¡¡δσ */
  1253.      getmax(data,num)
  1254.      double *data;
  1255.      int num;
  1256.      {
  1257.           int t,max;
  1258.  
  1259.  
  1260.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1261. â½áóá X                                                       -- 22 --
  1262.  
  1263.  
  1264.  
  1265.           max = (int)data[0];
  1266.           for (t=1;t<num;++t)
  1267.                if (data[t]>max) max = (int)data[t];
  1268.           return max;
  1269.      }
  1270.  
  1271.      /* é«ºóαáΓ ¼¿¡¿¼á½∞¡«ú« º¡áτÑ¡¿∩ ñá¡¡δσ */
  1272.      getmin(data,num)
  1273.      double *data;
  1274.      int num;
  1275.      {
  1276.           int t,min;
  1277.  
  1278.           min = (int)data[0];
  1279.           for (t=1;t<num;++t)
  1280.                if (data[t]<min) min = (int)data[t];
  1281.           return min;
  1282.      }
  1283.  
  1284.      /* éδó«ñ ½¿¡¿¿ ºáñá¡¡«ú« µóÑΓá, ¿ß»«½∞ºπ∩ íẫóδ⌐ á½ú«α¿Γ¼
  1285.           üαѺѡσá¼á */
  1286.      void line(startx,starty,endx,endy,color)
  1287.      int startx,starty,endx,endy,color;
  1288.      {
  1289.           register int t,distance;
  1290.           int x=0,y=0,delta_x,delta_y;
  1291.           int incx,incy;
  1292.  
  1293.      /* óδτ¿ß½Ñ¡¿Ñ αáßßΓ«∩¡¿⌐ »« «í«¿¼ ¡á»αáó½Ñ¡¿∩¼ */
  1294.           delta_x = endx - startx;
  1295.           delta_y = endy - starty;
  1296.      /* «»αÑñѽѡ¿Ñ ¡á»αáó½Ñ¡¿⌐ πóѽ¿τÑ¡¿∩ ¬««αñ¿¡áΓ, ¡π½Ñó«Ñ
  1297.         πóѽ¿τÑ¡¿Ñ ß««ΓóÑΓßΓóπÑΓ ½¿í« óÑαΓ¿¬á½∞¡«⌐, ½¿í«
  1298.         ú«α¿º«¡Γá½∞¡«⌐ ½¿¡¿¿ */
  1299.           if ( delta_x > 0 ) incx = 1 ;
  1300.           else  if (delta_x == 0 ) incx = 0;
  1301.           else incx = -1;
  1302.           if ( delta_y > 0 ) incy = 1 ;
  1303.           else  if (delta_y == 0 ) incy = 0;
  1304.           else incy = -1;
  1305.      /* «»αÑñѽѡ¿Ñ ¼á¬ß¿¼π¼á ¿º¼Ñ¡Ñ¡¿∩ ¬««αñ¿¡áΓ */
  1306.           delta_x = abs(delta_x);
  1307.           delta_y = abs(delta_y);
  1308.           if ( delta_x > delta_y ) distance = delta_x;
  1309.           else distance = delta_y;
  1310.      /* óδτÑατ¿óá¡¿Ñ ½¿¡¿¿ */
  1311.           for (t=0;t<=distance+1;t++) {
  1312.                mempoint(startx,starty,color);
  1313.                x+= delta_x;
  1314.                y+= delta_y;
  1315.                if (x>distance) {
  1316.                x-=distance;
  1317.                startx+=incx;
  1318.  
  1319.  
  1320.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1321. â½áóá X                                                       -- 23 --
  1322.  
  1323.  
  1324.                }
  1325.                if (y>distance) {
  1326.                y-=distance;
  1327.                starty+=incy;
  1328.                }
  1329.           }
  1330.      }
  1331.      /* ¡á»«½¡Ñ¡¿Ñ »α∩¼«πú«½∞¡¿¬á ºáñá¡¡δ¼ µóÑΓ«¼ */
  1332.      void fill_box(startx,starty,endx,endy,color_code)
  1333.      int startx,starty,endx,endy,color_code;
  1334.      {
  1335.           register int i,begin,end;
  1336.  
  1337.           begin = startx < endx ? startx : endx;
  1338.           end = startx > endx ? startx : endx;
  1339.  
  1340.           for (i=begin;i<=end;i++)
  1341.                line(i,starty,i,endy,color_code);
  1342.      }
  1343.      /* ºá»¿ß∞ Γ«τ¬¿ ó CGA/EGA »á¼∩Γ∞ */
  1344.      void mempoint(x,y,color_code)
  1345.      int x,y,color_code;
  1346.      {
  1347.           union mask {
  1348.                char c[2];
  1349.                int i;
  1350.           } bit_mask;
  1351.           int i,index,bit_position;
  1352.           unsigned char t;
  1353.           char xor; /* xor - µóÑΓ ¿½¿ ¡á½«ªÑ¡¿Ñ */
  1354.           char far *ptr = (char far *) 0xB8000000; /* π¬áºáΓѽ∞ ¡á
  1355.                                                       CGA  */
  1356.           bit_mask.i = 0xFF3F; /* 11111111 00111111 ó ñó«¿τ¡«¼ ¬«ñÑ */
  1357.           /* ¬«¡Γα«½∞ ¬««αñ¿¡áΓ ñ½∩ 4 αѪ¿¼á */
  1358.           if (x<0 || x>199 || y<0 || y>319) return;
  1359.  
  1360.           xor = color_code & 128; /* »α«óÑα¬á πßΓᡫ󬿠αѪ¿¼á xor */
  1361.           color_code = color_code & 127; /* ¼á߬á 7 ßΓáαΦ¿σ í¿Γ */
  1362.  
  1363.      /* πßΓá¡«ó¬á bit_mask ¿ color_code ó »αáó¿½∞¡«Ñ »«½«ªÑ¡¿Ñ */
  1364.           bit_position = y%4;
  1365.           color_code <<= 2*(3-bit_position);
  1366.           bit_mask.i >>= 2*bit_position;
  1367.  
  1368.      /* »«¿ß¬ ß««ΓóÑΓßΓóπεΘÑú« íá⌐Γá ó »á¼∩Γ¿ φ¬αá¡á */
  1369.           index = x*40 + (y>>2);
  1370.           if (x%2) index+=8152; /* Ñß½¿ ¡ÑτÑΓ¡δ⌐, ¿ß»«½∞º«óáΓ∞ óΓ«α«⌐
  1371.                                    íᡬ */
  1372.      /* ºá»¿ß∞ µóÑΓá */
  1373.           if (!xor) { /* αѪ¿¼ ¡á½«ªÑ¡¿∩ */
  1374.                t = *(ptr + index) & bit_mask.c[0];
  1375.                *(ptr + index) = t | color_code;
  1376.           }
  1377.           else { /* αѪ¿¼ xor */
  1378.  
  1379.  
  1380.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1381. â½áóá X                                                       -- 24 --
  1382.  
  1383.  
  1384.                 t = *(ptr + index) | (char)0;
  1385.                *(ptr + index) = t ^ color_code;
  1386.           }
  1387.      }
  1388.  
  1389.      /* πßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
  1390.      void mode(mode_code)
  1391.      int mode_code;
  1392.      {
  1393.           union REGS r;
  1394.  
  1395.           r.h.al = mode_code;
  1396.           r.h.ah = 0;
  1397.           int86(0x10,&r,&r);
  1398.      }
  1399.  
  1400.      /* πßΓá¡«ó¬á ¬παß«αá ó ¬««αñ¿¡áΓδ x,y */
  1401.      void goto_xy(x,y)
  1402.      int x,y;
  1403.      {
  1404.           union REGS r;
  1405.  
  1406.           r.h.ah = 2; /* Σπ¡¬µ¿∩ áñαÑßᵿ¿ ¬παß«αá */
  1407.           r.h.dl = y; /* ú«α¿º«¡Γá½∞¡á∩ ¬««αñ¿¡áΓá */
  1408.           r.h.dh = x; /* óÑαΓ¿¬á½∞¡á∩ ¬««αñ¿¡áΓá */
  1409.           r.h.bh = 0; /* ó¿ñÑ«ßΓαá¡¿µá */
  1410.           int86(0x10,&r,&r);
  1411.      }
  1412.  
  1413.      /* πßΓá¡«ó¬á µóÑΓ«ó ñ¿áúαá¼¼ */
  1414.      void palette(pnum)
  1415.      int pnum;
  1416.      {
  1417.           union REGS r;
  1418.  
  1419.           r.h.bh = 1; /* ¬«ñ 4 αѪ¿¼á */
  1420.           r.h.bl = pnum;
  1421.           r.h.ah = 11; /* πßΓá¡«ó¬á Σπ¡¬µ¿¿ µóÑΓá */
  1422.           int86(0x10,&r,&r);
  1423.      }
  1424.  
  1425.      /* ß«σαá¡Ñ¡¿Ñ óδóÑñÑ¡¡«ú« ó¿ñÑ«úαáΣ¿¬á */
  1426.      void save_pic()
  1427.      {
  1428.           char fname[80];
  1429.           FILE *fp;
  1430.           register int i,j;
  1431.           char far *ptr = (char far *) 0xB8000000; /* π¬áºáΓѽ∞
  1432.                ¡á CGA »á¼∩Γ∞ */
  1433.           char far *temp;
  1434.           unsigned char buf[14][80]; /* ñ½∩ αẼÑΘÑ¡¿∩ ß«ñÑন¼«ú«
  1435.                                         φ¬αá¡á */
  1436.  
  1437.           temp = ptr;
  1438.  
  1439.  
  1440.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1441. â½áóá X                                                       -- 25 --
  1442.  
  1443.  
  1444.           /* ß«σαá¡Ñ¡¿Ñ óÑασ¡Ñ⌐ τáßΓ¿ ΓѬπΘÑú« φ¬αá¡á */
  1445.           for (i=0;i<14;i++)
  1446.                for (j=0;j<80;j+=2) {
  1447.                     buf[i][j] = *temp; /* τÑΓ¡δ⌐ íá⌐Γ */
  1448.                     buf[i][j+1] = *(temp+8152); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ*/
  1449.                     *temp = 0;
  1450.                     *(temp+8152) = 0; /* τ¿ßΓ¬á óÑασ¡Ñ⌐ τáßΓ¿
  1451.                                          φ¬αá¡á */
  1452.                     temp++;
  1453.                }
  1454.           goto_xy(0,0);
  1455.           printf(" ê¼∩ Σá⌐½á : ");
  1456.           gets(fname);
  1457.           if (!(fp=fopen(fname,"wb"))) {
  1458.                printf(" ìÑ󫺼«ª¡« «Γ¬αδΓ∞ Σá⌐½ \n");
  1459.                return;
  1460.           }
  1461.           temp = ptr;
  1462.           /* ó«ßßΓá¡«ó½Ñ¡¿Ñ óÑασ¡Ñ⌐ τáßΓ¿ φ¬αá¡á */
  1463.           for (i=0;i<14;i++)
  1464.                for (j=0;j<80;j+=2) {
  1465.                     *temp = buf[i][j];
  1466.                     *(temp+8152) = buf[i][j+1];
  1467.                     temp++;
  1468.                }
  1469.           /* ß«σαá¡Ñ¡¿Ñ α¿ßπ¡¬á ó Σá⌐½Ñ */
  1470.           for (i=0;i<8152;i++) {
  1471.                putc(*ptr,fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  1472.                putc(*(ptr+8152),fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1473.                ptr++;
  1474.           }
  1475.           fclose(fp);
  1476.      }
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1501. â½áóá X                                                       -- 26 --
  1502.  
  1503.  
  1504.                    ÄÆÄüÉÇåàìêà äêÇâÉÇîî ìÇ ¥èÉÇìà äêæÅïàƒ
  1505.      -----------------------------------------------------------------
  1506.  
  1507.           àß½¿ óδ  ß«σαá¡¿½¿ »«ßΓα«Ñ¡¡πε ñ¿áúαá¼¼π ó Σá⌐½Ñ,  Γ« óßÑúñá
  1508.      ¼«ªÑΓÑ »«óΓ«α¡« »«½πτ¿Γ∞ ¿º«íαáªÑ¡¿Ñ ñá¡¡«⌐ ñ¿áúαá¼¼δ.  ä½∩  φΓ«⌐
  1509.      µÑ½¿ ß½πª¿Γ »α«úαá¼¼á SHOW, «»¿ßá¡¡á∩ ó ñá¡¡«¼ αáºñѽÑ. Åα«úαá¼¼á
  1510.      óδó«ñ¿Γ ñ¿áúαá¼¼π, ¡áσ«ñ∩Θπεß∩ ó Σá⌐½Ñ, ¿¼∩ Σá⌐½á ºáñáÑΓß∩ ó ó¿ñÑ
  1511.      áαúπ¼Ñ¡Γá ¬«¼á¡ñδ. ìá»α¿¼Ñα, τΓ«íδ óδóÑßΓ¿ ñ¿áúαá¼¼π, ¡áσ«ñ∩Θπεß∩
  1512.      ó Σá⌐½Ñ backlog, ¡Ñ«íσ«ñ¿¼« óóÑßΓ¿ ¬«¼á¡ñπ
  1513.  
  1514.                         show backlog
  1515.  
  1516.           Åα«úαá¼¼á show      ¿ß»«½∞ºπÑΓ      Σπ¡¬µ¿ε      load_pic(),
  1517.      »αÑñ¡áº¡áτÑ¡¡πε  ñ½∩  ¿º«íαáªÑ¡¿∩  ñ¿áúαá¼¼ ¡á φ¬αá¡Ñ.  (éδ ΓᬪÑ
  1518.      ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞  φΓπ  »α«úαá¼¼π  ñ½∩  «Γ«íαáªÑ¡¿∩  ¡á  φ¬αá¡Ñ
  1519.      ñ¿ß»½Ñ∩  ñαπú¿σ  úαáΣ¿τÑ߬¿σ «íαẫó,  »αÑñóáα¿Γѽ∞¡« ß«ºñá¡¡δσ ¿
  1520.      ºá»¿ßá¡¡δσ ó Σá⌐½.)
  1521.  
  1522.      /* Åα«ßΓÑ⌐Φá∩ »α«úαá¼¼á ó«ßßΓá¡«ó½Ñ¡¿∩ úαáΣ¿τÑ߬¿σ «íαẫó */
  1523.  
  1524.      #include "stdio.h"
  1525.      #include "dos.h"
  1526.  
  1527.      void load_pic(),mode(),palette(),goto_xy();
  1528.  
  1529.      main(argc,argv)
  1530.      int argc;
  1531.      char *argv[];
  1532.      {
  1533.           if (argc != 2) {
  1534.                printf(" ÄíαáΘÑ¡¿Ñ: »«¬áºáΓ∞ <¿¼∩ Σá⌐½á>");
  1535.                exit(1);
  1536.           }
  1537.           mode(4);
  1538.           palette(0);
  1539.           load_pic(argv[1]);
  1540.           getch();
  1541.           mode(3);
  1542.      }
  1543.  
  1544.      /* ºáúαπº¬á úαáΣ¿τÑ߬«ú« ¿º«íαáªÑ¡¿∩ */
  1545.      void load_pic(fname)
  1546.      char *fname;
  1547.      {
  1548.           FILE *fp;
  1549.           register int i,j;
  1550.           char far *ptr = (char far *) 0xB8000000; /* π¬áºáΓѽ∞
  1551.                ¡á CGA »á¼∩Γ∞ */
  1552.           char far *temp;
  1553.           unsigned char buf[14][80]; /* ñ½∩ αẼÑΘÑ¡¿∩ ß«ñÑন¼«ú«
  1554.                                         φ¬αá¡á */
  1555.           if (!(fp=fopen(fname,"rb"))) {
  1556.                goto_xy(0,0);
  1557.                printf(" ¡Ñ󫺼«ª¡« «Γ¬αδΓ∞ Σá⌐½ \n");
  1558.  
  1559.  
  1560.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1561. â½áóá X                                                       -- 27 --
  1562.  
  1563.  
  1564.                return;
  1565.           }
  1566.           /* ºáúαπº¬á ¿º«íαáªÑ¡¿∩ ¿º Σá⌐½á */
  1567.           for (i=0;i<8152;i++) {
  1568.                *ptr = getc(fp); /* τÑΓ¡δ⌐ íá⌐Γ */
  1569.                *(ptr+8152) = getc(fp); /* ¡ÑτÑΓ¡δ⌐ íá⌐Γ */
  1570.                ptr++;
  1571.           }
  1572.           fclose(fp);
  1573.      }
  1574.  
  1575.      /* πßΓá¡«ó¬á ó¿ñÑ«αѪ¿¼á */
  1576.      void mode(mode_code)
  1577.      int mode_code;
  1578.      {
  1579.           union REGS r;
  1580.  
  1581.           r.h.al = mode_code;
  1582.           r.h.ah = 0;
  1583.           int86(0x10,&r,&r);
  1584.      }
  1585.  
  1586.      /* πßΓá¡«ó¬á µóÑΓ«ó ñ¿áúαá¼¼ */
  1587.      void palette(pnum)
  1588.      int pnum;
  1589.      {
  1590.           union REGS r;
  1591.  
  1592.           r.h.bh = 1; /* ¬«ñ 4 αѪ¿¼á */
  1593.           r.h.bl = pnum;
  1594.           r.h.ah = 11; /* πßΓá¡«ó¬á Σπ¡¬µ¿¿ µóÑΓá */
  1595.           int86(0x10,&r,&r);
  1596.      }
  1597.  
  1598.       /* πßΓá¡«ó¬á ¬παß«αá ó ¬««αñ¿¡áΓδ x,y */
  1599.      void goto_xy(x,y)
  1600.      int x,y;
  1601.      {
  1602.           union REGS r;
  1603.  
  1604.           r.h.ah = 2; /* Σπ¡¬µ¿∩ áñαÑßᵿ¿ ¬παß«αá */
  1605.           r.h.dl = y; /* ú«α¿º«¡Γá½∞¡á∩ ¬««αñ¿¡áΓá */
  1606.           r.h.dh = x; /* óÑαΓ¿¬á½∞¡á∩ ¬««αñ¿¡áΓá */
  1607.           r.h.bh = 0; /* ó¿ñÑ«ßΓαá¡¿µá */
  1608.           int86(0x10,&r,&r);
  1609.      }
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1621. â½áóá X                                                       -- 28 --
  1622.  
  1623.  
  1624.                ìàèÄÆÄÉ¢à êìÆàÉàæì¢à êäàê ÅÄ îÄäêöêèÇûêê ÅÉÄâÉÇîî
  1625.      -----------------------------------------------------------------
  1626.  
  1627.           éδ ¼«ªÑΓÑ  αáßΦ¿α¿Γ∞  «»¿ßá¡¡δÑ  Σπ¡¬µ¿¿,  óóÑñ∩  »áαá¼ÑΓαδ,
  1628.      ºáñáεΘ¿Ñ  αẼÑαδ  ¿  αáß»«½«ªÑ¡¿Ñ  ñ¿áúαá¼¼ Γá¬,  τΓ«íδ óδó«ñ¿Γ∞
  1629.      ñ¿áúαá¼¼δ αạδσ αẼÑα«ó ó αẽ¿τ¡δσ  τáßΓ∩σ  φ¬αá¡á.  ìá»α¿¼Ñα,
  1630.      ¼«ªÑΓ íδΓ∞ πñ«íÑ¡ óδó«ñ τÑΓδαÑσ ¼á½δσ ñ¿áúαá¼¼, ¬áªñá∩ ¿º ¬«Γ«αδσ
  1631.      αáß»«½«ªÑ¡á  ó  «ñ¡«¼  ¿º  ¬óáñαá¡Γ«ó  φ¬αá¡á.  éδ  ΓᬪѠ ¼«ªÑΓÑ
  1632.      ¿º¼Ñ¡¿Γ∞  »αÑñ½«ªÑ¡¡δÑ Σπ¡¬µ¿¿ ¿ αáí«ΓáΓ∞ ß úαáΣ¿τÑ߬¿¼¿ αѪ¿¼á¼¿
  1633.      í«½ÑÑ óδß«¬«⌐ αáºαÑΦáεΘÑ⌐ ß»«ß«í¡«ßΓ¿.
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.                                  "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1681.