Changeset 136 for NEWT0/trunk
- Timestamp:
- 02/17/09 04:50:42 (3 years ago)
- Location:
- NEWT0/trunk/src
- Files:
-
- 10 edited
-
newt_core/NewtEnv.c (modified) (1 diff)
-
newt_core/NewtFile.c (modified) (1 diff)
-
newt_core/NewtFns.c (modified) (1 diff)
-
newt_core/NewtObj.c (modified) (1 diff)
-
newt_core/NewtPrint.c (modified) (4 diffs)
-
newt_core/NewtVM.c (modified) (2 diffs)
-
newt_core/incs/NewtEnv.h (modified) (2 diffs)
-
newt_core/incs/NewtFile.h (modified) (1 diff)
-
newt_core/incs/NewtFns.h (modified) (2 diffs)
-
version.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
NEWT0/trunk/src/newt_core/NewtEnv.c
r113 r136 199 199 // for print 200 200 INITSYM(printDepth); 201 INITSYM(printIndent); 201 202 INITSYM(printLength); 203 INITSYM(printBinaries); 202 204 203 205 // for regex -
NEWT0/trunk/src/newt_core/NewtFile.c
r113 r136 759 759 return NewtExpandPath(NewtRefToString(r)); 760 760 } 761 762 763 /*------------------------------------------------------------------------*/ 764 /** Read a file and create a binary object. 765 * 766 * @param rcvr [in] receiver 767 * @param r [in] filename 768 * 769 * @return binary object containing the entire file data 770 */ 771 772 newtRef NsLoadBinary(newtRefArg rcvr, newtRefArg r) 773 { 774 if (NewtRefIsString(r)) { 775 char *filename = NewtRefToString(r); 776 FILE *f = fopen(filename, "rb"); 777 if (!f) 778 return NewtThrow(kNErrFileNotFound, r); 779 fseek(f, 0, SEEK_END); 780 size_t size = ftell(f); 781 fseek(f, 0, SEEK_SET); 782 uint8_t *data = (uint8_t*)malloc(size); 783 int err = fread(data, size, 1, f); 784 fclose(f); 785 return NewtMakeBinary(NSSYM(data), data, size, false); 786 } else { 787 return NewtThrow(kNErrNotAString, r); 788 } 789 } 790 791 /*------------------------------------------------------------------------*/ 792 /** Save a binary object to a file. 793 * 794 * @param rcvr [in] receiver 795 * @param r1 [in] binary object 796 * @param r2 [in] filename 797 * 798 * @return error code 799 */ 800 801 newtRef NsSaveBinary(newtRefArg rcvr, newtRefArg r1, newtRefArg r2) 802 { 803 if (NewtRefIsBinary(r1)) { 804 if (NewtRefIsString(r2)) { 805 char *filename = NewtRefToString(r2); 806 FILE *f = fopen(filename, "wb"); 807 if (!f) 808 return NewtThrow(kNErrFileNotFound, r2); 809 uint8_t *data = NewtRefToBinary(r1); 810 int size = NewtBinaryLength(r1); 811 fwrite(data, size, 1, f); 812 fclose(f); 813 return kNewtRefNIL; 814 } else { 815 return NewtThrow(kNErrNotAString, r2); 816 } 817 } else { 818 return NewtThrow(kNErrNotABinaryObject, r1); 819 } 820 } 821 822 -
NEWT0/trunk/src/newt_core/NewtFns.c
r113 r136 1384 1384 1385 1385 1386 /*------------------------------------------------------------------------*/ 1387 /** Create a binary object from a string containing hexadecimal numbers. 1388 * 1389 * @param rcvr [in] receiver 1390 * @param hex [in] hexadecimal number pairs 1391 * @param klass [in] class of new binary object 1392 * 1393 * @return a new binary object 1394 */ 1395 1396 newtRef NsMakeBinaryFromHex(newtRefArg rcvr, newtRefArg hex, newtRefArg klass) 1397 { 1398 if (! NewtRefIsString(hex)) 1399 return NewtThrow(kNErrNotAString, hex); 1400 1401 return NewtMakeBinaryFromHex(klass, NewtRefToString(hex), false); 1402 } 1403 1404 1386 1405 #if 0 1387 1406 #pragma mark - -
NEWT0/trunk/src/newt_core/NewtObj.c
r113 r136 1211 1211 1212 1212 /*------------------------------------------------------------------------*/ 1213 /** Make a binary object from a string of hexadecimal numbers. 1214 * 1215 * @param klass [in] new class 1216 * @param hex [in] string of hexadecimal numbers 1217 * @param literal [in] make new object a literal 1218 * 1219 * @return new binary object 1220 */ 1221 1222 newtRef NewtMakeBinaryFromHex(newtRefArg klass, const char *hex, bool literal) 1223 { 1224 uint32_t size = strlen(hex)/2; 1225 newtObjRef obj = NewtMakeBinary(klass, 0, size, literal); 1226 if (obj) { 1227 uint32_t i; 1228 const char *src = hex; 1229 uint8_t *dst = NewtRefToBinary(obj); 1230 for (i=0; i<size; i++) { 1231 uint8_t c = *src++, v = 0; 1232 if (c>='a') v = c-'a'+10; else if (c>='A') v = c-'A'+10; else v = c-'0'; 1233 c = *src++; v = v<<4; 1234 if (c>='a') v += c-'a'+10; else if (c>='A') v += c-'A'+10; else v += c-'0'; 1235 *dst++ = v; 1236 } 1237 return obj; 1238 } 1239 return kNewtRefUnbind; 1240 } 1241 1242 1243 /*------------------------------------------------------------------------*/ 1213 1244 /** バイナリオブジェクトのオブジェクトデータのサイズを変更する 1214 1245 * -
NEWT0/trunk/src/newt_core/NewtPrint.c
r113 r136 25 25 static int32_t NewtGetPrintLength(void); 26 26 static int32_t NewtGetPrintDepth(void); 27 static int32_t NewtGetPrintIndent(void); 28 static int32_t NewtGetPrintBinaries(void); 27 29 28 30 static bool NewtSymbolIsPrint(char * str, int len); … … 105 107 106 108 109 /*------------------------------------------------------------------------*/ 110 /** Get the number of tabs (or spaces if negative) for indenting. 111 * 112 * @return number of characters to indent 113 */ 114 115 int32_t NewtGetPrintIndent(void) 116 { 117 newtRefVar n; 118 int32_t indent = 1; 119 120 n = NcGetGlobalVar(NSSYM0(printIndent)); 121 122 if (NewtRefIsInteger(n)) 123 indent = NewtRefToInteger(n); 124 125 return indent; 126 } 127 128 129 /*------------------------------------------------------------------------*/ 130 /** If set, brint binary objects as well. 131 * 132 * @return 0 or 1 133 */ 134 135 int32_t NewtGetPrintBinaries(void) 136 { 137 newtRefVar n; 138 int32_t pb = 0; 139 140 n = NcGetGlobalVar(NSSYM0(printBinaries)); 141 142 if (NewtRefIsInteger(n)) 143 pb = NewtRefToInteger(n); 144 145 return pb; 146 } 147 148 107 149 #if 0 108 150 #pragma mark - … … 472 514 ptr = r; 473 515 len = NewtBinaryLength(r); 474 NIOFputs("<Binary, ", f);475 476 //477 516 klass = NcClassOf(r); 478 479 if (NewtRefIsSymbol(klass)) 517 if (newt_env._printBinaries) 480 518 { 481 NIOFputs("class \"", f); 482 NIOPrintObj2(f, klass, 0, true); 483 NIOFputs("\", ", f); 519 uint8_t *data = NewtRefToBinary(r); 520 NIOFputs("MakeBinaryFromHex(\"", f); 521 int i; for (i=0; i<len; i++) NIOFprintf(f, "%02X", data[i]); 522 if (NewtRefIsSymbol(klass)) 523 { 524 NIOFputs("\", '", f); 525 NIOPrintObj2(f, klass, 0, true); 526 NIOFputs(")", f); 527 } else { 528 NIOFputs("\", NIL)", f); 529 } 530 } else { 531 NIOFputs("<Binary, ", f); 532 if (NewtRefIsSymbol(klass)) 533 { 534 NIOFputs("class \"", f); 535 NIOPrintObj2(f, klass, 0, true); 536 NIOFputs("\", ", f); 537 } 538 NIOFprintf(f, "length %d>", len); 484 539 } 485 486 NIOFprintf(f, "length %d>", len);487 540 } 488 541 … … 911 964 int32_t depth = NewtGetPrintDepth(); 912 965 newt_env._indentDepth = depth; 966 int32_t indent = NewtGetPrintIndent(); 967 newt_env._indent = indent; 968 int32_t pb = NewtGetPrintBinaries(); 969 newt_env._printBinaries = pb; 913 970 NIOPrintObj2(f, r, depth, false); 914 971 } -
NEWT0/trunk/src/newt_core/NewtVM.c
r127 r136 3609 3609 NewtDefGlobalFunc(NSSYM(Require), NsRequire, 1, "Require(str)"); 3610 3610 3611 NewtDefGlobalFunc(NSSYM(LoadBinary), NsLoadBinary, 1, "LoadBinary(filename)"); 3612 NewtDefGlobalFunc(NSSYM(SaveBinary), NsSaveBinary, 2, "SaveBinary(data, filename)"); 3613 NewtDefGlobalFunc(NSSYM(MakeBinaryFromHex), NsMakeBinaryFromHex, 2, "MakeBinaryFromHex(hexString, class)"); 3614 3611 3615 NewtDefGlobalFunc(NSSYM(MakeNSOF), NsMakeNSOF, 2, "MakeNSOF(obj, ver)"); 3612 3616 NewtDefGlobalFunc(NSSYM(ReadNSOF), NsReadNSOF, 1, "ReadNSOF(nsof)"); … … 3674 3678 { 3675 3679 NcDefGlobalVar(NSSYM0(printDepth), NSINT(3)); 3680 NcDefGlobalVar(NSSYM0(printIndent), NSINT(1)); 3676 3681 NcDefGlobalVar(NSSYM0(printLength), NSINT(10)); 3682 NcDefGlobalVar(NSSYM0(printBinaries), NSINT(0)); 3677 3683 3678 3684 NcDefGlobalVar(NSSYM0(_STDOUT_), kNewtRefNIL); -
NEWT0/trunk/src/newt_core/incs/NewtEnv.h
r112 r136 99 99 int32_t _indent; ///< number of tabs for indenting a printout 100 100 int32_t _indentDepth; ///< base for calculating the indent depth 101 int32_t _printBinaries; ///< print binary objects so that they can be regenerated from the printout 101 102 } newt_env_t; 102 103 … … 198 199 // for print 199 200 newtRefVar printDepth; ///< printDepth 201 newtRefVar printIndent; ///< printIndent 200 202 newtRefVar printLength; ///< printLength 203 newtRefVar printBinaries; ///< printBinaries 201 204 202 205 // for regex -
NEWT0/trunk/src/newt_core/incs/NewtFile.h
r68 r136 62 62 newtRef NsExpandPath(newtRefArg rcvr, newtRefArg r); 63 63 64 newtRef NsLoadBinary(newtRefArg rcvr, newtRefArg r); 65 newtRef NsSaveBinary(newtRefArg rcvr, newtRefArg r1, newtRefArg r2); 64 66 65 67 #ifdef __cplusplus -
NEWT0/trunk/src/newt_core/incs/NewtFns.h
r68 r136 52 52 #define NcMakeFrame() NsMakeFrame(kNewtRefNIL) 53 53 #define NcMakeBinary(len, klass) NsMakeBinary(kNewtRefNIL, len, klass) 54 #define NcMakeBinaryFromHex(hex, klass) NsMakeBinaryFromHex(kNewtRefNIL, hex, klass) 54 55 #define NcPrintObject(r) NsPrintObject(kNewtRefNIL, r) 55 56 #define NcPrint(r) NsPrint(kNewtRefNIL, r) … … 119 120 newtRef NsMakeFrame(newtRefArg rcvr); 120 121 newtRef NsMakeBinary(newtRefArg rcvr, newtRefArg length, newtRefArg klass); 122 newtRef NsMakeBinaryFromHex(newtRefArg rcvr, newtRefArg hex, newtRefArg klass); 121 123 122 124 newtRef NcBAnd(newtRefArg r1, newtRefArg r2); // bytecode -
NEWT0/trunk/src/version.h
r105 r136 34 34 " --newton,--nos2 Newton OS 2.0 compatible \n" \ 35 35 " --copyright print copyright\n" \ 36 " --version print version number\n" 36 " --version print version number\n" \ 37 " --staff list of developers\n" 37 38 38 39 /// スタッフロール … … 42 43 "Contribute\n" \ 43 44 " Paul Guyot\n" \ 44 " Matthias \n" \45 " Matthias Melcher\n" \ 45 46 "\n" \ 46 47 "Special Thanks\n" \
Note: See TracChangeset
for help on using the changeset viewer.
