תערוכה

SHEET-DOS — מערכת הפעלה שחיה בתוך גיליון

מסך טקסט של 118 על 40 תווים. חלונות עם סדר עומק, טרמינל עם היסטוריה, שעון עם מחוגים, מוניטור מערכת ומשחק החיים של קונוויי. אין מאקרו, אין VBA, אין תוספים. כל תו על המסך הוא תא, וכל תא הוא נוסחה.

ערכה
גודל
—
בחרו תא במסך
טוען…

הפקודות נכתבות לתוך ארבעה־עשר תאים רגילים — D48:D61 — והגיליון מחושב מחדש. לחצו על תא כלשהו במסך כדי לראות את הנוסחה שיושבת מאחוריו.

מה בעצם רץ פה

הדפדפן שלכם מחזיק עכשיו חוברת עבודה של אקסל עם 46,352 תאים, מחשב אותה מחדש כל שנייה, ומצייר את התוצאה. אין כאן אמולציה של אקסל שמריצה משהו אחר: המסך הוא הגיליון. מנוע הנוסחאות שכתוב לעמוד הזה נבדק מול LibreOffice — כל 4,720 התווים וכל 4,720 ערכי הצבע יוצאים זהים.

1 · המסך הוא framebuffer

חומרת טקסט אמיתית מחזיקה שתי רשתות: אחת עם התו שבכל מיקום, ואחת עם הצבע שלו. SHEET-DOS עושה בדיוק את זה. שורות 3 עד 42 הן חוצץ התווים, שורות 103 עד 142 הן חוצץ התכונות — בדיוק מאה שורות מתחת לתאים שלהן.

הצבע מגיע מ־48 כללי עיצוב מותנה, כל אחד קורא את תא התכונה מאה שורות למטה: B103=3 זה טקסט שחור על ירוק זרחני, כלומר שורת כותרת של חלון בפוקוס. שש־עשרה תכונות, שלוש ערכות. הפקודה theme amber מוסיפה עשרים לכל תכונה בחוצץ, וקבוצת כללים אחרת משתלטת. התווים עצמם לא זזים.

2 · החלונות הם שורות בטבלה

לכל חלון יש שורה עם x, y, רוחב, גובה, דגל פתיחה וסדר עומק. שום דבר לא מצויר, לא מקובץ ולא צף. כל תא על המסך שואל שאלה אחת: מבין החלונות שמכסים אותי, מי למעלה? סדר העומק ומספר החלון נדחסים למפתח אחד, כדי ש־MAX יחיד יוכל לענות:

=SUMPRODUCT(MAX(WIN_OPEN*(WIN_X<=B$2)*(WIN_X+WIN_W>B$2)
                *(WIN_Y<=$A3)*(WIN_Y+WIN_H>$A3)*WIN_KEY))

MOD ב־100 ויש לכם את החלון הבעלים. תא שאף חלון לא לקח בודק את אותו חוצץ שורה למעלה ועמודה שמאלה — ואם יש שם חלון, התא הזה הוא הצל שלו. זה כל מנהל החלונות.

3 · הקונסולה היא INDEX ו־LOOKUP

שורת הפקודה שמתחת למסך היא ארבעה־עשר תאים. הקרנל מפצל כל אחד לפועל ולארגומנט ומקפל את כל הרשימה למצב. חלון פתוח אם הפקודה האחרונה שהזכירה אותו לא הייתה close:

=LOOKUP(2,1/((CMD_ARG=$B5)*((CMD_VERB="open")+(CMD_VERB="close")
        +(CMD_VERB="focus"))),CMD_VERB)

LOOKUP(2,1/תנאי) הוא התרגיל הישן למציאת ההתאמה האחרונה ברשימה. כאן הוא גם עושה סדר עומק: מספר השורה של ה־open האחרון הופך ל־z של החלון, ולכן פתיחה מרימה חלון מעל כל השאר.

4 · והאפליקציות

למה זה בכלל מעניין

זו לא דרך טובה לבנות מערכת הפעלה. זו בדיוק הנקודה. גיליון אלקטרוני הוא סביבת ריצה תגובתית כללית שכבר פתוחה אצל שישים מיליון אנשים. מי שיודע לחשוב בה — לפרק תהליך למצב, לכללים ולתלויות — בונה בה דברים שאף אחד לא התכוון שאפשר. הכלי אף פעם לא היה המגבלה.