From cb77591be1223c5092065afd99049399a1330d7c Mon Sep 17 00:00:00 2001 From: zongor Date: Sun, 10 Sep 2023 15:25:00 -0400 Subject: [PATCH] update to use new sql stuff --- common/sql/test.db3 | Bin 8192 -> 12288 bytes fortran/README.md | 4 ++-- fortran/www/app/main.f90 | 6 +++++- fortran/www/fpm.toml | 1 - fortran/www/src/db.f90 | 43 ++++++++++++++++++++------------------- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/common/sql/test.db3 b/common/sql/test.db3 index d9b14ef744a5a45e89cdc98877909e2bdc0e3386..9f135d683e65a72332bf27b606e1a726812b3127 100644 GIT binary patch delta 374 zcmZp0Xh@hKEy%&Zz`zW}j6j-WqK+|8P%rHjFObK`ugSo#$)~rm@Bl9p<U;zMB|6ij3 delta 255 zcmZojXmFSyEy%>czyQK9z&KIIn4gJ3&-x=TP>7M=je*~7v!K8YzWPRUMs{&=amFU! zlEkE()Y9VAqGB+?wtWZ=KKnNi_9|KywU>Hwn;M~VOd diff --git a/fortran/README.md b/fortran/README.md index 8a2ba26..198d885 100644 --- a/fortran/README.md +++ b/fortran/README.md @@ -1,6 +1,6 @@ -# Programming Language Project Fortran Implementation +# Programming Language Project Fortran Implementation or, a Fortran CGI program abuses a sqlite3 database to implement a game server -[fortran-µhttpd (game website & webserver)](./www-f/README.md) +[fortran-µhttpd (game website & webserver)](./www/README.md) server (game backend) diff --git a/fortran/www/app/main.f90 b/fortran/www/app/main.f90 index 163e45c..28b429f 100644 --- a/fortran/www/app/main.f90 +++ b/fortran/www/app/main.f90 @@ -1,4 +1,5 @@ program main + use, intrinsic :: iso_c_binding use www use db implicit none @@ -58,6 +59,8 @@ contains character(len=24) :: username character(len=24) :: password character(len=8) :: appearance + real(kind=c_double) :: x_pos = 0.0_c_double + real(kind=c_double) :: y_pos = 0.0_c_double logical :: start = .false. type(db_type) :: db @@ -111,7 +114,8 @@ contains appearance = transfer(request(s_idx:length), appearance) rc = db_open(db, db_path(:Len_Trim(db_path))) - rc = db_add_user(db, username(:username_len), password(:password_len), appearance(:Len_Trim(appearance)), 0, 0, 0, time()) + rc = db_add_user(db, username(:username_len), password(:password_len), & + appearance(:Len_Trim(appearance)), x_pos, y_pos, 0, time()) rc = db_close(db) end subroutine add_user diff --git a/fortran/www/fpm.toml b/fortran/www/fpm.toml index 6b2cd6a..0345f87 100644 --- a/fortran/www/fpm.toml +++ b/fortran/www/fpm.toml @@ -5,7 +5,6 @@ maintainer = "admin@alfrescocavern.com" name = "fortran-micro-httpd" version = "0.1.0" [build] -link = ["pthread", "libdill"] auto-examples = true auto-executables = true auto-tests = false diff --git a/fortran/www/src/db.f90 b/fortran/www/src/db.f90 index 8c09651..91a8500 100644 --- a/fortran/www/src/db.f90 +++ b/fortran/www/src/db.f90 @@ -15,7 +15,7 @@ module db public :: db_close public :: db_open public :: db_create_users - public :: db_get_users + public :: db_get_logged_in_users public :: db_add_user public :: db_delete_user @@ -59,27 +59,27 @@ contains rc = db_exec(db, "CREATE TABLE users " & // "(id INTEGER PRIMARY KEY ASC, " & // "username TEXT, password TEXT, " & - // "apperance TEXT, x_pos INTEGER, " & - // "y_pos INTEGER, last_login INTEGER, " & + // "apperance TEXT, x_pos REAL, " & + // "y_pos REAL, logged_in INTEGER, " & // "created INTEGER);") if (rc /= SQLITE_OK) return end function db_create_users - integer function db_add_user(db, username, password, apperance, x_pos, y_pos, last_login, created) result(rc) + integer function db_add_user(db, username, password, apperance, x_pos, y_pos, logged_in, created) result(rc) !! Adds student to database. type(db_type), intent(inout) :: db character(len=*), intent(in) :: username character(len=*), intent(in) :: password character(len=*), intent(in) :: apperance - integer, intent(in) :: x_pos - integer, intent(in) :: y_pos - integer, intent(in) :: last_login - integer, intent(in) :: created + real(kind=c_double), intent(in) :: x_pos + real(kind=c_double), intent(in) :: y_pos + integer(kind=c_int), intent(in) :: logged_in + integer(kind=c_int), intent(in) :: created type(c_ptr) :: stmt ! Insert values through prepared statement. rc = sqlite3_prepare_v2(db%ptr, "INSERT INTO users(username, password, " & - //"apperance, x_pos, y_pos, last_login, created) VALUES (?,?,?,?,?,?,?)", stmt) + //"apperance, x_pos, y_pos, logged_in, created) VALUES (?,?,?,?,?,?,?)", stmt) call db_error(rc, 'sqlite3_prepare_v2()') rc = sqlite3_bind_text(stmt, 1, username) @@ -88,11 +88,11 @@ contains call db_error(rc, 'sqlite3_bind_text()') rc = sqlite3_bind_text(stmt, 3, apperance) call db_error(rc, 'sqlite3_bind_text()') - rc = sqlite3_bind_int(stmt, 4, x_pos) - call db_error(rc, 'sqlite3_bind_int()') - rc = sqlite3_bind_int(stmt, 5, y_pos) - call db_error(rc, 'sqlite3_bind_int()') - rc = sqlite3_bind_int(stmt, 6, last_login) + rc = sqlite3_bind_double(stmt, 4, x_pos) + call db_error(rc, 'sqlite3_bind_double()') + rc = sqlite3_bind_double(stmt, 5, y_pos) + call db_error(rc, 'sqlite3_bind_double()') + rc = sqlite3_bind_int(stmt, 6, logged_in) call db_error(rc, 'sqlite3_bind_int()') rc = sqlite3_bind_int(stmt, 7, created) call db_error(rc, 'sqlite3_bind_int()') @@ -129,17 +129,17 @@ contains call db_error(rc, 'sqlite3_finalize()') end function db_delete_user - integer function db_get_users(db) result(rc) + integer function db_get_logged_in_users(db) result(rc) !! Prints number of courses per student to standard output. type(db_type), intent(inout) :: db type(c_ptr) :: stmt character(len=24) :: username - character(len=24) :: password + real(kind=c_double) :: x_pos, y_pos rc = sqlite3_prepare_v2(db%ptr, & - "SELECT username, password " // & - "FROM users;", stmt) + "SELECT username, x_pos, y_pos " // & + "FROM users u WHERE u.logged_in = 1;", stmt) call db_error(rc, 'sqlite3_prepare_v2()') step_loop: do @@ -148,8 +148,9 @@ contains select case (rc) case (SQLITE_ROW) username = sqlite3_column_text(stmt, 0) - password = sqlite3_column_text(stmt, 1) - write(12, '(a)') username, password + x_pos = sqlite3_column_double(stmt, 1) + y_pos = sqlite3_column_double(stmt, 1) + write(12, *) username, x_pos, y_pos case (SQLITE_DONE) exit step_loop @@ -162,7 +163,7 @@ contains rc = sqlite3_finalize(stmt) call db_error(rc, 'sqlite3_finalize()') - end function db_get_users + end function db_get_logged_in_users subroutine db_error(code, proc, err_msg) !! Prints error message.