1 /* Loglan82 Compiler&Interpreter
2 Copyright (C) 1993 Institute of Informatics, University of Warsaw
3 Copyright (C) 1993, 1994 LITA, Pau
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 contacts: Andrzej.Salwicki@univ-pau.fr
22 LITA Departement d'Informatique
24 Avenue de l'Universite
26 tel. ++33 59923154 fax. ++33 59841696
28 =======================================================================
32 PUBLIC _logon, _logoff, _attention, _ignore, _send, _receive
33 EXTRN _endrun:FAR, COPYOK:FAR
37 CINTA_TEXT SEGMENT PUBLIC 'CODE'
40 ; PATCH FOR RECEIVE MESSAGE INTERRUPT HANDLER
49 CALL FAR PTR _ignore ; DISABLE ATTENTION
52 ASSUME CS:DRIVER, DS:DGROUP
54 MOV AX, OFFSET DGROUP:MSGBUF
72 _data SEGMENT WORD PUBLIC 'data'
73 SAVCOD DB SAVLEN DUP(?) ; SPACE FOR SAVING PATCHED CODE
79 ; SEGMENT FOR ADDRESSING DRIVER CODE
81 ORG 102EH ; ***** ONLY FOR D-LINK VERSION 3.21 *****
82 DISPLAY LABEL FAR ; RECEIVE MESSAGE INTERRUPT HANDLER
86 CINTA_TEXT SEGMENT 'CODE'
89 NETWORK DB 0 ; NETWORK OPERATION FLAG
91 BREAK PROC FAR ; CONTROL-BREAK INTERRUPT ROUTINE
101 ; CHECK IF DRIVER IS INSTALLED AND CONNECT TO RECEIVE MESSAGE INTERRUPT HANDLER.
102 ; RETURN NODE NUMBER (-1 MEANS NODE NOT LOGGED ON)
110 PUSH AX ; PUSH DUMMY PARAMETER FOR COPYOK
112 CALL COPYOK ; CHECK FOR AUTHORIZATION
114 JZ NOTAUT ; UNAUTHORIZED DUPLICATE
115 MOV AX, 2523H ; REPLACE CONTROL-BREAK INTERRUPT
120 MOV AX, 357DH ; GET NIOS VECTOR INTO ES:BX
122 CMP WORD PTR ES:[BX-2], 'ns'
123 JNE NONE ; DRIVER NOT INSTALLED
124 MOV AH, 17H ; GET NIOS VERSION NUMBER
126 CMP AX, 1503H ; IS VERSION = 3.21
127 JNE NONE ; INCORRECT NIOS VERSION
132 ASSUME CS:CINTA_TEXT, DS:DRIVER, ES:DGROUP
133 MOV BX, OFFSET DGROUP:USER
134 MOV AH, 02H ; GET USER NAME
135 MOV DL, 0FFH ; OUR NODE (UNKNOWN YET)
139 MOV NETWORK, 1 ; FLAG NETWORK INSTALLED
141 MOV SI, OFFSET DISPLAY
142 MOV DI, OFFSET DGROUP:SAVCOD
145 CALL FAR PTR _ignore ; DISABLE ATTENTION FOR A MOMENT
146 PUSH DS ; AND REPLACE WITH OUR
150 ASSUME CS:CINTA_TEXT, DS:CINTA_TEXT, ES:DRIVER
152 MOV DI, OFFSET DISPLAY
157 ASSUME CS:CINTA_TEXT, DS:DGROUP, ES:DRIVER
158 MOV AX, [BP+6] ; STORE ADDRESS OF USER INTERRUPT ROUTINE
159 MOV WORD PTR MSGINT, AX
161 MOV WORD PTR MSGINT+2, AX
162 MOV AL, DL ; RETURN OUR NODE NUMBER
179 ; RESTORE ORIGINAL INTERRUPT HANDLER
189 JZ L2 ; NOTHING IF NO NETWORK
190 CALL FAR PTR _ignore ; DISABLE ATTENTION FOR A MOMENT
194 MOV AX,357DH ; GET DRIVER SEGMENT INTO ES
196 ASSUME CS:CINTA_TEXT, DS:DGROUP, ES:DRIVER
197 MOV SI,OFFSET DGROUP:SAVCOD
198 MOV DI,OFFSET DISPLAY
200 REP MOVSB ; RESTORE PATCHED CODE
201 CALL FAR PTR _attention ; ATTENTION BACK ON
236 ; int send(node, msg)
240 ; SEND MESSAGE MSG TO NODE
245 MOV AH,0DH ; SEND MESSAGE
246 MOV DL,[BP+6] ; NODE NUMBER
247 LES BX,[BP+8] ; BUFFER ADDRESS
263 MOV AH,0EH ; GET MESSAGE
264 LES BX,[BP+6] ; BUFFER ADDRESS
272 ; FUNCTION TICKS:INTEGER4;
273 ; RETURN BIOS TIME IN TICKS
278 MOV DX,CX ; HIGH WORD
282 ; PROCEDURE DTIME(VAR H,M,S:INTEGER);
283 ; RETURN DOS DAY TIME IN HOURS, MINUTES, AND SECONDS
287 MOV AH,2CH ; GET TIME
291 MOV BYTE PTR [BX+1],0
293 MOV [BX],CL ; MINUTES
294 MOV BYTE PTR [BX+1],0
296 MOV [BX],DH ; SECONDS
297 MOV BYTE PTR [BX+1],0
302 ; FUNCTION SHIFT(PATTERN, COUNT:INTEGER):INTEGER;
303 ; SHIFT LEFT LOGICALY PATTERN BY COUNT BITS
307 MOV AX,[BP+8] ; PATTERN
308 MOV CL,[BP+6] ; BIT COUNT
309 AND CL,0FH ; MASK LOW 4 BITS
310 TEST CL,08H ; TEST THEIR SIGN BIT
311 JZ S0 ; OK IF POSITIVE
312 OR CL,0F0H ; EXTEND SIGN TO ENTIRE BYTE IF NEGATIVE
313 S0: CMP CL,0 ; TEST BIT COUNT ONCE AGAIN
314 JZ S2 ; IF = 0 DO NOTHING
315 JG S1 ; IF > 0 SHIFT LEFT
316 NEG CL ; IF < 0 NEGATE BIT COUNT AND
317 SHR AX,CL ; SHIFT RIGHT
319 S1: SHL AX,CL ; SHIFT LEFT