Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''−TRAILING''' — стандартное слово [[Каллисто]]. Определить длину строки без завершающих [[пробел]]ов. | | '''−TRAILING''' — стандартное слово [[Каллисто]]. |
| −TRAILING ( a u1 −− a u2 ) Отсечь конечные пробелы.
| |
| Команда ADR N −TRAILING сокращает значение N на число [[пробел]]ов между последним значащим символом и адресом ADR+N. Этот оператор может использоваться перед [[TYPE]] и особенно полезен при печати на старых принтерах, так как исключает холостые пробеги каретки.
| |
| | |
| == Ввод слова −TRAILING ==
| |
| В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ×|{{Серая клавиша|×}}]] {{ШГ←}} [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]]
| |
| | |
| Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]].
| |
| | |
| == −TRAILING в стандарте ANS Forth ==
| |
| 17.6.1.0170 -TRAILING "dash-trailing" STRING
| |
| ( c-addr u1 -- c-addr u2 )
| |
| Если u1 больше чем нуль, u2 равно u1 минус число пробелов в конце
| |
| символьной строки, определенной c-addr u1. Если u1 нуль или вся
| |
| строка состоит из пробелов, u2 нулевой.
| |
| | |
| == История ==
| |
| Слово −TRAILING взято в [[Каллисто]] из Форта, в котором входит во все стандарты, включая fig-Форт, и не менялось с 1979 года. Это классическое слово, во многом определяющее образ мышления программистов на Форте.
| |
| | |
| В Форте FSP88 и FORTH ИТЭФ это слово было известно под именем -TRAIL
| |
| | |
| === −TRAILING в предыдущем стандарте Forth-83 (англ.) ===
| |
| -TRAILING addr +n1 -- addr +n2 79 "dash-trailing"
| |
| The character count +n1 of a text string beginning at addr
| |
| is adjusted to exclude trailing spaces. If +n1 is zero,
| |
| then +n2 is also zero. If the entire string consists of
| |
| spaces, then +n2 is zero.
| |
| | |
| === −TRAILING в стандарте Forth-79 (англ.) ===
| |
| -TRAILING addr n1 -- addr n2 148 "dash-trailing"
| |
| Adjust the character count n1 of a text string beginning at
| |
| addr to exclude trailing blanks, i.e., the characters at
| |
| addr+n2 to addr+n1-1 are blanks. An error condition exists if
| |
| n1 is negative.
| |
| | |
| === −TRAILING в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| |
| -TRAILING addr n1 --- addr n2
| |
| Adjusts the character count n1 of a text string beginning address to
| |
| suppress the output of trailing blanks. i.e. the characters at
| |
| addr+n1 to addr+n2 are blanks.
| |
| | |
| == Реализация ==
| |
| <pre>
| |
| 2386 ;#MinusTRAILING
| |
| 2387 ; −TRAILING ( a U1 −− a U2 ) Отсечь конечные пробелы.
| |
| 2388 ; Преобразует число литер U1 в строке, начинающейся с адреса a, в число U2, не включающее
| |
| 2389 ; число пробелов, которые имеются в конце строки. Адрес a остаётся неизменным.
| |
| 2390 ; Мы считаем, что дело происходит в области данных.
| |
| 2391 LDTRAI: .DB 9
| |
| 2392 .TEXT "−TRAILING"
| |
| 2393 .DW LDEC
| |
| 2394 DTRAI: .DW JDTRAI
| |
| 2395 JDTRAI: RM3 M8 M5 KRM5
| |
| 2396 1 EE 4 − KX>=09
| |
| 2397 KRM8 M0 +/− KX<09
| |
| 2398 − M1
| |
| 2399 DTRAI1: KRM1 32 −
| |
| 2400 FX=0 DTRAI2
| |
| 2401 FL0 DTRAI1
| |
| 2402 CX M0
| |
| 2403 DTRAI2: RM0 KM8
| |
| 2404 KGOTO9
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| \ ================================================================
| |
| \ Строки
| |
| | |
| CODE -TRAILING ( c-addr u1 -- c-addr u2 ) \ 94 STRING
| |
| \ Если u1 больше нуля, u2 равно u1, уменьшенному на количество пробелов в конце
| |
| \ символьной строки, заданной c-addr и u1. Если u1 ноль или вся строка состоит
| |
| \ из пробелов, u2 ноль.
| |
| OR EAX, EAX
| |
| JZ SHORT @@1
| |
| MOV EDX, EDI
| |
| MOV EDI, [EBP]
| |
| ADD EDI, EAX
| |
| LEA EDI, -1 [EDI]
| |
| MOV ECX, EAX
| |
| A; B0 C, 20 C, \ MOV AL, # 20
| |
| STD
| |
| REPZ SCAS BYTE
| |
| JZ SHORT @@2
| |
| INC ECX
| |
| @@2: MOV EAX, ECX
| |
| MOV EDI, EDX
| |
| CLD
| |
| @@1: RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| Слово −TRAILING в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
| |
| <PRE>
| |
| -TRAILING A,N1->A,N2 ОТСЕЧЬ КОНЕЧНЫЕ ПРОБЕЛЫ 41
| |
| | |
| Экран номер 41
| |
| ( 31.03.86 -TRAILING ' ['] [COMPILE] LOAD THRU ;S --> )
| |
| | |
| CODE -TRAILIN6 ( A,N1- >A,N2) 14 LHRW12 BAL, RW1 RMASK NR,
| |
| RW1 RFORTH AR, 0 RW1 LR, RW1 RW2 AR, BEGIN, RW1 0 CR,
| |
| 1 =F BNH, RW1 0 BCTR, 0 (, RW1 64 CLI, ?NE UNTIL, 0 0 BCTR,
| |
| 1 =H RW1 0 SR, PUTRW1 В, END-CODE
| |
| </PRE>
| |
| В FORTH ИТЭФ слово −TRAILING называлось −TRAIL и также было [[примитив]]ом. Вот его определение:
| |
| <PRE>
| |
| HEAD 206Q,'-TRAI',314Q,DTRAI ; -TRAIL
| |
| POP CX
| |
| POP BX
| |
| PUSH BX
| |
| ADD BX, CX
| |
| COMPA: DEC BX
| |
| CMP BYTE PTR [BX], 32 ; BLANK ?
| |
| JNE NO
| |
| LOOP COMPA
| |
| NO: PUSH CX
| |
| NEXT
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|MinusTRAILING|−TRAILING}} | | * [http://forth.sourceforge.net/standard/dpans/dpans17.htm#17.6.1.0170 Слово −TRAILING (dash-trailing) в стандарте ANS Forth] ''(англ.)'' |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans17.htm#17.6.1.0170 −TRAILING (dash-trailing)] в стандарте ANS Forth ''(англ.)''
| | * [http://www.forth200x.org/documents/html/string.html#string:-TRAILING Слово −TRAILING (dash-trailing) в черновике Forth 200x] (англ.) |
| * Слово [http://forth-standard.org/standard/string/MinusTRAILING −TRAILING (dash-trailing)] в черновике Forth 200x ''(англ.)'' | |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
|
| |
|
|
| |
|
Строка 129: |
Строка 9: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Работа с памятью Каллисто]]
| |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 STRING]]
| |
| [[Категория:2012 STRING]]
| |