home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
view JSON data
|
view as text
This file was processed as: SHell self-extracting ARchive
(archive/shar).
You can browse this item here: 1938
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| Newsgroup Content (archive/news)
| magic
| Supported |
100%
| dexvert
| SHell self-extracting ARchive (archive/shar)
| magic
| Supported |
100%
| dexvert
| Internet Message Format (text/imf)
| magic
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| news or mail, ASCII text
| default
| |
100%
| TrID
| E-Mail message (Var. 2)
| default
| |
100%
| checkBytes
| Printable ASCII
| default
| |
100%
| perlTextCheck
| Likely Text (Perl)
| default
| |
100%
| siegfried
| fmt/329 Shell Archive Format
| default
| |
100%
| detectItEasy
| Format: plain text[LF]
| default (weak)
| |
100%
| xdgMime
| message/rfc822
| default
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 46 72 6f 6d 3a 20 62 72 | 6e 73 74 6e 64 40 6b 72 |From: br|nstnd@kr|
|00000010| 61 6d 64 65 6e 2e 61 63 | 66 2e 6e 79 75 2e 65 64 |amden.ac|f.nyu.ed|
|00000020| 75 20 28 44 61 6e 20 42 | 65 72 6e 73 74 65 69 6e |u (Dan B|ernstein|
|00000030| 29 0a 4e 65 77 73 67 72 | 6f 75 70 73 3a 20 61 6c |).Newsgr|oups: al|
|00000040| 74 2e 73 6f 75 72 63 65 | 73 0a 53 75 62 6a 65 63 |t.source|s.Subjec|
|00000050| 74 3a 20 70 6d 63 6b 70 | 74 20 30 2e 39 35 20 2d |t: pmckp|t 0.95 -|
|00000060| 20 70 6f 6f 72 20 6d 61 | 6e 27 73 20 63 68 65 63 | poor ma|n's chec|
|00000070| 6b 70 6f 69 6e 74 65 72 | 0a 4d 65 73 73 61 67 65 |kpointer|.Message|
|00000080| 2d 49 44 3a 20 3c 31 34 | 30 38 3a 4f 63 74 31 31 |-ID: <14|08:Oct11|
|00000090| 30 39 3a 32 30 3a 32 30 | 39 30 40 6b 72 61 6d 64 |09:20:20|90@kramd|
|000000a0| 65 6e 2e 61 63 66 2e 6e | 79 75 2e 65 64 75 3e 0a |en.acf.n|yu.edu>.|
|000000b0| 44 61 74 65 3a 20 31 31 | 20 4f 63 74 20 39 30 20 |Date: 11| Oct 90 |
|000000c0| 30 39 3a 32 30 3a 32 30 | 20 47 4d 54 0a 0a 54 68 |09:20:20| GMT..Th|
|000000d0| 69 73 20 69 73 20 61 20 | 62 65 74 61 20 72 65 6c |is is a |beta rel|
|000000e0| 65 61 73 65 20 6f 66 20 | 70 6d 63 6b 70 74 2c 20 |ease of |pmckpt, |
|000000f0| 74 68 65 20 70 6f 6f 72 | 20 6d 61 6e 27 73 20 63 |the poor| man's c|
|00000100| 68 65 63 6b 70 6f 69 6e | 74 65 72 2e 0a 0a 54 68 |heckpoin|ter...Th|
|00000110| 65 20 69 64 65 61 20 6f | 66 20 61 20 63 68 65 63 |e idea o|f a chec|
|00000120| 6b 70 6f 69 6e 74 65 72 | 20 69 73 20 74 6f 20 73 |kpointer| is to s|
|00000130| 61 76 65 20 74 68 65 20 | 73 74 61 74 65 20 6f 66 |ave the |state of|
|00000140| 20 61 20 72 75 6e 6e 69 | 6e 67 20 70 72 6f 63 65 | a runni|ng proce|
|00000150| 73 73 20 69 6e 0a 61 20 | 66 69 6c 65 2c 20 73 6f |ss in.a |file, so|
|00000160| 20 74 68 61 74 20 79 6f | 75 20 63 61 6e 20 72 65 | that yo|u can re|
|00000170| 73 74 6f 72 65 20 74 68 | 65 20 70 72 6f 63 65 73 |store th|e proces|
|00000180| 73 20 6c 61 74 65 72 20 | 77 68 65 72 65 20 69 74 |s later |where it|
|00000190| 20 6c 65 66 74 20 6f 66 | 66 2e 0a 70 6d 63 6b 70 | left of|f..pmckp|
|000001a0| 74 20 69 73 20 61 20 63 | 6f 6f 70 65 72 61 74 69 |t is a c|ooperati|
|000001b0| 76 65 20 63 68 65 63 6b | 70 6f 69 6e 74 65 72 3a |ve check|pointer:|
|000001c0| 20 79 6f 75 20 68 61 76 | 65 20 74 6f 20 61 64 64 | you hav|e to add|
|000001d0| 20 63 68 65 63 6b 70 6f | 69 6e 74 69 6e 67 20 74 | checkpo|inting t|
|000001e0| 6f 0a 79 6f 75 72 20 70 | 72 6f 67 72 61 6d 20 65 |o.your p|rogram e|
|000001f0| 78 70 6c 69 63 69 74 6c | 79 2e 0a 0a 4c 69 6b 65 |xplicitl|y...Like|
|00000200| 20 65 76 65 72 79 20 75 | 74 69 6c 69 74 79 20 69 | every u|tility i|
|00000210| 6e 20 74 68 65 20 50 6f | 6f 72 20 4d 61 6e 27 73 |n the Po|or Man's|
|00000220| 20 53 65 72 69 65 73 2c | 20 70 6d 63 6b 70 74 20 | Series,| pmckpt |
|00000230| 69 6e 63 6c 75 64 65 73 | 20 73 6f 6d 65 0a 66 65 |includes| some.fe|
|00000240| 61 74 75 72 65 20 6d 69 | 73 73 69 6e 67 20 66 72 |ature mi|ssing fr|
|00000250| 6f 6d 20 61 6c 6c 20 74 | 68 65 20 63 6f 6d 70 65 |om all t|he compe|
|00000260| 74 69 74 69 6f 6e 3a 20 | 69 6e 20 74 68 69 73 20 |tition: |in this |
|00000270| 63 61 73 65 2c 20 69 74 | 20 64 6f 65 73 6e 27 74 |case, it| doesn't|
|00000280| 20 75 73 65 0a 73 65 74 | 6a 6d 70 28 29 20 6f 72 | use.set|jmp() or|
|00000290| 20 6c 6f 6e 67 6a 6d 70 | 28 29 20 77 68 65 6e 20 | longjmp|() when |
|000002a0| 69 74 27 73 20 72 65 73 | 74 6f 72 69 6e 67 20 74 |it's res|toring t|
|000002b0| 68 65 20 69 6e 73 74 72 | 75 63 74 69 6f 6e 20 70 |he instr|uction p|
|000002c0| 6f 69 6e 74 65 72 2c 20 | 73 6f 0a 79 6f 75 72 20 |ointer, |so.your |
|000002d0| 63 6f 6d 70 69 6c 65 72 | 20 63 61 6e 20 70 75 74 |compiler| can put|
|000002e0| 20 76 61 72 69 61 62 6c | 65 73 20 61 6e 64 20 69 | variabl|es and i|
|000002f0| 6e 74 65 72 6d 65 64 69 | 61 74 65 20 76 61 6c 75 |ntermedi|ate valu|
|00000300| 65 73 20 69 6e 74 6f 20 | 72 65 67 69 73 74 65 72 |es into |register|
|00000310| 73 0a 77 69 74 68 6f 75 | 74 20 61 6e 79 20 72 69 |s.withou|t any ri|
|00000320| 73 6b 20 6f 66 20 64 65 | 73 74 72 6f 79 69 6e 67 |sk of de|stroying|
|00000330| 20 74 68 65 20 76 61 6c | 75 65 73 20 6f 66 20 74 | the val|ues of t|
|00000340| 68 6f 73 65 20 76 61 72 | 69 61 62 6c 65 73 2e 20 |hose var|iables. |
|00000350| 49 74 20 61 6c 73 6f 0a | 64 6f 65 73 6e 27 74 20 |It also.|doesn't |
|00000360| 74 72 79 20 74 6f 20 72 | 65 61 64 20 74 68 65 20 |try to r|ead the |
|00000370| 69 6e 66 69 6e 69 74 65 | 20 76 61 72 69 65 74 79 |infinite| variety|
|00000380| 20 6f 66 20 63 6f 72 65 | 20 66 69 6c 65 20 66 6f | of core| file fo|
|00000390| 72 6d 61 74 73 2e 20 41 | 73 0a 63 68 65 63 6b 70 |rmats. A|s.checkp|
|000003a0| 6f 69 6e 74 65 72 73 20 | 67 6f 2c 20 70 6d 63 6b |ointers |go, pmck|
|000003b0| 70 74 20 69 73 20 71 75 | 69 74 65 20 70 6f 72 74 |pt is qu|ite port|
|000003c0| 61 62 6c 65 2e 0a 0a 49 | 74 20 73 68 6f 75 6c 64 |able...I|t should|
|000003d0| 20 62 65 20 70 6f 73 73 | 69 62 6c 65 20 74 6f 20 | be poss|ible to |
|000003e0| 6d 61 6b 65 20 74 68 69 | 73 20 76 65 72 73 69 6f |make thi|s versio|
|000003f0| 6e 20 6f 66 20 70 6d 63 | 6b 70 74 20 77 6f 72 6b |n of pmc|kpt work|
|00000400| 20 6f 6e 20 70 72 61 63 | 74 69 63 61 6c 6c 79 0a | on prac|tically.|
|00000410| 61 6e 79 20 55 4e 49 58 | 20 73 79 73 74 65 6d 2c |any UNIX| system,|
|00000420| 20 66 72 6f 6d 20 74 68 | 65 20 68 65 69 67 68 74 | from th|e height|
|00000430| 73 20 6f 66 20 42 53 44 | 20 74 6f 20 74 68 65 20 |s of BSD| to the |
|00000440| 64 65 70 74 68 73 20 6f | 66 20 53 79 73 74 65 6d |depths o|f System|
|00000450| 20 56 2e 20 42 75 74 0a | 6e 6f 20 67 75 61 72 61 | V. But.|no guara|
|00000460| 6e 74 65 65 73 2e 20 49 | 6e 20 70 61 72 74 69 63 |ntees. I|n partic|
|00000470| 75 6c 61 72 2c 20 79 6f | 75 20 6d 61 79 20 68 61 |ular, yo|u may ha|
|00000480| 76 65 20 74 6f 20 6d 6f | 64 69 66 79 20 74 68 65 |ve to mo|dify the|
|00000490| 20 75 73 74 61 74 65 0a | 6d 61 6e 69 70 75 6c 61 | ustate.|manipula|
|000004a0| 74 69 6f 6e 73 20 69 6e | 20 70 6d 63 6b 70 74 2e |tions in| pmckpt.|
|000004b0| 63 2e 0a 0a 53 65 6e 64 | 20 63 6f 6d 6d 65 6e 74 |c...Send| comment|
|000004c0| 73 20 74 6f 20 6d 65 20 | 6f 72 20 74 6f 20 61 6c |s to me |or to al|
|000004d0| 74 2e 73 6f 75 72 63 65 | 73 2e 64 2e 0a 0a 2d 2d |t.source|s.d...--|
|000004e0| 2d 44 61 6e 0a 0a 23 21 | 20 2f 62 69 6e 2f 73 68 |-Dan..#!| /bin/sh|
|000004f0| 0a 23 20 54 68 69 73 20 | 69 73 20 61 20 73 68 65 |.# This |is a she|
|00000500| 6c 6c 20 61 72 63 68 69 | 76 65 2e 20 20 52 65 6d |ll archi|ve. Rem|
|00000510| 6f 76 65 20 61 6e 79 74 | 68 69 6e 67 20 62 65 66 |ove anyt|hing bef|
|00000520| 6f 72 65 20 74 68 69 73 | 20 6c 69 6e 65 2c 20 74 |ore this| line, t|
|00000530| 68 65 6e 20 75 6e 70 61 | 63 6b 0a 23 20 69 74 20 |hen unpa|ck.# it |
|00000540| 62 79 20 73 61 76 69 6e | 67 20 69 74 20 69 6e 74 |by savin|g it int|
|00000550| 6f 20 61 20 66 69 6c 65 | 20 61 6e 64 20 74 79 70 |o a file| and typ|
|00000560| 69 6e 67 20 22 73 68 20 | 66 69 6c 65 22 2e 20 20 |ing "sh |file". |
|00000570| 54 6f 20 6f 76 65 72 77 | 72 69 74 65 20 65 78 69 |To overw|rite exi|
|00000580| 73 74 69 6e 67 0a 23 20 | 66 69 6c 65 73 2c 20 74 |sting.# |files, t|
|00000590| 79 70 65 20 22 73 68 20 | 66 69 6c 65 20 2d 63 22 |ype "sh |file -c"|
|000005a0| 2e 20 20 59 6f 75 20 63 | 61 6e 20 61 6c 73 6f 20 |. You c|an also |
|000005b0| 66 65 65 64 20 74 68 69 | 73 20 61 73 20 73 74 61 |feed thi|s as sta|
|000005c0| 6e 64 61 72 64 20 69 6e | 70 75 74 20 76 69 61 0a |ndard in|put via.|
|000005d0| 23 20 75 6e 73 68 61 72 | 2c 20 6f 72 20 62 79 20 |# unshar|, or by |
|000005e0| 74 79 70 69 6e 67 20 22 | 73 68 20 3c 66 69 6c 65 |typing "|sh <file|
|000005f0| 22 2c 20 65 2e 67 2e 2e | 20 20 49 66 20 74 68 69 |", e.g..| If thi|
|00000600| 73 20 61 72 63 68 69 76 | 65 20 69 73 20 63 6f 6d |s archiv|e is com|
|00000610| 70 6c 65 74 65 2c 20 79 | 6f 75 0a 23 20 77 69 6c |plete, y|ou.# wil|
|00000620| 6c 20 73 65 65 20 74 68 | 65 20 66 6f 6c 6c 6f 77 |l see th|e follow|
|00000630| 69 6e 67 20 6d 65 73 73 | 61 67 65 20 61 74 20 74 |ing mess|age at t|
|00000640| 68 65 20 65 6e 64 3a 0a | 23 09 09 22 45 6e 64 20 |he end:.|#.."End |
|00000650| 6f 66 20 73 68 65 6c 6c | 20 61 72 63 68 69 76 65 |of shell| archive|
|00000660| 2e 22 0a 23 20 43 6f 6e | 74 65 6e 74 73 3a 20 20 |.".# Con|tents: |
|00000670| 4d 61 6b 65 66 69 6c 65 | 20 52 45 41 44 4d 45 20 |Makefile| README |
|00000680| 55 41 52 45 41 20 61 72 | 67 76 30 2e 63 20 63 68 |UAREA ar|gv0.c ch|
|00000690| 65 63 6b 70 6f 69 6e 74 | 20 63 6b 70 74 63 76 74 |eckpoint| ckptcvt|
|000006a0| 20 70 6d 63 65 6f 74 2e | 63 0a 23 20 20 20 70 6d | pmceot.|c.# pm|
|000006b0| 63 6b 70 74 2e 63 20 70 | 6d 63 6b 70 74 2e 68 20 |ckpt.c p|mckpt.h |
|000006c0| 74 65 73 74 2e 63 0a 23 | 20 57 72 61 70 70 65 64 |test.c.#| Wrapped|
|000006d0| 20 62 79 20 62 72 6e 73 | 74 6e 64 40 6b 72 61 6d | by brns|tnd@kram|
|000006e0| 64 65 6e 20 6f 6e 20 54 | 68 75 20 4f 63 74 20 31 |den on T|hu Oct 1|
|000006f0| 31 20 30 33 3a 33 39 3a | 34 37 20 31 39 39 30 0a |1 03:39:|47 1990.|
|00000700| 50 41 54 48 3d 2f 62 69 | 6e 3a 2f 75 73 72 2f 62 |PATH=/bi|n:/usr/b|
|00000710| 69 6e 3a 2f 75 73 72 2f | 75 63 62 20 3b 20 65 78 |in:/usr/|ucb ; ex|
|00000720| 70 6f 72 74 20 50 41 54 | 48 0a 69 66 20 74 65 73 |port PAT|H.if tes|
|00000730| 74 20 2d 66 20 27 4d 61 | 6b 65 66 69 6c 65 27 20 |t -f 'Ma|kefile' |
|00000740| 2d 61 20 22 24 7b 31 7d | 22 20 21 3d 20 22 2d 63 |-a "${1}|" != "-c|
|00000750| 22 20 3b 20 74 68 65 6e | 20 0a 20 20 65 63 68 6f |" ; then| . echo|
|00000760| 20 73 68 61 72 3a 20 57 | 69 6c 6c 20 6e 6f 74 20 | shar: W|ill not |
|00000770| 63 6c 6f 62 62 65 72 20 | 65 78 69 73 74 69 6e 67 |clobber |existing|
|00000780| 20 66 69 6c 65 20 5c 22 | 27 4d 61 6b 65 66 69 6c | file \"|'Makefil|
|00000790| 65 27 5c 22 0a 65 6c 73 | 65 0a 65 63 68 6f 20 73 |e'\".els|e.echo s|
|000007a0| 68 61 72 3a 20 45 78 74 | 72 61 63 74 69 6e 67 20 |har: Ext|racting |
|000007b0| 5c 22 27 4d 61 6b 65 66 | 69 6c 65 27 5c 22 20 5c |\"'Makef|ile'\" \|
|000007c0| 28 34 35 34 20 63 68 61 | 72 61 63 74 65 72 73 5c |(454 cha|racters\|
|000007d0| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|000007e0| 27 4d 61 6b 65 66 69 6c | 65 27 20 3c 3c 27 45 4e |'Makefil|e' <<'EN|
|000007f0| 44 5f 4f 46 5f 46 49 4c | 45 27 0a 58 43 43 3d 63 |D_OF_FIL|E'.XCC=c|
|00000800| 63 0a 58 43 43 4f 50 54 | 53 3d 2d 67 0a 58 0a 58 |c.XCCOPT|S=-g.X.X|
|00000810| 61 6c 6c 3a 20 70 6d 63 | 65 6f 74 2e 6f 20 70 6d |all: pmc|eot.o pm|
|00000820| 63 6b 70 74 2e 6f 20 61 | 72 67 76 30 0a 58 0a 58 |ckpt.o a|rgv0.X.X|
|00000830| 73 68 61 72 3a 20 70 6d | 63 6b 70 74 2e 73 68 61 |shar: pm|ckpt.sha|
|00000840| 72 0a 58 0a 58 70 6d 63 | 65 6f 74 2e 6f 3a 20 70 |r.X.Xpmc|eot.o: p|
|00000850| 6d 63 65 6f 74 2e 63 20 | 70 6d 63 6b 70 74 2e 68 |mceot.c |pmckpt.h|
|00000860| 0a 58 09 24 28 43 43 29 | 20 24 28 43 43 4f 50 54 |.X.$(CC)| $(CCOPT|
|00000870| 53 29 20 2d 63 20 70 6d | 63 65 6f 74 2e 63 0a 58 |S) -c pm|ceot.c.X|
|00000880| 0a 58 70 6d 63 6b 70 74 | 2e 6f 3a 20 70 6d 63 6b |.Xpmckpt|.o: pmck|
|00000890| 70 74 2e 63 20 70 6d 63 | 6b 70 74 2e 68 0a 58 09 |pt.c pmc|kpt.h.X.|
|000008a0| 24 28 43 43 29 20 24 28 | 43 43 4f 50 54 53 29 20 |$(CC) $(|CCOPTS) |
|000008b0| 2d 63 20 70 6d 63 6b 70 | 74 2e 63 0a 58 0a 58 61 |-c pmckp|t.c.X.Xa|
|000008c0| 72 67 76 30 3a 20 61 72 | 67 76 30 2e 63 0a 58 09 |rgv0: ar|gv0.c.X.|
|000008d0| 24 28 43 43 29 20 24 28 | 43 43 4f 50 54 53 29 20 |$(CC) $(|CCOPTS) |
|000008e0| 2d 6f 20 61 72 67 76 30 | 20 61 72 67 76 30 2e 63 |-o argv0| argv0.c|
|000008f0| 0a 58 0a 58 70 6d 63 6b | 70 74 2e 73 68 61 72 3a |.X.Xpmck|pt.shar:|
|00000900| 20 4d 61 6b 65 66 69 6c | 65 20 52 45 41 44 4d 45 | Makefil|e README|
|00000910| 20 55 41 52 45 41 20 61 | 72 67 76 30 2e 63 20 63 | UAREA a|rgv0.c c|
|00000920| 68 65 63 6b 70 6f 69 6e | 74 20 63 6b 70 74 63 76 |heckpoin|t ckptcv|
|00000930| 74 20 70 6d 63 65 6f 74 | 2e 63 20 70 6d 63 6b 70 |t pmceot|.c pmckp|
|00000940| 74 2e 63 20 70 6d 63 6b | 70 74 2e 68 20 74 65 73 |t.c pmck|pt.h tes|
|00000950| 74 2e 63 0a 58 09 73 68 | 61 72 20 4d 61 6b 65 66 |t.c.X.sh|ar Makef|
|00000960| 69 6c 65 20 52 45 41 44 | 4d 45 20 55 41 52 45 41 |ile READ|ME UAREA|
|00000970| 20 61 72 67 76 30 2e 63 | 20 63 68 65 63 6b 70 6f | argv0.c| checkpo|
|00000980| 69 6e 74 20 63 6b 70 74 | 63 76 74 20 70 6d 63 65 |int ckpt|cvt pmce|
|00000990| 6f 74 2e 63 20 70 6d 63 | 6b 70 74 2e 63 20 70 6d |ot.c pmc|kpt.c pm|
|000009a0| 63 6b 70 74 2e 68 20 74 | 65 73 74 2e 63 20 3e 20 |ckpt.h t|est.c > |
|000009b0| 70 6d 63 6b 70 74 2e 73 | 68 61 72 0a 58 09 63 68 |pmckpt.s|har.X.ch|
|000009c0| 6d 6f 64 20 34 30 30 20 | 70 6d 63 6b 70 74 2e 73 |mod 400 |pmckpt.s|
|000009d0| 68 61 72 0a 45 4e 44 5f | 4f 46 5f 46 49 4c 45 0a |har.END_|OF_FILE.|
|000009e0| 69 66 20 74 65 73 74 20 | 34 35 34 20 2d 6e 65 20 |if test |454 -ne |
|000009f0| 60 77 63 20 2d 63 20 3c | 27 4d 61 6b 65 66 69 6c |`wc -c <|'Makefil|
|00000a00| 65 27 60 3b 20 74 68 65 | 6e 0a 20 20 20 20 65 63 |e'`; the|n. ec|
|00000a10| 68 6f 20 73 68 61 72 3a | 20 5c 22 27 4d 61 6b 65 |ho shar:| \"'Make|
|00000a20| 66 69 6c 65 27 5c 22 20 | 75 6e 70 61 63 6b 65 64 |file'\" |unpacked|
|00000a30| 20 77 69 74 68 20 77 72 | 6f 6e 67 20 73 69 7a 65 | with wr|ong size|
|00000a40| 21 0a 66 69 0a 23 20 65 | 6e 64 20 6f 66 20 27 4d |!.fi.# e|nd of 'M|
|00000a50| 61 6b 65 66 69 6c 65 27 | 0a 66 69 0a 69 66 20 74 |akefile'|.fi.if t|
|00000a60| 65 73 74 20 2d 66 20 27 | 52 45 41 44 4d 45 27 20 |est -f '|README' |
|00000a70| 2d 61 20 22 24 7b 31 7d | 22 20 21 3d 20 22 2d 63 |-a "${1}|" != "-c|
|00000a80| 22 20 3b 20 74 68 65 6e | 20 0a 20 20 65 63 68 6f |" ; then| . echo|
|00000a90| 20 73 68 61 72 3a 20 57 | 69 6c 6c 20 6e 6f 74 20 | shar: W|ill not |
|00000aa0| 63 6c 6f 62 62 65 72 20 | 65 78 69 73 74 69 6e 67 |clobber |existing|
|00000ab0| 20 66 69 6c 65 20 5c 22 | 27 52 45 41 44 4d 45 27 | file \"|'README'|
|00000ac0| 5c 22 0a 65 6c 73 65 0a | 65 63 68 6f 20 73 68 61 |\".else.|echo sha|
|00000ad0| 72 3a 20 45 78 74 72 61 | 63 74 69 6e 67 20 5c 22 |r: Extra|cting \"|
|00000ae0| 27 52 45 41 44 4d 45 27 | 5c 22 20 5c 28 36 35 32 |'README'|\" \(652|
|00000af0| 38 20 63 68 61 72 61 63 | 74 65 72 73 5c 29 0a 73 |8 charac|ters\).s|
|00000b00| 65 64 20 22 73 2f 5e 58 | 2f 2f 22 20 3e 27 52 45 |ed "s/^X|//" >'RE|
|00000b10| 41 44 4d 45 27 20 3c 3c | 27 45 4e 44 5f 4f 46 5f |ADME' <<|'END_OF_|
|00000b20| 46 49 4c 45 27 0a 58 70 | 6d 63 6b 70 74 20 30 2e |FILE'.Xp|mckpt 0.|
|00000b30| 39 35 2c 20 31 30 2f 31 | 30 2f 39 30 2e 0a 58 50 |95, 10/1|0/90..XP|
|00000b40| 6c 61 63 65 64 20 69 6e | 74 6f 20 74 68 65 20 70 |laced in|to the p|
|00000b50| 75 62 6c 69 63 20 64 6f | 6d 61 69 6e 20 62 79 20 |ublic do|main by |
|00000b60| 44 61 6e 69 65 6c 20 4a | 2e 20 42 65 72 6e 73 74 |Daniel J|. Bernst|
|00000b70| 65 69 6e 2e 0a 58 43 6f | 6d 6d 65 6e 74 73 20 74 |ein..XCo|mments t|
|00000b80| 6f 20 68 69 6d 20 61 74 | 20 62 72 6e 73 74 6e 64 |o him at| brnstnd|
|00000b90| 40 6e 79 75 2e 65 64 75 | 2e 20 50 6c 65 61 73 65 |@nyu.edu|. Please|
|00000ba0| 20 6c 65 74 20 68 69 6d | 20 6b 6e 6f 77 20 69 66 | let him| know if|
|00000bb0| 20 70 6d 63 6b 70 74 20 | 77 6f 72 6b 73 0a 58 6f | pmckpt |works.Xo|
|00000bc0| 6e 20 79 6f 75 72 20 6d | 61 63 68 69 6e 65 2c 20 |n your m|achine, |
|00000bd0| 61 6e 64 20 77 68 61 74 | 20 61 70 70 6c 69 63 61 |and what| applica|
|00000be0| 74 69 6f 6e 73 20 79 6f | 75 20 6d 69 67 68 74 20 |tions yo|u might |
|00000bf0| 68 61 76 65 20 66 6f 75 | 6e 64 20 66 6f 72 20 69 |have fou|nd for i|
|00000c00| 74 2e 0a 58 0a 58 0a 58 | 54 68 69 73 20 69 73 20 |t..X.X.X|This is |
|00000c10| 61 20 62 65 74 61 20 72 | 65 6c 65 61 73 65 20 6f |a beta r|elease o|
|00000c20| 66 20 70 6d 63 6b 70 74 | 2c 20 74 68 65 20 70 6f |f pmckpt|, the po|
|00000c30| 6f 72 20 6d 61 6e 27 73 | 20 63 68 65 63 6b 70 6f |or man's| checkpo|
|00000c40| 69 6e 74 65 72 2e 0a 58 | 0a 58 54 68 65 20 69 64 |inter..X|.XThe id|
|00000c50| 65 61 20 6f 66 20 61 20 | 63 68 65 63 6b 70 6f 69 |ea of a |checkpoi|
|00000c60| 6e 74 65 72 20 69 73 20 | 74 6f 20 73 61 76 65 20 |nter is |to save |
|00000c70| 74 68 65 20 73 74 61 74 | 65 20 6f 66 20 61 20 72 |the stat|e of a r|
|00000c80| 75 6e 6e 69 6e 67 20 70 | 72 6f 63 65 73 73 20 69 |unning p|rocess i|
|00000c90| 6e 0a 58 61 20 66 69 6c | 65 2c 20 73 6f 20 74 68 |n.Xa fil|e, so th|
|00000ca0| 61 74 20 79 6f 75 20 63 | 61 6e 20 72 65 73 74 6f |at you c|an resto|
|00000cb0| 72 65 20 74 68 65 20 70 | 72 6f 63 65 73 73 20 6c |re the p|rocess l|
|00000cc0| 61 74 65 72 20 77 68 65 | 72 65 20 69 74 20 6c 65 |ater whe|re it le|
|00000cd0| 66 74 20 6f 66 66 2e 0a | 58 70 6d 63 6b 70 74 20 |ft off..|Xpmckpt |
|00000ce0| 69 73 20 61 20 63 6f 6f | 70 65 72 61 74 69 76 65 |is a coo|perative|
|00000cf0| 20 63 68 65 63 6b 70 6f | 69 6e 74 65 72 3a 20 79 | checkpo|inter: y|
|00000d00| 6f 75 20 68 61 76 65 20 | 74 6f 20 61 64 64 20 63 |ou have |to add c|
|00000d10| 68 65 63 6b 70 6f 69 6e | 74 69 6e 67 20 74 6f 0a |heckpoin|ting to.|
|00000d20| 58 79 6f 75 72 20 70 72 | 6f 67 72 61 6d 20 65 78 |Xyour pr|ogram ex|
|00000d30| 70 6c 69 63 69 74 6c 79 | 2e 20 59 6f 75 20 63 61 |plicitly|. You ca|
|00000d40| 6e 27 74 20 6a 75 73 74 | 20 63 68 65 63 6b 70 6f |n't just| checkpo|
|00000d50| 69 6e 74 20 61 20 72 61 | 6e 64 6f 6d 20 65 78 65 |int a ra|ndom exe|
|00000d60| 63 75 74 61 62 6c 65 0a | 58 77 69 74 68 6f 75 74 |cutable.|Xwithout|
|00000d70| 20 74 68 65 20 73 6f 75 | 72 63 65 20 63 6f 64 65 | the sou|rce code|
|00000d80| 2e 0a 58 0a 58 43 68 65 | 63 6b 70 6f 69 6e 74 69 |..X.XChe|ckpointi|
|00000d90| 6e 67 20 68 61 73 20 6d | 61 6e 79 20 75 73 65 73 |ng has m|any uses|
|00000da0| 2e 20 4f 6e 65 20 69 73 | 20 74 6f 20 68 61 76 65 |. One is| to have|
|00000db0| 20 70 72 6f 63 65 73 73 | 65 73 20 73 75 72 76 69 | process|es survi|
|00000dc0| 76 65 20 61 20 63 72 61 | 73 68 2e 0a 58 59 6f 75 |ve a cra|sh..XYou|
|00000dd0| 20 6a 75 73 74 20 63 68 | 65 63 6b 70 6f 69 6e 74 | just ch|eckpoint|
|00000de0| 20 74 68 65 20 70 72 6f | 63 65 73 73 20 70 65 72 | the pro|cess per|
|00000df0| 69 6f 64 69 63 61 6c 6c | 79 2c 20 61 6e 64 20 72 |iodicall|y, and r|
|00000e00| 65 73 74 61 72 74 20 69 | 74 20 69 66 20 74 68 65 |estart i|t if the|
|00000e10| 0a 58 73 79 73 74 65 6d | 20 63 72 61 73 68 65 73 |.Xsystem| crashes|
|00000e20| 2e 20 41 6e 6f 74 68 65 | 72 20 69 73 20 74 6f 20 |. Anothe|r is to |
|00000e30| 61 76 6f 69 64 20 6c 6f | 6e 67 2c 20 63 6f 6d 70 |avoid lo|ng, comp|
|00000e40| 6c 65 78 20 69 6e 69 74 | 69 61 6c 69 7a 61 74 69 |lex init|ializati|
|00000e50| 6f 6e 73 20 6f 6e 0a 58 | 73 74 61 72 74 75 70 3b |ons on.X|startup;|
|00000e60| 20 69 66 20 79 6f 75 20 | 63 68 65 63 6b 70 6f 69 | if you |checkpoi|
|00000e70| 6e 74 20 61 66 74 65 72 | 20 69 6e 69 74 69 61 6c |nt after| initial|
|00000e80| 69 7a 61 74 69 6f 6e 2c | 20 79 6f 75 20 77 6f 6e |ization,| you won|
|00000e90| 27 74 20 68 61 76 65 20 | 74 6f 20 77 61 73 74 65 |'t have |to waste|
|00000ea0| 0a 58 74 68 65 20 74 69 | 6d 65 20 61 67 61 69 6e |.Xthe ti|me again|
|00000eb0| 2e 20 41 6e 6f 74 68 65 | 72 20 69 73 20 74 6f 20 |. Anothe|r is to |
|00000ec0| 74 72 61 6e 73 66 65 72 | 20 72 75 6e 6e 69 6e 67 |transfer| running|
|00000ed0| 20 70 72 6f 67 72 61 6d | 73 20 62 65 74 77 65 65 | program|s betwee|
|00000ee0| 6e 0a 58 63 6f 6d 70 75 | 74 65 72 73 20 77 69 74 |n.Xcompu|ters wit|
|00000ef0| 68 20 74 68 65 20 73 61 | 6d 65 20 61 72 63 68 69 |h the sa|me archi|
|00000f00| 74 65 63 74 75 72 65 2e | 0a 58 0a 58 70 6d 63 6b |tecture.|.X.Xpmck|
|00000f10| 70 74 20 69 73 20 28 73 | 68 6f 75 6c 64 20 62 65 |pt is (s|hould be|
|00000f20| 2c 20 61 74 20 6c 65 61 | 73 74 29 20 6d 75 63 68 |, at lea|st) much|
|00000f30| 20 6d 6f 72 65 20 70 6f | 72 74 61 62 6c 65 20 74 | more po|rtable t|
|00000f40| 68 61 6e 20 6f 74 68 65 | 72 20 61 76 61 69 6c 61 |han othe|r availa|
|00000f50| 62 6c 65 0a 58 63 68 65 | 63 6b 70 6f 69 6e 74 69 |ble.Xche|ckpointi|
|00000f60| 6e 67 20 73 79 73 74 65 | 6d 73 2c 20 69 6e 63 6c |ng syste|ms, incl|
|00000f70| 75 64 69 6e 67 20 75 6e | 64 75 6d 70 20 61 6e 64 |uding un|dump and|
|00000f80| 20 43 6f 6e 64 6f 72 2e | 20 49 74 20 6a 75 73 74 | Condor.| It just|
|00000f90| 20 73 61 76 65 73 20 74 | 68 65 0a 58 64 61 74 61 | saves t|he.Xdata|
|00000fa0| 2c 20 73 74 61 63 6b 2c | 20 61 6e 64 20 68 65 61 |, stack,| and hea|
|00000fb0| 70 20 28 61 6c 6c 6f 63 | 61 74 65 64 20 6d 65 6d |p (alloc|ated mem|
|00000fc0| 6f 72 79 29 20 74 6f 20 | 61 20 66 69 6c 65 2e 20 |ory) to |a file. |
|00000fd0| 49 74 20 64 6f 65 73 6e | 27 74 20 74 72 79 20 74 |It doesn|'t try t|
|00000fe0| 6f 0a 58 72 65 61 64 20 | 74 68 65 20 69 6e 66 69 |o.Xread |the infi|
|00000ff0| 6e 69 74 65 20 76 61 72 | 69 65 74 79 20 6f 66 20 |nite var|iety of |
|00001000| 63 6f 72 65 20 66 69 6c | 65 20 66 6f 72 6d 61 74 |core fil|e format|
|00001010| 73 2e 20 4d 6f 73 74 20 | 69 6d 70 6f 72 74 61 6e |s. Most |importan|
|00001020| 74 6c 79 2c 20 69 74 0a | 58 64 6f 65 73 6e 27 74 |tly, it.|Xdoesn't|
|00001030| 20 75 73 65 20 73 65 74 | 6a 6d 70 28 29 20 6f 72 | use set|jmp() or|
|00001040| 20 6c 6f 6e 67 6a 6d 70 | 28 29 2c 20 73 6f 20 79 | longjmp|(), so y|
|00001050| 6f 75 72 20 63 6f 6d 70 | 69 6c 65 72 20 63 61 6e |our comp|iler can|
|00001060| 20 70 75 74 20 76 61 72 | 69 61 62 6c 65 73 0a 58 | put var|iables.X|
|00001070| 61 6e 64 20 69 6e 74 65 | 72 6d 65 64 69 61 74 65 |and inte|rmediate|
|00001080| 20 76 61 6c 75 65 73 20 | 69 6e 74 6f 20 72 65 67 | values |into reg|
|00001090| 69 73 74 65 72 73 20 77 | 69 74 68 6f 75 74 20 61 |isters w|ithout a|
|000010a0| 6e 79 20 72 69 73 6b 20 | 6f 66 20 64 65 73 74 72 |ny risk |of destr|
|000010b0| 6f 79 69 6e 67 0a 58 74 | 68 65 20 76 61 6c 75 65 |oying.Xt|he value|
|000010c0| 73 20 6f 66 20 74 68 6f | 73 65 20 76 61 72 69 61 |s of tho|se varia|
|000010d0| 62 6c 65 73 20 28 61 73 | 20 6c 6f 6e 67 6a 6d 70 |bles (as| longjmp|
|000010e0| 28 29 20 75 73 75 61 6c | 6c 79 20 64 6f 65 73 29 |() usual|ly does)|
|000010f0| 2e 20 49 74 20 68 61 6e | 64 6c 65 73 0a 58 73 74 |. It han|dles.Xst|
|00001100| 61 63 6b 73 20 69 6e 20 | 65 69 74 68 65 72 20 64 |acks in |either d|
|00001110| 69 72 65 63 74 69 6f 6e | 2e 20 49 74 20 61 6c 73 |irection|. It als|
|00001120| 6f 20 72 65 73 74 6f 72 | 65 73 20 66 69 6c 65 20 |o restor|es file |
|00001130| 70 6f 73 69 74 69 6f 6e | 73 20 61 6e 64 20 73 69 |position|s and si|
|00001140| 67 6e 61 6c 0a 58 68 61 | 6e 64 6c 65 72 73 2e 0a |gnal.Xha|ndlers..|
|00001150| 58 0a 58 0a 58 49 6e 20 | 61 6e 79 20 72 6f 75 74 |X.X.XIn |any rout|
|00001160| 69 6e 65 20 77 68 65 72 | 65 20 79 6f 75 20 77 61 |ine wher|e you wa|
|00001170| 6e 74 20 74 6f 20 61 6c | 6c 6f 77 20 63 68 65 63 |nt to al|low chec|
|00001180| 6b 70 6f 69 6e 74 69 6e | 67 3a 0a 58 0a 58 20 20 |kpointin|g:.X.X |
|00001190| 50 75 74 20 61 20 43 4b | 50 54 20 56 41 52 53 20 |Put a CK|PT VARS |
|000011a0| 66 6c 75 73 68 20 6c 65 | 66 74 20 6f 6e 20 61 20 |flush le|ft on a |
|000011b0| 6c 69 6e 65 20 62 79 20 | 69 74 73 65 6c 66 20 61 |line by |itself a|
|000011c0| 74 20 74 68 65 20 74 6f | 70 2c 20 72 69 67 68 74 |t the to|p, right|
|000011d0| 20 61 66 74 65 72 0a 58 | 20 20 74 68 65 20 7b 2e | after.X| the {.|
|000011e0| 0a 58 0a 58 20 20 50 75 | 74 20 61 20 43 4b 50 54 |.X.X Pu|t a CKPT|
|000011f0| 20 54 4f 50 53 20 66 6c | 75 73 68 20 6c 65 66 74 | TOPS fl|ush left|
|00001200| 20 6f 6e 20 61 20 6c 69 | 6e 65 20 62 79 20 69 74 | on a li|ne by it|
|00001210| 73 65 6c 66 20 61 66 74 | 65 72 20 61 6c 6c 20 74 |self aft|er all t|
|00001220| 68 65 20 76 61 72 69 61 | 62 6c 65 73 2e 0a 58 20 |he varia|bles..X |
|00001230| 20 28 41 63 74 75 61 6c | 6c 79 2c 20 79 6f 75 20 | (Actual|ly, you |
|00001240| 63 61 6e 20 68 61 76 65 | 20 73 74 61 74 65 6d 65 |can have| stateme|
|00001250| 6e 74 73 20 61 62 6f 76 | 65 20 43 4b 50 54 20 54 |nts abov|e CKPT T|
|00001260| 4f 50 53 3b 20 73 65 65 | 20 62 65 6c 6f 77 2e 29 |OPS; see| below.)|
|00001270| 0a 58 0a 58 20 20 50 75 | 74 20 61 20 43 4b 50 54 |.X.X Pu|t a CKPT|
|00001280| 20 50 4f 49 4e 54 20 78 | 20 79 20 66 6c 75 73 68 | POINT x| y flush|
|00001290| 20 6c 65 66 74 20 6f 6e | 20 61 20 6c 69 6e 65 20 | left on| a line |
|000012a0| 62 79 20 69 74 73 65 6c | 66 20 61 6e 79 77 68 65 |by itsel|f anywhe|
|000012b0| 72 65 20 74 68 61 74 20 | 79 6f 75 0a 58 20 20 77 |re that |you.X w|
|000012c0| 61 6e 74 20 74 6f 20 61 | 6c 6c 6f 77 20 61 20 63 |ant to a|llow a c|
|000012d0| 68 65 63 6b 70 6f 69 6e | 74 2e 20 78 20 69 73 20 |heckpoin|t. x is |
|000012e0| 64 65 63 6c 61 72 65 64 | 20 61 73 20 61 20 76 61 |declared| as a va|
|000012f0| 72 69 61 62 6c 65 2c 20 | 61 6e 64 20 79 20 69 73 |riable, |and y is|
|00001300| 0a 58 20 20 64 65 63 6c | 61 72 65 64 20 61 73 20 |.X decl|ared as |
|00001310| 61 20 6c 61 62 65 6c 2c | 20 73 6f 20 62 65 20 63 |a label,| so be c|
|00001320| 61 72 65 66 75 6c 20 74 | 6f 20 75 73 65 20 75 6e |areful t|o use un|
|00001330| 69 71 75 65 20 6e 61 6d | 65 73 2e 0a 58 0a 58 20 |ique nam|es..X.X |
|00001340| 20 50 75 74 20 61 20 43 | 4b 50 54 20 42 4f 54 53 | Put a C|KPT BOTS|
|00001350| 20 66 6c 75 73 68 20 6c | 65 66 74 20 6f 6e 20 61 | flush l|eft on a|
|00001360| 20 6c 69 6e 65 20 62 79 | 20 69 74 73 65 6c 66 20 | line by| itself |
|00001370| 72 69 67 68 74 20 62 65 | 66 6f 72 65 20 74 68 65 |right be|fore the|
|00001380| 20 66 69 6e 61 6c 20 7d | 2e 0a 58 0a 58 59 6f 75 | final }|..X.XYou|
|00001390| 20 6d 75 73 74 20 23 69 | 6e 63 6c 75 64 65 20 22 | must #i|nclude "|
|000013a0| 70 6d 63 6b 70 74 2e 68 | 22 20 61 74 20 74 68 65 |pmckpt.h|" at the|
|000013b0| 20 74 6f 70 20 6f 66 20 | 74 68 65 20 66 69 6c 65 | top of |the file|
|000013c0| 2e 20 54 68 69 73 20 6d | 61 79 20 73 65 65 6d 20 |. This m|ay seem |
|000013d0| 6c 69 6b 65 0a 58 61 20 | 6c 6f 74 20 6f 66 20 77 |like.Xa |lot of w|
|000013e0| 6f 72 6b 20 66 6f 72 20 | 61 20 63 68 65 63 6b 70 |ork for |a checkp|
|000013f0| 6f 69 6e 74 65 72 2c 20 | 62 75 74 20 72 65 6d 65 |ointer, |but reme|
|00001400| 6d 62 65 72 20 74 68 61 | 74 20 74 68 65 20 6d 6f |mber tha|t the mo|
|00001410| 73 74 20 61 64 76 61 6e | 63 65 64 0a 58 63 6f 6e |st advan|ced.Xcon|
|00001420| 74 72 6f 6c 20 73 74 72 | 75 63 74 75 72 65 20 75 |trol str|ucture u|
|00001430| 73 65 64 20 62 79 20 70 | 6d 63 6b 70 74 20 69 73 |sed by p|mckpt is|
|00001440| 20 67 6f 74 6f 2e 20 41 | 20 73 65 74 6a 6d 70 28 | goto. A| setjmp(|
|00001450| 29 2d 62 61 73 65 64 20 | 73 79 73 74 65 6d 20 6d |)-based |system m|
|00001460| 61 79 20 62 65 0a 58 65 | 61 73 69 65 72 20 74 6f |ay be.Xe|asier to|
|00001470| 20 75 73 65 2c 20 62 75 | 74 20 69 74 27 6c 6c 20 | use, bu|t it'll |
|00001480| 61 6c 73 6f 20 6c 6f 73 | 65 20 76 61 72 69 61 62 |also los|e variab|
|00001490| 6c 65 20 76 61 6c 75 65 | 73 20 77 68 65 6e 20 79 |le value|s when y|
|000014a0| 6f 75 20 6c 65 61 73 74 | 20 65 78 70 65 63 74 0a |ou least| expect.|
|000014b0| 58 69 74 2e 0a 58 0a 58 | 0a 58 49 4d 50 4f 52 54 |Xit..X.X|.XIMPORT|
|000014c0| 41 4e 54 20 52 55 4c 45 | 3a 0a 58 0a 58 59 6f 75 |ANT RULE|:.X.XYou|
|000014d0| 20 2a 4d 55 53 54 2a 20 | 68 61 76 65 20 61 20 43 | *MUST* |have a C|
|000014e0| 4b 50 54 20 50 4f 49 4e | 54 20 69 6d 6d 65 64 69 |KPT POIN|T immedi|
|000014f0| 61 74 65 6c 79 20 62 65 | 66 6f 72 65 20 63 61 6c |ately be|fore cal|
|00001500| 6c 69 6e 67 20 61 6e 79 | 20 73 75 62 72 6f 75 74 |ling any| subrout|
|00001510| 69 6e 65 0a 58 74 68 61 | 74 27 73 20 63 68 65 63 |ine.Xtha|t's chec|
|00001520| 6b 70 6f 69 6e 74 65 64 | 2e 20 28 53 65 65 20 74 |kpointed|. (See t|
|00001530| 68 65 20 6d 61 69 6e 28 | 29 20 63 61 6c 6c 20 6f |he main(|) call o|
|00001540| 66 20 73 75 62 31 28 29 | 2c 20 6c 69 6e 65 20 33 |f sub1()|, line 3|
|00001550| 39 20 6f 66 20 74 65 73 | 74 2e 63 2e 29 0a 58 54 |9 of tes|t.c.).XT|
|00001560| 68 65 72 65 20 6d 75 73 | 74 20 62 65 20 61 62 73 |here mus|t be abs|
|00001570| 6f 6c 75 74 65 6c 79 20 | 6e 6f 20 73 69 64 65 20 |olutely |no side |
|00001580| 65 66 66 65 63 74 73 20 | 28 61 6e 64 20 6d 61 79 |effects |(and may|
|00001590| 62 65 20 6e 6f 20 63 6f | 6d 70 75 74 61 74 69 6f |be no co|mputatio|
|000015a0| 6e 20 61 74 0a 58 61 6c | 6c 2c 20 64 65 70 65 6e |n at.Xal|l, depen|
|000015b0| 64 69 6e 67 20 6f 6e 20 | 79 6f 75 72 20 63 6f 6d |ding on |your com|
|000015c0| 70 69 6c 65 72 29 20 62 | 65 74 77 65 65 6e 20 74 |piler) b|etween t|
|000015d0| 68 65 20 43 4b 50 54 20 | 50 4f 49 4e 54 20 6c 69 |he CKPT |POINT li|
|000015e0| 6e 65 20 61 6e 64 20 74 | 68 65 0a 58 63 61 6c 6c |ne and t|he.Xcall|
|000015f0| 2e 20 59 6f 75 20 6d 61 | 79 20 68 61 76 65 20 74 |. You ma|y have t|
|00001600| 6f 20 72 65 77 72 69 74 | 65 20 74 68 65 20 66 75 |o rewrit|e the fu|
|00001610| 6e 63 74 69 6f 6e 20 63 | 61 6c 6c 20 74 6f 20 61 |nction c|all to a|
|00001620| 63 68 69 65 76 65 20 74 | 68 69 73 2e 0a 58 0a 58 |chieve t|his..X.X|
|00001630| 0a 58 59 6f 75 20 73 63 | 68 65 64 75 6c 65 20 61 |.XYou sc|hedule a|
|00001640| 20 63 68 65 63 6b 70 6f | 69 6e 74 20 62 79 20 63 | checkpo|int by c|
|00001650| 61 6c 6c 69 6e 67 20 63 | 6b 70 74 5f 73 63 68 65 |alling c|kpt_sche|
|00001660| 64 75 6c 65 28 29 2e 20 | 41 74 20 74 68 65 20 6e |dule(). |At the n|
|00001670| 65 78 74 20 43 4b 50 54 | 0a 58 50 4f 49 4e 54 2c |ext CKPT|.XPOINT,|
|00001680| 20 79 6f 75 72 20 70 72 | 6f 67 72 61 6d 20 77 69 | your pr|ogram wi|
|00001690| 6c 6c 20 73 61 76 65 20 | 73 6f 6d 65 20 63 72 75 |ll save |some cru|
|000016a0| 63 69 61 6c 20 69 6e 66 | 6f 72 6d 61 74 69 6f 6e |cial inf|ormation|
|000016b0| 2c 20 66 6f 6c 6c 6f 77 | 65 64 20 62 79 20 69 74 |, follow|ed by it|
|000016c0| 73 0a 58 74 65 78 74 2c | 20 64 61 74 61 2c 20 61 |s.Xtext,| data, a|
|000016d0| 6e 64 20 73 74 61 63 6b | 2c 20 74 6f 20 74 68 65 |nd stack|, to the|
|000016e0| 20 43 48 45 43 4b 50 4f | 49 4e 54 20 66 69 6c 65 | CHECKPO|INT file|
|000016f0| 2e 20 54 6f 20 73 65 74 | 20 74 68 69 73 20 66 69 |. To set| this fi|
|00001700| 6c 65 6e 61 6d 65 20 74 | 6f 0a 58 74 68 65 20 76 |lename t|o.Xthe v|
|00001710| 61 6c 75 65 20 6f 66 20 | 74 68 65 20 43 4b 50 54 |alue of |the CKPT|
|00001720| 46 4e 20 65 6e 76 69 72 | 6f 6e 6d 65 6e 74 20 76 |FN envir|onment v|
|00001730| 61 72 69 61 62 6c 65 20 | 69 6e 73 74 65 61 64 2c |ariable |instead,|
|00001740| 20 63 61 6c 6c 20 63 6b | 70 74 5f 69 6e 69 74 28 | call ck|pt_init(|
|00001750| 29 2e 0a 58 28 54 68 69 | 73 20 61 6c 73 6f 20 73 |)..X(Thi|s also s|
|00001760| 65 74 73 20 61 20 74 65 | 6d 70 6f 72 61 72 79 20 |ets a te|mporary |
|00001770| 66 69 6c 65 20 6e 61 6d | 65 2c 20 64 65 66 61 75 |file nam|e, defau|
|00001780| 6c 74 20 43 48 45 43 4b | 50 4f 49 4e 54 2e 54 45 |lt CHECK|POINT.TE|
|00001790| 4d 50 2c 20 74 6f 20 74 | 68 65 0a 58 76 61 6c 75 |MP, to t|he.Xvalu|
|000017a0| 65 20 6f 66 20 43 4b 50 | 54 46 4e 54 45 4d 50 2e |e of CKP|TFNTEMP.|
|000017b0| 20 54 68 65 20 74 65 6d | 70 6f 72 61 72 79 20 66 | The tem|porary f|
|000017c0| 69 6c 65 20 69 73 20 75 | 73 65 64 20 74 6f 20 65 |ile is u|sed to e|
|000017d0| 6e 73 75 72 65 20 61 74 | 6f 6d 69 63 0a 58 63 68 |nsure at|omic.Xch|
|000017e0| 65 63 6b 70 6f 69 6e 74 | 69 6e 67 2e 29 20 74 65 |eckpoint|ing.) te|
|000017f0| 73 74 2e 63 20 73 68 6f | 77 73 20 68 6f 77 20 79 |st.c sho|ws how y|
|00001800| 6f 75 20 63 61 6e 20 73 | 63 68 65 64 75 6c 65 20 |ou can s|chedule |
|00001810| 61 20 63 68 65 63 6b 70 | 6f 69 6e 74 20 6f 6e 20 |a checkp|oint on |
|00001820| 61 6e 79 0a 58 69 6e 74 | 65 72 72 75 70 74 2e 20 |any.Xint|errupt. |
|00001830| 49 6e 20 70 72 61 63 74 | 69 63 65 20 79 6f 75 20 |In pract|ice you |
|00001840| 70 72 6f 62 61 62 6c 79 | 20 77 61 6e 74 20 74 6f |probably| want to|
|00001850| 20 63 68 65 63 6b 70 6f | 69 6e 74 20 61 74 20 72 | checkpo|int at r|
|00001860| 65 67 75 6c 61 72 0a 58 | 69 6e 74 65 72 76 61 6c |egular.X|interval|
|00001870| 73 2c 20 77 69 74 68 20 | 77 68 61 74 65 76 65 72 |s, with |whatever|
|00001880| 20 79 6f 75 72 20 73 79 | 73 74 65 6d 20 75 73 65 | your sy|stem use|
|00001890| 73 20 66 6f 72 20 61 20 | 74 69 6d 65 72 2e 0a 58 |s for a |timer..X|
|000018a0| 0a 58 0a 58 54 6f 20 72 | 75 6e 20 79 6f 75 72 20 |.X.XTo r|un your |
|000018b0| 70 72 6f 67 72 61 6d 20 | 73 74 61 72 74 69 6e 67 |program |starting|
|000018c0| 20 66 72 6f 6d 20 74 68 | 65 20 63 68 65 63 6b 70 | from th|e checkp|
|000018d0| 6f 69 6e 74 2c 20 72 75 | 6e 0a 58 0a 58 20 20 25 |oint, ru|n.X.X %|
|000018e0| 20 63 68 65 63 6b 70 6f | 69 6e 74 20 70 72 6f 67 | checkpo|int prog|
|000018f0| 20 43 48 45 43 4b 50 4f | 49 4e 54 0a 58 0a 58 77 | CHECKPO|INT.X.Xw|
|00001900| 68 65 72 65 20 70 72 6f | 67 20 69 73 20 74 68 65 |here pro|g is the|
|00001910| 20 70 72 6f 67 72 61 6d | 20 6e 61 6d 65 20 61 6e | program| name an|
|00001920| 64 20 43 48 45 43 4b 50 | 4f 49 4e 54 20 69 73 20 |d CHECKP|OINT is |
|00001930| 74 68 65 20 63 68 65 63 | 6b 70 6f 69 6e 74 20 66 |the chec|kpoint f|
|00001940| 69 6c 65 0a 58 6e 61 6d | 65 2e 20 49 66 20 79 6f |ile.Xnam|e. If yo|
|00001950| 75 27 72 65 20 6c 75 63 | 6b 79 2c 20 65 76 65 72 |u're luc|ky, ever|
|00001960| 79 74 68 69 6e 67 20 77 | 69 6c 6c 20 77 6f 72 6b |ything w|ill work|
|00001970| 2e 0a 58 0a 58 59 6f 75 | 20 63 61 6e 20 68 61 76 |..X.XYou| can hav|
|00001980| 65 20 73 74 61 74 65 6d | 65 6e 74 73 20 61 66 74 |e statem|ents aft|
|00001990| 65 72 20 74 68 65 20 76 | 61 72 69 61 62 6c 65 73 |er the v|ariables|
|000019a0| 20 61 6e 64 20 62 65 66 | 6f 72 65 20 43 4b 50 54 | and bef|ore CKPT|
|000019b0| 20 54 4f 50 53 2e 20 54 | 68 65 73 65 0a 58 73 74 | TOPS. T|hese.Xst|
|000019c0| 61 74 65 6d 65 6e 74 73 | 20 66 6f 72 6d 20 74 68 |atements| form th|
|000019d0| 65 20 60 60 70 72 65 61 | 6d 62 6c 65 2e 27 27 20 |e ``prea|mble.'' |
|000019e0| 54 68 65 79 27 72 65 20 | 65 78 65 63 75 74 65 64 |They're |executed|
|000019f0| 20 65 76 65 72 79 20 74 | 69 6d 65 20 74 68 65 0a | every t|ime the.|
|00001a00| 58 66 75 6e 63 74 69 6f | 6e 20 69 73 20 65 6e 74 |Xfunctio|n is ent|
|00001a10| 65 72 65 64 2c 20 77 68 | 65 74 68 65 72 20 69 6e |ered, wh|ether in|
|00001a20| 20 6e 6f 72 6d 61 6c 20 | 65 78 65 63 75 74 69 6f | normal |executio|
|00001a30| 6e 20 6f 72 20 61 73 20 | 70 61 72 74 20 6f 66 20 |n or as |part of |
|00001a40| 61 0a 58 72 65 73 74 6f | 72 65 2e 20 59 6f 75 20 |a.Xresto|re. You |
|00001a50| 73 68 6f 75 6c 64 20 62 | 65 20 76 65 72 79 20 63 |should b|e very c|
|00001a60| 61 72 65 66 75 6c 20 77 | 69 74 68 20 73 74 61 74 |areful w|ith stat|
|00001a70| 65 6d 65 6e 74 73 20 69 | 6e 20 61 20 70 72 65 61 |ements i|n a prea|
|00001a80| 6d 62 6c 65 2c 20 61 73 | 0a 58 79 6f 75 20 77 69 |mble, as|.Xyou wi|
|00001a90| 6c 6c 20 6c 6f 73 65 20 | 61 6e 79 20 76 61 72 69 |ll lose |any vari|
|00001aa0| 61 62 6c 65 20 76 61 6c | 75 65 73 20 73 65 74 20 |able val|ues set |
|00001ab0| 69 6e 20 61 20 70 72 65 | 61 6d 62 6c 65 20 64 75 |in a pre|amble du|
|00001ac0| 72 69 6e 67 20 61 20 72 | 65 73 74 6f 72 65 2e 0a |ring a r|estore..|
|00001ad0| 58 4f 6e 65 20 73 61 66 | 65 20 75 73 65 20 6f 66 |XOne saf|e use of|
|00001ae0| 20 74 68 65 20 70 72 65 | 61 6d 62 6c 65 20 69 73 | the pre|amble is|
|00001af0| 20 61 74 20 74 68 65 20 | 74 6f 70 20 6f 66 20 6d | at the |top of m|
|00001b00| 61 69 6e 28 29 2c 20 74 | 6f 20 6f 70 65 6e 20 66 |ain(), t|o open f|
|00001b10| 69 6c 65 73 0a 58 28 70 | 65 72 68 61 70 73 20 70 |iles.X(p|erhaps p|
|00001b20| 61 73 73 65 64 20 61 73 | 20 61 72 67 75 6d 65 6e |assed as| argumen|
|00001b30| 74 73 20 74 6f 20 74 68 | 65 20 70 72 6f 67 72 61 |ts to th|e progra|
|00001b40| 6d 29 20 69 6e 20 61 20 | 66 69 78 65 64 20 6f 72 |m) in a |fixed or|
|00001b50| 64 65 72 2e 20 49 6e 20 | 66 61 63 74 2c 0a 58 69 |der. In |fact,.Xi|
|00001b60| 66 20 79 6f 75 20 64 6f | 6e 27 74 20 64 6f 20 74 |f you do|n't do t|
|00001b70| 68 69 73 2c 20 66 69 6c | 65 73 20 6f 70 65 6e 65 |his, fil|es opene|
|00001b80| 64 20 77 69 74 68 69 6e | 20 74 68 65 20 70 72 6f |d within| the pro|
|00001b90| 67 72 61 6d 20 77 6f 6e | 27 74 20 62 65 20 72 65 |gram won|'t be re|
|00001ba0| 6f 70 65 6e 65 64 0a 58 | 6f 6e 20 61 20 72 65 73 |opened.X|on a res|
|00001bb0| 74 6f 72 65 2e 0a 58 0a | 58 0a 58 54 6f 20 63 6f |tore..X.|X.XTo co|
|00001bc0| 6d 70 69 6c 65 20 61 20 | 70 6d 63 6b 70 74 20 70 |mpile a |pmckpt p|
|00001bd0| 72 6f 67 72 61 6d 2c 20 | 73 75 63 68 20 61 73 20 |rogram, |such as |
|00001be0| 74 65 73 74 2e 63 2c 20 | 72 75 6e 20 74 68 65 20 |test.c, |run the |
|00001bf0| 66 6f 6c 6c 6f 77 69 6e | 67 3a 0a 58 0a 58 20 20 |followin|g:.X.X |
|00001c00| 25 20 63 6b 70 74 63 76 | 74 20 3c 20 74 65 73 74 |% ckptcv|t < test|
|00001c10| 2e 63 20 3e 20 74 6d 70 | 2e 63 0a 58 20 20 25 20 |.c > tmp|.c.X % |
|00001c20| 63 63 20 2d 63 20 74 6d | 70 2e 63 0a 58 20 20 25 |cc -c tm|p.c.X %|
|00001c30| 20 63 63 20 2d 6f 20 74 | 6d 70 20 70 6d 63 6b 70 | cc -o t|mp pmckp|
|00001c40| 74 2e 6f 20 74 6d 70 2e | 6f 20 70 6d 63 65 6f 74 |t.o tmp.|o pmceot|
|00001c50| 2e 6f 0a 58 0a 58 74 6d | 70 20 63 61 6e 20 62 65 |.o.X.Xtm|p can be|
|00001c60| 20 61 6e 79 20 6e 61 6d | 65 2e 20 4d 61 6b 65 20 | any nam|e. Make |
|00001c70| 73 75 72 65 20 74 68 61 | 74 20 70 6d 63 6b 70 74 |sure tha|t pmckpt|
|00001c80| 2e 6f 20 63 6f 6d 65 73 | 20 62 65 66 6f 72 65 20 |.o comes| before |
|00001c90| 61 6c 6c 20 6f 74 68 65 | 72 20 2e 6f 27 73 0a 58 |all othe|r .o's.X|
|00001ca0| 6c 6f 61 64 65 64 20 28 | 65 78 63 65 70 74 20 6d |loaded (|except m|
|00001cb0| 61 79 62 65 20 63 72 74 | 30 2d 2d 2d 74 68 6f 75 |aybe crt|0---thou|
|00001cc0| 67 68 20 74 68 69 73 20 | 70 72 6f 62 61 62 6c 79 |gh this |probably|
|00001cd0| 20 6c 65 61 64 73 20 74 | 6f 20 62 75 67 73 29 2c | leads t|o bugs),|
|00001ce0| 20 61 6e 64 0a 58 70 6d | 63 65 6f 74 2e 6f 20 63 | and.Xpm|ceot.o c|
|00001cf0| 6f 6d 65 73 20 61 66 74 | 65 72 20 61 6c 6c 20 2e |omes aft|er all .|
|00001d00| 6f 27 73 20 6c 6f 61 64 | 65 64 2e 20 59 6f 75 20 |o's load|ed. You |
|00001d10| 73 68 6f 75 6c 64 6e 27 | 74 20 68 61 76 65 20 74 |shouldn'|t have t|
|00001d20| 6f 20 77 6f 72 72 79 20 | 61 62 6f 75 74 0a 58 64 |o worry |about.Xd|
|00001d30| 79 6e 61 6d 69 63 20 6c | 6f 61 64 69 6e 67 20 6f |ynamic l|oading o|
|00001d40| 6e 20 53 75 6e 73 2c 20 | 6f 72 20 6f 74 68 65 72 |n Suns, |or other|
|00001d50| 20 77 65 69 72 64 20 73 | 63 68 65 6d 65 73 3b 20 | weird s|chemes; |
|00001d60| 70 6d 63 6b 70 74 20 69 | 73 20 70 72 65 74 74 79 |pmckpt i|s pretty|
|00001d70| 0a 58 70 6f 72 74 61 62 | 6c 65 2c 20 66 6f 72 20 |.Xportab|le, for |
|00001d80| 61 20 63 68 65 63 6b 70 | 6f 69 6e 74 65 72 2e 0a |a checkp|ointer..|
|00001d90| 58 0a 58 46 69 6e 61 6c | 6c 79 2c 20 74 6f 20 63 |X.XFinal|ly, to c|
|00001da0| 6f 6d 70 6c 65 74 65 20 | 6f 75 72 20 6f 75 74 73 |omplete |our outs|
|00001db0| 69 64 65 2d 69 6e 20 74 | 6f 75 72 20 6f 66 20 70 |ide-in t|our of p|
|00001dc0| 6d 63 6b 70 74 2c 20 79 | 6f 75 20 68 61 76 65 20 |mckpt, y|ou have |
|00001dd0| 74 6f 20 63 6f 6d 70 69 | 6c 65 0a 58 74 68 65 20 |to compi|le.Xthe |
|00001de0| 70 6d 63 6b 70 74 20 6c | 69 62 72 61 72 79 20 69 |pmckpt l|ibrary i|
|00001df0| 74 73 65 6c 66 20 62 65 | 66 6f 72 65 20 75 73 69 |tself be|fore usi|
|00001e00| 6e 67 20 69 74 20 69 6e | 20 70 72 6f 67 72 61 6d |ng it in| program|
|00001e10| 73 20 61 73 20 61 62 6f | 76 65 2e 20 54 6f 20 64 |s as abo|ve. To d|
|00001e20| 6f 0a 58 74 68 69 73 2c | 20 65 64 69 74 20 74 68 |o.Xthis,| edit th|
|00001e30| 65 20 6f 70 74 69 6f 6e | 73 20 69 6e 20 4d 61 6b |e option|s in Mak|
|00001e40| 65 66 69 6c 65 20 61 6e | 64 20 74 79 70 65 20 60 |efile an|d type `|
|00001e50| 60 6d 61 6b 65 27 27 2e | 0a 58 0a 58 0a 58 54 6f |`make''.|.X.X.XTo|
|00001e60| 20 74 65 73 74 20 70 6d | 63 6b 70 74 2c 20 63 6f | test pm|ckpt, co|
|00001e70| 6d 70 69 6c 65 20 74 65 | 73 74 2e 63 20 69 6e 74 |mpile te|st.c int|
|00001e80| 6f 20 74 6d 70 20 62 79 | 20 74 68 65 20 61 62 6f |o tmp by| the abo|
|00001e90| 76 65 20 69 6e 73 74 72 | 75 63 74 69 6f 6e 73 2e |ve instr|uctions.|
|00001ea0| 20 52 75 6e 0a 58 74 6d | 70 2e 20 59 6f 75 20 73 | Run.Xtm|p. You s|
|00001eb0| 68 6f 75 6c 64 20 73 65 | 65 20 31 33 20 6c 69 6e |hould se|e 13 lin|
|00001ec0| 65 73 20 6f 66 20 6f 75 | 74 70 75 74 2e 20 52 75 |es of ou|tput. Ru|
|00001ed0| 6e 20 69 74 20 61 67 61 | 69 6e 3b 20 61 20 43 4b |n it aga|in; a CK|
|00001ee0| 50 54 20 50 4f 49 4e 54 | 20 63 6f 6d 65 73 0a 58 |PT POINT| comes.X|
|00001ef0| 61 66 74 65 72 20 65 61 | 63 68 20 6f 75 74 70 75 |after ea|ch outpu|
|00001f00| 74 2c 20 73 6f 20 69 66 | 20 79 6f 75 20 74 79 70 |t, so if| you typ|
|00001f10| 65 20 5e 43 2c 20 74 68 | 65 20 70 72 6f 67 72 61 |e ^C, th|e progra|
|00001f20| 6d 20 77 69 6c 6c 20 73 | 61 76 65 20 73 74 61 74 |m will s|ave stat|
|00001f30| 65 20 61 66 74 65 72 0a | 58 74 68 65 20 6e 65 78 |e after.|Xthe nex|
|00001f40| 74 20 6f 75 74 70 75 74 | 20 69 6e 20 43 48 45 43 |t output| in CHEC|
|00001f50| 4b 50 4f 49 4e 54 2e 20 | 54 72 79 20 74 79 70 69 |KPOINT. |Try typi|
|00001f60| 6e 67 20 5e 43 20 61 74 | 20 61 6e 79 20 6d 6f 6d |ng ^C at| any mom|
|00001f70| 65 6e 74 2e 20 49 66 20 | 79 6f 75 20 72 75 6e 0a |ent. If |you run.|
|00001f80| 58 25 20 63 68 65 63 6b | 70 6f 69 6e 74 20 74 6d |X% check|point tm|
|00001f90| 70 20 43 48 45 43 4b 50 | 4f 49 4e 54 2c 20 74 68 |p CHECKP|OINT, th|
|00001fa0| 65 20 70 72 6f 67 72 61 | 6d 20 73 68 6f 75 6c 64 |e progra|m should|
|00001fb0| 20 72 65 73 74 61 72 74 | 20 66 72 6f 6d 20 77 68 | restart| from wh|
|00001fc0| 65 72 65 20 69 74 0a 58 | 6c 65 66 74 20 6f 66 66 |ere it.X|left off|
|00001fd0| 2e 20 5e 43 20 77 6f 72 | 6b 73 20 61 66 74 65 72 |. ^C wor|ks after|
|00001fe0| 20 61 20 72 65 73 74 6f | 72 65 20 74 6f 6f 2c 20 | a resto|re too, |
|00001ff0| 73 6f 20 61 20 73 69 6e | 67 6c 65 20 70 72 6f 67 |so a sin|gle prog|
|00002000| 72 61 6d 20 63 61 6e 0a | 58 63 68 65 63 6b 70 6f |ram can.|Xcheckpo|
|00002010| 69 6e 74 20 61 6e 64 20 | 72 65 73 74 61 72 74 20 |int and |restart |
|00002020| 61 6e 79 20 6e 75 6d 62 | 65 72 20 6f 66 20 74 69 |any numb|er of ti|
|00002030| 6d 65 73 2e 0a 58 0a 58 | 46 6f 72 20 61 20 6d 6f |mes..X.X|For a mo|
|00002040| 72 65 20 73 6f 70 68 69 | 73 74 69 63 61 74 65 64 |re sophi|sticated|
|00002050| 20 74 65 73 74 2c 20 74 | 72 79 20 72 65 64 69 72 | test, t|ry redir|
|00002060| 65 63 74 69 6e 67 20 74 | 68 65 20 6f 75 74 70 75 |ecting t|he outpu|
|00002070| 74 20 6f 66 20 74 6d 70 | 20 74 6f 20 61 0a 58 66 |t of tmp| to a.Xf|
|00002080| 69 6c 65 2e 20 74 61 69 | 6c 20 2d 66 20 66 69 6c |ile. tai|l -f fil|
|00002090| 65 20 26 20 74 6f 20 73 | 65 65 20 77 68 61 74 27 |e & to s|ee what'|
|000020a0| 73 20 68 61 70 70 65 6e | 69 6e 67 2e 20 54 79 70 |s happen|ing. Typ|
|000020b0| 65 20 5e 43 20 61 66 74 | 65 72 20 61 20 66 65 77 |e ^C aft|er a few|
|000020c0| 0a 58 73 65 63 6f 6e 64 | 73 3b 20 61 66 74 65 72 |.Xsecond|s; after|
|000020d0| 20 61 20 66 65 77 20 73 | 65 63 6f 6e 64 73 20 6d | a few s|econds m|
|000020e0| 6f 72 65 2c 20 74 6f 20 | 73 69 6d 75 6c 61 74 65 |ore, to |simulate|
|000020f0| 20 61 20 73 79 73 74 65 | 6d 20 63 72 61 73 68 2c | a syste|m crash,|
|00002100| 20 69 6e 74 65 72 72 75 | 70 74 0a 58 74 68 65 20 | interru|pt.Xthe |
|00002110| 70 72 6f 63 65 73 73 20 | 77 69 74 68 20 5e 5c 20 |process |with ^\ |
|00002120| 28 6f 72 20 77 68 61 74 | 65 76 65 72 20 79 6f 75 |(or what|ever you|
|00002130| 72 20 69 6e 74 65 72 72 | 75 70 74 20 6b 65 79 20 |r interr|upt key |
|00002140| 69 73 29 2e 20 74 6d 70 | 20 77 69 6c 6c 20 64 75 |is). tmp| will du|
|00002150| 6d 70 0a 58 63 6f 72 65 | 2e 20 4b 69 6c 6c 20 74 |mp.Xcore|. Kill t|
|00002160| 68 65 20 74 61 69 6c 2c | 20 61 6e 64 20 72 65 73 |he tail,| and res|
|00002170| 74 6f 72 65 20 74 6d 70 | 20 66 72 6f 6d 20 43 48 |tore tmp| from CH|
|00002180| 45 43 4b 50 4f 49 4e 54 | 2c 20 72 65 64 69 72 65 |ECKPOINT|, redire|
|00002190| 63 74 69 6e 67 20 6f 75 | 74 70 75 74 0a 58 74 6f |cting ou|tput.Xto|
|000021a0| 20 74 68 65 20 73 61 6d | 65 20 66 69 6c 65 20 77 | the sam|e file w|
|000021b0| 69 74 68 20 3e 3e 2e 20 | 57 68 65 6e 20 69 74 20 |ith >>. |When it |
|000021c0| 66 69 6e 69 73 68 65 73 | 2c 20 6c 6f 6f 6b 20 61 |finishes|, look a|
|000021d0| 74 20 74 68 65 20 66 69 | 6c 65 2e 20 74 6d 70 20 |t the fi|le. tmp |
|000021e0| 73 68 6f 75 6c 64 0a 58 | 68 61 76 65 20 6d 6f 76 |should.X|have mov|
|000021f0| 65 64 20 62 61 63 6b 20 | 74 6f 20 74 68 65 20 6c |ed back |to the l|
|00002200| 6f 63 61 74 69 6f 6e 20 | 6f 66 20 74 68 65 20 66 |ocation |of the f|
|00002210| 69 72 73 74 20 63 68 65 | 63 6b 70 6f 69 6e 74 2c |irst che|ckpoint,|
|00002220| 20 73 6f 20 74 68 61 74 | 20 6f 75 74 70 75 74 0a | so that| output.|
|00002230| 58 62 65 74 77 65 65 6e | 20 74 68 65 20 63 68 65 |Xbetween| the che|
|00002240| 63 6b 70 6f 69 6e 74 20 | 61 6e 64 20 74 68 65 20 |ckpoint |and the |
|00002250| 60 60 63 72 61 73 68 27 | 27 20 77 6f 6e 27 74 20 |``crash'|' won't |
|00002260| 68 61 76 65 20 62 65 65 | 6e 20 77 72 69 74 74 65 |have bee|n writte|
|00002270| 6e 20 74 77 69 63 65 2e | 0a 58 49 6e 20 6f 74 68 |n twice.|.XIn oth|
|00002280| 65 72 20 77 6f 72 64 73 | 2c 20 79 6f 75 20 73 68 |er words|, you sh|
|00002290| 6f 75 6c 64 6e 27 74 20 | 62 65 20 61 62 6c 65 20 |ouldn't |be able |
|000022a0| 74 6f 20 74 65 6c 6c 20 | 66 72 6f 6d 20 6c 6f 6f |to tell |from loo|
|000022b0| 6b 69 6e 67 20 61 74 20 | 74 68 65 20 66 69 6c 65 |king at |the file|
|000022c0| 0a 58 74 68 61 74 20 74 | 6d 70 20 68 61 64 20 63 |.Xthat t|mp had c|
|000022d0| 72 61 73 68 65 64 20 61 | 74 20 61 6c 6c 2e 0a 58 |rashed a|t all..X|
|000022e0| 0a 58 54 72 79 20 72 75 | 6e 6e 69 6e 67 20 74 68 |.XTry ru|nning th|
|000022f0| 65 20 6c 61 73 74 20 74 | 65 73 74 20 61 67 61 69 |e last t|est agai|
|00002300| 6e 2c 20 62 75 74 20 64 | 6f 6e 27 74 20 6b 69 6c |n, but d|on't kil|
|00002310| 6c 20 74 68 65 20 74 61 | 69 6c 2e 20 57 68 61 74 |l the ta|il. What|
|00002320| 20 73 68 6f 75 6c 64 0a | 58 68 61 70 70 65 6e 20 | should.|Xhappen |
|00002330| 69 73 20 74 68 61 74 20 | 77 68 61 74 20 73 68 6f |is that |what sho|
|00002340| 77 73 20 75 70 20 6f 6e | 20 79 6f 75 72 20 74 74 |ws up on| your tt|
|00002350| 79 20 69 73 20 74 68 65 | 20 63 6f 72 72 65 63 74 |y is the| correct|
|00002360| 20 6f 75 74 70 75 74 20 | 69 6e 20 6f 72 64 65 72 | output |in order|
|00002370| 2c 0a 58 61 6e 64 20 77 | 68 61 74 20 65 6e 64 73 |,.Xand w|hat ends|
|00002380| 20 75 70 20 69 6e 20 66 | 6f 6f 20 69 73 20 74 68 | up in f|oo is th|
|00002390| 65 20 63 6f 72 72 65 63 | 74 20 6f 75 74 70 75 74 |e correc|t output|
|000023a0| 20 69 6e 20 6f 72 64 65 | 72 2d 2d 2d 65 76 65 6e | in orde|r---even|
|000023b0| 20 74 68 6f 75 67 68 0a | 58 73 6f 6d 65 20 6f 75 | though.|Xsome ou|
|000023c0| 74 70 75 74 20 69 73 20 | 77 72 69 74 74 65 6e 20 |tput is |written |
|000023d0| 62 65 74 77 65 65 6e 20 | 74 68 65 20 6c 61 73 74 |between |the last|
|000023e0| 20 63 68 65 63 6b 70 6f | 69 6e 74 20 61 6e 64 20 | checkpo|int and |
|000023f0| 74 68 65 20 63 72 61 73 | 68 21 20 54 68 65 0a 58 |the cras|h! The.X|
|00002400| 72 65 61 73 6f 6e 20 74 | 68 61 74 20 74 61 69 6c |reason t|hat tail|
|00002410| 20 64 6f 65 73 6e 27 74 | 20 77 72 69 74 65 20 61 | doesn't| write a|
|00002420| 6e 79 74 68 69 6e 67 20 | 74 77 69 63 65 20 74 6f |nything |twice to|
|00002430| 20 79 6f 75 72 20 74 74 | 79 20 69 73 20 74 68 61 | your tt|y is tha|
|00002440| 74 20 69 74 0a 58 64 6f | 65 73 6e 27 74 20 67 6f |t it.Xdo|esn't go|
|00002450| 20 62 61 63 6b 77 61 72 | 64 73 20 69 6e 20 74 68 | backwar|ds in th|
|00002460| 65 20 66 69 6c 65 20 77 | 68 65 6e 20 70 6d 63 6b |e file w|hen pmck|
|00002470| 70 74 20 64 6f 65 73 2e | 0a 58 0a 58 0a 58 49 6e |pt does.|.X.X.XIn|
|00002480| 74 65 72 6e 61 6c 6c 79 | 2c 20 70 6d 63 6b 70 74 |ternally|, pmckpt|
|00002490| 20 77 65 6e 64 73 20 69 | 74 73 20 77 61 79 20 64 | wends i|ts way d|
|000024a0| 6f 77 6e 20 74 68 72 6f | 75 67 68 20 74 68 65 20 |own thro|ugh the |
|000024b0| 73 61 76 65 64 20 70 72 | 6f 63 65 73 73 20 73 74 |saved pr|ocess st|
|000024c0| 61 63 6b 20 74 6f 0a 58 | 67 65 74 20 74 6f 20 77 |ack to.X|get to w|
|000024d0| 68 65 72 65 20 69 74 20 | 77 61 73 20 62 65 66 6f |here it |was befo|
|000024e0| 72 65 2e 20 52 75 6e 20 | 61 20 70 6f 73 74 2d 63 |re. Run |a post-c|
|000024f0| 6b 70 74 63 76 74 20 70 | 72 6f 67 72 61 6d 20 74 |kptcvt p|rogram t|
|00002500| 68 72 6f 75 67 68 20 63 | 70 70 20 69 66 0a 58 79 |hrough c|pp if.Xy|
|00002510| 6f 75 20 77 61 6e 74 20 | 74 6f 20 73 65 65 20 77 |ou want |to see w|
|00002520| 68 61 74 27 73 20 67 6f | 69 6e 67 20 6f 6e 2e 0a |hat's go|ing on..|
|00002530| 45 4e 44 5f 4f 46 5f 46 | 49 4c 45 0a 69 66 20 74 |END_OF_F|ILE.if t|
|00002540| 65 73 74 20 36 35 32 38 | 20 2d 6e 65 20 60 77 63 |est 6528| -ne `wc|
|00002550| 20 2d 63 20 3c 27 52 45 | 41 44 4d 45 27 60 3b 20 | -c <'RE|ADME'`; |
|00002560| 74 68 65 6e 0a 20 20 20 | 20 65 63 68 6f 20 73 68 |then. | echo sh|
|00002570| 61 72 3a 20 5c 22 27 52 | 45 41 44 4d 45 27 5c 22 |ar: \"'R|EADME'\"|
|00002580| 20 75 6e 70 61 63 6b 65 | 64 20 77 69 74 68 20 77 | unpacke|d with w|
|00002590| 72 6f 6e 67 20 73 69 7a | 65 21 0a 66 69 0a 23 20 |rong siz|e!.fi.# |
|000025a0| 65 6e 64 20 6f 66 20 27 | 52 45 41 44 4d 45 27 0a |end of '|README'.|
|000025b0| 66 69 0a 69 66 20 74 65 | 73 74 20 2d 66 20 27 55 |fi.if te|st -f 'U|
|000025c0| 41 52 45 41 27 20 2d 61 | 20 22 24 7b 31 7d 22 20 |AREA' -a| "${1}" |
|000025d0| 21 3d 20 22 2d 63 22 20 | 3b 20 74 68 65 6e 20 0a |!= "-c" |; then .|
|000025e0| 20 20 65 63 68 6f 20 73 | 68 61 72 3a 20 57 69 6c | echo s|har: Wil|
|000025f0| 6c 20 6e 6f 74 20 63 6c | 6f 62 62 65 72 20 65 78 |l not cl|obber ex|
|00002600| 69 73 74 69 6e 67 20 66 | 69 6c 65 20 5c 22 27 55 |isting f|ile \"'U|
|00002610| 41 52 45 41 27 5c 22 0a | 65 6c 73 65 0a 65 63 68 |AREA'\".|else.ech|
|00002620| 6f 20 73 68 61 72 3a 20 | 45 78 74 72 61 63 74 69 |o shar: |Extracti|
|00002630| 6e 67 20 5c 22 27 55 41 | 52 45 41 27 5c 22 20 5c |ng \"'UA|REA'\" \|
|00002640| 28 35 31 37 20 63 68 61 | 72 61 63 74 65 72 73 5c |(517 cha|racters\|
|00002650| 29 0a 73 65 64 20 22 73 | 2f 5e 58 2f 2f 22 20 3e |).sed "s|/^X//" >|
|00002660| 27 55 41 52 45 41 27 20 | 3c 3c 27 45 4e 44 5f 4f |'UAREA' |<<'END_O|
|00002670| 46 5f 46 49 4c 45 27 0a | 58 45 76 65 72 79 74 68 |F_FILE'.|XEveryth|
|00002680| 69 6e 67 20 69 6e 20 74 | 68 65 20 75 20 61 72 65 |ing in t|he u are|
|00002690| 61 20 63 6f 75 6c 64 20 | 62 65 20 73 61 76 65 64 |a could |be saved|
|000026a0| 2e 0a 58 0a 58 57 68 61 | 74 20 77 65 20 61 63 74 |..X.XWha|t we act|
|000026b0| 75 61 6c 6c 79 20 73 61 | 76 65 3a 0a 58 20 20 6f |ually sa|ve:.X o|
|000026c0| 70 65 6e 20 66 69 6c 65 | 20 64 65 73 63 72 69 70 |pen file| descrip|
|000026d0| 74 6f 72 20 70 6f 73 69 | 74 69 6f 6e 73 0a 58 20 |tor posi|tions.X |
|000026e0| 20 73 69 67 6e 61 6c 20 | 68 61 6e 64 6c 65 72 73 | signal |handlers|
|000026f0| 0a 58 20 20 28 75 69 64 | 29 0a 58 0a 58 45 61 73 |.X (uid|).X.XEas|
|00002700| 79 20 74 6f 20 72 65 73 | 74 6f 72 65 20 66 72 6f |y to res|tore fro|
|00002710| 6d 20 74 68 65 20 6f 75 | 74 73 69 64 65 3a 0a 58 |m the ou|tside:.X|
|00002720| 20 20 6f 70 65 6e 20 66 | 69 6c 65 20 64 65 73 63 | open f|ile desc|
|00002730| 72 69 70 74 6f 72 20 73 | 74 61 74 65 20 28 66 63 |riptor s|tate (fc|
|00002740| 6e 74 6c 2c 20 69 6f 63 | 74 6c 2c 20 65 74 63 2e |ntl, ioc|tl, etc.|
|00002750| 29 0a 58 20 20 63 77 64 | 0a 58 20 20 75 6d 61 73 |).X cwd|.X umas|
|00002760| 6b 0a 58 20 20 61 72 67 | 73 2c 20 65 6e 76 69 72 |k.X arg|s, envir|
|00002770| 6f 6e 6d 65 6e 74 20 28 | 64 6f 6e 27 74 20 6b 6e |onment (|don't kn|
|00002780| 6f 77 20 61 62 6f 75 74 | 20 65 6e 76 69 72 6f 6e |ow about| environ|
|00002790| 29 0a 58 0a 58 73 65 63 | 75 72 69 74 79 3a 0a 58 |).X.Xsec|urity:.X|
|000027a0| 20 20 70 69 64 0a 58 20 | 20 70 70 69 64 0a 58 20 | pid.X | ppid.X |
|000027b0| 20 70 67 69 64 0a 58 20 | 20 75 69 64 2c 20 65 75 | pgid.X | uid, eu|
|000027c0| 69 64 0a 58 20 20 67 69 | 64 2c 20 65 67 69 64 0a |id.X gi|d, egid.|
|000027d0| 58 20 20 61 63 63 65 73 | 73 20 67 72 6f 75 70 73 |X acces|s groups|
|000027e0| 0a 58 20 20 72 6f 6f 74 | 20 64 69 72 0a 58 0a 58 |.X root| dir.X.X|
|000027f0| 74 6f 6f 20 73 79 73 74 | 65 6d 20 64 65 70 65 6e |too syst|em depen|
|00002800| 64 65 6e 74 3a 0a 58 20 | 20 73 68 6d 0a 58 20 20 |dent:.X | shm.X |
|00002810| 73 65 6d 0a 58 20 20 73 | 69 67 6e 61 6c 20 73 74 |sem.X s|ignal st|
|00002820| 61 63 6b 0a 58 20 20 73 | 69 67 6e 61 6c 20 6d 61 |ack.X s|ignal ma|
|00002830| 73 6b 0a 58 20 20 74 72 | 61 63 65 20 66 6c 61 67 |sk.X tr|ace flag|
|00002840| 0a 58 20 20 63 74 74 79 | 0a 58 20 20 69 6e 74 65 |.X ctty|.X inte|
|00002850| 72 76 61 6c 20 74 69 6d | 65 72 73 0a 58 20 20 72 |rval tim|ers.X r|
|00002860| 65 73 6f 75 72 63 65 20 | 6c 69 6d 69 74 73 0a 58 |esource |limits.X|
|00002870| 0a 58 73 69 6d 70 6c 79 | 20 63 61 6e 27 74 20 62 |.Xsimply| can't b|
|00002880| 65 20 72 65 73 74 6f 72 | 65 64 3a 0a 58 20 20 72 |e restor|ed:.X r|
|00002890| 75 73 61 67 65 0a 58 20 | 20 70 72 6f 66 69 6c 0a |usage.X | profil.|
|000028a0| 45 4e 44 5f 4f 46 5f 46 | 49 4c 45 0a 69 66 20 74 |END_OF_F|ILE.if t|
|000028b0| 65 73 74 20 35 31 37 20 | 2d 6e 65 20 60 77 63 20 |est 517 |-ne `wc |
|000028c0| 2d 63 20 3c 27 55 41 52 | 45 41 27 60 3b 20 74 68 |-c <'UAR|EA'`; th|
|000028d0| 65 6e 0a 20 20 20 20 65 | 63 68 6f 20 73 68 61 72 |en. e|cho shar|
|000028e0| 3a 20 5c 22 27 55 41 52 | 45 41 27 5c 22 20 75 6e |: \"'UAR|EA'\" un|
|000028f0| 70 61 63 6b 65 64 20 77 | 69 74 68 20 77 72 6f 6e |packed w|ith wron|
|00002900| 67 20 73 69 7a 65 21 0a | 66 69 0a 23 20 65 6e 64 |g size!.|fi.# end|
|00002910| 20 6f 66 20 27 55 41 52 | 45 41 27 0a 66 69 0a 69 | of 'UAR|EA'.fi.i|
|00002920| 66 20 74 65 73 74 20 2d | 66 20 27 61 72 67 76 30 |f test -|f 'argv0|
|00002930| 2e 63 27 20 2d 61 20 22 | 24 7b 31 7d 22 20 21 3d |.c' -a "|${1}" !=|
|00002940| 20 22 2d 63 22 20 3b 20 | 74 68 65 6e 20 0a 20 20 | "-c" ; |then . |
|00002950| 65 63 68 6f 20 73 68 61 | 72 3a 20 57 69 6c 6c 20 |echo sha|r: Will |
|00002960| 6e 6f 74 20 63 6c 6f 62 | 62 65 72 20 65 78 69 73 |not clob|ber exis|
|00002970| 74 69 6e 67 20 66 69 6c | 65 20 5c 22 27 61 72 67 |ting fil|e \"'arg|
|00002980| 76 30 2e 63 27 5c 22 0a | 65 6c 73 65 0a 65 63 68 |v0.c'\".|else.ech|
|00002990| 6f 20 73 68 61 72 3a 20 | 45 78 74 72 61 63 74 69 |o shar: |Extracti|
|000029a0| 6e 67 20 5c 22 27 61 72 | 67 76 30 2e 63 27 5c 22 |ng \"'ar|gv0.c'\"|
|000029b0| 20 5c 28 32 33 33 20 63 | 68 61 72 61 63 74 65 72 | \(233 c|haracter|
|000029c0| 73 5c 29 0a 73 65 64 20 | 22 73 2f 5e 58 2f 2f 22 |s\).sed |"s/^X//"|
|000029d0| 20 3e 27 61 72 67 76 30 | 2e 63 27 20 3c 3c 27 45 | >'argv0|.c' <<'E|
|000029e0| 4e 44 5f 4f 46 5f 46 49 | 4c 45 27 0a 58 23 69 6e |ND_OF_FI|LE'.X#in|
|000029f0| 63 6c 75 64 65 20 3c 73 | 74 64 69 6f 2e 68 3e 0a |clude <s|tdio.h>.|
|00002a00| 58 0a 58 6d 61 69 6e 28 | 61 72 67 63 2c 61 72 67 |X.Xmain(|argc,arg|
|00002a10| 76 29 0a 58 69 6e 74 20 | 61 72 67 63 3b 0a 58 63 |v).Xint |argc;.Xc|
|00002a20| 68 61 72 20 2a 61 72 67 | 76 5b 5d 3b 0a 58 7b 0a |har *arg|v[];.X{.|
|00002a30| 58 20 69 66 20 28 61 72 | 67 63 20 3c 20 33 29 0a |X if (ar|gc < 3).|
|00002a40| 58 20 20 7b 20 66 70 75 | 74 73 28 22 55 73 61 67 |X { fpu|ts("Usag|
|00002a50| 65 3a 20 61 72 67 76 30 | 20 72 65 61 6c 6e 61 6d |e: argv0| realnam|
|00002a60| 65 20 70 72 6f 67 72 61 | 6d 20 5b 20 61 72 67 20 |e progra|m [ arg |
|00002a70| 2e 2e 2e 20 5d 5c 6e 22 | 2c 73 74 64 65 72 72 29 |... ]\n"|,stderr)|
|00002a80| 3b 20 65 78 69 74 28 31 | 29 3b 20 7d 0a 58 20 65 |; exit(1|); }.X e|
|00002a90| 78 65 63 76 70 28 61 72 | 67 76 5b 31 5d 2c 61 72 |xecvp(ar|gv[1],ar|
|00002aa0| 67 76 20 2b 20 32 29 3b | 0a 58 20 70 65 72 72 6f |gv + 2);|.X perro|
|00002ab0| 72 28 22 61 72 67 76 30 | 3a 20 66 61 74 61 6c 3a |r("argv0|: fatal:|
|00002ac0| 20 63 61 6e 6e 6f 74 20 | 65 78 65 63 75 74 65 22 | cannot |execute"|
|00002ad0| 29 3b 0a 58 20 65 78 69 | 74 28 34 29 3b 0a 58 7d |);.X exi|t(4);.X}|
|00002ae0| 0a 45 4e 44 5f 4f 46 5f | 46 49 4c 45 0a 69 66 20 |.END_OF_|FILE.if |
|00002af0| 74 65 73 74 20 32 33 33 | 20 2d 6e 65 20 60 77 63 |test 233| -ne `wc|
|00002b00| 20 2d 63 20 3c 27 61 72 | 67 76 30 2e 63 27 60 3b | -c <'ar|gv0.c'`;|
|00002b10| 20 74 68 65 6e 0a 20 20 | 20 20 65 63 68 6f 20 73 | then. | echo s|
|00002b20| 68 61 72 3a 20 5c 22 27 | 61 72 67 76 30 2e 63 27 |har: \"'|argv0.c'|
|00002b30| 5c 22 20 75 6e 70 61 63 | 6b 65 64 20 77 69 74 68 |\" unpac|ked with|
|00002b40| 20 77 72 6f 6e 67 20 73 | 69 7a 65 21 0a 66 69 0a | wrong s|ize!.fi.|
|00002b50| 23 20 65 6e 64 20 6f 66 | 20 27 61 72 67 76 30 2e |# end of| 'argv0.|
|00002b60| 63 27 0a 66 69 0a 69 66 | 20 74 65 73 74 20 2d 66 |c'.fi.if| test -f|
|00002b70| 20 27 63 68 65 63 6b 70 | 6f 69 6e 74 27 20 2d 61 | 'checkp|oint' -a|
|00002b80| 20 22 24 7b 31 7d 22 20 | 21 3d 20 22 2d 63 22 20 | "${1}" |!= "-c" |
|00002b90| 3b 20 74 68 65 6e 20 0a | 20 20 65 63 68 6f 20 73 |; then .| echo s|
|00002ba0| 68 61 72 3a 20 57 69 6c | 6c 20 6e 6f 74 20 63 6c |har: Wil|l not cl|
|00002bb0| 6f 62 62 65 72 20 65 78 | 69 73 74 69 6e 67 20 66 |obber ex|isting f|
|00002bc0| 69 6c 65 20 5c 22 27 63 | 68 65 63 6b 70 6f 69 6e |ile \"'c|heckpoin|
|00002bd0| 74 27 5c 22 0a 65 6c 73 | 65 0a 65 63 68 6f 20 73 |t'\".els|e.echo s|
|00002be0| 68 61 72 3a 20 45 78 74 | 72 61 63 74 69 6e 67 20 |har: Ext|racting |
|00002bf0| 5c 22 27 63 68 65 63 6b | 70 6f 69 6e 74 27 5c 22 |\"'check|point'\"|
|00002c00| 20 5c 28 35 37 20 63 68 | 61 72 61 63 74 65 72 73 | \(57 ch|aracters|
|00002c10| 5c 29 0a 73 65 64 20 22 | 73 2f 5e 58 2f 2f 22 20 |\).sed "|s/^X//" |
|00002c20| 3e 27 63 68 65 63 6b 70 | 6f 69 6e 74 27 20 3c 3c |>'checkp|oint' <<|
|00002c30| 27 45 4e 44 5f 4f 46 5f | 46 49 4c 45 27 0a 58 23 |'END_OF_|FILE'.X#|
|00002c40| 21 2f 62 69 6e 2f 73 68 | 0a 58 69 3d 22 24 31 22 |!/bin/sh|.Xi="$1"|
|00002c50| 0a 58 73 68 69 66 74 20 | 31 0a 58 65 78 65 63 20 |.Xshift |1.Xexec |
|00002c60| 61 72 67 76 30 20 22 24 | 69 22 20 43 48 45 43 4b |argv0 "$|i" CHECK|
|00002c70| 50 4f 49 4e 54 20 22 24 | 40 22 0a 45 4e 44 5f 4f |POINT "$|@".END_O|
|00002c80| 46 5f 46 49 4c 45 0a 69 | 66 20 74 65 73 74 20 35 |F_FILE.i|f test 5|
|00002c90| 37 20 2d 6e 65 20 60 77 | 63 20 2d 63 20 3c 27 63 |7 -ne `w|c -c <'c|
|00002ca0| 68 65 63 6b 70 6f 69 6e | 74 27 60 3b 20 74 68 65 |heckpoin|t'`; the|
|00002cb0| 6e 0a 20 20 20 20 65 63 | 68 6f 20 73 68 61 72 3a |n. ec|ho shar:|
|00002cc0| 20 5c 22 27 63 68 65 63 | 6b 70 6f 69 6e 74 27 5c | \"'chec|kpoint'\|
|00002cd0| 22 20 75 6e 70 61 63 6b | 65 64 20 77 69 74 68 20 |" unpack|ed with |
|00002ce0| 77 72 6f 6e 67 20 73 69 | 7a 65 21 0a 66 69 0a 63 |wrong si|ze!.fi.c|
|00002cf0| 68 6d 6f 64 20 2b 78 20 | 27 63 68 65 63 6b 70 6f |hmod +x |'checkpo|
|00002d00| 69 6e 74 27 0a 23 20 65 | 6e 64 20 6f 66 20 27 63 |int'.# e|nd of 'c|
|00002d10| 68 65 63 6b 70 6f 69 6e | 74 27 0a 66 69 0a 69 66 |heckpoin|t'.fi.if|
|00002d20| 20 74 65 73 74 20 2d 66 | 20 27 63 6b 70 74 63 76 | test -f| 'ckptcv|
|00002d30| 74 27 20 2d 61 20 22 24 | 7b 31 7d 22 20 21 3d 20 |t' -a "$|{1}" != |
|00002d40| 22 2d 63 22 20 3b 20 74 | 68 65 6e 20 0a 20 20 65 |"-c" ; t|hen . e|
|00002d50| 63 68 6f 20 73 68 61 72 | 3a 20 57 69 6c 6c 20 6e |cho shar|: Will n|
|00002d60| 6f 74 20 63 6c 6f 62 62 | 65 72 20 65 78 69 73 74 |ot clobb|er exist|
|00002d70| 69 6e 67 20 66 69 6c 65 | 20 5c 22 27 63 6b 70 74 |ing file| \"'ckpt|
|00002d80| 63 76 74 27 5c 22 0a 65 | 6c 73 65 0a 65 63 68 6f |cvt'\".e|lse.echo|
|00002d90| 20 73 68 61 72 3a 20 45 | 78 74 72 61 63 74 69 6e | shar: E|xtractin|
|00002da0| 67 20 5c 22 27 63 6b 70 | 74 63 76 74 27 5c 22 20 |g \"'ckp|tcvt'\" |
|00002db0| 5c 28 36 38 39 20 63 68 | 61 72 61 63 74 65 72 73 |\(689 ch|aracters|
|00002dc0| 5c 29 0a 73 65 64 20 22 | 73 2f 5e 58 2f 2f 22 20 |\).sed "|s/^X//" |
|00002dd0| 3e 27 63 6b 70 74 63 76 | 74 27 20 3c 3c 27 45 4e |>'ckptcv|t' <<'EN|
|00002de0| 44 5f 4f 46 5f 46 49 4c | 45 27 0a 58 23 21 2f 62 |D_OF_FIL|E'.X#!/b|
|00002df0| 69 6e 2f 73 68 0a 58 61 | 77 6b 20 27 7b 0a 58 20 |in/sh.Xa|wk '{.X |
|00002e00| 20 69 66 20 28 24 31 20 | 3d 3d 20 22 43 4b 50 54 | if ($1 |== "CKPT|
|00002e10| 22 29 0a 58 20 20 20 7b | 0a 58 20 20 20 20 69 66 |").X {|.X if|
|00002e20| 20 28 24 32 20 3d 3d 20 | 22 56 41 52 53 22 29 0a | ($2 == |"VARS").|
|00002e30| 58 20 20 20 20 20 7b 20 | 70 72 69 6e 74 20 22 20 |X { |print " |
|00002e40| 43 4b 50 54 5f 56 41 52 | 31 22 3b 0a 58 20 20 20 |CKPT_VAR|1";.X |
|00002e50| 20 20 20 20 70 72 69 6e | 74 20 22 23 75 6e 64 65 | prin|t "#unde|
|00002e60| 66 20 43 4b 50 54 5f 48 | 45 41 44 22 3b 0a 58 20 |f CKPT_H|EAD";.X |
|00002e70| 20 20 20 20 20 20 70 72 | 69 6e 74 20 22 23 64 65 | pr|int "#de|
|00002e80| 66 69 6e 65 20 43 4b 50 | 54 5f 48 45 41 44 20 43 |fine CKP|T_HEAD C|
|00002e90| 4b 50 54 5f 68 65 61 64 | 22 3b 0a 58 20 20 20 20 |KPT_head|";.X |
|00002ea0| 20 20 20 70 72 69 6e 74 | 20 22 20 43 4b 50 54 5f | print| " CKPT_|
|00002eb0| 56 41 52 34 22 3b 20 7d | 0a 58 20 20 20 20 65 6c |VAR4"; }|.X el|
|00002ec0| 73 65 20 69 66 20 28 24 | 32 20 3d 3d 20 22 54 4f |se if ($|2 == "TO|
|00002ed0| 50 53 22 29 0a 58 20 20 | 20 20 20 7b 20 70 72 69 |PS").X | { pri|
|00002ee0| 6e 74 20 22 20 43 4b 50 | 54 5f 54 4f 50 31 22 3b |nt " CKP|T_TOP1";|
|00002ef0| 0a 58 20 20 20 20 20 20 | 20 70 72 69 6e 74 20 22 |.X | print "|
|00002f00| 23 75 6e 64 65 66 20 43 | 4b 50 54 5f 53 50 4f 54 |#undef C|KPT_SPOT|
|00002f10| 22 3b 0a 58 20 20 20 20 | 20 20 20 70 72 69 6e 74 |";.X | print|
|00002f20| 20 22 23 64 65 66 69 6e | 65 20 43 4b 50 54 5f 53 | "#defin|e CKPT_S|
|00002f30| 50 4f 54 20 43 4b 50 54 | 5f 73 70 6f 74 22 3b 0a |POT CKPT|_spot";.|
|00002f40| 58 20 20 20 20 20 20 20 | 70 72 69 6e 74 20 22 20 |X |print " |
|00002f50| 43 4b 50 54 5f 54 4f 50 | 34 22 20 7d 0a 58 20 20 |CKPT_TOP|4" }.X |
|00002f60| 20 20 65 6c 73 65 20 69 | 66 20 28 24 32 20 3d 3d | else i|f ($2 ==|
|00002f70| 20 22 50 4f 49 4e 54 22 | 29 0a 58 20 20 20 20 20 | "POINT"|).X |
|00002f80| 7b 20 70 72 69 6e 74 20 | 22 20 43 4b 50 54 5f 31 |{ print |" CKPT_1|
|00002f90| 28 22 24 33 22 29 22 3b | 0a 58 20 20 20 20 20 20 |("$3")";|.X |
|00002fa0| 20 70 72 69 6e 74 20 22 | 23 75 6e 64 65 66 20 43 | print "|#undef C|
|00002fb0| 4b 50 54 5f 48 45 41 44 | 22 3b 0a 58 20 20 20 20 |KPT_HEAD|";.X |
|00002fc0| 20 20 20 70 72 69 6e 74 | 20 22 23 64 65 66 69 6e | print| "#defin|
|00002fd0| 65 20 43 4b 50 54 5f 48 | 45 41 44 20 22 24 33 3b |e CKPT_H|EAD "$3;|
|00002fe0| 0a 58 20 20 20 20 20 20 | 20 70 72 69 6e 74 20 22 |.X | print "|
|00002ff0| 20 43 4b 50 54 5f 34 28 | 22 24 34 22 29 22 3b 0a | CKPT_4(|"$4")";.|
|00003000| 58 20 20 20 20 20 20 20 | 70 72 69 6e 74 20 22 23 |X |print "#|
|00003010| 75 6e 64 65 66 20 43 4b | 50 54 5f 53 50 4f 54 22 |undef CK|PT_SPOT"|
|00003020| 3b 0a 58 20 20 20 20 20 | 20 20 70 72 69 6e 74 20 |;.X | print |
|00003030| 22 23 64 65 66 69 6e 65 | 20 43 4b 50 54 5f 53 50 |"#define| CKPT_SP|
|00003040| 4f 54 20 22 24 34 3b 0a | 58 20 20 20 20 20 20 20 |OT "$4;.|X |
|00003050| 70 72 69 6e 74 20 22 20 | 43 4b 50 54 5f 37 22 20 |print " |CKPT_7" |
|00003060| 7d 0a 58 20 20 20 20 65 | 6c 73 65 20 69 66 20 28 |}.X e|lse if (|
|00003070| 24 32 20 3d 3d 20 22 42 | 4f 54 53 22 29 0a 58 20 |$2 == "B|OTS").X |
|00003080| 20 20 20 20 7b 20 70 72 | 69 6e 74 20 22 20 43 4b | { pr|int " CK|
|00003090| 50 54 5f 42 4f 54 31 22 | 20 7d 0a 58 20 20 20 7d |PT_BOT1"| }.X }|
|000030a0| 0a 58 20 20 65 6c 73 65 | 0a 58 20 20 20 20 70 72 |.X else|.X pr|
|000030b0| 69 6e 74 0a 58 7d 27 0a | 45 4e 44 5f 4f 46 5f 46 |int.X}'.|END_OF_F|
|000030c0| 49 4c 45 0a 69 66 20 74 | 65 73 74 20 36 38 39 20 |ILE.if t|est 689 |
|000030d0| 2d 6e 65 20 60 77 63 20 | 2d 63 20 3c 27 63 6b 70 |-ne `wc |-c <'ckp|
|000030e0| 74 63 76 74 27 60 3b 20 | 74 68 65 6e 0a 20 20 20 |tcvt'`; |then. |
|000030f0| 20 65 63 68 6f 20 73 68 | 61 72 3a 20 5c 22 27 63 | echo sh|ar: \"'c|
|00003100| 6b 70 74 63 76 74 27 5c | 22 20 75 6e 70 61 63 6b |kptcvt'\|" unpack|
|00003110| 65 64 20 77 69 74 68 20 | 77 72 6f 6e 67 20 73 69 |ed with |wrong si|
|00003120| 7a 65 21 0a 66 69 0a 63 | 68 6d 6f 64 20 2b 78 20 |ze!.fi.c|hmod +x |
|00003130| 27 63 6b 70 74 63 76 74 | 27 0a 23 20 65 6e 64 20 |'ckptcvt|'.# end |
|00003140| 6f 66 20 27 63 6b 70 74 | 63 76 74 27 0a 66 69 0a |of 'ckpt|cvt'.fi.|
|00003150| 69 66 20 74 65 73 74 20 | 2d 66 20 27 70 6d 63 65 |if test |-f 'pmce|
|00003160| 6f 74 2e 63 27 20 2d 61 | 20 22 24 7b 31 7d 22 20 |ot.c' -a| "${1}" |
|00003170| 21 3d 20 22 2d 63 22 20 | 3b 20 74 68 65 6e 20 0a |!= "-c" |; then .|
|00003180| 20 20 65 63 68 6f 20 73 | 68 61 72 3a 20 57 69 6c | echo s|har: Wil|
|00003190| 6c 20 6e 6f 74 20 63 6c | 6f 62 62 65 72 20 65 78 |l not cl|obber ex|
|000031a0| 69 73 74 69 6e 67 20 66 | 69 6c 65 20 5c 22 27 70 |isting f|ile \"'p|
|000031b0| 6d 63 65 6f 74 2e 63 27 | 5c 22 0a 65 6c 73 65 0a |mceot.c'|\".else.|
|000031c0| 65 63 68 6f 20 73 68 61 | 72 3a 20 45 78 74 72 61 |echo sha|r: Extra|
|000031d0| 63 74 69 6e 67 20 5c 22 | 27 70 6d 63 65 6f 74 2e |cting \"|'pmceot.|
|000031e0| 63 27 5c 22 20 5c 28 31 | 31 32 20 63 68 61 72 61 |c'\" \(1|12 chara|
|000031f0| 63 74 65 72 73 5c 29 0a | 73 65 64 20 22 73 2f 5e |cters\).|sed "s/^|
|00003200| 58 2f 2f 22 20 3e 27 70 | 6d 63 65 6f 74 2e 63 27 |X//" >'p|mceot.c'|
|00003210| 20 3c 3c 27 45 4e 44 5f | 4f 46 5f 46 49 4c 45 27 | <<'END_|OF_FILE'|
|00003220| 0a 58 23 69 6e 63 6c 75 | 64 65 20 22 70 6d 63 6b |.X#inclu|de "pmck|
|00003230| 70 74 2e 68 22 0a 58 0a | 58 73 74 61 74 69 63 20 |pt.h".X.|Xstatic |
|00003240| 63 68 61 72 20 63 6b 70 | 74 5f 65 6f 74 3b 20 2f |char ckp|t_eot; /|
|00003250| 2a 20 75 6e 69 6e 69 74 | 69 61 6c 69 7a 65 64 20 |* uninit|ialized |
|00003260| 2a 2f 0a 58 0a 58 76 6f | 69 64 20 63 6b 70 74 5f |*/.X.Xvo|id ckpt_|
|00003270| 73 65 74 28 73 29 0a 58 | 63 68 61 72 20 2a 2a 73 |set(s).X|char **s|
|00003280| 3b 0a 58 7b 0a 58 20 2a | 73 20 3d 20 26 63 6b 70 |;.X{.X *|s = &ckp|
|00003290| 74 5f 65 6f 74 3b 0a 58 | 7d 0a 45 4e 44 5f 4f 46 |t_eot;.X|}.END_OF|
|000032a0| 5f 46 49 4c 45 0a 69 66 | 20 74 65 73 74 20 31 31 |_FILE.if| test 11|
|000032b0| 32 20 2d 6e 65 20 60 77 | 63 20 2d 63 20 3c 27 70 |2 -ne `w|c -c <'p|
|000032c0| 6d 63 65 6f 74 2e 63 27 | 60 3b 20 74 68 65 6e 0a |mceot.c'|`; then.|
|000032d0| 20 20 20 20 65 63 68 6f | 20 73 68 61 72 3a 20 5c | echo| shar: \|
|000032e0| 22 27 70 6d 63 65 6f 74 | 2e 63 27 5c 22 20 75 6e |"'pmceot|.c'\" un|
|000032f0| 70 61 63 6b 65 64 20 77 | 69 74 68 20 77 72 6f 6e |packed w|ith wron|
|00003300| 67 20 73 69 7a 65 21 0a | 66 69 0a 23 20 65 6e 64 |g size!.|fi.# end|
|00003310| 20 6f 66 20 27 70 6d 63 | 65 6f 74 2e 63 27 0a 66 | of 'pmc|eot.c'.f|
|00003320| 69 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 70 6d |i.if tes|t -f 'pm|
|00003330| 63 6b 70 74 2e 63 27 20 | 2d 61 20 22 24 7b 31 7d |ckpt.c' |-a "${1}|
|00003340| 22 20 21 3d 20 22 2d 63 | 22 20 3b 20 74 68 65 6e |" != "-c|" ; then|
|00003350| 20 0a 20 20 65 63 68 6f | 20 73 68 61 72 3a 20 57 | . echo| shar: W|
|00003360| 69 6c 6c 20 6e 6f 74 20 | 63 6c 6f 62 62 65 72 20 |ill not |clobber |
|00003370| 65 78 69 73 74 69 6e 67 | 20 66 69 6c 65 20 5c 22 |existing| file \"|
|00003380| 27 70 6d 63 6b 70 74 2e | 63 27 5c 22 0a 65 6c 73 |'pmckpt.|c'\".els|
|00003390| 65 0a 65 63 68 6f 20 73 | 68 61 72 3a 20 45 78 74 |e.echo s|har: Ext|
|000033a0| 72 61 63 74 69 6e 67 20 | 5c 22 27 70 6d 63 6b 70 |racting |\"'pmckp|
|000033b0| 74 2e 63 27 5c 22 20 5c | 28 34 37 39 38 20 63 68 |t.c'\" \|(4798 ch|
|000033c0| 61 72 61 63 74 65 72 73 | 5c 29 0a 73 65 64 20 22 |aracters|\).sed "|
|000033d0| 73 2f 5e 58 2f 2f 22 20 | 3e 27 70 6d 63 6b 70 74 |s/^X//" |>'pmckpt|
|000033e0| 2e 63 27 20 3c 3c 27 45 | 4e 44 5f 4f 46 5f 46 49 |.c' <<'E|ND_OF_FI|
|000033f0| 4c 45 27 0a 58 23 69 6e | 63 6c 75 64 65 20 3c 73 |LE'.X#in|clude <s|
|00003400| 79 73 2f 74 79 70 65 73 | 2e 68 3e 0a 58 23 69 6e |ys/types|.h>.X#in|
|00003410| 63 6c 75 64 65 20 3c 73 | 79 73 2f 66 69 6c 65 2e |clude <s|ys/file.|
|00003420| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 79 |h>.X#inc|lude <sy|
|00003430| 73 2f 70 61 72 61 6d 2e | 68 3e 0a 58 23 69 6e 63 |s/param.|h>.X#inc|
|00003440| 6c 75 64 65 20 3c 73 69 | 67 6e 61 6c 2e 68 3e 0a |lude <si|gnal.h>.|
|00003450| 58 23 69 6e 63 6c 75 64 | 65 20 22 70 6d 63 6b 70 |X#includ|e "pmckp|
|00003460| 74 2e 68 22 0a 58 23 75 | 6e 64 65 66 20 6d 61 69 |t.h".X#u|ndef mai|
|00003470| 6e 0a 58 0a 58 65 78 74 | 65 72 6e 20 63 68 61 72 |n.X.Xext|ern char|
|00003480| 20 2a 67 65 74 65 6e 76 | 28 29 3b 0a 58 65 78 74 | *getenv|();.Xext|
|00003490| 65 72 6e 20 63 68 61 72 | 20 2a 73 62 72 6b 28 29 |ern char| *sbrk()|
|000034a0| 3b 0a 58 65 78 74 65 72 | 6e 20 63 6b 70 74 5f 6d |;.Xexter|n ckpt_m|
|000034b0| 61 69 6e 28 29 3b 0a 58 | 65 78 74 65 72 6e 20 6c |ain();.X|extern l|
|000034c0| 6f 6e 67 20 74 65 6c 6c | 28 29 3b 0a 58 65 78 74 |ong tell|();.Xext|
|000034d0| 65 72 6e 20 6c 6f 6e 67 | 20 6c 73 65 65 6b 28 29 |ern long| lseek()|
|000034e0| 3b 0a 58 65 78 74 65 72 | 6e 20 69 6e 74 20 62 72 |;.Xexter|n int br|
|000034f0| 6b 28 29 3b 0a 58 0a 58 | 23 64 65 66 69 6e 65 20 |k();.X.X|#define |
|00003500| 4e 55 4d 46 44 53 20 4e | 4f 46 49 4c 45 20 2f 2a |NUMFDS N|OFILE /*|
|00003510| 20 70 6f 72 74 61 62 6c | 65 20 2a 2f 0a 58 23 64 | portabl|e */.X#d|
|00003520| 65 66 69 6e 65 20 4e 55 | 4d 53 49 47 53 20 33 32 |efine NU|MSIGS 32|
|00003530| 20 2f 2a 20 58 58 58 20 | 2a 2f 0a 58 23 64 65 66 | /* XXX |*/.X#def|
|00003540| 69 6e 65 20 53 49 47 52 | 45 54 20 76 6f 69 64 0a |ine SIGR|ET void.|
|00003550| 58 0a 58 2f 2a 20 58 58 | 58 3a 20 74 20 66 6f 72 |X.X/* XX|X: t for|
|00003560| 20 74 65 78 74 20 77 61 | 73 20 61 6e 20 6f 72 69 | text wa|s an ori|
|00003570| 67 69 6e 61 6c 20 6d 69 | 73 6e 6f 6d 65 72 2e 20 |ginal mi|snomer. |
|00003580| 53 68 6f 75 6c 64 20 68 | 61 76 65 20 62 65 65 6e |Should h|ave been|
|00003590| 20 64 20 66 6f 72 20 64 | 61 74 61 2e 20 2a 2f 0a | d for d|ata. */.|
|000035a0| 58 2f 2a 20 58 58 58 3a | 20 44 6f 6e 27 74 20 6e |X/* XXX:| Don't n|
|000035b0| 65 65 64 20 74 68 65 20 | 65 6e 64 20 6f 66 20 73 |eed the |end of s|
|000035c0| 74 61 63 6b 20 70 6f 69 | 6e 74 65 72 2e 20 2a 2f |tack poi|nter. */|
|000035d0| 0a 58 2f 2a 20 58 58 58 | 3a 20 4e 65 65 64 20 42 |.X/* XXX|: Need B|
|000035e0| 53 44 20 74 69 6d 65 72 | 20 72 6f 75 74 69 6e 65 |SD timer| routine|
|000035f0| 73 20 74 6f 20 73 69 67 | 6e 61 6c 20 74 68 72 6f |s to sig|nal thro|
|00003600| 75 67 68 20 63 6b 70 74 | 5f 70 6f 69 6e 74 2e 20 |ugh ckpt|_point. |
|00003610| 2a 2f 0a 58 0a 58 2f 2a | 20 58 58 58 3a 20 4d 75 |*/.X.X/*| XXX: Mu|
|00003620| 73 74 20 69 6e 69 74 69 | 61 6c 69 7a 65 20 61 6c |st initi|alize al|
|00003630| 6c 20 74 68 65 73 65 20 | 76 61 72 69 61 62 6c 65 |l these |variable|
|00003640| 73 2e 20 57 65 20 61 73 | 73 75 6d 65 20 74 68 61 |s. We as|sume tha|
|00003650| 74 20 74 68 65 20 6c 6f | 61 64 65 72 20 2a 2f 0a |t the lo|ader */.|
|00003660| 58 2f 2a 20 70 75 74 73 | 20 73 79 6d 62 6f 6c 73 |X/* puts| symbols|
|00003670| 20 69 6e 20 6f 72 64 65 | 72 2c 20 77 69 74 68 20 | in orde|r, with |
|00003680| 69 6e 69 74 69 61 6c 69 | 7a 65 64 20 64 61 74 61 |initiali|zed data|
|00003690| 20 62 65 66 6f 72 65 20 | 75 6e 69 6e 69 74 69 61 | before |uninitia|
|000036a0| 6c 69 7a 65 64 20 64 61 | 74 61 2e 20 2a 2f 0a 58 |lized da|ta. */.X|
|000036b0| 0a 58 73 74 61 74 69 63 | 20 69 6e 74 20 66 64 20 |.Xstatic| int fd |
|000036c0| 3d 20 2d 31 3b 20 2f 2a | 20 6d 75 73 74 20 62 65 |= -1; /*| must be|
|000036d0| 20 62 65 66 6f 72 65 20 | 73 6f 74 20 2a 2f 0a 58 | before |sot */.X|
|000036e0| 73 74 61 74 69 63 20 6c | 6f 6e 67 20 63 6b 70 74 |static l|ong ckpt|
|000036f0| 5f 64 69 73 6b 62 61 73 | 65 20 3d 20 31 3b 0a 58 |_diskbas|e = 1;.X|
|00003700| 73 74 61 74 69 63 20 63 | 68 61 72 20 2a 63 6b 70 |static c|har *ckp|
|00003710| 74 5f 73 74 61 63 6b 62 | 61 73 65 20 3d 20 22 22 |t_stackb|ase = ""|
|00003720| 3b 0a 58 73 74 61 74 69 | 63 20 63 68 61 72 20 2a |;.Xstati|c char *|
|00003730| 63 6b 70 74 5f 65 6f 74 | 70 74 72 20 3d 20 22 22 |ckpt_eot|ptr = ""|
|00003740| 3b 20 2f 2a 20 65 6e 64 | 20 6f 66 20 74 65 78 74 |; /* end| of text|
|00003750| 20 70 6f 69 6e 74 65 72 | 20 2a 2f 0a 58 73 74 61 | pointer| */.Xsta|
|00003760| 74 69 63 20 63 68 61 72 | 20 2a 63 6b 70 74 5f 73 |tic char| *ckpt_s|
|00003770| 6f 73 70 74 72 20 3d 20 | 22 22 3b 20 2f 2a 20 73 |osptr = |""; /* s|
|00003780| 74 61 72 74 20 6f 66 20 | 73 74 61 63 6b 20 70 6f |tart of |stack po|
|00003790| 69 6e 74 65 72 20 2a 2f | 0a 58 73 74 61 74 69 63 |inter */|.Xstatic|
|000037a0| 20 63 68 61 72 20 2a 63 | 6b 70 74 5f 65 6f 73 70 | char *c|kpt_eosp|
|000037b0| 74 72 20 3d 20 22 22 3b | 20 2f 2a 20 65 6e 64 20 |tr = "";| /* end |
|000037c0| 6f 66 20 73 74 61 63 6b | 20 70 6f 69 6e 74 65 72 |of stack| pointer|
|000037d0| 20 2a 2f 0a 58 73 74 61 | 74 69 63 20 63 68 61 72 | */.Xsta|tic char|
|000037e0| 20 2a 63 6b 70 74 5f 6f | 72 69 67 62 72 6b 20 3d | *ckpt_o|rigbrk =|
|000037f0| 20 22 22 3b 0a 58 73 74 | 61 74 69 63 20 63 68 61 | "";.Xst|atic cha|
|00003800| 72 20 2a 63 6b 70 74 5f | 6e 65 77 62 72 6b 20 3d |r *ckpt_|newbrk =|
|00003810| 20 22 22 3b 0a 58 63 68 | 61 72 20 2a 63 6b 70 74 | "";.Xch|ar *ckpt|
|00003820| 5f 72 65 73 74 6f 72 65 | 20 3d 20 28 63 68 61 72 |_restore| = (char|
|00003830| 20 2a 29 20 30 3b 0a 58 | 69 6e 74 20 63 6b 70 74 | *) 0;.X|int ckpt|
|00003840| 5f 70 6f 69 6e 74 20 3d | 20 2d 31 3b 0a 58 73 74 |_point =| -1;.Xst|
|00003850| 61 74 69 63 20 63 68 61 | 72 20 63 6b 70 74 5f 73 |atic cha|r ckpt_s|
|00003860| 6f 74 20 3d 20 27 78 27 | 3b 20 2f 2a 20 73 74 61 |ot = 'x'|; /* sta|
|00003870| 72 74 20 6f 66 20 74 65 | 78 74 20 2a 2f 0a 58 73 |rt of te|xt */.Xs|
|00003880| 74 61 74 69 63 20 63 68 | 61 72 20 2a 63 6b 70 74 |tatic ch|ar *ckpt|
|00003890| 5f 66 6e 20 3d 20 22 43 | 48 45 43 4b 50 4f 49 4e |_fn = "C|HECKPOIN|
|000038a0| 54 22 3b 20 2f 2a 20 61 | 66 74 65 72 20 73 6f 74 |T"; /* a|fter sot|
|000038b0| 3a 20 73 68 6f 75 6c 64 | 20 62 65 20 72 65 73 74 |: should| be rest|
|000038c0| 6f 72 65 64 20 2a 2f 0a | 58 73 74 61 74 69 63 20 |ored */.|Xstatic |
|000038d0| 63 68 61 72 20 2a 63 6b | 70 74 5f 66 6e 74 65 6d |char *ck|pt_fntem|
|000038e0| 70 20 3d 20 22 43 48 45 | 43 4b 50 4f 49 4e 54 2e |p = "CHE|CKPOINT.|
|000038f0| 54 45 4d 50 22 3b 0a 58 | 0a 58 73 74 61 74 69 63 |TEMP";.X|.Xstatic|
|00003900| 20 73 74 72 75 63 74 20 | 2f 2a 20 72 65 73 74 6f | struct |/* resto|
|00003910| 72 65 64 20 61 75 74 6f | 6d 61 74 69 63 61 6c 6c |red auto|maticall|
|00003920| 79 20 77 69 74 68 20 74 | 68 65 20 72 65 73 74 20 |y with t|he rest |
|00003930| 6f 66 20 74 68 65 20 64 | 61 74 61 20 2a 2f 0a 58 |of the d|ata */.X|
|00003940| 20 7b 0a 58 20 20 2f 2a | 20 57 65 20 73 68 6f 75 | {.X /*| We shou|
|00003950| 6c 64 20 62 75 74 20 64 | 6f 6e 27 74 20 6d 61 6b |ld but d|on't mak|
|00003960| 65 20 61 20 6c 6f 74 20 | 6f 66 20 65 66 66 6f 72 |e a lot |of effor|
|00003970| 74 20 74 6f 20 72 65 73 | 74 6f 72 65 20 75 69 64 |t to res|tore uid|
|00003980| 73 2e 20 2a 2f 0a 58 20 | 20 2f 2a 20 49 74 20 6a |s. */.X | /* It j|
|00003990| 75 73 74 20 77 6f 75 6c | 64 6e 27 74 20 62 65 20 |ust woul|dn't be |
|000039a0| 70 6f 72 74 61 62 6c 65 | 20 62 65 74 77 65 65 6e |portable| between|
|000039b0| 20 42 53 44 20 61 6e 64 | 20 53 79 73 74 65 6d 20 | BSD and| System |
|000039c0| 56 20 69 66 20 77 65 20 | 64 69 64 2e 20 2a 2f 0a |V if we |did. */.|
|000039d0| 58 20 20 69 6e 74 20 75 | 69 64 3b 0a 58 20 20 6c |X int u|id;.X l|
|000039e0| 6f 6e 67 20 66 70 6f 73 | 5b 4e 55 4d 46 44 53 5d |ong fpos|[NUMFDS]|
|000039f0| 3b 0a 58 20 20 53 49 47 | 52 45 54 20 28 2a 68 61 |;.X SIG|RET (*ha|
|00003a00| 6e 64 6c 65 72 5b 4e 55 | 4d 53 49 47 53 5d 29 28 |ndler[NU|MSIGS])(|
|00003a10| 29 3b 0a 58 20 7d 0a 58 | 75 73 74 61 74 65 3b 0a |);.X }.X|ustate;.|
|00003a20| 58 0a 58 73 74 61 74 69 | 63 20 76 6f 69 64 20 67 |X.Xstati|c void g|
|00003a30| 65 74 5f 75 73 74 61 74 | 65 28 29 0a 58 7b 0a 58 |et_ustat|e().X{.X|
|00003a40| 20 69 6e 74 20 69 3b 0a | 58 0a 58 20 75 73 74 61 | int i;.|X.X usta|
|00003a50| 74 65 2e 75 69 64 20 3d | 20 67 65 74 75 69 64 28 |te.uid =| getuid(|
|00003a60| 29 3b 0a 58 20 66 6f 72 | 20 28 69 20 3d 20 30 3b |);.X for| (i = 0;|
|00003a70| 69 20 3c 20 4e 55 4d 46 | 44 53 3b 69 2b 2b 29 0a |i < NUMF|DS;i++).|
|00003a80| 58 20 20 20 75 73 74 61 | 74 65 2e 66 70 6f 73 5b |X usta|te.fpos[|
|00003a90| 69 5d 20 3d 20 74 65 6c | 6c 28 69 29 3b 0a 58 20 |i] = tel|l(i);.X |
|00003aa0| 66 6f 72 20 28 69 20 3d | 20 30 3b 69 20 3c 20 4e |for (i =| 0;i < N|
|00003ab0| 55 4d 53 49 47 53 3b 69 | 2b 2b 29 0a 58 20 20 7b |UMSIGS;i|++).X {|
|00003ac0| 0a 58 20 20 20 2f 2a 20 | 57 65 20 61 73 73 75 6d |.X /* |We assum|
|00003ad0| 65 20 74 68 61 74 20 6e | 6f 20 73 69 67 6e 61 6c |e that n|o signal|
|00003ae0| 20 61 72 72 69 76 65 73 | 20 69 6e 20 74 68 69 73 | arrives| in this|
|00003af0| 20 70 65 72 69 6f 64 2e | 20 54 68 61 74 27 73 20 | period.| That's |
|00003b00| 73 74 75 70 69 64 2e 20 | 2a 2f 0a 58 20 20 20 75 |stupid. |*/.X u|
|00003b10| 73 74 61 74 65 2e 68 61 | 6e 64 6c 65 72 5b 69 5d |state.ha|ndler[i]|
|00003b20| 20 3d 20 73 69 67 6e 61 | 6c 28 69 2c 53 49 47 5f | = signa|l(i,SIG_|
|00003b30| 49 47 4e 29 3b 0a 58 20 | 20 20 28 76 6f 69 64 29 |IGN);.X | (void)|
|00003b40| 20 73 69 67 6e 61 6c 28 | 69 2c 75 73 74 61 74 65 | signal(|i,ustate|
|00003b50| 2e 68 61 6e 64 6c 65 72 | 5b 69 5d 29 3b 0a 58 20 |.handler|[i]);.X |
|00003b60| 20 7d 0a 58 7d 0a 58 0a | 58 73 74 61 74 69 63 20 | }.X}.X.|Xstatic |
|00003b70| 76 6f 69 64 20 73 65 74 | 5f 75 73 74 61 74 65 28 |void set|_ustate(|
|00003b80| 29 0a 58 7b 0a 58 20 69 | 6e 74 20 69 3b 0a 58 0a |).X{.X i|nt i;.X.|
|00003b90| 58 20 28 76 6f 69 64 29 | 20 73 65 74 75 69 64 28 |X (void)| setuid(|
|00003ba0| 75 73 74 61 74 65 2e 75 | 69 64 29 3b 20 2f 2a 58 |ustate.u|id); /*X|
|00003bb0| 58 58 2a 2f 0a 58 20 66 | 6f 72 20 28 69 20 3d 20 |XX*/.X f|or (i = |
|00003bc0| 30 3b 69 20 3c 20 4e 55 | 4d 46 44 53 3b 69 2b 2b |0;i < NU|MFDS;i++|
|00003bd0| 29 0a 58 20 20 20 69 66 | 20 28 75 73 74 61 74 65 |).X if| (ustate|
|00003be0| 2e 66 70 6f 73 5b 69 5d | 20 21 3d 20 2d 31 29 0a |.fpos[i]| != -1).|
|00003bf0| 58 20 20 20 20 20 28 76 | 6f 69 64 29 20 6c 73 65 |X (v|oid) lse|
|00003c00| 65 6b 28 69 2c 75 73 74 | 61 74 65 2e 66 70 6f 73 |ek(i,ust|ate.fpos|
|00003c10| 5b 69 5d 2c 4c 5f 53 45 | 54 29 3b 20 2f 2a 20 58 |[i],L_SE|T); /* X|
|00003c20| 58 58 3a 20 77 68 61 74 | 20 69 66 20 66 61 69 6c |XX: what| if fail|
|00003c30| 73 3f 20 2a 2f 0a 58 20 | 66 6f 72 20 28 69 20 3d |s? */.X |for (i =|
|00003c40| 20 30 3b 69 20 3c 20 4e | 55 4d 53 49 47 53 3b 69 | 0;i < N|UMSIGS;i|
|00003c50| 2b 2b 29 0a 58 20 20 7b | 0a 58 20 20 20 2f 2a 20 |++).X {|.X /* |
|00003c60| 58 58 58 3a 20 72 61 63 | 65 2c 20 72 61 63 65 2c |XXX: rac|e, race,|
|00003c70| 20 67 6c 6f 72 69 6f 75 | 73 20 72 61 63 65 20 2a | gloriou|s race *|
|00003c80| 2f 0a 58 20 20 20 28 76 | 6f 69 64 29 20 73 69 67 |/.X (v|oid) sig|
|00003c90| 6e 61 6c 28 69 2c 75 73 | 74 61 74 65 2e 68 61 6e |nal(i,us|tate.han|
|00003ca0| 64 6c 65 72 5b 69 5d 29 | 3b 0a 58 20 20 7d 0a 58 |dler[i])|;.X }.X|
|00003cb0| 7d 0a 58 0a 58 23 64 65 | 66 69 6e 65 20 68 6f 72 |}.X.X#de|fine hor|
|00003cc0| 72 69 62 6c 79 20 31 0a | 58 0a 58 73 74 61 74 69 |ribly 1.|X.Xstati|
|00003cd0| 63 20 76 6f 69 64 20 64 | 69 65 28 65 29 0a 58 69 |c void d|ie(e).Xi|
|00003ce0| 6e 74 20 65 3b 0a 58 7b | 0a 58 20 65 78 69 74 28 |nt e;.X{|.X exit(|
|00003cf0| 65 29 3b 20 2f 2a 58 58 | 58 2a 2f 0a 58 7d 0a 58 |e); /*XX|X*/.X}.X|
|00003d00| 0a 58 6d 61 69 6e 28 61 | 72 67 63 2c 61 72 67 76 |.Xmain(a|rgc,argv|
|00003d10| 2c 65 6e 76 70 29 0a 58 | 69 6e 74 20 61 72 67 63 |,envp).X|int argc|
|00003d20| 3b 0a 58 63 68 61 72 20 | 2a 61 72 67 76 5b 5d 3b |;.Xchar |*argv[];|
|00003d30| 0a 58 63 68 61 72 20 2a | 65 6e 76 70 5b 5d 3b 0a |.Xchar *|envp[];.|
|00003d40| 58 7b 0a 58 20 63 68 61 | 72 20 63 6b 70 74 5f 73 |X{.X cha|r ckpt_s|
|00003d50| 6f 73 3b 20 2f 2a 20 73 | 74 61 72 74 20 6f 66 20 |os; /* s|tart of |
|00003d60| 73 74 61 63 6b 20 2a 2f | 0a 58 0a 58 20 63 6b 70 |stack */|.X.X ckp|
|00003d70| 74 5f 70 6f 69 6e 74 20 | 3d 20 30 3b 0a 58 20 63 |t_point |= 0;.X c|
|00003d80| 6b 70 74 5f 6f 72 69 67 | 62 72 6b 20 3d 20 73 62 |kpt_orig|brk = sb|
|00003d90| 72 6b 28 30 29 3b 0a 58 | 20 63 6b 70 74 5f 73 6f |rk(0);.X| ckpt_so|
|00003da0| 73 70 74 72 20 3d 20 26 | 63 6b 70 74 5f 73 6f 73 |sptr = &|ckpt_sos|
|00003db0| 3b 0a 58 20 63 6b 70 74 | 5f 73 65 74 28 26 63 6b |;.X ckpt|_set(&ck|
|00003dc0| 70 74 5f 65 6f 74 70 74 | 72 29 3b 0a 58 20 69 66 |pt_eotpt|r);.X if|
|00003dd0| 20 28 21 73 74 72 63 6d | 70 28 61 72 67 76 5b 30 | (!strcm|p(argv[0|
|00003de0| 5d 2c 22 43 48 45 43 4b | 50 4f 49 4e 54 22 29 29 |],"CHECK|POINT"))|
|00003df0| 0a 58 20 20 7b 0a 58 20 | 20 20 69 66 20 28 28 66 |.X {.X | if ((f|
|00003e00| 64 20 3d 20 6f 70 65 6e | 28 61 72 67 76 5b 31 5d |d = open|(argv[1]|
|00003e10| 2c 4f 5f 52 44 4f 4e 4c | 59 29 29 20 3d 3d 20 2d |,O_RDONL|Y)) == -|
|00003e20| 31 29 20 64 69 65 28 68 | 6f 72 72 69 62 6c 79 29 |1) die(h|orribly)|
|00003e30| 3b 0a 58 20 20 20 61 72 | 67 76 20 2b 3d 20 32 3b |;.X ar|gv += 2;|
|00003e40| 0a 58 20 20 20 69 66 20 | 28 72 65 61 64 28 66 64 |.X if |(read(fd|
|00003e50| 2c 26 63 6b 70 74 5f 72 | 65 73 74 6f 72 65 2c 73 |,&ckpt_r|estore,s|
|00003e60| 69 7a 65 6f 66 28 63 6b | 70 74 5f 72 65 73 74 6f |izeof(ck|pt_resto|
|00003e70| 72 65 29 29 20 3d 3d 20 | 2d 31 29 20 64 69 65 28 |re)) == |-1) die(|
|00003e80| 68 6f 72 72 69 62 6c 79 | 29 3b 0a 58 20 20 20 69 |horribly|);.X i|
|00003e90| 66 20 28 72 65 61 64 28 | 66 64 2c 26 63 6b 70 74 |f (read(|fd,&ckpt|
|00003ea0| 5f 65 6f 73 70 74 72 2c | 73 69 7a 65 6f 66 28 63 |_eosptr,|sizeof(c|
|00003eb0| 6b 70 74 5f 65 6f 73 70 | 74 72 29 29 20 3d 3d 20 |kpt_eosp|tr)) == |
|00003ec0| 2d 31 29 20 64 69 65 28 | 68 6f 72 72 69 62 6c 79 |-1) die(|horribly|
|00003ed0| 29 3b 0a 58 20 20 20 69 | 66 20 28 72 65 61 64 28 |);.X i|f (read(|
|00003ee0| 66 64 2c 26 63 6b 70 74 | 5f 6e 65 77 62 72 6b 2c |fd,&ckpt|_newbrk,|
|00003ef0| 73 69 7a 65 6f 66 28 63 | 6b 70 74 5f 6e 65 77 62 |sizeof(c|kpt_newb|
|00003f00| 72 6b 29 29 20 3d 3d 20 | 2d 31 29 20 64 69 65 28 |rk)) == |-1) die(|
|00003f10| 68 6f 72 72 69 62 6c 79 | 29 3b 0a 58 20 20 20 63 |horribly|);.X c|
|00003f20| 6b 70 74 5f 64 61 74 61 | 5f 72 65 73 74 6f 72 65 |kpt_data|_restore|
|00003f30| 28 29 3b 0a 58 20 20 20 | 63 6b 70 74 5f 68 65 61 |();.X |ckpt_hea|
|00003f40| 70 5f 72 65 73 74 6f 72 | 65 28 29 3b 0a 58 20 20 |p_restor|e();.X |
|00003f50| 20 63 6b 70 74 5f 73 74 | 61 63 6b 62 61 73 65 20 | ckpt_st|ackbase |
|00003f60| 3d 20 63 6b 70 74 5f 73 | 6f 73 70 74 72 3b 0a 58 |= ckpt_s|osptr;.X|
|00003f70| 20 20 20 69 66 20 28 63 | 6b 70 74 5f 73 6f 73 70 | if (c|kpt_sosp|
|00003f80| 74 72 20 2d 20 63 6b 70 | 74 5f 65 6f 73 70 74 72 |tr - ckp|t_eosptr|
|00003f90| 20 3e 20 30 29 0a 58 20 | 20 20 20 20 63 6b 70 74 | > 0).X | ckpt|
|00003fa0| 5f 64 69 73 6b 62 61 73 | 65 20 3d 20 6c 73 65 65 |_diskbas|e = lsee|
|00003fb0| 6b 28 66 64 2c 30 4c 2c | 4c 5f 58 54 4e 44 29 3b |k(fd,0L,|L_XTND);|
|00003fc0| 0a 58 20 20 20 65 6c 73 | 65 0a 58 20 20 20 20 20 |.X els|e.X |
|00003fd0| 63 6b 70 74 5f 64 69 73 | 6b 62 61 73 65 20 3d 20 |ckpt_dis|kbase = |
|00003fe0| 74 65 6c 6c 28 66 64 29 | 3b 0a 58 20 20 7d 0a 58 |tell(fd)|;.X }.X|
|00003ff0| 20 72 65 74 75 72 6e 20 | 63 6b 70 74 5f 6d 61 69 | return |ckpt_mai|
|00004000| 6e 28 61 72 67 63 2c 61 | 72 67 76 2c 65 6e 76 70 |n(argc,a|rgv,envp|
|00004010| 29 3b 0a 58 7d 0a 58 0a | 58 76 6f 69 64 20 63 6b |);.X}.X.|Xvoid ck|
|00004020| 70 74 5f 64 61 74 61 5f | 72 65 73 74 6f 72 65 28 |pt_data_|restore(|
|00004030| 29 0a 58 7b 0a 58 20 2f | 2a 20 72 65 61 64 20 69 |).X{.X /|* read i|
|00004040| 6e 20 69 6e 66 6f 72 6d | 61 74 69 6f 6e 20 62 65 |n inform|ation be|
|00004050| 74 77 65 65 6e 20 26 73 | 6f 74 20 61 6e 64 20 65 |tween &s|ot and e|
|00004060| 6f 74 70 74 72 20 2a 2f | 0a 58 20 69 66 20 28 72 |otptr */|.X if (r|
|00004070| 65 61 64 28 66 64 2c 26 | 63 6b 70 74 5f 73 6f 74 |ead(fd,&|ckpt_sot|
|00004080| 2c 63 6b 70 74 5f 65 6f | 74 70 74 72 20 2d 20 26 |,ckpt_eo|tptr - &|
|00004090| 63 6b 70 74 5f 73 6f 74 | 29 20 3d 3d 20 2d 31 29 |ckpt_sot|) == -1)|
|000040a0| 20 64 69 65 28 68 6f 72 | 72 69 62 6c 79 29 3b 0a | die(hor|ribly);.|
|000040b0| 58 7d 0a 58 0a 58 76 6f | 69 64 20 63 6b 70 74 5f |X}.X.Xvo|id ckpt_|
|000040c0| 68 65 61 70 5f 72 65 73 | 74 6f 72 65 28 29 0a 58 |heap_res|tore().X|
|000040d0| 7b 0a 58 20 28 76 6f 69 | 64 29 20 62 72 6b 28 63 |{.X (voi|d) brk(c|
|000040e0| 6b 70 74 5f 6e 65 77 62 | 72 6b 29 3b 0a 58 20 69 |kpt_newb|rk);.X i|
|000040f0| 66 20 28 72 65 61 64 28 | 66 64 2c 63 6b 70 74 5f |f (read(|fd,ckpt_|
|00004100| 6f 72 69 67 62 72 6b 2c | 63 6b 70 74 5f 6e 65 77 |origbrk,|ckpt_new|
|00004110| 62 72 6b 20 2d 20 63 6b | 70 74 5f 6f 72 69 67 62 |brk - ck|pt_origb|
|00004120| 72 6b 29 20 3d 3d 20 2d | 31 29 20 64 69 65 28 68 |rk) == -|1) die(h|
|00004130| 6f 72 72 69 62 6c 79 29 | 3b 0a 58 7d 0a 58 0a 58 |orribly)|;.X}.X.X|
|00004140| 76 6f 69 64 20 63 6b 70 | 74 5f 69 6e 63 72 65 6d |void ckp|t_increm|
|00004150| 65 6e 74 28 6c 65 66 74 | 2c 72 69 67 68 74 29 0a |ent(left|,right).|
|00004160| 58 63 68 61 72 20 2a 6c | 65 66 74 3b 0a 58 63 68 |Xchar *l|eft;.Xch|
|00004170| 61 72 20 2a 72 69 67 68 | 74 3b 0a 58 7b 0a 58 20 |ar *righ|t;.X{.X |
|00004180| 69 66 20 28 72 69 67 68 | 74 20 2d 20 6c 65 66 74 |if (righ|t - left|
|00004190| 20 3e 20 30 29 0a 58 20 | 20 7b 0a 58 20 20 20 69 | > 0).X | {.X i|
|000041a0| 66 20 28 6c 73 65 65 6b | 28 66 64 2c 63 6b 70 74 |f (lseek|(fd,ckpt|
|000041b0| 5f 64 69 73 6b 62 61 73 | 65 20 2b 20 28 6c 65 66 |_diskbas|e + (lef|
|000041c0| 74 20 2d 20 63 6b 70 74 | 5f 73 74 61 63 6b 62 61 |t - ckpt|_stackba|
|000041d0| 73 65 29 2c 4c 5f 53 45 | 54 29 20 3d 3d 20 2d 31 |se),L_SE|T) == -1|
|000041e0| 29 0a 58 20 20 20 20 20 | 64 69 65 28 68 6f 72 72 |).X |die(horr|
|000041f0| 69 62 6c 79 29 3b 0a 58 | 20 20 20 69 66 20 28 72 |ibly);.X| if (r|
|00004200| 65 61 64 28 66 64 2c 6c | 65 66 74 2c 72 69 67 68 |ead(fd,l|eft,righ|
|00004210| 74 20 2d 20 6c 65 66 74 | 29 20 3d 3d 20 2d 31 29 |t - left|) == -1)|
|00004220| 0a 58 20 20 20 20 20 64 | 69 65 28 68 6f 72 72 69 |.X d|ie(horri|
|00004230| 62 6c 79 29 3b 0a 58 20 | 20 7d 0a 58 20 65 6c 73 |bly);.X | }.X els|
|00004240| 65 0a 58 20 20 7b 0a 58 | 20 20 20 2f 2a 20 63 68 |e.X {.X| /* ch|
|00004250| 61 72 61 63 74 65 72 20 | 61 74 20 63 6b 70 74 5f |aracter |at ckpt_|
|00004260| 73 74 61 63 6b 62 61 73 | 65 20 2d 20 78 20 69 73 |stackbas|e - x is|
|00004270| 20 61 74 20 63 6b 70 74 | 5f 64 69 73 6b 62 61 73 | at ckpt|_diskbas|
|00004280| 65 20 2b 20 78 20 2a 2f | 0a 58 20 20 20 69 66 20 |e + x */|.X if |
|00004290| 28 6c 73 65 65 6b 28 66 | 64 2c 63 6b 70 74 5f 64 |(lseek(f|d,ckpt_d|
|000042a0| 69 73 6b 62 61 73 65 20 | 2d 20 28 63 6b 70 74 5f |iskbase |- (ckpt_|
|000042b0| 73 74 61 63 6b 62 61 73 | 65 20 2d 20 72 69 67 68 |stackbas|e - righ|
|000042c0| 74 29 2c 4c 5f 53 45 54 | 29 20 3d 3d 20 2d 31 29 |t),L_SET|) == -1)|
|000042d0| 0a 58 20 20 20 20 20 64 | 69 65 28 68 6f 72 72 69 |.X d|ie(horri|
|000042e0| 62 6c 79 29 3b 0a 58 20 | 20 20 69 66 20 28 72 65 |bly);.X | if (re|
|000042f0| 61 64 28 66 64 2c 72 69 | 67 68 74 2c 6c 65 66 74 |ad(fd,ri|ght,left|
|00004300| 20 2d 20 72 69 67 68 74 | 29 20 3d 3d 20 2d 31 29 | - right|) == -1)|
|00004310| 0a 58 20 20 20 20 20 64 | 69 65 28 68 6f 72 72 69 |.X d|ie(horri|
|00004320| 62 6c 79 29 3b 0a 58 20 | 20 7d 0a 58 7d 0a 58 0a |bly);.X | }.X}.X.|
|00004330| 58 76 6f 69 64 20 63 6b | 70 74 5f 73 74 61 63 6b |Xvoid ck|pt_stack|
|00004340| 5f 72 65 73 74 6f 72 65 | 28 29 0a 58 7b 0a 58 20 |_restore|().X{.X |
|00004350| 2f 2a 20 72 65 61 64 20 | 69 6e 20 61 6e 79 20 66 |/* read |in any f|
|00004360| 69 6e 61 6c 20 69 6e 66 | 6f 72 6d 61 74 69 6f 6e |inal inf|ormation|
|00004370| 20 62 65 74 77 65 65 6e | 20 73 6f 73 70 74 72 20 | between| sosptr |
|00004380| 61 6e 64 20 63 6b 70 74 | 5f 65 6f 73 70 74 72 20 |and ckpt|_eosptr |
|00004390| 2a 2f 0a 58 20 28 76 6f | 69 64 29 20 63 6c 6f 73 |*/.X (vo|id) clos|
|000043a0| 65 28 66 64 29 3b 0a 58 | 20 73 65 74 5f 75 73 74 |e(fd);.X| set_ust|
|000043b0| 61 74 65 28 29 3b 0a 58 | 20 72 65 74 75 72 6e 3b |ate();.X| return;|
|000043c0| 0a 58 7d 0a 58 0a 58 76 | 6f 69 64 20 63 6b 70 74 |.X}.X.Xv|oid ckpt|
|000043d0| 5f 73 61 76 65 28 72 65 | 73 74 6f 72 65 2c 65 6f |_save(re|store,eo|
|000043e0| 73 70 74 72 29 0a 58 63 | 68 61 72 20 2a 72 65 73 |sptr).Xc|har *res|
|000043f0| 74 6f 72 65 3b 0a 58 63 | 68 61 72 20 2a 65 6f 73 |tore;.Xc|har *eos|
|00004400| 70 74 72 3b 0a 58 7b 0a | 58 20 67 65 74 5f 75 73 |ptr;.X{.|X get_us|
|00004410| 74 61 74 65 28 29 3b 0a | 58 20 69 66 20 28 28 66 |tate();.|X if ((f|
|00004420| 64 20 3d 20 6f 70 65 6e | 28 63 6b 70 74 5f 66 6e |d = open|(ckpt_fn|
|00004430| 74 65 6d 70 2c 4f 5f 52 | 44 57 52 20 7c 20 4f 5f |temp,O_R|DWR | O_|
|00004440| 43 52 45 41 54 20 7c 20 | 4f 5f 54 52 55 4e 43 2c |CREAT | |O_TRUNC,|
|00004450| 30 36 30 30 29 29 20 3d | 3d 20 2d 31 29 20 72 65 |0600)) =|= -1) re|
|00004460| 74 75 72 6e 3b 0a 58 20 | 69 66 20 28 77 72 69 74 |turn;.X |if (writ|
|00004470| 65 28 66 64 2c 26 72 65 | 73 74 6f 72 65 2c 73 69 |e(fd,&re|store,si|
|00004480| 7a 65 6f 66 28 72 65 73 | 74 6f 72 65 29 29 20 3d |zeof(res|tore)) =|
|00004490| 3d 20 2d 31 29 20 72 65 | 74 75 72 6e 3b 0a 58 20 |= -1) re|turn;.X |
|000044a0| 69 66 20 28 77 72 69 74 | 65 28 66 64 2c 26 65 6f |if (writ|e(fd,&eo|
|000044b0| 73 70 74 72 2c 73 69 7a | 65 6f 66 28 65 6f 73 70 |sptr,siz|eof(eosp|
|000044c0| 74 72 29 29 20 3d 3d 20 | 2d 31 29 20 72 65 74 75 |tr)) == |-1) retu|
|000044d0| 72 6e 3b 0a 58 20 63 6b | 70 74 5f 6e 65 77 62 72 |rn;.X ck|pt_newbr|
|000044e0| 6b 20 3d 20 73 62 72 6b | 28 30 29 3b 0a 58 20 69 |k = sbrk|(0);.X i|
|000044f0| 66 20 28 77 72 69 74 65 | 28 66 64 2c 26 63 6b 70 |f (write|(fd,&ckp|
|00004500| 74 5f 6e 65 77 62 72 6b | 2c 73 69 7a 65 6f 66 28 |t_newbrk|,sizeof(|
|00004510| 63 6b 70 74 5f 6e 65 77 | 62 72 6b 29 29 20 3d 3d |ckpt_new|brk)) ==|
|00004520| 20 2d 31 29 20 72 65 74 | 75 72 6e 3b 0a 58 20 69 | -1) ret|urn;.X i|
|00004530| 66 20 28 77 72 69 74 65 | 28 66 64 2c 26 63 6b 70 |f (write|(fd,&ckp|
|00004540| 74 5f 73 6f 74 2c 63 6b | 70 74 5f 65 6f 74 70 74 |t_sot,ck|pt_eotpt|
|00004550| 72 20 2d 20 26 63 6b 70 | 74 5f 73 6f 74 29 20 3d |r - &ckp|t_sot) =|
|00004560| 3d 20 2d 31 29 20 72 65 | 74 75 72 6e 3b 0a 58 20 |= -1) re|turn;.X |
|00004570| 69 66 20 28 77 72 69 74 | 65 28 66 64 2c 63 6b 70 |if (writ|e(fd,ckp|
|00004580| 74 5f 6f 72 69 67 62 72 | 6b 2c 63 6b 70 74 5f 6e |t_origbr|k,ckpt_n|
|00004590| 65 77 62 72 6b 20 2d 20 | 63 6b 70 74 5f 6f 72 69 |ewbrk - |ckpt_ori|
|000045a0| 67 62 72 6b 29 20 3d 3d | 20 2d 31 29 20 72 65 74 |gbrk) ==| -1) ret|
|000045b0| 75 72 6e 3b 0a 58 20 69 | 66 20 28 65 6f 73 70 74 |urn;.X i|f (eospt|
|000045c0| 72 20 2d 20 63 6b 70 74 | 5f 73 6f 73 70 74 72 20 |r - ckpt|_sosptr |
|000045d0| 3e 20 30 29 0a 58 20 20 | 7b 20 69 66 20 28 77 72 |> 0).X |{ if (wr|
|000045e0| 69 74 65 28 66 64 2c 63 | 6b 70 74 5f 73 6f 73 70 |ite(fd,c|kpt_sosp|
|000045f0| 74 72 2c 65 6f 73 70 74 | 72 20 2d 20 63 6b 70 74 |tr,eospt|r - ckpt|
|00004600| 5f 73 6f 73 70 74 72 29 | 20 3d 3d 20 2d 31 29 20 |_sosptr)| == -1) |
|00004610| 72 65 74 75 72 6e 3b 20 | 7d 0a 58 20 65 6c 73 65 |return; |}.X else|
|00004620| 0a 58 20 20 7b 20 69 66 | 20 28 77 72 69 74 65 28 |.X { if| (write(|
|00004630| 66 64 2c 65 6f 73 70 74 | 72 2c 63 6b 70 74 5f 73 |fd,eospt|r,ckpt_s|
|00004640| 6f 73 70 74 72 20 2d 20 | 65 6f 73 70 74 72 29 20 |osptr - |eosptr) |
|00004650| 3d 3d 20 2d 31 29 20 72 | 65 74 75 72 6e 3b 20 7d |== -1) r|eturn; }|
|00004660| 0a 58 20 28 76 6f 69 64 | 29 20 63 6c 6f 73 65 28 |.X (void|) close(|
|00004670| 66 64 29 3b 0a 58 20 69 | 66 20 28 72 65 6e 61 6d |fd);.X i|f (renam|
|00004680| 65 28 63 6b 70 74 5f 66 | 6e 74 65 6d 70 2c 63 6b |e(ckpt_f|ntemp,ck|
|00004690| 70 74 5f 66 6e 29 20 3d | 3d 20 2d 31 29 20 72 65 |pt_fn) =|= -1) re|
|000046a0| 74 75 72 6e 3b 0a 58 7d | 0a 58 0a 58 76 6f 69 64 |turn;.X}|.X.Xvoid|
|000046b0| 20 63 6b 70 74 5f 73 63 | 68 65 64 75 6c 65 28 29 | ckpt_sc|hedule()|
|000046c0| 0a 58 7b 0a 58 20 63 6b | 70 74 5f 70 6f 69 6e 74 |.X{.X ck|pt_point|
|000046d0| 20 3d 20 31 3b 0a 58 7d | 0a 58 0a 58 76 6f 69 64 | = 1;.X}|.X.Xvoid|
|000046e0| 20 63 6b 70 74 5f 69 6e | 69 74 28 29 0a 58 7b 0a | ckpt_in|it().X{.|
|000046f0| 58 20 69 66 20 28 67 65 | 74 65 6e 76 28 22 43 4b |X if (ge|tenv("CK|
|00004700| 50 54 46 4e 54 45 4d 50 | 22 29 29 0a 58 20 20 20 |PTFNTEMP|")).X |
|00004710| 63 6b 70 74 5f 66 6e 74 | 65 6d 70 20 3d 20 67 65 |ckpt_fnt|emp = ge|
|00004720| 74 65 6e 76 28 22 43 4b | 50 54 46 4e 54 45 4d 50 |tenv("CK|PTFNTEMP|
|00004730| 22 29 3b 0a 58 20 69 66 | 20 28 67 65 74 65 6e 76 |");.X if| (getenv|
|00004740| 28 22 43 4b 50 54 46 4e | 22 29 29 0a 58 20 20 20 |("CKPTFN|")).X |
|00004750| 63 6b 70 74 5f 66 6e 20 | 3d 20 67 65 74 65 6e 76 |ckpt_fn |= getenv|
|00004760| 28 22 43 4b 50 54 46 4e | 22 29 3b 0a 58 7d 0a 45 |("CKPTFN|");.X}.E|
|00004770| 4e 44 5f 4f 46 5f 46 49 | 4c 45 0a 69 66 20 74 65 |ND_OF_FI|LE.if te|
|00004780| 73 74 20 34 37 39 38 20 | 2d 6e 65 20 60 77 63 20 |st 4798 |-ne `wc |
|00004790| 2d 63 20 3c 27 70 6d 63 | 6b 70 74 2e 63 27 60 3b |-c <'pmc|kpt.c'`;|
|000047a0| 20 74 68 65 6e 0a 20 20 | 20 20 65 63 68 6f 20 73 | then. | echo s|
|000047b0| 68 61 72 3a 20 5c 22 27 | 70 6d 63 6b 70 74 2e 63 |har: \"'|pmckpt.c|
|000047c0| 27 5c 22 20 75 6e 70 61 | 63 6b 65 64 20 77 69 74 |'\" unpa|cked wit|
|000047d0| 68 20 77 72 6f 6e 67 20 | 73 69 7a 65 21 0a 66 69 |h wrong |size!.fi|
|000047e0| 0a 23 20 65 6e 64 20 6f | 66 20 27 70 6d 63 6b 70 |.# end o|f 'pmckp|
|000047f0| 74 2e 63 27 0a 66 69 0a | 69 66 20 74 65 73 74 20 |t.c'.fi.|if test |
|00004800| 2d 66 20 27 70 6d 63 6b | 70 74 2e 68 27 20 2d 61 |-f 'pmck|pt.h' -a|
|00004810| 20 22 24 7b 31 7d 22 20 | 21 3d 20 22 2d 63 22 20 | "${1}" |!= "-c" |
|00004820| 3b 20 74 68 65 6e 20 0a | 20 20 65 63 68 6f 20 73 |; then .| echo s|
|00004830| 68 61 72 3a 20 57 69 6c | 6c 20 6e 6f 74 20 63 6c |har: Wil|l not cl|
|00004840| 6f 62 62 65 72 20 65 78 | 69 73 74 69 6e 67 20 66 |obber ex|isting f|
|00004850| 69 6c 65 20 5c 22 27 70 | 6d 63 6b 70 74 2e 68 27 |ile \"'p|mckpt.h'|
|00004860| 5c 22 0a 65 6c 73 65 0a | 65 63 68 6f 20 73 68 61 |\".else.|echo sha|
|00004870| 72 3a 20 45 78 74 72 61 | 63 74 69 6e 67 20 5c 22 |r: Extra|cting \"|
|00004880| 27 70 6d 63 6b 70 74 2e | 68 27 5c 22 20 5c 28 31 |'pmckpt.|h'\" \(1|
|00004890| 31 35 32 20 63 68 61 72 | 61 63 74 65 72 73 5c 29 |152 char|acters\)|
|000048a0| 0a 73 65 64 20 22 73 2f | 5e 58 2f 2f 22 20 3e 27 |.sed "s/|^X//" >'|
|000048b0| 70 6d 63 6b 70 74 2e 68 | 27 20 3c 3c 27 45 4e 44 |pmckpt.h|' <<'END|
|000048c0| 5f 4f 46 5f 46 49 4c 45 | 27 0a 58 23 69 66 6e 64 |_OF_FILE|'.X#ifnd|
|000048d0| 65 66 20 50 4d 43 4b 50 | 54 5f 48 0a 58 23 64 65 |ef PMCKP|T_H.X#de|
|000048e0| 66 69 6e 65 20 50 4d 43 | 4b 50 54 5f 48 0a 58 0a |fine PMC|KPT_H.X.|
|000048f0| 58 65 78 74 65 72 6e 20 | 76 6f 69 64 20 63 6b 70 |Xextern |void ckp|
|00004900| 74 5f 73 74 61 63 6b 5f | 72 65 73 74 6f 72 65 28 |t_stack_|restore(|
|00004910| 29 3b 0a 58 65 78 74 65 | 72 6e 20 76 6f 69 64 20 |);.Xexte|rn void |
|00004920| 63 6b 70 74 5f 64 61 74 | 61 5f 72 65 73 74 6f 72 |ckpt_dat|a_restor|
|00004930| 65 28 29 3b 0a 58 65 78 | 74 65 72 6e 20 76 6f 69 |e();.Xex|tern voi|
|00004940| 64 20 63 6b 70 74 5f 68 | 65 61 70 5f 72 65 73 74 |d ckpt_h|eap_rest|
|00004950| 6f 72 65 28 29 3b 0a 58 | 65 78 74 65 72 6e 20 76 |ore();.X|extern v|
|00004960| 6f 69 64 20 63 6b 70 74 | 5f 73 61 76 65 28 29 3b |oid ckpt|_save();|
|00004970| 0a 58 65 78 74 65 72 6e | 20 76 6f 69 64 20 63 6b |.Xextern| void ck|
|00004980| 70 74 5f 69 6e 63 72 65 | 6d 65 6e 74 28 29 3b 0a |pt_incre|ment();.|
|00004990| 58 65 78 74 65 72 6e 20 | 76 6f 69 64 20 63 6b 70 |Xextern |void ckp|
|000049a0| 74 5f 73 63 68 65 64 75 | 6c 65 28 29 3b 0a 58 65 |t_schedu|le();.Xe|
|000049b0| 78 74 65 72 6e 20 76 6f | 69 64 20 63 6b 70 74 5f |xtern vo|id ckpt_|
|000049c0| 69 6e 69 74 28 29 3b 0a | 58 65 78 74 65 72 6e 20 |init();.|Xextern |
|000049d0| 76 6f 69 64 20 63 6b 70 | 74 5f 73 65 74 28 29 3b |void ckp|t_set();|
|000049e0| 0a 58 65 78 74 65 72 6e | 20 63 68 61 72 20 2a 63 |.Xextern| char *c|
|000049f0| 6b 70 74 5f 72 65 73 74 | 6f 72 65 3b 0a 58 65 78 |kpt_rest|ore;.Xex|
|00004a00| 74 65 72 6e 20 69 6e 74 | 20 63 6b 70 74 5f 70 6f |tern int| ckpt_po|
|00004a10| 69 6e 74 3b 0a 58 0a 58 | 23 64 65 66 69 6e 65 20 |int;.X.X|#define |
|00004a20| 43 4b 50 54 5f 48 45 41 | 44 20 63 6b 70 74 5f 66 |CKPT_HEA|D ckpt_f|
|00004a30| 61 69 6c 75 72 65 0a 58 | 23 64 65 66 69 6e 65 20 |ailure.X|#define |
|00004a40| 43 4b 50 54 5f 53 50 4f | 54 20 63 6b 70 74 5f 66 |CKPT_SPO|T ckpt_f|
|00004a50| 61 69 6c 75 72 65 0a 58 | 0a 58 23 64 65 66 69 6e |ailure.X|.X#defin|
|00004a60| 65 20 6d 61 69 6e 20 63 | 6b 70 74 5f 6d 61 69 6e |e main c|kpt_main|
|00004a70| 0a 58 0a 58 23 64 65 66 | 69 6e 65 20 43 4b 50 54 |.X.X#def|ine CKPT|
|00004a80| 5f 56 41 52 31 20 73 74 | 61 74 69 63 20 63 68 61 |_VAR1 st|atic cha|
|00004a90| 72 20 43 4b 50 54 5f 68 | 65 61 64 3b 20 63 68 61 |r CKPT_h|ead; cha|
|00004aa0| 72 20 43 4b 50 54 5f 6d | 61 72 6b 3b 0a 58 23 64 |r CKPT_m|ark;.X#d|
|00004ab0| 65 66 69 6e 65 20 43 4b | 50 54 5f 56 41 52 34 20 |efine CK|PT_VAR4 |
|00004ac0| 73 74 61 74 69 63 20 63 | 68 61 72 20 2a 43 4b 50 |static c|har *CKP|
|00004ad0| 54 5f 70 6f 73 3b 20 7b | 0a 58 0a 58 23 64 65 66 |T_pos; {|.X.X#def|
|00004ae0| 69 6e 65 20 43 4b 50 54 | 5f 50 4f 49 4e 54 20 43 |ine CKPT|_POINT C|
|00004af0| 4b 50 54 5f 70 6f 73 20 | 3d 20 26 43 4b 50 54 5f |KPT_pos |= &CKPT_|
|00004b00| 48 45 41 44 3b 20 69 66 | 20 28 63 6b 70 74 5f 70 |HEAD; if| (ckpt_p|
|00004b10| 6f 69 6e 74 29 20 7b 20 | 63 68 61 72 20 43 4b 50 |oint) { |char CKP|
|00004b20| 54 5f 64 75 68 3b 20 63 | 6b 70 74 5f 73 61 76 65 |T_duh; c|kpt_save|
|00004b30| 28 26 43 4b 50 54 5f 48 | 45 41 44 2c 26 43 4b 50 |(&CKPT_H|EAD,&CKP|
|00004b40| 54 5f 64 75 68 29 3b 20 | 63 6b 70 74 5f 70 6f 69 |T_duh); |ckpt_poi|
|00004b50| 6e 74 20 3d 20 30 3b 20 | 7d 0a 58 0a 58 23 64 65 |nt = 0; |}.X.X#de|
|00004b60| 66 69 6e 65 20 43 4b 50 | 54 5f 54 4f 50 31 20 69 |fine CKP|T_TOP1 i|
|00004b70| 66 20 28 63 6b 70 74 5f | 72 65 73 74 6f 72 65 29 |f (ckpt_|restore)|
|00004b80| 20 7b 20 63 68 61 72 20 | 43 4b 50 54 5f 64 75 68 | { char |CKPT_duh|
|00004b90| 3b 20 63 6b 70 74 5f 69 | 6e 63 72 65 6d 65 6e 74 |; ckpt_i|ncrement|
|00004ba0| 28 26 43 4b 50 54 5f 6d | 61 72 6b 2c 26 43 4b 50 |(&CKPT_m|ark,&CKP|
|00004bb0| 54 5f 64 75 68 29 3b 20 | 67 6f 74 6f 20 43 4b 50 |T_duh); |goto CKP|
|00004bc0| 54 5f 66 69 6e 61 6c 3b | 20 43 4b 50 54 5f 73 70 |T_final;| CKPT_sp|
|00004bd0| 6f 74 3a 20 63 6b 70 74 | 5f 73 74 61 63 6b 5f 72 |ot: ckpt|_stack_r|
|00004be0| 65 73 74 6f 72 65 28 29 | 3b 20 63 6b 70 74 5f 72 |estore()|; ckpt_r|
|00004bf0| 65 73 74 6f 72 65 20 3d | 20 28 63 68 61 72 20 2a |estore =| (char *|
|00004c00| 29 20 30 3b 0a 58 23 64 | 65 66 69 6e 65 20 43 4b |) 0;.X#d|efine CK|
|00004c10| 50 54 5f 54 4f 50 34 20 | 7d 20 65 6c 73 65 20 7b |PT_TOP4 |} else {|
|00004c20| 20 43 4b 50 54 5f 50 4f | 49 4e 54 20 7d 0a 58 0a | CKPT_PO|INT }.X.|
|00004c30| 58 23 64 65 66 69 6e 65 | 20 43 4b 50 54 5f 31 28 |X#define| CKPT_1(|
|00004c40| 66 6f 6f 29 20 7b 20 73 | 74 61 74 69 63 20 63 68 |foo) { s|tatic ch|
|00004c50| 61 72 20 66 6f 6f 3b 20 | 69 66 20 28 30 29 20 7b |ar foo; |if (0) {|
|00004c60| 0a 58 23 64 65 66 69 6e | 65 20 43 4b 50 54 5f 34 |.X#defin|e CKPT_4|
|00004c70| 28 62 61 72 29 20 62 61 | 72 3a 20 69 66 20 28 43 |(bar) ba|r: if (C|
|00004c80| 4b 50 54 5f 70 6f 73 20 | 21 3d 20 26 43 4b 50 54 |KPT_pos |!= &CKPT|
|00004c90| 5f 48 45 41 44 29 20 67 | 6f 74 6f 20 43 4b 50 54 |_HEAD) g|oto CKPT|
|00004ca0| 5f 53 50 4f 54 3b 0a 58 | 23 64 65 66 69 6e 65 20 |_SPOT;.X|#define |
|00004cb0| 43 4b 50 54 5f 37 20 69 | 66 20 28 63 6b 70 74 5f |CKPT_7 i|f (ckpt_|
|00004cc0| 72 65 73 74 6f 72 65 20 | 3d 3d 20 26 43 4b 50 54 |restore |== &CKPT|
|00004cd0| 5f 48 45 41 44 29 20 7b | 20 63 6b 70 74 5f 73 74 |_HEAD) {| ckpt_st|
|00004ce0| 61 63 6b 5f 72 65 73 74 | 6f 72 65 28 29 3b 20 63 |ack_rest|ore(); c|
|00004cf0| 6b 70 74 5f 72 65 73 74 | 6f 72 65 20 3d 20 28 63 |kpt_rest|ore = (c|
|00004d00| 68 61 72 20 2a 29 20 30 | 3b 20 7d 20 7d 20 43 4b |har *) 0|; } } CK|
|00004d10| 50 54 5f 50 4f 49 4e 54 | 20 7d 0a 58 0a 58 23 64 |PT_POINT| }.X.X#d|
|00004d20| 65 66 69 6e 65 20 43 4b | 50 54 5f 42 4f 54 31 20 |efine CK|PT_BOT1 |
|00004d30| 7d 20 69 66 20 28 30 29 | 20 7b 20 43 4b 50 54 5f |} if (0)| { CKPT_|
|00004d40| 66 69 6e 61 6c 3a 20 67 | 6f 74 6f 20 43 4b 50 54 |final: g|oto CKPT|
|00004d50| 5f 53 50 4f 54 3b 20 7d | 0a 58 0a 58 23 65 6e 64 |_SPOT; }|.X.X#end|
|00004d60| 69 66 20 50 4d 43 4b 50 | 54 5f 48 0a 45 4e 44 5f |if PMCKP|T_H.END_|
|00004d70| 4f 46 5f 46 49 4c 45 0a | 69 66 20 74 65 73 74 20 |OF_FILE.|if test |
|00004d80| 31 31 35 32 20 2d 6e 65 | 20 60 77 63 20 2d 63 20 |1152 -ne| `wc -c |
|00004d90| 3c 27 70 6d 63 6b 70 74 | 2e 68 27 60 3b 20 74 68 |<'pmckpt|.h'`; th|
|00004da0| 65 6e 0a 20 20 20 20 65 | 63 68 6f 20 73 68 61 72 |en. e|cho shar|
|00004db0| 3a 20 5c 22 27 70 6d 63 | 6b 70 74 2e 68 27 5c 22 |: \"'pmc|kpt.h'\"|
|00004dc0| 20 75 6e 70 61 63 6b 65 | 64 20 77 69 74 68 20 77 | unpacke|d with w|
|00004dd0| 72 6f 6e 67 20 73 69 7a | 65 21 0a 66 69 0a 23 20 |rong siz|e!.fi.# |
|00004de0| 65 6e 64 20 6f 66 20 27 | 70 6d 63 6b 70 74 2e 68 |end of '|pmckpt.h|
|00004df0| 27 0a 66 69 0a 69 66 20 | 74 65 73 74 20 2d 66 20 |'.fi.if |test -f |
|00004e00| 27 74 65 73 74 2e 63 27 | 20 2d 61 20 22 24 7b 31 |'test.c'| -a "${1|
|00004e10| 7d 22 20 21 3d 20 22 2d | 63 22 20 3b 20 74 68 65 |}" != "-|c" ; the|
|00004e20| 6e 20 0a 20 20 65 63 68 | 6f 20 73 68 61 72 3a 20 |n . ech|o shar: |
|00004e30| 57 69 6c 6c 20 6e 6f 74 | 20 63 6c 6f 62 62 65 72 |Will not| clobber|
|00004e40| 20 65 78 69 73 74 69 6e | 67 20 66 69 6c 65 20 5c | existin|g file \|
|00004e50| 22 27 74 65 73 74 2e 63 | 27 5c 22 0a 65 6c 73 65 |"'test.c|'\".else|
|00004e60| 0a 65 63 68 6f 20 73 68 | 61 72 3a 20 45 78 74 72 |.echo sh|ar: Extr|
|00004e70| 61 63 74 69 6e 67 20 5c | 22 27 74 65 73 74 2e 63 |acting \|"'test.c|
|00004e80| 27 5c 22 20 5c 28 37 32 | 38 20 63 68 61 72 61 63 |'\" \(72|8 charac|
|00004e90| 74 65 72 73 5c 29 0a 73 | 65 64 20 22 73 2f 5e 58 |ters\).s|ed "s/^X|
|00004ea0| 2f 2f 22 20 3e 27 74 65 | 73 74 2e 63 27 20 3c 3c |//" >'te|st.c' <<|
|00004eb0| 27 45 4e 44 5f 4f 46 5f | 46 49 4c 45 27 0a 58 23 |'END_OF_|FILE'.X#|
|00004ec0| 69 6e 63 6c 75 64 65 20 | 3c 73 69 67 6e 61 6c 2e |include |<signal.|
|00004ed0| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 6d 61 |h>.X#inc|lude <ma|
|00004ee0| 6c 6c 6f 63 2e 68 3e 0a | 58 23 69 6e 63 6c 75 64 |lloc.h>.|X#includ|
|00004ef0| 65 20 3c 73 74 64 69 6f | 2e 68 3e 0a 58 23 69 6e |e <stdio|.h>.X#in|
|00004f00| 63 6c 75 64 65 20 22 70 | 6d 63 6b 70 74 2e 68 22 |clude "p|mckpt.h"|
|00004f10| 0a 58 0a 58 63 68 61 72 | 20 2a 66 6f 6f 73 74 72 |.X.Xchar| *foostr|
|00004f20| 20 3d 20 22 68 6d 6d 22 | 3b 0a 58 0a 58 73 75 62 | = "hmm"|;.X.Xsub|
|00004f30| 31 28 69 29 0a 58 69 6e | 74 20 69 3b 0a 58 7b 0a |1(i).Xin|t i;.X{.|
|00004f40| 58 43 4b 50 54 20 56 41 | 52 53 0a 58 20 66 6c 6f |XCKPT VA|RS.X flo|
|00004f50| 61 74 20 78 20 3d 20 69 | 20 2a 20 33 2e 31 34 3b |at x = i| * 3.14;|
|00004f60| 0a 58 20 69 6e 74 20 6b | 20 3d 20 31 30 39 34 37 |.X int k| = 10947|
|00004f70| 39 35 35 38 36 3b 0a 58 | 43 4b 50 54 20 54 4f 50 |95586;.X|CKPT TOP|
|00004f80| 53 0a 58 20 66 6f 72 20 | 28 6b 20 3d 20 31 3b 6b |S.X for |(k = 1;k|
|00004f90| 20 3c 20 33 3b 6b 2b 2b | 29 0a 58 20 20 7b 0a 58 | < 3;k++|).X {.X|
|00004fa0| 20 20 20 73 6c 65 65 70 | 28 31 29 3b 0a 58 20 20 | sleep|(1);.X |
|00004fb0| 20 70 72 69 6e 74 66 28 | 22 25 64 20 25 67 20 25 | printf(|"%d %g %|
|00004fc0| 64 5c 6e 22 2c 69 2c 78 | 2c 6b 29 3b 0a 58 20 20 |d\n",i,x|,k);.X |
|00004fd0| 20 66 66 6c 75 73 68 28 | 73 74 64 6f 75 74 29 3b | fflush(|stdout);|
|00004fe0| 0a 58 20 20 20 78 20 2b | 3d 20 6b 3b 0a 58 43 4b |.X x +|= k;.XCK|
|00004ff0| 50 54 20 50 4f 49 4e 54 | 20 62 6f 6f 6d 20 62 6f |PT POINT| boom bo|
|00005000| 78 0a 58 20 20 7d 0a 58 | 43 4b 50 54 20 42 4f 54 |x.X }.X|CKPT BOT|
|00005010| 53 0a 58 7d 0a 58 0a 58 | 6d 61 69 6e 28 29 0a 58 |S.X}.X.X|main().X|
|00005020| 7b 0a 58 43 4b 50 54 20 | 56 41 52 53 0a 58 20 69 |{.XCKPT |VARS.X i|
|00005030| 6e 74 20 69 20 3d 20 31 | 30 39 34 37 39 35 35 38 |nt i = 1|09479558|
|00005040| 35 3b 0a 58 20 69 6e 74 | 20 6a 20 3d 20 31 30 39 |5;.X int| j = 109|
|00005050| 34 37 39 35 35 38 35 3b | 0a 58 20 0a 58 43 4b 50 |4795585;|.X .XCKP|
|00005060| 54 20 54 4f 50 53 0a 58 | 0a 58 20 73 69 67 6e 61 |T TOPS.X|.X signa|
|00005070| 6c 28 53 49 47 49 4e 54 | 2c 63 6b 70 74 5f 73 63 |l(SIGINT|,ckpt_sc|
|00005080| 68 65 64 75 6c 65 29 3b | 0a 58 20 66 6f 6f 73 74 |hedule);|.X foost|
|00005090| 72 20 3d 20 6d 61 6c 6c | 6f 63 28 31 35 30 29 3b |r = mall|oc(150);|
|000050a0| 0a 58 20 73 74 72 63 70 | 79 28 66 6f 6f 73 74 72 |.X strcp|y(foostr|
|000050b0| 2c 22 79 6f 2c 20 64 75 | 64 65 2e 22 29 3b 0a 58 |,"yo, du|de.");.X|
|000050c0| 0a 58 20 66 6f 72 20 28 | 69 20 3d 20 30 3b 69 20 |.X for (|i = 0;i |
|000050d0| 3c 20 34 3b 69 2b 2b 29 | 0a 58 20 20 7b 0a 58 43 |< 4;i++)|.X {.XC|
|000050e0| 4b 50 54 20 50 4f 49 4e | 54 20 68 65 61 64 31 20 |KPT POIN|T head1 |
|000050f0| 73 70 6f 74 31 0a 58 20 | 20 20 73 75 62 31 28 69 |spot1.X | sub1(i|
|00005100| 29 3b 0a 58 20 20 20 73 | 6c 65 65 70 28 31 29 3b |);.X s|leep(1);|
|00005110| 0a 58 20 20 20 70 72 69 | 6e 74 66 28 22 25 64 20 |.X pri|ntf("%d |
|00005120| 25 73 5c 6e 22 2c 69 2c | 66 6f 6f 73 74 72 29 3b |%s\n",i,|foostr);|
|00005130| 0a 58 20 20 20 66 66 6c | 75 73 68 28 73 74 64 6f |.X ffl|ush(stdo|
|00005140| 75 74 29 3b 0a 58 20 20 | 7d 0a 58 0a 58 20 66 6f |ut);.X |}.X.X fo|
|00005150| 72 20 28 6a 20 3d 20 30 | 3b 6a 20 3c 20 32 3b 6a |r (j = 0|;j < 2;j|
|00005160| 2b 2b 29 0a 58 20 20 7b | 0a 58 43 4b 50 54 20 50 |++).X {|.XCKPT P|
|00005170| 4f 49 4e 54 20 68 65 61 | 64 32 20 73 70 6f 74 32 |OINT hea|d2 spot2|
|00005180| 0a 58 20 20 20 73 6c 65 | 65 70 28 31 29 3b 0a 58 |.X sle|ep(1);.X|
|00005190| 20 20 20 70 72 69 6e 74 | 66 28 22 25 64 5c 6e 22 | print|f("%d\n"|
|000051a0| 2c 6a 29 3b 0a 58 20 20 | 20 66 66 6c 75 73 68 28 |,j);.X | fflush(|
|000051b0| 73 74 64 6f 75 74 29 3b | 0a 58 20 20 7d 0a 58 0a |stdout);|.X }.X.|
|000051c0| 58 43 4b 50 54 20 42 4f | 54 53 0a 58 7d 0a 45 4e |XCKPT BO|TS.X}.EN|
|000051d0| 44 5f 4f 46 5f 46 49 4c | 45 0a 69 66 20 74 65 73 |D_OF_FIL|E.if tes|
|000051e0| 74 20 37 32 38 20 2d 6e | 65 20 60 77 63 20 2d 63 |t 728 -n|e `wc -c|
|000051f0| 20 3c 27 74 65 73 74 2e | 63 27 60 3b 20 74 68 65 | <'test.|c'`; the|
|00005200| 6e 0a 20 20 20 20 65 63 | 68 6f 20 73 68 61 72 3a |n. ec|ho shar:|
|00005210| 20 5c 22 27 74 65 73 74 | 2e 63 27 5c 22 20 75 6e | \"'test|.c'\" un|
|00005220| 70 61 63 6b 65 64 20 77 | 69 74 68 20 77 72 6f 6e |packed w|ith wron|
|00005230| 67 20 73 69 7a 65 21 0a | 66 69 0a 23 20 65 6e 64 |g size!.|fi.# end|
|00005240| 20 6f 66 20 27 74 65 73 | 74 2e 63 27 0a 66 69 0a | of 'tes|t.c'.fi.|
|00005250| 65 63 68 6f 20 73 68 61 | 72 3a 20 45 6e 64 20 6f |echo sha|r: End o|
|00005260| 66 20 73 68 65 6c 6c 20 | 61 72 63 68 69 76 65 2e |f shell |archive.|
|00005270| 0a 65 78 69 74 20 30 0a | |.exit 0.| |
+--------+-------------------------+-------------------------+--------+--------+