home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / progjour / 1991 / 04 / datagram.asm < prev    next >
Assembly Source File  |  1991-04-19  |  2KB  |  113 lines

  1.     title    send datagram
  2.     include    asm.inc
  3.     include    netbios.inc
  4.  
  5.     public    main
  6.  
  7.     .stack
  8.  
  9.     .const
  10. add_name_text    db    'Send Datagram',0
  11.  
  12. broadcast_text    db    'Broadcast '
  13. datagram_text    db    'Datagram sent.',0
  14.  
  15. help_text    label  byte
  16.   db  'datagram <target> <text>',13,10
  17.   db  'Sends <text> in NetBIOS datagram to <target>.',13,10
  18.   db  'Use * to broadcast datagram.',13,10
  19.   db  'e.g.: datagram TEST This is a datagram to remote name TEST.',13,10
  20.   db  'e.g.: datagram * This is a broadcast datagram.',0
  21.  
  22. driver_ertx    db    'No NetBIOS driver found',0
  23. add_name_ertx    db    'Add Name failed',0
  24.  
  25.  
  26.     .data?
  27.     extrn    argc:word,argv:dword
  28.  
  29. add_name    db    ?
  30.  
  31.  
  32.     .code
  33.     extn    startup,puts,exit_program,netbios_check,netbios_add_name
  34.     extn    strskp_white,read_command_line,netbios_send_datagram
  35.     extn    netbios_send_broadcast,netbios_delete_name
  36.  
  37.  
  38. ;;    help
  39. ;
  40. ;    entry    DS    DGROUP
  41. ;
  42. help    proc
  43.     lea    si,help_text
  44.     call    puts
  45.     jmp    exit_program
  46. help    endp
  47.  
  48.  
  49. ;;    main
  50. ;
  51. main    proc
  52.     cmp    argc[bp],2
  53.     jb    help            ;  if no arguments
  54.  
  55.     call    netbios_check
  56.     jc    mai5            ;  if no netbios driver
  57.  
  58.     lea    si,add_name_text    ; *Send Datagram*
  59.     call    netbios_add_name
  60.     jc    mai6            ;  if add name failed
  61.     mov    add_name[bp],al
  62.  
  63.     call    read_command_line    ; find <text> in command line
  64.     call    strskp_white
  65. mai1:    lodsb                ;  skip <target>
  66.     cmp    al,' '
  67.     ja    mai1
  68.  
  69.     dec    si            ;  skip space between <target>&<text>
  70.     call    strskp_white
  71.  
  72.     mov    di,si            ;  ES:DI points to <text>
  73.     mov    ax,ds
  74.     mov    es,ax
  75.  
  76.     mov    cx,-1            ; compute length of <text>
  77. mai2:    inc    cx
  78.     lodsb
  79.     cmp    al,' '            ;  (any control char is delimiter)
  80.     jae    mai2            ;  if delimiter
  81.  
  82.     mov    al,add_name[bp]
  83.  
  84.     lds    si,argv[bp]
  85.     mov    si,[si+2]
  86.     cmp    word ptr [si],'*'
  87.     je    mai3            ;  if broadcast datagram
  88.  
  89.     call    netbios_send_datagram    ;  else send normal datagram
  90.     lea    si,datagram_text
  91.     jmp    mai4
  92.  
  93. mai3:    call    netbios_send_broadcast
  94.     lea    si,broadcast_text
  95.  
  96. mai4:    mov    ax,@data
  97.     mov    ds,ax
  98.     call    puts
  99.     lea    si,add_name_text
  100.     call    netbios_delete_name
  101.     jmp    exit_program
  102.  
  103. mai5:    lea    si,driver_ertx        ; *No NetBIOS driver found*
  104.     call    puts
  105.     jmp    exit_program
  106.  
  107. mai6:    lea    si,add_name_ertx    ; *Add Name failed*
  108.     call    puts
  109.     jmp    exit_program
  110. main    endp
  111.  
  112.     end
  113.