{
    "archive_path": "archive/1783447185.304098",
    "base_url": "pcjam.gitlab.io/tut1.html",
    "basename": "tut1.html",
    "bookmarked_date": "2026-07-07 17:59",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/pcjam.gitlab.io/tut1.html",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=pcjam.gitlab.io",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "pcjam.gitlab.io/tut1.html"
    },
    "domain": "pcjam.gitlab.io",
    "extension": "html",
    "hash": "1RVR71WBTE1PH8J2QBM9",
    "history": {
        "archive_org": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)",
                    "https://web.archive.org/save/https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "curl 8.10.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-07-07T18:02:21.756307+00:00",
                "index_texts": null,
                "output": "TimeoutExpired: Command '['curl', '--silent', '--location', '--compressed', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)', 'https://web.archive.org/save/https://pcjam.gitlab.io/tut1.html']' timed out after 60 seconds",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:21.744169+00:00",
                "status": "failed"
            }
        ],
        "dom": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--window-size=1440,2000",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--window-size=1440,2000",
                    "--dump-dom",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "Chromium 131.0.6778.33",
                "end_ts": "2026-07-07T18:01:14.835586+00:00",
                "index_texts": null,
                "output": "output.html",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:13.199564+00:00",
                "status": "succeeded"
            }
        ],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "60",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=pcjam.gitlab.io"
                ],
                "cmd_version": "curl 8.10.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-07-07T18:01:00.402578+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:00.204300+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "curl 8.10.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-07-07T18:01:00.638654+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:00.407233+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [
            {
                "cmd": [
                    "yt-dlp",
                    "--write-description",
                    "--write-info-json",
                    "--write-annotations",
                    "--write-thumbnail",
                    "--no-call-home",
                    "--write-sub",
                    "--write-auto-subs",
                    "--convert-subs=srt",
                    "--yes-playlist",
                    "--continue",
                    "--no-abort-on-error",
                    "--ignore-errors",
                    "--geo-bypass",
                    "--add-metadata",
                    "--format=(bv*+ba/b)[filesize<=750m][filesize_approx<=?750m]/(bv*+ba/b)",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "2024.12.13",
                "end_ts": "2026-07-07T18:01:21.739458+00:00",
                "index_texts": [
                    "You've probably by now played around with text IO. But text IO is slow, and we're dealing with a 4.77MHz processor. We're also the only program running at the moment, so we have full control over the computer..."
                ],
                "output": "media",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:19.943548+00:00",
                "status": "succeeded"
            }
        ],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-07-07T18:01:19.933522+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:18.703666+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--window-size=1440,2000",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--window-size=1440,2000",
                    "--print-to-pdf",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "Chromium 131.0.6778.33",
                "end_ts": "2026-07-07T18:01:11.163769+00:00",
                "index_texts": null,
                "output": "output.pdf",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:09.085343+00:00",
                "status": "succeeded"
            }
        ],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmp8q6z_24t",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-07-07T18:01:18.699479+00:00",
                "index_texts": [
                    "Video programming & text mode\n\t\n\tYou've probably by now played around with text IO. But text IO is slow, and we're dealing with a 4.77MHz processor. We're also the only program running at the moment, so we have full control over the computer and mustn't bow down to \"good practices\". So we'll print to the screen directly!\n\t\n\tThe video card we'll be using, the Color Graphics Adapter, was given a fixed memory range from 0xB8000 to 0xBC000. This means that by writing to these addresses, we can potentially edit what is shown on the screen (This is remarkably simple compared to other computers at the time that used sprites).\n\t\n\tThe CGA chip supported multiple modes, each of which used a different range of video memory. When you launched your program in your DOSBox-X environment, you were in a 80x25 text mode. A text mode is one where the video memory contains not individual pixels, but text characters. The video chip would then generate the pixels on-the-fly each frame.\n\t\n\tSo let's try clearing the screen by writing 2000 zeroes to 0xB8000. Remember what I had said previously about using far pointers.\n\t\n\tuint16_t far *ptr = MK_FP(0xB800, 0);\nfor(int i = 0; i < 2000; i++) {\n\t*(ptr++) = 0;\n}\n\t\n\tThis is to be completely expected. The program had exited, so we returned to the shell. The reason the C:\\> is not at the top is because we only cleared the screen. The \"next character\" pointer in MS-DOS had not changed.\n\t\n\tNote that we have a uint16_t pointer. This is because each character requires two bytes. The lower is the character code, the higher - the attributes. The attribute byte is split into 2 4-bit (nibble) groups. The low nibble corresponds to the foreground, the high - to the background.\n\t\n\tuint16_t far *ptr = MK_FP(0xB800, 0);\nfor(int i = 0; i < 2000; i++) {\n\t*(ptr++) = 0x0F03;\n}\n\t\n\tNo screenshot here; it's a surprise :).\n\t\n\tHexadecimal is nice to work with in this situation because each hex digit corresponds to 4 bits, which is the unit we're working with.\n\t\n\t\n\t            \nFG ATTR --\\ \n\t\t  v\n\t\t0x0F03    CHAR CODE\n\t\t   ^\nBG ATTR ---/\n\n\n\n\nINTENSITY/BRIGHT BIT\n         v\n 0xE = 0b1110 (light yellow)\n          ^^^\n          RGB\n\t\n\t\n\t\tAttribute IDColor\n\t\t0#000000\n\t\t1#0000AA\n\t\t2#00AA00\n\t\t3#00AAAA\n\t\t4#AA0000\n\t\t5#AA00AA\n\t\t6#AA5500\n\t\t7#AAAAAA\n\t\t8#555555\n\t\t9#5555FF\n\t\tA#55FF55\n\t\tB#55FFFF\n\t\tC#FF5555\n\t\tD#FF55FF\n\t\tE#FFFF55\n\t\tF#FFFFFF\n\t\n\t\n\t\n\tYou should note the binary pattern in that color sequence. The outlier in the pattern is color 6.\n\t\n\tI expect you to play around with this as well. But not for long, since we'll be switching to a graphics mode (or not, you can stay in text mode if you want).\n\t\n\tMode types and switching\n\t\n\tTo switch modes would require us to access the BIOS. This would mean we'd have to write Assembly, but OpenWatcom can actually do it for us. We just need to include i86.h.\n\t\n\tunion REGS regs;\nregs.w.ax = 0x0004;\n\nint86(0x10, &regs, &regs);\n\t\n\tI won't go too into detail, since there isn't much to customize. Essentially we're initiating a BIOS call (function 0x10). The low byte of ax, 0x04 here, specifies the mode.\n\t\n\t\n\t\tMode IDVRAM range startDescriptionWith RGB monitorWith composite monitor\n\t\t00xB8000Textual 40x2516 colors16 shades\n\t\t10xB8000Textual 40x2516 colors16 colors\n\t\t20xB8000Textual 80x2516 colors16 shades\n\t\t30xB8000Textual 80x2516 colors16 colors\n\t\t40xB8000Graphical 320x2004 colors4 colors\n\t\t50xB8000Graphical 320x2004 colors with alternate palette4 shades\n\t\t60xB8000Graphical 640x2002 shades2 colors\n\t\n\t\n\tThe other text modes don't need more explanation. Before we continue, I'd like to note that (in 80x25 text modes only) accessing VRAM at the wrong times (almost always) can produce a \"snow\" effect. This is because your accesses clash with the video card's own. Here's an example I found online (credits to \"archeocomp\"):\n\t\n\t\n\t\n\tThe only way to avoid this issue is to draw during vertical synchronization, but there is no event-based mechanism to determine vsync like on other computers. The only way is polling, which just ain't happening at 4.77MHz.\n\t\n\tLet this make you reconsider whether to use 80x25 in your project. DOSBox-X doesn't emulate snow, so it's not necessarily a problem.\n\t\n\tGraphics modes\n\t\n\tThese have a lot in common. The big difference is how the pixels are addressed. To save memory pixel data is crammed as little space as possible, so we'll need to do a bunch of bitwise operations to draw.\n\t\n\tOne thing that will be a pain for you is that the rows are interleaved. Starting at 0xB8000, every 80 bytes account for an even row 0, row 2, etc! 8192 bytes afterward, at 0xBA000, is the same thing, but the odd rows 1, 3, etc. If you have a sprite renderer, you should encode your sprites in such a way to make decoding & drawing faster.\n\t\n\t320x200\n\t\n\tHere each 2-bit group in each byte corresponds to one pixel. Those 2 bits are enough to encode a 4-state value.\n\t\n\tWhen you try drawing in this mode, you'll notice the real big ugliness of the palette (animated):\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t(I want you to feel the 4.77MHz. This is as fast as I could get it in pure C)\n\t\n\t\n\tThis is because gaming was not a consideration when this palette was designed. It was actually created for business purposes, and these colors were great for charts and diagrams. There is, however, another palette you can try. The CGA has a special byte-sized register at IO port 0x3D9 which controls a few color details. The fifth bit controls the palette. By changing it we'll switch our palette. We'll use the inb and outb functions that came with the template.\n\t\n\tuint8_t b = inb(0x3D9);\nb = b & ~(1 << 5); // Set the 5th bit to zero\noutb(0x3D9, b);\n\n\t\n\tAfter this, you'll get a different palette. It's still pretty ugly but it can be used for more \"natural\" scenes. Here is Frogger:\n\t\n\tBoth of these palettes can use a different color in place of black. This is configurable with bits 0 through 3 of the color control register. Refer to the color table above.\n\t\n\tb = (b & 0xF0) | 0x09; // 0x09 : Light blue\noutb(0x3D9, b);\n\t\n\tBoth of these palettes also can be darkened or lightened using the \"global bright bit\", bit 4 in the color control register. The configurable color is not affected.\n\t\n\t\n\t\n\tb = b ^ (1 << 4); // Toggle the global bright bit\noutb(0x3D9, b);\n\t\n\tWhen connected to an RGB monitor, mode 5 will give a third palette with black, cyan, red and white. This one is not forward-compatible with newer computers.\n\t\n\t620x200\n\t\n\tTwice the pixels, but half the colors: black and custom. Here, each bit accounts for one pixel.\n\t\n\tThe bright bit makes no difference in this mode. If you're looking for high-resolution UI, this is the one.\n\t\n\tThere's not much else to say, so we'll continue.\n\t\n\t160x100\n\t\n\tThis is by far the most advanced \"mode\" we'll be covering but it's simple once you understand it. It is in fact not a real mode at all, but the 80x25 text mode modified. Doing so causes each character to be cropped, showing only two rows, and as a result making all the rows denser. This really neat trick lets you have 16 colors in what looks like a graphical mode.\n\t\n\tThis FutureDOS splash screen was rendered in this mode.\n\t\n\tFor this, we need to set mode 3, and then send a bunch of data to the video controller ports:\n\t\n\tunion REGS regs;\nregs.w.ax = 0x0003;\nint86(0x10, &regs, &regs);\n\noutb(0x3D4, 0x04);\noutb(0x3D5, 0x7F);\n\noutb(0x3D4, 0x06);\noutb(0x3D5, 0x64);\n\noutb(0x3D4, 0x07);\noutb(0x3D5, 0x70);\n\noutb(0x3D4, 0x09);\noutb(0x3D5, 0x01);\n\t\n\tIf you want an explanation, you don't get one because I don't know it myself 8).\n\t\n\tAfter this, set all of the characters in the screen to 0xDE. 0xDE is a rectangle, where half of the character is the foreground color and half is the background color. Since the mode gave us 4x2 characters, 0xDE will appear to \"split\" each character into two 2x2 pixels. Now, using the attribute byte we control their color.\n\t\n\t(Since this is 80x25 text mode, there is no row interleaving happening, but there will be the snow effect)\n\t\n\tI say that using 0xDE is necessary, but that's not really true. If you choose your characters correctly, you can take advantage of \"ASCII art\" to create even more high-resolution images.\n\t\n\tWhile the ones I've showcased here are not the most advanced modes, others are too demanding."
                ],
                "output": "readability",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:18.071938+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [
            {
                "cmd": [
                    "/usr/bin/chromium-browser",
                    "--headless=new",
                    "--no-sandbox",
                    "--no-zygote",
                    "--disable-dev-shm-usage",
                    "--disable-software-rasterizer",
                    "--run-all-compositor-stages-before-draw",
                    "--hide-scrollbars",
                    "--window-size=1440,2000",
                    "--autoplay-policy=no-user-gesture-required",
                    "--no-first-run",
                    "--use-fake-ui-for-media-stream",
                    "--use-fake-device-for-media-stream",
                    "--disable-sync",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)",
                    "--window-size=1440,2000",
                    "--screenshot",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "Chromium 131.0.6778.33",
                "end_ts": "2026-07-07T18:01:13.195180+00:00",
                "index_texts": null,
                "output": "screenshot.png",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:11.167311+00:00",
                "status": "succeeded"
            }
        ],
        "singlefile": [
            {
                "cmd": [
                    "/app/node_modules/single-file-cli/single-file",
                    "--browser-executable-path=chromium-browser",
                    "--browser-args=[\"--headless=new\", \"--no-sandbox\", \"--no-zygote\", \"--disable-dev-shm-usage\", \"--disable-software-rasterizer\", \"--run-all-compositor-stages-before-draw\", \"--hide-scrollbars\", \"--window-size=1440,2000\", \"--autoplay-policy=no-user-gesture-required\", \"--no-first-run\", \"--use-fake-ui-for-media-stream\", \"--use-fake-device-for-media-stream\", \"--disable-sync\", \"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/)\", \"--window-size=1440,2000\"]",
                    "https://pcjam.gitlab.io/tut1.html",
                    "singlefile.html"
                ],
                "cmd_version": "1.1.54",
                "end_ts": "2026-07-07T18:01:09.080532+00:00",
                "index_texts": null,
                "output": "singlefile.html",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:00.642795+00:00",
                "status": "succeeded"
            }
        ],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "60",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "curl 8.10.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-07-07T18:01:18.067789+00:00",
                "index_texts": null,
                "output": "Video programming on MS-DOS",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:18.063021+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--backup-converted",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--timeout=60",
                    "--restrict-file-names=windows",
                    "--warc-file=/data/archive/1783447185.304098/warc/1783447274",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "https://pcjam.gitlab.io/tut1.html"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-07-07T18:01:18.058757+00:00",
                "index_texts": null,
                "output": "pcjam.gitlab.io/tut1.html",
                "pwd": "/data/archive/1783447185.304098",
                "schema": "ArchiveResult",
                "start_ts": "2026-07-07T18:01:14.840508+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": "TimeoutExpired: Command '['curl', '--silent', '--location', '--compressed', '--head', '--max-time', '60', '--user-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.3 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.10.1 (x86_64-pc-linux-gnu)', 'https://web.archive.org/save/https://pcjam.gitlab.io/tut1.html']' timed out after 60 seconds",
        "dom": "output.html",
        "favicon": "favicon.ico",
        "git": null,
        "media": "media",
        "pdf": "output.pdf",
        "screenshot": "screenshot.png",
        "singlefile": "singlefile.html",
        "title": "Video programming on MS-DOS",
        "warc": null,
        "wget": "pcjam.gitlab.io/tut1.html"
    },
    "link_dir": "/data/archive/1783447185.304098",
    "newest_archive_date": "2026-07-07T18:01:21.744169+00:00",
    "num_failures": 1,
    "num_outputs": 11,
    "oldest_archive_date": "2026-07-07T18:01:00.204300+00:00",
    "path": "/tut1.html",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "75dca500-4b66-4d8a-98af-c39de02a117b",
    "sources": [
        "/data/sources/1783447184.444722-crawl-pcjam.gitlab.io.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1783447185.304098",
    "title": "Video programming on MS-DOS",
    "updated": "2026-07-07T18:01:00.204160+00:00",
    "updated_date": "2026-07-07 18:01",
    "url": "https://pcjam.gitlab.io/tut1.html"
}