void ring_objfile_writelist ( List *pList,FILE *fObj ) { List *pList2 ; int x,x2 ; char *cString ; char cKey[11] ; strcpy(cKey,"ringstring"); fprintf( fObj , "{\n" ) ; /* Write List Items */ for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { pList2 = ring_list_getlist(pList,x); fprintf( fObj , "[T]\n" ) ; for ( x2 = 1 ; x2 <= ring_list_getsize(pList2) ; x2++ ) { if ( ring_list_isstring(pList2,x2) ) { fprintf( fObj , "[S][%d]" , ring_list_getstringsize(pList2,x2) ) ; /* Encrypt String */ cString = ring_list_getstring(pList2,x2) ; ring_objfile_xorstring(cString,ring_list_getstringsize(pList2,x2),cKey,10); fwrite( ring_list_getstring(pList2,x2) , 1 , ring_list_getstringsize(pList2,x2) , fObj ); /* Decrypt String */ ring_objfile_xorstring(cString,ring_list_getstringsize(pList2,x2),cKey,10); fprintf( fObj , "\n" ) ; } else if ( ring_list_isint(pList2,x2) ) { fprintf( fObj , "[I]%d\n" , ring_list_getint(pList2,x2) ) ; } else if ( ring_list_isdouble(pList2,x2) ) { fprintf( fObj , "[D]%f\n" , ring_list_getdouble(pList2,x2) ) ; } else if ( ring_list_ispointer(pList2,x2) ) { fprintf( fObj , "[P]%p\n" , (void *) ring_list_getpointer(pList2,x2) ) ; } else if ( ring_list_islist(pList2,x2) ) { fprintf( fObj , "[L]\n" ) ; ring_objfile_writelist(ring_list_getlist(pList2,x2) ,fObj); } } fprintf( fObj , "[E]\n" ) ; } fprintf( fObj , "}\n" ) ; }
void ring_vm_restorestack ( VM *pVM,List *pList ) { int x ; List *pList2 ; pVM->nSP = 0 ; if ( ring_list_getsize(pList) == 0 ) { return ; } for ( x = ring_list_getsize(pList) ; x >= 1 ; x-- ) { if ( ring_list_isstring(pList,x) ) { RING_VM_STACK_PUSHCVALUE(ring_list_getstring(pList,x)); } else if ( ring_list_isnumber(pList,x) ) { RING_VM_STACK_PUSHNVALUE(ring_list_getdouble(pList,x)); } else if ( ring_list_islist(pList,x) ) { pList2 = ring_list_getlist(pList,x); RING_VM_STACK_PUSHPVALUE(ring_list_getpointer(pList2,1)); RING_VM_STACK_OBJTYPE = ring_list_getint(pList2,2) ; } } }
void ring_vm_refmeta_getattribute ( void *pPointer ) { List *pList ; char *cStr ; int x ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_ISLIST(1) && RING_API_ISSTRING(2) ) { pList = RING_API_GETLIST(1) ; if ( ring_vm_oop_isobject(pList) ) { pList = ring_list_getlist(pList,RING_OBJECT_OBJECTDATA); cStr = RING_API_GETSTRING(2) ; ring_string_lower(cStr); for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { if ( strcmp(ring_list_getstring(ring_list_getlist(pList,x),RING_VAR_NAME),cStr) == 0 ) { pList = ring_list_getlist(pList,x) ; if ( ring_list_isnumber(pList,RING_VAR_VALUE) ) { RING_API_RETNUMBER(ring_list_getdouble(pList,RING_VAR_VALUE)); } else if ( ring_list_isstring(pList,RING_VAR_VALUE) ) { RING_API_RETSTRING2(ring_list_getstring(pList,RING_VAR_VALUE),ring_list_getstringsize(pList,RING_VAR_VALUE)); } else if ( ring_list_islist(pList,RING_VAR_VALUE) ) { RING_API_RETLIST(ring_list_getlist(pList,RING_VAR_VALUE)); } return ; } } RING_API_ERROR("Error : Property is not found!"); } else { RING_API_ERROR(RING_API_BADPARATYPE); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }