PAGE 62,132 ; CODE SEGMENT PUBLIC 'CODE' ASSUME CS:CODE PUBLIC BPQHOSTPORT,STOPNODE,SYSTEM,REFRESH,BWFLAG,CLOSEIP EXTRN TERMINAL:NEAR,TERMINIT:NEAR,TERMTRACE:NEAR ASSUME CS:CODE ; TERMDATA SEGMENT PUBLIC 'TERMDATA' EXTRN LOGNAME:BYTE TERMDATA ENDS PORT DB 0 PAC4NAME DB 'PAC4LOG.XXX',0 BADPORTMSG DB 'Port specified is invalid',0dh,0ah,'$' TEN DB 10 NEWVALUE DW 0 WORD10 DW 10 WORD16 DW 16 SYSTEM DB 0 ; SUBSYSTEM OWNING DISPLAY - TERM OR IPGATE REFRESH DB 0 BWFLAG DB 0 CLOSEIP: RET PUBLIC BUFFLEN BUFFLEN EQU 340 NODELINE DB 350 DUP (0) START: MOV AX,CODE MOV DS,AX MOV BWFLAG,AL MOV SI,5DH MOV AL,ES:[SI] MOV PAC4NAME+8,AL MOV AL,ES:1[SI] MOV PAC4NAME+9,AL MOV AL,ES:2[SI] MOV PAC4NAME+10,AL CALL GETVALUE MOV AL,BYTE PTR NEWVALUE CMP AL,64 JBE PORTOK DUFFPORT: mov dx,offset BADPORTMSG mov ah,9 int 21h MOV AH,4CH INT 21H ; portok: MOV BYTE PTR PORT,AL ; PARAM IS PORT NUMBER + PUSH ES MOV AX,CODE MOV ES,AX CALL INIT POP ES MOV AL,ES:6DH ; 2ND PARAM MOV BWFLAG,AL ; ; IF PORT IS 0, ASK SWITCH FOR A STREAM TO USE ; MOV AL,PORT CMP AL,0 JNE GOTPORT MOV AH,13 CALL NODE CMP AL,255 JNE GOTPORT MOV DX,OFFSET NOFREEPORTS JMP CONFIGERR GOTPORT: MOV BYTE PTR PORT,AL PUSH ES MOV BX,TERMDATA MOV ES,BX MOV SI,OFFSET PAC4NAME MOV DI,OFFSET LOGNAME MOV CX,12 REP MOVSB POP ES CALL TERMINIT MOV AH,1 MOV DX,2 ; APPL MASK MOV CX,80H ; APPL FLAGS CALL NODE ; SET APPL MASK TO ENABLE MONITORING ; BG: MOV SYSTEM,0 CALL TERMINAL ; MOV SYSTEM,0 MOV AX,CODE MOV DS,AX MOV ES,AX ; ; LOOK FOR TRACE DATA ; MOV AH,11 MOV DI,OFFSET NODELINE CALL NODE CMP CX,0 JE NOMONITOR MOV DI,OFFSET NODELINE CALL TERMTRACE ; DISPLAY TRACE FRAME NOMONITOR: MOV AX,1000H INT 15H ; FOR DESQVIEW STI ; FOR IBM XT BIOS BUG MOV AX,1680H INT 2FH ; WINDOWS RELEASE TIMESLICE JMP BG STOPNODE: EXIT: ; ; DISCONNECT, CLEAR APPL FLAGS AND DEALLOCATE STREAM ; MOV AH,6 MOV CX,2 CALL NODE ; DISCONNECT MOV AH,1 MOV DX,0 ; APPL MASK MOV CX,0 CALL NODE ; CLEAR APPL MASK TO STOP MONITORING ; ; RELEASE STREAM ; ; ; AH = 13 Allocate/deallocate stream ; If AL=0, return first free stream and allocate ; If AL>0, CL=1, Allocate stream. If aleady allocated, ; return CX nonzero, else allocate, and return CX=0 ; If AL>0, CL=2, Release stream ; MOV AH,13 MOV CL,2 CALL NODE MOV AH,4CH INT 21H ; GETVALUE: ; ; EXTRACT NUMBER (HEX OR DECIMAL) FROM INPUT STRING ; MOV NEWVALUE,0 MOV AL,ES:[SI] CMP AL,'$' ; HEX? JE DECODEHEX VALLOOP: MOV AL,ES:[SI] CMP AL,' ' JBE ENDVALUE ; ; ANOTHER DIGIT - MULTIPLY BY 10 ; MOV AX,NEWVALUE MUL WORD10 MOV NEWVALUE,AX MOV AL,ES:[SI] INC SI SUB al,'0' JC DUFFVALUE CMP AL,10 JNC DUFFVALUE MOV AH,0 ADD NEWVALUE,AX JC DUFFVALUE JMP VALLOOP DECODEHEX: INC SI HEXLOOP: MOV AL,ES:[SI] CMP AL,' ' JBE ENDVALUE ; ; ANOTHER DIGIT - MULTIPLY BY 16 ; MOV AX,NEWVALUE MUL WORD16 MOV NEWVALUE,AX MOV AL,ES:[SI] CMP AL,'Z' JBE CHAROK SUB AL,20H ; TO LC CHAROK: INC SI SUB al,'0' JC DUFFVALUE CMP AL,10 JC HEXOK SUB AL,7 CMP AL,10 JC DUFFVALUE CMP AL,16 JNC DUFFVALUE HEXOK: MOV AH,0 ADD NEWVALUE,AX JMP HEXLOOP ENDVALUE: CLC RET DUFFVALUE: STC RET NODE: MOV AL,PORT NODEINT: INT 7FH RET BPQHOSTPORT: CALL NODE IRET INCLUDE ENVIRON.ASM NOTBPQERROR DB 'Switch not found$' G8BPQ DB 'G8BPQ' BADCONFIGMSG DB 'Configuration file read error',0DH,0AH,'$' CONFIGFILENAME DB CONFIGNAME,0 NOCONFIGMSG DB 'Configuration file ',CONFIGNAME,' not found',0DH,0AH,'$' NOFREEPORTS DB 'No streams available',0dh,0ah,'$' ; ; BPQCFG FIRST 128 BYTES ; CONFIGTABLE LABEL BYTE ; ; CONFIGURATION DATA STRUCTURE ; ; DEFINES LAYOUT OF CONFIG RECORD PRODUCED BY CONFIGURATION PROG ; ; LAYOUT MUST MATCH THAT IN CONFIG.C SOURCE ; C_NODECALL DB 10 DUP (0) ; OFFSET = 0 C_NODEALIAS DB 10 DUP (0) ; OFFSET = 10 C_BBSCALL DB 10 DUP (0) ; OFFSET = 20 C_BBSALIAS DB 10 DUP (0) ; OFFSET = 30 ; C_OBSINIT DW 0 ; OFFSET = 40 C_OBSMIN DW 0 ; OFFSET = 42 C_NODESINTERVAL DW 0 ; OFFSET = 44 C_L3TIMETOLIVE DW 0 ; OFFSET = 46 C_L4RETRIES DW 0 ; OFFSET = 48 C_L4TIMEOUT DW 0 ; OFFSET = 50 C_BUFFERS DW 0 ; OFFSET = 52 C_PACLEN DW 0 ; OFFSET = 54 C_TRANSDELAY DW 0 ; OFFSET = 56 C_T3 DW 0 ; OFFSET = 58 DW 0 ; OFFSET = 60 DW 0 ; OFFSET = 62 C_IDLETIME DW 0 ; OFFSET = 64 C_EMSFLAG DB 0 ; OFFSET = 66 DB 0 C_BBS DB 0 ; OFFSET = 68 C_NODE DB 0 ; OFFSET = 69 C_HOSTINTERRUPT DB 0 ; OFFSET = 70 C_DESQVIEW DB 0 ; OFFSET = 71 C_MAXLINKS DW 0 ; OFFSET = 72 C_MAXDESTS DW 0 C_MAXNEIGHBOURS DW 0 C_MAXCIRCUITS DW 0 ; 78 C_TNCPORTLISTO DB 16 DUP (0) ; OFFSET = 80 C_IDINTERVAL DW 0 ; 96 C_XXXXXXXX DW 0 ; 98 ; SPARE (WAS DIGIFLAG) C_MINQUAL DW 0 ; 100 C_HIDENODES DB 0 ; 102 C_L4DELAY DW 0 ; 103 C_L4WINDOW DW 0 ; 105 C_BTINTERVAL DW 0 ; 106 X_UNPROTO DB 9 DUP (0) ; 108 ; NOW SPARE C_BBSQUAL DW 0 ; 117 DB (CONFIGTABLE+128-$) DUP (0) CONFIGHANDLE DW 0 INIT: ; ; GET NODE INTERRUPT NUMBER FROM CONFIG FILE ; MOV DX,OFFSET CONFIGFILENAME MOV AH,3DH MOV AL,0 ; READ ONLY INT 21H ; OPEN IT JC NOCONFIGFILE MOV CONFIGHANDLE,AX MOV BX,AX MOV DX,OFFSET CONFIGTABLE MOV CX,128 MOV AH,3FH INT 21H ; READ CMP AX,CX JNE SHORTCONFIG JMP SHORT PROCESSCONFIG NOCONFIGFILE: MOV DX,OFFSET NOCONFIGMSG JMP SHORT CONFIGERR SHORTCONFIG: MOV DX,OFFSET BADCONFIGMSG CONFIGERR: MOV AH,9 INT 21H MOV AX,4C01H INT 21H ; EXIT PROCESSCONFIG: MOV BX,CONFIGHANDLE MOV AH,3EH INT 21H ; CLOSE IT ; ; CHECK SWITCH IS LOADED ; PUSH DS MOV AL,C_HOSTINTERRUPT ; INTERRUPT MOV BYTE PTR NODEINT+1,AL ; PATCH NODE CALL INSTRUCTION MOV AH,0 ADD AX,AX ADD AX,AX MOV SI,AX XOR AX,AX MOV DS,AX ; ; DS:SI POINTS TO VECTOR ; CMP WORD PTR DS:2[SI],0 POP DS JNE SWITCHOK NOSWITCH: MOV DX,OFFSET NOTBPQERROR MOV AH,9 INT 21H mov AX,4c01h INT 21H SWITCHOK: MOV AH,0 CALL NODE ; CHECK IF LOADED AND GET VERSIONS CMP AX,'PB' ; NOT BPQ JNE NOSWITCH CMP BX,' Q' JNE NOSWITCH RET ; HEXOUT: PUSH AX PUSH AX sar al,1 sar al,1 sar al,1 sar al,1 call hexout1 pop ax call hexout1 POP AX ret hexout1: and al,0fh cmp al,10 jl hexout5 add al,7 hexout5: add al,30h STOSB ; ret ; CODE ENDS ; STACK SEGMENT STACK 'STACK' DB 256 DUP (0) ; STACK ENDS END START