−TRAILING: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
Строка 61: Строка 61:
2403 DTRAI2:        RM0 KM8
2403 DTRAI2:        RM0 KM8
2404                KGOTO9
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>
</pre>



Текущая версия от 17:09, 10 ноября 2017

−TRAILING — стандартное слово Каллисто. Определить длину строки без завершающих пробелов.

−TRAILING      ( a u1 −− a u2 )                     Отсечь конечные пробелы.

Команда ADR N −TRAILING сокращает значение N на число пробелов между последним значащим символом и адресом ADR+N. Этот оператор может использоваться перед TYPE и особенно полезен при печати на старых принтерах, так как исключает холостые пробеги каретки.

Ввод слова −TRAILING[править]

В режиме NUM последовательно нажмите клавиши       Р-ГРД-Г   2   ×   ШГ←   7      7   4   БП 

Для возврата в режим NUM нажмите синюю клавишу  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.

Реализация[править]

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

Реализация из SP-Forth 4.20:

\ ================================================================
\ Строки

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

Советская реализация[править]

Слово −TRAILING в ФОРТ-ЕС было примитивом. Вот его описание и определение:

  -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

В FORTH ИТЭФ слово −TRAILING называлось −TRAIL и также было примитивом. Вот его определение:

            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

Ссылки[править]


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


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