home *** CD-ROM | disk | FTP | other *** search
Unknown | 1993-03-25 | 18.3 KB |
open in:
MacOS 8.1
|
Win98
|
DOS
view JSON data
|
view as text
This file was not able to be converted.
This format is not currently supported by dexvert.
Confidence | Program | Detection | Match Type | Support
|
---|
66%
| dexvert
| SoundTracker Module (music/soundTracker)
| ext
| Supported |
66%
| dexvert
| Chip Tracker Module (music/chipTracker)
| ext
| Supported |
66%
| dexvert
| Protracker Module (music/mod)
| ext
| Supported |
66%
| dexvert
| Octalyser Module (music/octalyser)
| ext
| Supported |
66%
| dexvert
| Star Tracker/StarTrekker Module (music/starTracker)
| ext
| Supported |
1%
| dexvert
| Multiplan spreadsheet (document/multiplanSpreadsheet)
| ext
| Unsupported |
1%
| dexvert
| PollyTracker Module (music/pollyTracker)
| ext
| Unsupported |
1%
| dexvert
| Black Viper packed music (music/blackViperPackedMusic)
| ext
| Unsupported |
100%
| file
| data
| default
| |
100%
| gt2
| Kopftext: 'oBSortDemo.Mod'
| default (weak)
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 6f 42 53 6f 72 74 44 65 | 6d 6f 2e 4d 6f 64 00 4f |oBSortDe|mo.Mod.O|
|00000010| 52 54 44 45 4d 4f 2e 4d | 4f 44 00 00 00 00 00 00 |RTDEMO.M|OD......|
|00000020| 00 00 01 f0 23 00 00 00 | 01 53 79 6e 74 61 78 31 |....#...|.Syntax1|
|00000030| 30 2e 53 63 6e 2e 46 6e | 74 00 0f 00 f4 48 00 00 |0.Scn.Fn|t....H..|
|00000040| 00 f4 48 00 00 4d 4f 44 | 55 4c 45 20 53 6f 72 74 |..H..MOD|ULE Sort|
|00000050| 44 65 6d 6f 3b 20 28 2a | 20 57 2e 57 65 63 6b 20 |Demo; (*| W.Weck |
|00000060| 32 31 20 4a 61 6e 20 39 | 33 2c 20 53 6d 6f 6f 74 |21 Jan 9|3, Smoot|
|00000070| 68 53 6f 72 74 20 64 75 | 65 20 74 6f 20 45 2e 57 |hSort du|e to E.W|
|00000080| 2e 44 69 6a 6b 73 74 72 | 61 2c 20 4a 2e 47 75 74 |.Dijkstr|a, J.Gut|
|00000090| 6b 6e 65 63 68 74 20 2a | 29 0d 0d 20 20 49 4d 50 |knecht *|).. IMP|
|000000a0| 4f 52 54 20 4f 62 65 72 | 6f 6e 2c 20 4d 65 6e 75 |ORT Ober|on, Menu|
|000000b0| 56 69 65 77 65 72 73 2c | 20 56 69 65 77 65 72 73 |Viewers,| Viewers|
|000000c0| 2c 20 54 65 78 74 46 72 | 61 6d 65 73 2c 20 54 65 |, TextFr|ames, Te|
|000000d0| 78 74 73 2c 20 44 69 73 | 70 6c 61 79 2c 20 49 6e |xts, Dis|play, In|
|000000e0| 70 75 74 3b 0d 0d 20 20 | 43 4f 4e 53 54 0d 20 20 |put;.. |CONST. |
|000000f0| 20 20 4d 69 6e 4c 65 66 | 74 20 3d 20 32 30 3b 20 | MinLef|t = 20; |
|00000100| 50 65 72 53 65 63 20 3d | 20 49 6e 70 75 74 2e 54 |PerSec =| Input.T|
|00000110| 69 6d 65 55 6e 69 74 3b | 20 57 61 69 74 43 6e 74 |imeUnit;| WaitCnt|
|00000120| 20 3d 20 32 3b 20 4d 6f | 75 73 65 50 6f 6c 6c 46 | = 2; Mo|usePollF|
|00000130| 72 65 71 20 3d 20 36 34 | 3b 0d 20 20 20 20 4e 20 |req = 64|;. N |
|00000140| 3d 20 36 30 30 3b 20 53 | 69 7a 65 20 3d 20 31 3b |= 600; S|ize = 1;|
|00000150| 20 44 6f 74 4e 20 3d 20 | 4e 20 44 49 56 20 34 3b | DotN = |N DIV 4;|
|00000160| 20 44 6f 74 53 69 7a 65 | 20 3d 20 53 69 7a 65 20 | DotSize| = Size |
|00000170| 2a 20 34 3b 0d 20 20 20 | 20 4d 65 6e 75 20 3d 20 |* 4;. | Menu = |
|00000180| 22 53 79 73 74 65 6d 2e | 43 6c 6f 73 65 20 20 53 |"System.|Close S|
|00000190| 79 73 74 65 6d 2e 47 72 | 6f 77 20 22 3b 0d 0d 20 |ystem.Gr|ow ";.. |
|000001a0| 20 54 59 50 45 0d 20 20 | 20 20 44 61 74 61 20 3d | TYPE. | Data =|
|000001b0| 20 50 4f 49 4e 54 45 52 | 20 54 4f 20 44 61 74 61 | POINTER| TO Data|
|000001c0| 44 65 73 63 3b 0d 20 20 | 20 20 44 61 74 61 44 65 |Desc;. | DataDe|
|000001d0| 73 63 20 3d 20 52 45 43 | 4f 52 44 0d 20 20 20 20 |sc = REC|ORD. |
|000001e0| 20 20 6c 65 6e 3a 20 49 | 4e 54 45 47 45 52 3b 0d | len: I|NTEGER;.|
|000001f0| 20 20 20 20 20 20 6c 69 | 73 74 2c 20 6c 61 73 74 | li|st, last|
|00000200| 52 61 6e 64 6f 6d 3a 20 | 41 52 52 41 59 20 4e 20 |Random: |ARRAY N |
|00000210| 4f 46 20 49 4e 54 45 47 | 45 52 0d 20 20 20 20 45 |OF INTEG|ER. E|
|00000220| 4e 44 3b 0d 0d 20 20 20 | 20 46 72 61 6d 65 20 3d |ND;.. | Frame =|
|00000230| 20 50 4f 49 4e 54 45 52 | 20 54 4f 20 46 72 61 6d | POINTER| TO Fram|
|00000240| 65 44 65 73 63 3b 0d 20 | 20 20 20 46 72 61 6d 65 |eDesc;. | Frame|
|00000250| 44 65 73 63 20 3d 20 52 | 45 43 4f 52 44 28 44 69 |Desc = R|ECORD(Di|
|00000260| 73 70 6c 61 79 2e 46 72 | 61 6d 65 44 65 73 63 29 |splay.Fr|ameDesc)|
|00000270| 0d 20 20 20 20 20 20 64 | 61 74 61 3a 20 44 61 74 |. d|ata: Dat|
|00000280| 61 3b 0d 20 20 20 20 20 | 20 75 70 64 61 74 65 52 |a;. | updateR|
|00000290| 65 6f 72 64 65 72 3a 20 | 50 52 4f 43 45 44 55 52 |eorder: |PROCEDUR|
|000002a0| 45 20 28 66 3a 20 46 72 | 61 6d 65 29 3b 0d 20 20 |E (f: Fr|ame);. |
|000002b0| 20 20 20 20 75 70 64 61 | 74 65 53 77 61 70 3a 20 | upda|teSwap: |
|000002c0| 50 52 4f 43 45 44 55 52 | 45 20 28 66 3a 20 46 72 |PROCEDUR|E (f: Fr|
|000002d0| 61 6d 65 3b 20 69 2c 20 | 6a 3a 20 49 4e 54 45 47 |ame; i, |j: INTEG|
|000002e0| 45 52 29 3b 0d 20 20 20 | 20 20 20 6d 6f 64 69 66 |ER);. | modif|
|000002f0| 79 3a 20 50 52 4f 43 45 | 44 55 52 45 20 28 66 3a |y: PROCE|DURE (f:|
|00000300| 20 46 72 61 6d 65 3b 20 | 69 64 2c 20 64 79 2c 20 | Frame; |id, dy, |
|00000310| 79 2c 20 68 3a 20 49 4e | 54 45 47 45 52 29 0d 20 |y, h: IN|TEGER). |
|00000320| 20 20 20 45 4e 44 3b 0d | 0d 20 20 52 65 6f 72 64 | END;.|. Reord|
|00000330| 65 72 4d 73 67 20 3d 20 | 52 45 43 4f 52 44 28 44 |erMsg = |RECORD(D|
|00000340| 69 73 70 6c 61 79 2e 46 | 72 61 6d 65 4d 73 67 29 |isplay.F|rameMsg)|
|00000350| 0d 20 20 20 20 64 61 74 | 61 3a 20 44 61 74 61 0d |. dat|a: Data.|
|00000360| 20 20 45 4e 44 3b 0d 0d | 20 20 53 77 61 70 4d 73 | END;..| SwapMs|
|00000370| 67 20 3d 20 52 45 43 4f | 52 44 28 44 69 73 70 6c |g = RECO|RD(Displ|
|00000380| 61 79 2e 46 72 61 6d 65 | 4d 73 67 29 0d 20 20 20 |ay.Frame|Msg). |
|00000390| 20 64 61 74 61 3a 20 44 | 61 74 61 3b 0d 20 20 20 | data: D|ata;. |
|000003a0| 20 69 2c 20 6a 3a 20 49 | 4e 54 45 47 45 52 0d 20 | i, j: I|NTEGER. |
|000003b0| 20 45 4e 44 3b 0d 0d 20 | 20 56 41 52 0d 20 20 20 | END;.. | VAR. |
|000003c0| 20 73 65 65 64 2c 20 64 | 65 6c 61 79 2c 20 63 6f | seed, d|elay, co|
|000003d0| 6d 70 61 72 69 73 6f 6e | 73 2c 20 73 77 61 70 73 |mparison|s, swaps|
|000003e0| 2c 20 74 69 6d 65 3a 20 | 4c 4f 4e 47 49 4e 54 3b |, time: |LONGINT;|
|000003f0| 0d 20 20 20 20 77 3a 20 | 54 65 78 74 73 2e 57 72 |. w: |Texts.Wr|
|00000400| 69 74 65 72 3b 0d 0d 28 | 2a 20 46 72 61 6d 65 73 |iter;..(|* Frames|
|00000410| 20 2a 29 0d 0d 20 20 50 | 52 4f 43 45 44 55 52 45 | *).. P|ROCEDURE|
|00000420| 20 52 65 70 6c 43 6f 6e | 73 74 28 66 3a 20 44 69 | ReplCon|st(f: Di|
|00000430| 73 70 6c 61 79 2e 46 72 | 61 6d 65 44 65 73 63 3b |splay.Fr|ameDesc;|
|00000440| 20 63 6f 6c 2c 20 78 2c | 20 79 2c 20 77 2c 20 68 | col, x,| y, w, h|
|00000450| 2c 20 6d 6f 64 65 3a 20 | 49 4e 54 45 47 45 52 29 |, mode: |INTEGER)|
|00000460| 3b 0d 20 20 20 20 56 41 | 52 20 61 3a 20 49 4e 54 |;. VA|R a: INT|
|00000470| 45 47 45 52 3b 0d 20 20 | 42 45 47 49 4e 0d 20 20 |EGER;. |BEGIN. |
|00000480| 20 20 61 20 3a 3d 20 66 | 2e 58 20 2d 20 78 3b 20 | a := f|.X - x; |
|00000490| 49 46 20 61 20 3e 20 30 | 20 54 48 45 4e 20 78 20 |IF a > 0| THEN x |
|000004a0| 3a 3d 20 66 2e 58 3b 20 | 77 20 3a 3d 20 77 20 2d |:= f.X; |w := w -|
|000004b0| 20 61 20 45 4e 44 3b 0d | 20 20 20 20 61 20 3a 3d | a END;.| a :=|
|000004c0| 20 66 2e 58 20 2b 20 66 | 2e 57 20 2d 20 78 3b 20 | f.X + f|.W - x; |
|000004d0| 49 46 20 61 20 3c 20 77 | 20 54 48 45 4e 20 77 20 |IF a < w| THEN w |
|000004e0| 3a 3d 20 61 20 45 4e 44 | 3b 0d 20 20 20 20 61 20 |:= a END|;. a |
|000004f0| 3a 3d 20 66 2e 59 20 2d | 20 79 3b 20 49 46 20 61 |:= f.Y -| y; IF a|
|00000500| 20 3e 20 30 20 54 48 45 | 4e 20 79 20 3a 3d 20 66 | > 0 THE|N y := f|
|00000510| 2e 59 3b 20 68 20 3a 3d | 20 68 20 2d 20 61 20 45 |.Y; h :=| h - a E|
|00000520| 4e 44 3b 0d 20 20 20 20 | 61 20 3a 3d 20 66 2e 59 |ND;. |a := f.Y|
|00000530| 20 2b 20 66 2e 48 20 2d | 20 79 3b 20 49 46 20 61 | + f.H -| y; IF a|
|00000540| 20 3c 20 68 20 54 48 45 | 4e 20 68 20 3a 3d 20 61 | < h THE|N h := a|
|00000550| 20 45 4e 44 3b 0d 20 20 | 20 20 49 46 20 28 77 20 | END;. | IF (w |
|00000560| 3e 20 30 29 20 26 20 28 | 68 20 3e 20 30 29 20 54 |> 0) & (|h > 0) T|
|00000570| 48 45 4e 20 44 69 73 70 | 6c 61 79 2e 52 65 70 6c |HEN Disp|lay.Repl|
|00000580| 43 6f 6e 73 74 28 63 6f | 6c 2c 20 78 2c 20 79 2c |Const(co|l, x, y,|
|00000590| 20 77 2c 20 68 2c 20 6d | 6f 64 65 29 20 45 4e 44 | w, h, m|ode) END|
|000005a0| 0d 20 20 45 4e 44 20 52 | 65 70 6c 43 6f 6e 73 74 |. END R|eplConst|
|000005b0| 3b 0d 0d 20 20 50 52 4f | 43 45 44 55 52 45 2a 20 |;.. PRO|CEDURE* |
|000005c0| 55 70 64 61 74 65 52 65 | 6f 72 64 65 72 28 66 3a |UpdateRe|order(f:|
|000005d0| 20 46 72 61 6d 65 29 3b | 0d 20 20 20 20 56 41 52 | Frame);|. VAR|
|000005e0| 20 6c 65 66 74 2c 20 78 | 30 2c 20 79 30 2c 20 69 | left, x|0, y0, i|
|000005f0| 3a 20 49 4e 54 45 47 45 | 52 3b 20 64 61 74 61 3a |: INTEGE|R; data:|
|00000600| 20 44 61 74 61 3b 0d 20 | 20 42 45 47 49 4e 20 4f | Data;. | BEGIN O|
|00000610| 62 65 72 6f 6e 2e 52 65 | 6d 6f 76 65 4d 61 72 6b |beron.Re|moveMark|
|00000620| 73 28 66 2e 58 2c 20 66 | 2e 59 2c 20 66 2e 57 2c |s(f.X, f|.Y, f.W,|
|00000630| 20 66 2e 48 29 3b 0d 20 | 20 20 20 6c 65 66 74 20 | f.H);. | left |
|00000640| 3a 3d 20 28 66 2e 57 20 | 2d 20 4e 20 2a 20 53 69 |:= (f.W |- N * Si|
|00000650| 7a 65 20 2d 20 32 29 20 | 44 49 56 20 32 3b 0d 20 |ze - 2) |DIV 2;. |
|00000660| 20 20 20 49 46 20 6c 65 | 66 74 20 3c 20 4d 69 6e | IF le|ft < Min|
|00000670| 4c 65 66 74 20 54 48 45 | 4e 20 6c 65 66 74 20 3a |Left THE|N left :|
|00000680| 3d 20 4d 69 6e 4c 65 66 | 74 20 45 4e 44 3b 0d 20 |= MinLef|t END;. |
|00000690| 20 20 20 78 30 20 3a 3d | 20 66 2e 58 20 2b 20 6c | x0 :=| f.X + l|
|000006a0| 65 66 74 3b 20 79 30 20 | 3a 3d 20 66 2e 59 20 2b |eft; y0 |:= f.Y +|
|000006b0| 20 66 2e 48 20 2d 20 4d | 69 6e 4c 65 66 74 20 2d | f.H - M|inLeft -|
|000006c0| 20 4e 20 2a 20 53 69 7a | 65 20 2b 20 31 3b 0d 20 | N * Siz|e + 1;. |
|000006d0| 20 20 20 52 65 70 6c 43 | 6f 6e 73 74 28 66 5e 2c | ReplC|onst(f^,|
|000006e0| 20 44 69 73 70 6c 61 79 | 2e 62 6c 61 63 6b 2c 20 | Display|.black, |
|000006f0| 78 30 2c 20 79 30 2c 20 | 4e 20 2a 20 53 69 7a 65 |x0, y0, |N * Size|
|00000700| 2c 20 4e 20 2a 20 53 69 | 7a 65 2c 20 44 69 73 70 |, N * Si|ze, Disp|
|00000710| 6c 61 79 2e 72 65 70 6c | 61 63 65 29 3b 0d 20 20 |lay.repl|ace);. |
|00000720| 20 20 69 20 3a 3d 20 4e | 3b 20 64 61 74 61 20 3a | i := N|; data :|
|00000730| 3d 20 66 2e 64 61 74 61 | 3b 0d 20 20 20 20 52 45 |= f.data|;. RE|
|00000740| 50 45 41 54 20 44 45 43 | 28 69 29 3b 0d 20 20 20 |PEAT DEC|(i);. |
|00000750| 20 20 20 52 65 70 6c 43 | 6f 6e 73 74 28 66 5e 2c | ReplC|onst(f^,|
|00000760| 20 44 69 73 70 6c 61 79 | 2e 77 68 69 74 65 2c 20 | Display|.white, |
|00000770| 78 30 20 2b 20 69 20 2a | 20 53 69 7a 65 2c 20 79 |x0 + i *| Size, y|
|00000780| 30 2c 20 53 69 7a 65 2c | 20 28 64 61 74 61 2e 6c |0, Size,| (data.l|
|00000790| 69 73 74 5b 69 5d 20 2b | 20 31 29 20 2a 20 53 69 |ist[i] +| 1) * Si|
|000007a0| 7a 65 2c 20 44 69 73 70 | 6c 61 79 2e 72 65 70 6c |ze, Disp|lay.repl|
|000007b0| 61 63 65 29 0d 20 20 20 | 20 55 4e 54 49 4c 20 69 |ace). | UNTIL i|
|000007c0| 20 3d 20 30 0d 20 20 45 | 4e 44 20 55 70 64 61 74 | = 0. E|ND Updat|
|000007d0| 65 52 65 6f 72 64 65 72 | 3b 0d 0d 20 20 50 52 4f |eReorder|;.. PRO|
|000007e0| 43 45 44 55 52 45 2a 20 | 55 70 64 61 74 65 53 77 |CEDURE* |UpdateSw|
|000007f0| 61 70 28 66 3a 20 46 72 | 61 6d 65 3b 20 69 2c 20 |ap(f: Fr|ame; i, |
|00000800| 6a 3a 20 49 4e 54 45 47 | 45 52 29 3b 0d 20 20 20 |j: INTEG|ER);. |
|00000810| 20 56 41 52 20 6c 65 66 | 74 2c 20 78 30 2c 20 79 | VAR lef|t, x0, y|
|00000820| 30 2c 20 68 69 2c 20 68 | 6a 2c 20 68 3a 20 49 4e |0, hi, h|j, h: IN|
|00000830| 54 45 47 45 52 3b 0d 20 | 20 42 45 47 49 4e 20 4f |TEGER;. | BEGIN O|
|00000840| 62 65 72 6f 6e 2e 52 65 | 6d 6f 76 65 4d 61 72 6b |beron.Re|moveMark|
|00000850| 73 28 66 2e 58 2c 20 66 | 2e 59 2c 20 66 2e 57 2c |s(f.X, f|.Y, f.W,|
|00000860| 20 66 2e 48 29 3b 0d 20 | 20 20 20 6c 65 66 74 20 | f.H);. | left |
|00000870| 3a 3d 20 28 66 2e 57 20 | 2d 20 4e 20 2a 20 53 69 |:= (f.W |- N * Si|
|00000880| 7a 65 20 2d 20 32 29 20 | 44 49 56 20 32 3b 0d 20 |ze - 2) |DIV 2;. |
|00000890| 20 20 20 49 46 20 6c 65 | 66 74 20 3c 20 4d 69 6e | IF le|ft < Min|
|000008a0| 4c 65 66 74 20 54 48 45 | 4e 20 6c 65 66 74 20 3a |Left THE|N left :|
|000008b0| 3d 20 4d 69 6e 4c 65 66 | 74 20 45 4e 44 3b 0d 20 |= MinLef|t END;. |
|000008c0| 20 20 20 78 30 20 3a 3d | 20 66 2e 58 20 2b 20 6c | x0 :=| f.X + l|
|000008d0| 65 66 74 3b 20 79 30 20 | 3a 3d 20 66 2e 59 20 2b |eft; y0 |:= f.Y +|
|000008e0| 20 66 2e 48 20 2d 20 4d | 69 6e 4c 65 66 74 20 2d | f.H - M|inLeft -|
|000008f0| 20 4e 20 2a 20 53 69 7a | 65 20 2b 20 31 3b 0d 20 | N * Siz|e + 1;. |
|00000900| 20 20 20 68 69 20 3a 3d | 20 28 66 2e 64 61 74 61 | hi :=| (f.data|
|00000910| 2e 6c 69 73 74 5b 69 5d | 20 2b 20 31 29 20 2a 20 |.list[i]| + 1) * |
|00000920| 53 69 7a 65 3b 20 68 6a | 20 3a 3d 20 28 66 2e 64 |Size; hj| := (f.d|
|00000930| 61 74 61 2e 6c 69 73 74 | 5b 6a 5d 20 2b 20 31 29 |ata.list|[j] + 1)|
|00000940| 20 2a 20 53 69 7a 65 3b | 0d 20 20 20 20 49 46 20 | * Size;|. IF |
|00000950| 68 69 20 3c 20 68 6a 20 | 54 48 45 4e 20 79 30 20 |hi < hj |THEN y0 |
|00000960| 3a 3d 20 79 30 20 2b 20 | 68 69 3b 20 68 20 3a 3d |:= y0 + |hi; h :=|
|00000970| 20 68 6a 20 2d 20 68 69 | 20 45 4c 53 45 20 79 30 | hj - hi| ELSE y0|
|00000980| 20 3a 3d 20 79 30 20 2b | 20 68 6a 3b 20 68 20 3a | := y0 +| hj; h :|
|00000990| 3d 20 68 69 20 2d 20 68 | 6a 20 45 4e 44 3b 0d 20 |= hi - h|j END;. |
|000009a0| 20 20 20 52 65 70 6c 43 | 6f 6e 73 74 28 66 5e 2c | ReplC|onst(f^,|
|000009b0| 20 44 69 73 70 6c 61 79 | 2e 77 68 69 74 65 2c 20 | Display|.white, |
|000009c0| 78 30 20 2b 20 69 20 2a | 20 53 69 7a 65 2c 20 79 |x0 + i *| Size, y|
|000009d0| 30 2c 20 53 69 7a 65 2c | 20 68 2c 20 44 69 73 70 |0, Size,| h, Disp|
|000009e0| 6c 61 79 2e 69 6e 76 65 | 72 74 29 3b 0d 20 20 20 |lay.inve|rt);. |
|000009f0| 20 52 65 70 6c 43 6f 6e | 73 74 28 66 5e 2c 20 44 | ReplCon|st(f^, D|
|00000a00| 69 73 70 6c 61 79 2e 77 | 68 69 74 65 2c 20 78 30 |isplay.w|hite, x0|
|00000a10| 20 2b 20 6a 20 2a 20 53 | 69 7a 65 2c 20 79 30 2c | + j * S|ize, y0,|
|00000a20| 20 53 69 7a 65 2c 20 68 | 2c 20 44 69 73 70 6c 61 | Size, h|, Displa|
|00000a30| 79 2e 69 6e 76 65 72 74 | 29 0d 20 20 45 4e 44 20 |y.invert|). END |
|00000a40| 55 70 64 61 74 65 53 77 | 61 70 3b 0d 0d 20 20 50 |UpdateSw|ap;.. P|
|00000a50| 52 4f 43 45 44 55 52 45 | 2a 20 4d 6f 64 69 66 79 |ROCEDURE|* Modify|
|00000a60| 28 66 3a 20 46 72 61 6d | 65 3b 20 69 64 2c 20 64 |(f: Fram|e; id, d|
|00000a70| 79 2c 20 79 2c 20 68 3a | 20 49 4e 54 45 47 45 52 |y, y, h:| INTEGER|
|00000a80| 29 3b 0d 20 20 20 20 56 | 41 52 20 78 30 2c 20 79 |);. V|AR x0, y|
|00000a90| 30 2c 20 69 2c 20 6c 65 | 66 74 3a 20 49 4e 54 45 |0, i, le|ft: INTE|
|00000aa0| 47 45 52 3b 20 64 61 74 | 61 3a 20 44 61 74 61 3b |GER; dat|a: Data;|
|00000ab0| 20 63 6c 69 70 3a 20 44 | 69 73 70 6c 61 79 2e 46 | clip: D|isplay.F|
|00000ac0| 72 61 6d 65 44 65 73 63 | 3b 0d 20 20 42 45 47 49 |rameDesc|;. BEGI|
|00000ad0| 4e 0d 20 20 20 20 49 46 | 20 69 64 20 3d 20 4d 65 |N. IF| id = Me|
|00000ae0| 6e 75 56 69 65 77 65 72 | 73 2e 72 65 64 75 63 65 |nuViewer|s.reduce|
|00000af0| 20 54 48 45 4e 0d 20 20 | 20 20 20 20 49 46 20 64 | THEN. | IF d|
|00000b00| 79 20 23 20 30 20 54 48 | 45 4e 20 44 69 73 70 6c |y # 0 TH|EN Displ|
|00000b10| 61 79 2e 43 6f 70 79 42 | 6c 6f 63 6b 28 66 2e 58 |ay.CopyB|lock(f.X|
|00000b20| 2c 20 66 2e 59 20 2b 20 | 64 79 2c 20 66 2e 57 2c |, f.Y + |dy, f.W,|
|00000b30| 20 68 2c 20 66 2e 58 2c | 20 79 2c 20 44 69 73 70 | h, f.X,| y, Disp|
|00000b40| 6c 61 79 2e 72 65 70 6c | 61 63 65 29 20 45 4e 44 |lay.repl|ace) END|
|00000b50| 3b 0d 20 20 20 20 20 20 | 66 2e 59 20 3a 3d 20 79 |;. |f.Y := y|
|00000b60| 3b 20 66 2e 48 20 3a 3d | 20 68 0d 20 20 20 20 45 |; f.H :=| h. E|
|00000b70| 4c 53 45 0d 20 20 20 20 | 20 20 49 46 20 64 79 20 |LSE. | IF dy |
|00000b80| 23 20 30 20 54 48 45 4e | 20 44 69 73 70 6c 61 79 |# 0 THEN| Display|
|00000b90| 2e 43 6f 70 79 42 6c 6f | 63 6b 28 66 2e 58 2c 20 |.CopyBlo|ck(f.X, |
|00000ba0| 66 2e 59 2c 20 66 2e 57 | 2c 20 66 2e 48 2c 20 66 |f.Y, f.W|, f.H, f|
|00000bb0| 2e 58 2c 20 66 2e 59 20 | 2b 20 64 79 2c 20 44 69 |.X, f.Y |+ dy, Di|
|00000bc0| 73 70 6c 61 79 2e 72 65 | 70 6c 61 63 65 29 20 45 |splay.re|place) E|
|00000bd0| 4e 44 3b 0d 20 20 20 20 | 20 20 63 6c 69 70 2e 58 |ND;. | clip.X|
|00000be0| 20 3a 3d 20 66 2e 58 3b | 20 63 6c 69 70 2e 57 20 | := f.X;| clip.W |
|00000bf0| 3a 3d 20 66 2e 57 3b 20 | 63 6c 69 70 2e 59 20 3a |:= f.W; |clip.Y :|
|00000c00| 3d 20 79 3b 20 63 6c 69 | 70 2e 48 20 3a 3d 20 68 |= y; cli|p.H := h|
|00000c10| 20 2d 20 66 2e 48 3b 0d | 20 20 20 20 20 20 66 2e | - f.H;.| f.|
|00000c20| 59 20 3a 3d 20 79 3b 20 | 66 2e 48 20 3a 3d 20 68 |Y := y; |f.H := h|
|00000c30| 3b 0d 0d 20 20 20 20 20 | 20 6c 65 66 74 20 3a 3d |;.. | left :=|
|00000c40| 20 28 66 2e 57 20 2d 20 | 4e 20 2a 20 53 69 7a 65 | (f.W - |N * Size|
|00000c50| 20 2d 20 32 29 20 44 49 | 56 20 32 3b 0d 20 20 20 | - 2) DI|V 2;. |
|00000c60| 20 20 20 49 46 20 6c 65 | 66 74 20 3c 20 4d 69 6e | IF le|ft < Min|
|00000c70| 4c 65 66 74 20 54 48 45 | 4e 20 6c 65 66 74 20 3a |Left THE|N left :|
|00000c80| 3d 20 4d 69 6e 4c 65 66 | 74 20 45 4e 44 3b 0d 20 |= MinLef|t END;. |
|00000c90| 20 20 20 20 20 78 30 20 | 3a 3d 20 66 2e 58 20 2b | x0 |:= f.X +|
|00000ca0| 20 6c 65 66 74 3b 20 79 | 30 20 3a 3d 20 66 2e 59 | left; y|0 := f.Y|
|00000cb0| 20 2b 20 66 2e 48 20 2d | 20 4d 69 6e 4c 65 66 74 | + f.H -| MinLeft|
|00000cc0| 20 2d 20 4e 20 2a 20 53 | 69 7a 65 20 2b 20 31 3b | - N * S|ize + 1;|
|00000cd0| 0d 20 20 20 20 20 20 52 | 65 70 6c 43 6f 6e 73 74 |. R|eplConst|
|00000ce0| 28 63 6c 69 70 2c 20 44 | 69 73 70 6c 61 79 2e 62 |(clip, D|isplay.b|
|00000cf0| 6c 61 63 6b 2c 20 66 2e | 58 2c 20 66 2e 59 2c 20 |lack, f.|X, f.Y, |
|00000d00| 66 2e 57 2c 20 66 2e 48 | 2c 20 44 69 73 70 6c 61 |f.W, f.H|, Displa|
|00000d10| 79 2e 72 65 70 6c 61 63 | 65 29 3b 0d 20 20 20 20 |y.replac|e);. |
|00000d20| 20 20 52 65 70 6c 43 6f | 6e 73 74 28 63 6c 69 70 | ReplCo|nst(clip|
|00000d30| 2c 20 44 69 73 70 6c 61 | 79 2e 77 68 69 74 65 2c |, Displa|y.white,|
|00000d40| 20 78 30 20 2d 20 31 2c | 20 79 30 20 2d 20 31 2c | x0 - 1,| y0 - 1,|
|00000d50| 20 4e 20 2a 20 53 69 7a | 65 20 2b 20 32 2c 20 31 | N * Siz|e + 2, 1|
|00000d60| 2c 20 44 69 73 70 6c 61 | 79 2e 72 65 70 6c 61 63 |, Displa|y.replac|
|00000d70| 65 29 3b 0d 20 20 20 20 | 20 20 52 65 70 6c 43 6f |e);. | ReplCo|
|00000d80| 6e 73 74 28 63 6c 69 70 | 2c 20 44 69 73 70 6c 61 |nst(clip|, Displa|
|00000d90| 79 2e 77 68 69 74 65 2c | 20 78 30 20 2d 20 31 2c |y.white,| x0 - 1,|
|00000da0| 20 79 30 20 2b 20 4e 20 | 2a 20 53 69 7a 65 2c 20 | y0 + N |* Size, |
|00000db0| 4e 20 2a 20 53 69 7a 65 | 20 2b 20 32 2c 20 31 2c |N * Size| + 2, 1,|
|00000dc0| 20 44 69 73 70 6c 61 79 | 2e 72 65 70 6c 61 63 65 | Display|.replace|
|00000dd0| 29 3b 0d 20 20 20 20 20 | 20 52 65 70 6c 43 6f 6e |);. | ReplCon|
|00000de0| 73 74 28 63 6c 69 70 2c | 20 44 69 73 70 6c 61 79 |st(clip,| Display|
|00000df0| 2e 77 68 69 74 65 2c 20 | 78 30 20 2d 20 31 2c 20 |.white, |x0 - 1, |
|00000e00| 79 30 2c 20 31 2c 20 4e | 20 2a 20 53 69 7a 65 20 |y0, 1, N| * Size |
|00000e10| 2b 20 31 2c 20 44 69 73 | 70 6c 61 79 2e 72 65 70 |+ 1, Dis|play.rep|
|00000e20| 6c 61 63 65 29 3b 0d 20 | 20 20 20 20 20 52 65 70 |lace);. | Rep|
|00000e30| 6c 43 6f 6e 73 74 28 63 | 6c 69 70 2c 20 44 69 73 |lConst(c|lip, Dis|
|00000e40| 70 6c 61 79 2e 77 68 69 | 74 65 2c 20 78 30 20 2b |play.whi|te, x0 +|
|00000e50| 20 4e 20 2a 20 53 69 7a | 65 2c 20 79 30 2c 20 31 | N * Siz|e, y0, 1|
|00000e60| 2c 20 4e 20 2a 20 53 69 | 7a 65 20 2b 20 31 2c 20 |, N * Si|ze + 1, |
|00000e70| 44 69 73 70 6c 61 79 2e | 72 65 70 6c 61 63 65 29 |Display.|replace)|
|00000e80| 3b 0d 20 20 20 20 20 20 | 69 20 3a 3d 20 4e 3b 20 |;. |i := N; |
|00000e90| 64 61 74 61 20 3a 3d 20 | 66 2e 64 61 74 61 3b 0d |data := |f.data;.|
|00000ea0| 20 20 20 20 20 20 52 45 | 50 45 41 54 20 44 45 43 | RE|PEAT DEC|
|00000eb0| 28 69 29 3b 0d 20 20 20 | 20 20 20 20 20 52 65 70 |(i);. | Rep|
|00000ec0| 6c 43 6f 6e 73 74 28 63 | 6c 69 70 2c 20 44 69 73 |lConst(c|lip, Dis|
|00000ed0| 70 6c 61 79 2e 77 68 69 | 74 65 2c 20 78 30 20 2b |play.whi|te, x0 +|
|00000ee0| 20 69 20 2a 20 53 69 7a | 65 2c 20 79 30 2c 20 53 | i * Siz|e, y0, S|
|00000ef0| 69 7a 65 2c 20 28 64 61 | 74 61 2e 6c 69 73 74 5b |ize, (da|ta.list[|
|00000f00| 69 5d 20 2b 20 31 29 20 | 2a 20 53 69 7a 65 2c 20 |i] + 1) |* Size, |
|00000f10| 44 69 73 70 6c 61 79 2e | 72 65 70 6c 61 63 65 29 |Display.|replace)|
|00000f20| 0d 20 20 20 20 20 20 55 | 4e 54 49 4c 20 69 20 3d |. U|NTIL i =|
|00000f30| 20 30 0d 20 20 20 20 45 | 4e 44 0d 20 20 45 4e 44 | 0. E|ND. END|
|00000f40| 20 4d 6f 64 69 66 79 3b | 0d 0d 20 20 50 52 4f 43 | Modify;|.. PROC|
|00000f50| 45 44 55 52 45 2a 20 55 | 70 64 61 74 65 52 65 6f |EDURE* U|pdateReo|
|00000f60| 72 64 65 72 44 6f 74 56 | 69 65 77 28 66 3a 20 46 |rderDotV|iew(f: F|
|00000f70| 72 61 6d 65 29 3b 0d 20 | 20 20 20 56 41 52 20 6c |rame);. | VAR l|
|00000f80| 65 66 74 2c 20 78 30 2c | 20 79 30 2c 20 69 3a 20 |eft, x0,| y0, i: |
|00000f90| 49 4e 54 45 47 45 52 3b | 20 64 61 74 61 3a 20 44 |INTEGER;| data: D|
|00000fa0| 61 74 61 3b 0d 20 20 42 | 45 47 49 4e 20 4f 62 65 |ata;. B|EGIN Obe|
|00000fb0| 72 6f 6e 2e 52 65 6d 6f | 76 65 4d 61 72 6b 73 28 |ron.Remo|veMarks(|
|00000fc0| 66 2e 58 2c 20 66 2e 59 | 2c 20 66 2e 57 2c 20 66 |f.X, f.Y|, f.W, f|
|00000fd0| 2e 48 29 3b 0d 20 20 20 | 20 6c 65 66 74 20 3a 3d |.H);. | left :=|
|00000fe0| 20 28 66 2e 57 20 2d 20 | 44 6f 74 4e 20 2a 20 44 | (f.W - |DotN * D|
|00000ff0| 6f 74 53 69 7a 65 20 2d | 20 32 29 20 44 49 56 20 |otSize -| 2) DIV |
|00001000| 32 3b 0d 20 20 20 20 49 | 46 20 6c 65 66 74 20 3c |2;. I|F left <|
|00001010| 20 4d 69 6e 4c 65 66 74 | 20 54 48 45 4e 20 6c 65 | MinLeft| THEN le|
|00001020| 66 74 20 3a 3d 20 4d 69 | 6e 4c 65 66 74 20 45 4e |ft := Mi|nLeft EN|
|00001030| 44 3b 0d 20 20 20 20 78 | 30 20 3a 3d 20 66 2e 58 |D;. x|0 := f.X|
|00001040| 20 2b 20 6c 65 66 74 3b | 20 79 30 20 3a 3d 20 66 | + left;| y0 := f|
|00001050| 2e 59 20 2b 20 66 2e 48 | 20 2d 20 4d 69 6e 4c 65 |.Y + f.H| - MinLe|
|00001060| 66 74 20 2d 20 44 6f 74 | 4e 20 2a 20 44 6f 74 53 |ft - Dot|N * DotS|
|00001070| 69 7a 65 20 2b 20 31 3b | 0d 20 20 20 20 52 65 70 |ize + 1;|. Rep|
|00001080| 6c 43 6f 6e 73 74 28 66 | 5e 2c 20 44 69 73 70 6c |lConst(f|^, Displ|
|00001090| 61 79 2e 62 6c 61 63 6b | 2c 20 78 30 2c 20 79 30 |ay.black|, x0, y0|
|000010a0| 2c 20 44 6f 74 4e 20 2a | 20 44 6f 74 53 69 7a 65 |, DotN *| DotSize|
|000010b0| 2c 20 44 6f 74 4e 20 2a | 20 44 6f 74 53 69 7a 65 |, DotN *| DotSize|
|000010c0| 2c 20 44 69 73 70 6c 61 | 79 2e 72 65 70 6c 61 63 |, Displa|y.replac|
|000010d0| 65 29 3b 0d 20 20 20 20 | 69 20 3a 3d 20 44 6f 74 |e);. |i := Dot|
|000010e0| 4e 3b 20 64 61 74 61 20 | 3a 3d 20 66 2e 64 61 74 |N; data |:= f.dat|
|000010f0| 61 3b 0d 20 20 20 20 52 | 45 50 45 41 54 20 44 45 |a;. R|EPEAT DE|
|00001100| 43 28 69 29 3b 0d 20 20 | 20 20 20 20 52 65 70 6c |C(i);. | Repl|
|00001110| 43 6f 6e 73 74 28 66 5e | 2c 20 44 69 73 70 6c 61 |Const(f^|, Displa|
|00001120| 79 2e 77 68 69 74 65 2c | 20 78 30 20 2b 20 69 20 |y.white,| x0 + i |
|00001130| 2a 20 44 6f 74 53 69 7a | 65 2c 20 79 30 20 2b 20 |* DotSiz|e, y0 + |
|00001140| 64 61 74 61 2e 6c 69 73 | 74 5b 69 5d 20 2a 20 44 |data.lis|t[i] * D|
|00001150| 6f 74 53 69 7a 65 2c 20 | 44 6f 74 53 69 7a 65 2c |otSize, |DotSize,|
|00001160| 20 44 6f 74 53 69 7a 65 | 2c 20 44 69 73 70 6c 61 | DotSize|, Displa|
|00001170| 79 2e 72 65 70 6c 61 63 | 65 29 0d 20 20 20 20 55 |y.replac|e). U|
|00001180| 4e 54 49 4c 20 69 20 3d | 20 30 0d 20 20 45 4e 44 |NTIL i =| 0. END|
|00001190| 20 55 70 64 61 74 65 52 | 65 6f 72 64 65 72 44 6f | UpdateR|eorderDo|
|000011a0| 74 56 69 65 77 3b 0d 0d | 20 20 50 52 4f 43 45 44 |tView;..| PROCED|
|000011b0| 55 52 45 2a 20 55 70 64 | 61 74 65 53 77 61 70 44 |URE* Upd|ateSwapD|
|000011c0| 6f 74 56 69 65 77 28 66 | 3a 20 46 72 61 6d 65 3b |otView(f|: Frame;|
|000011d0| 20 69 2c 20 6a 3a 20 49 | 4e 54 45 47 45 52 29 3b | i, j: I|NTEGER);|
|000011e0| 0d 20 20 20 20 56 41 52 | 20 6c 65 66 74 2c 20 78 |. VAR| left, x|
|000011f0| 30 2c 20 79 30 2c 20 78 | 69 2c 20 79 69 2c 20 78 |0, y0, x|i, yi, x|
|00001200| 6a 2c 20 79 6a 3a 20 49 | 4e 54 45 47 45 52 3b 0d |j, yj: I|NTEGER;.|
|00001210| 20 20 42 45 47 49 4e 20 | 4f 62 65 72 6f 6e 2e 52 | BEGIN |Oberon.R|
|00001220| 65 6d 6f 76 65 4d 61 72 | 6b 73 28 66 2e 58 2c 20 |emoveMar|ks(f.X, |
|00001230| 66 2e 59 2c 20 66 2e 57 | 2c 20 66 2e 48 29 3b 0d |f.Y, f.W|, f.H);.|
|00001240| 20 20 20 20 6c 65 66 74 | 20 3a 3d 20 28 66 2e 57 | left| := (f.W|
|00001250| 20 2d 20 44 6f 74 4e 20 | 2a 20 44 6f 74 53 69 7a | - DotN |* DotSiz|
|00001260| 65 20 2d 20 32 29 20 44 | 49 56 20 32 3b 0d 20 20 |e - 2) D|IV 2;. |
|00001270| 20 20 49 46 20 6c 65 66 | 74 20 3c 20 4d 69 6e 4c | IF lef|t < MinL|
|00001280| 65 66 74 20 54 48 45 4e | 20 6c 65 66 74 20 3a 3d |eft THEN| left :=|
|00001290| 20 4d 69 6e 4c 65 66 74 | 20 45 4e 44 3b 0d 20 20 | MinLeft| END;. |
|000012a0| 20 20 78 30 20 3a 3d 20 | 66 2e 58 20 2b 20 6c 65 | x0 := |f.X + le|
|000012b0| 66 74 3b 20 79 30 20 3a | 3d 20 66 2e 59 20 2b 20 |ft; y0 :|= f.Y + |
|000012c0| 66 2e 48 20 2d 20 4d 69 | 6e 4c 65 66 74 20 2d 20 |f.H - Mi|nLeft - |
|000012d0| 44 6f 74 4e 20 2a 20 44 | 6f 74 53 69 7a 65 20 2b |DotN * D|otSize +|
|000012e0| 20 31 3b 0d 20 20 20 20 | 78 69 20 3a 3d 20 78 30 | 1;. |xi := x0|
|000012f0| 20 2b 20 69 20 2a 20 44 | 6f 74 53 69 7a 65 3b 20 | + i * D|otSize; |
|00001300| 79 69 20 3a 3d 20 79 30 | 20 2b 20 66 2e 64 61 74 |yi := y0| + f.dat|
|00001310| 61 2e 6c 69 73 74 5b 69 | 5d 20 2a 20 44 6f 74 53 |a.list[i|] * DotS|
|00001320| 69 7a 65 3b 0d 20 20 20 | 20 78 6a 20 3a 3d 20 78 |ize;. | xj := x|
|00001330| 30 20 2b 20 6a 20 2a 20 | 44 6f 74 53 69 7a 65 3b |0 + j * |DotSize;|
|00001340| 20 79 6a 20 3a 3d 20 79 | 30 20 2b 20 66 2e 64 61 | yj := y|0 + f.da|
|00001350| 74 61 2e 6c 69 73 74 5b | 6a 5d 20 2a 20 44 6f 74 |ta.list[|j] * Dot|
|00001360| 53 69 7a 65 3b 0d 20 20 | 20 20 52 65 70 6c 43 6f |Size;. | ReplCo|
|00001370| 6e 73 74 28 66 5e 2c 20 | 44 69 73 70 6c 61 79 2e |nst(f^, |Display.|
|00001380| 77 68 69 74 65 2c 20 78 | 69 2c 20 79 6a 2c 20 44 |white, x|i, yj, D|
|00001390| 6f 74 53 69 7a 65 2c 20 | 44 6f 74 53 69 7a 65 2c |otSize, |DotSize,|
|000013a0| 20 44 69 73 70 6c 61 79 | 2e 69 6e 76 65 72 74 29 | Display|.invert)|
|000013b0| 3b 0d 20 20 20 20 52 65 | 70 6c 43 6f 6e 73 74 28 |;. Re|plConst(|
|000013c0| 66 5e 2c 20 44 69 73 70 | 6c 61 79 2e 77 68 69 74 |f^, Disp|lay.whit|
|000013d0| 65 2c 20 78 6a 2c 20 79 | 69 2c 20 44 6f 74 53 69 |e, xj, y|i, DotSi|
|000013e0| 7a 65 2c 20 44 6f 74 53 | 69 7a 65 2c 20 44 69 73 |ze, DotS|ize, Dis|
|000013f0| 70 6c 61 79 2e 69 6e 76 | 65 72 74 29 3b 0d 20 20 |play.inv|ert);. |
|00001400| 20 20 52 65 70 6c 43 6f | 6e 73 74 28 66 5e 2c 20 | ReplCo|nst(f^, |
|00001410| 44 69 73 70 6c 61 79 2e | 77 68 69 74 65 2c 20 78 |Display.|white, x|
|00001420| 69 2c 20 79 69 2c 20 44 | 6f 74 53 69 7a 65 2c 20 |i, yi, D|otSize, |
|00001430| 44 6f 74 53 69 7a 65 2c | 20 44 69 73 70 6c 61 79 |DotSize,| Display|
|00001440| 2e 69 6e 76 65 72 74 29 | 3b 0d 20 20 20 20 52 65 |.invert)|;. Re|
|00001450| 70 6c 43 6f 6e 73 74 28 | 66 5e 2c 20 44 69 73 70 |plConst(|f^, Disp|
|00001460| 6c 61 79 2e 77 68 69 74 | 65 2c 20 78 6a 2c 20 79 |lay.whit|e, xj, y|
|00001470| 6a 2c 20 44 6f 74 53 69 | 7a 65 2c 20 44 6f 74 53 |j, DotSi|ze, DotS|
|00001480| 69 7a 65 2c 20 44 69 73 | 70 6c 61 79 2e 69 6e 76 |ize, Dis|play.inv|
|00001490| 65 72 74 29 0d 20 20 45 | 4e 44 20 55 70 64 61 74 |ert). E|ND Updat|
|000014a0| 65 53 77 61 70 44 6f 74 | 56 69 65 77 3b 0d 0d 20 |eSwapDot|View;.. |
|000014b0| 20 50 52 4f 43 45 44 55 | 52 45 2a 20 4d 6f 64 69 | PROCEDU|RE* Modi|
|000014c0| 66 79 44 6f 74 56 69 65 | 77 28 66 3a 20 46 72 61 |fyDotVie|w(f: Fra|
|000014d0| 6d 65 3b 20 69 64 2c 20 | 64 79 2c 20 79 2c 20 68 |me; id, |dy, y, h|
|000014e0| 3a 20 49 4e 54 45 47 45 | 52 29 3b 0d 20 20 20 20 |: INTEGE|R);. |
|000014f0| 56 41 52 20 78 30 2c 20 | 79 30 2c 20 69 2c 20 6c |VAR x0, |y0, i, l|
|00001500| 65 66 74 3a 20 49 4e 54 | 45 47 45 52 3b 20 64 61 |eft: INT|EGER; da|
|00001510| 74 61 3a 20 44 61 74 61 | 3b 20 63 6c 69 70 3a 20 |ta: Data|; clip: |
|00001520| 44 69 73 70 6c 61 79 2e | 46 72 61 6d 65 44 65 73 |Display.|FrameDes|
|00001530| 63 3b 0d 20 20 42 45 47 | 49 4e 0d 20 20 20 20 49 |c;. BEG|IN. I|
|00001540| 46 20 69 64 20 3d 20 4d | 65 6e 75 56 69 65 77 65 |F id = M|enuViewe|
|00001550| 72 73 2e 72 65 64 75 63 | 65 20 54 48 45 4e 0d 20 |rs.reduc|e THEN. |
|00001560| 20 20 20 20 20 49 46 20 | 64 79 20 23 20 30 20 54 | IF |dy # 0 T|
|00001570| 48 45 4e 20 44 69 73 70 | 6c 61 79 2e 43 6f 70 79 |HEN Disp|lay.Copy|
|00001580| 42 6c 6f 63 6b 28 66 2e | 58 2c 20 66 2e 59 20 2b |Block(f.|X, f.Y +|
|00001590| 20 64 79 2c 20 66 2e 57 | 2c 20 68 2c 20 66 2e 58 | dy, f.W|, h, f.X|
|000015a0| 2c 20 79 2c 20 44 69 73 | 70 6c 61 79 2e 72 65 70 |, y, Dis|play.rep|
|000015b0| 6c 61 63 65 29 20 45 4e | 44 3b 0d 20 20 20 20 20 |lace) EN|D;. |
|000015c0| 20 66 2e 59 20 3a 3d 20 | 79 3b 20 66 2e 48 20 3a | f.Y := |y; f.H :|
|000015d0| 3d 20 68 0d 20 20 20 20 | 45 4c 53 45 0d 20 20 20 |= h. |ELSE. |
|000015e0| 20 20 20 49 46 20 64 79 | 20 23 20 30 20 54 48 45 | IF dy| # 0 THE|
|000015f0| 4e 20 44 69 73 70 6c 61 | 79 2e 43 6f 70 79 42 6c |N Displa|y.CopyBl|
|00001600| 6f 63 6b 28 66 2e 58 2c | 20 66 2e 59 2c 20 66 2e |ock(f.X,| f.Y, f.|
|00001610| 57 2c 20 66 2e 48 2c 20 | 66 2e 58 2c 20 66 2e 59 |W, f.H, |f.X, f.Y|
|00001620| 20 2b 20 64 79 2c 20 44 | 69 73 70 6c 61 79 2e 72 | + dy, D|isplay.r|
|00001630| 65 70 6c 61 63 65 29 20 | 45 4e 44 3b 0d 20 20 20 |eplace) |END;. |
|00001640| 20 20 20 63 6c 69 70 2e | 58 20 3a 3d 20 66 2e 58 | clip.|X := f.X|
|00001650| 3b 20 63 6c 69 70 2e 57 | 20 3a 3d 20 66 2e 57 3b |; clip.W| := f.W;|
|00001660| 20 63 6c 69 70 2e 59 20 | 3a 3d 20 79 3b 20 63 6c | clip.Y |:= y; cl|
|00001670| 69 70 2e 48 20 3a 3d 20 | 68 20 2d 20 66 2e 48 3b |ip.H := |h - f.H;|
|00001680| 0d 20 20 20 20 20 20 66 | 2e 59 20 3a 3d 20 79 3b |. f|.Y := y;|
|00001690| 20 66 2e 48 20 3a 3d 20 | 68 3b 0d 0d 20 20 20 20 | f.H := |h;.. |
|000016a0| 20 20 6c 65 66 74 20 3a | 3d 20 28 66 2e 57 20 2d | left :|= (f.W -|
|000016b0| 20 44 6f 74 4e 20 2a 20 | 44 6f 74 53 69 7a 65 20 | DotN * |DotSize |
|000016c0| 2d 20 32 29 20 44 49 56 | 20 32 3b 0d 20 20 20 20 |- 2) DIV| 2;. |
|000016d0| 20 20 49 46 20 6c 65 66 | 74 20 3c 20 4d 69 6e 4c | IF lef|t < MinL|
|000016e0| 65 66 74 20 54 48 45 4e | 20 6c 65 66 74 20 3a 3d |eft THEN| left :=|
|000016f0| 20 4d 69 6e 4c 65 66 74 | 20 45 4e 44 3b 0d 20 20 | MinLeft| END;. |
|00001700| 20 20 20 20 78 30 20 3a | 3d 20 66 2e 58 20 2b 20 | x0 :|= f.X + |
|00001710| 6c 65 66 74 3b 20 79 30 | 20 3a 3d 20 66 2e 59 20 |left; y0| := f.Y |
|00001720| 2b 20 66 2e 48 20 2d 20 | 4d 69 6e 4c 65 66 74 20 |+ f.H - |MinLeft |
|00001730| 2d 20 44 6f 74 4e 20 2a | 20 44 6f 74 53 69 7a 65 |- DotN *| DotSize|
|00001740| 20 2b 20 31 3b 0d 20 20 | 20 20 20 20 52 65 70 6c | + 1;. | Repl|
|00001750| 43 6f 6e 73 74 28 63 6c | 69 70 2c 20 44 69 73 70 |Const(cl|ip, Disp|
|00001760| 6c 61 79 2e 62 6c 61 63 | 6b 2c 20 66 2e 58 2c 20 |lay.blac|k, f.X, |
|00001770| 66 2e 59 2c 20 66 2e 57 | 2c 20 66 2e 48 2c 20 44 |f.Y, f.W|, f.H, D|
|00001780| 69 73 70 6c 61 79 2e 72 | 65 70 6c 61 63 65 29 3b |isplay.r|eplace);|
|00001790| 0d 20 20 20 20 20 20 52 | 65 70 6c 43 6f 6e 73 74 |. R|eplConst|
|000017a0| 28 63 6c 69 70 2c 20 44 | 69 73 70 6c 61 79 2e 77 |(clip, D|isplay.w|
|000017b0| 68 69 74 65 2c 20 78 30 | 20 2d 20 31 2c 20 79 30 |hite, x0| - 1, y0|
|000017c0| 20 2d 20 31 2c 20 44 6f | 74 4e 20 2a 20 44 6f 74 | - 1, Do|tN * Dot|
|000017d0| 53 69 7a 65 20 2b 20 32 | 2c 20 31 2c 20 44 69 73 |Size + 2|, 1, Dis|
|000017e0| 70 6c 61 79 2e 72 65 70 | 6c 61 63 65 29 3b 0d 20 |play.rep|lace);. |
|000017f0| 20 20 20 20 20 52 65 70 | 6c 43 6f 6e 73 74 28 63 | Rep|lConst(c|
|00001800| 6c 69 70 2c 20 44 69 73 | 70 6c 61 79 2e 77 68 69 |lip, Dis|play.whi|
|00001810| 74 65 2c 20 78 30 20 2d | 20 31 2c 20 79 30 20 2b |te, x0 -| 1, y0 +|
|00001820| 20 44 6f 74 4e 20 2a 20 | 44 6f 74 53 69 7a 65 2c | DotN * |DotSize,|
|00001830| 20 44 6f 74 4e 20 2a 20 | 44 6f 74 53 69 7a 65 20 | DotN * |DotSize |
|00001840| 2b 20 32 2c 20 31 2c 20 | 44 69 73 70 6c 61 79 2e |+ 2, 1, |Display.|
|00001850| 72 65 70 6c 61 63 65 29 | 3b 0d 20 20 20 20 20 20 |replace)|;. |
|00001860| 52 65 70 6c 43 6f 6e 73 | 74 28 63 6c 69 70 2c 20 |ReplCons|t(clip, |
|00001870| 44 69 73 70 6c 61 79 2e | 77 68 69 74 65 2c 20 78 |Display.|white, x|
|00001880| 30 20 2d 20 31 2c 20 79 | 30 2c 20 31 2c 20 44 6f |0 - 1, y|0, 1, Do|
|00001890| 74 4e 20 2a 20 44 6f 74 | 53 69 7a 65 20 2b 20 31 |tN * Dot|Size + 1|
|000018a0| 2c 20 44 69 73 70 6c 61 | 79 2e 72 65 70 6c 61 63 |, Displa|y.replac|
|000018b0| 65 29 3b 0d 20 20 20 20 | 20 20 52 65 70 6c 43 6f |e);. | ReplCo|
|000018c0| 6e 73 74 28 63 6c 69 70 | 2c 20 44 69 73 70 6c 61 |nst(clip|, Displa|
|000018d0| 79 2e 77 68 69 74 65 2c | 20 78 30 20 2b 20 44 6f |y.white,| x0 + Do|
|000018e0| 74 4e 20 2a 20 44 6f 74 | 53 69 7a 65 2c 20 79 30 |tN * Dot|Size, y0|
|000018f0| 2c 20 31 2c 20 44 6f 74 | 4e 20 2a 20 44 6f 74 53 |, 1, Dot|N * DotS|
|00001900| 69 7a 65 20 2b 20 31 2c | 20 44 69 73 70 6c 61 79 |ize + 1,| Display|
|00001910| 2e 72 65 70 6c 61 63 65 | 29 3b 0d 20 20 20 20 20 |.replace|);. |
|00001920| 20 69 20 3a 3d 20 44 6f | 74 4e 3b 20 64 61 74 61 | i := Do|tN; data|
|00001930| 20 3a 3d 20 66 2e 64 61 | 74 61 3b 0d 20 20 20 20 | := f.da|ta;. |
|00001940| 20 20 52 45 50 45 41 54 | 20 44 45 43 28 69 29 3b | REPEAT| DEC(i);|
|00001950| 0d 20 20 20 20 20 20 20 | 20 52 65 70 6c 43 6f 6e |. | ReplCon|
|00001960| 73 74 28 63 6c 69 70 2c | 20 44 69 73 70 6c 61 79 |st(clip,| Display|
|00001970| 2e 77 68 69 74 65 2c 20 | 78 30 20 2b 20 69 20 2a |.white, |x0 + i *|
|00001980| 20 44 6f 74 53 69 7a 65 | 2c 20 79 30 20 2b 20 64 | DotSize|, y0 + d|
|00001990| 61 74 61 2e 6c 69 73 74 | 5b 69 5d 20 2a 20 44 6f |ata.list|[i] * Do|
|000019a0| 74 53 69 7a 65 2c 20 44 | 6f 74 53 69 7a 65 2c 20 |tSize, D|otSize, |
|000019b0| 44 6f 74 53 69 7a 65 2c | 20 44 69 73 70 6c 61 79 |DotSize,| Display|
|000019c0| 2e 72 65 70 6c 61 63 65 | 29 0d 20 20 20 20 20 20 |.replace|). |
|000019d0| 55 4e 54 49 4c 20 69 20 | 3d 20 30 0d 20 20 20 20 |UNTIL i |= 0. |
|000019e0| 45 4e 44 0d 20 20 45 4e | 44 20 4d 6f 64 69 66 79 |END. EN|D Modify|
|000019f0| 44 6f 74 56 69 65 77 3b | 0d 0d 20 20 50 52 4f 43 |DotView;|.. PROC|
|00001a00| 45 44 55 52 45 20 43 6f | 70 79 4f 66 28 66 3a 20 |EDURE Co|pyOf(f: |
|00001a10| 46 72 61 6d 65 29 3a 20 | 46 72 61 6d 65 3b 0d 20 |Frame): |Frame;. |
|00001a20| 20 20 20 56 41 52 20 63 | 3a 20 46 72 61 6d 65 3b | VAR c|: Frame;|
|00001a30| 0d 20 20 42 45 47 49 4e | 20 4e 45 57 28 63 29 3b |. BEGIN| NEW(c);|
|00001a40| 20 63 2e 64 61 74 61 20 | 3a 3d 20 66 2e 64 61 74 | c.data |:= f.dat|
|00001a50| 61 3b 0d 20 20 20 20 63 | 2e 68 61 6e 64 6c 65 20 |a;. c|.handle |
|00001a60| 3a 3d 20 66 2e 68 61 6e | 64 6c 65 3b 0d 20 20 20 |:= f.han|dle;. |
|00001a70| 20 63 2e 75 70 64 61 74 | 65 52 65 6f 72 64 65 72 | c.updat|eReorder|
|00001a80| 20 3a 3d 20 66 2e 75 70 | 64 61 74 65 52 65 6f 72 | := f.up|dateReor|
|00001a90| 64 65 72 3b 20 63 2e 75 | 70 64 61 74 65 53 77 61 |der; c.u|pdateSwa|
|00001aa0| 70 20 3a 3d 20 66 2e 75 | 70 64 61 74 65 53 77 61 |p := f.u|pdateSwa|
|00001ab0| 70 3b 20 63 2e 6d 6f 64 | 69 66 79 20 3a 3d 20 66 |p; c.mod|ify := f|
|00001ac0| 2e 6d 6f 64 69 66 79 3b | 0d 20 20 20 20 52 45 54 |.modify;|. RET|
|00001ad0| 55 52 4e 20 63 0d 20 20 | 45 4e 44 20 43 6f 70 79 |URN c. |END Copy|
|00001ae0| 4f 66 3b 0d 0d 20 20 50 | 52 4f 43 45 44 55 52 45 |Of;.. P|ROCEDURE|
|00001af0| 2a 20 48 61 6e 64 6c 65 | 72 28 66 3a 20 44 69 73 |* Handle|r(f: Dis|
|00001b00| 70 6c 61 79 2e 46 72 61 | 6d 65 3b 20 56 41 52 20 |play.Fra|me; VAR |
|00001b10| 6d 3a 20 44 69 73 70 6c | 61 79 2e 46 72 61 6d 65 |m: Displ|ay.Frame|
|00001b20| 4d 73 67 29 3b 0d 20 20 | 20 20 56 41 52 20 73 65 |Msg);. | VAR se|
|00001b30| 6c 66 3a 20 46 72 61 6d | 65 3b 0d 20 20 42 45 47 |lf: Fram|e;. BEG|
|00001b40| 49 4e 20 73 65 6c 66 20 | 3a 3d 20 66 28 46 72 61 |IN self |:= f(Fra|
|00001b50| 6d 65 29 3b 0d 20 20 20 | 20 49 46 20 6d 20 49 53 |me);. | IF m IS|
|00001b60| 20 52 65 6f 72 64 65 72 | 4d 73 67 20 54 48 45 4e | Reorder|Msg THEN|
|00001b70| 0d 20 20 20 20 20 20 49 | 46 20 6d 28 52 65 6f 72 |. I|F m(Reor|
|00001b80| 64 65 72 4d 73 67 29 2e | 64 61 74 61 20 3d 20 73 |derMsg).|data = s|
|00001b90| 65 6c 66 2e 64 61 74 61 | 20 54 48 45 4e 20 73 65 |elf.data| THEN se|
|00001ba0| 6c 66 2e 75 70 64 61 74 | 65 52 65 6f 72 64 65 72 |lf.updat|eReorder|
|00001bb0| 28 73 65 6c 66 29 20 45 | 4e 44 0d 20 20 20 20 45 |(self) E|ND. E|
|00001bc0| 4c 53 49 46 20 6d 20 49 | 53 20 53 77 61 70 4d 73 |LSIF m I|S SwapMs|
|00001bd0| 67 20 54 48 45 4e 0d 20 | 20 20 20 20 20 57 49 54 |g THEN. | WIT|
|00001be0| 48 20 6d 3a 20 53 77 61 | 70 4d 73 67 20 44 4f 0d |H m: Swa|pMsg DO.|
|00001bf0| 20 20 20 20 20 20 20 20 | 49 46 20 6d 2e 64 61 74 | |IF m.dat|
|00001c00| 61 20 3d 20 73 65 6c 66 | 2e 64 61 74 61 20 54 48 |a = self|.data TH|
|00001c10| 45 4e 20 73 65 6c 66 2e | 75 70 64 61 74 65 53 77 |EN self.|updateSw|
|00001c20| 61 70 28 73 65 6c 66 2c | 20 6d 2e 69 2c 20 6d 2e |ap(self,| m.i, m.|
|00001c30| 6a 29 20 45 4e 44 0d 20 | 20 20 20 20 20 45 4e 44 |j) END. | END|
|00001c40| 0d 20 20 20 20 45 4c 53 | 49 46 20 6d 20 49 53 20 |. ELS|IF m IS |
|00001c50| 4d 65 6e 75 56 69 65 77 | 65 72 73 2e 4d 6f 64 69 |MenuView|ers.Modi|
|00001c60| 66 79 4d 73 67 20 54 48 | 45 4e 0d 20 20 20 20 20 |fyMsg TH|EN. |
|00001c70| 20 57 49 54 48 20 6d 3a | 20 4d 65 6e 75 56 69 65 | WITH m:| MenuVie|
|00001c80| 77 65 72 73 2e 4d 6f 64 | 69 66 79 4d 73 67 20 44 |wers.Mod|ifyMsg D|
|00001c90| 4f 20 73 65 6c 66 2e 6d | 6f 64 69 66 79 28 73 65 |O self.m|odify(se|
|00001ca0| 6c 66 2c 20 6d 2e 69 64 | 2c 20 6d 2e 64 59 2c 20 |lf, m.id|, m.dY, |
|00001cb0| 6d 2e 59 2c 20 6d 2e 48 | 29 20 45 4e 44 0d 20 20 |m.Y, m.H|) END. |
|00001cc0| 20 20 45 4c 53 49 46 20 | 6d 20 49 53 20 4f 62 65 | ELSIF |m IS Obe|
|00001cd0| 72 6f 6e 2e 43 6f 70 79 | 4d 73 67 20 54 48 45 4e |ron.Copy|Msg THEN|
|00001ce0| 20 6d 28 4f 62 65 72 6f | 6e 2e 43 6f 70 79 4d 73 | m(Obero|n.CopyMs|
|00001cf0| 67 29 2e 46 20 3a 3d 20 | 43 6f 70 79 4f 66 28 73 |g).F := |CopyOf(s|
|00001d00| 65 6c 66 29 0d 20 20 20 | 20 45 4c 53 49 46 20 6d |elf). | ELSIF m|
|00001d10| 20 49 53 20 4f 62 65 72 | 6f 6e 2e 49 6e 70 75 74 | IS Ober|on.Input|
|00001d20| 4d 73 67 20 54 48 45 4e | 0d 20 20 20 20 20 20 57 |Msg THEN|. W|
|00001d30| 49 54 48 20 6d 3a 20 4f | 62 65 72 6f 6e 2e 49 6e |ITH m: O|beron.In|
|00001d40| 70 75 74 4d 73 67 20 44 | 4f 0d 20 20 20 20 20 20 |putMsg D|O. |
|00001d50| 20 20 49 46 20 6d 2e 69 | 64 20 3d 20 4f 62 65 72 | IF m.i|d = Ober|
|00001d60| 6f 6e 2e 74 72 61 63 6b | 20 54 48 45 4e 20 4f 62 |on.track| THEN Ob|
|00001d70| 65 72 6f 6e 2e 44 72 61 | 77 43 75 72 73 6f 72 28 |eron.Dra|wCursor(|
|00001d80| 4f 62 65 72 6f 6e 2e 4d | 6f 75 73 65 2c 20 4f 62 |Oberon.M|ouse, Ob|
|00001d90| 65 72 6f 6e 2e 41 72 72 | 6f 77 2c 20 6d 2e 58 2c |eron.Arr|ow, m.X,|
|00001da0| 20 6d 2e 59 29 20 45 4e | 44 0d 20 20 20 20 20 20 | m.Y) EN|D. |
|00001db0| 45 4e 44 0d 20 20 20 20 | 45 4e 44 0d 20 20 45 4e |END. |END. EN|
|00001dc0| 44 20 48 61 6e 64 6c 65 | 72 3b 0d 0d 28 2a 20 44 |D Handle|r;..(* D|
|00001dd0| 61 74 61 20 6d 61 6e 69 | 70 75 6c 61 74 69 6f 6e |ata mani|pulation|
|00001de0| 73 20 2a 29 0d 0d 20 20 | 50 52 4f 43 45 44 55 52 |s *).. |PROCEDUR|
|00001df0| 45 20 4c 65 73 73 28 64 | 61 74 61 3a 20 44 61 74 |E Less(d|ata: Dat|
|00001e00| 61 3b 20 69 2c 20 6a 3a | 20 49 4e 54 45 47 45 52 |a; i, j:| INTEGER|
|00001e10| 29 3a 20 42 4f 4f 4c 45 | 41 4e 3b 0d 20 20 20 20 |): BOOLE|AN;. |
|00001e20| 56 41 52 20 78 2c 20 79 | 3a 20 49 4e 54 45 47 45 |VAR x, y|: INTEGE|
|00001e30| 52 3b 20 6b 65 79 73 3a | 20 53 45 54 3b 0d 20 20 |R; keys:| SET;. |
|00001e40| 42 45 47 49 4e 20 78 20 | 3a 3d 20 53 48 4f 52 54 |BEGIN x |:= SHORT|
|00001e50| 28 64 65 6c 61 79 29 3b | 0d 20 20 20 20 57 48 49 |(delay);|. WHI|
|00001e60| 4c 45 20 78 20 23 20 30 | 20 44 4f 20 44 45 43 28 |LE x # 0| DO DEC(|
|00001e70| 78 29 3b 20 79 20 3a 3d | 20 57 61 69 74 43 6e 74 |x); y :=| WaitCnt|
|00001e80| 20 2a 20 4e 20 44 49 56 | 20 64 61 74 61 2e 6c 65 | * N DIV| data.le|
|00001e90| 6e 3b 0d 20 20 20 20 20 | 20 52 45 50 45 41 54 20 |n;. | REPEAT |
|00001ea0| 44 45 43 28 79 29 20 55 | 4e 54 49 4c 20 79 20 3d |DEC(y) U|NTIL y =|
|00001eb0| 20 30 0d 20 20 20 20 45 | 4e 44 3b 0d 20 20 20 20 | 0. E|ND;. |
|00001ec0| 49 46 20 63 6f 6d 70 61 | 72 69 73 6f 6e 73 20 4d |IF compa|risons M|
|00001ed0| 4f 44 20 4d 6f 75 73 65 | 50 6f 6c 6c 46 72 65 71 |OD Mouse|PollFreq|
|00001ee0| 20 3d 20 30 20 54 48 45 | 4e 0d 20 20 20 20 20 20 | = 0 THE|N. |
|00001ef0| 52 45 50 45 41 54 20 49 | 6e 70 75 74 2e 4d 6f 75 |REPEAT I|nput.Mou|
|00001f00| 73 65 28 6b 65 79 73 2c | 20 78 2c 20 79 29 20 55 |se(keys,| x, y) U|
|00001f10| 4e 54 49 4c 20 6b 65 79 | 73 20 3d 20 7b 7d 0d 20 |NTIL key|s = {}. |
|00001f20| 20 20 20 45 4e 44 3b 0d | 20 20 20 20 49 4e 43 28 | END;.| INC(|
|00001f30| 63 6f 6d 70 61 72 69 73 | 6f 6e 73 29 3b 0d 20 20 |comparis|ons);. |
|00001f40| 20 20 52 45 54 55 52 4e | 20 64 61 74 61 2e 6c 69 | RETURN| data.li|
|00001f50| 73 74 5b 69 5d 20 3c 20 | 64 61 74 61 2e 6c 69 73 |st[i] < |data.lis|
|00001f60| 74 5b 6a 5d 0d 20 20 45 | 4e 44 20 4c 65 73 73 3b |t[j]. E|ND Less;|
|00001f70| 0d 0d 20 20 50 52 4f 43 | 45 44 55 52 45 20 53 77 |.. PROC|EDURE Sw|
|00001f80| 61 70 28 64 61 74 61 3a | 20 44 61 74 61 3b 20 69 |ap(data:| Data; i|
|00001f90| 2c 20 6a 3a 20 49 4e 54 | 45 47 45 52 29 3b 0d 20 |, j: INT|EGER);. |
|00001fa0| 20 20 20 56 41 52 20 78 | 3a 20 49 4e 54 45 47 45 | VAR x|: INTEGE|
|00001fb0| 52 3b 20 6d 73 67 3a 20 | 53 77 61 70 4d 73 67 3b |R; msg: |SwapMsg;|
|00001fc0| 0d 20 20 42 45 47 49 4e | 20 78 20 3a 3d 20 64 61 |. BEGIN| x := da|
|00001fd0| 74 61 2e 6c 69 73 74 5b | 69 5d 3b 20 64 61 74 61 |ta.list[|i]; data|
|00001fe0| 2e 6c 69 73 74 5b 69 5d | 20 3a 3d 20 64 61 74 61 |.list[i]| := data|
|00001ff0| 2e 6c 69 73 74 5b 6a 5d | 3b 20 64 61 74 61 2e 6c |.list[j]|; data.l|
|00002000| 69 73 74 5b 6a 5d 20 3a | 3d 20 78 3b 0d 20 20 20 |ist[j] :|= x;. |
|00002010| 20 49 4e 43 28 73 77 61 | 70 73 29 3b 0d 20 20 20 | INC(swa|ps);. |
|00002020| 20 6d 73 67 2e 64 61 74 | 61 20 3a 3d 20 64 61 74 | msg.dat|a := dat|
|00002030| 61 3b 20 6d 73 67 2e 69 | 20 3a 3d 20 69 3b 20 6d |a; msg.i| := i; m|
|00002040| 73 67 2e 6a 20 3a 3d 20 | 6a 3b 20 56 69 65 77 65 |sg.j := |j; Viewe|
|00002050| 72 73 2e 42 72 6f 61 64 | 63 61 73 74 28 6d 73 67 |rs.Broad|cast(msg|
|00002060| 29 3b 0d 20 20 45 4e 44 | 20 53 77 61 70 3b 0d 0d |);. END| Swap;..|
|00002070| 28 2a 20 61 75 78 69 6c | 69 61 72 79 20 2a 29 0d |(* auxil|iary *).|
|00002080| 0d 20 20 50 52 4f 43 45 | 44 55 52 45 20 50 61 72 |. PROCE|DURE Par|
|00002090| 61 6d 65 74 65 72 44 61 | 74 61 28 29 3a 20 44 61 |ameterDa|ta(): Da|
|000020a0| 74 61 3b 0d 20 20 20 20 | 56 41 52 20 6c 3a 20 44 |ta;. |VAR l: D|
|000020b0| 61 74 61 3b 20 76 3a 20 | 56 69 65 77 65 72 73 2e |ata; v: |Viewers.|
|000020c0| 56 69 65 77 65 72 3b 0d | 20 20 42 45 47 49 4e 0d |Viewer;.| BEGIN.|
|000020d0| 20 20 20 20 49 46 20 4f | 62 65 72 6f 6e 2e 50 61 | IF O|beron.Pa|
|000020e0| 72 2e 76 77 72 2e 64 73 | 63 20 3d 20 4f 62 65 72 |r.vwr.ds|c = Ober|
|000020f0| 6f 6e 2e 50 61 72 2e 66 | 72 61 6d 65 20 54 48 45 |on.Par.f|rame THE|
|00002100| 4e 0d 20 20 20 20 20 20 | 49 46 20 28 4f 62 65 72 |N. |IF (Ober|
|00002110| 6f 6e 2e 50 61 72 2e 66 | 72 61 6d 65 20 23 20 4e |on.Par.f|rame # N|
|00002120| 49 4c 29 20 26 20 28 4f | 62 65 72 6f 6e 2e 50 61 |IL) & (O|beron.Pa|
|00002130| 72 2e 66 72 61 6d 65 2e | 6e 65 78 74 20 23 20 4e |r.frame.|next # N|
|00002140| 49 4c 29 20 26 20 28 4f | 62 65 72 6f 6e 2e 50 61 |IL) & (O|beron.Pa|
|00002150| 72 2e 66 72 61 6d 65 2e | 6e 65 78 74 20 49 53 20 |r.frame.|next IS |
|00002160| 46 72 61 6d 65 29 20 54 | 48 45 4e 0d 20 20 20 20 |Frame) T|HEN. |
|00002170| 20 20 20 20 6c 20 3a 3d | 20 4f 62 65 72 6f 6e 2e | l :=| Oberon.|
|00002180| 50 61 72 2e 66 72 61 6d | 65 2e 6e 65 78 74 28 46 |Par.fram|e.next(F|
|00002190| 72 61 6d 65 29 2e 64 61 | 74 61 0d 20 20 20 20 20 |rame).da|ta. |
|000021a0| 20 45 4e 44 0d 20 20 20 | 20 45 4c 53 45 20 76 20 | END. | ELSE v |
|000021b0| 3a 3d 20 4f 62 65 72 6f | 6e 2e 4d 61 72 6b 65 64 |:= Obero|n.Marked|
|000021c0| 56 69 65 77 65 72 28 29 | 3b 0d 20 20 20 20 20 20 |Viewer()|;. |
|000021d0| 49 46 20 28 76 2e 64 73 | 63 20 23 20 4e 49 4c 29 |IF (v.ds|c # NIL)|
|000021e0| 20 26 20 28 76 2e 64 73 | 63 2e 6e 65 78 74 20 23 | & (v.ds|c.next #|
|000021f0| 20 4e 49 4c 29 20 26 20 | 28 76 2e 64 73 63 2e 6e | NIL) & |(v.dsc.n|
|00002200| 65 78 74 20 49 53 20 46 | 72 61 6d 65 29 20 54 48 |ext IS F|rame) TH|
|00002210| 45 4e 20 6c 20 3a 3d 20 | 76 2e 64 73 63 2e 6e 65 |EN l := |v.dsc.ne|
|00002220| 78 74 28 46 72 61 6d 65 | 29 2e 64 61 74 61 20 45 |xt(Frame|).data E|
|00002230| 4e 44 0d 20 20 20 20 45 | 4e 44 3b 0d 20 20 20 20 |ND. E|ND;. |
|00002240| 52 45 54 55 52 4e 20 6c | 0d 20 20 45 4e 44 20 50 |RETURN l|. END P|
|00002250| 61 72 61 6d 65 74 65 72 | 44 61 74 61 3b 0d 0d 20 |arameter|Data;.. |
|00002260| 20 50 52 4f 43 45 44 55 | 52 45 20 50 61 72 49 6e | PROCEDU|RE ParIn|
|00002270| 74 65 67 65 72 28 29 3a | 20 4c 4f 4e 47 49 4e 54 |teger():| LONGINT|
|00002280| 3b 0d 20 20 20 20 56 41 | 52 20 74 65 78 74 3a 20 |;. VA|R text: |
|00002290| 54 65 78 74 73 2e 54 65 | 78 74 3b 20 62 65 67 2c |Texts.Te|xt; beg,|
|000022a0| 20 65 6e 64 2c 20 74 69 | 6d 65 3a 20 4c 4f 4e 47 | end, ti|me: LONG|
|000022b0| 49 4e 54 3b 20 73 3a 20 | 54 65 78 74 73 2e 53 63 |INT; s: |Texts.Sc|
|000022c0| 61 6e 6e 65 72 3b 0d 20 | 20 42 45 47 49 4e 20 54 |anner;. | BEGIN T|
|000022d0| 65 78 74 73 2e 4f 70 65 | 6e 53 63 61 6e 6e 65 72 |exts.Ope|nScanner|
|000022e0| 28 73 2c 20 4f 62 65 72 | 6f 6e 2e 50 61 72 2e 74 |(s, Ober|on.Par.t|
|000022f0| 65 78 74 2c 20 4f 62 65 | 72 6f 6e 2e 50 61 72 2e |ext, Obe|ron.Par.|
|00002300| 70 6f 73 29 3b 20 54 65 | 78 74 73 2e 53 63 61 6e |pos); Te|xts.Scan|
|00002310| 28 73 29 3b 0d 20 20 20 | 20 49 46 20 28 73 2e 6c |(s);. | IF (s.l|
|00002320| 69 6e 65 20 3d 20 30 29 | 20 26 20 28 73 2e 63 6c |ine = 0)| & (s.cl|
|00002330| 61 73 73 20 3d 20 54 65 | 78 74 73 2e 43 68 61 72 |ass = Te|xts.Char|
|00002340| 29 20 26 20 28 73 2e 63 | 20 3d 20 22 5e 22 29 20 |) & (s.c| = "^") |
|00002350| 54 48 45 4e 20 4f 62 65 | 72 6f 6e 2e 47 65 74 53 |THEN Obe|ron.GetS|
|00002360| 65 6c 65 63 74 69 6f 6e | 28 74 65 78 74 2c 20 62 |election|(text, b|
|00002370| 65 67 2c 20 65 6e 64 2c | 20 74 69 6d 65 29 3b 0d |eg, end,| time);.|
|00002380| 20 20 20 20 20 20 49 46 | 20 74 69 6d 65 20 3e 3d | IF| time >=|
|00002390| 20 30 20 54 48 45 4e 20 | 54 65 78 74 73 2e 4f 70 | 0 THEN |Texts.Op|
|000023a0| 65 6e 53 63 61 6e 6e 65 | 72 28 73 2c 20 74 65 78 |enScanne|r(s, tex|
|000023b0| 74 2c 20 62 65 67 29 3b | 20 54 65 78 74 73 2e 53 |t, beg);| Texts.S|
|000023c0| 63 61 6e 28 73 29 20 45 | 4e 44 0d 20 20 20 20 45 |can(s) E|ND. E|
|000023d0| 4e 44 3b 0d 20 20 20 20 | 49 46 20 28 73 2e 6c 69 |ND;. |IF (s.li|
|000023e0| 6e 65 20 3d 20 30 29 20 | 26 20 28 73 2e 63 6c 61 |ne = 0) |& (s.cla|
|000023f0| 73 73 20 3d 20 54 65 78 | 74 73 2e 49 6e 74 29 20 |ss = Tex|ts.Int) |
|00002400| 54 48 45 4e 20 52 45 54 | 55 52 4e 20 73 2e 69 20 |THEN RET|URN s.i |
|00002410| 45 4c 53 45 20 52 45 54 | 55 52 4e 20 2d 31 20 45 |ELSE RET|URN -1 E|
|00002420| 4e 44 0d 20 20 45 4e 44 | 20 50 61 72 49 6e 74 65 |ND. END| ParInte|
|00002430| 67 65 72 3b 0d 0d 0d 20 | 20 50 52 4f 43 45 44 55 |ger;... | PROCEDU|
|00002440| 52 45 20 53 74 61 72 74 | 3b 0d 20 20 42 45 47 49 |RE Start|;. BEGI|
|00002450| 4e 20 63 6f 6d 70 61 72 | 69 73 6f 6e 73 20 3a 3d |N compar|isons :=|
|00002460| 20 30 3b 20 73 77 61 70 | 73 20 3a 3d 20 30 3b 20 | 0; swap|s := 0; |
|00002470| 74 69 6d 65 20 3a 3d 20 | 4f 62 65 72 6f 6e 2e 54 |time := |Oberon.T|
|00002480| 69 6d 65 28 29 0d 20 20 | 45 4e 44 20 53 74 61 72 |ime(). |END Star|
|00002490| 74 3b 0d 0d 20 20 50 52 | 4f 43 45 44 55 52 45 20 |t;.. PR|OCEDURE |
|000024a0| 53 74 6f 70 28 6e 61 6d | 65 3a 20 41 52 52 41 59 |Stop(nam|e: ARRAY|
|000024b0| 20 4f 46 20 43 48 41 52 | 29 3b 0d 20 20 20 20 56 | OF CHAR|);. V|
|000024c0| 41 52 20 74 3a 20 4c 4f | 4e 47 49 4e 54 3b 0d 20 |AR t: LO|NGINT;. |
|000024d0| 20 42 45 47 49 4e 20 74 | 20 3a 3d 20 4f 62 65 72 | BEGIN t| := Ober|
|000024e0| 6f 6e 2e 54 69 6d 65 28 | 29 3b 0d 20 20 20 20 54 |on.Time(|);. T|
|000024f0| 65 78 74 73 2e 57 72 69 | 74 65 53 74 72 69 6e 67 |exts.Wri|teString|
|00002500| 28 77 2c 20 6e 61 6d 65 | 29 3b 20 54 65 78 74 73 |(w, name|); Texts|
|00002510| 2e 57 72 69 74 65 53 74 | 72 69 6e 67 28 77 2c 20 |.WriteSt|ring(w, |
|00002520| 22 3a 20 22 29 3b 0d 20 | 20 20 20 54 65 78 74 73 |": ");. | Texts|
|00002530| 2e 57 72 69 74 65 49 6e | 74 28 77 2c 20 63 6f 6d |.WriteIn|t(w, com|
|00002540| 70 61 72 69 73 6f 6e 73 | 2c 20 30 29 3b 20 54 65 |parisons|, 0); Te|
|00002550| 78 74 73 2e 57 72 69 74 | 65 53 74 72 69 6e 67 28 |xts.Writ|eString(|
|00002560| 77 2c 20 22 20 63 6f 6d | 70 61 72 69 73 6f 6e 73 |w, " com|parisons|
|00002570| 2c 20 22 29 3b 0d 20 20 | 20 20 54 65 78 74 73 2e |, ");. | Texts.|
|00002580| 57 72 69 74 65 49 6e 74 | 28 77 2c 20 73 77 61 70 |WriteInt|(w, swap|
|00002590| 73 20 2c 20 30 29 3b 20 | 54 65 78 74 73 2e 57 72 |s , 0); |Texts.Wr|
|000025a0| 69 74 65 53 74 72 69 6e | 67 28 77 2c 20 22 20 73 |iteStrin|g(w, " s|
|000025b0| 77 61 70 73 2c 20 22 29 | 3b 0d 20 20 20 20 74 20 |waps, ")|;. t |
|000025c0| 3a 3d 20 28 74 20 2d 20 | 74 69 6d 65 29 20 2a 20 |:= (t - |time) * |
|000025d0| 31 30 30 20 44 49 56 20 | 50 65 72 53 65 63 3b 0d |100 DIV |PerSec;.|
|000025e0| 20 20 20 20 54 65 78 74 | 73 2e 57 72 69 74 65 49 | Text|s.WriteI|
|000025f0| 6e 74 28 77 2c 20 74 20 | 44 49 56 20 31 30 30 2c |nt(w, t |DIV 100,|
|00002600| 20 30 29 3b 20 54 65 78 | 74 73 2e 57 72 69 74 65 | 0); Tex|ts.Write|
|00002610| 28 77 2c 20 22 2e 22 29 | 3b 20 54 65 78 74 73 2e |(w, ".")|; Texts.|
|00002620| 57 72 69 74 65 49 6e 74 | 28 77 2c 20 74 20 44 49 |WriteInt|(w, t DI|
|00002630| 56 20 31 30 20 4d 4f 44 | 20 31 30 2c 20 30 29 3b |V 10 MOD| 10, 0);|
|00002640| 0d 20 20 20 20 54 65 78 | 74 73 2e 57 72 69 74 65 |. Tex|ts.Write|
|00002650| 49 6e 74 28 77 2c 20 74 | 20 4d 4f 44 20 31 30 2c |Int(w, t| MOD 10,|
|00002660| 20 30 29 3b 20 54 65 78 | 74 73 2e 57 72 69 74 65 | 0); Tex|ts.Write|
|00002670| 53 74 72 69 6e 67 28 77 | 2c 20 22 20 73 65 63 22 |String(w|, " sec"|
|00002680| 29 3b 0d 20 20 20 20 54 | 65 78 74 73 2e 57 72 69 |);. T|exts.Wri|
|00002690| 74 65 4c 6e 28 77 29 3b | 20 54 65 78 74 73 2e 41 |teLn(w);| Texts.A|
|000026a0| 70 70 65 6e 64 28 4f 62 | 65 72 6f 6e 2e 4c 6f 67 |ppend(Ob|eron.Log|
|000026b0| 2c 20 77 2e 62 75 66 29 | 0d 20 20 45 4e 44 20 53 |, w.buf)|. END S|
|000026c0| 74 6f 70 3b 0d 0d 28 2a | 20 63 6f 6d 6d 61 6e 64 |top;..(*| command|
|000026d0| 73 20 2a 29 0d 0d 20 20 | 50 52 4f 43 45 44 55 52 |s *).. |PROCEDUR|
|000026e0| 45 20 4e 65 77 44 61 74 | 61 28 73 69 7a 65 3a 20 |E NewDat|a(size: |
|000026f0| 49 4e 54 45 47 45 52 29 | 3a 20 44 61 74 61 3b 0d |INTEGER)|: Data;.|
|00002700| 20 20 20 20 56 41 52 20 | 69 3a 20 49 4e 54 45 47 | VAR |i: INTEG|
|00002710| 45 52 3b 20 64 61 74 61 | 3a 20 44 61 74 61 3b 0d |ER; data|: Data;.|
|00002720| 20 20 42 45 47 49 4e 20 | 4e 45 57 28 64 61 74 61 | BEGIN |NEW(data|
|00002730| 29 3b 20 64 61 74 61 2e | 6c 65 6e 20 3a 3d 20 73 |); data.|len := s|
|00002740| 69 7a 65 3b 20 69 20 3a | 3d 20 73 69 7a 65 3b 0d |ize; i :|= size;.|
|00002750| 20 20 20 20 52 45 50 45 | 41 54 20 44 45 43 28 69 | REPE|AT DEC(i|
|00002760| 29 3b 20 64 61 74 61 2e | 6c 69 73 74 5b 69 5d 20 |); data.|list[i] |
|00002770| 3a 3d 20 69 20 55 4e 54 | 49 4c 20 69 20 3d 20 30 |:= i UNT|IL i = 0|
|00002780| 3b 0d 20 20 20 20 64 61 | 74 61 2e 6c 61 73 74 52 |;. da|ta.lastR|
|00002790| 61 6e 64 6f 6d 20 3a 3d | 20 64 61 74 61 2e 6c 69 |andom :=| data.li|
|000027a0| 73 74 3b 0d 20 20 20 20 | 52 45 54 55 52 4e 20 64 |st;. |RETURN d|
|000027b0| 61 74 61 0d 20 20 45 4e | 44 20 4e 65 77 44 61 74 |ata. EN|D NewDat|
|000027c0| 61 3b 0d 0d 20 20 50 52 | 4f 43 45 44 55 52 45 20 |a;.. PR|OCEDURE |
|000027d0| 4f 70 65 6e 2a 3b 0d 20 | 20 20 20 56 41 52 20 78 |Open*;. | VAR x|
|000027e0| 2c 20 79 3a 20 49 4e 54 | 45 47 45 52 3b 20 66 3a |, y: INT|EGER; f:|
|000027f0| 20 46 72 61 6d 65 3b 20 | 76 3a 20 4d 65 6e 75 56 | Frame; |v: MenuV|
|00002800| 69 65 77 65 72 73 2e 56 | 69 65 77 65 72 3b 0d 20 |iewers.V|iewer;. |
|00002810| 20 42 45 47 49 4e 20 4e | 45 57 28 66 29 3b 20 66 | BEGIN N|EW(f); f|
|00002820| 2e 68 61 6e 64 6c 65 20 | 3a 3d 20 48 61 6e 64 6c |.handle |:= Handl|
|00002830| 65 72 3b 20 66 2e 64 61 | 74 61 20 3a 3d 20 4e 65 |er; f.da|ta := Ne|
|00002840| 77 44 61 74 61 28 4e 29 | 3b 0d 20 20 20 20 66 2e |wData(N)|;. f.|
|00002850| 75 70 64 61 74 65 52 65 | 6f 72 64 65 72 20 3a 3d |updateRe|order :=|
|00002860| 20 55 70 64 61 74 65 52 | 65 6f 72 64 65 72 3b 20 | UpdateR|eorder; |
|00002870| 66 2e 75 70 64 61 74 65 | 53 77 61 70 20 3a 3d 20 |f.update|Swap := |
|00002880| 55 70 64 61 74 65 53 77 | 61 70 3b 20 66 2e 6d 6f |UpdateSw|ap; f.mo|
|00002890| 64 69 66 79 20 3a 3d 20 | 4d 6f 64 69 66 79 3b 0d |dify := |Modify;.|
|000028a0| 20 20 20 20 4f 62 65 72 | 6f 6e 2e 41 6c 6c 6f 63 | Ober|on.Alloc|
|000028b0| 61 74 65 55 73 65 72 56 | 69 65 77 65 72 28 4f 62 |ateUserV|iewer(Ob|
|000028c0| 65 72 6f 6e 2e 4d 6f 75 | 73 65 2e 58 2c 20 78 2c |eron.Mou|se.X, x,|
|000028d0| 20 79 29 3b 0d 20 20 20 | 20 76 20 3a 3d 20 4d 65 | y);. | v := Me|
|000028e0| 6e 75 56 69 65 77 65 72 | 73 2e 4e 65 77 28 54 65 |nuViewer|s.New(Te|
|000028f0| 78 74 46 72 61 6d 65 73 | 2e 4e 65 77 4d 65 6e 75 |xtFrames|.NewMenu|
|00002900| 28 22 53 6f 72 74 44 65 | 6d 6f 22 2c 20 4d 65 6e |("SortDe|mo", Men|
|00002910| 75 29 2c 20 66 2c 20 54 | 65 78 74 46 72 61 6d 65 |u), f, T|extFrame|
|00002920| 73 2e 6d 65 6e 75 48 2c | 20 78 2c 20 79 29 0d 20 |s.menuH,| x, y). |
|00002930| 20 45 4e 44 20 4f 70 65 | 6e 3b 0d 0d 20 20 50 52 | END Ope|n;.. PR|
|00002940| 4f 43 45 44 55 52 45 20 | 4f 70 65 6e 44 6f 74 56 |OCEDURE |OpenDotV|
|00002950| 69 65 77 2a 3b 0d 20 20 | 20 20 56 41 52 20 78 2c |iew*;. | VAR x,|
|00002960| 20 79 3a 20 49 4e 54 45 | 47 45 52 3b 20 66 3a 20 | y: INTE|GER; f: |
|00002970| 46 72 61 6d 65 3b 20 76 | 3a 20 4d 65 6e 75 56 69 |Frame; v|: MenuVi|
|00002980| 65 77 65 72 73 2e 56 69 | 65 77 65 72 3b 0d 20 20 |ewers.Vi|ewer;. |
|00002990| 42 45 47 49 4e 20 4e 45 | 57 28 66 29 3b 20 66 2e |BEGIN NE|W(f); f.|
|000029a0| 68 61 6e 64 6c 65 20 3a | 3d 20 48 61 6e 64 6c 65 |handle :|= Handle|
|000029b0| 72 3b 20 66 2e 64 61 74 | 61 20 3a 3d 20 4e 65 77 |r; f.dat|a := New|
|000029c0| 44 61 74 61 28 44 6f 74 | 4e 29 3b 0d 20 20 20 20 |Data(Dot|N);. |
|000029d0| 66 2e 75 70 64 61 74 65 | 52 65 6f 72 64 65 72 20 |f.update|Reorder |
|000029e0| 3a 3d 20 55 70 64 61 74 | 65 52 65 6f 72 64 65 72 |:= Updat|eReorder|
|000029f0| 44 6f 74 56 69 65 77 3b | 20 66 2e 75 70 64 61 74 |DotView;| f.updat|
|00002a00| 65 53 77 61 70 20 3a 3d | 20 55 70 64 61 74 65 53 |eSwap :=| UpdateS|
|00002a10| 77 61 70 44 6f 74 56 69 | 65 77 3b 20 66 2e 6d 6f |wapDotVi|ew; f.mo|
|00002a20| 64 69 66 79 20 3a 3d 20 | 4d 6f 64 69 66 79 44 6f |dify := |ModifyDo|
|00002a30| 74 56 69 65 77 3b 0d 20 | 20 20 20 4f 62 65 72 6f |tView;. | Obero|
|00002a40| 6e 2e 41 6c 6c 6f 63 61 | 74 65 55 73 65 72 56 69 |n.Alloca|teUserVi|
|00002a50| 65 77 65 72 28 4f 62 65 | 72 6f 6e 2e 4d 6f 75 73 |ewer(Obe|ron.Mous|
|00002a60| 65 2e 58 2c 20 78 2c 20 | 79 29 3b 0d 20 20 20 20 |e.X, x, |y);. |
|00002a70| 76 20 3a 3d 20 4d 65 6e | 75 56 69 65 77 65 72 73 |v := Men|uViewers|
|00002a80| 2e 4e 65 77 28 54 65 78 | 74 46 72 61 6d 65 73 2e |.New(Tex|tFrames.|
|00002a90| 4e 65 77 4d 65 6e 75 28 | 22 53 6f 72 74 44 65 6d |NewMenu(|"SortDem|
|00002aa0| 6f 22 2c 20 4d 65 6e 75 | 29 2c 20 66 2c 20 54 65 |o", Menu|), f, Te|
|00002ab0| 78 74 46 72 61 6d 65 73 | 2e 6d 65 6e 75 48 2c 20 |xtFrames|.menuH, |
|00002ac0| 78 2c 20 79 29 0d 20 20 | 45 4e 44 20 4f 70 65 6e |x, y). |END Open|
|00002ad0| 44 6f 74 56 69 65 77 3b | 0d 0d 20 20 50 52 4f 43 |DotView;|.. PROC|
|00002ae0| 45 44 55 52 45 20 53 65 | 74 43 6f 6d 70 61 72 65 |EDURE Se|tCompare|
|00002af0| 43 6f 73 74 2a 3b 0d 20 | 20 20 20 56 41 52 20 78 |Cost*;. | VAR x|
|00002b00| 3a 20 4c 4f 4e 47 49 4e | 54 3b 0d 20 20 42 45 47 |: LONGIN|T;. BEG|
|00002b10| 49 4e 20 78 20 3a 3d 20 | 50 61 72 49 6e 74 65 67 |IN x := |ParInteg|
|00002b20| 65 72 28 29 3b 0d 20 20 | 20 20 49 46 20 78 20 3e |er();. | IF x >|
|00002b30| 3d 20 30 20 54 48 45 4e | 20 64 65 6c 61 79 20 3a |= 0 THEN| delay :|
|00002b40| 3d 20 78 20 45 4e 44 3b | 0d 20 20 20 20 54 65 78 |= x END;|. Tex|
|00002b50| 74 73 2e 57 72 69 74 65 | 53 74 72 69 6e 67 28 77 |ts.Write|String(w|
|00002b60| 2c 20 22 53 6f 72 74 44 | 65 6d 6f 2e 53 65 74 43 |, "SortD|emo.SetC|
|00002b70| 6f 6d 70 61 72 65 43 6f | 73 74 20 22 29 3b 20 54 |ompareCo|st "); T|
|00002b80| 65 78 74 73 2e 57 72 69 | 74 65 49 6e 74 28 77 2c |exts.Wri|teInt(w,|
|00002b90| 20 64 65 6c 61 79 2c 20 | 30 29 3b 20 54 65 78 74 | delay, |0); Text|
|00002ba0| 73 2e 57 72 69 74 65 4c | 6e 28 77 29 3b 0d 20 20 |s.WriteL|n(w);. |
|00002bb0| 20 20 54 65 78 74 73 2e | 41 70 70 65 6e 64 28 4f | Texts.|Append(O|
|00002bc0| 62 65 72 6f 6e 2e 4c 6f | 67 2c 20 77 2e 62 75 66 |beron.Lo|g, w.buf|
|00002bd0| 29 0d 20 20 45 4e 44 20 | 53 65 74 43 6f 6d 70 61 |). END |SetCompa|
|00002be0| 72 65 43 6f 73 74 3b 0d | 0d 28 2a 20 70 72 65 20 |reCost;.|.(* pre |
|00002bf0| 6f 72 64 65 72 69 6e 67 | 20 2a 29 0d 0d 20 20 50 |ordering| *).. P|
|00002c00| 52 4f 43 45 44 55 52 45 | 20 52 61 6e 64 6f 6d 69 |ROCEDURE| Randomi|
|00002c10| 7a 65 2a 3b 0d 20 20 20 | 20 43 4f 4e 53 54 20 61 |ze*;. | CONST a|
|00002c20| 20 3d 20 31 36 38 30 37 | 3b 20 6d 20 3d 20 32 31 | = 16807|; m = 21|
|00002c30| 34 37 34 38 33 36 34 37 | 3b 20 71 20 3d 20 6d 20 |47483647|; q = m |
|00002c40| 44 49 56 20 61 3b 20 72 | 20 3d 20 6d 20 4d 4f 44 |DIV a; r| = m MOD|
|00002c50| 20 61 3b 0d 20 20 20 20 | 56 41 52 20 69 2c 20 6e | a;. |VAR i, n|
|00002c60| 3a 20 4c 4f 4e 47 49 4e | 54 3b 20 6b 2c 20 6c 2c |: LONGIN|T; k, l,|
|00002c70| 20 78 2c 20 6c 65 6e 3a | 20 49 4e 54 45 47 45 52 | x, len:| INTEGER|
|00002c80| 3b 20 64 61 74 61 3a 20 | 44 61 74 61 3b 20 6d 73 |; data: |Data; ms|
|00002c90| 67 3a 20 53 77 61 70 4d | 73 67 3b 0d 20 20 42 45 |g: SwapM|sg;. BE|
|00002ca0| 47 49 4e 20 64 61 74 61 | 20 3a 3d 20 50 61 72 61 |GIN data| := Para|
|00002cb0| 6d 65 74 65 72 44 61 74 | 61 28 29 3b 0d 20 20 20 |meterDat|a();. |
|00002cc0| 20 49 46 20 64 61 74 61 | 20 23 20 4e 49 4c 20 54 | IF data| # NIL T|
|00002cd0| 48 45 4e 20 6c 65 6e 20 | 3a 3d 20 64 61 74 61 2e |HEN len |:= data.|
|00002ce0| 6c 65 6e 3b 20 6e 20 3a | 3d 20 50 61 72 49 6e 74 |len; n :|= ParInt|
|00002cf0| 65 67 65 72 28 29 3b 0d | 20 20 20 20 20 20 49 46 |eger();.| IF|
|00002d00| 20 6e 20 3e 20 30 20 54 | 48 45 4e 0d 20 20 20 20 | n > 0 T|HEN. |
|00002d10| 20 20 20 20 52 45 50 45 | 41 54 20 44 45 43 28 6e | REPE|AT DEC(n|
|00002d20| 29 3b 0d 20 20 20 20 20 | 20 20 20 20 20 69 20 3a |);. | i :|
|00002d30| 3d 20 61 20 2a 20 28 73 | 65 65 64 20 4d 4f 44 20 |= a * (s|eed MOD |
|00002d40| 71 29 20 2d 20 72 20 2a | 20 28 73 65 65 64 20 44 |q) - r *| (seed D|
|00002d50| 49 56 20 71 29 3b 0d 20 | 20 20 20 20 20 20 20 20 |IV q);. | |
|00002d60| 20 49 46 20 69 20 3e 20 | 30 20 54 48 45 4e 20 73 | IF i > |0 THEN s|
|00002d70| 65 65 64 20 3a 3d 20 69 | 20 45 4c 53 45 20 73 65 |eed := i| ELSE se|
|00002d80| 65 64 20 3a 3d 20 69 20 | 2b 20 6d 20 45 4e 44 3b |ed := i |+ m END;|
|00002d90| 0d 20 20 20 20 20 20 20 | 20 20 20 6b 20 3a 3d 20 |. | k := |
|00002da0| 53 48 4f 52 54 28 73 65 | 65 64 20 4d 4f 44 20 6c |SHORT(se|ed MOD l|
|00002db0| 65 6e 29 3b 20 6c 20 3a | 3d 20 53 48 4f 52 54 28 |en); l :|= SHORT(|
|00002dc0| 28 73 65 65 64 20 44 49 | 56 20 6c 65 6e 29 20 4d |(seed DI|V len) M|
|00002dd0| 4f 44 20 6c 65 6e 29 3b | 0d 20 20 20 20 20 20 20 |OD len);|. |
|00002de0| 20 20 20 78 20 3a 3d 20 | 64 61 74 61 2e 6c 69 73 | x := |data.lis|
|00002df0| 74 5b 6b 5d 3b 20 64 61 | 74 61 2e 6c 69 73 74 5b |t[k]; da|ta.list[|
|00002e00| 6b 5d 20 3a 3d 20 64 61 | 74 61 2e 6c 69 73 74 5b |k] := da|ta.list[|
|00002e10| 6c 5d 3b 20 64 61 74 61 | 2e 6c 69 73 74 5b 6c 5d |l]; data|.list[l]|
|00002e20| 20 3a 3d 20 78 3b 0d 20 | 20 20 20 20 20 20 20 20 | := x;. | |
|00002e30| 20 6d 73 67 2e 64 61 74 | 61 20 3a 3d 20 64 61 74 | msg.dat|a := dat|
|00002e40| 61 3b 20 6d 73 67 2e 69 | 20 3a 3d 20 6b 3b 20 6d |a; msg.i| := k; m|
|00002e50| 73 67 2e 6a 20 3a 3d 20 | 6c 3b 20 56 69 65 77 65 |sg.j := |l; Viewe|
|00002e60| 72 73 2e 42 72 6f 61 64 | 63 61 73 74 28 6d 73 67 |rs.Broad|cast(msg|
|00002e70| 29 0d 20 20 20 20 20 20 | 20 20 55 4e 54 49 4c 20 |). | UNTIL |
|00002e80| 6e 20 3d 20 30 3b 0d 20 | 20 20 20 20 20 20 20 64 |n = 0;. | d|
|00002e90| 61 74 61 2e 6c 61 73 74 | 52 61 6e 64 6f 6d 20 3a |ata.last|Random :|
|00002ea0| 3d 20 64 61 74 61 2e 6c | 69 73 74 0d 20 20 20 20 |= data.l|ist. |
|00002eb0| 20 20 45 4e 44 0d 20 20 | 20 20 45 4e 44 0d 20 20 | END. | END. |
|00002ec0| 45 4e 44 20 52 61 6e 64 | 6f 6d 69 7a 65 3b 0d 0d |END Rand|omize;..|
|00002ed0| 20 20 50 52 4f 43 45 44 | 55 52 45 20 52 65 63 61 | PROCED|URE Reca|
|00002ee0| 6c 6c 2a 3b 0d 20 20 20 | 20 56 41 52 20 64 61 74 |ll*;. | VAR dat|
|00002ef0| 61 3a 20 44 61 74 61 3b | 20 6d 73 67 3a 20 52 65 |a: Data;| msg: Re|
|00002f00| 6f 72 64 65 72 4d 73 67 | 3b 0d 20 20 42 45 47 49 |orderMsg|;. BEGI|
|00002f10| 4e 20 64 61 74 61 20 3a | 3d 20 50 61 72 61 6d 65 |N data :|= Parame|
|00002f20| 74 65 72 44 61 74 61 28 | 29 3b 0d 20 20 20 20 49 |terData(|);. I|
|00002f30| 46 20 64 61 74 61 20 23 | 20 4e 49 4c 20 54 48 45 |F data #| NIL THE|
|00002f40| 4e 20 64 61 74 61 2e 6c | 69 73 74 20 3a 3d 20 64 |N data.l|ist := d|
|00002f50| 61 74 61 2e 6c 61 73 74 | 52 61 6e 64 6f 6d 3b 0d |ata.last|Random;.|
|00002f60| 20 20 20 20 20 20 6d 73 | 67 2e 64 61 74 61 20 3a | ms|g.data :|
|00002f70| 3d 20 64 61 74 61 3b 20 | 56 69 65 77 65 72 73 2e |= data; |Viewers.|
|00002f80| 42 72 6f 61 64 63 61 73 | 74 28 6d 73 67 29 0d 20 |Broadcas|t(msg). |
|00002f90| 20 20 20 45 4e 44 0d 20 | 20 45 4e 44 20 52 65 63 | END. | END Rec|
|00002fa0| 61 6c 6c 3b 0d 0d 20 20 | 50 52 4f 43 45 44 55 52 |all;.. |PROCEDUR|
|00002fb0| 45 20 52 65 76 65 72 73 | 65 4f 72 64 65 72 2a 3b |E Revers|eOrder*;|
|00002fc0| 0d 20 20 20 20 56 41 52 | 20 69 2c 20 6c 65 6e 3a |. VAR| i, len:|
|00002fd0| 20 49 4e 54 45 47 45 52 | 3b 20 64 61 74 61 3a 20 | INTEGER|; data: |
|00002fe0| 44 61 74 61 3b 20 6d 73 | 67 3a 20 52 65 6f 72 64 |Data; ms|g: Reord|
|00002ff0| 65 72 4d 73 67 3b 0d 20 | 20 42 45 47 49 4e 20 64 |erMsg;. | BEGIN d|
|00003000| 61 74 61 20 3a 3d 20 50 | 61 72 61 6d 65 74 65 72 |ata := P|arameter|
|00003010| 44 61 74 61 28 29 3b 0d | 20 20 20 20 49 46 20 64 |Data();.| IF d|
|00003020| 61 74 61 20 23 20 4e 49 | 4c 20 54 48 45 4e 20 6c |ata # NI|L THEN l|
|00003030| 65 6e 20 3a 3d 20 64 61 | 74 61 2e 6c 65 6e 3b 20 |en := da|ta.len; |
|00003040| 69 20 3a 3d 20 6c 65 6e | 3b 0d 20 20 20 20 20 20 |i := len|;. |
|00003050| 52 45 50 45 41 54 20 44 | 45 43 28 69 29 3b 20 64 |REPEAT D|EC(i); d|
|00003060| 61 74 61 2e 6c 69 73 74 | 5b 69 5d 20 3a 3d 20 6c |ata.list|[i] := l|
|00003070| 65 6e 20 2d 20 31 20 2d | 20 69 20 55 4e 54 49 4c |en - 1 -| i UNTIL|
|00003080| 20 69 20 3d 20 30 3b 0d | 20 20 20 20 20 20 6d 73 | i = 0;.| ms|
|00003090| 67 2e 64 61 74 61 20 3a | 3d 20 64 61 74 61 3b 20 |g.data :|= data; |
|000030a0| 56 69 65 77 65 72 73 2e | 42 72 6f 61 64 63 61 73 |Viewers.|Broadcas|
|000030b0| 74 28 6d 73 67 29 0d 20 | 20 20 20 45 4e 44 0d 20 |t(msg). | END. |
|000030c0| 20 45 4e 44 20 52 65 76 | 65 72 73 65 4f 72 64 65 | END Rev|erseOrde|
|000030d0| 72 3b 0d 0d 20 20 50 52 | 4f 43 45 44 55 52 45 20 |r;.. PR|OCEDURE |
|000030e0| 51 75 69 63 6b 57 6f 72 | 73 74 4f 72 64 65 72 2a |QuickWor|stOrder*|
|000030f0| 3b 0d 20 20 20 20 56 41 | 52 20 69 2c 20 6a 2c 20 |;. VA|R i, j, |
|00003100| 6d 2c 20 78 2c 20 6c 65 | 6e 3a 20 49 4e 54 45 47 |m, x, le|n: INTEG|
|00003110| 45 52 3b 20 64 61 74 61 | 3a 20 44 61 74 61 3b 20 |ER; data|: Data; |
|00003120| 6d 73 67 3a 20 52 65 6f | 72 64 65 72 4d 73 67 3b |msg: Reo|rderMsg;|
|00003130| 0d 20 20 42 45 47 49 4e | 20 64 61 74 61 20 3a 3d |. BEGIN| data :=|
|00003140| 20 50 61 72 61 6d 65 74 | 65 72 44 61 74 61 28 29 | Paramet|erData()|
|00003150| 3b 0d 20 20 20 20 49 46 | 20 64 61 74 61 20 23 20 |;. IF| data # |
|00003160| 4e 49 4c 20 54 48 45 4e | 20 6c 65 6e 20 3a 3d 20 |NIL THEN| len := |
|00003170| 64 61 74 61 2e 6c 65 6e | 3b 20 69 20 3a 3d 20 6c |data.len|; i := l|
|00003180| 65 6e 3b 0d 20 20 20 20 | 20 20 52 45 50 45 41 54 |en;. | REPEAT|
|00003190| 20 44 45 43 28 69 29 3b | 20 64 61 74 61 2e 6c 69 | DEC(i);| data.li|
|000031a0| 73 74 5b 69 5d 20 3a 3d | 20 69 20 55 4e 54 49 4c |st[i] :=| i UNTIL|
|000031b0| 20 69 20 3d 20 30 3b 0d | 20 20 20 20 20 20 69 20 | i = 0;.| i |
|000031c0| 3a 3d 20 28 6c 65 6e 20 | 2d 20 31 29 20 44 49 56 |:= (len |- 1) DIV|
|000031d0| 20 32 3b 20 6a 20 3a 3d | 20 69 3b 0d 20 20 20 20 | 2; j :=| i;. |
|000031e0| 20 20 57 48 49 4c 45 20 | 6a 20 3c 20 6c 65 6e 20 | WHILE |j < len |
|000031f0| 2d 20 31 20 44 4f 20 49 | 4e 43 28 6a 29 3b 20 6d |- 1 DO I|NC(j); m|
|00003200| 20 3a 3d 20 28 69 20 2b | 20 6a 29 20 44 49 56 20 | := (i +| j) DIV |
|00003210| 32 3b 0d 20 20 20 20 20 | 20 20 20 78 20 3a 3d 20 |2;. | x := |
|00003220| 64 61 74 61 2e 6c 69 73 | 74 5b 6a 5d 3b 20 64 61 |data.lis|t[j]; da|
|00003230| 74 61 2e 6c 69 73 74 5b | 6a 5d 20 3a 3d 20 64 61 |ta.list[|j] := da|
|00003240| 74 61 2e 6c 69 73 74 5b | 6d 5d 3b 20 64 61 74 61 |ta.list[|m]; data|
|00003250| 2e 6c 69 73 74 5b 6d 5d | 20 3a 3d 20 78 3b 0d 20 |.list[m]| := x;. |
|00003260| 20 20 20 20 20 20 20 49 | 46 20 69 20 3e 20 30 20 | I|F i > 0 |
|00003270| 54 48 45 4e 20 44 45 43 | 28 69 29 3b 20 6d 20 3a |THEN DEC|(i); m :|
|00003280| 3d 20 28 69 20 2b 20 6a | 29 20 44 49 56 20 32 3b |= (i + j|) DIV 2;|
|00003290| 0d 20 20 20 20 20 20 20 | 20 20 20 78 20 3a 3d 20 |. | x := |
|000032a0| 64 61 74 61 2e 6c 69 73 | 74 5b 69 5d 3b 20 64 61 |data.lis|t[i]; da|
|000032b0| 74 61 2e 6c 69 73 74 5b | 69 5d 20 3a 3d 20 64 61 |ta.list[|i] := da|
|000032c0| 74 61 2e 6c 69 73 74 5b | 6d 5d 3b 20 64 61 74 61 |ta.list[|m]; data|
|000032d0| 2e 6c 69 73 74 5b 6d 5d | 20 3a 3d 20 78 0d 20 20 |.list[m]| := x. |
|000032e0| 20 20 20 20 20 20 45 4e | 44 0d 20 20 20 20 20 20 | EN|D. |
|000032f0| 45 4e 44 3b 0d 20 20 20 | 20 20 20 6d 73 67 2e 64 |END;. | msg.d|
|00003300| 61 74 61 20 3a 3d 20 64 | 61 74 61 3b 20 56 69 65 |ata := d|ata; Vie|
|00003310| 77 65 72 73 2e 42 72 6f | 61 64 63 61 73 74 28 6d |wers.Bro|adcast(m|
|00003320| 73 67 29 0d 20 20 20 20 | 45 4e 44 0d 20 20 45 4e |sg). |END. EN|
|00003330| 44 20 51 75 69 63 6b 57 | 6f 72 73 74 4f 72 64 65 |D QuickW|orstOrde|
|00003340| 72 3b 0d 0d 28 2a 20 73 | 6f 72 74 65 72 73 20 2a |r;..(* s|orters *|
|00003350| 29 0d 0d 20 20 50 52 4f | 43 45 44 55 52 45 20 42 |).. PRO|CEDURE B|
|00003360| 75 62 62 6c 65 2a 3b 0d | 20 20 20 20 56 41 52 20 |ubble*;.| VAR |
|00003370| 73 77 61 70 70 65 64 3a | 20 42 4f 4f 4c 45 41 4e |swapped:| BOOLEAN|
|00003380| 3b 20 69 2c 20 6e 3a 20 | 49 4e 54 45 47 45 52 3b |; i, n: |INTEGER;|
|00003390| 20 64 61 74 61 3a 20 44 | 61 74 61 3b 0d 20 20 42 | data: D|ata;. B|
|000033a0| 45 47 49 4e 20 64 61 74 | 61 20 3a 3d 20 50 61 72 |EGIN dat|a := Par|
|000033b0| 61 6d 65 74 65 72 44 61 | 74 61 28 29 3b 0d 20 20 |ameterDa|ta();. |
|000033c0| 20 20 49 46 20 64 61 74 | 61 20 23 20 4e 49 4c 20 | IF dat|a # NIL |
|000033d0| 54 48 45 4e 20 53 74 61 | 72 74 3b 0d 20 20 20 20 |THEN Sta|rt;. |
|000033e0| 20 20 20 6e 20 3a 3d 20 | 64 61 74 61 2e 6c 65 6e | n := |data.len|
|000033f0| 3b 0d 20 20 20 20 20 20 | 20 52 45 50 45 41 54 20 |;. | REPEAT |
|00003400| 73 77 61 70 70 65 64 20 | 3a 3d 20 46 41 4c 53 45 |swapped |:= FALSE|
|00003410| 3b 20 69 20 3a 3d 20 31 | 3b 0d 20 20 20 20 20 20 |; i := 1|;. |
|00003420| 20 20 20 57 48 49 4c 45 | 20 69 20 3c 20 6e 20 44 | WHILE| i < n D|
|00003430| 4f 0d 20 20 20 20 20 20 | 20 20 20 20 20 49 46 20 |O. | IF |
|00003440| 4c 65 73 73 28 64 61 74 | 61 2c 20 69 2c 20 69 20 |Less(dat|a, i, i |
|00003450| 2d 20 31 29 20 54 48 45 | 4e 20 53 77 61 70 28 64 |- 1) THE|N Swap(d|
|00003460| 61 74 61 2c 20 69 2c 20 | 69 20 2d 20 31 29 3b 20 |ata, i, |i - 1); |
|00003470| 73 77 61 70 70 65 64 20 | 3a 3d 20 54 52 55 45 20 |swapped |:= TRUE |
|00003480| 45 4e 44 3b 0d 20 20 20 | 20 20 20 20 20 20 20 20 |END;. | |
|00003490| 49 4e 43 28 69 29 0d 20 | 20 20 20 20 20 20 20 20 |INC(i). | |
|000034a0| 45 4e 44 0d 20 20 20 20 | 20 20 20 55 4e 54 49 4c |END. | UNTIL|
|000034b0| 20 7e 73 77 61 70 70 65 | 64 3b 0d 20 20 20 20 20 | ~swappe|d;. |
|000034c0| 20 53 74 6f 70 28 22 53 | 6f 72 74 44 65 6d 6f 2e | Stop("S|ortDemo.|
|000034d0| 42 75 62 62 6c 65 22 29 | 0d 20 20 20 20 45 4e 44 |Bubble")|. END|
|000034e0| 0d 20 20 45 4e 44 20 42 | 75 62 62 6c 65 3b 0d 0d |. END B|ubble;..|
|000034f0| 20 20 50 52 4f 43 45 44 | 55 52 45 20 53 65 6c 65 | PROCED|URE Sele|
|00003500| 63 74 2a 3b 0d 20 20 20 | 20 56 41 52 20 69 2c 20 |ct*;. | VAR i, |
|00003510| 6a 2c 20 6d 69 6e 2c 20 | 6c 65 6e 3a 20 49 4e 54 |j, min, |len: INT|
|00003520| 45 47 45 52 3b 20 64 61 | 74 61 3a 20 44 61 74 61 |EGER; da|ta: Data|
|00003530| 3b 0d 20 20 42 45 47 49 | 4e 20 64 61 74 61 20 3a |;. BEGI|N data :|
|00003540| 3d 20 50 61 72 61 6d 65 | 74 65 72 44 61 74 61 28 |= Parame|terData(|
|00003550| 29 3b 0d 20 20 20 20 49 | 46 20 64 61 74 61 20 23 |);. I|F data #|
|00003560| 20 4e 49 4c 20 54 48 45 | 4e 20 6c 65 6e 20 3a 3d | NIL THE|N len :=|
|00003570| 20 64 61 74 61 2e 6c 65 | 6e 3b 20 53 74 61 72 74 | data.le|n; Start|
|00003580| 3b 0d 20 20 20 20 20 20 | 69 20 3a 3d 20 30 3b 0d |;. |i := 0;.|
|00003590| 20 20 20 20 20 20 57 48 | 49 4c 45 20 69 20 3c 20 | WH|ILE i < |
|000035a0| 6c 65 6e 20 44 4f 20 6d | 69 6e 20 3a 3d 20 69 3b |len DO m|in := i;|
|000035b0| 20 6a 20 3a 3d 20 69 20 | 2b 20 31 3b 0d 20 20 20 | j := i |+ 1;. |
|000035c0| 20 20 20 20 20 57 48 49 | 4c 45 20 6a 20 3c 20 6c | WHI|LE j < l|
|000035d0| 65 6e 20 44 4f 0d 20 20 | 20 20 20 20 20 20 20 20 |en DO. | |
|000035e0| 49 46 20 4c 65 73 73 28 | 64 61 74 61 2c 20 6a 2c |IF Less(|data, j,|
|000035f0| 20 6d 69 6e 29 20 54 48 | 45 4e 20 6d 69 6e 20 3a | min) TH|EN min :|
|00003600| 3d 20 6a 20 45 4e 44 3b | 0d 20 20 20 20 20 20 20 |= j END;|. |
|00003610| 20 20 20 49 4e 43 28 6a | 29 0d 20 20 20 20 20 20 | INC(j|). |
|00003620| 20 20 45 4e 44 3b 0d 20 | 20 20 20 20 20 20 20 49 | END;. | I|
|00003630| 46 20 69 20 23 20 6d 69 | 6e 20 54 48 45 4e 20 53 |F i # mi|n THEN S|
|00003640| 77 61 70 28 64 61 74 61 | 2c 20 69 2c 20 6d 69 6e |wap(data|, i, min|
|00003650| 29 20 45 4e 44 3b 0d 20 | 20 20 20 20 20 20 20 49 |) END;. | I|
|00003660| 4e 43 28 69 29 0d 20 20 | 20 20 20 20 45 4e 44 3b |NC(i). | END;|
|00003670| 0d 20 20 20 20 20 20 53 | 74 6f 70 28 22 53 6f 72 |. S|top("Sor|
|00003680| 74 44 65 6d 6f 2e 4d 69 | 6e 53 65 61 72 63 68 22 |tDemo.Mi|nSearch"|
|00003690| 29 0d 20 20 20 20 45 4e | 44 0d 20 20 45 4e 44 20 |). EN|D. END |
|000036a0| 53 65 6c 65 63 74 3b 0d | 0d 20 20 50 52 4f 43 45 |Select;.|. PROCE|
|000036b0| 44 55 52 45 20 49 6e 73 | 65 72 74 2a 3b 0d 20 20 |DURE Ins|ert*;. |
|000036c0| 20 20 56 41 52 20 69 2c | 20 6c 6f 2c 20 68 69 2c | VAR i,| lo, hi,|
|000036d0| 20 6d 3a 20 49 4e 54 45 | 47 45 52 3b 20 64 61 74 | m: INTE|GER; dat|
|000036e0| 61 3a 20 44 61 74 61 3b | 0d 20 20 42 45 47 49 4e |a: Data;|. BEGIN|
|000036f0| 20 64 61 74 61 20 3a 3d | 20 50 61 72 61 6d 65 74 | data :=| Paramet|
|00003700| 65 72 44 61 74 61 28 29 | 3b 0d 20 20 20 20 49 46 |erData()|;. IF|
|00003710| 20 64 61 74 61 20 23 20 | 4e 49 4c 20 54 48 45 4e | data # |NIL THEN|
|00003720| 20 53 74 61 72 74 3b 0d | 20 20 20 20 20 20 69 20 | Start;.| i |
|00003730| 3a 3d 20 31 3b 0d 20 20 | 20 20 20 20 57 48 49 4c |:= 1;. | WHIL|
|00003740| 45 20 69 20 3c 20 64 61 | 74 61 2e 6c 65 6e 20 44 |E i < da|ta.len D|
|00003750| 4f 20 6c 6f 20 3a 3d 20 | 30 3b 20 68 69 20 3a 3d |O lo := |0; hi :=|
|00003760| 20 69 3b 0d 20 20 20 20 | 20 20 20 20 57 48 49 4c | i;. | WHIL|
|00003770| 45 20 6c 6f 20 23 20 68 | 69 20 44 4f 20 6d 20 3a |E lo # h|i DO m :|
|00003780| 3d 20 28 6c 6f 20 2b 20 | 68 69 29 20 44 49 56 20 |= (lo + |hi) DIV |
|00003790| 32 3b 0d 20 20 20 20 20 | 20 20 20 20 20 49 46 20 |2;. | IF |
|000037a0| 7e 4c 65 73 73 28 64 61 | 74 61 2c 20 69 2c 20 6d |~Less(da|ta, i, m|
|000037b0| 29 20 54 48 45 4e 20 6c | 6f 20 3a 3d 20 6d 20 2b |) THEN l|o := m +|
|000037c0| 20 31 20 45 4c 53 45 20 | 68 69 20 3a 3d 20 6d 20 | 1 ELSE |hi := m |
|000037d0| 45 4e 44 0d 20 20 20 20 | 20 20 20 20 45 4e 44 3b |END. | END;|
|000037e0| 0d 20 20 20 20 20 20 20 | 20 6d 20 3a 3d 20 69 3b |. | m := i;|
|000037f0| 0d 20 20 20 20 20 20 20 | 20 57 48 49 4c 45 20 6d |. | WHILE m|
|00003800| 20 3e 20 68 69 20 44 4f | 20 53 77 61 70 28 64 61 | > hi DO| Swap(da|
|00003810| 74 61 2c 20 6d 20 2d 20 | 31 2c 20 6d 29 3b 20 44 |ta, m - |1, m); D|
|00003820| 45 43 28 6d 29 20 45 4e | 44 3b 0d 20 20 20 20 20 |EC(m) EN|D;. |
|00003830| 20 20 20 49 4e 43 28 69 | 29 0d 20 20 20 20 20 20 | INC(i|). |
|00003840| 45 4e 44 3b 0d 20 20 20 | 20 20 20 53 74 6f 70 28 |END;. | Stop(|
|00003850| 22 53 6f 72 74 44 65 6d | 6f 2e 49 6e 73 65 72 74 |"SortDem|o.Insert|
|00003860| 22 29 0d 20 20 20 20 45 | 4e 44 0d 20 20 45 4e 44 |"). E|ND. END|
|00003870| 20 49 6e 73 65 72 74 3b | 0d 0d 20 20 50 52 4f 43 | Insert;|.. PROC|
|00003880| 45 44 55 52 45 20 53 68 | 65 6c 6c 2a 3b 0d 20 20 |EDURE Sh|ell*;. |
|00003890| 20 20 56 41 52 20 69 2c | 20 6a 2c 20 68 2c 20 6c | VAR i,| j, h, l|
|000038a0| 65 6e 3a 20 49 4e 54 45 | 47 45 52 3b 20 64 61 74 |en: INTE|GER; dat|
|000038b0| 61 3a 20 44 61 74 61 3b | 0d 20 20 42 45 47 49 4e |a: Data;|. BEGIN|
|000038c0| 20 64 61 74 61 20 3a 3d | 20 50 61 72 61 6d 65 74 | data :=| Paramet|
|000038d0| 65 72 44 61 74 61 28 29 | 3b 0d 20 20 20 20 49 46 |erData()|;. IF|
|000038e0| 20 64 61 74 61 20 23 20 | 4e 49 4c 20 54 48 45 4e | data # |NIL THEN|
|000038f0| 20 6c 65 6e 20 3a 3d 20 | 64 61 74 61 2e 6c 65 6e | len := |data.len|
|00003900| 3b 20 53 74 61 72 74 3b | 0d 20 20 20 20 20 20 69 |; Start;|. i|
|00003910| 20 3a 3d 20 34 3b 20 68 | 20 3a 3d 20 31 3b 0d 20 | := 4; h| := 1;. |
|00003920| 20 20 20 20 20 57 48 49 | 4c 45 20 69 20 3c 20 6c | WHI|LE i < l|
|00003930| 65 6e 20 44 4f 20 69 20 | 3a 3d 20 69 20 2a 20 32 |en DO i |:= i * 2|
|00003940| 3b 20 68 20 3a 3d 20 32 | 20 2a 20 68 20 2b 20 31 |; h := 2| * h + 1|
|00003950| 20 45 4e 44 3b 0d 20 20 | 20 20 20 20 57 48 49 4c | END;. | WHIL|
|00003960| 45 20 68 20 23 20 30 20 | 44 4f 20 69 20 3a 3d 20 |E h # 0 |DO i := |
|00003970| 68 3b 0d 20 20 20 20 20 | 20 20 20 57 48 49 4c 45 |h;. | WHILE|
|00003980| 20 69 20 3c 20 6c 65 6e | 20 44 4f 20 6a 20 3a 3d | i < len| DO j :=|
|00003990| 20 69 20 2d 20 68 3b 0d | 20 20 20 20 20 20 20 20 | i - h;.| |
|000039a0| 20 20 57 48 49 4c 45 20 | 28 6a 20 3e 3d 20 30 29 | WHILE |(j >= 0)|
|000039b0| 20 26 20 4c 65 73 73 28 | 64 61 74 61 2c 20 6a 20 | & Less(|data, j |
|000039c0| 2b 20 68 2c 20 6a 29 20 | 44 4f 20 53 77 61 70 28 |+ h, j) |DO Swap(|
|000039d0| 64 61 74 61 2c 20 6a 2c | 20 6a 20 2b 20 68 29 3b |data, j,| j + h);|
|000039e0| 20 6a 20 3a 3d 20 6a 20 | 2d 20 68 20 45 4e 44 3b | j := j |- h END;|
|000039f0| 0d 20 20 20 20 20 20 20 | 20 20 20 49 4e 43 28 69 |. | INC(i|
|00003a00| 29 0d 20 20 20 20 20 20 | 20 20 45 4e 44 3b 0d 20 |). | END;. |
|00003a10| 20 20 20 20 20 20 20 68 | 20 3a 3d 20 28 68 20 2d | h| := (h -|
|00003a20| 20 31 29 20 44 49 56 20 | 32 0d 20 20 20 20 20 20 | 1) DIV |2. |
|00003a30| 45 4e 44 3b 0d 20 20 20 | 20 20 20 53 74 6f 70 28 |END;. | Stop(|
|00003a40| 22 53 6f 72 74 44 65 6d | 6f 2e 53 68 65 6c 6c 22 |"SortDem|o.Shell"|
|00003a50| 29 0d 20 20 20 20 45 4e | 44 0d 20 20 45 4e 44 20 |). EN|D. END |
|00003a60| 53 68 65 6c 6c 3b 0d 0d | 20 20 50 52 4f 43 45 44 |Shell;..| PROCED|
|00003a70| 55 52 45 20 51 75 69 63 | 6b 2a 3b 0d 20 20 20 20 |URE Quic|k*;. |
|00003a80| 56 41 52 20 64 61 74 61 | 3a 20 44 61 74 61 3b 0d |VAR data|: Data;.|
|00003a90| 0d 20 20 20 20 50 52 4f | 43 45 44 55 52 45 20 53 |. PRO|CEDURE S|
|00003aa0| 6f 72 74 28 6c 6f 2c 20 | 68 69 3a 20 49 4e 54 45 |ort(lo, |hi: INTE|
|00003ab0| 47 45 52 29 3b 0d 20 20 | 20 20 20 20 56 41 52 20 |GER);. | VAR |
|00003ac0| 69 2c 20 6a 2c 20 6d 3a | 20 49 4e 54 45 47 45 52 |i, j, m:| INTEGER|
|00003ad0| 3b 0d 20 20 20 20 42 45 | 47 49 4e 0d 20 20 20 20 |;. BE|GIN. |
|00003ae0| 20 20 49 46 20 6c 6f 20 | 3c 20 68 69 20 54 48 45 | IF lo |< hi THE|
|00003af0| 4e 20 69 20 3a 3d 20 6c | 6f 3b 20 6a 20 3a 3d 20 |N i := l|o; j := |
|00003b00| 68 69 3b 20 6d 20 3a 3d | 20 28 6c 6f 20 2b 20 68 |hi; m :=| (lo + h|
|00003b10| 69 29 20 44 49 56 20 32 | 3b 0d 20 20 20 20 20 20 |i) DIV 2|;. |
|00003b20| 20 20 52 45 50 45 41 54 | 0d 20 20 20 20 20 20 20 | REPEAT|. |
|00003b30| 20 20 20 57 48 49 4c 45 | 20 4c 65 73 73 28 64 61 | WHILE| Less(da|
|00003b40| 74 61 2c 20 69 2c 20 6d | 29 20 44 4f 20 49 4e 43 |ta, i, m|) DO INC|
|00003b50| 28 69 29 20 45 4e 44 3b | 0d 20 20 20 20 20 20 20 |(i) END;|. |
|00003b60| 20 20 20 57 48 49 4c 45 | 20 4c 65 73 73 28 64 61 | WHILE| Less(da|
|00003b70| 74 61 2c 20 6d 2c 20 6a | 29 20 44 4f 20 44 45 43 |ta, m, j|) DO DEC|
|00003b80| 28 6a 29 20 45 4e 44 3b | 0d 20 20 20 20 20 20 20 |(j) END;|. |
|00003b90| 20 20 20 49 46 20 69 20 | 3c 3d 20 6a 20 54 48 45 | IF i |<= j THE|
|00003ba0| 4e 0d 20 20 20 20 20 20 | 20 20 20 20 20 20 49 46 |N. | IF|
|00003bb0| 20 6d 20 3d 20 69 20 54 | 48 45 4e 20 6d 20 3a 3d | m = i T|HEN m :=|
|00003bc0| 20 6a 20 45 4c 53 49 46 | 20 6d 20 3d 20 6a 20 54 | j ELSIF| m = j T|
|00003bd0| 48 45 4e 20 6d 20 3a 3d | 20 69 20 45 4e 44 3b 0d |HEN m :=| i END;.|
|00003be0| 20 20 20 20 20 20 20 20 | 20 20 20 20 53 77 61 70 | | Swap|
|00003bf0| 28 64 61 74 61 2c 20 69 | 2c 20 6a 29 3b 20 49 4e |(data, i|, j); IN|
|00003c00| 43 28 69 29 3b 20 44 45 | 43 28 6a 29 0d 20 20 20 |C(i); DE|C(j). |
|00003c10| 20 20 20 20 20 20 20 45 | 4e 44 0d 20 20 20 20 20 | E|ND. |
|00003c20| 20 20 20 55 4e 54 49 4c | 20 69 20 3e 20 6a 3b 0d | UNTIL| i > j;.|
|00003c30| 20 20 20 20 20 20 20 20 | 53 6f 72 74 28 6c 6f 2c | |Sort(lo,|
|00003c40| 20 6a 29 3b 20 53 6f 72 | 74 28 69 2c 20 68 69 29 | j); Sor|t(i, hi)|
|00003c50| 0d 20 20 20 20 20 20 45 | 4e 44 0d 20 20 20 20 45 |. E|ND. E|
|00003c60| 4e 44 20 53 6f 72 74 3b | 0d 0d 20 20 42 45 47 49 |ND Sort;|.. BEGI|
|00003c70| 4e 20 64 61 74 61 20 3a | 3d 20 50 61 72 61 6d 65 |N data :|= Parame|
|00003c80| 74 65 72 44 61 74 61 28 | 29 3b 0d 20 20 20 20 49 |terData(|);. I|
|00003c90| 46 20 64 61 74 61 20 23 | 20 4e 49 4c 20 54 48 45 |F data #| NIL THE|
|00003ca0| 4e 20 53 74 61 72 74 3b | 20 53 6f 72 74 28 30 2c |N Start;| Sort(0,|
|00003cb0| 20 64 61 74 61 2e 6c 65 | 6e 20 2d 20 31 29 3b 20 | data.le|n - 1); |
|00003cc0| 53 74 6f 70 28 22 53 6f | 72 74 44 65 6d 6f 2e 51 |Stop("So|rtDemo.Q|
|00003cd0| 75 69 63 6b 22 29 20 45 | 4e 44 0d 20 20 45 4e 44 |uick") E|ND. END|
|00003ce0| 20 51 75 69 63 6b 3b 0d | 0d 20 20 50 52 4f 43 45 | Quick;.|. PROCE|
|00003cf0| 44 55 52 45 20 48 65 61 | 70 2a 3b 0d 20 20 20 20 |DURE Hea|p*;. |
|00003d00| 56 41 52 20 6c 2c 20 72 | 3a 20 49 4e 54 45 47 45 |VAR l, r|: INTEGE|
|00003d10| 52 3b 20 64 61 74 61 3a | 20 44 61 74 61 3b 0d 0d |R; data:| Data;..|
|00003d20| 20 20 20 20 50 52 4f 43 | 45 44 55 52 45 20 53 69 | PROC|EDURE Si|
|00003d30| 66 74 28 6c 2c 20 72 3a | 20 49 4e 54 45 47 45 52 |ft(l, r:| INTEGER|
|00003d40| 29 3b 0d 20 20 20 20 20 | 20 56 41 52 20 69 2c 20 |);. | VAR i, |
|00003d50| 6a 3a 20 49 4e 54 45 47 | 45 52 3b 0d 20 20 20 20 |j: INTEG|ER;. |
|00003d60| 42 45 47 49 4e 20 69 20 | 3a 3d 20 6c 3b 20 6a 20 |BEGIN i |:= l; j |
|00003d70| 3a 3d 20 32 20 2a 20 6c | 20 2b 20 31 3b 0d 20 20 |:= 2 * l| + 1;. |
|00003d80| 20 20 20 20 49 46 20 28 | 6a 20 2b 20 31 20 3c 20 | IF (|j + 1 < |
|00003d90| 72 29 20 26 20 4c 65 73 | 73 28 64 61 74 61 2c 20 |r) & Les|s(data, |
|00003da0| 6a 2c 20 6a 20 2b 20 31 | 29 20 54 48 45 4e 20 49 |j, j + 1|) THEN I|
|00003db0| 4e 43 28 6a 29 20 45 4e | 44 3b 0d 20 20 20 20 20 |NC(j) EN|D;. |
|00003dc0| 20 57 48 49 4c 45 20 28 | 6a 20 3c 20 72 29 20 26 | WHILE (|j < r) &|
|00003dd0| 20 7e 4c 65 73 73 28 64 | 61 74 61 2c 20 6a 2c 20 | ~Less(d|ata, j, |
|00003de0| 69 29 20 44 4f 20 53 77 | 61 70 28 64 61 74 61 2c |i) DO Sw|ap(data,|
|00003df0| 20 69 2c 20 6a 29 3b 20 | 69 20 3a 3d 20 6a 3b 20 | i, j); |i := j; |
|00003e00| 6a 20 3a 3d 20 32 20 2a | 20 6a 20 2b 20 31 3b 0d |j := 2 *| j + 1;.|
|00003e10| 20 20 20 20 20 20 20 20 | 49 46 20 28 6a 20 2b 20 | |IF (j + |
|00003e20| 31 20 3c 20 72 29 20 26 | 20 4c 65 73 73 28 64 61 |1 < r) &| Less(da|
|00003e30| 74 61 2c 20 6a 2c 20 6a | 20 2b 20 31 29 20 54 48 |ta, j, j| + 1) TH|
|00003e40| 45 4e 20 49 4e 43 28 6a | 29 20 45 4e 44 0d 20 20 |EN INC(j|) END. |
|00003e50| 20 20 20 20 45 4e 44 0d | 20 20 20 20 45 4e 44 20 | END.| END |
|00003e60| 53 69 66 74 3b 0d 0d 20 | 20 42 45 47 49 4e 20 64 |Sift;.. | BEGIN d|
|00003e70| 61 74 61 20 3a 3d 20 50 | 61 72 61 6d 65 74 65 72 |ata := P|arameter|
|00003e80| 44 61 74 61 28 29 3b 0d | 20 20 20 20 49 46 20 64 |Data();.| IF d|
|00003e90| 61 74 61 20 23 20 4e 49 | 4c 20 54 48 45 4e 20 53 |ata # NI|L THEN S|
|00003ea0| 74 61 72 74 3b 0d 20 20 | 20 20 20 20 72 20 3a 3d |tart;. | r :=|
|00003eb0| 20 64 61 74 61 2e 6c 65 | 6e 3b 20 6c 20 3a 3d 20 | data.le|n; l := |
|00003ec0| 72 20 44 49 56 20 32 3b | 0d 20 20 20 20 20 20 57 |r DIV 2;|. W|
|00003ed0| 48 49 4c 45 20 6c 20 3e | 20 30 20 44 4f 20 44 45 |HILE l >| 0 DO DE|
|00003ee0| 43 28 6c 29 3b 20 53 69 | 66 74 28 6c 2c 20 72 29 |C(l); Si|ft(l, r)|
|00003ef0| 20 45 4e 44 3b 0d 20 20 | 20 20 20 20 57 48 49 4c | END;. | WHIL|
|00003f00| 45 20 72 20 3e 20 30 20 | 44 4f 20 44 45 43 28 72 |E r > 0 |DO DEC(r|
|00003f10| 29 3b 20 53 77 61 70 28 | 64 61 74 61 2c 20 30 2c |); Swap(|data, 0,|
|00003f20| 20 72 29 3b 20 53 69 66 | 74 28 30 2c 20 72 29 20 | r); Sif|t(0, r) |
|00003f30| 45 4e 44 3b 0d 20 20 20 | 20 20 20 53 74 6f 70 28 |END;. | Stop(|
|00003f40| 22 53 6f 72 74 44 65 6d | 6f 2e 48 65 61 70 22 29 |"SortDem|o.Heap")|
|00003f50| 0d 20 20 20 20 45 4e 44 | 0d 20 20 45 4e 44 20 48 |. END|. END H|
|00003f60| 65 61 70 3b 0d 0d 20 20 | 50 52 4f 43 45 44 55 52 |eap;.. |PROCEDUR|
|00003f70| 45 20 53 6d 6f 6f 74 68 | 2a 3b 0d 20 20 20 20 56 |E Smooth|*;. V|
|00003f80| 41 52 20 71 2c 20 72 2c | 20 70 2c 20 62 2c 20 63 |AR q, r,| p, b, c|
|00003f90| 2c 20 6c 65 6e 3a 20 49 | 4e 54 45 47 45 52 3b 20 |, len: I|NTEGER; |
|00003fa0| 64 61 74 61 3a 20 44 61 | 74 61 3b 0d 0d 20 20 20 |data: Da|ta;.. |
|00003fb0| 20 50 52 4f 43 45 44 55 | 52 45 20 55 70 28 56 41 | PROCEDU|RE Up(VA|
|00003fc0| 52 20 62 2c 20 63 3a 20 | 49 4e 54 45 47 45 52 29 |R b, c: |INTEGER)|
|00003fd0| 3b 0d 20 20 20 20 20 20 | 56 41 52 20 62 31 3a 20 |;. |VAR b1: |
|00003fe0| 49 4e 54 45 47 45 52 3b | 0d 20 20 20 20 42 45 47 |INTEGER;|. BEG|
|00003ff0| 49 4e 20 62 31 20 3a 3d | 20 62 3b 20 62 20 3a 3d |IN b1 :=| b; b :=|
|00004000| 20 62 20 2b 20 63 20 2b | 20 31 3b 20 63 20 3a 3d | b + c +| 1; c :=|
|00004010| 20 62 31 0d 20 20 20 20 | 45 4e 44 20 55 70 3b 0d | b1. |END Up;.|
|00004020| 20 20 20 20 0d 20 20 20 | 20 50 52 4f 43 45 44 55 | . | PROCEDU|
|00004030| 52 45 20 44 6f 77 6e 28 | 56 41 52 20 62 2c 20 63 |RE Down(|VAR b, c|
|00004040| 3a 20 49 4e 54 45 47 45 | 52 29 3b 0d 20 20 20 20 |: INTEGE|R);. |
|00004050| 20 20 56 41 52 20 63 31 | 3a 20 49 4e 54 45 47 45 | VAR c1|: INTEGE|
|00004060| 52 3b 0d 20 20 20 20 42 | 45 47 49 4e 20 63 31 20 |R;. B|EGIN c1 |
|00004070| 3a 3d 20 63 3b 20 63 20 | 3a 3d 20 62 20 2d 20 63 |:= c; c |:= b - c|
|00004080| 20 2d 20 31 3b 20 62 20 | 3a 3d 20 63 31 0d 20 20 | - 1; b |:= c1. |
|00004090| 20 20 45 4e 44 20 44 6f | 77 6e 3b 0d 0d 20 20 20 | END Do|wn;.. |
|000040a0| 20 50 52 4f 43 45 44 55 | 52 45 20 53 69 66 74 28 | PROCEDU|RE Sift(|
|000040b0| 72 2c 20 62 2c 20 63 3a | 20 49 4e 54 45 47 45 52 |r, b, c:| INTEGER|
|000040c0| 29 3b 0d 20 20 20 20 20 | 20 56 41 52 20 72 31 3a |);. | VAR r1:|
|000040d0| 20 49 4e 54 45 47 45 52 | 3b 0d 20 20 20 20 42 45 | INTEGER|;. BE|
|000040e0| 47 49 4e 0d 20 20 20 20 | 20 20 57 48 49 4c 45 20 |GIN. | WHILE |
|000040f0| 62 20 3e 3d 20 33 20 44 | 4f 20 72 31 20 3a 3d 20 |b >= 3 D|O r1 := |
|00004100| 72 20 2d 20 62 20 2b 20 | 63 3b 0d 20 20 20 20 20 |r - b + |c;. |
|00004110| 20 20 20 49 46 20 4c 65 | 73 73 28 64 61 74 61 2c | IF Le|ss(data,|
|00004120| 20 72 31 2c 20 72 20 2d | 20 31 29 20 54 48 45 4e | r1, r -| 1) THEN|
|00004130| 20 72 31 20 3a 3d 20 72 | 20 2d 20 31 3b 20 44 6f | r1 := r| - 1; Do|
|00004140| 77 6e 28 62 2c 20 63 29 | 20 45 4e 44 3b 0d 20 20 |wn(b, c)| END;. |
|00004150| 20 20 20 20 20 20 49 46 | 20 4c 65 73 73 28 64 61 | IF| Less(da|
|00004160| 74 61 2c 20 72 2c 20 72 | 31 29 20 54 48 45 4e 20 |ta, r, r|1) THEN |
|00004170| 53 77 61 70 28 64 61 74 | 61 2c 20 72 2c 20 72 31 |Swap(dat|a, r, r1|
|00004180| 29 3b 20 72 20 3a 3d 20 | 72 31 3b 20 44 6f 77 6e |); r := |r1; Down|
|00004190| 28 62 2c 20 63 29 0d 20 | 20 20 20 20 20 20 20 45 |(b, c). | E|
|000041a0| 4c 53 45 20 62 20 3a 3d | 20 31 0d 20 20 20 20 20 |LSE b :=| 1. |
|000041b0| 20 20 20 45 4e 44 0d 20 | 20 20 20 20 20 45 4e 44 | END. | END|
|000041c0| 0d 20 20 20 20 45 4e 44 | 20 53 69 66 74 3b 0d 0d |. END| Sift;..|
|000041d0| 20 20 20 20 50 52 4f 43 | 45 44 55 52 45 20 54 72 | PROC|EDURE Tr|
|000041e0| 69 6e 6b 6c 65 28 72 2c | 20 70 2c 20 62 2c 20 63 |inkle(r,| p, b, c|
|000041f0| 3a 20 49 4e 54 45 47 45 | 52 29 3b 0d 20 20 20 20 |: INTEGE|R);. |
|00004200| 20 20 56 41 52 20 72 31 | 2c 20 72 32 3a 20 49 4e | VAR r1|, r2: IN|
|00004210| 54 45 47 45 52 3b 0d 20 | 20 20 20 42 45 47 49 4e |TEGER;. | BEGIN|
|00004220| 0d 20 20 20 20 20 20 57 | 48 49 4c 45 20 70 20 3e |. W|HILE p >|
|00004230| 20 30 20 44 4f 0d 20 20 | 20 20 20 20 20 20 57 48 | 0 DO. | WH|
|00004240| 49 4c 45 20 7e 4f 44 44 | 28 70 29 20 44 4f 20 70 |ILE ~ODD|(p) DO p|
|00004250| 20 3a 3d 20 70 20 44 49 | 56 20 32 3b 20 55 70 28 | := p DI|V 2; Up(|
|00004260| 62 2c 20 63 29 20 45 4e | 44 3b 0d 20 20 20 20 20 |b, c) EN|D;. |
|00004270| 20 20 20 72 32 20 3a 3d | 20 72 20 2d 20 62 3b 0d | r2 :=| r - b;.|
|00004280| 20 20 20 20 20 20 20 20 | 49 46 20 28 70 20 3d 20 | |IF (p = |
|00004290| 31 29 20 4f 52 20 7e 4c | 65 73 73 28 64 61 74 61 |1) OR ~L|ess(data|
|000042a0| 2c 20 72 2c 20 72 32 29 | 20 54 48 45 4e 20 70 20 |, r, r2)| THEN p |
|000042b0| 3a 3d 20 30 0d 20 20 20 | 20 20 20 20 20 45 4c 53 |:= 0. | ELS|
|000042c0| 45 20 70 20 3a 3d 20 70 | 20 2d 20 31 3b 0d 20 20 |E p := p| - 1;. |
|000042d0| 20 20 20 20 20 20 20 20 | 49 46 20 62 20 3d 20 31 | |IF b = 1|
|000042e0| 20 54 48 45 4e 20 53 77 | 61 70 28 64 61 74 61 2c | THEN Sw|ap(data,|
|000042f0| 20 72 2c 20 72 32 29 3b | 20 72 20 3a 3d 20 72 32 | r, r2);| r := r2|
|00004300| 0d 20 20 20 20 20 20 20 | 20 20 20 45 4c 53 45 20 |. | ELSE |
|00004310| 72 31 20 3a 3d 20 72 20 | 2d 20 62 20 2b 20 63 3b |r1 := r |- b + c;|
|00004320| 0d 20 20 20 20 20 20 20 | 20 20 20 20 20 49 46 20 |. | IF |
|00004330| 4c 65 73 73 28 64 61 74 | 61 2c 20 72 31 2c 20 72 |Less(dat|a, r1, r|
|00004340| 20 2d 20 31 29 20 54 48 | 45 4e 20 72 31 20 3a 3d | - 1) TH|EN r1 :=|
|00004350| 20 72 20 2d 20 31 3b 20 | 44 6f 77 6e 28 62 2c 20 | r - 1; |Down(b, |
|00004360| 63 29 3b 20 70 20 3a 3d | 20 70 20 2a 20 32 20 45 |c); p :=| p * 2 E|
|00004370| 4e 44 3b 0d 20 20 20 20 | 20 20 20 20 20 20 20 20 |ND;. | |
|00004380| 49 46 20 7e 4c 65 73 73 | 28 64 61 74 61 2c 20 72 |IF ~Less|(data, r|
|00004390| 32 2c 20 72 31 29 20 54 | 48 45 4e 20 53 77 61 70 |2, r1) T|HEN Swap|
|000043a0| 28 64 61 74 61 2c 20 72 | 2c 20 72 32 29 3b 20 72 |(data, r|, r2); r|
|000043b0| 20 3a 3d 20 72 32 0d 20 | 20 20 20 20 20 20 20 20 | := r2. | |
|000043c0| 20 20 20 45 4c 53 45 20 | 53 77 61 70 28 64 61 74 | ELSE |Swap(dat|
|000043d0| 61 2c 20 72 2c 20 72 31 | 29 3b 20 72 20 3a 3d 20 |a, r, r1|); r := |
|000043e0| 72 31 3b 20 44 6f 77 6e | 28 62 2c 20 63 29 3b 20 |r1; Down|(b, c); |
|000043f0| 70 20 3a 3d 20 30 0d 20 | 20 20 20 20 20 20 20 20 |p := 0. | |
|00004400| 20 20 20 45 4e 44 0d 20 | 20 20 20 20 20 20 20 20 | END. | |
|00004410| 20 45 4e 44 0d 20 20 20 | 20 20 20 20 20 45 4e 44 | END. | END|
|00004420| 0d 20 20 20 20 20 20 45 | 4e 44 3b 0d 20 20 20 20 |. E|ND;. |
|00004430| 20 20 53 69 66 74 28 72 | 2c 20 62 2c 20 63 29 0d | Sift(r|, b, c).|
|00004440| 20 20 20 20 45 4e 44 20 | 54 72 69 6e 6b 6c 65 3b | END |Trinkle;|
|00004450| 0d 0d 20 20 20 20 50 52 | 4f 43 45 44 55 52 45 20 |.. PR|OCEDURE |
|00004460| 53 65 6d 69 54 72 69 6e | 6b 6c 65 28 72 2c 20 70 |SemiTrin|kle(r, p|
|00004470| 2c 20 62 2c 20 63 3a 20 | 49 4e 54 45 47 45 52 29 |, b, c: |INTEGER)|
|00004480| 3b 0d 20 20 20 20 20 20 | 56 41 52 20 72 31 3a 20 |;. |VAR r1: |
|00004490| 49 4e 54 45 47 45 52 3b | 0d 20 20 20 20 42 45 47 |INTEGER;|. BEG|
|000044a0| 49 4e 20 72 31 20 3a 3d | 20 72 20 2d 20 63 3b 0d |IN r1 :=| r - c;.|
|000044b0| 20 20 20 20 20 20 49 46 | 20 4c 65 73 73 28 64 61 | IF| Less(da|
|000044c0| 74 61 2c 20 72 2c 20 72 | 31 29 20 54 48 45 4e 20 |ta, r, r|1) THEN |
|000044d0| 53 77 61 70 28 64 61 74 | 61 2c 20 72 2c 20 72 31 |Swap(dat|a, r, r1|
|000044e0| 29 3b 20 54 72 69 6e 6b | 6c 65 28 72 31 2c 20 70 |); Trink|le(r1, p|
|000044f0| 2c 20 62 2c 20 63 29 20 | 45 4e 44 0d 20 20 20 20 |, b, c) |END. |
|00004500| 45 4e 44 20 53 65 6d 69 | 54 72 69 6e 6b 6c 65 3b |END Semi|Trinkle;|
|00004510| 0d 0d 20 20 42 45 47 49 | 4e 20 64 61 74 61 20 3a |.. BEGI|N data :|
|00004520| 3d 20 50 61 72 61 6d 65 | 74 65 72 44 61 74 61 28 |= Parame|terData(|
|00004530| 29 3b 0d 20 20 20 20 49 | 46 20 64 61 74 61 20 23 |);. I|F data #|
|00004540| 20 4e 49 4c 20 54 48 45 | 4e 20 6c 65 6e 20 3a 3d | NIL THE|N len :=|
|00004550| 20 64 61 74 61 2e 6c 65 | 6e 3b 20 53 74 61 72 74 | data.le|n; Start|
|00004560| 3b 0d 20 20 20 20 20 20 | 71 20 3a 3d 20 31 3b 20 |;. |q := 1; |
|00004570| 72 20 3a 3d 20 30 3b 20 | 70 20 3a 3d 20 31 3b 20 |r := 0; |p := 1; |
|00004580| 62 20 3a 3d 20 31 3b 20 | 63 20 3a 3d 20 31 3b 0d |b := 1; |c := 1;.|
|00004590| 20 20 20 20 20 20 57 48 | 49 4c 45 20 71 20 23 20 | WH|ILE q # |
|000045a0| 6c 65 6e 20 44 4f 0d 20 | 20 20 20 20 20 20 20 49 |len DO. | I|
|000045b0| 46 20 70 20 4d 4f 44 20 | 38 20 3d 20 33 20 28 2a |F p MOD |8 = 3 (*|
|000045c0| 20 70 20 3d 20 2e 2e 2e | 20 30 31 31 20 2a 29 20 | p = ...| 011 *) |
|000045d0| 54 48 45 4e 20 53 69 66 | 74 28 72 2c 20 62 2c 20 |THEN Sif|t(r, b, |
|000045e0| 63 29 3b 0d 20 20 20 20 | 20 20 20 20 20 20 70 20 |c);. | p |
|000045f0| 3a 3d 20 28 70 20 2b 20 | 31 29 20 44 49 56 20 34 |:= (p + |1) DIV 4|
|00004600| 3b 20 55 70 28 62 2c 20 | 63 29 3b 20 55 70 28 62 |; Up(b, |c); Up(b|
|00004610| 2c 20 63 29 20 28 2a 20 | 62 20 3e 3d 20 33 20 2a |, c) (* |b >= 3 *|
|00004620| 29 0d 20 20 20 20 20 20 | 20 20 45 4c 53 45 20 28 |). | ELSE (|
|00004630| 2a 20 70 20 3d 20 2e 2e | 2e 20 30 31 20 2a 29 0d |* p = ..|. 01 *).|
|00004640| 20 20 20 20 20 20 20 20 | 20 20 49 46 20 28 71 20 | | IF (q |
|00004650| 2b 20 63 29 20 3c 20 6c | 65 6e 20 54 48 45 4e 20 |+ c) < l|en THEN |
|00004660| 53 69 66 74 28 72 2c 20 | 62 2c 20 63 29 20 45 4c |Sift(r, |b, c) EL|
|00004670| 53 45 20 54 72 69 6e 6b | 6c 65 28 72 2c 20 70 2c |SE Trink|le(r, p,|
|00004680| 20 62 2c 20 63 29 20 45 | 4e 44 3b 0d 20 20 20 20 | b, c) E|ND;. |
|00004690| 20 20 20 20 20 20 44 6f | 77 6e 28 62 2c 20 63 29 | Do|wn(b, c)|
|000046a0| 3b 20 70 20 3a 3d 20 70 | 20 2a 20 32 3b 0d 20 20 |; p := p| * 2;. |
|000046b0| 20 20 20 20 20 20 20 20 | 57 48 49 4c 45 20 62 20 | |WHILE b |
|000046c0| 23 20 31 20 44 4f 20 44 | 6f 77 6e 28 62 2c 20 63 |# 1 DO D|own(b, c|
|000046d0| 29 3b 20 70 20 3a 3d 20 | 70 20 2a 20 32 20 45 4e |); p := |p * 2 EN|
|000046e0| 44 3b 0d 20 20 20 20 20 | 20 20 20 20 20 70 20 3a |D;. | p :|
|000046f0| 3d 20 70 20 2b 20 31 0d | 20 20 20 20 20 20 20 20 |= p + 1.| |
|00004700| 45 4e 44 3b 0d 20 20 20 | 20 20 20 20 20 71 20 3a |END;. | q :|
|00004710| 3d 20 71 20 2b 20 31 3b | 20 72 20 3a 3d 20 72 20 |= q + 1;| r := r |
|00004720| 2b 20 31 20 0d 20 20 20 | 20 20 20 45 4e 44 3b 0d |+ 1 . | END;.|
|00004730| 20 20 20 20 20 20 54 72 | 69 6e 6b 6c 65 28 72 2c | Tr|inkle(r,|
|00004740| 20 70 2c 20 62 2c 20 63 | 29 3b 0d 20 20 20 20 20 | p, b, c|);. |
|00004750| 20 57 48 49 4c 45 20 71 | 20 23 20 31 20 44 4f 20 | WHILE q| # 1 DO |
|00004760| 71 20 3a 3d 20 71 20 2d | 20 31 3b 20 70 20 3a 3d |q := q -| 1; p :=|
|00004770| 20 70 20 2d 20 31 3b 0d | 20 20 20 20 20 20 20 20 | p - 1;.| |
|00004780| 49 46 20 62 20 3d 20 31 | 20 54 48 45 4e 20 72 20 |IF b = 1| THEN r |
|00004790| 3a 3d 20 72 20 2d 20 31 | 3b 0d 20 20 20 20 20 20 |:= r - 1|;. |
|000047a0| 20 20 20 20 57 48 49 4c | 45 20 7e 4f 44 44 28 70 | WHIL|E ~ODD(p|
|000047b0| 29 20 44 4f 20 70 20 3a | 3d 20 70 20 44 49 56 20 |) DO p :|= p DIV |
|000047c0| 32 3b 20 55 70 28 62 2c | 20 63 29 20 45 4e 44 0d |2; Up(b,| c) END.|
|000047d0| 20 20 20 20 20 20 20 20 | 45 4c 53 45 20 28 2a 20 | |ELSE (* |
|000047e0| 62 20 3e 3d 20 33 20 2a | 29 20 72 20 3a 3d 20 72 |b >= 3 *|) r := r|
|000047f0| 20 2d 20 62 20 2b 20 63 | 3b 0d 20 20 20 20 20 20 | - b + c|;. |
|00004800| 20 20 20 20 49 46 20 70 | 20 3e 20 30 20 54 48 45 | IF p| > 0 THE|
|00004810| 4e 20 53 65 6d 69 54 72 | 69 6e 6b 6c 65 28 72 2c |N SemiTr|inkle(r,|
|00004820| 20 70 2c 20 62 2c 20 63 | 29 20 45 4e 44 3b 0d 20 | p, b, c|) END;. |
|00004830| 20 20 20 20 20 20 20 20 | 20 44 6f 77 6e 28 62 2c | | Down(b,|
|00004840| 20 63 29 3b 20 70 20 3a | 3d 20 70 20 2a 20 32 20 | c); p :|= p * 2 |
|00004850| 2b 20 31 3b 20 72 20 3a | 3d 20 72 20 2b 20 63 3b |+ 1; r :|= r + c;|
|00004860| 0d 20 20 20 20 20 20 20 | 20 20 20 53 65 6d 69 54 |. | SemiT|
|00004870| 72 69 6e 6b 6c 65 28 72 | 2c 20 70 2c 20 62 2c 20 |rinkle(r|, p, b, |
|00004880| 63 29 3b 20 44 6f 77 6e | 28 62 2c 20 63 29 3b 20 |c); Down|(b, c); |
|00004890| 70 20 3a 3d 20 70 20 2a | 20 32 20 2b 20 31 0d 20 |p := p *| 2 + 1. |
|000048a0| 20 20 20 20 20 20 20 45 | 4e 44 0d 20 20 20 20 20 | E|ND. |
|000048b0| 20 45 4e 44 3b 0d 20 20 | 20 20 20 20 53 74 6f 70 | END;. | Stop|
|000048c0| 28 22 53 6f 72 74 44 65 | 6d 6f 2e 53 6d 6f 6f 74 |("SortDe|mo.Smoot|
|000048d0| 68 22 29 0d 20 20 20 20 | 45 4e 44 0d 20 20 45 4e |h"). |END. EN|
|000048e0| 44 20 53 6d 6f 6f 74 68 | 3b 0d 0d 42 45 47 49 4e |D Smooth|;..BEGIN|
|000048f0| 20 73 65 65 64 20 3a 3d | 20 4f 62 65 72 6f 6e 2e | seed :=| Oberon.|
|00004900| 54 69 6d 65 28 29 3b 20 | 54 65 78 74 73 2e 4f 70 |Time(); |Texts.Op|
|00004910| 65 6e 57 72 69 74 65 72 | 28 77 29 3b 20 64 65 6c |enWriter|(w); del|
|00004920| 61 79 20 3a 3d 20 31 30 | 30 0d 45 4e 44 20 53 6f |ay := 10|0.END So|
|00004930| 72 74 44 65 6d 6f 2e 0d | 0d |rtDemo..|. |
+--------+-------------------------+-------------------------+--------+--------+