home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / NCSA / TEL2307S.ZIP / NET / ENET / PACKET2.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-02-05  |  13.2 KB  |  514 lines

  1. ;/* cu-notic.txt         NCSA Telnet version 2.2C     2/3/89
  2. ;   Notice:
  3. ;        Portions of this file have been modified by
  4. ;        The Educational Resources Center of Clarkson University.
  5. ;
  6. ;        All modifications made by Clarkson University are hereby placed
  7. ;        in the public domain, provided the following statement remain in
  8. ;        all source files.
  9. ;
  10. ;        "Portions Developed by the Educational Resources Center, 
  11. ;                Clarkson University"
  12. ;
  13. ;        Bugs and comments to bkc@omnigate.clarkson.edu
  14. ;                                bkc@clgw.bitnet
  15. ;
  16. ;        Brad Clements
  17. ;        Educational Resources Center
  18. ;        Clarkson University
  19. ;*/
  20.  
  21.  
  22. ;Microsoft EQU 1
  23. ;Lattice EQU 1
  24. ifndef Microsoft
  25.     ifndef Lattice
  26.         if2
  27.             %out
  28.             %out ERROR: You have to specify "/DMicrosoft" OR "/DLattice" on the
  29.             %out        MASM command line to determine the type of assembly.
  30.             %out
  31.         endif
  32.         end
  33.     endif
  34. endif
  35.  
  36. ifdef Microsoft
  37. X    EQU    6
  38.  
  39.     EXTRN   _packet_vector:WORD
  40.  
  41.     .MODEL  LARGE
  42.     .data
  43.  
  44.     PUBLIC  _driver_version,_driver_class,_driver_type,_driver_number
  45. _driver_version  dw     1
  46. _driver_class    db   2
  47. _driver_type     dw   3
  48. _driver_number   db   4
  49.  
  50. ;_driver_version  WORD   1
  51. ;_driver_class    BYTE   2
  52. ;_driver_type     WORD   3
  53. ;_driver_number   BYTE   4
  54.  
  55. else
  56.     INCLUDE    DOS.MAC
  57.     SETX
  58.  
  59.     EXTRN   packet_vector:WORD
  60.  
  61.     EXTRN   driver_version:WORD
  62.     EXTRN   driver_class:BYTE
  63.     EXTRN   driver_type:WORD
  64.     EXTRN   driver_number:BYTE
  65.  
  66.     DSEG
  67. endif
  68.  
  69. vector_installed    DB  0       ; Whether we've installed the packet driver
  70.                                 ;   vector yet.
  71.  
  72. ifdef Microsoft
  73. ifdef Watcom
  74.     EXTRN   pkt_receiver2_:FAR
  75. else
  76.     EXTRN   _pkt_receiver2:FAR
  77. endif
  78.     .code
  79.     PUBLIC  _pkt_receiver,_clear_int,_set_int
  80.     PUBLIC  _pkt_access_type,_pkt_driver_info,_pkt_set_recv_mode
  81.     PUBLIC  _pkt_release_type,_pkt_send_pkt,_pkt_get_address
  82. else
  83.     EXTRN   pkt_receiver2:FAR
  84.     PSEG
  85.     PUBLIC    pkt_receiver,clear_int,set_int
  86.     PUBLIC  pkt_access_type,pkt_driver_info,pkt_set_recv_mode
  87.     PUBLIC  pkt_release_type,pkt_send_pkt,pkt_get_address
  88. endif
  89.  
  90. ifdef Microsoft
  91. _PKT_RECEIVER    PROC    FAR
  92. else
  93. PKT_RECEIVER  PROC    FAR
  94. endif
  95.     PUSHF
  96. ifdef Microsoft
  97. ifdef Watcom
  98.     CALL    pkt_receiver2_
  99. else
  100.     CALL    _pkt_receiver2
  101. endif
  102. else
  103.     CALL    pkt_receiver2
  104. endif
  105.     RET
  106. ifdef Microsoft
  107. _PKT_RECEIVER    ENDP
  108. else
  109. PKT_RECEIVER    ENDP
  110. endif
  111.  
  112. ;************************************************************************
  113. ;  pkt_access_type
  114. ;
  115. ;  Sets the access type for a handler
  116. ;
  117. ifdef Microsoft
  118. _pkt_access_type proc far
  119. else
  120. pkt_access_type proc far
  121. endif
  122.     PUSH    BP
  123.     MOV     BP,SP
  124.     PUSH    DS
  125.     PUSH    ES
  126.     PUSH    SI
  127.     PUSH    DI
  128.  
  129.     MOV     AX,_packet_vector   ; Get the packet driver vector
  130.     CMP     AX,0                ; Check for bad vector
  131.     JNE     ok_access
  132.     MOV     AX,-1               ; Indicate a bad vector
  133.     JMP     exit_pkt_access_type
  134.  
  135. ok_access:
  136.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  137.     JNE     installed_access
  138.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  139.     MOV     DS,BX
  140.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  141.     INC     SI
  142.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  143.  
  144. installed_access:
  145.     MOV     AH,02h              ; Packet driver command
  146.     MOV     AL,[BP+X]           ; Get the packet driver class
  147.     MOV     BX,[BP+X+2]         ; Get the packet driver type
  148.     MOV     DX,[BP+X+4]         ; Get the packet driver number
  149.     LDS     SI,[BP+X+6]         ; Get the pointer to the packet type
  150.     MOV     CX,[BP+X+10]        ; Get the length of the packet type info
  151.     LES     DI,[BP+X+12]        ; Get the receiver function
  152.     CALL    do_vector           ; Actually call the interrupt
  153.     JNC     exit_pkt_access_type
  154.     MOV     AX,-1               ; Carry set indicates error
  155.  
  156. exit_pkt_access_type:
  157.  
  158.     POP     DI
  159.     POP     SI
  160.     POP     ES
  161.     POP     DS
  162.     POP     BP
  163.     RET
  164. ifdef Microsoft
  165. _pkt_access_type endp
  166. else
  167. pkt_access_type endp
  168. endif
  169.  
  170. ;************************************************************************
  171. ;  pkt_driver_info
  172. ;
  173. ;  Gets the packet driver information
  174. ;
  175. ifdef Microsoft
  176. _pkt_driver_info proc far
  177. else
  178. pkt_driver_info proc far
  179. endif
  180.     PUSH    BP
  181.     MOV     BP,SP
  182.     PUSH    DS
  183.     PUSH    ES
  184.     PUSH    SI
  185.     PUSH    DI
  186.  
  187.     MOV     AX,_packet_vector   ; Get the packet driver vector
  188.     CMP     AX,0                ; Check for bad vector
  189.     JNE     ok_info
  190.     MOV     AX,-1               ; Indicate a bad vector
  191.     JMP     exit_pkt_driver_info
  192.  
  193. ok_info:
  194.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  195.     JNE     installed_info
  196.     PUSH    DS
  197.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  198.     MOV     DS,BX
  199.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  200.     INC     SI
  201.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  202.     POP     DS
  203.  
  204. installed_info:
  205.     MOV     AX,001ffh           ; Packet driver command
  206.     MOV     BX,[BP+X]           ; Get the packet type handle
  207.     PUSH    DS
  208.     CALL    do_vector           ; Actually call the interrupt
  209.     POP     DS
  210.     JNC     ok_pkt_driver_info
  211.     XOR     AH,AH
  212.     MOV     AL,DH               ; Carry set indicates error
  213.     JMP     exit_pkt_driver_info
  214.  
  215. ok_pkt_driver_info:
  216. ifdef Microsoft
  217.     MOV     _driver_version,BX      ; Get the driver version
  218.     MOV     _driver_class,CH        ; Get the driver class
  219.     MOV     _driver_type,DX         ; Get the driver type
  220.     MOV     _driver_number,CL       ; Get the driver number
  221. else
  222.     MOV     driver_version,BX       ; Get the driver version
  223.     MOV     driver_class,CH         ; Get the driver class
  224.     MOV     driver_type,DX          ; Get the driver type
  225.     MOV     driver_number,CL        ; Get the driver number
  226. endif
  227.     MOV     AX,0                    ; Indicate no error
  228.  
  229. exit_pkt_driver_info:
  230.  
  231.     POP     DI
  232.     POP     SI
  233.     POP     ES
  234.     POP     DS
  235.     POP     BP
  236.     RET
  237. ifdef Microsoft
  238. _pkt_driver_info endp
  239. else
  240. pkt_driver_info endp
  241. endif
  242.  
  243. ;************************************************************************
  244. ;  pkt_set_recv_mode
  245. ;
  246. ;  Sets the packet driver receive mode for a packet type
  247. ;
  248. ifdef Microsoft
  249. _pkt_set_recv_mode proc far
  250. else
  251. pkt_set_recv_mode proc far
  252. endif
  253.     PUSH    BP
  254.     MOV     BP,SP
  255.     PUSH    DS
  256.     PUSH    ES
  257.     PUSH    SI
  258.     PUSH    DI
  259.  
  260.     MOV     AX,_packet_vector   ; Get the packet driver vector
  261.     CMP     AX,0                ; Check for bad vector
  262.     JNE     ok_recv
  263.     MOV     AX,-1               ; Indicate a bad vector
  264.     JMP     exit_pkt_set_recv_mode
  265.  
  266. ok_recv:
  267.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  268.     JNE     installed_recv
  269.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  270.     MOV     DS,BX
  271.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  272.     INC     SI
  273.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  274.  
  275. installed_recv:
  276.     MOV     AX,0200h           ; Packet driver command
  277.     MOV     BX,[BP+X]           ; Get the packet type handle
  278.     MOV     CX,[BP+X+2]         ; Get the new mode
  279.     CALL    do_vector           ; Actually call the interrupt
  280.     JNC     ok_pkt_set_recv_mode
  281.     XOR     AH,AH
  282.     MOV     AL,DH               ; Carry set indicates error
  283.     JMP     exit_pkt_set_recv_mode
  284.  
  285. ok_pkt_set_recv_mode:
  286.     MOV     AX,0                    ; Indicate no error
  287.  
  288. exit_pkt_set_recv_mode:
  289.     POP     DI
  290.     POP     SI
  291.     POP     ES
  292.     POP     DS
  293.     POP     BP
  294.     RET
  295. ifdef Microsoft
  296. _pkt_set_recv_mode endp
  297. else
  298. pkt_set_recv_mode endp
  299. endif
  300.  
  301. ;************************************************************************
  302. ;  pkt_release_type
  303. ;
  304. ;  Tells the packet driver we don't need a packet type anymore
  305. ;
  306. ifdef Microsoft
  307. _pkt_release_type proc far
  308. else
  309. pkt_release_type proc far
  310. endif
  311.     PUSH    BP
  312.     MOV     BP,SP
  313.     PUSH    DS
  314.     PUSH    ES
  315.     PUSH    SI
  316.     PUSH    DI
  317.  
  318.     MOV     AX,_packet_vector   ; Get the packet driver vector
  319.     CMP     AX,0                ; Check for bad vector
  320.     JNE     ok_release
  321.     MOV     AX,-1               ; Indicate a bad vector
  322.     JMP     exit_pkt_release_type
  323.  
  324. ok_release:
  325.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  326.     JNE     installed_release
  327.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  328.     MOV     DS,BX
  329.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  330.     INC     SI
  331.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  332.  
  333. installed_release:
  334.     MOV     AX,0300h            ; Packet driver command
  335.     MOV     BX,[BP+X]           ; Get the packet type handle
  336.     CALL    do_vector           ; Actually call the interrupt
  337.     JNC     ok_pkt_release_type
  338.     XOR     AH,AH
  339.     MOV     AL,DH               ; Carry set indicates error
  340.     JMP     exit_pkt_release_type
  341.  
  342. ok_pkt_release_type:
  343.     MOV     AX,0                    ; Indicate no error
  344.  
  345. exit_pkt_release_type:
  346.     POP     DI
  347.     POP     SI
  348.     POP     ES
  349.     POP     DS
  350.     POP     BP
  351.     RET
  352. ifdef Microsoft
  353. _pkt_release_type endp
  354. else
  355. pkt_release_type endp
  356. endif
  357.  
  358. ;************************************************************************
  359. ;  pkt_send_pkt
  360. ;
  361. ;  Sends a packet through the packet driver
  362. ;
  363. ifdef Microsoft
  364. _pkt_send_pkt proc far
  365. else
  366. pkt_send_pkt proc far
  367. endif
  368.     PUSH    BP
  369.     MOV     BP,SP
  370.     PUSH    DS
  371.     PUSH    ES
  372.     PUSH    SI
  373.     PUSH    DI
  374.  
  375.     MOV     AX,_packet_vector   ; Get the packet driver vector
  376.     CMP     AX,0                ; Check for bad vector
  377.     JNE     ok_send
  378.     MOV     AX,-1               ; Indicate a bad vector
  379.     JMP     exit_pkt_send_pkt
  380.  
  381. ok_send:
  382.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  383.     JNE     installed_send
  384.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  385.     MOV     DS,BX
  386.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  387.     INC     SI
  388.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  389.  
  390. installed_send:
  391.     MOV     AX,0400h            ; Packet driver command
  392.     LDS     SI,[BP+X]           ; Get the buffer address
  393.     MOV     CX,[BP+X+4]         ; Get the buffer length
  394.     CALL    do_vector           ; Actually call the interrupt
  395.     JNC     ok_pkt_send_pkt
  396.     XOR     AH,AH
  397.     MOV     AL,DH               ; Carry set indicates error
  398.     JMP     exit_pkt_send_pkt
  399.  
  400. ok_pkt_send_pkt:
  401.     MOV     AX,0                    ; Indicate no error
  402.  
  403. exit_pkt_send_pkt:
  404.     POP     DI
  405.     POP     SI
  406.     POP     ES
  407.     POP     DS
  408.     POP     BP
  409.     RET
  410. ifdef Microsoft
  411. _pkt_send_pkt endp
  412. else
  413. pkt_send_pkt endp
  414. endif
  415.  
  416. ;************************************************************************
  417. ;  pkt_get_address
  418. ;
  419. ;  Gets the net address of the interface for the packet handle and
  420. ;   puts it into the buffer
  421. ;
  422. ifdef Microsoft
  423. _pkt_get_address proc far
  424. else
  425. pkt_get_address proc far
  426. endif
  427.     PUSH    BP
  428.     MOV     BP,SP
  429.     PUSH    DS
  430.     PUSH    ES
  431.     PUSH    SI
  432.     PUSH    DI
  433.  
  434.     MOV     AX,_packet_vector   ; Get the packet driver vector
  435.     CMP     AX,0                ; Check for bad vector
  436.     JNE     ok_get_addr
  437.     MOV     AX,-1               ; Indicate a bad vector
  438.     JMP     exit_pkt_get_address
  439.  
  440. ok_get_addr:
  441.     CMP     vector_installed,0  ; Check if the packet driver vector has already been installed
  442.     JNE     installed_get_addr
  443.     MOV     BX,CS               ; Modify the code segment (Ugh...)
  444.     MOV     DS,BX
  445.     MOV     SI,OFFSET do_vector ; Get the offset of the interrupt procedure
  446.     INC     SI
  447.     MOV     DS:[SI],AL          ; Modify the interrupt to call
  448.  
  449. installed_get_addr:
  450.     MOV     AX,0600h            ; Packet driver command
  451.     MOV     BX,[BP+X]           ; Get the packet type handle
  452.     LES     DI,[BP+X+2]         ; Get the buffer address
  453.     MOV     CX,[BP+X+6]         ; Get the buffer length
  454.     CALL    do_vector           ; Actually call the interrupt
  455.     JNC     ok_pkt_get_address
  456.     XOR     AH,AH
  457.     MOV     AL,DH               ; Carry set indicates error
  458.     JMP     exit_pkt_get_address
  459.  
  460. ok_pkt_get_address:
  461.     MOV     AX,0                    ; Indicate no error
  462.  
  463. exit_pkt_get_address:
  464.     POP     DI
  465.     POP     SI
  466.     POP     ES
  467.     POP     DS
  468.     POP     BP
  469.     RET
  470. ifdef Microsoft
  471. _pkt_get_address endp
  472. else
  473. pkt_get_address endp
  474. endif
  475.  
  476. ; Procedure to call the packet driver interrupt
  477. do_vector   PROC    NEAR
  478.     INT     60h
  479.     RET
  480. do_vector   ENDP
  481.  
  482. ifdef Microsoft
  483. _CLEAR_INT    PROC    FAR
  484. else
  485. CLEAR_INT    PROC    FAR
  486. endif
  487.     CLI
  488.     RET
  489. ifdef Microsoft
  490. _CLEAR_INT    ENDP
  491. else
  492. CLEAR_INT    ENDP
  493. endif
  494.  
  495. ifdef Microsoft
  496. _SET_INT    PROC    FAR
  497. else
  498. SET_INT    PROC    FAR
  499. endif
  500.     STI
  501.     RET
  502. ifdef Microsoft
  503. _SET_INT    ENDP
  504. else
  505. SET_INT    ENDP
  506. endif
  507. ifdef Microsoft
  508. ;_TEXT    ends
  509. else
  510.     ENDPS
  511. endif
  512.     END
  513.  
  514.