├── AdobeStock_76467781.jpg ├── README.md ├── alextreg ├── common.php ├── database.php ├── headerandfooter.php ├── icculux.php ├── index.php ├── listandsearch.php ├── makedb.sql ├── openal_title_sm.jpg ├── operations.php ├── vendor │ ├── .htaccess │ ├── index.php │ └── wiki │ │ ├── .htaccess │ │ └── wiki.pl └── wiki │ ├── INSTALL │ ├── LICENSE │ ├── README │ ├── UPGRADE │ ├── config │ ├── index.php │ ├── intermap │ ├── wiki.css │ ├── wiki.gif │ └── wiki.pl ├── body.php ├── css ├── bootstrap.min.css └── styles.css ├── documentation ├── OpenAL_Deployment_Guide_PCWIN.pdf ├── OpenAL_Effects_Extension_Guide.pdf ├── OpenAL_Programmers_Guide.pdf ├── documentation.php ├── index.php └── openal-1.1-specification.pdf ├── downloads ├── OpenAL11CoreSDK.zip ├── downloads.php ├── index.php └── oalinst.zip ├── footer.php ├── games ├── games.php └── index.php ├── header.php ├── index.php ├── js ├── bootstrap.min.js └── scripts.js ├── links ├── index.php └── links.php ├── mailing_lists ├── index.php └── mailing_lists.php ├── openalheader.jpg └── platforms ├── index.php └── platforms.php /AdobeStock_76467781.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/AdobeStock_76467781.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is the website for openal.org. -------------------------------------------------------------------------------- /alextreg/common.php: -------------------------------------------------------------------------------- 1 | "); 10 | return("
"); 11 | } // get_form_tag 12 | 13 | 14 | function is_authorized_vendor() 15 | { 16 | return(!empty($_SERVER['REMOTE_USER'])); 17 | } // is_authorized_vendor 18 | 19 | 20 | function write_error($err) 21 | { 22 | echo "

"; 23 | echo "ERROR: $err
"; 24 | echo "
\n"; 25 | } // write_error 26 | 27 | 28 | function write_debug($dbg) 29 | { 30 | global $enable_debug; 31 | if ($enable_debug) 32 | { 33 | echo "

"; 34 | echo "DEBUG: $dbg
"; 35 | echo "
\n"; 36 | } // if 37 | } // write_debug 38 | 39 | 40 | function current_sql_datetime() 41 | { 42 | $t = localtime(time(), true); 43 | return( "" . ($t['tm_year'] + 1900) . '-' . 44 | ($t['tm_mon'] + 1) . '-' . 45 | ($t['tm_mday']) . ' ' . 46 | ($t['tm_hour']) . ':' . 47 | ($t['tm_min']) . ':' . 48 | ($t['tm_sec']) ); 49 | } // current_sql_datetime 50 | 51 | 52 | function get_alext_wiki_url($extname) 53 | { 54 | $htmlextname = htmlentities($extname, ENT_QUOTES); 55 | return("wiki/$htmlextname"); 56 | } // get_alext_wiki_url 57 | 58 | 59 | function get_alext_url($extname) 60 | { 61 | $htmlextname = htmlentities($extname, ENT_QUOTES); 62 | return("${_SERVER['PHP_SELF']}?operation=op_showext&extname=${htmlextname}"); 63 | } // get_alext_url 64 | 65 | 66 | function get_input_sanitized($reqname, $reqtype, &$reqval, $defval=false) 67 | { 68 | $val = $_REQUEST[$reqname]; 69 | if (!isset($val)) 70 | { 71 | if (!$defval) 72 | { 73 | write_error("No $reqtype specified."); 74 | return false; 75 | } // if 76 | $reqval = $defval; 77 | return true; 78 | } // if 79 | 80 | $reqval = trim($val); 81 | if ($reqval == '') 82 | { 83 | write_error("$reqtype is blank: Please fill out all fields."); 84 | return false; 85 | } // if 86 | 87 | return true; 88 | } // get_input_sanitized 89 | 90 | 91 | function get_input_string($reqname, $reqtype, &$reqval, $defval=false) 92 | { 93 | return get_input_sanitized($reqname, $reqtype, $reqval, $defval); 94 | } // get_input_string 95 | 96 | 97 | function get_input_bool($reqname, $reqtype, &$reqval, $defval=false) 98 | { 99 | $tmp = ''; 100 | if (!get_input_sanitized($reqname, $reqtype, $tmp, $defval)) 101 | return false; 102 | 103 | $tmp = strtolower($tmp); 104 | if (($tmp == 'y') || ($tmp == 'yes') || 105 | ($tmp == 't') || ($tmp == 'true') || 106 | ($tmp == '1')) 107 | { 108 | $reqval = 1; 109 | return true; 110 | } // if 111 | 112 | if (($tmp == 'n') || ($tmp == 'no') || 113 | ($tmp == 'f') || ($tmp == 'false') || 114 | ($tmp == '0')) 115 | { 116 | $reqval = 0; 117 | return true; 118 | } // if 119 | 120 | write_error("$reqtype is not true or false"); 121 | return false; 122 | } // get_input_bool 123 | 124 | 125 | function get_input_number($reqname, $reqtype, &$reqval, $defval=false) 126 | { 127 | if (!get_input_sanitized($reqname, $reqtype, $reqval, $defval)) 128 | return false; 129 | 130 | if (sscanf($reqval, "0x%X", &$hex) == 1) // it's a 0xHEX value. 131 | $reqval = $hex; 132 | 133 | if (!is_numeric($reqval)) 134 | { 135 | write_error("$reqtype isn't a number"); 136 | return false; 137 | } // if 138 | 139 | return true; 140 | } // get_input_number 141 | 142 | 143 | function get_input_int($reqname, $reqtype, &$reqval, $defval=false) 144 | { 145 | if (!get_input_number($reqname, $reqtype, $reqval)) 146 | return false; 147 | 148 | $reqval = (int) $reqval; 149 | return true; 150 | } // get_input_int 151 | 152 | 153 | function get_input_float($reqname, $reqtype, &$reqval, $defval=false) 154 | { 155 | if (!get_input_number($reqname, $reqtype, $reqval)) 156 | return false; 157 | 158 | $reqval = (float) $reqval; 159 | return true; 160 | } // get_input_float 161 | 162 | ?> -------------------------------------------------------------------------------- /alextreg/database.php: -------------------------------------------------------------------------------- 1 | = 0) and ($retval != $expected_rows)) 95 | { 96 | $err = mysql_error(); 97 | write_error("Database $verb error: {$err}"); 98 | } // if 99 | 100 | return($retval); 101 | } // do_dbwrite 102 | 103 | 104 | function do_dbinsert($sql, $expected_rows = 1, $link = NULL) 105 | { 106 | return(do_dbwrite($sql, 'insert', $expected_rows, $link)); 107 | } // do_dbinsert 108 | 109 | 110 | function do_dbupdate($sql, $expected_rows = 1, $link = NULL) 111 | { 112 | return(do_dbwrite($sql, 'update', $expected_rows, $link)); 113 | } // do_dbupdate 114 | 115 | 116 | function do_dbdelete($sql, $expected_rows = 1, $link = NULL) 117 | { 118 | return(do_dbwrite($sql, 'delete', $expected_rows, $link)); 119 | } // do_dbdelete 120 | 121 | 122 | function db_num_rows($query) 123 | { 124 | return(mysql_num_rows($query)); 125 | } // db_num_rows 126 | 127 | 128 | function db_fetch_array($query) 129 | { 130 | return(mysql_fetch_array($query)); 131 | } // db_fetch_array 132 | 133 | 134 | function db_free_result($query) 135 | { 136 | return(mysql_free_result($query)); 137 | } // db_free_result 138 | 139 | ?> -------------------------------------------------------------------------------- /alextreg/headerandfooter.php: -------------------------------------------------------------------------------- 1 | $title 12 |

OpenAL Extension Registry
13 | 14 | EOF; 15 | } // render_header 16 | 17 | function render_footer() 18 | { 19 | // !!! FIXME: need more here, I guess. 20 | echo "
\n"; 21 | if (is_authorized_vendor()) 22 | { 23 | echo "Logged in as: ${_SERVER['REMOTE_USER']}\n"; 24 | echo "("; 25 | echo "change password)\n"; 26 | echo "("; 27 | echo "add a new login)
\n"; 28 | } // if 29 | echo "\n"; 30 | } // render_footer 31 | 32 | ?> 33 | -------------------------------------------------------------------------------- /alextreg/icculux.php: -------------------------------------------------------------------------------- 1 | $title 12 | //

