From 1d640efd7fb01c7286eb89f8ffdf778c4ee11c33 Mon Sep 17 00:00:00 2001 From: Joerg Siebenmorgen Date: Mon, 16 Mar 2026 22:23:24 +0100 Subject: [PATCH] COMMON: Implementation of TICKS(n) --- AUTHORS | 17 ++++++++--------- samples/distro-examples/examples/ticks.bas | 16 ++++++++++++++++ samples/distro-examples/tests/all.bas | 4 ++-- src/common/blib.c | 17 +++++++++++++++++ src/common/blib.h | 1 + src/common/blib_func.c | 5 ++++- src/common/brun.c | 3 +++ src/common/kw.h | 3 ++- src/languages/keywords.en.c | 3 ++- 9 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 samples/distro-examples/examples/ticks.bas diff --git a/AUTHORS b/AUTHORS index 0e2178650..3a72a2247 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,9 +1,8 @@ -Chris Warren-Smith cwarrensmith@gmail.com chrisws -Nicholas Christopoulos wired_gr@yahoo.com ndc -Gary A. Clark clarkg@fireserve.net gac -Bob Riess riessb@usa.net bob -Earle F. Philhower III earle@ziplabel.com efp -Laurent Poujoulat lpoujoulat@wanadoo.fr lap -Mehul Sanghvi mehul.sanghvi@gmail.com mnsanghvi - - +Chris Warren-Smith cwarrensmith@gmail.com chrisws +Nicholas Christopoulos wired_gr@yahoo.com ndc +Gary A. Clark clarkg@fireserve.net gac +Bob Riess riessb@usa.net bob +Earle F. Philhower III earle@ziplabel.com efp +Laurent Poujoulat lpoujoulat@wanadoo.fr lap +Mehul Sanghvi mehul.sanghvi@gmail.com mnsanghvi +Joerg Siebenmorgen siebenmorgen@mailbox.org j7m diff --git a/samples/distro-examples/examples/ticks.bas b/samples/distro-examples/examples/ticks.bas new file mode 100644 index 000000000..2789dc717 --- /dev/null +++ b/samples/distro-examples/examples/ticks.bas @@ -0,0 +1,16 @@ +print "step | ticks" +print "--------------|----------" + +print "initial ticks | "; ticks() +delay(100) +print "delay(100) | "; ticks() + +ticks(0) +print "ticks(0) | "; ticks() +delay(100) +print "delay(100) | "; ticks() + +ticks(1000) +print "ticks(1000) | "; ticks() +delay(100) +print "delay(100) | "; ticks() diff --git a/samples/distro-examples/tests/all.bas b/samples/distro-examples/tests/all.bas index 0c7b4a03f..c311dc320 100644 --- a/samples/distro-examples/tests/all.bas +++ b/samples/distro-examples/tests/all.bas @@ -29,7 +29,7 @@ print "CHDIR:" ':CHDIR dir print "CHMOD:" ':CHMOD file, mode print "CIRCLE:" ':CIRCLE [STEP] x,y,r [,aspect [, color]] [COLOR color] [FILLED] print "CLOSE:" ':CLOSE #fileN -print "CLS:" :CLS +print "CLS:"' :CLS print "COLOR:" :COLOR 1,2 print "COPY:" ':COPY "file", "newfile" print "DATEDMY:";: DATEDMY(2459590,jd,jm,jy): print jd;jm;jy @@ -230,7 +230,7 @@ print "TAN:" + TAN (x) print "TANH:" + TANH (x) print "TEXTHEIGHT:" + TEXTHEIGHT (s) print "TEXTWIDTH:" + TEXTWIDTH (s) -print "TICKS:"' + TICKS +print "TICKS:": TICKS(0): if(TICKS()) then throw "Ticks failed" print "TIME:"' + TIME print "TIMER:"' + TIMER print "TIMESTAMP:" '+ TIMESTAMP filename diff --git a/src/common/blib.c b/src/common/blib.c index 81eb9c4e6..682f9a9f9 100644 --- a/src/common/blib.c +++ b/src/common/blib.c @@ -16,6 +16,9 @@ #define STR_INIT_SIZE 256 #define PKG_INIT_SIZE 5 +// ticks(n) +extern var_int_t tickOffset; + /** * LET v[(x)] = any * CONST v[(x)] = any @@ -2374,6 +2377,20 @@ void cmd_environ() { v_free(&str); } +/** + * TICKS int + */ +void cmd_ticks(void) { + var_int_t offset; + + offset = par_getint(); + if (prog_error) { + return; + } + + tickOffset = dev_get_millisecond_count() - offset; +} + /** * DATEDMY string|julian, m, d, y */ diff --git a/src/common/blib.h b/src/common/blib.h index f35d6c2cf..028e79836 100644 --- a/src/common/blib.h +++ b/src/common/blib.h @@ -89,6 +89,7 @@ void cmd_datedmy(void); void cmd_timehms(void); void cmd_deriv(void); void cmd_diffeq(void); +void cmd_ticks(void); // not basic, but speed is needed void graph_reset(void); diff --git a/src/common/blib_func.c b/src/common/blib_func.c index aaee0d4c5..ba49333d6 100644 --- a/src/common/blib_func.c +++ b/src/common/blib_func.c @@ -30,6 +30,9 @@ static char *date_wdN_table[] = TABLE_WEEKDAYS_FULL; static char *date_m3_table[] = TABLE_MONTH_3C; static char *date_mN_table[] = TABLE_MONTH_FULL; +// ticks() +var_int_t tickOffset = 0; + #define BUF_LEN 64 #define BIN_LEN 32 // Number of max bits (digits) kwBIN creates @@ -752,7 +755,7 @@ var_int_t cmd_imath0(long funcCode) { // // int <- TICKS // clock() // - r = dev_get_millisecond_count(); + r = dev_get_millisecond_count() - tickOffset; break; case kwPROGLINE: // diff --git a/src/common/brun.c b/src/common/brun.c index e80da43eb..64675fca5 100644 --- a/src/common/brun.c +++ b/src/common/brun.c @@ -495,6 +495,9 @@ static inline void bc_loop_call_proc() { case kwAT: cmd_at(); break; + case kwTICKSP: + cmd_ticks(); + break; case kwPEN: cmd_pen(); break; diff --git a/src/common/kw.h b/src/common/kw.h index 8506885df..37eb13b72 100644 --- a/src/common/kw.h +++ b/src/common/kw.h @@ -246,7 +246,8 @@ enum proc_keywords { kwDEFINEKEY, kwSHOWPAGE, kwTHROW, - kwNULLPROC + kwNULLPROC, + kwTICKSP }; /** diff --git a/src/languages/keywords.en.c b/src/languages/keywords.en.c index ec41ac603..08dffd424 100644 --- a/src/languages/keywords.en.c +++ b/src/languages/keywords.en.c @@ -413,7 +413,8 @@ struct proc_keyword_s proc_table[] = { { "CALL", kwCALLCP }, { "DEFINEKEY", kwDEFINEKEY }, { "SHOWPAGE", kwSHOWPAGE }, -{ "TIMER", kwTIMER }, +{ "TIMER", kwTIMER }, +{ "TICKS", kwTICKSP }, #if !defined(OS_LIMITED) { "STKDUMP", kwSTKDUMP },