home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / lan / netsend / netsend.asm < prev    next >
Assembly Source File  |  1988-10-19  |  4KB  |  121 lines

  1.     Title NETSND - Sends Messages to NETRCV using NETBIOS
  2.  
  3. ;    Usage:
  4. ;
  5. ;    NETSEND FRED Meeting at 8:00, BE THERE!
  6. ;    NETSEND ADMIN* Administrative conference has been canceled
  7. ;    NETSEND * The server is going down in 5 minutes!
  8. ;
  9. ;    You may send to a specific workstation, a group of workstations
  10. ;    or everyone on the LAN as in the three examples above.
  11. ;
  12. ;
  13. ;    Author: Jack Schoof, President, ARTISOFT, Inc. Tucson, AZ
  14. ;    This program is being published in a future issue of PC Magazine
  15. ;
  16.     ASSUME CS:MAIN_CODE,DS:MAIN_DATA
  17.  
  18. COMMAND_LINE    EQU 80H            ;LOCATION OF THE COMMAND LINE IN PSP
  19. ;
  20. ;    NCB DEFINITION
  21. ;
  22. NCBDEF    STRUC                ;PRE FILLED WITH ALL ZEROES
  23. NCB_COMMAND    DB 0
  24. NCB_RETCODE    DB 0
  25. NCB_LSN        DB 0
  26. NCB_NUM        DB 0
  27. NCB_BUFFER    DD 0             ;POINTER TO MESSAGE BUFFER
  28. NCB_LENGTH    DW 0             ;NUMBER OF BYTES IN BUFFER
  29. NCB_CALLNAME    DB 16 DUP (0)
  30. NCB_NAME    DB 16 DUP (0)
  31. NCB_RTO        DB 0
  32. NCB_STO        DB 0
  33. NCB_POST    DD 0            ;POINTER TO POST ADDRESS
  34. NCB_LANA_NUM    DB 0
  35. NCB_CMD_CPLT    DB 0
  36. NCB_RESERVED    DB 14 DUP (0)        ;RESERVED
  37. NCBDEF    ENDS
  38.  
  39. ;
  40. ;    NCB COMMANDS
  41. ;
  42. NCB_SEND_DATAGRAM    EQU 20H
  43.  
  44. MAIN_DATA    SEGMENT PUBLIC 'DATA'
  45.  
  46. ERROR        DB 7,'NETBIOS ERROR: '
  47. SIZE_ERROR    EQU $-ERROR
  48. CHAR        DB 0
  49.  
  50. SNCB        NCBDEF <>            ;DEFINE NCB
  51.  
  52.     ORG SNCB.NCB_CALLNAME        ;NAME TO CALL
  53.     DB 'NETSEND_GROUP',0,0,10    ;10 AT THE END TO NOT NAME CONFLICT
  54.     ORG SNCB+SIZE NCBDEF        ;WITH NETWORK OPERATING SYSTEMS
  55.  
  56. MAIN_DATA    ENDS
  57.  
  58. MAIN_CODE    SEGMENT PUBLIC 'CODE'
  59.  
  60. BEGIN:    MOV AX,SEG MAIN_DATA        ;POINT TO MAIN_DATA
  61.     MOV DS,AX            ;AND PLACE IN DS
  62.     MOV DI,COMMAND_LINE        ;POINT TO THE COMMAND LINE
  63.     MOV CL,ES:[DI]            ;AND GET THE COMMAND LINE LENGTH
  64.     TEST CL,CL            ;MUST BE NON ZERO
  65.     JZ QUIT                ;QUIT IF ZERO
  66.     XOR CH,CH            ;ZERO AH
  67. GETNXT:    INC DI                ;POINT TO COMMAND LINE TEXT
  68.     MOV AL,ES:[DI]            ;GET A CHARACTER
  69.     CMP AL,' '            ;IS IT A SPACE?
  70.     LOOPZ GETNXT            ;YES THEN LOOP UNTIL NOT A SPACE
  71.     INC CX                ;ADJUST COUNT UP BY ONE
  72.     MOV SNCB.NCB_LENGTH,CX        ;LENGTH OF MESSAGE TO SEND
  73.     MOV WORD PTR SNCB.NCB_BUFFER,DI ;POINT TO THE COMMAND LINE
  74.     MOV WORD PTR SNCB.NCB_BUFFER+2,ES
  75.     MOV SNCB.NCB_NUM,1        ;USE OUR PERMANENT NAME #1
  76.     MOV AX,SEG SNCB            ;WHICH IS THE ADAPTER NUMBER
  77.     MOV ES,AX
  78.     MOV BX,OFFSET SNCB        ;ES:BX IS NCB ADDRESS FOR NETBIOS
  79.     MOV SNCB.NCB_COMMAND,NCB_SEND_DATAGRAM
  80.     INT 5CH                ;PERFORM THE NETBIOS SEND
  81.     TEST AL,AL            ;ANY PROBLEMS?
  82.     JZ EXITOK            ;NOPE
  83.     MOV CX,SIZE_ERROR
  84.     MOV DX,OFFSET ERROR
  85.     CALL OUT_ERR            ;OUTPUT TO ERROR DEVICE
  86.     MOV AL,SNCB.NCB_CMD_CPLT    ;GET THE NETBIOS COMPLETION CODE
  87.     CALL HEX2            ;DISPLAY AL AS 2 HEX DIGITS
  88. QUIT:    MOV AL,SNCB.NCB_CMD_CPLT    ;IF ERROR, RETURN CODE=NETBIOS ERROR
  89. EXITOK: MOV AH,4CH            ;TO ALLOW ERROR TESTS IN BATCH FILE
  90.     INT 21H                ;TOODLES
  91.  
  92. HEX2:    MOV BL,AL
  93.     MOV CL,4
  94.     ROL BL,CL            ;ROTATE TO GET THE TOP DIGIT
  95.     CALL HEXDIG            ;DISPLAY THE FIRST DIGIT
  96.     MOV CL,4
  97.     ROL BL,CL            ;THEN FALL INTO HEXDIG FOR LAST ONE
  98. HEXDIG:    MOV AL,BL                       ;HEX CHARACTER IN BL
  99.         AND AL,0FH            ;MASK OFF THE BOTTOM NIBBLE
  100.         ADD AL,'0'            ;ADD ASCII DIGIT OFFSET
  101.         CMP AL,'9'            ;ABOVE 9?
  102.         JLE PRINT_CHAR
  103.         ADD AL,'A'-'9'-1        ;THEN ADD THE RIGHT AMOUNT TO GET A-F
  104. PRINT_CHAR:
  105.         MOV CHAR,AL
  106.     MOV DX,OFFSET CHAR        ;PLACE THE CHARACTER IN MEMORY
  107.     MOV CX,1            ;WRITE ONE CHARACTER
  108.     CALL OUT_ERR            ;TO THE ERROR DEVICE
  109.         RET
  110.  
  111. OUT_ERR: PUSH BX        ;PRESERVE BX
  112.     MOV BX,2        ;STANDARD ERROR HANDLE
  113.     MOV AH,40H        ;WRITE TO FILE
  114.     INT 21H
  115.     POP BX
  116.     RET
  117.  
  118. MAIN_CODE    ENDS
  119.  
  120.     END BEGIN
  121.