BUFFER
Перейти к навигации
Перейти к поиску
BUFFER (буфер) — стандартное слово Каллисто. Приписать буфер к блоку на электронном диске.
BUFFER ( c −− a ) Приписать буферу блок c и дать адрес буфера. Сам блок с диска не считывать.
Резервирует блок в памяти и приписывает ему номер u (как и BLOCK ), но сам блок с диска не считывается. Возвращаемый адрес a фиксирован и в Каллисто 1.0 всегда равен 15096.
Ввод слова BUFFER[править]
В режиме ЛАТ последовательно нажмите клавиши В/О 3 П П ИП ×
BUFFER в стандарте ANS Forth[править]
7.6.1.0820 BUFFER BLOCK ( u -- a-addr ) a-addr - адрес первого символа блочного буфера назначенного блоку u. Содержание блока не определено. Неопределенная ситуация существует, если u - не доступный номер блока. Если блок u - уже в блочном буфере, a-addr - адрес этого блочного буфера. Если блок u - уже не в памяти и есть свободный буфер, a-addr - адрес этого блочного буфера. Если блок u - уже не в памяти и нет никаких свободных блочных буферов, освобождает блочный буфер. Если для блока в этом буфере было выполнено UPDATE, перемещает блок в запоминающее устройство. a-addr - адрес этого блочного буфера. При завершении операции, блочный буфер указанный a-addr - текущий буфер блоков и назначен на u. См.: 7.6.1.0800 BLOCK.
История[править]
Слово BUFFER появилось в 1970 году, когда Чак Мур перенёс Форт на ассемблер Univac 1108 для программирования системы ввода заказов по сети выделенных линий в Mohasco Industries, Inc (Amsterdam NY, англ.).
BUFFER избегало чтения диска, когда было известно, что желаемый блок пуст.
BUFFER в предыдущем стандарте Forth-83 (англ.)[править]
BUFFER u -- addr M,83 Assigns a block buffer to block u. addr is the address of the first byte of the block within its buffer. This function is fully specified by the definition for BLOCK except that if the block is not already in memory it might not be transferred from mass storage. The contents of the block buffer assigned to block u by BUFFER are unspecified.
BUFFER в стандарте Forth-79 (англ.)[править]
BUFFER n -- addr 130 Obtain the next block buffer, assigning it to block n. The block is not read from mass storage. If the previous contents of the buffer has been marked as UPDATEd, it is written to mass storage. If correct writing to mass storage is not possible, an error condition exists. The address left is the first byte within the buffer for data storage. n is an unsigned number.
BUFFER в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
BUFFER n --- addr Obtain the next memory buffer, assigning it to block n. If the contents of the buffer is marked as updated, it is written to the disc The block is not read from the disc. The address left is the first cell within the buffer for data storage.
Реализация[править]
3483 ;#BUFFER 3484 ; BUFFER ( c −− a ) Приписать буферу блок c и дать адрес буфера. Сам блок с диска не считывать. 3485 ; Зарезервировать блок в памяти и приписать ему номер u (как и BLOCK ), но сам блок с диска не считывать. 3486 LBUFFE: .DB 6 3487 .TEXT "BUFFER" ; ( №блока −− 15096 ) 3488 .DW LFLUSH 3489 BUFFE: .DW CALL, BUFN 3490 .DW DUP,AT,ZLESS, ZBRAN,BR2 ; Буфер был изменён? 3491 .DW BUFN,ONEP,CAT ; Достать номер изменённого блока 3492 .DW ZERO,RW ; Записать буфер на диск 3493 BR2: .DW STORE ; Сохранить новый номер блока, сбросив флаг UPDATE 3494 BR3: .DW LITP 3495 .DB 3aH,0f8H ; rrDISKBUF 15096 = 3af8 3496 REXIT: .DW EXIT
Советская реализация[править]
Описание и определение слова BUFFER в ядре ФОРТ-ЕС:
BUFFER +N->A ПРИПИСАТЬ БЛОКУ +N БУФЕР 23 Экран номер 25 ( 31.03.86 +BUF BUFFER BLOCK EMPTY-BUFFERS UPDATE ) : BUFFER ( +N->A) OFFSET @ + USE @ DUP >R ( ИЩЕМ СВОБОДНЫЙ БУФЕР) BEGIN +BUF UNTIL USE ! R@ @ 0< IF ( УСТАНОВЛЕН ПРИЗНАК "UPDATE") R@ 2+ R@ @ 32767 AND WBLK THEN R@ ! R@ PREV ! R> 2+ ;
Определение слова BUFFER в FORTH ИТЭФ:
HEAD 206Q,'BUFFE',322Q,BUFFE,$COL ; BUFFER DW USE,AT,TOR,I BR1: DW PBUF,ZBRAN,BR1-$,USE,STORE DW I,AT,ZLESS,ZBRAN,BR2-$ DW I,TWOP,I,X,ZERO,RW BR2: DW I,STORE,I,PREV,STORE,FROMR,TWOP,SEMI
Ссылки[править]
- Исходный текст слова BUFFER в Каллисто Классик 1.0
- См. слова BLOCK, UPDATE
- Слово BUFFER в стандарте ANS Forth (англ.)
- Слово BUFFER в черновике Forth 200x (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
![]() |
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
![]() |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |