-
-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
prog/people-object-oop.l1com example added
- Loading branch information
Showing
1 changed file
with
160 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |