https://git.reactos.org/?p=reactos.git;a=commitdiff;h=94eb475177571d1fc6177cb7310d4532e632d811

commit 94eb475177571d1fc6177cb7310d4532e632d811
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Mon Oct 21 19:43:26 2024 +0300
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Wed Jan 22 18:56:08 2025 +0200

    [UCRT][ASM] Make asm code GCC compatible
---
 sdk/include/asm/asm.inc             |   8 +-
 sdk/lib/ucrt/string/amd64/strcat.s  |  27 ++++---
 sdk/lib/ucrt/string/amd64/strcmp.s  |  45 ++++++-----
 sdk/lib/ucrt/string/amd64/strlen.s  |  15 ++--
 sdk/lib/ucrt/string/amd64/strncat.s |  23 +++---
 sdk/lib/ucrt/string/amd64/strncmp.s |  29 ++++---
 sdk/lib/ucrt/string/amd64/strncpy.s |  27 ++++---
 sdk/lib/ucrt/string/i386/_memicmp.s |  83 +++++++++++--------
 sdk/lib/ucrt/string/i386/_strnicm.s |  88 +++++++++++---------
 sdk/lib/ucrt/string/i386/memccpy.s  |  95 +++++++++++-----------
 sdk/lib/ucrt/string/i386/strcat.s   | 112 ++++++++++++-------------
 sdk/lib/ucrt/string/i386/strcmp.s   |  29 ++++---
 sdk/lib/ucrt/string/i386/strcspn.s  |   5 ++
 sdk/lib/ucrt/string/i386/strlen.s   |  49 +++++------
 sdk/lib/ucrt/string/i386/strncat.s  | 129 ++++++++++++++---------------
 sdk/lib/ucrt/string/i386/strncmp.s  |  61 +++++++-------
 sdk/lib/ucrt/string/i386/strncpy.s  | 157 ++++++++++++++++++------------------
 sdk/lib/ucrt/string/i386/strnset.s  |  57 +++++++------
 sdk/lib/ucrt/string/i386/strpbrk.s  |   5 ++
 sdk/lib/ucrt/string/i386/strrev.s   |  65 ++++++++-------
 sdk/lib/ucrt/string/i386/strset.s   |  46 ++++++-----
 sdk/lib/ucrt/string/i386/strspn.s   | 104 ++++++++++++++----------
 22 files changed, 701 insertions(+), 558 deletions(-)

diff --git a/sdk/include/asm/asm.inc b/sdk/include/asm/asm.inc
index 51ec68d03c7..9af3d164ac9 100644
--- a/sdk/include/asm/asm.inc
+++ b/sdk/include/asm/asm.inc
@@ -316,8 +316,10 @@ ENDM
 .endm
 
 /* MASM compatible ALIGN */
-#define ALIGN .align
-#define align .align
+.macro align x
+    .align x
+.endm
+#define ALIGN align
 
 /* MASM compatible REPEAT, additional ENDR */
 #define REPEAT .rept
@@ -352,6 +354,7 @@ ENDM
 
 /* MASM needs an END tag */
 #define END
+#define end
 
 .macro .MODEL model
 .endm
@@ -359,6 +362,7 @@ ENDM
 .macro .code
     .text
 .endm
+#define CODESEG .code
 
 .macro .const
     .section .rdata
diff --git a/sdk/lib/ucrt/string/amd64/strcat.s 
b/sdk/lib/ucrt/string/amd64/strcat.s
index 63724bedf5f..9723e778dbf 100644
--- a/sdk/lib/ucrt/string/amd64/strcat.s
+++ b/sdk/lib/ucrt/string/amd64/strcat.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         title   strcat - concatenate (append) one string to another
 ;***
 ;strcat.asm - contains strcat() and strcpy() routines
@@ -73,11 +77,12 @@ include ksamd64.inc
 ;
 ;Exceptions:
 
;*******************************************************************************
+#endif
 
 public ___entry_from_strcat_in_strcpy
-LEAF_ENTRY_ARG2 strcat, _TEXT, dst:ptr byte, src:ptr byte
+LEAF_ENTRY_ARG2 strcat, _TEXT, dst_ptr_byte, src_ptr_byte
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
     mov     r11, rcx
     test    cl, 7
@@ -94,12 +99,12 @@ strcat_copy_head_loop_begin:
 strcat_loop_begin:
     mov     rax, [rcx]
     mov     r10, rax
-    mov     r9, 7efefefefefefeffh
+    mov     r9, HEX(7efefefefefefeff)
     add     r9, r10
     xor     r10, -1
     xor     r10, r9
     add     rcx, 8
-    mov     r9, 8101010101010100h
+    mov     r9, HEX(8101010101010100)
     test    r10, r9
     je      strcat_loop_begin
     sub     rcx, 8
@@ -136,16 +141,16 @@ strcat_loop_end:
 
 LEAF_END strcat, _TEXT
 
-LEAF_ENTRY_ARG2 strcpy, _TEXT, dst:ptr byte, src:ptr byte
+LEAF_ENTRY_ARG2 strcpy, _TEXT, dst_ptr_byte, src_ptr byte
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
     mov     r11, rcx
 strcat_copy:
 ___entry_from_strcat_in_strcpy=strcat_copy
- ; align the SOURCE so we never page fault
- ; dest pointer alignment not important
-    sub     rcx, rdx ; combine pointers
+ // align the SOURCE so we never page fault
+ // dest pointer alignment not important
+    sub     rcx, rdx // combine pointers
     test    dl, 7
     jz      qword_loop_entrance
 
@@ -168,12 +173,12 @@ qword_loop_begin:
     add     rdx, 8
 qword_loop_entrance:
     mov     rax, [rdx]
-    mov     r9, 7efefefefefefeffh
+    mov     r9, HEX(7efefefefefefeff)
     add     r9, rax
     mov     r10, rax
     xor     r10, -1
     xor     r10, r9
-    mov     r9, 8101010101010100h
+    mov     r9, HEX(8101010101010100)
     test    r10, r9
     jz      qword_loop_begin
 
diff --git a/sdk/lib/ucrt/string/amd64/strcmp.s 
b/sdk/lib/ucrt/string/amd64/strcmp.s
index 91ae47fd591..8a3e32d0e5e 100644
--- a/sdk/lib/ucrt/string/amd64/strcmp.s
+++ b/sdk/lib/ucrt/string/amd64/strcmp.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         page    ,132
         title   strcmp.asm - compare two strings
 ;***
@@ -54,25 +58,26 @@ include ksamd64.inc
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-CHAR_TYPE EQU BYTE
-CHAR_PTR EQU BYTE PTR
-CHAR_SIZE = sizeof CHAR_TYPE
+#define CHAR_TYPE BYTE
+#define CHAR_PTR BYTE PTR
+#define CHAR_SIZE 1 /* = sizeof CHAR_TYPE */
 
-BLK_TYPE EQU QWORD
-BLK_PTR EQU QWORD PTR
-BLK_SIZE = sizeof BLK_TYPE
+#define BLK_TYPE QWORD
+#define BLK_PTR QWORD PTR
+#define BLK_SIZE 8 /* = sizeof BLK_TYPE */
 
-;PAGE_SIZE = 1000h
-PAGE_MASK = PAGE_SIZE - 1       ; mask for offset in MM page
-PAGE_SAFE_BLK = PAGE_SIZE - BLK_SIZE ; maximum offset for safe block compare
+//PAGE_SIZE = 1000h
+PAGE_MASK = PAGE_SIZE - 1       // mask for offset in MM page
+PAGE_SAFE_BLK = PAGE_SIZE - BLK_SIZE // maximum offset for safe block compare
 
-LEAF_ENTRY_ARG2 strcmp, _TEXT, str1:ptr byte, str2:ptr byte
+LEAF_ENTRY_ARG2 strcmp, _TEXT, str1_ptr_byte, str2_ptr_byte
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-; rcx = src
-; rdx = dst
+// rcx = src
+// rdx = dst
 
     sub     rdx, rcx
     test    cl, (BLK_SIZE - 1)
@@ -93,8 +98,8 @@ comp_head_loop_begin:
 
 qword_loop_enter:
 
-    mov     r11, 8080808080808080h
-    mov     r10, 0fefefefefefefeffh
+    mov     r11, HEX(8080808080808080)
+    mov     r10, HEX(0fefefefefefefeff)
 
 qword_loop_begin:
     lea     eax, [edx+ecx]
@@ -105,24 +110,24 @@ qword_loop_begin:
     mov     rax, BLK_PTR[rcx]
     cmp     rax, BLK_PTR[rdx+rcx]
 
-; mismatched string (or maybe null + garbage after)
+// mismatched string (or maybe null + garbage after)
     jne     comp_head_loop_begin
 
-; look for null terminator
+// look for null terminator
     lea     r9, [rax + r10]
     not     rax
     add     rcx, BLK_SIZE
     and     rax, r9
 
-    test    rax, r11       ; r11=8080808080808080h
+    test    rax, r11       // r11=8080808080808080h
     jz      qword_loop_begin
 
 return_equal:
-    xor     eax, eax ; gets all 64 bits
+    xor     eax, eax // gets all 64 bits
     ret
 
 return_not_equal:
-    sbb     rax, rax ; AX=-1, CY=1 AX=0, CY=0
+    sbb     rax, rax // AX=-1, CY=1 AX=0, CY=0
     or      rax, 1
     ret
 
diff --git a/sdk/lib/ucrt/string/amd64/strlen.s 
b/sdk/lib/ucrt/string/amd64/strlen.s
index 3ca728ee6ad..0157d58a244 100644
--- a/sdk/lib/ucrt/string/amd64/strlen.s
+++ b/sdk/lib/ucrt/string/amd64/strlen.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         page    ,132
         title   strlen - return the length of a null-terminated string
 ;***
@@ -42,17 +46,18 @@ include ksamd64.inc
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
 LEAF_ENTRY_ARG1 strlen, _TEXT, buf:ptr byte
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
     mov   rax, rcx
-    neg   rcx          ; for later
+    neg   rcx          // for later
     test  rax, 7
     jz    main_loop_entry
 
-byte 066h, 090h
+.byte HEX(66), HEX(90)
 
 byte_loop_begin:
     mov   dl, [rax]
@@ -63,8 +68,8 @@ byte_loop_begin:
     jnz   byte_loop_begin
 
 main_loop_entry:
-    mov   r8, 7efefefefefefeffh
-    mov   r11, 8101010101010100h
+    mov   r8, HEX(7efefefefefefeff)
+    mov   r11, HEX(8101010101010100)
 
 main_loop_begin:
     mov   rdx, [rax]
diff --git a/sdk/lib/ucrt/string/amd64/strncat.s 
b/sdk/lib/ucrt/string/amd64/strncat.s
index f2a60f5355d..8b506c2bfe8 100644
--- a/sdk/lib/ucrt/string/amd64/strncat.s
+++ b/sdk/lib/ucrt/string/amd64/strncat.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         page    ,132
         title   strncat - append n chars of string1 to string2
 ;***
@@ -53,8 +57,9 @@ include ksamd64.inc
 ;Exceptions:
 ;
 
;*******************************************************************************
-LEAF_ENTRY_ARG3 strncat, _TEXT, front:ptr byte, back:ptr byte, count:dword
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#endif
+LEAF_ENTRY_ARG3 strncat, _TEXT, front_ptr_byte, back_ptr_byte, count_dword
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
     mov     r11, rcx
     or      r8, r8
@@ -75,12 +80,12 @@ strncat_copy_head_loop_begin:
 strncat_loop_begin:
     mov     rax, [rcx]
     mov     r10, rax
-    mov     r9, 7efefefefefefeffh
+    mov     r9, HEX(7efefefefefefeff)
     add     r9, r10
     xor     r10, -1
     xor     r10, r9
     add     rcx, 8
-    mov     r9, 8101010101010100h
+    mov     r9, HEX(8101010101010100)
     test    r10, r9
     je      strncat_loop_begin
     sub     rcx, 8
@@ -116,9 +121,9 @@ strncat_loop_end:
     jmp     strncat_loop_begin
 
 strncat_copy:
-; align the SOURCE so we never page fault
-; dest pointer alignment not important
-    sub     rcx, rdx ; combine pointers
+// align the SOURCE so we never page fault
+// dest pointer alignment not important
+    sub     rcx, rdx // combine pointers
     test    dl, 7
     jz      qword_loop_entrance
 
@@ -150,12 +155,12 @@ qword_loop_entrance:
     mov     rax, [rdx]
     sub     r8,  8
     jbe     qword_loop_end
-    mov     r9, 7efefefefefefeffh
+    mov     r9, HEX(7efefefefefefeff)
     add     r9, rax
     mov     r10, rax
     xor     r10, -1
     xor     r10, r9
-    mov     r9, 8101010101010100h
+    mov     r9, HEX(8101010101010100)
     test    r10, r9
     jz      qword_loop_begin
 
diff --git a/sdk/lib/ucrt/string/amd64/strncmp.s 
b/sdk/lib/ucrt/string/amd64/strncmp.s
index 52b31f5f61b..f16fc43cd13 100644
--- a/sdk/lib/ucrt/string/amd64/strncmp.s
+++ b/sdk/lib/ucrt/string/amd64/strncmp.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         page    ,132
         title   strncmp - compare first n chars of two strings
 ;***
@@ -51,14 +55,15 @@ include ksamd64.inc
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-LEAF_ENTRY_ARG3 strncmp, _TEXT, str1:ptr byte, str2:ptr byte, count:dword
+LEAF_ENTRY_ARG3 strncmp, _TEXT, str1_ptr_byte, str2_ptr_byte, count_dword
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-; rcx = first
-; rdx = last
-; r8 = count
+// rcx = first
+// rdx = last
+// r8 = count
 
     sub       rdx, rcx
 
@@ -85,13 +90,13 @@ comp_head_loop_begin:
     jnz       comp_head_loop_begin
 
 qword_loop_enter:
-    mov       r11, 08080808080808080h
-    mov       r10, 0fefefefefefefeffh
+    mov       r11, HEX(08080808080808080)
+    mov       r10, HEX(0fefefefefefefeff)
 
 qword_loop_begin:
     lea       eax, [rdx+rcx]
-    and       eax, 0fffh
-    cmp       eax, 0ff8h
+    and       eax, HEX(0fff)
+    cmp       eax, HEX(0ff8)
     ja        comp_head_loop_begin
 
     mov       rax, qword ptr[rcx]
@@ -106,7 +111,7 @@ qword_loop_begin:
     lea       r9, [r10+rax]
     not       rax
     and       rax, r9
-    test      rax, r11  ; 8080808080808080h
+    test      rax, r11  // 8080808080808080h
 
     jz        qword_loop_begin
 
@@ -114,10 +119,10 @@ return_equal:
     xor       eax, eax
     ret
 
-;    align     16
+//    align     16
 
 return_not_equal:
-    sbb       rax, rax  ; AX=-1, CY=1 AX=0, CY=0
+    sbb       rax, rax  // AX=-1, CY=1 AX=0, CY=0
     or        rax, 1
     ret
 
diff --git a/sdk/lib/ucrt/string/amd64/strncpy.s 
b/sdk/lib/ucrt/string/amd64/strncpy.s
index c92ed90346e..27d1349dc0c 100644
--- a/sdk/lib/ucrt/string/amd64/strncpy.s
+++ b/sdk/lib/ucrt/string/amd64/strncpy.s
@@ -1,3 +1,7 @@
+#include <asm.inc>
+#include <ksamd64.inc>
+.code64
+#if 0
         page    ,132
         title   strncpy - copy at most n characters of string
 ;***
@@ -12,17 +16,18 @@
 ; Look at strncat.asm for this file
 include ksamd64.inc
         subttl  "strncpy"
+#endif
 
-LEAF_ENTRY_ARG3 strncpy, _TEXT, dst:ptr byte, src:ptr byte, count:dword
-OPTION PROLOGUE:NONE, EPILOGUE:NONE
+LEAF_ENTRY_ARG3 strncpy, _TEXT, dst_ptr_byte, src_ptr_byte, count_dword
+//OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-; align the SOURCE so we never page fault
-; dest pointer alignment not important
+// align the SOURCE so we never page fault
+// dest pointer alignment not important
 
     mov     r11, rcx
     or      r8, r8
     jz      strncpy_exit
-    sub     rcx, rdx ; combine pointers
+    sub     rcx, rdx // combine pointers
     test    dl, 7
     jz      qword_loop_entrance
 
@@ -49,12 +54,12 @@ qword_loop_entrance:
     mov     rax, [rdx]
     sub     r8,  8
     jbe     qword_loop_end
-    mov     r9, 7efefefefefefeffh
+    mov     r9, HEX(7efefefefefefeff)
     add     r9, rax
     mov     r10, rax
     xor     r10, -1
     xor     r10, r9
-    mov     r9, 8101010101010100h
+    mov     r9, HEX(8101010101010100)
     test    r10, r9
     jz      qword_loop_begin
 
@@ -118,12 +123,12 @@ strncpy_exit_2:
     mov     rax, r11
     ret
 
-;this is really just memset
+//this is really just memset
 filler:
     add     rcx, rdx
     xor     rdx, rdx
     cmp     r8, 16
-    jb      tail ; a quickie
+    jb      tail // a quickie
 aligner1:
     test    cl, 7
     jz      aligned
@@ -144,7 +149,7 @@ loop32:
     jae     loop32
 
 tail_8_enter:
-    add     r8, 32   ; get back the value
+    add     r8, 32   // get back the value
 tail_8_begin:
     sub     r8, 8
     jb      tail_enter
@@ -153,7 +158,7 @@ tail_8_begin:
     jmp     tail_8_begin
 
 tail_enter:
-    add     r8, 8   ; get back the value
+    add     r8, 8   // get back the value
 tail:
     sub     r8, 1
     jb      tail_finish
diff --git a/sdk/lib/ucrt/string/i386/_memicmp.s 
b/sdk/lib/ucrt/string/i386/_memicmp.s
index 3d08e70f38a..3f12973fc80 100644
--- a/sdk/lib/ucrt/string/i386/_memicmp.s
+++ b/sdk/lib/ucrt/string/i386/_memicmp.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page        ,132
         title        memicmp - compare blocks of memory, ignore case
 ;***
@@ -54,77 +56,90 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  __ascii_memicmp
-__ascii_memicmp proc \
-        uses edi esi ebx, \
-        first:ptr byte, \
-        last:ptr byte, \
-        count:IWORD
+        public  ___ascii_memicmp
+.PROC ___ascii_memicmp
 
-        mov     ecx,[count]     ; cx = count
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push edi
+        push esi
+        push ebx
+#define first ebp + 8
+#define last ebp + 12
+#define count ebp + 16
+
+        mov     ecx,[count]     // cx = count
         or      ecx,ecx
-        jz      short toend     ; if count=0, nothing to do
+        jz      short toend     // if count=0, nothing to do
 
-        mov     esi,[first]     ; si = first
-        mov     edi,[last]      ; di = last
+        mov     esi,[first]     // si = first
+        mov     edi,[last]      // di = last
 
-        ; C locale
+        // C locale
 
         mov     bh,'A'
         mov     bl,'Z'
-        mov     dh,'a'-'A'      ; add to cap to make lower
+        mov     dh,'a'-'A'      // add to cap to make lower
 
         align   4
 
 lupe:
-        mov     ah,[esi]        ; ah = *first
-        add     esi,1           ; first++
-        mov     al,[edi]        ; al = *last
-        add     edi,1           ; last++
+        mov     ah,[esi]        // ah = *first
+        add     esi,1           // first++
+        mov     al,[edi]        // al = *last
+        add     edi,1           // last++
 
-        cmp     ah,al           ; test for equality BEFORE converting case
+        cmp     ah,al           // test for equality BEFORE converting case
         je      short dolupe
 
-        cmp     ah,bh           ; ah < 'A' ??
+        cmp     ah,bh           // ah < 'A' ??
         jb      short skip1
 
-        cmp     ah,bl           ; ah > 'Z' ??
+        cmp     ah,bl           // ah > 'Z' ??
         ja      short skip1
 
-        add     ah,dh           ; make lower case
+        add     ah,dh           // make lower case
 
 skip1:
-        cmp     al,bh           ; al < 'A' ??
+        cmp     al,bh           // al < 'A' ??
         jb      short skip2
 
-        cmp     al,bl           ; al > 'Z' ??
+        cmp     al,bl           // al > 'Z' ??
         ja      short skip2
 
-        add     al,dh           ; make lower case
+        add     al,dh           // make lower case
 
 skip2:
-        cmp     ah,al           ; *first == *last ??
-        jne     short differ    ; nope, found mismatched chars
+        cmp     ah,al           // *first == *last ??
+        jne     short differ    // nope, found mismatched chars
 
 dolupe:
         sub     ecx,1
         jnz     short lupe
 
-        jmp     short toend     ; cx = 0, return 0
+        jmp     short toend     // cx = 0, return 0
 
 differ:
-        mov     ecx,-1          ; assume last is bigger
-                                ; *** can't use "or ecx,-1" due to flags ***
-        jb      short toend     ; last is, in fact, bigger (return -1)
-        neg     ecx             ; first is bigger (return 1)
+        mov     ecx,-1          // assume last is bigger
+                                // *** can't use "or ecx,-1" due to flags ***
+        jb      short toend     // last is, in fact, bigger (return -1)
+        neg     ecx             // first is bigger (return 1)
 
 toend:
-        mov     eax,ecx         ; move return value to ax
+        mov     eax,ecx         // move return value to ax
+
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop    ebx
+        pop    esi
+        pop    edi
+        pop    ebp
 
-        ret                     ; _cdecl return
+        ret                     // _cdecl return
 
-__ascii_memicmp endp
+.ENDP // ___ascii_memicmp
         end
diff --git a/sdk/lib/ucrt/string/i386/_strnicm.s 
b/sdk/lib/ucrt/string/i386/_strnicm.s
index dc3dcb4d074..f3a983a46a8 100644
--- a/sdk/lib/ucrt/string/i386/_strnicm.s
+++ b/sdk/lib/ucrt/string/i386/_strnicm.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strnicmp - compare n chars of strings, ignore case
 ;***
@@ -62,63 +64,69 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
-
-        CODESEG
-
-        public  __ascii_strnicmp
-__ascii_strnicmp proc \
-        uses edi esi ebx, \
-        first:ptr byte, \
-        last:ptr byte, \
-        count:IWORD
-
-        mov     ecx,[count]     ; cx = byte count
+#endif
+
+        .code
+
+        public  ___ascii_strnicmp
+.PROC ___ascii_strnicmp
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push edi // uses edi esi ebx
+        push esi
+        push ebx
+#define first ebp + 8 // first:ptr byte
+#define last ebp + 12 // last:ptr byte
+#define count ebp + 16 // count:IWORD
+
+        mov     ecx,[count]     // cx = byte count
         or      ecx,ecx
-        jz      toend           ; if count = 0, we are done
+        jz      toend           // if count = 0, we are done
 
-        mov     esi,[first]     ; si = first string
-        mov     edi,[last]      ; di = last string
+        mov     esi,[first]     // si = first string
+        mov     edi,[last]      // di = last string
 
         mov     bh,'A'
         mov     bl,'Z'
-        mov     dh,'a'-'A'      ; add to cap to make lower
+        mov     dh,'a'-'A'      // add to cap to make lower
 
         align   4
 
 lupe:
-        mov     ah,[esi]        ; *first
+        mov     ah,[esi]        // *first
 
-        or      ah,ah           ; see if *first is null
+        or      ah,ah           // see if *first is null
 
-        mov     al,[edi]        ; *last
+        mov     al,[edi]        // *last
 
-        jz      short eject     ;   jump if *first is null
+        jz      short eject     //   jump if *first is null
 
-        or      al,al           ; see if *last is null
-        jz      short eject     ;   jump if so
+        or      al,al           // see if *last is null
+        jz      short eject     //   jump if so
 
-        add     esi,1           ; first++
-        add     edi,1           ; last++
+        add     esi,1           // first++
+        add     edi,1           // last++
 
-        cmp     ah,bh           ; 'A'
+        cmp     ah,bh           // 'A'
         jb      short skip1
 
-        cmp     ah,bl           ; 'Z'
+        cmp     ah,bl           // 'Z'
         ja      short skip1
 
-        add     ah,dh           ; make lower case
+        add     ah,dh           // make lower case
 
 skip1:
-        cmp     al,bh           ; 'A'
+        cmp     al,bh           // 'A'
         jb      short skip2
 
-        cmp     al,bl           ; 'Z'
+        cmp     al,bl           // 'Z'
         ja      short skip2
 
-        add     al,dh           ; make lower case
+        add     al,dh           // make lower case
 
 skip2:
-        cmp     ah,al           ; *first == *last ??
+        cmp     ah,al           // *first == *last ??
         jne     short differ
 
         sub     ecx,1
@@ -126,18 +134,24 @@ skip2:
 
 eject:
         xor     ecx,ecx
-        cmp     ah,al           ; compare the (possibly) differing bytes
-        je      short toend     ; both zero; return 0
+        cmp     ah,al           // compare the (possibly) differing bytes
+        je      short toend     // both zero; return 0
 
 differ:
-        mov     ecx,-1          ; assume last is bigger (* can't use 'or' *)
-        jb      short toend     ; last is, in fact, bigger (return -1)
-        neg     ecx             ; first is bigger (return 1)
+        mov     ecx,-1          // assume last is bigger (* can't use 'or' *)
+        jb      short toend     // last is, in fact, bigger (return -1)
+        neg     ecx             // first is bigger (return 1)
 
 toend:
         mov     eax,ecx
 
-        ret                     ; _cdecl return
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop    ebx
+        pop    esi
+        pop    edi
+        pop    ebp
+
+        ret                     // _cdecl return
 
-__ascii_strnicmp endp
+.ENDP // ___ascii_strnicmp
          end
diff --git a/sdk/lib/ucrt/string/i386/memccpy.s 
b/sdk/lib/ucrt/string/i386/memccpy.s
index 96b5e2086ba..d40b38362d9 100644
--- a/sdk/lib/ucrt/string/i386/memccpy.s
+++ b/sdk/lib/ucrt/string/i386/memccpy.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   memccpy - copy bytes until character found
 ;***
@@ -51,85 +53,86 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  _memccpy
-_memccpy proc \
-        dest:ptr byte, \
-        src:ptr byte, \
-        _c:byte, \
-        count:DWORD
+        public  __memccpy
+.PROC __memccpy
+        // dest:ptr byte, \
+        // src:ptr byte, \
+        // _c:byte, \
+        // count:DWORD
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-        .FPO    ( 0, 4, 0, 0, 0, 0 )
+        FPO    0, 4, 0, 0, 0, 0
 
-        mov     ecx,[esp + 10h] ; ecx = max byte count
-        push    ebx             ; save ebx
+        mov     ecx,[esp + HEX(10)] // ecx = max byte count
+        push    ebx             // save ebx
 
-        test    ecx,ecx         ; if it's nothing to move
-        jz      ret_zero_len    ; restore ebx, and return NULL
+        test    ecx,ecx         // if it's nothing to move
+        jz      ret_zero_len    // restore ebx, and return NULL
 
-        mov     bh,[esp + 10h]  ; bh = byte to look for
-        push    esi             ; save esi
+        mov     bh,[esp + HEX(10)]  // bh = byte to look for
+        push    esi             // save esi
 
-        test    ecx,1           ; test if counter is odd or even
+        test    ecx,1           // test if counter is odd or even
 
-        mov     eax,[esp + 0ch] ; eax = dest   , don't affect flags
-        mov     esi,[esp + 10h] ; esi = source , don't affect flags
+        mov     eax,[esp + HEX(0c)] // eax = dest   , don't affect flags
+        mov     esi,[esp + HEX(10)] // esi = source , don't affect flags
 
-;       nop
-        jz      lupe2           ; if counter is even, do double loop
-                                ; else do one iteration, and drop into double 
loop
-        mov     bl,[esi]        ; get first byte into bl
-        add     esi,1           ; kick src (esi points to src)
+//       nop
+        jz      lupe2           // if counter is even, do double loop
+                                // else do one iteration, and drop into double 
loop
+        mov     bl,[esi]        // get first byte into bl
+        add     esi,1           // kick src (esi points to src)
 
-        mov     [eax],bl        ; store it in dest
-        add     eax,1           ; kick dest
+        mov     [eax],bl        // store it in dest
+        add     eax,1           // kick dest
 
-        cmp     bl,bh           ; see if we just moved the byte
+        cmp     bl,bh           // see if we just moved the byte
         je      short toend
 
-        sub     ecx,1           ; decrement counter
-        jz      retnull         ; drop into double loop if nonzero
+        sub     ecx,1           // decrement counter
+        jz      retnull         // drop into double loop if nonzero
 
 lupe2:
-        mov     bl,[esi]        ; get first byte into bl
-        add     esi,2           ; kick esi (src)
+        mov     bl,[esi]        // get first byte into bl
+        add     esi,2           // kick esi (src)
 
-        cmp     bl,bh           ; check if we just moved the byte (from bl)
-        je      toend_mov_inc   ; store bl & exit
+        cmp     bl,bh           // check if we just moved the byte (from bl)
+        je      toend_mov_inc   // store bl & exit
 
-        mov     [eax],bl        ; store first byte from bl
-        mov     bl,[esi - 1]    ; get second byte  into bl
+        mov     [eax],bl        // store first byte from bl
+        mov     bl,[esi - 1]    // get second byte  into bl
 
-        mov     [eax + 1],bl    ; store second byte from bl
-        add     eax,2           ; kick eax (dest)
+        mov     [eax + 1],bl    // store second byte from bl
+        add     eax,2           // kick eax (dest)
 
-        cmp     bl,bh           ; see if we just moved the byte
-        je      short toend     ; end of string
+        cmp     bl,bh           // see if we just moved the byte
+        je      short toend     // end of string
 
-        sub     ecx,2           ; modify counter, and if nonzero continue
-        jnz     lupe2           ; else drop out & return NULL
+        sub     ecx,2           // modify counter, and if nonzero continue
+        jnz     lupe2           // else drop out & return NULL
 
 retnull:
         pop     esi
 ret_zero_len:
-        xor     eax,eax         ; null pointer
+        xor     eax,eax         // null pointer
         pop     ebx
 
-        ret                     ; _cdecl return
+        ret                     // _cdecl return
 
 toend_mov_inc:
-        mov     [eax],bl        ; store first byte from bl
-        add     eax,1           ; eax points right after the value
+        mov     [eax],bl        // store first byte from bl
+        add     eax,1           // eax points right after the value
 
 toend:  pop     esi
         pop     ebx
 
-        ret                     ; _cdecl return
+        ret                     // _cdecl return
 
-_memccpy endp
+.ENDP // __memccpy
 
         end
diff --git a/sdk/lib/ucrt/string/i386/strcat.s 
b/sdk/lib/ucrt/string/i386/strcat.s
index b7df345894c..62851822664 100644
--- a/sdk/lib/ucrt/string/i386/strcat.s
+++ b/sdk/lib/ucrt/string/i386/strcat.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strcat - concatenate (append) one string to another
 ;***
@@ -80,39 +82,41 @@ page
 ;
 ;Exceptions:
 
;*******************************************************************************
+#endif
 
 
-        CODESEG
+        .code
 
-%       public  strcat, strcpy      ; make both functions available
-strcpy  proc \
-        dst:ptr byte, \
-        src:ptr byte
+       public _strcat
+       public _strcpy      // make both functions available
+.PROC _strcpy
+        // dst:ptr byte, \
+        // src:ptr byte
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-        push    edi                 ; preserve edi
-        mov     edi,[esp+8]         ; edi points to dest string
+        push    edi                 // preserve edi
+        mov     edi,[esp+8]         // edi points to dest string
         jmp     short copy_start
 
-strcpy  endp
+.ENDP // _strcpy
 
         align   16
 
-strcat  proc \
-        dst:ptr byte, \
-        src:ptr byte
+.PROC _strcat
+        // dst:ptr byte, \
+        // src:ptr byte
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-        .FPO    ( 0, 2, 0, 0, 0, 0 )
+        FPO    0, 2, 0, 0, 0, 0
 
-        mov     ecx,[esp+4]         ; ecx -> dest string
-        push    edi                 ; preserve edi
-        test    ecx,3               ; test if string is aligned on 32 bits
+        mov     ecx,[esp+4]         // ecx -> dest string
+        push    edi                 // preserve edi
+        test    ecx,3               // test if string is aligned on 32 bits
         je      short find_end_of_dest_string_loop
 
-dest_misaligned:                    ; simple byte loop until string is aligned
+dest_misaligned:                    // simple byte loop until string is aligned
         mov     al,byte ptr [ecx]
         add     ecx,1
         test    al,al
@@ -123,27 +127,27 @@ dest_misaligned:                    ; simple byte loop 
until string is aligned
         align   4
 
 find_end_of_dest_string_loop:
-        mov     eax,dword ptr [ecx] ; read 4 bytes
-        mov     edx,7efefeffh
+        mov     eax,dword ptr [ecx] // read 4 bytes
+        mov     edx,HEX(7efefeff)
         add     edx,eax
         xor     eax,-1
         xor     eax,edx
         add     ecx,4
-        test    eax,81010100h
+        test    eax,HEX(81010100)
         je      short find_end_of_dest_string_loop
-        ; found zero byte in the loop
+        // found zero byte in the loop
         mov     eax,[ecx - 4]
-        test    al,al               ; is it byte 0
+        test    al,al               // is it byte 0
         je      short start_byte_0
-        test    ah,ah               ; is it byte 1
+        test    ah,ah               // is it byte 1
         je      short start_byte_1
-        test    eax,00ff0000h       ; is it byte 2
+        test    eax,HEX(00ff0000)       // is it byte 2
         je      short start_byte_2
-        test    eax,0ff000000h      ; is it byte 3
+        test    eax,HEX(0ff000000)      // is it byte 3
         je      short start_byte_3
         jmp     short find_end_of_dest_string_loop
-                                    ; taken if bits 24-30 are clear and bit
-                                    ; 31 is set
+                                    // taken if bits 24-30 are clear and bit
+                                    // 31 is set
 start_byte_3:
         lea     edi,[ecx - 1]
         jmp     short copy_start
@@ -155,15 +159,15 @@ start_byte_1:
         jmp     short copy_start
 start_byte_0:
         lea     edi,[ecx - 4]
-;       jmp     short copy_start
+//       jmp     short copy_start
 
-;       edi points to the end of dest string.
-copy_start::
-        mov     ecx,[esp+0ch]       ; ecx -> sorc string
-        test    ecx,3               ; test if string is aligned on 32 bits
+//       edi points to the end of dest string.
+GLOBAL_LABEL copy_start
+        mov     ecx,[esp+HEX(0c)]       // ecx -> sorc string
+        test    ecx,3               // test if string is aligned on 32 bits
         je      short main_loop_entrance
 
-src_misaligned:                     ; simple byte loop until string is aligned
+src_misaligned:                     // simple byte loop until string is aligned
         mov     dl,byte ptr [ecx]
         add     ecx,1
         test    dl,dl
@@ -174,58 +178,58 @@ src_misaligned:                     ; simple byte loop 
until string is aligned
         jne     short src_misaligned
         jmp     short main_loop_entrance
 
-main_loop:                          ; edx contains first dword of sorc string
-        mov     [edi],edx           ; store one more dword
-        add     edi,4               ; kick dest pointer
+main_loop:                          // edx contains first dword of sorc string
+        mov     [edi],edx           // store one more dword
+        add     edi,4               // kick dest pointer
 main_loop_entrance:
-        mov     edx,7efefeffh
-        mov     eax,dword ptr [ecx] ; read 4 bytes
+        mov     edx,HEX(7efefeff)
+        mov     eax,dword ptr [ecx] // read 4 bytes
 
         add     edx,eax
         xor     eax,-1
 
         xor     eax,edx
-        mov     edx,[ecx]           ; it's in cache now
+        mov     edx,[ecx]           // it's in cache now
 
-        add     ecx,4               ; kick dest pointer
-        test    eax,81010100h
+        add     ecx,4               // kick dest pointer
+        test    eax,HEX(81010100)
 
         je      short main_loop
-        ; found zero byte in the loop
+        // found zero byte in the loop
 ; main_loop_end:
-        test    dl,dl               ; is it byte 0
+        test    dl,dl               // is it byte 0
         je      short byte_0
-        test    dh,dh               ; is it byte 1
+        test    dh,dh               // is it byte 1
         je      short byte_1
-        test    edx,00ff0000h       ; is it byte 2
+        test    edx,HEX(00ff0000)       // is it byte 2
         je      short byte_2
-        test    edx,0ff000000h      ; is it byte 3
+        test    edx,HEX(0ff000000)      // is it byte 3
         je      short byte_3
-        jmp     short main_loop     ; taken if bits 24-30 are clear and bit
-                                    ; 31 is set
+        jmp     short main_loop     // taken if bits 24-30 are clear and bit
+                                    // 31 is set
 byte_3:
         mov     [edi],edx
-        mov     eax,[esp+8]         ; return in eax pointer to dest string
+        mov     eax,[esp+8]         // return in eax pointer to dest string
         pop     edi
         ret
 byte_2:
         mov     [edi],dx
-        mov     eax,[esp+8]         ; return in eax pointer to dest string
+        mov     eax,[esp+8]         // return in eax pointer to dest string
         mov     byte ptr [edi+2],0
         pop     edi
         ret
 byte_1:
         mov     [edi],dx
-        mov     eax,[esp+8]         ; return in eax pointer to dest string
+        mov     eax,[esp+8]         // return in eax pointer to dest string
         pop     edi
         ret
 byte_0:
         mov     [edi],dl
-        mov     eax,[esp+8]         ; return in eax pointer to dest string
+        mov     eax,[esp+8]         // return in eax pointer to dest string
         pop     edi
         ret
 
-strcat  endp
+.ENDP // _strcat
 
         end
 
diff --git a/sdk/lib/ucrt/string/i386/strcmp.s 
b/sdk/lib/ucrt/string/i386/strcmp.s
index f22bc9a56af..6ff11c95a3a 100644
--- a/sdk/lib/ucrt/string/i386/strcmp.s
+++ b/sdk/lib/ucrt/string/i386/strcmp.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strcmp.asm - compare two strings
 ;***
@@ -58,21 +60,22 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  strcmp
-strcmp  proc \
-        str1:ptr byte, \
-        str2:ptr byte
+        public  _strcmp
+.PROC _strcmp
+        // str1:ptr byte, \
+        // str2:ptr byte
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-;       .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)
-        .FPO    ( 0, 2, 0, 0, 0, 0 )
+//       .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)
+        FPO    0, 2, 0, 0, 0, 0
 
-        mov     edx,[esp + 4]   ; edx = src
-        mov     ecx,[esp + 8]   ; ecx = dst
+        mov     edx,[esp + 4]   // edx = src
+        mov     ecx,[esp + 8]   // ecx = dst
 
         test    edx,3
         jnz     short dopartial
@@ -110,8 +113,8 @@ doneeq:
 
         align   8
 donene:
-        ; The instructions below should place -1 in eax if src < dst,
-        ; and 1 in eax if src > dst.
+        // The instructions below should place -1 in eax if src < dst,
+        // and 1 in eax if src > dst.
 
         sbb     eax,eax
         or      eax,1
@@ -149,6 +152,6 @@ doword:
         add     ecx,2
         jmp     short dodwords
 
-strcmp  endp
+.ENDP // _strcmp
 
         end
diff --git a/sdk/lib/ucrt/string/i386/strcspn.s 
b/sdk/lib/ucrt/string/i386/strcspn.s
index 1a227b7664b..01d551c3069 100644
--- a/sdk/lib/ucrt/string/i386/strcspn.s
+++ b/sdk/lib/ucrt/string/i386/strcspn.s
@@ -1,3 +1,4 @@
+#if 0
 ;***
 ;strcspn.asm -
 ;
@@ -14,3 +15,7 @@
 
 SSTRCSPN EQU 1
 INCLUDE STRSPN.ASM
+#else
+#define SSTRCSPN 1
+#include "strspn.s"
+#endif
diff --git a/sdk/lib/ucrt/string/i386/strlen.s 
b/sdk/lib/ucrt/string/i386/strlen.s
index 00f13e60dc4..0097d5ff325 100644
--- a/sdk/lib/ucrt/string/i386/strlen.s
+++ b/sdk/lib/ucrt/string/i386/strlen.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strlen - return the length of a null-terminated string
 ;***
@@ -46,26 +48,27 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  strlen
+        public  _strlen
 
-strlen  proc \
-        buf:ptr byte
+.PROC _strlen
+        // buf:ptr byte
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-        .FPO    ( 0, 1, 0, 0, 0, 0 )
+        FPO    0, 1, 0, 0, 0, 0
 
-string  equ     [esp + 4]
+#define string  [esp + 4]
 
-        mov     ecx,string              ; ecx -> string
-        test    ecx,3                   ; test if string is aligned on 32 bits
+        mov     ecx,string              // ecx -> string
+        test    ecx,3                   // test if string is aligned on 32 bits
         je      short main_loop
 
 str_misaligned:
-        ; simple byte loop until string is aligned
+        // simple byte loop until string is aligned
         mov     al,byte ptr [ecx]
         add     ecx,1
         test    al,al
@@ -73,31 +76,31 @@ str_misaligned:
         test    ecx,3
         jne     short str_misaligned
 
-        add     eax,dword ptr 0         ; 5 byte nop to align label below
+        add     eax,dword ptr 0         // 5 byte nop to align label below
 
-        align   16                      ; should be redundant
+        align   16                      // should be redundant
 
 main_loop:
-        mov     eax,dword ptr [ecx]     ; read 4 bytes
-        mov     edx,7efefeffh
+        mov     eax,dword ptr [ecx]     // read 4 bytes
+        mov     edx,HEX(7efefeff)
         add     edx,eax
         xor     eax,-1
         xor     eax,edx
         add     ecx,4
-        test    eax,81010100h
+        test    eax,HEX(81010100)
         je      short main_loop
-        ; found zero byte in the loop
+        // found zero byte in the loop
         mov     eax,[ecx - 4]
-        test    al,al                   ; is it byte 0
+        test    al,al                   // is it byte 0
         je      short byte_0
-        test    ah,ah                   ; is it byte 1
+        test    ah,ah                   // is it byte 1
         je      short byte_1
-        test    eax,00ff0000h           ; is it byte 2
+        test    eax,HEX(00ff0000)           // is it byte 2
         je      short byte_2
-        test    eax,0ff000000h          ; is it byte 3
+        test    eax,HEX(0ff000000)          // is it byte 3
         je      short byte_3
-        jmp     short main_loop         ; taken if bits 24-30 are clear and bit
-                                        ; 31 is set
+        jmp     short main_loop         // taken if bits 24-30 are clear and 
bit
+                                        // 31 is set
 
 byte_3:
         lea     eax,[ecx - 1]
@@ -120,6 +123,6 @@ byte_0:
         sub     eax,ecx
         ret
 
-strlen  endp
+.ENDP // _strlen
 
         end
diff --git a/sdk/lib/ucrt/string/i386/strncat.s 
b/sdk/lib/ucrt/string/i386/strncat.s
index 4ec292c0e8f..0fd2d6508b2 100644
--- a/sdk/lib/ucrt/string/i386/strncat.s
+++ b/sdk/lib/ucrt/string/i386/strncat.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strncat - append n chars of string1 to string2
 ;***
@@ -57,29 +59,30 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-    CODESEG
+    .code
 
-    public  strncat
-strncat proc
-;   front:ptr byte,
-;   back:ptr byte,
-;   count:IWORD
+    public  _strncat
+.PROC _strncat
+   // front:ptr byte,
+   // back:ptr byte,
+   // count:IWORD
 
-        .FPO    ( 0, 3, 0, 0, 0, 0 )
+        FPO    0, 3, 0, 0, 0, 0
 
-        mov     ecx,[esp + 0ch]     ; ecx = count
-        push    edi                 ; preserve edi
+        mov     ecx,[esp + HEX(0c)]     // ecx = count
+        push    edi                 // preserve edi
         test    ecx,ecx
-        jz      finish              ; leave if count is zero
+        jz      finish              // leave if count is zero
 
-        mov     edi,[esp + 8]       ; edi -> front string
-        push    esi                 ; preserve esi
-        test    edi,3               ; is string aligned on dword (4 bytes)
-        push    ebx                 ; preserve ebx
+        mov     edi,[esp + 8]       // edi -> front string
+        push    esi                 // preserve esi
+        test    edi,3               // is string aligned on dword (4 bytes)
+        push    ebx                 // preserve ebx
         je      short find_end_of_front_string_loop
 
-        ; simple byte loop until string is aligned
+        // simple byte loop until string is aligned
 
 front_misaligned:
         mov     al,byte ptr [edi]
@@ -90,27 +93,27 @@ front_misaligned:
         jne     short front_misaligned
 
 find_end_of_front_string_loop:
-        mov     eax,dword ptr [edi] ; read dword (4 bytes)
-        mov     edx,7efefeffh
+        mov     eax,dword ptr [edi] // read dword (4 bytes)
+        mov     edx,HEX(7efefeff)
         add     edx,eax
         xor     eax,-1
         xor     eax,edx
         add     edi,4
-        test    eax,81010100h
+        test    eax,HEX(81010100)
         je      short find_end_of_front_string_loop
 
-; found zero byte in the loop
+// found zero byte in the loop
         mov     eax,[edi - 4]
-        test    al,al               ; is it byte 0
+        test    al,al               // is it byte 0
         je      short start_byte_0
-        test    ah,ah               ; is it byte 1
+        test    ah,ah               // is it byte 1
         je      short start_byte_1
-        test    eax,00ff0000h       ; is it byte 2
+        test    eax,HEX(00ff0000)       // is it byte 2
         je      short start_byte_2
-        test    eax,0ff000000h      ; is it byte 3
+        test    eax,HEX(0ff000000)      // is it byte 3
         jne     short find_end_of_front_string_loop
-                                    ; taken if bits 24-30 are clear and bit
-                                    ; 31 is set
+                                    // taken if bits 24-30 are clear and bit
+                                    // 31 is set
 start_byte_3:
         sub     edi,1
         jmp     short copy_start
@@ -123,20 +126,20 @@ start_byte_1:
 start_byte_0:
         sub     edi,4
 
-; edi now points to the end of front string.
+// edi now points to the end of front string.
 
 copy_start:
-        mov     esi,[esp + 14h]     ; esi -> back string
-        test    esi,3               ; is back string is dword aligned?
+        mov     esi,[esp + HEX(14)]     // esi -> back string
+        test    esi,3               // is back string is dword aligned?
         jnz     back_misaligned
 
-        mov     ebx,ecx             ; store count for tail loop
+        mov     ebx,ecx             // store count for tail loop
 
         shr     ecx,2
         jnz     short main_loop_entrance
-        jmp     short tail_loop_start   ; 0 < counter < 4
+        jmp     short tail_loop_start   // 0 < counter < 4
 
-; simple byte loop until back string is aligned
+// simple byte loop until back string is aligned
 
 back_misaligned:
         mov     dl,byte ptr [esi]
@@ -149,14 +152,14 @@ back_misaligned:
         jz      empty_counter
         test    esi,3
         jne     short back_misaligned
-        mov     ebx,ecx             ; store count for tail loop
-        shr     ecx,2               ; convert ecx to dword count
+        mov     ebx,ecx             // store count for tail loop
+        shr     ecx,2               // convert ecx to dword count
         jnz     short main_loop_entrance
 
 tail_loop_start:
         mov     ecx,ebx
-        and     ecx,3               ; ecx = count of leftover bytes after the
-                                    ; dwords have been concatenated
+        and     ecx,3               // ecx = count of leftover bytes after the
+                                    // dwords have been concatenated
         jz      empty_counter
 
 tail_loop:
@@ -165,88 +168,88 @@ tail_loop:
         mov     [edi],dl
         add     edi,1
         test    dl,dl
-        je      short finish1       ; '\0' was already copied
+        je      short finish1       // '\0' was already copied
         sub     ecx,1
         jnz     tail_loop
 
 empty_counter:
-        mov     [edi],cl            ; cl=0;
+        mov     [edi],cl            // cl=0;
 finish1:
         pop     ebx
         pop     esi
 finish:
-        mov     eax,[esp + 8]       ; return in eax pointer to front string
+        mov     eax,[esp + 8]       // return in eax pointer to front string
         pop     edi
-        ret                         ; _cdecl return
+        ret                         // _cdecl return
 
 
 byte_0:
         mov     [edi],dl
-        mov     eax,[esp + 10h]     ; return in eax pointer to front string
+        mov     eax,[esp + HEX(10)]     // return in eax pointer to front 
string
         pop     ebx
         pop     esi
         pop     edi
-        ret                         ; _cdecl return
+        ret                         // _cdecl return
 
 
-main_loop:                          ; edx contains first dword of back string
-        mov     [edi],edx           ; store one more dword
-        add     edi,4               ; kick pointer to front string
+main_loop:                          // edx contains first dword of back string
+        mov     [edi],edx           // store one more dword
+        add     edi,4               // kick pointer to front string
 
         sub     ecx,1
         jz      tail_loop_start
 main_loop_entrance:
-        mov     edx,7efefeffh
-        mov     eax,dword ptr [esi] ; read 4 bytes
+        mov     edx,HEX(7efefeff)
+        mov     eax,dword ptr [esi] // read 4 bytes
 
         add     edx,eax
         xor     eax,-1
 
         xor     eax,edx
-        mov     edx,[esi]           ; it's in cache now
+        mov     edx,[esi]           // it's in cache now
 
-        add     esi,4               ; kick pointer to back string
-        test    eax,81010100h
+        add     esi,4               // kick pointer to back string
+        test    eax,HEX(81010100)
 
         je      short main_loop
 
-; may be found zero byte in the loop
-        test    dl,dl               ; is it byte 0
+// may be found zero byte in the loop
+        test    dl,dl               // is it byte 0
         je      short byte_0
-        test    dh,dh               ; is it byte 1
+        test    dh,dh               // is it byte 1
         je      short byte_1
-        test    edx,00ff0000h       ; is it byte 2
+        test    edx,HEX(00ff0000)       // is it byte 2
         je      short byte_2
-        test    edx,0ff000000h      ; is it byte 3
-        jne short main_loop         ; taken if bits 24-30 are clear and bit
-                                    ; 31 is set
+        test    edx,HEX(0ff000000)      // is it byte 3
+        jne short main_loop         // taken if bits 24-30 are clear and bit
+                                    // 31 is set
 byte_3:
         mov     [edi],edx
-        mov     eax,[esp + 10h]     ; return in eax pointer to front string
+        mov     eax,[esp + HEX(10)]     // return in eax pointer to front 
string
         pop     ebx
         pop     esi
         pop     edi
-        ret                         ; _cdecl return
+        ret                         // _cdecl return
 
 byte_2:
         mov     [edi],dx
         xor     edx,edx
-        mov     eax,[esp + 10h]     ; return in eax pointer to front string
+        mov     eax,[esp + HEX(10)]     // return in eax pointer to front 
string
         mov     [edi + 2],dl
         pop     ebx
         pop     esi
         pop     edi
-        ret                         ; _cdecl return
+        ret                         // _cdecl return
 
 byte_1:
         mov     [edi],dx
-        mov     eax,[esp + 10h]     ; return in eax pointer to front string
+        mov     eax,[esp + HEX(10)]     // return in eax pointer to front 
string
         pop     ebx
         pop     esi
         pop     edi
-        ret                         ; _cdecl return
+        ret                         // _cdecl return
 
-strncat endp
+.ENDP // _strncat
 
         end
 
diff --git a/sdk/lib/ucrt/string/i386/strncmp.s 
b/sdk/lib/ucrt/string/i386/strncmp.s
index 1f0faa27a16..8086c5da06a 100644
--- a/sdk/lib/ucrt/string/i386/strncmp.s
+++ b/sdk/lib/ucrt/string/i386/strncmp.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strncmp.asm - compare two strings
 ;***
@@ -73,43 +75,44 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-CHAR_TYPE EQU BYTE
-CHAR_PTR EQU BYTE PTR
-CHAR_SIZE = sizeof CHAR_TYPE
+#define CHAR_TYPE BYTE
+#define CHAR_PTR BYTE PTR
+#define CHAR_SIZE 1 // = sizeof CHAR_TYPE
 
-BLK_TYPE EQU DWORD
-BLK_PTR EQU DWORD PTR
-BLK_SIZE = sizeof BLK_TYPE
-BLK_CHARS = BLK_SIZE / CHAR_SIZE
+#define BLK_TYPE DWORD
+#define BLK_PTR DWORD PTR
+#define BLK_SIZE 4 // = sizeof BLK_TYPE
+#define BLK_CHARS 4 // = BLK_SIZE / CHAR_SIZE
 
-PAGE_SIZE = 1000h
-PAGE_MASK = PAGE_SIZE - 1       ; mask for offset in MM page
-PAGE_SAFE_BLK = PAGE_SIZE - BLK_SIZE ; maximum offset for safe block compare
+PAGE_SIZE = HEX(1000)
+PAGE_MASK = PAGE_SIZE - 1       // mask for offset in MM page
+PAGE_SAFE_BLK = PAGE_SIZE - BLK_SIZE // maximum offset for safe block compare
 
-    public  strncmp
-strncmp proc \
-        uses ebx esi, \
-        str1:ptr byte, \
-        str2:ptr byte, \
-        count:IWORD
+    public  _strncmp
+.PROC _strncmp
+        // uses ebx esi, \
+        // str1:ptr byte, \
+        // str2:ptr byte, \
+        // count:IWORD
 
-    OPTION PROLOGUE:NONE, EPILOGUE:NONE
+    //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
     push      ebx
     push      esi
 
-;   .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)
-    .FPO      ( 0, 3, $ - strncmp, 2, 0, 0 )
+//   .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)
+    FPO      0, 3, ($ - _strncmp), 2, 0, 0
 
-    mov       ecx,[esp + 12]   ; ecx = str1
-    mov       edx,[esp + 16]   ; edx = str2
-    mov       ebx,[esp + 20]   ; ebx = count
+    mov       ecx,[esp + 12]   // ecx = str1
+    mov       edx,[esp + 16]   // edx = str2
+    mov       ebx,[esp + 20]   // ebx = count
 
-; Check for a limit of zero characters.
-    test      ebx, 0FFFFFFFFh
+// Check for a limit of zero characters.
+    test      ebx, HEX(0FFFFFFFF)
     jz        return_equal
 
     sub       ecx, edx
@@ -146,11 +149,11 @@ dword_loop_begin:
     sub       ebx, BLK_CHARS
     jbe       return_equal
 
-    lea       esi, [eax+0fefefeffh]
+    lea       esi, [eax+HEX(0fefefeff)]
     add       edx, BLK_SIZE
     not       eax
     and       eax, esi
-    test      eax, 80808080h
+    test      eax, HEX(80808080)
     jz        dword_loop_begin
 
 return_equal:
@@ -162,12 +165,12 @@ return_equal:
     align     16
 
 return_not_equal:
-    sbb       eax, eax  ; AX=-1, CY=1 AX=0, CY=0
+    sbb       eax, eax  // AX=-1, CY=1 AX=0, CY=0
     or        eax, 1
     pop       esi
     pop       ebx
     ret
 
-strncmp endp
+.ENDP // _strncmp
 
     end
diff --git a/sdk/lib/ucrt/string/i386/strncpy.s 
b/sdk/lib/ucrt/string/i386/strncpy.s
index 000991703b5..30c8801ec84 100644
--- a/sdk/lib/ucrt/string/i386/strncpy.s
+++ b/sdk/lib/ucrt/string/i386/strncpy.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strncpy - copy at most n characters of string
 ;***
@@ -55,95 +57,96 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  strncpy
-strncpy proc \
-        dest:ptr byte, \
-        source:ptr byte, \
-        count:dword
+        public  _strncpy
+.PROC _strncpy
+        // dest:ptr byte, \
+        // source:ptr byte, \
+        // count:dword
 
-        OPTION PROLOGUE:NONE, EPILOGUE:NONE
+        //OPTION PROLOGUE:NONE, EPILOGUE:NONE
 
-        .FPO    ( 0, 3, 0, 0, 0, 0 )
+        FPO    0, 3, 0, 0, 0, 0
 
-        mov     ecx,[esp + 0ch]     ; ecx = count
-        push    edi                 ; preserve edi
+        mov     ecx,[esp + HEX(0c)]     // ecx = count
+        push    edi                 // preserve edi
         test    ecx,ecx
-        jz      finish              ; leave if count is zero
+        jz      finish              // leave if count is zero
 
-        push    esi                 ; preserve edi
-        push    ebx                 ; preserve ebx
-        mov     ebx,ecx             ; store count for tail loop
-        mov     esi,[esp + 14h]     ; esi -> source string
-        test    esi,3               ; test if source string is aligned on 32 
bits
-        mov     edi,[esp + 10h]     ; edi -> dest string
-        jnz     short src_misaligned    ; (almost always source is aligned)
+        push    esi                 // preserve edi
+        push    ebx                 // preserve ebx
+        mov     ebx,ecx             // store count for tail loop
+        mov     esi,[esp + HEX(14)]     // esi -> source string
+        test    esi,3               // test if source string is aligned on 32 
bits
+        mov     edi,[esp + HEX(10)]     // edi -> dest string
+        jnz     short src_misaligned    // (almost always source is aligned)
 
-        shr     ecx,2               ; convert ecx to dword count
+        shr     ecx,2               // convert ecx to dword count
         jnz     main_loop_entrance
-        jmp     short copy_tail_loop    ; 0 < count < 4
+        jmp     short copy_tail_loop    // 0 < count < 4
 
-; simple byte loop until string is aligned
+// simple byte loop until string is aligned
 
 src_misaligned:
-        mov     al,byte ptr [esi]   ; copy a byte from source to dest
+        mov     al,byte ptr [esi]   // copy a byte from source to dest
         add     esi,1
         mov     [edi],al
         add     edi,1
         sub     ecx,1
-        jz      fill_tail_end1      ; if count == 0, leave
-        test    al,al               ; was last copied byte zero?
-        jz      short align_dest    ; if so, go align dest and pad it out
-                                    ; with zeros
-        test    esi,3               ; esi already aligned ?
+        jz      fill_tail_end1      // if count == 0, leave
+        test    al,al               // was last copied byte zero?
+        jz      short align_dest    // if so, go align dest and pad it out
+                                    // with zeros
+        test    esi,3               // esi already aligned ?
         jne     short src_misaligned
