JOSS

JOSS
Paradigmsnon-structured, procedural, imperative
FamilyJOSS
Designed byCliff Shaw
DeveloperRAND Corporation
First appeared1963; 61 years ago (1963)
ScopeLexical
Implementation languageassembly language
PlatformJOHNNIAC, PDP-6
Influenced
TELCOMP, CAL, FOCAL, MUMPS
Part of a JOSS session at RAND in 1970 in which the user carries several simple calculations in direct mode. Note the difference between the period at the end of the statements and the interpunct for multiplication.

JOSS (acronym for JOHNNIAC Open Shop System)[a] was one of the first interactive, time-sharing programming languages. It pioneered many features that would become common in languages from the 1960s into the 1980s, including use of line numbers as both editing instructions and targets for branches, statements predicated by Boolean decisions, and a built-in source-code editor that can perform instructions in direct or immediate mode, what they termed a conversational user interface.

JOSS was initially implemented on the JOHNNIAC machine at RAND Corporation and put online in 1963. It proved very popular, and the users quickly bogged the machine down. By 1964, a replacement was sought with higher performance. JOHNNIAC was retired in 1966 and replaced by a PDP-6, which ultimately grew to support hundreds of computer terminals based on the IBM Selectric. The terminals used green ink for user input and black for the computer's response. Any command that was not understood elicited the response Eh?.

The system was highly influential, spawning a variety of ports and offshoots. Some remained similar to the original, like TELCOMP and STRINGCOMP, CAL, CITRAN, ISIS, PIL/I, JEAN (ICT 1900 series), BOSS and INTERP on the Burroughs B5500, Algebraic Interpretive Dialogue (AID, on PDP-10). Others, such as FOCAL and MUMPS, developed in distinctive directions. JOSS also bears a strong resemblance to the BASIC interpreters found on microcomputers in the 1980s, differing mainly in syntax details.

History

Initial idea

In 1959, Willis Ware wrote a RAND memo on the topic of computing in which he stated future computers would have "a multiplicity of personal input-output stations, so that many people can interact with the machine at the same time."[2] The memo gained the interest of the US Air Force, Rand's primary sponsors, and in 1960, they formed the Information Processor Project to explore this concept, what would soon be known as time-sharing. The project was not specifically about time-sharing, but aimed to improve human-computer interaction overall. The idea at the time was that constant interaction between the user and the computer in a back-and-forth manner would make such interactions more natural.[2] As JOSS director Keith Uncapher later put it:

There were two perceptions that I think drove the experiment. One was, from at least 1950, when I joined Rand, there was always a focus in the computer science part of Rand toward smooth user interaction. It was just built into us. We learned it from Gunning. ... all we thought about. The other was, seeing the mathematicians struggling with Marchant calculators, not being able to use JOHNNIAC in its raw form. It was just too hard. They had to learn to be programmers. It was just a frustrating experience for them. We wanted something that would look to them as being a natural way of thinking about an aid to the solution of their problems without very much training, and without any perception of becoming a programmer, because that would have kept them away.[3]

A formal proposal to develop what became JOSS on the JOHNNIAC computer was accepted in March 1961.[2]

JOSS-1

JOSS was implemented almost entirely by J. Clifford Shaw, a mathematician who worked in Rand's growing computing division. It was written in a symbolic assembly language called EasyFox (E and F in the US military's then phonetic alphabet), also developed by Shaw.[4]

The JOSS system was brought up formally for the first time in May 1963, supporting five consoles, one in the machine room and another four in offices around the building.[5] The early consoles were based in the IBM Model 868 Transmitting Typewriter, as the Selectric had not yet been introduced to market when development began.[6] The first schedule was published on 17 June, with JOSS running for three hours from 9am to 12 every day.[7] It was declared fully operational on eight terminals in January 1964.[1] The final version was deployed in January 1965.[8]

By this time the JOHNNIAC was already over a decade old, and its tube-based logic was never highly reliable to begin with. Even when it was working well, the system became so popular it quickly bogged down. Users were enthusiastic, one stated:

People adjust their lives to fit around JOSS… No use coming into RAND before 10:00 am when JOSS arrives, in fact noon or after 5:00 pm is a better time, JOSS is less busy. When JOSS starts typing answers, the titillating pleasure is equaled only by the ensuing anguish when JOSS breaks off into jibberish [sic] or goes away commending your code to oblivion. We can hardly live with JOSS, but we can’t live without it.[9]

Another put it more succinctly:

It's better than beer — we're hooked.[1]

JOSS-2 switchover

In May 1964, the decision was made to look for a new machine to replace the JOHNNIAC and dedicate it entirely to running an expanded version of JOSS. The machine would also have to support new terminals made to Rand's specifications, and be delivered by 31 October 1965.[7]

A total of nine bids were received for the new machine. Digital Equipment Corporation (DEC) won the contest with their new PDP-6 system, and Air Force funding was released for the purchase. DEC also agreed to build thirty terminals based on the IBM Selectric typewriter modified with a special mechanism to advance to the next page in a fan-fold paper feed. Several other portions of the overall system were delivered from other companies.[10]

