HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
PDP-10
its
Assembly2017–2026
PDP-10 / its

its

Incompatible Timesharing System

23Distinct people
76Mentions
0Explicit recommenders
963GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Incompatible Timesharing System

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 7:24:48 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year76 dated mentions

Observed mentions: 2017-01-24 01:14:25 UTC to 2026-09-12 02:00:03 UTC.

051015202017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 8 mentions; 1 submissions, 7 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 7 mentions; 1 submissions, 6 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 19 mentions; 2 submissions, 17 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 11 mentions; 2 submissions, 9 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 5 mentions; 1 submissions, 4 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC211
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC606
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC615
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC909
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC817
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC716
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC19217
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC1129
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC514
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC303

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Incompatible Timesharing System About ITS ITS, the Incompatible Timesharing System, is an operating system for the PDP-10 computer family. It was created by hackers at MIT in the 1960s. The MIT site was shut down in 1990, but enthusiasts continue to operate ITS systems to this day. Some notable ITS features: Hosted the first versions of Emacs, Zork, Macsyma, Maclisp, Scheme, and multi-player Maze War Virtual memory User-space device drivers Networking: TCP/IP, ARPAnet, Chaosnet Transparent network file system Terminal-independent text output Graphical workstations There is a mailing list for discussion about ITS. Go to http://its.victor.se/mailman/listinfo/its-hackers_its.victor.se for more information. About this project This repository contains source code, tools, and scripts to build an ITS system from scratch. The goals are: To provide an automated build from start to end. No user intervention is necessary. To check which programs have source code, and which programs are missing source code. To ensure that we know how to build all programs. To update programs with the latest bug fixes and enhancements. To be able to set configurable options across the whole system, such as host name, IP address, hardware devices. The build currently runs on the SIMH and KLH10 emulators. Of course, we'd be delighted to test this on a real KS10. Building To build ITS with this repository, you need some tools installed; see the table below. Ensure all submodules are checked out, and then type make EMULATOR=simh, make EMULATOR=pdp10-ka, make EMULATOR=pdp10-kl, make EMULATOR=pdp10-ks, or make EMULATOR=klh10. This will leave built files in the out directory, some of which are disk images with ITS installed. Emulator Dependencies klh10 git, c compiler, make, expect, curses, autoconf simh git, c compiler, make, expect, curses, autoconf, sdl2 pdp10-ka git, c compiler, make, expect, curses, autoconf, sdl2, sdl2-image, sdl2-net, gtk3 pdp10-kl git, c compiler, make, expect, curses, autoconf, sdl2, sdl2-image, gtk3 pdp10-ks git, c compiler, make, expect, curses, autoconf, sdl2 Usage To start ITS, type ./start. If you see KLH10#, type go and Enter. If you see the DSKDMP prompt, type its, press Enter, and then ESCG. If you use the pdp10-kl emulator there is no prompt and you need to type ESCL ITS, press Enter, and then ESCG. Eventually, you will see SYSTEM JOB USING THIS CONSOLE. You are now ready to log in, so type CTRLZ. See doc/DDT.md for a list of useful commands. Alternatively to logging in directly in the system console window, which will always be displaying daemon messages, you may prefer to use a separate terminal session for logging in. To do this just run telnet localhost <port> from another shell window and press CTRLZ to log in there. The port should be determined as per this list: Port Type Emulator 10000 TK10 pdp10-ka 10002 Datapoint kludge pdp10-ka 10003 Morton box pdp10-ka 10004 DZ11 simh, pdp10-ks 10007 DTE2 pdp10-kl 10008 DL10 (pdp10-kl in the future?) To shut down ITS, type :lock and then 5down. Log yourself out to avoid the 5 minute grace period: type :logout. When ITS writes SHUTDOWN COMPLETE, it's safe to stop the emulator. Press CTRL\ to escape to the simulator command prompt and quit to close it. If you had a separate telnet user session running you can similarly press CTRL[ and then exit telnet. ITS can optionally use some additional peripheral devices. To attach a simulated GT40 graphics terminal, type ./start gt40. If you run the KA10 emulator, you can use the Knight TV raster display by typing ./start tv11 tvcon. On a TV, type F1 instead of CTRLZ. Here is an overview of the repository: bin - PDP-10 binary files necessary to bootstrap the system. build - build scripts. conf - configuration for building ITS. doc - documentation, most of which appear in the INFO system. src - source code for ITS and all programs. tools - build tools. out - build output. user - optional user files installed in ITS. Terminal Emulators Several emulators for terminals and peripheral processors are built along with ITS. They can be started conveniently with the start script, or separately. Not all terminal emulators are set up to work with all PDP-10 emulators by default. Name Description Type klh10 pdp10-ka pdp10-kl pdp10-ks simh type340 Type 340 vector no yes no no no gt40 GT40 PDP-11 vector no yes no yes yes imlac Imlac PDS-1 vector no yes no no no simh_imlac Imlac PDS-1 vector no yes no no no tv11 Knight TV PDP-11 cpu no yes no no no tvcon Knight TV console raster no yes no no no datapoint Datapoint 3300 text no yes no no no vt52 VT52 text no yes yes yes yes tek Tektronix 4010 vector no yes yes no no Documentation See the doc subdirectory for documentation. There are some short introductions for beginners: How to create a new user DDT cheat sheet for Unix users Basic editing with EMACS TECO survival guide DDT debugging newbie guide Hello MIDAS Hello Maclisp Introduction to Muddle DUMP and itstar Games Printing Assembling ITS Com link mode Logo PDP-6 Networking A list of known ITS machines. How ITS is built. Applications Some major applications: Adventure, game C10, C compiler CLU, programming language. DDT, debugger Emacs, editor Logo, interpreter Mac Hack VI and Tech II, chess programs Maclisp, interpreter and compiler Muddle, interpreter Macsyma, symbolic math Maze War, game Midas, assembler Muscom and musrun, for playing music PDP-11 simulator Scheme, interpreter Spacewar!, game Stanford University Drawing System TECO, editor TOPS-10 and WAITS emulator There is a detailed list of all installed programs.
Read the full README on GitHub

What Hacker News says

19 sources
Reading some docs from MIT during that era, one can notice instructions that required use of multiple different machines, and how pervasive transparent network filesystem access was involved in that. For example, to build a dial-in server using cheap PDP-11, essentially a way for mid-1980s students to connect a bunch of random PCs they might have to MIT's network, involved building code using at least PDP-10 and Lisp Machines - PDP-10 to run PDP-11 assembler and linker, and then Lisp Machine because several of them had permanently attached EEPROM programmers. The burned EEPROM would then be used as ROM for a common cheap PDP-11 cpu board combined with Interlan Ethernet board, and the ROM would download the remaining OS code over network. https://github.com/PDP-10/its/tree/master/src/mits_s
In War of the workstations: How the lowest bidders shaped today's tech landscape
That's right, it's just a throw-away quip, but if you want the deep nuanced story and inside history of Common Lisp and comparison with Scheme, Kent Pitman is the one to read: https://en.wikipedia.org/wiki/Kent_Pitman Index of Kent Pitman's Papers: https://www.nhplace.com/kent/Papers/ Scheme or Lisp? Kent M Pitman explains the deep philosophical differences. https://www.reddit.com/r/programming/comments/6fa5r/scheme_o... Kent Pitman on Scheme or Lisp?: https://groups.google.com/g/comp.lang.lisp/c/TEk4O4-zsA8/m/H... Common Lisp: The Untold Story: https://www.nhplace.com/kent/Papers/cl-untold-story.html Why Wolfram Mathematica did not use Lisp (2002) (ymeme.com): https://news.ycombinator.com/item?id=9797936 https://web.archive.org/web/20110122140154/http://www.ymeme.... Kent Pitman's essay on why lisp doesn't have copying of lists. https://
Read the rest
groups.google.com/g/comp.lang.lisp/c/MmtQreo3PCM Parenthetically Speaking with Kent Pitman: The Best Intentions: EQUAL Rights -- And Wrongs -- In Lisp: https://www.nhplace.com/kent/PS/EQUAL.html Kent M. Pitman Answers On Lisp And Much More: https://developers.slashdot.org/story/01/11/03/1726251/kent-... Kent M. Pitman's Second Wind: https://developers.slashdot.org/story/01/11/13/0420226/kent-... Tutorial on Good Lisp Programming Style: Peter Norvig, Sun Microsystems Labs Inc; Kent Pitman, Harlequin Inc.: https://www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf Notes from the ANSI standardisation process: https://stackoverflow.com/questions/72414053/notes-from-the-... Issue CLOS-CONDITIONS Writeup: https://www.lispworks.com/documentation/lw50/CLHS/Issues/iss... On Pitman's “Special forms in Lisp” (2011) (kazimirmajorinc.com): https://news.ycombinator.com/item?id=29947329 https://news.ycombinator.com/item?id=29954993 DonHopkins on Jan 16, 2022 | parent | next [–] Kent Pitman also wrote the "Revised Maclisp Manual (Saturday Evening Edition)" aka the "Pitmanual". https://en.wikipedia.org/wiki/David_A._Moon http://www.nhplace.com/kent/publications.html >In 1983, I finished the multi-year task of writing The Revised Maclisp Manual (Saturday Evening Edition), sometimes known as The Pitmanual, and published it as a Technical Report at MIT's Lab for Computer Science. In 2007, I finished dusting that document off and published it to the web as the Sunday Morning Edition. http://www.maclisp.info/pitmanual/ Not to be confused with David Moon who wrote the "MacLISP Reference Manual" aka the "Moonual", and who co-authored the "Lisp Machine Manual" with Richard Stallman and Daniel Weinreb, which had big bold lettering that ran around the spine and back of the cover, so it was known as the "LISP CHINE NUAL" (reading only letters on the front). https://news.ycombinator.com/item?id=15185827 https://hanshuebner.github.io/lmman/title.xml https://news.ycombinator.com/item?id=15186998 DonHopkins on Sept 6, 2017 | next [–] The cover of the Lisp Machine Manual had the title printed in all caps diagonally wrapped around the spine, so on the front you could only read "LISP CHINE NUAL". So the title was phonetically pronounced: "Lisp Sheen Nual". My friend Nick made a run of custom silkscreened orange LISP CHINE NUAL t-shirts (most places won't print around the side like that). https://www.facebook.com/photo.php?fbid=74206161754&l=54ec4e... I was wearing mine in Amsterdam at Dappermarkt on Queen's Day (when everyone's supposed to wear orange, so I didn't stand out), and some random hacker (who turned out to be a university grad student) came up to me at random and said he recognized my t-shirt! http://www.textfiles.com/hacking/hakdic.txt CHINE NUAL (sheen'yu-:l) noun. The reference manual for the Lisp Machine, a computer designed at MIT especially for running the LISP language. It is called this because the title, LISP MACHINE MANUAL, appears in big block letters -- wrapped around the cover in such a way that you have to open the cover out flat to see the whole thing. If you look at just the front cover, you see only part of the title, and it reads "LISP CHINE NUAL" toomanybeersies on Sept 7, 2017 | parent | next [–] Link to an image of the manual, for the lazy: https://c1.staticflickr.com/1/101/264672507_307376d26c_z.jpg https://news.ycombinator.com/item?id=27332340 DonHopkins on May 30, 2021 | prev | next [–] Here's the source code for Kent Pitman's "DOCTOR" in MACLISP, which was of course inspired by ELIZA. (Joseph Weizenbaum taught Kent Pitman LISP!) https://github.com/PDP-10/its/blob/master/src/games/doc.102 And here's what happened with he (manually by typing) hooked it up with Kenneth Colby's "PARRY" (the paranoid patient): https://www.maclisp.info/pitmanual/funnies.html >Parrying Programs >I didn't write the original ELIZA program, although my Lisp class was taught by Joseph Weizenbaum, who did. I later wrote a very elaborate program of similar kind, which I just called DOCTOR, in order to play with some of the ideas. >At some point, I noticed there was a program at Stanford called PARRY (the paranoid patient), by Kenneth Colby. I understand from Wikipedia's PARRY entry that Weizenbaum's ELIZA and PARRY were connected at one point, although I never saw that. I never linked PARRY with my DOCTOR directly, but I did once do it indirectly through a manual typist. Part of my record of this exchange was garbled, but this is a partial transcript, picking up in the middle. Mostly it just shows PARRY was a better patient than my DOCTOR program was a doctor. >I have done light editing to remove the typos we made (rubbed out characters were echoed back in square brackets). >Also, I couldn't find documentation to confirm this, but my belief has always been that the numeric values after each line are PARRY's level of Shame (SH), Anger (AN), Fear (FR), Disgust (DS), Insecurity (IN), and Joy (J).—KMP [...] ;;; Notes about CLI interrupts and eval-in-other-lisp: https://news.ycombinator.com/item?id=20267415 https://news.ycombinator.com/item?id=38061207 >Here's Kent Pittman's :TEACH;LISP from ITS, which is a MACLISP program that teaches you how to program in MACLISP. (That's "Man And Computer Lisp" from "Project MAC", not "Macintosh Lisp".)
In The Revival of Medley/Interlisp
Here's Kent Pittman's :TEACH;LISP from ITS, which is a MACLISP program that teaches you how to program in MACLISP. (That's "Man And Computer Lisp" from "Project MAC", not "Macintosh Lisp".) https://github.com/PDP-10/its/tree/master/src/teach https://en.wikipedia.org/wiki/Incompatible_Timesharing_Syste... https://en.wikipedia.org/wiki/Maclisp https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artif... Scheme or Lisp? Kent M Pitman explains the deep philosophical differences: https://www.reddit.com/r/programming/comments/6fa5r/scheme_o... https://groups.google.com/g/comp.lang.lisp/c/TEk4O4-zsA8/m/H... >You should definitely learn both if you can afford the time. They are not redundant with one another, in spite of their superficial syntactic similarity. >Others divide up this space differently than I, but for most purposes, I personally
Read the rest
regard them as distinct langauges, not mere dialectal variations, although plainly they are from what I would call the same language family. >You will probably prefer to use one or the other in the end, but they each have things to teach you. Even if you prefer to use neither, you will use the things you learn from these languages in your future thinking, becuase they will give you metaphors for thinking about things that other languages do not. This is like catnip for people interested in the sociological and cultural aspects of programming language design: Common Lisp: The Untold Story; Kent M. Pitman, HyperMeta Inc. https://www.nhplace.com/kent/Papers/cl-untold-story.html Here's a description of :TEACH;LISP that I posted to reddit 11 years ago: https://www.reddit.com/r/programming/comments/t4rre/comment/... >xardox 11 yr. ago >Kent Pitman's a great guy who's done a lot of pioneering work to teach people Lisp. >KMP wrote a Lisp program to teach MACLISP on the MIT AI Lab's ITS systems called ":TEACH;LISP", which I used to learn Lisp (but which Jerry Pournelle cited in a not-friendly light). >KMP kindly took the time to personally teach me some LISP, by challenging me to a dual! We both ran our own LISP processes, and loaded a function called EVAL-IN-OTHER-LISP that used "core link interrupts" to send s-expressions from one LISP to another, so we could evaluate code in each other's LISP. That made it easy for him to define and call functions in my LISP, which was quite fun, but then he set my numeric output base to roman numerals! He won that dual. Core Link Interrupts (ITS's interprocess communication mechanism, sending messages through actual core memory on a PDP-10): https://web.archive.org/web/20110904184550/http://www.avanth... How Jerry Pournelle got kicked off the ARPANET: http://www.art.net/~hopkins/Don/text/pourne-smut.html >From: Kent M Pitman <KMP at SCRC-STONY-BROOK.ARPA> >Subject: Pourne >Personally, I'd just turn off his account. It's not like it's the first time, and he not only flaunts his use of our machines but stabs us in the back with grumblings about why he doesn't like this or that program of ours when he gets a chance. (Am thinking particularly of an article he wrote which condemned Lisp for reasons amounting to little more than his ignorance, but which cited Teach-Lisp in a not-friendly light... The man has learned nothing from his presence on MC and sets a bad example of what people might potentially accomplish there. I'd rather recycle his account for some bright 12-yr-old...) Here's the source code to EVAL-IN-OTHER-LISP: https://www.maclisp.info/pitmanual/system.html The following is some sample code (complete with documentation) that I found in my notes and thought might be helpful: ;;; Notes about CLI interrupts: ;;; ;;; A CLI interrupt is what happens when another job sends to yours. It is ;;; normally the case that other jobs will send directly to a user's HACTRN. ;;; If, however, Lisp is interrupted by a CLI message, it can elect to handle ;;; handle the interrupt in an arbitrary way. ;;; ;;; To define a handler, two things must be done: ;;; [1] Place the name of the handler function (function of one arg) ;;; in the variable CLI-MESSAGE. ;;; [2] Enable CLI handling with (SSTATUS CLI T) ;;; ;;; The handler should take a single argument which it probably should ignore ;;; since I have no idea what it is likely to be. ;;; ;;; The handler should open the file "CLA:" in (CLA BLOCK) mode and immediately ;;; discard the first 8 characters which will be garbage. ;;; ;;; The remainder of the stream, until a control-C or an eof, will be the text ;;; of the message sent. It may be read with TYI, READ, etc. and handled ;;; however. (eval-when (eval compile) (cond ((not (get 'iota 'version)) (load "liblsp;iota")))) (defun handle-cli-msg (ignore) (iota ((stream '((cla)) '(cla block))) (do ((i 0 (1+ i))) ((= i 8)) (tyi stream)) (do ((c (tyi stream -1) (tyi stream -1))) ((or (= c -1) (= c 3))) (format t "~&~3,'0O ~@:C~%" c c)))) ;print out chars seen (setq cli-message 'handle-cli-msg) (sstatus cli t) ; -------- (defun eval-cli-msg (ignore) ;alternate handler (iota ((stream '((cla)) '(block cla))) (do ((i 0 (1+ i))) ((= i 8)) (tyi stream)) (do ((f (read stream nil) (read stream nil))) ((null f)) (errset (eval f) nil)))) ;Quietly evaluate forms... ;; Assumes the other lisp will have EVAL-CLI-MSG as value of CLI-MESSAGE (defun eval-in-other-lisp (uname jname s-expression) (iota ((stream `((cli) ,uname ,jname) '(out ascii block))) (print s-expression stream)))
In (learn 'scheme)
ITS didn't really have password control, one was technically added but IIRC it was a fig leaf on some requirement from outside MIT. The user accounts were there mostly to inform others who was logged on and who owned what process. You could login either using terminal through ARPAnet dial-in support, or later over network, and over time there was added a more concrete "tourist" policy. DonHopkins seems to have an interesting writeup https://donhopkins.medium.com/mit-ai-lab-tourist-policy-f73b... and of course there's PDP-10 org and its gather docs on github: https://github.com/PDP-10/its
In Research Unix Sixth Edition (WASM)
The comments in this old PDP-10 SUPDUP code [5] are hilarious! SUPDUP on ITS was so smart and opinionated, it had its own ideas about who was a loser and who was a winner, how to figure it out by checking INQUIR entries and relationships, and who it should never or always hassle about net-hopping (hopping through a PDP-10 over the net just to use it as a glorified terminal emulator). It never hassled gumby or cstacy (because they were free to do whatever they wanted to, like flushing whiny annoying over-entitled alcoholic science fiction writers [1] [2] [3] [4]), but always hassled rms (because it was usually an imposter logging in as rms with password rms just to net hop through the system.) [1] http://www.stormtiger.org/bob/humor/pournell/story.html [2] https://news.ycombinator.com/item?id=15206151 [3] https://news.ycombinator.com/item?
Read the rest
id=37723853 [4] https://news.ycombinator.com/item?id=37780515 [5] https://github.com/PDP-10/its/blob/master/src/sysnet/supdup.... subttl LSRCHK and LSRWRN -- see if user is loser ;;; This checks to see if the loser is an AI or LCS member or on a ;;; winners list. If not, a warning net-hopping message is printed ;;; and the program offers to kill itself off. ;;; The winner-p check has been extracted so that if at some point in ;;; the future this program is modified to check if it's running from ;;; a CRTSTY, those people may not be warned. ;;; If you mung this you might wish to mung CHTN similarly. ;;; skips unless the luser should be warned. lsrchk: pushj p,winchk ;are they a winner? skipa ;nope jrst popj1 ;yea; so skip ;; check to see if they're in loser table move t,[-loslen,,lostab] ;; winchk left xuname in tt lsloop: camn tt,(t) popj p, ;loser -> don't skip aobjn t,lsloop ;; check inquir entry movei a,filech move b,[-lsrpgs,,hstpag];map lsr where host table will be pushj p,lsrtns"lsrmap jrst lsrlos ;something wrong; print loser message .suset [.rxuname,,b] ;xuname into b pushj p,lsrtns"lsrunm ;find our entry in database jrst lsrlos ;no inquir entry; must be loser .close filech, ;close lsr file movei a,lsrtns"i$grp ;we want to check group pushj p,lsrtns"lsritm popj p, ;none means guest ildb a,a ;get field caie a,"A ; AI lab cain a,"L ; LCS jrst lsloo1 caie a,"V ; NIL group cain a,"Z ; Clinical Decision Making jrst lsloo1 caie a,"C ; Theory of Computation popj p, ;they're not a lab member lsloo1: movei a,lsrtns"i$rel ;Check relationship pushj p,lsrtns"lsritm popj p, ;none means loser ildb a,a ;get field caie a,"X ;some losers put AX when they mean XA ;; These names are for NETWRK popj1: aos (p) ;otherwise skip cpopj: popj p, ;when returning lsrlos: .close filech, ;close lsr file popj p, ;don't skip ;;; Skip means these people know what they're doing; don't hassle them winchk: .suset [.rxuname,,tt] move t,[-winlen,,wintab] wnloop: camn tt,(t) jrst popj1 ;winner; skip aobjn t,wnloop popj p, ;;; these people aren't hassled wintab: irp x,,[gumby,alan,cstacy,cent,devon,dph,oaf,mly,jtw,jnc,klotz,cbf,sra,ed,swa,map,jbvb] sixbit/x/ termin winlen==.-wintab ;;; These people are always hassled lostab: irp x,,[tk,hewitt,rms] sixbit/x/ termin loslen==.-lostab ;;; warn loser that net-hopping is a waste of the machine lsrwrn: movei tt,[asciz/ Using this machine to access another will needlessly drain resources, slowing the system both for you and other users. You'll probably get better response by connecting directly. You should not do this unless you have a good reason to do so. If you have any questions, typing :LUSER to DDT will request a system programmer to assist you. Are you sure you want to net-hop?/] pushj p,outstr $call iot,[#ttyich,a],[#%tinwt] ;Wait for character .lose %lssys caie a,"y cain a,"Y popj p, ;it was a Y caie a,40 ;maybe it was a space? .logout 1, popj p,
In "[31M"? ANSI Terminal security in 2023 and finding 10 CVEs
That's to match impedance with the display drawing and input handling code, which is written in reverse polish notation stack based PostScript, which is going back the forward side. psterm.ps: https://donhopkins.com/home/archive/NeWS/news-tape/applicati... tcap.cps: https://donhopkins.com/home/archive/NeWS/news-tape/applicati... sampl.user.ps: https://donhopkins.com/home/archive/NeWS/news-tape/applicati... UsingPSTerm: https://donhopkins.com/home/archive/NeWS/news-tape/applicati... It's still a much better more flexible approach than xterm, since it can emulate any terminal type, and even if the termcap entry is incorrect and not faithful to the actual terminal, it still works. In fact you can even make up a termcap entry with your own custom sets of fictional/virtual (but efficient) terminal escape sequences, or mix and match different t
Read the rest
erminals (like adding reverse and bold text, or line/char insert/delete, to a terminal type that doesn't support it), and it still works perfectly. https://donhopkins.com/home/archive/NeWS/news-tape/applicati... # This is a faster termcap for psterm, Warning: if you use this termcap # some control characters you type will do strange things to the screen # on systems that echo typed control characters to the users terminal. psterm-fast, am, km, hs, cols#80, lines#34, bel=^G, cr=\r, csr=^E%p1%d;%p2%d;, clear=\f, el=^C, ed=^B, cup=^D%p1%d;%p2%d;, cud1=^P, home=^R, cub1=^T, cuf1=^V, ll=^U, cuu1=^Y, dch1=^F, dl1=^K, blink=^Ob, bold=^Od, smcup=^Ot, smir=^Oi, rev=^Or, smso=^Oo, smul=^Ou, sgr0=^N*, rmcup=^Nt, rmir=^Ni, rmso=^No, rmul=^Nu, flash=^Z, fsl=^Nl, is1=^N*, il1=^A, kbs=\b, kcud1=\E[B, kcub1=\E[D, kcuf1=\E[C, kcuu1=\E[A, nel=\r\n, rs1=^N*, rc=^\, sc=^], ind=^W, ri=^X, ht=\t, tsl=^Ol, I don't understand why it's better to emulate only one fixed terminal type (especially the verbose anathema that's vt100), since you might encounter programs or operating systems that don't support vt100 or whatever you chose to emulate, don't respect termcap, and might use any other fixed set of escape sequences, which psterm can easily handle. Even if you encounter a program that requires a totally new terminal you've never seen, you can easily write a termcap entry for it, and psterm will emulate it without any changes. Why rewrite a bunch of other programs, or a bunch of other terminal emulators, when one terminal emulator can easily adapt to them all? In 1988 when psterm was written there were many different programs and operating systems and terminals like that, especially since terminals can talk to other operating systems than unix that don't support termcap, via telnet or serial ports and modems. It wasn't anything like the stagnant linux/xterm/vt100 monoculture we have today. And if you're going to standardize on one terminal, the vt100's one of the worst you could possibly chose! That's kind of the whole point of a terminal emulator: to emulate terminals, so the more the merrier! The idea of virtualizing terminal protocols has been around for a long time, like Marc Crispin's SUPDUP Display Protocol for ITS and Lisp Machines (RFC734 from 1977), and ITS's CRTSTY virtual terminal emulator (kind of like "screen" for translating virtual to actual terminal sequences for many terminal types, adapting dumb terminals without line/char insert/delete, supporting redisplay for low baud rates or congested ARPA connections, and keeping your session and jobs alive if you disconnect, so you can continue after you reconnect, even with a different terminal type, if you got kicked off a nice AAA and forced to use a shitty VT52). http://junk.nocrew.org/pipermail/its/1988-September/002005.h... https://github.com/PDP-10/its/blob/master/doc/sysdoc/itstty.... >This file describes just about all there is to know about using and programming TTYs (abbreviation for "Teletypes", for which read "consoles") on the ITS operating system. https://datatracker.ietf.org/doc/rfc734/ >NWG/RFC# 734 MRC 07-OCT-77 08:46 41953 SUPDUP Display Protocol Page 1 Network Working Group Mark Crispin Request for Comments 734 SU-AI NIC 41953 7 October 1977 >SUPDUP Protocol >This document describes the SUPDUP protocol, a highly efficient display telnet protocol. It originally started as a private protocol between the ITS systems at MIT to allow a user at any one of these systems to use one of the others as a display. At the current writing, SUPDUP user programs also exist for Data Disc and Datamedia displays at SU-AI and for Datamedias at SRI-KL. The author is not aware of any SUPDUP servers other than at the four MIT ITS sites. >The advantage of the SUPDUP protocol over an individual terminal's protocol is that SUPDUP defines a "virtual" or "software" display terminal that implements relevant cursor motion operations. The protocol is not built on any particular display terminal but rather on the set of functions common to all display terminals; hence it is completely device- independent. In addition, the protocol also provides for terminals which cannot handle certain operations, such as line or character insert/delete. In fact, it is more than this. It provides for terminals which are missing any set of features, all the way down to model 33 Teletypes. >The advantage over the TELNET protocol is that SUPDUP takes advantage of the full capabilities of display terminals, although it also has the ability to run printing terminals. https://its.victor.se/wiki/_media/ai_wp_235.pdf >The SUPDUP protocol [Crispin 77] is a highly efficient display telnet protocol. The advantage over the TELNET protocol is that SUPDUP takes advantage of the full capabilities of display terminals, although it also has the ability to run printing terminals. When you use the SUPDUP protocol, you do not need to tell the remote host which you are connecting to what type of terminal you have or what the terminal's capabilities are. The host you are SUPDUPing from handles the actual display support for your terminal. >Additionally, SUPDUP defines a network graphics protpcol [Stallman 78] which makes it easy for network hosts to draw pictures along in addition to text. I even wrote a SUPDUP emulator in FORTH and RPN 6502 assembly, which is about as backwards and upside-down as it gets -- this code also supports the SUPDUP line saving extensions that RMS hacked into ITS Emacs, so it can stash lines on the screen in local memory before overpainting them, then almost instantly pop them back on the screen later, so you can scroll back and forth through text really fast at 300 baud (plus Devon McCullough made ZipMod with Huffman encoding to make it even faster on top of that): https://donhopkins.com/home/archive/forth/supdup.f HEX CREATE SETUP-LINE ASSEMBLER BOT LDA, N STA, BOT 1+ LDA, N 1+ STA, BOT 2+ LDY, SCR-LBASES ,Y LDA, N 2+ STA, SCR-HBASES ,Y LDA, N 3 + STA, SCR-WIDTH 1- # LDY, RTS, At 300 baud over a congested ARPA connection, we had a lot of time to think about how to optimize terminal emulation while waiting for the screen to repaint... And just what's wrong with backwards and upside-down algorithms that solve problems in ways that forward and rightside-up algorithms can't? That's how Emacs's infamous screen redisplay algorithm (and many other common algorithms like pathfinding in games and route planning in cars) work: recursively flood filling forward then navigating backwards from the goal to the current position at the minimal cost, through a matrix or maze of different possible alternative escape sequences and drawing operations or roads with different costs, to find the optimal shortest possible route. At 300 baud or even 1200 baud, and even on a busy Vax 11/750, there's a lot of time between each character for Emacs to think about what text and escape sequences to send next. And of course Emacs's screen update algorithm would automatically take into account and use the short optimized custom control codes defined in the psterm-fast termcap entry, to be much more efficient that the verbose inefficient vt100 codes. Read the paper and display.c code I linked to, and see the wikipedia page on dynamic programming: >James Gosling's Emacs screen redisplay algorithm also used similar "dynamic programming techniques" to compute the minimal cost path through a cost matrix of string edit operations (the costs depended i.e. on the number of characters to draw, length of the escape codes to insert/delete lines/characters, padding for slow terminals, etc). https://en.wikipedia.org/wiki/Gosling_Emacs >Gosling Emacs was especially noteworthy because of the effective redisplay code, which used a dynamic programming technique to solve the classical string-to-string correction problem. The algorithm was quite sophisticated; that section of the source was headed by a skull-and-crossbones in ASCII art, warning any would-be improver that even if they thought they understood how the display code worked, they probably did not. https://donhopkins.com/home/archive/emacs/skull-and-crossbon... >Trivia: That "Skull and Crossbones" ASCII art is originally from Brian Reid's Scribe program, and is not copyrighted. https://donhopkins.com/home/archive/emacs/mw/display.c /* 1 2 3 4 .... Each Mij represents the minumum cost of +---+---+---+---+----- rearranging the first i lines to map onto 1 | | | | | the first j lines (the j direction +---+---+---+---+----- represents the desired contents of a line, 2 | | \| ^ | | i the current contents). The algorithm +---+---\-|-+---+----- used is a dynamic programming one, where 3 | | <-+Mij| | M[i,j] = min( M[i-1,j], +---+---+---+---+----- M[i,j-1]+redraw cost for j,2 4 | | | | | M[i-1,j-1]+the cost of +---+---+---+---+----- converting line i to line j); . | | | | | Line i can be converted to line j by either . just drawing j, or if they match, by moving . line i to line j (with insert/delete line) */ https://donhopkins.com/home/documents/EmacsRedisplayAlgorith... https://dl.acm.org/doi/10.1145/1159890.806463 >A redisplay algorithm, by James Gosling. >Abstract >This paper presents an algorithm for updating the image displayed on a conventional video terminal. It assumes that the terminal is capable of doing the usual insert/delete line and insert/delete character operations. It takes as input a description of the image currently on the screen and a description of the new image desired and produces a series of operations to do the desired transformation in a near-optimal manner. The algorithm is interesting because it applies results from the theoretical string-to-string correction problem (a generalization of the problem of finding a longest common subsequence), to a problem that is usually approached with crude ad-hoc techniques. [...] >6. Conclusion >The redisplay algorithm described in this paper is used in an Emacs-like editor for Unix and a structure editor. It's performance has been quite good: to redraw everything on the screen (when everything has changed) takes about 0.12 seconds CPU time on a VAX 11/780 running Unix. Using the standard file typing program, about 0.025 seconds of CPU time are needed to type one screenful of text. Emacs averages about 0.004 CPU seconds per keystroke (with one call on the redisplay per keystroke). >Although in the interests of efficency we have stripped down algorithm 5 to algorithm 6 the result is still an algorithm which has a firm theoretical basis and which is superior to the usual ad-hoc approach. https://en.wikipedia.org/wiki/Dynamic_programming >Dynamic programming >Figure 1. Finding the shortest path in a graph using optimal substructure; a straight line indicates a single edge; a wavy line indicates a shortest path between the two vertices it connects (among other paths, not shown, sharing the same two vertices); the bold line is the overall shortest path from start to goal. >Dynamic programming is both a mathematical optimization method and an algorithmic paradigm. The method was developed by Richard Bellman in the 1950s and has found applications in numerous fields, from aerospace engineering to economics. >In both contexts it refers to simplifying a complicated problem by breaking it down into simpler sub-problems in a recursive manner. While some decision problems cannot be taken apart this way, decisions that span several points in time do often break apart recursively. Likewise, in computer science, if a problem can be solved optimally by breaking it into sub-problems and then recursively finding the optimal solutions to the sub-problems, then it is said to have optimal substructure. >If sub-problems can be nested recursively inside larger problems, so that dynamic programming methods are applicable, then there is a relation between the value of the larger problem and the values of the sub-problems.[1] In the optimization literature this relationship is called the Bellman equation.
In "[31M"? ANSI Terminal security in 2023 and finding 10 CVEs
> I'm just saying that in 2023 even if your printer is open-source, ain't nobody got time to dive into hundreds of thousands of line of code to change it. I disagree. I disagree wholeheartedly, based on both practical projects and the retrocomputing world. For example: https://github.com/PDP-10/its/ This is a repo for the Incompatible Timesharing System operating system, ITS to its friends. ITS ran on 36-bit mainframe hardware from Digital Equipment Corporation (DEC) which went out of production in the 1980s. DEC was acquired by Compaq in 1998, and Compaq ceased to exist as a company in 2002. Commercially, ITS is dead. It is dead-dead. It is old-university-project-with-no-grants dead. Doornails evince more metabolic activity than ITS, at least in the commercial world. Developing on ITS means reading and writing assembly language, TECO, an
Read the rest
d a Lisp dialect that only runs on ITS and a few other OSes of similar vintage and commercial utility. However, it is still under active development because people are interested in it. Besides: Digging into a codebase to fix a dumbass printer? People will do that out of spite. People will do that for the blog post and Hacker News thread.
In Firefox tooltip bug fixed after 22 years
Here's the ITS TECO manual and primer that ChatGPT probably read: LIST OF TECO COMMANDS, TECO VERSION 1132. Last updated 5 August 1981: https://github.com/PDP-10/its/blob/master/doc/_teco_/tecord.... TECO PRIMER: AN ANNOTATED OUTLINE OF TECO COMMANDS: https://github.com/PDP-10/its/blob/master/doc/_teco_/teco.pr... TECO Info Manual: https://github.com/PDP-10/its/blob/master/doc/info/tecman.20 TECO Programming in Emacs Info Manual: https://github.com/PDP-10/its/blob/master/doc/info/conv.85 EMACS LORE: https://github.com/PDP-10/its/blob/master/doc/eak/emacs.lore Lots of TECO code in the ITS Emacs sources, like KMP's Doctor: https://github.com/PDP-10/its/tree/master/src/emacs1 https://github.com/PDP-10/its/blob/master/src/emacs1/doctor.... Prompt: Implement Fizz Buzz in TECO. ChatGPT: Fizz Buzz is a simple programming task often used in codin
Read the rest
g interviews. The task is to print the numbers from 1 to 100, but for multiples of 3 print "Fizz" instead of the number, and for multiples of 5 print "Buzz". For numbers which are multiples of both 3 and 5 print "FizzBuzz". Implementing Fizz Buzz in TECO would be quite a challenge due to the language's design and constraints. TECO is not really meant for such tasks, as it is a text editor and correction programming language. However, I'll provide a rough example of how you might implement FizzBuzz in TECO, although it's somewhat complex and involves a few workarounds: 0uz ! Store 0 in register Z (counter) ! <qz+1uz ! Increment Z ! qz:< ! Inner loop, executes while Z is less than or equal to 100 ! qz\3%<iFizz$> ! If Z is divisible by 3, insert "Fizz" ! qz\5%<iBuzz$> ! If Z is divisible by 5, insert "Buzz" ! qz\3%qz\5%"nqz\*A$' ! If Z is not divisible by 3 or 5, insert Z (as a character) ! ia ! Insert a newline ! >' ! End of inner loop ! > ! End of outer loop ! This is a very rough, and not perfect, implementation. It doesn't properly handle numbers over 9, because TECO doesn't really support integer arithmetic in the way modern languages do. When we print a number, we're actually printing a character with the corresponding ASCII code, so numbers over 9 would turn into non-digit characters. Implementing FizzBuzz properly would likely involve manually converting numbers to digit strings, which would make the program quite a bit more complex. In practice, you would rarely if ever use TECO for this sort of task. TECO was designed for editing text, not for general-purpose programming, and it lacks many of the features that make modern languages suitable for tasks like FizzBuzz. But, this does demonstrate some of the ways you can use TECO's unique features to solve problems.
In The Hacker's Dictionary
Here are two versions of the original jargon file from AI:HUMOR; free of ESR's pollution: AI:HUMOR;MITSAI JARGON (25.3 KB): https://github.com/PDP-10/its/blob/master/doc/humor/mitsai.j... AI:HUMOR;JARGON > (85.3 KB): https://github.com/PDP-10/its/blob/master/doc/humor/jargon.6... Also NASA jargon: https://github.com/PDP-10/its/blob/master/doc/humor/nasa.jar... Alice's PDP-10 is also a classic: https://github.com/PDP-10/its/blob/master/doc/humor/alices.p... There was all kinds of mean nasty ugly people there on the bench... Chaosnet designers... Lisp hackers... TECO hackers. TECO hackers right there on the bench with me! And the meanest one of them, the hairiest TECO hacker of them all was coming over to me. And he was mean and nasty and horrible and undocumented and all kinds of stuff. And he sat down next to me
Read the rest
and said: [1:i\*^Yu14<q1&377.f"nir'q1/400.u1>^[[8 .-z(1702117120m81869946983m8w660873337m8w1466458484m8 )+z,.f^@fx\*[0:ft^]0^[w^\ And I said "I didn't get nothing, I had to rebuild the bittable in queue six" and he said: [1:i\*^Yu16<q1&77.+32iq1f"l#-1/100.#-1&7777777777.'"#/100.'u1r>6c^[[6 .(675041640067.m6w416300715765.m6w004445675045.m6 455445440046.m6w576200535144.m6w370000000000.m6),.fx\*[0:ft^]0^[w^\
In The Hacker's Dictionary
Here is the source code to LLogo in MACLISP, which I stashed from the MIT-AI ITS system. It's a fascinating historical document, 12,480 lines of beautiful practical lisp code, defining where the rubber meets the road, with drivers for hardware like pots, plotters, robotic turtles, TV turtles, graphical displays, XGP laser printers, music devices, and lots of other interesting code and comments. https://www.donhopkins.com/home/code/llogo.lisp.txt When I was 17, Terrapin published my first commercial code on their C64 Logo utilities disk: a Logo Adventure program, a simple non-graphical game that showed off Logo’s list processing and functional programming capabilities. https://donhopkins.medium.com/logo-adventure-for-c64-terrapi... Lars Brinkhoff got some of this code to run in MacLisp on an emulator! (I don't know how much of the historic
Read the rest
al hardware the emulator supports yet, but he's probably worked on some of that too. ;) ) https://github.com/PDP-10/its/issues/620 Thanks to Lars, here are two revisions of an AI Lab memo about LLOGO: http://bitsavers.org/pdf/mit/ai/aim/AIM-307.pdf http://bitsavers.org/pdf/mit/ai/aim/AIM-307a.pdf And a Logo manual and glossary of PDP-11 Logo: http://bitsavers.org/pdf/mit/ai/aim/AIM-313.pdf http://bitsavers.org/pdf/mit/ai/aim/AIM-315.pdf http://bitsavers.org/pdf/mit/ai/aim/AIM-315a.pdf
In LOGO Manual (1974) [pdf]

Showing the 15 most recent of 19 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.