From d93b4d8dc6cdc146749e772a4f2be8b66015b3fa Mon Sep 17 00:00:00 2001 From: zongor Date: Sat, 25 Jan 2025 15:14:00 -0500 Subject: [PATCH] more examples --- docs/SPECIFICATION.MD | 2 +- docs/old/idea.zl-lisp | 8 +- docs/old/idea.zl0b | 5 +- docs/old/idea.zl2c | 116 ++++++++++++++++++ docs/old/project-example-v1/src/client.ztl | 100 +++++++++++++++ docs/old/project-example-v1/src/common.ztl | 19 +++ docs/old/project-example-v1/src/server.ztl | 63 ++++++++++ .../project.ztl | 0 .../src/client.ztl | 0 .../src/common.ztl | 0 .../src/server.ztl | 0 11 files changed, 306 insertions(+), 7 deletions(-) create mode 100644 docs/old/idea.zl2c create mode 100644 docs/old/project-example-v1/src/client.ztl create mode 100644 docs/old/project-example-v1/src/common.ztl create mode 100644 docs/old/project-example-v1/src/server.ztl rename docs/{project-example-v1 => project-example-v2}/project.ztl (100%) rename docs/{project-example-v1 => project-example-v2}/src/client.ztl (100%) rename docs/{project-example-v1 => project-example-v2}/src/common.ztl (100%) rename docs/{project-example-v1 => project-example-v2}/src/server.ztl (100%) diff --git a/docs/SPECIFICATION.MD b/docs/SPECIFICATION.MD index 0e14a5e..86f1c03 100644 --- a/docs/SPECIFICATION.MD +++ b/docs/SPECIFICATION.MD @@ -2,7 +2,7 @@ ## What is _ztl_? -_ztl_ is an language transpiler with C/Zig/Rust/Lua/Fortran/Javascript/Elixir style syntax. The transpiler bootstrap is written in Lua which should make it easy to port to other systems. +_ztl_ is an language transpiler with C/Zig/Rust style syntax. The transpiler bootstrap is written in Lua which should make it easy to port to other systems. _ztl_ also can "run" standalone inside of a lua vm for debugging purposes, it could be used for small scripting tasks or the like. # _ztl_ Grammar and Specification diff --git a/docs/old/idea.zl-lisp b/docs/old/idea.zl-lisp index 4619ff4..8f62bc5 100644 --- a/docs/old/idea.zl-lisp +++ b/docs/old/idea.zl-lisp @@ -2,11 +2,11 @@ (set screen-height 450) (set username (get argv 1)) (set password (get argv 2)) -(set me (make-player username (0.0 1.0 2.0) PURPLE)) +(set me (make :player username (0.0 1.0 2.0) PURPLE)) (set players (login me)) -(set camera (make-camera (me.pos.x, me.pos.y + 10.0, me.pos.z + 10.0) - (me.pos.x, me.pos.y, me.pos.z) - (0.0, 1.0, 0.0) +(set camera (make :camera (me.pos.x (add me.pos.y 10.0) (add me.pos.z 10.0)) + (me.pos.x me.pos.y me.pos.z) + (0.0 1.0 0.0) 45.0 CAMERA-PERSPECTIVE)) diff --git a/docs/old/idea.zl0b b/docs/old/idea.zl0b index c6fc5f4..87d36c2 100644 --- a/docs/old/idea.zl0b +++ b/docs/old/idea.zl0b @@ -23,7 +23,7 @@ (* do the login here *) } fn -255 255 0 :purple color +(255 255 0) :purple color :main { 800 :screen_width i32 @@ -72,7 +72,8 @@ camera me sync_camera - player_updated choose { + player_updated + choose { me move :players set } ifyes { me ping :players set diff --git a/docs/old/idea.zl2c b/docs/old/idea.zl2c new file mode 100644 index 0000000..dcabb96 --- /dev/null +++ b/docs/old/idea.zl2c @@ -0,0 +1,116 @@ +type :Vec { + f32 :x, + f32 :y, + f32 :z, +}; + +type :Color { + i8 :r, + i8 :g, + i8 :b, +}; + +type :Player { + str :username, + Vec :pos, + Color :color, +}; + +fn :login (Player str -> bool) { + set p to pop; /* getting the player from the stack */ + set password to pop; /* get the string from the stack */ + + return true; /* return back from function and push value on stack */ +}; + +Color :purple {255 255 0}; + +fn :main (i32 str[] -> i32) { + set :argc to pop; // to is a noop but makes it more readable + set :argv to pop; + + set :screen_width to i32 800; + set :screen_height to i32 450; + + set :username to argv[0]; + set :password to argv[1]; + + set :me to Player { // the brackets are for readablity, the ';' is neccisarry + username, + vec {0.0 1.0 2.0}, + purple, + }; + + set :players to Player[] { login me password; }; + + set :camera to Camera3D { + vec {0.0 1.0 0.0}, + i32 45.0, + atom :CAMERA_PERSPECTIVE, + vec { + add me.pos.x 10.0, + add me.pos.y 10.0, + me.pos.z, + }, + me.pos, + }; + + init_window "zwl client : raylib" screen_width screen_height; + set_target_fps 60; + + (* Main game loop *) + while ( not window_should_close ) { + + if (is_key_down :KEY_RIGHT) { + set me.pos.x to {add me.pos.x 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_LEFT) { + set me.pos.x to {sub me.pos.x 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_DOWN) { + set me.pos.z to {add me.pos.z 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_UP) { + set me.pos.z to {sub me.pos.z 0.2}; + set :player_updated true; + } + + sync_camera camera me; + + if (player_updated) { + set :players move me; + } else { + set :players ping me; + } + + begin_drawing; + clear_background RAYWHITE; + + begin_mode_3d camera; + + (* Draw floor *) + draw_grid 30 1.0; + + draw_cube me.pos 0.5 0.5 0.5 me.apperance; + + map :player players { + draw_cube player.pos 0.5 0.5 0.5 player.apperance; + } + + end_mode_3d; + + end_drawing; + } + /* Detect window close button or ESC key */ + + set :players to logout me; + close_window; /*Close window and OpenGL context */ +} + +main; \ No newline at end of file diff --git a/docs/old/project-example-v1/src/client.ztl b/docs/old/project-example-v1/src/client.ztl new file mode 100644 index 0000000..6e1323b --- /dev/null +++ b/docs/old/project-example-v1/src/client.ztl @@ -0,0 +1,100 @@ +use "common.ztl" + +fn :login (9p, Player, str -> []Player) { + set s to pop; + set p to pop; + set password to pop; + + s.auth(p.username, password); + return s.read("players"); +}; + +fn :main (i32 str[] -> i32) { + set :argc to pop; + set :argv to pop; + + set :screen_width to i32 800; + set :screen_height to i32 450; + + set :username to argv[0]; + set :password to argv[1]; + + set :me to Player { + username, + vec {0.0 1.0 2.0}, + purple, + }; + + set :players to Player[] { login me password; }; + + set :camera to Camera3D { + vec {0.0 1.0 0.0}, + i32 45.0, + atom :CAMERA_PERSPECTIVE, + vec { + add me.pos.x 10.0, + add me.pos.y 10.0, + me.pos.z, + }, + me.pos, + }; + + init_window "zwl client : raylib" screen_width screen_height; + set_target_fps 60; + + (* Main game loop *) + while ( not window_should_close ) { + + if (is_key_down :KEY_RIGHT) { + set me.pos.x to {add me.pos.x 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_LEFT) { + set me.pos.x to {sub me.pos.x 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_DOWN) { + set me.pos.z to {add me.pos.z 0.2}; + set :player_updated true; + } + + if (is_key_down :KEY_UP) { + set me.pos.z to {sub me.pos.z 0.2}; + set :player_updated true; + } + + sync_camera camera me; + + if (player_updated) { + set :players move me; + } else { + set :players ping me; + } + + begin_drawing; + clear_background RAYWHITE; + + begin_mode_3d camera; + + (* Draw floor *) + draw_grid 30 1.0; + + draw_cube me.pos 0.5 0.5 0.5 me.apperance; + + map :player players { + draw_cube player.pos 0.5 0.5 0.5 player.apperance; + } + + end_mode_3d; + + end_drawing; + } + /* Detect window close button or ESC key */ + + set :players to logout me; + close_window; /*Close window and OpenGL context */ +}; + +main; \ No newline at end of file diff --git a/docs/old/project-example-v1/src/common.ztl b/docs/old/project-example-v1/src/common.ztl new file mode 100644 index 0000000..1cb670f --- /dev/null +++ b/docs/old/project-example-v1/src/common.ztl @@ -0,0 +1,19 @@ +type :Vec { + f32 :x, + f32 :y, + f32 :z, +}; + +type :Color { + i8 :r, + i8 :g, + i8 :b, +}; + +type :Player { + str :username, + Vec :pos, + Color :color, +}; + +Color :purple {255 255 0}; diff --git a/docs/old/project-example-v1/src/server.ztl b/docs/old/project-example-v1/src/server.ztl new file mode 100644 index 0000000..6e6f755 --- /dev/null +++ b/docs/old/project-example-v1/src/server.ztl @@ -0,0 +1,63 @@ +use "common.ztl" + +fn :main(i32, []str -> i32) { + set :argc to pop; + set :argv to pop; + + set s to tunnel "0.0.0.0:25565"; + s.host ( + version, + auth, + error, + flush, + attach, + walk, + open, + create, + read, + write, + clunk, + remove, + stat, + ); +} + +fn :version(9pmsg) { + +} +fn :auth(9pmsg) { + +} +fn :error(9pmsg) { + +} +fn :flush(9pmsg) { + +} +fn :attach(9pmsg) { + +} +fn :walk(9pmsg) { + +} +fn :open(9pmsg) { + +} +fn :create(9pmsg) { + +} +fn :read(9pmsg) { + +} +fn :write(9pmsg) { + +} +fn :clunk(9pmsg) { + +} +fn :remove(9pmsg) { + +} +fn :stat(9pmsg) { + +} \ No newline at end of file diff --git a/docs/project-example-v1/project.ztl b/docs/project-example-v2/project.ztl similarity index 100% rename from docs/project-example-v1/project.ztl rename to docs/project-example-v2/project.ztl diff --git a/docs/project-example-v1/src/client.ztl b/docs/project-example-v2/src/client.ztl similarity index 100% rename from docs/project-example-v1/src/client.ztl rename to docs/project-example-v2/src/client.ztl diff --git a/docs/project-example-v1/src/common.ztl b/docs/project-example-v2/src/common.ztl similarity index 100% rename from docs/project-example-v1/src/common.ztl rename to docs/project-example-v2/src/common.ztl diff --git a/docs/project-example-v1/src/server.ztl b/docs/project-example-v2/src/server.ztl similarity index 100% rename from docs/project-example-v1/src/server.ztl rename to docs/project-example-v2/src/server.ztl