From 34d8d0a6d86334d540191d81e79df87c70f61263 Mon Sep 17 00:00:00 2001 From: german Date: Thu, 5 Mar 2026 18:07:12 +0400 Subject: [PATCH] Labels positioner --- asm-savers.h | 31 +++++++++++++++++++++++-------- ntsys | Bin 27160 -> 27160 bytes out.exe | Bin 4 -> 7 bytes 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/asm-savers.h b/asm-savers.h index 22c8d1c..901cc1b 100644 --- a/asm-savers.h +++ b/asm-savers.h @@ -3,7 +3,7 @@ #define ntsys_exit_if_error(parser) if (!ntsys_asm_arg_new((parser)->string, (parser)->cache)) #define ntsys_run_asm_parser(ss) __ntsys_arg_function_loader(&(ss)) -#define create_ntsys_asm_parser(cache, fp, str, table, table_size, labels) ((ntsys_argument_parser_t){(cache), (fp), (str), (table), (table_size), (labels)}) +#define create_ntsys_asm_parser(cache, fp, str, table, table_size, labels) ((ntsys_argument_parser_t){(cache), (fp), (str), (table), (table_size), (labels), NULL, 0, 0}) #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)) @@ -136,6 +136,9 @@ typedef struct { char** table; size_t table_length; char** labels; + word_t* labels_positions; + size_t labels_count; + byte_t is_rewrite; } ntsys_argument_parser_t; static void __input_datatype(ntsys_argument_parser_t* parser, byte_t* mode) { @@ -173,7 +176,19 @@ static void __input_datatype(ntsys_argument_parser_t* parser, byte_t* mode) { } static void __write_label(ntsys_argument_parser_t* parser) { - + if (parser->is_rewrite == 0) { + putc('E', parser->fp); + putc('F', parser->fp); + return; + } + size_t i = 0; + while (i < parser->labels_count) { + if (strcmp(parser->string, parser->labels[i]) == 0) { + fwrite(&(parser->labels_positions[i]), 1, sizeof(word_t), parser->fp); + return; + } + i ++; + } } static void __input_data(ntsys_argument_parser_t* parser, byte_t* mode) { @@ -226,12 +241,12 @@ static void __input_data(ntsys_argument_parser_t* parser, byte_t* mode) { } -static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t mode) { +static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t* mode) { if (str[0] == ':') { if (str[1] == 'T') { - __input_datatype(parser, &mode); + __input_datatype(parser, mode); } else if (str[1] == 'D') { - __input_data(parser, &mode); + __input_data(parser, mode); } } else { byte_t x = strtol(str, NULL, 16); @@ -242,8 +257,9 @@ static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t mode) static int select_argument(ntsys_argument_parser_t* parser) { size_t i = 0; + byte_t internal = 0x00; char* str = parser->string; - if (str[strlen(str) - 1] == ':') { + if (str[strlen(str) - 1] == ':' && !parser->is_rewrite) { /* TODO: Добавить метки */ return EXIT_SUCCESS; } @@ -259,12 +275,11 @@ static int select_argument(ntsys_argument_parser_t* parser) { buf[t] = '\0'; if (strcmp(str, buf) == 0) { char* se = &table[i][t + 1]; - byte_t internal = 0x00; while (strlen(se) > 1) { char is[3]; strncpy(is, se, 2); is[2] = '\0'; - if (__arg_writer(is, parser, internal) == EXIT_FAILURE) { + if (__arg_writer(is, parser, &internal) == EXIT_FAILURE) { ntsys_error("Internal program error!"); return EXIT_FAILURE; } diff --git a/ntsys b/ntsys index b733fdb9fc94e0091d87f27b752e4fefe67c7070..40fcbbfcce6eff646fc472476d41aa6322b00505 100755 GIT binary patch delta 3225 zcmaJ@4Nz3q6@L5J;!z&9uoq5nV z<&9;d;#-nllf*jKyuP<~MNPhx6Xh`|I%Fl@%c|~g zS2dGezhs)7Sp)jnb^dWhKd4O$Mp_-}w2shiRePvtw+_vMwW@v2R$@m*_j?rWW^r4< zlPj<<;Gw>`R#74?u(%W2sl>A8W+L90?+?QTp$Tyb-ewlyhDf1WnP4R()emzTOY^_t zALpQOpF&ifS<=CP=V^aM?RY-HWNFRHS68a#huM=3=1DMn|OVJ+q0XKrGPb$|!8K6Xpc98Fw&yNsQ?Jkpe z7E*MdC7x`H`#z`Sr072^@hDq-(H2iYC`v5sOSk2p+VVCo_g%=aoX2f(yCpthi+}gX zxh4LKEv~o4pIPE}ZSg8w+y${*H?vxb9^rs2BMbym$;9-C?E?TO{`Al^rJMl4*Ub{7 z`omvBSOFnt=bK;H?6iZ<$JuFxOqLENN7y8P+M1u@bB@FRsuaBp9ytI0m!F^n5)t5HgV5i>K&j?xduUt{Cd4Rxa1qkLzdlq-A(Id zShH0ZAnf779um%jP_A3=KsikXIrtP&sT1+ZQ>AlZufQhJNZ$ImVILWO6>DDHcO;|O zJ9?gW-!#!4Y9&RV!Tf;W8`2RwzHc{Kx_G>M8mmntNOdQs;+D}oV< zzSx5vTaZWwKm@2(x815n5tc6d!UQ-nV~yacyA~%1QgW%&Gw%&%?8A( zYFAiRuW1q`$o%M&oE2(x4M^AK;g=I^9?ne82|vz5a)YYl!qO8Gfg>VeYfw+=XJiBA z{|=4;XA(L|^z1!rniSe)KHp_$F@H#v**TJ*Bk7LYx@OG(#TiOm2z}ckO48|1Am4b<7@>H(z3!-Wl z`J?SRhhGACyVck?;^Tptc?N0z)7yK@^}hWR0oMBo13L4h95n5N&VtA%4lV1~kjiGo zQ9<`@A;1iuMw8b4qqD?x>uJ-}M?AF(GRnOdOM0c*yQdAWFAyF#4A_{j6*u_N3sH@| zKjQT7vgyC4YWD%!nnv$6hpDlmv9M%?zy`FgfY!~$0Bz(TmIDQt@u=FZfad!va#CYH zA9Tp01uJ#}fv8&e8W`YASTyW_%A#R)9zgg1MP7WfA#F;>K_7E1$0z;4&G*U8LQ2n7 zNoF%#^DzarkEKW(T7armds2AX{eNE|zE=^N^$b zJlg?(<=<;XJ>^DRCP0qa#I36JDzPH!cB~2rTrxU{Dmdx`M$tZ2H0wZ_!t=Vy=2Gaf zqP=9|;b|1b0Ofk!wVSMFxPBkTOc8JV4my{rBjUtR#E#lr0z=T5pVEIYT+I)LwZdVd z3#|~q1P}na27v63r1o2WNDlRtWZMthOiJqA>_oe1{BY{Dv~EDum}^YB5udtt(T#g{ z`-Jb6mhnSZe-LbEyL~ySeb(`#h!x4ev2Ca5YA$LyM71M-Bx6hjkrr4uMEcrO#?K1J zWDT)=ZW-irVtf3P!u75Lv$iKyeu$p&qWyn-&^O8UJhpy>qj~%P(QWRH-<&;N{JQfd zV#mG#%qKBBZ<(e5V&1=PnsYH%_ry!*q&vr#K_?WuGu{-7-Pv1{iru*}XNfy+i%WJ- z+LSE23nM83_dbVs$#|(OYp6UV8*l}WUVs@pOGkN^Gdz(H2_^1~P2wDPb|gu0*Ez(u z(%spzJ41G-%0pDB8({JP*xg2=)Z^UcNSba8FB>B+zGggEwp84EBmS$h0}gT9^mu7` zWl9+-Ng*A?}4qLg~ j*zm$?an`hW_Y0ebioY0Vyk3)^zHPc?i9HU~)Fk}})sRg! delta 2744 zcmaJ?3vg7`8NT;!mOR}X9)T?_BCPnQ-0%PX=lRcn_VtVV`o;D%F=Mbm;J?9w+s}sT8j^!No?wIx$PeA zbeH76!A_Fp@mq*Ik@K5u9!n#ZnL198_^(_X_#JSB9%VZLQta>8Debp$w%LKZZ1@=m zu5{qDHvAn2E^^?%*zh_BUgW^jHvDY|799ArAVdWv_9LN5ZhehYa(tkmuy4q-QCEOH zoQtT#a&8bX(iMi^!*^E-?S5;g`^0>%xZ^g(3{o7r31S)%ciY61V8DZ76QjJr1_#0X zBbbNbUKsv886TtFI@*oXt`a+hDx%;GI67=4bfJBU=pJ5T_7$?z0y}Kr6DUrSViuXW zPCE&^@a%QDCNG_?H7_n(`p~`T0JLXBR*h12Zi+Wv%isOon|jdIM5_<0^7ndc!*X*s z?&*dm)v&Jt-A&cst?C!lgnMTZTIAjopIKjgXTwT36h`imb7Qno4Hr@KsH<|R_h0>& z?Qwx>Y(}%;j)WYy{V-?L`BYrB1^lYDq^j|w8#Zm}VJ8R7Q^jA4ws>Ihe?-9^L(crl zRPc@r>>#2(5YmsbAVeX(mrF%RXGVsmUt${|i%(iD*YM%LtR@gpNWaLo4OrG*#H#5- z?AQbe!!BW(jww(8+tx^4zGMcb1d4W<2l9)^v-NPV&$quY`=$FDs!_ z-rJ^mC0hEaEKTPvi$dDZ*9rDBtnX95jV$85N3xhB+lBSNY872)7fac!Y*Dr zk7k%tfN|M<-s}wADZTTtIT&b=+~>`b75UNLZ_r`5`>?PRACvpfIw>N$--6|3%;U<5QGlmH!@&X^Ft+@Pa(zl;O)DXnOQB zRDf5)F2hEMRGrH3&98%W_$);mZ~^UtuF&T$z?Ob6lTT*6Fk`qEl3J;IK9-PvM2`2~ zBI8YXR%m7!IT<96kER9X4xfwKro0{IJ0%Q2;gO&|SgC*V2y#@`vyHGEd-;rI`b$dE55a<#a9_wYca}WA=_W=IFB_B#ZQGrxUk1Up zA{TxsX*|aGQ6$Pm@L1hxx{{lEKA_%FK2-33IE1uNg=a~={IprM>h7FB+W~2}*&IEc z+`Z}rck+Huw|HpvK3Bu!b<29)`AhqJc25|)O*X@sSx@~R*+%sA4)!K}dIlp!xfiVs5L>$x<@CfK|MG z2Zzi9Rg3)}4O!OPfP_j<_KVV5k2mg8Jx@z}GCW?zldX8tluSW`crR46OO|!O9Io=E z>=j+h%(>NfOZ%C*qI#<|I+A>)`j9B~uS{0eG^D0;=g=B5x2<24?5^`l((z*ROhZw6 z%umh);catnVb2o)&AtX4Pi0;{$;lCfcfK%Pf4+FCC4|um?fRaH=hd^W%Tpu MEC}#%C>(bE8(ge^uK)l5 diff --git a/out.exe b/out.exe index a1d6348a3968aa15c4ca409d0418062fef54a207..b5bde7bbdf887e0168f37cdcb0cb787da7c3ec59 100644 GIT binary patch literal 7 OcmZQzWME)&bprqZ;{cBU literal 4 LcmZQzWMBdS00{sD