The PDP-6 arrived in late July 1965, and was initially tested using Teletype Model 33's as terminals. The new version of the code was developed by Charles L. Baker, Joseph W. Smith, Irwin D. Greenwald, and G. Edward Bryan. The system was first declared operational in October, although this included six hours of scheduled maintenance per week.[11] The first prototype terminal arrived in November. In December, a terminal in Las Vegas was connected to the machine remotely for the first time.[10] In February 1966, this was sent to McClellan Air Force Base, followed by one in August to the Air Force Academy and two in September to ARPA and an Air Force office in the Pentagon. The first permanent offsite teletype connection for a Teletype Model 35 was installed at the Langley Air Force Base in February 1967.[11]

With the new machine up and running, JOHNNIAC was taken offline on 11 February 1966, and officially retired on 18 February. Its last running program was written in JOSS and counted down seconds until it would be turned off. The machine was sent to the Los Angeles County Museum,[12] and eventually ended up at the Computer History Museum outside San Francisco.[13] Having been replaced by the JOSS-2 system, the original was retroactively known as JOSS-1.[14]

JOSS-2 use

By the end of 1966 the new JOSS-2 system was fully functional and turned over to JOSS use 24/7. The new machine offered about 30 times the computational speed, five times the storage space per user, and many new features in the language itself.[15][1] The new platform could ultimately support up to 100 terminals in simultaneous use.[16] The Air Force remained the owner of the system, with Rand and others operating as consultants. CPU time was billed out to external users at a rate of about $1 per minute, although that was only during the actual execution; time spent typing and printing was free.[17]

By 1970, there were between 500 and 600 users at Rand and various Air Force sites across the country.[18] Many of these were occasional users, precisely what the system had been intended for. To support them, the custom terminals were equipped with special "JOSS plugs" so they could be wheeled from office to office and plugged into custom outlets. Two-hundred of the plugs were installed around Rand, and the terminal chassis was designed to be narrow enough to fit through doors while still leaving room for a coffee on one side.[19] Toggling the power switch on the terminal caused it to connect at the new location.[16]

The custom terminals had been designed for JOSS as the engineers felt that the Model 33's "telecommunications functions are a mystery to the untrained person" and would be too confusing for the occasional users to bother learning.[20] In practice, the Selectric-based mechanisms proved too fragile for the constant use they saw and were frequently being repaired in the field by IBM servicemen. In 1970, a full third of the terminals were completely rebuilt, and the output from the computer slowed to improve reliability. The Air Force, by this time, had decided to use the Model 35 instead, as it was both readily available and much less expensive.[21][11]

Uses were enthusiastic and to serve them, Rand began publishing The JOSS Newsletter, edited by Shirley Marks. Ultimately 44 issues were published between November 1967 and June 1971.[22]

JOSS-3

In the early 1970s, programmers at one of IBM's west coast facilities built a JOSS-3 for the IBM 370/158 running OS/360. Little information about this system exists, with the exception that it was on this machine that JOSS finally retired.[23] According to a note in a historical overview, Rand was hesitant to allow IBM to use the JOSS name, and as a result "the IBM version was never widely used."[24]

Implementation

JOSS used a custom type ball, similar to this example, for its IBM Selectric typewriter terminals to provide mathematical symbols.

JOSS-II on the PDP-6 was divided into two parts, matching the internal memory layout of the machine. The machine was equipped with two banks of core memory, with 16k 36-bit words in each bank. The JOSS system itself, which included the operating system, user and file management code, terminal handler and the interpreter, used up much of the first of these banks. The second bank was used for user programs. Although this was a relatively large amount of memory for the era, the system was so heavily used that the 16k word user store was not enough, and it was backed up with a magnetic drum for paging support.[16] The drum was driven by external hardware and did not require attention from the main processor.[25]

In order to support multiple user programs, the PDP-6 hardware was modified to examine bit-20 of any address reference. If this bit was set, the address was in "user space" and was modified so that address zero pointed to the base address of that user. In this way, user programs could be moved about in memory without causing problems for the system, and the operating system could switch from user to user simply by changing a single internal register.[16]

Permanent storage was provided by a Storage Products hard drive with 5.7 million words of storage. Like the drum, the actual input/output to and from the drum was handled externally, although in this case the movement was triggered by user actions to load and store their programs. An IBM-compatible tape drive was used to move data to and from the drive as needed, an operation that was also independent of the CPU. Two DECtape units were also available and worked in the same fashion as the IBM drive.[26] Demonstration programs were available, such as a mortgage calculator and early mainframe games.[27] Because large programs caused paging that slowed the computer for all, The JOSS Newsletter often asked users to use less storage.[28]

