My Dear Diary (update). A one Falcon code page command line diary application. (note, if you do not sqlite3_fm.dll in falcon/bin/dbi, place the file there, from falcon/bin)

124 views
Skip to first unread message

sp2012

unread,
Nov 10, 2012, 5:39:00 PM11/10/12
to falc...@googlegroups.com
directive strict=on

load regex


/////////////////////////Functions///////////////////////////


import from dbi

function prototype_table()

def table = Table([ "line_of_Text" ])
 

    return bless([
      "version" => "2.0",
      "table" =>table,
      "type" => function ()
 > "Please enter your text:"
 def line = input()
          if line.len() == 0: raise "No characters entered!"          
          return line
      end


 
      ])
end


function load_data (load_date, type)



def query = ""

if type == "entries"
query = '
SELECT 
date,
text,
id

FROM entries
WHERE id = (SELECT MIN(id) from entries AS e where e.date = entries.date)
GROUP BY 
date
 
;
 
'
else


load_date = convertDate(load_date)
query = query.join('
SELECT
date,
text

FROM entries

WHERE

date=',

"'",
load_date,

"';"
)
end


def error

try
def connection_db = dbi.connect( "sqlite3:db=diary.db" )


def result_set = connection_db.query(query)


def result_row = [ => ]
def dataToReturn = []

while result_set.fetch(result_row)
def date = revertDate( result_row[ "date" ] )
def entry = result_row[ "text" ]  
def line_result = ""
 
line_result = line_result.join(date, " ", entry)

dataToReturn +=  [ line_result ] 
      

end   
   
result_set.close()
connection_db.close()
catch dbi.DBIError in error
> "DBI failed: "
> error
end


 
return dataToReturn
 
end


function save_entry(table, save_date)

save_date = convertDate(save_date)

if table.len() == 0: raise "Your entry is empty. It cannot be saved. Write something first."

def error

def query_delete = ""
query_delete = query_delete.join("DELETE FROM entries WHERE date='", save_date , "'; ")
 
try
def connection_db = dbi.connect( "sqlite3:db=diary.db" )


connection_db.query(query_delete)
   
connection_db.close()
catch dbi.DBIError in error
> "DBI failed: "
> error
end
 

         def row_table
         
         for row_table in table
            
            > row_table[0]
def query = ""

query = query.join("INSERT INTO entries (date, text) VALUES ('", save_date ,"','", row_table[0], "'); ")

try
def connection_db = dbi.connect( "sqlite3:db=diary.db" )


connection_db.query(query)
   
connection_db.close()
catch dbi.DBIError in error
> "DBI failed: "
> error
end
            
         end


end

function reg_date(test_date)

// Regex matches real dd/mm/yyyy dates, including leap years
def date_regex = Regex( '^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$' )
 
   if date_regex.match( test_date )
       
      > "Date accepted."
       
   else
      raise "No such a date."
   end

end

function convertDate(date)

 
def date_split = date.split( "/" )

def day = date_split[0]

def month = date_split[1]

def year = date_split[2]
def new_date = year + "/" + month + "/" + day
return new_date


end

function revertDate(date)

def date_split = date.split( "/" )
def year = date_split[0]
def month = date_split[1]
def day = date_split[2]
def new_date = day + "/" + month + "/" + year
return new_date

end

////////////////////////End Of Functions/////////////////////

def sqlite_text_data = ""

sqlite_text_data = "U1FMaXRlIGZvcm1hdCAzAAQAAQEAQCAgAAAAdQAAAAAAAAADAAAAAgAAAAEAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAABA6AAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBCBAAhETA5LzExLzIwMTIwOQ=="
 

if fileType("diary.db")  == -1


> "Database file not found. Creating database."

def file_stream = OutputStream( "diary.db")
def sqlite_binary_data = Base64.decmb( sqlite_text_data )
> sqlite_binary_data
file_stream.write( sqlite_binary_data )
file_stream.close()
 

end

 

 
def protoTable = prototype_table()

>

> "My Dear Diary."


> "Version: ", protoTable.version

>

> "Enter commands, to see a list with available commands."

>

def error

while true
   
   try 
   
      def line = protoTable.type()
      
 if line == "commands"
 
   >
> "Commands are: commands, clear, exit, save DD/MM/YYYY, load DD/MM/YYYY, load entries, display ."
>
 
 
 elif line == 'clear'
 
def protoTable = prototype_table()
 
   >
> "Cleared entry."
>
 
      elif line == "exit"

    >
    > "Exited."
    break           
      
      elif line.startsWith("save")
 
  try
            def save_split = line.split (" ")                  
            
            if len(save_split) != 2: raise "Invalid arguments given to save."
reg_date(save_split[1])
         
save_entry(protoTable.table, save_split[1])
 
       >
> "Saved."    
>
    catch StringType in error       
            > "Error: ", error
         end
     
      
      elif line.startsWith( "load" )
   
try
            def load_split = line.split (" ")                  
            
            if len(load_split) != 2: raise "Invalid arguments given to load."
            
def dataReturned = []
if line == "load entries"
            
dataReturned = load_data(load_split[1], "entries")               
else
reg_date(load_split[1])
dataReturned = load_data(load_split[1], "")
end
            
            if dataReturned == []: raise "No data for that date."
            
            def row_load
            
            def row_load2
            
            def index_load = 1
            
>
for row_load in dataReturned
               
  
   > row_load
if index_load % 5 == 0
> "Press A Key And Enter To Continue Showing Your Entry."
input()
end

index_load++
               
            end
            
 
>
         catch StringType in error       
            > "Error: ", error
         end
      

 elif line == "display"
 
          > "--------Data entered.------- "
         
         def indexForDiaryShow = 1
         
         def row_table
         
         for row_table in protoTable.table
            
            > indexForDiaryShow, ". ", row_table[0]
if indexForDiaryShow % 5 == 0
> "Press A Key And Enter To Continue Showing Your Entry."
input()
end
            
            indexForDiaryShow++            
            
         end
         
         > "--------Data finished.------- "
 
 
      else
         
         protoTable.table.append( [ line ] )
         
         
         > "--------Data entered.------- "
         
         def indexForDiaryShow = 1
         
         def row_table
         
         for row_table in protoTable.table
            
            > indexForDiaryShow, ". ", row_table[0]
if indexForDiaryShow % 5 == 0
> "Press A Key And Enter To Continue Showing Your Entry."
input()
end
            
            indexForDiaryShow++            
            
         end
         
         > "--------Data finished.------- "
         
      end
      
      
   catch StringType in error
      > "Error: ", error
   end
   
end

steveno

unread,
Nov 12, 2012, 7:43:49 AM11/12/12
to falc...@googlegroups.com
This is really neat. It's nice to see someone submitting simple projects like this. They, if nothing else, provide examples to community of how to do common, yet simple tasks, like using a SQLite DB.

Giancarlo Niccolai

unread,
Nov 12, 2012, 1:41:41 PM11/12/12
to falc...@googlegroups.com
Il 12/11/2012 13:43, steveno ha scritto:
> This is really neat. It's nice to see someone submitting simple
> projects like this. They, if nothing else, provide examples to
> community of how to do common, yet simple tasks, like using a SQLite DB.

Just a fast ping to say I have read all. I am a bit late on my job
schedule because of some relevant family problem in my staff and some
ppl getting ill, so I have to do a bit of overwork till tomorrow
evening; I'll check out everything on wednesday. Hold on ;D

Gian.

Message has been deleted

Giancarlo Niccolai

unread,
Dec 19, 2012, 9:37:57 AM12/19/12
to falc...@googlegroups.com
Il 15/12/2012 16:55, sp2012 ha scritto:
> A one page simulation game by Solon Papageorgiou:
>
> function Character( player_name )
>
> return bless([
> "name" => player_name,
> "health" => 10
> ])
>
>
> end
>
> function fight_character_turn( character, criminal)
>
> char = character.clone()
>
> crim = criminal.clone()
>
> > char.name, " attacked ", crim.name , "!"
>
> if (char.health != 0) and ( crim.health != 0 )
>
> chance = random(1)
>
> if chance == 1
> crim.health = crim.health - 1
>
> > "You shoot the criminal. Criminal health is: ", crim.health
>
> if crim.health == 0
> > "You killed the criminal."
> end
>
> end
>
> fight_criminal_turn( char, crim)
>
>
> elif (char.health == 0) or (crim.health == 0)
>
> > "Death"
> end
>
> end
>
> function fight_criminal_turn( character, criminal)
>
> global outcome
>
> char = character.clone()
>
> crim = criminal.clone()
>
> > char.name, " was attacked by ", crim.name, "!"
>
> if (char.health != 0) and (crim.health != 0)
>
> chance = random(1)
>
> if chance == 1
> char.health = char.health - 1
>
> > "You have been shooted. Your health is: ", char.health
>
> if char.health == 0
> outcome = 0
> > "You died."
> end
>
> end
>
> fight_character_turn( char, crim)
>
>
>
> elif (char.health == 0) or (crim.health == 0)
>
>
> > "Death"
>
> end
>
> end
>
> function run_game(job_number, job_list, character, criminal)
>
> global outcome
>
>
> > "You are facing: ", job_list[job_number]
>
>
> > "Press a key and enter to start fight"
> input()
>
> enemies_number = random( 2, 10 )
>
> enemies_number_killed = enemies_number
>
> loop
>
> --enemies_number
>
> if enemies_number == 0
> > "Enemies killed: ", enemies_number_killed
> break
> end
>
> fight_character_turn( character, criminal)
>
> if outcome == 0
> outcome = 1
> > "Enemies faced: ", enemies_number
> break
> end
>
> end
>
> > "Original Character Health: ", character.health
> > "Original Criminal Health: ", criminal.health
> >
>
>
> // Show jobs.
>
> iter = job_list.first()
>
> while iter.hasCurrent()
>
>
>
> > iter.key() , ". ", iter.value()
>
>
>
> iter.next()
>
> end
>
> >
> > "Enter a number to do a job: "
>
> job_number = int ( input() )
>
> run_game( job_number, job_list, character, criminal )
>
> end
>
>
>
> job_list = [ => ]
> job_list [ 1 ] = "Attempt at stealing paintings from a museum."
> job_list [ 2 ] = "Attempt at robbing a bank."
> job_list [ 3 ] = "Attempt at burgaring a rich mansion."
>
> outcome = 1 //1 is Alive, 0 is Dead
>
> > "Criminal And FBI Simulation Game"
> >
> >> "Please enter a name for your character: "
>
> name = input()
>
> character = Character(name)
>
> criminal = Character("John")
>
> > "Your Name is: ", character.name
>
> > "Your Health is: ", character.health
>
> > "Press a key and enter to start fight"
> input()
>
> run_game( random(1,3) , job_list, character, criminal)
>
>
> > "Press a key and enter to exit"
> input()
>

:D

Gian
Reply all
Reply to author
Forward
Message has been deleted
0 new messages