Skip to content

Commit

Permalink
prog/people-object-oop.l1com example added
Browse files Browse the repository at this point in the history
  • Loading branch information
koder77 committed Mar 26, 2023
1 parent 10f2aee commit eaf63ef
Showing 1 changed file with 160 additions and 0 deletions.
160 changes: 160 additions & 0 deletions prog/people-object-oop.l1com
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
// people-object-oop.l1com
// use . variable names to build something like a pseudo data structure like in other
// programming languages
//
// NEW: using:
// #var ~ main to be more safe!
// using object for data and functions
//
#include <intr.l1h>
#include <vars.l1h>
(main func)
#var ~ main
(set int64 1 zero 0)
(set int64 1 one 1)
// person data with person. names
(set string 256 person.first_name~ "Jane")
(set string 256 person.last_name~ "Doe")
(set string 256 person.gender~ "female")
(set int64 1 person.age~ 30)
(set double 1 person.height~ 1.80)
(set string 256 person.eye_color~ "brown")
(set string s meminitstr~ "ERROR can't init memory!")
(set string s memerrstr~ "ERROR can't allocate memory!")
(set string s saveerrstr~ "ERROR can't save to memory object!")
(set int64 1 memaddr~ 0)
(set int64 1 memind~ 0)
(set int64 1 memsize~ 1)
(set int64 1 variables~ 6)
(set int64 1 ret~ 0)
(set int64 1 f~ 0)
// include memory object variable types
#include <mem-obj-lib-types.l1h>
(zero one :mem_obj_init call)
(ret~ stpopi)
(((ret~ zero !=) f~ =) f~ if)
// ERROR can't allocate memory
print_s (meminitstr~)
print_n
exit (one)
(endif)
// allocate memory for the 6 variables
(variables~ memsize~ :alloc_obj_memobj call)
(memaddr~ stpopi)
(loadreg)
(((memaddr~ zero <) f~ =) f~ if)
// ERROR can't allocate memory
print_s (memerrstr~)
print_n
exit (one)
(endif)

// store person data in mem object using memory variable types: s_type, i_type and d_type
// going from right to left with variable types first before variable
(person.eye_color~ s_type person.height~ d_type person.age~ i_type person.gender~ s_type person.last_name~ s_type person.first_name~ s_type variables~ zero memaddr~ :save_obj_memobj !)
(ret~ stpopi)
(((ret~ zero !=) f~ =) f~ if)
// ERROR can't allocate memory
print_s (saveerrstr~)
print_n
exit (one)
(endif)
(memaddr~ :list_data->person !)
free_mod (zero)
exit (zero)
(funcend)

// get person data from mem object
(person object)
#var ~ person
(set int64 1 f~)
(set int64 1 zero~ 0)
(set int64 1 variables~ 6)
(set int64 1 memaddr~ 0)
(set int64 1 ret~ 0)
(set string s height_format~ "%.2lf")
(set string 256 person.first_name~ "")
(set string 256 person.last_name~ "")
(set string 256 person.gender~ "")
(set int64 1 person.age~ 0)
(set double 1 person.height~ 0.0)
(set string 256 person.eye_color~ "")
(set string s memobj_err_str~ "ERROR reading memobject array!")
// data pointer, make only changeable by "pointer" function to avoid memory errors
(set const-int64 1 Pfirst_name~ 0)
(set const-int64 1 Plast_name~ 0)
(set const-int64 1 Pgender~ 0)
(set const-int64 1 Page~ 0)
(set const-int64 1 Pheight~ 0)
(set const-int64 1 Peye_color~ 0)

(list_data->person func)
#var ~ person
(set int64 1 f~)
(set int64 1 zero~ 0)
(set int64 1 variables~ 6)
(set int64 1 memaddr~ 0)
(set int64 1 ret~ 0)
(set string s height_format~ "%.2lf")
(set string 256 person.first_name~ "")
(set string 256 person.last_name~ "")
(set string 256 person.gender~ "")
(set int64 1 person.age~ 0)
(set double 1 person.height~ 0.0)
(set string 256 person.eye_color~ "")
(set string s memobj_err_str~ "ERROR reading memobject array!")
// data pointer, make only changeable by "pointer" function to avoid memory errors
(set const-int64 1 Pfirst_name~ 0)
(set const-int64 1 Plast_name~ 0)
(set const-int64 1 Pgender~ 0)
(set const-int64 1 Page~ 0)
(set const-int64 1 Pheight~ 0)
(set const-int64 1 Peye_color~ 0)
// get mem address of person data
(memaddr~ stpopi)

// set pointers, use new check_pointer interrupt for pointer type checks
(person.first_name~ Pfirst_name~ pointer)
check_pointer (Pfirst_name~, byte_ptr)

(person.last_name~ Plast_name~ pointer)
check_pointer (Plast_name~, byte_ptr)

(person.gender~ Pgender~ pointer)
check_pointer (Pgender~, byte_ptr)

(person.age~ Page~ pointer)
check_pointer (Page~, int64_ptr)

(person.height~ Pheight~ pointer)
check_pointer (Pheight~, double_ptr)

(person.eye_color~ Peye_color~ pointer)
check_pointer (Peye_color~, byte_ptr)

(:Pshow_data->person !)
(funcend)
(Pshow_data->person func)
#var ~ person
(Peye_color~ Pheight~ Page~ Pgender~ Plast_name~ Pfirst_name~ variables~ zero~ memaddr~ :load_obj_array_memobj !)
(ret~ stpopi)
(((ret~ zero !=) f~ =) f~ if+)
print_s (memobj_err_str~)
print_n
(else)
print_s (person.first_name~)
print_n
print_s (person.last_name~)
print_n
print_s (person.gender~)
print_n
print_i (person.age~)
print_n
printf_d (height_format~, person.height~)
print_n
print_s (person.eye_color~)
print_n
(endif)
(funcend)
(objectend)
#include <mem-obj-lib.l1h>

0 comments on commit eaf63ef

Please sign in to comment.