From 987c93d83d803d0203e90a70adbeca44722d628b Mon Sep 17 00:00:00 2001 From: german Date: Wed, 4 Mar 2026 16:52:47 +0400 Subject: [PATCH] Code rewiev 1 --- asm-savers.h | 122 ++++++++++++++++++ ntsys | Bin 27064 -> 26744 bytes ntsys-assembler.h | 307 ++-------------------------------------------- out.exe | Bin 21 -> 0 bytes 4 files changed, 129 insertions(+), 300 deletions(-) create mode 100644 asm-savers.h diff --git a/asm-savers.h b/asm-savers.h new file mode 100644 index 0000000..b69683a --- /dev/null +++ b/asm-savers.h @@ -0,0 +1,122 @@ +#if (!defined(NTSYS__S_ASSEMBLER_H___)) +#define NTSYS__S_ASSEMBLER_H___ + +#define create_ntsys_asm_save(ss) ((ntsys_asm_save_t){(ss), (ss)}) +#define create_ntsys_asm_cache(ss) ((ntsys_asm_cache_t)&(ss)) +#define ntsys_asm_arg_new(str, __cache) ((ntsys_get_arg((__cache))) && ((str) = __cache->string)) + +#define __READ_FILE_WITH_EOF_OR_LN ((c = getc(fp)) != EOF && c != '\n' && c != '\r') +#define is_space(c) (c >= 0 && c <= 32) +#define __SPACE_SHIFT while (is_space(st[pos])) { pos ++; } +#define __NEXT_ARG {__e_byte_t isStr = 0;while (!is_space(st[save]) || isStr == 1) { if (st[save] == '"' && st[save - 1] != '\\') {isStr = !isStr;}save ++; }}while (is_space(st[save])) { save ++; }{size_t n_p = save;__e_byte_t isStr = 0;while (!is_space(st[n_p]) || isStr == 1) { if (st[n_p] == '"' && st[n_p - 1] != '\\') {isStr = !isStr;}n_p ++; }st[n_p] = '\0';} +#define get_mem_pos() *mem_pos = ftell(fp) == 0 ? 0 : ftell(fp) - 1; + +char* ntsys_get_str(char* ptr, FILE* fp) { + if (ptr != NULL) { + free(ptr); + } + unsigned long len = 0; + int c; + { + unsigned long save_ptr = ftell(fp); + while (__READ_FILE_WITH_EOF_OR_LN) { + len ++; + } + fseek(fp, save_ptr, SEEK_SET); + } + if (len == 0) return NULL; + ptr = malloc(len); + if (ptr == NULL) { + ntsys_error("Out of memory!"); + return NULL; + } + len = 0; + while (__READ_FILE_WITH_EOF_OR_LN) { + ptr[len] = c; + len ++; + } + ptr[len] = '\0'; + return ptr; +} + +typedef struct { + char* string; + char* cache; +} ntsys_asm_save_t; + +typedef ntsys_asm_save_t* ntsys_asm_cache_t; + +static void __str_slice(char* str) { + size_t i = 1; + while (i < strlen(str)) { + str[i - 1] = str[i]; + i ++; + } + str[strlen(str) - 1] = '\0'; +} + +char* ntsys_get_arg(ntsys_asm_cache_t save) { + char* str = save->cache; + while (1) { + if (!is_space(str[0]) || str[0] == '\0') { + break; + } + str ++; + } + { + size_t n_p = 0; + __e_byte_t isStr = 0; + while (1) { + if (str[n_p] == '"' && str[((n_p == 0) ? 1 : 0) - 1] != '\\') {isStr = !isStr;} + if ((is_space(str[n_p]) && isStr == 0) || str[n_p] == '\0') { + break; + } + n_p ++; + } + save->cache = &str[n_p + 1]; + str[n_p] = '\0'; + } + if (strlen(str) == 1 || strlen(str) == 0) { + str = NULL; + save->string = NULL; + return NULL; + } + if (str[0] == '"') { + str ++; + if (str[strlen(str) - 1] != '"' || str[(strlen(str) < 2 ? 2 : strlen(str)) - 2] == '\\') { + ntsys_error("No close of string!"); + str = NULL; + save->string = NULL; + return NULL; + } else { + str[strlen(str) - 1] = '\0'; + size_t i = 0; + while (i < strlen(str)) { + if (str[i] == '\\') { + __str_slice(&str[i]); + switch (str[i]) { + case '0': str[i] = '\0'; break; + case 'a': str[i] = '\a'; break; + case 'b': str[i] = '\b'; break; + case 't': str[i] = '\t'; break; + case 'n': str[i] = '\n'; break; + case 'v': str[i] = '\v'; break; + case 'f': str[i] = '\f'; break; + case 'r': str[i] = '\r'; break; + default: + ntsys_error("Unknown ident!"); + str = NULL; + save->string = NULL; + return NULL; + break; + } + } + i ++; + } + } + } + save->string = str; + return str; +} + +#endif \ No newline at end of file diff --git a/ntsys b/ntsys index b57339c7cffb0b2b0c2f015cdd19da8ac43e7b0f..fc8c00a2f98abb2855cffeb5acd4837d54b95381 100755 GIT binary patch literal 26744 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 KWl%7%%Krwq^mw!Y literal 27064 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Ξ||lyIWsAQ^_IAMy%gczXj0fMJN5Ox8-Y$>ChJ9ok@h=4QQ|v5=rO~hE+Vm)AqKQXpt0&H2=UenQFZRD;8up7ja<*U z5U4nSG?gOF7t>BvvhpNB5_fQgV|XOj^dCs6-T5I(3O+Zm7;gC|N`gufMRA}m!IeBi zN~%TS1K&cyAESuL>H}O7^}8P-BzT%6&xR!SC1CJ}!7_ti%}XHU69X84qiQ{3C#%bF zH`MDW;p;RmcdOSRe2H3(dqlm8@a-I*j4+CKDTtw7L=nGadd^1Bq81UbkxQO|@bN1m zs)evH6FPncxzbgJdIW()2bcRB!pA4RfqO*#EAA-rCm_@>6ZdnG=a|T5Ch{ciiD^vT zqXP zv8@>O@ctvkJB*W9&35B8CQDh-lb9Zt>j2VcyUup4Z5bwyCD?Uoau~Oj6gZ5fCAkfb zXwJk*(B&}fCCf2O(39++Q5c8u1s>+(OM183BP zA-$5MX&Z0GKK){B4;CrG6XOG~JGu`1o+{)OwDWhpMqQ&Zto zv4)bGXXtf~%Q)pSKCG=c62Ancb{WaI?=UNUV07X!#LM-sYepQ8KLF<7$>1`Vk(d)H zywn+b-V!`n9XPbhKB@+)zKBmlVq5UGVab_V_!Xx9Fu`qrv8NIqkD@z6y9@DJ;(jW| zi~+4HfPUwQ-d2(uZ=#%OKM!UIEO111viC5s(WNEJ8yu4hnbEbbeZ$FkJDcc9(YDg| zU7LHy2Gk&ND-E4u|9qDn&6@ZtdZMro%V8MhfE~5IN3dOZ1h2QK{XsT~LxMECkLQJCUq08f8=Hp70)3dRGUuv5e?^bP zv5^=WD9}gRW)=<)^l$6UIb(N?)(zLt;TmJf8lmU2oHLGST~@Sng5D;f{HO-g`%l-y zc!yP%Rpl5}Wxnw))uw>^iPV#-%O_u}3+vB#9-+ss5=ZR1EG+b#v7FIJI$jG~G5>1a zN>!&8z8hAls?)+pL4&uI6#wa&5!5o_9E?Mbm|jxuGG24+wwIIxRpPh2M-F8#sl@hW zNpTe(hUq)a+WOl`3sxWxGtP%QJ!QFwVx>WIjU(zR$#ukTE2(@2nJdpBffA2GU1D#_ z|50A}`ek_Ii|!tO`w;JsFG3RVL;>#>Fge zfx>!-*jRyw5Szv162AqDCbDXGcEBpEJ+$yT80;CSf=YMx{8-_*L_H!YRSusm{)OC( zH3-&L;~-sy)!G0x$uTV)f^5PI2|gq|_AWVT+>$tkM-rYDJx+UYLCStEl=W@lU><=RB=`si$?M~{N-)O3Q3N&$ zFu^AQ^z^N{gfEczN;WwVjxk?}PnUQtaBi9_QxZ3jM4^NEv;Ix)1L|^Pnuz1@lo8Vqtg-vt+8XQBk?zI1;>Ja4ao0c&tLPvk*&u#cP4Do$%wG{_yEB3nJA;k^@7Oyq_O71erVZ02F=_|0sS}l$%OK*Uv z(>UV4)e$Z1L#v0;>J>dM<6Y+L@mACgZy07l%4J}uw5l)u(c9GL16wg6UB(h8Se?^D zh6{~f%v$;CSe1iZVN$#ndZ^TYO5BcR6@`v&J&M96ykId!zKCW-?miIN8;>EM#1_1J zBI#pW*)#bSBJpQiKcmEx1Us;GfY@`v#z!IQoEkQ-`r5Zby_8uTE&@ zrDs{k?wk_jtJqjm_7%$cH8e02TPNs@PJB7Scqd+kbfJM{;6pIA74Ks`b@f}xBxdsI z@h1>~Md=Y8xu{QGifa4_7{WhB7}NKByvZET`{PzCq~fqbZVDW&Z>H?IaZzRS~Tcj2%G_I=&@z_QVoy=bwhptzAhitoQDd~qU ztelNc;;((irjf30q40}0(DZfG$6`ejFxbGf%hCCzXB>Q!3Ll0reDz304^?{%+S{{>O;O@I+zN8x)ZjLQ50lvb-xf$|k1mgQoF7%0c; zusCCNh~flL4islEMlD$!CyK)tdp+?Osf`si@N=ox&(-)38Uw4^u;4xUgFf1CyEC6myo{8>xuqD^x&Y^8B9qiLl-k!{Wi zeRMsuN|^S7(VSb)K#JJ3S1@_F zNszT0NA1Qj216*ygyI?^(#AWJ3XioF;$Vf5;Ns7r_^=_&$IQrW_%1AmAqF=5$+sZ$ z(Lqu&%@1@dJV)8BZbpzUXn7pLxPxq?{+NU8oz)%DJrk(V}}O9^Zt- z)>cV2b%kmx5PHj@EVdi()*8KwQA69e;|A2tuipt1T0`nQ$XMo3ySR+w*uC5X8^z~A z0xn67cpdcAkY?;x3TKE{vRZu@uc4C1s((jG3Rx|x|422W_^A2`f+%kv2$lDa>oFd< zq9|`-6mOMAq=PMI4NJ8Oi)O77e+v2%N55jtcMK8`EJ_Q;@1y7{u4fyMKCTKq@lJ}o z0Fm+MUc=mwo*Xc)QGZ>6FM?@zo{!d#U3bb6o10sKFBf1T{%V2k*~Ksy&AYLpFQFE% z*`Gz5;EM;+zruU=9l@722aj_;R?weU}XxQtiv z?TZzO(i3u=j}@)q^~{&`#E5b?>c@sIddU<-I@qcDYRJXIuhMw9Vh7tsusv%-6x(n_ z{I_!v-@xMg-WE}1XdLE8%=(E7_}E>@b9@L(7};;mM~;1WY2ANk#XEH}ndIL|B+r9K ziErIfNxr$hvA{PL_{IYNcP&7_0vxlVqP0!;uk+8ej#)9IqIIHw%!=~X5z2x>%AR%b9>u`%3S;~)7sW#>(3q)ir+%|tc}er5MNuTEDRv7(c0>5ZTGFaQ1R6b zO2EbDLfGoZZ#b=VO>7BR%R48wU}Zg@rIJw-84kE1(ArT}hhKnZ=1ri;c9GBP_gg(} z>#R3<*I9KKq`ghYuf@G(Wn~I}U|Qzw^ePo)uatsXyk)xFkspB2BGrJtc%kw1Qw zDoToZ4L^v5z36wbRxz-MH7_zUB<%Rv@r^)1FpZx#x`T1$e8v=Hd314F3&2^k* zioaO!g@W#eO{ghnI~Uj%f5%$e8ffw8Xqr;1%Q>fZ!IE0*yhSeSwU>_|Q(rsZ+K9N; z=6WA&PfqP0vCNO&HuGHYoQ6};5yZ)#r) zM~8n=1WR99y2k7ClNUj3jg%3Xkf7or)BYxS^0$OB2S6jBqp%j<2x%rFd^L zxe9Vhe!<-Q;;XfhYjcCjRp-sP&NE?U^W79 z5tf5;Yy|dWhH$JHSPA@vUOm!9a+d|Nk|WkJqz{>RCH7>poFkR^KMbg|U4h>qh0f4OkFZrVTa#yUm3C z3|OZLdm5N-!l+MnWMJ6jRH%Qp0DFV{o!QTpw%-L=8TRAtQhHEbQVCLo*d_QY;e(~Mev-7R7oZ0!4?ow^} z<#!IV z&Nh)d9wvkyY^RZ{Z{D#J}mfguDnd+PC|6L2n z^GW1+B-Ffg?dC)oB`9lDgz1GHU15BkjjnS!Nu7H#M)2eZbjkiB&p)9tmM$5OFQU=% zL)lDzi%U#z%0_G{(Itq|E8^uN!5mRgIW84*aRuMv7<7qbO0k>6)Ya%35b0@NqYHbC z>^eu#UZGgxO`^cE+?_(P^lzE}IFVk;eVOF-Lv{>0CHP_?fDJTOe`)uA!M`aoJ|TFi zSE&C#M&x;GW`*T6(BrBRbdjK|1nm$sDCh=3Hwn5~&>lhe3EC@Yzo0l2iCqPPS_Lf^ zv_{ZHg02#@Lr|XjpTFm>I=yU1z~59|UOsclOnXY8qrIcLykh2(6o3H9mGP~B>hdXR zVR=4JP&kx4e@C9TBhS~7=jq7vbL4qB@_Zb59*#W!MxJ*g&$p51*~s&2Qs>o7;H8x3 z(ewyDb>2(~k1r5Zo*yI6i`gVPPOqTy{Fixi=FGHCT2>cm(*xFu%WrYy9GX261at%tu9pTdcHt=-K!G~~ZN4XZACve%may`00 z;L`qk!P7-fMtY>(A7!Ybcm!T923oc*1?CmF^aHt`xl!QKFXZ^xCh!enKxXSwV7Cig z`k&O(C2;AF62D8}(my4BkHDqBO8fzVOaGPlCV>}RfB-JG4h8)cK4b^!zq0&~3talM z)boVEdxgJC{3(IU{vh$+3!FU=AuRFd1TOoB#C3sNMZaO|QD8d-F8jBX-y`*0f&eaw z{~2NCKPG&iz~y)#XXGtc5(tE7a;Rk`!d3_r^Tv*QM9|N~$q?bY3pE%ul zfK?dRth7p6B_%mM2Km$FJBHyH2gHEH*7Hbm$q@2YLVlI-EB0&x`NhCbcivzF@B);l zQq)V9>ZT#|-%fbenW^=jln)Ofe?M@_cazYcBN9A5ggkx6faD`4`L~CVKRN`S4LhIC zo<+b(f2Ytd+i|kMH=6L7z{x(!Dp^xb=K(*R{+uE3>xaN;Kgl{+HREm_LjG>xXJ(zN znAa^25{`N`naWS==rgILH9Qk(|E)}afl?qQH1^C1k^MqX(4^->CeL+b-cK_5bCp%A zIC@Y-<|892&nlCi@xbZS*3AN!y1oVcEX0)KXCHL2=St8TmTy7oTxPb11^f!8|6Iko z3Jk6)P8288BbW@bVhCIZPUWdFm1hc*$GSo^vRu~(htTuD5ID_aRIeJ*ALaAUmLcR{ z08Z^|?vJkyA>R+&no&;~9DxU?@si1)6M>(Vg{L^V-WG9_3D1y|!7AX?j*pqz@oItJ zC2$mjT`L9NVUkyt)cf>`vUVKf>8WdW>z>sL+qN&OXG>@WYikyu15fDyQ@6iE!8SIL zHr>6tU2j)feGL@G+c2edtxu(pT zL!$mBA15tD+8KivJj8So=MHqZ8}J^_?Y&uP!za+85DVJoWg)NPX}~+YK%Ihj6-q<% z8n;hDo&0(L-xR4=(x;ZX^;S1t5w>~#sBA;Kdv!~Dou|d!fY%#-wx5wx6taIa~qHi4zcEx)!H{QXuu0xUx&J9U@kf_@|cQIakxN8^K-8d%I z{vEsq!B5xSZXB)bu62l5hkdc)p66OP+vajFoI7_(?Nawr+iX{@o6eB+*2q&^*`ciF zlVMY_IK9>FX3glXgB83!H@#*2Z%=W>xwd#Ske%UWoy$82F`bl)G&l*^B+=k+cQ?WRaj>qxsbRJM#?=k}8|mhzm$C3%=R#x&3%dh; zFZB}iGq-pR<;L471!b@JdfEA5!h`Z^Z2P*Hzp zV%fVgPf|`vvApRd~?1!tDH*2dKz_Rc6{?-IMYc@?&0phcbxy}MJe;IYt=nDrdF- zIi>vu3qDwOva1;D6S^do`ccXO?o3(*6kT*-BpS z+e*4fL8eQ8PMJ~pMNG-mrf42*0d z^{3W>Vm&DL>mkA}bNfF8G&8+bq?2@&$>1V7mCd83^g*$2E2)&{xu=(@65nh}zd@vz zH1l0F>5%CprTw1F^2_zTq>oIZROw5mlgL&CGSkcV9+JxUAyVFKzvo4I+5Sq6kQB5N z>*vf%wx7iQf&k?&)64x1N$I;4nU^{LHxQYbe&1X!Eh&B9AoDWk{{bRtPfECHYM)2` zoe{IVw{N+B7{JSyqUYsuKe{{)ovK@a7 zj6`I5`5vfvAxY!A7M!H+GQFh3kT^5FvPy_9;= 0 && c <= 32) -#define __SPACE_SHIFT while (is_space(st[pos])) { pos ++; } -#define __NEXT_ARG {__e_byte_t isStr = 0;while (!is_space(st[save]) || isStr == 1) { if (st[save] == '"' && st[save - 1] != '\\') {isStr = !isStr;}save ++; }}while (is_space(st[save])) { save ++; }{size_t n_p = save;__e_byte_t isStr = 0;while (!is_space(st[n_p]) || isStr == 1) { if (st[n_p] == '"' && st[n_p - 1] != '\\') {isStr = !isStr;}n_p ++; }st[n_p] = '\0';} -#define get_mem_pos() *mem_pos = ftell(fp) == 0 ? 0 : ftell(fp) - 1; +#include "asm-savers.h" -static char* get_str(char* ptr, FILE* fp) { - if (ptr != NULL) { - free(ptr); +int ntsys_asm_from_string(size_t* mempos, char* str, FILE* fp) { + ntsys_asm_save_t __save = create_ntsys_asm_save(str); + ntsys_asm_cache_t __cache = create_ntsys_asm_cache(__save); + while (ntsys_asm_arg_new(str, __cache)) { + puts(str); } - unsigned long len = 0; - int c; - { - unsigned long save_ptr = ftell(fp); - while (__READ_FILE_WITH_EOF_OR_LN) { - len ++; - } - fseek(fp, save_ptr, SEEK_SET); - } - if (len == 0) return NULL; - ptr = malloc(len); - if (ptr == NULL) { - ntsys_error("Out of memory!"); - return NULL; - } - len = 0; - while (__READ_FILE_WITH_EOF_OR_LN) { - ptr[len] = c; - len ++; - } - ptr[len] = '\0'; - return ptr; -} - -/* - * XX - шестнадцатиричное число - * :S - тип данных - * :D - сами данные (или метка) - * - * ------------------ Формат ------------------- - * - * имя_комманды=описание - * - */ - -char __fun_names_ntsys[][20] = { - "push=00:S:D", - "pop=01:S", - "push.string=02:D" -}; - -static size_t __index_of(char* arr, char c) { - size_t i = 0; - while (i < strlen(arr)) { - if (arr[i] == c) break; - i ++; - } - return i; -} - -word_t* shfdiyde_labels = NULL; -char** shdgsjgdsjjgds_names = NULL; -size_t sfdfshgshgfs_lb_pos = 0; -#define labels_names shdgsjgdsjjgds_names -#define labels shfdiyde_labels -#define lb_pos sfdfshgshgfs_lb_pos - -int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { - if (st == NULL) { - ntsys_error("Null Pointer Exception!"); - return EXIT_FAILURE; - } - size_t len = strlen(st); - size_t pos = 0; - __e_byte_t isStr = 0; - while (pos < len) { - size_t sP = pos; - if (pos == 0) sP = 1; - if (st[pos] == '"' && st[sP - 1] != '\\') { - isStr = !isStr; - } - if ((st[pos] == '#' || st[pos] == ';') && isStr == 0) { - st[pos] = '\0'; - break; - } - pos ++; - } - if (isStr == 1) { - ntsys_error("Find no close string!"); - return EXIT_FAILURE; - } - isStr = 0; - len = strlen(st); - pos = 0; - { - __SPACE_SHIFT; - size_t save = pos; - while (!is_space(st[pos])) { pos ++; } - st[pos] = '\0'; - size_t arr_len = sizeof(__fun_names_ntsys) / sizeof(__fun_names_ntsys[0]); - size_t i = 0; - while (i < arr_len) { - char eq[20]; - strcpy(eq, __fun_names_ntsys[i]); - size_t par_pos = 0; - { - size_t u = 0; - size_t d = strlen(__fun_names_ntsys[i]); - while (u < d) { - eq[u] = __fun_names_ntsys[i][u]; - if (eq[u] == '=') { - eq[u] = '\0'; - par_pos = u + 1; - break; - } - u ++; - } - } - char* h = (st + save); - if (h[strlen(st + save) - 1] == ':') { - get_mem_pos(); - h[strlen(st + save) - 1] = '\0'; - labels_names[lb_pos] = h; - labels[lb_pos++] = ((word_t)*mem_pos + 1); - break; - }; - if (strcmp((st + save), eq) == 0) { - size_t d = strlen(__fun_names_ntsys[i] + par_pos); - size_t p = 0; - __e_byte_t data_type = 1; - while (p < d) { - char* str = &__fun_names_ntsys[i][par_pos]; - if (str[p] == ':') { - p ++; - switch (str[p]) { - case 'D': - { - __NEXT_ARG; - __e_byte_t sys_cnt = 10; - __e_byte_t is_str = 0; - if (st[save] == '"') { - is_str = 1; - size_t f = 0; - save ++; - while (1) { - if (st[save + f] == '"' && st[save + f - 1] != '\\') { - putc('\0', fp); - break; - } - if (st[save + f] == '\\' && st[save + f - 1] != '\\') { f ++; continue; } - if (st[save + f - 1] == '\\') { - switch (st[save + f]) { - case '0': - putc('\0', fp); break; - case 'a': - putc('\a', fp); break; - case 'b': - putc('\b', fp); break; - case 't': - putc('\t', fp); break; - case 'n': - putc('\n', fp); break; - case 'v': - putc('\v', fp); break; - case 'f': - putc('\f', fp); break; - case 'r': - putc('\r', fp); break; - case '\\': - putc('\\', fp); break; - default: - ntsys_error("Unknown ident!"); - return EXIT_FAILURE; - } - } else { - putc(st[save + f], fp); - } - f ++; - } - } else if (st[save + 1] == 'x' && !is_space(st[save])) { - sys_cnt = 16; - } else if (st[save + 1] == 'b' && !is_space(st[save])) { - sys_cnt = 2; - } - if (is_str == 0) { - char* eq__ = &st[save]; - if (data_type == 0xCB) { - unsigned int __f = 0; - __e_byte_t is_stdfdf = 0; - while (__f < lb_pos) { - printf("Name \"%s\" equals test to \"%s\"\n", labels_names[__f], eq__); - if (strcmp(&labels_names[__f][0], eq__) == 0) { - fwrite((__e_byte_t*)((word_t*)&labels[__f]), 1, sizeof(word_t), fp); - is_stdfdf = 1; - break; - } - __f ++; - } - if (is_stdfdf == 0) { - ntsys_error("Invalid ident!"); - return EXIT_FAILURE; - } - } else { - if (sys_cnt != 10) { - save += 2; - } - char* arr = NULL; - long cnt = strtol(&st[save], &arr, sys_cnt); - switch (data_type) { - case 0x01: fwrite((__e_byte_t*)((byte_t*)&cnt), 1, sizeof(byte_t), fp); - break; - case 0x02: fwrite((__e_byte_t*)((word_t*)&cnt), 1, sizeof(word_t), fp); - break; - case 0x04: fwrite((__e_byte_t*)((dword_t*)&cnt), 1, sizeof(dword_t), fp); - break; - case 0x08: fwrite((__e_byte_t*)((qword_t*)&cnt), 1, sizeof(qword_t), fp); - break; - case 0xF1: fwrite((__e_byte_t*)((sbyte_t*)&cnt), 1, sizeof(sbyte_t), fp); - break; - case 0xF2: fwrite((__e_byte_t*)((sword_t*)&cnt), 1, sizeof(sword_t), fp); - break; - case 0xF4: fwrite((__e_byte_t*)((sdword_t*)&cnt), 1, sizeof(sdword_t), fp); - break; - case 0xF8: fwrite((__e_byte_t*)((sqword_t*)&cnt), 1, sizeof(sqword_t), fp); - break; - } - } - } - } - break; - case 'S': - { - __NEXT_ARG; - if (strcmp(&st[save], "byte") == 0) { - data_type = 0x01; - } else if (strcmp(&st[save], "word") == 0) { - data_type = 0x02; - } else if (strcmp(&st[save], "dword") == 0) { - data_type = 0x04; - } else if (strcmp(&st[save], "qword") == 0) { - data_type = 0x08; - } else if (strcmp(&st[save], "sbyte") == 0) { - data_type = 0xF1; - } else if (strcmp(&st[save], "sword") == 0) { - data_type = 0xF2; - } else if (strcmp(&st[save], "sdword") == 0) { - data_type = 0xF4; - } else if (strcmp(&st[save], "sqword") == 0) { - data_type = 0xF8; - } else if (strcmp(&st[save], "db") == 0) { - data_type = 0xCB; - } else { - ntsys_error("Incorrect datatype!"); - return EXIT_FAILURE; - } - if (data_type != 0xCB) { - fputc(data_type, fp); - } else { - fputc(0x02, fp); - } - } - break; - } - } else { - char* hx = "0123456789ABCDEF"; - __e_byte_t hex = (__index_of(hx, str[p + 1])) | (__index_of(hx, str[p]) << 4); - fputc(hex, fp); - p ++; - } - p ++; - } - break; - } - i ++; - } - } - get_mem_pos(); return EXIT_SUCCESS; } @@ -305,37 +36,13 @@ int ntsys_compile_asm(char* filename, char* asm_out) { } } rewind(fp); - labels = malloc(sizeof(word_t) * lb_size); - labels_names = (char**)malloc(sizeof(char*) * lb_size); - unsigned int count = 0; - while (count < lb_size) { - labels_names[count] = (char*)malloc(sizeof(char) * NTSYS_MAX_LABEL_LENGTH); - count ++; - } - while ((st = get_str(st, fp)) != NULL) { + while ((st = ntsys_get_str(st, fp)) != NULL) { if (ntsys_asm_from_string(&mem_pos, st, fw) != EXIT_SUCCESS) return EXIT_FAILURE; } - count = 0; - while (count < lb_size) { - free(labels_names[count]); - count ++; - } - free(labels_names); - free(labels); free(st); fclose(fp); fclose(fw); return EXIT_SUCCESS; } -#undef __READ_FILE_WITH_EOF_OR_LN -#undef __SPACE_SHIFT -#undef is_space -#undef __NEXT_ARG -#undef get_mem_pos -#undef labels -#undef labels_names -#undef lb_pos -#undef NTSYS_MAX_LABEL_LENGTH - #endif /* NTSYS_ASSEMBLER_H___ */ \ No newline at end of file diff --git a/out.exe b/out.exe index 56ae7755181d40e5b8257aa884a0bb6764f259a4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 21 ccmZSbNX^N~*HI|XFUm<#