What is R6003
, R6009
, ^@
, ^C
, ^A
etc?
I don't understand the page.
Meta Stack Exchange is a question and answer site for meta-discussion of the Stack Exchange family of Q&A websites. It only takes a minute to sign up.
Sign up to join this communityWhat is R6003
, R6009
, ^@
, ^C
, ^A
etc?
I don't understand the page.
This is roughly what you'd see when you open an old MS-DOS program (.exe) in a text editor. They scrolled the page until something recognizable showed up. Which are the runtime errors that the Microsoft C-runtime can show when it has to abort the program due to an unrecoverable error. Like a stack overflow.
The editor has a bit of trouble with some of the bytes in the file that are control codes in ASCII. Showing them with a ^ followed by a letter that's the code + 0x40, an old convention. So ^@ is 0x00, ^A is 0x01, ^C is 0x03, ^M is 0x0D (carriage return), etcetera. It displays 0x0A as-is, interpreted as a line-feed that terminates the line. Which gives clues to the editor's origin; it is a Unix editor. One way in which Unix and DOS/Windows are famously incompatible, a line-ending in Unix is "\n", but it is "\r\n" in Windows. Noted by @badp, the color scheme suggests gedit was used.
Some of the runtime errors are still defined in modern Windows C/C++ programs that were built with Microsoft's C compiler. Like R6018. But not a stack overflow any more; that's handled by the operating system today. Exception code 0xC00000FD, STATUS_STACK_OVERFLOW. Don't bother sending the error report to Microsoft; they already have a billion of them.
Ages ago, error codes were defined in file cmsgs.h for Microsoft's C compiler. I am talking DOS here...
I am not sure if this is the correct reference, but it is anyhow close.
/***
*cmsgs.h - runtime errors
*
* Copyright (c) 1990-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* The file defines, in one place, all error message strings used within
* the C run-time library.
*
* [Internal]
*
****/
#if _MSC_VER > 1000
#pragma once
#endif /* _MSC_VER > 1000 */
#ifndef _INC_CMSGS
#define _INC_CMSGS
#ifndef _CRTBLD
/*
* This is an internal C runtime header file. It is used when building
* the C runtimes only. It is not to be used as a public header file.
*/
#error ERROR: Use of C runtime library internal header file.
#endif /* _CRTBLD */
/*
* runtime error and termination messages
*/
#ifdef _MAC
#define EOL "\n"
#else /* _MAC */
#define EOL "\r\n"
#endif /* _MAC */
#define _RT_STACK_TXT "R6000" EOL "- stack overflow" EOL
#define _RT_FLOAT_TXT "R6002" EOL "- floating point not loaded" EOL
#define _RT_INTDIV_TXT "R6003" EOL "- integer divide by 0" EOL
#define _RT_SPACEARG_TXT "R6008" EOL "- not enough space for arguments" EOL
#define _RT_SPACEENV_TXT "R6009" EOL "- not enough space for environment" EOL
#define _RT_ABORT_TXT "" EOL "abnormal program termination" EOL
#define _RT_THREAD_TXT "R6016" EOL "- not enough space for thread data" EOL
#define _RT_LOCK_TXT "R6017" EOL "- unexpected multithread lock error" EOL
#define _RT_HEAP_TXT "R6018" EOL "- unexpected heap error" EOL
#define _RT_OPENCON_TXT "R6019" EOL "- unable to open console device" EOL
#define _RT_NONCONT_TXT "R6022" EOL "- non-continuable exception" EOL
#define _RT_INVALDISP_TXT "R6023" EOL "- invalid exception disposition" EOL
/*
* _RT_ONEXIT_TXT is specific to Win32 and Dosx32 platforms
*/
#define _RT_ONEXIT_TXT "R6024" EOL "- not enough space for _onexit/atexit table" EOL
#define _RT_PUREVIRT_TXT "R6025" EOL "- pure virtual function call" EOL
#define _RT_STDIOINIT_TXT "R6026" EOL "- not enough space for stdio initialization" EOL
#define _RT_LOWIOINIT_TXT "R6027" EOL "- not enough space for lowio initialization" EOL
#define _RT_HEAPINIT_TXT "R6028" EOL "- unable to initialize heap" EOL
/*
* _RT_DOMAIN_TXT, _RT_SING_TXT and _RT_TLOSS_TXT are used by the floating
* point library.
*/
#define _RT_DOMAIN_TXT "DOMAIN error" EOL
#define _RT_SING_TXT "SING error" EOL
#define _RT_TLOSS_TXT "TLOSS error" EOL
#define _RT_CRNL_TXT EOL
#define _RT_BANNER_TXT "runtime error "
#endif /* _INC_CMSGS */
It looks like they opened a random .exe in Vim, searched for "stack overflow", and took screenshots with various colorschemes.
It reminds me more about the old Apple ][e
, when booting, displaying a screen of random characters, with ^@
for zeroes...
There are six “collector card” screenshots in the deck, each with a different color palette.
offline-ide-1.png ↓
offline-ide-2.png ↓
offline-ide-3.png ↓
offline-ide-4.png ↓ (code line numbers visible in this screenshot - special edition)
offline-ide-5.png ↓
offline-ide-6.png ↓
Error message typed as selectable text ↓
^@^C^A>^D^A^@^P^@^C^AL^D^A^@^T^@^C^Aº
- stack overflow^M
^@^C^@R6003^M
- integer divide by 0^M
^@ ^@R6009^M
- not enough space for environment^M
^@^R^@R6018^M
- unexpected heap error^M
^@ü^@^M
^@ÿ^@run-time error ^@^B^@R6002^M
- floating-point support not loaded^M
HTML of the error page ↓
<html>
<head>
<title>We are Offline</title>
<style type="text/css">
body { margin: 0; padding: 0; }
iframe { border: 0; }
</style>
</head>
<body>
<iframe width="100%" height="100%" id="pageFrame"></iframe>
<script>
setTimeout(function () { location.reload(true); }, 300000);
var hostName = window.location.hostname;
var directory = '';
</script>
<script src="https://cdn.sstatic.net/error-director.js"></script>
<script>
if (top == self && directory) {
document.getElementById('pageFrame').src = 'https://cdn.sstatic.net/' + directory + '/app_offline.htm';
} else {
// if we get here, that means even the offline pages on sstatic are offline
document.getElementById('pageFrame').style.height = "0px";
document.write("<h2>Stack Exchange is currently offline, we'll be back shortly!<\/h2>");
}
</script>
</body>
</html>
JavaScript the HTML references (error-director.js) ↓
var hosts = [];
function addSubs() {
for (var i = 0; i < arguments.length; i ++) {
var name = arguments[i];
hosts.push({ dir: name, host: new RegExp(name + "\\\.(meta\\\.)?stackexchange") });
}
}
// x.stackexchange.com sites
addSubs(
'academia',
'android',
'apple',
'aviation',
'bicycles',
'biology',
'chemistry',
'christianity',
'codereview',
'cooking',
'crypto',
'cooking',
'cstheory',
'dba',
'diy',
'drupal',
'dsp',
'electronics',
'emacs',
'english',
'expressionengine',
'gamedev',
'gaming',
'gis',
'graphicdesign',
'japanese',
'judaism',
'magento',
'math',
'mathematica',
'money',
'movies',
'music',
'networkengineering',
'patents',
'photo',
'physics',
'puzzling',
'quantumcomputing',
'raspberrypi',
'rpg',
'salesforce',
'scifi',
'security',
'sharepoint',
'skeptics',
'softwareengineering',
'softwarerecs',
'stats',
'tex',
'travel',
'unix',
'ux',
'webapps',
'webmasters',
'wordpress',
'workplace',
'worldbuilding'
);
// named sites
hosts.push({ dir: 'askubuntu', host: /ubuntu\.(meta.)?stackexchange|askubuntu/ });
hosts.push({ dir: 'careers', host: /careers\.stackoverflow/ });
hosts.push({ dir: 'stackexchange', host: /^stackexchange\.com/ });
hosts.push({ dir: 'stackexchangemeta', host: /^meta\.stackexchange\.(com|local)/ });
hosts.push({ dir: 'mathoverflow', host: /mathoverflow\.net/ });
hosts.push({ dir: 'stackoverflowmeta', host: /meta\.stackoverflow/ });
hosts.push({ dir: 'ru', host: /ru\.(meta\.)?stackoverflow/ });
hosts.push({ dir: 'ja', host: /(ja|jp)\.(meta\.)?stackoverflow/ });
hosts.push({ dir: 'es', host: /es\.(meta\.)?stackoverflow/ });
hosts.push({ dir: 'br', host: /(pt|br)\.(meta\.)?stackoverflow/ });
hosts.push({ dir: 'stackoverflow', host: /stackoverflow/ });
hosts.push({ dir: 'serverfault', host: /serverfault/ });
hosts.push({ dir: 'superuser', host: /superuser/ });
hosts.push({ dir: 'stackapps', host: /stackapps/ });
hosts.push({ dir: 'beta', host: /stackexchange|.*/ }); //catch all
if (top === self) {
for (var i = 0, l = hosts.length; i < l; i++) {
var regEx = hosts[i].host;
if (regEx.test(hostName)) {
directory = 'sites/' + hosts[i].dir;
console.log(directory);
break;
}
}
}
You can make of all this what you will. I'm just documenting. ¯\_(ツ)_/¯