home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / tp6progg.doc / pg19 < prev    next >
Encoding:
Text File  |  1991-02-04  |  5.9 KB  |  133 lines

  1.                              âïÇéÇ 19.
  2.  
  3.                            ééÄä ê é¢éÄä.
  4.  
  5.                äαá⌐óÑαδ πßΓα«⌐ßΓó ΓѬßΓ«ó«ú« Σá⌐½á.
  6.  
  7.      èᬠ߬áºá¡« ó ú½áóÑ 10 "î«ñπ½∞ System", Turbo Pascal »«ºó«½∩ÑΓ
  8. éá¼  «»αÑñѽ¿Γ∞  éáΦ ß«íßΓóÑ¡¡δ⌐ ñαá⌐óÑα ΓѬßΓ«ó«ú« Σá⌐½á.  äαá⌐óÑα
  9. ΓѬßΓ«ó«ú« Σá⌐½á -  φΓ«  4  Σπ¡¬µ¿¿,  ¬«Γ«αδÑ  »«½¡«ßΓ∞ε  αÑ὿ºπεΓ
  10. ¿¡ΓÑαΣÑ⌐ß ¼Ñªñπ   Σá⌐½«ó«⌐   ß¿ßΓѼ«⌐  Turbo  Pascal  ¿  ¬á¬¿¼-½¿í«
  11. πßΓα«⌐ßΓó«¼.
  12.      äαá⌐óÑα ¡á  ½εí«Ñ  πßΓα«⌐ßΓó« «»αÑñѽ∩ÑΓß∩ 4 Σπ¡¬µ¿∩¼¿:  Open,
  13. InOut, Flush ¿ Close. èáªñá∩ Σπ¡¬µ¿∩ ¿¼ÑÑΓ ºáú«½«ó«¬:
  14.  
  15.      function DeviceFunc(var F : TextRec) : Integer;
  16.  
  17.      úñÑ TextRec - φΓ« Γ¿» ºá»¿ß¿  ΓѬßΓ«ó«ú«  Σá⌐½á,  «»αÑñѽѡ¡δ⌐
  18. αá¡ÑÑ ó  αáºñѽѠ "öá⌐½«óδÑ Γ¿»δ" ó ú½áóÑ 3.  èáªñá∩ Σπ¡¬µ¿∩ ñ«½ª¡á
  19. íδΓ∞ «Γ¬«¼»¿½¿α«óá¡á ó ß«ßΓ«∩¡¿¿ {$F+},  ñ½∩ ¿ß»«½∞º«óá¡¿∩  ñá½∞¡Ñ⌐
  20. ¼«ñѽ¿   ó맮óá.   ç¡áτÑ¡¿Ñ,   ó«ºóαáΘáѼ«Ñ   Σπ¡¬µ¿Ñ⌐,  ßΓá¡«ó¿Γß∩
  21. αѺπ½∞ΓáΓ«¼,  ¬«Γ«αδ⌐ ó«ºóαáΘáÑΓ IOResult.  ç¡áτÑ¡¿Ñ 0  ú«ó«α¿Γ  «í
  22. πß»ÑΦ¡«⌐ «»Ñαᵿ¿.
  23.      ä½∩ ßó∩º¿ Σπ¡¬µ¿⌐ ¿¡ΓÑαΣÑ⌐ßá ß πßΓα«⌐ßΓó«¼ ß  ºáñá¡¡δ¼ Σá⌐½«¼,
  24. éδ ñ«½ª¡δ ¡á»¿ßáΓ∞ ßó«ε »α«µÑñπαπ Assign (¬á¬ »α«µÑñπαá AssignCrt ó
  25. ¼«ñπ½Ñ Crt). Åα«µÑñπαá Assign ñ«½ª¡á »α¿ßóá¿óáΓ∞ áñαÑßá 4-σ Σπ¡¬µ¿⌐
  26. ¿¡ΓÑαΣÑ⌐ßá ß  πßΓα«⌐ßΓó«¼  4-¼  π¬áºáΓѽ∩¼  ¡á Σπ¡¬µ¿¿ ó »ÑαѼѡ¡«⌐
  27. ΓѬßΓ«ó«ú« Σá⌐½á.  ä«»«½¡¿Γѽ∞¡« «¡á  ñ«½ª¡á  ºá»«¼¿¡áΓ∞  ¬«¡ßΓá¡Γπ
  28. fmClosed  ó  »«½Ñ  Mode,  αẼÑα íπΣÑαá ΓѬßΓ«ó«ú« Σá⌐½á ó BufSize,
  29. π¬áºáΓѽ∞ ¡á íπΣÑα ΓѬßΓ«ó«ú« Σá⌐½á ó BufPtr ¿ «τ¿ΘáΓ∞ ßΓ᫬π Name.
  30.      ìá»α¿¼Ñα, »αÑñ»«½«ª¿¼,  τΓ« 4 Σπ¡¬µ¿¿ ¿¡ΓÑαΣÑ⌐ßá ß πßΓα«⌐ßΓó«¼
  31. ¡áºδóáεΓß∩ DevOpen,  DevInOut, DevFlush, DevClose, »α«µÑñπαá Assign
  32. íπñÑΓ:
  33.  
  34.      procedure AssignDev(var F: Text);
  35.      begin
  36.         with TextRec(F) do
  37.         begin
  38.           Mode      := fmClosed;
  39.           BufSize   := SizeOf(Buffer);
  40.           BufPtr    := @Buffer;
  41.           OpenFunc  := @DevOpen;
  42.           InOutFunc := @DevInOut;
  43.           FlushFunc := @DevFlush;
  44.           CloseFunc := @DevClose;
  45.           Name[0]   := #0;
  46.         end;
  47.      end;
  48.  
  49.      öπ¡¬µ¿¿ ¿¡ΓÑαΣÑ⌐ßá  ß  πßΓα«⌐ßΓó«¼  ¼«úπΓ  ¿ß»«½∞º«óáΓ∞   »«½Ñ
  50. UserData ó Σá⌐½«ó«⌐ ºá»¿ß¿ ñ½∩ σαá¡Ñ¡¿∩ ßó«Ñ⌐ ¿¡Σ«α¼áµ¿¿.  ¥Γ« »«½Ñ
  51. ¡¿¬«úñá ¡Ñ ¼«ñ¿Σ¿µ¿απÑΓß∩ Σá⌐½«ó«⌐ ß¿ßΓѼ«⌐ Turbo Pascal.
  52.  
  53.  
  54.                            öπ¡¬µ¿∩ Open.
  55.  
  56.      öπ¡¬µ¿∩ Open   óδºδóáÑΓß∩   ßΓá¡ñáαΓ¡δ¼¿   »α«µÑñπαἿ  Reset,
  57. Rewrite ¿  Append  ñ½∩  «Γ¬αδΓ¿∩  ΓѬßΓ«ó«ú«  Σá⌐½á,  ßó∩ºá¡¡«ú«  ß
  58. πßΓα«⌐ßΓó«¼.  Åα¿  óσ«ñÑ  »«½Ñ  Mode  ß«ñÑαª¿Γ  ¬«¡ßΓá¡Γπ  fmInput,
  59. fmOutput ¿½¿ fmInOut, »«¬áºδóáεΘπε τΓ« Σπ¡¬µ¿∩ Open íδ½á óδºóá¡á ¿º
  60. Reset, Rewrite ¿½¿ Append.
  61.      öπ¡¬µ¿∩ Open ú«Γ«ó¿Γ  Σá⌐½  ñ½∩  óó«ñá  ¿½¿  óδó«ñá,  ß«ú½áß¡«
  62. º¡áτÑ¡¿ε  Mode.  àß½¿  Mode  ºáñáÑΓ  fmInOut  (Open íδ½á óδºóá¡á ¿º
  63. Append), Γ« «¡á ñ«½ª¡á íδΓ∞ ¿º¼Ñ¡Ñ¡á ¡á  fmOutput  ñ«  ó«ºóαáΓá  ¿º
  64. Open.
  65.      Open óßÑúñá óδºδóáÑΓß∩ ñ« ½εí«⌐ ñαπú«⌐  Σπ¡¬µ¿¿  ¿¡ΓÑαΣÑ⌐ßá  ß
  66. πßΓα«⌐ßΓó«¼. Å«  φΓ«⌐  »α¿τ¿¡Ñ  Assign  ¿¡¿µ¿á½¿º¿απÑΓ  Γ«½∞¬« »«½Ñ
  67. OpenFunc,  »αÑñ«ßΓáó½∩∩ ¿¡¿µ¿á½¿ºáµ¿ε  «ßΓá½∞¡δσ  óÑ¬Γ«α«ó  Σπ¡¬µ¿¿
  68. Open.  Äß¡«óδóá∩ß∞  ¡á  º¡áτÑ¡¿¿ Mode,  Open ¼«ªÑΓ ºáΓѼ πßΓá¡«ó¿Γ∞
  69. π¬áºáΓѽ¿ ½¿í« ¡á  Σπ¡¬µ¿¿  óó«ñá,  ½¿í«  ¡á  Σπ¡¬µ¿¿  óδó«ñá.  ¥Γ«
  70. ß«σαá¡∩ÑΓ  Σπ¡¬µ¿¿  InOut,  Flush  ¿  Close «Γ «»αÑñѽѡ¿∩ ΓѬπΘÑú«
  71. αѪ¿¼á.
  72.  
  73.  
  74.                           öπ¡¬µ¿∩ InOut.
  75.  
  76.      öπ¡¬µ¿∩ Inout  óδºδóáÑΓß∩ ßΓá¡ñáαΓ¡δ¼¿ »α«µÑñπαἿ ¿ Σπ¡¬µ¿∩¼¿
  77. Read, Readln, Write, Writeln, Eof, Eoln, SeekEof, SeekEoln ¿ Close,
  78. ¬«úñá ¡Ñ«íσ«ñ¿¼ óó«ñ ¿½¿ óδó«ñ ß φΓ«ú« πßΓα«⌐ßΓóá.
  79.      è«úñá αѪ¿¼  -  fmInput,  Σπ¡¬µ¿∩  InOut  τ¿ΓáÑΓ  ñ«   BufSize
  80. ß¿¼ó«½«ó  ó  BufPtr^  ¿  ó«ºóαáΘáÑΓ  τ¿ß½«  »α«τ¿Γá¡¡δσ  ß¿¼ó«½«ó ó
  81. BufEnd.  ä«»«½¡¿Γѽ∞¡« «¡á πßΓá¡áó½¿óáÑΓ BufPos ó 0.  àß½¿  Σπ¡¬µ¿∩
  82. InOut  ó«ºóαáΘáÑΓ 0 ó BufEnd ó αѺπ½∞ΓáΓÑ ºá»α«ßá ¡á óó«ñ,  Eof ñ½∩
  83. φΓ«ú« Σá⌐½á ßΓá¡«ó¿Γß∩ True.
  84.      è«úñá Mode   -   fmOutput,  Σπ¡¬µ¿∩  InOut  ºá»¿ßδóáÑΓ  BufPos
  85. ß¿¼ó«½«ó ¿º BufPtr^ ¿ ó«ºóαáΘáÑΓ 0 ó BufPos.
  86.  
  87.  
  88.                           öπ¡¬µ¿∩ Flush.
  89.  
  90.      öπ¡¬µ¿∩ Flush óδºδóáÑΓß∩ ó ¬«¡µÑ ¬áªñ«⌐ Read,  Readln,  Write,
  91. Writeln. Ä¡á ¼«ªÑΓ, ¬α«¼Ñ Γ«ú«, óδΓÑß¡∩Γ∞ íπΣÑα ΓѬßΓ«ó«ú« Σá⌐½á.
  92.      àß½¿ Mode  αáó¡«  fmInput,  Σπ¡¬µ¿∩  Flush ¼«ªÑΓ πßΓá¡áó½¿óáΓ∞
  93. BufPos, BufEnd  ó  0  ñ½∩  óδΓὬ¿óá¡¿∩  «ßΓáóΦ¿σß∩   (¡Ñßτ¿Γá¡¡δσ)
  94. ß¿¼ó«½«ó ó íπΣÑα. ¥Γá ó«º¼«ª¡«ßΓ∞ ¿ß»«½∞ºπÑΓß∩ αÑñ¬«.
  95.      àß½¿ Mode  -  fmOutPut,   Σπ¡¬µ¿∩   Flush   ¼«ªÑΓ   ºá»¿ßδóáΓ∞
  96. ß«ñÑন¼«Ñ íπΣÑαá,   Γ«τ¡«   Γᬠ  ªÑ,   ¬á¬   Σπ¡¬µ¿∩  InOut,  τΓ«
  97. úáαá¡Γ¿απÑΓ,  τΓ«  ΓѬßΓ  ºá»¿ßá¡¡δ⌐  ó  πßΓα«⌐ßΓó«,  »«∩ó¿Γß∩   ¡á
  98. πßΓα«⌐ßΓóÑ ¡Ñ¼Ññ½Ñ¡¡«.  àß½¿ Flush ¡¿τÑú« ¡Ñ ñѽáÑΓ, ΓѬßΓ ¡Ñ íπñÑΓ
  99. »ÑαÑñáóáΓ∞ß∩ ¡á πßΓα«⌐ßΓó« ñ« ΓÑσ »«α, »«¬á íπΣÑα ¡Ñ ºá»«½¡¿Γß∩ ¿½¿
  100. »«¬á ¡Ñ ºá¬α«ÑΓß∩ Σá⌐½.
  101.  
  102.  
  103.                           öπ¡¬µ¿∩ Close.
  104.  
  105.      öπ¡¬µ¿∩ Close  óδºδóáÑΓß∩  ßΓá¡ñáαΓ¡«⌐  Σπ¡¬µ¿Ñ⌐   Close   ñ½∩
  106. ºá¬αδΓ¿∩  ΓѬßΓ«ó«ú«  Σá⌐½á,  ßó∩ºá¡¡«ú« ß πßΓα«⌐ßΓó«¼.  (Åα«µÑñπαδ
  107. Reset,  Rewrite ¿ Append ΓᬪѠóδºδóáεΓ Close,  Ñß½¿ Σá⌐½,  ¬«Γ«αδ⌐
  108. «¡¿  «Γ¬αδóáεΓ  πªÑ  «Γ¬αδΓ).  àß½¿ Mode - fmOutPut,  Γ« - Σá⌐½«óá∩
  109. ß¿ßΓѼá Turbo Pascal,  ñ« ó맮óá  Σπ¡¬µ¿¿  Close,  óδºδóáÑΓ  InOut,
  110. τΓ«íδ úáαá¡Γ¿α«óáΓ∞, τΓ« óßÑ ß¿¼ó«½δ í뫨 ºá»¿ßá¡δ ¡á πßΓα«⌐ßΓó«.
  111.  
  112.  
  113.                       Åα∩¼«⌐ ñ«ßΓπ» ¬ »«αΓá¼.
  114.  
  115.      ä½∩ ñ«ßΓπ»á ¬ »«αΓá¼ »α«µÑßß«αá 80σ86,  Turbo Pascal αÑ὿ºπÑΓ
  116. ñóá  »αÑñ«»αÑñѽѡ¡δσ  ¼áßß¿óá  Port  ¿  PortW.  Äíá  -  «ñ¡«¼Ñα¡δÑ
  117. ¼áßß¿óδ,  ¬áªñδ⌐ φ½Ñ¼Ñ¡Γ ¬«Γ«αδσ »αÑñßΓáó½∩ÑΓ  »«αΓ,  »α¿τѼ  áñαÑß
  118. »«αΓá ß««ΓóÑΓßΓóπÑΓ  Ñú«  ¿¡ñѬßπ.  Æ¿»  ¿¡ñѬßá - ß½«ó«.  ¥½Ñ¼Ñ¡Γδ
  119. ¼áßß¿óá Port - Γ¿»á íá⌐Γ ¿ φ½Ñ¼Ñ¡Γδ ¼áßß¿óá PortW - Γ¿»á ß½«ó«.
  120.      è«úñá φ½Ñ¼Ñ¡Γπ  Port  ¿½¿  PortW  »α¿ßóá¿óáÑΓß∩ º¡áτÑ¡¿Ñ,  φΓ«
  121. º¡áτÑ¡¿Ñ ºá»¿ßδóáÑΓß∩ ó π¬áºá¡¡δ⌐  »«αΓ.  è«úñá  φ½Ñ¼Ñ¡Γ  Port  ¿½¿
  122. PortW  ¿ß»«½∞ºπÑΓß∩  ó  óδαáªÑ¡¿¿ - º¡áτÑ¡¿Ñ τ¿ΓáÑΓß∩ ¿º π¬áºá¡¡«ú«
  123. »«αΓá. Åα¿¼Ñαδ:
  124.  
  125.      Port[$20] := $20;
  126.      Port[Base] := Port[Base] xor Mask;
  127.      while Port[$B2] and $80 = 0 do    {«ª¿ñá¡¿Ñ};
  128.  
  129.      îáßß¿óδ Port ¿ PortW ¼«ª¡« ¿ß»«½∞º«óáΓ∞ Γ«½∞¬«  ó »α¿ßóá¿óá¡¿¿
  130. ¿  ó  óδαáªÑ¡¿∩σ,  Γᬿ¼  «íαẫ¼,  φ½Ñ¼Ñ¡Γδ  Port  ¿  PortW ¡Ñ½∞º∩
  131. ¿ß»«½∞º«óáΓ∞  ¬á¬  ¿º¼Ñ¡∩ѼδÑ   »áαá¼ÑΓαδ.   ü«½ÑÑ   Γ«ú«,   ¡Ñ½∞º∩
  132. «íαáΘáΓ∞ß∩ ¬« óßѼπ ¼áßß¿óπ Port ¿½¿ PortW.
  133.