home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / PARADIS1 / NOVROUT2.PAS < prev    next >
Pascal/Delphi Source File  |  1992-03-29  |  7KB  |  234 lines

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