Knowledge

Systems Programming Language

Source 📝

726:
were 16-bit offsets from a base register (known as DB), or relative offsets from a pointer register (Q or S) that resulted in a valid address within the process's data area (called the stack). While primarily 16-bit word-oriented, the system supported addressing of individual bytes in an array by using the word address where the byte was stored shifted left 1 bit then adding 0 to access the upper byte, or 1 for the lower byte. Thus byte addresses were separate and distinct from word addresses and the interpretation of an address was purely contextual. This proved to be quite troublesome and was the source of numerous bugs in both system and user code. Care had to be taken to treat byte addresses as 16-bit unsigned (that is, type LOGICAL) when using them in, for example, length computations, because otherwise a byte address of 2^16 or more would be treated as a 2s-complement signed value resulting in erroneous calculation of lengths or offsets.
616:, but it has a number of important uses in systems programming where particular memory locations hold values from the underlying hardware. In particular, it allows one to define a variable that points to the front of a table of values, and then declare additional variables that point to individual values within the table. If the table location changes, only a single value has to change, the initial address, and all of the individual variables will automatically follow in their proper relative offsets. 424:
existing software via emulation. HP did not supply a native mode compiler for MPE/iX so it was not an easy process to move existing software to the new platform. To fill the need, Allegro Consultants wrote an SPL-compatible language named "SPLash!" that could compile to original HP 3000 code to run within the emulator, or to native mode. This offered a porting pathway for existing SPL software.
733:
A process's code acted on data in the stack, a single private segment also up to 32K words in size. Unlike stacks in other architectures, the HP 3000 stack was used for process globals, state preservation, procedure locals (supporting nested calls and re-entrancy), and numeric computation/evaluation.
452:
Statements are grouped into blocks using BEGIN and END, although, as in Pascal, the END of a program must be followed by a period. The program as a whole is surrounded by BEGIN and END., similar to Pascal, but lacking a PROGRAM keyword or similar statement at the top. The reason for this is that SPL
351:
Two implementations were considered, a 32-bit mainframe-scale machine known as Omega, and a 16-bit design known as Alpha. Almost all effort was on the Omega, but in June 1970, Omega was canceled. This led to an extensive redesign of Alpha to differentiate it from the 2100s, and it eventually emerged
725:
The classic HP 3000 organized physical memory into 1, 2, 4, 8, or 16 banks of 64K (65536) 16-bit words (128K bytes). Code (shared, non-modifiable) and data were separate from each other and stored in variable-length segments of up to 32K words each. Within a process, data addresses such as pointers
423:
HP reimplemented the HP 3000 system on the PA-RISC chipset, running a new version of the operating system known as MPE/iX. MPE/iX had two modes, in "native mode" it ran applications that had been recompiled for the PA-RISC using newer Pascal compilers, while under "compatible mode" it could run all
324:
Designers at HP began to wonder "If we can produce a time-sharing system this good using a junky computer like the 2116, think what we could accomplish if we designed our own computer." To this end, in 1968 the company began putting together a larger team to design a new mid-sized architecture. New
523:
statement which allowed these labels to be further defined as "entry points" that could be accessed from the command line. Labels named in the entry statement(s) were exposed to the operating system and could be called from the RUN command. For instance, one could write a program containing string
399:
Alpha took several years to develop before emerging in 1972 as the HP 3000. The machine was on the market for only a few months before it was clear it simply wasn't working right, and HP was forced to recall all 3000's already sold. It was reintroduced in late 1973 with most of its problems having
654:
In a similar fashion, SPL includes C-like array support in which the index variable is a number-of-words offset from the memory location set for the initial variable. Unlike C, SPL only provided one-dimensional arrays, and used parentheses as opposed to brackets. Variables could also be declared
467:
keyword to provide an easy method for declaring external procedures, thus avoiding the need for the programmer to declare the procedure parameter types and order. All user-accessible system service declarations (such as file system, process handling, communications, and the like) were available
729:
An individual process had access to up to 254 code segments of up to 32K words each. The code segments were divided into two domains: the first 191 were "system" segments shared by all processes, and the remaining 63 were "user" segments shared by all running the same program. Control transfer
356:
and use a smaller computer, the "front end", to process interactions with the user. This was the same operating concept as the 2000 series. However, yet-another-2000 would not be enough for Alpha, and the decision was made to have a single operating for batch, interactive and even
734:
The operating system provided facilities for access to additional memory-based (non-stack) data segments, but these were not natively addressed by the instruction set and so the program was responsible for moving data from and to such "extra data segments" as necessary.
578:
is an unsigned 16-bit integer type that, when used in a conditional expression, returns true if the least-significant bit is 1 and false otherwise. Unsigned integer arithmetic can be performed on LOGICAL data and any overflow is ignored. There is no equivalent of a
608:
in Algol-like languages. So the second line states "declare a variable D that is in the same memory location as A+2", which in this case is also the location of the variable C. This allows the same value to be read as an integer via C or a logical through D.
273:
and intended mainly for industrial embedded control uses, not the wider data processing market. HP saw this as a natural fit with their existing instrumentation business and initially pitched it to those users. In spite of this, HP found that the machine's
796:. It begins with the definition of a series of global variables, A, B and C, defines a single procedure and then calls it twenty times. Note that the procedure does not have a BEGIN and END of its own because it contains only one line of actual code, 453:
allows any block of code to be used as a program on its own, or compiled into another program to act as a library. The creation of code as a program or subprogram was not part of the language itself, handled instead by placing the
768:
returned the lower byte of the word storing A. This format could be used to split and merge bits as needed. Additionally, additional operations were provided for shifts and rotates, and could be applied to any variable with the
730:
specified either an routine number within the current segment, or an external segment number and a routine number within it. A small table at the end of the segment provided the entry point address for the routine.
403:
This success made SPL almost as widespread as the 2000 series' BASIC, and like that language, SPL resulted in a number of versions for other platforms. Notable among them was Micro-SPL, a version written for the
573:
is used for character processing, consisting of a 16-bit machine word holding a single 8-bit character in the least-significant bits. Arrays of type BYTE pack two 8-bit characters per 16-bit machine word.
501:
indicates that this variable is "pass-by-value" and therefore changes to it inside the procedure will not be seen by the caller. The procedure sets its return value by an assignment statement to its name:
491:
can be prefixed with a type to turn it into a function. In keeping with the syntax of other ALGOL-like languages, the types of the parameters were listed after the name, not part of it. For instance:
400:
been fixed. A major upgrade to the entire system, the CX machine, and MPE-C to run on it, reformed its image and the 3000 went on to be another major success during the second half of the 1970s.
713:
keyword that allowed a string of text to be defined as a variable, and then replaced any instances of that variable in the code with the literal string during compiles. This is similar to the
396:. The HP team decided they would also use an ALGOL-derived language for their operating systems work. HP's similar language was initially known as the Alpha Systems Programming Language. 737:
SPL included a variety of support systems to allow programs to be easily segmented and then make that segmentation relatively invisible in the code. The primary mechanism was to use the
301:. These two-machine systems, collectively known as HP 2000s, were an immediate success. HP BASIC was highly influential for many years, and its syntax can be seen in a number 804:
is not considered part of the code itself, it is indicating the type of the three parameters being passed in on the line above and is considered part of that line.
376:(OS) to provide quick responses to user actions. The B5000 was also unique, for its time, in that its operating system and core utilities were all programmed in a 508:
Although frowned upon, ALGOL and Pascal allowed code to be labeled using a leading name ending with a colon, which could then be used for the target of loops and
384:. ESPOL was a derivative of the ALGOL language tuned to work on the B5000's, a concept that was highly influential in the 1960s and led to new languages like 807:
BEGIN INTEGER A:=0, B, C:=1; PROCEDURE N(X,Y,Z); INTEGER X,Y,Z; X:=X*(Y+Z); FOR B:=1 UNTIL 20 DO N(A,B,C); END.
230:
SPL was widely used during the lifetime of the original 16-bit version of the HP 3000 platform. In the 1980s, the HP 3000 and MPE were reimplemented in an
594:, memory locations and variable storage are intermixed concepts, and one can access values directly through their locations. For instance, the code: 764:
syntax, where x and y were the start and end bit positions from 0 to 15. (Significantly, x and y must be constants known at compile time.) Thus
587:
is somewhat wasteful of memory when used only to store a single binary digit, although SPL offers bit string manipulation as an alternative.
524:
functions to convert to uppercase or lowercase, and then provide ENTRY points for these two. This could be called from the command line as
412:
to design a non-recursive language that he implemented with Clinton Parker in 1979. Clinton would then further modify Micro-SPL to produce
381: 174: 100: 17: 659:, in which case no local memory was set aside for them and the storage was assumed to be declared in another library. This mirrors the 289:
costs fell and systems began to ship with more memory. In 1968, HP introduced a bundled system using two 2100-series machine running
445:. Like those languages, program statements can span multiple physical lines and end with a semicolon. Comments are denoted with the 437:
SPL generally follows ALGOL 60 syntax conventions, and will be familiar to anyone with experience in ALGOL or its descendants, like
1299: 841: 702:. String constants were delimited by double-quotes, and double-quotes within a line were escaped with a second double-quote. 1210: 536:
Where SPL differs most noticeably from ALGOL is that its data types are very machine specific, based on the 3000's 16-bit
30:
This article is about the HP programming language. For the concept of a programming language for systems programming, see
408:
workstation. This machine had originally used BCPL as its primary language, but dissatisfaction with its performance led
242:
platforms. HP promoted Pascal as the favored system language on PA-RISC and did not provide an SPL compiler. This caused
512:
statements. One minor difference is that SPL required the label names to be declared in the variable section using the
169:, named for the development project that produced the 3000-series, SPL was designed to take advantage of the Alpha's 785:
This simple program, from the 1984 version of the reference manual, shows most of the features of the SPL language.
409: 413: 216: 113: 1240: 438: 926: 31: 199:
Through the mid-1970s, the success of the HP systems produced a number of SPL offshoots. Examples include
748:, but the programmer could add any number of additional named segments to organize the code into blocks. 224: 159: 155: 1272: 908: 298: 472:
list. This is similar to, but more refined and narrower scope than the C-language #include mechanism.
623:
modifier to any variable declaration, and the memory location of a variable dereferenced with the
468:
through this mechanism, and users could also add their own procedure declarations to the system's
741: 600:
defines three 16-bit integer variables, A, B and C, and then a LOGICAL, also a 16-bit value. The
275: 484: 133: 56: 52: 48: 940: 666:
Literals can be specified with various suffixes, and those without a suffix are assumed to be
1234: 563:
is a 32-bit floating-point value with 22 bits for the mantissa and 9 for the exponent, while
548: 417: 352:
with plans for an even more aggressive operating system design. Omega had intended to run in
326: 220: 1294: 631:
declares a pointer whose value contains the address of the variable A, not the value of A.
369: 290: 269:
series, in 1967. The machines had originally been designed by an external team working for
136: 43: 8: 377: 358: 306: 457: 336:
systems, and the resulting concepts bore a strong resemblance to the highly successful
1222: 744:
which defined which segment the following code should be placed in. The default was
640: 373: 345: 314: 294: 243: 151: 348:
simpler to implement, and HP selected this same architecture for the new concept.
337: 258: 182: 140: 567:
is a 64-bit floating-point value with 54 bits of mantissa and 9 bits exponent.
150:
line and first introduced in 1972. SPL was used to write the HP 3000's primary
1288: 1249: 1226: 604:, like Pascal, means "is equivalent to", not "gets the value of", which uses 341: 310: 302: 270: 170: 859: 705:
Variable declarations could use constants to define an initial value, as in
158:(MPE). Similar languages on other platforms were generically referred to as 757: 591: 365: 282: 262: 147: 1260: 709:. Note the use of the assign-to rather than is-a. Additionally, SPL had a 318: 286: 864:
The 2000A was the first HP 2000 time share system on the market ca. 1969
612:
This syntax may seem odd to modern readers where memory is generally a
537: 405: 353: 212: 497:
Declares a function FACT that takes a value N that is an integer. The
449:
keyword, or by surrounding the comment text in << and >>.
613: 333: 204: 185: 760:. Any bit, or string of bits, in a word could be accessed using the 442: 247: 231: 96: 651:
puts the value of A into the location currently pointed to by P.
266: 239: 235: 144: 756:
SPL included a "bit-extraction" feature that allowed simplified
278:
was making them increasingly successful in the business market.
223:, which was fairly successful. The latter more closely followed 188:
systems, which also influenced a number of 1960s languages like
389: 385: 193: 1211:"The Strongest Castle: The Rise, Fall and Rise of the HP 3000" 189: 178: 66: 547:
type is a 16-bit signed type, with 15 bits of value and the
393: 1027: 330: 1039: 947: 1068: 1066: 981: 979: 977: 964: 962: 1261:"HP: The Accidentally, On-Purpose Computer Company" 1150: 1138: 1102: 1078: 1015: 991: 890: 888: 886: 884: 1186: 1174: 1162: 1126: 1114: 1090: 1063: 1051: 1003: 974: 959: 822: 639:puts the value of A into P, likely resulting in a 941:"SPLash! The Native Mode SPL Compiler for MPE/iX" 1286: 1229:. Archived from the original on 3 February 2002. 907:Baker, Henry; Parker, Clinton (September 1979). 881: 869: 788:The program as a whole is delimited between the 494:INTEGER PROCEDURE FACT(N); VALUE N; INTEGER N; 927:"ANTIC Interview 111, Clinton Parker, Action!" 635:can be used on either side of the assignment; 325:team members included those who had worked on 1274:Systems Programming Language reference manual 227:syntax, losing some of SPL's idiosyncrasies. 906: 364:To make this work, it needed an advanced 483:were separate concepts, SPL uses a more 1258: 929:(podcast). Interviewed by Randy Kindig. 842:"History of the 2116A digital computer" 828: 27:Programming language by Hewlett-Packard 14: 1287: 943:. Allegro Consultants. 1 January 2004. 924: 720: 1247: 1208: 894: 875: 619:Pointers were declared by adding the 1209:Edler, Christopher (November 1995). 925:Parker, Clinton (31 December 2015). 852: 834: 285:was becoming popular, especially as 1271: 1192: 1180: 1168: 1156: 1144: 1132: 1120: 1108: 1096: 1084: 1072: 1057: 1045: 1033: 1021: 1009: 997: 985: 968: 953: 519:SPL added to this concept with the 281:During this period, the concept of 250:were introduced to fill this need. 24: 167:Alpha Systems Programming Language 25: 1311: 1280:. Hewlett-Packard. February 1984. 751: 583:modifier as found in Pascal, so 1202: 432: 372:(DMA) and required an advanced 933: 918: 900: 739:$ CONTROL SEGMENT=asegmentname 181:-derived language used by the 13: 1: 1300:Systems programming languages 810: 531: 475:In contrast to Pascal, where 815: 597:INTEGER A,B,C LOGICAL D=A+2 293:, which provided a complete 246:concerns, and 3rd party SPL 160:system programming languages 122:Systems Programming Language 38:Systems Programming Language 32:systems programming language 7: 860:"Hewlett/Packard Computers" 674:would be interpreted as an 427: 173:design. It is patterned on 156:Multi-Programming Executive 78:; 52 years ago 18:System Programming Language 10: 1316: 780: 647:makes P point to A, while 463:The language provided the 299:BASIC programming language 253: 29: 1239:: CS1 maint: unfit URL ( 801: 797: 793: 789: 774: 770: 765: 761: 745: 738: 714: 710: 706: 699: 695: 691: 687: 683: 679: 675: 671: 667: 660: 656: 648: 644: 636: 632: 628: 624: 620: 605: 601: 584: 580: 575: 570: 564: 560: 552: 544: 525: 520: 513: 509: 505:FACT := expression; 498: 488: 480: 476: 469: 464: 454: 446: 340:system. The B5000 used a 111: 106: 95: 90: 72: 62: 42: 460:at the top of the file. 1259:Leibson, Steve (2017). 559:a floating-point type. 276:price/performance ratio 261:introduced their first 128:but sometimes known as 1036:, pp. 1.13, 1.14. 368:design with extensive 1215:The Analytical Engine 629:INTEGER POINTER P:=@A 555:is a 32-bit integer, 549:least significant bit 526:RUN $ STRINGS,TOUPPER 418:Atari 8-bit computers 221:Atari 8-bit computers 215:. The later inspired 171:stack-based processor 162:, confusing matters. 134:procedurally-oriented 124:, often shortened to 956:, pp. 1.2, 1.3. 455:$ CONTROL SUBPROGRAM 370:direct memory access 344:processor that made 291:HP Time-Shared BASIC 165:Originally known as 137:programming language 1248:Green, Bob (2004). 1048:, pp. 2.1–2.3. 721:Memory segmentation 487:approach where any 378:high-level language 307:Palo Alto TinyBASIC 73:First appeared 39: 742:compiler directive 458:compiler directive 305:BASICs, including 37: 775:A:=A & LSR(3) 119: 118: 112:ZSPL, Micro-SPL, 16:(Redirected from 1307: 1281: 1279: 1268: 1255: 1251:HP3000 Evolution 1244: 1238: 1230: 1196: 1190: 1184: 1178: 1172: 1166: 1160: 1159:, pp. 3.18. 1154: 1148: 1147:, pp. 2.11. 1142: 1136: 1130: 1124: 1118: 1112: 1111:, pp. 2.12. 1106: 1100: 1094: 1088: 1087:, pp. 2.13. 1082: 1076: 1070: 1061: 1055: 1049: 1043: 1037: 1031: 1025: 1024:, pp. 3.15. 1019: 1013: 1007: 1001: 1000:, pp. 1.11. 995: 989: 983: 972: 966: 957: 951: 945: 944: 937: 931: 930: 922: 916: 915: 913: 904: 898: 892: 879: 873: 867: 866: 856: 850: 849: 838: 832: 826: 803: 799: 795: 791: 776: 772: 767: 763: 747: 740: 716: 712: 708: 701: 697: 693: 689: 685: 681: 677: 673: 670:. For instance, 669: 662: 658: 650: 646: 641:dangling pointer 638: 634: 630: 626: 622: 607: 603: 590:Like C, data is 586: 582: 577: 572: 566: 562: 554: 546: 527: 522: 515: 511: 500: 490: 482: 478: 471: 466: 456: 448: 374:operating system 346:multiprogramming 315:North Star BASIC 295:operating system 244:code maintenance 152:operating system 86: 84: 79: 40: 36: 21: 1315: 1314: 1310: 1309: 1308: 1306: 1305: 1304: 1285: 1284: 1277: 1232: 1231: 1205: 1200: 1199: 1195:, pp. 4.9. 1191: 1187: 1183:, pp. 4.6. 1179: 1175: 1171:, pp. 1.8. 1167: 1163: 1155: 1151: 1143: 1139: 1135:, pp. 2.6. 1131: 1127: 1123:, pp. 3.6. 1119: 1115: 1107: 1103: 1099:, pp. 4.4. 1095: 1091: 1083: 1079: 1075:, pp. 3.2. 1071: 1064: 1060:, pp. 2.4. 1056: 1052: 1044: 1040: 1032: 1028: 1020: 1016: 1012:, pp. 7–4. 1008: 1004: 996: 992: 988:, pp. 1.5. 984: 975: 967: 960: 952: 948: 939: 938: 934: 923: 919: 911: 905: 901: 893: 882: 874: 870: 858: 857: 853: 840: 839: 835: 827: 823: 818: 813: 808: 783: 773:, for instance 754: 723: 598: 534: 506: 495: 435: 430: 338:Burroughs B5000 297:as well as the 259:Hewlett-Packard 256: 234:running on the 207:processor, and 183:Burroughs B5000 141:Hewlett-Packard 82: 80: 77: 35: 28: 23: 22: 15: 12: 11: 5: 1313: 1303: 1302: 1297: 1283: 1282: 1269: 1256: 1245: 1204: 1201: 1198: 1197: 1185: 1173: 1161: 1149: 1137: 1125: 1113: 1101: 1089: 1077: 1062: 1050: 1038: 1026: 1014: 1002: 990: 973: 971:, p. 1.1. 958: 946: 932: 917: 899: 880: 868: 851: 833: 820: 819: 817: 814: 812: 809: 806: 782: 779: 753: 752:Other features 750: 722: 719: 717:keyword in C. 663:keyword in C. 596: 533: 530: 504: 493: 434: 431: 429: 426: 321:, and others. 255: 252: 117: 116: 109: 108: 104: 103: 93: 92: 88: 87: 74: 70: 69: 64: 60: 59: 46: 26: 9: 6: 4: 3: 2: 1312: 1301: 1298: 1296: 1293: 1292: 1290: 1276: 1275: 1270: 1266: 1262: 1257: 1253: 1252: 1246: 1242: 1236: 1228: 1224: 1220: 1216: 1212: 1207: 1206: 1194: 1189: 1182: 1177: 1170: 1165: 1158: 1153: 1146: 1141: 1134: 1129: 1122: 1117: 1110: 1105: 1098: 1093: 1086: 1081: 1074: 1069: 1067: 1059: 1054: 1047: 1042: 1035: 1030: 1023: 1018: 1011: 1006: 999: 994: 987: 982: 980: 978: 970: 965: 963: 955: 950: 942: 936: 928: 921: 910: 903: 896: 891: 889: 887: 885: 877: 872: 865: 861: 855: 847: 843: 837: 830: 825: 821: 805: 802:INTEGER X,Y,Z 786: 778: 759: 749: 743: 735: 731: 727: 718: 707:INTEGER A:=10 703: 664: 652: 642: 617: 615: 610: 595: 593: 588: 568: 558: 551:as the sign. 550: 541: 540:word format. 539: 529: 517: 503: 492: 486: 473: 461: 459: 450: 444: 440: 425: 421: 419: 415: 411: 407: 401: 397: 395: 391: 387: 383: 379: 375: 371: 367: 362: 360: 355: 349: 347: 343: 342:stack machine 339: 335: 332: 328: 322: 320: 316: 312: 311:Integer BASIC 308: 304: 303:microcomputer 300: 296: 292: 288: 284: 279: 277: 272: 271:Union Carbide 268: 264: 263:minicomputers 260: 251: 249: 245: 241: 237: 233: 228: 226: 222: 218: 214: 210: 206: 202: 197: 195: 191: 187: 184: 180: 176: 172: 168: 163: 161: 157: 153: 149: 146: 142: 138: 135: 131: 127: 123: 115: 110: 105: 102: 98: 94: 91:Influenced by 89: 75: 71: 68: 65: 61: 58: 54: 50: 47: 45: 41: 33: 19: 1273: 1264: 1250: 1235:cite journal 1218: 1214: 1203:Bibliography 1188: 1176: 1164: 1152: 1140: 1128: 1116: 1104: 1092: 1080: 1053: 1041: 1029: 1017: 1005: 993: 949: 935: 920: 902: 871: 863: 854: 845: 836: 829:Leibson 2017 824: 787: 784: 758:bit fiddling 755: 736: 732: 728: 724: 704: 665: 653: 618: 611: 599: 592:weakly typed 589: 569: 556: 542: 535: 518: 507: 496: 474: 462: 451: 436: 433:Basic syntax 422: 402: 398: 366:computer bus 363: 350: 323: 283:time sharing 280: 257: 229: 208: 200: 198: 177:, a similar 166: 164: 148:minicomputer 129: 125: 121: 120: 1295:HP software 909:"Micro-SPL" 798:X:=X*(Y+Z); 746:MAINLINESEG 410:Henry Baker 361:operation. 319:Atari BASIC 287:core memory 139:written by 1289:Categories 1265:HP9825.COM 1254:. Robelle. 895:Edler 1995 876:Green 2004 811:References 690:denoted a 538:big-endian 532:Data types 406:Xerox Alto 354:batch mode 213:Xerox Alto 107:Influenced 57:structured 53:imperative 49:procedural 1227:1071-6351 816:Citations 614:black box 516:keyword. 489:PROCEDURE 477:PROCEDURE 470:INTRINSIC 465:INTRINSIC 420:in 1983. 359:real-time 334:mainframe 327:Burroughs 248:compilers 209:Micro-SPL 205:Zilog Z80 186:mainframe 44:Paradigms 1193:SPL 1984 1181:SPL 1984 1169:SPL 1984 1157:SPL 1984 1145:SPL 1984 1133:SPL 1984 1121:SPL 1984 1109:SPL 1984 1097:SPL 1984 1085:SPL 1984 1073:SPL 1984 1058:SPL 1984 1046:SPL 1984 1034:SPL 1984 1022:SPL 1984 1010:SPL 1984 998:SPL 1984 986:SPL 1984 969:SPL 1984 954:SPL 1984 766:A.(8:15) 678:, while 481:FUNCTION 443:Modula-2 428:Language 232:emulator 211:for the 203:for the 143:for the 132:, was a 130:SPL/3000 97:ALGOL 60 781:Example 676:INTEGER 668:INTEGER 627:. Thus 621:POINTER 585:LOGICAL 576:LOGICAL 545:INTEGER 447:COMMENT 414:Action! 267:HP 2100 254:History 240:HP 9000 238:-based 236:PA-RISC 217:Action! 145:HP 3000 114:Action! 81: ( 1225:  762:.(x:y) 711:EQUATE 684:DOUBLE 682:was a 661:extern 657:GLOBAL 645:@P:=@A 581:PACKED 553:DOUBLE 485:C-like 439:Pascal 392:, and 390:PL/360 386:JOVIAL 265:, the 225:Pascal 194:JOVIAL 63:Family 1278:(PDF) 1221:(1). 912:(PDF) 790:BEGIN 771:& 715:const 680:1234D 637:@P:=A 521:ENTRY 514:LABEL 510:GO TO 499:VALUE 382:ESPOL 190:PL360 179:ALGOL 175:ESPOL 101:ESPOL 67:ALGOL 1241:link 1223:ISSN 800:the 794:END. 792:and 700:LONG 694:and 692:REAL 672:1234 649:P:=A 571:BYTE 565:LONG 561:REAL 543:The 479:and 441:and 416:for 394:BCPL 329:and 219:for 201:ZSPL 192:and 83:1972 76:1972 557:not 331:IBM 126:SPL 1291:: 1263:. 1237:}} 1233:{{ 1217:. 1213:. 1065:^ 976:^ 961:^ 883:^ 862:. 846:HP 844:. 777:. 698:a 686:. 643:, 606::= 528:. 388:, 380:, 317:, 313:, 309:, 196:. 154:, 99:, 55:, 51:, 1267:. 1243:) 1219:3 914:. 897:. 878:. 848:. 831:. 696:L 688:E 633:@ 625:@ 602:= 85:) 34:. 20:)

Index

System Programming Language
systems programming language
Paradigms
procedural
imperative
structured
ALGOL
ALGOL 60
ESPOL
Action!
procedurally-oriented
programming language
Hewlett-Packard
HP 3000
minicomputer
operating system
Multi-Programming Executive
system programming languages
stack-based processor
ESPOL
ALGOL
Burroughs B5000
mainframe
PL360
JOVIAL
Zilog Z80
Xerox Alto
Action!
Atari 8-bit computers
Pascal

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.