תו בקרה

בתחום המחשוב והטלקומוניקציה, תו בקרה או תו שאינו מודפס הוא נקודת קוד (מספר) בערכת תווים, שאינה מייצגת סמל כתוב. הם משמשים כאיתות בתוך התשדורת ליצירת אפקטים מלבד הוספת סמל לטקסט. כל שאר התווים הם בעיקר תווים מודפסים, ניתנים להדפסה או גרפיים, פרט אולי לתו "רווח".

היסטוריה 
סימנים פרוצדורליים בקוד מורס הם סוג של תו בקרה.

סוג של תווי בקרה הוצג בקוד בודו משנת 1870: NUL ו-DEL. קוד Murray משנת 1901 הוסיף את החזרת הסמן (CR) והזנת השורה (LF), וגרסאות אחרות של קוד Baudot כללו תווי בקרה נוספים.

תו הפעמון (BEL), שצלצל בפעמון כדי להתריע למפעילים, היה גם הוא תו בקרת טלפרינטר מוקדם.

תווי בקרה נקראו גם "משפיעי פורמט".

ב-ASCII 
ב-ASCII הוגדרו לא מעט תווי בקרה (33 ב-ASCII, ותקן ECMA-48 מוסיף עוד 32). הסיבה לכך היא שלטרמינלים מוקדמים היו בקרות מכניות או חשמליות פרימיטיביות מאוד, שהפכו כל סוג של ממשק API זוכר מצבים ליקר ליישום, ולכן היה נחוץ קוד ייעודי לכל פונקציה ופונקציה. מהר מאוד הפך לאפשרי וזול לפרש רצפים של קוד כדי לבצע פונקציה, ויצרני מכשירים מצאו דרך לשלוח מאות הוראות מכשירים. בפרט, הם השתמשו בתו מילוט ASCII 27, ואחריו סדרת תווים שנקראת "רצף בקרה" או "רצף מילוט". המנגנון הומצא על ידי בוב במר, אבי ה-ASCII. לדוגמה, הרצף של קוד 27, ואחריו התווים הניתנים להדפסה "[2;10H", יגרום למסוף Digital Equipment Corporation VT100 להזיז את הסמן שלו לתא ה-10 של השורה השנייה של המסך. קיימים מספר תקנים עבור רצפים אלה, בעיקר ANSI X3.64. מספר הווריאציות הלא סטנדרטיות בשימוש הוא גדול, במיוחד בקרב מדפסות, שבהן הטכנולוגיה התקדמה הרבה יותר מהר, ואף גוף תקנים לא היה יכול לעמוד בקצב.

כל הערכים בטבלת ASCII מתחת לקוד 32 (טכנית ערכת קודי הבקרה C0) הם מסוג זה, כולל CR ו-LF המשמשים להפרדת שורות טקסט. הקוד 127 (DEL) הוא גם תו בקרה. טבלאות ASCII מורחבות שהוגדרו על ידי ISO 8859 הוסיפו את הקודים 128 עד 159 כתווי בקרה, זה נעשה בעיקר כדי שאם הסיבית הגבוהה הושמטה היא לא תשנה תו הדפסה לקוד בקרה C0, אבל היו כאן גם כמה הקצאות לשימושים, במיוחד NEL. סט שני זה נקרא סט C1.

65 קודי הבקרה הללו הועתקו ל-Unicode. Unicode הוסיף עוד תווים שיכולים להיחשב כפקדים, אבל הוא עושה הבחנה בין "תווי עיצוב" אלה (כגון ה -0-width non-joiner), לבין 65 תווי הבקרה.

ערכת התווים Extended Binary Coded Decimal Interchange Code (EBCDIC) מכילה 65 קודי בקרה, כולל כל קודי הבקרה של ASCII בתוספת קודים נוספים המשמשים בעיקר לשליטה בציוד היקפי של IBM.

תווי הבקרה ב-ASCII שעדיין נמצאים בשימוש נפוץ כוללים:
 0 (null, NUL, \0, ^@), במקור נועד להיות תו שמתעלמים ממנו, אך כיום משמש שפות תכנות רבות, כולל C, כדי לסמן את סוף המחרוזת.
 7 (bell, BEL, \a, ^G), מה שעלול לגרום למכשיר להשמיע אזהרה כגון פעמון או צליל צפצוף או מסך מהבהב.
 8 (backspace, BS, \b, ^H), עשוי למחוק את התו הקודם.
 9 (טאב אופקי, HT, \t, ^I), מעביר את מיקום ההדפסה ימינה לעצירת הטאב הבאה.
 10 (ירידת שורה, LF, \n, ^J), מזיז את ראש ההדפסה למטה שורה אחת, או לקצה השמאלי ולמטה. משמש כסמן סוף שורה ברוב המערכות והגרסאות של UNIX.
 11 (טאב אנכי, VT, \v, ^K).
 12 (הזנת טופס, FF, \f, ^L), כדי לגרום למדפסת להוציא נייר לראש העמוד הבא, או למסוף וידאו לנקות את המסך.
 13 (החזרת הסמן, CR, \r, ^M), מעביר את מיקום ההדפסה לתחילת השורה, ומאפשר הדפסת שורה נוספת על גבי השורה הקודמת. משמש כסמן סוף שורה ב- Classic Mac OS, OS-9, FLEX (וגרסאות שלהם). זוג CR+LF משמש לסימון סוף שורה את CP/M -80 ונגזרותיו כולל DOS ו-Windows, וכן על ידי פרוטוקולי שכבת יישומים כגון FTP, SMTP ו- HTTP.
 26 (Control-Z, SUB, EOF, ^Z). פועל כסוף קובץ עבור פלט/קלט של קובץ טקסט במערכת ההפעלה חלונות.
 27 (escape, ESC, ו-\e (ב-GCC בלבד), ^[). משמש כתו מילוט.

ניתן לתאר את תווי הבקרה כמבצעים משהו כאשר המשתמש מזין אותם, כגון קוד 3 (תו סוף טקסט, ETX, ^C) כדי לעצור את תהליך הריצה, או קוד 4 (תו סוף שידור, EOT, ^D), משמש לסיום קלט טקסט או ליציאה ממעטפת יוניקס. שימושים אלו בדרך כלל אינם קשורים לשימוש שלהם כאשר הם נמצאים בפלט של טקסט, ובמערכות מודרניות בדרך כלל אינם כרוכים בשידור של מספר הקוד כלל (במקום זאת, התוכנית מקבלת את העובדה שהמשתמש מחזיק את מקש Ctrl לחוץ ולוחץ על המקש המסומן ב-'C').

ביוניקוד 
ב-Unicode, "תווי שליטה" הם U+0000 — U+001F (בקרות C0), U+007F (מחיקה), ו-U+0080 — U+009F (בקרות C1). הקטגוריה הכללית שלהם היא "Cc". קודי עיצוב מופרדים בקטגוריה כללית "Cf". לתווי הבקרה Cc אין שם ב-Unicode, אלא מקבלים תוויות כגון "<control-001A>" במקום זאת.

הצגה 
ישנן מספר טכניקות להצגת תווים שאינם מודפסים, המודגמות להלן ביחס לתו הפעמון בקידוד ASCII:
 נקודת קוד: 7 עשרוני, הקסדצימלי 0x07
 קיצור, לרוב שלוש אותיות גדולות: BEL
 תו מיוחד הדוחס את הקיצור: Unicode U+2407 (␇), "סמל לפעמון"
 ייצוג גרפי ISO 2047: Unicode U+237E (⍾), "גרפיקה לפעמון"
 סימן קרט ב-ASCII, כאשר נקודת הקוד 00xxxxx מיוצגת כסימן ואחריו האות הגדולה בנקודת הקוד 10xxxxx: ^G
 רצף מילוט, כמו בקודי מחרוזת תווים של שפת C: \a, \007, \x07 וכו'.

כיצד תווי בקרה ממופים למקלדות 
למקלדות מבוססות ASCII יש מקש שכותרתו "Control", "Ctrl", או לעיתים נדירות "Cntl", שפועל בדומה למקש Shift, בלחיצה בשילוב עם מקש אות או סמל אחר. באחד המימושים, מקש הבקרה יוצר את הקוד 64 מקומות מתחת לקוד עבור האות הגדולה (בדרך כלל) שהוא נלחץ איתה (כלומר, מפחית 64 מערך קוד ASCII בעשרונית של האות הגדולה). מימוש נוסף הוא לקחת את קוד ה-ASCII המיוצר על ידי המקש ולבצע פעולת AND על סיביות עם 31, מה שמאלץ את סיביות 6 ו-7 להתאפס. לדוגמה, לחיצה על "קונטרול" ועל האות "g" או "G" (קוד 107 באוקטלי או 71 בבסיס 10, שהוא 01000111 בבינארי), מייצרת את הקוד 7 (פעמון, 7 בבסיס 10, או 00000111 בבסיס בינארי). התו NULL (קוד 0) מיוצג על ידי Ctrl-@, "@" הוא הקוד מיד לפני "A" בערכת התווים ASCII. מטעמי נוחות, הרבה מסופים מקבלים את Ctrl-Space כמקבילה עבור Ctrl-@. בכל מקרה, זה מייצר את אחד מ-32 קודי הבקרה של ASCII בין 0 ל-31. גישה זו אינה מסוגלת לייצג את התו DEL בגלל הערך שלו (קוד 127), אבל Ctrl-? משמש לעיתים קרובות עבור תו זה, שכן הפחתה של 64 מ'?' נותן מינוס 1, שבתרגום ל-7 סיביות הוא 127.

כאשר מקש הבקרה לחוץ, מקשי האותיות מייצרים את אותם תווי בקרה ללא קשר למצב של מקשי Shift או Caps Lock. במילים אחרות, זה לא משנה אם המקש היה יוצר אות גדולה או קטנה אילולי הלחיצה על קונטרול. הפרשנות של מקש הבקרה עם מקשי הרווח, התו הגרפי ומקשי הספרות (קודי ASCII 32 עד 63) משתנה בין מערכות. חלקם יפיקו את אותו קוד תו כאילו לא הוחזק מקש הבקרה. מערכות אחרות מתרגמות את המפתחות הללו לתווי בקרה כאשר מקש הבקרה לחוץ. הפרשנות של מקש הבקרה עם מקשים שאינם ASCII ("זרים") משתנה גם היא בין המערכות.

תווי בקרה מומרים לעיתים קרובות לצורה הניתנת להדפסה הידועה בשם סימון קרט על ידי הדפסת סימן קרט (^) ולאחר מכן תו ASCII בעל הערך של תו הבקרה בתוספת 64. תווי בקרה שנוצרו באמצעות מקשי האותיות מוצגים לפיכך באות גדולה. לדוגמה, ^G מייצג קוד 7, אשר נוצר על ידי לחיצה על מקש G כאשר מקש הבקרה לחוץ.

למקלדות יש בדרך כלל כמה מקשים בודדים שמייצרים קודי תו בקרה. לדוגמה, המפתח שכותרתו "Backspace" מפיק בדרך כלל קוד 8, "Tab" קוד 9, "Enter" או "Return" קוד 13 (אם כי מקלדות מסוימות עשויות להפיק קוד 10 עבור "Enter").

מקלדות רבות כוללות מקשים שאינם מתאימים לשום תו ASCII שניתן להדפסה או לתו בקרה, למשל חיצי בקרת סמן ופונקציות עיבוד תמלילים. לחיצות המקשים הקשורות מועברות לתוכניות מחשב באחת מארבע שיטות: ניכוס תווי בקרה שאינם בשימוש; שימוש בקידוד כלשהו מלבד ASCII; שימוש ברצפי בקרה מרובי תווים; או שימוש במנגנון נוסף מחוץ ליצירת תווים. מסופי מחשב "טיפשים" משתמשים בדרך כלל ברצפי בקרה. מקלדות המחוברות למחשבים אישיים עצמאיים שיוצרו בשנות ה-80 משתמשות בדרך כלל באחת משתי השיטות הראשונות (או בשתיהן). מקלדות מחשב מודרניות מייצרות קודי סריקה המזהים את המקשים הפיזיים הספציפיים שנלחצים; תוכנת המחשב קובעת כיצד לטפל במקשים הנלחצים, כולל כל אחת מארבע השיטות שתוארו לעיל.

שימושים 
תווי הבקרה תוכננו להתחלק למספר קבוצות: בקרת הדפסה ותצוגה, מבנה נתונים, בקרת שידור ועוד.

בקרת הדפסה ותצוגה 
תווי בקרת הדפסה שימשו לראשונה לשליטה במנגנון הפיזי של מכונות כתיבה, התקן הפלט המוקדם ביותר. יישום מוקדם של רעיון זה היה תווי בקרת סמן ASA מחוץ לתשדורת. מאוחר יותר שולבו תווי בקרה בזרם הנתונים שיודפסו. תו החזרת הסמן (CR), כאשר הוא נשלח למכשיר כזה, גורם לו לשים את התו בקצה הנייר בו מתחילה הכתיבה (ואולי גם להעביר את מיקום ההדפסה לשורה הבאה). תו הזנת השורה (LF/NL) גורם להתקן להציב את מיקום ההדפסה בשורה הבאה. זה עשוי (או אולי לא), בהתאם למכשיר ולתצורתו, גם להזיז את מיקום ההדפסה לתחילת השורה הבאה (המיקום השמאלי ביותר עבור כתב משמאל לימין, כמו האלפבית המשמש לשפות מערביות, והמיקום הימני ביותר עבור כתבים מימין לשמאל כגון האלפבית העברי והערבי). תווי הטאב האנכי והאופקי (VT ו-HT/TAB) גורמים להתקן הפלט להזיז את מיקום ההדפסה לתחנת הטאב הבאה בכיוון הקריאה. תו הזנת הטופס (FF/NP) מתחיל עמוד נייר חדש, ויכול לעבור לתחילת השורה הראשונה, או לא לעבור. תו ה-backspace (BS) מזיז את מיקום ההדפסה תו אחד אחורה. במדפסות, כולל מסופי מחשב עם עותקים מודפסים, לרוב משתמשים בזה כדי שהמדפסת תוכל להדפיס תו נוסף על גבי התו האחרון שהודפס כדי להפיק תווים אחרים שאינם זמינים במקלדת. על מסופי וידאו והתקני פלט אלקטרוניים אחרים, יש לעיתים קרובות אפשרויות תצורת תוכנה (או חומרה) המאפשרות מחיקה עם התו backspace (למשל, רצף BS, SP, BS), שמוחק, או רצף שלא מוחק, אך במחשבים מודרניים התו מוחק כברירת מחדל. תווי ההסטה וההזזה החוצה (SI ו-SO) שימשו לבחירת ערכות תווים חלופיות, גופנים, קו תחתון או מצבי הדפסה אחרים. רצפי מילוט שימשו לעיתים קרובות כדי לעשות את אותו הדבר.

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

מבנה נתונים 
המפרידים (קובץ, קבוצה, רשומה ויחידה: FS, GS, RS ו-US) נוצרו כדי לייצר מבנה לנתונים, בדרך כלל על קלטת, כדי לדמות כרטיסים מחוררים. סוף מדיום (EM) מזהיר שהקלטת (או אמצעי הקלטה אחר) מסתיימת. בעוד שמערכות רבות משתמשות ב-CR/LF וב-TAB להבניית נתונים, ניתן להיתקל בתווי בקרת המפריד בנתונים שיש להבנות. תווי הבקרה של המפריד אינם עמוסים מדי; אין בהם שימוש כללי למעט הפרדת נתונים לקבוצות מובנות. הערכים המספריים שלהם צמודים לתו הרווח, שיכול להיחשב כחבר בקבוצה, כמפריד מילים.

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

תו ההתחלה של כותרת (SOH) נועד לסמן קטע שאינו נתונים בזרם נתונים - החלק בזרם המכיל כתובות ונתוני תחזוקה אחרים. תו תחילת הטקסט (STX) סימן את סוף הכותרת, ואת ההתחלה של החלק הטקסטואלי של זרם. תו סוף הטקסט (ETX) סימן את סוף הנתונים של הודעה. מוסכמה בשימוש נרחב היא להפוך את שני התווים הקודמים ל-ETX לסיכום ביקורת או CRC למטרות זיהוי שגיאות. תו סוף גוש השידור (ETB) שימש לציון סופו של גוש נתונים, שבו הנתונים חולקו לבלוקים כאלה למטרות שידור.

תו הבריחה (ESC) נועד "לצטט" את התו הבא, אם זה היה תו בקרה אחר הוא היה מדפיס אותו במקום לבצע את פונקציית הבקרה. כיום כמעט ולא משתמשים בו למטרה זו. תווים שונים הניתנים להדפסה משמשים כ"תווי בריחה " גלויים, בהתאם להקשר.

תו ההחלפה (SUB) נועד לבקש תרגום של התו הבא מתו שניתן להדפסה לערך אחר, בדרך כלל על ידי הגדרת bit 5 לאפס. זה שימושי מכיוון שחלק מהמדיה (כגון גיליונות נייר המיוצרים על ידי מכונות כתיבה) יכולים לשדר רק תווים הניתנים להדפסה. במערכות MS-DOS עם קבצים פתוחים במצב טקסט, תו "סוף טקסט" או "סוף קובץ" מסומן על ידי תו זה (Ctrl-Z), במקום Ctrl-C או Ctrl-D, הנפוצים בשאר מערכות הפעלה.

תו הביטול (CAN) סימן שיש למחוק את הרכיב הקודם. תו ההכרה השלילי (NAK) הוא דגל מוגדר כדי לציין בעיה בקליטה, ולעיתים קרובות, לסמן שיש לשלוח שוב את הרכיב הנוכחי. תו האישור (ACK) משמש בדרך כלל כדגל כדי לציין שלא זוהתה בעיה באלמנט הנוכחי.

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

קודי בקרת המכשיר (DC1 עד DC4) היו במקור כלליים, שיושמו לפי הצורך על ידי כל מכשיר. עם זאת, צורך אוניברסלי בהעברת נתונים הוא לבקש מהשולח להפסיק את השידור כאשר מקלט אינו מסוגל באופן זמני לקבל נתונים נוספים. חברת Digital Equipment Corporation המציאה קונבנציה שהשתמשה ב-19 (תו בקרה במכשיר 3 (DC3), הידוע גם כ-control-S, או XOFF) לסימון "עצור שידור" ("S"top), ו-17 (תו בקרה במכשיר 1 (DC1), הידוע גם כ-control-Q, או XON) כדי להתחיל בשידור. זה נכנס לשימוש כה נרחב שהרוב לא ידעו שהוא לא חלק מ-ASCII הרשמי. טכניקה זו, ככל שתיושם, חוסכת חוטים בכבל הנתונים המוקדשים לניהול שידור, מה שחוסך כסף. עם זאת, יש להשתמש בפרוטוקול הגיוני לשימוש באותות בקרת זרימת שידור כאלה, כדי למנוע מצבי קיפאון פוטנציאליים.

תו מילוט של קישור נתונים (DLE) נועד להיות אות לקצה השני של קישור נתונים שהתו הבא הוא תו בקרה כגון STX או ETX. לדוגמה, חבילת נתונים עשויה להיות בנויה בצורה הבאה (DLE) <STX> <PAYLOAD> (DLE) <ETX>.

קודים שונים 
קוד 7 (BEL) נועד לגרום לאות קולי במסוף המקבל.

רבים מתווי הבקרה של ASCII תוכננו עבור מכשירים של אותה תקופה שלא משמשים כיום. לדוגמה, קוד 22, "סינכרוני סרק" (SYN), נשלח במקור על ידי מודמים סינכרוניים (שצריכים לשלוח נתונים כל הזמן) כאשר לא היו נתונים ממשיים לשליחה. (מערכות מודרניות משתמשות בדרך כלל ב-start bit כדי להכריז על תחילתה של מילה משודרת — זו תכונה של תקשורת א-סינכרונית. קישורי תקשורת סינכרוניים נראו לעיתים קרובות יותר עם מיינפריים, שם הם הופעלו בדרך כלל על גבי קווי תקשורת ארגוניים שכורים כדי לחבר מיינפריים למיינפריים אחר או אולי למיני מחשב.)

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

קוד 127 (DEL, המכונה "rubout") הוא גם מקרה מיוחד. בקוד 7 הסיביות שלו כל הסיביות דולקות, מה שבעצם מחק תא תו בסרט מנוקב כאשר נקבו יתר על המידה. סרט מנוקב היה אמצעי אחסון נפוץ כשפותח ASCII, עם היסטוריית מחשוב החל מציוד לפיצוח קודים של מלחמת העולם השנייה בביורו שיפרוב. סרט הנייר יצא משימוש בשנות ה-70, כך שההיבט החכם הזה של ASCII כמעט ולא ראה שימוש לאחר מכן. חלק מהמערכות (כגון מחשב אפל הראשון) המירו אותו ל-backspace. אבל מכיוון שהקוד שלו נמצא בטווח של תווים אחרים הניתנים להדפסה, ומפני שלא היה לו גליף רשמי, ספקי ציוד מחשבים רבים השתמשו בו כתו נוסף שניתן להדפסה (לעיתים קרובות תו "קופסה" שחור לגמרי השימושי למחיקת טקסט על ידי הדפסת יתר עם דיו).

ROM-ים שאינם ניתנים למחיקה מיושמים בדרך כלל כמערכים של אלמנטים ניתנים להיתוך, שכל אחד מהם מייצג ביט, שניתן לעבור רק בכיוון אחד, בדרך כלל מאחד לאפס. ב-PROM-ים כאלה, ניתן להשתמש בתווי DEL ו-NUL באותו אופן שבו נעשה שימוש בקלטת מחוררת: האחד לשמור בתי מילוי חסרי משמעות שניתן לכתוב מאוחר יותר, והשני כדי להמיר בתים כתובים לבתי מילוי חסרי משמעות. עבור PROM-ים שמחליפים אחד לאפס, התפקידים של NUL ו-DEL הפוכים; כמו כן, DEL יעבוד רק עם תווים של 7 סיביות, שבהם נעשה שימוש לעיתים רחוקות כיום; עבור תוכן של 8 סיביות, ניתן להשתמש בקוד התו 255, המוגדר בדרך כלל כתו רווח לא שובר, במקום DEL.

מערכות קבצים רבות אינן מאפשרות תווי בקרה בשמות קבצים, מכיוון שייתכן שיש להם פונקציות שמורות.

קישורים חיצוניים 
 ISO IR 1 C0 סט של ISO 646 (PDF)

הערות שוליים 

מחרוזת (מדעי המחשב)
קידוד תווים
דפים עם תרגומים שלא נסקרו