oberon07/lib/kolibrios:
Args: minor fix API._NEW, KOSAPI.malloc: mem_commit ConsoleLib: add set_title procedure KOSAPI, Debug, Out: optimize for size kfonts: text clipping git-svn-id: svn://kolibrios.org@6647 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0485fe792b
commit
39f57c29f2
@ -34,6 +34,14 @@ BEGIN
|
|||||||
sys.CODE("578B7D0C8B4D0833C09CFCF3AB9D5F")
|
sys.CODE("578B7D0C8B4D0833C09CFCF3AB9D5F")
|
||||||
END zeromem;
|
END zeromem;
|
||||||
|
|
||||||
|
PROCEDURE mem_commit*(adr, size: INTEGER);
|
||||||
|
VAR tmp: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
FOR tmp := adr TO adr + size - 1 BY 4096 DO
|
||||||
|
sys.PUT(tmp, 0)
|
||||||
|
END
|
||||||
|
END mem_commit;
|
||||||
|
|
||||||
PROCEDURE strncmp*(a, b, n: INTEGER): INTEGER;
|
PROCEDURE strncmp*(a, b, n: INTEGER): INTEGER;
|
||||||
VAR A, B: CHAR; Res: INTEGER;
|
VAR A, B: CHAR; Res: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -97,28 +105,37 @@ BEGIN
|
|||||||
sys.PUT(res, size);
|
sys.PUT(res, size);
|
||||||
INC(res, 4)
|
INC(res, 4)
|
||||||
ELSE
|
ELSE
|
||||||
|
temp := 0;
|
||||||
IF heap + size >= endheap THEN
|
IF heap + size >= endheap THEN
|
||||||
IF sysfunc2(18, 16) > ASR(HEAP_SIZE, 10) THEN
|
IF sysfunc2(18, 16) > ASR(HEAP_SIZE, 10) THEN
|
||||||
heap := sysfunc3(68, 12, HEAP_SIZE);
|
temp := sysfunc3(68, 12, HEAP_SIZE)
|
||||||
|
ELSE
|
||||||
|
temp := 0
|
||||||
|
END;
|
||||||
|
IF temp # 0 THEN
|
||||||
|
mem_commit(temp, HEAP_SIZE);
|
||||||
|
heap := temp;
|
||||||
endheap := heap + HEAP_SIZE
|
endheap := heap + HEAP_SIZE
|
||||||
ELSE
|
ELSE
|
||||||
heap := 0
|
temp := -1
|
||||||
END
|
END
|
||||||
END;
|
END;
|
||||||
IF heap # 0 THEN
|
IF (heap # 0) & (temp # -1) THEN
|
||||||
sys.PUT(heap, size);
|
sys.PUT(heap, size);
|
||||||
res := heap + 4;
|
res := heap + 4;
|
||||||
heap := heap + size
|
heap := heap + size
|
||||||
ELSE
|
ELSE
|
||||||
endheap := 0;
|
|
||||||
res := 0
|
res := 0
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
ELSE
|
ELSE
|
||||||
IF sysfunc2(18, 16) > ASR(size, 10) THEN
|
IF sysfunc2(18, 16) > ASR(size, 10) THEN
|
||||||
res := sysfunc3(68, 12, size);
|
res := sysfunc3(68, 12, size);
|
||||||
|
IF res # 0 THEN
|
||||||
|
mem_commit(res, size);
|
||||||
sys.PUT(res, size);
|
sys.PUT(res, size);
|
||||||
INC(res, 4)
|
INC(res, 4)
|
||||||
|
END
|
||||||
ELSE
|
ELSE
|
||||||
res := 0
|
res := 0
|
||||||
END
|
END
|
||||||
|
@ -80,7 +80,7 @@ PROCEDURE GetArg*(n: INTEGER; VAR s: ARRAY OF CHAR);
|
|||||||
VAR i, j, len: INTEGER; c: CHAR;
|
VAR i, j, len: INTEGER; c: CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
j := 0;
|
j := 0;
|
||||||
IF n < argc + 1 THEN
|
IF n < argc THEN
|
||||||
len := LEN(s) - 1;
|
len := LEN(s) - 1;
|
||||||
i := Params[n, 0];
|
i := Params[n, 0];
|
||||||
WHILE (j < len) & (i <= Params[n, 1]) DO
|
WHILE (j < len) & (i <= Params[n, 1]) DO
|
||||||
|
@ -56,6 +56,7 @@ VAR
|
|||||||
cls* : PROCEDURE [stdcall] ();
|
cls* : PROCEDURE [stdcall] ();
|
||||||
get_cursor_pos* : PROCEDURE [stdcall] (VAR x, y: INTEGER);
|
get_cursor_pos* : PROCEDURE [stdcall] (VAR x, y: INTEGER);
|
||||||
set_cursor_pos* : PROCEDURE [stdcall] (x, y: INTEGER);
|
set_cursor_pos* : PROCEDURE [stdcall] (x, y: INTEGER);
|
||||||
|
set_title* : PROCEDURE [stdcall] (title: INTEGER);
|
||||||
|
|
||||||
PROCEDURE open*(wnd_width, wnd_height, scr_width, scr_height: INTEGER; title: ARRAY OF CHAR);
|
PROCEDURE open*(wnd_width, wnd_height, scr_width, scr_height: INTEGER; title: ARRAY OF CHAR);
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -94,6 +95,7 @@ BEGIN
|
|||||||
GetProc(sys.ADR(cls), "con_cls");
|
GetProc(sys.ADR(cls), "con_cls");
|
||||||
GetProc(sys.ADR(get_cursor_pos), "con_get_cursor_pos");
|
GetProc(sys.ADR(get_cursor_pos), "con_get_cursor_pos");
|
||||||
GetProc(sys.ADR(set_cursor_pos), "con_set_cursor_pos");
|
GetProc(sys.ADR(set_cursor_pos), "con_set_cursor_pos");
|
||||||
|
GetProc(sys.ADR(set_title), "con_set_title");
|
||||||
END main;
|
END main;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -120,7 +120,7 @@ BEGIN
|
|||||||
Char(0AX)
|
Char(0AX)
|
||||||
END Ln;
|
END Ln;
|
||||||
|
|
||||||
PROCEDURE FixReal*(x: LONGREAL; width, p: INTEGER);
|
PROCEDURE _FixReal(x: LONGREAL; width, p: INTEGER);
|
||||||
VAR e, len, i: INTEGER; y: LONGREAL; minus: BOOLEAN;
|
VAR e, len, i: INTEGER; y: LONGREAL; minus: BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF IsNan(x) OR IsInf(x) THEN
|
IF IsNan(x) OR IsInf(x) THEN
|
||||||
@ -200,7 +200,7 @@ BEGIN
|
|||||||
DEC(p)
|
DEC(p)
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
END FixReal;
|
END _FixReal;
|
||||||
|
|
||||||
PROCEDURE Real*(x: LONGREAL; width: INTEGER);
|
PROCEDURE Real*(x: LONGREAL; width: INTEGER);
|
||||||
VAR e, n, i: INTEGER; minus: BOOLEAN;
|
VAR e, n, i: INTEGER; minus: BOOLEAN;
|
||||||
@ -241,7 +241,8 @@ BEGIN
|
|||||||
IF minus THEN
|
IF minus THEN
|
||||||
x := -x
|
x := -x
|
||||||
END;
|
END;
|
||||||
FixReal(x, width, width - 3);
|
Realp := Real;
|
||||||
|
_FixReal(x, width, width - 3);
|
||||||
Char("E");
|
Char("E");
|
||||||
IF e >= 0 THEN
|
IF e >= 0 THEN
|
||||||
Char("+")
|
Char("+")
|
||||||
@ -259,6 +260,12 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END Real;
|
END Real;
|
||||||
|
|
||||||
|
PROCEDURE FixReal*(x: LONGREAL; width, p: INTEGER);
|
||||||
|
BEGIN
|
||||||
|
Realp := Real;
|
||||||
|
_FixReal(x, width, p)
|
||||||
|
END FixReal;
|
||||||
|
|
||||||
PROCEDURE Open*;
|
PROCEDURE Open*;
|
||||||
TYPE
|
TYPE
|
||||||
|
|
||||||
@ -282,6 +289,4 @@ BEGIN
|
|||||||
res := KOSAPI.sysfunc2(70, sys.ADR(info))
|
res := KOSAPI.sysfunc2(70, sys.ADR(info))
|
||||||
END Open;
|
END Open;
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Realp := Real
|
|
||||||
END Debug.
|
END Debug.
|
@ -145,12 +145,28 @@ BEGIN
|
|||||||
RETURN 0
|
RETURN 0
|
||||||
END sysfunc22;
|
END sysfunc22;
|
||||||
|
|
||||||
|
PROCEDURE mem_commit(adr, size: INTEGER);
|
||||||
|
VAR tmp: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
FOR tmp := adr TO adr + size - 1 BY 4096 DO
|
||||||
|
sys.PUT(tmp, 0)
|
||||||
|
END
|
||||||
|
END mem_commit;
|
||||||
|
|
||||||
PROCEDURE [stdcall] malloc*(size: INTEGER): INTEGER;
|
PROCEDURE [stdcall] malloc*(size: INTEGER): INTEGER;
|
||||||
|
VAR ptr: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
sys.CODE("60"); (* pusha *)
|
sys.CODE("60"); (* pusha *)
|
||||||
size := sysfunc3(68, 12, size);
|
IF sysfunc2(18, 16) > ASR(size, 10) THEN
|
||||||
|
ptr := sysfunc3(68, 12, size);
|
||||||
|
IF ptr # 0 THEN
|
||||||
|
mem_commit(ptr, size)
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
ptr := 0
|
||||||
|
END;
|
||||||
sys.CODE("61") (* popa *)
|
sys.CODE("61") (* popa *)
|
||||||
RETURN size
|
RETURN ptr
|
||||||
END malloc;
|
END malloc;
|
||||||
|
|
||||||
PROCEDURE [stdcall] free*(ptr: INTEGER): INTEGER;
|
PROCEDURE [stdcall] free*(ptr: INTEGER): INTEGER;
|
||||||
@ -311,6 +327,7 @@ END dll_Init;
|
|||||||
PROCEDURE LoadLib*(name: ARRAY OF CHAR): INTEGER;
|
PROCEDURE LoadLib*(name: ARRAY OF CHAR): INTEGER;
|
||||||
VAR Lib: INTEGER;
|
VAR Lib: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
DLL_INIT := dll_Init;
|
||||||
Lib := sysfunc3(68, 19, sys.ADR(name[0]));
|
Lib := sysfunc3(68, 19, sys.ADR(name[0]));
|
||||||
IF Lib # 0 THEN
|
IF Lib # 0 THEN
|
||||||
init(Lib)
|
init(Lib)
|
||||||
@ -318,6 +335,4 @@ BEGIN
|
|||||||
RETURN Lib
|
RETURN Lib
|
||||||
END LoadLib;
|
END LoadLib;
|
||||||
|
|
||||||
BEGIN
|
|
||||||
DLL_INIT := dll_Init
|
|
||||||
END KOSAPI.
|
END KOSAPI.
|
@ -115,7 +115,7 @@ BEGIN
|
|||||||
Char(0AX)
|
Char(0AX)
|
||||||
END Ln;
|
END Ln;
|
||||||
|
|
||||||
PROCEDURE FixReal*(x: LONGREAL; width, p: INTEGER);
|
PROCEDURE _FixReal(x: LONGREAL; width, p: INTEGER);
|
||||||
VAR e, len, i: INTEGER; y: LONGREAL; minus: BOOLEAN;
|
VAR e, len, i: INTEGER; y: LONGREAL; minus: BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF IsNan(x) OR IsInf(x) THEN
|
IF IsNan(x) OR IsInf(x) THEN
|
||||||
@ -195,7 +195,7 @@ BEGIN
|
|||||||
DEC(p)
|
DEC(p)
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
END FixReal;
|
END _FixReal;
|
||||||
|
|
||||||
PROCEDURE Real*(x: LONGREAL; width: INTEGER);
|
PROCEDURE Real*(x: LONGREAL; width: INTEGER);
|
||||||
VAR e, n, i: INTEGER; minus: BOOLEAN;
|
VAR e, n, i: INTEGER; minus: BOOLEAN;
|
||||||
@ -236,7 +236,8 @@ BEGIN
|
|||||||
IF minus THEN
|
IF minus THEN
|
||||||
x := -x
|
x := -x
|
||||||
END;
|
END;
|
||||||
FixReal(x, width, width - 3);
|
Realp := Real;
|
||||||
|
_FixReal(x, width, width - 3);
|
||||||
Char("E");
|
Char("E");
|
||||||
IF e >= 0 THEN
|
IF e >= 0 THEN
|
||||||
Char("+")
|
Char("+")
|
||||||
@ -254,9 +255,13 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END Real;
|
END Real;
|
||||||
|
|
||||||
|
PROCEDURE FixReal*(x: LONGREAL; width, p: INTEGER);
|
||||||
|
BEGIN
|
||||||
|
Realp := Real;
|
||||||
|
_FixReal(x, width, p)
|
||||||
|
END FixReal;
|
||||||
|
|
||||||
PROCEDURE Open*;
|
PROCEDURE Open*;
|
||||||
END Open;
|
END Open;
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Realp := Real
|
|
||||||
END Out.
|
END Out.
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
MODULE kfonts;
|
MODULE kfonts;
|
||||||
|
|
||||||
IMPORT sys := SYSTEM;
|
IMPORT sys := SYSTEM, File, KOSAPI;
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
|
|
||||||
@ -49,36 +49,6 @@ TYPE
|
|||||||
TFont* = POINTER TO TFont_desc;
|
TFont* = POINTER TO TFont_desc;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE [stdcall] LoadFile(file_name: INTEGER; VAR size: INTEGER): INTEGER;
|
|
||||||
BEGIN
|
|
||||||
sys.CODE("53"); (* push ebx *)
|
|
||||||
sys.CODE("6A44"); (* push 68 *)
|
|
||||||
sys.CODE("58"); (* pop eax *)
|
|
||||||
sys.CODE("6A1B"); (* push 27 *)
|
|
||||||
sys.CODE("5B"); (* pop ebx *)
|
|
||||||
sys.CODE("8B4D08"); (* mov ecx, [ebp + 08h] *)
|
|
||||||
sys.CODE("CD40"); (* int 40h *)
|
|
||||||
sys.CODE("8B4D0C"); (* mov ecx, [ebp + 0Ch] *)
|
|
||||||
sys.CODE("8911"); (* mov [ecx], edx *)
|
|
||||||
sys.CODE("5B"); (* pop ebx *)
|
|
||||||
sys.CODE("C9"); (* leave *)
|
|
||||||
sys.CODE("C20800"); (* ret 08h *)
|
|
||||||
RETURN 0
|
|
||||||
END LoadFile;
|
|
||||||
|
|
||||||
PROCEDURE [stdcall] sysfunc3(arg1, arg2, arg3: INTEGER): INTEGER;
|
|
||||||
BEGIN
|
|
||||||
sys.CODE("53"); (* push ebx *)
|
|
||||||
sys.CODE("8B4508"); (* mov eax, [ebp + 08h] *)
|
|
||||||
sys.CODE("8B5D0C"); (* mov ebx, [ebp + 0Ch] *)
|
|
||||||
sys.CODE("8B4D10"); (* mov ecx, [ebp + 10h] *)
|
|
||||||
sys.CODE("CD40"); (* int 40h *)
|
|
||||||
sys.CODE("5B"); (* pop ebx *)
|
|
||||||
sys.CODE("C9"); (* leave *)
|
|
||||||
sys.CODE("C20C00"); (* ret 0Ch *)
|
|
||||||
RETURN 0
|
|
||||||
END sysfunc3;
|
|
||||||
|
|
||||||
PROCEDURE [stdcall] zeromem(size, adr: INTEGER);
|
PROCEDURE [stdcall] zeromem(size, adr: INTEGER);
|
||||||
BEGIN
|
BEGIN
|
||||||
sys.CODE("578B7D0C8B4D0833C09CFCF3AB9D5F")
|
sys.CODE("578B7D0C8B4D0833C09CFCF3AB9D5F")
|
||||||
@ -260,13 +230,13 @@ BEGIN
|
|||||||
xsize := glyph.xsize;
|
xsize := glyph.xsize;
|
||||||
xmax := x0 + xsize;
|
xmax := x0 + xsize;
|
||||||
mem := Font.mem + glyph.base;
|
mem := Font.mem + glyph.base;
|
||||||
|
getrgb(color, r0, g0, b0);
|
||||||
FOR i := mem TO mem + xsize * Font.height - 1 DO
|
FOR i := mem TO mem + xsize * Font.height - 1 DO
|
||||||
sys.GET(i, ch);
|
sys.GET(i, ch);
|
||||||
IF ch = 1X THEN
|
IF ch = 1X THEN
|
||||||
pset(buf, x, y, color, bpp32)
|
pset(buf, x, y, color, bpp32);
|
||||||
ELSIF (ch = 2X) & smoothing THEN
|
ELSIF (ch = 2X) & smoothing THEN
|
||||||
getrgb(pget(buf, x, y, bpp32), r, g, b);
|
getrgb(pget(buf, x, y, bpp32), r, g, b);
|
||||||
getrgb(color, r0, g0, b0);
|
|
||||||
r := (r * 3 + r0) DIV 4;
|
r := (r * 3 + r0) DIV 4;
|
||||||
g := (g * 3 + g0) DIV 4;
|
g := (g * 3 + g0) DIV 4;
|
||||||
b := (b * 3 + b0) DIV 4;
|
b := (b * 3 + b0) DIV 4;
|
||||||
@ -289,31 +259,6 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END hline;
|
END hline;
|
||||||
|
|
||||||
PROCEDURE TextOut*(Font: TFont; canvas, x, y, str, length, color, params: INTEGER);
|
|
||||||
VAR width: INTEGER; c: CHAR; bpp32, smoothing: BOOLEAN;
|
|
||||||
BEGIN
|
|
||||||
IF Font # NIL THEN
|
|
||||||
smoothing := 4 IN BITS(params);
|
|
||||||
bpp32 := 5 IN BITS(params);
|
|
||||||
sys.GET(str, c);
|
|
||||||
WHILE (length > 0) OR (length = -1) & (c # 0X) DO
|
|
||||||
INC(str);
|
|
||||||
width := OutChar(Font^, ORD(c), x, y, canvas, bpp32, smoothing, color, params);
|
|
||||||
IF 3 IN BITS(params) THEN
|
|
||||||
hline(canvas, x + ORD(1 IN BITS(params)) * ((Font.height DIV 2) DIV 3), y + Font.height DIV 2, width, color, bpp32)
|
|
||||||
END;
|
|
||||||
IF 2 IN BITS(params) THEN
|
|
||||||
hline(canvas, x, y + Font.height - 1, width, color, bpp32)
|
|
||||||
END;
|
|
||||||
x := x + width;
|
|
||||||
IF length > 0 THEN
|
|
||||||
DEC(length)
|
|
||||||
END;
|
|
||||||
sys.GET(str, c)
|
|
||||||
END
|
|
||||||
END
|
|
||||||
END TextOut;
|
|
||||||
|
|
||||||
PROCEDURE TextWidth*(Font: TFont; str, length, params: INTEGER): INTEGER;
|
PROCEDURE TextWidth*(Font: TFont; str, length, params: INTEGER): INTEGER;
|
||||||
VAR res: INTEGER; c: CHAR;
|
VAR res: INTEGER; c: CHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -327,9 +272,11 @@ BEGIN
|
|||||||
IF length > 0 THEN
|
IF length > 0 THEN
|
||||||
DEC(length)
|
DEC(length)
|
||||||
END;
|
END;
|
||||||
|
IF length # 0 THEN
|
||||||
sys.GET(str, c)
|
sys.GET(str, c)
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
END
|
||||||
RETURN res
|
RETURN res
|
||||||
END TextWidth;
|
END TextWidth;
|
||||||
|
|
||||||
@ -344,6 +291,74 @@ BEGIN
|
|||||||
RETURN res
|
RETURN res
|
||||||
END TextHeight;
|
END TextHeight;
|
||||||
|
|
||||||
|
PROCEDURE TextClipLeft(Font: TFont; str, length, params: INTEGER; VAR x: INTEGER): INTEGER;
|
||||||
|
VAR x1: INTEGER; c: CHAR;
|
||||||
|
BEGIN
|
||||||
|
params := params MOD 4;
|
||||||
|
sys.GET(str, c);
|
||||||
|
WHILE (length > 0) OR (length = -1) & (c # 0X) DO
|
||||||
|
INC(str);
|
||||||
|
x1 := x;
|
||||||
|
x := x + Font.glyphs[params, ORD(c)].width;
|
||||||
|
IF x > 0 THEN
|
||||||
|
length := 0;
|
||||||
|
END;
|
||||||
|
IF length > 0 THEN
|
||||||
|
DEC(length)
|
||||||
|
END;
|
||||||
|
IF length # 0 THEN
|
||||||
|
sys.GET(str, c)
|
||||||
|
END
|
||||||
|
END;
|
||||||
|
x := x1
|
||||||
|
RETURN str - 1
|
||||||
|
END TextClipLeft;
|
||||||
|
|
||||||
|
PROCEDURE TextOut*(Font: TFont; canvas, x, y, str, length, color, params: INTEGER);
|
||||||
|
VAR width, xsize, ysize, str1, n: INTEGER; c: CHAR; bpp32, smoothing, underline, strike: BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
IF Font # NIL THEN
|
||||||
|
sys.GET(canvas, xsize);
|
||||||
|
sys.GET(canvas + 4, ysize);
|
||||||
|
IF (y <= -TextHeight(Font)) OR (y >= ysize) THEN
|
||||||
|
length := 0
|
||||||
|
END;
|
||||||
|
IF length # 0 THEN
|
||||||
|
smoothing := 4 IN BITS(params);
|
||||||
|
bpp32 := 5 IN BITS(params);
|
||||||
|
underline := 2 IN BITS(params);
|
||||||
|
strike := 3 IN BITS(params);
|
||||||
|
str1 := TextClipLeft(Font, str, length, params, x);
|
||||||
|
n := str1 - str;
|
||||||
|
str := str1;
|
||||||
|
IF length >= n THEN
|
||||||
|
length := length - n
|
||||||
|
END;
|
||||||
|
sys.GET(str, c)
|
||||||
|
END;
|
||||||
|
WHILE (length > 0) OR (length = -1) & (c # 0X) DO
|
||||||
|
INC(str);
|
||||||
|
width := OutChar(Font^, ORD(c), x, y, canvas, bpp32, smoothing, color, params);
|
||||||
|
IF strike THEN
|
||||||
|
hline(canvas, x + ORD(1 IN BITS(params)) * ((Font.height DIV 2) DIV 3), y + Font.height DIV 2, width + 2, color, bpp32)
|
||||||
|
END;
|
||||||
|
IF underline THEN
|
||||||
|
hline(canvas, x, y + Font.height - 1, width + 2, color, bpp32)
|
||||||
|
END;
|
||||||
|
x := x + width;
|
||||||
|
IF x > xsize THEN
|
||||||
|
length := 0
|
||||||
|
END;
|
||||||
|
IF length > 0 THEN
|
||||||
|
DEC(length)
|
||||||
|
END;
|
||||||
|
IF length # 0 THEN
|
||||||
|
sys.GET(str, c)
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END
|
||||||
|
END TextOut;
|
||||||
|
|
||||||
PROCEDURE SetSize*(_Font: TFont; font_size: INTEGER): BOOLEAN;
|
PROCEDURE SetSize*(_Font: TFont; font_size: INTEGER): BOOLEAN;
|
||||||
VAR temp, offset, fsize, i, memsize, mem: INTEGER;
|
VAR temp, offset, fsize, i, memsize, mem: INTEGER;
|
||||||
c: CHAR; Font, Font2: TFont_desc;
|
c: CHAR; Font, Font2: TFont_desc;
|
||||||
@ -381,10 +396,10 @@ BEGIN
|
|||||||
Font.mempos := 0;
|
Font.mempos := 0;
|
||||||
memsize := (Font.width + 10) * Font.height * 1024;
|
memsize := (Font.width + 10) * Font.height * 1024;
|
||||||
mem := Font.mem;
|
mem := Font.mem;
|
||||||
Font.mem := sysfunc3(68, 12, memsize);
|
Font.mem := KOSAPI.sysfunc3(68, 12, memsize);
|
||||||
IF Font.mem # 0 THEN
|
IF Font.mem # 0 THEN
|
||||||
IF mem # 0 THEN
|
IF mem # 0 THEN
|
||||||
mem := sysfunc3(68, 13, mem)
|
mem := KOSAPI.sysfunc3(68, 13, mem)
|
||||||
END;
|
END;
|
||||||
zeromem(memsize DIV 4, Font.mem);
|
zeromem(memsize DIV 4, Font.mem);
|
||||||
FOR i := 0 TO 255 DO
|
FOR i := 0 TO 255 DO
|
||||||
@ -441,10 +456,10 @@ PROCEDURE Destroy*(VAR Font: TFont);
|
|||||||
BEGIN
|
BEGIN
|
||||||
IF Font # NIL THEN
|
IF Font # NIL THEN
|
||||||
IF Font.mem # 0 THEN
|
IF Font.mem # 0 THEN
|
||||||
Font.mem := sysfunc3(68, 13, Font.mem)
|
Font.mem := KOSAPI.sysfunc3(68, 13, Font.mem)
|
||||||
END;
|
END;
|
||||||
IF Font.data # 0 THEN
|
IF Font.data # 0 THEN
|
||||||
Font.data := sysfunc3(68, 13, Font.data)
|
Font.data := KOSAPI.sysfunc3(68, 13, Font.data)
|
||||||
END;
|
END;
|
||||||
DISPOSE(Font)
|
DISPOSE(Font)
|
||||||
END
|
END
|
||||||
@ -453,7 +468,7 @@ END Destroy;
|
|||||||
PROCEDURE LoadFont*(file_name: ARRAY OF CHAR): TFont;
|
PROCEDURE LoadFont*(file_name: ARRAY OF CHAR): TFont;
|
||||||
VAR Font: TFont; data, size, n: INTEGER;
|
VAR Font: TFont; data, size, n: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
data := LoadFile(sys.ADR(file_name[0]), size);
|
data := File.Load(file_name, size);
|
||||||
IF (data # 0) & (size > 156) THEN
|
IF (data # 0) & (size > 156) THEN
|
||||||
NEW(Font);
|
NEW(Font);
|
||||||
Font.data := data;
|
Font.data := data;
|
||||||
@ -468,7 +483,7 @@ BEGIN
|
|||||||
END
|
END
|
||||||
ELSE
|
ELSE
|
||||||
IF data # 0 THEN
|
IF data # 0 THEN
|
||||||
data := sysfunc3(68, 13, data)
|
data := KOSAPI.sysfunc3(68, 13, data)
|
||||||
END;
|
END;
|
||||||
Font := NIL
|
Font := NIL
|
||||||
END
|
END
|
||||||
|
Loading…
Reference in New Issue
Block a user