Advertisement
kernel_memory_dump

Untitled

May 17th, 2014
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.34 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Moduo sadrži baznu implementaciju alata za kriptovanje.
  4. """
  5. import curses
  6. import copy
  7. from setuptools.command.easy_install import easy_install
  8. import Const
  9. import sys
  10. from list import DoublyLinkedList
  11. from stack import Stack
  12. from najnovije import Cezarbrat
  13.  
  14.  
  15.  
  16.  
  17. class CryptoCore(object):
  18.  
  19. """
  20. Klasa predstavlja alat za kriptovanje.
  21. """
  22. def __init__(self, screen):
  23.  
  24. self._screen = screen#sluzi da bi mogao da prosledim svoj tekst na ekran
  25.  
  26.  
  27. self.undoStack = Stack()
  28. self.redoStack = Stack()
  29.  
  30.  
  31. # dimenzije prikaza
  32. self._height, self._width = self._screen.getmaxyx()
  33.  
  34. # trenutna pozicija kursora
  35. self._current_x = 0
  36. self._current_y = 0
  37.  
  38. # pomeraji po x i y osi
  39. self._offset_x = 0
  40. self._offset_y = 0
  41.  
  42. # sadržaj koji se prikazuje)
  43. self._content = DoublyLinkedList()
  44. self._content.append("PROJEKAT")
  45.  
  46.  
  47. def _refresh(self):
  48. """
  49. Metoda vrši osvežavanje ekrana.
  50. """
  51. self._height, self._width = self._screen.getmaxyx()
  52. self._screen.clear()
  53.  
  54. lines = self._content.values()
  55. for line_index, line in enumerate(lines):
  56. diff = line_index-self._offset_y
  57.  
  58. # izdvajanje vidljivog dela sadržaja
  59. if diff >= 0 and diff < self._height:
  60. visible = line[self._offset_x:self._width + self._offset_x - 1]
  61. self._screen.addstr(diff, 0, visible)
  62.  
  63. self._screen.move(self._current_y-self._offset_y,
  64. self._current_x-self._offset_x)
  65.  
  66. def _up(self):
  67. """
  68. Metoda vrši pomeraj kursora za jedan red naviše.
  69. """
  70. if self._current_y > 0:
  71. # provera izlaska iz vidljivog opsega po y-osi
  72. if self._offset_y == self._current_y:
  73. self._offset_y -= 1
  74. self._current_y -= 1
  75.  
  76. # postavljanje kursora na kraj poslednje linije
  77. line = self._content[self._current_y]
  78. while self._current_x > len(line):
  79. self._left()
  80.  
  81. def _down(self):
  82. """
  83. Metoda vrši pomeraj kursora za jedan red naniže.
  84. """
  85. if self._current_y < len(self._content)-1:
  86. # provera izlaska iz vidljivog opsega po y-osi
  87. if self._current_y-self._offset_y == self._height-1:
  88. self._offset_y += 1
  89. self._current_y += 1
  90.  
  91. # postavljanje kursora na kraj poslednje linije
  92. line = self._content[self._current_y]
  93. while self._current_x > len(line):
  94. self._left()
  95.  
  96. def _left(self):
  97. """
  98. Metoda vrši pomeraj kursora za jedno mesto ulevo.
  99. """
  100. if self._current_x > 0:
  101. # provera izlaska iz vidljivog opsega po x-osi
  102. if self._current_x == self._offset_x:
  103. self._offset_x -= 1
  104. self._current_x -= 1
  105.  
  106. def _right(self):
  107. """
  108. Metoda vrši pomeraj kursora za jedno mesto udesno.
  109. """
  110. line = self._content[self._current_y]
  111. if line == None:
  112. return
  113. if line and self._current_x < len(line):
  114. # provera izlaska iz vidljivog opsega po x-osi
  115. if self._current_x-self._offset_x == self._width-1:
  116. self._offset_x += 1
  117. self._current_x += 1
  118.  
  119. def load(self):
  120.  
  121. f = open('recenice.txt', 'r')
  122. sadrzaj = f.readlines()
  123.  
  124. for i in range(0, self._content.br):
  125. self._content.remove()
  126.  
  127. for line in sadrzaj:
  128. self._content.append(line)
  129. f.close()
  130.  
  131.  
  132.  
  133. def save (self):
  134. f = open('recenice.txt', 'w')
  135. sadrzaj = self._content.values()
  136. f.writelines(sadrzaj)
  137. f.close()
  138.  
  139.  
  140. def undo (self):
  141. lines = self.undoStack.pop()
  142. self.redoStack.push(self._content.copyValues()) #cuvanje sadrzaja pre undo-a
  143.  
  144. self._content.clear() # praznjenje dvos, spregnute liste
  145. for line in lines:
  146. self._content.append(line)
  147.  
  148.  
  149. def redo (self):
  150. lines = self.redoStack.pop()
  151. self.undoStack.push(self._content.copyValues())
  152. self._content.clear() # praznjenje dvos, spregnute liste,zbog ponovnog punjenja
  153.  
  154. for line in lines:
  155. self._content.append(line)
  156.  
  157. def encrypt(self):
  158. '''
  159. self._screen.addstr(7,1, "Broj reda?")
  160. self._screen.refresh()
  161. brReda = self._screen.getstr(7, 2+len("Broj reda?"), 2)
  162. brReda = int(brReda)
  163. '''
  164. self._screen.addstr(8,1, "Korak?")
  165. self._screen.refresh()
  166. korak = self._screen.getstr(8, 2+len("Korak?"), 2)
  167. korak = int(korak)
  168. self._screen.addstr(8,1, "Odakle?")
  169. self._screen.refresh()
  170. odakle = self._screen.getstr(8, 2+len("Odakle?"), 2)
  171. odakle = int(odakle)
  172. self.redoStack.stack.clear()
  173.  
  174. self._screen.addstr(8,1, "Dokle?")
  175. self._screen.refresh()
  176. dokle = self._screen.getstr(8, 2+len("Dokle?"), 2)
  177. dokle = int(dokle)
  178.  
  179.  
  180.  
  181.  
  182. cezar = Cezarbrat(korak)
  183. ######################################################
  184. self.undoStack.push(self._content.copyValues())
  185. ######################################################
  186. for i in range(odakle, dokle+1):
  187. self._content[i] = cezar.encrypt(self._content[i])
  188.  
  189. def decrypt(self):
  190. self._screen.addstr(7,1, "Broj reda?")
  191. self._screen.refresh()
  192. brReda = self._screen.getstr(7, 2+len("Broj reda?"), 2)
  193. brReda = int(brReda)
  194. self._screen.addstr(8,1, "Korak?")
  195. self._screen.refresh()
  196. korak = self._screen.getstr(8, 2+len("Korak?"), 2)
  197. korak = int(brReda)
  198.  
  199. shift = Cezarbrat(int(korak))
  200. self.undoStack.push(self._content.copyValues())
  201. self._content[brReda] = shift.decrypt(self._content[brReda])
  202.  
  203.  
  204.  
  205.  
  206. def process(self):#na istu foru refresh enkript za neko dugme, undo redo save load novog fajla
  207. """pri
  208. Metoda održava interakciju sa korisnikom.
  209. """
  210.  
  211.  
  212.  
  213.  
  214. while True:
  215. self._refresh()
  216.  
  217. c = self._screen.getch()
  218. if c == curses.KEY_UP:
  219. self._up()
  220. elif c == curses.KEY_DOWN:
  221. self._down()
  222. elif c == curses.KEY_LEFT:
  223. self._left()
  224. elif c == curses.KEY_RIGHT:
  225. self._right()
  226. elif c == ord('q'):
  227. break
  228. elif c == Const.LOAD:
  229. self.load()
  230. elif c == Const.SAVE:
  231. self.save()
  232. elif c == Const.ENCRYPT:
  233. self.encrypt()
  234. elif c == Const.DECRYPT:
  235. self.decrypt()
  236. elif c == Const.REDO:
  237. self.redo()
  238. elif c == Const.UNDO:
  239. self.undo()
  240.  
  241. def _content_values(self):
  242. f = open ('recenice.txt', 'r')
  243. for line in f.readlines():
  244. self._content.append(line)
  245. f.close()
  246. return self._content.values()
  247.  
  248. def init(screen):
  249. instance = CryptoCore(screen)
  250. instance.process()
  251.  
  252.  
  253. if __name__ == '__main__':
  254. curses.wrapper(init)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement