‗RW: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 13: Строка 13:
Слово _RW имеет своим прототипом слово R/W из Форт ИТЭФ и fig-Форта, но в [[Каллисто]] адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя R/W конфликтует со [http://forth.sourceforge.net/standard/dpans/dpans11.htm#11.6.1.2056 словом R/W] из стандартов ANS FORTH и [http://www.forth200x.org/documents/html3/file/RDivW.html Форт-2012].
Слово _RW имеет своим прототипом слово R/W из Форт ИТЭФ и fig-Форта, но в [[Каллисто]] адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя R/W конфликтует со [http://forth.sourceforge.net/standard/dpans/dpans11.htm#11.6.1.2056 словом R/W] из стандартов ANS FORTH и [http://www.forth200x.org/documents/html3/file/RDivW.html Форт-2012].


Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций.
Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций. Хотя слово _RW относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором прикладному программисту пришлось бы к нему обращаться. При необходимости его заголовок можно исключить, освободив место в [[Память программ|памяти программ]].


=== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
=== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) ===

Версия от 21:54, 19 июня 2016

_RW — встроенное слово Каллисто. Низкоуровневый ввод/вывод блока.

_RW            ( c1 c2 −− )                         Чтение/запись (c2=1/0) блока номер c1.

c1 − номер экрана (блока), к которому происходит обращение

c2=0 запись блока: №блока 0 _RW

c2=1 чтение блока: №блока 1 _RW

Ввод слова _RW

В режиме ЛАТ последовательно нажмите клавиши  ШГ→   ×   В↑ 

История

Слово _RW имеет своим прототипом слово R/W из Форт ИТЭФ и fig-Форта, но в Каллисто адрес буфера постоянен и, как параметр, не передаётся. К сожалению, имя R/W конфликтует со словом R/W из стандартов ANS FORTH и Форт-2012.

Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций. Хотя слово _RW относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором прикладному программисту пришлось бы к нему обращаться. При необходимости его заголовок можно исключить, освободив место в памяти программ.

R/W в fig-FORTH Release 1 glossary, май 1979 (англ.)

R/W           addr blk f --
       The fig-FORTH standard disc read-write linkage. addr specifies the
       source or destination block buffer, blk is the sequential number of
       the referenced block; and f is a flag for f=O write and f=l read.
       R/W determines the location on mass storage, performs the read-write
       and performs any error checking.

Реализация

В ФОРТ-ЕС общением с диском занимались примитивы RBLK и WBLK

Вот их описания и «болванки» определений:

RBLK     *   А,+N-> ПРОЧЕСТЬ ЭКРАН +N ПО АДРЕСУ A                6
WBLK     *  A,+N-> ЗАПИСАТЬ ЭКРАН +N ИЗ АДРЕСА A               6

                    Экран номер 6
( 09.09.86 KEY CR EMIT TYPE (EXPECT/ RBLK MBLK )
(  следующие определения дают только имена процедур)

CODE  RBLK  ( A,N-> ПРОЧИТАТЬ ЭКРАН N В БУФЕР  A) END-CODE
CODE  WBLK  ( A,N->  ЗАПИСАТЬ ЭКРАН N ИЗ БУФЕРА А ) END-CODE

Пример реализации R/W из fig-Форта, симулирующий блоки в ОЗУ:

 HEX
 4000 CONSTANT LO ( начало буферной области )
 6800 CONSTANT HI ( эквивалент 10 экранов )
 : _RW >R ( сохранить boolean )
     B/BUF × LO + ↑
     HI > 6 ?ERROR ( проверка диапазона )
     R> IF ( чтение ) ↔ ENDIF
     B/BUF CMOVE ;

Определение слова R/W в FORTH ИТЭФ:

             HEAD    203Q,'R/',327Q,RW                    ; R/W

   ; Открытие файла

             MOV   DX, OFFSET FCB
             MOV   AH, 0FH
             INT   21H
             CMP   AL, 0FFH
             JE    ERR0
             POP   BX  ; R/W - флаг
             POP   AX  ; Номер блока
             POP   DX  ; Адрес буфера
             DEC   AX
             MOV   CL, 3
             SAL   AX, CL  ; (BLOCK#-1)*8
             MOV   RANDREC,AX
             MOV   RANDREC+2,0
             CMP   BX, 0
             JNE   RED
   ; WRITE
             MOV   BX, DX
             MOV   CX, 8      ; Номер записи
   WR:       MOV   DX, BX
             MOV   AH,1AH     ; Запись адреса буфера
             INT   21H
             MOV   DX,OFFSET FCB
             MOV   AH, 22Н    ; Запись RECORD
             INT   21H
             CMP   AL, 0
             JNE   ERR1
             INC   RANDREC    ; Коррекция адреса буфера
             ADD   BX, 80H
             LOOP  WR
             JMP   OUT
   RED:      MOV   CX, 8
             MOV   BX, DX
   RD:       MOV   DX, BX
             MOV   AH, 1AH     ; Запись адреса буфера
             INT   21H
             MOV   DX, OFFSET  FCB
             MOV   AH, 21Н
             INT   21H
             CMP   AL, 0
             JNE   ERR3
             INC   RANDREC     ; Коррекция адреса
             ADD   BX, 80H
             LOO   RD
   OUT:      MOV   DX, OFFSET  FCB  ; Закрытие файла
             MOV   AH, 10H
             INT   21H
             CMP   AL, 0
             JNE   ERR2
   EXIT:     NEXT
   ERR0:     MOV   DX, OFFSET  ERMESO
             JMP   DONE
   ERR1:     MOV   DX, OFFSET  ERMES1
             JMP   DONE
   ERR2:     MOV   DX, OFFSET  ERMES2
             JMP   DONE
   ERR3:     MOV   DX, OFFSET  ERMES3
   DONE:     MOV   AH, 9Н
             INT   21H
             JMP   EXIT
             ...
   FCB       LABEL WORD
   DRIVE     DB    1
   FN        DB    'FORTH   '
   EXT       DB    'DAT'
   CURBLK    DW    0          ; Относительное начало файла
   RECSIZE   DW    80H
   FILESIZE  DW    5000,0
   DATE      DB    0,0
             DB    0,0,0,0,0, 0,0,0,0,0
   CURREC    DB    0
   RANDREC   DW    0,0
   ERMES0    DB    'ERR OPENING FILE$'
   ERMES1    DB    'ERR WRITING FILE$'
   ERMES2    DB    'ERR CLOSING FILE$'
   ERMES3    DB    'ERR READING FILE$'

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.