home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / lan / netmsg / netsnd.asm < prev    next >
Assembly Source File  |  1989-03-05  |  4KB  |  145 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. NOMSG        DB 7,10,13,'NETBIOS INTERFACE NOT PRESENT',10,13,'$'
  50.  
  51. SNCB        NCBDEF <>            ;DEFINE NCB
  52.  
  53.     ORG SNCB.NCB_CALLNAME        ;NAME TO CALL
  54.     DB 'NETSEND_GROUP',0,0,10    ;10 AT THE END TO NOT NAME CONFLICT
  55.     ORG SNCB+SIZE NCBDEF        ;WITH NETWORK OPERATING SYSTEMS
  56.  
  57. MAIN_DATA    ENDS
  58.  
  59. MAIN_CODE    SEGMENT PUBLIC 'CODE'
  60.  
  61. BEGIN:    
  62.     PUSH    ES            ;save ES
  63.            MOV     AH,35H                  ;get interrupt 5C vector
  64.     MOV     AL,5CH
  65.     INT     21H
  66.     MOV    AX,ES
  67.     POP    ES            ;get back ES
  68.     CMP    AX,0            ;is segment 0
  69.     JNE    ADAPTER_STAT        ;not 0 an interface is present
  70.     JMP    NO_ADAPTER        ;
  71.  
  72. ADAPTER_STAT:
  73.  
  74.     MOV AX,SEG MAIN_DATA        ;POINT TO MAIN_DATA
  75.     MOV DS,AX            ;AND PLACE IN DS
  76.     MOV DI,COMMAND_LINE        ;POINT TO THE COMMAND LINE
  77.     MOV CL,ES:[DI]            ;AND GET THE COMMAND LINE LENGTH
  78.     TEST CL,CL            ;MUST BE NON ZERO
  79.     JZ QUIT             ;QUIT IF ZERO
  80.     XOR CH,CH            ;ZERO AH
  81. GETNXT: INC DI                ;POINT TO COMMAND LINE TEXT
  82.     MOV AL,ES:[DI]            ;GET A CHARACTER
  83.     CMP AL,' '            ;IS IT A SPACE?
  84.     LOOPZ GETNXT            ;YES THEN LOOP UNTIL NOT A SPACE
  85.     INC CX                ;ADJUST COUNT UP BY ONE
  86.     MOV SNCB.NCB_LENGTH,CX        ;LENGTH OF MESSAGE TO SEND
  87.     MOV WORD PTR SNCB.NCB_BUFFER,DI ;POINT TO THE COMMAND LINE
  88.     MOV WORD PTR SNCB.NCB_BUFFER+2,ES
  89.     MOV SNCB.NCB_NUM,1        ;USE OUR PERMANENT NAME #1
  90.     MOV AX,SEG SNCB         ;WHICH IS THE ADAPTER NUMBER
  91.     MOV ES,AX
  92.     MOV BX,OFFSET SNCB        ;ES:BX IS NCB ADDRESS FOR NETBIOS
  93.     MOV SNCB.NCB_COMMAND,NCB_SEND_DATAGRAM
  94.     INT 5CH             ;PERFORM THE NETBIOS SEND
  95.     TEST AL,AL            ;ANY PROBLEMS?
  96.     JZ EXITOK            ;NOPE
  97.     MOV CX,SIZE_ERROR
  98.     MOV DX,OFFSET ERROR
  99.     CALL OUT_ERR            ;OUTPUT TO ERROR DEVICE
  100.     MOV AL,SNCB.NCB_CMD_CPLT    ;GET THE NETBIOS COMPLETION CODE
  101.     CALL HEX2            ;DISPLAY AL AS 2 HEX DIGITS
  102. QUIT:    MOV AL,SNCB.NCB_CMD_CPLT    ;IF ERROR, RETURN CODE=NETBIOS ERROR
  103. EXITOK: MOV AH,4CH            ;TO ALLOW ERROR TESTS IN BATCH FILE
  104.     INT 21H             ;TOODLES
  105.  
  106. NO_ADAPTER:
  107.     MOV AX, MAIN_DATA
  108.     MOV DS, AX
  109.     MOV DX, OFFSET NOMSG        ;POINT TO ERROR TEXT TO SAY
  110.     MOV AH,09
  111.     INT 21H                ;DISPLAY
  112.     MOV AH,4CH
  113.     MOV AL,0FFH            ;ERROR = -1
  114.     INT 21H             ;SO A BATCH FILE CAN TEST FOR PROBS
  115.  
  116. HEX2:    MOV BL,AL
  117.     MOV CL,4
  118.     ROL BL,CL            ;ROTATE TO GET THE TOP DIGIT
  119.     CALL HEXDIG            ;DISPLAY THE FIRST DIGIT
  120.     MOV CL,4
  121.     ROL BL,CL            ;THEN FALL INTO HEXDIG FOR LAST ONE
  122. HEXDIG: MOV AL,BL            ;HEX CHARACTER IN BL
  123.     AND AL,0FH            ;MASK OFF THE BOTTOM NIBBLE
  124.     ADD AL,'0'            ;ADD ASCII DIGIT OFFSET
  125.     CMP AL,'9'            ;ABOVE 9?
  126.     JLE PRINT_CHAR
  127.     ADD AL,'A'-'9'-1        ;THEN ADD THE RIGHT AMOUNT TO GET A-F
  128. PRINT_CHAR:
  129.     MOV CHAR,AL
  130.     MOV DX,OFFSET CHAR        ;PLACE THE CHARACTER IN MEMORY
  131.     MOV CX,1            ;WRITE ONE CHARACTER
  132.     CALL OUT_ERR            ;TO THE ERROR DEVICE
  133.     RET
  134.  
  135. OUT_ERR: PUSH BX        ;PRESERVE BX
  136.     MOV BX,2        ;STANDARD ERROR HANDLE
  137.     MOV AH,40H        ;WRITE TO FILE
  138.     INT 21H
  139.     POP BX
  140.     RET
  141.  
  142. MAIN_CODE    ENDS
  143.  
  144.     END BEGIN
  145.