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

  1. (5889)  Wed 25 Mar 92  6:50
  2. By: Mark Farnan
  3. To: Jan-Erik Rosinowski
  4. Re: NOVELL utilities - Packet Code 1/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. This  Should be easily modified to incorperate in a program, and send data
  15. packets around.  I will be writing some of my own soon, so a User can Logon to
  16. my BBS accross the network instead of using a Modem.
  17.  
  18. Please Excuse the ASM guys, but that is all the info I have on this subject.
  19. Hope this Information is Usefull.  I have not tried it though.
  20.  
  21. Importing a Data packet from the Network
  22. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  23.  
  24.         TITLE - IMPORT, NETBIOS file transfer program
  25.         ASSUME CS:MAIN_CODE, DS:MAIN_DATA
  26. ;
  27. ;       Typical usage:
  28. ;
  29. ;       IMPORT NETNAME >FILENAME
  30. ;
  31. ;       Receives file from network using NETBIOS name IMPORT_NETNAME<10>
  32. ;       and writes it to standard output
  33. ;
  34. ;       Network traffic is overlapped with Disk I/O to demonstrate the
  35. ;       use of the No-Wait function of NETBIOS without needing an interrupt
  36. ;       handler (POST=0).  This program takes best advantage of
  37. ;       intelligent adapters with network coprocessors.
  38. ;
  39. ;       Author: Jack Schoof, President, ARTISOFT, Inc.
  40. ;
  41. ;       (C) 1988 ARTISOFT, Inc.  Tucson, AZ
  42. ;       This program may be distributed free without modification
  43. ;
  44. ;
  45. ;       NCB DEFINITION
  46. ;
  47. NCBDEF  STRUC                           ;PRE FILLED WITH ALL ZEROES
  48. NCB_COMMAND     DB 0
  49. NCB_RETCODE     DB 0
  50. NCB_LSN         DB 0
  51. NCB_NUM         DB 0
  52. NCB_BUFFER      DD 0                    ;POINTER TO MESSAGE BUFFER
  53. NCB_LENGTH      DW 0                    ;NUMBER OF BYTES IN BUFFER
  54. NCB_CALLNAME    DB 16 DUP (0)
  55. NCB_NAME        DB 16 DUP (0)
  56. NCB_RTO         DB 0
  57. NCB_STO         DB 0
  58. NCB_POST        DD 0                    ;POINTER TO POST ADDRESS
  59. NCB_LANA_NUM    DB 0
  60. NCB_CMD_CPLT    DB 0
  61. NCB_RESERVED    DB 14 DUP (0)           ;RESERVED
  62. NCBDEF  ENDS
  63.  
  64. ;
  65. ;       NCB COMMANDS
  66. ;
  67. NO_WAIT                 EQU 80H
  68. NCB_ADD_NAME            EQU 30H
  69. NW_DELETE_NAME          EQU 31H+NO_WAIT
  70. NW_LISTEN               EQU 11H+NO_WAIT
  71. NW_HANG_UP              EQU 12H+NO_WAIT
  72. NW_RECEIVE              EQU 15H+NO_WAIT
  73.  
  74. MAIN_DATA SEGMENT PUBLIC 'DATA'
  75.  
  76. LNCB    NCBDEF <>                       ;DEFINE NCB
  77.  
  78.         ORG LNCB.NCB_NAME
  79.         DB 'IMPORT_'                    ;PREFIX TO NAME TYPED BY USER
  80.         ORG LNCB.NCB_NAME+15
  81.         DB 10                           ;SUFFIX ON NAME TO NOT COLLIDE WITH
  82.         ORG LNCB.NCB_CALLNAME           ;IBM PC LAN, LANTASTIC NOS AND OTHERS
  83.         DB '*'                          ;* IN CALLNAME TO LISTEN FOR ANYONE
  84.         ORG LNCB+SIZE NCBDEF
  85.  
  86. BUFFER_ONE      DB 4000H DUP (?)        ;uses two buffers
  87. BUFFER_TWO      DB 4000H DUP (?)        ;of 16K each
  88.  
  89. MAIN_DATA ENDS
  90.  
  91. MAIN_CODE SEGMENT PUBLIC 'CODE'
  92.  
  93. NOTICE  DB '(C) 1988 ARTISOFT, INC.',0
  94.  
  95. BEGIN:  PUSH ES
  96.         POP DS                          ;PUT ADDRESS OF PSP IN DS
  97.         MOV AX,SEG MAIN_DATA
  98.         MOV ES,AX                       ;ES IS OUR DATA SEGMENT
  99.  
  100.         MOV SI,5DH                      ;GET THE FCB1 POINTER IN PSP
  101.         MOV DI,OFFSET LNCB.NCB_NAME+7   ;POINT TO NCB_NAME IN NCB
  102.         MOV CX,8                        ;TRANSFER 8 CHARACTERS TO NCB NAME
  103.         REP MOVSB                       ;DONE
  104.  
  105.         MOV DS,AX
  106.         MOV WORD PTR LNCB.NCB_BUFFER+2,AX ;SET UP THE BUFFER SEGMENT AS OUR
  107.                                           ;DATA SEGMENT
  108.  
  109.         MOV LNCB.NCB_COMMAND,NCB_ADD_NAME
  110.         CALL NETBIOS                    ;HERE WE ADD THE NAME
  111.         JNZ BAD_EXIT                    ;PROBLEM, QUIT
  112.  
  113. LISTEN: MOV LNCB.NCB_COMMAND,NW_LISTEN  ;LISTEN FOR SOMEONE TO CALL US
  114.         CALL NETBIOS
  115.         JNZ DELETE_NAME                 ;PROBLEM, SO DELETE THE NAME AND LEAVE
  116.  
  117.         CALL WAIT_MYSELF                ;WAIT FOR THE CALL OR ANY CHARACTER
  118.         JNZ DELETE_NAME                 ;TYPED BY THE USER TO QUIT
  119.  
  120.         MOV DX,OFFSET BUFFER_ONE
  121.         CALL RECEIVE_BUFFER             ;RECEIVE THE FIRST BUFFER
  122.         JNZ HANG_UP                     ;PROBLEMS? THEN HANG UP THE SESSION
  123. ;
  124. ;       HERE IS WHERE WE WILL LOOP FOR THE REST OF THE FILE
  125. ;
  126. MAIN_LOOP:
  127.         CALL WAIT_MYSELF                ;WAIT FOR THE BUFFER TO SHOW UP
  128.         JNZ HANG_UP
  129.  
  130.         MOV CX,LNCB.NCB_LENGTH          ;DID WE RECEIVE ZERO LENGTH?
  131.         JCXZ CLOSE_FILE                 ;THIS IS A SIGNAL TO CLOSE THE FILE
  132.  
  133.         MOV DX,OFFSET BUFFER_TWO
  134.         CALL RECEIVE_BUFFER             ;RECEIVE BUFFER_TWO
  135.         JNZ HANG_UP                     ;IMMEDIATE PROBLEMS?
  136.  
  137.         MOV DX,OFFSET BUFFER_ONE        ;POINT TO THIS BUFFER FOR DOS
  138.         CALL WRITE_BUFFER               ;WRITE IT OUT, LENGTH IS STILL IN CX
  139.  
  140.         CALL WAIT_MYSELF                ;NOW WAIT FOR THE SECOND BUFFER WHICH
  141.         JNZ HANG_UP                     ;MIGHT HAVE ARRIVED ALREADY
  142.  
  143.         MOV CX,LNCB.NCB_LENGTH          ;DOES THIS BUFFER HAVE THE END OF FILE?
  144.         JCXZ CLOSE_FILE                 ;YEP, CLOSE THE FILE AND QUIT
  145.  
  146.         MOV DX,OFFSET BUFFER_ONE
  147.         CALL RECEIVE_BUFFER             ;RECEIVE BUFFER ONE AGAIN
  148.         JNZ HANG_UP
  149.  
  150.         MOV DX,OFFSET BUFFER_TWO        ;WHILE WRITING BUFFER TWO TO DISK
  151.         CALL WRITE_BUFFER               ;LENGTH IS STILL IN CX
  152.  
  153.         JMP MAIN_LOOP                   ;CONTINUE UNTIL WE ARE DONE
  154.  
  155. CLOSE_FILE:
  156.         MOV AH,3EH
  157.         MOV BX,1
  158.         INT 21H                         ;CLOSE THE OUTPUT FILE
  159.  
  160. HANG_UP:
  161.         MOV BX,OFFSET LNCB
  162.         MOV LNCB.NCB_COMMAND,NW_HANG_UP
  163.         CALL NETBIOS                    ;HANG UP THE SESSION
  164.         JNZ DELETE_NAME
  165.  
  166.         CALL WAIT_MYSELF
  167.         JNZ DELETE_NAME
  168.  
  169. DELETE_NAME:
  170.         MOV LNCB.NCB_COMMAND,NW_DELETE_NAME
  171.         CALL NETBIOS                    ;REMOVE THE NAME FROM THE ADAPTER
  172.         JNZ BAD_EXIT
  173.  
  174.         CALL WAIT_MYSELF                ;WAIT UNTIL IT IS DONE
  175.         JNZ BAD_EXIT
  176.  
  177.         MOV AX,4C00H
  178.         INT 21H                         ;BYE FOR NOW
  179.  
  180. BAD_EXIT: MOV AX,4C01H
  181.         INT 21H                         ;PUT OUT A BAD RETURN CODE TO
  182.                                         ;TEST IN A BATCH FILE
  183. WAIT_MYSELF:
  184.         MOV AL,LNCB.NCB_CMD_CPLT        ;WAIT FOR THE COMMAND
  185.         CMP AL,0FFH                     ;TO HAVE DONE SOMETHING
  186.         JZ TEST_CHAR                    ;WAIT FOR A CHARACTER
  187.         XOR AL,AL
  188.         RET                             ;Z FLAG IS ON
  189. TEST_CHAR:
  190.         MOV AH,1
  191.         INT 16H                         ;IS A CHARACTER AVAILABLE?
  192.         JZ WAIT_MYSELF
  193.         XOR AH,AH
  194.         INT 16H
  195.         OR AL,0FFH                      ;NZ FLAG IS ON
  196.         RET
  197.  
  198. WRITE_BUFFER PROC
  199.         MOV AH,40H
  200.         MOV BX,1                        ;OUTPUT HANDLE IS STANDARD OUTPUT
  201.         INT 21H                         ;DO THE DOS DISK WRITE
  202.         RET
  203. WRITE_BUFFER ENDP
  204.  
  205. RECEIVE_BUFFER PROC
  206.         MOV WORD PTR LNCB.NCB_BUFFER,DX         ;THE LOCATION OF THE BUFFER
  207.         MOV LNCB.NCB_COMMAND,NW_RECEIVE         ;A NO-WAIT RECEIVE
  208.         MOV LNCB.NCB_LENGTH,SIZE BUFFER_ONE     ;AND HOW MUCH WE WANT
  209. NETBIOS PROC
  210.         MOV BX,OFFSET LNCB              ;ES:BX POINTS TO NCB
  211.         INT 5CH                         ;CALL THE NETBIOS
  212.         TEST AL,AL                      ;ANY IMMEDIATE PROBLEMS?
  213.         RET                             ;RETURN WITH FLAGS SET
  214. NETBIOS ENDP
  215. RECEIVE_BUFFER ENDP
  216.  
  217. MAIN_CODE ENDS
  218.  
  219. MAIN_STACK      SEGMENT STACK
  220.         DW 100H DUP (?)                 ;AUTOMATIC STACK SETUP BY LINKER
  221. MAIN_STACK      ENDS
  222.  
  223.         END BEGIN
  224.  
  225. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  226.  
  227.  
  228. --- msged 2.06
  229.  * Origin: Atlantis - The Lost City Down Under (02) 413-1760 (3:711/504)
  230.  
  231. @PATH: 711/504 712/211 640/372 556 820 821 209/209 396/1 170/400 
  232. @PATH: 512/0 1007 
  233.