The following warnings occurred:
Warning [2] Undefined array key 59358 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59367 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59369 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59382 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59388 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59389 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59395 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59396 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59401 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59403 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59404 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59405 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59406 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59407 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59408 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59409 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59410 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59411 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59415 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59425 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59426 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59440 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59445 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59529 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59533 - Line: 275 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 275 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $thread - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $fid - Line: 295 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 295 errorHandler->error_callback
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59369 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59445 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59405 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59426 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59440 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59401 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59411 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined array key 59533 - Line: 331 - File: inc/plugins/threaded_mode.php PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php 331 errorHandler->error_callback
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 332 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 304 ThreadedMode::buildtree
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $theme - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $theme - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Trying to access array offset on value of type null - Line: 3 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 3 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Undefined variable $lang - Line: 5 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 5 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks
Warning [2] Attempt to read property "messages_in_thread" on null - Line: 5 - File: inc/plugins/threaded_mode.php(305) : eval()'d code PHP 8.1.2-1ubuntu2.14 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/plugins/threaded_mode.php(305) : eval()'d code 5 errorHandler->error_callback
/inc/plugins/threaded_mode.php 305 eval
/inc/plugins/threaded_mode.php 23 ThreadedMode::showthread_threaded
/inc/class_plugins.php 142 threaded_mode_showthread_threaded
/showthread.php 918 pluginSystem->run_hooks





programming challenge for HP-12c



#26

OK, here is the challenge. Develop an HP-12c (or Platinum) program to convert a number from one base to another (base 2 through 10 only since 12c does not support alphas).

Usage:

input base
ENTER
desired base
ENTER
number to convert
R/S

I'm a 53-year-old ex-programmer who is going back to college so I can teach middle school kids math, and we are studying base conversions now, so this is appropriate. I developed a conversion program for the 12c, I'd just like to see how other HP afficianodos approach this problem.

Thanks, Don Shepherd
Louisville, KY


#27

Hi Don,

Here's a solution in 51 steps for integer numbers.

Some notes:

  • Fractional parts in the input number are ignored.
  • It works for both positive and negative integers.
  • The solution doesn't check for incorrect entries, such as non-integer bases, bases outside the range 1 to 10, digits in the input that don't belong in the original base, etc. I've left it up to the user to validate the inputs.
  • If the converted number has more than 10 digits, then the 10 most significant digits of the converted value are retained, along with a base 10 exponent. The decimal point should be shifted right by the amount in the exponent to complete the conversion. The least significant digits of the converted value are lost during the calculation. All 10 significant digits can be seen by hitting f-PREFIX.
  • If more than one conversion from the input base to the desired base is needed, the bases only need to be entered for the first conversion. Subsequent conversions can be performed by hitting the CLX key, keying in the next number and hitting the R/S key.

Enjoy,

Eamonn.

01 sto 2   // Store original number
02 Rv
03 sto 3 // Store New Base
04 Rv
05 sto 4 // Store original base
06 1
07 sto 0 // Initialize Multiplier
08 0
09 sto 1 // Initialize running total for base 10 representation
10 rcl 2 // *** Top of loop - Recall what's left of original number
11 intg //
12 x=0
13 gto 25 // If integer part is zero, then we're done with the first conversion stage
14 1
15 0
16 / // Divide by 10 to extract next digit
17 sto 2 // Store for next time through loop
18 frac // Next digit is in the fractional part
19 rcl 0 // Recall multiplier
20 * // multiply by position multiplier
21 sto +1 // Add to running total so far
22 rcl 4 // Recall original base
23 sto *0 // Update position multiplier
24 gto 10 // Loop until done
25 sto 2 // Store 0 in register 2 for next conversion stage
26 1
27 0
28 sto *1 // multiply by 10 to get final base 10 version
29 1
30 sto 0 // Re-initialize multiplier for second conversion step
31 rcl 1 // *** Top of loop - Recall base 10 version
32 rcl 1
33 x = 0
34 gto 49 // If what's left of base 10 version is zero, then we're done
35 rcl 3 // New Base
36 /
37 intg
38 sto 1 // Store for next time through loop
39 rcl 3 // New base
40 *
41 - // Extracts next digit in new base
42 rcl 0
43 * // Multiply digit by base 10 multiplier
44 sto +2 // Update total
45 1
46 0
47 sto *0 // Update base 10 multiplier
48 gto 31 // Loop until done
49 rcl 4 // Recall original base
50 rcl 3 // Recall new base
51 rcl 2 // Recall converted value

#28

Hey, thanks Eamonn. I appreciate your help. It's too late tonight (1 AM), but tomorrow I'll enter this on my 12c and try it, and study the listing to understand it. My version took 69 lines so I'm interested in how you did it in a much shorter version.

Thanks again and I'll reply tomorrow.

Don Shepherd

#29

Hey Eamonn, I’ve had a chance to review your code and I’m quite

impressed! That’s a very clever solution, and I especially like the

way you don’t have to re-enter the bases for subsequent conversions.

Very thoughtful, and thanks for your input.


Here is my original 69 line solution:

Register Usage
0 # to convert
1 original base
2 new base
3 running sum
4 power
5 constant 10

01 sto 0 // number to convert
02 Rv
03 sto 2 // new base
04 Rv
05 sto 1 // original base
06 0
07 sto 3 // clear running sum
08 sto 4 // clear power counter
09 1
10 0
11 sto 5 // constant 10
12 rcl 1 // original base
13 -
14 x=0
15 gto 41 // don't convert to base 10 if already base 10
16 rcl 0 // # to convert
17 rcl 5 // 10, begin loop here
18 /
19 intg
20 sto 0 // store int portion for next iteration
21 lst x
22 frac // get rightmost digit
23 rcl 5
24 X // mult by 10 to get integer
25 rcl 1 // input base
26 rcl 4 // power
27 y to x // raise base to power
28 X // times digit
29 sto + 3 // add to running sum
30 1
31 sto + 4 // increment power of base
32 rcl 0
33 x=0
34 gto 36 // done with conv to base 10 number
35 gto 17 // continue loop
36 rcl 3 // accum sum from first loop
37 sto 0 // put in R0
38 0 // reset running sum and base for loop 2
39 sto 3
40 sto 4
41 rcl 2 // new base
42 rcl 5 // 10
43 -
44 x=0
45 gto 47 // desired output is base 10, so you are done
46 gto 49 // conv base 10 # to output base
47 rcl 0
48 gto 00 // done if output base is 10
49 rcl 0 // loop to conv base 10 to output base
50 rcl 2 // output base, begin loop here
51 /
52 intg
53 sto 0 // store int portion for next iteration
54 lst x
55 frac // get rightmost digit
56 rcl 2 // output base
57 X // mult to get integer
58 rcl 5 // 10
59 rcl 4 // power
60 y to x // raise base 10 to power
61 X // times digit
62 sto + 3 // add to running sum
63 1
64 sto + 4 // increment power of base
65 rcl 0
66 x=0
67 gto 69 // done with final conv
68 gto 50 // continue loop
69 rcl 3 // final answer


#30

Hi Don,

Thanks for the feedback. It looks like our two solutions have the same basic structure. You do check if either the input base or the output base is set to 10, which can be a nice speedup. Of course, it is easy to add the rcl codes at the end of your program so that you don't have to re-enter the bases each time you do a conversion.

On a side note, this was the first time I tried to program the HP_12C. With only two conditional tests, no subroutines, register arithmetic only on registers 0 to 4, GTO to line numbers only, it's not the easiest machine to program. Still, I guess that's what makes it more challenging.

Regards,

Eamonn.


#31

Thanks Eamonn. I'm amazed this is your first 12c program, your code was so good I had you pegged as an old-timer.

You are certainly right about the 12c not being the best programming environment. All the things you listed are true. My biggest frustration over the years has been to complete a program, say with 60 steps, then debug it and see that I needed one more step at step 12. On my 16c or 11c, no problem, just add it. But on the 12c, you must rekey 13-61. Current-day programmers would be amazed at that lack of basic editing.

I don't know that my middle school math students (when I eventually teach) will be interested in something as arcane and old-fashioned as keystroke programming, but maybe a few will. And I can point to your program as a great example of a base conversion program.

thx again
Don Shepherd


#32