OpenAL Extension Registry
13 | 14 | //EOF; 15 | } // icculux 16 | 17 | function render_footer() 18 | { 19 | // !!! FIXME: need more here, I guess. 20 | echo "
\n"; 21 | if (is_authorized_vendor()) 22 | { 23 | echo "Logged in as: ${_SERVER['REMOTE_USER']}\n"; 24 | echo "("; 25 | echo "change password)\n"; 26 | echo "("; 27 | echo "add a new login)
\n"; 28 | } // if 29 | echo "\n"; 30 | } // render_footer 31 | 32 | ?> 33 | -------------------------------------------------------------------------------- /alextreg/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Back to search page.\n"; 12 | else 13 | render_search_ui(); 14 | render_footer(); 15 | ?> 16 | 17 | -------------------------------------------------------------------------------- /alextreg/listandsearch.php: -------------------------------------------------------------------------------- 1 | 1)) 14 | write_error('(Unexpected number of results from database!)'); 15 | 16 | print("Extensions:\n\n

Total results: $count\n

\n"); 23 | } // render_extension_list 24 | 25 | 26 | function render_token_list($wantname, $query) 27 | { 28 | $count = db_num_rows($query); 29 | if (($wantname) and ($count > 1)) 30 | write_error('(Unexpected number of results from database!)'); 31 | 32 | print("Tokens:\n

\n

Total results: $count\n

\n"); 41 | } // render_token_list 42 | 43 | 44 | function render_entrypoint_list($wantname, $query) 45 | { 46 | $count = db_num_rows($query); 47 | if (($wantname) and ($count > 1)) 48 | write_error('(Unexpected number of results from database!)'); 49 | 50 | print("Entry points:\n

\n

Total results: $count\n

\n"); 58 | } // render_entrypoint_list 59 | 60 | 61 | $queryfuncs['extension'] = 'find_extension'; 62 | function find_extension($wantname) 63 | { 64 | $sql = 'select extname from alextreg_extensions where (1=1)'; 65 | 66 | if (!is_authorized_vendor()) 67 | $sql .= " and (public=1)"; 68 | 69 | if ($wantname) 70 | { 71 | $sqlwantname = db_escape_string($wantname); 72 | $sql .= " and (extname='$sqlwantname')"; 73 | } // if 74 | 75 | $sql .= ' order by extname'; 76 | 77 | $query = do_dbquery($sql); 78 | if ($query == false) 79 | return; // error output is handled in database.php ... 80 | else 81 | render_extension_list($wantname, $query); 82 | 83 | db_free_result($query); 84 | } // find_extension 85 | 86 | 87 | function find_token($additionalsql, $wantname) 88 | { 89 | if (!get_input_bool('sortbyvalue', 'Sort By Value', &$sbv, 'n')) return; 90 | 91 | $sql = 'select tok.tokenname as tokenname,' . 92 | ' tok.tokenval as tokenval,' . 93 | ' ext.extname as extname' . 94 | ' from alextreg_tokens as tok' . 95 | ' left outer join alextreg_extensions as ext' . 96 | ' on tok.extid=ext.id where (1=1)' . 97 | $additionalsql; 98 | 99 | if (!is_authorized_vendor()) 100 | $sql .= " and (ext.public=1)"; 101 | 102 | $sql .= ' order by ' . (($sbv) ? 'tok.tokenval' : 'tok.tokenname'); 103 | 104 | $query = do_dbquery($sql); 105 | if ($query == false) 106 | return; // error output is handled in database.php ... 107 | else 108 | render_token_list($wantname, $query); 109 | 110 | db_free_result($query); 111 | } // find_token 112 | 113 | 114 | $queryfuncs['tokenname'] = 'find_tokenname'; 115 | function find_tokenname($wantname) 116 | { 117 | $additionalsql = ''; 118 | if ($wantname) 119 | { 120 | $sqlwantname = db_escape_string($wantname); 121 | $additionalsql .= " and (tok.tokenname='$sqlwantname')"; 122 | } // if 123 | 124 | find_token($additionalsql, $wantname); 125 | } // find_tokenname 126 | 127 | 128 | $queryfuncs['tokenvalue'] = 'find_tokenvalue'; 129 | function find_tokenvalue($wantname) 130 | { 131 | $additionalsql = ''; 132 | if ($wantname) 133 | { 134 | if (!is_numeric($wantname)) 135 | return; 136 | $sqlwantname = db_escape_string($wantname); 137 | $additionalsql .= " and (tok.tokenval=$sqlwantname)"; 138 | } // if 139 | 140 | find_token($additionalsql, $wantname); 141 | } // find_tokenvalue 142 | 143 | 144 | $queryfuncs['entrypoint'] = 'find_entrypoint'; 145 | function find_entrypoint($wantname) 146 | { 147 | $sql = 'select ent.entrypointname as entrypointname,' . 148 | ' ext.extname as extname' . 149 | ' from alextreg_entrypoints as ent' . 150 | ' left outer join alextreg_extensions as ext' . 151 | ' on ent.extid=ext.id where (1=1)'; 152 | 153 | if (!is_authorized_vendor()) 154 | $sql .= " and (ext.public=1)"; 155 | 156 | if ($wantname) 157 | { 158 | $sqlwantname = db_escape_string($wantname); 159 | $sql .= " and (ent.entrypointname='$sqlwantname')"; 160 | } // if 161 | 162 | $sql .= ' order by ent.entrypointname'; 163 | 164 | $query = do_dbquery($sql); 165 | if ($query == false) 166 | return; // error output is handled in database.php ... 167 | else 168 | render_entrypoint_list($wantname, $query); 169 | 170 | db_free_result($query); 171 | } // find_entrypoint 172 | 173 | 174 | $queryfuncs['anything'] = 'find_anything'; 175 | function find_anything($wantname) 176 | { 177 | find_extension($wantname); 178 | find_tokenname($wantname); 179 | find_tokenvalue($wantname); 180 | find_entrypoint($wantname); 181 | } // find_anything 182 | 183 | 184 | function do_find($wanttype, $wantname = NULL) 185 | { 186 | global $queryfuncs; 187 | 188 | $queryfunc = $queryfuncs[$wanttype]; 189 | if (!isset($queryfunc)) 190 | { 191 | write_error('Invalid search type.'); 192 | return; 193 | } // if 194 | 195 | $queryfunc($wantname); 196 | 197 | echo "\n


\n"; 198 | } // do_find 199 | 200 | 201 | $operations['op_findone'] = 'op_findone'; 202 | function op_findone() 203 | { 204 | if (!get_input_string('wanttype', 'Database field type', $wanttype)) return; 205 | if (!get_input_string('wantname', 'Database field name', $wantname)) return; 206 | write_debug("called op_findone($wanttype, $wantname)"); 207 | do_find($wanttype, $wantname); 208 | } // op_findone 209 | 210 | 211 | function show_one_extension($extrow) 212 | { 213 | $is_vendor = is_authorized_vendor(); 214 | 215 | $extname = $extrow['extname']; 216 | $extid = $extrow['id']; 217 | $public = $extrow['public']; 218 | $wikiurl = get_alext_wiki_url($extname); 219 | $htmlextname = htmlentities($extname, ENT_QUOTES); 220 | 221 | if ((!$public) and (!$is_vendor)) // sanity check. 222 | return; 223 | 224 | echo "

$htmlextname

\n"; 225 | echo "

  Click here for documentation and discussion.\n"; 226 | 227 | $tab = '    '; 228 | echo "

\n"; 229 | echo "${tab}Registered on ${extrow['entrydate']} by ${extrow['author']}
\n"; 230 | echo "${tab}Last edited on ${extrow['lastedit']} by ${extrow['lasteditauthor']}
\n"; 231 | echo "
\n"; 232 | 233 | // get the tokens, move it to an array of db rows... 234 | $tokens = array(); 235 | $sql = 'select * from alextreg_tokens as tok' . 236 | ' left outer join alextreg_extensions as ext on tok.extid=ext.id' . 237 | " where (ext.id=$extid)"; 238 | 239 | if (!$is_vendor) 240 | $sql .= ' and (ext.public=1)'; 241 | 242 | $sql .= ' order by tok.tokenname'; 243 | 244 | $query = do_dbquery($sql); 245 | if ($query == false) 246 | return; // uh...? 247 | while ( ($row = db_fetch_array($query)) != false ) 248 | $tokens[] = $row; 249 | db_free_result($query); 250 | 251 | $entrypoints = array(); 252 | $sql = 'select * from alextreg_entrypoints as ent' . 253 | ' left outer join alextreg_extensions as ext on ent.extid=ext.id' . 254 | " where (ext.id=$extid)"; 255 | 256 | if (!$is_vendor) 257 | $sql .= ' and (ext.public=1)'; 258 | 259 | $sql .= ' order by ent.entrypointname'; 260 | 261 | $query = do_dbquery($sql); 262 | if ($query == false) 263 | return; // uh...? 264 | while ( ($row = db_fetch_array($query)) != false ) 265 | $entrypoints[] = $row; 266 | db_free_result($query); 267 | 268 | if ($is_vendor) 269 | { 270 | $form = get_form_tag(); 271 | 272 | echo "

\n"; 273 | echo "
Vendor:
\n"; 274 | 275 | $toggle = (($public) ? 'n' : 'y'); 276 | $is = ($public) ? 'is' : 'is not'; 277 | echo "$form\n"; 278 | echo "This extension $is publically visible.\n"; 279 | echo "\n"; 280 | echo "\n"; 281 | echo "\n"; 282 | echo "\n"; 283 | echo "\n"; 284 | echo "\n"; 285 | 286 | echo "$form\n"; 287 | echo "Add a new token named \n"; 288 | echo "with the value .\n"; 289 | echo "\n"; 290 | echo "\n"; 291 | echo "\n"; 292 | echo "\n"; 293 | echo "\n"; 294 | 295 | echo "$form\n"; 296 | echo "Add a new entry point named \n"; 297 | echo "\n"; 298 | echo "\n"; 299 | echo "\n"; 300 | echo "\n"; 301 | echo "\n"; 302 | 303 | echo "$form\n"; 304 | echo "I'd like to rename this extension to\n"; 305 | echo ".\n"; 306 | echo "\n"; 307 | echo "\n"; 308 | echo "\n"; 309 | echo "\n"; 310 | echo "\n"; 311 | 312 | echo "$form\n"; 313 | echo "I'd like to delete this extension.\n"; 314 | echo "\n"; 315 | echo "\n"; 316 | echo "\n"; 317 | echo "\n"; 318 | echo "\n"; 319 | 320 | if (count($tokens)) 321 | { 322 | echo "$form\n"; 323 | echo "I want to change the\n"; 324 | echo "\n"; 328 | echo "of the token named\n"; 329 | echo "\n"; 337 | echo "to .\n"; 338 | echo "\n"; 339 | echo "\n"; 340 | echo "\n"; 341 | echo "\n"; 342 | 343 | echo "$form\n"; 344 | echo "I want to delete the token named\n"; 345 | echo "\n"; 353 | echo "\n"; 354 | echo "\n"; 355 | echo "\n"; 356 | echo "\n"; 357 | echo "\n"; 358 | } // if 359 | 360 | if (count($entrypoints)) 361 | { 362 | echo "$form\n"; 363 | echo "I want to change the name of the entry point named\n"; 364 | echo "\n"; 372 | echo "to .\n"; 373 | echo "\n"; 374 | echo "\n"; 375 | echo "\n"; 376 | echo "\n"; 377 | echo "\n"; 378 | 379 | echo "$form\n"; 380 | echo "I want to delete the entry point named\n"; 381 | echo "\n"; 389 | echo "\n"; 390 | echo "\n"; 391 | echo "\n"; 392 | echo "\n"; 393 | echo "\n"; 394 | } // if 395 | 396 | echo "
\n"; 397 | } // if 398 | 399 | echo "

Tokens:\n

\n"; 415 | 416 | echo "

Entry points:\n

\n"; 431 | 432 | echo "
\n"; 433 | } // show_one_extension 434 | 435 | 436 | $operations['op_findall'] = 'op_findall'; 437 | function op_findall() 438 | { 439 | if (!get_input_string('wanttype', 'Database field type', $wanttype)) return; 440 | write_debug("called op_findall($wanttype)"); 441 | do_find($wanttype); 442 | } // op_findall 443 | 444 | 445 | function do_showext($extname) 446 | { 447 | $sqlextname = db_escape_string($extname); 448 | $sql = "select * from alextreg_extensions" . 449 | " where extname='$sqlextname'"; 450 | 451 | if (!is_authorized_vendor()) 452 | $sql .= " and (public=1)"; 453 | 454 | $query = do_dbquery($sql); 455 | if ($query == false) 456 | return; // error output is handled in database.php ... 457 | else if (db_num_rows($query) == 0) 458 | write_error('No such extension.'); 459 | else 460 | { 461 | // just in case there's more than one for some reason... 462 | while ( ($row = db_fetch_array($query)) != false ) 463 | show_one_extension($row); 464 | } // else 465 | 466 | db_free_result($query); 467 | } // do_showext 468 | 469 | 470 | $operations['op_showext'] = 'op_showext'; 471 | function op_showext() 472 | { 473 | if (!get_input_string('extname', 'extension name', $extname)) return; 474 | do_showext($extname); 475 | } // op_showext 476 | 477 | 478 | function render_search_ui() 479 | { 480 | $form = get_form_tag(); 481 | 482 | print << 485 | Where do you want to go today? 486 | 487 |

488 | $form 489 | I want a list of all known 490 | . 495 | 496 | 497 | 498 | 499 |

500 | ...or... 501 | 502 |

503 | $form 504 | I want 505 | 512 | named . 513 | 514 | 515 | 516 | 517 | EOF; 518 | 519 | } // render_search_ui 520 | 521 | ?> -------------------------------------------------------------------------------- /alextreg/makedb.sql: -------------------------------------------------------------------------------- 1 | # (Lifted from Horde.org --ryan.) 2 | # 3 | # If you are installing Horde for the first time, you can simply 4 | # direct this file to mysql as STDIN: 5 | # 6 | # $ mysql --user=root --password= < mysql_create.sql 7 | # 8 | # If you are upgrading from a previous version, you will need to comment 9 | # out the the user creation steps below, as well as the schemas for any 10 | # tables that already exist. 11 | 12 | USE mysql; 13 | 14 | REPLACE INTO user (host, user, password) 15 | VALUES ( 16 | 'localhost', 17 | 'alextreg', 18 | -- IMPORTANT: Change this password! 19 | PASSWORD('kjskdjasd923asd') 20 | ); 21 | 22 | REPLACE INTO db (host, db, user, select_priv, insert_priv, update_priv, 23 | delete_priv, create_priv, drop_priv) 24 | VALUES ( 25 | 'localhost', 26 | 'alextreg', 27 | 'alextreg', 28 | 'Y', 'Y', 'Y', 'Y', 29 | 'Y', 'Y' 30 | ); 31 | 32 | FLUSH PRIVILEGES; 33 | 34 | CREATE DATABASE alextreg; 35 | 36 | USE alextreg; 37 | 38 | CREATE TABLE alextreg_extensions ( 39 | id int not null auto_increment, 40 | extname varchar(128) not null, 41 | public bool not null, 42 | author varchar(128) not null, 43 | entrydate datetime not null, 44 | author varchar(128) not null, 45 | lastedit datetime not null, 46 | primary key (id) 47 | ); 48 | 49 | GRANT SELECT, INSERT, UPDATE, DELETE ON alextreg_extensions TO alextreg@localhost; 50 | 51 | CREATE TABLE alextreg_tokens ( 52 | id int not null auto_increment, 53 | tokenname varchar(128) not null, 54 | tokenval int not null, 55 | extid int not null, 56 | author varchar(128) not null, 57 | entrydate datetime not null, 58 | lasteditauthor varchar(128) not null, 59 | lastedit datetime not null, 60 | primary key (id) 61 | ); 62 | 63 | GRANT SELECT, INSERT, UPDATE, DELETE ON alextreg_tokens TO alextreg@localhost; 64 | 65 | CREATE TABLE alextreg_entrypoints ( 66 | id int not null auto_increment, 67 | entrypointname varchar(128) not null, 68 | extid int not null, 69 | author varchar(128) not null, 70 | entrydate datetime not null, 71 | lasteditauthor varchar(128) not null, 72 | lastedit datetime not null, 73 | primary key (id) 74 | ); 75 | 76 | CREATE TABLE alextreg_papertrail ( 77 | id int not null auto_increment, 78 | action text not null, 79 | sqltext mediumtext not null, 80 | author varchar(128) not null, 81 | entrydate datetime not null, 82 | primary key (id) 83 | ); 84 | 85 | GRANT SELECT, INSERT, UPDATE, DELETE ON alextreg_entrypoints TO alextreg@localhost; 86 | 87 | FLUSH PRIVILEGES; 88 | 89 | # Done! 90 | -------------------------------------------------------------------------------- /alextreg/openal_title_sm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/alextreg/openal_title_sm.jpg -------------------------------------------------------------------------------- /alextreg/operations.php: -------------------------------------------------------------------------------- 1 |

Bad operation
\n"; 20 | else 21 | $func(); // make the call. 22 | 23 | return true; 24 | } // do_operation 25 | 26 | ?> 27 | -------------------------------------------------------------------------------- /alextreg/vendor/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | AuthUserFile /webspace/projects/alextreg/vendor/.htpasswd 3 | AuthName "OpenAL Vendor Login" 4 | AuthType Basic 5 | Require valid-user 6 | 7 | 8 | -------------------------------------------------------------------------------- /alextreg/vendor/index.php: -------------------------------------------------------------------------------- 1 | 2 | $htmlaction
\n"; 30 | 31 | // Update extensions.lastedit field if this involves an extension. 32 | if (isset($extid)) 33 | { 34 | $sql = "update alextreg_extensions set lastedit=NOW(), lasteditauthor='$sqlauthor' where id=$extid"; 35 | do_dbupdate($sql); 36 | } // if 37 | 38 | // Fill in the papertrail. 39 | $sql = 'insert into alextreg_papertrail' . 40 | ' (action, sqltext, author, entrydate)' . 41 | " values ('$sqlaction', '$sqlsql', '$sqlauthor', NOW())"; 42 | 43 | do_dbinsert($sql); 44 | } // update_papertrail 45 | 46 | 47 | $operations['op_renderpapertrail'] = 'op_renderpapertrail'; 48 | function op_renderpapertrail() 49 | { 50 | if (!get_input_bool('showsql', 'should show sql', $showsql, 'y')) return; 51 | 52 | $sql = 'select * from alextreg_papertrail order by entrydate'; 53 | $query = do_dbquery($sql); 54 | if ($query == false) 55 | return; // error output is handled in database.php ... 56 | 57 | echo "Current paper trail (oldest entries first)...\n"; 58 | echo "\n"; 73 | echo "

End of papertrail.\n"; 74 | } // op_renderpapertrail 75 | 76 | 77 | function update_vendor_login($loginname, $pw, $allowreplace) 78 | { 79 | if (!welcome_here()) return; 80 | 81 | $action = 'Added'; 82 | $users = file("./.htpasswd"); 83 | 84 | if (!isset($users)) 85 | { 86 | write_error("failed to read vendor list."); 87 | return; 88 | } // if 89 | 90 | $cmd = escapeshellcmd("htpasswd -b -n $loginname $pw"); 91 | $cryptedpw = `$cmd`; 92 | if (empty($cryptedpw)) 93 | { 94 | write_error("Can't crypt password"); 95 | return; 96 | } // if 97 | 98 | if (!$allowreplace) 99 | { 100 | foreach ($users as $u) 101 | { 102 | $chop = str_replace(strchr($u, ':'), "", $u); 103 | if ($chop == $loginname) 104 | { 105 | write_error("Username already exists."); 106 | return; 107 | } // if 108 | } // foreach 109 | } // if 110 | 111 | if (!copy('./.htpasswd', '.htpasswd_knowngood')) 112 | { 113 | write_error("couldn't archive old vendor list."); 114 | return; 115 | } // if 116 | 117 | $io = @fopen('./.htpasswd', 'w'); 118 | if (!$io) 119 | { 120 | write_error("failed to write vendor list."); 121 | return; 122 | } // if 123 | 124 | foreach ($users as $u) 125 | { 126 | $chop = str_replace(strchr($u, ':'), "", $u); 127 | if ($chop == $loginname) 128 | { 129 | $action = 'Updated'; 130 | continue; // skip login we're updating. 131 | } // if 132 | 133 | fputs($io, $u); 134 | } // for 135 | 136 | // add in new or updated login. 137 | fputs($io, "${cryptedpw}\n"); 138 | update_papertrail("$action login for vendor '$loginname'", '', NULL); 139 | } // update_vendor_login 140 | 141 | 142 | $operations['op_confirmpw'] = 'op_confirmpw'; 143 | function op_confirmpw() 144 | { 145 | if (!welcome_here()) return; 146 | if (!get_input_string('pw1', 'new password', $pw1)) return; 147 | if (!get_input_string('pw2', 'retyped password', $pw2)) return; 148 | 149 | if ($pw1 != $pw2) 150 | { 151 | write_error("passwords don't match"); 152 | return; 153 | } // if 154 | 155 | update_vendor_login($_SERVER['REMOTE_USER'], $pw1, true); 156 | } // op_confirmpw 157 | 158 | 159 | $operations['op_changepw'] = 'op_changepw'; 160 | function op_changepw() 161 | { 162 | if (!welcome_here()) return; 163 | 164 | $form = get_form_tag(); 165 | 166 | echo <<< EOF 167 |

