/programs/develop/oberon07/Samples/Dialogs.ob07 |
---|
0,0 → 1,114 |
MODULE Dialogs; |
IMPORT KOSAPI, sys := SYSTEM, OpenDlg, ColorDlg; |
VAR header: ARRAY 1024 OF CHAR; back_color: INTEGER; |
PROCEDURE WindowRedrawStatus(p: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc2(12, p) |
END WindowRedrawStatus; |
PROCEDURE DefineAndDrawWindow(x, y, w, h, color, style, hcolor, hstyle, htext: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), htext) |
END DefineAndDrawWindow; |
PROCEDURE WaitForEvent(): INTEGER; |
RETURN KOSAPI.sysfunc1(10) |
END WaitForEvent; |
PROCEDURE ExitApp; |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc1(-1) |
END ExitApp; |
PROCEDURE pause(t: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc2(5, t) |
END pause; |
PROCEDURE Buttons; |
PROCEDURE Button(id, X, Y, W, H: INTEGER; Caption: ARRAY OF CHAR); |
VAR n, aux: INTEGER; |
BEGIN |
n := LENGTH(Caption); |
aux := KOSAPI.sysfunc5(8, X * 65536 + W, Y * 65536 + H, id, 00C0C0C0H); |
X := X + (W - 8 * n) DIV 2; |
Y := Y + (H - 14) DIV 2; |
aux := KOSAPI.sysfunc6(4, X * 65536 + Y, LSL(48, 24), sys.ADR(Caption[0]), n, 0) |
END Button; |
BEGIN |
Button(17, 5, 5, 70, 25, "open"); |
Button(18, 85, 5, 70, 25, "color"); |
END Buttons; |
PROCEDURE draw_window; |
BEGIN |
WindowRedrawStatus(1); |
DefineAndDrawWindow(200, 200, 500, 100, back_color, 51, 0, 0, sys.ADR(header[0])); |
Buttons; |
WindowRedrawStatus(2); |
END draw_window; |
PROCEDURE OpenFile(Open: OpenDlg.Dialog); |
BEGIN |
IF Open # NIL THEN |
OpenDlg.Show(Open, 500, 450); |
WHILE Open.status = 2 DO |
pause(30) |
END; |
IF Open.status = 1 THEN |
COPY(Open.FilePath, header) |
END |
END |
END OpenFile; |
PROCEDURE SelColor(Color: ColorDlg.Dialog); |
BEGIN |
IF Color # NIL THEN |
ColorDlg.Show(Color); |
WHILE Color.status = 2 DO |
pause(30) |
END; |
IF Color.status = 1 THEN |
back_color := Color.color |
END |
END |
END SelColor; |
PROCEDURE main; |
VAR Open: OpenDlg.Dialog; Color: ColorDlg.Dialog; res, al: INTEGER; |
BEGIN |
back_color := 00FFFFFFH; |
header := "Dialogs"; |
draw_window; |
Open := OpenDlg.Create(draw_window, 0, "/rd/1", "ASM|TXT|INI"); |
Color := ColorDlg.Create(draw_window); |
WHILE TRUE DO |
CASE WaitForEvent() OF |
|1: draw_window |
|3: res := KOSAPI.sysfunc1(17); |
al := LSR(LSL(res, 24), 24); |
res := LSR(res, 8); |
IF al = 0 THEN |
CASE res OF |
| 1: ExitApp |
|17: OpenFile(Open) |
|18: SelColor(Color) |
END |
END |
ELSE |
END |
END |
END main; |
BEGIN |
main |
END Dialogs. |
/programs/develop/oberon07/Samples/HW.ob07 |
---|
0,0 → 1,54 |
MODULE HW; |
IMPORT sys := SYSTEM, KOSAPI; |
PROCEDURE WindowRedrawStatus(p: INTEGER); |
VAR res: INTEGER; |
BEGIN |
res := KOSAPI.sysfunc2(12, p) |
END WindowRedrawStatus; |
PROCEDURE DefineAndDrawWindow(x, y, w, h, color, style, hcolor, hstyle, htext: INTEGER); |
VAR res: INTEGER; |
BEGIN |
res := KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), htext) |
END DefineAndDrawWindow; |
PROCEDURE WriteTextToWindow(x, y, color: INTEGER; text: ARRAY OF CHAR); |
VAR res: INTEGER; |
BEGIN |
res := KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(48, 24), sys.ADR(text[0]), LENGTH(text), 0) |
END WriteTextToWindow; |
PROCEDURE WaitForEvent(): INTEGER; |
RETURN KOSAPI.sysfunc1(10) |
END WaitForEvent; |
PROCEDURE ExitApp; |
VAR res: INTEGER; |
BEGIN |
res := KOSAPI.sysfunc1(-1) |
END ExitApp; |
PROCEDURE draw_window(header, text: ARRAY OF CHAR); |
BEGIN |
WindowRedrawStatus(1); |
DefineAndDrawWindow(200, 200, 200, 100, 0FFFFFFH, 51, 0, 0, sys.ADR(header)); |
WriteTextToWindow(10, 10, 0FF0000H, text); |
WindowRedrawStatus(2); |
END draw_window; |
PROCEDURE Main(header, text: ARRAY OF CHAR); |
BEGIN |
WHILE TRUE DO |
CASE WaitForEvent() OF |
|1: draw_window(header, text) |
|3: ExitApp |
ELSE |
END |
END |
END Main; |
BEGIN |
Main("HW", "Hello, world!") |
END HW. |
/programs/develop/oberon07/Samples/HW_con.ob07 |
---|
0,0 → 1,53 |
MODULE HW_con; |
IMPORT Out, In, Console, DateTime, ConsoleLib; |
PROCEDURE OutInt2(n: INTEGER); |
BEGIN |
ASSERT((0 <= n) & (n <= 99)); |
IF n < 10 THEN |
Out.Char("0") |
END; |
Out.Int(n, 0) |
END OutInt2; |
PROCEDURE OutMonth(n: INTEGER); |
VAR str: ARRAY 4 OF CHAR; |
BEGIN |
CASE n OF |
| 1: str := "jan" |
| 2: str := "feb" |
| 3: str := "mar" |
| 4: str := "apr" |
| 5: str := "may" |
| 6: str := "jun" |
| 7: str := "jul" |
| 8: str := "aug" |
| 9: str := "sep" |
|10: str := "oct" |
|11: str := "nov" |
|12: str := "dec" |
END; |
Out.String(str) |
END OutMonth; |
PROCEDURE main; |
VAR Year, Month, Day, Hour, Min, Sec: INTEGER; |
BEGIN |
ConsoleLib.open(-1, -1, -1, -1, "Hello!"); |
Out.String("Hello, world!"); Out.Ln; |
Console.SetColor(Console.Yellow, Console.Blue); |
DateTime.Now(Year, Month, Day, Hour, Min, Sec); |
Out.Int(Year, 0); Out.Char("-"); |
OutMonth(Month); Out.Char("-"); |
OutInt2(Day); Out.Char(" "); |
OutInt2(Hour); Out.Char(":"); |
OutInt2(Min); Out.Char(":"); |
OutInt2(Sec); |
In.Ln; |
ConsoleLib.exit(TRUE) |
END main; |
BEGIN |
main |
END HW_con. |
/programs/develop/oberon07/Samples/RasterW.ob07 |
---|
0,0 → 1,159 |
MODULE RasterW; |
IMPORT sys := SYSTEM, RW := RasterWorks, KOSAPI; |
TYPE |
TWindow = RECORD |
Left, Top, Width, Height: INTEGER; |
Color: INTEGER; |
Header: ARRAY 256 OF CHAR |
END; |
VAR |
canvas : INTEGER; |
bpp32 : BOOLEAN; |
PROCEDURE CreateCanvas(width, height: INTEGER; bpp32: BOOLEAN): INTEGER; |
VAR canvas: INTEGER; |
BEGIN |
canvas := KOSAPI.malloc(width * height * (3 + ORD(bpp32)) + 8); |
sys.PUT(canvas, width); |
sys.PUT(canvas + 4, height) |
RETURN canvas |
END CreateCanvas; |
PROCEDURE ClearCanvas(canvas, color: INTEGER; bpp32: BOOLEAN); |
VAR data, width, height, i: INTEGER; |
BEGIN |
sys.GET(canvas, width); |
sys.GET(canvas + 4, height); |
data := canvas + 8; |
IF bpp32 THEN |
FOR i := 1 TO width * height DO |
sys.PUT(data, color); INC(data, 4) |
END |
ELSE |
FOR i := 1 TO width * height - 1 DO |
sys.PUT(data, color); INC(data, 3) |
END; |
sys.MOVE(sys.ADR(color), data, 3) |
END |
END ClearCanvas; |
PROCEDURE WindowRedrawStatus(p: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc2(12, p) |
END WindowRedrawStatus; |
PROCEDURE DefineAndDrawWindow(x, y, width, height, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc6(0, x * 65536 + width, y * 65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), sys.ADR(htext[0])) |
END DefineAndDrawWindow; |
PROCEDURE WaitForEvent(): INTEGER; |
RETURN KOSAPI.sysfunc1(10) |
END WaitForEvent; |
PROCEDURE ExitApp; |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc1(-1) |
END ExitApp; |
PROCEDURE DrawCanvas(canvas: INTEGER; x, y: INTEGER; bpp32: BOOLEAN); |
VAR xsize, ysize, aux: INTEGER; |
BEGIN |
sys.GET(canvas, xsize); |
sys.GET(canvas + 4, ysize); |
aux := KOSAPI.sysfunc7(65, canvas + 8, xsize * 65536 + ysize, x * 65536 + y, 24 + 8 * ORD(bpp32), 0, 0) |
END DrawCanvas; |
PROCEDURE TextOut(canvas, x, y: INTEGER; string: ARRAY OF CHAR; color, params: INTEGER); |
VAR width: INTEGER; |
BEGIN |
width := RW.drawText(canvas, x, y, sys.ADR(string[0]), LENGTH(string), color + 0FF000000H, params) |
END TextOut; |
PROCEDURE DrawText; |
VAR x, y: INTEGER; |
BEGIN |
ClearCanvas(canvas, 00FFFFFFH, bpp32); |
x := 0; y := 0; |
TextOut(canvas, x, y, "font size 16", 000000FFH, RW.params( 16, 0, RW.cp866, RW.bpp32 * ORD(bpp32) ) ); |
y := y + 16; |
x := x + 20; |
TextOut(canvas, x, y, "font size 12", 00FF0000H, RW.params( 12, 0, RW.cp866, RW.bpp32 * ORD(bpp32) ) ); |
y := y + 12; |
x := x + 20; |
TextOut(canvas, x, y, "italic", 00808080H, RW.params( 16, 0, RW.cp866, RW.bpp32 * ORD(bpp32) + RW.italic ) ); |
y := y + 16; |
x := x + 20; |
TextOut(canvas, x, y, "bold", 00000000H, RW.params( 16, 0, RW.cp866, RW.bpp32 * ORD(bpp32) + RW.bold ) ); |
y := y + 16; |
x := x + 20; |
TextOut(canvas, x, y, "underline", 00000000H, RW.params( 16, 0, RW.cp866, RW.bpp32 * ORD(bpp32) + RW.underline ) ); |
y := y + 16; |
x := x + 20; |
TextOut(canvas, x, y, "strike-through", 00000000H, RW.params( 16, 0, RW.cp866, RW.bpp32 * ORD(bpp32) + RW.strike_through ) ); |
y := y + 16; |
x := x + 20; |
DrawCanvas(canvas, 10, 10, bpp32); |
END DrawText; |
PROCEDURE draw_window(Window: TWindow); |
BEGIN |
WindowRedrawStatus(1); |
DefineAndDrawWindow(Window.Left, Window.Top, Window.Width, Window.Height, Window.Color, 51, 0, 0, Window.Header); |
DrawText; |
WindowRedrawStatus(2); |
END draw_window; |
PROCEDURE main; |
VAR Window: TWindow; |
BEGIN |
Window.Left := 200; |
Window.Top := 200; |
Window.Width := 400; |
Window.Height := 300; |
Window.Color := 00C0C0C0H; |
Window.Header := "RasterWorks"; |
bpp32 := FALSE; |
canvas := CreateCanvas(Window.Width - 30, Window.Height - 50, bpp32); |
WHILE TRUE DO |
CASE WaitForEvent() OF |
|1: draw_window(Window) |
|3: ExitApp |
ELSE |
END |
END |
END main; |
BEGIN |
main |
END RasterW. |
/programs/develop/oberon07/Samples/kfont.ob07 |
---|
0,0 → 1,175 |
MODULE kfont; |
IMPORT sys := SYSTEM, kfonts, KOSAPI; |
CONST |
FileName = "/rd/1/fonts/tahoma.kf"; |
TYPE |
TWindow = RECORD |
Left, Top, Width, Height: INTEGER; |
Color: INTEGER; |
Header: ARRAY 256 OF CHAR |
END; |
VAR |
canvas : INTEGER; |
bpp32 : BOOLEAN; |
Font12, Font16: kfonts.TFont; |
PROCEDURE CreateCanvas(width, height: INTEGER; bpp32: BOOLEAN): INTEGER; |
VAR canvas: INTEGER; |
BEGIN |
canvas := KOSAPI.malloc(width * height * (3 + ORD(bpp32)) + 8); |
sys.PUT(canvas, width); |
sys.PUT(canvas + 4, height) |
RETURN canvas |
END CreateCanvas; |
PROCEDURE ClearCanvas(canvas, color: INTEGER; bpp32: BOOLEAN); |
VAR data, width, height, i: INTEGER; |
BEGIN |
sys.GET(canvas, width); |
sys.GET(canvas + 4, height); |
data := canvas + 8; |
IF bpp32 THEN |
FOR i := 1 TO width * height DO |
sys.PUT(data, color); INC(data, 4) |
END |
ELSE |
FOR i := 1 TO width * height - 1 DO |
sys.PUT(data, color); INC(data, 3) |
END; |
sys.MOVE(sys.ADR(color), data, 3) |
END |
END ClearCanvas; |
PROCEDURE WindowRedrawStatus(p: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc2(12, p) |
END WindowRedrawStatus; |
PROCEDURE DefineAndDrawWindow(x, y, width, height, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc6(0, x * 65536 + width, y * 65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), sys.ADR(htext[0])) |
END DefineAndDrawWindow; |
PROCEDURE WaitForEvent(): INTEGER; |
RETURN KOSAPI.sysfunc1(10) |
END WaitForEvent; |
PROCEDURE ExitApp; |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc1(-1) |
END ExitApp; |
PROCEDURE DrawCanvas(canvas: INTEGER; x, y: INTEGER; bpp32: BOOLEAN); |
VAR xsize, ysize, aux: INTEGER; |
BEGIN |
sys.GET(canvas, xsize); |
sys.GET(canvas + 4, ysize); |
aux := KOSAPI.sysfunc7(65, canvas + 8, xsize * 65536 + ysize, x * 65536 + y, 24 + 8 * ORD(bpp32), 0, 0) |
END DrawCanvas; |
PROCEDURE DrawText; |
VAR x, y: INTEGER; |
BEGIN |
ClearCanvas(canvas, 00FFFFFFH, bpp32); |
x := 0; y := 0; |
kfonts.TextOut(Font16, canvas, x, y, sys.ADR("font size 16"), -1, 000000FFH, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing ); |
y := y + kfonts.TextHeight( Font16 ); |
x := x + 20; |
kfonts.TextOut(Font12, canvas, x, y, sys.ADR("font size 12"), -1, 00FF0000H, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing ); |
y := y + kfonts.TextHeight( Font12 ); |
x := x + 20; |
kfonts.TextOut(Font16, canvas, x, y, sys.ADR("italic"), -1, 00808080H, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing + kfonts.italic ); |
y := y + kfonts.TextHeight( Font16 ); |
x := x + 20; |
kfonts.TextOut(Font16, canvas, x, y, sys.ADR("bold"), -1, 00000000H, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing + kfonts.bold ); |
y := y + kfonts.TextHeight( Font16 ); |
x := x + 20; |
kfonts.TextOut(Font16, canvas, x, y, sys.ADR("underline"), -1, 00000000H, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing + kfonts.underline ); |
y := y + kfonts.TextHeight( Font16 ); |
x := x + 20; |
kfonts.TextOut(Font16, canvas, x, y, sys.ADR("strike-through"), -1, 00000000H, kfonts.bpp32 * ORD(bpp32) + kfonts.smoothing + kfonts.strike_through ); |
y := y + kfonts.TextHeight( Font16 ); |
x := x + 20; |
DrawCanvas(canvas, 10, 10, bpp32); |
END DrawText; |
PROCEDURE draw_window(Window: TWindow); |
BEGIN |
WindowRedrawStatus(1); |
DefineAndDrawWindow(Window.Left, Window.Top, Window.Width, Window.Height, Window.Color, 51, 0, 0, Window.Header); |
DrawText; |
WindowRedrawStatus(2); |
END draw_window; |
PROCEDURE main; |
VAR Window: TWindow; |
bool: BOOLEAN; |
BEGIN |
Window.Left := 200; |
Window.Top := 200; |
Window.Width := 400; |
Window.Height := 300; |
Window.Color := 00C0C0C0H; |
Window.Header := "kfonts"; |
bpp32 := TRUE; |
canvas := CreateCanvas(Window.Width - 30, Window.Height - 50, bpp32); |
Font12 := kfonts.LoadFont(FileName); |
IF kfonts.Enabled(Font12, 12) THEN |
bool := kfonts.SetSize(Font12, 12) |
END; |
Font16 := kfonts.LoadFont(FileName); |
IF kfonts.Enabled(Font16, 16) THEN |
bool := kfonts.SetSize(Font16, 16) |
END; |
WHILE TRUE DO |
CASE WaitForEvent() OF |
|1: draw_window(Window) |
|3: ExitApp |
ELSE |
END |
END |
END main; |
BEGIN |
main |
END kfont. |
/programs/develop/oberon07/Samples/lib_img.ob07 |
---|
0,0 → 1,97 |
MODULE lib_img; |
IMPORT sys := SYSTEM, KOSAPI, libimg, File; |
TYPE |
TWindow = RECORD |
Left, Top, Width, Height: INTEGER; |
Color: INTEGER; |
Header: ARRAY 256 OF CHAR |
END; |
VAR |
img, rgb, width, height: INTEGER; |
PROCEDURE WindowRedrawStatus(p: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc2(12, p) |
END WindowRedrawStatus; |
PROCEDURE DefineAndDrawWindow(x, y, width, height, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc6(0, x * 65536 + width, y * 65536 + height, color + LSL(style, 24), hcolor + LSL(hstyle, 24), sys.ADR(htext[0])) |
END DefineAndDrawWindow; |
PROCEDURE WaitForEvent(): INTEGER; |
RETURN KOSAPI.sysfunc1(10) |
END WaitForEvent; |
PROCEDURE PutImage(x, y, rgb, width, height: INTEGER); |
VAR aux: INTEGER; |
BEGIN |
aux := KOSAPI.sysfunc7(65, rgb + 8, width * 65536 + height, x * 65536 + y, 24, 0, 0) |
END PutImage; |
PROCEDURE draw_window(Window: TWindow); |
BEGIN |
WindowRedrawStatus(1); |
DefineAndDrawWindow(Window.Left, Window.Top, Window.Width, Window.Height, Window.Color, 51, 0, 0, Window.Header); |
PutImage(10, 10, rgb, width, height); |
WindowRedrawStatus(2) |
END draw_window; |
PROCEDURE LoadImage(FName: ARRAY OF CHAR); |
VAR data, size: INTEGER; |
BEGIN |
data := File.Load(FName, size); |
IF data # 0 THEN |
img := libimg.img_decode(data, size, 0); |
data := KOSAPI.free(data); |
IF img # 0 THEN |
rgb := libimg.img_to_rgb(img); |
IF rgb # 0 THEN |
sys.GET(img + 4, width); |
sys.GET(img + 8, height) |
END |
END |
END |
END LoadImage; |
PROCEDURE main; |
VAR Window: TWindow; |
exit: BOOLEAN; |
BEGIN |
Window.Left := 200; |
Window.Top := 200; |
Window.Width := 400; |
Window.Height := 300; |
Window.Color := 00C0C0C0H; |
Window.Header := "libimg"; |
LoadImage("/rd/1/toolbar.png"); |
exit := FALSE; |
REPEAT |
CASE WaitForEvent() OF |
|1: draw_window(Window) |
|3: exit := TRUE |
ELSE |
END |
UNTIL exit |
END main; |
BEGIN |
main |
END lib_img. |