home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / lan / lantrans / export.asm next >
Assembly Source File  |  1988-08-31  |  5KB  |  207 lines

  1.  
  2.     TITLE - EXPORT transmits files via NETBIOS to IMPORT
  3.  
  4.     ASSUME CS:MAIN_CODE, DS:MAIN_DATA
  5.  
  6. ;
  7. ;    Typical usage:
  8. ;
  9. ;    EXPORT NETNAME <FILENAME
  10. ;
  11. ;    Sends standard input across network from name EXPORT_NETNAME<10>
  12. ;    to name IMPORT_NETNAME<10>.
  13. ;
  14. ;    Network traffic is overlapped with Disk I/O to demonstrate the
  15. ;    use of the No-Wait function of NETBIOS without needing an interrupt
  16. ;    handler (POST=0).  This program takes best advantage of
  17. ;    intelligent adapters with network coprocessors.
  18. ;
  19. ;    Author: Jack Schoof, President, ARTISOFT, Inc.
  20. ;
  21. ;    (C) 1988 ARTISOFT, Inc.  Tucson, AZ
  22. ;    This program may be distributed free without modification
  23. ;
  24. ;
  25. ;    NCB DEFINITION
  26. ;
  27. NCBDEF    STRUC
  28. NCB_COMMAND    DB 0
  29. NCB_RETCODE    DB 0
  30. NCB_LSN        DB 0
  31. NCB_NUM        DB 0
  32. NCB_BUFFER    DD 0             ;POINTER TO MESSAGE BUFFER
  33. NCB_LENGTH    DW 0             ;NUMBER OF BYTES IN BUFFER
  34. NCB_CALLNAME    DB 16 DUP (0)
  35. NCB_NAME    DB 16 DUP (0)
  36. NCB_RTO        DB 0
  37. NCB_STO        DB 0
  38. NCB_POST    DD 0            ;POINTER TO POST ADDRESS
  39. NCB_LANA_NUM    DB 0
  40. NCB_CMD_CPLT    DB 0
  41. NCB_RESERVED    DB 14 DUP (0)        ;RESERVED
  42. NCBDEF    ENDS
  43.  
  44. ;
  45. ;    NCB COMMANDS
  46. ;
  47. NO_WAIT            EQU 80H
  48. NCB_ADD_NAME        EQU 30H
  49. NCB_CALL        EQU 10H
  50. NW_DELETE_NAME        EQU 31H+NO_WAIT
  51. NW_HANG_UP        EQU 12H+NO_WAIT
  52. NW_SEND            EQU 14H+NO_WAIT
  53.  
  54.  
  55. MAIN_DATA SEGMENT PUBLIC 'DATA'
  56.  
  57. CNCB    NCBDEF <>
  58.  
  59.     ORG CNCB.NCB_NAME
  60.     DB 'EXPORT_'        ;OUR NAME IS EXPORT_NETNAME
  61.     ORG CNCB.NCB_NAME+15
  62.     DB 10            ;10 TO NOT CONFLICT WITH NETWORK OPERATING
  63.     ORG CNCB.NCB_CALLNAME    ;SYSTEMS LIKE IBM PC LAN OR LANTASTIC NOS
  64.     DB 'IMPORT_'          ;RECEIVER'S NAME IS IMPORT_NETNAME
  65.     ORG CNCB.NCB_CALLNAME+15
  66.     DB 10            ;A 10 ON THE END TOO
  67.     ORG CNCB+SIZE NCBDEF
  68.  
  69. FLENGTH    DW 0            ;KEEPS THE LENGTH OF THE RECEIVED PACKET
  70.  
  71. BUFFER_ONE    DB 4000H DUP (?) ;DISK BLOCK BUFFERS
  72. BUFFER_TWO    DB 4000H DUP (?) ;16K EACH
  73.  
  74. MAIN_DATA ENDS
  75.  
  76. MAIN_CODE SEGMENT PUBLIC 'CODE'
  77.  
  78. BEGIN:    PUSH ES
  79.     POP DS                ;PUT PSP SEGMENT IN DS
  80.     MOV AX,SEG MAIN_DATA
  81.     MOV ES,AX            ;OUR DATA SEGMENT IN ES
  82.  
  83.     MOV SI,5DH            ;GET THE NAME POINTER
  84.     MOV DI,OFFSET CNCB.NCB_NAME+7
  85.     MOV CX,8
  86.     REP MOVSB            ;MAKE EXPORT_NETNAME<10>
  87.  
  88.     MOV SI,5DH
  89.     MOV DI,OFFSET CNCB.NCB_CALLNAME+7
  90.     MOV CX,8
  91.     REP MOVSB            ;MAKE IMPORT_NETNAME<10>
  92.  
  93.     MOV DS,AX
  94.     MOV WORD PTR CNCB.NCB_BUFFER+2,AX ;SET UP THE BUFFER SEGMENT FOR LATER
  95.  
  96.     MOV CNCB.NCB_COMMAND,NCB_ADD_NAME
  97.     CALL NETBIOS
  98.     JNZ BAD_EXIT            ;ADD OUR NAME TO THE ADAPTER
  99.  
  100. CALLUM:    MOV CNCB.NCB_COMMAND,NCB_CALL    ;CALL THE IMPORTER
  101.     CALL NETBIOS
  102.     JNZ DELETE_NAME            ;NO ONE HOME? QUIT
  103.  
  104. ;
  105. ;    HERE IS WHERE WE SEND THE FILE
  106. ;
  107. MAIN_LOOP:
  108.     MOV DX,OFFSET BUFFER_ONE
  109.     CALL READ_BUFFER
  110.     JC HANG_UP            ;PROBLEMS ON READ, HANG UP
  111.  
  112.     CALL SEND_BUFFER        ;SEND THE BUFFER WITH NO WAIT
  113.     JNZ HANG_UP            ;PROBLEMS? THEN QUIT
  114.  
  115.     CMP FLENGTH,0            ;ARE WE DONE?
  116.     JZ CLOSE_FILE            ;YES
  117.  
  118.     MOV DX,OFFSET BUFFER_TWO
  119.     CALL READ_BUFFER        ;GET THE NEXT ONE OFF THE DISK
  120.     
  121.     CALL WAIT_MYSELF        ;WAIT FOR THE PREVIOUS NCB
  122.     JNZ HANG_UP
  123.  
  124.     CALL SEND_BUFFER
  125.     JNZ HANG_UP            ;PROBLEMS?
  126.  
  127.     CALL WAIT_MYSELF        ;NOW WAIT FOR THE NCB
  128.     JNZ HANG_UP
  129.  
  130.     CMP FLENGTH,0            ;ARE WE DONE?
  131.     JZ CLOSE_FILE            ;YES
  132.  
  133.     JMP MAIN_LOOP            ;CONTINUE
  134.  
  135. CLOSE_FILE:
  136.     MOV AH,3EH
  137.     XOR BX,BX
  138.     INT 21H                ;CLOSE THE INPUT FILE
  139.  
  140. HANG_UP:
  141.     MOV CNCB.NCB_COMMAND,NW_HANG_UP
  142.     CALL NETBIOS            ;HANG UP NOW
  143.     JNZ DELETE_NAME
  144.  
  145.     CALL WAIT_MYSELF
  146.     JNZ DELETE_NAME
  147.  
  148. DELETE_NAME:
  149.     MOV CNCB.NCB_COMMAND,NW_DELETE_NAME
  150.     CALL NETBIOS            ;GET RID OF OUR NAME
  151.     JNZ BAD_EXIT
  152.  
  153.     CALL WAIT_MYSELF
  154.     JNZ BAD_EXIT
  155.  
  156.     MOV AX,4C00H            ;NO ERROR RETURN CODE
  157.     INT 21H                ;AND EXIT
  158.  
  159. BAD_EXIT:
  160.     MOV AX,4C01H            ;SET AN ERROR RETURN CODE
  161.     INT 21H                ;AND EXIT
  162.  
  163. WAIT_MYSELF:
  164.     MOV AL,CNCB.NCB_CMD_CPLT    ;WAIT FOR THE COMMAND
  165.     CMP AL,0FFH            ;TO HAVE DONE SOMETHING
  166.     JZ TEST_CHAR            ;WAIT FOR A CHARACTER
  167.     XOR AL,AL
  168.     RET                ;Z FLAG IS ON
  169. TEST_CHAR:
  170.     MOV AH,1
  171.     INT 16H                ;IS A CHARACTER AVAILABLE?
  172.     JZ WAIT_MYSELF
  173.     XOR AH,AH
  174.     INT 16H
  175.     OR AL,0FFH            ;NZ FLAG IS ON
  176.     RET
  177.  
  178. READ_BUFFER PROC
  179.     MOV AH,3FH
  180.     XOR BX,BX
  181.     MOV CX,SIZE BUFFER_ONE
  182.     INT 21H                ;READ IN THE BUFFER POINTED TO BY DX
  183.     MOV FLENGTH,AX            ;SAVE THE ACTUAL LENGTH
  184.     RET
  185. READ_BUFFER ENDP
  186.  
  187. SEND_BUFFER PROC
  188.     MOV WORD PTR CNCB.NCB_BUFFER,DX    ;WHAT TO SEND
  189.     MOV AX,FLENGTH
  190.     MOV CNCB.NCB_LENGTH,AX        ;LENGTH TO SEND
  191.     MOV CNCB.NCB_COMMAND,NW_SEND
  192. NETBIOS    PROC
  193.     MOV BX,OFFSET CNCB        ;ES:BX POINTS TO NCB
  194.     INT 5CH                ;CALL THE ADAPTER
  195.     TEST AL,AL            ;CHECK FOR PROBLEMS
  196.     RET                ;AND RETURN WITH FLAGS SET
  197. NETBIOS ENDP
  198. SEND_BUFFER ENDP
  199.  
  200. MAIN_CODE ENDS
  201.  
  202. MAIN_STACK    SEGMENT STACK
  203.     DW 100H DUP (?)            ;DEFAULT STACK
  204. MAIN_STACK    ENDS
  205.  
  206.     END BEGIN
  207.