extern env_stack
   extern crt_write
   extern x_list_extension
   
   global _start
   _start:
     call       env_stack       ;save ptr to environment
     call       x_list_extension;get x server extensions
     call       show_extensions ;display extensions
    
     mov        eax,01          ;exit function
     int        byte 80h        ;exit program
   
   ;------------------------------------------------
   ;subroutine to display list of x server extensions
   ;inputs: ecx = ptr to reply from x server
   ;
   show_extensions:
     lea        esi,[ecx+32]    ;get ptr to extension
     xor        eax,eax
     mov        al,[ecx+1]      ;get number of extensions
     mov        ebp,eax         ;save count
   show_loop:
     call       line_feed
     lea        ecx,[esi+1]     ;get ptr to extension name
     xor        edx,edx
     mov        dl,[esi]        ;get length of name
     add        esi,edx         ;move to next name
     inc        esi             ;move to next name
     call       crt_write       ;display extension
   
     dec        ebp             ;dec extension count
     jnz        show_loop       ;loop if more names
     call       line_feed       ;add final line feed
     ret
   ;-----------------------------------------------
   ;subroutine to display line-feed
   ;inputs: registers esi,ebp must be
   ;        preserved
   line_feed:
     mov        ecx,linefeed
     mov        edx,1
     call       crt_write
     ret
   ;-----------
     [section .data]
   linefeed:    db 0ah
     [section .text]