home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / smalltk / src / file.old < prev    next >
Text File  |  1991-10-12  |  3KB  |  141 lines

  1. *
  2. * Little Smalltalk, version 3
  3. * Written by Tim Budd, Oregon State University, January 1989
  4. *
  5. *  methods for dealing with files
  6. *   these are independent of the stdio package, 
  7. *    work in all systems
  8. *
  9. *  a global variable "files" maintains all currently opened files
  10. *  these are reopened on system initialization time
  11. *
  12. Class File Object name number mode
  13. *
  14. Methods File 'all'
  15.     asString    | text line |
  16.         text <- ''.
  17.         [ (line <- self getString) notNil ]
  18.             whileTrue: [ text <- text , line ].
  19.         ^ text
  20. |
  21.     name: string
  22.         name <- string
  23. |
  24.     name
  25.         ^ name
  26. |
  27.     getNumber
  28.         " get a file number - called only by open"
  29.         (1 to: 15) do: [:i | (files at: i) isNil
  30.             ifTrue: [ files at: i put: self. number <- i. ^ nil]]
  31. |
  32.     open: m
  33.         self mode: m.
  34.         self open
  35. |
  36.     mode: m
  37.         mode <- m
  38. |
  39.     open
  40.         number notNil ifTrue: [ self close ].
  41.         self getNumber.
  42.         <120 number name mode> isNil
  43.             ifTrue: [ smalltalk error: 
  44.                  'open failed: ', name. ^ false].
  45.         ^ true
  46. |
  47.     close
  48.         " close file, take entry out of global variable "
  49.         number isNil ifTrue: [ ^ nil ].
  50.         files at: number put: nil.
  51.         <121 number>.
  52.         number <- nil.
  53. |
  54.     fileIn
  55.         " read code into the system "
  56.         (number notNil) ifTrue: [<123 number>]
  57. |
  58.     fileIn: name
  59.         self name: name.
  60.         self open: 'r'.
  61.         self fileIn.
  62.         self close.
  63. |
  64.     getString
  65.         ^ (number notNil)
  66.             ifTrue: [<125 number>]
  67. |
  68.     print: aString
  69.         (number notNil)
  70.             ifTrue: [<129 number aString>]
  71.             ifFalse: [smalltalk error: 'file not open']
  72. |
  73.     printNoReturn: aString
  74.         (number notNil)
  75.             ifTrue: [<128 number aString>]
  76.             ifFalse: [smalltalk error: 'file not open']
  77. |
  78.     readUntil: conditionBlock doing: actionBlock    | line |
  79.         [ line <- self getString. line notNil]
  80.             whileTrue: [ (conditionBlock value: line)
  81.                     ifTrue: [ ^ line ].
  82.                     actionBlock value: line ].
  83.         ^ nil
  84. |
  85.     saveImage
  86.         " subtle problem - when we read in image don't want
  87.           image file to be open for writing, so we remove it's
  88.           number from files array temporarily "
  89.         (number notNil)
  90.             ifTrue: [ files at: number put: nil. 
  91.                   <127 number>.
  92.                   files at: number put: self]
  93.             ifFalse: [smalltalk error: 'saveImage: file not open']
  94. ]
  95. Methods File 'all'
  96.     scratchFile
  97.         name <- 'junk.tmp'
  98. |
  99.     delete
  100.         ('rm ', name) unixCommand
  101. ]
  102. Methods Smalltalk 'image'
  103.     saveImage
  104.         self saveImage: (self getPrompt: 'type image name: ').
  105.         ^ 'done'
  106. |
  107.     saveImage: name    
  108.         scheduler critical: [
  109.             " first get rid of our own process "
  110.             scheduler removeProcess: scheduler currentProcess.
  111.         File new;
  112.             name: name;
  113.             open: 'w';
  114.             saveImage;
  115.             close ]
  116. ]
  117. Methods Class 'all'
  118.     fileOut        | f |
  119.         " file out whole class on class.st "
  120.         f <- File new; name: (name asString,'.st'); mode: 'w'; open.
  121.         self fileOutOn: f.
  122.         f close.
  123. |
  124.     fileOutOn: aFile
  125.         " file out class description "
  126.         aFile printNoReturn: 
  127.             'Class ', name , ' ', superClass.
  128.         (variables notNil) ifTrue: [
  129.             variables do: [:v | aFile printNoReturn: ' ', v ]].
  130.         aFile print: ''.
  131.         self fileOutMethodsOn: aFile.
  132. |
  133.     fileOutMethodsOn: aFile
  134.         " file out all methods "
  135.         methods do: [:m |
  136.             aFile print: 'Methods ', name.
  137.             aFile print: m text.
  138.             aFile print: ']'
  139.             ]
  140. ]
  141.