Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ( ” ©«®¢ë© ¢¢®¤-¢ë¢®¤.
  2. )
  3.  
  4. CREATE LT 0xD C, 0xA C, 0xD C, 0xA C, \ line terminator
  5. CREATE LTL 2 ,   \ line terminator length
  6.  
  7.  
  8. : DOS-LINES ( -- )
  9.   0xA0D LT ! 2 LTL !
  10. ;
  11. : UNIX-LINES ( -- )
  12.   0xA0A LT ! 1 LTL !
  13. ;
  14.  
  15.  
  16. : READ-FILE ( c-addr u1 fileid -- u2 ior ) \ 94 FILE
  17. \ à®ç¥áâì u1 ᨬ¢®«®¢ ¢ c-addr ¨§ ⥪ã饩 ¯®§¨æ¨¨ ä ©« ,
  18. \ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid.
  19. \ …᫨ u1 ᨬ¢®«®¢ ¯à®ç¨â ­® ¡¥§ ¨áª«î祭¨©, ior ­®«ì ¨ u2 à ¢¥­ u1.
  20. \ …᫨ ª®­¥æ ä ©«  ¤®á⨣­ãâ ¤® ¯à®ç⥭¨ï u1 ᨬ¢®«®¢, ior ­®«ì
  21. \ ¨ u2 - ª®«¨ç¥á⢮ ॠ«ì­® ¯à®ç¨â ­­ëå ᨬ¢®«®¢.
  22. \ …᫨ ®¯¥à æ¨ï ¯à®¨§¢®¤¨âáï ª®£¤  §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
  23. \ FILE-POSITION à ¢­® §­ ç¥­¨î, ¢®§¢à é ¥¬®¬ã FILE-SIZE ¤«ï ä ©« 
  24. \ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ior ¨ u2 ­ã«¨.
  25. \ …᫨ ¢®§­¨ª«  ¨áª«îç¨â¥«ì­ ï á¨âã æ¨ï, â® ior - ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥©
  26. \ ª®¤ १ã«ìâ â  ¢¢®¤ /¢ë¢®¤ , ¨ u2 - ª®«¨ç¥á⢮ ­®à¬ «ì­® ¯¥à¥¤ ­­ëå ¢
  27. \ c-addr ᨬ¢®«®¢.
  28. \ ¥®¯à¥¤¥«¥­­ ï á¨âã æ¨ï ¢®§­¨ª ¥â, ¥á«¨ ®¯¥à æ¨ï ¢ë¯®«­ï¥âáï, ª®£¤ 
  29. \ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥ FILE-POSITION ¡®«ìè¥ ç¥¬ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
  30. \ FILE-SIZE ¤«ï ä ©« , ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ¨«¨ âॡ㥬 ï ®¯¥à æ¨ï
  31. \ ¯ëâ ¥âáï ¯à®ç¥áâì ­¥§ ¯¨á ­­ãî ç áâì ä ©« .
  32. \ ®á«¥ § ¢¥à襭¨ï ®¯¥à æ¨¨ FILE-POSITION ¢®§¢à â¨â á«¥¤ãîéãî ¯®§¨æ¨î
  33. \ ¢ ä ©«¥ ¯®á«¥ ¯®á«¥¤­¥£® ¯à®ç¨â ­­®£® ᨬ¢®« .
  34.   DUP >R .CODE 0!
  35.       R@ .SIZE !
  36.       R@ .DATA !
  37.       R@ 70 SYS2
  38.    EBX@ SWAP
  39.    DUP 6 = IF DROP 0 THEN
  40.    DUP 0=
  41.         IF      R@  .FIRST D@
  42.                 R@  .SIZE @ 0 D+
  43.                 R@  .FIRST D!
  44.         THEN
  45.    RDROP
  46. ;
  47.  
  48. 22 CONSTANT MAX_OPEN_FILES
  49.  
  50. CREATE FILE_STR_BUF FILE_STR 1+ MAX_OPEN_FILES  * ALLOT
  51.  
  52. : FALLOC  ( -- 0|fid )
  53.   FILE_STR_BUF FILE_STR MAX_OPEN_FILES  * BOUNDS
  54.   BEGIN DUP .NAME @ 0=
  55.         IF NIP EXIT THEN
  56.         FILE_STR + 2DUP U<
  57.   UNTIL 2DROP 0
  58. ;
  59.  
  60. : OPEN-FILE ( c-addr u fam -- fileid ior )
  61. \ Žâªàëâì ä ©« á ¨¬¥­¥¬, § ¤ ­­ë¬ áâப®© c-addr u, á ¬¥â®¤®¬ ¤®áâ㯠 fam.
  62. \ ‘¬ëá« §­ ç¥­¨ï fam ®¯à¥¤¥«¥­ ॠ«¨§ æ¨¥©.
  63. \ …᫨ ä ©« ãᯥ譮 ®âªàëâ, ior ­®«ì, fileid ¥£® ¨¤¥­â¨ä¨ª â®à, ¨ ä ©«
  64. \ ¯®§¨æ¨®­¨à®¢ ­ ­  ­ ç «®.
  65. \ ˆ­ ç¥ ior - ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥© ª®¤ १ã«ìâ â  ¢¢®¤ /¢ë¢®¤ ,
  66. \ ¨ fileid ­¥®¯à¥¤¥«¥­.
  67.   DROP
  68. \  FILE_STR
  69.  FALLOC DUP
  70.  IF
  71.   >R
  72.   R@  FILE_STR ERASE
  73.   R@ .NAME SWAP  MOVE
  74.   R> 0  EXIT
  75.  THEN -1
  76. ;
  77.  
  78. : CLOSE-FILE ( fileid -- ior ) \ 94 FILE
  79. \ ‡ ªàëâì ä ©«, § ¤ ­­ë© fileid.
  80.   .NAME 0! 0
  81. ;
  82.  
  83.  
  84. USER _fp1
  85. USER _fp2
  86. USER _addr
  87.  
  88.  
  89. : READ-LINE ( c-addr u1 fileid -- u2 flag ior ) \ 94 FILE
  90. \ à®ç¥áâì á«¥¤ãîéãî áâப㠨§ ä ©« , § ¤ ­­®£® fileid, ¢ ¯ ¬ïâì
  91. \ ¯®  ¤à¥áã c-addr. —¨â ¥âáï ­¥ ¡®«ìè¥ u1 ᨬ¢®«®¢. „® ¤¢ãå
  92. \ ®¯à¥¤¥«¥­­ëå ॠ«¨§ æ¨¥© ᨬ¢®«®¢ "ª®­¥æ áâப¨" ¬®£ãâ ¡ëâì
  93. \ ¯à®ç¨â ­ë ¢ ¯ ¬ïâì §  ª®­æ®¬ áâப¨, ­® ­¥ ¢ª«îç¥­ë ¢ áç¥â稪 u2.
  94. \ ãä¥à áâப¨ c-addr ¤®«¦¥­ ¨¬¥âì à §¬¥à ª ª ¬¨­¨¬ã¬ u1+2 ᨬ¢®« .
  95. \ …᫨ ®¯¥à æ¨ï ãᯥ譠, flag "¨á⨭ " ¨ ior ­®«ì. …᫨ ª®­¥æ áâப¨
  96. \ ¯®«ã祭 ¤® ⮣® ª ª ¯à®ç¨â ­ë u1 ᨬ¢®«®¢, â® u2 - ç¨á«® ॠ«ì­®
  97. \ ¯à®ç¨â ­­ëå ᨬ¢®«®¢ (0<=u2<=u1), ­¥ áç¨â ï ᨬ¢®«®¢ "ª®­¥æ áâப¨".
  98. \ Š®£¤  u1=u2 ª®­¥æ áâப¨ 㦥 ¯®«ã祭.
  99. \ …᫨ ®¯¥à æ¨ï ¯à®¨§¢®¤¨âáï, ª®£¤  §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
  100. \ FILE-POSITION à ¢­® §­ ç¥­¨î, ¢®§¢à é ¥¬®¬ã FILE-SIZE ¤«ï ä ©« ,
  101. \ ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, flag "«®¦ì", ior ­®«ì, ¨ u2 ­®«ì.
  102. \ …᫨ ior ­¥ ­®«ì, â® ¯à®¨§®è«  ¨áª«îç¨â¥«ì­ ï á¨âã æ¨ï ¨ ior -
  103. \ ®¯à¥¤¥«¥­­ë© ॠ«¨§ æ¨¥© ª®¤ १ã«ìâ â  ¢¢®¤ -¢ë¢®¤ .
  104. \ ¥®¯à¥¤¥«¥­­ ï á¨âã æ¨ï ¢®§­¨ª ¥â, ¥á«¨ ®¯¥à æ¨ï ¢ë¯®«­ï¥âáï, ª®£¤ 
  105. \ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥ FILE-POSITION ¡®«ìè¥ ç¥¬ §­ ç¥­¨¥, ¢®§¢à é ¥¬®¥
  106. \ FILE-SIZE ¤«ï ä ©« , ¨¤¥­â¨ä¨æ¨à㥬®£® fileid, ¨«¨ âॡ㥬 ï ®¯¥à æ¨ï
  107. \ ¯ëâ ¥âáï ¯à®ç¥áâì ­¥§ ¯¨á ­­ãî ç áâì ä ©« .
  108. \ ®á«¥ § ¢¥à襭¨ï ®¯¥à æ¨¨ FILE-POSITION ¢®§¢à â¨â á«¥¤ãîéãî ¯®§¨æ¨î
  109. \ ¢ ä ©«¥ ¯®á«¥ ¯®á«¥¤­¥£® ¯à®ç¨â ­­®£® ᨬ¢®« .
  110.   DUP >R
  111.   FILE-POSITION IF 2DROP 0 0 THEN _fp1 ! _fp2 !
  112.   1+
  113.   OVER _addr !
  114.  
  115.   R@ READ-FILE ?DUP IF NIP RDROP 0 0 ROT EXIT THEN
  116.  
  117.   DUP >R 0= IF RDROP RDROP 0 0 0 EXIT THEN \ ¡ë«¨ ¢ ª®­æ¥ ä ©« 
  118.   _addr @ R@ LT 1+ 1 SEARCH
  119.   IF   \ ­ ©¤¥­ à §¤¥«¨â¥«ì áâப
  120.      DROP  _addr @ -
  121.      DUP 1+ S>D _fp2 @ _fp1 @ D+ RDROP R> REPOSITION-FILE DROP
  122.      DUP _addr @ + 1- C@  0xD = IF 1- THEN
  123.   ELSE   \ ­¥ ­ ©¤¥­ à §¤¥«¨â¥«ì áâப
  124.      2DROP
  125.      R> RDROP  \ ¥á«¨ áâப  ¯à®ç¨â ­  ­¥ ¯®«­®áâìî - ¡ã¤¥â ࠧ१ ­ 
  126.   THEN
  127.   TRUE 0
  128. ;
  129.  
  130. : FILE-POSITION ( fileid -- ud ior ) \ 94 FILE
  131. \ ud - ⥪ãé ï ¯®§¨æ¨ï ¢ ä ©«¥, ¨¤¥­â¨ä¨æ¨à㥬®¬ fileid.
  132.   .FIRST D@ 0
  133. ;
  134.  
  135. : REPOSITION-FILE ( ud fileid -- ior ) \ 94 FILE
  136. \ ¥à¥¯®§¨æ¨®­¨à®¢ âì ä ©«, ¨¤¥­â¨ä¨æ¨àã¥¬ë© fileid, ­  ud.
  137.   .FIRST D! 0
  138. ;
  139.  
  140.