home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / pcmag / vol8n06.arc / NETSEND.ASM < prev    next >
Assembly Source File  |  1988-11-04  |  3KB  |  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. ;
  15.     ASSUME CS:MAIN_CODE,DS:MAIN_DATA
  16.  
  17. COMMAND_LINE    EQU 80H         ;LOCATION OF THE COMMAND LINE IN PSP
  18. ;
  19. ;    NCB DEFINITION
  20. ;
  21. NCBDEF    STRUC                ;PRE FILLED WITH ALL ZEROES
  22. NCB_COMMAND    DB 0
  23. NCB_RETCODE    DB 0
  24. NCB_LSN     DB 0
  25. NCB_NUM     DB 0
  26. NCB_BUFFER    DD 0            ;POINTER TO MESSAGE BUFFER
  27. NCB_LENGTH    DW 0            ;NUMBER OF BYTES IN BUFFER
  28. NCB_CALLNAME    DB 16 DUP (0)
  29. NCB_NAME    DB 16 DUP (0)
  30. NCB_RTO     DB 0
  31. NCB_STO     DB 0
  32. NCB_POST    DD 0            ;POINTER TO POST ADDRESS
  33. NCB_LANA_NUM    DB 0
  34. NCB_CMD_CPLT    DB 0
  35. NCB_RESERVED    DB 14 DUP (0)        ;RESERVED
  36. NCBDEF    ENDS
  37.  
  38. ;
  39. ;    NCB COMMANDS
  40. ;
  41. NCB_SEND_DATAGRAM    EQU 20H
  42.  
  43. MAIN_DATA    SEGMENT PUBLIC 'DATA'
  44.  
  45. ERROR        DB 7,'NETBIOS ERROR: '
  46. SIZE_ERROR    EQU $-ERROR
  47. CHAR        DB 0
  48.  
  49. SNCB        NCBDEF <>            ;DEFINE NCB
  50.  
  51.     ORG SNCB.NCB_CALLNAME        ;NAME TO CALL
  52.     DB 'NETSEND_GROUP',0,0,10    ;10 AT THE END TO NOT NAME CONFLICT
  53.     ORG SNCB+SIZE NCBDEF        ;WITH NETWORK OPERATING SYSTEMS
  54.  
  55. MAIN_DATA    ENDS
  56.  
  57. MAIN_CODE    SEGMENT PUBLIC 'CODE'
  58.  
  59. BEGIN:    MOV AX,SEG MAIN_DATA        ;POINT TO MAIN_DATA
  60.     MOV DS,AX            ;AND PLACE IN DS
  61.     MOV DI,COMMAND_LINE        ;POINT TO THE COMMAND LINE
  62.     MOV CL,ES:[DI]            ;AND GET THE COMMAND LINE LENGTH
  63.     TEST CL,CL            ;MUST BE NON ZERO
  64.     JZ QUIT             ;QUIT IF ZERO
  65.     XOR CH,CH            ;ZERO AH
  66. GETNXT: INC DI                ;POINT TO COMMAND LINE TEXT
  67.     MOV AL,ES:[DI]            ;GET A CHARACTER
  68.     CMP AL,' '            ;IS IT A SPACE?
  69.     LOOPZ GETNXT            ;YES THEN LOOP UNTIL NOT A SPACE
  70.     INC CX                ;ADJUST COUNT UP BY ONE
  71.     MOV SNCB.NCB_LENGTH,CX        ;LENGTH OF MESSAGE TO SEND
  72.     MOV WORD PTR SNCB.NCB_BUFFER,DI ;POINT TO THE COMMAND LINE
  73.     MOV WORD PTR SNCB.NCB_BUFFER+2,ES
  74.     MOV SNCB.NCB_NUM,1        ;USE OUR PERMANENT NAME #1
  75.     MOV AX,SEG SNCB         ;WHICH IS THE ADAPTER NUMBER
  76.     MOV ES,AX
  77.     MOV BX,OFFSET SNCB        ;ES:BX IS NCB ADDRESS FOR NETBIOS
  78.     MOV SNCB.NCB_COMMAND,NCB_SEND_DATAGRAM
  79.     INT 5CH             ;PERFORM THE NETBIOS SEND
  80.     TEST AL,AL            ;ANY PROBLEMS?
  81.     JZ EXITOK            ;NOPE
  82.     MOV CX,SIZE_ERROR
  83.     MOV DX,OFFSET ERROR
  84.     CALL OUT_ERR            ;OUTPUT TO ERROR DEVICE
  85.     MOV AL,SNCB.NCB_CMD_CPLT    ;GET THE NETBIOS COMPLETION CODE
  86.     CALL HEX2            ;DISPLAY AL AS 2 HEX DIGITS
  87. QUIT:    MOV AL,SNCB.NCB_CMD_CPLT    ;IF ERROR, RETURN CODE=NETBIOS ERROR
  88. EXITOK: MOV AH,4CH            ;TO ALLOW ERROR TESTS IN BATCH FILE
  89.     INT 21H             ;TOODLES
  90.  
  91. HEX2:    MOV BL,AL
  92.     MOV CL,4
  93.     ROL BL,CL            ;ROTATE TO GET THE TOP DIGIT
  94.     CALL HEXDIG            ;DISPLAY THE FIRST DIGIT
  95.     MOV CL,4
  96.     ROL BL,CL            ;THEN FALL INTO HEXDIG FOR LAST ONE
  97. HEXDIG: MOV AL,BL            ;HEX CHARACTER IN BL
  98.     AND AL,0FH            ;MASK OFF THE BOTTOM NIBBLE
  99.     ADD AL,'0'            ;ADD ASCII DIGIT OFFSET
  100.     CMP AL,'9'            ;ABOVE 9?
  101.     JLE PRINT_CHAR
  102.     ADD AL,'A'-'9'-1        ;THEN ADD THE RIGHT AMOUNT TO GET A-F
  103. PRINT_CHAR:
  104.     MOV CHAR,AL
  105.     MOV DX,OFFSET CHAR        ;PLACE THE CHARACTER IN MEMORY
  106.     MOV CX,1            ;WRITE ONE CHARACTER
  107.     CALL OUT_ERR            ;TO THE ERROR DEVICE
  108.     RET
  109.  
  110. OUT_ERR: PUSH BX        ;PRESERVE BX
  111.     MOV BX,2        ;STANDARD ERROR HANDLE
  112.     MOV AH,40H        ;WRITE TO FILE
  113.     INT 21H
  114.     POP BX
  115.     RET
  116.  
  117. MAIN_CODE    ENDS
  118.  
  119.     END BEGIN
  120.  
  121.