-        mov     ebx,ecx             ; store count for tail loop
+        mov     ebx,ecx             // store count for tail loop
         shr     ecx,2
         jnz     short main_loop_entrance
 
 tail_loop_start:
-        and     ebx,3               ; ebx = count_before_main_loop%4
-        jz      short fill_tail_end1    ; if ebx == 0 then leave without
-                                        ; appending a null byte
+        and     ebx,3               // ebx = count_before_main_loop%4
+        jz      short fill_tail_end1    // if ebx == 0 then leave without
+                                        // appending a null byte
 
-; while ( EOS (end-of-string) not found and count > 0 ) copy bytes
+// while ( EOS (end-of-string) not found and count > 0 ) copy bytes
 
 copy_tail_loop:
-        mov     al,byte ptr [esi]   ; load byte from source
+        mov     al,byte ptr [esi]   // load byte from source
         add     esi,1
-        mov     [edi],al            ; store byte to dest
+        mov     [edi],al            // store byte to dest
         add     edi,1
-        test    al,al               ; EOS found?
-        je      short fill_tail_zero_bytes  ; '\0' was already copied
+        test    al,al               // EOS found?
+        je      short fill_tail_zero_bytes  // '\0' was already copied
         sub     ebx,1
         jnz     copy_tail_loop
 fill_tail_end1:
-        mov     eax,[esp + 10h]     ; prepare return value
+        mov     eax,[esp + HEX(10)]     // prepare return value
         pop     ebx
         pop     esi
         pop     edi
         ret
 
-; EOS found. Pad with null characters to length count
+// EOS found. Pad with null characters to length count
 
 align_dest:
-        test    edi,3               ; dest string aligned?
+        test    edi,3               // dest string aligned?
         jz      dest_align_loop_end
 dest_align_loop:
         mov     [edi],al
         add     edi,1
-        sub     ecx,1               ; count == 0?
-        jz      fill_tail_end       ; if so, finished
-        test    edi,3               ; is edi aligned ?
+        sub     ecx,1               // count == 0?
+        jz      fill_tail_end       // if so, finished
+        test    edi,3               // is edi aligned ?
         jnz     dest_align_loop
 dest_align_loop_end:
-        mov     ebx,ecx             ; ebx > 0
-        shr     ecx,2               ; convert ecx to count of dwords
+        mov     ebx,ecx             // ebx > 0
+        shr     ecx,2               // convert ecx to count of dwords
         jnz     fill_dwords_with_EOS
-        ; pad tail bytes
-finish_loop:                        ; 0 < ebx < 4
+        // pad tail bytes
+finish_loop:                        // 0 < ebx < 4
         mov     [edi],al
         add     edi,1
 fill_tail_zero_bytes:
@@ -152,68 +155,68 @@ fill_tail_zero_bytes:
         pop     ebx
         pop     esi
 finish:
-        mov     eax,[esp + 8]       ; return in eax pointer to dest string
+        mov     eax,[esp + 8]       // return in eax pointer to dest string
         pop     edi
         ret
 
-; copy (source) string to (dest). Also look for end of (source) string
+// copy (source) string to (dest). Also look for end of (source) string
 
-main_loop:                          ; edx contains first dword of source string
-        mov     [edi],edx           ; store one more dword
-        add     edi,4               ; kick dest pointer
+main_loop:                          // edx contains first dword of source 
string
+        mov     [edi],edx           // store one more dword
+        add     edi,4               // kick dest pointer
         sub     ecx,1
         jz      tail_loop_start
 
 main_loop_entrance:
-        mov     edx,7efefeffh
-        mov     eax,dword ptr [esi] ; read 4 bytes (dword)
+        mov     edx,HEX(7efefeff)
+        mov     eax,dword ptr [esi] // read 4 bytes (dword)
         add     edx,eax
         xor     eax,-1
         xor     eax,edx
-        mov     edx,[esi]           ; it's in cache now
-        add     esi,4               ; kick dest pointer
-        test    eax,81010100h
+        mov     edx,[esi]           // it's in cache now
+        add     esi,4               // kick dest pointer
+        test    eax,HEX(81010100)
         je      short main_loop
 
-        ; may have found zero byte in the dword
+        // may have found zero byte in the dword
 
-        test    dl,dl               ; is it byte 0
+        test    dl,dl               // is it byte 0
         je      short byte_0
-        test    dh,dh               ; is it byte 1
+        test    dh,dh               // is it byte 1
         je      short byte_1
-        test    edx,00ff0000h       ; is it byte 2
+        test    edx,HEX(00ff0000)       // is it byte 2
         je      short byte_2
-        test    edx,0ff000000h      ; is it byte 3
-        jne     short main_loop     ; taken if bits 24-30 are clear and bit
-                                    ; 31 is set
+        test    edx,HEX(0ff000000)      // is it byte 3
+        jne     short main_loop     // taken if bits 24-30 are clear and bit
+                                    // 31 is set
 
-; a null character was found, so dest needs to be padded out with null chars
-; to count length.
+// a null character was found, so dest needs to be padded out with null chars
+// to count length.
 
         mov     [edi],edx
         jmp     short fill_with_EOS_dwords
 
 byte_2:
-        and     edx,0ffffh          ; fill high 2 bytes with 0
+        and     edx,HEX(0ffff)          // fill high 2 bytes with 0
         mov     [edi],edx
         jmp     short fill_with_EOS_dwords
 
 byte_1:
-        and     edx,0ffh            ; fill high 3 bytes with 0
+        and     edx,HEX(0ff)            // fill high 3 bytes with 0
         mov     [edi],edx
         jmp     short fill_with_EOS_dwords
 
 byte_0:
-        xor     edx,edx             ; fill whole dword with 0
+        xor     edx,edx             // fill whole dword with 0
         mov     [edi],edx
 
-; End of string was found. Pad out dest string with dwords of 0
+// End of string was found. Pad out dest string with dwords of 0
 
-fill_with_EOS_dwords:               ; ecx > 0   (ecx is dword counter)
+fill_with_EOS_dwords:               // ecx > 0   (ecx is dword counter)
         add     edi,4
-        xor     eax,eax             ; it is instead of ???????????????????
+        xor     eax,eax             // it is instead of ???????????????????
         sub     ecx,1
-        jz      fill_tail           ; we filled all dwords
+        jz      fill_tail           // we filled all dwords
 
 fill_dwords_with_EOS:
         xor     eax,eax
@@ -222,17 +225,17 @@ fill_with_EOS_loop:
         add     edi,4
         sub     ecx,1
         jnz     short fill_with_EOS_loop
-fill_tail:                          ; let's pad tail bytes with zero
-        and     ebx,3               ; ebx = ebx % 4
-        jnz     finish_loop         ; taken, when there are some tail bytes
+fill_tail:                          // let's pad tail bytes with zero
+        and     ebx,3               // ebx = ebx % 4
+        jnz     finish_loop         // taken, when there are some tail bytes
 fill_tail_end:
-        mov     eax,[esp + 10h]
+        mov     eax,[esp + HEX(10)]
         pop     ebx
         pop     esi
         pop     edi
         ret
 
-strncpy endp
+.ENDP // _strncpy
         end
 
 
diff --git a/sdk/lib/ucrt/string/i386/strnset.s 
b/sdk/lib/ucrt/string/i386/strnset.s
index 8e999122f35..f2caef4a36e 100644
--- a/sdk/lib/ucrt/string/i386/strnset.s
+++ b/sdk/lib/ucrt/string/i386/strnset.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strnset - set first n characters to one char.
 ;***
@@ -50,40 +52,49 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  _strnset
-_strnset proc \
-        uses edi ebx, \
-        string:ptr byte, \
-        val:byte, \
-        count:IWORD
+        public  __strnset
+.PROC __strnset
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push edi // uses edi ebx
+        push ebx
+        #define string ebp + 8 // string:ptr byte
+        #define val ebp + 12 // val:byte
+        #define count ebp + 16 // count:IWORD
 
 
-        mov     edi,[string]    ; di = string
-        mov     edx,edi         ; dx=string addr; save return value
-        mov     ebx,[count]     ; cx = max chars to set
-        xor     eax,eax         ; null byte
+        mov     edi,[string]    // di = string
+        mov     edx,edi         // dx=string addr; save return value
+        mov     ebx,[count]     // cx = max chars to set
+        xor     eax,eax         // null byte
         mov     ecx,ebx
-        jecxz   short done      ; zero length specified
+        jecxz   short done      // zero length specified
 
-repne   scasb                   ; find null byte & count bytes in cx
-        jne     short nonull    ; null not found
-        add     ecx,1           ; don't want the null
+repne   scasb                   // find null byte & count bytes in cx
+        jne     short nonull    // null not found
+        add     ecx,1           // don't want the null
 
 nonull:
-        sub     ebx,ecx         ; bx=strlen (not null)
-        mov     ecx,ebx         ; cx=strlen (not null)
+        sub     ebx,ecx         // bx=strlen (not null)
+        mov     ecx,ebx         // cx=strlen (not null)
 
-        mov     edi,edx         ; restore string pointer
-        mov     al,val          ; byte value
-rep     stosb                   ; fill 'er up
+        mov     edi,edx         // restore string pointer
+        mov     al,[val]        // byte value
+rep     stosb                   // fill 'er up
 
 done:
-        mov     eax,edx         ; return value: string addr
+        mov     eax,edx         // return value: string addr
 
-        ret                     ; _cdecl return
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop     ebx
+        pop     edi
+        pop     ebp
+        ret                     // _cdecl return
 
-_strnset endp
+.ENDP // __strnset
         end
diff --git a/sdk/lib/ucrt/string/i386/strpbrk.s 
b/sdk/lib/ucrt/string/i386/strpbrk.s
index 7bf1693bec8..9fa023abc53 100644
--- a/sdk/lib/ucrt/string/i386/strpbrk.s
+++ b/sdk/lib/ucrt/string/i386/strpbrk.s
@@ -1,3 +1,4 @@
+#if 0
 ;***
 ;strpbrk.asm -
 ;