Terminals were handled through a custom "concentrator" that consisted of a mechanical Strowger switch that could connect any of the 300 to 400 possible terminal plugs to any of 40 outputs. A further eight lines were dedicated to Teletype Model 33 inputs, as opposed to the JOSS-style Selectrics. Those 48 lines were then connected to an electronic multiplexer connected to the CPU. The multiplexer was interrupt driven, meaning idle terminals did not use up any cycles.[26]

The custom JOSS terminals were built by DEC. These consisted of a Selectric mechanism built into a custom chassis containing the communications system, power supply, and other components. A custom font ball was used to provide basic mathematical symbols like ≠ so two-character combinations like <> did not have to be used. The communications system was based on a 6-bit character code in an 8-bit packet with start and stop bits. The lines were driven at 120 bit/s to match the maximum 15 character per second speed of the Selectric mechanism. Shift-in and shift-out codes were used to move the ribbon from green to black and back. These codes were also noticed by the communications system and changed lights on the front panel to indicate whether the computer or user had control of the terminal at that moment.[29]

Language

JOSS so emphasized user-friendliness that "JOSS-like" became a descriptor of a new user interacting with a time-sharing system. Children and others said that unlike a "complicated" computer, JOSS was "friendly" and "kind" like "a real person with a sense of humor", with funny responses like Eh?.[30]

Direct and indirect mode

JOSS introduced the idea of a single command line editor that worked both as an interactive language and a program editor. Commands that were typed without a line number were executed immediately, in what JOSS referred to as "direct mode". If the same line was prefixed with a line number, it was instead copied into the program code storage area, which JOSS called "indirect mode". New lines were added to the program if the line number was unique, replaced extant lines with the same number, or removed from the program if an extant line number was typed in with no code following it.[31]

In contrast to most BASICs, JOSS saved the entire user input to files, not just the program code. When loaded, JOSS essentially typed the lines back in. This meant that program files could contain both program statements and direct mode instructions. For instance, it was common to see programs that listed the statement lines and then have the file end with Go. to immediately run the program as soon as it completed loading. There were some features that could only be used in direct mode, like Let and Form, which were input without line numbers but still returned when the program was loaded.[32]

Direct and indirect instructions could be mixed freely in a workspace. This allowed comments to be inserted in source code by adding direct-mode lines beginning with *,[33] or by placing one at the end of a line of code and then adding a comment after it. Blank lines were also ignored, allowing the program to be broken up for clarity.[34]

Program statements

Every line in a JOSS program must start with a line number. Line numbers are fixed-point numbers consisting of two two-digit integers separated by a period. As in BASIC, line numbers are used both as labels to target from To and Do statements, and to support editing. Entering a line of code with a new line number inserts it into a program, while entering one with an extant line number replaces the prior version or deletes it if it is empty.

The portion of the line number to the left of the period is termed the page or part, while the portion to the right is termed the line. Thus the line number 10.12 refers to page 10, line 12. Branches can target either a page, or a line within a page. When the later format is used, the combined page and line is termed a step.

Pages are used to define subroutines, which return when the next line is on a different page. For instance, if a subroutine for calculating the square root of a number is in page 3, one might have three lines of code 3.1, 3.2 and 3.3, and it would be called using Do part 3. The code would return to the statement after the Do when it reaches the next line on a different page, for instance, 4.1. No need exists for the equivalent of a RETURN at the end, although if an early return is required, Done accomplishes this.

Every line must start with a command keyword following the line number. No concept of a default command exists as is the case in BASIC with its optional LET statement. Multiple statements can be placed on one line, separated by colons or semicolons. Every line must end with a period.

Loops and conditions

JOSS uses a suffix notation to indicate conditional evaluation, "do this if this is true", in contrast to most languages which place the condition in front in prefix notation, "if this is true, do this". Unlike FORTRAN or FOCAL, any statement can be conditionally evaluated in this fashion. For example, to print a string only if a condition is met, one can combine the if with a Type:

1.1 Type "Hello, World!" if X=5.

JOSS supported six infix comparisons, =, , , , >, <, and Boolean operators or, and, and not.[35]

Loops were handled in a similar fashion, using the For command and a somewhat obscure format for specifying the loop bounds and step value, start(step)end. For instance, to step from 1 to 10 by 2, the format is 1(2)10. Like If, For could be applied to any other statement:

1.2 Type "Hello, Wikipedia!" for i=1(2)10.

Note that the for applies only to a single statement; if one wants to run multiple statements in a loop, they would be separated to another part and called using do:

1.3 Do part 5 for i=1(1)100.
5.1 Type "Hello, Wikipedia!".
5.2 Type "This is JOSS.".

As in BASIC, any of the inputs to the for loop could be constants, variables or other expressions.

As these sorts of ranges could be applied to any line of code, it was possible to define limits and loops when the program was invoked. For instance, consider the program:

1.1 Type X.

Normally if one invoked this in a fashion similar to BASIC's RUN:

Do part 1.

It would produce:

0

However, one can modify this behaviour by adding a loop construct to the invocation:

Do part 1 for X = 1(1)5.

Which would produce:

1
2
3
4
5

This allows formulas to be constructed in programs without having to be placed within loops. Looping, if desired, can be provided by the user when they start the program.

Expressions and propositions

A unique feature of JOSS was its handling of logical expressions. Most computer languages offer some way to form a multi-part mathematical expression, for instance, Set x=(1+2)·3. which sets the variable x to the value 9. JOSS expanded on this concept by clearly defining the concept of the "proposition", an expression that returns a logical value, true or false, instead of a numeric one. They were mostly seen in If statements, as in the examples above, but the Boolean value could also be stored in a variable directly,[36] or one could convert true to 1 and false to 0 using the tv (truth value) function.[37]

In addition to propositions, JOSS also had the concept of "conditional expressions". These consisted of strings of propositions along with code that would run if that proposition was true. This allowed multi-step decision trees to be written in a single line. They serve a purpose similar to the ternary operator found in modern languages like C or Java, where they are used to return a value from a compact structure implementing if-then-else. JOSS' version has any number of conditionals, not just three, so it is more of a compact switch statement than a compact if-then.[38]

This example recreates the function of the sgn function:[39]

Let s(x)=[x=0:0; x>0:1; x<0:-1].

This defines a function "s" which takes a single parameter, "x", and makes three consecutive tests against it. Whichever test succeeds first returns the corresponding value after the colon.[40]

Ranges

Another advanced feature of JOSS was that it had the concept of a range as a built-in type that could be stored and manipulated. Ranges are normally found as the inputs to for loops, where they are part of the syntax of the loop itself. For instance, in BASIC one writes a for loop using this basic syntax:

FOR I=1 TO 5 STEP 2

This will perform a loop that assigns I the values 1, 3, 5 and then exits.

JOSS used a somewhat obscure format to define the limits of the loop. The equivalent code in JOSS would be:

 I=1(2)5

Note that this code does not include a for. That is because in JOSS, ranges are first-class citizens of the language, not something that is part of a loop as in BASIC. Ranges can be defined and used in many contexts outside loops. For example, here is a conditional expression that evaluates the factorial of a parameter x:[38]

Let f(x)=[x=0:1 ; fp(x)=0:prod(i=1(1)x:i)].

In this example, there are two main propositions, separated by the semicolon. The first, on the left, states that if the parameter x is 0, the condition should immediately return 1. If that proposition fails, it moves to the second test, on the right. This one checks if the fractional part of x is zero (i.e., it is an integer), and if so, it calls the prod function to multiply a range of values. The prod's parameter is also a proposition, but in this case, the test is replaced by a loop iterator that runs from 1 to x stepping by 1. If that proposition is true, which is it for all values of the loop, it returns the index i. This causes a series of values to be sent into prod from 1 to x.[38]

The combination of these features allows for complex functions to be written in a few commands. This sort of functionality has only become common in much more modern languages, which typically use iterators or a map function to provide the same outcomes. JOSS's capability to combine decisions and loops in a compact form is unknown in other languages of the era, including offshoots like FOCAL.

Commands

Set

The Set command assigns the results of an expression to the specified variable. Equivalent to BASIC's LET.

01.30 Set p=3.14156.
01.60 Set i=l*(r/100)*t.

Set was optional when used in direct mode, where one could type x=5. without the Set command. This was not allowed in indirect mode, in contrast to BASIC.[41]

Let

Let was used to define user-defined functions.[42] Equivalent to BASIC's DEF FN.[33]

Let t(x)=sin(x)/cos(x).
Set j=t(1.1).
Type j.

Let can also be used to set the value of a variable using a formula consisting of a constant:

Let x=5.

From that point, it can be used identically to one created using Set. There is a subtle difference, however, when this X is referenced in code, the value will be calculated by evaluating the right-hand side. A Set is only evaluated once, so it is much faster.[43]

The system generally suggested using Let only in direct mode, saving them out for use in a program by inserting them at the top or bottom of the file. This avoided the Let being called multiple times during execution, as it would only be called once during the loading process.[44]

Demand

The Demand takes a list of variables and stores the user input in variables. The optional as qualifier added a custom prompt. Equivalent to BASIC's INPUT.

01.01 Type "What is your age?".
01.02 Demand A.
01.03 Type "You are", A.
01.04 Demand H as "What is your height?".
01.05 Type H,"? That tall?".

Type

The Type command outputs one or more items separated by commas. In its basic form it is equivalent to BASIC's PRINT. However, Type includes a number of optional forms that make it highly overloaded, performing a range of unrelated output tasks.[45]

When used to print values, the parameters can be variables, literal strings surrounded by double-quotes, and the special _ character that produces a line feed.[46] Type also supports formatted output using format strings. See the section on Form below for details.[45]

Type is also used as the equivalent to BASIC's LIST statement, writing out the program. For instance, Type step 1.1. will print out a single line of code, while Type part 1. will print out the entire part, and Type all. prints out the entire program.[45]

Further, it can also be used to print lists of internal values. Type all values. produces a list of all variables and their values, while Type size. prints out the program size. Keywords include size, time and users.[45]

Page

Page triggers a page feed on the special JOSS terminals.[36] JOSS would normally send a page feed when the terminal reached line 54 on the paper, so if one wanted to ensure a block of data would not be split in half, one could:[47]

1.10 Page if $>44.

$ is a pseudo-variable that returns the current line number.[47]

Line

Line triggers a line feed on the special JOSS terminals.[36]

To

The To command jumps program execution to the specified part or step number, using To part 1. or To step 1.1. respectively.[48] It is the equivalent of BASIC's GOTO. Contrast with Go, an indirect command used from the command line that starts programs, the equivalent of BASIC's RUN.

01.01 Demand A as "TYPE A NUMBER".
01.05 To step 1.01.
01.10 To part 1.

Do

Do is similar to To, but branches to a subroutine. As with To, you can Do part or Do step. If a step is provided, that single line is run and then returns to the statement after the Do. If a part is provided, execution starts at the first line of the block and continues until the end of the block is reached or a Done statement is encountered.

01.15 Do step 7.24.
01.16 Do part 8.

Do had one special short form for looking in keeping with it being very common in most programs. This used the times modifier instead of a normal for, in the case for simple loops. So the following lines are equivalent:[45]

Do part 1 for i=1(1)5.
Do part 1, 5 times.

JOSS maintains a pointer to the currently executing line, which a Do would change. However, it included a special "parenthetic do" that could be used in direct mode to test certain sections of the code without changing the main pointer. For instance, if the program stopped due to an error and it was not clear which section caused the problem, one might test a particular subroutine with:[49]

 (Do part 2.)

Done

The Done command returns from a subroutine call. As subroutines return automatically when the end of the part is reached, Done is only required for returning early, and is often used with a conditional. Equivalent to BASIC's RETURN.

*Routine to ask the user for a positive value and repeat until it gets one
01.10 Demand X as "Enter a positive value greater than zero".
01.20 Done if X>0.
01.30 To step 1.1

Stop

The Stop command terminates execution of the program and returns control to the editing environment. Equivalent to BASIC's END or STOP, although BASIC's STOP is intended to allow CONT to pick up execution at the same location, a feature that has no direct equivalent in JOSS's workspace-oriented system.

01.10 Type X.
01.20 Stop.

Go

Available in direct mode only, Go is the equivalent to BASIC's RUN and CONT, depending on whether a program is currently stopped due to an error or Stop command being encountered.[50]

Cancel

Another direct-mode-only command, Cancel is used when the program has stopped for an error and the user wants to reset the program, which it does by clearing the program counter. A Go would pick up at the last location, but issuing a Cancel makes Go start at the top again.[51] If the current breakpoint was due to a parenthetical (Do.), one can issue a parenthetical cancel, (Cancel.), to stop just that sub-execution and allow a Go to continue at the last non-parenthetical line.[49]

Math

JOSS stored all numbers as radix-10 floating point.[52]

JOSS contained six mathematical operators:[52]

  • + for addition
  • - for subtraction
  • · for multiplication (the interpunct, not period)
  • / for division
  • * for exponents
  • |...| for absolute value, with an expression in the middle

Mathematical expressions could use () and [] interchangeably in matched pairs to establish precedence. For instance:

  1.30 Set A=|-10·[5+1]·(1+5)|.

Would produce 360.[35]

Functions

The language contained the following built-in functions:

Math

  • sin() - Sine of an angle given in radians
  • cos() - Cosine
  • arg() - Takes X and Y values of a point and returns the angle between that point and the x-axis
  • log() - Naperian log
  • exp() - Natural base to the power of the argument
  • sqrt() - Square root
  • sgn() - Sign of the argument, 0 returns 0, -ve values -1, +ve +1
  • ip() - Integer part of the argument, ip(22026.4658) returns 22026
  • fp() - Fractional part, returns .4658
  • dp() - Digit part, returns 2.20264658
  • ep() - Exponent part, returns 4, the location of the decimal

Boolean

  • tv() - Truth value, returns 1 if the expression is true, 0 otherwise

Looping functions

JOSS also defined a number of functions that performed looping internally, in order to avoid the programmer having to write a For loop to perform simple tasks like summing a series of numbers. The parameters could be either a list of simple expressions separated by commas, or a range construct whose command could be any statement or function call.

  • max() - Maximum value of the provided expressions
  • min() - Minimum
  • sum() - Sum
  • prod() - Product
  • first() - First item in the list that matches a condition, returns that result

File management

The JOSS system used a hard disk to store user programs in an allocated space. Within that space were a number of files that were referred to using a multi-part filename consisting of an integer and a five-letter name in parentheses, for instance, 123 (hello). The integer part is the equivalent of a directory, and the name is the sub-file within it, maintained by JOSS itself.[53]

Files are written with File all as item filename. and loaded with Recall item filename.. One could also read or save only certain parts of the workspace, for instance File part 1 as item filename. to save a single routine to a file.[54] Additionally, one could set a default file to which all references were assumed with Use item filename. Files could be deleted with Discard.[54]

Sample program

1.1 Demand p,q.
1.2 Stop if q<0 or r(q,2)=0.
1.3 Set a=1.
1.4 Do part 2 while q>1 and a≠0.
1.5 Type a in form 3.
1.6 Stop.

2.1  Do part 20.
2.1  Do part 11 if p<0.
2.2  Do part 12 if p≥q.
2.3  Do part 13 if p=0.
2.4  Done if a=0.
2.5  Set p=p/4 while r(p,4)=0.
2.6  Do part 14 if r(p,2)=0.
2.7  Do part 20.
2.8  Set a=-a if r(p,4)=r(q,4)=3.
2.9  Set s=p, p=q, q=s.
2.95 Do part 20.

11.1 Set a=-a if r(q,4)=3.
11.2 Set p=|p|.
11.3 Do part 20.

12.1 Set p=r(p,q).
12.2 Do part 20.

13.1 Set a=0, p=1, q=1.

14.1 Set a=-a if r(q,8)=3 or r(q,8)=5.
14.2 Set p=p/2.

20.1 Type p, q in form 1 if a=1.
20.2 Type p, q in form 2 if a=-1.

Form 1: "  L(%.0f,%.0f)  ="
Form 2: "  -L(%.0f,%.0f)  ="
Form 3: "  %.0f\n"

Note that this is not an original sample, but rather one from a modern simulator. There are some syntactic differences from the original JOSS language.

Notes

  1. ^ When it moved off JOHNNIAC, it was suggested the acronym be changed to "JOSS Open Shop System", making it an early example of a recursive name.[1]

References

Citations

  1. ^ a b c d Bryan 1966, p. 2.
  2. ^ a b c Marks 1971, p. 1.
  3. ^ Norberg, Arthur (10 July 1989). "An Interview with Keith Uncapher" (PDF) (Interview). p. 7.
  4. ^ Ware 2008, p. 62.
  5. ^ Marks 1971, p. iii.
  6. ^ Shaw 1965, p. 3.
  7. ^ a b Marks 1971, p. 2.
  8. ^ Smith, JW (August 1967). JOSS: Central Processing Routines (reference user guide). RAND. RM 5270 PR. Retrieved 2012-04-16.
  9. ^ Shaw 1965, p. 14.
  10. ^ a b Marks 1971, p. 3.
  11. ^ a b c Marks 1971, p. 9.
  12. ^ Marks 1971, p. 4.
  13. ^ "JOHNNIAC". Computer History Museum.
  14. ^ Ware 2008, p. 15, 109.
  15. ^ Marks 1971, p. 5.
  16. ^ a b c d Bryan 1966, p. 3.
  17. ^ Marks 1971, p. 32.
  18. ^ Marks 1971, p. 10.
  19. ^ Marks 1971, p. 15.
  20. ^ Marks 1971, p. 14.
  21. ^ Bryan 1966, p. 12.
  22. ^ Marks 1971, p. 47.
  23. ^ Ware 2008, p. 65.
  24. ^ Ware 2008, p. 16.
  25. ^ Bryan 1966, p. 4.
  26. ^ a b Bryan 1966, p. 5.
  27. ^ Marks 1971, p. 26.
  28. ^ Marks 1971, pp. 32–33.
  29. ^ Bryan 1966, p. 6.
  30. ^ Marks 1971, pp. 35–36, 43.
  31. ^ Gimble 1967, p. v.
  32. ^ Gimble 1967, p. vi.
  33. ^ a b Gimble 1967, p. 65.
  34. ^ Marks 1971, p. 42.
  35. ^ a b Gimble 1967, p. 70.
  36. ^ a b c Gimble 1967, p. 77.
  37. ^ Gimble 1967, p. 24, 69.
  38. ^ a b c Gimble 1967, p. 75.
  39. ^ Marks 1971, p. 41.
  40. ^ Gimble 1967, p. 25.
  41. ^ Gimble 1967, p. 68.
  42. ^ Gimble 1967, p. 74-75.
  43. ^ Gimble 1967, p. 45.
  44. ^ Gimble 1967, p. 63.
  45. ^ a b c d e Gimble 1967, p. 66.
  46. ^ Gimble 1967, p. 7.
  47. ^ a b Gimble 1967, p. 49.
  48. ^ Gimble 1967, p. 67.
  49. ^ a b Gimble 1967, p. 58.
  50. ^ Gimble 1967, p. 57.
  51. ^ Gimble 1967, p. 53.
  52. ^ a b Gimble 1967, p. 69.
  53. ^ Gimble 1967, p. 59.
  54. ^ a b Gimble 1967, p. 61.

Sources

Further reading

Read other articles:

Artikel ini membutuhkan rujukan tambahan agar kualitasnya dapat dipastikan. Mohon bantu kami mengembangkan artikel ini dengan cara menambahkan rujukan ke sumber tepercaya. Pernyataan tak bersumber bisa saja dipertentangkan dan dihapus.Cari sumber: Kalamit – berita · surat kabar · buku · cendekiawan · JSTOR (Juli 2022) Kalamit (Calamites) adalah genus dari paku ekor kuda yang secara fisik mirip pohon yang punah, dimana paku ekor kuda modern (genus Equis...

 

 

Penegak Laksana adalah tingkatan Syarat-syarat Kecakapan Umum kedua dalam satuan Pramuka Penegak setelah Penegak Bantara. Golongan Pramuka Penegak yang telah menyelesaikan Syarat-syarat Kecakapan Umum (SKU) Penegak Laksana dapat mengikuti SKU Pramuka Garuda. Syarat-syarat yang harus dipenuhi Untuk mencapai tingkat Penegak Laksana, seorang Pramuka Penegak Bantara harus memenuhi syarat-syarat sebagai berikut: Dapat menerima kritik dari orang lain, serta berani mengeluarkan pendapatnya dengan t...

 

 

Sanskrit scholar and Bengali writerMadanmohan TarkalankarBorn(1817-01-03)January 3, 1817Bilwagram, Nakashipara, Bethuadahari, Nadia district, Bengal presidency, British India (now West Bengal, India)[1][2]Died9 March 1858 (1858-03-10) (aged 41)Kolkata, Bengal Presidency, British India(now West Bengal, India)MonumentsAsannagar Madan Mohan Tarkalankar College,[3] Post Graduate in Sanskrit Department of Krishnanath CollegeOther namesMadan Mohan TarkalankarE...

Neelakanta DirectorLahirKadapa, Andhra Pradesh, IndiaPekerjaansutradara, penulis latar Neelakanta[1] adalah seorang sutradara & penulis latar film Telugu. Ia meraih Penghargaan Nasional dalam penulisan latar untuk film fitur 'Show.[2] Kehidupan pribadi Neelakanta berasal dari Kadapa, Andhra Pradesh.[3] Ia dididik di Sekolah Publik Loyola dan Kolese Loyola di Vijayawada. Sejak masa sekolahnya, Neelakanta mempelajari penyutradaraan film & memutuskan untuk pergi ...

 

 

Usia dalam GejolakSutradaraSisworo Gautama PutraProduserRam SorayaPemeranRatno TimoerSuzannaWieke WidowatiGeorge RudyBagus Santoso Nena RosierDistributorSoraya Intercine FilmsTanggal rilis1984Durasi91 menitNegaraIndonesia Usia dalam Gejolak adalah film Indonesia yang diproduksi pada tahun 1984 dengan disutradarai oleh Sisworo Gautama Putra dan dibintangi antara lain oleh Ratno Timoer, Suzanna, Wieke Widowati, dan masih banyak lagi. Sinopsis Perkawinan Iskandar (Ratno Timoer) dan Susy (Suzanna...

 

 

Japanese football club This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Sagan Tosu – news · newspapers · books · scholar · JSTOR (August 2014) (Learn how and when to remove this template message) Football clubSagan Tosu サガン鳥栖Full nameSagan Tosu Football ClubNickname(s)SaganFounded1997; 27...

Sentriol sel kepiting Gambaran tiga dimensi sentriol Sentriol adalah struktur berbentuk tabung yang terdapat dalam kebanyakan sel eukariota. Sentriol terlibat dalam pembelahan sel serta pembentukan silia dan flagela. Sentriol tidak ditemukan pada tumbuhan berpembuluh maupun kebanyakan fungi.[1] Sepasang sentriol, teratur secara sejajar dan dikelilingi oleh sejumlah materi padat membentuk struktur gabungan yang disebut sentrosom.[2] Referensi ^ Quarmby LM & Parker JD (2005)...

 

 

Charles BradlaughMP Anggota Parlemendapil NorthamptonMasa jabatan1880–1891PendahuluCharles George MerewetherPenggantiSir Moses Philip Manfield Informasi pribadiLahir(1833-09-26)26 September 1833HoxtonMeninggal30 Januari 1891(1891-01-30) (umur 57)KebangsaanBritaniaPartai politikPartai LiberalSunting kotak info • L • B Charles Bradlaugh (26 September 1833 – 30 Januari 1891) adalah seorang aktivis politik Inggris. Ia merupakan salah satu ateis Inggris dari abad ke-19 yang ...

 

 

Ираклеониты — ученики гностика Ираклеона (II век). Упоминаются как особая секта Епифанием и Августином; при крещении и миропомазании они соблюдали обряд помазания елеем и при этом произносили воззвания на арамейском языке, которые должны были освободить душу от власт�...

Lolita Aniyar de Castro in 2008 Lolita Aniyar de Castro (8 May 1937 – 7 December 2015) was a Venezuelan teacher, lawyer, politician, and criminologist. Biography Aniyar was born in Caracas into a family of Moroccan-Jewish origin.[1] She served as a professor at Universidad del Zulia in the department of criminology, and for more than 15 years was director of the Institute of Criminology there, which now bears her name.[2] She taught in graduate school at the Universidad de l...

 

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目需要編修,以確保文法、用詞、语气、格式、標點等使用恰当。 (2013年8月6日)請按照校對指引,幫助编辑這個條目。(幫助、討論) 此條目剧情、虛構用語或人物介紹过长过细,需清理无关故事主轴的细节、用語和角色介紹。 (2020年10月6日)劇情、用語和人物介紹都只是用於了解故事主軸,輔助�...

 

 

American basketball player and coach Not to be confused with Ric Edelman. Rick AdelmanAdelman with the Portland Trail Blazers in 1970Personal informationBorn (1946-06-16) June 16, 1946 (age 78)Lynwood, California, U.S.Listed height6 ft 1 in (1.85 m)Listed weight175 lb (79 kg)Career informationHigh schoolSt. Pius X (Downey, California)CollegeLoyola Marymount (1965–1968)NBA draft1968: 7th round, 79th overall pickSelected by the San Diego RocketsPlaying career1968...

Marion Bauer Información personalNacimiento 15 de agosto de 1882 Walla Walla (Estados Unidos) Fallecimiento 9 de agosto de 1955 (72 años)South Hadley (Estados Unidos) Causa de muerte Infarto agudo de miocardio Sepultura Cementerio de Kensico Nacionalidad EstadounidenseEducaciónEducada en Conservatorio de París Alumna de Nadia Boulanger Información profesionalOcupación Compositora, musicóloga, teórica de la música, escritora, crítica musical y profesora de música Área Música Emple...

 

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Maret 2016. Iklan dari Cyclecar La Vigne 1914. Cyclecars adalah mobil kecil dan murah, diproduksi pada tahun 1910 sampai 1920-an. Penggambaran umum Cyclecars digerakan oleh mesin silinder tunggal, V-ganda dan jarang sekali menggunakan mesin 4 silinder, terkadang ber...

 

 

Defensive strategy in basketball This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (July 2010) (Learn how and when to remove this message) The amoeba defense is a defensive strategy in the game of basketball. History The amoeba defense was developed by Fran Webster, an assistant for the Pittsburgh Panthers men's basketball team.[1] In the 1970s, Webster ...

Australian legal instrument Therapeutic Goods (Poisons Standard—February 2024) Instrument 2024Department of Health and Aged CareCitation[1]Territorial extentAustraliaEnacted23 January 2024Commenced1 February 2024Authorizing legislationTherapeutic Goods Act 1989RepealsTherapeutic Goods (Poisons Standard—October 2023) Instrument 2023Status: In force The Standard for the Uniform Scheduling of Medicines and Poisons (SUSMP), also known as the Poisons Standard for short, is an Australian legisl...

 

 

 Nota: Para a cidade fantasma do estado de Montana, veja Sumatra (Montana). Coordenadas: 1° S 101° E Sumatra ou Samatra Sumatra ou SamatraLocalização de Sumatra na Indonésia Coordenadas: 1° S 101° E Geografia física País Indonésia Localização Sudeste Asiático Arquipélago Grandes Ilhas da Sonda Ponto culminante 3 805 m (Kerintji) Área 482.286,55  km² Geografia humana População 59 185 500 (2021) Densidade 122,72 hab./km² Etnias Achéns, Bataq...

 

 

祖羅斯一世的錢幣 祖羅斯一世(公正者),他是印度-希臘王國國王之一,統治時間有些歧異,學者Bopearachchi認定他統治時間大約在前130年-前120年間,是在米南德一世逝世以後。但後來兩枚祖羅斯一世的錢幣出土,顯示米南德一世曾把他的錢幣拿來造幣(overstruck)[1],因此祖羅斯一世應與米南德一世同期,且兩人是敵對關係。學者R.C. Senior修正他的統治時間約在前150年...

1980 single by VisageFade to GreySingle by Visagefrom the album Visage B-sideThe StepsReleased14 November 1980[1]GenreSynth-pop[2][3]new wave[4]new pop[5]electronic[5]Length4:02 (album version)3:50 (single edit)LabelPolydorSongwriter(s)Billy CurrieChris PayneMidge UreProducer(s)Midge UreVisageVisage singles chronology Tar (1979) Fade to Grey (1980) Mind of a Toy (1981) 1993 re-release cover Fade to Grey is a song by British synth-pop band Visag...

 

 

Community restriction of languages or dialects to specific settings This article is about languages. For writing systems, see Digraphia. Not to be confused with Diglossa (bird). The station board of Hapur Junction railway station in North India demonstrating digraphia of two formal registers, Hindi and Urdu, of a common vernacular, Hindustani,[1][2] an example of triglossia.[3] Sociolinguistics Key concepts Code-switching Language change Language ideology Language plan...