sumim #6887(2008/07/30 05:26 GMT) [ Smalltalk ] Rating1/1=1.00
Squeak Smalltalk で。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| file font nLines cr sp goNextPage goPrevPage findNext prevLine | file := FileStream fileNamed: 'in.txt'. font := TextStyle defaultFont. cr := Character cr. sp := Character space. nLines := Display height // (font height + font descent). goNextPage := [nLines timesRepeat: [file nextLine]]. prevLine := [file binary. [file position = 0 or: [file back = 13]] whileFalse. file ascii]. goPrevPage := [nLines timesRepeat: [prevLine value]]. findNext := [:pattern | pattern notEmpty ifTrue: [file upToAll: pattern]. prevLine value]. [ | string | string := String streamContents: [:ss | | position | position := file position. nLines timesRepeat: [ file nextLine ifNotNilDo: [:line | ss nextPutAll: line]. file peek ifNotNil: [ss cr]]. file position: position]. Display fillWhite. string asDisplayText display. [Sensor keyboardPressed] whileFalse. Sensor keyboard caseOf: { [$q] -> [file close. ^World restoreDisplay]. [$g] -> [file reset]. [$G] -> [file setToEnd]. [sp] -> [goNextPage value]. [$f] -> [goNextPage value]. [$b] -> [goPrevPage value]. [cr] -> [file nextLine]. [$e] -> [file nextLine]. [$y] -> [prevLine value]. [$/] -> [findNext value: (FillInTheBlank request: 'pattern:')] } otherwise: [] ] repeat
Rating1/1=1.00-0+
[ reply ]
sumim
#6887()
[
Smalltalk
]
Rating1/1=1.00
Squeak Smalltalk で。
| file font nLines cr sp goNextPage goPrevPage findNext prevLine | file := FileStream fileNamed: 'in.txt'. font := TextStyle defaultFont. cr := Character cr. sp := Character space. nLines := Display height // (font height + font descent). goNextPage := [nLines timesRepeat: [file nextLine]]. prevLine := [file binary. [file position = 0 or: [file back = 13]] whileFalse. file ascii]. goPrevPage := [nLines timesRepeat: [prevLine value]]. findNext := [:pattern | pattern notEmpty ifTrue: [file upToAll: pattern]. prevLine value]. [ | string | string := String streamContents: [:ss | | position | position := file position. nLines timesRepeat: [ file nextLine ifNotNilDo: [:line | ss nextPutAll: line]. file peek ifNotNil: [ss cr]]. file position: position]. Display fillWhite. string asDisplayText display. [Sensor keyboardPressed] whileFalse. Sensor keyboard caseOf: { [$q] -> [file close. ^World restoreDisplay]. [$g] -> [file reset]. [$G] -> [file setToEnd]. [sp] -> [goNextPage value]. [$f] -> [goNextPage value]. [$b] -> [goPrevPage value]. [cr] -> [file nextLine]. [$e] -> [file nextLine]. [$y] -> [prevLine value]. [$/] -> [findNext value: (FillInTheBlank request: 'pattern:')] } otherwise: [] ] repeatRating1/1=1.00-0+
[ reply ]