Herramientas de usuario

Herramientas del sitio


software:sistema

¡Esta es una revisión vieja del documento!


<script> let currentModel = “”; let currentLang = “”; let currentLoading = null; let audioCtx = null; let motorNode = null; let motorLFO = null; let isSystemLoaded = false;

const translations = {

es: { code: "es", name: "ESPAÑOL", header: "header-es", amstrad: "AMSTRAD CONSUMER<br>ELECTRONICS plc", d1: { desc: "PROCESADOR DE TEXTOS", t2: "LOCO SCRIPT", ser: "2433345" }, d2: { desc: "SIST. OPERATIVO/UTILID.", t2: "CP/M PLUS", ser: "VER LA OTRA CARA" }, d3: { desc: "", t2: "UTILIDADES DE <br> PROGRAMACION", ser: "2433347" }, d4: { desc: "", t2: "DR. LOGO Y AYUDA", ser: "VER LA OTRA CARA" }, lic: "EL USO DE ESTOS PROGRAMAS ESTA SUJETO A CONDICIONES DEL ACUERDO DE LICENCIA DE USUARIO FINAL ESTABLECIDAS EN EL APENDICE DEL MANUAL DE INSTRUCCIONES DEL USUARIO DE ESTE PRODUCTO.", copy: "PROGRAMAS COPYRIGHT © 1985 LOCOMOTIVE SOFTWARE LTD & AMSTRAD plc." },
uk: { code: "en", name: "INGLÉS", header: "header-uk", amstrad: "AMSTRAD CONSUMER<br>ELECTRONICS plc", d1: { desc: "WORDPROCESSOR", t2: "LOCO SCRIPT", ser: "2119203" }, d2: { desc: "SYSTEM/UTILITIES/BASIC DISC", t2: "CP/M PLUS", ser: "SEE OTHER SIDE" }, d3: { desc: "", t2: "PROGRAMMING<br>UTILITIES", ser: "2119205" }, d4: { desc: "", t2: "DR. LOGO & HELP", ser: "SEE OTHER SIDE" }, lic: "THE USE OF THIS SOFTWARE IS SUBJECT TO THE CONDITIONS OF THE END USER LICENSE AGREEMENT APPENDIX IN THE PRODUCT´S USER INSTRUCTION MANUAL", copy: "PROGRAMMES COPYRIGHT © 1985 LOCOMOTIVE SOFTWARE LTD & AMSTRAD plc." },
fr: { code: "fr", name: "FRANCÉS", header: "header-fr", amstrad: "AMSTRAD CONSUMER<br>ELECTRONICS plc", d1: { desc: "TRAITEMENT DE TEXTES", t2: "LOCO SCRIPT", ser: "3210101" }, d2: { desc: "SYSTEME / UTILITAIRES / BASIC", t2: "CP/M PLUS", ser: "VOIR AUTRE COTE" }, d3: { desc: "", t2: "UTILITAIRES DE<br>PROGRAMMATION", ser: "3210103" }, d4: { desc: "", t2: "DR. LOGO & HELP", ser: "VOIR AUTRE COTE" }, lic: "L'UTILISATION DE CE LOGICIEL EST DEFINIE POR LES CONDITIONS DE LICENSE PARA UTILISATEUR FINAL INDIQUEES DANS L´ANNEXE DU GUIDE DE L´UTILISATEUR.", copy: "PROGRAMMES COPYRIGHT © 1985 LOCOMOTIVE SOFTWARE LTD & AMSTRAD plc." },
de: { code: "de", name: "ALEMÁN", header: "header-de", amstrad: "COMPUTER SOFTWARE", d1: { desc: "TEXTVERARBEITUNGSSYSTEM", t2: "LOCO SCRIPT", ser: "2202187" }, d2: { desc: "SYSTEM/DIENSTPROGRAMME-BASIC", t2: "CP/M PLUS", ser: "vgl. andere Seite" }, d3: { desc: "", t2: "DIENSTPROGRAMME", ser: "2202189" }, d4: { desc: "", t2: "DR. LOGO UND HELP", ser: "vgl. andere Seite" }, lic: "Für die aplicación dieser Software son die Condiciones del Lizenzabkommens für Endbenutzer maßgebend (vgl. Anhang Benutzerhandbuch).", copy: "PROGRAMME COPYRIGHT © 1985 LOCOMOTIVE SOFTWARE LTD & AMSTRAD CONSUMER ELECTRONICS pls." }

};

function initAudio() { if (!audioCtx) audioCtx = new (window.AudioContext || window.webkitAudioContext)(); }

function playRecalibrate() {

initAudio(); const startTime = audioCtx.currentTime;
for(let i=0; i<12; i++) {
  const t = startTime + (i * 0.045); const osc = audioCtx.createOscillator(); const gain = audioCtx.createGain();
  osc.type = 'square'; osc.frequency.setValueAtTime(90, t);
  gain.gain.setValueAtTime(0.18, t); gain.gain.linearRampToValueAtTime(0, t + 0.03);
  osc.connect(gain); gain.connect(audioCtx.destination);
  osc.start(t); osc.stop(t + 0.03);
}

}

function playStepSound() {

initAudio(); const now = audioCtx.currentTime;
const osc = audioCtx.createOscillator(); const gain = audioCtx.createGain(); const filter = audioCtx.createBiquadFilter();
osc.type = 'triangle'; osc.frequency.setValueAtTime(130, now);
filter.type = 'bandpass'; filter.frequency.setValueAtTime(1100, now);
gain.gain.setValueAtTime(0.22, now); gain.gain.exponentialRampToValueAtTime(0.001, now + 0.035);
osc.connect(filter); filter.connect(gain); gain.connect(audioCtx.destination);
osc.start(); osc.stop(now + 0.035);

}

function startMotorSound() {

initAudio(); motorNode = audioCtx.createOscillator(); const motorGain = audioCtx.createGain();
motorNode.type = 'sine'; motorNode.frequency.setValueAtTime(42, audioCtx.currentTime);
motorLFO = audioCtx.createOscillator(); const lfoGain = audioCtx.createGain();
motorLFO.frequency.setValueAtTime(6, audioCtx.currentTime); lfoGain.gain.setValueAtTime(0.004, audioCtx.currentTime);
motorLFO.connect(lfoGain); lfoGain.connect(motorGain.gain);
motorGain.gain.setValueAtTime(0.007, audioCtx.currentTime); motorNode.connect(motorGain); motorGain.connect(audioCtx.destination);
motorNode.start(); motorLFO.start();

}

function stopMotorSound() { if (motorNode) { motorNode.stop(); motorNode = null; } if (motorLFO) { motorLFO.stop(); motorLFO = null; } }

function checkLock() {

if (isSystemLoaded) {
  const status = document.getElementById('status-msg');
  status.className = ""; // Quitamos cualquier clase previa
  status.innerHTML = `<span class="blink-yellow" style="font-weight:900;">PULSE EJECT PARA EXTRAER EL DISCO</span>`;
  return true;
}
return false;

}

function selectModel(model, btn) {

if (checkLock()) return;
document.querySelectorAll('.btn-model').forEach(b => b.classList.remove('active'));
btn.classList.add('active'); currentModel = model;
document.getElementById('lang-selector').style.display = 'block';
const flags = { es: document.getElementById('flag-es'), fr: document.getElementById('flag-fr'), de: document.getElementById('flag-de') };
const showAll = (model === '8256' || model === '8512');
Object.values(flags).forEach(f => { if(f) f.style.display = showAll ? 'inline-block' : 'none'; });
const status = document.getElementById('status-msg');
status.className = ""; status.style.color = "";
status.innerHTML = `<span class="status-green">PCW ${model} SELECCIONADO.</span><br><span class="blink-yellow">SELECCIONE EL IDIOMA DEL DISCO DE SISTEMA</span>`;

}

function selectLang(lang, btn) {

if (checkLock()) return;
document.querySelectorAll('.flag-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active'); currentLang = lang;
isSystemLoaded = true; 
const status = document.getElementById('status-msg');
status.className = ""; 
if (currentModel === '8256' || currentModel === '8512') {
  status.innerHTML = `<span class="status-green">SISTEMA PCW ${currentModel} (${translations[lang].name}) LISTO.</span><br><span class="blink-yellow">PULSE EJECT PARA REINICIAR O CARGUE UN DISCO</span>`;
  updateShelf();
} else {
  status.innerHTML = `<span class="status-green">PCW ${currentModel} (${translations[lang].name}) SELECCIONADO.</span><br><span style="color:#ff0000 !important; font-weight:900; display:block; margin-top:5px;" class="blink-yellow">ERROR: Disco de Sistema no disponible</span>`;
}

}

function updateShelf() {

const shelf = document.getElementById('disk-shelf-display');
shelf.innerHTML = ""; shelf.style.display = 'flex';
for(let i=1; i<=2; i++) {
  shelf.innerHTML += `<div class="disk-wrapper"><div class="disk-container" id="disk${i}"><div class="disk-face disk-front" onclick="triggerLoadFromDisk(${i}, false)"><div class="hole-left-rect"></div><div class="hole-right-circ"></div><div class="disk-hub-wrapper"><div class="hub-3inch" id="hub${i}front"><div class="hub-3inch-notch"></div></div></div><div class="disk-label-amsoft">${getLabelHTML(i, 'A')}</div></div><div class="disk-face disk-back" onclick="triggerLoadFromDisk(${i}, true)"><div class="hole-left-rect"></div><div class="hole-right-circ"></div><div class="disk-hub-wrapper"><div class="hub-3inch" id="hub${i}back"><div class="hub-3inch-notch"></div></div></div><div class="disk-label-amsoft">${getLabelHTML(i, 'B')}</div></div></div><button class="flip-btn" onclick="document.getElementById('disk${i}').classList.toggle('is-flipped')">⟲ GIRAR DISCO ${i}</button></div>`;
}

}