Changing password for ${_SERVER['REMOTE_USER']}

168 | 169 |

170 | ${form} 171 | New password:
172 | Retype new password:
173 | 174 | 175 | 176 | 177 | EOF; 178 | } // op_changepw 179 | 180 | 181 | $operations['op_confirmaddvendor'] = 'op_confirmaddvendor'; 182 | function op_confirmaddvendor() 183 | { 184 | if (!welcome_here()) return; 185 | if (!get_input_string('loginname', 'new login name', $loginname)) return; 186 | if (!get_input_string('pw1', 'new password', $pw1)) return; 187 | if (!get_input_string('pw2', 'retyped password', $pw2)) return; 188 | 189 | if ($pw1 != $pw2) 190 | { 191 | write_error("passwords don't match"); 192 | return; 193 | } // if 194 | 195 | update_vendor_login($loginname, $pw1, false); 196 | } // op_confirmaddvendor 197 | 198 | 199 | $operations['op_addvendor'] = 'op_addvendor'; 200 | function op_addvendor() 201 | { 202 | if (!welcome_here()) return; 203 | 204 | $form = get_form_tag(); 205 | 206 | echo <<< EOF 207 |

Adding a vendor login

208 | 209 |

210 | Usernames should be in the form of first_last_vendorname. 211 | 212 |

213 | ${form} 214 | New login name:
215 | New password:
216 | Retype new password:
217 | 218 | 219 | 220 | 221 | EOF; 222 | } // op_addvendor 223 | 224 | 225 | $operations['op_addtoken'] = 'op_addtoken'; 226 | function op_addtoken() 227 | { 228 | if (!welcome_here()) return; 229 | if (!get_input_string('tokname', 'token name', $tokname)) return; 230 | if (!get_input_string('extname', 'extension name', $extname)) return; 231 | if (!get_input_int('extid', 'extension id', $extid)) return; 232 | if (!get_input_int('tokval', 'token value', $tokval)) return; 233 | 234 | // see if it's already in the database... 235 | $sqltokname = db_escape_string($tokname); 236 | $sql = 'select tok.*, ext.extname from alextreg_tokens as tok' . 237 | ' left outer join alextreg_extensions as ext' . 238 | ' on tok.extid=ext.id' . 239 | " where (tok.tokenname='$sqltokname')"; 240 | 241 | $query = do_dbquery($sql); 242 | if ($query == false) 243 | return; // error output is handled in database.php ... 244 | 245 | if (db_num_rows($query) > 0) 246 | { 247 | write_error('This token name is in use. Below is what a search turned up.'); 248 | render_token_list($tokname, $query); 249 | db_free_result($query); 250 | return; 251 | } // if 252 | 253 | db_free_result($query); 254 | 255 | $sql = 'select tok.*, ext.extname from alextreg_tokens as tok' . 256 | ' left outer join alextreg_extensions as ext' . 257 | ' on tok.extid=ext.id' . 258 | " where (tok.tokenval=$tokval)"; 259 | $query = do_dbquery($sql); 260 | if ($query == false) 261 | return; // error output is handled in database.php ... 262 | 263 | if (db_num_rows($query) > 0) 264 | { 265 | write_error('Please note that this token value is in use, which may be okay. Below is what a search turned up.'); 266 | render_token_list(false, $query); 267 | } // if 268 | 269 | db_free_result($query); 270 | 271 | // Just a small sanity check. 272 | $cookie = $_REQUEST['iamsure']; 273 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 274 | { 275 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 276 | // ok, add it to the database. 277 | $sql = "insert into alextreg_tokens" . 278 | " (tokenname, tokenval, extid, author, entrydate, lasteditauthor, lastedit)" . 279 | " values ('$sqltokname', $tokval, $extid, '$sqlauthor', NOW(), '$sqlauthor', NOW())"; 280 | if (do_dbinsert($sql) == 1) 281 | { 282 | update_papertrail("Token '$tokname' added", $sql, $extid); 283 | do_showext($extname); 284 | } // if 285 | } // if 286 | else // put out a confirmation... 287 | { 288 | $form = get_form_tag(); 289 | $htmlextname = htmlentities($extname, ENT_QUOTES); 290 | $htmltokname = htmlentities($tokname, ENT_QUOTES); 291 | 292 | $hex = ''; 293 | if (sscanf($tokval, "0x%X", &$dummy) != 1) 294 | $hex = sprintf(" (0x%X hex)", $tokval); // !!! FIXME: faster way to do this? 295 | 296 | echo "About to add a token named '$htmltokname',
\n"; 297 | echo "with value ${tokval}${hex}.
\n"; 298 | echo "...if you're sure, click 'Confirm'...
\n"; 299 | echo "$form\n"; 300 | echo "\n"; 301 | echo "\n"; 302 | echo "\n"; 303 | echo "\n"; 304 | echo "\n"; 305 | echo "\n"; 306 | echo "\n"; 307 | echo "\n"; 308 | } // else 309 | } // op_addtoken 310 | 311 | 312 | $operations['op_addentrypoint'] = 'op_addentrypoint'; 313 | function op_addentrypoint() 314 | { 315 | if (!welcome_here()) return; 316 | if (!get_input_string('entrypointname', 'entry point name', $entname)) return; 317 | if (!get_input_string('extname', 'extension name', $extname)) return; 318 | if (!get_input_int('extid', 'extension id', $extid)) return; 319 | 320 | // see if it's already in the database... 321 | $sqlentname = db_escape_string($entname); 322 | $sql = "select * from alextreg_entrypoints where entrypointname='$sqlentname'"; 323 | $query = do_dbquery($sql); 324 | if ($query == false) 325 | return; // error output is handled in database.php ... 326 | 327 | if (db_num_rows($query) > 0) 328 | { 329 | write_error('This entry point is in use. Below is what a search turned up.'); 330 | render_entrypoint_list($entname, $query); 331 | db_free_result($query); 332 | return; 333 | } // if 334 | 335 | db_free_result($query); 336 | 337 | // Just a small sanity check. 338 | $cookie = $_REQUEST['iamsure']; 339 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 340 | { 341 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 342 | // ok, add it to the database. 343 | $sql = "insert into alextreg_entrypoints" . 344 | " (entrypointname, extid, author, entrydate, lasteditauthor, lastedit)" . 345 | " values ('$sqlentname', $extid, '$sqlauthor', NOW(), '$sqlauthor', NOW())"; 346 | if (do_dbinsert($sql) == 1) 347 | { 348 | update_papertrail("Entry point '$entname' added", $sql, $extid); 349 | do_showext($extname); 350 | } // if 351 | } // if 352 | else // put out a confirmation... 353 | { 354 | $form = get_form_tag(); 355 | $htmlentname = htmlentities($entname, ENT_QUOTES); 356 | $htmlextname = htmlentities($extname, ENT_QUOTES); 357 | 358 | echo "About to add an entry point named '$htmlentname'
\n"; 359 | echo "...if you're sure, click 'Confirm'...
\n"; 360 | echo "$form\n"; 361 | echo "\n"; 362 | echo "\n"; 363 | echo "\n"; 364 | echo "\n"; 365 | echo "\n"; 366 | echo "\n"; 367 | echo "\n"; 368 | } // else 369 | } // op_addentrypoint 370 | 371 | 372 | $operations['op_addextension'] = 'op_addextension'; 373 | function op_addextension() 374 | { 375 | if (!welcome_here()) return; 376 | if (!get_input_string('extname', 'extension name', $extname)) return; 377 | 378 | // see if it's already in the database... 379 | $sqlextname = db_escape_string($extname); 380 | $sql = "select * from alextreg_extensions where extname='$sqlextname'"; 381 | $query = do_dbquery($sql); 382 | if ($query == false) 383 | return; // error output is handled in database.php ... 384 | 385 | if (db_num_rows($query) > 0) 386 | { 387 | write_error('This extension name is in use. Below is what a search turned up.'); 388 | render_extension_list($extname, $query); 389 | db_free_result($query); 390 | return; 391 | } // if 392 | 393 | db_free_result($query); 394 | 395 | // Just a small sanity check. 396 | $cookie = $_REQUEST['iamsure']; 397 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 398 | { 399 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 400 | // ok, add it to the database. 401 | $sql = "insert into alextreg_extensions" . 402 | " (extname, public, author, entrydate, lasteditauthor, lastedit)" . 403 | " values ('$sqlextname', 0, '$sqlauthor', NOW(), '$sqlauthor', NOW())"; 404 | if (do_dbinsert($sql) == 1) 405 | { 406 | update_papertrail("Extension '$extname' added", $sql, NULL); 407 | do_showext($extname); 408 | } // if 409 | } // if 410 | else // put out a confirmation... 411 | { 412 | $form = get_form_tag(); 413 | $htmlname = htmlentities($extname, ENT_QUOTES); 414 | echo "About to add an extension named '$htmlname'.
\n"; 415 | echo "You can add tokens and entry points to this extension in a moment.
\n"; 416 | echo "...if you're sure, click 'Confirm'...
\n"; 417 | echo "$form\n"; 418 | echo "\n"; 419 | echo "\n"; 420 | echo "\n"; 421 | echo "\n"; 422 | echo "\n"; 423 | } // else 424 | } // op_addextension 425 | 426 | 427 | $operations['op_showhideext'] = 'op_showhideext'; 428 | function op_showhideext() 429 | { 430 | if (!welcome_here()) return; 431 | if (!get_input_string('extname', 'extension name', $extname)) return; 432 | if (!get_input_int('extid', 'extension id', $extid)) return; 433 | if (!get_input_bool('newval', 'toggle value', $newval)) return; 434 | 435 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 436 | $sql = "update alextreg_extensions set public=$newval, lastedit=NOW(), lasteditauthor='$sqlauthor' where id=$extid"; 437 | if (do_dbupdate($sql) == 1) 438 | { 439 | $pubpriv = ($newval) ? "public" : "private"; 440 | update_papertrail("Extension '$extname' toggled $pubpriv", $sql, NULL); 441 | do_showext($extname); 442 | } // if 443 | } // op_showhideext 444 | 445 | 446 | $operations['op_delext'] = 'op_delext'; 447 | function op_delext() 448 | { 449 | if (!welcome_here()) return; 450 | if (!get_input_string('extname', 'extension name', $extname)) return; 451 | if (!get_input_int('extid', 'extension id', $extid)) return; 452 | 453 | // Just a small sanity check. 454 | $cookie = $_REQUEST['iamsure']; 455 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 456 | { 457 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 458 | // ok, nuke it. 459 | $sql = "delete from alextreg_extensions where id=$extid"; 460 | if (do_dbdelete($sql) == 1) 461 | { 462 | update_papertrail("EXTENSION '$extname' DELETED", $sql, NULL); 463 | $sql = "delete from alextreg_tokens where extid=$extid"; 464 | $rc = do_dbdelete($sql, -1); 465 | update_papertrail("DELETED $rc TOKENS", $sql, NULL); 466 | $sql = "delete from alextreg_entrypoints where extid=$extid"; 467 | $rc = do_dbdelete($sql, -1); 468 | update_papertrail("DELETED $rc ENTRY POINTS", $sql, NULL); 469 | } // if 470 | } // if 471 | else // put out a confirmation... 472 | { 473 | $form = get_form_tag(); 474 | $htmlextname = htmlentities($extname, ENT_QUOTES); 475 | echo "About to delete an extension named '$htmlextname'
\n"; 476 | echo "\n"; 477 | echo "THERE IS NO UNDELETE. MAKE SURE YOU REALLY WANT TO DO THIS.
\n"; 478 | echo "THIS ALSO DELETES ALL ASSOCIATED TOKENS AND ENTRY POINTS!
\n"; 479 | echo "
\n"; 480 | echo "...if you're sure, click 'Confirm'...
\n"; 481 | echo "$form\n"; 482 | echo "\n"; 483 | echo "\n"; 484 | echo "\n"; 485 | echo "\n"; 486 | echo "\n"; 487 | echo "\n"; 488 | } // else 489 | } // op_delext 490 | 491 | 492 | $operations['op_deltok'] = 'op_deltok'; 493 | function op_deltok() 494 | { 495 | if (!welcome_here()) return; 496 | if (!get_input_string('tokname', 'token name', $tokname)) return; 497 | if (!get_input_string('extname', 'extension name', $extname)) return; 498 | if (!get_input_int('extid', 'extension id', $extid)) return; 499 | 500 | // Just a small sanity check. 501 | $cookie = $_REQUEST['iamsure']; 502 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 503 | { 504 | $sqltokname = db_escape_string($tokname); 505 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 506 | // ok, nuke it. 507 | $sql = "delete from alextreg_tokens where tokenname='$sqltokname'"; 508 | if (do_dbdelete($sql) == 1) 509 | { 510 | update_papertrail("TOKEN '$tokname' DELETED", $sql, $extid); 511 | do_showext($extname); 512 | } // if 513 | } // if 514 | else // put out a confirmation... 515 | { 516 | $form = get_form_tag(); 517 | $htmlextname = htmlentities($extname, ENT_QUOTES); 518 | $htmltokname = htmlentities($tokname, ENT_QUOTES); 519 | echo "About to delete a token named '$htmltokname'
\n"; 520 | echo "\n"; 521 | echo "THERE IS NO UNDELETE. MAKE SURE YOU REALLY WANT TO DO THIS.
\n"; 522 | echo "
\n"; 523 | echo "...if you're sure, click 'Confirm'...
\n"; 524 | echo "$form\n"; 525 | echo "\n"; 526 | echo "\n"; 527 | echo "\n"; 528 | echo "\n"; 529 | echo "\n"; 530 | echo "\n"; 531 | echo "\n"; 532 | } // else 533 | } // op_deltok 534 | 535 | 536 | $operations['op_delent'] = 'op_delent'; 537 | function op_delent() 538 | { 539 | if (!welcome_here()) return; 540 | if (!get_input_string('entname', 'entry point name', $entname)) return; 541 | if (!get_input_string('extname', 'extension name', $extname)) return; 542 | if (!get_input_int('extid', 'extension id', $extid)) return; 543 | 544 | // Just a small sanity check. 545 | $cookie = $_REQUEST['iamsure']; 546 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 547 | { 548 | $sqlentname = db_escape_string($entname); 549 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 550 | // ok, nuke it. 551 | $sql = "delete from alextreg_entrypoints where entrypointname='$sqlentname'"; 552 | if (do_dbdelete($sql) == 1) 553 | { 554 | update_papertrail("ENTRY POINT '$entname' DELETED", $sql, $extid); 555 | do_showext($extname); 556 | } // if 557 | } // if 558 | else // put out a confirmation... 559 | { 560 | $form = get_form_tag(); 561 | $htmlextname = htmlentities($extname, ENT_QUOTES); 562 | $htmlentname = htmlentities($entname, ENT_QUOTES); 563 | echo "About to delete an entry point named '$htmlentname'
\n"; 564 | echo "\n"; 565 | echo "THERE IS NO UNDELETE. MAKE SURE YOU REALLY WANT TO DO THIS.
\n"; 566 | echo "
\n"; 567 | echo "...if you're sure, click 'Confirm'...
\n"; 568 | echo "$form\n"; 569 | echo "\n"; 570 | echo "\n"; 571 | echo "\n"; 572 | echo "\n"; 573 | echo "\n"; 574 | echo "\n"; 575 | echo "\n"; 576 | } // else 577 | } // op_delent 578 | 579 | 580 | $operations['op_renameext'] = 'op_renameext'; 581 | function op_renameext() 582 | { 583 | if (!welcome_here()) return; 584 | if (!get_input_string('newval', 'new extension name', $newval)) return; 585 | if (!get_input_string('extname', 'extension name', $extname)) return; 586 | if (!get_input_int('extid', 'extension id', $extid)) return; 587 | 588 | $sqlnewval = db_escape_string($newval); 589 | $sql = "select * from alextreg_extensions where extname='$sqlnewval'"; 590 | $query = do_dbquery($sql); 591 | if ($query == false) 592 | return; // error output is handled in database.php ... 593 | 594 | if (db_num_rows($query) > 0) 595 | { 596 | write_error('The new extension name is in use. Below is what a search turned up.'); 597 | render_extension_list($extname, $query); 598 | db_free_result($query); 599 | return; 600 | } // if 601 | 602 | db_free_result($query); 603 | 604 | // Just a small sanity check. 605 | $cookie = $_REQUEST['iamsure']; 606 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 607 | { 608 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 609 | // ok, nuke it. 610 | $sql = "update alextreg_extensions set extname='$sqlnewval'," . 611 | " lastedit=NOW(), lasteditauthor='$sqlauthor' where id=$extid"; 612 | if (do_dbupdate($sql) == 1) 613 | { 614 | update_papertrail("Extension '$extname' renamed to '$newval'", $sql, NULL); 615 | do_showext($newval); 616 | } // if 617 | } // if 618 | else // put out a confirmation... 619 | { 620 | $form = get_form_tag(); 621 | $htmlnewval = htmlentities($newval, ENT_QUOTES); 622 | $htmlextname = htmlentities($extname, ENT_QUOTES); 623 | echo "About to rename an extension named '$htmlextname' to '$htmlnewval'.
\n"; 624 | echo "...if you're sure, click 'Confirm'...
\n"; 625 | echo "$form\n"; 626 | echo "\n"; 627 | echo "\n"; 628 | echo "\n"; 629 | echo "\n"; 630 | echo "\n"; 631 | echo "\n"; 632 | echo "\n"; 633 | } // else 634 | } // op_renameext 635 | 636 | 637 | $operations['op_renameent'] = 'op_renameent'; 638 | function op_renameent() 639 | { 640 | if (!welcome_here()) return; 641 | if (!get_input_string('entname', 'current entrypoint name', $entname)) return; 642 | if (!get_input_string('newval', 'new entrypoint name', $newval)) return; 643 | if (!get_input_string('extname', 'extension name', $extname)) return; 644 | if (!get_input_int('extid', 'extension id', $extid)) return; 645 | 646 | // see if it's already in the database... 647 | $sqlnewval = db_escape_string($newval); 648 | $sql = 'select ent.*, ext.extname from alextreg_entrypoints as ent' . 649 | ' left outer join alextreg_extensions as ext' . 650 | ' on ent.extid=ext.id' . 651 | " where (entrypointname='$sqlnewval')"; 652 | $query = do_dbquery($sql); 653 | if ($query == false) 654 | return; // error output is handled in database.php ... 655 | 656 | if (db_num_rows($query) > 0) 657 | { 658 | write_error('The new entry point is in use. Below is what a search turned up.'); 659 | render_entrypoint_list($newval, $query); 660 | db_free_result($query); 661 | return; 662 | } // if 663 | db_free_result($query); 664 | 665 | // Just a small sanity check. 666 | $cookie = $_REQUEST['iamsure']; 667 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 668 | { 669 | $sqlentname = db_escape_string($entname); 670 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 671 | // ok, nuke it. 672 | $sql = "update alextreg_entrypoints set entrypointname='$sqlnewval'," . 673 | " lastedit=NOW(), lasteditauthor='$sqlauthor'" . 674 | " where entrypointname='$sqlentname'"; 675 | if (do_dbupdate($sql) == 1) 676 | { 677 | update_papertrail("Entry point '$entname' renamed to '$newval'", $sql, $extid); 678 | do_showext($extname); 679 | } // if 680 | } // if 681 | else // put out a confirmation... 682 | { 683 | $form = get_form_tag(); 684 | $htmlnewval = htmlentities($newval, ENT_QUOTES); 685 | $htmlextname = htmlentities($extname, ENT_QUOTES); 686 | $htmlentname = htmlentities($entname, ENT_QUOTES); 687 | echo "About to rename an entry point named '$htmlentname' to '$htmlnewval'.
\n"; 688 | echo "...if you're sure, click 'Confirm'...
\n"; 689 | echo "$form\n"; 690 | echo "\n"; 691 | echo "\n"; 692 | echo "\n"; 693 | echo "\n"; 694 | echo "\n"; 695 | echo "\n"; 696 | echo "\n"; 697 | echo "\n"; 698 | } // else 699 | } // op_renameent 700 | 701 | 702 | $operations['op_renametok'] = 'op_renametok'; 703 | function op_renametok() 704 | { 705 | if (!welcome_here()) return; 706 | if (!get_input_string('tokname', 'current token name', $tokname)) return; 707 | if (!get_input_string('newval', 'new token name', $newval)) return; 708 | if (!get_input_string('extname', 'extension name', $extname)) return; 709 | if (!get_input_int('extid', 'extension id', $extid)) return; 710 | 711 | // see if it's already in the database... 712 | $sqlnewval = db_escape_string($newval); 713 | $sql = 'select tok.*, ext.extname from alextreg_tokens as tok' . 714 | ' left outer join alextreg_extensions as ext' . 715 | ' on tok.extid=ext.id' . 716 | " where (tokenname='$sqlnewval')"; 717 | $query = do_dbquery($sql); 718 | if ($query == false) 719 | return; // error output is handled in database.php ... 720 | 721 | if (db_num_rows($query) > 0) 722 | { 723 | write_error('The new token name is in use. Below is what a search turned up.'); 724 | render_token_list($newval, $query); 725 | db_free_result($query); 726 | return; 727 | } // if 728 | db_free_result($query); 729 | 730 | // Just a small sanity check. 731 | $cookie = $_REQUEST['iamsure']; 732 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 733 | { 734 | $sqltokname = db_escape_string($tokname); 735 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 736 | // ok, nuke it. 737 | $sql = "update alextreg_tokens set tokenname='$sqlnewval'," . 738 | " lastedit=NOW(), lasteditauthor='$sqlauthor'" . 739 | " where tokenname='$sqltokname'"; 740 | if (do_dbupdate($sql) == 1) 741 | { 742 | update_papertrail("Token '$tokname' renamed to '$newval'", $sql, $extid); 743 | do_showext($extname); 744 | } // if 745 | } // if 746 | else // put out a confirmation... 747 | { 748 | $form = get_form_tag(); 749 | $htmlnewval = htmlentities($newval, ENT_QUOTES); 750 | $htmlextname = htmlentities($extname, ENT_QUOTES); 751 | $htmltokname = htmlentities($tokname, ENT_QUOTES); 752 | echo "About to rename a token named '$htmltokname' to '$htmlnewval'.
\n"; 753 | echo "...if you're sure, click 'Confirm'...
\n"; 754 | echo "$form\n"; 755 | echo "\n"; 756 | echo "\n"; 757 | echo "\n"; 758 | echo "\n"; 759 | echo "\n"; 760 | echo "\n"; 761 | echo "\n"; 762 | echo "\n"; 763 | } // else 764 | } // op_renametok 765 | 766 | 767 | $operations['op_revaluetok'] = 'op_revaluetok'; 768 | function op_revaluetok() 769 | { 770 | if (!welcome_here()) return; 771 | if (!get_input_string('tokname', 'token name', $tokname)) return; 772 | if (!get_input_int('newval', 'new token value', $newval)) return; 773 | if (!get_input_string('extname', 'extension name', $extname)) return; 774 | if (!get_input_int('extid', 'extension id', $extid)) return; 775 | 776 | // see if it's already in the database... 777 | $sqlnewval = db_escape_string($newval); 778 | $sql = 'select tok.*, ext.extname from alextreg_tokens as tok' . 779 | ' left outer join alextreg_extensions as ext' . 780 | ' on tok.extid=ext.id' . 781 | " where (tokenval=$newval)"; 782 | $query = do_dbquery($sql); 783 | if ($query == false) 784 | return; // error output is handled in database.php ... 785 | 786 | if (db_num_rows($query) > 0) 787 | { 788 | write_error('Please note the new token value is in use, which may be okay. Below is what a search turned up.'); 789 | render_token_list(false, $query); 790 | } // if 791 | db_free_result($query); 792 | 793 | $hex = ''; 794 | if (sscanf($newval, "0x%X", &$dummy) != 1) 795 | $hex = sprintf(" (0x%X hex)", $newval); // !!! FIXME: faster way to do this? 796 | 797 | // Just a small sanity check. 798 | $cookie = $_REQUEST['iamsure']; 799 | if ((!empty($cookie)) and ($cookie == $_SERVER['REMOTE_ADDR'])) 800 | { 801 | $sqltokname = db_escape_string($tokname); 802 | $sqlauthor = db_escape_string($_SERVER['REMOTE_USER']); 803 | // ok, nuke it. 804 | $sql = "update alextreg_tokens set tokenval=$newval," . 805 | " lastedit=NOW(), lasteditauthor='$sqlauthor'" . 806 | " where tokenname='$sqltokname'"; 807 | if (do_dbupdate($sql) == 1) 808 | { 809 | update_papertrail("Token '$tokname' revalued to '$newval'${hex}", $sql, $extid); 810 | do_showext($extname); 811 | } // if 812 | } // if 813 | else // put out a confirmation... 814 | { 815 | $form = get_form_tag(); 816 | $htmlnewval = htmlentities($newval, ENT_QUOTES); 817 | $htmlextname = htmlentities($extname, ENT_QUOTES); 818 | $htmltokname = htmlentities($tokname, ENT_QUOTES); 819 | echo "About to change the value of a token named '$htmltokname' to ${newval}${hex}.
\n"; 820 | echo "...if you're sure, click 'Confirm'...
\n"; 821 | echo "$form\n"; 822 | echo "\n"; 823 | echo "\n"; 824 | echo "\n"; 825 | echo "\n"; 826 | echo "\n"; 827 | echo "\n"; 828 | echo "\n"; 829 | echo "\n"; 830 | } // else 831 | } // op_revaluetok 832 | 833 | 834 | function render_add_ui() 835 | { 836 | $form = get_form_tag(); 837 | echo <<< EOF 838 | 839 |

840 | ...or... 841 | 842 |

843 | $form 844 | Vendor: 845 | I want to add a new extension 846 | named . 847 | 848 | 849 | 850 | 851 | EOF; 852 | } // render_add_ui 853 | 854 | 855 | if (welcome_here()) 856 | { 857 | icculux(); 858 | if (do_operation()) 859 | echo "

