home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / m296.doc / m2jpi.8 < prev    next >
Encoding:
Text File  |  1990-02-23  |  43.2 KB  |  1,096 lines

  1.  
  2.                            îÄäô SYSTEM
  3.                            ==============
  4.  
  5.          î«ñπ½∞ SYSTEM ¿úαáÑΓ «ß«íπε α«½∞ ó ¬«¼»¿½∩Γ«αÑ JPI Modula-2,  Γ.¬.  ß«ñÑαª¿Γ ºáó¿ß∩Θ¿Ñ
  6.     «Γ ¬«¼»¿½∩Γ«αá σáαá¬ΓÑα¿ßΓ¿¬¿ (á ¿¼Ñ¡¡« Ofs ¿ Seg).  äÑ⌐ßΓó¿Γѽ∞¡«, ¡Ñ¬«Γ«αδÑ »α«µÑñπαδ ∩ó-
  7.     ½∩εΓß∩ óßΓα«Ñ¡¡δ¼¿ ó ¬«¼»¿½∩Γ«α,  »«φΓ«¼π ¼«ñπ½∞ ΓᬪѠ¡áºδóáÑΓß∩ pseudo module (»ßÑóñ« ¼«-
  8.     ñπ½∞).
  9.          SYSTEM ΓᬪѠ߫ñÑαª¿Γ Γ¿»δ ñá¡¡δσ, ¬«Γ«αδÑ »αÑñßΓáó½∩εΓ ¿¡ΓÑαÑß ó φΓ«¼ ¬«¡¬αÑΓ¡«¼ »α¿-
  10.     ¼Ñ¡Ñ¡¿¿.
  11.  
  12.          TYPE
  13.            PROCESS   = ADDRESS;
  14.            Registers = RECORD
  15.                 CASE : BOOLEAN OF
  16.                 | TRUE  : AX,BX,CX,DX,BP,SI,DI,DS,ES: CARDINAL;
  17.                           Flags                     : BITSET;
  18.                 | FALSE : AL,AH,BL,BH,CL,CH,DL,DH   : SHORTCARD;
  19.                 END;
  20.               END;
  21.          CONST
  22.            CarryFlag = 0;
  23.            ZeroFlag  = 6;
  24.          VAR
  25.            HeapBase  : CARDINAL ;
  26.                     (* üẫóδ⌐ ßÑú¼Ñ¡Γ ñ¿¡á¼¿τÑ߬«⌐ «í½áßΓ¿ *)
  27.  
  28.          Æ¿» Registers  ¿ß»«½∞ºπÑΓß∩  »α¿ óδñáτÑ ºá»α«ß«ó äÄæá ¿ ó »αÑαδóá¡¿∩σ,  Γ.¬.  ñ«ßΓπ» ¬
  29.     ó¡πΓαÑ¡¡¿¼ αÑú¿ßΓαá¼ »α«µÑßß«αá ¡Ñ«íσ«ñ¿¼ »α¿ «ßπΘÑßΓó½Ñ¡¿¿ φΓ¿σ ñÑ⌐ßΓó¿⌐.
  30.          Æ¿» PROCESS «íΩ∩ß¡∩ÑΓß∩ ¡¿ªÑ.
  31.  
  32.                       ì¿º¬«πα«ó¡ÑóδÑ »α«µÑßßδ
  33.                       -----------------------
  34.  
  35.          Æ.¬. IBM PC/AT (¿ ßαáó¡¿¼δÑ ß ¡¿¼) ∩ó½∩εΓß∩ ¬«¼»¿½∩Γ«α«¼ ß  Ññ¿¡ßΓóÑ¡¡δ¼  »α«µÑßß«α«¼,
  36.     ñÑ⌐ßΓó¿Γѽ∞¡« «ñ¡«óαѼѡ¡δÑ »α«µÑßßδ ¡Ñ ¼«úπΓ íδΓ∞ αÑ὿º«óá¡δ »«ßαÑñßΓó«¼ ß«»α«úαá¼¼.
  37.          æ«»α«úαá¼¼á - φΓ« »«ß½Ññ«óáΓѽ∞¡á∩ »α«úαá¼¼á,  ¬«Γ«αá∩ ¼«ªÑΓ íδΓ∞ »α¿«ßΓá¡«ó½Ñ¡á »πΓѼ
  38.     »ÑαÑñáτ¿ óδ»«½¡Ñ¡¿∩ ñαπú«⌐ ß«»α«úαἼѠ(¬«Γ«αá∩ íπñÑΓ ó«º«í¡«ó½Ñ¡á ß Γ«ú« ¼ÑßΓá,  ó ¬«Γ«α«¼
  39.     «¡á íδ½á αá¡∞ΦÑ »α¿«ßΓá¡«ó½Ñ¡á). è«úñá ß«»α«úαá¼¼á »α¿«ßΓá¡áó½¿óáÑΓß∩, ÑÑ ΓѬπΘÑÑ ß«ßΓ«∩¡¿Ñ
  40.     ß«σαá¡∩ÑΓß∩;  Γᬿ¼ «íαẫ¼,  τΓ« «¡á ¼«ªÑΓ ó«º«í¡«ó¿Γ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ »«ºªÑ, ¬«úñá ñαπúá∩
  41.     ß«»α«úαἼᠻÑαÑñáßΓ óδ»«½¡Ñ¡¿Ñ «íαáΓ¡« ñá¡¡«⌐ ß«»α«úαá¼¼Ñ.
  42.          é ñá½∞¡Ñ⌐ΦѼ ¼δ íπñѼ ¿ß»«½∞º«óáΓ∞ ΓÑନ¡ »α«µÑßß ó¼ÑßΓ« ß«»α«úαá¼¼δ.
  43.  
  44.  
  45.              æ¿ßΓÑ¼á »α¿«α¿ΓÑΓ«ó ¼«ñπ½Ñ⌐ ó JPI îodula-2
  46.              ------------------------------------------
  47.  
  48.          æ¿ßΓÑ¼á »α¿«α¿ΓÑΓ«ó ¼«ñπ½Ñ⌐ π»αáó½∩ÑΓ «íαáí«Γ¬«⌐ á»»áαáΓ¡δσ »αÑαδóá¡¿⌐.  æ¿ßΓÑ¼á »α¿«-
  49.     α¿ΓÑΓ«ó «ß¡«óá¡á ¡á ¬«¡Γα«½½ÑαÑ á»»áαáΓ¡δσ »αÑαδóá¡¿⌐ ó ¬«¼»∞εΓÑαÑ Éæ/ÇÆ. Åα¿«α¿ΓÑΓ ¿¡ΓÑα»-
  50.     αÑΓ¿απÑΓß∩ ¬á¬ ¼á߬á (BITSET-πßΓá¡«ó¬á í¿Γá),  ¬«Γ«αδ⌐ αáºαÑΦáÑΓ/ºá»αÑΘáÑΓ «Γñѽ∞¡δÑ »αÑαδ-
  51.     óá¡¿∩.  ÅαÑαδóá¡¿Ñ ºá»αÑΘÑ¡«,  Ñß½¿ Ñú« ß««ΓóÑΓßΓóπεΘ¿⌐ í¿Γ ó ¼á߬ѠπßΓá¡«ó½Ñ¡ ó  1.  ùΓ«íδ
  52.     ¿ß»«½∞º«óáΓ∞ ß¿ßΓѼπ »α¿«α¿ΓÑΓ«ó,  ΓαÑíπεΓß∩ ¡Ñ¬«Γ«αδÑ º¡á¡¿∩ « ¬«¡Γα«½½ÑαÑ »αÑαδóá¡¿⌐ (ß¼.
  53.     "ÆÑσ¡¿τÑ߬¿Ñ ßß佬¿"). ìá óσ«ñÑ í½«¬á (Γѽ« PROCEDURE ¿½¿ Γѽ« MODULE), ¬«Γ«αδ⌐ ¿¼ÑÑΓ »α¿«-
  54.     α¿ΓÑΓ ¼á߬¿ ó ¬«¡Γα«½½ÑαÑ »αÑαδóá¡¿⌐ ¿ »α¿«α¿ΓÑΓ ñ½∩ í½«¬á,  ¬«Γ«αδÑ ½«ú¿τÑ߬¿ «íΩÑñ¿¡∩εΓß∩
  55.     ó¼ÑßΓÑ; ¡á óδσ«ñÑ ¿º í½«¬á ¼á߬á ó ¬«¡Γα«½½ÑαÑ »αÑαδóá¡¿⌐ ó«ßßΓá¡áó½¿óáÑΓß∩ ó Γ« ß«ßΓ«∩¡¿Ñ,
  56.     ¬«Γ«α«Ñ «¡á ¿¼Ñ½á ¡á óσ«ñÑ í½«¬á.
  57.          ÇÆ ¿ Éæ «Γ½¿τáεΓß∩ ΓѼ,  τΓ« ÇÆ ¿¼ÑÑΓ 2 ¬«¡Γα«½½Ñαá »αÑαδóá¡¿⌐,  á Éæ - Γ«½∞¬« 1, Γ.¬.
  58.     ÇÆ ¿ß»«½∞ºπÑΓ óßÑ 16 í¿Γ ¼á߬¿ »α¿«α¿ΓÑΓá; 8 ¼½áñΦ¿σ í¿Γ ¿ß»«½∞ºπεΓß∩ ñ½∩ πßΓᡫ󬿠¼á߬¿ ó
  59.     »Ñαó¿τ¡«¼ ¬«¡Γα«½½ÑαÑ »αÑαδóá¡¿⌐,  ßΓáαΦ¿Ñ 8 í¿Γ ¿ß»«½∞ºπεΓß∩ ñ½∩ πßΓᡫ󬿠ú½áó¡«ú«  ¬«¡Γ-
  60.     α«½½Ñαá.  é  ß½πτáÑ  Éæ Γ«½∞¬« ¼½áñΦ¿Ñ 8 í¿Γ ¿ß»«½∞ºπεΓß∩ ñ½∩ πßΓᡫ󬿠¼á߬¿ ó ¬«¡Γα«½½ÑαÑ
  61.     »αÑαδóá¡¿⌐.
  62.          îá߬á ó ¬«¡Γα«½½ÑαÑ »αÑαδóá¡¿⌐ ßτ¿ΓáÑΓß∩ τáßΓ∞ε ß«ßΓ«∩¡¿∩ »α«µÑßßá; Γᬿ¼ «íαẫ¼, «¡á
  63.     ß«σαá¡∩ÑΓß∩ ¿ ó«ßßΓá¡áó½¿óáÑΓß∩ «»Ñαᵿ∩¼¿ TRANSFER ¿ IOTRANSFER (ß¼. »α«µÑñπαδ ¡¿ªÑ).
  64.          àß½¿ IOTRANSFER ßó∩ºá¡á ß á»»áαáΓ¡δ¼ »αÑαδó᡿Ѽ, «íαáíáΓδóáÑ¼δ¼ ¬«¡Γα«½½Ñα«¼ »αÑαδóá-
  65.     ¡¿⌐, óδñáÑΓß∩ ¡Ñ«»αÑñѽѡ¡δ⌐ End-Of-Interrupt (¬«¡Ñµ »αÑαδóá¡¿∩).
  66.          çá»α«ßδ »αÑαδóá¡¿⌐ (IRQs),  «íαáíáΓδóáѼδÑ á»»áαáΓπα«⌐, ¬½áßß¿Σ¿µ¿α«óá¡δ τÑαѺ óÑ¬Γ«αá
  67.     »αÑαδóá¡¿⌐ «Γ 08ì ñ« 0FH ñ½∩ »Ñαó¿τ¡«ú« ¬«¡Γα«½½Ñαá ¿ «Γ 70ì ñ« 77ì ñ½∩ ú½áó¡«ú« ¬«¡Γα«½½Ñ-
  68.     αá. ¥Γ« ß««ΓóÑΓßΓóπÑΓ ºá»α«ßá¼ »αÑαδóá¡¿⌐ «Γ IRQ 0 - IRQ 15.
  69.  
  70.          Åα¿¼Ñα «íαáí«Γ¬¿ »αÑαδóá¡¿∩:
  71.  
  72.          MODULE T;
  73.          FROM SYSTEM IMPORT NEWPROCESS, IOTRANSFER, TRANSFER,
  74.                            CurrentPriority, NewPriority,
  75.                            ADRESS;
  76.          VAR IntProc : ADDRESS;
  77.          MODULE Int[CARDINAL{3}]; (* IRQ 3 ó䬽ετÑ¡« *)
  78.          IMPORT IOTRANSFER;
  79.          EXPORT IntHandler;
  80.  
  81.           PROCEDURE IntHandler;
  82.           BEGIN
  83.             ...
  84.             IOTRANSFER( ..., 0BH);
  85.              (* IOTRANSFER ¡á IRQ 3 (ÅαÑαδóá¡¿Ñ 0BH) *)
  86.  
  87.           END IntHandler;
  88.          END Int;
  89.          BEGIN
  90.            ...
  91.            NEWPROCESS( ...,IntProc );
  92.            TRANSFER( ...,IntProc );
  93.            NewPriority(CARDINAL(BITSET(CurrentPriority())-{3}));
  94.            (* ó¬½ετÑ¡« IRQ 3 *)
  95.          END T.
  96.  
  97.  
  98.                              NEWPROCESS
  99.                              ----------
  100.  
  101.          PROCEDURE NEWPROCESS ( P : PROC;
  102.                                 A : ADDRESS;
  103.                                 S : CARDINAL;
  104.                              VAR P1: ADDRESS);
  105.  
  106.          æ«ºñáÑΓ ¡«óδ⌐ »α«µÑßß.  É - φΓ« ½¿ΦÑ¡¡á∩ »áαá¼ÑΓα«ó »α«µÑñπαá,  ¬«Γ«αá∩ «íαáºπÑΓ ¡«óδ⌐
  107.     »α«µÑßß.  Ç - φΓ« π¬áºáΓѽ∞ ¡á αáí«τπε «í½áßΓ∞ ñ½∩ »α«µÑßßá. Éáí«τá∩ «í½áßΓ∞ ¡Ñ«íσ«ñ¿¼á ñ½∩
  108.     ½«¬á½∞¡δσ »ÑαѼѡ¡δσ ¿ ñ½∩ σαá¡Ñ¡¿∩ ß«ßΓ«∩¡¿∩ »α«µÑßßá »α¿ Ñú« »α¿«ßΓá¡«ó¬Ñ. S - φΓ« αẼÑα
  109.     ó íá⌐Γáσ φΓ«⌐ αáí«τÑ⌐ «í½áßΓ¿.  NEWPROCESS ó«ºóαáΘáÑΓ ßß佬π ¡á ºá¡«ó« ß«ºñá¡¡δ⌐ »α«µÑßß  ó
  110.     É1.  çá¼ÑΓ¿¼,  τΓ« NEWPROCESS Γ«½∞¬« »α¿ú«Γáó½¿óáÑΓ »α«µÑßß ñ½∩ óδ»«½¡Ñ¡¿∩,  «¡ ¡Ñ óδºδóáÑΓ
  111.     ¡áτὫ Ñú« óδ»«½¡Ñ¡¿∩.
  112.  
  113.                               TRANSFER
  114.                               --------
  115.  
  116.          PROCEDURE TRANSFER(VAR P1,P2 : ADDRESS);
  117.  
  118.          ÅÑαÑñáÑΓ óδ»«½¡Ñ¡¿Ñ  «Γ «ñ¡«ú« »α«µÑßßá ñαπú«¼π.  ÆÑ¬πΘ¿⌐ »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓß∩ ¿
  119.     ¡áº¡áτáÑΓß∩ É1,  ¿ »α«µÑßß É2 ó«º«í¡«ó½∩ÑΓß∩ (ó Ñú« ΓѬπΘÑ⌐ Γ«τ¬Ñ »α¿«ßΓá¡«ó¬¿).  É2 ñ«½ªÑ¡
  120.     íδΓ∞ αѺπ½∞ΓáΓ«¼ »αÑñδñπΘÑú« ºá»α«ßá ¬ NEWPROCESS ¿½¿ TRANSFER.  Åα«µÑßß É1 íπñÑΓ ó«º«í¡«ó-
  121.     ½Ñ¡ »«ºªÑ, ¬«úñá ñαπú«⌐ »α«µÑßß »ÑαÑñáÑΓ óδ»«½¡Ñ¡¿Ñ «íαáΓ¡« Ñ¼π.
  122.          çá¼ÑΓ¿¼, τΓ« ¡áº¡áτÑ¡¿Ñ É1 »α«¿ßσ«ñ¿Γ »«ß½Ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¡«ó«ú« »α«µÑßßá É2. ¥Γ« º¡á-
  123.     τ¿Γ, τΓ« ñÑ⌐ßΓó¿Γѽ∞¡δÑ »áαá¼ÑΓαδ ¼«úπΓ íδΓ∞ ¿ñÑ¡Γ¿τ¡δ¼¿.
  124.          ¥Γ«Γ Γ¿» »ÑαÑñáτ¿ ¡áºδóáÑΓß∩ ß¿¡σα«¡¡«⌐ »ÑαÑñáτÑ⌐,  τΓ« »α«Γ¿ó«»«½«ª¡« áß¿¡σα«¡¡«⌐ »Ñ-
  125.     αÑñáτÑ, ¬«Γ«αá∩ óδ»«½¡∩ÑΓß∩ »α«µÑñπα«⌐ IOTRANSFER.
  126.  
  127.                              IOTRANSFER
  128.                              ----------
  129.  
  130.          PROCEDURE IOTRANSFER(VAR P1,P2:  ADDRESS; I: CARDINAL);
  131.  
  132.          IOTRANSFER - φΓ« π»αáó½∩εΘá∩ »αÑαδó᡿Ѽ (¿½¿ áß¿¡σα«¡¡á∩) »ÑαÑñáτá. Ä¡á ßó∩ºδóáÑΓ ΓÑ-
  133.     ¬πΘ¿⌐ »α«µÑßß ß ¡«¼Ñα«¼ »αÑαδóá¡¿∩,  ñá¡¡δ¼ ó I. çáΓѼ «¡á »α¿«ßΓá¡áó½¿óáÑΓ ΓѬπΘ¿⌐ »α«µÑßß
  134.     ¿ ¡áº¡áτáÑΓ Ñú« É1 ¿ á¬Γ¿ó¿º¿απÑΓ »α«µÑßß,  ñá¡¡δ⌐ É2. è«úñá »α«µÑßß«α »«½πτáÑΓ »αÑαδóá¡¿Ñ,
  135.     «¡ »α«óÑα∩ÑΓ,  ßó∩ºá¡« ½¿ φΓ« »αÑαδóá¡¿Ñ ß »α«µÑßß«¼.  àß½¿ φΓ« »α«¿ßσ«ñ¿Γ, ΓѬπΘ¿⌐ »α«µÑßß
  136.     »α¿«ßΓá¡áó½¿óáÑΓß∩ ¿ ¡áº¡áτáÑΓß∩ É2, ¿ (»α¿«ßΓá¡«ó½Ñ¡¡δ⌐) »α«µÑßß É1 ó«º«í¡«ó½∩ÑΓß∩.
  137.          ÉẠ»αÑαδóá¡¿Ñ ¿ αѺπ½∞Γ¿απεΘá∩ IOTRANSFEER »α«¿º«Φ½¿ ó¼ÑßΓÑ,  Γ« »αÑαδóá¡¿Ñ ¡Ñ  íπñÑΓ
  138.     í«½∞ΦÑ ßó∩ºá¡« ß φΓ¿¼ »α«µÑßß«¼.
  139.          àß½¿ í«½∞ΦÑÑ ¬«½¿τÑßΓó« »α«µÑßß«ó ßó∩ºá¡« ß »αÑαδó᡿Ѽ I, «¡¿ íπñπΓ «íαáí«Γá¡δ ó ßΓÑ-
  140.     ¬Ñ »«σ«ª¿¼ «íαẫ¼,  Γ.Ñ. »«ß½Ññ¡¿⌐ »α«µÑßß, ßó∩ºá¡¡δ⌐ ß I íπñÑΓ á¬Γ¿ó¿º¿α«óá¡, ¬«úñá »α«¿-
  141.     º«⌐ñÑΓ »Ñαó«Ñ »αÑαδóá¡¿Ñ I,  óΓ«α«⌐ «Γ ¬«¡µá »α«µÑßß íπñÑΓ á¬Γ¿ó¿º¿α«óá¡,  ¬«úñá »α«¿º«⌐ñÑΓ
  142.     ß½ÑñπεΘÑÑ »αÑαδóá¡¿Ñ I, ¿ Γ. ñ.
  143.  
  144.                         InterruptRegisters
  145.                         ------------------
  146.  
  147.         PROCEDURE InterruptRegisters(P: ADDRESS) : ADDRESS;
  148.  
  149.          InterruptRegister ¼«ªÑΓ íδΓ∞ ¿ß»«½∞º«óá¡ ñ½∩ ñ«ßΓπ»á ¬  ß«ñÑন¼«¼π  αÑú¿ßΓα«ó,  ¬«úñá
  150.     »α«¿ßσ«ñ¿Γ »αÑαδóá¡¿Ñ. éδºδóáΓ∞ ÑÑ ¿¼ÑÑΓ ß¼δß½ Γ«½∞¬« Γ«úñá, ¬«úñá ¿¼ÑÑΓ ¼ÑßΓ« IOTRANSFER ¬
  151.     »α«µÑßßπ É. Ä¡á ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ºá»¿ß∞ (¡á ßΓѬ) ß« ß½ÑñπεΘ¿¼ αáß»«½«ªÑ¡¿Ñ¼:
  152.  
  153.          TYPE
  154.            ExtendedRegisters = RECORD
  155.                                 r  : Registers;
  156.                    (* ¬á¬ «»αÑñѽѡ« óδΦÑ *)
  157.                                 IP : CARDINAL;
  158.                    (* π¬áºáΓѽ∞ ¬«¼á¡ñδ *)
  159.                                 CS : CARDINAL;
  160.                    (* ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ *)
  161.                                 RetFlags : CARDINAL;
  162.                               END;
  163.  
  164.  
  165.                          CurrentProcess
  166.                          --------------
  167.  
  168.          PROCEDURE CurrentProcess() : ADDRESS;
  169.  
  170.          é«ºóαáΘáÑΓ ßß佬π ¡á ΓѬπΘ¿⌐ »α«µÑßß.
  171.  
  172.                           CurrentPriority
  173.                           ---------------
  174.  
  175.          PROCEDURE CurrentPriority() : CARDINAL;
  176.  
  177.          é«ºóαáΘáÑΓ (MODULE) »α¿«α¿ΓÑΓ ΓѬπΘÑú« »α«µÑßßá.
  178.  
  179.  
  180.                             NewPriority
  181.                             -----------
  182.  
  183.          PROCEDURE NewPriority(PR : CARDINAL;
  184.  
  185.          äáÑΓ ΓѬπΘѼπ »α«µÑßßπ ¡«óδ⌐ (MODULE) »α¿«α¿ΓÑΓ, «»αÑñѽ∩Ѽδ⌐ PR, ß¼. «»¿ßá¡¿Ñ ß¿ßΓѼδ
  186.     »α¿«α¿ΓÑΓ«ó óδΦÑ.
  187.  
  188.  
  189.                               Listen
  190.                               ------
  191.  
  192.          PROCEDURE Listen(Mask: BITSET);
  193.  
  194.          Listen óαѼѡ¡« αáºαÑΦáÑΓ »αÑαδóá¡¿∩,  «»αÑñѽѡ¡δÑ ß »«¼«Θ∞ε Mask (¼á߬¿), τΓ« αáºαÑ-
  195.     ΦáÑΓ »α¿¡¿¼áΓ∞ «ª¿ñáεΘ¿Ñ »αÑαδóá¡¿∩. çáΓѼ φΓá »α«µÑñπαá ó«ßßΓá¡áó½¿óáÑΓ ¼á߬π »αÑαδóá¡¿⌐ ó
  196.     ÑÑ »Ñαó«¡áτá½∞¡«Ñ ß«ßΓ«∩¡¿Ñ.
  197.  
  198.  
  199.                           ÅÉÄùêà ÅÉÄûàäôÉ¢
  200.                           ================
  201.  
  202.          è«¼»¿½∩Γ«α úÑ¡Ñα¿απÑΓ ó¡πΓαÑ¡¡¿⌐ ¬«ñ ñ½∩ óßÑσ »α«µÑñπα ó φΓ«¼ αáºñѽÑ.
  203.  
  204.  
  205.                                 DI
  206.                                 --
  207.  
  208.          PROCEDURE DI();
  209.  
  210.          çá»αÑΘáÑΓ á»»áαáΓ¡δÑ »αÑαδóá¡¿∩.  Ä¡á »«½Ñº¡á,  ¬«úñá ¿¼ÑÑΓß∩ ñ«ßΓπ» ¬ ñá¡¡δ¼, ¬«Γ«αδÑ
  211.     ∩ó½∩εΓß∩ «íΘ¿¼¿ ñ½∩ ¡Ñ߬«½∞¬¿σ »α«µÑßß«ó.
  212.  
  213.  
  214.                                 EI
  215.                                 --
  216.  
  217.          PROCEDURE EI();
  218.  
  219.          ÉáºαÑΦáÑΓ á»»áαáΓ¡δÑ »αÑαδóá¡¿∩.
  220.  
  221.  
  222.                                 Ofs
  223.                                 ---
  224.  
  225.          PROCEDURE Ofs(VAR A: WORD) : CARDINAL;
  226.  
  227.          é«ºóαáΘáÑΓ ß¼ÑΘÑ¡¿Ñ áñαÑßá Ç.  çá¼ÑΓ¿¼,  τΓ« áñαÑßá ß«ßΓ«∩Γ ¿º ß¼ÑΘÑ¡¿∩ (Ofs) ¿ áñαÑßá
  228.     ßÑú¼Ñ¡Γá; Σ¿º¿τÑ߬¿⌐ áñαÑß óδτ¿ß½∩ÑΓß∩ ¬á¬ seg * 16 + ofs.
  229.  
  230.  
  231.                                 Seg
  232.                                 ---
  233.  
  234.          PROCEDURE Seg(VAR A: WORD) : CARDINAL;
  235.  
  236.          é«ºóαáΘáÑΓ áñαÑß ßÑú¼Ñ¡Γá áñαÑßá Ç.
  237.  
  238.  
  239.                                 Out
  240.                                 ---
  241.  
  242.          PROCEDURE Out(P: CARDINAL; V: SHORTCARD);
  243.  
  244.          éδó«ñ¿Γ º¡áτÑ¡¿Ñ V ó á»»áαáΓ¡δ⌐ »«αΓ É.
  245.  
  246.                                 In
  247.                                 --
  248.  
  249.          PROCEDURE In(P: CARDINAL) : SHORTCARD;
  250.  
  251.          é«ºóαáΘáÑΓ º¡áτÑ¡¿Ñ ¿º á»»áαáΓ¡«ú« »«αΓá É.
  252.  
  253.  
  254.                               GetFlags
  255.                               --------
  256.  
  257.          PROCEDURE GetFlags() : CARDINAL;
  258.  
  259.          é«ºóαáΘáÑΓ αÑú¿ßΓα Σ½áú«ó »α«µÑßß«αá.
  260.  
  261.  
  262.                               SetFlags
  263.                               --------
  264.  
  265.          PROCEDURE SetFlags(F: CARDINAL);
  266.  
  267.          ôßΓá¡áó½¿óáÑΓ αÑú¿ßΓα Σ½áú«ó »α«µÑßß«αá ó º¡áτÑ¡¿Ñ, «»αÑñѽѡ¡«Ñ ß »«¼«Θ∞ε F. Åα«µÑñπ-
  268.     αδ SetFlags ¿ GetFlags «ß«íÑ¡¡« »«½Ñº¡δ »α¿ ºá»αÑΘÑ¡¿∩σ ¿ αáºαÑΦÑ¡¿∩σ »αÑαδóá¡¿⌐,  ñ½∩ ß«σ-
  269.     αá¡Ñ¡¿∩ ¿ ó«ßßΓá¡«ó½Ñ¡¿∩ »αÑñóáα¿Γѽ∞¡δσ º¡áτÑ¡¿⌐ Σ½áú«ó.
  270.  
  271.  
  272.                            îÄäôProcess
  273.                            ==============
  274.  
  275.          Åα«µÑñπαδ ó φΓ«¼ ¼«ñπ½Ñ «íαáíáΓδóáεΓ «ñ¡«óαѼѡ¡δÑ »α«µÑßßδ.  Æ.¬. JPI îodula-2 αÑ὿-
  276.     ºπÑΓß∩  ¡á «ñ¡«»α«µÑßß«α¡«¼ ¬«¼»∞εΓÑαÑ,  »α«µÑßßδ ñѽ∩Γ ¼Ñªñπ ß«í«⌐ »α«µÑßß«α¡«Ñ óαѼ∩ »«ß-
  277.     αÑñßΓó«¼ time-slicinq (αáºñѽѡ¿Ñ óαѼѡ¿). äαπú¿Ñ (í«½ÑÑ ¡¿º¬«ú« πα«ó¡∩) »α«µÑñπαδ »α«µÑß-
  278.     ßá ¼«úπΓ íδΓ∞ ¡á⌐ñÑ¡δ ó ¼«ñπ½Ñ SYSTEM.
  279.  
  280.  
  281.                        ÅïÇìêÉÄéÖêè ÅÉÄûàææÄé
  282.                        =====================
  283.  
  284.                            StartScheduler
  285.                            --------------
  286.  
  287.          PROCEDURE StartScheduler;
  288.  
  289.          çá»π߬áÑΓ »α«µÑñπαπ αáºñѽѡ¿∩ óαѼѡ¿.  àß½¿ «¡á πªÑ á¬Γ¿ó¡á, φëàºá»α«ß ñÑ⌐ßΓó¿∩ ¡Ñ
  290.     ¿¼ÑÑΓ.
  291.  
  292.                            StopScheduler
  293.                            -------------
  294.  
  295.          PROCEDURE StopScheduler:
  296.  
  297.          ÄßΓá¡áó½¿óáÑΓ »α«µÑñπαπ αáºñѽѡ¿∩ óαѼѡ¿. çá¼ÑΓ¿¼, τΓ« «»Ñαᵿ¿ SEND ¿ WAIT Σπ¡¬µ¿«-
  298.     ¡¿απεΓ ñ« ΓÑσ »«α, »«¬á »α«µÑñπαá ¡Ñ «ßΓá¡«ó¿Γß∩ (ß¼. "æêâìÇï¢" ).
  299.  
  300.                             StartProcess
  301.                             ------------
  302.  
  303.          PROCEDURE StartProcess(P: PROC;  N:  CARDINAL;
  304.                                          Pr: CARDINAL);
  305.  
  306.          C«ºñáÑΓ ¡«óδ⌐ »α«µÑßß, ¬«Γ«αδ⌐ óδαáªáÑΓß∩ »α«µÑñπα«⌐ É. Åα«µÑßß íπñÑΓ αáß»αÑñѽ∩Γ∞ αá-
  307.     í«τπε «í½áßΓ∞ αẼÑα«¼ N íá⌐Γ (N ñ«½ªÑ¡ íδΓ∞ ¡Ñ í«½ÑÑ 1èü). èáªñδ⌐ »α«µÑßß ¿¼ÑÑΓ »α¿«α¿ΓÑΓ,
  308.     ¬«Γ«αδ⌐ ¡Ñ ñ«½ªÑ¡ íδΓ∞ »ÑαÑ»πΓá¡ ß »α¿«α¿ΓÑΓ«¼ MODULE. Pr - φΓ« »α¿«α¿ΓÑΓ »α«µÑßßá ¿ ñ«½ªÑ¡
  309.     íδΓ∞ í«½∞ΦÑ ¡π½∩.  àß½¿ Pr í«½∞ΦÑ ¿½¿ αáóÑ¡ »α¿«α¿ΓÑΓπ ΓѬπΘÑú« »α«µÑßßá, Γ« ºá¡«ó« ß«ºñá¡-
  310.     ¡δ⌐ »α«µÑßß ßΓá¡ÑΓ á¬Γ¿ó¡δ¼.
  311.  
  312.  
  313.                               æêâìÇï¢
  314.                               =======
  315.  
  316.          Åα«µÑßßδ ¼«úπΓ  óºá¿¼«ñÑ⌐ßΓó«óáΓ∞  ñóπ¼∩  αẽ¿τ¡δ¼¿ »πΓ∩¼¿:  ¿½¿ í½áú«ñáα∩ ú½«íá½∞¡δ¼
  317.     αáºñѽ∩Ñ¼δ¼ »ÑαѼѡ¡δ¼, ¿½¿ í½áú«ñáα∩ ß¿ú¡á½á¼. æ¿ú¡á½δ ¿ß»«½∞ºπεΓß∩ ñ½∩ ß¿¡σα«¡¿ºáµ¿¿ »α«-
  318.     µÑßß«ó.  èα«¼Ñ  ¿¡¿µ¿á½¿ºáµ¿¿,  ß½ÑñπεΘ¿Ñ «»Ñαᵿ¿ ¼«úπΓ íδΓ∞ óδ»«½¡Ñ¡δ ¡á ß¿ú¡á½áσ:  SEND,
  319.     WAIT, Notify, ¿ Awaited. æ¿ú¡á½ ß«ßΓ«¿Γ ¿º ñóπσ ¬áΓÑú«α¿⌐: ßτÑΓτ¿¬ ¿ «τÑαÑñ∞.
  320.  
  321.  
  322.                                 Init
  323.                                 ----
  324.          TYPE SIGNAL;
  325.          PROCEDURE Init (VAR s: SIGNAL );
  326.  
  327.          ê¡¿µ¿á½¿º¿απÑΓ ß¿ú¡á½ s ( Γ.Ñ. Ñú« ßτÑΓτ¿¬ πßΓá¡«ó½Ñ¡ ó 0, ¿ «τÑαÑñ∞ »πßΓá).
  328.  
  329.                                 SEND
  330.                                 ----
  331.  
  332.          PROCEDURE SEND (s: SIGNAL );
  333.  
  334.          çá»α«ß SEND ßñѽáÑΓ á¬Γ¿ó¡δ¼ 1-δ⌐ »α«µÑßß,  ªñπΘ¿⌐ s. àß½¿ ¡¿¬á¬¿σ »α«µÑßß«ó ¡Ñ «ª¿ñá-
  335.     ÑΓß∩, ºá»α«ß íπñÑΓ »«ßΓáó½Ñ¡ ó «τÑαÑñ∞.
  336.          Ä»Ñαᵿ∩ SEND αáí«ΓáÑΓ »«ßαÑñßΓó«¼ ó«ºαáßΓá¡¿∩ ßτÑΓτ¿¬á,  ßó∩ºá¡¡δ¼ ß s.  àß½¿ ßτÑΓτ¿¬
  337.     < = 0,  Γ«, »« ¬αá⌐¡Ñ⌐ ¼ÑαÑ, 1 »α«µÑßß ªñÑΓ s ¿ 1-δ⌐ »α«µÑßß ó «τÑαÑñ¿ íπñÑΓ ú«Γ«ó ¬ óδ»«½-
  338.     ¡Ñ¡¿ε.  ¥Γ«Γ  »α«µÑßß ΓᬪѠ¡áτ¡ÑΓ óδ»«½¡∩Γ∞ß∩,  Ñß½¿ Ñú« »α¿«α¿ΓÑΓ > = »α¿«α¿ΓÑΓá ΓѬπΘÑú«
  339.     »α«µÑßßá.
  340.  
  341.                                 Wait
  342.                                 ----
  343.  
  344.          PROCEDURE WAIT ( s: SIGNAL);
  345.  
  346.          çá»α«ß WAIT ºáßΓáó½∩ÑΓ ºá»αáΦ¿óáѼδ⌐ »α«µÑßß ªñáΓ∞ ß««ΓóÑΓßΓóÑ¡¡« SEND,  Ñß½¿ ß¿ú¡á½ s
  347.     ¡Ñ ¿¼ÑÑΓ »αÑñóáα¿Γѽ∞¡« »«ßΓáó½Ñ¡¡δσ ó «τÑαÑñ∞ «»Ñαᵿ⌐ SEND.
  348.          Åα«µÑñπαá WAIT π¼Ñ¡∞ΦáÑΓ ßτÑΓτ¿¬,  có∩ºá¡¡δ⌐ ß s.  àß½¿ ßτÑΓτ¿¬ ¼Ñ¡∞ΦÑ 0,  φΓ« º¡áτ¿Γ,
  349.     τΓ« ºá»αáΦ¿óáѼδ⌐ »α«µÑßß ñ«½ªÑ¡ ªñáΓ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ SEND ó s, ¿ ñαπú«⌐ »α«µÑßß íπñÑΓ á¬-
  350.     Γ¿ó¿º¿α«óá¡.  àß½¿ ßτÑΓτ¿¬ í«½∞ΦÑ ¿½¿ αáóÑ¡ 0, Γ« ºá»αáΦ¿óáѼδ⌐ »α«µÑßß íπñÑΓ »α«ñ«½ªáΓ∞ß∩.
  351.  
  352.                                Notify
  353.                                ------
  354.  
  355.          PROCEDURE Notify (s: SIGNAL);
  356.  
  357.  
  358.          çáßΓáó½∩ÑΓ ºáñáτπ,  ªñπΘπε ß¿ú¡á½ s, αÑú¿ßΓα¿α«óáΓ∞ß∩, ¬«úñá ó«º¼«ª¡«, Γ.Ñ ó ß½ÑñπεΘ¿⌐
  359.     ¼«¼Ñ¡Γ óαѼѡ¿.  àß½¿ ¡¿¬á¬«⌐ »α«µÑßß ¡Ñ ªñÑΓ s, Γ« ºá»α«ß ¡Ñ ñÑ⌐ßΓóπÑΓ. ¥Γ«Γ ºá»α«ß ¡Ñ óδ-
  360.     ºδóáÑΓ »ÑαÑαÑú¿ßΓαᵿε,  Γᬿ¼ «íαẫ¼, «¡ ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ πßΓα«⌐ßΓó«¼ π»αáó½Ñ¡¿∩ »αÑ-
  361.     αδó᡿Ѽ (ß¼.âïÇéô 7), τΓ«íδ íѺ«»áß¡« «í«º¡áτ¿Γ∞ ñαπú«⌐ »α«µÑßߠ󠼫¼Ñ¡Γ, ¬«úñá »α«¿ßσ«ñ¿Γ
  362.     ß«íδΓ¿Ñ.
  363.  
  364.                               Awaited
  365.                               -------
  366.  
  367.          PROCEDURE Awaited (s: SIGNAL): BOOLEAN;
  368.  
  369.          é«ºóαáΘáÑΓ TRUE (¿ßΓ¿¡á),  Ñß½¿ ½εí«⌐ »α«µÑßß ªñÑΓ ß¿ú¡á½ s (Γ.Ñ.,  Ñß½¿ ßτÑΓτ¿¬, ßó∩-
  370.     ºá¡¡δ⌐ ß s, «Γα¿µáΓѽѡ).
  371.  
  372.  
  373.                           ÅÉÄùêà ÅÉÄûàäôÉ¢
  374.                           ================
  375.  
  376.                                Delay
  377.                                -----
  378.  
  379.          PROCEDURE Delay (t : CARDINAL);
  380.  
  381.          çáñÑনóáÑΓ ΓѬπΘ¿⌐ »α«µÑßß »« ¼Ñ¡∞ΦÑ⌐ ¼ÑαÑ ¡á t ¿¡ΓÑαóὫó óαѼѡ¿.  ê¡ΓÑαóá½ óαѼѡ¿
  382.     »α¿í½¿º¿Γѽ∞¡« 1/18 ß. àß½¿ t=0, »ÑαÑαÑú¿ßΓαᵿ∩ ¿¼ÑÑΓ ¼ÑßΓ« íѺ ºáñÑ᪬¿, αáºαÑΦá∩ ñαπú«¼π
  383.     »α«µÑßßπ ß Γᬿ¼ ªÑ ¿½¿ í«½∞Φ¿¼ »α¿«α¿ΓÑΓ«¼ ßΓáΓ∞ á¬Γ¿ó¡δ¼.
  384.  
  385.  
  386.                                 Lock
  387.                                 ----
  388.  
  389.          PROCEDURE Lock;
  390.  
  391.          Lock »αÑñ«ΓóαáΘáÑΓ ΓѬπΘ¿⌐ »α«µÑßß «Γ »ÑαÑαÑú¿ßΓαᵿ¿ ß »«¼«Θ∞ε ¿¡ΓÑαóá½á  óαѼѡ¿  ñ«
  392.     ΓÑσ »«α, »«¬á ¡Ñ íπñÑΓ ºá»α«ΦÑ¡ Unlock. ¥Γ« »«½Ñº¡«, ¬«úñá »α«µÑßß ¿ß»«½∞ºπÑΓ ñá¡¡δÑ, ¬«Γ«-
  393.     αδÑ αáºñѽ∩εΓß∩ ¼Ñªñπ ¡Ñ߬«½∞¬¿¼¿ »α«µÑßßἿ.  çá»α«ßδ ¿σ ¬ Lock  ¼«úπΓ  íδΓ∞  ó½«ªÑ¡δ,  ¡«
  394.     ñ«½ª¡δ íδΓ∞ óßÑúñá ß»áαÑ¡δ ß ºá»α«ßἿ UnLock.
  395.  
  396.                                Unlock
  397.                                ------
  398.  
  399.          PROCEDURE Unlock;
  400.  
  401.          Unlock αáºαÑΦáÑΓ »ÑαÑαÑú¿ßΓαᵿε ó ¿¡ΓÑαóá½ óαѼѡ¿,  ¿ ñ«½ªÑ¡ íδΓ∞  óßÑúñá  ß»áαÑ¡  ß
  402.     ºá»α«ß«¼ Lock. ÆÑ¬πΘ¿⌐ »α«µÑßß íπñÑΓ »ÑαÑαÑú¿ßΓα¿α«óá¡, Ñß½¿ ó ú«Γ«ó¡«ßΓ¿ ¡áσ«ñ¿Γß∩ »α«µÑßß
  403.     Γᬫú« ªÑ ¿½¿ í«½∞ΦÑú« »α¿«α¿ΓÑΓá.
  404.  
  405.          Åα¿¼Ñα:
  406.  
  407.          Åα«µÑßß αáí«Γδ ß ¬½áó¿áΓπα«⌐:
  408.  
  409.      MODULE KBP;
  410.      IMPORT Process,IO;
  411.      VAR
  412.      (*$W+*)
  413.        KBbuff : ARRAY[0..1023] OF CHAR;
  414.                    (* µ¿¬½¿τÑ߬¿⌐ íπΣÑα *)
  415.        KBhead  : CARDINAL;
  416.        KBtail  : CARDINAL;
  417.        KeyReady: Process.SIGNAL;
  418.      (*$W=*)
  419.      PROCEDURE KBProcess;
  420.      VAR
  421.        k : CHAR;
  422.        p : CARDINAL;
  423.      BEGIN
  424.        LOOP
  425.          Process.Lock;  (* ÄíΘ¿Ñ ¿ äÄæ-»ÑαѼѡ¡δÑ ¿ß»«½∞º«óá¡δ *)
  426.          IF IO.KeyPressed()  THEN
  427.            k := IO.RdCharDirect();
  428.            p := (KBhead+1)MOD SIZE(KBbuff);
  429.            IF p <> KBtail THEN
  430.               KBbuff[KBhead] := k; KBhead := p;
  431.            END;
  432.            Process.Unlock;
  433.            IF Process.Awaited(KeyReady)  THEN
  434.              Process.SEND(KeyReady)
  435.            END;
  436.          ELSE
  437.            Process.Unlock;
  438.          END;
  439.        END;
  440.      END KBProcess;
  441.  
  442.      PROCEDURE GetKey() : CHAR;
  443.      VAR k : CHAR;
  444.      BEGIN
  445.        LOOP
  446.          Process.Lock; (* â½«íá½∞¡δÑ «íΘ¿Ñ »ÑαѼѡ¡δÑ
  447.                                          ¿ß»«½∞º«óá¡δ *)
  448.          IF KBtail<>KBhead THEN
  449.            k := KBbuff[KBtail];
  450.            KBtail := (KBtail+1)MOD SIZE(KBbuff);
  451.            Process.Unlock;
  452.            RETURN k;
  453.          END;
  454.            Process.Unlock;
  455.            Process.WAIT(KeyReady);
  456.        END;
  457.      END GetKey;
  458.  
  459.      PROCEDURE InitKBProcess;
  460.      BEGIN
  461.        KBhead := 0;
  462.        KBtail := 0;
  463.        Process.Init(KeyReady);
  464.        Process.StartProcess(KBProcess,1000,1);
  465.        Process.StartScheduler;
  466.      END InitKBProcess;
  467.  
  468.      VAR c : CHAR;
  469.        BEGIN
  470.          InitKBProcess;
  471.          LOOP
  472.            c :=GetKey();
  473.            Process.Lock;  (* »«ß¬«½∞¬π »α«µÑñπαá IO.WrChar
  474.                               óδºδóáÑΓ äÄæ *)
  475.            IO.WrChar(c);
  476.            Process.Unlock;
  477.            IF c=CHR(27) THEN EXIT END;
  478.        END;
  479.      END KBP.
  480.  
  481.  
  482.                            îÄäôMATHLIB
  483.                            ==============
  484.  
  485.          Åα«µÑñπαδ ¿º φΓ«ú« ¼«ñπ½∩ óδ»«½¡∩εΓ «íΘ¿Ñ ¼áΓѼáΓ¿τÑ߬¿Ñ óδτ¿ß½Ñ¡¿∩.  èα«¼Ñ Γ«ú«,  ¼«-
  486.     ñπ½∞ ß«ñÑαª¿Γ ¡Ñ¬«Γ«αδÑ »α«µÑñπαδ, ß»Ñµ¿Σ¿τ¡δÑ ñ½∩ ¼¿¬α«»α«µÑßß«αá Intel 8087.
  487.  
  488.  
  489.                          ÄüÉÇüÄÆèÇ ÄÿêüÄè
  490.                          ================
  491.  
  492.          é ß½πτáÑ  «Φ¿í«τ¡δσ  áαúπ¼Ñ¡Γ«ó ¡Ñ¬«Γ«αδÑ »α«µÑñπαδ óδºδóáεΓ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ «Φ¿í«¬,
  493.     «»αÑñѽѡ¡δÑ ¡¿ªÑ:
  494.  
  495.          MODULE MATHLIB
  496.  
  497.          VAR
  498.            MathError : PROCEDURE (LONGREAL, ARRAY OF CHAR);
  499.            MathError2 :  PROCEDURE (LONGREAL,  LONGREAL,
  500.                                     ARRAY OF CHAR);
  501.  
  502.          ÄΓ¼ÑτáѼ, τΓ« »α«µÑñπαδ «íαáí«Γ¬¿ «Φ¿í«¬ ∩ó½∩εΓß∩ »ÑαѼѡ¡δ¼¿ Γ¿»á "Åα«µÑñπαá",  ¬«Γ«-
  503.     αδÑ ¼«úπΓ íδΓ∞ ºá¼Ñ¡Ñ¡δ »α«µÑñπαἿ, «»αÑñѽѡ¡δ¼¿ »«½∞º«óáΓѽѼ. Å« π¼«½τá¡¿ε «¡¿ »α¿ßó«Ñ-
  504.     ¡δ »α«µÑñπαá¼ MathError ¿ MathError2 ó ¼«ñπ½Ñ Lib.
  505.          Åα«µÑñπαδ «íαáí«Γ¬¿ «Φ¿í«¬ óδºδóáεΓß∩:
  506.  
  507.          MathError             Sin, Cos, Tan, Asin, Acos, Log,
  508.                                Log10, Sqrt.
  509.          MathError2            ATan2.
  510.  
  511.                     Æα¿ú«¡«¼ÑΓα¿τÑ߬¿Ñ Σπ¡¬µ¿¿
  512.                     --------------------------
  513.  
  514.          PROCEDURE Sin(A : LONGREAL) : LONGREAL;
  515.          PROCEDURE Cos(A : LONGREAL) : LONGREAL;
  516.          PROCEDURE Tan(A : LONGREAL) : LONGREAL;
  517.          PROCEDURE ASin(A : LONGREAL) : LONGREAL;
  518.          PROCEDURE ACos(A : LONGREAL) : LONGREAL;
  519.          PROCEDURE ATan(A : LONGREAL) : LONGREAL;
  520.          PROCEDURE ATan2(X,Y : LONGREAL) : LONGREAL;
  521.  
  522.          Sin, Cos  ¿  Tan «ßπΘÑßΓó½∩εΓ ß««ΓóÑΓßΓóπεΘ¿Ñ ¼áΓѼáΓ¿τÑ߬¿Ñ Σπ¡¬µ¿¿.  Çαúπ¼Ñ¡Γ Ç φΓ¿σ
  523.     »α«µÑñπα «»αÑñѽѡ ó αáñ¿á¡áσ. Sin ¿ Cos ó«ºóαáΘáεΓ º¡áτÑ¡¿∩ ó ñ¿á»áº«¡Ñ «Γ -1 ñ« 1.
  524.          ASin, ACos ¿ ATan ó«ºóαáΘáεΓ áα¬ß¿¡πß,  áᬬ«ß¿¡πß ¿ áα¬Γá¡úѡߠ߫«ΓóÑΓßΓóÑ¡¡«.  Çαúπ-
  525.     ¼Ñ¡Γ Ç π ASin ¿ ACos ñ«½ªÑ¡ íδΓ∞ ó ñ¿á»áº«¡Ñ «Γ -1 ñ« 1.  ASin ó«ºóαáΘáÑΓ º¡áτÑ¡¿∩ ó ñ¿á»á-
  526.     º«¡Ñ  «Γ  -pi/2 ñ« pi/2.  ACos ó«ºóαáΘáÑΓ º¡áτÑ¡¿∩ ó ñ¿á»áº«¡Ñ «Γ 0 ñ« pi.  ATan ó«ºóαáΘáÑΓ
  527.     º¡áτÑ¡¿∩ ó ñ¿á»áº«¡Ñ «Γ -pi/2 ñ« pi/2.
  528.          ATan2 ó«ºóαáΘáÑΓ áα¬Γá¡úѡߠ«Γ X/Y. ÉѺπ½∞ΓáΓ - ó ñ¿á»áº«¡Ñ «Γ -pi ñ« pi.
  529.  
  530.                       â¿»Ñαí«½¿τÑ߬¿Ñ Σπ¡¬µ¿¿
  531.                       -----------------------
  532.  
  533.          PROCEDURE SinH(A : LONGREAL) : LONGREAL;
  534.          PROCEDURE CosH(A : LONGREAL) : LONGREAL;
  535.          PROCEDURE TanH(A : LONGREAL) : LONGREAL;
  536.  
  537.          ¥Γ¿ »α«µÑñπαδ ó«ºóαáΘáεΓ ú¿»Ñαí«½¿τÑ߬¿⌐ ß¿¡πß,  ú¿»Ñαí«½¿τÑ߬¿⌐ ¬«ß¿¡πß ¿  ú¿»Ñαí«½¿-
  538.     τÑ߬¿⌐ Γá¡úѡߠ߫«ΓóÑΓßΓóÑ¡¡« »ÑαÑñá¡¡«ú« áαúπ¼Ñ¡Γá Ç.
  539.  
  540.  
  541.                       ìáΓπαá½∞¡δ⌐ ½«úáα¿Σ¼
  542.                       --------------------
  543.  
  544.          PROCEDURE Log(A: LONGREAL) : LONGREAL;
  545.  
  546.          é«ºóαáΘáÑΓ ¡áΓπαá½∞¡δ⌐ ½«úáα¿Σ¼ (»« «ß¡«óá¡¿ε Ñ) áαúπ¼Ñ¡Γá Ç.
  547.  
  548.                       äÑß∩Γ¿τ¡δ⌐ ½«úáα¿Σ¼
  549.                       -------------------
  550.  
  551.          PROCEDURE Log10(A : LONGREAL) : LONGREAL;
  552.  
  553.          é«ºóαáΘáÑΓ ½«úáα¿Σ¼ (»« «ß¡«óá¡¿ε 10) áαúπ¼Ñ¡Γá Ç.
  554.  
  555.                            æΓѻѡ∞ τ¿ß½á
  556.                            -------------
  557.  
  558.          PROCEDURE Pow(X,Y : LONGREAL) : LONGREAL;
  559.  
  560.          é«ºóαáΘáÑΓ X, ó«ºóÑñÑ¡¡δ⌐ ó ßΓѻѡ∞ Y.
  561.  
  562.                              ¥¬ß»«¡Ñ¡Γá
  563.                              ----------
  564.  
  565.          PROCEDURE Exp(A : LONGREAL) : LONGREAL;
  566.  
  567.          é«ºóαáΘáÑΓ αѺπ½∞ΓáΓ  ó«ºóÑñÑ¡¿∩  Ñ  ó  ßΓѻѡ∞  Ç (φΓá
  568.     Σπ¡¬µ¿∩ «íαáΓ¡á Log).
  569.  
  570.                                î«ñπ½∞
  571.                                ------
  572.  
  573.          PROCEDURE Mod(X,Y : LONGREAL) : LONGREAL;
  574.  
  575.          é«ºóαáΘáÑΓ X, ∩ó½∩εΘ¿⌐ß∩ áíß«½εΓ¡«⌐ óѽ¿τ¿¡«⌐ Y.
  576.  
  577.                                 Rexp
  578.                                 ----
  579.  
  580.          PROCEDURE Rexp(VAR I: INTEGER; A: LONGREAL) : LONGREAL;
  581.  
  582.          Éáºí¿óáÑΓ º¡áτÑ¡¿Ñ Ç ¡á Ñú« φ¬ß»«¡Ñ¡Γπ ¿ ¼á¡Γ¿ßßπ ß »«¼ÑΘÑ¡¿Ñ¼ φ¬ß»«¡Ñ¡Γδ ó I,  á ¼á¡-
  583.     Γ¿ßßá - º¡áτÑ¡¿Ñ, ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐.
  584.  
  585.                          èóáñαáΓ¡δ⌐ ¬«αÑ¡∞
  586.                          -----------------
  587.  
  588.          PROCEDURE Sqrt(A: LONGREAL) : LONGREAL;
  589.  
  590.          é«ºóαáΘáÑΓ ¬óáñαáΓ¡δ⌐ ¬«αÑ¡∞ áαúπ¼Ñ¡Γá Ç.
  591.  
  592.  
  593.                      ÅÉÄûàäôÉ¢ ÅÉàÄüÉÇçÄéÇìêƒ
  594.                      ========================
  595.  
  596.          äóÑ »α«µÑñπαδ, »α¿óÑñÑ¡¡δÑ ¡¿ªÑ, »αÑ«íαáºπεΓ µÑ½πε τáßΓ∞ óÑΘÑßΓóÑ¡¡«ú« º¡áτÑ¡¿∩ ó ñó«-
  597.     ¿τ¡«-ñÑß∩Γ¿τ¡«Ñ τ¿ß½« ¿ ¡á«í«α«Γ. äó«¿τ¡«-ñÑß∩Γ¿τ¡«Ñ τ¿ß½« »αÑñßΓáó½Ñ¡« Γ¿»«¼ PackedBcd:
  598.  
  599.          TYPE PackedBcd = ARRAY [0..9] OF SHORTCARD;
  600.  
  601.          äóÑ ñÑß∩Γ¿τ¡δÑ µ¿Σαδ π»á¬«óá¡δ ó ¬áªñδ⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá. ¥½Ñ¼Ñ¡Γ ¡«¼Ñα 9 ∩ó½∩ÑΓß∩ º¡á-
  602.     ¬«¼.
  603.  
  604.  
  605.                              LongToBcd
  606.                              ---------
  607.  
  608.          PROCEDURE LongToBcd(A: LONGREAL) : PackedBcd;
  609.  
  610.          é«ºóαáΘáÑΓ º¡áτÑ¡¿Ñ Ç ó ó¿ñÑ PackedBcd. Ç «¬απú½∩ÑΓß∩ ¬ í½¿ªá⌐ΦѼπ µÑ½«¼π. ìá»α¿¼Ñα,
  611.  
  612.          a := LongToBcd(-12345.67);
  613.  
  614.          Å«ß½Ñ φΓ«ú« ó맮óá íπñѼ ¿¼ÑΓ∞ º¡áτÑ¡¿Ñ:
  615.  
  616.          φ½Ñ¼Ñ¡Γ:            9  8  7  6  5  4  3  2  1  0
  617.          ΦÑßΓ¡áñµáΓÑα¿τ¡«Ñ
  618.          º¡áτÑ¡¿Ñ:          80  0  0  0  0  0  0  1  23 46
  619.  
  620.  
  621.                              BcdToLong
  622.                              ---------
  623.  
  624.          PROCEDURE BcdToLong(A: PackedBcd) : LONGREAL;
  625.  
  626.          é«ºóαáΘáÑΓ LONGREAL »αÑñßΓáó½Ñ¡¡δÑ º¡áτÑ¡¿∩ PackedBcd, ºáñá¡¡«ú« »«ßαÑñßΓó«¼ Ç.
  627.  
  628.  
  629.                     ÅÉÄûàäôÉ¢ æÄÅÉÄûàææÄÉÇ 8087
  630.                     ===========================
  631.  
  632.          çá «»¿ß᡿Ѽ  π»αáó½∩εΘÑú« ß½«óá ¿ ßαÑñδ ¼¿¬α«»α«µÑßß«αá 8087 «íαáΓ¿ΓÑß∞ ¬ óáΦÑ⌐ ñ«¬π-
  633.     ¼Ñ¡Γᵿ¿ »« 8087.
  634.  
  635.                           LoadControlWord
  636.                           ---------------
  637.  
  638.          PROCEDURE LoadControlWord(C: BITSET);
  639.  
  640.          çáúαπªáÑΓ ß«»α«µÑßß«α 8087 ß π»αáó½∩εΘ¿¼ ß½«ó«¼, ºáñá¡¡δ¼ »«ßαÑñßΓó«¼ æ.
  641.  
  642.                           StoreControlWord
  643.                           ----------------
  644.  
  645.          PROCEDURE StoreControlWord() : BITSET;
  646.  
  647.          é«ºóαáΘáÑΓ π»αáó½∩εΘÑÑ ß½«ó« ¼¿¬α«»α«µÑßß«αá 8087.
  648.  
  649.                           ClearExceptions
  650.                           ---------------
  651.  
  652.          PROCEDURE ClearExceptions();
  653.  
  654.          æΓ¿αáÑΓ Σ½áú¿  ¿ß¬½ετÑ¡¿∩,  Σ½áú ºá»α«ßá »αÑαδóá¡¿∩ ¿ Σ½áú ºá¡∩Γ«ßΓ¿ ó ß½«óÑ ß«ßΓ«∩¡¿∩
  655.     ¼¿¬α«»α«µÑßß«αá 8087.
  656.  
  657.  
  658.                           StoreEnvironment
  659.                           ----------------
  660.  
  661.          TYPE
  662.            Environment = RECORD
  663.                            ControlWord : BITSET;
  664.                            StatusWord  : BITSET;
  665.                            TagWord     : BITSET;
  666.                            IP          : CARDINAL;
  667.                            Opcode      : CARDINAL;
  668.                            DataPointer : CARDINAL;
  669.                            R80287      : CARDINAL;
  670.                          END;
  671.  
  672.          PROCEDURE StoreEnvironment() : Environment;
  673.  
  674.          é«ºóαáΘáÑΓ ßαÑñπ »α«µÑßß«αá 8087, «»¿ßá¡¡πε »«ßαÑñßΓó«¼ Γ¿»á Environment. æ¼«Γα¿ ΓᬪÑ
  675.     ñ«¬π¼Ñ¡Γáµ¿ε »« ß«»α«µÑßß«απ 8087.
  676.  
  677.                             îÄäôFIO
  678.                             ==========
  679.  
  680.          Åα«µÑñπαδ φΓ«ú« ¼«ñπ½∩ ¿ß»«½∞ºπεΓß∩ ñ½∩ «íαáí«Γ¬¿ Σá⌐½«ó ¿ Σá⌐½«ó«ú« óó«ñá/óδó«ñá. FIO
  681.     ΓᬪѠ߫ñÑαª¿Γ »α«µÑñπαδ ñ½∩ «íαáí«Γ¬¿ ñ¿αÑ¬Γ«α¿⌐.
  682.          öá⌐½π ßΓáó¿Γß∩ ó ß««ΓóÑΓßΓó¿Ñ Σá⌐½«óá∩ »«º¿µ¿∩, ¬«Γ«αá∩ ¿º¼Ñ¡∩ÑΓß∩ »α¿ «»Ñαᵿ∩σ ºá»¿-
  683.     ß¿ ¿ τΓÑ¡¿∩. ÅÑαóá∩ »«º¿µ¿∩ ó Σá⌐½Ñ - 0.
  684.          öá⌐½δ ∩ó½∩εΓß∩ »«ß½Ññ«óáΓѽ∞¡δ¼¿,  ¡« »α∩¼«⌐ ñ«ßΓπ» ¬ ¬«¡¬αÑΓ¡δ¼ φ½Ñ¼Ñ¡Γá¼ ó Σá⌐½Ñ ¼«-
  685.     ªÑΓ íδΓ∞ ñ«ßΓ¿ú¡πΓ »«ßαÑñßΓó«¼ »α«µÑñπαδ Seek.
  686.          ÅÑαÑñ ΓѼ, ¬á¬ Σá⌐½ ¼«ªÑΓ íδΓ∞ »α«τ¿Γá¡ ¿½¿ ºá»¿ßá¡, «¡ ñ«½ªÑ¡ íδΓ∞ «Γ¬αδΓ ¿ß»«½∞º«óá-
  687.     ¡¿Ñ¼ «ñ¡«⌐ ¿º »α«µÑñπα Open,  Create ¿½¿ Append.  ¥Γ¿ »α«µÑñπαδ óßÑ ó«ºóαáΘáεΓ  π»αáó½∩εΘπε
  688.     »ÑαѼѡ¡πε Σá⌐½á, ¬«Γ«αá∩ ¿ß»«½∞ºπÑΓß∩ ó« óßÑσ »«ß½ÑñπεΘ¿σ «íαáΘÑ¡¿∩σ ¬ φΓ«¼π Σá⌐½π. ÄΓ¬αδ-
  689.     ΓδÑ Σá⌐½δ ñ«½ª¡δ íδΓ∞ ºá¬αδΓδ »α«µÑñπα«⌐ Close »ÑαÑñ «¬«¡τ᡿Ѽ αáí«Γδ »α«úαá¼¼δ  ¿½¿ ¬«úñá
  690.     «¡¿ ¡Ñ íπñπΓ í«½ÑÑ ¿ß»«½∞º«óáΓ∞ß∩.
  691.  
  692.  
  693.                     âïÄüÇï£ì¢à ÅàÉàîàìì¢à é FIO
  694.                     ===========================
  695.  
  696.          ¥Γ¿ »ÑαѼѡ¡δÑ  ¿ß»«½∞ºπεΓß∩ ñ½∩ π»αáó½Ñ¡¿∩ »«óÑñÑ¡¿Ñ¼ ¿ »α«óÑન αѺπ½∞ΓáΓ«ó »α«µÑñπα
  697.     «íαáí«Γ¬¿ Σá⌐½á ¿ »α«µÑñπα óó«ñá/óδó«ñá.
  698.  
  699.          CONST
  700.            MaxOpenFiles = 15;
  701.            DiskFull = 0F0H; (* ÄΦ¿í¬á, Ñß½¿ »α¿ ºá»¿ß¿ Σá⌐½«ó
  702.                                ñ¿ß¬ »ÑαÑ»«½¡Ñ¡. *)
  703.            StandardInput = 0;  (* MS-DOS-ßΓá¡ñáαΓ¡δÑ ¡«¼Ñαá
  704.                                   Σá⌐½«ó. *)
  705.            StandardOutput = 1;
  706.            ErrorOutput    = 2;
  707.            AuxDevice      = 3;
  708.            PrinterDevice  = 4;
  709.          TYPE
  710.            File  = CARDINAL;  (* Æ¿» Σá⌐½«ó«ú« ¡«¼Ñαá. *)
  711.          VAR
  712.            EOF        : BOOLEAN;
  713.            IOcheck    : BOOLEAN; (* àß½¿ TRUE - «Φ¿í«τ¡«Ñ
  714.                 ºáóÑαΦÑ¡¿Ñ »α«úαá¼¼δ ß ß««íΘÑ¡¿Ñ¼. *)
  715.            Separators : Str.CHARSET;
  716.            OK         : BOOLEAN;
  717.            ChopOff    : BOOLEAN;
  718.            Eng        : BOOLEAN; (* ê¡ªÑ¡Ñα¡«Ñ »αÑñßΓáó½Ñ¡¿Ñ. *)
  719.  
  720.          ÅαÑñ«»αÑñѽѡ¡δÑ MS-DOS-«ó߬¿Ñ  ßΓá¡ñáαΓ¡δÑ  ¡«¼Ñαá Σá⌐½«ó ¿¼Ñ¡πεΓß∩ «Γ 0 ñ« 4 ¬á¬ φΓ«
  721.     «»αÑñѽѡ« óδΦÑ »«ßαÑñßΓó«¼ ¬«¡ßΓá¡Γ.  Å«½∞º«óáΓѽ∞߬¿Ñ Σá⌐½δ ¡π¼ÑαπεΓß∩ «Γ 5  ñ«  º¡áτÑ¡¿∩
  722.     MaxOpenFiles. öá⌐½δ, «Γ¼ÑτÑ¡¡δÑ ßΓá¡ñáαΓ¡δ¼¿ ¡«¼ÑαἿ, «»αÑñѽѡδ, ¬«úñá »α«úαἼᠡáτ¿¡áÑΓ
  723.     óδ»«½¡Ñ¡¿Ñ, ¿ ¡Ñ ΓαÑíπεΓ «Γ¬αδΓ¿∩ »ÑαÑñ ¿ß»«½∞º«ó᡿Ѽ.
  724.          üπ½Ñó߬á∩ »ÑαѼѡ¡á∩ Äè πßΓá¡áó½¿óáÑΓß∩ óßѼ¿ »α«µÑñπαἿ Σ«α¼áΓ¿α«óá¡¡«ú« óó«ñá/óδó«-
  725.     ñá: WrBin ¿ RdBin. Ä¡á π¬áºδóáÑΓ, íδ½á ½¿ πß»ÑΦ¡«⌐ »αÑñ»α¿¡∩Γá∩ «»Ñαᵿ∩.
  726.          àß½¿ ßñѽá¡á »«»δΓ¬á ºá»¿ß¿ Σ«α¼áΓ¿α«óá¡¡δσ ñá¡¡δσ ó ¼Ñ¡∞Φπε «í½áßΓ∞, τѼ ß»Ñµ¿Σ¿µ¿α«-
  727.     óá¡«,  Γ« ºá»¿ßδóáÑΓß∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ '?', Ñß½¿ ChopOff - TRUE; ó »α«Γ¿ó¡«¼ ß½πτáÑ «»¿-
  728.     ßá¡¡δ⌐ αẼÑα »«½∩ »αÑóδΦáÑΓß∩. ChopOff »« π¼«½τá¡¿ε - FALSE.
  729.          EOF πßΓá¡áó½¿óáÑΓß∩,  Ñß½¿ ¬«¡Ñµ Σá⌐½á íδ½ ñ«ßΓ¿ú¡πΓ ó« óαѼ∩ »«ß½Ññ¡Ñ⌐ «»Ñαᵿ¿  τΓÑ-
  730.     ¡¿∩.
  731.          Separators - ¼¡«ªÑßΓó« αáºñѽ¿ΓѽÑ⌐ ñá¡¡δσ,  ¿ß»«½∞ºπεΘ¿σß∩ ó »α«µÑñπαÑ RdItem. ç¡áτÑ-
  732.     ¡¿Ñ »« π¼«½τá¡¿ε:
  733.  
  734.          CHARSET{CHR(9), CHR(13), CHR(26), ' '}.
  735.  
  736.          Eng πßΓá¡áó½¿óáÑΓß∩, Ñß½¿ óÑΘÑßΓóÑ¡¡δÑ τ¿ß½á ßΣ«α¼áΓ¿α«óá¡δ ó ¿¡ªÑ¡Ñα¡«¼ »αÑñßΓáó½Ñ¡¿¿
  737.     (ß¼. RealToStr). Å« π¼«½τá¡¿ε Eng - FALSE.
  738.          àß½¿ IOcheck - TRUE,  Γ« «Φ¿í¬¿,  ¬«Γ«αδÑ ß½πτáΓß∩ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ »α«µÑñπα, »ÑαÑ-
  739.     τ¿ß½Ñ¡¡δσ ¡¿ªÑ,  íπñπΓ ºáóÑαΦáΓ∞ »α«úαá¼¼π ß óδñáτÑ⌐ ß««íΘÑ¡¿∩ «í «Φ¿í¬Ñ.  àß½¿  IOcheck  -
  740.     FALSE,  «Φ¿í¬¿  ó¼ÑßΓ«  φΓ«ú«  ¼«úπΓ  íδΓ∞ »α«óÑαÑ¡δ »«ßαÑñßΓó«¼ ó맮óá »α«µÑñπαδ IOresult.
  741.     IOcheck »« π¼«½τá¡¿ε TRUE. æ½ÑñπεΘ¿Ñ »α«µÑñπαδ ó맮óπΓ ß««íΘÑ¡¿∩ «í «Φ¿í¬áσ, Ñß½¿ IOcheck -
  742.     TRUE:   Open,   Append,  Create,  Close,  Truncate,  GetPos,  Seek,  Size,  Erase,  Rename,
  743.     ReadFirstEntry, ReadNextEntry, ChDir, MkDir, RmDir, GetDir.
  744.  
  745.  
  746.                           ÄüÉÇüÄÆèÇ öÇëïÄé
  747.                           ================
  748.  
  749.          öá⌐½δ ∩ó½∩εΓß∩ »« π¼«½τá¡¿ε ¡ÑíπΣÑਧ«óá¡¡δ¼¿,  Γ.Ñ. äÄæ ñ«ßΓπ»¡á ñ½∩ óδ»«½¡Ñ¡¿∩ ó ½ε-
  750.     í«Ñ  óαѼ∩ «»Ñαᵿ∩ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿.  ä½∩ ñ«ßΓ¿ªÑ¡¿∩ í«½∞ΦÑ⌐ φΣΣÑ¬Γ¿ó¡«ßΓ¿ óó«ñá/óδó«ñá ß
  751.     Σá⌐½«¼ ¡πª¡« ßó∩ºáΓ∞ íπΣÑα »α¿ »«¼«Θ¿ »α«µÑñπαδ AssignBuffer ß ΓѼ, τΓ«íδ »α«»π߬áΓ∞ ¬ äÄæ-
  752.     π í«½∞Φ¿Ñ »«αµ¿¿ ñá¡¡δσ.
  753.  
  754.                                 Open
  755.                                 ----
  756.  
  757.          PROCEDURE Open(Name: ARRAY OF CHAR) : File;
  758.  
  759.  
  760.          ÄΓ¬αδóáÑΓ Σá⌐½  Name  ñ½∩ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿ ¿ ó«ºóαáΘáÑΓ «ß¡«óπ ¼¡«ªÑßΓóá «»Ñαᵿ⌐ ¡áñ
  761.     Σá⌐½«¼.  Å«º¿µ¿∩ Σá⌐½á πßΓá¡áó½¿óáÑΓß∩ ¡á ¡áτὫ Σá⌐½á. àß½¿ IOcheck - FALSE ¿ ß»Ñµ¿Σ¿µ¿α«-
  762.     óá¡¡δ⌐ Σá⌐½ ¡Ñ ¼«ªÑΓ íδΓ∞ «Γ¬αδΓ, ó«ºóαáΘáÑΓß∩ º¡áτÑ¡¿Ñ MAX(CARDINAL).
  763.  
  764.                                Append
  765.                                ------
  766.  
  767.          PROCEDURE Append(Name: ARRAY OF CHAR) : File;
  768.  
  769.  
  770.          ÄΓ¬αδóáÑΓ Σá⌐½  Name,  πßΓá¡áó½¿óáÑΓ »«º¿µ¿ε Σá⌐½á ¡á ¬«¡Ñµ Σá⌐½á,  ¿ ó«ºóαáΘáÑΓ ¡«¼Ñα
  771.     «Γ¬αδΓ«ú« Σá⌐½á (¿½¿ MAX(CARDINAL),  Ñß½¿ Σá⌐½ ¡Ñ íδ½ πß»ÑΦ¡« «Γ¬αδΓ).  éδ»«½¡Ñ¡¿Ñ «»Ñαᵿ⌐
  772.     ºá»¿ß¿ ó ¡Ñ»πßΓ«⌐ Σá⌐½,  «Γ¬αδΓδ⌐ »«ßαÑñßΓó«¼ Append,  íπñÑΓ ñ«íáó½∩Γ∞ ñá¡¡δÑ ó Σá⌐½ ó¼ÑßΓ«
  773.     Γ«ú«, τΓ«íδ »ÑαѺỿßδóáΓ∞ ¿σ.
  774.  
  775.                                Create
  776.                                ------
  777.  
  778.          PROCEDURE Create(Name: ARRAY OF CHAR) : File;
  779.  
  780.          æ«ºñáÑΓ Σá⌐½,  ß»Ñµ¿Σ¿µ¿α«óá¡¡δ⌐ »«ßαÑñßΓó«¼ Name, ¿ ó«ºóαáΘáÑΓ ¡«¼Ñα φΓ«ú« Σá⌐½á (¿½¿
  781.     MAX(CARDINAL),  Ñß½¿ Σá⌐½ ¡Ñ íδ½ πß»ÑΦ¡« ß«ºñá¡). àß½¿ Σá⌐½ πªÑ ßπΘÑßΓóπÑΓ, Γ« »αÑñΦÑßΓóπε-
  782.     ΘÑÑ ß«ñÑন¼«Ñ Ñú« ΓÑα∩ÑΓß∩. æ«ºñá¡¡δ⌐ Σá⌐½ «Γ¬αδóáÑΓß∩ ñ½∩ «»Ñαᵿ⌐ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿.
  783.  
  784.                                Close
  785.                                -----
  786.  
  787.          PROCEDURE Close(F: File);
  788.  
  789.          æΓ¿αáÑΓ íπΣÑα, ß««ΓóÑΓßΓóπεΘ¿⌐ Σá⌐½π F (Ñß½¿ «¡ ßπΘÑßΓóπÑΓ) ¿ ºáΓѼ ºá¬αδóáÑΓ Σá⌐½.
  790.  
  791.                             AssignBuffer
  792.                             ------------
  793.  
  794.          PROCEDURE AssignBuffer(F : File; VAR Buf: ARRAY OF BYTE);
  795.  
  796.          ìạáτáÑΓ íπΣÑα Buf Σá⌐½π F.  ä½∩ í«½∞Φ«⌐ φΣΣÑ¬Γ¿ó¡«ßΓ¿ ¿ß»«½∞ºπѼδ⌐ αẼÑα íπΣÑαá íπ-
  797.     ñÑΓ: N*512+BufferOverHead, úñÑ N ¡Ñ ¼Ñ¡∞ΦÑ 2.
  798.  
  799.  
  800.                                Exists
  801.                                ------
  802.  
  803.          PROCEDURE Exists(Name: ARRAY OF CHAR) : BOOLEAN;
  804.  
  805.          é«ºóαáΘáÑΓ TRUE,  Ñß½¿ ß»Ñµ¿Σ¿µ¿α«óá¡¡δ⌐ Σá⌐½ ßπΘÑßΓóπÑΓ.  Exists ¿ß»«½∞ºπÑΓ »α«µÑñπαπ
  806.     ReadFirstEntry ñ½∩ «»αÑñѽѡ¿∩ αѺπ½∞ΓáΓá.
  807.  
  808.                                Erase
  809.                                -----
  810.  
  811.          PROCEDURE Erase(Name: ARRAY OF CHAR);
  812.  
  813.          ôñá½∩ÑΓ Σá⌐½, ºáñá¡¡δ⌐ »«ßαÑñßΓó«¼ Name.
  814.  
  815.                                Rename
  816.                                ------
  817.  
  818.          PROCEDURE Rename(Name,NewName : ARRAY OF CHAR);
  819.  
  820.          ÅÑαÑ¿¼Ñ¡«óδóáÑΓ Σá⌐½ Name ¡á NewName.
  821.  
  822.                               Truncate
  823.                               --------
  824.  
  825.          PROCEDURE Truncate(F: File);
  826.  
  827.          ÄΓßѬáÑΓ Σá⌐½ F »« Ñú« ΓѬπΘπε Σá⌐½«óπε »«º¿µ¿ε.
  828.  
  829.                                GetPos
  830.                                ------
  831.  
  832.          PROCEDURE GetPos(F: File) : LONGCARD;
  833.  
  834.          é«ºóαáΘáÑΓ ΓѬπΘπε Σá⌐½«óπε »«º¿µ¿ε Σá⌐½á F.
  835.  
  836.                                 Seek
  837.                                 ----
  838.  
  839.          PROCEDURE Seek(F : File; Pos: LONGCARD);
  840.  
  841.          ôßΓá¡áó½¿óáÑΓ Σá⌐½«óπε »«º¿µ¿ε Σá⌐½á F ¿ »«¼ÑΘáÑΓ º¡áτÑ¡¿Ñ ó Pos.
  842.  
  843.                                 Size
  844.                                 ----
  845.  
  846.          PROCEDURE Size(F: File) : LONGCARD;
  847.  
  848.          é«ºóαáΘáÑΓ αẼÑα Σá⌐½á F ó íá⌐Γáσ.
  849.  
  850.                               IOresult
  851.                               --------
  852.  
  853.          PROCEDURE IOresult() : CARDINAL;
  854.  
  855.          IOresult ¼«ªÑΓ íδΓ∞ óδºóá¡á »«ß½Ñ í«½∞Φ¿¡ßΓóá  «»Ñαᵿ⌐  ñ½∩  ΓÑßΓ¿α«óá¡¿∩  πß»ÑΦ¡«ßΓ¿
  856.     «»Ñαᵿ¿.  ìπ½∞ «º¡áτáÑΓ,  τΓ« «»Ñαᵿ∩ πß»ÑΦ¡á, ó »α«Γ¿ó¡«¼ ß½πτáÑ IOresult ó«ºóαáΘáÑΓ ¬«ñ
  857.     «Φ¿í¬¿,  «»αÑñѽѡ¡δ⌐ ó äÄæ.  çá¼ÑΓ∞ΓÑ, τΓ« ú½«íá½∞¡á∩ »ÑαѼѡ¡á∩ IOcheck ñ«½ª¡á íδΓ∞ FALSE
  858.     ñ½∩ ¿ß»«½∞º«óá¡¿∩ φΓ«⌐ Σπ¡¬µ¿¿.
  859.  
  860.                        öÄÉîÇÆêÉÄéÇìì¢ë é¢éÄä
  861.                        =====================
  862.  
  863.          Åα«µÑñπαδ, «»¿ßá¡¡δÑ ¡¿ªÑ,  óδ»«½¡∩εΓ Σ«α¼áΓ¿α«óá¡¡δ⌐ óδó«ñ ó Σá⌐½.  Åα«µÑñπαá  ºá»¿ß¿
  864.     ó«º¼«ª¡á  ñ½∩ ¬áªñ«ú« »α«ßΓ«ú« Γ¿»á JPI Modula-2.  éßÑ Wr'»α«ßΓ«⌐-Γ¿»' »α«µÑñπαδ ( ¿ß¬½ετá∩
  865.     WrChar) óδºδóáεΓ WrStrAdj.
  866.  
  867.                           Wr'»α«ßΓ«⌐-Γ¿»'
  868.                           ---------------
  869.  
  870.          PROCEDURE WrChar(F : File; V : CHAR);
  871.          PROCEDURE WrBool(F : File; V : BOOLEAN; Length:INTEGER);
  872.          PROCEDURE WrShtInt(F:File; V:SHORTINT; Length:INTEGER);
  873.          PROCEDURE WrInt(F : File; V : INTEGER; Length:INTEGER);
  874.          PROCEDURE WrLngInt(F:File; V:LONGINT; Length:INTEGER);
  875.          PROCEDURE WrShtCard(F:File;                V:SHORTCARD;
  876.                                      Length:INTEGER);
  877.          PROCEDURE WrCard(F:File; V:CARDINAL; Length:INTEGER);
  878.          PROCEDURE WrLngCard(F:File; V:LONGCARD; Length:INTEGER);
  879.          PROCEDURE WrShtHex(F:File; V:SHORTCARD; Length:INTEGER);
  880.          PROCEDURE WrHex(F:File; V:CARDINAL; Length:INTEGER);
  881.          PROCEDURE WrLngHex(F:File; V:LONGCARD; Length:INTEGER);
  882.  
  883.          PROCEDURE WrReal(F:File; V:REAL; Precision:CARDINAL;
  884.                                           Length:INTEGER);
  885.          PROCEDURE WrLngReal(F:File; V:LONGREAL;
  886.                              Precision:CARDINAL; Length:INTEGER);
  887.  
  888.          Åα«µÑñπαδ Wr'»α«ßΓ«⌐-Γ¿»' »α¿¡¿¼áεΓ ß½ÑñπεΘ¿Ñ »áαá¼ÑΓαδ:  ¡«¼Ñα Σá⌐½á F,  º¡áτÑ¡¿Ñ ñ½∩
  889.     ºá»¿ß¿ V ¿ αẼÑα »«½∩ Σ«α¼áΓ¿α«óá¡¡δσ ñá¡¡δσ Length  (¡Ñ  »α¿¼Ñ¡∩ÑΓß∩  ñ½∩  WrChar).  àß½¿
  890.     Length  «Γα¿µáΓѽ∞¡«,  Σ«α¼áΓ¿α«óá¡¡δÑ  ñá¡¡δÑ íπñπΓ óδα«ó¡Ñ¡δ »« ½Ñó«¼π ¬αáε,  ó »α«Γ¿ó¡«¼
  891.     ß½πτáÑ - »« »αáó«¼π ¬αáε.
  892.          éßÑ »α«µÑñπαδ (¿ß¬½ετá∩ WrChar ¿ WrBool) óδºδóáεΓ ß««ΓóÑΓßΓóπεΘπε »α«µÑñπαπ »αÑ«íαẫ-
  893.     óá¡¿∩ ¿º ¼«ñπ½∩ Str ñ½∩ »«½πτÑ¡¿∩ ßΓ᫬«ó«ú« »αÑñßΓáó½Ñ¡¿∩ º¡áτÑ¡¿∩ V (ß¼.  «»¿ßá¡¿Ñ ¼«ñπ½∩
  894.     Str); φΓá ßΓ᫬á ñá½ÑÑ óδó«ñ¿Γß∩ ß ¿ß»«½∞º«ó᡿Ѽ WrStrAdj.
  895.          ç¡áτÑ¡¿Ñ Γ¿»á CARDINAL ¼«ªÑΓ íδΓ∞ ºá»¿ßá¡«  ó  ΦÑßΓ¡áñµáΓÑα¿τ¡«¼  Σ«α¼áΓÑ  »«ßαÑñßΓó«¼
  896.     »α«µÑñπα WrShtHex, WrHex ¿ WrLngHex.
  897.          WrReal ¿ WrLngReal »α¿¡¿¼áεΓ ñ«»«½¡¿Γѽ∞¡δ⌐ »áαá¼ÑΓα Precision,  ¬«Γ«αδ⌐ ¿¼ÑÑΓ  Γ«  ªÑ
  898.     º¡áτÑ¡¿Ñ,  τΓ« ¿ ó »α«µÑñπαÑ RealToStr (ß¼. «»¿ßá¡¿Ñ ¼«ñπ½∩ Str). â½«íá½∞¡á∩ »ÑαѼѡ¡á∩ Eng
  899.     π¬áºδóáÑΓ, ßΣ«α¼áΓ¿α«óá¡« ½¿ óÑΘÑßΓóÑ¡¡«Ñ º¡áτÑ¡¿Ñ ó ¿¡ªÑ¡Ñα¡«⌐ ¡«Γᵿ¿.
  900.  
  901.                                WrStr
  902.                                -----
  903.  
  904.          PROCEDURE WrStr(F:File; V: ARRAY OF CHAR);
  905.  
  906.         çỿßδóáÑΓ ßΓ᫬π V ó Σá⌐½ F.
  907.  
  908.                               WrStrAdj
  909.                               --------
  910.  
  911.          PROCEDURE WrStrAdj(F:File;  S:ARRAY  OF  CHAR;
  912.                                         Length: INTEGER);
  913.  
  914.          çỿßδóáÑΓ ßΓ᫬π S ó Σá⌐½ F,  ¿ß»«½∞ºπ∩ ABS(Length) ¬á¬ ñ½¿¡π »«½∩.  àß½¿ ABS(Length)
  915.     ¼Ñ¡∞ΦÑ,  τѼ Str.Length(S) ¿ ú½«íá½∞¡á∩ »ÑαѼѡ¡á∩ ChopOff -  TRUE,  Γ«  »«ß½Ññ«óáΓѽ∞¡«ßΓ∞
  916.     '?' ºá»¿ßδóáÑΓß∩ ó¼ÑßΓ« S. àß½¿ Length «Γα¿µáΓѽ∞¡á, Γ« Σ«α¼áΓ¿α«óá¡¡δÑ ñá¡¡δÑ íπñπΓ óδα«ó-
  917.     ¡Ñ¡δ »« ½Ñó«¼π ¬αáε, ó »α«Γ¿ó¡«¼ ß½πτáÑ - »« »αáó«¼π ¬αáε.
  918.  
  919.          Åα¿¼Ñα:
  920.  
  921.          WrStrAdj(StandardOutput,'Hello',10);
  922.          WrLn(StandardOutput);
  923.          WrStrAdj(StandardOutput,'Hello',-10);
  924.  
  925.     ñáÑΓ ß½ÑñπεΘ¿⌐ óδó«ñ:
  926.               Hello
  927.          Hello
  928.  
  929.                              WrCharRep
  930.                              ---------
  931.  
  932.          PROCEDURE WrCharRep(F:File; V:CHAR; Count:CARDINAL);
  933.  
  934.          çỿßδóáÑΓ ß¿¼ó«½ V ó Σá⌐½ F Count τ¿ß½« αáº.
  935.  
  936.                                 WrLn
  937.                                 ----
  938.  
  939.          PROCEDURE WrLn(F:File);
  940.  
  941.          çỿßδóáÑΓ ¡«óπε ßΓ᫬π (CHR(13) (ó«ºóαáΓ ¬áαÑΓ¬¿),  CHR (10) (»ÑαÑó«ñ ßΓ᫬¿)) ó Σá⌐½
  942.     F.
  943.  
  944.                                WrBin
  945.                                -----
  946.  
  947.          PROCEDURE WrBin(F:File; Buf:ARRAY OF BYTE;
  948.                                  Count:CARDINAL);
  949.  
  950.          çỿßδóáÑΓ í½«¬ "¡Ñ«íαáí«Γá¡¡δσ" ¡ÑΣ«α¼áΓ¿α«óá¡¡δσ ñá¡¡δσ,  ºáñá¡¡δσ »«ßαÑñßΓó«¼ Buf ó
  951.     Σá⌐½ F. Count - αẼÑα í½«¬á ó íá⌐Γáσ.
  952.  
  953.  
  954.  
  955.                        öÄÉîÇÆêÉÄéÇìì¢ë ééÄä
  956.                        ====================
  957.  
  958.          â½«íá½∞¡á∩ »ÑαѼѡ¡á∩  EOF πßΓá¡áó½¿óáÑΓß∩ ó TRUE,  Ñß½¿ τ¿ΓáÑΓß∩ ß¿¼ó«½ "¬«¡Ñµ-Σá⌐½á"
  959.     (CHR(26)) ¿½¿ ¡ÑΓ í«½ÑÑ óσ«ñ¡«⌐ ¿¡Σ«α¼áµ¿¿,  ¬«Γ«απε ¼«ª¡« í佫 íδ »α«τ¿ΓáΓ∞  ¿º  ºáñá¡¡«ú«
  960.     Σá⌐½á.
  961.  
  962.                           Rd'»α«ßΓ«⌐-Γ¿»'
  963.                           ---------------
  964.  
  965.          PROCEDURE RdChar    (F : File) : CHAR;
  966.          PROCEDURE RdBool    (F : File) : BOOLEAN;
  967.          PROCEDURE RdShtInt  (F : File) : SHORTINT;
  968.          PROCEDURE RdInt     (F : File) : INTEGER;
  969.          PROCEDURE RdLngInt  (F : File) : LONGINT;
  970.          PROCEDURE RdShtCard (F : File) : SHORTCARD;
  971.          PROCEDURE RdCard    (F : File) : CARDINAL;
  972.          PROCEDURE RdLngCard (F : File) : LONGCARD;
  973.          PROCEDURE RdShtHex  (F : File) : SHORTCARD;
  974.          PROCEDURE RdHex     (F : File) : CARDINAL;
  975.          PROCEDURE RdLngHex  (F : File) : LONGCARD;
  976.          PROCEDURE RdReal    (F : File) : REAL;
  977.          PROCEDURE RdLngReal (F : File) : LONGREAL;
  978.  
  979.          éßÑ »α«µÑñπαδ Rd'»α«ßΓ«⌐-Γ¿»' »«½πτáεΓ Σá⌐½«óπε π»αáó½∩εΘπε F,  ß»Ñµ¿Σ¿µ¿απεΘπε  Σá⌐½,
  980.     ¿º ¬«Γ«α«ú« íπñÑΓ »α«¿ºó«ñ¿Γ∞ß∩ τΓÑ¡¿Ñ,  ¿ ó«ºóαáΘáεΓ º¡áτÑ¡¿∩ '»α«ßΓ«ú« Γ¿»á', ¬á¬ π¬áºá¡«
  981.     ó »α¿óÑñÑ¡¡«¼ óδΦÑ «»¿ßá¡¿¿.
  982.          éßÑ »α«µÑñπαδ  (¿ß¬½ετá∩ RdChar) óδºδóáεΓ RdItem ñ½∩ »«½πτÑ¡¿∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿ ß¿¼-
  983.     ó«½«ó,  ¬«Γ«αá∩ «úαá¡¿τÑ¡á ß¿¼ó«½«¼ ¿º ú½«íá½∞¡«⌐ »ÑαѼѡ¡«⌐ Γ¿»á ¼¡«ªÑßΓó« Separators. ¥Γá
  984.     ßΓα«¬á »αÑ«íαáºπÑΓß∩ ¬ º¡áτÑ¡¿ε, ¿ß»«½∞ºπ∩ «ñ¡π ¿º »α«µÑñπα »αÑ«íαẫóá¡¿∩ ¿º ¼«ñπ½∩ Str.
  985.          Åα«µÑñπαδ RdShtHex, RdHex ¿ RdLngHex τ¿ΓáεΓ º¡áτÑ¡¿∩ Γ¿»á CARDINAL ó ΦÑßΓ¡áñµáΓÑα¿τ¡«¼
  986.     Σ«α¼áΓÑ.
  987.          Åα«µÑñπαá RdBool ó«ºóαáΘáÑΓ TRUE,  Ñß½¿ τ¿ΓáÑΓ ßΓ᫬π 'TRUE', ñ½∩ óßÑσ ñαπú¿σ óδσ«ñ¡δσ
  988.     ñá¡¡δσ «¡á ó«ºóαáΘáÑΓ FALSE.
  989.         æ¿¡Γá¬ß¿ß ñ½∩ ¿¼ÑεΘ¿σ ß¿½π º¡áτÑ¡¿⌐ Γ¿»á REAL ¼«ª¡« ¡á⌐Γ¿ ó âïÇéà 6.
  990.          â½«íá½∞¡á∩ »ÑαѼѡ¡á∩ Äè πßΓá¡áó½¿óáÑΓß∩ ó FALSE, Ñß½¿ º¡áτÑ¡¿Ñ ΓαÑíπѼ«ú« Γ¿»á ¡Ñ ¼«-
  991.     ªÑΓ íδΓ∞ »α«τ¿Γá¡«, Γ.Ñ., Ñß½¿ º¡áτÑ¡¿Ñ ¿¼ÑÑΓ ¡Ññ«»πßΓ¿¼δ⌐ Σ«α¼áΓ ¿½¿ º¡áτÑ¡¿Ñ.
  992.  
  993.                                RdStr
  994.                                -----
  995.  
  996.          PROCEDURE RdStr(F:File; VAR V:ARRAY OF CHAR);
  997.  
  998.          ù¿ΓáÑΓ ßΓα«¬π ¿º Σá⌐½á F ¿ ó«ºóαáΘáÑΓ ÑÑ ó V. æ¿¼ó«½δ τ¿ΓáεΓß∩ ñ« ΓÑσ »«α, »«¬á ¡Ñ óδ-
  999.     »«½¡¿Γß∩ «ñ¡« ¿º ß½ÑñπεΘ¿σ πß½«ó¿⌐:
  1000.          - »α«τ¿Γá¡ ß¿¼ó«½ "¬«¡Ñµ Σá⌐½á" (CHR(26)),  EOF πßΓá¡«ó½Ñ¡ ó TRUE, ¿ V ºáóÑαΦáÑΓß∩ ¡π-
  1001.     ½Ñ¼;
  1002.          - »α«τ¿Γá¡ ß¿¼ó«½ "ó«ºóαáΓ ¬áαÑΓ¬¿" (CHR(13)). V ºáóÑαΦáÑΓß∩ ¡π½Ñ¼;
  1003.          - ßΓα«¬á ºá»«½¡Ñ¡á, Γ.¬. HIGH(V)+1 ß¿¼ó«½«ó »α«τ¿Γá¡«. V ºáóÑαΦáÑΓß∩ ¡Ñ ¡π½Ñ¼.
  1004.  
  1005.                                RdItem
  1006.                                ------
  1007.  
  1008.          PROCEDURE RdItem(F:File; VAR V: ARRAY OF CHAR);
  1009.  
  1010.          RdItem τ¿ΓáÑΓ ßΓ᫬π (¿º Σá⌐½á F), ¬«Γ«αá∩ «Γñѽѡᠻ«ßαÑñßΓó«¼ ß¿¼ó«½«ó ¿º ú½«íá½∞¡«⌐
  1011.     »ÑαѼѡ¡«⌐ Separators. æΓ᫬á ó«ºóαáΘáÑΓß∩ ó V.
  1012.  
  1013.                                RdBin
  1014.                                -----
  1015.  
  1016.          PROCEDURE RdBin(F       : File;
  1017.                          VAR Buf : ARRAY OF BYTE;
  1018.                          Count   : CARDINAL) : CARDINAL;
  1019.  
  1020.          ù¿ΓáÑΓ í½«¬  αẼÑα«¼ Count "¡Ñ«íαáí«Γá¡¡δσ" íá⌐Γ«ó ¿º Σá⌐½á F ¿ ó«ºóαáΘáÑΓ Ñú« ó Buf.
  1021.  
  1022.  
  1023.                         ÄüÉÇüÄÆèÇ èÇÆÇïÄâÄé
  1024.                         ===================
  1025.  
  1026.                                ChDir
  1027.                                -----
  1028.  
  1029.          PROCEDURE ChDir(Name : ARRAY OF CHAR);
  1030.  
  1031.          êº¼Ñ¡∩ÑΓ ΓѬπΘπε ñ¿αÑ¬Γ«α¿ε.  Name ß»Ñµ¿Σ¿µ¿απÑΓ ¡«óδ⌐ »πΓ∞  ñ½∩  ñ¿αÑ¬Γ«α¿¿  ¿  ¼«ªÑΓ
  1032.     ó¬½ετáΓ∞ ¿¼∩ πßΓα«⌐ßΓóá.
  1033.  
  1034.                                MkDir
  1035.                                -----
  1036.  
  1037.          PROCEDURE MkDir(Name : ARRAY OF CHAR);
  1038.  
  1039.          æ«ºñáÑΓ ¡«óπε »«ññ¿αÑ¬Γ«α¿ε ¡á »πΓ¿, «»αÑñѽѡ¡«¼ »«ßαÑñßΓó«¼ Name.
  1040.                                RmDir
  1041.                                -----
  1042.  
  1043.          PROCEDURE RmDir(Name : ARRAY OF CHAR);
  1044.  
  1045.          ä¿αÑ¬Γ«α¿∩, ß»Ñµ¿Σ¿µ¿α«óá¡¡á∩ τÑαѺ NamÑ (¬«Γ«αá∩ ñ«½ª¡á íδΓ∞ »πßΓ«⌐),  ¿ß¬½ετáÑΓß∩ ¿º
  1046.     ßΓαπ¬Γπαδ ñ¿αÑ¬Γ«α¿⌐. çá¼ÑΓ¿¼, τΓ« ΓѬπΘá∩ ñ¿αÑ¬Γ«α¿∩ ¡Ñ ¼«ªÑΓ íδΓ∞ ¿ß¬½ετÑ¡á.
  1047.  
  1048.                                GetDir
  1049.                                ------
  1050.  
  1051.          PROCEDURE GetDir(    Drive : SHORTCARD;
  1052.                           VAR Name  : ARRAY OF CHAR);
  1053.  
  1054.          GetDir ó«ºóαáΘáÑΓ »«½¡«Ñ ¿¼∩ »πΓ¿ ó Name ñ½∩ ΓѬπΘÑ⌐ ñ¿αÑ¬Γ«α¿¿ ¡á πßΓα«⌐ßΓóÑ,  ß»Ñµ¿-
  1055.     Σ¿µ¿α«óá¡¡á∩ τÑαѺ Drive (0=»« π¼«½τá¡¿ε, 1=πßΓα«⌐ßΓó« Ç ¿ Γ.ñ.).
  1056.  
  1057.                            ReadFirstEntry
  1058.                            --------------
  1059.  
  1060.          TYPE
  1061.            PathTail = ARRAY[0..12] OF CHAR;
  1062.            FileAttr = SET OF (readonly,hidden,system,
  1063.                               volume,directory,archive);
  1064.            DirEntry = RECORD
  1065.                         rsvd : ARRAY[0..20] OF SHORTCARD;
  1066.                                    (* ºáαѺÑαó¿α«óá¡« *)
  1067.                         attr : FileAttr;
  1068.                         time : CARDINAL;
  1069.                         date : CARDINAL;
  1070.                         size : LONGCARD;
  1071.                         name : PathTail;
  1072.                       END;
  1073.          PROCEDURE ReadFirstEntry( DirName : ARRAY OF CHAR;
  1074.                                    Attr    : FileAttr;
  1075.                                    VAR D   : DirEntry) : BOOLEAN;
  1076.  
  1077.          êΘÑΓ ñ¿αÑ¬Γ«α¿ε DirName,  ß«ñÑαªáΘπε ¿¼∩ πßΓα«⌐ßΓóá, »πΓ∞ ¿ ¿¼∩ Σá⌐½á ñ½∩ Σá⌐½á, ¬«Γ«-
  1078.     αδ⌐ ñ«½ªÑ¡ íδΓ∞ ¡á⌐ñÑ¡.  ê¼∩ Σá⌐½á ¼«ªÑΓ ß«ñÑαªáΓ∞ ß¿¼ó«½δ Φáí½«¡á '*' ¿ '?'. Åáαá¼ÑΓα Attr
  1079.     ΓαÑíπÑΓ ¡Ñ¬«Γ«α«ú« «íΩ∩ߡѡ¿∩:  Ñß½¿ «¡ - »πßΓ«Ñ ¼¡«ªÑßΓó«, Γ« ¿ΘÑΓß∩ Γ«½∞¬« óσ«ªñÑ¡¿Ñ ¡«α-
  1080.     ¼á½∞¡δσ  Σá⌐½«ó  (Γ«  ªÑ »α¿¼Ñ¡∩ÑΓß∩,  Ñß½¿ πßΓá¡«ó½Ñ¡δ áΓα¿íπΓδ readonly ¿ archive);  Ñß½¿
  1081.     ñ«½ª¡« íδΓ∞ óº∩Γ« ó αáßτÑΓ óσ«ªñÑ¡¿Ñ ß¬αδΓδσ Σá⌐½«ó,  ß¿ßΓѼ¡δσ Σá⌐½«ó ¿½¿  ñ¿αÑ¬Γ«α¿⌐,  Γ«
  1082.     ß««ΓóÑΓßΓóπεΘ¿⌐ áΓα¿íπΓ ñ«½ªÑ¡ íδΓ∞ πßΓá¡«ó½Ñ¡; ¡á¬«¡Ñµ, Ñß½¿ πßΓá¡«ó½Ñ¡ áΓα¿íπΓ volume, Γ«
  1083.     ó«ºóαáΘáÑΓß∩ Γ«½∞¬« ¿¼∩ Γ«¼á.
  1084.          àß½¿ »«ñσ«ñ∩ΘÑÑ óσ«ªñÑ¡¿Ñ ¡á⌐ñÑ¡«, ReadFirstEntry ó«ºóαáΘáÑΓ TRUE, ¿ D íπñÑΓ ß«ñÑαªáΓ∞
  1085.     ñ¿αÑ¬Γ«α¿ε óσ«ªñÑ¡¿∩.
  1086.          æ¼«Γα¿ ΓᬪѠ»α«µÑñπαπ ReadNextEntry.
  1087.          Åα¿¼Ñα:
  1088.  
  1089.          ReadFirstEntry("c:\com\*.*",FileAttr{hidden,system,
  1090.                         directory},e)
  1091.  
  1092.          Å«ñσ«ñ∩Θ¿¼¿ íπñπΓ óßÑ Σá⌐½δ ñ¿αÑ¬Γ«α¿¿ "c:\com",  ¿ e íπñÑΓ ß«ñÑαªáΓ∞ »Ñαó«Ñ óσ«ªñÑ¡¿Ñ
  1093.     (Ñß½¿ αѺπ½∞ΓáΓ Σπ¡¬µ¿¿ - TRUE).
  1094.  
  1095.  
  1096.