Start page: ARABART home
← All fifteen programs

TAHER

1991 · C:\TAHER\TAHER.COM

C:\TAHER\TAHER.COM
TAHER running in DOS

Loading TAHER.COM, 3 KB

Click the screen to type into the program.

A calligraphy splash screen for a lab physician’s software, with his name, Taher Ibrahim El-Sarafy, in Arabic.

The story

This splash screen was a gift on top of a paid job. It draws the doctor's name in red and silver Arabic calligraphy: 901 pen strokes, played by the same tiny player Yasser wrote for the Port Said Governorate. His own signature rides along inside, folded so no text search can find it, and unfolds when the program runs.

A name, written by hand in bytes

Dr. Taher Ibrahim El-Sarafy hired Yasser to write the software that printed his lab's results. Yasser added something nobody asked for: a splash screen with the doctor's name in calligraphy.

طاهر ابراهيم الصرفي

The name is not a picture file. It is 901 strokes in 2,109 bytes of script, drawn by the same tiny player he wrote for the Port Said Governorate screen. Each stroke is a thin line of pixels. Each pixel gets a twin 2 to the right and 2 down, so the letters stand out in red and silver. The pen starts at the right and walks left 297 times, the way Arabic is written. Drag the pen back and forth, or run it.

C:\TAHER\TAHER.COM
طاهر ابراهيم الصرفي, Taher Ibrahim El-Sarafy, in red and silver calligraphy on black.

901 strokes, 2,109 bytes of script, one name.

Two new words

For this job his player learned two commands. 88h clears the screen for the next picture. z ends the show.

Both start with the same short pause: 4,096 calls to DOS's “is a key waiting?”, a beat for the eye before the screen changes. Then 88h sets the video mode again. That wipes the screen, like clearing a canvas, and the player reads the next picture's header. z goes back to text mode and prints his name. TAHER uses one picture and a z. In the same year he used the same player for a 15-picture advertisement for a Port Said computer center: 14 times 88h, then z. Play both.

SCREEN 640 × 350
TAHER.COM's one picture: the name طاهر ابراهيم الصرفي.
  1. z

TAHER.COM draws one picture, then z: a short wait, text mode, and his name.

The two programs share their first 241 bytes: the player, the new commands and the signature below. One engine, two scripts, like one slide-show app opening two different decks.

His signature, folded

Before it draws anything, TAHER runs 19 bytes of code that unfold his name from 65 stored bytes. Each byte, minus a key that starts at 4 and grows by one, becomes a letter.

Search the file for YASSER and you find nothing: on disk the name reads 4F 25 4B 27 55 29. Only in memory, as the program starts, do the bytes turn into “K E M Y A M Software Corp., <c>1991 YASSER MOHAMED ALI.” DOS prints them when the show ends. This is obfuscation: a string folded so a text search cannot see it, the way a modern app hides strings in its compiled code. Step through it, byte by byte.

MEMORY 65 bytes
  1. 4F−4K
  2. 25−5·
  3. 4B−6E
  4. 27−7·
  5. 55−8M
  6. 29−9·
  7. 63−10Y
  8. 2B−11·
  9. 4D−12A
  10. 2D−13·
  11. 5B−14M
  12. 2F−15·
  13. 30−16·
  14. 31−17·
  15. 65−18S
  16. 82−19o
  17. 7A−20f
  18. 89−21t
  19. 8D−22w
  20. 78−23a
  21. 8A−24r
  22. 7E−25e
  23. 3A−26·
  24. 3B−27·
  25. 5F−28C
  26. 8C−29o
  27. 90−30r
  28. 8F−31p
  29. 4E−32.
  30. 4D−33,
  31. 2F−34CR
  32. 2D−35LF
  33. 31−36CR
  34. 2F−37LF
  35. 46−38·
  36. 63−39<
  37. 8B−40c
  38. 67−41>
  39. 5B−421
  40. 64−439
  41. 65−449
  42. 5E−451
  43. 4E−46·
  44. 88−47Y
  45. 71−48A
  46. 84−49S
  47. 85−50S
  48. 78−51E
  49. 86−52R
  50. 55−53·
  51. 83−54M
  52. 86−55O
  53. 80−56H
  54. 7A−57A
  55. 87−58M
  56. 80−59E
  57. 80−60D
  58. 5D−61·
  59. 7F−62A
  60. 8B−63L
  61. 89−64I
  62. 6F−65.
  63. 4F−66CR
  64. 4D−67LF
  65. 68−68$
AT THE END what DOS prints
K E M Y A M   Software  Corp.,

 <c>1991 YASSER MOHAMED ALI.
TAHER.COM the first 19 bytes
  1. 0100mov si,01ABh; the folded name
  2. 0103mov al,4; the first key
  3. 0105mov cx,41h; 65 bytes
  4. 0108next:mov ah,[si]; a stored byte
  5. 010Asub ah,al; minus the key
  6. 010Cmov [si],ah; the letter, in place
  7. 010Einc si; next byte
  8. 010Finc al; next key
  9. 0111loop next; 65 times
  10. 0113mov si,01ECh; then the script
The same in C
  1. char *s = name;// folded
  2. char key = 4;
  3. for (int n = 65; n; n--) {
  4. *s -= key;// minus key
  5. s++;
  6. key++;
  7. }
Watches
SI
01EBh byte 65 of 65
AL
68 the key
AH
24h now a letter
CX
1 bytes left
Help

Done: 65 bytes, one signature. It waits in memory until the show ends, then DOS prints it.

Then and now
1991 to 19932026Why it is the same idea
A calligraphy splash and a 15-picture advert on one player One slide-show app, many decks The engine is written once; every new job is just a new file.
A name stored as bytes minus 4, 5, 6 and on A string obfuscated in a compiled app Text that a search cannot find, until the program runs.
One command: wait, set the video mode, read the next header Clear the canvas and load the next slide A fresh screen for every picture.
For engineers: the new commands
TAHER.COM 0141 to 01A9
0141 mov dl,[si] / inc si ; the next script byte, as in SCREEN.COM
0144 cmp dl,'x' ... cmp dl,'y' ; the same x, w and y
0159 cmp dl,'z' / je 0194h ; z: the end
015E cmp dl,88h / je 0189h ; 88h: the next picture
0163 mov dh,0 / add dx,di ... ; anything else is a stroke
0189 mov cx,1000h ; 4,096 times:
018C mov ah,0Bh / int 21h / loop 018Ch ; is a key waiting?
0192 jmp 0116h ; mode 10h again: a clean screen, then the next header
0194 mov cx,1000h / ... loop 0197h ; the same pause
019D mov ax,3 / int 10h ; text mode
01A2 mov ah,9 / mov dx,01ABh / int 21h ; print the unfolded signature
01A9 int 20h ; back to DOS
TAHER.COM is a .COM file, loaded at 0100h. The script starts at 01ECh with the header 4B 43 00 07 04, the same as the first line of the governorate screen.

His x and w moves are swapped in the code itself, inc bx for x and dec bx for w, but the header writes over both before the first stroke, so the pen still walks left. See how the header rewrites the player on the governorate screen's page.

Every Byte of TAHER.COM

Each square is one byte of the program in memory, colored by what it is. Tap a part to open it in the full map, down to the single instruction.

C:\TAHER\TAHER.COM