Back to search page.\n"; 860 | else 861 | render_search_ui(); 862 | render_add_ui(); 863 | render_footer(); 864 | } // else 865 | 866 | ?> 867 | 868 | 869 | -------------------------------------------------------------------------------- /alextreg/vendor/wiki/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | AuthUserFile /webspace/projects/alextreg/vendor/.htpasswd 3 | AuthName "OpenAL Vendor Login" 4 | AuthType Basic 5 | Require valid-user 6 | 7 | 8 | -------------------------------------------------------------------------------- /alextreg/vendor/wiki/wiki.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict; 4 | use warnings; 5 | 6 | if (not defined $ENV{'REMOTE_USER'}) { 7 | print "Content-type: text/plain\n\n"; 8 | print "You are misconfigured. There needs to be basic auth in this dir.\n"; 9 | exit 1; 10 | } 11 | 12 | # brackets to avoid warning about system vs exec... 13 | { exec '../../wiki/wiki.pl'; } 14 | 15 | print "Content-type: text/plain\n\n"; 16 | print "exec failed: $!\n"; 17 | exit 1; 18 | 19 | # end of vendor wiki.pl ... 20 | 21 | -------------------------------------------------------------------------------- /alextreg/wiki/INSTALL: -------------------------------------------------------------------------------- 1 | Installation instructions for UseModWiki 1.0 2 | Last updated: September 11, 2003 3 | See the UPGRADE file for instructions to upgrade an existing wiki. 4 | 5 | ------ 6 | New Installations: 7 | 8 | The following instructions should work for most UNIX-based systems. 9 | See http://www.usemod.com/cgi-bin/wiki.pl?UseModWiki/InstallWindows for 10 | instructions if you are installing under Microsoft Windows. 11 | 12 | 1. Copy the file "wiki.pl" to your cgi-bin directory. You can rename 13 | the file to another name if you like. (Some servers may require 14 | the name to end in ".pl" or ".cgi".) 15 | 16 | 2. For some servers, you may need to change the permissions on the wiki.pl 17 | script. (The command "chmod 755 wiki.pl" should be correct.) 18 | 19 | 3. Create the wiki database directory. This directory must be writable 20 | by the wiki CGI script. (You may need to use another chmod command.) 21 | If the directory does not exist, the script will attempt to create it. 22 | 23 | 4. If your installation of Perl is not located in /usr/bin/perl, you will 24 | need to change the "/usr/bin/perl" text in the first line of wiki.pl. 25 | (On UNIX-like systems this is usually unnecessary. For Windows, 26 | "#!perl" (without the quotes) may also work.) 27 | 28 | 5. Edit the "wiki.pl" file. The configuration section starts around 29 | line 60. The main configuration variable is: 30 | 31 | $DataDir = "/tmp/mywikidb"; # Main page database 32 | 33 | ... which is the wiki database directory. The default directory is 34 | in /tmp, which is not a good location for a long-term wiki. (Many 35 | systems will erase the contents of /tmp when they crash or reboot.) 36 | Change this directory to the one you created in step 3, using the 37 | full path name, like "/home/domainname/www/wikidb". 38 | 39 | 6. Most of the wiki's configuration variables can be stored and edited 40 | outside the script. (You still need to edit the script to set the 41 | $DataDir variable.) To do this, copy the "config" file to your wiki's 42 | $DataDir directory and edit it. 43 | 44 | The advantage of editing the config file (rather than the script) is that 45 | upgrades to future versions are much easier--you only need to make the 46 | changes above rather than re-edit all of your local configuration. 47 | 48 | You will probably want to change the following configuration values: 49 | 50 | $CookieName = "Wiki"; # Name for this wiki (for multi-wiki sites) 51 | 52 | ... If your site uses multiple copies of UseModWiki, you must 53 | make sure that each copy has a unique $CookieName. The 54 | cookies store user-specific settings and preferences. 55 | 56 | $SiteName = "Wiki"; # Name of site (used for titles) 57 | 58 | ... This name is used in the title of every page. 59 | 60 | $HomePage = "HomePage"; # Home page (must be valid LinkPattern) 61 | 62 | ... This is the name of the wiki page users will go to when: 63 | * The user clicks on the logo image, or 64 | * The user does not specify a page in their URL. 65 | 66 | $LogoUrl = "/wiki.gif"; # URL for site logo ("" for no logo) 67 | 68 | ... This is the URL for the logo image. If it is "", the logo will 69 | not be displayed. 70 | 71 | 7. If you are installing the wiki on a web server using a non-standard 72 | port number (like 8080), then you must also set $FullUrl to the 73 | full path of your wiki, like: 74 | 75 | $FullUrl = "http://www.mydomain.com:8080/cgi-bin/wiki.pl"; 76 | 77 | If you are using a non-standard port and do not set $FullUrl, then 78 | the wiki may not go to the right URL after editing a page. 79 | 80 | (If your site's URLs are like "http://www.mydomain.com/pagename" 81 | (without a number like "8080"), then you should not need to 82 | modify the $FullUrl setting.) 83 | 84 | 8. If you wish to use the provided wiki.gif image, copy it to the top 85 | directory of your www pages. (Or see step 6 to change the LogoUrl 86 | variable.) 87 | 88 | 9. (Optional) To use the supplied InterWiki site definitions, copy the 89 | file "intermap" into the database directory (from step 3). 90 | 91 | 10. Start your web browser, and go to the URL of the wiki.pl script. 92 | You should be able to edit and add new pages. 93 | 94 | ------ 95 | Likely Problems: 96 | 97 | [Note that the path names (like /tmp/mydb/mywikidb) may be different 98 | in your error messages.] 99 | 100 | 1. The output message: 101 | Could not go to or create /tmp/mydb/mywikidb: No such file or directory 102 | ...means that the database directory in step 5 above did not exist, 103 | and the wiki script could not create the directory. 104 | 105 | 2. The output message: 106 | Could not go to or create /tmp/mydb/mywikidb: Permission denied 107 | ...means that the database directory exists, but it does not have the 108 | proper permissions for the script to read it. 109 | 110 | 3. If you see the message: 111 | can't make /tmp/mydb/mywikidb/lock: Permission denied 112 | ...when saving a page, it means that the script could not write to 113 | the database directory. 114 | 115 | 4. If you can save your changes, but you do not see the changed page after 116 | editing (or if you go to the wrong URL after editing), you may need to 117 | set the FullUrl configuration variable. A sample setting for this 118 | variable would be $FullUrl = "http://www.mysite.com/cgi-bin/mywiki.pl". 119 | 120 | 5. If saving a page takes more than 20-30 seconds, it is possible that 121 | there is a problem with the hostname lookup step. Try setting the 122 | $UseLookup configuration variable to 0. 123 | -------------------------------------------------------------------------------- /alextreg/wiki/LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 | 59 Temple Place, Suite 330, Boston, MA 6 | 02111-1307 USA 7 | Everyone is permitted to copy and distribute verbatim copies 8 | of this license document, but changing it is not allowed. 9 | 10 | Preamble 11 | 12 | The licenses for most software are designed to take away your 13 | freedom to share and change it. By contrast, the GNU General Public 14 | License is intended to guarantee your freedom to share and change free 15 | software--to make sure the software is free for all its users. This 16 | General Public License applies to most of the Free Software 17 | Foundation's software and to any other program whose authors commit to 18 | using it. (Some other Free Software Foundation software is covered by 19 | the GNU Library General Public License instead.) You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | this service if you wish), that you receive source code or can get it 26 | if you want it, that you can change the software or use pieces of it 27 | in new free programs; and that you know you can do these things. 28 | 29 | To protect your rights, we need to make restrictions that forbid 30 | anyone to deny you these rights or to ask you to surrender the rights. 31 | These restrictions translate to certain responsibilities for you if you 32 | distribute copies of the software, or if you modify it. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must give the recipients all the rights that 36 | you have. You must make sure that they, too, receive or can get the 37 | source code. And you must show them these terms so they know their 38 | rights. 39 | 40 | We protect your rights with two steps: (1) copyright the software, and 41 | (2) offer you this license which gives you legal permission to copy, 42 | distribute and/or modify the software. 43 | 44 | Also, for each author's protection and ours, we want to make certain 45 | that everyone understands that there is no warranty for this free 46 | software. If the software is modified by someone else and passed on, we 47 | want its recipients to know that what they have is not the original, so 48 | that any problems introduced by others will not reflect on the original 49 | authors' reputations. 50 | 51 | Finally, any free program is threatened constantly by software 52 | patents. We wish to avoid the danger that redistributors of a free 53 | program will individually obtain patent licenses, in effect making the 54 | program proprietary. To prevent this, we have made it clear that any 55 | patent must be licensed for everyone's free use or not licensed at all. 56 | 57 | The precise terms and conditions for copying, distribution and 58 | modification follow. 59 | 60 | GNU GENERAL PUBLIC LICENSE 61 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 62 | 63 | 0. This License applies to any program or other work which contains 64 | a notice placed by the copyright holder saying it may be distributed 65 | under the terms of this General Public License. The "Program", below, 66 | refers to any such program or work, and a "work based on the Program" 67 | means either the Program or any derivative work under copyright law: 68 | that is to say, a work containing the Program or a portion of it, 69 | either verbatim or with modifications and/or translated into another 70 | language. (Hereinafter, translation is included without limitation in 71 | the term "modification".) Each licensee is addressed as "you". 72 | 73 | Activities other than copying, distribution and modification are not 74 | covered by this License; they are outside its scope. The act of 75 | running the Program is not restricted, and the output from the Program 76 | is covered only if its contents constitute a work based on the 77 | Program (independent of having been made by running the Program). 78 | Whether that is true depends on what the Program does. 79 | 80 | 1. You may copy and distribute verbatim copies of the Program's 81 | source code as you receive it, in any medium, provided that you 82 | conspicuously and appropriately publish on each copy an appropriate 83 | copyright notice and disclaimer of warranty; keep intact all the 84 | notices that refer to this License and to the absence of any warranty; 85 | and give any other recipients of the Program a copy of this License 86 | along with the Program. 87 | 88 | You may charge a fee for the physical act of transferring a copy, and 89 | you may at your option offer warranty protection in exchange for a fee. 90 | 91 | 2. You may modify your copy or copies of the Program or any portion 92 | of it, thus forming a work based on the Program, and copy and 93 | distribute such modifications or work under the terms of Section 1 94 | above, provided that you also meet all of these conditions: 95 | 96 | a) You must cause the modified files to carry prominent notices 97 | stating that you changed the files and the date of any change. 98 | 99 | b) You must cause any work that you distribute or publish, that in 100 | whole or in part contains or is derived from the Program or any 101 | part thereof, to be licensed as a whole at no charge to all third 102 | parties under the terms of this License. 103 | 104 | c) If the modified program normally reads commands interactively 105 | when run, you must cause it, when started running for such 106 | interactive use in the most ordinary way, to print or display an 107 | announcement including an appropriate copyright notice and a 108 | notice that there is no warranty (or else, saying that you provide 109 | a warranty) and that users may redistribute the program under 110 | these conditions, and telling the user how to view a copy of this 111 | License. (Exception: if the Program itself is interactive but 112 | does not normally print such an announcement, your work based on 113 | the Program is not required to print an announcement.) 114 | 115 | These requirements apply to the modified work as a whole. If 116 | identifiable sections of that work are not derived from the Program, 117 | and can be reasonably considered independent and separate works in 118 | themselves, then this License, and its terms, do not apply to those 119 | sections when you distribute them as separate works. But when you 120 | distribute the same sections as part of a whole which is a work based 121 | on the Program, the distribution of the whole must be on the terms of 122 | this License, whose permissions for other licensees extend to the 123 | entire whole, and thus to each and every part regardless of who wrote 124 | it. 125 | 126 | Thus, it is not the intent of this section to claim rights or contest 127 | your rights to work written entirely by you; rather, the intent is to 128 | exercise the right to control the distribution of derivative or 129 | collective works based on the Program. 130 | 131 | In addition, mere aggregation of another work not based on the Program 132 | with the Program (or with a work based on the Program) on a volume of 133 | a storage or distribution medium does not bring the other work under 134 | the scope of this License. 135 | 136 | 3. You may copy and distribute the Program (or a work based on it, 137 | under Section 2) in object code or executable form under the terms of 138 | Sections 1 and 2 above provided that you also do one of the following: 139 | 140 | a) Accompany it with the complete corresponding machine-readable 141 | source code, which must be distributed under the terms of Sections 142 | 1 and 2 above on a medium customarily used for software interchange; 143 | or, 144 | 145 | b) Accompany it with a written offer, valid for at least three 146 | years, to give any third party, for a charge no more than your 147 | cost of physically performing source distribution, a complete 148 | machine-readable copy of the corresponding source code, to be 149 | distributed under the terms of Sections 1 and 2 above on a medium 150 | customarily used for software interchange; or, 151 | 152 | c) Accompany it with the information you received as to the offer 153 | to distribute corresponding source code. (This alternative is 154 | allowed only for noncommercial distribution and only if you 155 | received the program in object code or executable form with such 156 | an offer, in accord with Subsection b above.) 157 | 158 | The source code for a work means the preferred form of the work for 159 | making modifications to it. For an executable work, complete source 160 | code means all the source code for all modules it contains, plus any 161 | associated interface definition files, plus the scripts used to 162 | control compilation and installation of the executable. However, as a 163 | special exception, the source code distributed need not include 164 | anything that is normally distributed (in either source or binary 165 | form) with the major components (compiler, kernel, and so on) of the 166 | operating system on which the executable runs, unless that component 167 | itself accompanies the executable. 168 | 169 | If distribution of executable or object code is made by offering 170 | access to copy from a designated place, then offering equivalent 171 | access to copy the source code from the same place counts as 172 | distribution of the source code, even though third parties are not 173 | compelled to copy the source along with the object code. 174 | 175 | 4. You may not copy, modify, sublicense, or distribute the Program 176 | except as expressly provided under this License. Any attempt 177 | otherwise to copy, modify, sublicense or distribute the Program is 178 | void, and will automatically terminate your rights under this License. 179 | However, parties who have received copies, or rights, from you under 180 | this License will not have their licenses terminated so long as such 181 | parties remain in full compliance. 182 | 183 | 5. You are not required to accept this License, since you have not 184 | signed it. However, nothing else grants you permission to modify or 185 | distribute the Program or its derivative works. These actions are 186 | prohibited by law if you do not accept this License. Therefore, by 187 | modifying or distributing the Program (or any work based on the 188 | Program), you indicate your acceptance of this License to do so, and 189 | all its terms and conditions for copying, distributing or modifying 190 | the Program or works based on it. 191 | 192 | 6. Each time you redistribute the Program (or any work based on the 193 | Program), the recipient automatically receives a license from the 194 | original licensor to copy, distribute or modify the Program subject to 195 | these terms and conditions. You may not impose any further 196 | restrictions on the recipients' exercise of the rights granted herein. 197 | You are not responsible for enforcing compliance by third parties to 198 | this License. 199 | 200 | 7. If, as a consequence of a court judgment or allegation of patent 201 | infringement or for any other reason (not limited to patent issues), 202 | conditions are imposed on you (whether by court order, agreement or 203 | otherwise) that contradict the conditions of this License, they do not 204 | excuse you from the conditions of this License. If you cannot 205 | distribute so as to satisfy simultaneously your obligations under this 206 | License and any other pertinent obligations, then as a consequence you 207 | may not distribute the Program at all. For example, if a patent 208 | license would not permit royalty-free redistribution of the Program by 209 | all those who receive copies directly or indirectly through you, then 210 | the only way you could satisfy both it and this License would be to 211 | refrain entirely from distribution of the Program. 212 | 213 | If any portion of this section is held invalid or unenforceable under 214 | any particular circumstance, the balance of the section is intended to 215 | apply and the section as a whole is intended to apply in other 216 | circumstances. 217 | 218 | It is not the purpose of this section to induce you to infringe any 219 | patents or other property right claims or to contest validity of any 220 | such claims; this section has the sole purpose of protecting the 221 | integrity of the free software distribution system, which is 222 | implemented by public license practices. Many people have made 223 | generous contributions to the wide range of software distributed 224 | through that system in reliance on consistent application of that 225 | system; it is up to the author/donor to decide if he or she is willing 226 | to distribute software through any other system and a licensee cannot 227 | impose that choice. 228 | 229 | This section is intended to make thoroughly clear what is believed to 230 | be a consequence of the rest of this License. 231 | 232 | 8. If the distribution and/or use of the Program is restricted in 233 | certain countries either by patents or by copyrighted interfaces, the 234 | original copyright holder who places the Program under this License 235 | may add an explicit geographical distribution limitation excluding 236 | those countries, so that distribution is permitted only in or among 237 | countries not thus excluded. In such case, this License incorporates 238 | the limitation as if written in the body of this License. 239 | 240 | 9. The Free Software Foundation may publish revised and/or new 241 | versions 242 | of the General Public License from time to time. Such new versions will 243 | be similar in spirit to the present version, but may differ in detail to 244 | address new problems or concerns. 245 | 246 | Each version is given a distinguishing version number. If the Program 247 | specifies a version number of this License which applies to it and "any 248 | later version", you have the option of following the terms and 249 | conditions 250 | either of that version or of any later version published by the Free 251 | Software Foundation. If the Program does not specify a version number 252 | of 253 | this License, you may choose any version ever published by the Free 254 | Software 255 | Foundation. 256 | 257 | 10. If you wish to incorporate parts of the Program into other free 258 | programs whose distribution conditions are different, write to the 259 | author 260 | to ask for permission. For software which is copyrighted by the Free 261 | Software Foundation, write to the Free Software Foundation; we sometimes 262 | make exceptions for this. Our decision will be guided by the two goals 263 | of preserving the free status of all derivatives of our free software 264 | and 265 | of promoting the sharing and reuse of software generally. 266 | 267 | NO WARRANTY 268 | 269 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 270 | WARRANTY 271 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 272 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 273 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER 274 | EXPRESSED 275 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 276 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK 277 | AS 278 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 279 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 280 | REPAIR OR CORRECTION. 281 | 282 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 283 | WRITING 284 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 285 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 286 | DAMAGES, 287 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 288 | ARISING 289 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT 290 | LIMITED 291 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 292 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 293 | OTHER 294 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 295 | POSSIBILITY OF SUCH DAMAGES. 296 | 297 | END OF TERMS AND CONDITIONS 298 | 299 | How to Apply These Terms to Your New Programs 300 | 301 | If you develop a new program, and you want it to be of the greatest 302 | possible use to the public, the best way to achieve this is to make it 303 | free software which everyone can redistribute and change under these 304 | terms. 305 | 306 | To do so, attach the following notices to the program. It is safest 307 | to attach them to the start of each source file to most effectively 308 | convey the exclusion of warranty; and each file should have at least 309 | the "copyright" line and a pointer to where the full notice is found. 310 | 311 | 313 | Copyright (C) 19yy 314 | 315 | This program is free software; you can redistribute it and/or modify 316 | it under the terms of the GNU General Public License as published by 317 | the Free Software Foundation; either version 2 of the License, or 318 | (at your option) any later version. 319 | 320 | This program is distributed in the hope that it will be useful, 321 | but WITHOUT ANY WARRANTY; without even the implied warranty of 322 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 323 | GNU General Public License for more details. 324 | 325 | You should have received a copy of the GNU General Public License 326 | along with this program; if not, write to the Free Software 327 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 328 | USA 329 | 330 | 331 | Also add information on how to contact you by electronic and paper mail. 332 | 333 | If the program is interactive, make it output a short notice like this 334 | when it starts in an interactive mode: 335 | 336 | Gnomovision version 69, Copyright (C) 19yy name of author 337 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 338 | `show w'. 339 | This is free software, and you are welcome to redistribute it 340 | under certain conditions; type `show c' for details. 341 | 342 | The hypothetical commands `show w' and `show c' should show the 343 | appropriate 344 | parts of the General Public License. Of course, the commands you use 345 | may 346 | be called something other than `show w' and `show c'; they could even be 347 | mouse-clicks or menu items--whatever suits your program. 348 | 349 | You should also get your employer (if you work as a programmer) or your 350 | school, if any, to sign a "copyright disclaimer" for the program, if 351 | necessary. Here is a sample; alter the names: 352 | 353 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 354 | `Gnomovision' (which makes passes at compilers) written by James 355 | Hacker. 356 | 357 | , 1 April 1989 358 | Ty Coon, President of Vice 359 | 360 | This General Public License does not permit incorporating your program 361 | into 362 | proprietary programs. If your program is a subroutine library, you may 363 | consider it more useful to permit linking proprietary applications with 364 | the 365 | library. If this is what you want to do, use the GNU Library General 366 | Public License instead of this License. 367 | 368 | -------------------------------------------------------------------------------- /alextreg/wiki/README: -------------------------------------------------------------------------------- 1 | README for UseModWiki 1.0 2 | Last updated: August 1, 2003 3 | 4 | Release notes: 5 | 6 | Visit http://www.usemod.com/cgi-bin/wiki.pl for documentation and official 7 | announcements regarding UseModWiki. The current documentation is minimal, 8 | but the developers and some users will try to answer any questions. 9 | 10 | Please send questions or comments to usemod@usemod.com. 11 | 12 | A mailing list for major UseModWiki announcements (releases and critical 13 | bugs) is available. Send mail to usemod@usemod.com to join the list. 14 | 15 | ------ 16 | Security: 17 | 18 | Wiki administrators should be aware of the risks of enabling the HTML 19 | or email options in UseModWiki. Permitting full HTML editing allows a 20 | malicious user to cause the browsers of other users to execute 21 | arbitrary Javascript, Java applets, or other possible sources of 22 | security holes. The email option could be misused to send annoying 23 | mail to third parties (since no validation is done on the email 24 | addresses entered into the Preferences page). These options may be 25 | useful for small trusted groups, but they are not advised for wikis 26 | open to the general public. 27 | -------------------------------------------------------------------------------- /alextreg/wiki/UPGRADE: -------------------------------------------------------------------------------- 1 | Upgrade instructions for UseModWiki 1.0 2 | Last updated: September 11, 2003 3 | See the INSTALL file for new installations. 4 | 5 | Please email usemod@usemod.com with any questions, comments, or suggestions. 6 | 7 | ------ 8 | Upgrading from 0.90, 0.91, or 0.92: 9 | 10 | 1. Make a backup of your current wiki script and your database directory 11 | ($DataDir). 12 | 13 | 2. Copy the wiki.pl file to your cgi-bin directory, overwriting your 14 | old wiki script. You may need to change the permissions on the 15 | new script file. 16 | 17 | 3. Edit the wiki script in your cgi-bin directory, and change the line 18 | reading: $DataDir = "/tmp/mywikidb"; # Main wiki directory 19 | ...to point to your existing wiki database directory. 20 | 21 | 4. If you are using the "config"-file method for your wiki settings, 22 | you can stop here (if you accept the defaults for new settings). 23 | If you want to change these settings, copy the appropriate lines from 24 | the new settings below to your config file and change them there. 25 | 26 | 5. If you did *not* use the config-file method for your settings, change 27 | the settings in the new script to match your old script. 28 | 29 | Note that the default settings enable the "free-links" feature. If you 30 | want to continue using a "traditional" wiki (that does not allow free-links), 31 | you should change $FreeLinks to 0. 32 | 33 | ------ 34 | Upgrading from older versions (before 0.90) is possible, but requires 35 | a conversion utility for the database. Contact usemod@usemod.com for 36 | upgrade instructions. 37 | 38 | ------ 39 | # New configuration settings added after 0.92: 40 | $InterWikiMoniker = ''; # InterWiki moniker for this wiki. (for RSS) 41 | $SiteDescription = $SiteName; # Description of this wiki. (for RSS) 42 | $RssLogoUrl = ''; # Optional image for RSS feed 43 | $KeepSize = 0; # If non-zero, maximum size of keep file 44 | $BGColor = 'white'; # Background color ('' to disable) 45 | $DiffColor1 = '#ffffaf'; # Background color of old/deleted text 46 | $DiffColor2 = '#cfffcf'; # Background color of new/added text 47 | $FavIcon = ''; # URL of bookmark/favorites icon, or '' 48 | $RssDays = 7; # Default number of days in RSS feed 49 | $UserHeader = ''; # Optional HTML header additional content 50 | $UserBody = ''; # Optional tag additional content 51 | $EarlyRules = ''; # Local syntax rules for wiki->html (evaled) 52 | $LateRules = ''; # Local syntax rules for wiki->html (evaled) 53 | $StartUID = 1001; # Starting number for user IDs 54 | $UploadDir = ''; # Full path (like /foo/www/uploads) for files 55 | $UploadUrl = ''; # Full URL (like http://foo.com/uploads) 56 | @ImageSites = qw(); # Url prefixes of good image sites: ()=all 57 | 58 | $DeletedPage = 'DeletedPage'; # 0 = disable, 'PageName' = tag to delete page 59 | $ReplaceFile = 'ReplaceFile'; # 0 = disable, 'PageName' = indicator tag 60 | @ReplaceableFiles = (); # List of allowed server files to replace 61 | $TableSyntax = 1; # 1 = wiki syntax tables, 0 = no table syntax 62 | $NewFS = 0; # 1 = new multibyte $FS, 0 = old $FS 63 | $UseUpload = 0; # 1 = allow uploads, 0 = no uploads 64 | 65 | $MetaKeywords = 1; # 1 = Google-friendly, 0 = search-engine averse 66 | $NamedAnchors = 1; # 0 = no anchors, 1 = enable anchors, 67 | # 2 = enable but suppress display 68 | $SlashLinks = 0; # 1 = use script/action links, 0 = script?action 69 | $UpperFirst = 1; # 1 = free links start uppercase, 0 = no ucfirst 70 | $AdminBar = 1; # 1 = admins see admin links, 0 = no admin bar 71 | $RepInterMap = 0; # 1 = intermap is replacable, 0 = not replacable 72 | $ConfirmDel = 1; # 1 = delete link confirm page, 0 = immediate delete 73 | $MaskHosts = 0; # 1 = mask hosts/IPs, 0 = no masking 74 | $LockCrash = 0; # 1 = crash if lock stuck, 0 = auto clear locks 75 | $HistoryEdit = 0; # 1 = edit links on history page, 0 = no edit links 76 | $OldThinLine = 0; # 1 = old ==== thick line, 0 = ------ for thick line 77 | $NumberDates = 0; # 1 = 2003-6-17 dates, 0 = June 17, 2003 dates 78 | $ParseParas = 0; # 1 = new paragraph markup, 0 = old markup 79 | $AuthorFooter = 1; # 1 = show last author in footer, 0 = do not show 80 | $AllUpload = 0; # 1 = anyone can upload, 0 = only editor/admins 81 | $LimitFileUrl = 1; # 1 = limited use of file: URLs, 0 = no limits 82 | $MaintTrimRc = 0; # 1 = maintain action trims RC, 0 = only maintainrc 83 | $SearchButton = 0; # 1 = search button on page, 0 = old behavior 84 | $EditNameLink = 0; # 1 = edit links use name (CSS), 0 = '?' links 85 | $UseMetaWiki = 0; # 1 = add MetaWiki search links, 0 = no MW links 86 | $BracketImg = 1; # 1 = [url url.gif] becomes image link, 0 = no img 87 | 88 | # Names of sites. (The first entry is used for the number link.) 89 | @IsbnNames = ('bn.com', 'amazon.com', 'powells.com', 'search'); 90 | # Full URL of each site before the ISBN 91 | @IsbnPre = ('http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=', 92 | 'http://www.amazon.com/exec/obidos/ISBN=', 93 | 'http://www.powells.com/cgi-bin/biblio?isbn=', 94 | 'http://www.pricescan.com/books/BookDetail.asp?isbn='); 95 | # Rest of URL of each site after the ISBN (usually '') 96 | @IsbnPost = ('', '', '', ''); 97 | 98 | $EmailFile = "$DataDir/emails"; # Email notification lists 99 | # End of new configuration settings 100 | ==== end of UPGRADE document ==== 101 | -------------------------------------------------------------------------------- /alextreg/wiki/config: -------------------------------------------------------------------------------- 1 | # == Configuration ======================================================= 2 | # Original version from UseModWiki 1.0 3 | 4 | $CookieName = "alextreg"; # Name for this wiki (for multi-wiki sites) 5 | $SiteName = "alextreg"; # Name of site (used for titles) 6 | $HomePage = "HomePage"; # Home page (change space to _) 7 | $RCName = "RecentChanges"; # Name of changes page (change space to _) 8 | $LogoUrl = ""; # URL for site logo ("" for no logo) 9 | $ENV{PATH} = "/usr/bin/"; # Path used to find "diff" 10 | $ScriptTZ = ""; # Local time zone ("" means do not print) 11 | $RcDefault = 30; # Default number of RecentChanges days 12 | @RcDays = qw(1 3 7 30 90); # Days for links on RecentChanges 13 | $KeepDays = 14; # Days to keep old revisions 14 | $SiteBase = ""; # Full URL for header 15 | $FullUrl = ""; # Set if the auto-detected URL is wrong 16 | $RedirType = 1; # 1 = CGI.pm, 2 = script, 3 = no redirect 17 | $AdminPass = ""; # Set to non-blank to enable password(s) 18 | $EditPass = ""; # Like AdminPass, but for editing only 19 | $StyleSheet = ""; # URL for CSS stylesheet (like "/wiki.css") 20 | $NotFoundPg = ""; # Page for not-found links ("" for blank pg) 21 | $EmailFrom = "alextreg wiki "; # Text for "From: " field of email notes. 22 | $SendMail = "/usr/sbin/sendmail"; # Full path to sendmail executable 23 | $FooterNote = ""; # HTML for bottom of every page 24 | $EditNote = ""; # HTML notice above buttons on edit page 25 | $MaxPost = 1024 * 210; # Maximum 210K posts (about 200K for pages) 26 | $NewText = ""; # New page text ("" for default message) 27 | $HttpCharset = ""; # Charset for pages, like "iso-8859-2" 28 | $UserGotoBar = ""; # HTML added to end of goto bar 29 | $InterWikiMoniker = ''; # InterWiki moniker for this wiki. (for RSS) 30 | $SiteDescription = $SiteName; # Description of this wiki. (for RSS) 31 | $RssLogoUrl = ''; # Optional image for RSS feed 32 | $EarlyRules = ''; # Local syntax rules for wiki->html (evaled) 33 | $LateRules = ''; # Local syntax rules for wiki->html (evaled) 34 | $KeepSize = 0; # If non-zero, maximum size of keep file 35 | $BGColor = 'white'; # Background color ('' to disable) 36 | $DiffColor1 = '#ffffaf'; # Background color of old/deleted text 37 | $DiffColor2 = '#cfffcf'; # Background color of new/added text 38 | $FavIcon = ''; # URL of bookmark/favorites icon, or '' 39 | $RssDays = 7; # Default number of days in RSS feed 40 | $UserHeader = ''; # Optional HTML header additional content 41 | $UserBody = ''; # Optional tag additional content 42 | $StartUID = 1001; # Starting number for user IDs 43 | $UploadDir = ''; # Full path (like /foo/www/uploads) for files 44 | $UploadUrl = ''; # Full URL (like http://foo.com/uploads) 45 | @ImageSites = qw(); # Url prefixes of good image sites: ()=all 46 | 47 | # Major options: 48 | $UseSubpage = 0; # 1 = use subpages, 0 = do not use subpages 49 | $UseCache = 0; # 1 = cache HTML pages, 0 = generate every page 50 | 51 | #$EditAllowed = 0; # 1 = editing allowed, 0 = read-only 52 | # Allow editing if auth'd. --ryan. 53 | $EditAllowed = defined $ENV{'REMOTE_USER'}; 54 | 55 | $RawHtml = 0; # 1 = allow tag, 0 = no raw HTML in pages 56 | $HtmlTags = 0; # 1 = "unsafe" HTML tags, 0 = only minimal tags 57 | $UseDiff = 1; # 1 = use diff features, 0 = do not use diff 58 | $FreeLinks = 1; # 1 = use [[word]] links, 0 = LinkPattern only 59 | $WikiLinks = 1; # 1 = use LinkPattern, 0 = use [[word]] only 60 | $AdminDelete = 1; # 1 = Admin only deletes, 0 = Editor can delete 61 | $RunCGI = 1; # 1 = Run script as CGI, 0 = Load but do not run 62 | $EmailNotify = 0; # 1 = use email notices, 0 = no email on changes 63 | $EmbedWiki = 0; # 1 = no headers/footers, 0 = normal wiki pages 64 | $DeletedPage = 'DeletedPage'; # 0 = disable, 'PageName' = tag to delete page 65 | $ReplaceFile = 'ReplaceFile'; # 0 = disable, 'PageName' = indicator tag 66 | @ReplaceableFiles = (); # List of allowed server files to replace 67 | $TableSyntax = 1; # 1 = wiki syntax tables, 0 = no table syntax 68 | $NewFS = 0; # 1 = new multibyte $FS, 0 = old $FS 69 | $UseUpload = 0; # 1 = allow uploads, 0 = no uploads 70 | 71 | # Minor options: 72 | $LogoLeft = 0; # 1 = logo on left, 0 = logo on right 73 | $RecentTop = 1; # 1 = recent on top, 0 = recent on bottom 74 | $UseDiffLog = 1; # 1 = save diffs to log, 0 = do not save diffs 75 | $KeepMajor = 1; # 1 = keep major rev, 0 = expire all revisions 76 | $KeepAuthor = 1; # 1 = keep author rev, 0 = expire all revisions 77 | $ShowEdits = 0; # 1 = show minor edits, 0 = hide edits by default 78 | $HtmlLinks = 0; # 1 = allow A HREF links, 0 = no raw HTML links 79 | $SimpleLinks = 0; # 1 = only letters, 0 = allow _ and numbers 80 | $NonEnglish = 0; # 1 = extra link chars, 0 = only A-Za-z chars 81 | $ThinLine = 0; # 1 = fancy


tags, 0 = classic wiki
82 | $BracketText = 1; # 1 = allow [URL text], 0 = no link descriptions 83 | $UseAmPm = 1; # 1 = use am/pm in times, 0 = use 24-hour times 84 | $UseIndex = 0; # 1 = use index file, 0 = slow/reliable method 85 | $UseHeadings = 1; # 1 = allow = h1 text =, 0 = no header formatting 86 | $NetworkFile = 1; # 1 = allow remote file:, 0 = no file:// links 87 | $BracketWiki = 0; # 1 = [WikiLnk txt] link, 0 = no local descriptions 88 | $UseLookup = 1; # 1 = lookup host names, 0 = skip lookup (IP only) 89 | $FreeUpper = 1; # 1 = force upper case, 0 = do not force case 90 | $FastGlob = 1; # 1 = new faster code, 0 = old compatible code 91 | $MetaKeywords = 1; # 1 = Google-friendly, 0 = search-engine averse 92 | $NamedAnchors = 1; # 0 = no anchors, 1 = enable anchors, 93 | # 2 = enable but suppress display 94 | $SlashLinks = 1; # 1 = use script/action links, 0 = script?action 95 | $UpperFirst = 1; # 1 = free links start uppercase, 0 = no ucfirst 96 | $AdminBar = 1; # 1 = admins see admin links, 0 = no admin bar 97 | $RepInterMap = 0; # 1 = intermap is replacable, 0 = not replacable 98 | $ConfirmDel = 1; # 1 = delete link confirm page, 0 = immediate delete 99 | $MaskHosts = 0; # 1 = mask hosts/IPs, 0 = no masking 100 | $LockCrash = 0; # 1 = crash if lock stuck, 0 = auto clear locks 101 | $HistoryEdit = 0; # 1 = edit links on history page, 0 = no edit links 102 | $OldThinLine = 0; # 1 = old ==== thick line, 0 = ------ for thick line 103 | $NumberDates = 0; # 1 = 2003-6-17 dates, 0 = June 17, 2003 dates 104 | $ParseParas = 0; # 1 = new paragraph markup, 0 = old markup 105 | $AuthorFooter = 1; # 1 = show last author in footer, 0 = do not show 106 | $AllUpload = 0; # 1 = anyone can upload, 0 = only editor/admins 107 | $LimitFileUrl = 1; # 1 = limited use of file: URLs, 0 = no limits 108 | $MaintTrimRc = 0; # 1 = maintain action trims RC, 0 = only maintainrc 109 | $SearchButton = 0; # 1 = search button on page, 0 = old behavior 110 | $EditNameLink = 0; # 1 = edit links use name (CSS), 0 = '?' links 111 | $UseMetaWiki = 0; # 1 = add MetaWiki search links, 0 = no MW links 112 | $BracketImg = 1; # 1 = [url url.gif] becomes image link, 0 = no img 113 | 114 | # Names of sites. (The first entry is used for the number link.) 115 | @IsbnNames = ('bn.com', 'amazon.com', 'search'); 116 | # Full URL of each site before the ISBN 117 | @IsbnPre = ('http://shop.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=', 118 | 'http://www.amazon.com/exec/obidos/ISBN=', 119 | 'http://www.pricescan.com/books/BookDetail.asp?isbn='); 120 | # Rest of URL of each site after the ISBN (usually '') 121 | @IsbnPost = ('', '', ''); 122 | 123 | # HTML tag lists, enabled if $HtmlTags is set. 124 | # Scripting is currently possible with these tags, 125 | # so they are *not* particularly "safe". 126 | # Tags that must be in ... pairs: 127 | @HtmlPairs = qw(b i u font big small sub sup h1 h2 h3 h4 h5 h6 cite code 128 | em s strike strong tt var div center blockquote ol ul dl table caption); 129 | # Single tags (that do not require a closing /tag) 130 | @HtmlSingle = qw(br p hr li dt dd tr td th); 131 | @HtmlPairs = (@HtmlPairs, @HtmlSingle); # All singles can also be pairs 132 | 133 | # == You should not have to change anything below this line. ============= 134 | $IndentLimit = 20; # Maximum depth of nested lists 135 | $PageDir = "$DataDir/page"; # Stores page data 136 | $HtmlDir = "$DataDir/html"; # Stores HTML versions 137 | $UserDir = "$DataDir/user"; # Stores user data 138 | $KeepDir = "$DataDir/keep"; # Stores kept (old) page data 139 | $TempDir = "$DataDir/temp"; # Temporary files and locks 140 | $LockDir = "$TempDir/lock"; # DB is locked if this exists 141 | $InterFile = "$DataDir/intermap"; # Interwiki site->url map 142 | $RcFile = "$DataDir/rclog"; # New RecentChanges logfile 143 | $RcOldFile = "$DataDir/oldrclog"; # Old RecentChanges logfile 144 | $IndexFile = "$DataDir/pageidx"; # List of all pages 145 | $EmailFile = "$DataDir/emails"; # Email notification lists 146 | $NoCreateLinks = 1; # 1 = don't make those '?' links, 0 = make them. 147 | $PrinterMode = 0; # 1 = trim out some stuff, 0 = work as usual. 148 | 149 | # == End of Configuration ================================================= 150 | -------------------------------------------------------------------------------- /alextreg/wiki/index.php: -------------------------------------------------------------------------------- 1 | Blank 2 |
Nothing to see here, folks.
3 | -------------------------------------------------------------------------------- /alextreg/wiki/intermap: -------------------------------------------------------------------------------- 1 | Acronym http://www.acronymfinder.com/af-query.asp?String=exact&Acronym= 2 | Cache http://www.google.com/search?q=cache: 3 | Dictionary http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query= 4 | Google http://www.google.com/search?q= 5 | GoogleGroups http://groups.google.com/groups?q= 6 | IMDB http://us.imdb.com/Title? 7 | JargonFile http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect= 8 | UseMod http://www.usemod.com/cgi-bin/wiki.pl? 9 | Wiki http://c2.com/cgi/wiki? 10 | WikiPedia http://www.wikipedia.org/wiki/ 11 | -------------------------------------------------------------------------------- /alextreg/wiki/wiki.css: -------------------------------------------------------------------------------- 1 | /* The following is a sample CSS file for UseModWiki 1.0. 2 | It is not pretty, but it demonstrates all of the new DIVs and 3 | tag classes. */ 4 | DIV.wikitext { 5 | background-color : #ccc; 6 | } 7 | DIV.wikipreview { 8 | background-color : Lightblue; 9 | } 10 | DIV.wikiheader { 11 | background-color : Lightpink; 12 | } 13 | DIV.wikirc { 14 | background-color : Lightblue; 15 | } 16 | DIV.wikifooter { 17 | background-color : Lightpink; 18 | } 19 | DIV.wikipref { 20 | background-color : orange; 21 | } 22 | HR.wikilinefooter { 23 | height : 3px; 24 | } 25 | HR.wikilineheader { 26 | height : 2px; 27 | border : double; 28 | } 29 | HR.wikiline { 30 | height : 2px; 31 | color : blue; 32 | } 33 | HR.wikilinepref { 34 | color : red; 35 | height : 5px; 36 | } 37 | A.wikipagelink { 38 | background-color : orange; 39 | } 40 | A.wikipageedit { 41 | color : red; 42 | border-bottom : 1px dotted #a00 43 | } 44 | TABLE.wikidiffold { 45 | background-color : orange; 46 | } 47 | TABLE.wikidiffnew { 48 | background-color : Lightgreen; 49 | } 50 | -------------------------------------------------------------------------------- /alextreg/wiki/wiki.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/alextreg/wiki/wiki.gif -------------------------------------------------------------------------------- /body.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