@@ -14,3 +15,7 @@
 
 SSTRPBRK EQU 1
 INCLUDE STRSPN.ASM
+#else
+#define SSTRPBRK 1
+#include "strspn.s"
+#endif
diff --git a/sdk/lib/ucrt/string/i386/strrev.s 
b/sdk/lib/ucrt/string/i386/strrev.s
index 538fb257bd4..b96dc900a2b 100644
--- a/sdk/lib/ucrt/string/i386/strrev.s
+++ b/sdk/lib/ucrt/string/i386/strrev.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strrev - reverse a string in place
 ;***
@@ -63,43 +65,52 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  _strrev
-_strrev proc \
-        uses edi esi, \
-        string:ptr byte
+        public  __strrev
+.PROC __strrev
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push edi // uses edi esi
+        push esi
+#define string ebp + 8 // string:ptr byte
 
-        mov     edi,[string]    ; di = string
-        mov     edx,edi         ; dx=pointer to string; save return value
+        mov     edi,[string]    // di = string
+        mov     edx,edi         // dx=pointer to string; save return value
 
-        mov     esi,edi         ; si=pointer to string
-        xor     eax,eax         ; search value (null)
-        or      ecx,-1          ; cx = -1
-repne   scasb                   ; find null
-        cmp     ecx,-2          ; is string empty? (if offset value is 0, the
-        je      short done      ; cmp below will not catch it and we'll hang).
+        mov     esi,edi         // si=pointer to string
+        xor     eax,eax         // search value (null)
+        or      ecx,-1          // cx = -1
+repne   scasb                   // find null
+        cmp     ecx,-2          // is string empty? (if offset value is 0, the
+        je      short done      // cmp below will not catch it and we'll hang).
 
-        sub     edi,2           ; string is not empty, move di pointer back
-                                ; di points to last non-null byte
+        sub     edi,2           // string is not empty, move di pointer back
+                                // di points to last non-null byte
 
 lupe:
-        cmp     esi,edi         ; see if pointers have crossed yet
-        jae     short done      ; exit when pointers meet (or cross)
+        cmp     esi,edi         // see if pointers have crossed yet
+        jae     short done      // exit when pointers meet (or cross)
 
-        mov     ah,[esi]        ; get front byte...
-        mov     al,[edi]        ;   and end byte
-        mov     [esi],al        ; put end byte in front...
-        mov     [edi],ah        ;   and front byte at end
-        add     esi,1           ; front moves up...
-        sub     edi,1           ;   and end moves down
-        jmp     short lupe      ; keep switching bytes
+        mov     ah,[esi]        // get front byte...
+        mov     al,[edi]        //   and end byte
+        mov     [esi],al        // put end byte in front...
+        mov     [edi],ah        //   and front byte at end
+        add     esi,1           // front moves up...
+        sub     edi,1           //   and end moves down
+        jmp     short lupe      // keep switching bytes
 
 done:
-        mov     eax,edx         ; return value: string addr
+        mov     eax,edx         // return value: string addr
 
-        ret                     ; _cdecl return
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop     esi
+        pop     edi
+        pop     ebp
+        ret                     // _cdecl return
 
-_strrev endp
+.ENDP // __strrev
         end
diff --git a/sdk/lib/ucrt/string/i386/strset.s 
b/sdk/lib/ucrt/string/i386/strset.s
index 9f674bf0330..72d2e345f8e 100644
--- a/sdk/lib/ucrt/string/i386/strset.s
+++ b/sdk/lib/ucrt/string/i386/strset.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strset - set all characters of string to character
 ;***
@@ -48,31 +50,39 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
-        CODESEG
+        .code
 
-        public  _strset
-_strset proc \
-        uses edi, \
-        string:ptr byte, \
-        val:byte
+        public  __strset
+.PROC __strset
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push edi // uses edi
+#define string ebp + 8 // string:ptr byte
+#define val ebp + 12 // val:byte
 
 
-        mov     edi,[string]    ; di = string
-        mov     edx,edi         ; dx=string addr; save return value
+        mov     edi,[string]    // di = string
+        mov     edx,edi         // dx=string addr; save return value
 
-        xor     eax,eax         ; ax = 0
-        or      ecx,-1          ; cx = -1
-repne   scasb                   ; scan string & count bytes
-        add     ecx,2           ; cx=-strlen
-        neg     ecx             ; cx=strlen
-        mov     al,[val]        ; al = byte value to store
-        mov     edi,edx         ; di=string addr
+        xor     eax,eax         // ax = 0
+        or      ecx,-1          // cx = -1
+repne   scasb                   // scan string & count bytes
+        add     ecx,2           // cx=-strlen
+        neg     ecx             // cx=strlen
+        mov     al,[val]        // al = byte value to store
+        mov     edi,edx         // di=string addr
 rep     stosb
 
-        mov     eax,edx         ; return value: string addr
+        mov     eax,edx         // return value: string addr
 
-        ret                     ; _cdecl return
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop     edi
+        pop     ebp
 
-_strset endp
+        ret                     // _cdecl return
+
+.ENDP // __strset
         end
diff --git a/sdk/lib/ucrt/string/i386/strspn.s 
b/sdk/lib/ucrt/string/i386/strspn.s
index 3f89a15ce75..384325092e4 100644
--- a/sdk/lib/ucrt/string/i386/strspn.s
+++ b/sdk/lib/ucrt/string/i386/strspn.s
@@ -1,3 +1,5 @@
+#include <asm.inc>
+#if 0
         page    ,132
         title   strspn - search for init substring of chars from control str
 ;***
@@ -165,54 +167,58 @@ page
 ;Exceptions:
 ;
 
;*******************************************************************************
+#endif
 
 
-ifdef SSTRCSPN
+#ifdef SSTRCSPN
 
-    _STRSPN_ equ <strcspn>
+    #define _STRSPN_ _strcspn
 
-elseifdef SSTRPBRK
+#elif defined(SSTRPBRK)
 
-    _STRSPN_ equ <strpbrk>
+    #define _STRSPN_ _strpbrk
 
-else  ; SSTRCSPN
+#else  // SSTRCSPN
 
-; Default is to build strspn()
+// Default is to build strspn()
 
-    SSTRSPN equ 1
-    _STRSPN_ equ <strspn>
+    #define SSTRSPN 1
+    #define _STRSPN_ _strspn
 
-endif  ; SSTRCSPN
+#endif  // SSTRCSPN
 
-% public  _STRSPN_
+public  _STRSPN_
 
-    CODESEG
+    .code
 
-_STRSPN_ proc \
-        uses esi, \
-        string:ptr byte, \
-        control:ptr byte
+.PROC _STRSPN_
+// Prolog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        push ebp
+        mov ebp, esp
+        push esi // uses esi
+#define string ebp + 8 // string:ptr byte
+#define control ebp + 12 // control:ptr byte
 
-; create and zero out char bit map
+// create and zero out char bit map
 
         xor     eax,eax
-        push    eax             ; 32
+        push    eax             // 32
         push    eax
         push    eax
-        push    eax             ; 128
+        push    eax             // 128
         push    eax
         push    eax
         push    eax
-        push    eax             ; 256
+        push    eax             // 256
 
-map     equ     [esp]
+#define map          [esp]
 
-; Set control char bits in map
+// Set control char bits in map
 
-        mov     edx,control     ; si = control string
+        mov     edx,[control]     // si = control string
 
-        align   @WordSize
-lab listnext                    ; init char bit map
+        align   4 // @WordSize
+listnext:                    // init char bit map
         mov     al,[edx]
         or      al,al
         jz      short listdone
@@ -220,18 +226,22 @@ lab listnext                    ; init char bit map
         bts     map,eax
         jmp     short listnext
 
-lab listdone
+listdone:
 
-; Loop through comparing source string with control bits
+// Loop through comparing source string with control bits
 
-        mov     esi,string      ; si = string
+        mov     esi,[string]      // si = string
 
-_ifnd   SSTRPBRK, <or     ecx,-1> ; set ecx to -1
+#ifndef   SSTRPBRK
+        or     ecx,-1 // set ecx to -1
+#endif
 
-        align   @WordSize
-lab dstnext
+        align   4 // @WordSize
+dstnext:
 
-_ifnd   SSTRPBRK, <add    ecx,1>
+#ifndef   SSTRPBRK
+        add    ecx,1
+#endif
 
         mov     al,[esi]
         or      al,al
@@ -239,24 +249,30 @@ _ifnd   SSTRPBRK, <add    ecx,1>
         add     esi,1
         bt      map, eax
 
-ifdef SSTRSPN
-        jc      short dstnext   ; strspn: found char, continue
-elseifdef SSTRCSPN
-        jnc     short dstnext   ; strcspn: did not find char, continue
-elseifdef SSTRPBRK
-        jnc     short dstnext   ; strpbrk: did not find char, continue
-        lea     eax,[esi - 1]   ; found char, return address of it
-endif  ; SSTRSPN
+#ifdef SSTRSPN
+        jc      short dstnext   // strspn: found char, continue
+#elif defined SSTRCSPN
+        jnc     short dstnext   // strcspn: did not find char, continue
+#elif defined SSTRPBRK
+        jnc     short dstnext   // strpbrk: did not find char, continue
+        lea     eax,[esi - 1]   // found char, return address of it
+#endif  // SSTRSPN
 
-; Return code
+// Return code
 
-lab dstdone
+dstdone:
 
-_ifnd   SSTRPBRK, <mov   eax,ecx> ; strspn/strcspn: return index
+#ifndef   SSTRPBRK
+        mov   eax,ecx // strspn/strcspn: return index
+#endif
 
         add     esp,32
 
-        ret                     ; _cdecl return
+// Epilog. Original sources used ML's extended PROC feature to autogenerate 
this.
+        pop     esi
+        pop     ebp
 
-_STRSPN_ endp
+        ret                     // _cdecl return
+
+.ENDP // _STRSPN_
          end

Reply via email to