home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c-book.doc / t4.cod < prev    next >
Encoding:
Text File  |  1990-10-26  |  84.2 KB  |  2,010 lines

  1.  
  2.                    Åα¿ú½áΦÑ¡¿∩ ¬ óó«ñπ ó »«½Ñ (Prompts)
  3.      -----------------------------------------------------------------
  4.  
  5.           èáªñ«Ñ »«½Ñ ¼«ªÑΓ ¿¼ÑΓ∞ ßó«Ñ ß»Ñµ¿Σ¿τ¡«Ñ »α¿ú½áΦÑ¡¿Ñ ¬ óó«ñπ
  6.      ó  ¡Ñú«  ñá¡¡δσ,  ¬«Γ«α«Ñ «íδτ¡« ß«ñÑαª¿Γ  ¿¡Σ«α¼áµ¿ε, »«∩ß¡∩εΘπε
  7.      »«½∞º«óáΓѽε, ñ½∩ τÑú« »αÑñ¡áº¡áτÑ¡« ñá¡¡«Ñ »«½Ñ (ßѼá¡Γ¿¬á »«½∩)
  8.      ¿ ¬á¬á∩ ¿¼Ñ¡¡«  ¿¡Σ«α¼áµ¿∩  ñ«½ª¡á  íδΓ∞  ó  ¡Ñú«  óóÑñÑ¡á. Æá¬«Ñ
  9.      »α¿ú½áΦÑ¡¿Ñ  »αÑñßΓáó½∩ÑΓ   ß«í«⌐   ß¿¼ó«½∞¡πε   ßΓ᫬π,  ¬«Γ«απε
  10.      »«½∞º«óáΓѽ∞  ¿º¼Ñ¡¿Γ∞  ¡Ñ ¼«ªÑΓ.  éδ ñ«½ª¡δ ßἿ ß»Ñµ¿Σ¿µ¿α«óáΓ∞
  11.      ß«ñÑαªá¡¿Ñ  φΓ«⌐  ßΓ᫬¿  ¿   »«º¿µ¿ε   ÑÑ  αẼÑΘÑ¡¿∩   ó  «¬¡Ñ.
  12.      Åα¿ú½áΦÑ¡¿Ñ  ¬ óó«ñπ ñá¡¡δσ  ñ«½ª¡«  ¿¼ÑΓ∞ ñ½¿¡π,  ¡Ñ »αÑóδΦáεΘπε
  13.      ñ½¿¡π ßΓ᫬¿ «¬¡á.
  14.  
  15.  
  16.  
  17.                          éó«ñ ñá¡¡δσ
  18.      -----------------------------------------------------------------
  19.  
  20.           é »α«µÑßßÑ  ßó«Ñ⌐ αáí«Γδ  Σπ¡¬µ¿∩  óó«ñá ñá¡¡δσ «íαáíáΓδóáÑΓ
  21.      »«½∩ Φáí½«¡á ó Γ«⌐ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿,  ó ¬«Γ«α«⌐ óδ «ßπΘÑßΓó½∩½¿
  22.      ¿σ «»¿ßá¡¿Ñ  (¡Ñ »α¿¡¿¼á∩  ó«  ó¡¿¼á¡¿Ñ  »«º¿µ¿¿ ¿σ  αẼÑΘÑ¡¿∩ ó
  23.      Φáí½«¡Ñ),  «ßπΘÑßΓó½∩∩ »α¿ φΓ«¼  »α«ßΓÑ⌐Φπε »α«óÑα¬π ñ«»πßΓ¿¼«ßΓ¿
  24.      ¡áσ«ñ∩Θ¿σß∩  ó  »«½∩σ  Φáí½«¡á  ñá¡¡δσ  (»αáó¿½∞¡«ßΓ∞  ñáΓδ, »«½Ñ
  25.      ñ«½ª¡« ß«ñÑαªáΓ∞ Γ«½∞¬« µ¿Σαδ ¿ Γ.ñ.). éδ ¼«ªÑΓÑ ΓᬪѠ«»αÑñѽ¿Γ∞
  26.      «íδτ¡πε  (ó  ß¼δ߽Ѡ æ¿)   Σπ¡¬µ¿ε,  ¬«Γ«αá∩  íπñÑΓ  «ßπΘÑßΓó½∩Γ∞
  27.      ñá½∞¡Ñ⌐Φπε,  ó«º¼«ª¡«, ß½«ª¡πε ¿ αạ««íαạπε, »α«óÑα¬π óó«ñ¿¼δσ
  28.      ñá¡¡δσ  ¿½¿ «»αÑñѽ¿Γ∞  Σπ¡¬µ¿ε,  ¬«Γ«αá∩ íπñÑΓ óδñáóáΓ∞ ó ß½πτáÑ
  29.      óó«ñá    ¡Ññ«»πßΓ¿¼δσ    ñá¡¡δσ    ß»Ñµ¿á½∞¡πε    help-¿¡Σ«α¼áµ¿ε
  30.      »«½∞º«óáΓѽε.  é  »α«µÑßßÑ  óó«ñá  ñá¡¡δσ  ó  Φáí½«¡ ¿ß»«½∞ºπÑΓß∩
  31.      óδñѽѡ¿Ñ ó ß««ΓóÑΓßΓó¿¿  ß π¬áºá¡¡δ¼¿  áΓα¿íπΓἿ (ACCENT) µóÑΓá
  32.      «¬¡á  í«½ÑÑ ∩ન¼  Γ«¡«¼  »«½Ñ⌐,  ó  ¬«Γ«αδÑ  »αÑñ»«½áúáÑΓß∩ óó«ñ
  33.      ñá¡¡δσ.   Åα¿  φΓ«¼  ¬παß«α  ¡á  φ¬αá¡Ñ  ¬«¼»∞εΓÑαá  »ÑαÑσ«ñ¿Γ  ó
  34.      ß««ΓóÑΓßΓóπεΘπε  »«º¿µ¿ε   »«½∩.   é  ß½πτáÑ,  Ñß½¿  »«½∞º«óáΓѽ∞
  35.      ¿¡¿µ¿¿απÑΓ ñαπú«⌐ »«α∩ñ«¬ óó«ñá ñá¡¡δσ,  »ÑαÑσ«ñ∩ «Γ »«½∩ ¬ »«½ε,
  36.      Γ« óδñѽѡ¿Ñ  ß½ÑñπεΘÑú«,  óδíαá¡¡«ú« »«½∞º«óáΓѽѼ »«½∩ óó«ñá, ¿
  37.      »ÑαѼÑΘÑ¡¿Ñ ¬παß«αá ΓᬪѠ«ßπΘÑßΓó½∩ÑΓß∩ »α«úαá¼¼¡«.
  38.  
  39.  
  40.  
  41.                              - 2 -
  42.  
  43.                       öπ¡¬µ¿¿ ßí«αá ñá¡¡δσ
  44.      -----------------------------------------------------------------
  45.  
  46.           ¥Γ¿ Σπ¡¬µ¿¿,   ∩ó½∩εΘ¿Ñß∩   í¿í½¿«ΓÑτ¡δ¼¿   Σπ¡¬µ¿∩¼¿,  óáΦá
  47.      »α«úαἼᠠΓᬠ ¿½¿  ¿¡áτÑ  óδºδóáÑΓ  »α¿  ¿ß»«½∞º«óá¡¿¿  «¬¡á  ß
  48.      Φáí½«¡«¼   óó«ñá   ñá¡¡δσ.   çừ¼¡¿ΓÑ,  τΓ«  óδ  ñ«½ª¡δ  ó¡áτá½Ñ
  49.      πßΓá¡«ó¿Γ∞ «¬¡«, á ½¿Φ∞ ºáΓѼ ¿ß»«½∞º«óáΓ∞ φΓ¿ Σπ¡¬µ¿¿.
  50.  
  51.      void init_template(WINDOW *wnd)
  52.  
  53.           ¥Γá Σπ¡¬µ¿∩ ¿¡¿µ¿á½¿º¿απÑΓ  «¬¡«  ñ½∩  ¿ß»«½∞º«óá¡¿∩  ó  ¡Ñ¼
  54.      Φáí½«¡á  óó«ñá ñá¡¡δσ.  Ä¡á πßΓá¡áó½¿óáÑΓ ßó∩º¡«⌐ ß»¿ß«¬ ßΓαπ¬Γπα
  55.      FIELD  ¿  »α«¿ºó«ñ¿Γ  «τ¿ßΓ¬π  óßÑσ  ßπΘÑßΓóπεΘ¿σ   ñÑß¬α¿»Γ«α«ó.
  56.      æΓαπ¬Γπαá  FIELD,  «»¿ßδóáεΘá∩ σáαá¬ΓÑα¿ßΓ¿¬¿ »«½Ñ⌐ óó«ñá ñá¡¡δσ,
  57.      «»αÑñѽѡá ó twindow.h  (ß¼.  â½áóπ  6).  öπ¡¬µ¿∩  inint_template
  58.      »αÑñ¡áº¡áτѡᠠ ñ½∩   óδ»«½¡Ñ¡¿∩   ñóπσ   ºáñáτ.  é«-»Ñαóδσ,  «¡á
  59.      ¿¡¿µ¿á½¿º¿απÑΓ «¬¡«;  ó«-óΓ«αδσ,  Ñß½¿ «¬¡« ¿¡¿µ¿á½¿º¿α«óá¡«, «¡á
  60.      «ßπΘÑßΓó½∩ÑΓ  »«¿ß¬  ¿  π¡¿τΓ«ªÑ¡¿Ñ  óßÑσ πßΓá¡«ó½Ñ¡¡δσ ¡á ñá¡¡δ⌐
  61.      ¼«¼Ñ¡Γ »«½Ñ⌐  «¬¡á;  ß½Ññ«óáΓѽ∞¡«,  ¿ß»«½∞º«óá¡¿Ñ  φΓ«⌐  Σπ¡¬µ¿¿
  62.      ó«º¼«ª¡«  ó  ß¿Γπᵿ¿,  ¬«úñá  Φáí½«¡ «¬¡á ¡Ñ ∩ó½∩ÑΓß∩ ñ«ßΓáΓ«τ¡«
  63.      í«½∞Φ¿¼,  Γᬠ¬á¬ ¿ß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿¿ »α¿ó«ñ¿Γ  ¬  «ßó«í«ªñÑ¡¿ε
  64.      ßΓαπ¬Γπα FIELD.
  65.  
  66.      FIELD *establish_field
  67.      (WINDOW *wnd,int x,int y,char *msk,char *bf,int t)
  68.  
  69.           ¥Γá Σπ¡¬µ¿∩ πßΓá¡áó½¿óáÑΓ »«½∩ óó«ñá  ñá¡¡δσ ó «¬¡Ñ, ¬«Γ«α«Ñ
  70.      í佫 ¿¡¿µ¿á½¿º¿α«óá¡« Σπ¡¬µ¿Ñ⌐ init_template ¬á¬ «¬¡«  ß Φáí½«¡«¼
  71.      óó«ñá  ñá¡¡δσ.  æ¿¼ó«½δ  x ¿ y  ßπΓ∞  ¬««αñ¿¡áΓδ, ß»Ñµ¿Σ¿µ¿απεΘ¿Ñ
  72.      αẼÑΘÑ¡¿Ñ ¼á߬¿ »«½∩  óó«ñá,  »α¿τѼ  »αÑñ»«τΓ¿Γѽ∞¡ÑÑ π¬áºδóáΓ∞
  73.      ¬««αñ¿¡áΓδ «Γ¡«ß¿Γѽ∞¡«  «¬¡á,  á  ¡Ñ  φ¬αá¡á.  ô¬áºáΓѽ∞ bf ßπΓ∞
  74.      π¬áºáΓѽ∞  ¡á  «»αÑñѽ∩Ѽδ⌐  »α¿  «íαáΘÑ¡¿¿  íπΣÑα  ßí«αá ñá¡¡δσ.
  75.      Åáαá¼ÑΓα t  (º¡áτÑ¡¿Ñ  Γ¿»á  integer)  π¬áºδóáÑΓ  Γ¿»  »«½∩ óó«ñá
  76.      ñá¡¡δσ. Éẽ¿τáεΓ ß½ÑñπεΘ¿Ñ Γ¿»δ »«½Ñ⌐:
  77.  
  78.      Ç = á½Σáó¿Γ¡«-µ¿Σα«ó«Ñ
  79.  
  80.                              - 3 -
  81.      N = µ¿Σα«ó«Ñ, ¡Ñº¡áτáΘ¿Ñ αáºα∩ñδ ºá»«½¡Ñ¡δ »α«íѽἿ
  82.      Z = µ¿Σα«ó«Ñ, ¡Ñº¡áτáΘ¿Ñ αáºα∩ñδ ºá»«½¡Ñ¡δ ¡π½∩¼¿
  83.      æ = »«½Ñ ñѡѪ¡«⌐ Ññ¿¡¿µδ
  84.      D = »«½Ñ ñáΓδ
  85.  
  86.           ô¬áºáΓѽ∞  msk ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ¡á  ß¿¼ó«½ ¼á߬¿, ¬«Γ«αδ⌐
  87.      «»αÑñѽ∩ÑΓ ñ½¿¡π »«½∩ ¿ π»αáó½∩ÑΓ «Γ«íαáªÑ¡¿Ñ¼ ß¿¼ó«½á »π¡¬Γπᵿ¿
  88.      ¡á  φ¬αá¡Ñ  (»α¿τѼ »«ß½Ññ¡¿Ñ  ¡Ñ  ¬«¡Γα«½¿απεΓß∩  ó  íπΣÑα ßí«αá
  89.      ñá¡¡δσ  »«½∩).  îá߬á ó¬½ετáÑΓ ó ßÑí∩ «íδτ¡«  ¡Ñ߬«½∞¬« ß¿¼ó«½«ó.
  90.      æ¿¼ó«½  »«ñτÑનóá¡¿∩ π¬áºδóáÑΓ »«º¿µ¿ε  ß¿¼ó«½á,  ¬«Γ«αδ⌐ ñ«½ªÑ¡
  91.      íδΓ∞  óóÑñÑ¡ ó ñá¡¡«¼ ¼ÑßΓÑ.  îáßß¿ó bf ñ«½ªÑ¡  ß«ñÑαªáΓ∞ ßΓ«½∞¬«
  92.      ß¿¼ó«½«ó,  ß¬«½∞¬«  ß¿¼ó«½«ó  »«ñτÑનóá¡¿∩ ß«ñÑαª¿Γ  ¼á߬á, »½εß
  93.      «ñ¿¡ ß¿¼ó«½ (ñ½∩ ß¿¼ó«½á ¬«¡µá ßΓ᫬¿ \0).
  94.  
  95.           Å«½Ñ ñѡѪ¡«⌐  Ññ¿¡¿µδ ¼«ªÑΓ  ¿¼ÑΓ∞  »α«¿ºó«½∞¡«Ñ τ¿ß½« µ¿Σα
  96.      ß½Ñóá «Γ  ñÑß∩Γ¿τ¡«⌐  Γ«τ¬¿ ¿ ñóÑ µ¿Σαδ ß»αáóá  «Γ  ¡ÑÑ.
  97.  
  98.           äáΓá   ñ«½ª¡á   ß««ΓóÑΓßΓó«óáΓ∞   Σ«α¼áΓπ  "îîääââ".    àß½¿
  99.      »«½∞º«óáΓѽ∞ ¡Ñ»αáó¿½∞¡« óóѽ ñáΓπ, »α«úαá¼¼á óδñáÑΓ ß««íΘÑ¡¿Ñ «í
  100.      «Φ¿í¬Ñ ¿   ΓαÑíπÑΓ  «Γ  »«½∞º«óáΓѽ∩   »«óΓ«α¡«ú«  óó«ñá  ñáΓδ.
  101.  
  102.           öπ¡¬µ¿∩  establish_field   ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ
  103.      FIELD,  «»αÑñѽѡ¡πε ó  twindow.h.  éδ  ¼«ªÑΓÑ  ¿ß»«½∞º«óáΓ∞ φΓ«Γ
  104.      π¬áºáΓѽ∞ »α¿ «íαáΘÑ¡¿¿ ¬ field_window, field_help, field_protect
  105.      ¿ field_validate, ¬«Γ«αδÑ «»¿ßá¡δ ¡¿ªÑ.
  106.  
  107.  
  108.      void wprompt(WINDOW *wnd, int x, int y, char *s)
  109.  
  110.           ¥Γá Σπ¡¬µ¿∩ «ßπΘÑßΓó½∩ÑΓ óδñáτπ »α¿ú½áΦÑ¡¿∩ ¡á óó«ñ ñá¡¡δσ ó
  111.      «¬¡«.  Åα¿ú½áΦÑ¡¿Ñ  ¡á  óó«ñ  ñá¡¡δσ ∩ó½∩ÑΓß∩ ßΓ᫬«⌐  s, ¬«Γ«αá∩
  112.      óδñáÑΓß∩, ¡áτ¿¡á∩ ß ¬««αñ¿¡áΓ «¬¡á, ºáñáóáѼδσ º¡áτÑ¡¿∩¼¿ σ ¿ π.
  113.  
  114.  
  115.      void field_tally(WINDOW *wnd)
  116.  
  117.           Åα¿ «íαáΘÑ¡¿¿  ¬  φΓ«⌐  Σπ¡¬µ¿¿  ¡á  φ¬αá¡ ñ¿ß»½Ñ∩ óδó«ñ∩Γß∩
  118.  
  119.                              - 4 -
  120.      º¡áτÑ¡¿∩  óßÑσ  ñá¡¡δσ,  σαá¡∩Θ¿σß∩  ó  íπΣÑαÑ,  ñ½∩  óßÑσ  »«½Ñ⌐
  121.      Φáí½«¡á.  éδ ¼«ªÑΓÑ ¿ß»«½∞º«óáΓ∞ φΓπ Σπ¡¬µ¿ε, ¬«úñá, ¡á»α¿¼Ñα, óδ
  122.      ºá»«½¡¿½¿ íπΣÑα º¡áτÑ¡¿∩¼¿ ¿º ºá»¿ß¿ íáºδ ñá¡¡δσ.
  123.  
  124.      void field_window(FIELD *fld, char *helpname, int x, int y)
  125.  
  126.           ¥Γá Σπ¡¬µ¿∩    «íÑß»Ñτ¿óáÑΓ   óδñáτπ   ¬«¡ΓѬßΓ¡«-ºáó¿ß¿¼«ú«
  127.      help-«¬¡á ñ½∩ ¬áªñ«ú« »«½∩ Φáí½«¡á.  Åáαá¼ÑΓα  helpname  ∩ó½∩ÑΓß∩
  128.      ßΓ᫬«⌐,  ß«ñÑαªáΘÑ⌐ ¼¡Ñ¼«¡¿¬π help-«¬¡á ó ΓѬπΘѼ help-Σá⌐½Ñ,  ¿
  129.      ß»Ñµ¿Σ¿µ¿απÑΓß∩  »αÑñóáα¿Γѽ∞¡«   »πΓѼ   «íαáΘÑ¡¿∩   ¬   Σπ¡¬µ¿¿
  130.      load_help  (ß¼.  â½áóπ 7).  Æ«τ¡« ΓᬠªÑ,  ¬á¬ Σπ¡¬µ¿∩ data_entry
  131.      «ßπΘÑßΓó½∩ÑΓ »ÑαÑσ«ñ «Γ »«½∩ ¬ »«½ε, «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿ set_help
  132.      ñ½∩ ¬áªñ«ú« ¿º »«½Ñ⌐ »«ºó«½∩ÑΓ »α¿ó∩ºáΓ∞ ¬«¡¬αÑΓ¡«Ñ help-«¬¡« ñ½∩
  133.      ¬áªñ«ú« ¿º ¡¿σ. Åáαá¼ÑΓαδ σ ¿ π »«ºó«½∩εΓ ß»Ñµ¿Σ¿µ¿α«óáΓ∞ »«º¿µ¿ε
  134.      φ¬αá¡á, ß ¬«Γ«α«⌐ íπñÑΓ «ßπΘÑßΓó½∩Γ∞ß∩ óδñáτá help-«¬¡á.
  135.  
  136.           çá¼ÑΓ∞ΓÑ,  τΓ«  φΓá Σπ¡¬µ¿∩,  á ΓᬪѠÑΘÑ Γα¿, αáßß¼«ΓαÑ¡¡δÑ
  137.      ¡¿ªÑ,  ¡Ñ ΓαÑíπεΓ  ¡á½¿τ¿∩ ó ß»¿ß¬Ñ  »áαá¼ÑΓα«ó π¬áºáΓѽ∩ WINDOW.
  138.      ä½∩  φΓ¿σ  Σπ¡¬µ¿⌐  ñ«ßΓáΓ«τ¡«  π¬áºáΓѽÑ⌐  FIELD,  Γᬠ ¬á¬  φΓ¿
  139.      π¬áºáΓѽ¿  »αÑñßΓáó½∩εΓ  ß«í«⌐  π¬áºáΓѽ¿   ¡á  µÑ»«τ¬π  ßó∩º¡«ú«
  140.      ß»¿ß¬á,  ¬«Γ«αδ⌐ ¿ «ßπΘÑßΓó½∩ÑΓ  »α¿ó∩º¬π  Σπ¡¬µ¿¿  ¬ ¬«¡¬αÑΓ¡«¼π
  141.      «¬¡π.  ¥Γ¿  Σπ¡¬µ¿¿  ¼«ñ¿Σ¿µ¿απεΓ  «»αÑñѽѡ¡δÑ  αá¡ÑÑ  »«½∩,  ¡Ñ
  142.      «íαáΘá∩ ó¡¿¼á¡¿∩ ¡á  Γ«,  τΓ« «¡¿ »α¿¡áñ½ÑªáΓ ¬«¡¬αÑΓ¡«¼π Φáí½«¡π
  143.      «¬¡á.
  144.  
  145.      void clear_template(WINDOW *wnd)
  146.  
  147.           ¥Γá  Σπ¡¬µ¿∩  «ßó«í«ªñáÑΓ  íπΣÑαδ  ßí«αá  ñá¡¡δσ  óßÑσ »«½Ñ⌐
  148.      Φáí½«¡á,  «íαáΘá∩  ¿σ  ó »πßΓπε  ßΓ᫬π,  ºá¬á¡τ¿óáεΘπεß∩ ¡π½Ñóδ¼
  149.      ß¿¼ó«½«¼ ¬«¡µá ßΓ᫬¿,  á  ΓᬪѠ«Γ«íαáªáÑΓ  ¡á  φ¬αá¡Ñ  óßÑ »«½∩
  150.      Φáí½«¡á.
  151.  
  152.      void field_validate(FIELD *fld, int (*validfn)())
  153.  
  154.           ¥Γá  Σπ¡¬µ¿∩  «Γ¡«ß¿Γß∩  ¬  ¼á¬α«ßá¼.  Ä¡á  ¿ß»«½∞ºπÑΓ áñαÑß
  155.      Σπ¡¬µ¿¿ »α«óÑન  ñ«»πßΓ¿¼«ßΓ¿  óó«ñ¿¼δσ  º¡áτÑ¡¿⌐  (Ñß½¿ Γᬫóá∩
  156.      íπñÑΓ    ¡á»¿ßá¡á     »«½∞º«óáΓѽѼ).     æΓá¡ñáαΓ¡δÑ    Σπ¡¬µ¿¿,
  157.  
  158.                              - 5 -
  159.      «ßπΘÑßΓó½∩εΘ¿Ñ  »α«óÑα¬π  ñ«»πßΓ¿¼«ßΓ¿  óó«ñ¿¼δσ  ó  »«½∩ ñá¡¡δσ,
  160.      «íδτ¡« ¡Ñ «ßπΘÑßΓó½∩εΓ ΓαÑíπѼ«⌐ »α«óÑન ¡á  «Φ¿í«τ¡πε ß¿Γπᵿε.
  161.      Å«   φΓ«⌐  »α¿τ¿¡Ñ   »«½∞º«óáΓѽ∞  «íδτ¡«   ßá¼   »¿ΦÑΓ  Σπ¡¬µ¿ε,
  162.      »α«¿ºó«ñ∩Θπε   ¬«¡Γα«½∞   ñá¡¡δσ.    öπ¡¬µ¿∩   data_entry   íπñÑΓ
  163.      «ßπΘÑßΓó½∩Γ∞  «íαáΘÑ¡¿Ñ  ¬  «»αÑñѽѡ¡δ¼  óἿ  Σπ¡¬µ¿∩¼ ¬«¡Γα«½∩
  164.      ñá¡¡δσ  »«ß½Ñ Γ«ú«,  ¬á¬ Ñε ßἫ⌐ íπñÑΓ «ßπΘÑßΓó½Ñ¡  ¿σ »Ñαó¿τ¡δ⌐
  165.      ¬«¡Γα«½∞.  àß½¿ φΓ« Γá¬,  Γ«  «¡á  íπñÑΓ  »ÑαÑñáóáΓ∞  ó  φΓ¿ óáΦ¿
  166.      Σπ¡¬µ¿¿ áñαÑß íπΣÑαá  ßí«αá ñá¡¡δσ,  ¿ αáºαáí«Γá¡¡δÑ óἿ Σπ¡¬µ¿¿
  167.      ¬«¡Γα«½∩    ñá¡¡δσ   ß¼«úπΓ   «ßπΘÑßΓó¿Γ∞    »α«óÑα¬π   óóÑñÑ¡¡δσ
  168.      »«½∞º«óáΓѽѼ º¡áτÑ¡¿⌐,  ¡áσ«ñ∩Θ¿σß∩  πªÑ ó íπΣÑαÑ.  éáΦá Σπ¡¬µ¿∩
  169.      ¬«¡Γα«½∩  ñ«»πßΓ¿¼«ßΓ¿  ñá¡¡δσ  ¼«ªÑΓ  ß«ñÑαªáΓ∞   ó맮ó  Σπ¡¬µ¿¿
  170.      error_message (ß¼.  â½áóπ 6)  ñ½∩ «íαáí«Γ¬¿ ß¿Γπᵿ¿, ¬«úñá íπñÑΓ
  171.      «í¡áαπªÑ¡«  ¡Ññ«»πßΓ¿¼«Ñ  º¡áτÑ¡¿Ñ.  Åα¿  φΓ«¼  «»αÑñѽѡ¡á∩ óἿ
  172.      Σπ¡¬µ¿∩ ¬«¡Γα«½∩  ñá¡¡δσ  ñ«½ª¡á ó«ºóαáΘáΓ∞ ½¿Φ∞  ñóá º¡áτÑ¡¿∩ Äè
  173.      ¿½¿ ERROR, ¬«Γ«αδÑ, ó ßó«ε «τÑαÑñ∞, «»αÑñÑ½Ñ¡δ  ó twindow.h. àß½¿
  174.      Σπ¡¬µ¿∩  ó«ºóαáΘáÑΓ  º¡áτÑ¡¿Ñ  Äè,  Γ«  Σπ¡¬µ¿∩  data_entry íπñÑΓ
  175.      «íαáíáΓδóáΓ∞  ß½ÑñπεΘÑÑ »«½Ñ  Φáí½«¡á.  àß½¿  ªÑ Σπ¡¬µ¿∩ ¬«¡Γα«½∩
  176.      ó«ºóαáΘáÑΓ º¡áτÑ¡¿Ñ ERROR, Γ« Σπ¡¬µ¿∩ data_entry "«ßΓá¡«ó¿Γß∩" ¡á
  177.      »«½Ñ, ó ñá¡¡δ󠬫ëα«ú« «í¡áαπªÑ¡á «Φ¿í¬á.
  178.  
  179.      void field_protect(FIELD *fld, int prot)
  180.  
  181.           ¥Γá Σπ¡¬µ¿∩ ΓᬪѠ«Γ¡«ß¿Γß∩ ¬  ¼á¬α«ßá¼.  Ä¡á  πßΓá¡áó½¿óáÑΓ
  182.      ¿½¿  «Γ¼Ñ¡∩ÑΓ  (ó  ºáó¿ß¿¼«ßΓ¿ «Γ º¡áτÑ¡¿∩ »áαá¼ÑΓαá prot) ºáΘ¿Γπ
  183.      σáαá¬ΓÑα¿ßΓ¿¬   »«½∩.   çáΘ¿ΘÑ¡¡«Ñ   »«½Ñ    ¡Ñ    «íαáíáΓδóáÑΓß∩
  184.      (¿ú¡«α¿απÑΓß∩)    Σπ¡¬µ¿Ñ⌐    data_entry.    êß»«½∞ºπ∩    Σπ¡¬µ¿ε
  185.      field_protect, óδ ¼«ªÑΓÑ π»αáó½∩Γ∞ ñ«ßΓπ»«¼ »«½∞º«óáΓѽÑ⌐ ¬ »«½∩¼
  186.      Φáí½«¡á, αáºαÑΦá∩ ¿½¿ ºá»αÑΘá∩ ºá»¿ß∞ ó ¡¿σ ñá¡¡δσ.
  187.  
  188.           ¥Γá Σπ¡¬µ¿∩ ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ß«ó¼ÑßΓ¡« ß Σπ¡¬µ¿∩¼¿ field
  189.      _validate,  clear_template  ¿  field_fally   ñ½∩   ¬«¡Γα«½∩   ¡áñ
  190.      ¿º¼Ñ¡Ñ¡¿∩¼¿,  »α«¿ºó«ñ¿¼δ¼¿ ó ºá»¿ß∩σ íáºδ ñá¡¡δσ, ó ß½πτáÑ, Ñß½¿
  191.      φ½Ñ¼Ñ¡Γδ ºá»¿ß¿ íáºδ ñá¡¡δσ «Γ«íαáªáεΓß∩ ó Φáí½«¡Ñ.
  192.  
  193.           ä½∩ »«¡¿¼á¡¿∩  Γ«ú«,  ¬á¬  º¡áτ¿Γѽ∞¡« αáßΦ¿α∩ÑΓ ó«º¼«ª¡«ßΓ¿
  194.      »α«úαá¼¼δ ¿ß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿¿ field_protect, αáßß¼«Γα¿¼ Φáí½«¡,
  195.      ¿º«íαáªÑ¡¡δ⌐ ¡á α¿ßπ¡¬Ñ 8.1. Åα¿¼¿ΓÑ ó« ó¡¿¼á¡¿Ñ, τΓ« φëàΦáí½«¡
  196.  
  197.                              - 6 -
  198.      ß«ñÑαª¿Γ »«½∩, «íαáºπεΘ¿Ñ ºá»¿ß∞ »« «ñ¡«¼π ß½πªáΘѼπ ó Σá⌐½Ñ íáºδ
  199.      ñá¡¡δσ.  ÿáí½«¡ óó«ñá ñá¡¡δσ ¿ß»«½∞ºπÑΓß∩ ñ½∩ óó«ñá, «Γ«íαáªÑ¡¿∩,
  200.      »«¿ß¬á ¿ ¿º¼Ñ¡Ñ¡¿∩ ºá»¿ßÑ⌐ ó Σá⌐½Ñ.  ÅÑαÑñ  ¡áτὫ¼  óó«ñá ñá¡¡δσ
  201.      óáΦá  »α«úαἼᠠ¼«ªÑΓ  «íαáΓ¿Γ∞ß∩  ¬  Σπ¡¬µ¿¿  field_protect ñ½∩
  202.      ºáΘ¿Γδ óßÑσ »«½Ñ⌐,  ¬α«¼Ñ »«½∩ "¡«¼Ñα ß½πªáΘÑú«". çáΓѼ óδ ¼«ªÑΓÑ
  203.      «íαáΓ¿Γ∞ß∩ ¬  Σπ¡¬µ¿¿  field_validate,  »ÑαÑñáó  Ñ⌐  π¬áºáΓѽ∞ ¡á
  204.      «íδτ¡δÑ,   αáºαáí«Γá¡¡δÑ   óἿ   Σπ¡¬µ¿¿   ¬«¡Γα«½∩   ñá¡¡δσ  ¡á
  205.      ñ«»πßΓ¿¼«ßΓ∞.  Å«ß½Ñ Γ«ú«,  ¬á¬ »«½∞º«óáΓѽ∞ óóÑñÑΓ ñá¡¡δÑ ó »«½Ñ
  206.      "¡«¼Ñα  ß½πªáΘÑú«",  Σπ¡¬µ¿∩  data_entry  (íπñÑΓ  «»¿ßá¡á  »«ºªÑ)
  207.      «ßπΘÑßΓó¿Γ  «íαáΘÑ¡¿Ñ  ¬  αáºαáí«Γá¡¡«⌐  óἿ   Σπ¡¬µ¿¿  ¬«¡Γα«½∩
  208.      ñá¡¡δσ,  ¬«Γ«αá∩  «ßπΘÑßΓó¿Γ  »«¿ß¬ ¿ ßαáó¡Ñ¡¿Ñ  »«  ¬½ετπ (¡«¼Ñα
  209.      ß½πªáΘÑú«)  ¡πª¡«⌐ ºá»¿ß¿ ó íáºÑ ñá¡¡δσ.  öπ¡¬µ¿∩ ¬«¡Γα«½∩ ñá¡¡δσ
  210.      »α«¿ºóÑñÑΓ  ºáúαπº¬π  ß««ΓóÑΓßΓóπεΘ¿σ  íπΣÑα«ó  ¡á¬«»½Ñ¡¿∩ ñá¡¡δσ
  211.      φ½Ñ¼Ñ¡ΓἿ  ñá¡¡δσ  ¿º  ¡á⌐ñÑ¡¡«⌐  ºá»¿ß¿  íáºδ  ñá¡¡δσ,  á ºáΓѼ
  212.      «íαáΓ¿Γß∩ ¬ Σπ¡¬µ¿¿  field_fally  ñ½∩  óδó«ñá  º¡áτÑ¡¿⌐ φ½Ñ¼Ñ¡Γ«ó
  213.      ñá¡¡δσ ¡á φ¬αá¡.  Å«ß½Ñ φΓ«ú« íπñÑΓ óδºóá¡á Σπ¡¬µ¿∩ field_protect
  214.      ñ½∩ πßΓᡫ󬿠ºáΘ¿Γδ ñ½∩ »«½∩ "¡«¼Ñα ß½πªáΘÑú«" ¿ ß¡∩Γ¿∩ ºáΘ¿Γδ ß
  215.      «ßΓá½∞¡δσ  »«½Ñ⌐.   é  ¿Γ«úÑ  Σπ¡¬µ¿∩  ¬«¡Γα«½∩  ñá¡¡δσ  »ÑαÑñáßΓ
  216.      π»αáó½Ñ¡¿Ñ Σπ¡¬µ¿¿ data_entry, ¿ »«½∞º«óáΓѽ∞ »«½πτ¿Γ ó«º¼«ª¡«ßΓ∞
  217.      »α«¿ºóÑßΓ¿  ¬«ααѬµ¿ε º¡áτÑ¡¿⌐  φ½Ñ¼Ñ¡Γ«ó  ñá¡¡δσ.  Å« ºáóÑαΦÑ¡¿¿
  218.      »«½∞º«óáΓѽѼ   »α«µÑßßá   «íαáí«Γ¬¿   ºá»¿ß¿   ß¿ßΓѼᠠ»ÑαÑñáßΓ
  219.      π»αáó½Ñ¡¿Ñ  »α¿¬½áñ¡δ¼  Σπ¡¬µ¿∩¼,  ¬«Γ«αδÑ  ¡Ñ»«ßαÑñßΓóÑ¡¡« íπñπΓ
  220.      «íαáΘáΓ∞ß∩   ó   data_entry.   ¥Γ¿   Σπ¡¬µ¿¿  ¼«úπΓ  »ÑαѺỿßáΓ∞
  221.      «Γ¬«ααÑ¬Γ¿α«óá¡¡πε  ºá»¿ß∞  ó  Σá⌐½,  «τ¿ßΓ¿Γ∞  íπΣÑαá  ñá¡¡δσ  ¿
  222.      Φáí½«¡δ »πΓѼ «íαáΘÑ¡¿∩ ¬  Σπ¡¬µ¿¿ clear_template, »ÑαÑ«»αÑñѽ¿Γ∞
  223.      ºáΘ¿Γπ »«½Ñ⌐ Φáí½«¡á (á  º¡áτ¿Γ,  ¿  ºá»¿ß¿),  ß¡∩ó ºáΘ¿Γπ ß »«½∩
  224.      "¡«¼Ñα  ß½πªáΘÑú«"   ¿  πßΓá¡«ó¿ó  ºáΘ¿Γπ  ñ½∩  ñαπú¿σ  »«½Ñ⌐,  ¿
  225.      »«óΓ«α¿Γ∞ óÑß∞ »α«µÑßß «íαáí«Γ¬¿ ºá»¿ß¿ ºá¡«ó«.
  226.  
  227.      ┌───────────────────────────────────────────────────────────────┐
  228.      │                                                               │
  229.      │                                                               │
  230.      │                                                               │
  231.      │       ┌────────────Employee Record───────────┐                │
  232.      │       │                                      │                │
  233.      │       │   Employee #:     377                │                │
  234.      │       │   Name:        Otis Cribblecoblis    │                │
  235.  
  236.                              - 7 -
  237.      │       │   Department:    2001                │                │
  238.      │       │   Salary:       15450.00             │                │
  239.      │       │   Date Hired:   01/02/55             │                │
  240.      │       │   SSN:          221-52-1234          │                │
  241.      │       │                                      │                │
  242.      │       │                                      │                │
  243.      │       └──────────────────────────────────────┘                │
  244.      │                                                               │
  245.      │                                                               │
  246.      │                                                               │
  247.      └───────────────────────────────────────────────────────────────┘
  248.  
  249.                É¿ß. 8.1. Åα¿¼Ñα Φáí½«¡á óó«ñá ñá¡¡δσ
  250.  
  251.  
  252.      void field_help(FIELD *fld, int (*helpfn)())
  253.  
  254.           ¥Γá Σπ¡¬µ¿∩   «Γ¡«ß¿Γß∩   ¬   ¼á¬α«ßá¼.  Ä¡á  »«ºó«½∩ÑΓ  óá¼
  255.      πßΓá¡«ó¿Γ∞ ß»Ñµ¿á½∞¡πε  help-Σπ¡¬µ¿ε,  ¬«Γ«αá∩  íπñÑΓ  óδºδóáΓ∞ß∩
  256.      ó¼ÑßΓ«  ßΓá¡ñáαΓ¡«⌐  help-Σπ¡¬µ¿¿.  ¥Γá  Σπ¡¬µ¿∩ ¿ß»«½∞ºπÑΓß∩ ñ½∩
  257.      «Γñѽ∞¡δσ »«½Ñ⌐ Φáí½«¡á, ¬«úñá »«½∞º«óáΓѽε ΓαÑíπÑΓß∩ »«½πτ¿Γ∞ »«
  258.      ¡¿¼ í«½ÑÑ »«½¡πε help-¿¡Σ«α¼áµ¿ε,  τѼ Ñ¼π »αÑñ«ßΓáó½Ñ¡« ΓѬßΓ«¼,
  259.      «Γ«íαáªáÑ¼δ¼ ó «¬¡Ñ.
  260.  
  261.           é »α«µÑßßÑ  óó«ñá  ñá¡¡δσ  ó  «¬¡«  π   »«½∞º«óáΓѽ∩   ¼«úπΓ
  262.      ó«º¡¿¬¡πΓ∞  αẽ¿τ¡δÑ  ó«»α«ßδ  «Γ¡«ß¿Γѽ∞¡«  ¬á¬  »αÑñ¡áº¡áτÑ¡¿∩
  263.      «¬¡á,  Γᬠ¿ ó¿ñá óσ«ñ¡δσ ñá¡¡δσ.  ä½∩ »«½πτÑ¡¿∩ «ΓóÑΓ«ó ¡á  ßó«¿
  264.      ó«»α«ßδ  »«½∞º«óáΓÑ½ε  ñ«ßΓáΓ«τ¡« ¡áªáΓ∞ ¡á ß»Ñµ¿á½∞¡« óδñѽѡ¡πε
  265.      help-¬½áó¿Φπ,  ¬«Γ«αá∩   ¿¡¿µ¿¿απÑΓ   «íαáΘÑ¡¿Ñ   ¬   ß»Ñµ¿á½∞¡«⌐
  266.      help-Σπ¡¬µ¿¿. öπ¡¬µ¿∩ data_entry »ÑαÑñáßΓ áñαÑß íπΣÑαᠡᬫ»½Ñ¡¿∩
  267.      ñá¡¡δσ  »«½∩,  τΓ«  ó»«ß½ÑñßΓó¿¿  ñáßΓ  ó«º¼«ª¡«ßΓ∞   ß»Ñµ¿á½∞¡«⌐
  268.      help-Σπ¡¬µ¿¿ óÑα¡πΓ∞ ΓѬπΘÑÑ º¡áτÑ¡¿Ñ ó »«½Ñ.
  269.  
  270.           ¥Γá «Γ½¿τ¿Γѽ∞¡á∩  τÑαΓá  Σπ¡¬µ¿¿  field_help  ¿ß»«½∞ºπÑΓß∩,
  271.      ¬«úñá ¿¼ÑÑΓß∩ ß»¿ß«¬ ó«º¼«ª¡δσ º¡áτÑ¡¿⌐,  ¿º ¬«Γ«αδσ »«½∞º«óáΓѽ∞
  272.      ñ«½ªÑ¡  «ßπΘÑßΓó½∩Γ∞  óδí«α,  ¡«  «Γ«íαáªÑ¡¿Ñ óßÑú« ß»¿ß¬á ó «¬¡Ñ
  273.      »«ßΓ«∩¡¡« ¡ÑµÑ½Ñß««íαạ«.  éδ ¼«ªÑΓÑ «Γ¬αδΓ∞ ÑΘÑ «ñ¡«  «¬¡«  ñ½∩
  274.  
  275.                              - 8 -
  276.      óδñáτ¿  help-¿¡Σ«α¼áµ¿¿ ß »«¼«Θ∞ε óáΦÑ⌐ ß»Ñµ¿á½∞¡«⌐ help-Σπ¡¬µ¿¿,
  277.      «Γ«íαếΓ∞  ó  ¡Ñ¼  óÑß∞  ß»¿ß«¬  ó«º¼«ª¡δσ  º¡áτÑ¡¿⌐   ¿   ºáΓѼ
  278.      ¿ß»«½∞º«óáΓ∞ Σπ¡¬µ¿ε get_selection (ß¼.  â½áóπ 6) ñ½∩ «íÑß»ÑτÑ¡¿∩
  279.      óδí«αá »«½∞º«óáΓѽѼ ¡πª¡«ú« Ñ¼π º¡áτÑ¡¿∩.  éδ ΓᬪѠ¼«ªÑΓÑ,  ¬á¬
  280.      φΓ«  ñѽáÑΓß∩  ó »α¿¼ÑαÑ,  ¬«Γ«αδ⌐ »αÑñßΓáó½Ñ¡ ó φΓ«⌐ ú½áóÑ ¡¿ªÑ,
  281.      ºá»¿ßδóáΓ∞ ΓѬπΘπε ñáΓπ ó íπΣÑαδ  ¡á¬«»½Ñ¡¿∩  ñá¡¡δσ  »«½Ñ⌐.  éá¼
  282.      »αÑñ«ßΓáó½Ñ¡á  ó«º¼«ª¡«ßΓ∞  «ßπΘÑßΓó½∩Γ∞  ºá»α«ßδ  ¬ íáºÑ ñá¡¡δσ.
  283.      ÄτÑó¿ñ¡«,  τΓ« »α¿ αáí«ΓÑ ß ºá»¿ß∩¼¿ Σá⌐½á "æ½πªáΘ¿⌐" íáºδ ñá¡¡δσ
  284.      óáΦá  help-Σπ¡¬µ¿∩  ¼«ªÑΓ  óδñáóáΓ∞  ß»¿ß«¬ ¡«¼Ñα«ó ß½πªáΘ¿σ ¿ ¿σ
  285.      ΣἿ½¿¿,  óδí¿αá∩ φΓπ ¿¡Σ«α¼áµ¿ε ¡Ñ»«ßαÑñßΓóÑ¡¡« ¿º ßἫú«  Σá⌐½á
  286.      "æ½πªáΘ¿⌐".
  287.  
  288.      int data_entry(WINDOW *wnd)
  289.  
  290.           ¥Γá Σπ¡¬µ¿∩   «íαáíáΓδóáÑΓ   óó«ñ¿¼δÑ   ó   Φáí½«¡   ñá¡¡δÑ.
  291.      Å«½∞º«óáΓѽ∞ ¼«ªÑΓ »α«ß¼«ΓαÑΓ∞ óÑß∞  Φáí½«¡  ß«  º¡áτÑ¡¿∩¼¿  óßÑσ
  292.      »«½Ñ⌐,   óδñáóá∩   ¡á   ñ¿ß»½Ñ⌐   ΓѬπΘ¿Ñ   º¡áτÑ¡¿∩   ñá¡¡δσ  ¿º
  293.      ß««ΓóÑΓßΓóπεΘ¿σ   íπΣÑα«ó   ¡á¬«»½Ñ¡¿∩    ñá¡¡δσ.    Å«½∞º«óáΓѽ∞
  294.      «ßπΘÑßΓó½∩ÑΓ  óó«ñ  ñá¡¡δσ  ó  »«½∩  ó Γ«⌐ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿,  ó
  295.      ¬«Γ«α«⌐  »«½∩  í뫨  πßΓá¡«ó½Ñ¡δ  ó  Φáí½«¡Ñ  ß  »«¼«Θ∞ε  Σπ¡¬µ¿¿
  296.      establish_field,  »α¿  φΓ«¼  »«º¿µ¿∩ αẼÑΘÑ¡¿∩ »«½∩ ó Φáí½«¡Ñ ó«
  297.      ó¡¿¼á¡¿Ñ ¡Ñ »α¿¡¿¼áÑΓß∩.
  298.  
  299.           Å«½Ñ, ¬«Γ«α«Ñ »αÑñ¡áº¡áτÑ¡« ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ñ½∩ óó«ñá ó ¡Ñú«
  300.      ñá¡¡δσ,    «Γ«íαáªáÑΓß∩   »«½∞º«óáΓÑ½ε   ß    πτÑΓ«¼   ßπ¼¼áα¡«ú«
  301.      »α«ßΓαá¡ßΓóá  »«ñ   óó«ñ¿¼δÑ   ñá¡¡δÑ,   ó¬½ετá∩   »π¡¬Γπᵿε,  ¿
  302.      óδñѽ∩ÑΓß∩  »«óδΦÑ¡¡«⌐  ∩ᬫßΓ∞ε  ó  ß««ΓóÑΓßΓó¿¿   ß«  º¡áτÑ¡¿Ñ¼
  303.      »áαá¼ÑΓαá ACCENT,  «»αÑñѽ∩εΘ¿¼ µóÑΓ «¬¡á. èπαß«α πßΓá¡áó½¿óáÑΓß∩
  304.      ó »Ñαó«⌐ »«º¿µ¿¿ »«½∩, ¿ Σπ¡¬µ¿∩ »ÑαÑσ«ñ¿Γ ó αѪ¿¼ «ª¿ñá¡¿∩ óó«ñá
  305.      ñá¡¡δσ. Å«½∞º«óáΓѽ∞ ¼«ªÑΓ ¡áτáΓ∞ óó«ñ ñá¡¡δσ ¿½¿ ó ΓѬπΘÑÑ »«½Ñ,
  306.      ¿½¿ πßΓá¡«ó¿Γ∞  ΓѬπΘ¿¼ ñαπú«Ñ  »«½Ñ,  ¿ß»«½∞ºπ∩  ¬½áó¿Φπ <ééÄä>,
  307.      ¬½áó¿Φπ Γáíπ½∩µ¿¿ <Æáí>  ¿½¿ ¬½áó¿Φ¿ π»αáó½Ñ¡¿∩ ¬παß«α«¼. è½áó¿Φ¿
  308.      <èï₧ù>,  <æΓαá¡¿µá  óóÑασ>  (<PgUp>),  <CΓαá¡¿µá  ó¡¿º> (<PgDn>),
  309.      <èÄì> (<End>), »ÑαѼÑΘÑ¡¿∩ ¬παß«αá ó »Ñαóπε »«º¿µ¿ε »Ñαó«⌐ ßΓ᫬¿
  310.      (<Home>)  ¿ Σπ¡¬µ¿«¡á½∞¡δÑ  ¬½áó¿Φ¿ (ß <Åö1>  ñ« <Åö10>, ¿ß¬½ετá∩
  311.      ¬½áó¿Φπ,  ºá ¬«Γ«α«⌐ ºá¬αÑ»½Ñ¡ ó맮ó  help-Σπ¡¬µ¿¿) »αÑñ¡áº¡áτÑ¡δ
  312.      ñ½∩  ºáóÑαΦÑ¡¿∩  »α«µÑßßá  óó«ñá  ñá¡¡δσ  ¿  ó«ºóαáΓá  ¿º Σπ¡¬µ¿¿
  313.  
  314.                              - 9 -
  315.      data_entry,  ¬ ¬«Γ«α«⌐ »ÑαÑñ φΓ¿¼ í佫 «ßπΘÑßΓó½Ñ¡«  «íαáΘÑ¡¿Ñ, ó
  316.      Γ«τ¬π ó맮óá.
  317.  
  318.           Å«ß½Ñ óó«ñá »«½∞º«óáΓѽѼ »«ß½Ññ¡Ñú« ß¿¼ó«½á »«½∩ »α«¿ßσ«ñ¿Γ
  319.      óδñѽѡ¿Ñ  »«óδΦÑ¡¡«⌐  ∩ᬫßΓ∞ε  ß½ÑñπεΘÑú« »«½∩ ¿  »ÑαѼÑΘÑ¡¿Ñ ¬
  320.      ¡Ñ¼π ¬παß«αá.  ÅÑαÑñ φΓ¿¼  Σπ¡¬µ¿∩ data_entry  «íαáΘáÑΓß∩ ¬ ßó«¿¼
  321.      ß«íßΓóÑ¡¡δ¼ Σπ¡¬µ¿∩¼ ¬«¡Γα«½∩ ñá¡¡δσ ¿ (Ñß½¿ óδ  πßΓᡫ󿽿 ÑΘÑ ¿
  322.      ß󫿠߻ѵ¿á½∞¡δÑ Σπ¡¬µ¿¿ ¬«¡Γα«½∩ ñá¡¡δσ)  ¬ ß»Ñµ¿á½∞¡δ¼ Σπ¡¬µ¿∩¼
  323.      ¬«¡Γα«½∩.  éßÑ φΓ¿  Σπ¡¬µ¿¿  ñ«½ª¡δ  ó  αѺπ½∞ΓáΓÑ  αáí«Γδ óδñáΓ∞
  324.      º¡áτÑ¡¿Ñ Äè,  ó »α«Γ¿ó¡«¼ ß½πτáÑ Σπ¡¬µ¿∩ data_entry ¡Ñ »ÑαѼÑßΓ¿Γ
  325.      ¬παß«α ¬ ß½ÑñπεΘÑ¼π »«½ε.
  326.  
  327.           àß½¿ »«½∞º«óáΓѽ∞ ¡áªá½ ¬½áó¿Φπ,  ºá ¬«Γ«α«⌐ ºá¬αÑ»½Ñ¡ ó맮ó
  328.      help-Σπ¡¬µ¿¿, Γ« íπñÑΓ «ßπΘÑßΓó½Ñ¡ ó맮ó ß»Ñµ¿á½∞¡«⌐ help-Σπ¡¬µ¿¿
  329.      (Ñß½¿ «¡á óἿ  «»αÑñѽѡá),  »αÑñ¡áº¡áτÑ¡¡«⌐ ñ½∩  ΓѬπΘÑú« »«½∩,
  330.      »πΓѼ »ÑαÑñáτ¿  Ñ⌐  áñαÑßá  íπΣÑαá  ¡á¬«»½Ñ¡¿∩  ñá¡¡δσ »«½∩. àß½¿
  331.      help-Σπ¡¬µ¿∩ óἿ ¡Ñ ß«ºñá¡á  ¿ help-«¬¡« "»α¿ó∩ºá¡«"  ¬ »«½ε, Γ«
  332.      help-Σπ¡¬µ¿¿,  «»¿ßá¡¡δÑ  ó â½áóÑ 7,  «íÑß»ÑτáΓ  óδñáτπ  ¡á φ¬αá¡
  333.      ñ¿ß»½Ñ∩  help-«¬¡á.   àß½¿  ¡¿  help-«¬¡«,   ¡¿  help-Σπ¡¬µ¿∩  ¡Ñ
  334.      «»αÑñѽѡδ,  Γ« ¡áªáΓ¿Ñ »«½∞º«óáΓѽѼ help-¬½áó¿Φ¿ ¡Ñ »α¿óÑñÑΓ ¡¿
  335.      ¬  ¬á¬«¼π  αѺπ½∞ΓáΓπ,   Ñß½¿,   ¬«¡Ñτ¡«,   »α«úαἼᠠ¿ß»«½∞ºπÑΓ
  336.      help-Σπ¡¬µ¿¿  ¡Ñºáó¿ß¿¼«  «Γ  ¬«¡ΓѬßΓá óó«ñ¿¼δσ  ó  «¬¡« ñá¡¡δσ.
  337.      Å«ß½Ñ Γ«ú«,  ¬á¬ »α«¿ßσ«ñ¿Γ ó«ºóαáΓ ¿º Σπ¡¬µ¿¿ data_entry ó Γ«τ¬π
  338.      ÑÑ  ó맮óá,  óßÑ  íπΣÑαδ »«½Ñ⌐ ß«ñÑαªáΓ º¡áτÑ¡¿∩  ñá¡¡δσ, ¬«Γ«αδÑ
  339.      óóѽ  »«½∞º«óáΓѽ∞.  ¥Γá  Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ  π»αáó½Ñ¡¿Ñ  ó Γ«τ¬π
  340.      ó맮óá  »α¿  ¡áªáΓ¿¿  ¬½áó¿Φ,  «º¡áτáεΘ¿σ  ¬«¡Ñµ  óó«ñá  ñá¡¡δσ ó
  341.      Φáí½«¡.   Æá¬«ó묨  ∩ó½∩εΓß∩  ¬½áó¿Φá  <èï₧ù>,  ¬½áó¿Φ¿  ½¿ßΓá¡¿∩
  342.      ßΓαá¡¿µ (<PgUp>, <PgDn>) ¿½¿ Σπ¡¬µ¿«¡á½∞¡δÑ ¬½áó¿Φ¿, »α¿ó«ñ∩Θ¿Ñ ¬
  343.      ºáóÑαΦÑ¡¿ε   »α«µÑßßá   óó«ñá   ñá¡¡δσ.   Åਪ½áñ¡«Ñ  »α«úαá¼¼¡«Ñ
  344.      «íÑß»ÑτÑ¡¿Ñ á¡á½¿º¿απÑΓ º¡áτÑ¡¿Ñ  »«ß½Ññ¡Ñ⌐ ¡áªáΓ«⌐ »«½∞º«óáΓѽѼ
  345.      ¬½áó¿Φ¿ ñ½∩ «»αÑñѽѡ¿∩ Ñú«  ¡á¼ÑαÑ¡¿⌐.  ìáªáΓ¿Ñ  ¬½áó¿Φ¿ <èï₧ù>,
  346.      ¡á»α¿¼Ñα,  ¼«ªÑΓ «º¡áτáΓ∞ "êú¡«α¿απ⌐ óßÑ ó¡ÑßÑ¡¡δÑ ¼¡«⌐ ¿º¼Ñ¡Ñ¡¿∩
  347.      ¿ óÑα¡¿ ¼Ñ¡∩ ¬ »αÑñδñπΘѼπ ß«ñÑαªá¡¿ε Φáí½«¡á". è½áó¿Φ¿ <æΓαá¡¿µá
  348.      óóÑασ>   (<PgUp>)   ¿  <æΓαá¡¿µá  ó¡¿º>  (<PgDn>)  «º¡áτáεΓ  (¬á¬
  349.      «»αÑñѽѡ« ó keys.h),  τΓ« »«½∞º«óáΓѽ∞ σ«τÑΓ »ÑαÑ⌐Γ¿ ¬ ß½ÑñπεΘÑ⌐
  350.      ¿½¿ »αÑñδñπΘÑ⌐ ºá»¿ß¿  íáºδ ñá¡¡δσ.  è«úñá »«½∞º«óáΓѽ∞ ºáóÑαΦáÑΓ
  351.      óó«ñ  ñá¡¡δσ,  Γ«  ¬«ñ  ºáóÑαΦÑ¡¿∩  »α«µÑßßá  óó«ñá  »ÑαÑñáÑΓß∩ ó
  352.  
  353.                              - 10 -
  354.      »α«úαá¼¼π,   óδºóáóΦπε   Σπ¡¬µ¿ε   data_entry,   ñ½∩  ñá½∞¡Ñ⌐ΦÑú«
  355.      ¿ß»«½∞º«óá¡¿∩.
  356.  
  357.  
  358.                       êßσ«ñ¡δ⌐ ΓѬßΓ: entry.c
  359.      -----------------------------------------------------------------
  360.  
  361.           ï¿ßΓ¿¡ú 8.1 »αÑñßΓáó½∩ÑΓ ß«í«⌐ ¿ßσ«ñ¡δ⌐ ΓѬßΓ Σá⌐½á entry.c,
  362.      ¬«Γ«αδ⌐ ß«ñÑαª¿Γ í¿í½¿«ΓÑτ¡δÑ Σπ¡¬µ¿¿ »«ññÑ᪬¿  «¬«¡¡«ú« Φáí½«¡á
  363.      óó«ñá ñá¡¡δσ.
  364.  
  365.  
  366.      ï¿ßΓ¿¡ú 8.1: entry.c
  367.  
  368.  
  369.      /*----------------entry.c----------------*/
  370.  
  371.      #include <stdio.h>
  372.      #include <ctype.h>
  373.      #include <stdlib.h>
  374.      #include <alloc.h>
  375.      #include <mem.h>
  376.      #include <string.h>
  377.      #include "twindow.h"
  378.      #include "keys.h"
  379.  
  380.      #define FIELDCHAR '_'
  381.      int insert_mode = FALSE;      /* αѪ¿¼ óßΓáó¬¿, éèï/é¢èï */
  382.      extern int helpkey;
  383.  
  384.  
  385.      /*----------------½«¬á½∞¡δÑ »α«Γ«Γ¿»δ----------------*/
  386.      void addfield(WINDOW *wnd, FIELD *fld);
  387.      void disp_field(WINDOW *wnd, char *bf, char *msk);
  388.      void data_value(WINDOW *wnd, FIELD *fld);
  389.      void insert_status(void);
  390.      int read_field(WINDOW *wnd, FIELD *fld);
  391.  
  392.                              - 11 -
  393.      void right_justify(char *s);
  394.      void right_justify_zero_fill(char *s);
  395.      int validate_date(char *s);
  396.      int endstroke(int c);
  397.      int spaces(char *c);
  398.  
  399.      /*----------------¿¡¿µ¿á½¿ºáµ¿∩ Φáí½«¡á---------------*/
  400.      void init_template(WINDOW *wnd)
  401.      {
  402.          FIELD *fld, *fl;
  403.  
  404.          fld = FHEAD;
  405.          while (fld) {
  406.              fl = fld->fnxt;
  407.              free(fld);
  408.              fld = fl;
  409.          }
  410.          FHEAD = NULL;
  411.       }
  412.      /*---------------πßΓá¡«ó¬á »«½Ñ⌐ Φáí½«¡á--------------*/
  413.      FIELD *establish_field(wnd, cl, rw, msk, bf, ty)
  414.      WINDOW *wnd;
  415.      int rw;
  416.      int cl;
  417.      char *msk;
  418.      char *bf;
  419.      int ty;
  420.      {
  421.          FIELD *fld;
  422.  
  423.          if ( (fld = malloc(sizeof(FIELD))) == NULL)
  424.              return NULL;
  425.          fld->fmask = msk;
  426.          fld->frow = rw;
  427.          fld->fcol = cl;
  428.          fld->fbuff = bf;
  429.          fld->ftype = ty;
  430.  
  431.                              - 12 -
  432.          fld->fprot = 0;
  433.          fld->fnxt = fld->fprv = NULL;
  434.          fld->fvalid  =NULL;
  435.          fld->fhelp = NULL;
  436.          fld->fhwin = NULL;
  437.          fld->flx = fld->fly = 0;
  438.          addfield(wnd, fld);
  439.          return fld;
  440.      }
  441.  
  442.      /*--------ñ«íáó½Ñ¡¿Ñ »«½∩ ó ¬«¡Ñµ ß»¿ß¬á-----------*/
  443.      static void addfield(WINDOW *wnd, FIELD *fld)
  444.      {
  445.          if (FTAIL)  {
  446.              fld->fprv = FTAIL;
  447.              FTAIL->fnxt = fld;
  448.          }
  449.          FTAIL = fld;
  450.          if (!FHEAD)
  451.              FHEAD = fld;
  452.      }
  453.  
  454.      /*---------«Γ«íαáªÑ¡¿Ñ ñá¡¡δσ ó »«½∩σ----------*/
  455.      static void disp_field(WINDOW *wnd, char *bf, char *msk)
  456.      {
  457.          while (*msk)    {
  458.              wputchar(wnd, *msk != FIELDCHAR ? *msk : *bf++);
  459.              msk++;
  460.          }
  461.      }
  462.  
  463.      /*--------«Γ«íαáªÑ¡¿Ñ º¡áτÑ¡¿⌐ ñá¡¡δσ ó »«½∩σ-----------*/
  464.      static void data_value(WINDOW *wnd, FIELD *fld)
  465.      {
  466.          wcursor(wnd, fld->fcol, fld->frow);
  467.          disp_field(wnd, fld->fbuff, fld->fmask);
  468.      }
  469.  
  470.                              - 13 -
  471.  
  472.      /*----------«Γ«íαáªÑ¡¿Ñ óßÑσ »«½Ñ⌐ ó «¬¡Ñ---------------*/
  473.      void field_tally(WINDOW *wnd)
  474.      {
  475.          FIELD *fld;
  476.  
  477.          fld = FHEAD;
  478.          while (fld != NULL) {
  479.              data_value(wnd, fld);
  480.              fld = fld->fnxt;
  481.          }
  482.      }
  483.  
  484.      /*-----------πßΓá¡«ó¬á help-«¬«¡ ñ½∩ »«½Ñ⌐--------------*/
  485.      void field_window(FIELD *fld, char *hwin, int x, int y)
  486.      {
  487.          fld->fhwin=hwin;
  488.          fld->flx = x;
  489.          fld->fly = y;
  490.      }
  491.  
  492.      /*-----------«τ¿ßΓ¬á óßÑσ »«½Ñ⌐ Φáí½«¡á--------------*/
  493.      void clear_template(WINDOW *wnd)
  494.      {
  495.          FIELD *fld;
  496.          char *bf, *msk;
  497.  
  498.          fld = FHEAD;
  499.          while (fld != NULL) {
  500.              bf = fld->fbuff;
  501.              msk = fld->fmask;
  502.              while (*msk)    {
  503.                  if (*msk == FIELDCHAR)
  504.                      *bf++ = ' ';
  505.                  msk++;
  506.              }
  507.              fld = fld->fnxt;
  508.  
  509.                              - 14 -
  510.          }
  511.          field_tally(wnd);
  512.      }
  513.  
  514.      /*---------πßΓá¡«ó¬á αѪ¿¼á óßΓáó¬¿/ºá¼Ñ¡δ ¬παß«αá------------*/
  515.      static void insert_status()
  516.      {
  517.          set_cursor_type(insert_mode ? 0x0106 : 0x0607);
  518.      }
  519.  
  520.      /*------------τΓÑ¡¿Ñ »«½∩ ß ¬½áó¿áΓπαδ--------------*/
  521.      static int read_field(WINDOW *wnd, FIELD *fld)
  522.      {
  523.          char *mask = fld->fmask, *buff = fld->fbuff;
  524.          int done = FALSE, c, column;
  525.  
  526.          column = fld->fcol;
  527.          while (*mask != FIELDCHAR)  {
  528.              column++;
  529.              mask++;
  530.          }
  531.          while (TRUE)    {
  532.              wcursor(wnd, column, fld->frow);
  533.              c = get_char();
  534.              if (fld->ftype == 'A')
  535.                  c = toupper(c);
  536.              clear_message();
  537.              switch (c)  {
  538.                  case '\b':
  539.                  case BS:
  540.                      if (buff == fld->fbuff) {
  541.                           done = c == BS;
  542.                           break;
  543.                      }
  544.                      --buff;
  545.                      do  {
  546.                          --mask;
  547.  
  548.                              - 15 -
  549.                          --column;
  550.                      } while (*mask != FIELDCHAR);
  551.                      if (c == BS)
  552.                          break;
  553.                  case DEL:
  554.                      movmem(buff+1, buff, strlen(buff));
  555.                      *(buff+strlen(buff)) = ' ';
  556.                      wcursor(wnd, column, fld->frow);
  557.                      disp_field(wnd, buff, mask);
  558.                      break;
  559.                  case FWD:
  560.                      do  {
  561.                          column++;
  562.                          mask++;
  563.                      } while (*mask && *mask != FIELDCHAR);
  564.                      buff++;
  565.                      break;
  566.                  case INS:
  567.                      insert_mode ^= TRUE;
  568.                      insert_status();
  569.                      break;
  570.                  case '.':
  571.                      if (fld->ftype == 'C')   {
  572.                          if (*mask++ && *buff == ' ')     {
  573.                              *buff++ = '0';
  574.                              if (*mask++ && *buff == ' ')
  575.                                  *buff++ = '0';
  576.                             }
  577.                             right_justify(fld->fbuff);
  578.                             wcursor(wnd, fld->fcol, fld->frow);
  579.                             disp_field(wnd, fld->fbuff, fld->fmask);
  580.                             column = fld->fcol+strlen(fld->fmask)-2;
  581.                             mask = fld->fmask+strlen(fld->fmask)-2;
  582.                             buff = fld->fbuff+strlen(fld->fbuff)-2;
  583.                             break;
  584.                         }
  585.                     default:
  586.  
  587.                              - 16 -
  588.                         if (endstroke(c))   {
  589.                             done = TRUE;
  590.                             break;
  591.                         }
  592.                         if (toupper(fld->ftype)!='A'&&!isdigit(c))   {
  593.                             error_message("Numbers only");
  594.                             break;
  595.                         }
  596.                         if (insert_mode)    {
  597.                             movmem(buff, buff+1, strlen(buff)-1);
  598.                             disp_field(wnd, buff, mask);
  599.                             wcursor(wnd, column, fld->frow);
  600.                         }
  601.                         *buff++ = c;
  602.                         wputchar(wnd, c);
  603.                         do  {
  604.                             column++;
  605.                             mask++;
  606.                         } while (*mask && *mask != FIELDCHAR);
  607.                         if (! *mask)
  608.                             c = FWD;
  609.                         break;
  610.              }
  611.              if (!*mask)
  612.                  done = TRUE;
  613.              if (done)   {
  614.                   if (fld->ftype == 'D' &&
  615.                           c != ESC &&
  616.                               validate_date(fld->fbuff) !=OK)
  617.                       return ERROR;
  618.                   break;
  619.              }
  620.          }
  621.          if (c != ESC && toupper(fld->ftype) != 'A')  {
  622.              if (fld->ftype == 'C')  {
  623.                  if (*mask++ && *buff == ' ')    {
  624.                      *buff++ = '0';
  625.  
  626.                              - 17 -
  627.                      if (*mask++ && *buff == ' ')
  628.                          *buff++ = '0';
  629.                 }
  630.             }
  631.             if (fld->ftype == 'Z' || fld->ftype == 'D')
  632.                 right_justify_zero_fill(fld->fbuff);
  633.             else
  634.                 right_justify(fld->fbuff);
  635.             wcursor(wnd, fld->fcol, fld->frow);
  636.             disp_field(wnd, fld->fbuff, fld->fmask);
  637.          }
  638.          return c;
  639.      }
  640.  
  641.      /*-------»α«óÑα¬á º¡áτÑ¡¿∩ ß ¡á ¬«ñ ¬½áó¿Φ¿ ºáóÑαΦÑ¡¿∩------*/
  642.      static int endstroke(int c)
  643.      {
  644.          switch (c)  {
  645.              case '\r':
  646.              case '\n':
  647.              case '\t':
  648.              case ESC:
  649.              case F1:
  650.              case F2:
  651.              case F3:
  652.              case F4:
  653.              case F5:
  654.              case F6:
  655.              case F7:
  656.              case F8:
  657.              case F9:
  658.              case F10:
  659.              case PGUP:
  660.              case PGDN:
  661.              case HOME:
  662.              case END:
  663.              case UP:
  664.  
  665.                              - 18 -
  666.              case DN:
  667.                  return TRUE;
  668.              default:
  669.                  return FALSE;
  670.         }
  671.      }
  672.  
  673.      /*------------óδαáó¡¿óá¡¿Ñ ó»αáó«, ºá»«½¡Ñ¡¿Ñ »α«íѽἿ------*/
  674.      static void right_justify(char *s)
  675.      {
  676.         int len;
  677.  
  678.         len = strlen(s);
  679.         while (*s == ' ' || *s == '0' && len)  {
  680.             len--;
  681.             *s++ = ' ';
  682.         }
  683.         if (len)
  684.             while (*(s+(len-1)) == ' ') {
  685.                 movmem (s, s+1, len-1);
  686.                 *s = ' ';
  687.            }
  688.      }
  689.  
  690.      /*-----------óδαáó¡¿óá¡¿Ñ ó»αáó«, ºá»«½¡Ñ¡¿Ñ ¡π½∩¼¿----------*/
  691.      static void right_justify_zero_fill(char *s)
  692.      {
  693.          int len;
  694.  
  695.          if (spaces(s))
  696.              return;
  697.          len = strlen(s);
  698.          while (*(s + len - 1) == ' ')   {
  699.              movmem(s, s + 1, len-1);
  700.              *s = '0';
  701.          }
  702.      }
  703.  
  704.                              - 19 -
  705.  
  706.      /*---------------¬«¡Γα«½∞ »α«íѽ«ó-------------*/
  707.      int spaces(char *c)
  708.      {
  709.         while (*c == ' ')
  710.             c++;
  711.         return !*c;
  712.      }
  713.  
  714.      /*----------------»α«óÑα¬á ñáΓδ---------------------*/
  715.      static int validate_date(char *s)
  716.      {
  717.          static int days [] =
  718.              { 31,28,31,30,31,30,31,31,30,31,30,31 };
  719.          char date [7];
  720.          int mo;
  721.  
  722.          strcpy(date, s);
  723.          if (spaces(date))
  724.              return OK;
  725.          days[1] = (atoi(date+4)%4) ? 28 : 29;
  726.          *(date + 4) = '\0';
  727.          mo = atoi(date+2);
  728.          *(date+2) = '\0';
  729.          if (mo && mo<13 && atoi(date) && atoi(date)<=days[mo-1])
  730.              return OK;
  731.          error_message("Invalid date");
  732.          return ERROR;
  733.      }
  734.  
  735.      /*---------Åα«µÑßß óó«ñá ñá¡¡δσ ó Φáí½«¡ φ¬αá¡á-----------*/
  736.      int data_entry(WINDOW *wnd)
  737.      {
  738.          FIELD *fld;
  739.          int exitcode, isvalid, done=FALSE, oldhelpkey=helpkey;
  740.          field_tally(wnd);
  741.          fld = FHEAD;
  742.  
  743.                              - 20 -
  744.          /*--¡á¬«»½Ñ¡¿Ñ ñá¡¡δσ, »«ßΓπ»áεΘ¿σ ß ¬½áó¿áΓπαδ ¡á φ¬αá¡Ñ --*/
  745.          while (fld != NULL && done == FALSE)    {
  746.              set_help(fld->fhwin, fld->flx, fld->fly);
  747.              helpkey = (fld->fhelp) ? 0 : oldhelpkey;
  748.              wcursor(wnd, fld->fcol, fld->frow);
  749.              if (fld->fprot ==FALSE)     {
  750.                  reverse_video(wnd);
  751.                  data_value(wnd, fld);
  752.                  wcursor(wnd, fld->fcol, fld->frow);
  753.                  exitcode = read_field(wnd, fld);
  754.                  isvalid = (exitcode != ESC && fld->fvalid) ?
  755.                              (*(fld->fvalid))(fld->fbuff) : OK;
  756.                }
  757.                else    {
  758.                    exitcode = FWD;
  759.                    isvalid = OK;
  760.                }
  761.                if (isvalid == OK)   {
  762.                    normal_vileo(wnd);
  763.                    data_value(wnd, fld);
  764.                    switch (exitcode)   {     /* »ÑαÑñá¡« αÑñá¬Γ«απ */
  765.                         case F1:    if (fld->fhelp) {
  766.                                        (*(fld->fhelp))(fld->fbuff);
  767.                                        data_value(wnd, fld);
  768.                                    }
  769.                                    break;
  770.                        case DN:
  771.                        case '\r':
  772.                        case '\t':
  773.                        case FWD:   fld = fld->fnxt;
  774.                                    if (fld == NULL)
  775.                                        fld = FHEAD;
  776.                                    break;
  777.                        case UP:
  778.                        case BS:    fld = fld->fprv;
  779.                                    if (fld == NULL)
  780.                                        fld = FTAIL;
  781.  
  782.                              - 21 -
  783.                                    break;
  784.                        default:    done = endstroke(exitcode);
  785.                                    break;
  786.                   }
  787.               }
  788.           }
  789.           helpkey = oldhelpkey;
  790.           return (exitcode);
  791.      }
  792.      /*-------- «Γ«íαáªÑ¡¿Ñ »α¿ú½áΦÑ¡¿∩ ¬ óó«ñπ---------*/
  793.      void wprompt(WINDOW *wnd, int x, int y, char *s)
  794.      {
  795.         wcursor(wnd, x, y);
  796.         wprintf(wnd, s);
  797.      }
  798.  
  799.  
  800.                   Ä»¿ßá¡¿Ñ »α«úαá¼¼δ: entry.c
  801.      -----------------------------------------------------------------
  802.  
  803.           îá¬α««»αÑñѽѡ¿Ñ FIELDCHAR »α«úαá¼¼δ  entry.c ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ
  804.      ß»Ñµ¿á½∞¡δÑ  ß¿¼ó«½δ,  ¿ß»«½∞ºπѼδÑ  ó  ß¿¼ó«½∞¡«⌐ ¼á߬Ѡ»«½∩ »α¿
  805.      «»αÑñѽѡ¿¿ íá⌐Γ«ó ñá¡¡δσ.  Å« ßπΓ¿  ñѽá,  ¿ñÑ¡Γ¿Σ¿µ¿α«óá¡¡δÑ  ß
  806.      »«¼«Θ∞ε  FIELDCHAR ß¿¼ó«½δ ¡Ñ ∩ó½∩εΓß∩ ß¿¼ó«½á¼¿ ó ß¼δ߽Ѡñá¡¡δσ,
  807.      Γᬠ¬á¬ ¿ß»«½∞ºπεΓß∩  ó  ¼á߬Ñ.  é  ¬áτÑßΓóÑ  º¡áτÑ¡¿∩  FIELDCHAR
  808.      óδßΓπ»áÑΓ   ß¿¼ó«½  ¡¿ª¡Ñú«  »«ñτÑનóá¡¿∩.  éδ  ¼«ªÑΓÑ  ¿º¼Ñ¡¿Γ∞
  809.      «»αÑñѽѡ¿Ñ FIELDCHAR, ¿ß»«½∞ºπ∩ ñαπú¿Ñ ß¿¼ó«½δ.
  810.  
  811.           Åα¿ó∩º¬á »«½Ñ⌐  ¬  «¬¡á¼  «ßπΘÑßΓó½∩ÑΓß∩  ß »«¼«Θ∞ε ñó«⌐¡«ú«
  812.      ßó∩º¡«ú«  ß»¿ß¬á.  æ»¿ß«¬ ¡áτ¿¡áÑΓß∩ ¿  ºá¬á¡τ¿óáÑΓß∩ ó ßΓαπ¬ΓπαÑ
  813.      WINDOW ñ½∩  »«½∩.  èáªñ«Ñ »«½Ñ »αÑñßΓáó½Ñ¡« »«ßαÑñßΓó«¼ ßΓαπ¬Γπαδ
  814.      FIELD,   ¬«Γ«αá∩  αẼÑΘáÑΓß∩   ó  »á¼∩Γ¿   »α¿  πßΓá¡«ó¬Ñ  »«½∩.
  815.  
  816.           öπ¡¬µ¿∩ init_template ¿ß»«½∞ºπÑΓß∩  ñ½∩ ¿¡¿µ¿á½¿ºáµ¿¿ «¬¡á ß
  817.      Φáí½«¡«¼ óó«ñá ñá¡¡δσ.  Ä¡á óδ»«½¡∩ÑΓ Γαáßß¿α«ó¬π ßó∩º¡«ú« ß»¿ß¬á
  818.      FIELD  ¿   «ßó«í«ªñáÑΓ  ¡Ñ¬«Γ«αδÑ  αẼÑΘÑ¡¡δÑ   αá¡ÑÑ  ó  »á¼∩Γ¿
  819.      ßΓαπ¬Γπαδ FIELD.
  820.  
  821.                              - 22 -
  822.  
  823.           öπ¡¬µ¿∩ establish_field αẼÑΘáÑΓ  ó »á¼∩Γ¿ ¿ ¿¡¿µ¿á½¿º¿απÑΓ
  824.      íπΣÑα FIELD, ¿ß»«½∞ºπ∩ »ÑαÑñáóáѼδÑ Ñ⌐ »α¿ «íαáΘÑ¡¿¿ º¡áτÑ¡¿∩ ¿½¿
  825.      »α¿¡¿¼á∩  º¡áτÑ¡¿∩  »ÑαÑñáóáѼδσ »ÑαѼѡ¡δσ »«  π¼«½τá¡¿ε. îá߬á,
  826.      »«º¿µ¿∩  αẼÑΘÑ¡¿∩  »«½∩,   áñαÑß  íπΣÑαá  ¿  Γ¿»   ñá¡¡δσ  »«½∩
  827.      »ÑαÑñáεΓß∩ Σπ¡¬µ¿¿ »α¿ «íαáΘÑ¡¿¿ ¬ ¡Ñ⌐. ÄτÑαÑñ¡á∩ ßΓαπ¬Γπαá FIELD
  828.      ñ«íáó½∩ÑΓß∩  ó  ¬«¡Ñµ  ß««ΓóÑΓßΓóπεΘÑú«  ßó∩º¡«ú«  ß»¿ß¬á  FIELD,
  829.      ß»Ñµ¿Σ¿µ¿α«óá¡¡«ú« WINDOW. ô¬áºáΓѽ∞ ¡á «τÑαÑñ¡πε ßΓαπ¬Γπαπ FIELD
  830.      ó«ºóαáΘáÑΓß∩   ó  Γ«τ¬π  ó맮óá  Σπ¡¬µ¿¿.
  831.  
  832.           öπ¡¬µ¿∩ addfield óδºδóáÑΓß∩ ñ½∩ ñ«íáó½Ñ¡¿∩ ßΓαπ¬Γπαδ FIELD ¬
  833.      ßó∩º¡«¼π    ß»¿ß¬π,    ß»Ñµ¿Σ¿µ¿α«óá¡¡«¼π   WINDOW.
  834.  
  835.           öπ¡¬µ¿∩ disp_field ¿ß»«½∞ºπÑΓß∩ ñ½∩ óδó«ñá  º¡áτÑ¡¿⌐ ñá¡¡δσ,
  836.      óóÑñÑ¡¡δσ  ó  »«½∩,  ¿º  íπΣÑαá  ¡á φ¬αá¡ ñ¿ß»½Ñ∩.  îá߬á ñá¡¡δσ,
  837.      »ÑαÑñáóáѼá∩  »α¿   «íαáΘÑ¡¿¿   ¬   Σπ¡¬µ¿¿,   ¿ß»«½∞ºπÑΓß∩   »α¿
  838.      «Γ«íαáªÑ¡¿¿   ß«ñÑন¼«ú«  »«½∩.  ÄíαáΘÑ¡¿Ñ  ¬  Σπ¡¬µ¿¿  ß«ñÑনΓ
  839.      WINDOW, π¬áºáΓѽ∞ íπΣÑαá »«½∩ ¿ π¬áºáΓѽ∞ ¼á߬¿. Å«ñαáºπ¼ÑóáÑΓß∩,
  840.      τΓ«  ¬παß«α  ó  «¬¡Ñ  óßÑúñá  πßΓá¡áó½¿óáÑΓß∩  ¡á  »Ñαóπε »«º¿µ¿ε
  841.      »Ñαó«ú« »«½∩ «¬¡á.  æ¿¼ó«½δ, σαá¡∩Θ¿Ñß∩ ó íπΣÑαÑ, «Γ«íαáªáεΓß∩ ¡á
  842.      φ¬αá¡Ñ  ó¼ÑßΓÑ ß ß¿¼ó«½á¼¿ »π¡¬Γπᵿ¿,  ß«ßΓáó½∩εΘ¿¼¿ ¼áß¬π »«½∩.
  843.      öπ¡¬µ¿∩  data_value  »αÑñ¡áº¡áτáÑΓß∩  ñ½∩  «Γ«íαáªÑ¡¿∩   ΓѬπΘÑú«
  844.      º¡áτÑ¡¿∩  »«½∩  ó  «¬¡Ñ.  öπ¡¬µ¿∩  πßΓá¡áó½¿óáÑΓ  ¬παß«α ó «¬¡Ñ ó
  845.      »«º¿µ¿ε »Ñαó«ú«  ß¿¼ó«½á  »«½∩  ¿  óδºδóáÑΓ  Σπ¡¬µ¿ε  disp_field,
  846.      »ÑαÑñáóá∩ Ñ⌐ áñαÑß WINDOW ¿ áñαÑßá íπΣÑαá »«½∩ ¿ ¼á߬¿.
  847.  
  848.           öπ¡¬µ¿∩ field_fally   ¿ß»«½∞ºπÑΓß∩   ñ½∩   óδñáτ¿  ¡á  φ¬αá¡
  849.      º¡áτÑ¡¿⌐  óßÑσ   »«½Ñ⌐   Φáí½«¡á.   Ä¡á   «ßπΘÑßΓó½∩ÑΓ   »α«ß¼«Γα
  850.      "ßóÑασπ-󡿺"  ßó∩º¡«ú«  ß»¿ß¬á  FIELD ¿ «ßπΘÑßΓó½∩ÑΓ «íαáΘÑ¡¿Ñ ¬
  851.      Σπ¡¬µ¿¿ data_value ñ½∩ ¬áªñ«ú« »«½∩ Φáí½«¡á.
  852.  
  853.           öπ¡¬µ¿∩  field_window  »αÑñ¡áº¡áτѡᠠñ½∩  πßΓᡫ󬿠«¬«¡¡«⌐
  854.      help-¿¡Σ«α¼áµ¿¿ ñ½∩ »«½∩.  ô¬áºá¡¡δÑ »α¿ «íαáΘÑ¡¿¿  ¬ Σπ¡¬µ¿¿ ¿¼∩
  855.      help-¿¡Σ«α¼áµ¿¿ ¿ ¬««αñ¿¡áΓδ  φ¬αá¡á  ñ½∩ ÑÑ  óδñáτ¿ ¬«»¿απεΓß∩ ó
  856.      ß»Ñµ¿Σ¿µ¿α«óá¡¡πε »α¿ ó맮óÑ Σπ¡¬µ¿¿ ßΓαπ¬Γπαπ FIELD.
  857.  
  858.           öπ¡¬µ¿∩  clear_template  «íαáíáΓδóáÑΓ  "ßóÑασπ-󡿺" ßó∩º¡«⌐
  859.  
  860.                              - 23 -
  861.      ß»¿ß«¬  FIELD ñ½∩  ß»Ñµ¿Σ¿µ¿α«óá¡¡«ú«  «¬¡á.  öπ¡¬µ¿∩ »αÑ«íαáºπÑΓ
  862.      íπΣÑα  ¬áªñ«ú«  »«½∩  Φáí½«¡á  ó  »πßΓπε  ßΓ᫬π, ºá¬á¡τ¿óáεΘπεß∩
  863.      ¡π½Ñóδ¼   ß¿¼ó«½«¼,   ¿ß»«½∞ºπ∩   ¼áß¬π   »«½∩   ñ½∩  «»αÑñѽѡ¿∩
  864.      πßΓá¡«ó½Ñ¡¡«⌐ »α¿ «»¿ßá¡¿¿ »«½∩ ñ½¿¡δ.  è«úñá óßÑ »«½∩ «íαáí«Γá¡δ
  865.      Γᬿ¼  «íαẫ¼  (»«τ¿ΘÑ¡δ),  Σπ¡¬µ¿∩  «íαáΘáÑΓß∩  ¬  field_fally.
  866.  
  867.           Åα«úαá¼¼á óó«ñá ñá¡¡δσ αáí«ΓáÑΓ ó αѪ¿¼áσ óßΓá󬿠 ¿  ºá¼Ñ¡δ
  868.      ß¿¼ó«½«ó.  è½áó¿Φá  <鿯>  (<Ins>)  ¿ß»«½∞ºπÑΓß∩ ñ½∩ »ÑαѬ½ετÑ¡¿∩
  869.      αѪ¿¼«ó αáí«Γδ »α«úαá¼¼δ,  á »ÑαѼѡ¡á∩  insert_mode  ß½πª¿Γ  ñ½∩
  870.      ¿¡ñ¿¬áµ¿¿ ΓѬπΘÑú« αѪ¿¼á αáí«Γδ.  öπ¡¬µ¿∩ insert_status ¿º¼Ñ¡∩ÑΓ
  871.      Γ¿» ¬παß«αá ó ß««ΓóÑΓßΓó¿¿ ß« º¡áτÑ¡¿Ñ¼  »ÑαѼѡ¡«⌐  insert_mode.
  872.      ÉѪ¿¼ óßΓá󬿠«íπß½áó½¿óáÑΓ ¡á½¿τ¿Ñ ¬óáñαáΓ¡«ú« ¬παß«αá,  á αѪ¿¼
  873.      ºá¼Ñ¡δ ß¿¼ó«½«ó - ¡á½¿τ¿Ñ ¬παß«αá ó ó¿ñÑ  ¡¿ª¡Ñú«  »«ñτÑનóá¡¿∩.
  874.      ä½∩  ¿º¼Ñ¡Ñ¡¿∩ Σ«α¼δ ¬παß«αá ¿ß»«½∞ºπÑΓß∩ Σπ¡¬µ¿∩ set_cursor_type
  875.      ¿º í¿í½¿«ΓѬ¿ ibmpc.c (ß¼. â½áóπ 4).
  876.  
  877.           öπ¡¬µ¿∩ read_field   ¿ß»«½∞ºπÑΓß∩   ñ½∩   τΓÑ¡¿∩   óóÑñÑ¡¡δσ
  878.      »«½∞º«óáΓѽѼ  ó  »«½∩ ñá¡¡δσ.  Ä¡á πßΓá¡áó½¿óáÑΓ ¬παß«α ó ¡áτὫ
  879.      »«½∩ ¿ ßτ¿ΓδóáÑΓ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ß¿¼ó«½«ó ó ¡Ñ¼. äóá ½«¬á½∞¡δσ
  880.      π¬áºáΓѽ∩ ¿ß»«½∞ºπεΓß∩ ñ½∩ Γαáßß¿α«ó¬¿ óó«ñ¿¼δσ ñá¡¡δσ. ô¬áºáΓѽ∞
  881.      mask »«ºó«½∩ÑΓ »«½πτ¿Γ∞ ΓѬπΘπε »«º¿µ¿ε ó ¼á߬Ñ, á π¬áºáΓѽ∞ buff
  882.      -   ΓѬπΘπε  »«º¿µ¿ε  ó  íπΣÑαÑ.  Åα¿  »ÑαѼÑΘÑ¡¿¿  »«½∞º«óáΓѽѼ
  883.      ¬παß«αá,  π¡¿τΓ«ªÑ¡¿¿ ¿½¿ óó«ñÑ ß¿¼ó«½«ó º¡áτÑ¡¿Ñ φΓ¿σ π¬áºáΓѽÑ⌐
  884.      ¬«ααÑ¬Γ¿απÑΓß∩.
  885.  
  886.           Åα¿ óδ»«½¡Ñ¡¿¿ «»Ñαᵿ¿ »« π¡¿τΓ«ªÑ¡¿ε ß¿¼ó«½«ó ¿ß»«½∞ºπÑΓß∩
  887.      Σπ¡¬µ¿∩ Æπαí« æ¿ movmem, ¬«Γ«αá∩ ¿ß»«½∞ºπÑΓß∩ ñ½∩ ßñó¿úá ß¿¼ó«½«ó
  888.      ó íπΣÑαÑ,  á ΓᬪѠΣπ¡¬µ¿∩ disp_field ñ½∩ «Γ«íαáªÑ¡¿∩ αѺπ½∞ΓáΓ«ó
  889.      «»Ñαᵿ¿ ¡á φ¬αá¡Ñ.
  890.  
  891.           è½áó¿Φá <鿯> (<Ins>) »ÑαѬ½ετáÑΓ αѪ¿¼δ éßΓáó¬¿/çá¼Ñ¡δ.
  892.  
  893.           àß½¿ ΓѬπΘÑÑ »«½Ñ ó¬½ετáÑΓ ó ßÑí∩ Γ«τ¬π (.), Γ« «¡« ß«ñÑনΓ
  894.      ¡π½¿  ó  ñóπσ ¬αá⌐¡¿σ »αáóδσ »«º¿µ¿∩σ (Ñß½¿ ñαπú¿Ñ º¡áτÑ¡¿∩ ó ¡¿σ
  895.      ¡Ñ π¬áºá¡δ),  óδαáó¡Ñ¡« ó»αáó«,  á  ß««ΓóÑΓßΓóπεΘ¿Ñ  π¬áºáΓѽ¿  ¿
  896.      ¬παß«α  πßΓá¡áó½¿óáεΓß∩ ¡á º¡áτáΘ¿Ñ »«º¿µ¿¿,  »αÑñ¡áº¡áτÑ¡¡δÑ ñ½∩
  897.      π¬áºá¡¿∩ »Ñ¡¡¿ (ñѡѪ¡«⌐ Ññ¿¡¿µδ).
  898.  
  899.                              - 24 -
  900.  
  901.           àß½¿ »«½∞º«óáΓѽ∞ ¡áªá½ ¬½áó¿Φπ,  ß¿¼ó«½¿º¿απεΘπε ºáóÑαΦÑ¡¿Ñ
  902.      óó«ñá   ñá¡¡δσ,   Γ«   ñá¡¡á∩  ß¿Γπᵿ∩  «íαáíáΓδóáÑΓß∩  Σπ¡¬µ¿Ñ⌐
  903.      endstroke,  ¿ óó«ñ ñá¡¡δσ ºáóÑαΦáÑΓß∩.  é »α«Γ¿ó¡«¼ ß½πτáÑ ß¿¼ó«½
  904.      íπñÑΓ  ºá»¿ßá¡  ó  íπΣÑα.  àß½¿ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ «íαáíáΓδóὫß∞ ¡Ñ
  905.      á½Σáó¿Γ¡«-µ¿Σα«ó«Ñ »«½Ñ,  Γ« á¡á½¿º¿απÑΓß∩  ß¿Γπᵿ∩  ¡á  »αÑñ¼ÑΓ
  906.      óó«ñá  »«½∞º«óáΓѽѼ  τ¿ß½á.  àß½¿  í佫  óóÑñÑ¡«  ¡Ñ  τ¿ß½«,  Γ«
  907.      óδñáÑΓß∩  ß««íΘÑ¡¿Ñ  «í  «Φ¿í¬Ñ,  ¿  »α«úαἼᠠ¡Ñ   ó«ß»α¿¡¿¼áÑΓ
  908.      óóÑñÑ¡¡δÑ ñá¡¡δÑ,  ΓαÑíπ∩ ¿σ »«óΓ«α¡«ú« óó«ñá. àß½¿ ó¬½ετÑ¡ αѪ¿¼
  909.      óßΓáó¬¿,  Γ« ñá¡¡δÑ ó íπΣÑαÑ ß¼ÑΘáεΓß∩ ¡á «ñ¡π »«º¿µ¿ε ó»αáó«,  á
  910.      º¡áτÑ¡¿Ñ  »«½∩  »«ß½Ñ  óßΓá󬿠 ß¿¼ó«½á  «Γ«íαáªáÑΓß∩  ß  »«¼«Θ∞ε
  911.      Σπ¡¬µ¿¿ disp_field.  Åα¿  φΓ«¼  ß¿¼ó«½  ºá»¿ßδóáÑΓß∩  ó  íπΣÑα  ¿
  912.      «Γ«íαáªáÑΓß∩ ¡á φ¬αá¡Ñ. æ«ó¼ÑßΓ¡«Ñ ¿ß»«½∞º«óá¡¿Ñ π¬áºáΓѽÑ⌐ ¼á߬¿
  913.      ¿ íπΣÑαá  »«ºó«½∩ÑΓ  "»ÑαÑ߬ᬿóáΓ∞"  τÑαѺ  ß¿¼ó«½δ  »π¡¬Γπᵿ¿.
  914.      Å«ß½Ñ  óó«ñá  »«ß½Ññ¡Ñú«  ß¿¼ó«½á ó »«½Ñ ñá½∞¡Ñ⌐Φ¿⌐ óó«ñ ñá¡¡δσ ó
  915.      ¡Ñú« »αѬαáΘáÑΓß∩.
  916.  
  917.           Å«ß½Ñ ºáóÑαΦÑ¡¿∩  óó«ñá ñá¡¡δÑ  »α«óÑα∩εΓß∩ ¡á ñ«»πßΓ¿¼«ßΓ∞,
  918.      ñáΓδ   ¿   τ¿ß½á   óδαáó¡¿óáεΓß∩,    ¬παß«α   πßΓá¡áó½¿óáÑΓß∩   ó
  919.      ß««ΓóÑΓßΓóπεΘπε »«º¿µ¿ε  »«½∩ ¿ ß«ñÑন¼«Ñ »«½Ñ⌐  «Γ«íαáªáÑΓß∩ ¡á
  920.      φ¬αá¡Ñ.
  921.  
  922.           öπ¡¬µ¿∩ endstroke     á¡á½¿º¿απÑΓ    º¡áτÑ¡¿Ñ    ¬½áó¿Φ    ¿
  923.      πßΓá¡áó½¿óáÑΓ  ¬½áó¿Φ¿,  ¬«Γ«αδÑ  ¼«úπΓ  »α¿óÑßΓ¿  ¬   ºáóÑαΦÑ¡¿ε
  924.      »α«µÑßßá óó«ñá ñá¡¡δσ.
  925.  
  926.           àßΓ∞ ñóÑ Σπ¡¬µ¿¿,  ºá¡¿¼áεΘ¿Ñß∩ óδαáó¡¿ó᡿Ѽ ñá¡¡δσ. ÅÑαóá∩
  927.      -  right_justify,  óδαáó¡¿óáεΘá∩  ß»αáóá   ¿   ºá»«½¡∩εΘá∩   »«½Ñ
  928.      »α«íѽἿ. éΓ«αá∩ - right_justify_zero_fill, óδαáó¡¿óáεΘá∩ ß»αáóá
  929.      ¿ ºá»«½¡∩εΘá∩ »«½Ñ ¡π½∩¼¿.
  930.  
  931.           öπ¡¬µ¿∩ spaces á¡á½¿º¿απÑΓ »«½Ñ ¡á ¡á½¿τ¿Ñ óßÑσ »α«íѽ«ó.
  932.  
  933.           öπ¡¬µ¿∩ validate_date «ßπΘÑßΓó½∩ÑΓ »α«óÑα¬π ñáΓδ.
  934.  
  935.           öπ¡¬µ¿∩  data_entry  óδºδóáÑΓß∩  ñ½∩   «íαáí«Γ¬¿  óßÑσ »«½Ñ⌐
  936.      Φáí½«¡á.  öπ¡¬µ¿∩ óδºδóáÑΓ field_fally ñ½∩ óδñáτ¿  ¡á  φ¬αá¡ óßÑσ
  937.  
  938.                              - 25 -
  939.      º¡áτÑ¡¿⌐ ñá¡¡δσ  ¿º ß««ΓóÑΓßΓóπεΘ¿σ íπΣÑα«ó  »«½Ñ⌐. çáΓѼ Σπ¡¬µ¿∩
  940.      «íαáíáΓδóáÑΓ  "ßóÑασπ-󡿺"   ßó∩º¡δ⌐  ß»¿ß«¬  ßΓαπ¬Γπα  FIELD  ¿
  941.      π»αáó½∩ÑΓ  óó«ñ«¼  ñá¡¡δσ  ó  ¬áªñ«¼  »«½Ñ.
  942.  
  943.           öπ¡¬µ¿∩ set_help  óδºδóáÑΓß∩  ñ½∩   «ßπΘÑßΓó½Ñ¡¿∩   »α¿ó∩º¬¿
  944.      «¬«¡¡«⌐  help-¿¡Σ«α¼áµ¿¿  ¬ ¬«¡¬αÑΓ¡«¼π »«½ε.  Å«ß¬«½∞¬π º¡áτÑ¡¿Ñ
  945.      ú½«íá½∞¡«⌐ »ÑαѼѡ¡«⌐  helpkey  «»αÑñѽѡ«  ºáαá¡ÑÑ,  Γ«  »«»δΓ¬á
  946.      »«½πτ¿Γ∞  ñ½∩  φΓ«ú«  »«½∩ ß»Ñµ¿á½∞¡πε help-¿¡Σ«α¼áµ¿ε ºá¬«¡τ¿Γß∩
  947.      íѺπß»ÑΦ¡«,  »«ß¬«½∞¬π »α«úαá¼¼á data_entry  íπñÑΓ  »ÑαÑσóáΓδóáΓ∞
  948.      »αÑαδóá¡¿Ñ «Γ ¬½áó¿Φ¿ help-Σπ¡¬µ¿¿.
  949.  
  950.           àß½¿ »«½Ñ  ¡Ñ ∩ó½∩ÑΓß∩ ºáΘ¿ΘÑ¡¡δ¼,  Γ« Σπ¡¬µ¿∩ reverse_video
  951.      óδºδóáÑΓß∩  ¬áªñδ⌐  αáº,  ¬«úñá  ¡Ñ«íσ«ñ¿¼«  »«½πτ¿Γ∞  óδñѽѡ¡«Ñ
  952.      «Γ«íαáªÑ¡¿Ñ   »«½∩   ó   ß««ΓóÑΓßΓó¿¿   ß  ¬«¡Σ¿úπαᵿÑ⌐  µóÑΓ«ó,
  953.      «»αÑñѽѡ¡«⌐ »áαá¼ÑΓα«¼ ACCENT.  ä½∩  óδñáτ¿  ¡á  φ¬αá¡  º¡áτÑ¡¿∩
  954.      ΓѬπΘÑú«  »«½∩ ó á¬µÑ¡Γ¿α«óá¡¡«¼ αѪ¿¼Ñ,  «»αÑñѽ∩Ѽ«¼ »áαá¼ÑΓα«¼
  955.      ACCENT,  ¿ß»«½∞ºπÑΓß∩ Σπ¡¬µ¿∩ data_value, á ñ½∩ óó«ñá ó »α«úαá¼¼π
  956.      óóÑñÑ¡¡δσ   ó   »«½Ñ  »«½∞º«óáΓѽѼ  ñá¡¡δσ  »α¿¼Ñ¡∩ÑΓß∩  Σπ¡¬µ¿∩
  957.      read_field. ç¡áτÑ¡¿Ñ¼, ó«ºóαáΘáÑ¼δ¼ Σπ¡¬µ¿Ñ⌐ read_field, ∩ó½∩ÑΓß∩
  958.      ¿Γ«ú«óá∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ß¿¼ó«½«ó,  ßπΓ∞ ¬«Γ«α«⌐ - óóÑñÑ¡¡δÑ ó
  959.      »«½Ñ ñá¡¡δÑ.  àß½¿ »«½Ñ ¿¼ÑÑΓ ßó«ε ß»Ñµ¿á½∞¡πε  Σπ¡¬µ¿ε  ¬«¡Γα«½∩
  960.      ñá¡¡δσ, Γ« óδºδóáÑΓß∩ φΓá Σπ¡¬µ¿∩.
  961.  
  962.           Åα¿ πß½«ó¿¿,  τΓ« ¬«¡Γα«½∞ ñá¡¡δσ  »« óßѼ »áαá¼ÑΓαá¼ »α«Φѽ
  963.      ¡«α¼á½∞¡«,  Σπ¡¬µ¿∩ normal_video »ÑαÑó«ñ¿Γ «¬¡«  ó Γᬠ¡áºδóáѼδ⌐
  964.      ¬«¡Γα«½∞¡δ⌐ αѪ¿¼ «Γ«íαáªÑ¡¿∩ ñá¡¡δσ,  µóÑΓ ¬«Γ«α«ú« «»αÑñѽ∩ÑΓß∩
  965.      º¡áτÑ¡¿Ñ¼ NORMAL,  ¿ Σπ¡¬µ¿∩ data_value »«óΓ«α¡« óδó«ñ¿Γ ¡á φ¬αá¡
  966.      º¡áτÑ¡¿Ñ  »«½∩,   ¡«  πªÑ  ó  NORMAL-µóÑΓÑ.  çáΓѼ  á¡á½¿º¿απÑΓß∩
  967.      ºáóÑαΦáεΘá∩  »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ¡áªáΓ¿∩ ¬½áó¿Φ.  àß½¿ óó«ñ ñá¡¡δσ
  968.      »αÑαóá¡    ¬½áó¿ΦÑ⌐,    ºá¬αÑ»½Ñ¡¡«⌐   ºá   óδº«ó«¼   ß»Ñµ¿á½∞¡«⌐
  969.      help-Σπ¡¬µ¿¿, Γ« «ßπΘÑßΓó½∩ÑΓß∩ «íαáΘÑ¡¿Ñ ¬ φΓ«⌐ Σπ¡¬µ¿¿. é ßó∩º¿
  970.      ß  ΓѼ,  τΓ« ó »α«µÑßßÑ  «íαáí«Γ¬¿ »«½Ñ⌐  αÑ὿º«óá¡á ó«º¼«ª¡«ßΓ∞
  971.      ºá¼Ñ¡∩Γ∞   íπΣÑਧ«óá¡¡δÑ   ñá¡¡δÑ   »«½Ñ⌐   »«½¡«ßΓ∞ε,   Σπ¡¬µ¿∩
  972.      data_value ß¡«óá óδºδóáÑΓß∩ ñ½∩ »«óΓ«α¡«ú« «Γ«íαáªÑ¡¿∩ »«½∩ »«ß½Ñ
  973.      Ñú« «íαáí«Γ¬¿.
  974.  
  975.           çáóÑαΦáεΘÑ⌐ ¬½áó¿ΦÑ⌐ ó »α«µÑßßÑ óó«ñá ñá¡¡δσ ¼«úπΓ íδΓ∞ ½¿í«
  976.  
  977.                              - 26 -
  978.      ¬½áó¿Φ¿ ñó¿ªÑ¡¿∩ ó»ÑαÑñ (ßΓαѽ¬á ó¡¿º,  ééÄä,  Æáí), ½¿í« ¬½áó¿Φ¿
  979.      ñó¿ªÑ¡¿∩ ¡áºáñ (ßΓαѽ¬á óóÑασ, ßΓαѽ¬á ó½Ñó«). æ½ÑñπεΘÑÑ »«½Ñ ñ½∩
  980.      «íαáí«Γ¬¿ óδí¿αáÑΓß∩ ¿º ßó∩º¡«ú« ß»¿ß¬á FIELD, ß»Ñµ¿Σ¿µ¿α«óá¡¡«ú«
  981.      »áαá¼ÑΓα«¼ WINDOW,  ó ºáó¿ß¿¼«ßΓ¿ «Γ º¡áτÑ¡¿⌐ φΓ¿σ ¬½áó¿Φ (ó»ÑαÑñ
  982.      ¿½¿ ¡áºáñ).  Åα¿ φΓ«¼ óδí¿αáÑΓß∩ ß½ÑñπεΘÑÑ ¿½¿ »αÑñδñπΘÑÑ »«½Ñ, ¿
  983.      óó«ñ ñá¡¡δσ »α«ñ«½ªáÑΓß∩.
  984.  
  985.           àß½¿  »«ß½Ññ¡Ñ⌐  íδ½á  ¡áªáΓá  «ñ¡á  ¿º  ΓÑ󠬽áó¿Φ, ¬«Γ«αδÑ
  986.      á¡á½¿º¿απεΓß∩ Σπ¡¬µ¿Ñ⌐  endstroke ¿  ¡Ñ  ∩ó½∩εΓß∩  á¡á½«ú«¼ αá¡ÑÑ
  987.      óßΓαÑτáεΘ¿σß∩  ¿ á¡á½¿º¿απѼδσ  Σπ¡¬µ¿Ñ⌐  »«ß½Ññ«óáΓѽ∞¡«ßΓÑ⌐, Γ«
  988.      óó«ñ ñá¡¡δσ  ó «¬«¡¡δ⌐ Φáí½«¡  ºáóÑαΦáÑΓß∩,  ¿ Σπ¡¬µ¿∩ data_entry
  989.      ó«ºóαáΘáÑΓ π»αáó½Ñ¡¿Ñ ó Γ«τ¬π ó맮óá.
  990.  
  991.  
  992.  
  993.                   Åα¿¼Ñα: éó«ñ ñá¡¡δσ ó «»αÑñѽѡ¡«¼ »«α∩ñ¬Ñ
  994.      -----------------------------------------------------------------
  995.  
  996.           êßσ«ñ¡δÑ Σá⌐½δ,  »αÑñßΓáó½Ñ¡¡δÑ ¡á ½¿ßΓ¿¡úáσ 8.2, 8.3 ¿ 8.4,
  997.      ßπΓ∞ »α¿¼Ñαδ ¿ß»«½∞º«óá¡¿∩  Φáí½«¡á óó«ñá ñá¡¡δσ  ó «¬¡Ñ. ï¿ßΓ¿¡ú
  998.      8.2,  order.c,  »αÑñßΓáó½∩ÑΓ ß«í«⌐ ΓѬßΓ  ú½áó¡«⌐ Σπ¡¬µ¿¿ (main),
  999.      ¬«Γ«αá∩    «ßπΘÑßΓó½∩ÑΓ    «íαáΘÑ¡¿Ñ    ¬    Σπ¡¬µ¿¿    ordent.c,
  1000.      ¡Ñ»«ßαÑñßΓóÑ¡¡«  αÑ὿ºπεΘÑ⌐  »α¿¼Ñα.  öπ¡¬µ¿∩  ordent.c  íπñÑΓ ó
  1001.      ñá½∞¡Ñ⌐ΦѼ »α¿ßπΓßΓó«óáΓ∞ »α¿ αáßß¼«ΓαÑ¡¿¿  »α¿¼Ñαá ¼Ñ¡ε  ó â½áóÑ
  1002.      10  ¿ αѺ¿ñÑ¡Γ¡«⌐ πΓ¿½¿Γδ ó â½áóÑ  12.  ï¿ßΓ¿¡ú  8.4 »αÑñßΓáó½∩ÑΓ
  1003.      ß«í«⌐ make-Σá⌐½ order.prj,  ¿ß»«½∞ºπѼδ⌐  πΓ¿½¿Γ«⌐  make Æπαí« æ¿
  1004.      ñ½∩ »«ßΓα«Ñ¡¿∩ »α«úαá¼¼δ »α¿¼Ñαá.
  1005.  
  1006.           ä½∩ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ »α¿¼Ñαá óóÑñ¿ΓÑ ¬«¼á¡ñπ
  1007.  
  1008.      C>order
  1009.  
  1010.           Ä¬¡«,  »αÑñßΓáó½Ñ¡¡«Ñ ¡á α¿ßπ¡¬Ñ 8.2,  ∩ó½∩ÑΓß∩ »« ßπΓ¿ ñѽá
  1011.      "óß»½δóáεΘ¿¼",  Γ« ÑßΓ∞  »«∩ó½∩εΘ¿¼ß∩  ó »«º¿µ¿¿  ¬παß«αá. Äñ¡á¬«
  1012.      «íαáΓ¿ΓÑß∞ ¬ ½¿ßΓ¿¡úπ 8.3, ordent.c, »αÑñóáα¿Γѽ∞¡« «º¡á¬«¼¿óΦ¿ß∞
  1013.      ß «»¿ß᡿Ѽ  »α«úαá¼¼δ,  »α¿óÑñÑ¡¡δ¼  ¡¿ªÑ.  Å«ß½Ñ  Γ«ú«,  ¬á¬ óδ
  1014.      «º¡á¬«¼¿½¿ß∞ ß ½¿ßΓ¿¡ú«¼, óδ»«½¡¿ΓÑ »α«úαá¼¼π.
  1015.  
  1016.                              - 27 -
  1017.  
  1018.      ┌───────────────────────────────────────────────────────────────┐
  1019.      │                                                               │
  1020.      │  C>                                                           │
  1021.      │                                                               │
  1022.      │         ┌────────────Order Entry─────────────┐                │
  1023.      │         │                                    │                │
  1024.      │         │   Name:                            │                │
  1025.      │         │   Address:                         │                │
  1026.      │         │   City:                            │                │
  1027.      │         │   State:        Zip:               │                │
  1028.      │         │                                    │                │
  1029.      │         │   Amount:       .                  │                │
  1030.      │         │   Date:         / /                │                │
  1031.      │         │                                    │                │
  1032.      │         │   Phone:      (  )     -           │                │
  1033.      │         │                                    │                │
  1034.      │         └────────────────────────────────────┘                │
  1035.      │                                                               │
  1036.      └───────────────────────────────────────────────────────────────┘
  1037.  
  1038.               É¿ß.8.2. ÄíαáºÑµ óó«ñá Φáí½«¡á óó«ñá ñá¡¡δσ
  1039.  
  1040.  
  1041.           Åα¿¼Ñα »α«úαá¼¼δ ¡áτ¿¡áÑΓß∩ ß πßΓᡫ󬿠 «¬¡á ¿ »ÑαÑñáτ¿ Ñ¼π
  1042.      º¡áτÑ¡¿∩ ºáú«½«ó¬á ¿ µóÑΓá.  Ä¬¡« «Γ«íαáªáÑΓß∩ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩,
  1043.      ¿  ó  Φáí½«¡Ñ  »«∩ó½∩ÑΓß∩  »α¿ú½áΦÑ¡¿Ñ  ¬  óó«ñπ   ñá¡¡δσ.  Å«ß½Ñ
  1044.      «íαáΘÑ¡¿∩  ¬ Σπ¡¬µ¿¿  init_template  «ßπΘÑßΓó½∩ÑΓß∩ ¿ñÑ¡Γ¿Σ¿¬áµ¿∩
  1045.      help-¿¡Σ«α¼áµ¿¿  ñ½∩ ¬áªñ«ú« »«½∩  (help-¿¡Σ«α¼áµ¿∩ αẼÑΘáÑΓß∩ ó
  1046.      »αÑñѽá󠫬¡á),  ¬«Γ«αá∩ »«∩ß¡∩ÑΓ  ¡áº¡áτÑ¡¿Ñ  óó«ñ¿¼δσ  ó ¬áªñ«Ñ
  1047.      »«½Ñ  ñá¡¡δσ.  ôßΓá¡«ó¬á  «¬«¡¡«⌐  help-¿¡Σ«α¼áµ¿¿ «ßπΘÑßΓó½∩ÑΓß∩
  1048.      »πΓѼ   «íαáΘÑ¡¿∩   ¬   Σπ¡¬µ¿¿    field_window.    èáªñ«Ñ   »«½Ñ
  1049.      ¡Ñ»«ßαÑñßΓóÑ¡¡«  πßΓá¡áó½¿óáÑΓß∩  ó  Φáí½«¡Ñ  »πΓѼ  «íαáΘÑ¡¿∩  ¬
  1050.      Σπ¡¬µ¿¿  establish_field.  Å«ß½Ññ¡ÑÑ »«½Ñ  πßΓá¡áó½¿óáÑΓß∩ ó φΓ«¼
  1051.      »α¿¼ÑαÑ ¬á¬ ¡Ñ ¿ß»«½∞ºπεΘÑÑ «¬«¡¡πε  help-¿¡Σ«α¼áµ¿ε. Å«φΓ«¼π ñ½∩
  1052.      ñá¡¡«ú«  »«½∩  ß  »«¼«Θ∞ε  Σπ¡¬µ¿¿   field_help  ¿ñÑ¡Γ¿Σ¿µ¿απÑΓß∩
  1053.      ß»Ñµ¿á½∞¡á∩  help-Σπ¡¬µ¿∩.   ÄíαáΓ¿ΓÑ  ó¡¿¼á¡¿Ñ,  τΓ«  «ñ¡«  »«½Ñ
  1054.  
  1055.                              - 28 -
  1056.      Φáí½«¡á -  "state"  -  «»¿ßá¡«  ¬á¬  ¿¼ÑεΘÑÑ  ß»Ñµ¿á½∞¡πε Σπ¡¬µ¿ε
  1057.      ¬«¡Γα«½∩   ñá¡¡δσ,   óó«ñ¿¼δσ  ó  ¡Ñú«,   ¡á  ñ«ßΓ«óÑα¡«ßΓ∞.  ¥Γá
  1058.      ß»Ñµ¿á½∞¡á∩ Σπ¡¬µ¿∩ ¬«¡Γα«½∩ ñá¡¡δσ ß»Ñµ¿Σ¿µ¿α«óá¡á ó «íαáΘÑ¡¿¿ ¬
  1059.      Σπ¡¬µ¿¿   field_validate.
  1060.  
  1061.           Åα«úαἼᠫíαáΘáÑΓß∩ ¬ Σπ¡¬µ¿¿  clear_template ñ½∩ »«½πτÑ¡¿∩
  1062.      »πßΓ«ú«  Φáí½«¡á óó«ñá ñá¡¡δσ,  á  ºáΓѼ -  ¬ Σπ¡¬µ¿¿ data_entry,
  1063.      »«ºó«½∩εΘÑ⌐ «íαáíáΓδóáΓ∞ ñá¡¡δÑ, óó«ñ¿¼δÑ ó Φáí½«¡. Å« ºáóÑαΦÑ¡¿ε
  1064.      αáí«Γδ Σπ¡¬µ¿¿  data_entry »α«úαá¼¼á π¡¿τΓ«ªáÑΓ «¬¡«.  é αÑá½∞¡«⌐
  1065.      ºáñáτÑ ó φΓ«⌐  Γ«τ¬Ñ »α«úαá¼¼δ óδ  ñ«½ª¡δ »αÑñπß¼«ΓαÑΓ∞ «íαáí«Γ¬π
  1066.      óóÑñÑ¡¡δσ  ñá¡¡δσ.   é  ¡áΦѼ  »α¿¼ÑαÑ  »«ß½Ñ   π¡¿τΓ«ªÑ¡¿∩  «¬¡á
  1067.      »α«úαἼᠠ ºáóÑαΦáÑΓ   ßó«ε  αáí«Γπ.
  1068.  
  1069.           é« óαѼ∩  óδ»«½¡Ñ¡¿∩  »α«úαá¼¼δ  «íαáΓ¿ΓÑ  ó¡¿¼á¡¿Ñ,   ¬á¬¿¼
  1070.      «íαẫ¼ óó«ñ¿¼δÑ ß¿¼ó«½δ »«¼ÑΘáεΓß∩ ó »«º¿µ¿¿ «»αÑñѽѡ¡δσ »«½Ñ⌐,
  1071.      á ΓᬪѠ¡á π»αáó½Ñ¡¿Ñ  ¬παß«α«¼.  ÉѪ¿¼  éßΓáó¬¿/çá¼Ñ¡δ  ß¿¼ó«½«ó
  1072.      π»αáó½∩ÑΓß∩ ß    »«¼«Θ∞ε    ¬½áó¿Φ¿    <Ins>    ¿    ¿¡ñπµ¿απÑΓß∩
  1073.      ß««ΓóÑΓßΓóπεΘÑ⌐ Σ«α¼«⌐  ¬παß«αá.  àß½¿  ¬παß«α  «Γ«íαáªáÑΓß∩  ¬á¬
  1074.      ¼ÑαµáεΘ¿⌐  ß¿¼ó«½  »«ñτÑનóá¡¿∩  ó  «íδτ¡«¼  ßó«Ñ¼ ó¿ñÑ,  Γ« φΓ«
  1075.      «º¡áτáÑΓ, τΓ« ñá¡¡δÑ óó«ñ∩Γß∩ ó  αѪ¿¼Ñ  ºá¼Ñ¡δ  ß¿¼ó«½«ó.  Å«ß½Ñ
  1076.      Γ«ú«, ¬á¬   óδ   ¡áª¼ÑΓÑ   ¬½áó¿Φπ  <Ins>,  ¬παß«α  »α¿¼ÑΓ  Σ«α¼π
  1077.      ¼ÑαµáεΘÑú« »α∩¼«πú«½∞¡¿¬á, ¿ óδ íπñÑΓÑ »α«ñ«½ªáΓ∞ αáí«Γπ ó αѪ¿¼Ñ
  1078.      óßΓá󬿠߿¼ó«½«ó.
  1079.  
  1080.           ì᪼¿ΓÑ ¬½áó¿Φπ <F1>  ñ½∩ »«½πτÑ¡¿∩ ß»αáó«τ¡«⌐ ¿¡Σ«α¼áµ¿¿ »«
  1081.      ¬áªñ«¼π ¿º  »«½Ñ⌐ Φáí½«¡á.  ìá  α¿ßπ¡¬Ñ  8.3  ¿º«íαáªÑ¡  Φáí½«¡ ß
  1082.      ¡Ñ¬«Γ«α묨  º¡áτÑ¡¿∩¼¿  »«½Ñ⌐   ó   ¼«¼Ñ¡Γ   óδñáτ¿   »«  ºá»α«ßπ
  1083.      »«½∞º«óáΓѽ∩ «¬«¡¡«⌐ help-¿¡Σ«α¼áµ¿¿.  ì᪼¿ΓÑ  ¬½áó¿Φπ  <F1> ñ½∩
  1084.      »«½∩  "State"   ¿  »«½πτ¿ΓÑ  «¬«¡¡πε  help-¿¡Σ«α¼áµ¿ε  ñ½∩  ¡Ñú«.
  1085.      ÄíαáΓ¿ΓÑ  ó¡¿¼á¡¿Ñ,  τΓ«  ó  ¬áτÑßΓóÑ  help-¿¡Σ«α¼áµ¿¿  óδßΓπ»áÑΓ
  1086.      »ÑαÑτÑ¡∞ ñ«»πßΓ¿¼δσ º¡áτÑ¡¿⌐ »«½∩ "State". éδíÑα¿ΓÑ «ñ¡« ¿º ¡¿σ ¿
  1087.      óóÑñ¿ΓÑ  ó  ¬áτÑßΓóÑ  º¡áτÑ¡¿∩  »«½∩.   ìá  »α¿¼ÑαÑ   φΓ«ú«  »«½∩
  1088.      ó¡¿¼áΓѽ∞¡«  ¿ºπτ¿ΓÑ,  ¬á¬ αáí«ΓáÑΓ  ß»Ñµ¿á½∞¡á∩ Σπ¡¬µ¿∩ ¬«¡Γα«½∩
  1089.      ñá¡¡δσ,  ¬á¬  «¡á  ¿ß»«½∞ºπÑΓ  Σπ¡¬µ¿ε  error_message  ñ½∩ óδñáτ¿
  1090.      ß««íΘÑ¡¿⌐  «  óó«ñÑ  ¡Ññ«»πßΓ¿¼δσ  ñá¡¡δσ.  É¿ßπ¡«¬  8.4 ¡áú½∩ñ¡«
  1091.      ñѼ«¡ßΓα¿απÑΓ ¿¼Ñ¡¡«  ß½πτá⌐  ¡Ñ»αáó¿½∞¡«ú« óó«ñá  ñá¡¡δσ  ó »«½Ñ
  1092.      "State".   æ»Ñµ¿á½∞¡á∩   help-Σπ¡¬µ¿∩  ñ½∩   »«½∩  ñáΓδ  ("Date")
  1093.  
  1094.                              - 29 -
  1095.      ñѼ«¡ßΓα¿απÑΓ,  ¬á¬ ¼«ª¡« »«½πτ¿Γ∞  º¡áτÑ¡¿Ñ  ñáΓδ  ¿ºó¡Ñ Σπ¡¬µ¿¿
  1096.      data_entry. é ñá¡¡«¼ »α¿¼ÑαÑ ñ½∩ τΓÑ¡¿∩ ΓѬπΘÑ⌐ ñáΓδ ¿ß»«½∞ºπÑΓß∩
  1097.      Σπ¡¬µ¿∩ Æπαí« æ¿ getdate,  »«ß½Ñ τÑú« ΓѬπΘá∩ ñáΓᠺỿßδóáÑΓß∩ ó
  1098.      ß««ΓóÑΓßΓóπεΘ¿⌐ íπΣÑα »«½∩ "Date".
  1099.  
  1100.      ┌───────────────────────────────────────────────────────────────┐
  1101.      │                                                               │
  1102.      │ C>                          ┌────────────────────────────┐    │
  1103.      │                             │ Enter the address of the   │    │
  1104.      │                             │ person who is placing the  │    │
  1105.      │    ┌──────────── Order entry│ order.                     │    │
  1106.      │    │                        │ [Help] to return           │    │
  1107.      │    │                        └─────────────────────┬──────┘    │
  1108.      │    │     Name:      Clifford Brown                │           │
  1109.      │    │     Address:   123 Main Street               │           │
  1110.      │    │     City:      Springfield                   │           │
  1111.      │    │     State:     VA Zip: 21333                 │           │
  1112.      │    │                                              │           │
  1113.      │    │     Amount:     23.40                        │           │
  1114.      │    │     Date:      26/07/87                      │           │
  1115.      │    │                                              │           │
  1116.      │    │     Phone:     (202) 321-3211                │           │
  1117.      │    │                                              │           │
  1118.      │    └──────────────────────────────────────────────┘           │
  1119.      │                                                               │
  1120.      └───────────────────────────────────────────────────────────────┘
  1121.  
  1122.      É¿ß. 8.3. ÄíαáºÑµ óó«ñá Φáí½«¡á óó«ñá ñá¡¡δσ ß ñá¡¡δ¼¿
  1123.                ¿ help-¿¡Σ«α¼áµ¿Ñ⌐
  1124.  
  1125.  
  1126.  
  1127.      ┌───────────────────────────────────────────────────────────────┐
  1128.      │                                                               │
  1129.      │ C>                                                            │
  1130.      │                                                               │
  1131.      │                                                               │
  1132.  
  1133.                              - 30 -
  1134.      │    ┌─────────────Order Entry─────────────────┐                │
  1135.      │    │                                         │                │
  1136.      │    │     Name:      Clifford Brown           │                │
  1137.      │    │     Address:   123 Main Street          │                │
  1138.      │    │     City:      Springfield              │                │
  1139.      │    │     State:     TX Zip: 21333            │                │
  1140.      │    │                                         │                │
  1141.      │    │     Amount:     23.40                   │                │
  1142.      │    │     Date:      26/07/87                 │                │
  1143.      │    │                                         │                │
  1144.      │    │     Phone:     (202) 321-3211           │                │
  1145.      │    │                                         │                │
  1146.      │    └─────────────────────────────────────────┘                │
  1147.      │                                                               │
  1148.      │                                        ┌─────ERROR!─────┐     │
  1149.      │                                        │                │     │
  1150.      │                                        │ Invalid State  │     │
  1151.      │                                        └────────────────┘     │
  1152.      │                                                               │
  1153.      └───────────────────────────────────────────────────────────────┘
  1154.  
  1155.              É¿ß. 8.4. Åα«óÑα¬á ¬«ααÑ¬Γ¡«ßΓ¿ óó«ñá ñá¡¡δσ
  1156.  
  1157.  
  1158.      ï¿ßΓ¿¡ú 8.2: order.c
  1159.  
  1160.      /*-----------order.c---------*/
  1161.  
  1162.      #include "twindow.h"
  1163.      void ordent(void);
  1164.  
  1165.      main()
  1166.      {
  1167.         load_help("tcprogs.hlp");
  1168.         ordent();
  1169.      }
  1170.  
  1171.  
  1172.                              - 31 -
  1173.  
  1174.      ï¿ßΓ¿¡ú 8.3: ordent.c
  1175.  
  1176.      /*-----------------ordent.c----------------*/
  1177.  
  1178.      #include <dos.h>
  1179.      #include <stdio.h>
  1180.      #include <string.h>
  1181.      #include "twindow.h"
  1182.  
  1183.      struct {
  1184.          char name [26];
  1185.          char addr [26];
  1186.          char city [26];
  1187.          char state [3];
  1188.          char zip [6];
  1189.          char amt [6];
  1190.          char dt [7];
  1191.          char phone [11];
  1192.      } rcd;
  1193.  
  1194.      char msk25 []      = "__________________________";
  1195.      char mskamt []   = "____.____";
  1196.      char mskdate []  = "___/___/___/";
  1197.      char mskphone [] = "(___) ____-____";
  1198.      #define mskst msk25+23
  1199.      #define mskzip msk25+20
  1200.  
  1201.      int validate_state(char *, int);
  1202.      void help_date(char *);
  1203.  
  1204.      void ordent()
  1205.      {
  1206.         WINDOW *wnd;
  1207.         FIELD *fld;
  1208.  
  1209.         wnd = establish_window(10, 5, 15, 50);
  1210.  
  1211.                              - 32 -
  1212.         set_title(wnd, " Order Entry ");
  1213.         set_colors(wnd, ALL, BLUE, AQUA, BRIGHT);
  1214.         set_colors(wnd, ACCENT, WHITE, BLACK, DIM);
  1215.         display_window(wnd);
  1216.         wprompt(wnd, 5, 2, "Name:");
  1217.         wprompt(wnd, 5, 3, "Address:");
  1218.         wprompt(wnd, 5, 4, "City:");
  1219.         wprompt(wnd, 5, 5, "State:");
  1220.         wprompt(wnd, 18, 5, "Zip:");
  1221.         wprompt(wnd, 5, 10, "Phone:");
  1222.         wprompt(wnd, 5, 7, "Amount:");
  1223.         wprompt(wnd, 5, 8, "Date:");
  1224.         init_template(wnd);
  1225.         fld = establish_field(wnd, 15, 2, msk25, rcd.name, 'a');
  1226.         field_window(fld,"name    ", 40, 1);
  1227.         fld = establish_field(wnd, 15, 3, msk25, rcd.addr, 'a');
  1228.         field_window(fld,"address ", 40, 2);
  1229.         fld = establish_field(wnd, 15, 4, msk25, rcd.city, 'a');
  1230.         field_window(fld, "address ", 40, 3);
  1231.         fld = establish_field(wnd, 15, 5, mskst, rcd.state, 'A');
  1232.         field_validate(fld, validate_state);
  1233.         field_window(fld,"state   ", 40, 4);
  1234.         fld = establish_field(wnd, 23, 5, mskzip, rcd.zip, 'Z');
  1235.         field_window(fld,"address ", 40, 4);
  1236.         fld = establish_field(wnd,15,10,mskphone,rcd.phone, 'N');
  1237.         field_window(fld,"phone   ", 40, 9);
  1238.         fld = establish_field(wnd, 15, 7, mskamt, rcd.amt, 'C');
  1239.         field_window(fld,"amount  ", 40, 8);
  1240.         fld = establish_field(wnd, 15, 8, mskdate, rcd.dt, 'D');
  1241.         field_help(fld, help_date);
  1242.         clear_template(wnd);
  1243.         data_entry(wnd);
  1244.         delete_window(wnd);
  1245.      }
  1246.      /*--------»α«óÑα¬á ß«ßΓ«∩¡¿∩ ¡áªáΓ«⌐ ¬½áó¿Φ¿----------*/
  1247.      int validate_state(bf, key)
  1248.      char *bf;
  1249.  
  1250.                              - 33 -
  1251.      {
  1252.         static char *states [] =
  1253.             {"  ","VA","NC","SC","GA","FL",0};
  1254.         char **st = states;
  1255.  
  1256.         while (*st)
  1257.             if (strcmp(*st++, bf) == 0)
  1258.                 return OK;
  1259.         error_message("ìÑñ«»πßΓ¿¼«Ñ ß«ßΓ«∩¡¿Ñ ");
  1260.         return ERROR;
  1261.      }
  1262.  
  1263.  
  1264.      /*-------óδñáÑΓ ßÑú«ñ¡∩Φ¡εε ñáΓπ------*/
  1265.      void help_date(bf)
  1266.      char *bf;
  1267.      {
  1268.         struct date dat;
  1269.  
  1270.         getdate(&dat);
  1271.         sprintf(bf, "%02d%02d%02d",
  1272.                 dat.da_day, dat.da_mon, dat.da_year % 100);
  1273.       }
  1274.  
  1275.  
  1276.  
  1277.  
  1278.      ï¿ßΓ¿¡ú 8.4: order.prj
  1279.  
  1280.      order
  1281.      ordent (twindow.h)
  1282.      entry (twindow.h, keys.h)
  1283.      thelp (twindow.h, keys.h)
  1284.      twindow (twindow.h, keys.h)
  1285.      ibmpc.obj
  1286.  
  1287.  
  1288.  
  1289.                              - 34 -
  1290.  
  1291.  
  1292.                              ÉѺε¼Ñ
  1293.      -----------------------------------------------------------------
  1294.  
  1295.           Ä¬«¡¡á∩ í¿í½¿«ΓѬᠠ ß«ñÑαª¿Γ   ßÑ⌐τáß   ßαÑñßΓóá   ß«ºñá¡¿∩
  1296.      ¬«¡ΓѬßΓ¡«-ºáó¿ß¿¼«⌐  help-¿¡Σ«α¼áµ¿¿  ¿ Σ«α¼áΓ¡«ú« óó«ñá ñá¡¡δσ.
  1297.      ¥Γ¿ ßαÑñßΓóá óδ ¼«ªÑΓÑ ß πß»Ñσ«¼ ¿ß»«½∞º«óáΓ∞ »α¿ ß«ºñá¡¿¿ ß¿ßΓѼ
  1298.      ¿¡ΓÑαá¬Γ¿ó¡«ú«  óó«ñá  ñá¡¡δσ.  ÿáí½«¡  óó«ñá ñá¡¡δσ »«ññÑনóáÑΓ
  1299.      Σ¿¬ß¿α«óá¡¡δÑ Σ«α¼áΓδ  óó«ñ¿¼δσ  ñá¡¡δσ.  é  â½áóÑ  9  ó  Σπ¡¬µ¿¿
  1300.      ΓѬßΓ«ó«ú«  αÑñá¬Γ«αá ñ«íáó½Ñ¡δ ¡«óδÑ,  «ñ¡á ¿º ¡¿σ - ó«º¼«ª¡«ßΓ∞
  1301.      ¿ß»«½∞º«óá¡¿∩ «¬¡á ñ½∩ óó«ñá ¿ ¼«ñ¿Σ¿¬áµ¿¿  »α«¿ºó«½∞¡«ú« ΓѬßΓá.
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.                                  âïÇéÇ 9
  1308.                                  -------
  1309.  
  1310.                          Ä¬«¡¡δ⌐ ΓѬßΓ«óδ⌐ αÑñá¬Γ«α
  1311.      -----------------------------------------------------------------
  1312.  
  1313.           é   â½áóÑ   8    «íßπªñὫß∞   »α¿¼Ñ¡Ñ¡¿Ñ    ó¿ñÑ««¬«¡   ñ½∩
  1314.      ¿ß»«½∞º«óá¡¿∩  óó«ñá ñá¡¡δσ ó »«½∩ Σ«α¼«-«α¿Ñ¡Γ¿α«óá¡¡«ú« Φáí½«¡á
  1315.      óó«ñá ñá¡¡δσ. àßΓÑßΓóÑ¡¡«, τΓ«  ¡Ñ  óßÑ »«½∩ ñá¡¡δσ ¿¼ÑεΓ ºáαá¡ÑÑ
  1316.      «»αÑñѽѡ¡δ⌐, Σ¿¬ß¿α«óá¡¡δ⌐ Σ«α¼áΓ.  î¡«ú¿Ñ  »«½∩ ¿ Σá⌐½δ ß«ßΓ«∩Γ
  1317.      ¿º ΓѬßΓ«ó ßó«í«ñ¡«⌐, ¡Ñ«»αÑñѽѡ¡«⌐  Σ«α¼δ ¿ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿,
  1318.      ¡á»α¿¼Ñα, ß½«óá ó ¬¡¿úÑ ¿½¿  ¬«¼¼Ñ¡Γáα¿¿  ¬  »α«úαá¼¼Ñ. ÆÑ¬ßΓ«óδÑ
  1319.      »α«µÑßß«αδ ¿ αÑñá¬Γ«αδ ΓѬßΓ«ó »«ºó«½∩εΓ óá¼ ßΓα«¿Γ∞    ΓѬßΓ«óδÑ
  1320.      Σá⌐½δ,  ¿ú¡«α¿απ∩ Σ«α¼áΓ ¿ßσ«ñ¡δσ ñá¡¡δσ (ΓѬßΓá),   «ñ¡á¬«, Ñß½¿
  1321.      óδ ß«ºñáÑΓÑ  ñÑ⌐ßΓó¿Γѽ∞¡«  ¿¡ΓÑúα¿α«óá¡¡πε  ß¿ßΓѼπ , Γ«  ñ«ßΓπ»
  1322.      ¬ Σπ¡¬µ¿∩¼  óó«ñá ΓѬßΓá  ó óáΦπ  »α«úαá¼¼π ¿  Ñú« αÑñá¬Γ¿α«óá¡¿Ñ
  1323.      ¼«ªÑΓ  óá¼  »«¡áñ«í¿Γ∞ß∩  ¡Ñ»«ßαÑñßΓóÑ¡¡«  ¿º   óáΦÑ⌐  »α¿¬½áñ¡«⌐
  1324.      »α«úαá¼¼δ.
  1325.  
  1326.           ¥Γá   ú½áóá   ∩ó½∩ÑΓß∩   »αÑñóáα¿Γѽ∞¡δ¼  «»¿ß᡿Ѽ «¬«¡¡«ú«
  1327.  
  1328.                              - 35 -
  1329.      ΓѬßΓ«ó«ú«  αÑñá¬Γ«αá,  ¬«Γ«αδ⌐ ¿ß»«½∞ºπÑΓ ó¿ñÑ««¬¡á  ñ½∩ óó«ñá ¿
  1330.      ¼«ñ¿Σ¿¬áµ¿¿  ΓѬßΓá  Γ«τ¡«  Γᬠ ªÑ,   ¬á¬  í«½∞Φ¿¡ßΓó«  »α«úαá¼¼
  1331.      αÑñá¬Γ¿α«óá¡¿∩ ΓѬßΓá ¿ ΓѬßΓ«óδσ »α«µÑßß«α«ó.  ¥Γá «Γ½¿τ¿Γѽ∞¡á∩
  1332.      τÑαΓá «¬«¡¡«ú«  αÑñá¬Γ«αá ¿ß»«½∞ºπÑΓß∩  »α¿  ß«ºñá¡¿¿ »α«úαá¼¼¡δσ
  1333.      ß¿ßΓѼ, ó ¬«Γ«αδσ ΓαÑíπÑΓß∩ óó«ñ ΓѬßΓá »α«¿ºó«½∞¡«⌐ Σ«α¼δ. Åá¬ÑΓ
  1334.      Sidekick ∩ó½∩ÑΓß∩ »α¿¼Ñα«¼  ß¿ßΓѼδ,  ó ¬«Γ«α«⌐ ¿¼ÑÑΓß∩ ßσ«ñ¡δ⌐ ß
  1335.      αáßß¼áΓα¿óáÑ¼δ¼ ó φΓ«⌐ ú½áóÑ αÑñá¬Γ«α ΓѬßΓ«ó.  Åα¿¼Ñα »α«úαá¼¼δ,
  1336.      »αÑñßΓáó½Ñ¡¡δ⌐  ó  φΓ«⌐  ú½áóÑ,  ó»«½¡Ñ  ¼«ªÑΓ  ¿ß»«½∞º«óáΓ∞ß∩  ó
  1337.      ¬áτÑßΓóÑ  αÑñá¬Γ«αá ΓѬßΓ«ó  ó  ß¿ßΓѼáσ  Γ¿»á  Sidekick. Ä¬«¡¡δ⌐
  1338.      ΓѬßΓ«óδ⌐  αÑñá¬Γ«α  ¼«ªÑΓ  ΓᬪѠ »α¿¼Ñ¡∩Γ∞ß∩  ó  ß¿ßΓѼáσ óó«ñá
  1339.      ñá¡¡δσ,   ¬«úñá  ΓαÑíπÑΓß∩   óóÑßΓ¿  ó   ¬áτÑßΓóÑ   ñá¡¡δσ  ΓѬßΓ
  1340.      »α«¿ºó«½∞¡«⌐  Σ«α¼δ,  ºá¡¿¼áεΘ¿⌐  í«½ÑÑ «ñ¡«⌐  ßΓ᫬¿. Åਪ½áñ¡á∩
  1341.      »α«úαá¼¼á  Γ¿»á  »α«úαá¼¼δ  óó«ñá  ñá¡¡δσ  ó  ºáñá¡¡«¼  »«α∩ñ¬Ñ ß
  1342.      »«¼«Θ∞ε Φáí½«¡á óó«ñá ñá¡¡δσ  ¿º â½áóδ 8  ¼«ªÑΓ »«ΓαÑí«óáΓ∞ óó«ñá
  1343.      »«½∩,  ß«ñÑαªáΘÑú« «»¿ßáΓѽ∞¡δ⌐ ΓѬßΓ. ¥Γ« ΓαÑí«óá¡¿Ñ ¼«ª¡« ½Ñú¬«
  1344.      αÑ὿º«óáΓ∞,  »α¿¼Ñ¡∩∩  «¬«¡¡δ⌐ ΓѬßΓ«óδ⌐  αÑñá¬Γ«α.  î¡«ú¿Ñ íáºδ
  1345.      ñá¡¡δσ   «»Ñα¿απεΓ   ß   ñá¡¡δ¼¿,   σáαá¬ΓÑਧπεΘ¿¼¿ß∩   ¡á½¿τ¿Ñ¼
  1346.      »«∩ß¡∩εΘÑú«  ¿σ  ΓѬßΓá,   αẽ¿τ¡δσ  «»¿ßá¡¿⌐  ¿½¿  «»αÑñѽѡ¡«⌐
  1347.      ΓÑନ¡«½«ú¿¿ »αÑñ¼ÑΓ¡«⌐ «í½áßΓ¿. Åα¿ ¿ß»«½∞º«óá¡¿¿ Φáí½«¡«ó óó«ñá
  1348.      ñá¡¡δσ  »«½∩  ñá¡¡δσ  Γᬫú« Γ¿»á ¼«úπΓ ß  πß»Ñσ«¼ «íαáíáΓδóáΓ∞ß∩
  1349.      «¬«¡¡δ¼  αÑñá¬Γ«α«¼.   óδ  ΓᬪѠ ¼«ªÑΓÑ  ¿ß»«½∞º«óáΓ∞  ΓѬßΓ«óδ⌐
  1350.      αÑñá¬Γ«α ñ½∩ »«ñú«Γ«ó¬¿ ΓѬßΓ«ó help-«¬«¡ ó óáΦÑ⌐ »α«úαἼѠ»πΓѼ
  1351.      «íαáí«Γ¬¿ Σá⌐½á «»¿ßá¡¿⌐ help-«¬«¡, «»¿ßá¡¡«ú« ó â½áóÑ 7.
  1352.  
  1353.           ä½∩ ¿ß»«½∞º«óá¡¿∩  ΓѬßΓ«ó«ú«  αÑñá¬Γ«αá  »α«úαἼᠠó¡áτá½Ñ
  1354.      πßΓá¡áó½¿óáÑΓ «¬¡«,  á ºáΓѼ αѺÑαó¿απÑΓ íπΣÑα,  ó ¬«Γ«α«¼  íπñπΓ
  1355.      σαá¡¿Γ∞ß∩   ¿  αÑñá¬Γ¿α«óáΓ∞ß∩  ñá¡¡δÑ,  óó«ñ¿¼δÑ  »«½∞º«óáΓѽѼ.
  1356.      ÆÑ¬ßΓ«óδ⌐   íπΣÑα   αÑñá¬Γ«αá    »αÑñßΓáó½∩ÑΓ    ß«í«⌐    ¼áßß¿ó,
  1357.      αѺÑαó¿απεΘ¿⌐  »á¼∩Γ∞,  ñ«ßΓáΓ«τ¡πε  ñ½∩  σαá¡Ñ¡¿∩ Σ¿¬ß¿α«óá¡¡«ú«
  1358.      τ¿ß½á  ßΓ᫬,  ¬áªñá∩  ¿º  ¬«Γ«αδσ  αáó¡á  Φ¿α¿¡Ñ  «í½áßΓ¿  «¬¡á,
  1359.      «Γó«ñ¿¼«⌐  ñ½∩ óó«ñá ¿ αÑñá¬Γ¿α«óá¡¿∩ ΓѬßΓá.  ìá»α¿¼Ñα,  Ñß½¿ óδ
  1360.      πßΓᡫ󿽿 Φ¿α¿¡π «¬¡á ó 42  ß¿¼ó«½á,  Γ«  «í½áßΓ∞  ΓѬßΓá  íπñÑΓ
  1361.      ¿¼ÑΓ∞ Φ¿α¿¡π 40 ß¿¼ó«½«ó (αἬᠫ¬¡á ºá¡¿¼áÑΓ 2 »«º¿µ¿¿). àß½¿ óδ
  1362.      ó φΓ«¼ ß½πτáÑ «Γóѽ¿ »«ñ íπΣÑα 4000 ß¿¼ó«½«ó (ñ½¿¡á  ¼áßß¿óá), Γ«
  1363.      αÑñá¬Γ«α   ß¼«ªÑΓ  «íαáíáΓδóáΓ∞  «ñ¡«óαѼѡ¡«  Γ«½∞¬«  100  ßΓ᫬
  1364.      ΓѬßΓá,  Γᬠ¬á¬ íπΣÑα ¼«ªÑΓ ß«ñÑαªáΓ∞ ¡Ñ í«½ÑÑ 100 ßΓ᫬  ΓѬßΓá
  1365.      »«  40  ß¿¼ó«½«ó  ó  ßΓ᫬Ñ.  Åα¿  óó«ñÑ  »«½∞º«óáΓѽѼ ΓѬßΓá «¡
  1366.  
  1367.                              - 36 -
  1368.      ¡á¬á»½¿óáÑΓß∩ ó íπΣÑαÑ íѺ ß»Ñµ¿á½∞¡δσ ß¿¼ó«½«ó ¡«ó«⌐ ßΓ᫬¿ (\n)
  1369.      ¿ Γáíπ½∩µ¿¿ (\t).
  1370.  
  1371.           àß½¿ ΓѬßΓ«óδ⌐ íπΣÑα πªÑ ß«ñÑαª¿Γ ΓѬßΓ, ¬«Γ«αδ⌐ íδ½ ºá¡ÑßÑ¡
  1372.      ó ¡Ñú« »α¿ »Ñαó«¼ «íαáΘÑ¡¿¿ ¬ αÑñá¬Γ«απ,  Γ«  φëà ßΓáαδ⌐  ΓѬßΓ
  1373.      «Γ«íαáªáÑΓß∩ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩ ó ó¿ñÑ ßΓ᫬ Σ¿¬ß¿α«óá¡¡«⌐ ñ½¿¡δ ó
  1374.      ß««ΓóÑΓßΓó¿¿ ß «»¿ß᡿Ѽ «¬¡á.
  1375.  
  1376.  
  1377.                   è«¼á¡ñδ ΓÑßΓ«ó«ú« αÑñá¬Γ«αá
  1378.      -----------------------------------------------------------------
  1379.  
  1380.           ÆÑ¬ßΓ«óδ⌐ αÑñá¬Γ«α    ß«ñÑαª¿Γ    »«½¡δ⌐    ¡áí«α     ¬«¼á¡ñ
  1381.      αÑñá¬Γ¿α«óá¡¿∩.  è«¼á¡ñδ  ßóÑñÑ¡δ  ó  «ñ¿¡  »ÑαÑτÑ¡∞ ¿ ¼«úπΓ íδΓ∞
  1382.      «Γ«íαáªÑ¡δ ¡á φ¬αá¡Ñ ñ¿ß»½Ñ∩ ó ó¿ñÑ,  »αÑñßΓáó½Ñ¡¡«¼  ¡á  α¿ßπ¡¬Ñ
  1383.      9.1.   é   »α«Φ½«⌐  ú½áóÑ  íδ½á  αáßß¼«Γαѡᠠ»α«úαá¼¼á,  ¬«Γ«αá∩
  1384.      ¿ß»«½∞º«óá½á help-«¬¡« ñ½∩ óδñáτ¿ αẽ¿τ¡«⌐ ¿¡Σ«α¼áµ¿¿. Help-«¬¡«
  1385.      «Γ«íαáªáÑΓß∩  »α¿  ¡áªáΓ¿¿  ¬½áó¿Φ¿  <F1>.  Æ«τ¡«  Γᬫ⌐ ªÑ »α¿Ñ¼
  1386.      ¿ß»«½∞ºπÑΓß∩ ñ½∩ «Γ«íαáªÑ¡¿∩ ¡áí«αá ¬«¼á¡ñ αÑñá¬Γ«αá. ü«½∞Φ¿¡ßΓó«
  1387.      ¿º ¬«¼á¡ñ αÑñá¬Γ¿α«óá¡¿∩ ºá¬αÑ»½Ñ¡« ºá Σπ¡¬µ¿«¡á½∞¡δ¼¿ ¬½áó¿ΦἿ,
  1388.      «ßΓá½∞¡δÑ ¿ß»«½∞ºπεΓ ¬«¼í¿¡áµ¿¿ ¬½áó¿Φ <Ctrl> ¿½¿ <ALT> ß ñαπú¿¼¿
  1389.      ¬½áó¿ΦἿ. ì¿ªÑ íπñπΓ αáßß¼«ΓαÑ¡δ óßÑ ¬«¼á¡ñδ «¬«¡¡«ú« ΓѬßΓ«ó«ú«
  1390.      αÑñá¬Γ«αá.
  1391.  
  1392.      ┌───────────────────────────────────────────────────────────────┐
  1393.      │┌─────────────────────────────────────────────────────────┐    │
  1394.      ││──────Cursor Movement──────────────Page Movement──────── │    │
  1395.      ││arrows = move text cursor  Ctrl-Home = Beginning of File │    │
  1396.      ││Ctrl-T = Top of Window     Ctrl-End  = End of File       │    │
  1397.      ││Ctrl-B = Bottom of Window  PgUp      = Previous Page     │    │
  1398.      ││Ctrl ->= Next Word         PgDn      = Next Page         │    │
  1399.      ││Ctrl <-= Previons Word                                   ├┐   │
  1400.      ││Home   = Beginning of Line ────────Editor control─────── ││   │
  1401.      ││End    = End of Line       Scroll Lock = No Auto Reform  ││   │
  1402.      ││                                                         ││   │
  1403.      ││                                                         ││   │
  1404.      ││───────Block controls───────────────Edit commands─────── ││   │
  1405.  
  1406.                              - 37 -
  1407.      ││F4  = Form Paragraph       F2 or Esc = Done              ││   │
  1408.      ││F5  = Mark Block Beginning F3        = Erase File        ││   │
  1409.      ││F6  = Mark Block End       Ins       = Togle Insert Mode ││   │
  1410.      ││F7  = Move Block           Del       = Delete Char       ││   │
  1411.      ││F8  = Copy Block           <--       = Rubout            ││   │
  1412.      ││F9  = Delete Block         Ctrl-D    = Delete Word       ││   │
  1413.      ││F10 = Unmark Block         Alt-D     = Delete Line       ├┘   │
  1414.      ││ [Help] to return                                        │    │
  1415.      │└─────────────────────────────────────────────────────────┘    │
  1416.      │                                                               │
  1417.      │                                                               │
  1418.      │                                                               │
  1419.      └───────────────────────────────────────────────────────────────┘
  1420.  
  1421.                É¿ß. 9.1. è«¼á¡ñδ ΓѬßΓ«ó«ú« αÑñá¬Γ«αá
  1422.  
  1423.  
  1424.                        ô»αáó½Ñ¡¿Ñ ¬παß«α«¼
  1425.      -----------------------------------------------------------------
  1426.  
  1427.           êß»«½∞ºπ∩ ¬½áó¿Φ¿ π»αáó½Ñ¡¿∩ ¬παß«α«¼,  Ñú« ¼«ª¡« »ÑαѼÑΘáΓ∞
  1428.      »« óßѼπ φ¬αá¡π.  àß½¿ óδ »ÑαѼÑßΓ¿½¿ ¬παß«α ó ¡áτὫ ¿½¿ ó ¬«¡Ñµ
  1429.      φ¬αá¡á  ¿  »α«ñ«½ªáÑΓÑ ¡áª¿¼áΓ∞ ¬½áó¿Φπ »ÑαѼÑΘÑ¡¿∩ ¬παß«αá óóÑασ
  1430.      (¿½¿ ó¡¿º), Γ« ΓѼ ßá¼δ¼ óδ ¿¡¿µ¿¿απÑΓÑ ß¬α«½½¿¡ú ΓѬßΓá, ¬«Γ«αδ⌐
  1431.      íπñÑΓ »α«ñ«½ªáΓ∞ß∩ ñ« ñ«ßΓ¿ªÑ¡¿∩ ¡áτá½á (¬«¡µá) íπΣÑαá ñá¡¡δσ.
  1432.  
  1433.        - <Ctrl/Æ>  ¿ <Ctrl/é> »ÑαѼÑΘáεΓ íπΣÑα ó ¡áτὫ ¿ ¬«¡Ñµ φ¬αá¡á;
  1434.  
  1435.        - <Ctrl/(¬παß«α  ó»αáó«)> »ÑαѼÑΘáÑΓ ¬παß«α ó ¡áτὫ ß½ÑñπεΘÑú«
  1436.                ß½«óá ó íπΣÑαÑ σαá¡Ñ¡¿∩ ΓѬßΓá;
  1437.  
  1438.        - <Ctrl/(¬παß«α ó½Ñó«)> »ÑαѼÑΘáÑΓ ¬παß«α ó  ¡áτὫ »αÑñδñπΘÑú«
  1439.                ß½«óá ó íπΣÑαÑ σαá¡Ñ¡¿∩ ΓѬßΓá;
  1440.  
  1441.        - <¬παß«α  ó  ¡áτὫ  φ¬αá¡á>  »«º¿µ¿«¡¿απÑΓ  ¬παß«α  ó  ¡áτὫ
  1442.                ΓѬπΘÑ⌐ ßΓ᫬¿;
  1443.  
  1444.  
  1445.                              - 38 -
  1446.        - <èÄì> »«º¿µ¿«¡¿απÑΓ ¬παß«α ó ¬«¡Ñµ ΓѬπΘÑ⌐ ßΓ᫬¿;
  1447.  
  1448.        - <ÆÇü> »ÑαѼÑΘáÑΓ ¬παß«α ¬ ß½ÑñπεΘÑ⌐ »«º¿µ¿¿ Γáíπ½∩µ¿¿;
  1449.  
  1450.        - <ÉàâêæÆÉ/ÆÇü> »ÑαѼÑΘáÑΓ ¬παß«α ¬ »αÑñδñπΘÑ⌐ »«º¿µ¿¿
  1451.                Γáíπ½∩µ¿¿.
  1452.  
  1453.  
  1454.                        Å«ßΓαá¡¿τ¡á∩ αáí«Γá
  1455.      -----------------------------------------------------------------
  1456.  
  1457.           - <æΓαá¡¿µá  óóÑασ>  ¿  <æΓαá¡¿µá  ó¡¿º> »ÑαѼÑΘáÑΓ ΓѬßΓ ¡á
  1458.                 ßΓαá¡¿µπ ó»ÑαÑñ ¿½¿ ¡áºáñ;
  1459.  
  1460.           - <Ctrl/(¬παß«α ó ¡áτὫ  φ¬αá¡á)>  πßΓá¡áó½¿óáÑΓ  ΓѬßΓ  ¡á
  1461.                »Ñαóπε  ßΓαá¡¿µπ,  »«º¿µ¿«¡¿απ∩ ¬παß«α ó »Ñαó«⌐ »«º¿µ¿¿
  1462.                »Ñαó«⌐ ßΓ᫬¿ ΓѬßΓá;
  1463.  
  1464.           - <Ctrl/èÄì> πßΓá¡áó½¿óáÑΓ ΓѬßΓ  ¡á  »«ß½Ññ¡εε  ßΓαá¡¿µπ  ó
  1465.                íπΣÑαÑ  ¿ »«º¿µ¿«¡¿απÑΓ ¬παß«α ó »Ñαó«⌐ »«º¿µ¿¿ ßΓ᫬¿,
  1466.                ¬«Γ«αá∩ ß½ÑñπÑΓ ºá »«ß½Ññ¡Ñ⌐ ßΓ᫬«⌐ ΓѬßΓá ó íπΣÑαÑ.
  1467.  
  1468.  
  1469.  
  1470.                     è«¼á¡ñδ αáí«Γδ ß í½«¬á¼¿ ΓѬßΓá
  1471.      -----------------------------------------------------------------
  1472.  
  1473.           ÆÑ¬ßΓ«óδ⌐ αÑñá¬Γ«α  ¿¼ÑÑΓ  ó  ßó«Ñ¼ ß«ßΓáóÑ ¬«¼á¡ñδ αáí«Γδ ß
  1474.      í½«¬á¼¿ ΓѬßΓá.  ¥Γ¿  ¬«¼á¡ñδ  »«ºó«½∩εΓ  «»Ñα¿α«óáΓ∞  ß  í½«¬á¼¿
  1475.      ΓѬßΓ«ó, ¬«Γ«αδÑ «»αÑñÑ½Ñ¡δ «úαá¡¿τ¿Γѽ∞¡δ¼¿ ½¿¡¿∩¼¿.
  1476.  
  1477.           - <F4> Σ«α¼¿απÑΓ »áαáúαáΣ ¿º ΓѬßΓá, »«¼ÑτÑ¡¡«ú« ¬á¬ í½«¬;
  1478.  
  1479.           - <F5> »«¼ÑτáÑΓ   »Ñαóπε  ßΓ᫬π  í½«¬á.  æΓα«¬á  ΓѬßΓá,  ó
  1480.                  ¬«Γ«α«⌐ ¡áσ«ñ¿Γß∩ ¬παß«α,  ßΓá¡«ó¿Γß∩ »Ñαó«⌐  ßΓ᫬«⌐
  1481.                  í½«¬á.  ÆÑ¬ßΓ, «íαáºπεΘ¿⌐ í½«¬, «Γ«íαáªáÑΓß∩ ó µóÑΓÑ,
  1482.                  «»αÑñѽ∩Ѽ«¼ º¡áτÑ¡¿Ñ¼ »áαá¼ÑΓαá ACCENT  ñ½∩  ñá¡¡«ú«
  1483.  
  1484.                              - 39 -
  1485.                  «¬¡á;
  1486.  
  1487.           - <F6> »«¼ÑτáÑΓ »«ß½Ññ¡εε ßΓ᫬π í½«¬á ΓѬßΓá;
  1488.  
  1489.           - <F7> »ÑαѼÑΘáÑΓ   óÑß∞  í½«¬  ΓѬßΓá  ¬  ßΓα«¬Ñ ΓѬßΓá,  ó
  1490.                  ¬«Γ«α«⌐   αáß»«½«ªÑ¡   ó   ñá¡¡δ⌐   ¼«¼Ñ¡Γ    ¬παß«α.
  1491.                  ÅÑαѼÑΘÑ¡¿Ñ  í½«¬á  »α«¿ßσ«ñ¿Γ  íѺ  Ñú«  αáºαπΦÑ¡¿∩;
  1492.                  »α«ßΓαá¡ßΓó«   ñ½∩   αẼÑΘÑ¡¿∩   í½«¬á    óδñѽ∩ÑΓß∩
  1493.                  áóΓ«¼áΓ¿τÑ߬¿;
  1494.  
  1495.           - <F8> ¬«»¿απÑΓ  í½«¬ ¬ ΓѬπΘÑ⌐ ßΓα«¬Ñ ΓѬßΓá.  ÄΓ½¿τ¿Ñ φΓ«⌐
  1496.                  ¬«¼á¡ñδ «Γ »αÑñδñπΘÑ⌐ ó Γ«¼, τΓ« ¡áßΓ«∩Θá∩ ¬«¼á¡ñá ¡Ñ
  1497.                  »α¿ó«ñ¿Γ  ¬ αáºαπΦÑ¡¿ε í½«¬á-«α¿ú¿¡á½á ¡á Ñú« »αѪ¡Ñ¼
  1498.                  ¼ÑßΓ«αáß»«½«ªÑ¡¿¿ ó ΓѬßΓÑ.
  1499.  
  1500.           - <F9> π¡¿τΓ«ªáÑΓ   í½«¬.  æΓ᫬¿   ΓѬßΓá,   ß½ÑñπεΘ¿Ñ   ºá
  1501.                  πñá½Ñ¡¡δ¼   í½«¬«¼,   »ÑαѼÑΘáεΓß∩   óóÑασ,  ºá»«½¡∩∩
  1502.                  «ßó«í«ñ¿óΦÑÑß∩ »α«ßΓαá¡ßΓó« ó ΓѬßΓÑ;
  1503.  
  1504.           - <F10> «Γ¼Ñ¡∩ÑΓ ¼áનα«ó¬π Σαáú¼Ñ¡Γá ΓѬßΓá ¬á¬ í½«¬á.
  1505.  
  1506.  
  1507.  
  1508.                      è«¼á¡ñδ αÑñá¬Γ¿α«óá¡¿∩
  1509.      -----------------------------------------------------------------
  1510.  
  1511.           Å«ß½Ñ Γ«ú«,  ¬á¬  óδ  óóѽ¿  ΓѬßΓ ¿ «ßπΘÑßΓ󿽿 »ÑαѼÑΘÑ¡¿Ñ
  1512.      ¬παß«αá, αÑñá¬Γ«α áóΓ«¼áΓ¿τÑ߬¿ »ÑαÑΣ«α¼áΓ¿απÑΓ ΓѬπΘ¿⌐ »áαáúαáΣ.
  1513.      ÉÑñá¬Γ«α   «»αÑñѽ∩ÑΓ   »áαáúαáΣ   ¬á¬   úαπ»»π   ßΓ᫬   ΓѬßΓá,
  1514.      ¡áτ¿¡áεΘπεß∩   ß   »Ñαó«⌐   ßΓ᫬¿,   ß«ßΓ«∩ΘÑ⌐   ¿º    »α«íѽ«ó.
  1515.      ÅÑαÑΣ«α¼áΓ¿α«óá¡¿Ñ  »áαáúαáΣ«ó  ¼«ªÑΓ  »«ñáó½∩Γ∞ß∩  »πΓѼ ¡áªáΓ¿∩
  1516.      »ÑαÑτ¿ß½Ñ¡¡δσ ¡¿ªÑ ¬½áó¿Φ ó αѪ¿¼Ñ (Scroll Lock):
  1517.  
  1518.           - <F3> π¡¿τΓ«ªáÑΓ óÑß∞ ΓѬßΓ, σαá¡∩Θ¿⌐ß∩ ó íπΣÑαÑ "諼á¡ñá".
  1519.               è«¼á¡ñá ΓαÑíπÑΓ »«ñΓóÑαªñÑ¡¿∩;
  1520.  
  1521.           - <INS>  »ÑαѬ½ετáÑΓ αѪ¿¼δ αáí«Γδ αÑñá¬Γ«αá éßΓáó¬á/çá¼Ñ¡á,
  1522.  
  1523.                              - 40 -
  1524.               á ΓᬪѠ ¿º¼Ñ¡∩ÑΓ  Σ«α¼π  ¬παß«αá,  ¿¡ñ¿µ¿απεΘÑú«  αѪ¿¼
  1525.               αáí«Γδ αÑñá¬Γ«α;
  1526.  
  1527.           - <DEL>  π¡¿τΓ«ªáÑΓ  ß¿¼ó«½,  ¡áσ«ñ∩Θ¿⌐ß∩  »«ß½Ñ  ¬παß«αá  ó
  1528.               ΓѬßΓÑ,  »ÑαѼÑΘá∩ óÑß∞ ΓѬßΓ ó ßΓα«¬Ñ ¡á  «ñ¡π  »«º¿µ¿ε
  1529.               ó½Ñó«;
  1530.  
  1531.           - çáí«⌐  <Backspace>  (ñ½¿¡¡á∩ ßΓαѽ¬á ó »αáó«¼ óÑασ¡Ñ¼ πú½π
  1532.               ¬½áó¿áΓπαδ)   π¡¿τΓ«ªáÑΓ   ß¿¼ó«½,   ¡áσ«ñ∩Θ¿⌐ß∩   ½ÑóÑÑ
  1533.               ¬παß«αá,  »ÑαѼÑΘá∩  ßá¼  ¬παß«α ¿ óÑß∞ ß½ÑñπεΘ¿⌐ ºá ¡¿¼
  1534.               ΓѬßΓ ßΓ᫬¿ ¡á «ñ¡π »«º¿µ¿ε ó½Ñó«;
  1535.  
  1536.           - <Ctrl/D>  (<CTRL/D>)  π¡¿τΓ«ªáÑΓ  ß½«ó«,   »ÑαÑñ   ¬«Γ«αδ¼
  1537.               »«º¿µ¿α«óá¡ ¬παß«α;
  1538.  
  1539.           - <ALT/D>   π¡¿τΓ«ªáÑΓ   ßΓ᫬𠠠ΓѬßΓá,   ó   ¬«Γ«α«⌐  íδ½
  1540.               »αÑñóáα¿Γѽ∞¡« »«º¿µ¿α«óá¡ ¬παß«α;
  1541.  
  1542.           - <F2> ¿½¿ <ESC> »α¿ó«ñ¿Γ ¬ óδσ«ñπ ¿º ΓѬßΓ«ó«ú« αÑñá¬Γ«αá ó
  1543.               Γ«τ¬π Ñú« ó맮óá ¿º ú½áó¡«⌐ »α«úαá¼¼δ.
  1544.  
  1545.  
  1546.  
  1547.                 öπ¡¬µ¿∩, αÑ὿ºπεΘá∩ ΓѬßΓ«óδ⌐ αÑñá¬Γ«α
  1548.      -----------------------------------------------------------------
  1549.  
  1550.           ÆÑ¬ßΓ«óδ⌐ αÑñá¬Γ«α  αÑ὿º«óá¡  ó  ó¿ñÑ  «Γñѽ∞¡«⌐  Σπ¡¬µ¿¿,
  1551.      ¬«Γ«απε  ¼«ªÑΓ  óδºóáΓ∞  óáΦá  »α«úαá¼¼á.  ä½∩ ¿ß»«½∞º«óá¡¿∩ φΓ«⌐
  1552.      Σπ¡¬µ¿¿ óδ ñ«½ª¡δ ó¡áτá½Ñ  «αúá¡¿º«óáΓ∞  «¬¡«,  ó  ¬«Γ«α«Ñ  íπñπΓ
  1553.      óó«ñ¿Γ∞ß∩ ¿ ó ¬«Γ«α«¼ íπñπΓ «íαáíáΓδóáΓ∞ß∩ ΓѬßΓ«óδÑ ñá¡¡δÑ.
  1554.  
  1555.        void text_editor (WINDOW *wnd, char *bf, unsigned bsize)
  1556.  
  1557.           ¥Γá Σπ¡¬µ¿∩ «íαáíáΓδóáÑΓ ΓѬßΓ«óδÑ ñá¡¡δÑ, óó«ñ¿¼δѠ󠫬¡« ß
  1558.      »«¼«Θ∞ε  ΓѬßΓ«ó«ú«  αÑñá¬Γ«αá.   ô¬áºáΓѽ∞   wnd   ß»Ñµ¿Σ¿µ¿απÑΓ
  1559.      »αÑñóáα¿Γѽ∞¡«  πßΓá¡«ó½Ñ¡¡«Ñ óἿ «¬¡«.  ô¬áºáΓѽ∞ bf «»αÑñѽ∩ÑΓ
  1560.      ΓѬßΓ«óδ⌐ íπΣÑα, á µÑ½«Ñ τ¿ß½« bsize ß»Ñµ¿Σ¿µ¿απÑΓ αẼÑα íπΣÑαá.
  1561.  
  1562.                              - 41 -
  1563.      è«½¿τÑßΓó« ßΓ᫬ ó íπΣÑαÑ ∩ó½∩ÑΓß∩ Σπ¡¬µ¿Ñ⌐, ºáó¿ß∩ΘÑ⌐ «Γ αẼÑαá
  1564.      íπΣÑαá ¿ αẼÑα«ó (Φ¿α¿¡δ) «¬¡á,  ¬«Γ«αδÑ πßΓá¡áó½¿óáεΓß∩,  ¬«úñá
  1565.      óδ «αúá¡¿ºπÑΓÑ «¬¡«.
  1566.  
  1567.           Åα¿ ó맮óÑ  Σπ¡¬µ¿¿  «¡á «Γ«íαáªáÑΓ ΓѬßΓ,  ¡áτ¿¡á∩ ß »Ñαó«⌐
  1568.      ßΓαá¡¿µδ ¿º ΓѬßΓ«ó«ú« íπΣÑαá,  ¿ »«ºó«½∩ÑΓ  ¬á¬  óó«ñ  ΓѬßΓ«óδσ
  1569.      ñá¡¡δσ,  Γᬠ ¿  óó«ñ  ¬«¼á¡ñ αÑñá¬Γ¿α«óá¡¿∩ ¿ «íαáí«Γ¬¿ ΓѬßΓá ß
  1570.      ¬½áó¿áΓπαδ.  Åα¿ óδσ«ñÑ ¿º ΓѬßΓ«ó«ú«  αÑñá¬Γ«αá  íπΣÑα  ß«ñÑনΓ
  1571.      óóÑñÑ¡¡δ⌐ ¿½¿ ¼«ñ¿Σ¿µ¿α«óá¡¡δ⌐ »«½∞º«óáΓѽѼ ΓѬßΓ.
  1572.  
  1573.  
  1574.                     êßσ«ñ¡δ⌐ ½¿ßΓ¿¡ú: editor.c
  1575.      -----------------------------------------------------------------
  1576.  
  1577.           ï¿ßΓ¿¡ú 9.1  ß«ñÑαª¿Γ  ¿ßσ«ñ¡δ⌐  ΓѬßΓ  «¬«¡¡«ú«  ΓѬßΓ«ó«ú«
  1578.      αÑñá¬Γ«αá.
  1579.  
  1580.      ï¿ßΓ¿¡ú 9.1: editor.c
  1581.  
  1582.      /* ------------------------- editor.c ------------------------ */
  1583.  
  1584.      #include <stdio.h>
  1585.      #include <ctype.h>
  1586.      #include <mem.h>
  1587.      #include <conio.h>
  1588.      #include <alloc.h>
  1589.      #include "twindow.h"
  1590.      #include "keys.h"
  1591.  
  1592.      #define TRUE 1
  1593.      #define FALSE 0
  1594.      #define TAB 4
  1595.      #define NEXTTAB (TAB-(x%TAB))
  1596.      #define LASTTAB (((wwd-1)/TAB)*TAB)
  1597.      #define PREVTAB (((x-1)%TAB)+1)
  1598.      #define curr(x,y) (bfptr+(y)*wwd+(x))
  1599.      #define lineno(y) ((int)(bfptr-topptr)/wwd+(y))
  1600.  
  1601.                              - 42 -
  1602.  
  1603.      extern int VSG;
  1604.      int last_x, last_y;
  1605.      static int wht;
  1606.      static int wwd;
  1607.      static int wsz;
  1608.      static char *topptr;
  1609.      static char *bfptr;
  1610.      static char *lstptr;
  1611.      static int lines;
  1612.      static char *endptr;
  1613.      static int blkbeg;
  1614.      static int blkend;
  1615.      static int inserting;
  1616.      static WINDOW *wnd;
  1617.      static int do_display_text =1;
  1618.  
  1619.      /* ---------- local function prototypes ----------- */
  1620.      void erase_buffer(int *x, int*y);
  1621.      int lastword(int x, int y);
  1622.      void last_char(int *x, int *y);
  1623.      void test_para(int x, int y);
  1624.      int traling_spaces(int);
  1625.      int first_wordlen(int y);
  1626.      void paraform(int x, int y);
  1627.      int blankline(int line);
  1628.      void delete_word(int x, int y);
  1629.      void delete_line(int y);
  1630.      void delete_block(void);
  1631.      void copy_block(int y);
  1632.      void move_block(int y);
  1633.      void mvblock(int y, int moving);
  1634.      void findlast(void);
  1635.      void find_end(int *x, int *y);
  1636.      void carrtn(int *x, int *y, int insert);
  1637.      void backspace(int *x, int *y);
  1638.      void fore_word(int *x, int *y, char *bf);
  1639.  
  1640.                              - 43 -
  1641.      int spaceup(int *x, int *y, char **bf);
  1642.      void back_word(int *x, int *y, char *bf);
  1643.      int spacedn(int *x, int *y, char **bf);
  1644.      void forward(int *x, int *y);
  1645.      int downward(int *y);
  1646.      void upward(int *y);
  1647.      void display_text(void);
  1648.      void disp_line(int y);
  1649.      void insert_line(void);
  1650.  
  1651.      /* ----- Process text entry for a window. ----- */
  1652.      void text_editor(WINDOW *wnd1, char *bf, unsigned bsize)
  1653.      {
  1654.          char *b, *buff;
  1655.          int depart = FALSE, i, c;
  1656.          int x, y, svx, svlw, tx, tabctr = 0;
  1657.  
  1658.          wnd = wnd1;
  1659.          wht = HEIGHT-2;
  1660.          wwd = WIDTH-2;
  1661.          topptr = bfptr = bf;
  1662.          lines = bsize / wwd;
  1663.          endptr = bf + wwd * lines;
  1664.          blkbeg = 0;
  1665.          blkend = 0;
  1666.          inserting = FALSE;
  1667.          x = 0;
  1668.          y = 0;
  1669.          display_text();
  1670.      /* --------- read in text from the keyboard ---------- */
  1671.      findlast();
  1672.      while (TRUE)    {
  1673.          last_x = COL + 1 + x;
  1674.          last_y = ROW + 1 + y;
  1675.          cursor(last_x, last_y);
  1676.          buff = curr(x, y);
  1677.          if (tabctr) {
  1678.  
  1679.                              - 44 -
  1680.              --tabctr;
  1681.              c = ' ';
  1682.          }
  1683.          else    {
  1684.              c = get_char();
  1685.              clear_message();
  1686.          }
  1687.          switch (c)  {
  1688.              case '\r': carrtn(&x, &y, inserting);
  1689.                         break;
  1690.              case DN:  downward(&y);
  1691.                         break;
  1692.              case PGUP: y = 0;
  1693.                         for (i = 0; i < wht; i++)
  1694.                             upward(&y);
  1695.                         break;
  1696.              case PGDN: y = HEIGHT - 2;
  1697.                         for (i = 0; i < wht; i++)
  1698.                             downward(&y);
  1699.                         y = 0;
  1700.                         break;
  1701.              case '\t': if (x + NEXTTAB < wwd)  {
  1702.                             if (inserting)
  1703.                                 tabctr = NEXTTAB;
  1704.                             else
  1705.                                 x += NEXTTAB;
  1706.                          }
  1707.                          else
  1708.                              carrtn(&x, &y, inserting);
  1709.                          break;
  1710.              case SHIFT_HT:
  1711.                          if (x < TAB )    {
  1712.                              upward(&y);
  1713.                              x = LASTTAB;
  1714.                             }
  1715.                             else
  1716.                                 x -= PREVTAB;
  1717.  
  1718.                              - 45 -
  1719.                             break;
  1720.  
  1721.                 case CTRL_FWD:
  1722.                             fore_word(&x, &y, buff);
  1723.                             break;
  1724.                 case CTRL_BS:
  1725.                             back_word(&x, &y, buff);
  1726.                             break;
  1727.                 case CTRL_B:
  1728.                             y = wht - 1;
  1729.                             break;
  1730.                 case CTRL_T:
  1731.                             y = 0;
  1732.                             break;
  1733.                 case CTRL_HOME:
  1734.                             x = y = 0;
  1735.                             bfptr = topptr;
  1736.                             display_text();
  1737.                             break;
  1738.                 case HOME:  x = 0;
  1739.                             break;
  1740.                 case CTRL_END:
  1741.                             find_end(&x, &y);
  1742.                             display_text();
  1743.                             break;
  1744.                 case END:   last_char(&x, &y);
  1745.                             break;
  1746.  
  1747.                 case UP:    upward(&y);
  1748.                             break;
  1749.  
  1750.  
  1751.                 case F2:
  1752.                 case ESC:   depart = TRUE;
  1753.                             break;
  1754.                 case '\b':
  1755.                 case BS:    if (curr(x, y) == topptr)
  1756.  
  1757.                              - 46 -
  1758.                             break;
  1759.                             backspace(&x, &y);
  1760.                             if (x == wwd - 1)
  1761.                                 last_char(&x, &y);
  1762.                             if (c == BS)
  1763.                                 break;
  1764.                             buff = curr(x, y);
  1765.                 case DEL:   movmem(buff+1, buff, wwd-1-x);
  1766.                             *(buff+wwd-1-x) = ' ';
  1767.                             disp_line(y);
  1768.                             test_para(x+1, y);
  1769.                             break;
  1770.                 case ALT_D: delete_line(y);
  1771.                             break;
  1772.                 case INS:   inserting ^= TRUE;
  1773.                             insert_line();
  1774.                             break;
  1775.                 case F3:    erase_buffer(&x, &y);
  1776.                             break;
  1777.                 case F4:    paraform(0, y);
  1778.                             break;
  1779.                 case F5:    blkbeg = lineno(y) + 1;
  1780.                             if (blkbeg > blkend)
  1781.                                 blkend = lines;
  1782.                             display_text();
  1783.                             break;
  1784.                 case F6:    blkbeg = lineno(y) + 1;
  1785.                             if (blkbeg < blkend)
  1786.                                 blkend = 1;
  1787.                             display_text();
  1788.                             break;
  1789.                 case F7:    move_block(y);
  1790.                             break;
  1791.                 case F8:    copy_block(y);
  1792.                             break;
  1793.                 case F9:    delete_block();
  1794.                             break;
  1795.  
  1796.                              - 47 -
  1797.                 case F10:   blkbeg = blkend = 0;
  1798.                             display_text();
  1799.                             break;
  1800.                 case FWD:   forward(&x, &y);
  1801.                             break;
  1802.                 default:    if (!isprint(c))
  1803.                                 break;
  1804.                             if (curr(x, y) == endptr-1 ||
  1805.                                (lineno(y)+1 >= lines && inserting
  1806.                                     && *curr(wwd-2, y) != ' ')) {
  1807.                                 error_message(" End of Buffer ");
  1808.                                 break;
  1809.                             }
  1810.                             if (inserting)  {
  1811.                                  buff = curr(x, y);
  1812.                                  movmem(buff, buff + 1, wwd-1-x);
  1813.                             }
  1814.                             buff = curr(x, y);
  1815.                             if (buff < endptr)  {
  1816.                                 if (buff >= lstptr)
  1817.                                     lstptr = buff + 1;
  1818.                                 *buff = c;
  1819.                                 disp_line(y);
  1820.                             }
  1821.                             buff = curr(wwd-1, y);
  1822.                             if (endptr && *buff != ' ') {
  1823.                                 for (b = buff+1; b < endptr; b++)
  1824.                             if (*b==' ' && *(b + 1)==' ')
  1825.                                           break;
  1826.                                 movmem(buff+1, buff+2, b-buff-1);
  1827.                             *(buff+1) = ' ';
  1828.                             svx = x;
  1829.                             svlw = lastword(x, y);
  1830.                             x = wwd-1;
  1831.                             if (*(buff-1) != ' ')
  1832.                                 back_word(&x, &y, buff);
  1833.                                 tx = x;
  1834.  
  1835.                              - 48 -
  1836.                                 carrtn(&x, &y, TRUE);
  1837.                             if (svlw)
  1838.                                 x = svx-tx;
  1839.                             else    {
  1840.                                 x = svx;
  1841.                                 --y;
  1842.                             }
  1843.                       }
  1844.                       forward(&x, &y);
  1845.                       break;
  1846.                }
  1847.                if (depart)
  1848.                break;
  1849.           }
  1850.           inserting = FALSE;
  1851.           insert_line();
  1852.       }
  1853.  
  1854.      /* -------- erase the buffer ---------------- */
  1855.      static void erase_buffer(int *x, int *y)
  1856.      {
  1857.          int c = 0;
  1858.          WINDOW *sur;
  1859.  
  1860.          sur = establish_window(28, 11, 4, 24);
  1861.          set_colors(sur, ALL, RED, YELLOW, BRIGHT);
  1862.          display_window(sur);
  1863.          wprintf(sur, " Erase text window\n Are you sure? (y/n)");
  1864.          while (c != 'y' && c != 'n')    {
  1865.              c = get_char();
  1866.              c = tolower(c);
  1867.              if (c == 'y')   {
  1868.                  lstptr = bfptr =topptr;
  1869.                  *x = *y = 0;
  1870.                  setmem(bfptr, lines * wwd, ' ');
  1871.                  blkbeg = blkend = 0;
  1872.                  display_text();
  1873.  
  1874.                              - 49 -
  1875.              }
  1876.          }
  1877.          delete_window(sur);
  1878.       }
  1879.      /* ----- see if a word is the last word on the line ------ */
  1880.      static int lastword(int x, int y)
  1881.      {
  1882.          char *bf = curr(x, y);
  1883.  
  1884.          while (x++ < wwd-1)
  1885.              if (*bf++ == ' ')
  1886.                  return 0;
  1887.          return 1;
  1888.  
  1889.       }
  1890.      /* str 188 */
  1891.      /* --- go to last displayable character on the line --- */
  1892.      static void last_char(int *x, int *y)
  1893.      {
  1894.          char *bf;
  1895.  
  1896.          *x = wwd-1;
  1897.          bf = curr(0, *y);
  1898.          while(*x && *(bf + *x) == ' ')
  1899.               --(*x);
  1900.          if (*x && *x < wwd-1)
  1901.               (*x)++;
  1902.      }
  1903.  
  1904.      /* ----- test to see if paragraph should be reformed  ----- */
  1905.      static void test_para(int x, int y)
  1906.      {
  1907.          int ts, fw;
  1908.  
  1909.          if(!scroll_lock() && y < lines)    {
  1910.               ts= trailing_spaces(y);
  1911.               fw = fierst_wordlen(y+1);
  1912.  
  1913.                              - 50 -
  1914.               if (fw && ts > fw)
  1915.                    paraform(x, y);
  1916.          }
  1917.      }
  1918.  
  1919.      /* ---- count the trailing spaces on a line ----- */
  1920.      static int trailing_spaces(int y)
  1921.      {
  1922.          int x = wwd-1 ,ct = 0;
  1923.          char *bf=curr(0, y);
  1924.  
  1925.          while (x >= 0)  {
  1926.              if (*(bf + x) != ' ')
  1927.                  break;
  1928.              --x;
  1929.              ct++;
  1930.          }
  1931.          return ct;
  1932.      }
  1933.  
  1934.      /* ----- count the length of the first word on a line --- */
  1935.      static int fiest_wordlen(int y)
  1936.      {
  1937.          int ct = 0, x = 0;
  1938.          char *bf = curr(0, y);
  1939.  
  1940.          while (x < wwd-1 && *(bf+x) == ' ')
  1941.               x++;
  1942.          while (x+ct < wwd-1 && *(bf+x+ct) == ' ')
  1943.               ct++;
  1944.          return ct;
  1945.      }
  1946.  
  1947.      /*----------------- form a paragraph -------------------- */
  1948.      static void paraform(int x, int y)
  1949.      {
  1950.          char *cp1, *cp2, *cpend, *svcp;
  1951.  
  1952.                              - 51 -
  1953.          int x1;
  1954.  
  1955.          if (blankline(lineno(y)+1))
  1956.               return;
  1957.          if (!blkbeg) {
  1958.               blkbeg = blkend = lineno(y)+1;
  1959.               blkend++;
  1960.               while(blkend < lines) {
  1961.                    if (blankline(blkend))
  1962.                         break;
  1963.                    blkend++;
  1964.               }
  1965.               --blkend;
  1966.          }
  1967.          if(lineno(y) != blkend-1 )
  1968.               x=0;
  1969.          x1=x;
  1970.          cp1=cp2=topptr + (blkend-1) * wwd + x;
  1971.          cpend = topptr + blkend * wwd;
  1972.          while(cp2 < cpend){
  1973.               while(*cp2 == ' ' && cp2 < cpend)
  1974.                         cp2++;
  1975.  
  1976.               if(cp2 == cpend)
  1977.                    break;
  1978.               /* at a word */
  1979.               while(*cp2 != ' ' && cp2 < cpend) {
  1980.                    if(x1 >= wwd-1)  {
  1981.                         /* wrap the word */
  1982.                         svcp = cp1 + (wwd - 1);
  1983.                         while(*--cp1 != ' ') {
  1984.                              *cp1 = ' ';
  1985.                              --cp2;
  1986.                         }
  1987.                         x1 = 0;
  1988.                         blkbeg++;
  1989.                         cp1 = svcp;
  1990.  
  1991.                              - 52 -
  1992.                     }
  1993.                     *cp1++ = *cp2++;
  1994.                     x1++;
  1995.                  }
  1996.                  if(cp2 < cpend) {
  1997.                           *cp1++ = ' ';
  1998.                           x1++;
  1999.                  }
  2000.               }
  2001.               while(cp1 < cpend)
  2002.                    *cp1++ = ' ';
  2003.                      blkbeg++;
  2004.               if(blkbeg <= blkend)
  2005.                    delete_block();
  2006.               blkbeg =blkend =0;
  2007.               display_text();
  2008.               findlast();
  2009.          }
  2010.