OpenAL

5 | 6 |
7 |
8 |
9 |
10 |

Efficient

OpenAL renders 3D sound quickly. Your buffer will be perfectly filled.

11 |
12 |
13 |
14 |
15 |

Simple

Ever written OpenGL code? You already know how to work with OpenAL.

16 |
17 |
18 |
19 |
20 |

Open API

Remember EAX and A3D? Forget them. OpenAL is vendor neutral.

21 |
22 |
23 |
24 |
25 |
26 | 27 | 28 |
29 |
30 |
31 |

What is OpenAL?

32 |
33 |

OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.

34 | 35 | The library models a collection of audio sources moving in a 3D space that are heard by a single listener somewhere in that space. The basic OpenAL objects are a Listener, a Source, and a Buffer. There can be a large number of Buffers, which contain audio data. Each buffer can be attached to one or more Sources, which represent points in 3D space which are emitting audio. There is always one Listener object (per audio context), which represents the position where the sources are heard -- rendering is done from the perspective of the Listener.

36 | Get started developing today. 37 |
38 |
39 |
40 | -------------------------------------------------------------------------------- /css/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | A custom Bootstrap 3.1 template 3 | from http://bootply.com 4 | 5 | This CSS code should follow the 'bootstrap.css' 6 | in your HTML file. 7 | 8 | license: MIT 9 | author: bootply.com 10 | */ 11 | 12 | html,body { 13 | height:100%; 14 | background:center no-repeat fixed url('../openalheader.jpg'); 15 | background-size: cover; 16 | } 17 | 18 | .icon-bar { 19 | background-color:#fff; 20 | } 21 | 22 | .navbar-trans { 23 | background-color:#279ddd; 24 | color:#fff; 25 | } 26 | 27 | .navbar-trans li>a:hover,.navbar-trans li>a:focus,.navbar-trans li.active { 28 | background-color:#38afef; 29 | } 30 | 31 | .navbar-trans a{ 32 | color:#fefefe; 33 | } 34 | 35 | .navbar-trans .form-control:focus { 36 | border-color: #eee; 37 | outline: 0; 38 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(100,100,100,0.6); 39 | box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(100,100,100,0.6); 40 | } 41 | 42 | section { 43 | padding-top:70px; 44 | padding-bottom:50px; 45 | min-height:calc(100% - 1px); 46 | } 47 | 48 | .v-center { 49 | padding-top:10%; 50 | font-size:70px; 51 | } 52 | 53 | .well { 54 | border-color:transparent; 55 | } 56 | 57 | a.list-group-item.active,[class*='-info'] { 58 | background-color: #168ccc; 59 | color:#fff; 60 | } 61 | 62 | #section1 { 63 | /* background-color: #168ccc; */ 64 | color: white; 65 | background: rgba(0,0,0,0.3); 66 | 67 | } 68 | 69 | #section2 { 70 | background-color: #e5e5ef; 71 | color:#686868; 72 | } 73 | 74 | #section3 { 75 | background-color: #168ccc; 76 | color:#ddd; 77 | } 78 | 79 | #section4 { 80 | background-color: #fff; 81 | color:#444; 82 | } 83 | 84 | #section5,#section7,#section7 a { 85 | color:#f5f5f5; 86 | } 87 | 88 | #section6 { 89 | background-color: #168ccc; 90 | color:#ddd; 91 | } 92 | 93 | footer { 94 | background-color:#494949; 95 | color:#ddd; 96 | min-height:100px; 97 | padding-top:20px; 98 | padding-bottom:40px; 99 | text-align:center 100 | } 101 | 102 | footer .nav>li>a { 103 | padding:3px; 104 | color:#ccc; 105 | } 106 | 107 | footer .nav>li>a:hover { 108 | background-color:transparent; 109 | color:#fff; 110 | } -------------------------------------------------------------------------------- /documentation/OpenAL_Deployment_Guide_PCWIN.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/documentation/OpenAL_Deployment_Guide_PCWIN.pdf -------------------------------------------------------------------------------- /documentation/OpenAL_Effects_Extension_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/documentation/OpenAL_Effects_Extension_Guide.pdf -------------------------------------------------------------------------------- /documentation/OpenAL_Programmers_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/documentation/OpenAL_Programmers_Guide.pdf -------------------------------------------------------------------------------- /documentation/documentation.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Documentation

