setting history now works
[CleanReadLine.git] / ReadLine.icl
index b377371..07b90ac 100644 (file)
@@ -45,7 +45,30 @@ historyGetHistoryState e
                
 
 historySetHistoryState :: !HistoryState !*env -> !*env
-historySetHistoryState hs e = abort "Not Implemented"
+historySetHistoryState {entries,offset,flags} e
+# e = initNewHistoryState offset flags (length entries) e
+# e = setItems entries 0 e
+= commit e
+       where
+               initNewHistoryState :: !Int !Int !Int !*env -> !*env
+               initNewHistoryState o f l e = code {
+                               ccall cleanInitNewHistoryState "III:V:A"
+                       }
+               setItems :: ![HistoryItem] !Int !*env -> !*env
+               setItems [] _ e = e
+               setItems [x:xs] i e
+               # e = setItem i x.line x.timestamp e
+               = setItems xs (i+1) e
+
+               setItem :: !Int !String !String !*env -> !*env
+               setItem i l t e = code {
+                               ccall cleanSetNewHistoryEntry "ISS:V:A"
+                       }
+               
+               commit :: !*env -> !*env
+               commit e = code {
+                               ccall cleanCommitSetHistory ":V:A"
+                       }
 
 //History List Management
 addHistory :: !String !*env -> !*env