En un sistema moderno, copiar una carpeta dentro de otra es una función recursiva de veinte líneas. En un Amiga 500, esa misma función es una bomba de relojería: AmigaOS regala a cada proceso unos 4 KB de pila, y cada nivel de recursión ingenua cuesta cientos de bytes. Un árbol de seis niveles y adiós.
Marcos de recursión en el heap
La solución de ChumOS: la recursión no vive en la pila, vive en el heap. Cada nivel reserva su marco —un FileInfoBlock y dos buffers de ruta, unos 780 bytes— con AllocMem, encadenado como lista. La profundidad está acotada, y si el disco está más anidado que el límite, la operación falla con un mensaje digno en vez de con un Guru Meditation.
La guarda anti-recursión
Segunda trampa clásica: copiar una carpeta DENTRO de sí misma. Sin guarda, la copia se persigue la cola infinitamente hasta llenar el disco. ChumOS compara rutas con semántica AmigaDOS —insensible a mayúsculas— antes de empezar, y simplemente se niega: no puedes copiar Work: dentro de Work:Backup si Backup cuelga de Work.
El borrado re-lee la primera entrada tras cada unlink. Borrar durante un ExNext() es comportamiento indefinido, y lo aprendimos con un disco de pruebas.
El eureka doloroso: ExNext() y el borrado
El bug que más nos costó: borrar un árbol mientras lo recorres con ExNext() es comportamiento indefinido en AmigaDOS. A veces funciona. A veces se salta ficheros. Una vez, en un disco de pruebas, entró en un bucle glorioso. La solución es humilde: tras cada unlink, volver a leer la primera entrada del directorio. Más lento, imposible de romper. En un disquete de 880 K, la corrección le gana a la elegancia todas las veces.
D. ABELLÁN · FOUNDER · PRINCETON, IL · 2026.06.28