5 |
6 |

Get started adding OpenAL to your application today with this documentation in a pdf.

7 |
8 | 9 |

OpenAL 1.1 specification (PDF)

10 |
11 | 12 |

OpenAL Programmers Guide (PDF)

13 |
14 | 15 |

OpenAL Effects Extension Guide (PDF)

16 |
17 | 18 |

OpenAL Deployment Guide PC/Windows (PDF)

19 |
20 |
21 |
22 |
23 |
24 |
25 | 26 |

Extensions

27 |

Multi-Platform Extensions

28 | 29 |

These are registered extensions which are used for multiple implementations on multiple platforms.
30 | ALC_ENUMERATION_EXT -- enumeration of available devices (sample code in altest)
31 | ALC_EXT_CAPTURE -- capture functionality; documentation is in the OpenAL 1.1 Specification
32 | AL_EXT_MP3 -- MP3 audio format support

33 | 34 |

Linux/Standard Implementation Extensions

35 | 36 |

ALC_LOKI_audio_channel -- get/set the volume settings for the current context
37 | LOKI_buffer_data_callback -- a buffer callback mechanism
38 | LOKI_IMA_ADPCM_format -- ADPCM format
39 | LOKI_WAVE_format -- WAVE format
40 | LOKI_play_position -- playback position query
41 | LOKI_quadriphonic -- 4 speaker rendering
42 | EXT_vorbis -- Ogg Vorbis buffer format

43 | 44 |

MacOS Extensions

45 | 46 |

ALC_EXT_MAC_OSX: A Mac OSX-specific extension set.
47 | ALC_EXT_STATIC_BUFFER: Support for buffers at a static memory location ("no copy buffers").
48 | ALC_EXT_ASA: Apple Spatial Audio extension.
49 | ALC_EXT_ASA_ROGER_BEEP: Extends the Apple Spatial Audio Extension (ALC_EXT_ASA) with a Roger Beep Effect when the RogerBeep AudioUnit is present on the system
50 | ALC_EXT_ASA_DISTORTION: Extends the Apple Spatial Audio Extension (ALC_EXT_ASA) with a Distortion Effect when the Distortion AudioUnit is present on the system

51 | 52 |

Windows Extensions

53 | 54 |

EAX2.0 -- EAX 2.0 calls
55 | EAX3.0 -- EAX 3.0 calls
56 | EAX4.0 -- EAX 4.0 calls
57 | EAX5.0 -- EAX 5.0 calls
58 | ALC_EXT_EFX -- Effects Extension (documentation in the OpenAL SDK)
59 | EAX_RAM -- XRAM support (documentation in the OpenAL SDK)
60 | AL_EXT_ALAW -- ALAW audio format support
61 | AL_EXT_DOUBLE -- double audio format support
62 | AL_EXT_FLOAT32 -- float32 audio format support
63 | AL_EXT_IMA4 -- IMA4 audio format support
64 | AL_EXT_MULAW -- MULAW audio format support
65 | AL_EXT_MCFORMATS -- multi-channel audio format support

66 | 67 |

OpenAL Extension API Database

68 | 69 | Documentation queries can be made for extension, token or function names at the OpenAL Extension Registry 70 |
71 |
72 |
73 | -------------------------------------------------------------------------------- /documentation/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /documentation/openal-1.1-specification.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/documentation/openal-1.1-specification.pdf -------------------------------------------------------------------------------- /downloads/OpenAL11CoreSDK.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/downloads/OpenAL11CoreSDK.zip -------------------------------------------------------------------------------- /downloads/downloads.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Downloads

5 |
6 |

We've got the SDK and Installer from Creative Labs.

7 |
8 | 9 |

OpenAL 1.1 Core SDK (zip)

10 |
11 | 12 |

OpenAL 1.1 Windows Installer (zip)

13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /downloads/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /downloads/oalinst.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/downloads/oalinst.zip -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /games/games.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Games

5 |
6 |

These are just some of the games that use OpenAL

7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
GamePlatforms
Alien Flux Linux, Macintosh, Windows
America's Army: Operations Linux, Macintosh, Windows
A Tale in the Desert II Linux, Macintosh, Windows
AeroFly Professional DeluxeWindows
Battlefield 2 Windows
Battlefield 2142 Windows
Battle Just Started Linux, Macintosh, Windows
Blast Miner Windows
Bioshock Windows
Bridge Construction Set Linux, Macintosh, Windows
Call Of Juarez Windows
Cold War Linux, Windows
Colin McRae: DiRT Windows
Dark Horizons: Lore Linux, Macintosh, Windows
Doom 3 Macintosh, Windows
Dungeons & Dragons Online Windows
El Matador Windows
Escape From Monkey Island Macintosh
Eternal Lands FreeBSD, Linux, Mac OS X, Windows
E.V.E. Paradox Linux, Windows
FlightGear FreeBSD, Linux, Macintosh, sgi, Solaris, Windows
Ghost Recon: Advanced Warfighter Windows
Gish Linux, Macintosh, Windows
Glest Linux Port
Heavy Metal: F.A.K.K.2 Linux
Heroes of Malgrimia II: Nekros InvasionWindows
Hot Potato Online Linux, Windows
ioquake3Mac OS X, Linux, Windows
Jedi Knight: Jedi Academy Macintosh, Windows
Jedi Knight 2 Macintosh, Windows
Just CauseWindows
KohanLinux
Krabbit Linux, XFree86
Legends FreeBSD, Linux, Macintosh, Windows, XFree86
Lineage 2 Windows
The Lord of the Rings Online: Shadows of Angmar Windows
Mage Knight: Apocalypse Windows
Marble Blast Linux, Macintosh, Windows
MegaCorps Online Linux, Macintosh, Windows
Minigolf Mania Windows
Minions of Mirth Macintosh, Windows
Myst Online: Uru Live Windows
Open Arena {engine: ioquake3} Linux , OS X, Windows
Orbz Linux, Macintosh, Windows
PDC World Championship Darts 2008 Windows
Penumbra: Overture Linux, Windows
PlaneShift Linux, Macintosh, Windows
Prey Windows
Psychonauts Windows
Quake 4 Windows
Regnum Online Linux, Windows
RocketBowlWindows
Rune Linux
Saints and Sinners Bowling Windows
Scorched 3D FreeBSD, Linux, Mac OS X, Solaris, Windows
Shellshock Nam '67Windows
Skyrocket Screensaver Linux, Windows
SluneFreeBSD, Linux
Soldier of Fortune Linux
Soldier of Fortune 2 Windows
Spring Linux, Windows
S.T.A.L.K.E.R. Windows
Star Trek Voyager: Elite Force {engine: ioquake3} Linux , OS X, Windows
Star Wars Republic Commando Windows
StarWarp Windows, Linux, OS X
Stubbs the Zombie Macintosh, Windows
Sudden Strike 3: Arms For Victory Windows
SuperTux Linux, Macintosh, Windows
SuperTuxKart Linux, Mac OS X, Windows
SWAT 4 Windows
Think Tanks Linux, Macintosh, Windows
Thunder&Lightning Linux, Windows
TORCS FreeBSD, Linux, Mac OS X, Windows
Tremulous {engine: ioquake3} Linux , Windows
Tribal Trouble Linux, Macintosh, Windows
Trigger Linux, Macintosh, Windows
Tribes 2 Linux
Tribes: Vengeance Windows
UFO: Afterlight Windows
Ultimate Stunts Linux, Windows
Ultratron Linux, Macintosh, Windows
Unreal 2 Windows
Unreal Tournament 2003 Linux, Macintosh, Windows
Unreal Tournament 2004 Linux, Macintosh, Windows
Unreal Tournament 3 ? Windows ?
Vanguard: Saga of Heroes Windows
VDrift FreeBSD, Linux, Mac OS X, Windows
VegaStrike Linux, Macintosh, Windows
Void War Windows
Warsow Linux, Windows
Wing Commander Saga Macintosh, Windows
World of Padman {engine: ioquake3} Linux , OS X, Windows
Wurm Online Linux, Macintosh, Windows
X2: The Threat Linux
X3: Reunion Linux
X Rebirth Linux, macOS
X-Plane Linux, Macintosh, Windows
Zap! Linux, Macintosh, Windows
117 |
118 |
119 |
120 | -------------------------------------------------------------------------------- /games/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | OpenAL: Cross Platform 3D Audio 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 61 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.1 (http://getbootstrap.com) 3 | * Copyright 2011-2014 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); -------------------------------------------------------------------------------- /js/scripts.js: -------------------------------------------------------------------------------- 1 | 2 | $(document).ready(function(){/* activate scrollspy menu */ 3 | $('body').scrollspy({ 4 | target: '#navbar-collapsible', 5 | offset: 50 6 | }); 7 | 8 | /* smooth scrolling sections */ 9 | $('a[href*=#]:not([href=#])').click(function() { 10 | if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 11 | var target = $(this.hash); 12 | target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 13 | if (target.length) { 14 | $('html,body').animate({ 15 | scrollTop: target.offset().top - 50 16 | }, 1000); 17 | return false; 18 | } 19 | } 20 | }); 21 | 22 | }); -------------------------------------------------------------------------------- /links/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /links/links.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Links

5 |
6 |

Related projects and others links.

7 |
8 |

Alternative Implementations

9 |

OpenAL Soft - This library is a compatible update/replacement to the deprecated OpenAL Sample Implementation (the SI). The original idea was to fork the old Windows version to attempt an accelerated ALSA version. The accelerated ALSA idea quickly fell through, but the software mixing code ended up being modified to be cross-platform, with multiple output backends: ALSA, OSS, DirectSound, PulseAudio, MMDevAPI, CoreAudio, Solaris, SoundIO, OpenSL, WinMM, PortAudio, "Null" Output, and a .wav writer are currently implemented.

10 | 11 |

OpenAL Soft's code has been improved to support mono, stereo, 4-channel, 5.1, 6.1, 7.1, and HRTF output. OpenAL Soft does not support the Vorbis and MP3 extensions however, these are considered deprecated. It does, though, support some of the newer extensions like AL_EXT_FLOAT32 and AL_EXT_MCFORMATS for multi-channel and floating-point formats, as well as ALC_EXT_EFX for environmental audio effects, and others.

12 |
13 |
14 |
15 | -------------------------------------------------------------------------------- /mailing_lists/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /mailing_lists/mailing_lists.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Documentation

5 |
6 |

Get started adding OpenAL to your application today with this documentation in a pdf.

7 |
8 | 9 |

OpenAL 1.1 specification (PDF)

10 |
11 |
12 |
13 | -------------------------------------------------------------------------------- /openalheader.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NuclearMonster/openal-website/c1a00783dc6239b46bb9f37e6ff250fd9813a6dd/openalheader.jpg -------------------------------------------------------------------------------- /platforms/index.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /platforms/platforms.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Platforms

5 |
6 |

The following platforms currently have a working OpenAL implementation. Other platforms may be in development (or perhaps just need to be brought up to date -- BeOS would fall into that category), so feel free to ask about others on the OpenAL mailing list.

7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 23 | 25 | 26 | 28 | 30 | 32 | 33 | 35 | 37 | 39 | 40 | 42 | 44 | 47 | 48 | 50 | 52 | 55 | 56 | 59 | 62 | 64 | 65 | 68 | 70 | 72 | 73 | 75 | 77 | 79 | 80 | 82 | 84 | 87 | 88 | 90 | 92 | 95 | 96 | 98 | 100 | 103 | 104 | 106 | 108 | 111 | 112 | 114 | 116 | 118 | 119 | 121 | 123 | 126 | 127 | 129 | 131 | 134 | 135 | 136 | 137 | 139 | 140 | 141 | 142 |
PlatformDevicesLicense Holder
20 |
BSD
22 |
native
24 |
Open Source (LGPL)
27 |
IRIX
29 |
native
31 |
Open Source (LGPL)
34 |
Solaris
36 |
native
38 |
Open Source (LGPL)
41 |
Linux
43 |
ALSA
45 |
46 |
Open Source (LGPL)
49 |
51 |
OSS
53 |
54 |
Open Source (LGPL)
57 |
58 |
Macintosh OS 8/9
60 |
61 |
Sound Manager
63 |
Open Source (LGPL)
66 |
67 |
Macintosh OS X
69 |
Core Audio
71 |
Open Source (Apple)
74 |
Microsoft Windows
76 |
Creative Audigy
78 |
Creative Labs, Inc.
81 |
83 |
Creative Audigy 2
85 |
86 |
Creative Labs, Inc.
89 |
91 |
Creative Audigy 4
93 |
94 |
Creative Labs, Inc.
97 |
99 |
Creative X-Fi
101 |
102 |
Creative Labs, Inc.
105 |
107 |
DirectSound
109 |
110 |
Open Source (LGPL)
113 |
115 |
DirectSound3D
117 |
Open Source (LGPL)
120 |
122 |
MMSYSTEM
124 |
125 |
Open Source (LGPL)
128 |
130 |
NVIDIA nForce
132 |
133 |
Open Source (LGPL)
Microsoft Xboxnative 138 |
Creative Labs, Inc.
Microsoft Xbox 360native 143 |
Creative Labs, Inc.

144 | 145 | 146 |
147 | --------------------------------------------------------------------------------