Thanks for the kind words Don. I'm not an old timer, but I have contributed some programs to this forum in the past for the HP-25. This has a very similar programming model to the HP-12C, as Luiz pointed out, so it's not the first time I've programmed on this type of architecture. I was, however, caught by surprise with some of the limitations of the HP-12C.

  • I didn't realize that the HP-12C allowed storage arithmetic only on some of the registers (0 to 4 it seems). This meant that I had to rethink my usage of registers after I had written my program to use storage arithmetic on other registers. The HP-25 allows storage arithmetic on all registers.
  • I also didn't realize that the HP-12C converts registers to program steps as you add more steps. The HP-25 has 8 registers permanently allocated for storage.
  • The HP-12C has only two conditional tests. The HP-25 has eight.
  • Both the HP-12C and HP-25 use direct addressing for GTO's. However, since the HP-25 only has 49 program steps, you are limited to the amount of re-typing that is necessary when you add an extra program step. In either case, labeled GTO's, along with the ability to insert new lines is much better.

By the way, is there any way to convert program steps on the HP-12C back to registers without having to do a 'Clear PRGM' ? I couldn't figure out how to do this.

Regards,

Eamonn.


#33

Eamonn, I don't think there is any way to do that other than, as you mention, CLEAR PROGRAM. I recall several times having a program already in storage and forgetting to CLEAR PROGRAM before I enter a smaller program, and those old program lines just hang out there, taking up space that could be used by registers. You can't delete the lines, the only way they go away is with CLEAR PROGRAM, I think. Someone correct me if I'm wrong about that.

What is really a shame is the 12c Platinum. It advertises 400 steps (as opposed to 99 in the old 12c), but due to bugs you can't use all 400 if you use any GTO's. HP is aware of that, but they have not done anything about it, as far as I know. The sorry part is you also can't use those 400 for registers either, the limit is still 20.

Don


#34

Hi, Don;

about the HP12Cp(latinum). If you don't care using "n" as an indexing register, you can go beyond the 20th. (R.9) register. As you lnow, the HP12C Platinum solves NPV and IRR for 31 different cash flows, and you can access the extra 10 with the use of "n" (like: 20[n], type in value, [g][CFj], other value, [g][CFj], etc.) You just need to care for the available memory (if you want to have a look here, be my guest). The relation between program steps and these extra registers is:

CF20     ---     309 to 303
CF21 --- 302 to 296
.
.
CF29 --- 246 to 240
CF30 FV not applicable

Hope this adds a few "extra" info.

Cheers.

Luiz (Brazil)


#35

Thanks Luiz. Yes, I forgot about those extra 10 cash flow registers, giving you 30 total. But I sure wish HP or Kinpo would have made it possible to use those 400 bytes for more registers. I had a problem recently in which I needed 100 registers, and I could not do it on the 12c, 12c Platinum, or even the 11c. I could only do it on my 16c, which is great because all 203 bytes can be used for either program lines OR registers. I set word size to 8 bits and I have 203 registers (before adding program lines). This works fine as long as you don't need to enter any numbers greater than 255.

Don


#36

#37

Eamonn and Don --

Very impressive! I keyed in Eamonn's program and it works exactly as you stated. I haven't tried Don's program, but I consider it a success that it could be done at all.

Any non-trivial program is a "challenge" on the 12C -- and on the short-lived, stripped-down Voyager scientific, the 10C -- due to their rudimentary programming capabilities and lack of insert/delete editing.

I had outlined a more-genral approach that would handle floating-point numbers and perform the requisite validation. My program would have required 8 or more registers as well as work-arounds for the missing functions of LOG, 10^x, SF, F?, DSE/ISG, most conditionals, and labels. When I saw how much was required, I didn't think it could be done in less than 93 lines.

Could a program with the same basic structure work for floating-point values as well? I'd think that the approaches would entail either handling the integer and fractional portions separately; or, working unidirectionally on the whole number after "finding" the high- or low-order digit with LOG.

The 16C has decent programming capabilitiues for this, but not the mathematical functions -- no logarithms, exponentials, or INTG/FRAC extraction. Maybe the 11C/15C are the only Voyagers that could handle that task.

-- Karl S.


#38

Hi, Karl;

I agree with you that the HP16C has no math functions for these general, non-conventonal base convertions. Anyway, it has the four most common number base "crunchers" (2, 4, 8 and 16). I thought about your text and this subject and I guess that if we keep integer mode and use the HP16C existing integer "skills" (bit manipulation, shifting-rotating, boolean algebra and double-precision times and divide for number base higher than 16 and MOSTLY masking), I guess that with another approach we could succeed. What do you think?

Just "teasing" thoughts of mine...

Cheers.

Luiz (Brazil)

Edited: 27 June 2004, 6:11 p.m.

#39

Hi Don, Eamon;

I'd like to add that there are two very interesting programs written for the HP25 listed in the HP25 Applications Programs book. One of them converts from base-10 numbers to a generic base-b and the other does the opposite. What called my attention is that they both deal with fraction parts, i.e., not integer-only converters.

When the "b" base is in the range 10<b<=100, all digits in the base-b representation are show with two places (i.e.: 01, 02, 03, ... 09, 10, 11, etc) and it is necessary to type them this way as well. All functions used in them are available in the HP12C. Also, both HP25 and HP12C share the same GTO addressing scheme: line numbers. Yeap, this leads to small changes in some GTO if both are loaded at the same time.

Although your solutions are impressive and complete, I think it's worth taking a time for testing these two programs for the HP25. If you don't have the listing, I can type them in and post.

Cheers.

Luiz (Brazil)


#40

Hi Luiz.

Yes, I would be interested in seeing those programs and adapting them for the 12c. Is that applications book available online from HP, so you would not have to type them in here?

Thanks for your help. When I started programming back in 1974, converting numbers between bases (10, 8, and 16 especially) was something we had to do in order to read memory dumps to debug programs. I suspect the current generation of programmers probably do not have to do that.

Don Shepherd


#41

Don stated,

Quote:
When I started programming back in 1974, converting numbers between bases (10, 8, and 16 especially) was something we had to do in order to read memory dumps to debug programs. I suspect the current generation of programmers probably do not have to do that.

When I worked with 12-year-old Fortran '66 software programs on Sperry mainframes in the mid-'80s, one routine task was to decode the value of the offending datum that caused an error abort and memory dump. This Sperry-termed "Post Mortem Dump" consumed a two-inch stack of fan-fold paper, with each 36-bit word of program memory being printed in 12 octal digits.

Decoding the integers and characters was not difficult, but I was compelled to write a program for my 15C to handle the conversion of floating-point values -- which I did, and utilized it successfully. Such a program for the 16C would have been a bit more elegant, but I was unaware of its existence.

-- Karl S.

Edited: 27 June 2004, 5:52 p.m.


#42

Hey Karl, remember @PMD,AEP? Give me a dump of All banks (instruction and data), only on an Error abort, and include the Program control table. Look at the subroutine history with the LMJ (load modifier and jump) instructions to trace back to the offending instruction. Univac 1108, @FOR compiler. Those were the days.....In comparison, the Voyagers seem pretty easy!

Don


#43

Hi, Don --

Our Post-Mortem Dumps were used to identify the source of operational run-time errors, not for program debugging.

If I remember correctly:

Our runstreams had "@PMD,E" statements.

Our several models of mainframes included the Sperry 1170/1180/1190(?).

Locations of data variables in the dumps were specified by detailed compiler listings produced by @FOR,L for Fortran '66 software and @FTN,L for Fortran '77 software.

-- Karl S.


#44

Yes Karl, you are right, looking at dumps to resolve run-time errors. That was back in the (relatively) early days of commercial computers when companies showcased their machines with viewing areas so visitors could see their great machines. Then security concerns caused them to hide them away from public view, and even the programmers could not look at them, they had to use remote terminals. Too bad.

Don

#45

In case it just won't shut up... @@X TIOC

#46

Hi Luiz,

I had a look at the programs in the HP-25 Applications programs book. They use a very interesting approach and it's easy to adapt them to the HP-12C.

The program to convert from base b to base 10 is broken into two parts, one for the integer part and one for the fractional part. Both parts require the user to input one digit at a time, starting from the rightmost digit, and press R/S after digit. Once the integer part of the number has been calculated, the second part of the program is used to calculate the fractional part. It's not quite as elegant as entering the entire number at once and letting the calculator go ahead and extract the digits and do the entire conversion. However when you have only 50 program steps, it's a very acceptable compromise.

The program to convert from base 10 to base B takes a very unusual approach. It uses a successive approximation algorithm that slowly converges on the answer. It's very interesting to see the calculator figure out the result. However, it doesn't seem to work for all values. For example, 5.5 in base 10 should be 5.08 in base 16. The program returns 5.07151515 (5.7fff). I tested it on the HP-25 simulator that can be found on the museum website, so it may behave differently on a real HP-25.

Don,

I highly recommend getting the museum DVD. It has scans of the manuals for almost all the machines in the museum, aswell as application handbooks (including the HP-25 application book), articles and a wealth of other information.

I've also attached the HP-12C versions of the programs. The first program is identical to the HP-25 version. The second program did require changes as the HP-25 version uses two conditional instructions that are not present on the HP-12C. However, it suffers from the same inaccuracy as the HP-25 version.

Best Regards,

Eamonn.

Base b to base 10 program.  Before running, store the base in R0 and reset the program counter to the top of the program (key in 'f PRGM' when in run mode).  Key in the rightmost digit, press R/S.  Key in the next digit, press R/S, etc.  For the fractional part, set the program counter to step 15 (key in 'GTO 15')
01 STO 1
02 RCL 0
03 Enter
04 Enter
05 Enter
06 RCL 1
07 R/S
08 STO 1
09 CLX
10 +
11 *
12 RCL 1
13 +
14 GTO 07
15 RCL 0
16 1/x
17 STO 2
18 STO 3
19 *
20 R/S
21 RCL 2
22 RCL 3
23 *
24 STO 3
25 *
26 +
27 GTO 20


Base 10 to base b conversion program for the HP-12C. Adapted from the version for the HP-25 in the HP Applications program handbook. Store the base in R0 and the number in R1. Reset the program counter to the top of the program (key in 'f PRGM' when in run mode) and hit R/S. The calculator will display each of the updated approximations. Since the program doesn't terminate, it is necessary to press R/S when the desired degree of accuracy has been achieved. The most recent estimate in in R3.

01 1
02 0
03 STO 2
04 RCL 0
05 x<=y
06 GTO 10
07 E
08 2
09 STO 2
10 0
11 STO 3
12 RCL 1
13 LN
14 RCL 0
15 LN
16 /
17 0
18 x<=y
19 GTO 25
20 Rv (X < 0)
21 INTG
22 1
23 -
24 GTO 27
25 Rv
26 INTG
27 STO 4
28 RCL 2
29 x<>y
30 y^x
31 RCL 3
32 +
33 STO 3
34 PSE
35 RCL 0
36 RCL 4
37 y^x
38 STO -1
39 GTO 12

#47

Hi Don, Luiz,

Well, I had a go at a base conversion program that also supports fractions and here it is. It supports bases 1 to 10 and operates pretty much the same as the other program I submitted, except that it also converts the fractional part of the first base into the fractional part of the second base. It uses 82 steps and 8 registers of the HP-12C memory. The listing is below.

Let me know if you find any problems with it.

Regards,

Eamonn.

