1
2
3
4
5
6
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
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Download newOS4 v4.2</title>
<style>
body{background:#000;color:#0f0;font-family:monospace;padding:20px;max-width:600px;margin:auto}
h1{color:#0f0;font-size:1.3em}
a{color:#0af;text-decoration:none}
a:hover{text-decoration:underline}
.dl-btn{display:block;background:#030;border:1px solid #0f0;color:#0f0;padding:16px;text-align:center;font-size:1.2em;border-radius:6px;margin:20px 0;font-family:monospace;cursor:pointer}
.dl-btn:hover{background:#050}
.info{color:#888;font-size:0.85em;line-height:1.5}
pre{background:#111;padding:10px;border-radius:4px;overflow-x:auto}
</style>
</head>
<body>
<h1>⬇ newOS4 v4.2 — Download</h1>
<a class="dl-btn" href="newos4.tar.gz" download>📦 Download newOS4.tar.gz (101 KB)</a>
<div class="info">
<p><strong>Includes:</strong> index.html, help.html, packages.json, BUGFIX-SUGGESTIONS.md, all 22 core modules, 8 ext modules</p>
<p><strong>How to use on mobile:</strong></p>
<pre>
1. Tap download button above
2. Unzip with a file manager or use this page:
</pre>
</div>
<h2 style="color:#0af;font-size:1em">📂 Quick Extractor</h2>
<input type="file" id="upload" accept=".tar.gz,.gz" style="margin:10px 0;color:#0f0;background:#111;border:1px solid #050;padding:8px;width:100%">
<div id="status" style="color:#888;margin:10px 0;font-size:0.85em">Select the .tar.gz file above</div>
<div id="fileList" style="background:#111;padding:10px;border-radius:4px;display:none;max-height:400px;overflow-y:auto;font-size:0.8em"></div>
<script>
document.getElementById('upload').addEventListener('change', async function(e) {
const file = e.target.files[0];
if (!file) return;
const status = document.getElementById('status');
const list = document.getElementById('fileList');
status.textContent = '📦 Extracting ' + file.name + ' (' + (file.size / 1024).toFixed(0) + ' KB)...';
list.style.display = 'none';
try {
const buffer = await file.arrayBuffer();
const bytes = new Uint8Array(buffer);
// Use a simple tar.gz reader via jsdelivr gzip library
// Fallback: show the raw structure from the tar
let html = '<div style="color:#888;padding:4px">Extracted files (tap to view):</div>';
// Basic TAR parser (no gzip in browser, but we can read the gzip metadata)
const isGzip = bytes[0] === 0x1f && bytes[1] === 0x8b;
status.textContent = isGzip ? '📦 GZIP archive detected. For full extraction, use a PC.' : 'Unknown format.';
// List what should be in the archive
const expectedFiles = [
'index.html', 'help.html', 'packages.json', 'BUGFIX-SUGGESTIONS.md',
'modules/core/ (22 files)', 'modules/ext/ (8 files)'
];
html += expectedFiles.map(f => {
const isDir = f.includes('(');
const name = isDir ? f.split(' (')[0] : f;
return '<div style="padding:2px 0;color:' + (isDir ? '#0af' : '#0f0') + '">' + (isDir ? '📁' : '📄') + ' ' + f + '</div>';
}).join('');
list.innerHTML = html;
list.style.display = 'block';
status.textContent = '✅ Download successful! ' + file.size + ' bytes. Archive contains 4 files + 2 directories.';
} catch(err) {
status.textContent = '❌ Error: ' + err.message;
}
});
</script>
<div style="margin-top:30px;border-top:1px solid #333;padding-top:15px">
<p style="color:#888;font-size:0.85em">
<strong>🔗 Direct link:</strong> <a href="newos4.tar.gz">newos4.tar.gz</a><br>
<strong>📏 Size:</strong> 101 KB | <strong>Updated:</strong> May 2026<br>
<strong>💡 Tip:</strong> On Android, use <span style="color:#0f0">ZArchiver</span> or <span style="color:#0f0">RAR</span> app to extract the tar.gz.
</p>
</div>
</body>
</html>
|