%CONSTSHORTINTEGERARRAY MAIN(1 : 217) = %C 1, 5, 14, 20, 26, 38, 43, 48, 54, 61, 68, 74, 79, 82, 84, 89, 96, 102, 108, 115, 122, 126, 0, 129, 133, 137, 142, 145, 152, 156, 161, 164, 168, 0, 171, 0, 178, 184, 185, 189, 190, 193, 196, 199, 0, 202, 205, 206, 208, 0, 211, 213, 215, 216, 219, 222, 225, 0, 228, 231, 236, 241, 244, 249, 0, 253, 259, 260, 264, 266, 267, 270, 271, 274, 277, 279, 280, 283, 286, 289, 292, 295, 298, 302, 305, 308, 311, 314, 317, 320, 324, 328, 332, 336, 340, 344, 348, 352, 355, 358, 0, 361, 363, 365, 373, 0, 381, 0, 385, 392, 393, 396, 397, 400, 403, 405, 406, 410, 0, 413, 418, 425, 432, 0, 435, 437, 0, 440, 445, 446, 450, 453, 456, 0, 459, 462, 463, 0, 469, 472, 473, 475, 0, 477, 489, 499, 506, 0, 509, 511, 512, 517, 0, 520, 0, 530, 534, 535, 538, 539, 0, 543, 546, 547, 0, 558, 565, 566, 571, 572, 576, 579, 0, 585, 587, 588, 591, 0, 594, 597, 0, 600, 602, 603, 608, 609, 614, 615, 618, 0, 620, 622, 623, 627, 628, 631, 634, 637, 0, 640, 646, 0, 651, 656, 657, 660, 661, 665, 0, 667, 0, 670, 674, 675, 678, 681, 683 %CONSTSHORTINTEGERARRAY SUB(2 : 684) = %C 4119, 4288, -8192, 0, 4149, 4168, 4197, 4166, 4286, 4119, 4230, -8192, 0, 1, 8200, 24576, 4230, -8192, 0, 8, 8221, 24576, 16384, -8192, 0, 15, 8204, 20480, 16384, 4202, 21, 8244, 4168, 4197, 4166, -8192, 0, 4154, 4246,-20480, -8192, 0, 4290, 4154, 4295, -20480, 0, 23, 8223, 4255, -8192,-20480, 0, 4208, 4271, 4212, -4096, 4261, -8192, 0, 30, 8197, -4096, 4261, -8192,-20480, 0, 35, 8196, 20480, -8192,-16384, 0, 41, 8198, 4215, -8192, 0, 4130, 4096, 0, 4225, 0, 45, 8199, -8192,-20480, 0, 4309, 50, 8201, 4239, -8192,-20480, 0, 57,-20480, 8202, 12288, -8192, 0, 65, 8203, 4232, -8192,-20480, 0, 71, 77, 8193, 8205, -8192,-20480, 0, 85, 93, 8206, 8207, -8192,-20480, 0, 101, 8257,-32768, 0,-12288, -8192, 0, 4202, 4134, 4141, 0, 103, 8246, 4143, 0, 106, 8208, 12288, 4141, 0, 116, 8209, 0, 123, 8210, 4136, 4168, 4197, 4166, 0, 130, 8211, 20480, 0, 15, 8204, 20480, 16384, 0, 136, 8212, 0, 141, 8213, 4146, 0, 149, 8214, 0, 8292, 4220, 154, 8245, 8192, 4132, 0, 8292, 4220, 154, 8245, 8192, 4132, 0, 4136, 4168, 4197, 4166, 0, 156, 8247, 0, 21, 8244, 0, 159, 8248, 0, 103, 8246, 0, 162, 8215, 4119, 0, 12288, 0, -4096, 4204, 0, 12288, 0, 136, 8212, 0, 166, 8216, 0, 169, 8218, 0, 175, 8217, 0, 182, 8219, 0, 188, 8220, 0, 196, 188, 8194, 8220, 0, 71, 188, 8193, 8220, 0, 201, 8222, 0, 206, 201, 8195, 8222, 0, 211, 8224, 4161, 0, 218, 8249, 12288, 220, 8250, 8271, 0, 222, 8225, 8226, 0, 232, 8226, 0, 4172, 4197, 4166, 0, 237, 8251, 0, 239, 8252, 0, 241, 8253, 0, 237, 8251, 0, 103, 8246, 0, 239, 8252, 0, 243, 8254, 0, 245, 8255, 0, 248, 8256, 0, 250, 8257, 8257, 0, 101, 8257, 0, 253, 8258, 0, 256, 8259, 0, 258, 8260, 0, 260, 8261, 0, 263, 8262, 0, 21, 8244, 4168, 0, 266, 8263, 4168, 0, 269, 8264, 4168, 0, 271, 8267, 4168, 0, 273, 8265, 4168, 0, 276, 8266, 4168, 0, 278, 8268, 4168, 0, 281, 8272, 4168, 0, 162, 8215, 0, 283, 8227, 0, 154, 8245, 0, 12288, 0, 4202, 0, 218, 8249, 4168, 4197, 4166, 220, 8250, 0, 248, 8256, 4168, 4197, 4166, 248, 8256, 0, -4096, 4204, 4206, 0, 218, 8249, 4168, 4197, 4166, 220, 8250, 0, 286, 8270, 4202, 0, 288, 8231, 0, 297, 8232, 0, 304, 8233, 0, 30, 8197,-20480, 0, 20480,-16384, 0, 312, 8234, 8199,-20480, 0, 319, 8234, 8207, 28672, 24576, 20480, 0, 329, 8234, 8235, 28672, 24576, 20480, 0, 24576, 28672, 0, 12288, 0, -4096, 4223, 0, 218, 8249, 12288, 220, 8250, 0, 248, -8191,-28672, 0, 336, -24576, 0, 248,-28672, 0, 339,-28672, 0, 347, 8237, 4119, 0, 12288, 103, 8246, 4236, 4234, 0, 281, 8269, 4232, 0, 12288, 0, -4096, 0, 352, 8238, -4096, 218, 8249, 4283, 4246, 4279, 4281, 220, 8250, 0, 30, 8197, -4096, 4253, 218, 8249, -4096, 220, 8250, 0, 4246, 218, 8249, -4096, 220, 8250, 0, 232, 8226, 0, 352, 8238, 0, 359, 8225, 4244, 4249, 0, 4163, 4305, 0, 4305, 218, 8249, 4168, 4197, 4166, 220, 8250, 4251, 0, 281, 8269, 4249, 4251, 0, 286, 8270, -4096, 0, 4305, 4259, 4257, 0, 281, 8269, 4255, 0, 218, 8249, 4168, 12288, 154, 8245, 4168, 12288, 220, 8250, 0, 218, 8249, 4265, 4305, 4263, 220, 8250, 0, 281, 8269, 4265, 4305, 4263, 0, 4271, 232, 8226, 0, 4154, 4163, 0, 50, 8201, 4269, 232, 8226, 0, 359, 8225, 0, 77, 8205, 0, 4154, 4274, 0, 365, 8239, 0, 368, 8240, 0, 281, 8269, 0, 218, 8249, -4096, 220, 8250, 0, 4277, 4283, 4246, 4279, 4281, 0, 50, 8201, 0, 4154, 0, 372, 8241, 0, 4149, 4168, 4197, 4166, 0, 377, 8228, 0, 381, 8229, 0, 387, 8230, 0, 288, 8231, 0, 359, 8225, -4096, 4259, 4302, 0, 4305, 4300, 4298, -8192, 0, 281, 8269, 4305, 4300, 4298, 0, 21, 8244, 12288, 0, 21, 8244,-32768, 0, -8192, 0, -4096, 4307, 0, 281, 8269, -4096, 4307, 0, 377, 8228, 0, 288, 8231, 0, 387, 8230, 0 %CONSTBYTEINTEGERARRAY LITERAL(1 : 396) = %C 6, 102, 105, 110, 105, 115, 104, 6, 114, 101, 112, 101, 97, 116, 5, 99, 121, 99, 108, 101, 1, 61, 6, 115, 119, 105, 116, 99, 104, 4, 115, 112, 101, 99, 5, 98, 101, 103, 105, 110, 3, 101, 110, 100, 4, 108, 105, 115, 116, 6, 114, 101, 99, 111, 114, 100, 7, 99, 111, 110, 116, 114, 111, 108, 5, 102, 97, 117, 108, 116, 5, 115, 104, 111, 114, 116, 7, 114, 111, 117, 116, 105, 110, 101, 7, 116, 114, 117, 115, 116, 101, 100, 7, 112, 114, 111, 103, 114, 97, 109, 1, 42, 2, 45, 62, 9, 112, 114, 105, 110, 116, 116, 101, 120, 116, 6, 114, 101, 116, 117, 114, 110, 6, 114, 101, 115, 117, 108, 116, 5, 115, 116, 97, 114, 116, 4, 115, 116, 111, 112, 7, 109, 111, 110, 105, 116, 111, 114, 4, 101, 120, 105, 116, 1, 58, 2, 61, 61, 2, 60, 45, 3, 97, 110, 100, 2, 105, 102, 5, 119, 104, 105, 108, 101, 6, 117, 110, 108, 101, 115, 115, 5, 117, 110, 116, 105, 108, 7, 105, 110, 116, 101, 103, 101, 114, 4, 98, 121, 116, 101, 4, 114, 101, 97, 108, 4, 108, 111, 110, 103, 6, 115, 116, 114, 105, 110, 103, 1, 40, 1, 41, 9, 97, 114, 114, 97, 121, 110, 97, 109, 101, 4, 110, 97, 109, 101, 1, 43, 1, 45, 1, 92, 1, 38, 2, 33, 33, 1, 33, 2, 42, 42, 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62, 62, 2, 60, 61, 1, 60, 1, 35, 2, 62, 61, 1, 62, 2, 92, 61, 1, 44, 2, 111, 114, 1, 95, 8, 101, 120, 116, 101, 114, 110, 97, 108, 6, 115, 121, 115, 116, 101, 109, 7, 100, 121, 110, 97, 109, 105, 99, 6, 111, 102, 108, 105, 115, 116, 9, 111, 102, 112, 114, 111, 103, 114, 97, 109, 6, 111, 102, 102, 105, 108, 101, 2, 33, 42, 7, 99, 111, 109, 109, 101, 110, 116, 4, 101, 108, 115, 101, 6, 102, 111, 114, 109, 97, 116, 5, 97, 114, 114, 97, 121, 2, 102, 110, 3, 109, 97, 112, 4, 116, 104, 101, 110, 3, 111, 119, 110, 5, 99, 111, 110, 115, 116, 9, 101, 120, 116, 114, 105, 110, 115, 105, 99 %CONSTBYTEINTEGERARRAY SFLAGS(1 : 80) = %C 3, 3, 3, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 1, 4, 0, 4, 0, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 %CONSTBYTEINTEGERARRAY KEYSYMS(1 : 381) = %C 5, 83, 72, 79, 82, 84, 4, 66, 89, 84, 69, 4, 76, 79, 78, 71, 5, 66, 69, 71, 73, 78, 4, 83, 80, 69, 67, 3, 69, 78, 68, 4, 76, 73, 83, 84, 6, 70, 73, 78, 73, 83, 72, 6, 82, 69, 67, 79, 82, 68, 7, 67, 79, 78, 84, 82, 79, 76, 5, 70, 65, 85, 76, 84, 5, 67, 89, 67, 76, 69, 7, 82, 79, 85, 84, 73, 78, 69, 7, 84, 82, 85, 83, 84, 69, 68, 7, 80, 82, 79, 71, 82, 65, 77, 9, 80, 82, 73, 78, 84, 84, 69, 88, 84, 6, 82, 69, 84, 85, 82, 78, 6, 82, 69, 83, 85, 76, 84, 5, 83, 84, 65, 82, 84, 4, 83, 84, 79, 80, 7, 77, 79, 78, 73, 84, 79, 82, 4, 69, 88, 73, 84, 3, 65, 78, 68, 2, 73, 70, 6, 85, 78, 76, 69, 83, 83, 5, 87, 72, 73, 76, 69, 5, 85, 78, 84, 73, 76, 7, 73, 78, 84, 69, 71, 69, 82, 6, 82, 69, 80, 69, 65, 84, 4, 82, 69, 65, 76, 6, 83, 87, 73, 84, 67, 72, 6, 83, 84, 82, 73, 78, 71, 5, 65, 82, 82, 65, 89, 4, 78, 65, 77, 69, 2, 79, 82, 3, 79, 87, 78, 5, 67, 79, 78, 83, 84, 9, 69, 88, 84, 82, 73, 78, 83, 73, 67, 8, 69, 88, 84, 69, 82, 78, 65, 76, 6, 83, 89, 83, 84, 69, 77, 7, 68, 89, 78, 65, 77, 73, 67, 2, 79, 70, 4, 70, 73, 76, 69, 7, 67, 79, 77, 77, 69, 78, 84, 4, 69, 76, 83, 69, 6, 70, 79, 82, 77, 65, 84, 2, 70, 78, 3, 77, 65, 80, 4, 84, 72, 69, 78, 5, 82, 69, 65, 76, 83, 6, 78, 79, 82, 77, 65, 76, 1, 61, 1, 58, 2, 45, 62, 2, 61, 61, 2, 60, 45, 1, 40, 1, 41, 1, 43, 1, 45, 1, 92, 1, 38, 2, 33, 33, 1, 33, 1, 42, 2, 47, 47, 1, 47, 1, 46, 2, 60, 60, 2, 62, 62, 2, 60, 61, 1, 60, 2, 62, 61, 1, 62, 1, 35, 2, 92, 61, 1, 44, 1, 95, 1, 32, 1, 44 %CONSTSHORTINTEGERARRAY KEYWORD(1 : 80) = %C 0, 6, 11, 16, 22, 27, 31, 36, 43, 50, 58, 64, 70, 78, 86, 94, 104, 111, 118, 124, 129, 137, 142, 146, 149, 156, 162, 168, 176, 183, 188, 195, 202, 208, 213, 216, 220, 226, 236, 245, 252, 260, 263, 268, 276, 281, 288, 291, 295, 300, 306, 313, 315, 317, 320, 323, 326, 328, 330, 332, 334, 336, 338, 341, 343, 345, 348, 350, 352, 355, 358, 361, 363, 366, 368, 370, 373, 375, 377, 379 %CONSTBYTEINTEGERARRAY KFLAGS(1 : 80) = %C 144, 144, 144, 128, 129, 128, 128, 128, 128, 128, 128, 128, 128, 144, 128, 128, 128, 128, 128, 128, 144, 128, 160, 130, 130, 130, 130, 128, 128, 128, 128, 128, 145, 129, 128, 144, 144, 144, 144, 144, 144, 145, 128, 128, 162, 129, 129, 129, 160, 144, 128, 8, 8, 8, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 64, 0, 0, 0 %OWNBYTEINTEGER ISOLATE BRACKETS = 0; ! 'IB' %OWNBYTEINTEGER LEAVE BLANKS = 0; ! 'LB' %OWNBYTEINTEGER SEP BLOCKS = 1; ! 'SB' %OWNBYTEINTEGER INDENT BLOCKS = 1; ! 'TB' %OWNBYTEINTEGER SPLIT KEYWORDS = 0; ! 'SK' %OWNBYTEINTEGER PACK NAMES = 0; ! 'PN' %OWNBYTEINTEGER SPLIT STATS = 0; ! 'SS' %OWNBYTEINTEGER COMMENTS NORMAL = 0; ! 'CN' %OWNBYTEINTEGER BREAK COMMENTS = 1; ! 'BC' %OWNBYTEINTEGER LEAVE STARS = 1; ! 'LS' %OWNBYTEINTEGER JUSTIFY ALL = 0; ! 'JA' %OWNBYTEINTEGER LABELS RELATIVE = 0; ! 'LR' %OWNBYTEINTEGER SPLIT CONDS = 1; ! 'SC' %OWNBYTEINTEGER DECS RELATIVE = 1; ! 'DR' %OWNBYTEINTEGER SPACE LISTS = 1; ! 'SL' %OWNBYTEINTEGER SPACE EQUALS = 1; ! 'SE' %OWNBYTEINTEGER ISOLATE LOOPS = 1; ! 'IL' %OWNBYTEINTEGER EXTRA MARGIN = 0; ! 'EM' %OWNBYTEINTEGER LEAVE OWNS = 0; ! 'LO' %OWNBYTEINTEGER COMMENTS RELATIVE = 1; ! 'CR' %OWNBYTEINTEGER EXTEND COMMENTS = 1; ! 'EC' %OWNBYTEINTEGER MI = 3; ! MARGIN INCREMENT %OWNBYTEINTEGER LL = 72; ! LINE LENGTH %OWNBYTEINTEGER CT = 40; ! COMMENT TAB %OWNBYTEINTEGER ML = 40; ! MARGIN LIMIT %OWNBYTEINTEGER COMMENT EXTENSION = 5; ! 'CE' %OWNBYTEINTEGER EXT NUM = 2; ! 'XN' %OWNBYTEINTEGER INITIAL MARGIN = 7; ! 'IM' %OWNBYTEINTEGER SECONDARY MARGIN = 3; ! 'SM' %OWNBYTEINTEGER COMMENT LIMIT = 20; ! 'CL' %OWNBYTEINTEGER COMMENT LINE = 120; ! 'LC' %OWNSHORTINTEGER SAFETY FACTOR = 5 %OWNINTEGER DELTA MARGIN = 3 %OWNINTEGER LINE LENGTH = 70 %OWNINTEGER COMMENT TAB = 40 %OWNINTEGER LEVEL = 1, MLIMIT = 0, SEC MARGIN = 3 %OWNBYTEINTEGER COMMENT FLAG %OWNBYTEINTEGER CMODE, LOOP FLAG %OWNINTEGER LINESIZE, CS, DISP, D, RMARGIN, FIRST DISP %OWNINTEGER SIZE, CSTART, LINE BASE, FULL LINE %EXTERNALROUTINESPEC PROMPT(%STRING (63) S) %EXTERNALROUTINESPEC DEFINE(%STRING (63) S) %EXTERNALROUTINESPEC SEND(%STRING (63) S) %EXTERNALROUTINESPEC LIST(%STRING (63) S) %EXTERNALROUTINESPEC DESTROY(%STRING (63) S) %EXTERNALROUTINESPEC RENAME(%STRING (63) S) %INTEGERFNSPEC PARSE(%INTEGER EP) %OWNSTRING (255) INPUT, OUTPUT, OPTION FILE, ST, OPLIST %OWNINTEGER SPT, SAD, S %OWNBYTEINTEGER SPACES, MODE %OWNBYTEINTEGER OK, THIS SEP %CONSTINTEGER LAST TEXT = 51 %OWNINTEGER HEADER, SEGS %OWNINTEGERARRAY STRINGS(-100 : -1) %OWNINTEGER COMMENT LENGTH %OWNSHORTINTEGERARRAY REM(1 : 4) %OWNBYTEINTEGERARRAY SYMFILE(0 : 300) %OWNBYTEINTEGERARRAY TLENGTH(-100 : -1) %OWNINTEGERARRAY REC(1 : 100) %OWNBYTEINTEGER STATUS, OPTIONS, LAST SEP, FLAG, PMODE %OWNBYTEINTEGER QUOTES = 0, OWNFLAG = ';' %OWNINTEGER NVAL %REGISTER CURRIN(14) %OWNINTEGER CURROUT, SLENGTH, LIMIT, MARGIN, INBASE, STATSIZE %OWNINTEGER STAT, KEYBASE, TEXTBASE, J, SN, RP, RPLIM, RPINC %OWNINTEGER MAXMARGIN, ENDOFFILE %CONSTINTEGER CCC = X'2025430A' %CONSTINTEGER CONNEKTEP = 1 %CONSTINTEGER CREATEEP = 162 %CONSTINTEGER READEP = 7 %CONSTINTEGER INFOEP = 5 %CONSTINTEGER CHANGEEP = 6 %ROUTINESPEC SET UP FILES(%STRINGNAME S) %ROUTINESPEC CLOSE FILES %ROUTINESPEC SET OPTIONS %DYNAMICROUTINESPEC CHERISH(%STRING(63) S) %ROUTINE FDP(%INTEGER EP,%STRING(17) NAME,%INTEGER P1,P2,%C %INTEGERNAME FLAG) %SYSTEMROUTINESPEC AGENCY(%INTEGER P1,P2) *OI_4(13),5 AGENCY(1,ADDR(EP)) %END %ROUTINE CONTINUE %SHORTROUTINE %ROUTINESPEC ADJUST %INTEGERARRAY HOLD(1 : 4) %INTEGER J, K, L, M, N, Z, LIM, XES %BYTEINTEGERARRAYFORMAT NFM(1 : 4) %BYTEINTEGERARRAYNAME NEST %BYTEINTEGER S, CFLAG NEST == ARRAY(ADDR(NVAL),NFM) THIS SEP = NL; LIM = MARGIN+SAFETY FACTOR+SEC MARGIN Z = SLENGTH+CURROUT %RETURN %IF Z < LIMIT %OR (Z-SAFETY FACTOR-LIMIT < -4 %C %AND REC(RP+1) = 0) ! LEAVE TWO SPACES FOR ' %' IF NESC. XES = Z-LIMIT; ! EXCESS LINE LENGTH %CYCLE J = 1,1,4; HOLD(J) = NEST(J)+CURROUT-LINE BASE %REPEAT %IF LAST SEP = ';' %THEN %START N = CURROUT; QUOTES = 0 %UNTIL S = ';' %AND QUOTES = 0 %CYCLE N = N-1; S = BYTEINTEGER(N) QUOTES = QUOTES!!1 %IF S = '''' %REPEAT BYTEINTEGER(N) = NL; LIMIT = N+LINELENGTH LINE BASE = N K = CURROUT+80; M = K %CYCLE L = N+3,1,CURROUT K = K+1; BYTEINTEGER(K) = BYTEINTEGER(L) %REPEAT %CYCLE L = 1,1,MARGIN N = N+1; BYTEINTEGER(N) = ' ' %REPEAT %CYCLE L = M+1,1,K N = N+1; BYTEINTEGER(N) = BYTEINTEGER(L) %REPEAT CURROUT = N LAST SEP = NL ADJUST %RETURN %IF CURROUT+SLENGTH < LIMIT %FINISH NEST(3) = 0 %IF NEST(4) # 0 %AND REC(REM(4)-1) >= 4 CFLAG = 0 %CYCLE J = 1,1,4 N = NEST(J) %IF N > LIM %START N = N+LINE BASE CFLAG = 1 %AND %EXIT %IF N < CURROUT %FINISH %REPEAT %IF CFLAG # 0 %START %IF NEST(J)-MARGIN-SEC MARGIN-SAFETY FACTOR < XES %START K = J %WHILE K < 4 %CYCLE K = K+1 CFLAG = 0 %AND %EXIT %IF NEST(K) # 0 %REPEAT %IF CFLAG = 0 %START L = NEST(K)+LINE BASE J = K %AND N = L %C %IF NEST(K) > LIM %AND L < CURROUT %FINISH %FINISH J = 3 %AND N = NEST(3)+LINE BASE %C %IF J = 4 %AND REM(3) = REM(4)-1 LIM = NEST(J)+SAFETY FACTOR+SEC MARGIN K = CURROUT+80; M = K %CYCLE L = N+1,1,CURROUT K = K+1; BYTEINTEGER(K) = BYTEINTEGER(L) %REPEAT *L_1,N *MVC_1(4,1),CCC *LA_1,4(1) *ST_1,CURROUT *ST_1,LINEBASE %CYCLE J = 1,1,MARGIN+SEC MARGIN CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' ' %REPEAT M = M+1 %IF BYTEINTEGER(M+1) = ' ' %IF BYTEINTEGER(M+1) # '%' %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = '%' %FINISH %CYCLE L = M+1,1,K CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = BYTEINTEGER(L) %REPEAT !?? ADJUST %FINISH %ELSE %START LIM = CURROUT-LINEBASE+SAFETY FACTOR *L_1,CURROUT *MVC_1(4,1),CCC *LA_1,4(1) *ST_1,CURROUT *ST_1,LINE BASE %CYCLE J = 1,1,MARGIN+SEC MARGIN CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' ' %REPEAT PMODE = 128; ! NO LONGER IN RANGE OF '%' %FINISH LIMIT = LINEBASE+LINE LENGTH STATSIZE = STATSIZE-LINELENGTH+MARGIN RPLIM = RPLIM+RPINC %IF STATSIZE+MARGIN >= LINE LENGTH NVAL = 0 %ROUTINE ADJUST %CYCLE J = 1,1,4 %IF NEST(J) <= LIM %THEN NEST(J) = 0 %C %ELSE NEST(J) = HOLD(J)-CURROUT+LINE BASE %REPEAT %END %END %ROUTINE BREAK %SHORTROUTINE CURROUT = CURROUT-2 %UNLESS BYTEINTEGER(CURROUT) = ';' BYTEINTEGER(CURROUT) = NL SIZE = 0; LINE BASE = CURROUT LIMIT = LINE BASE+LINE SIZE NVAL = 0 %END %EXTERNALROUTINE SOAP(%STRING (128) FILES) %SHORTROUTINE %OWNINTEGER MOVEX = X'D2002001', MOVEY = X'10010000' %ROUTINESPEC PERCENT %ROUTINESPEC SPACE %INTEGERNAME MID MARGIN %INTEGER N, P, K, M, Z %BYTEINTEGERARRAYFORMAT NFM(1 : 4) %BYTEINTEGERARRAYNAME NEST %PRINTTEXT 'SOAP'; PRINTCH(7); NEWLINE NEST == ARRAY(ADDR(NVAL),NFM) SET UP FILES(FILES); %RETURN %IF OK = 0 SET OPTIONS; %RETURN %IF OK = 0 MID MARGIN == MARGIN MID MARGIN == RMARGIN %IF COMMENTS RELATIVE = 0 !* 32 16 8 4 2 1 !* STATUS: SPECIAL COMMENT : COMMENT : OWN : END : DOWN : UP TOP: ! HEAD OF MAIN LOOP %CYCLE NVAL = 0 LOOP FLAG = 0 RP = 0; SPT = 0; MODE = 0; STATUS = 0 SAD = TEXTBASE LIMIT = CURROUT+LINELENGTH %IF LAST SEP # ';' INBASE = CURRIN %IF PARSE(0) # 0 %THEN %START ! SYNTAX ?? OWNS: J = CURRIN; QUOTES = 0; K = 0 %UNTIL (S = NL %OR S = ';') %AND (QUOTES = 0 %C %OR K > 300) %CYCLE K = K+1 J = J+1; S = BYTEINTEGER(J) QUOTES = QUOTES!!1 %IF S = '''' %REPEAT SLENGTH = J-CURRIN %IF CURROUT+SLENGTH > LIMIT %AND LAST SEP = ';' %C %THEN %START BREAK STAT = CURROUT+MARGIN %CYCLE J = 1,1,MARGIN CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = ' ' %REPEAT %FINISH %IF OWNFLAG = 0 %THEN %START OWNFLAG = ';' %IF CURROUT+SLENGTH+SAFETY FACTOR > LIMIT %C %THEN %START *L_1,CURROUT *MVC_1(4,1),CCC; ! PUSH IN CONTINUATION *LA_1,4(1) *ST_1,CURROUT *ST_1,LINE BASE %FINISH %FINISH %CYCLE J = 1,1,SLENGTH CURRIN = CURRIN+1; CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = BYTEINTEGER(CURRIN) %REPEAT LAST SEP = BYTEINTEGER(CURRIN) %IF LAST SEP = ';' %THEN %START BYTEINTEGER(CURROUT+1) = ' ' BYTEINTEGER(CURROUT+2) = ' ' CURROUT = CURROUT+2 %FINISH %ELSE LINE BASE = CURROUT %FINISH %ELSE %START PMODE = 128 STATSIZE = CURRIN-INBASE %IF STATSIZE+MARGIN > LINE LENGTH %START RPINC = RP//(STATSIZE//(LINE LENGTH-MARGIN)) RPLIM = RPINC %FINISH %ELSE RPLIM = RP %IF STATUS&11 # 0 %AND LAST SEP = ';' %THEN %START LAST SEP = NL BREAK %FINISH %IF STATUS&136 # 0 %THEN %START ! BLANK LINE OR BLOCK %IF (LEAVE BLANKS # 0 %AND THIS SEP # ';') %C %OR (STATUS&128 # 0 %AND SEP BLOCKS # 0) %C %THEN %START NULL: CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL LINE BASE = CURROUT %FINISH -> TOP %IF STATUS&8 # 0 %AND RP <= 1 ! IN CASE OF LONELY LABELS %FINISH RP = 0 %IF LOOP FLAG # 0 %AND STATUS&1 # 0 %C %AND BYTEINTEGER(CURROUT-1) # NL %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL LINE BASE = CURROUT LIMIT = LIMIT+1 %FINISH %IF STATUS&2 # 0 %THEN %START ! DOWN STATUS = STATUS!64 %C %IF EXTRA MARGIN # 0 %AND STATUS&4 # 0 LEVEL = LEVEL>>1 LEVEL = 1 %IF LEVEL = 0 MARGIN = MARGIN-DELTA MARGIN %IF MLIMIT&1 = 0 MLIMIT = MLIMIT>>1 MARGIN = 0 %IF MARGIN < 0 %FINISH STAT = CURROUT+MARGIN %IF LAST SEP # ';' %WHILE REC(RP+1) = 100 %CYCLE ! DEAL WITH LABELS RP = RP+1 %IF LAST SEP = ';' %OR LAST SEP = ':' %THEN %START N = -2; N = 1 %IF LAST SEP = ':' CURROUT = CURROUT+N; BYTEINTEGER(CURROUT) = NL LINE BASE = CURROUT LIMIT = CURROUT+LINELENGTH STAT = CURROUT+MARGIN LAST SEP = NL %FINISH %IF LABELS RELATIVE # 0 %AND LAST SEP # ':' %C %THEN %START N = LEVEL; M = MARGIN M = M+FIRST DISP %C %IF EXTRA MARGIN # 0 %AND LEVEL = 1 %CYCLE M = M-DELTA MARGIN %EXIT %IF N&1 # 0 N = N>>1 %REPEAT %WHILE M > 0 %CYCLE M = M-1 CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = ' ' %REPEAT %FINISH %CYCLE RP = RP+1; N = REC(RP); %EXIT %IF N = 0 %IF N < 0 %THEN SN = STRINGS(N) %C %ELSE SN = KEYWORD(N)+KEYBASE %CYCLE J = SN+1,1,SN+BYTEINTEGER(SN) CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = BYTEINTEGER(J) %REPEAT %REPEAT %IF CURROUT > STAT %AND STATUS&16 = 0 %THEN %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL LINE BASE = CURROUT LIMIT = CURROUT+LINELENGTH STAT = CURROUT+MARGIN %FINISH LAST SEP = ':' %REPEAT RP = 0 %AND -> NULL %IF STATUS&8 # 0 ! NOW DEAL WITH COMMENTS %IF STATUS&16 # 0 %THEN %START RP = RP+1; DISP = REC(RP) ! STARTING DISP OF INPUT ! COMMENT D = 0; CMODE = 0 J = CURRIN; ! FIND THE END OF THE COMMENT J = J+1 %WHILE BYTEINTEGER(J) # NL %C %AND BYTEINTEGER(J) # ';' CS = J-CURRIN; ! COMMENT SIZE %IF COMMENT FLAG = 0 %C %THEN CSTART = COMMENT TAB %ELSE %START %IF COMMENTS NORMAL # 0 %START CMODE = 1; CSTART = MARGIN %FINISH %ELSE %START %IF LAST SEP = ';' %C %THEN CSTART = COMMENT TAB %ELSE %START %IF DISP = 0 %THEN CSTART = 0 %ELSE %START %IF DISP <= MID MARGIN %C %AND STATUS&32 = 0 %C %THEN CSTART = MARGIN %C %ELSE CSTART = COMMENT TAB %FINISH %FINISH %FINISH %FINISH CSTART = 0 %IF STATUS&32 # 0 %AND LEAVE STARS # 0 SIZE = CURROUT-LINE BASE %IF LAST SEP = ';' %START %IF BYTEINTEGER(CURROUT) = NL %START ! COMMENT AFTER REPEAT+NL LOOP FLAG = 1 LINE BASE = LINE BASE-1 %C %UNTIL BYTEINTEGER(LINE BASE) = NL SIZE = CURROUT-LINE BASE %FINISH CURROUT = CURROUT-2; SIZE = SIZE-2 ! TO REMOVE SPACES AFTER SEMI'S %IF EXTEND COMMENTS # 0 %AND CSTART < SIZE %START P = CSTART; ! REMEMBER IT JUST IN CASE N = EXT NUM; ! NUMBER OF EXTENSION TRIES %CYCLE %EXIT %IF N <= 0 CSTART = CSTART+COMMENT EXTENSION %EXIT %IF CSTART >= SIZE N = N-1 %REPEAT CSTART = P %IF N <= 0 %C %OR CS+CSTART > COMMENT LINE ! RESTORE IT IF TOO LONG %FINISH %IF CSTART < SIZE %START %IF CMODE # 0 %THEN CSTART = 0 %ELSE BREAK %FINISH %ELSE %START D = COMMENT LINE-CSTART-CS %IF D < 0 %AND BREAK COMMENTS = 0 %START CSTART = LINE SIZE-CS BREAK D = 0 %FINISH %FINISH %FINISH %ELSE %START D = COMMENT LINE-CSTART-CS %IF D < 0 %AND BREAKCOMMENTS = 0 %THEN %START CSTART = COMMENT LINE-CS D = 0 %FINISH %FINISH %CYCLE N = CSTART-SIZE %WHILE N > 0 %CYCLE N = N-1; CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = ' ' %REPEAT CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = '!' CURROUT = CURROUT+1 %C %AND BYTEINTEGER(CURROUT) = '*' %C %IF STATUS&32 # 0 P = J %IF D < 0 %START P = J+D P = P-1 %WHILE BYTEINTEGER(P) # ' ' %C %AND BYTEINTEGER(P) # ',' %C %AND BYTEINTEGER(P) # '.' %AND P > CURRIN P = P-1 P = J+D %IF P = CURRIN %FINISH %CYCLE K = CURRIN+1,1,P CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = BYTEINTEGER(K) %REPEAT CURRIN = P %EXIT %IF D >= 0 CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = NL SIZE = 0; D = LINE LENGTH-MARGIN+D %REPEAT BYTEINTEGER(CURROUT) = NL %IF LOOP FLAG # 0 %START LOOP FLAG = 0 CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL %FINISH SIZE = 0; LINE BASE = CURROUT; LAST SEP = NL ! END OF COMMENT HANDLING %FINISH %ELSE %START N = 0 %IF STATUS&64 # 0 %START N = DELTA MARGIN N = MARGIN %IF EXTRA MARGIN # 0 %FINISH STAT = STAT-N CURROUT = CURROUT+1 %C %AND BYTEINTEGER(CURROUT) = ' ' %C %WHILE CURROUT < STAT LIMIT = CURROUT+LINELENGTH-MARGIN+N %C %IF LAST SEP # ';' %CYCLE RP = RP+1; N = REC(RP); %EXIT %IF N = 0 %IF N > 0 %THEN %START SN = KEYWORD(N)+KEYBASE FLAG = KFLAGS(N) Z = SFLAGS(N) SLENGTH = BYTEINTEGER(SN) %FINISH %ELSE %START SN = STRINGS(N) FLAG = 0; Z = 0 SLENGTH = TLENGTH(N) %FINISH %IF RP >= RPLIM %C %OR (SLENGTH+CURROUT > LIMIT %C %AND N <= LAST TEXT) %THEN CONTINUE %IF Z # 0 %START NEST(Z) = CURROUT-LINE BASE REM(Z) = RP %FINISH SPACE %IF FLAG&OPTIONS&15 # 0 %C %OR (PMODE!!FLAG)&128 = 0 PERCENT %IF FLAG&PMODE # 0 !* %CYCLE J=SN+1, 1, SN+BYTEINTEGER(SN) !* CURROUT=CURROUT+1 !* BYTEINTEGER(CURROUT)=BYTEINTEGER(J) !* %REPEAT *L_1,SN *L_2,CURROUT *SLR_3,3 *IC_3,0(1) *EX_3,MOVEX *AR_2,3 *ST_2,CURROUT SPACE %IF FLAG&OPTIONS&120 # 0 PMODE = 128 %UNLESS 0 < N <= LAST TEXT %REPEAT -> OWNS %IF OWNFLAG = 0 CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = THIS SEP LAST SEP = THIS SEP %IF LOOP FLAG # 0 %AND STATUS&2 # 0 %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = NL %FINISH %IF STATUS&1 # 0 %THEN %START ! UP LEVEL = LEVEL<<1 LEVEL = LEVEL!1 %IF STATUS&128 # 0 MLIMIT = MLIMIT<<1 MLIMIT = MLIMIT!1 %C %IF MARGIN >= MAX MARGIN %OR ( %C INDENT BLOCKS = 0 %AND STATUS&128 # 0) %IF MARGIN = 0 %AND EXTRA MARGIN # 0 %C %THEN MARGIN = INITIAL MARGIN %ELSE %START MARGIN = MARGIN+DELTA MARGIN %IF MLIMIT&1 = 0 %FINISH %FINISH %IF LAST SEP = ';' %THEN %START BYTEINTEGER(CURROUT+1) = ' ' CURROUT = CURROUT+2 BYTEINTEGER(CURROUT) = ' ' %FINISH %ELSE LINE BASE = CURROUT %EXIT %IF CURRIN >= ENDOFFILE %OR STATUS&7 = 7 %FINISH %FINISH %REPEAT CLOSE FILES %RETURN %ROUTINE SPACE %IF ' ' # BYTEINTEGER(CURROUT) # NL %C %AND BYTEINTEGER(CURROUT) # '(' %THEN %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' ' PMODE = 128 %FINISH %END %ROUTINE PERCENT %IF PMODE # 0 %THEN %START %IF ' ' # BYTEINTEGER(CURROUT) # NL %C %AND BYTEINTEGER(CURROUT) # '(' %THEN %START CURROUT = CURROUT+1; BYTEINTEGER(CURROUT) = ' ' %FINISH CURROUT = CURROUT+1 BYTEINTEGER(CURROUT) = '%' PMODE = 0 %FINISH %END %END %ROUTINE CONNEKT(%STRING (17) FILE, %INTEGERNAME MODE, FLAG) %INTEGER J J = 0 FDP(CONNEKTEP,FILE,MODE,ADDR(J),FLAG) MODE = J FLAG = 0 %IF FLAG = 5 %END %INTEGERFN PARSE(%INTEGER ENTRY) %SHORTROUTINE %INTEGER SS, SP, TRP, TPT, L %BYTEINTEGER MODES %INTEGERFN PUT SPT = SPT-1 RP = RP+1 REC(RP) = SPT TLENGTH(SPT) = SLENGTH STRINGS(SPT) = SAD STRING(SAD) = ST SAD = SAD+1+BYTEINTEGER(ADDR(ST)) %RESULT = SPT %END %ROUTINE SYM %CYCLE CURRIN = CURRIN+1; S = BYTEINTEGER(CURRIN) MODE = 0 %UNLESS 'A' <= S <= 'Z' %IF S = '%' %THEN MODE = 32 %ELSE %START %IF S # ' ' %THEN %START S = S+MODE %RETURN %IF S # 'C'+32 %C %OR BYTEINTEGER(CURRIN+1) # NL CURRIN = CURRIN+1 MODE = 0 %FINISH SPACES = PACK NAMES %FINISH %REPEAT %END %INTEGERFN CONSTANT %INTEGER T, LIM %INTEGER CS SLENGTH = 0 ST = '' SYM CS = CURRIN %AND ST = ST.TOSTRING(S) %AND SYM %C %WHILE '0' <= S <= '9' %OR S = '.' %OR S = '@' CURRIN = CS %AND %RESULT = PUT %IF ST # '' %IF S = 'M' %OR S = 'X' %OR S = 'B' %THEN %START ST = TOSTRING(S) T = CURRIN SYM CURRIN = T %AND %RESULT = 0 %IF S # '''' %FINISH LIM = CURRIN+255 %WHILE S = '''' %CYCLE %UNTIL S = '''' %OR CURRIN > LIM %CYCLE SLENGTH = BYTEINTEGER(ADDR(ST)) %C %IF S = NL %AND SLENGTH = 0 ST = ST.TOSTRING(S) CURRIN = CURRIN+1 S = BYTEINTEGER(CURRIN) %REPEAT ST = ST.'''' CS = CURRIN SYM %REPEAT SLENGTH = BYTEINTEGER(ADDR(ST)) %IF SLENGTH = 0 CURRIN = CS %AND %RESULT = PUT %IF ST # '' %RESULT = 0 %END %INTEGERFN NAME %INTEGER Z SYM %RESULT = 0 %UNLESS 'A' <= S <= 'Z' ST = '' %CYCLE SPACES = 1 ST = ST.TOSTRING(S) Z = CURRIN SYM SLENGTH = BYTEINTEGER(ADDR(ST)) %AND CURRIN = Z %C %AND %RESULT = PUT %C %UNLESS 'A' <= S <= 'Z' %OR '0' <= S <= '9' ST = ST.' ' %IF SPACES = 0 %REPEAT %END %SWITCH BIP(0 : 15) ! TRP = RP TPT = CURRIN MODES = MODE FAILURE: RP = TRP CURRIN = TPT MODE = MODES ENTRY = ENTRY+1 SP = MAIN(ENTRY) %RESULT = 1 %IF SP = 0 SUCCESS: SP = SP+1 SS = SUB(SP) %RESULT = 0 %IF S S = 0 -> BIP(SS>>12&15) BIP(1): ! SUB-PHRASE -> SUCCESS %IF PARSE(SS&X'FFF') = 0 -> FAILURE BIP(0): ! LITERAL SS = SS&X'FFF' L = LITERAL(SS); ! LENGTH %CYCLE SS = SS+1,1,SS+L SYM -> FAILURE %UNLESS S = LITERAL(SS) %REPEAT -> SUCCESS BIP(15): ! (NAME) -> SUCCESS %IF NAME # 0 -> FAILURE BIP(3): ! CONSTANT -> SUCCESS %IF CONSTANT # 0 -> FAILURE BIP(4): ! (*LOOP) LOOP FLAG = 1 %IF ISOLATE LOOPS # 0 -> SUCCESS BIP(5): ! (UP) STATUS = STATUS!1; -> SUCCESS BIP(6): ! (DOWN) STATUS = STATUS!2; -> SUCCESS BIP(7): ! (END) STATUS = STATUS!4; -> SUCCESS BIP(8): ! (OWN) -> FAILURE %IF LEAVE OWNS # 0 %C %AND BYTEINTEGER(CURRIN) # '*' ! MACHINE CODE OWN FLAG = 0 RP = RP+1; REC(RP) = 0 ! TO FIDDLE THE END OF STAT. THIS SEP = NL -> SUCCESS BIP(10): ! (SPECIAL COMMENT) INBASE = INBASE+1; ! TO SET DISP PROPERLY STATUS = STATUS!32 BIP(9): ! (COMMENT) STATUS = STATUS!16 RP = RP+1; REC(RP) = CURRIN-INBASE-1 -> SUCCESS BIP(11): ! (*DEC) STATUS = STATUS!64 %IF DECS RELATIVE # 0; -> SUCCESS BIP(12): ! (*BLOCK) STATUS = STATUS!64 %IF EXTRA MARGIN # 0 STATUS = STATUS!128; -> SUCCESS BIP(13): ! (*NULL) STATUS = STATUS!8; -> SUCCESS BIP(14): ! (S) SYM -> FAILURE %UNLESS S = NL %OR S = ';' THIS SEP = S THISSEP = NL %IF SPLIT STATS # 0 RP = RP+1 REC(RP) = 0 -> SUCCESS BIP(2): ! <> RP = RP+1 REC(RP) = SS&X'FFF' -> SUCCESS %END %ROUTINE CREATE(%STRING (8) FILE, %INTEGERNAME SIZE, FLAG) FDP(CREATEEP,FILE,SIZE,0,FLAG) SIZE = 3 %IF FLAG = 0 %OR FLAG = 3 %THEN CONNEKT(FILE,SIZE,FLAG) %END %ROUTINE COMPRESS(%STRING (8) FILE) %INTEGER P, F, S, W, X, Y, Z FDP(READEP,FILE,0,ADDR(P),F) %IF F # 0 %THEN %RETURN FDP(INFOEP,FILE,ADDR(W),0,F) S = INTEGER(P); ! SIZE OF FILE S = (S+4095)>>12 FDP(CHANGEEP,FILE,S-X,ADDR(S),F) %END %ROUTINE SET UP FILES(%STRINGNAME S) %SHORTROUTINE %INTEGER FLAG, SIZE OK = 0 INPUT = '' OUTPUT = '' OPTION FILE = '' INPUT = S %UNLESS S -> INPUT.('/').OUTPUT OPTION FILE = '' %UNLESS INPUT -> INPUT.(',').OPTION FILE OUTPUT = INPUT %IF OUTPUT = '' SIZE = 0 FDP(7, INPUT, 0, ADDR(SIZE), FLAG) CURRIN = SIZE %IF FLAG # 0 %THEN %START PRINTSTRING('CANNOT CONNECT '.INPUT); WRITE(FLAG,1) NEWLINE %RETURN %FINISH %IF INTEGER(CURRIN+12) # 0 %THEN %START PRINTSTRING(INPUT.' IS NOT A SOURCE FILE ') %RETURN %FINISH SIZE = INTEGER(CURRIN) %IF SIZE < 10 %THEN %START PRINTSTRING(INPUT.' IS A NULL FILE ') %RETURN %FINISH ENDOFFILE = CURRIN+SIZE ENDOFFILE = ENDOFFILE-1 %WHILE BYTEINTEGER(ENDOFFILE) # NL CURROUT = ((SIZE*6)+4095)>>12;! I HOPE IT'S BIG ENOUGH SEGS = (CURROUT+15)>>4 CREATE('SP#WORK',CURROUT,FLAG) %IF FLAG # 0 %THEN %START %PRINTTEXT 'CANNOT CREATE WORK FILE'; WRITE(FLAG,1) NEWLINE %RETURN %FINISH HEADER = CURROUT CURROUT = CURROUT+16 BYTEINTEGER(CURROUT) = NL CURRIN = CURRIN+15 INTEGER(HEADER) = 1<<16; ! JUST FOR TESTING INTEGER(HEADER+4) = 16 INTEGER(HEADER+8) = SEGS INTEGER(HEADER+12) = 0 OK = 1 %END %ROUTINE CLOSE FILES %ROUTINE NEWGENS %RECORDFORMAT RFM(%INTEGER X, Y, Z, REPLY) %RECORDFORMAT NFM( %C %SHORTINTEGER DSNO, DACT, SSNO, SACT, X1, X2, FLAG, %C %STRING (8) OLD FILE, NEW FILE, %LONGREAL DUMMY) %RECORD P(NFM) %RECORDNAME R(RFM) %INTEGER FLAG FDP(2,'SP#WORK',0,0,FLAG); ! DISCON. WORK FILE R == P; ! FOR REPLIES %CYCLE P = 0; ! CLEAR THE RECORD P_DSNO = 164 P_OLD FILE = 'SP#WORK'; ! OLF FILE NAME P_NEW FILE = OUTPUT; ! NEW FILE NAME ! SVC(P); ! CALL THE SERVICE **1,@P;! ADDRESS OF P TO R1 *LD_0,0(1) *LD_2,8(1) *LD_4,16(1) *LD_6,24(1) *SVC_254 **1,@P *STD_0,0(1) *STD_2,8(1) *STD_4,16(1) *STD_6,24(1) ! %EXIT %UNLESS R_REPLY = 6 %AND FLAG = 0; ! FILE2 STILL CONNECTED FDP(2,OUTPUT,0,0,FLAG) FLAG = 1 %REPEAT %IF R_REPLY = 5 %START; ! FILE2 DOES NOT EXIST R_REPLY = 0 RENAME('SP#WORK,'.OUTPUT) %FINISH %IF R_REPLY # 0 %START PRINTSTRING('RENAME SP#WORK FAILS ') WRITE(R_REPLY,1) NEWLINE %FINISH %ELSE CHERISH(OUTPUT); ! CHERISH OUTPUT FILE FDP(2,INPUT,0,0,FLAG); ! DISCONNECT INPUT FILE %END BYTEINTEGER(CURROUT) = NL INTEGER(HEADER) = CURROUT-HEADER+1 INTEGER(HEADER+4) = 16 INTEGER(HEADER+8) = SEGS INTEGER(HEADER+12) = 0 %IF CHARNO(OUTPUT,1) = '.' %THEN %START %IF OUTPUT = '.TT' %THEN %START LIST('SP#WORK,.TT') DESTROY('SP#WORK') %FINISH %ELSE SEND('SP#WORK,'.OUTPUT) %FINISH %ELSE %START COMPRESS('SP#WORK') NEWGENS %FINISH PRINTCH(7); NEWLINE %END %ROUTINE SET OPTIONS %SHORTROUTINE %STRING (255) S, T %INTEGER J %BYTEINTEGER OPT FLAG %BYTEINTEGERARRAYFORMAT FM(1 : 31) %BYTEINTEGERARRAYNAME WORD %ROUTINE LINE(%STRINGNAME S) %INTEGER J %RETURN %IF OPT FLAG = 0 S = '' %UNTIL S # '' %CYCLE %CYCLE READSYMBOL(J) %UNTIL J # ' ' %EXIT %IF J = NL S = S.TOSTRING(J) %REPEAT %REPEAT %END %ROUTINE SET(%STRINGNAME S) %STRING (255) N, OPT %INTEGER V, K, C, NUM %BYTEINTEGER NOT %CONSTSTRING (2) %ARRAY PARAM(1 : 31) = %C 'IB', 'LB', 'SB', 'TB', 'SK', 'PN', 'SS', 'CN', 'BC', 'LS','JA', 'LR', 'SC', 'DR', 'SL', 'SE', 'IL', 'EM', 'LO', 'CR', 'EC', 'MI', 'LL', 'CT', 'ML', 'CE', 'XN', 'IM', 'SM', 'CL', 'LC' %OWNINTEGER PARAMS = 31, BOOLS = 21 OPT = S NOT = 1; NUM = 0 %IF S -> S.('=').N %THEN %START NUM = -1; V = 0; J = ADDR(N) %CYCLE J = J+1,1,J+LENGTH(N) C = BYTEINTEGER(J)-'0' %UNLESS 0 <= C <= 9 %THEN %START PRINTSTRING(N.' ? ') %RETURN %FINISH V = V*10+C %REPEAT %IF V > 255 %THEN %START PRINTSTRING(N.' ? ') %RETURN %FINISH %FINISH NOT = 0 %IF NUM = 0 %AND S -> ('\').S %CYCLE J = 1,1,PARAMS %IF PARAM(J) = S %THEN %START %IF (BOOLS-J)!!NUM < 0 %THEN %START PRINTSTRING(S.'= ? ') %RETURN %FINISH K = NOT; K = V %IF NUM < 0 WORD(J) = K OPLIST = OPLIST.' '.OPT %RETURN %FINISH %REPEAT PRINTSTRING(S.' ? ') %END OPLIST = ' !! OPTIONS:' WORD == ARRAY(ADDR(ISOLATE BRACKETS),FM) OK = 1 %IF OPTIONFILE # '' %THEN %START OK = 0 OPT FLAG = 0 %IF OPTIONFILE -> ('[').S %THEN %START OPT FLAG = 0 %IF S -> S.(']') S = S.',*' %FINISH %ELSE %START OPT FLAG = 1 PROMPT('OPTIONS:') DEFINE('ST76,'.OPTION FILE) SELECTINPUT(76) %FINISH %CYCLE LINE(S) SET(T) %WHILE S -> T.(',').S %EXIT %IF S = '*' SET(S) %REPEAT %IF CHARNO(OUTPUT,1) = '.' %START ! SHOW OPTIONS STRING(CURROUT) = OPLIST.' ' BYTEINTEGER(CURROUT) = NL CURROUT = CURROUT+LENGTH(OPLIST)+2 %FINISH %FINISH DELTA MARGIN = MI LINE LENGTH = LL COMMENT TAB = CT MAXMARGIN = ML SEC MARGIN = SECONDARY MARGIN %UNLESS 40 < LINELENGTH < 133 %THEN %START %PRINTTEXT 'INVALID LINE LENGTH ' %RETURN %FINISH %UNLESS 0 < COMMENT TAB < LINE LENGTH-20 %THEN %START %PRINTTEXT 'INVALID COMMENT MARGIN ' %RETURN %FINISH %UNLESS MAX MARGIN < LINE LENGTH-20 %THEN %START %PRINTTEXT 'INVALID MAX MARGIN ' %RETURN %FINISH %UNLESS DELTA MARGIN <= MAX MARGIN<<1 %START %PRINTTEXT 'INVALID MARGIN INCREMENT ' %RETURN %FINISH %IF SEC MARGIN > DELTA MARGIN<<1+SAFETY FACTOR %START %PRINTTEXT 'INVALID SECONDARY MARGIN ' %RETURN %FINISH %IF INITIAL MARGIN > 30 %THEN %START %PRINTTEXT 'INVALID INITIAL MARGIN ' %RETURN %FINISH MARGIN = 1 %IF DELTA MARGIN = 0 %AND SEC MARGIN = 0 %C %AND INITIAL MARGIN = 0 MARGIN = INITIAL MARGIN %IF EXTRA MARGIN # 0 SPLIT CONDS = 1 %IF SPLIT KEYWORDS # 0 COMMENT LENGTH = LINE LENGTH-COMMENT TAB TEXTBASE = ADDR(SYMFILE(0)) KEYBASE = ADDR(KEYSYMS(1)) RMARGIN = COMMENT LIMIT FULL LINE = LINE LENGTH LINE LENGTH = LINE LENGTH-SAFETY FACTOR OPTIONS = 17*SPLIT KEYWORDS+34*SPLIT CONDS+SPACE LISTS<<6 %C +ISOLATE BRACKETS<<2+SPACE EQUALS<<3+128 LINE BASE = CURROUT; SIZE = 0 COMMENT FLAG = JUSTIFY ALL<<1!COMMENTSNORMAL COMMENT FLAG = COMMENT FLAG!!B'010' FIRST DISP = DELTA MARGIN-INITIAL MARGIN COMMENT LINE = FULL LINE %IF COMMENT LINE = 0 OK = 1 %END %ENDOFFILE