1	sto 2	// Store original number
2 Rv
3 sto 7 // Store New Base
4 Rv
5 sto 5 // Store original base
6 eex
7 1
8 sto 6 // Factor of 10 is used a lot, so store it in register
9 1
10 sto 0 // Initialize Multiplier
11 clx
12 sto 1 // Initialize running total for base 10 representation
13 sto 3 // Initialize normalization exponent for conversion to base 10
14 sto 4 // Store normalization exponent for conversion to new base
15 rcl 2
16 frac
17 x=0 // If there's not a fractional part then skip this bit
18 gto 24
19 rcl 6 // X = 10
20 sto *2 // keep multiplying number by 10
21 1
22 sto +3 // and count how many times this is done
23 gto 15
24 rcl 2 // Conversion to base 10 starts here
25 intg
26 x=0
27 gto 38 // If integer part is zero, then we're done with the first conversion stage
28 rcl 6
29 / // Divide by 10 to extract next digit
30 sto 2 // Store modified value for next time through loop
31 frac // Next digit is in the fractional part
32 rcl 0 // Recall position multiplier
33 * // multiply by position multiplier
34 sto +1 // Add to running total so far
35 rcl 5 // Recall original base
36 sto *0 // Update position multiplier
37 gto 24 // Loop until done
38 sto 2 // Store 0 in register 2 for next conversion stage
39 rcl 6
40 sto *1 // multiply by 10
41 rcl 5 // recall original base
42 rcl 3 // recall shift amount
43 y^x
44 sto /1 // Now we have the base 10 representation, including fractional part
45 rcl 1 // Normalize the base 10 representation before conversion to new base
46 rcl 7 // New base
47 rcl 4 // Count
48 y^x // base ^ count
49 * // multiply by base 10 version
50 sto 3 // Store it for next step of conversion
51 frac
52 x=0
53 gto 57 // If we now have an integer, then move on to next stage
54 1
55 sto +4 // Memorize the count for normalization later
56 gto 45
57 1
58 sto 0 // Re-initialize multiplier for second conversion step
59 rcl 3 // *** Top of loop - Recall base 10 version
60 rcl 3
61 x = 0
62 gto 76 // If what's left of base 10 version is zero, then we're done
63 rcl 7 // Next bunch of lines calculate MOD(number, new base)
64 /
65 intg // Result of integer division
66 sto 3 // Store for next time through loop
67 rcl 7 // New base
68 * // New base times result of integer division
69 - // subtract this from original value to extract next digit
70 rcl 0
71 * // Multiply digit by base 10 multiplier
72 sto +2 // Update total
73 rcl 6
74 sto *0 // Update base 10 multiplier
75 gto 59 // Loop until done
76 rcl 6 // Apply appropriate scaling
77 rcl 4
78 y^x
79 sto /2 // by dividing by 10^exponent
80 rcl 5 // Recall original base
81 rcl 7 // Recall new base
82 rcl 2 // Recall converted value

Edited: 27 June 2004, 8:49 p.m.


#48

Hi, Eamon;

I take your version as a very good implementation.

Congrats!

Cheers.

Luiz (Brazil)

#49

Of course, the HP-12C has conversion from binary to decimal "built-in" :-)

For example, to convert 10111 binary to decimal just key in:

f CLEAR FIN     
f CLEAR REG
1 g CF0
0 g CFj
1 g CFj
1 g CFj
1 g CFj
100 i
f NPV
PV
FV
CHS
et voila! No programming required.

#50

Hi, Bruce:

Very, very clever of you ! :-) You could do it even faster using the "repeated cash flows" entry method, for numbers having several consecutive 0's and/or 1's !

BTW, Bruce, I have three or four new awesome articles ready
for submission to Datafile (including "Long Live the HP-16C!" and a chess-related program for the HP-71B, among other goodies, 71B Math ROMs bugs and quirks, etc). If interested, drop me a note a my usual e-mail address. I guess you've had a hefty surplus of material for Datafile, as I haven't heard from you in ages.

Best regards from V.


Possibly Related Threads…
Thread Author Replies Views Last Post
  HP 12C Platinum Programming v. Gold Face Dean Lewis 10 3,297 11-03-2013, 07:30 PM
Last Post: Kimberly Thompson
  HHC 2013 RPN Programming Challenge - Final Thought Jeff O. 7 2,309 10-17-2013, 11:02 AM
Last Post: Jeff O.
  HHC 2012 RPN Programming Challenge Conundrum Jeff O. 15 3,899 10-08-2012, 03:34 PM
Last Post: Gerson W. Barbosa
  Mini-challenge: HHC2012 RPL programming contest with larger input David Hayden 14 3,536 10-05-2012, 10:36 PM
Last Post: David Hayden
  Weekend programming challenge: Euler's Totient function Allen 36 8,801 06-03-2012, 10:39 PM
Last Post: Paul Dale
  A Sunday Programming Challenge Allen 61 13,909 03-17-2012, 06:48 PM
Last Post: Allen
  HHC2012 programming challenge?? Pal G. 28 5,985 09-25-2011, 05:02 PM
Last Post: Paul Dale
  HP 12C, 12C Platinum & 15C iOS App Walter Lam 2 1,367 06-02-2011, 01:25 PM
Last Post: Andrés C. Rodríguez (Argentina)
  HP-15C mini-challenge (Project Euler - problem #1) Gerson W. Barbosa 14 3,670 05-08-2011, 11:08 AM
Last Post: Marcus von Cube, Germany
  HP-12C mini-challenge - Heegner numbers Gerson W. Barbosa 19 4,275 03-26-2011, 02:41 PM
Last Post: Gerson W. Barbosa

Forum Jump: