258 lines
5.3 KiB
Plaintext
258 lines
5.3 KiB
Plaintext
(* Release 3.00 *)
|
|
|
|
(* c_coreinit - common initialisation between PLIB and CLIB *)
|
|
|
|
(* Copyright (C) 1991 Psion PLC. All Rights Reserved*)
|
|
(* Written by NSM.*)
|
|
|
|
include "corelib.inc"
|
|
include "epocdefs.inc"
|
|
|
|
module coreinit
|
|
|
|
(***************************************************************************)
|
|
section
|
|
segment _MAGIC(MAGIC,68H)
|
|
segment _DATA(DATA,68H)
|
|
segment _CONST(DATA,48H)
|
|
segment _BSS(BSS,68H)
|
|
segment BSS_END(BSS,68H)
|
|
|
|
group DGROUP(_MAGIC,_DATA,_CONST,_BSS,BSS_END)
|
|
|
|
select _DATA
|
|
|
|
public _winHandle : dw 0
|
|
public __conName : db 'CON:*',0
|
|
|
|
(***************************************************************************)
|
|
section
|
|
segment _DATA(DATA,68H)
|
|
public __DefScreenRect : dw -1,0,0,0
|
|
|
|
(***************************************************************************)
|
|
section
|
|
segment _DATA(DATA,68H)
|
|
public __DefScreenMode : dw 0
|
|
|
|
(****************************************************************************)
|
|
section
|
|
segment _TEXT(CODE,28H)
|
|
|
|
public __FatalErrorPos :
|
|
|
|
push bx
|
|
mov bx, sp
|
|
mov ax, ss:[bx][2]
|
|
pop bx
|
|
ret 0
|
|
|
|
(****************************************************************************)
|
|
section
|
|
segment _TEXT(CODE,28H)
|
|
|
|
public __FatalError :
|
|
|
|
mov al, 80
|
|
int ProcPanic
|
|
|
|
(****************************************************************************)
|
|
section
|
|
segment _TEXT(CODE,28H)
|
|
segment _DATA(DATA,28H)
|
|
|
|
extrn _winHandle
|
|
extrn _DatCommandPtr
|
|
extrn __DefScreenRect
|
|
extrn __DefScreenMode
|
|
extrn __conName
|
|
|
|
select _TEXT
|
|
|
|
extrn __FatalErrorPos
|
|
extrn __FatalError
|
|
|
|
xMode = -2
|
|
xParse = xMode-FullParseEnt
|
|
xBuf = xParse-MaxPathSize
|
|
|
|
public _p_xwind :
|
|
push bp
|
|
mov bp, sp
|
|
add sp, xBuf
|
|
push ax
|
|
push bx
|
|
push cx
|
|
push dx
|
|
push di
|
|
push si
|
|
;
|
|
mov bx, [_DatCommandPtr]
|
|
test bx, bx
|
|
je noCommandLine
|
|
sub cx, cx
|
|
lea di, [bp][xBuf]
|
|
lea si, [bp][xParse]
|
|
sub al, al
|
|
mov ah, NmFilParse
|
|
int FilManager
|
|
jc noCommandLine
|
|
lea di, [bp][xBuf]
|
|
mov si, __conName
|
|
int StringCopy
|
|
add di, 5
|
|
lea si, [bp][xBuf][FileSystemNameSize]
|
|
mov ax, [bp][xParse][FullParseDevice]
|
|
add al, ah
|
|
sub ah, ah
|
|
add si, ax
|
|
mov cl, [bp][xParse][FullParseName]
|
|
sub ch, ch
|
|
cld
|
|
rep ; movsb
|
|
sub al, al
|
|
stosb
|
|
jmp openCon
|
|
noCommandLine:
|
|
lea di, [bp][xBuf]
|
|
mov si, __conName
|
|
int StringCopy
|
|
mov byte [di][4], 0
|
|
openCon:
|
|
lea bx, [bp][xBuf]
|
|
mov cx, -1
|
|
mov ah, NmIoOpen
|
|
int DevManager
|
|
jnc openOk
|
|
;
|
|
call __FatalErrorPos
|
|
mov bx, FatalOpenConsole
|
|
jmp __FatalError
|
|
;
|
|
openOk: mov [_winHandle], ax
|
|
;
|
|
mov si, ds:[Datawserv_channel]
|
|
or si, si
|
|
jz old_window_server
|
|
mov al, [si][wserv_spec_info_version]
|
|
and al, 0FH
|
|
cmp al, 2 (* WS_VERSION_4 *)
|
|
jb old_window_server
|
|
;
|
|
sub sp, 32 (* SIZE W_SUPPORT_INFO *)
|
|
mov si, sp
|
|
mov ax, 0FF06H (* WOR_X_SUPPROT_INFO *)
|
|
int WservOpcodes
|
|
mov ax, [__DefScreenMode]
|
|
mov bx, [si]
|
|
add sp, 32 (* SIZE W_SUPPORT_INFO *)
|
|
;
|
|
test bx, 2 (* W_SUPPORT_CTBY_S3 *)
|
|
jz no_ctby_mode
|
|
test ax, 1 (* Use compatibility mode if set *)
|
|
jnz no_ctby_mode
|
|
push ax
|
|
push bx
|
|
mov word [bp][xMode], 20 (* P_SCR_COMPATIBILITY *)
|
|
lea cx, [bp][xMode]
|
|
xor ax, ax (* No compatibilty mode *)
|
|
push ax
|
|
mov dx, sp
|
|
mov bx, [_winHandle]
|
|
mov al, IoFuncSet
|
|
mov ah, NmIoWithWait
|
|
int IoManager
|
|
pop ax
|
|
pop bx
|
|
pop ax
|
|
;
|
|
no_ctby_mode:
|
|
test bx, 1 (* W_SUPPORT_CTBY_GREY *)
|
|
jz no_grey
|
|
test ax, 2 (* Use grey if set *)
|
|
jz no_grey
|
|
;
|
|
mov word [bp][xMode], 21 (* P_SCR_GREY *)
|
|
lea cx, [bp][xMode]
|
|
mov ax, TRUE
|
|
push ax
|
|
mov dx, sp
|
|
mov bx, [_winHandle]
|
|
mov al, IoFuncSet
|
|
mov ah, NmIoWithWait
|
|
int IoManager
|
|
pop ax
|
|
no_grey:
|
|
;
|
|
old_window_server:
|
|
mov di, __DefScreenRect
|
|
cmp word [di][RectTl][PointX], -1
|
|
jne rectGood
|
|
sub ax, ax
|
|
mov [di][RectTl][PointX], ax
|
|
mov [di][RectTl][PointY], ax
|
|
mov ah, NmGenLcdType
|
|
int GenManager
|
|
mov bx, 60
|
|
mov cx, 15
|
|
cmp al, Lcd240X80
|
|
jne try160X80
|
|
mov bx, 40
|
|
mov cx, 9
|
|
jmp setBr
|
|
try160X80:
|
|
cmp al, Lcd160X80
|
|
jne setBr
|
|
mov bx, 26
|
|
mov cx, 9
|
|
setBr:
|
|
mov [di][RectBr][PointX], bx
|
|
mov [di][RectBr][PointY], cx
|
|
rectGood:
|
|
mov word [bp][xMode], 5 (* P_SCR_WSET *)
|
|
lea cx, [bp][xMode]
|
|
mov dx, di
|
|
mov bx, [_winHandle]
|
|
mov al, IoFuncSet
|
|
mov ah, NmIoWithWait
|
|
int IoManager
|
|
;
|
|
mov word [bp][xMode], 3 (* P_SCR_POSA *)
|
|
lea cx, [bp][xMode]
|
|
xor ax, ax
|
|
push ax
|
|
push ax
|
|
mov dx, sp
|
|
mov al, IoFuncSet
|
|
mov ah, NmIoWithWait
|
|
int IoManager
|
|
;
|
|
lea di, [bp][xParse]
|
|
mov word [di], 1
|
|
mov dx, di
|
|
mov word [bp][xMode], 9 (* P_SCR_CURSOR *)
|
|
mov al, IoFuncSet
|
|
mov ah, NmIoWithWait
|
|
int IoManager
|
|
;
|
|
pop si
|
|
pop di
|
|
pop dx
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
mov sp, bp
|
|
pop bp
|
|
ret 0
|
|
;
|
|
|
|
(****************************************************************************)
|
|
section
|
|
segment _TEXT(CODE,28H)
|
|
|
|
public _ClassTable :
|
|
public _ExtCatTable :
|
|
dw 0
|
|
|
|
end
|