‗RW: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
Строка 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-Форта, сложно придумать сценарий, в котором прикладному программисту пришлось бы к нему | Подчёркивание часто ставится в начале имён служебных или системно-зависимых библиотечных функций. Хотя слово _RW относительно стандартно, опираясь на R/W из fig-Форта, сложно придумать сценарий, в котором прикладному программисту пришлось бы обращаться к нему напрямую. При необходимости заголовок _RW можно исключить, освободив место в [[Память программ|памяти программ]]. | ||
=== R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) === | === R/W в fig-FORTH Release 1 glossary, май 1979 (англ.) === |
Версия от 21:55, 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-Форта, сложно придумать сценарий, в котором прикладному программисту пришлось бы обращаться к нему напрямую. При необходимости заголовок _RW можно исключить, освободив место в памяти программ.
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$'
Ссылки
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |