masm, спецсимволы в кавычках при определении строки

Тема в разделе "WASM.BEGINNERS", создана пользователем integer, 3 фев 2011.

  1. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    символы перевода строки вставляю так:
    Код (Text):
    1. .data
    2. szMessage db "Поздравляю, Шарик !",13,10,"Ты - балбес !",0
    можно делать то-же самое, но не закрывая кавычки ?
    пробовал как в php - не сработало
    Код (Text):
    1. .data
    2. szMessage db "Поздравляю, Шарик !\r\nТы - балбес !",0
     
  2. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Напиши два простых макроса, которые заменят
    1) \r на ",13,"
    1) \n на ",10,"
     
  3. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    нашел нужный макрос. что означает символ $ в имени "cfm$" макроса ?
    Код (Text):
    1. ; ********************************************************
    2.   ; format a C style string complete with escape characters
    3.   ; and return the offset of the result to the calling macro
    4.   ; ********************************************************
    5.     cfm$ MACRO txt:VARARG                       ;; format C style string
    6.       LOCAL buffer,lbuf,rbuf,sln,flag1,tmp,notq
    7.         flag1 = 0
    8.         notq  = 0
    9.         buffer equ <>
    10.         lbuf equ <>
    11.         rbuf equ <>
    12.       FORC char,<txt>
    13.         IFDIF <char>,<">                        ;; test if 1st char is a quote
    14.           notq = 1
    15.           EXITM                                 ;; exit with notq set to 1 if its not
    16.         ENDIF
    17.         EXITM                                   ;; else exit with notq set to 0
    18.       ENDM
    19.       IF notq EQ 1
    20.         EXITM <txt>                             ;; return original arg if its not a quote
    21.       ENDIF
    22.       FORC char,<txt>
    23.         IF flag1 NE 0                           ;; process characters preceded by the escape character
    24.           IFIDN <char>,<n>
    25.             buffer CATSTR buffer,<",13,10,">    ;; \n = newline
    26.             flag1 = 0
    27.             goto lpend
    28.           ENDIF
    29.           IFIDN <char>,<t>
    30.             buffer CATSTR buffer,<",9,">        ;; \t = tab
    31.             flag1 = 0
    32.             goto lpend
    33.           ENDIF
    34.           IFIDN <char>,<\>
    35.             buffer CATSTR buffer,<\>            ;; \\ = \
    36.             flag1 = 0
    37.             goto lpend
    38.           ENDIF
    39.           IFIDN <char>,<q>
    40.             buffer CATSTR buffer,<",34,">       ;; \q = quote
    41.             flag1 = 0
    42.             goto lpend
    43.           ENDIF
    44.        ;; ---------------------
    45.        ;; masm specific escapes
    46.        ;; ---------------------
    47.           IFIDN <char>,<l>
    48.             buffer CATSTR buffer,<",60,">       ;; \l = <
    49.             flag1 = 0
    50.             goto lpend
    51.           ENDIF
    52.           IFIDN <char>,<r>
    53.             buffer CATSTR buffer,<",62,">       ;; \r = >
    54.             flag1 = 0
    55.             goto lpend
    56.           ENDIF
    57.           IFIDN <char>,<x>
    58.             buffer CATSTR buffer,<",33,">       ;; \x = !
    59.             flag1 = 0
    60.             goto lpend
    61.           ENDIF
    62.           IFIDN <char>,<a>
    63.             buffer CATSTR buffer,<",40,">       ;; \a = (
    64.             flag1 = 0
    65.             goto lpend
    66.           ENDIF
    67.           IFIDN <char>,<b>
    68.             buffer CATSTR buffer,<",41,">       ;; \b = )
    69.             flag1 = 0
    70.             goto lpend
    71.           ENDIF
    72.         ENDIF
    73.         IFIDN <char>,<\>                        ;; trap the escape character and set the flag
    74.           flag1 = 1
    75.           goto lpend
    76.         ENDIF
    77.         buffer CATSTR buffer,<char>
    78.     :lpend
    79.       ENDM
    80.     ;; ---------------------------------------------
    81.     ;; strip any embedded <"",> characters sequences
    82.     ;; ---------------------------------------------
    83.         buffer CATSTR buffer,<,0,0,0>           ;; append trailing zeros
    84.         cpos INSTR buffer,<"",>                 ;; test for leading junk
    85.         IF cpos EQ 1
    86.           buffer SUBSTR buffer,4                ;; chomp off any leading junk
    87.         ENDIF
    88.       :reloop
    89.         cpos INSTR buffer,<"",>
    90.           IF cpos EQ 0                          ;; if no junk left
    91.             goto done                           ;; exit the loop
    92.           ENDIF
    93.         lbuf SUBSTR buffer,1,cpos-1             ;; read text before junk
    94.         rbuf SUBSTR buffer,cpos+3               ;; read text after junk
    95.         buffer equ <>                           ;; clear the buffer
    96.         buffer CATSTR lbuf,rbuf                 ;; concantenate the two
    97.         goto reloop                             ;; loop back and try again
    98.       :done
    99.         sln SIZESTR buffer
    100.         buffer SUBSTR buffer,1,sln-4            ;; trim off tail padding
    101.         .data
    102.           tmp db buffer                         ;; write result to DATA section
    103.         .code
    104.         EXITM <OFFSET tmp>                      ;; return the DATA section OFFSET
    105.     ENDM
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    символ $ в конце имени означает, что это МАКРОС :)