function getLabelHTML(diskNum, side) {

const t = translations[currentLang]; const isA = (side === 'A');
const sideNum = (diskNum === 1) ? (isA ? "1" : "2") : (isA ? "3" : "4");
let data = t['d' + sideNum];
let isLongTextSerial = !isA;
let serialBoxStyle = isLongTextSerial ? `width: 54px; height: 11px; right: 2px; font-size: 3.6px; top: 4px;` : `width: 44px; height: 13px; right: 6px; font-size: 8px; top: 4px;`;
if (currentLang === 'de' && !isA) serialBoxStyle = `width: 52px; height: 11px; right: 2px; font-size: 3.8px; top: 4px;`;
let finalStyle = "font-size: 11px; font-weight: 900; display: block; text-transform: uppercase; line-height: 1.1; margin-top: -1px; white-space: nowrap;";
if (sideNum === "3") {
    let esMargin = (currentLang === 'es') ? "margin-top: -1px;" : "margin-top: -4px;";
    finalStyle = `font-size: 10.5px; font-weight: 900; line-height: 0.95; ${esMargin} display: block; width: 130px; white-space: normal;`;
    if(currentLang === 'fr' || currentLang === 'uk') finalStyle = "font-size: 9.2px; font-weight: 900; line-height: 0.95; margin-top: 2px; display: block; width: 125px; white-space: normal;";
    if(currentLang === 'fr') finalStyle += "transform: scaleX(0.92); transform-origin: left;";
    if(currentLang === 'de') finalStyle = "font-size: 10.5px; font-weight: 950; line-height: 1; margin-top: -1px; transform: scaleX(0.8); transform-origin: left; display: block; width: 140px;";
}
if (sideNum === "4") {
    finalStyle = "font-size: 9.2px; font-weight: 900; display: block; text-transform: uppercase; line-height: 1; margin-top: 1px; white-space: nowrap; transform: scaleX(0.9); transform-origin: left;";
    if (currentLang === 'de') finalStyle = "font-size: 8.8px; font-weight: 950; line-height: 1; transform: scaleX(0.88); transform-origin: left; width: 150px; letter-spacing: -0.1px;";
}
let logoBlock = (currentLang === 'de') ? `<div class="schneider-container"><div class="schneider-symbol"><div class="u-shape u-black"></div><div class="u-shape u-red"></div></div><div style="display:flex;flex-direction:column;"><span class="schneider-text-logo">Schneider</span><span class="schneider-subtext">COMPUTER SOFTWARE</span></div></div>` : `<div style="display:flex; align-items:center; gap:8px;"><span class="amsoft-logo-text">Amsoft</span><span class="amstrad-subtext-black">${t.amstrad}</span></div>`;
return `<div class="label-header ${t.header}"><div style="display:flex; align-items:center; gap:8px;">${logoBlock}</div><div class="side-indicator-container">${sideNum} <div class="arrow-cajetin">↑</div></div></div><div class="label-body-replica"><span class="txt-desc-top">${data.desc}</span><span style="${finalStyle}">${data.t2}</span><div class="serial-box-only" style="${serialBoxStyle}"><span>${data.ser}</span></div><div class="txt-small-legales">${t.lic}</div></div><div class="label-footer-grey"><div class="cs-logo-label">CS</div><span class="copy-text-replica">${t.copy}</span></div>`;

}

function triggerLoadFromDisk(idx, isBack) {

const sideChar = isBack ? 'B' : 'A'; const sideNum = (idx === 1) ? (isBack ? "2" : "1") : (isBack ? "4" : "3");
if(currentLoading) clearInterval(currentLoading);
const t = translations[currentLang]; let name = (t['d' + sideNum].t2 || t['d' + sideNum].desc).replace(/<[^>]*>?/gm, ' ').replace(/\s\s+/g, ' ');
const status = document.getElementById('status-msg'); const led = document.getElementById('drive-led'); const dlZone = document.getElementById('download-zone');
dlZone.style.display = 'none'; 
status.className = ""; status.style.color = "#ffff00"; 
led.className = "drive-led led-active led-reading"; 
const hub = document.getElementById(`hub${idx}${isBack ? 'back' : 'front'}`);
document.querySelectorAll('.hub-3inch').forEach(h => h.classList.remove('spinning'));
if(hub) hub.classList.add('spinning');
playRecalibrate(); setTimeout(() => startMotorSound(), 550);
let track = 0;
currentLoading = setInterval(() => {
  status.innerHTML = `LEYENDO DISCO ${idx} [CARA ${sideChar}] - PISTA ${track}...<br>CARGANDO: <span style="color:#fff; font-weight:bold;">${name}</span>`;
  if (track > 0) playStepSound(); 
  track++;
  if (track > 40) { 
    clearInterval(currentLoading); stopMotorSound(); led.className = "drive-led"; if(hub) hub.classList.remove('spinning');
    status.className = ""; status.style.color = "#00ff00"; 
    status.innerHTML = `<span class="status-green">SISTEMA MONTADO: ${name}</span><br><span style='color:#fff;'>DISCO LISTO</span>`;
    const fileName = `Disco_sistema_${currentModel}_${t.code}_d${idx}_${sideChar}.zip`;
    dlZone.innerHTML = `<a href="/lib/exe/fetch.php?media=sistema:descargas:${fileName}" class="download-link">OBTENER IMAGEN .DSK DEL SISTEMA</a>`;
    dlZone.style.display = 'block';
  }
}, 180);

} </script> </html>

software/sistema.1777791843.txt.gz · Última modificación: por jesus