diff --git a/data/Tupfile.lua b/data/Tupfile.lua index 9dce4b71ca..822fa637de 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -243,8 +243,8 @@ extra_files = { {"kolibrios/media/zsea/zsea.ini", PROGS .. "/media/zsea/zSea.ini"}, {"kolibrios/media/zsea/buttons/buttons.png", PROGS .. "/media/zsea/buttons.png"}, {"kolibrios/res/skins/", "../skins/authors.txt"}, - {"kolibrios/res/wallpapers/in_the_wind.png", "common/wallpapers/in_the_wind.png"}, - {"kolibrios/res/wallpapers/deink.png", "common/wallpapers/deink.png"}, + {"kolibrios/res/wallpapers/", "common/wallpapers/*"}, + {"kolibrios/res/templates/", "common/templates/*"}, } if build_type == "rus" then tup.append_table(extra_files, { {"Docs/cp866/config.txt", build_type .. "/docs/CONFIG.TXT"}, diff --git a/data/common/templates/graph1.grf b/data/common/templates/graph1.grf new file mode 100644 index 0000000000..32004cab14 --- /dev/null +++ b/data/common/templates/graph1.grf @@ -0,0 +1,2 @@ +0 25 -9 9 +=9*exp(-x/10)*sin(x) \ No newline at end of file diff --git a/data/common/templates/graph2.grf b/data/common/templates/graph2.grf new file mode 100644 index 0000000000..792b53d451 --- /dev/null +++ b/data/common/templates/graph2.grf @@ -0,0 +1,35 @@ +-3 3 -1 1 +0 0 +0,1 0,099833417 +0,2 0,198669331 +0,3 0,295520207 +0,4 0,389418342 +0,5 0,479425539 +0,6 0,564642473 +0,7 0,644217687 +0,8 0,717356091 +0,9 0,78332691 +1 0,841470985 +1,1 0,89120736 +1,2 0,932039086 +1,3 0,963558185 +1,4 0,98544973 +1,5 0,997494987 +1,6 0,999573603 +1,7 0,99166481 +1,8 0,973847631 +1,9 0,946300088 +2 0,909297427 +2,1 0,863209367 +2,2 0,808496404 +2,3 0,745705212 +2,4 0,675463181 +2,5 0,598472144 +2,6 0,515501372 +2,7 0,42737988 +2,8 0,33498815 +2,9 0,239249329 +3 0,141120008 +3,1 0,041580662 +3,2 -0,058374143 +3,3 -0,157745694 diff --git a/data/common/templates/shell_escape.sh b/data/common/templates/shell_escape.sh new file mode 100644 index 0000000000..11ba8fe526 --- /dev/null +++ b/data/common/templates/shell_escape.sh @@ -0,0 +1,33 @@ +#SHS + +echo Table for 16-color terminal escape sequences. +echo Replace ESC with \033 in bash. + +echo Background | Foreground colors +echo --------------------------------------------------------------------- +echo  ESC[40m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[40m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[41m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[41m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[42m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[42m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[43m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[43m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[44m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[44m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[45m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[45m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[46m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[46m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- +echo  ESC[47m |  [30m  [31m  [32m  [33m  [34m  [35m  [36m  [37m  +echo  ESC[47m |  [1;30m [1;31m [1;32m [1;33m [1;34m [1;35m [1;36m [1;37m +echo --------------------------------------------------------------------- + + diff --git a/data/common/templates/shell_misc.sh b/data/common/templates/shell_misc.sh new file mode 100644 index 0000000000..8b51e6efe6 --- /dev/null +++ b/data/common/templates/shell_misc.sh @@ -0,0 +1,44 @@ +#SHS + +echo Hello, I am a command language interpreter example. +ver +sleep 200 + + +echo +echo ============== +echo runing palitra +echo ============== + +/sys/media/palitra H 00AEC3D8 003A95BF +sleep 300 +/sys/media/palitra H 007DCEDF 003C427F +sleep 200 +/sys/media/palitra H 00FFFF9F 003CC6DF +sleep 200 + + +echo +echo ============== +echo runing fillscr +echo ============== + +/sys/media/fillscr 105,145,200, 105,145,200, 105,145,200, 60,60,128, 82,102,164, 60,60,128, 60,60,128, 60,60,128, 60,60,128 +sleep 200 + + +echo +echo ============== +echo runing @notify +echo ============== + +/sys/@notify "Hello, I am a @notify app!" +sleep 300 +/sys/@notify "@notify can show several lines.\nNotices are closed automatically in 5 sec." +sleep 300 +/sys/@notify '@notify\nYou can also set an icon and a title.' -tI +sleep 300 + + + +exit \ No newline at end of file diff --git a/data/common/templates/table_apps(rus).csv b/data/common/templates/table_apps(rus).csv new file mode 100644 index 0000000000..61b2f8a9cd --- /dev/null +++ b/data/common/templates/table_apps(rus).csv @@ -0,0 +1,79 @@ +€¬п Їа®Ја ¬¬л;ЋЇЁб ­ЁҐ;Lang;WebSVN;Forum;wiki +@docky;„®Є-Ў а;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fdocky%2F&#a92e88fd4523f8d4e6b72c977e438ea8a;http://board.kolibrios.org/viewtopic.php?f=48&t=2455; +@hotangles;"б«г¦Ў  ®ЇжЁЁ Hot Angles (§ ЇгбЄ ЇаЁ«®¦Ґ­Ёп Їгвс¬ ­ ўҐ¤Ґ­Ёп Єгаб®а  ў гЈ®« нЄа ­ ; ¤®Ї. ў®§¬®¦­®бвЁ а Ў®зҐЈ® бв®« )";asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2Fha%2F&#af32bbff78a611a6e4824edcba7361181;http://board.kolibrios.org/viewtopic.php?f=42&t=3762; +@icon;а Ў®зЁ© бв®«;asm;;http://board.kolibrios.org/viewtopic.php?f=48&t=1515; +@menu;ЊҐ­о ЇгбЄ.;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fmenu%2Ftrunk%2F&#a07a01d3bfab170d2567a0c43beb53556;http://board.kolibrios.org/viewtopic.php?f=48&t=1906; +@notify;гвЁ«Ёв  ўлў®¤  㢥¤®¬«Ґ­Ё©;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=2650; +@open;„Ё «®Ј ўлЎ®а  Їа®Ја ¬¬л.;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fopen%2F&#a71954713f684b2f848a962781352c698;http://board.kolibrios.org/viewtopic.php?f=48&t=2997; +@ss;‘ЄаЁ­бҐ©ўҐа. •а ­ЁвҐ«м нЄа ­ . ‡ бв ўЄ  нЄа ­ .;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fss%2Ftrunk%2F&#ae76c7f2a5ba34ae0045bc2f9189f3de0;http://board.kolibrios.org/viewtopic.php?f=48&t=2045; +@taskbar;Ї ­Ґ«м § ¤ з;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Ftaskbar%2F&#a62ec11ea886ca71c82afc8a714b579cf;http://board.kolibrios.org/viewtopic.php?f=48&t=809; +@volume;ђҐЈг«Ёа®ўйЁЄ §ўгЄ .;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fmedia%2Fvolume%2F&#afc250e0bd57c71d8513adada51b87586;http://board.kolibrios.org/viewtopic.php?f=38&t=3010; +allgames;ЁЈа®ў®© 業ва;c--;;http://board.kolibrios.org/viewtopic.php?f=9&t=3001; +app_plus;"ўЁ¤¦Ґв б® бЇЁбЄ®¬ Їа®Ја ¬¬ ISO; Ї®§ў®«пҐв ЇаЁ¬®­вЁа®ў вм /kolibrios/ ўагз­го";c--;;http://board.kolibrios.org/viewtopic.php?f=9&t=3001; +asciivju;’ Ў«Ёж  ASCII бЁ¬ў®«®ў.;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fdevelop%2Fasciivju%2Ftrunk%2F&#a5da69869b5757c5b71158a900f51c0c3;http://board.kolibrios.org/viewtopic.php?f=42&t=1455; +calc;Є «мЄг«пв®а;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2Fcalc%2F&#a63c078ecbd7ae4df180813602b5ae0b7;http://board.kolibrios.org/viewtopic.php?f=46&t=392; +calendar;бЁб⥬­л© Є «Ґ­¤ ам;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fcalendar%2F&#aad5ef82ddbb8983b84a7bea39c99bd48;http://board.kolibrios.org/viewtopic.php?f=42&t=705; +colrdial;¤Ё «®Ј ўлЎ®а  жўҐв  б Ї «Ёва®©;asm;;http://board.kolibrios.org/viewtopic.php?f=48&t=1946; +cpu;¤ЁбЇҐвзҐа Їа®жҐбб®ў;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fcpu%2F&#ade815415c1e9b899c56c61778998e7fc;http://board.kolibrios.org/viewtopic.php?f=48&t=2054; +cpuid;Ї®¤а®Ў­ п Ё­д®а¬ жЁп ® Їа®жҐбб®аҐ;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fcpuid%2F&#a82de51835bbc6ad60432500271150598;http://board.kolibrios.org/viewtopic.php?f=42&t=594; +cropflat;ЋЈа ­ЁзҐ­ЁҐ а §¬Ґа®ў ®в®Ўа ¦ Ґ¬®© з бвЁ нЄа ­ ;asm;;http://board.kolibrios.org/viewtopic.php?f=36&t=2071&p=41586&hilit=cropflat#p41586; +disptest;Їа®Ја ¬¬  ¤«п Їа®ўҐаЄЁ ¬ ваЁжл ¤ЁбЇ«Ґп;;;http://board.kolibrios.org/viewtopic.php?f=42&t=1122; +docpack;¤®Єг¬Ґ­в жЁп / Ў«®Є ¤®Єг¬Ґ­в®ў;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fdocpack%2F&#a8b02b30e041c28305e4b1339149932ea;; +easyshot;Їа®бв®© бЄаЁ­и®вҐа;c--;;http://board.kolibrios.org/viewtopic.php?f=42&t=3695; +end;Їа®Ја ¬¬  § ўҐа襭Ёп а Ў®вл;asm;;http://board.kolibrios.org/viewtopic.php?f=48&t=2442; +eskin;гбв ­®ўйЁЄ д®­  Ё бЄЁ­  ЇаЁ бв а⥠бЁб⥬л;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=2424; +fb2read;зЁв «Є  fb2;oberon07;;http://board.kolibrios.org/viewtopic.php?f=46&t=3128; +font_viewer;Їа®б¬®ва KF иаЁдв®ў;c--;;; +fspeed;вҐбвЁа®ў ­ЁҐ бЄ®а®бвЁ ¤ЁбЄ  ў а Ў®вҐ б д ©« ¬Ё;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=2660; +gmon;Ё­д®а¬ жЁп ® § Јаг§ЄҐ бЁб⥬л;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=470; +graph;Ї®бв஥­ЁҐ Ја дЁЄ®ў;c (msvc);;http://board.kolibrios.org/viewtopic.php?f=38&t=1059; +haconfig;Є®­дЁЈга в®а ®ЇжЁЁ Hot Angles;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2Fha%2F&#af32bbff78a611a6e4824edcba7361181;http://board.kolibrios.org/viewtopic.php?f=42&t=3762; +hdd_info;Ё­д®а¬ жЁп ® дЁ§ЁзҐбЄЁе ¤ЁбЄ е;;;http://board.kolibrios.org/viewtopic.php?f=42&t=1318; +kbd;гвЁ«Ёв  Ї®§ў®«пҐв ®вЄ«оз вм о¦­л© ¬®бв ­  ¬ вҐаЁ­бЄ®© Ї« вҐ ¤«п нЄ®­®¬ЁЁ н«ҐЄва®н­ҐаЈЁЁ;asm;;;http://wiki.kolibrios.org/wiki/Kbd/ru +kerpack;б¦Ё¬ Ґв kernel.mnt;asm;;; +kpack;бЁб⥬­л© гЇ Є®ўйЁЄ Ё а бЇ Є®ўйЁЄ;asm;;http://board.kolibrios.org/viewtopic.php?f=46&t=355; +launcher;§ ЇгбЄ Їа®Ја ¬¬ ЇаЁ бв а⥠бЁб⥬л;asm;;http://board.kolibrios.org/viewtopic.php?f=48&t=2454; +loaddrv;гвЁ«Ёв  ¤«п агз­®© § Јаг§ЄЁ ¤а ©ўҐа®ў ;asm;;; +lod;а Ў®в Ґв зҐаҐ§ Ї а ¬Ґвал: ®вЄалў Ґв opendial б ¬ бЄ®© Ё Ї®б«Ґ ўлЎ®а  д ©«  ®вЄалў Ґв ҐЈ® ў ЇаЁ«®¦Ґ­ЁЁ;;;; +madmouse;¤Ґ« Ґв бв®а®­л нЄа ­  бЄў®§­л¬Ё ¤«п ¬лиЁ;;;http://board.kolibrios.org/viewtopic.php?f=42&t=1732; +magnify;㢥«ЁзЁвҐ«м­®Ґ б⥪«® ¤«п а Ў®зҐЈ® бв®« ;;;; +mgb;Ја дЁзҐбЄЁ© ЎҐ­з¬ аЄ;;;http://board.kolibrios.org/viewtopic.php?f=42&t=670; +mousecfg;гвЁ«Ёв  ­ бва®©ЄЁ Ё Їа®ўҐаЄЁ ¬лиЁ;c--;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fcmm%2Fmousecfg%2F&#a51476493ffefa534a9f94b1bd115997f;http://board.kolibrios.org/viewtopic.php?f=48&t=3095; +mousemul;н¬г«пв®а ¬лиЁ зҐаҐ§ Є« ўЁ вгаг;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=814; +mykey;;asm;;; +notes;§ ¬ҐвЄЁ;c--;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fcmm%2Fnotes%2F&#ab282b876c270d40ad64654e8b7727298;; +panels_cfg;гЇа ў«Ґ­ЁҐ в бЄЎ а®¬ Ё ¤®Є®¬;c--;;http://board.kolibrios.org/viewtopic.php?f=48&t=3020; +pcidev;Ё­д®а¬ жЁп ®Ў гбва®©бвў е ­  ¬ вҐаЁ­бЄ®© Ї« вҐ;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=73; +period;ЇҐаЁ®¤ЁзҐбЄ п в Ў«Ёж ;asm;;http://board.kolibrios.org/viewtopic.php?f=38&t=411; +pipetka;ЇЁЇҐвЄ  ¤«п а Ў®зҐЈ® бв®« ;asm;;http://board.kolibrios.org/viewtopic.php?f=38&t=3546; +rdsave;б®еа ­Ґ­ЁҐ ®Ўа §  IMG ¤«п б®еа ­Ґ­Ёп Ё§¬Ґ­Ґ­Ё© ў бЁб⥬Ґ;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Frdsave%2F&#a96edb222ca9242e088c4b4a52513c728;http://board.kolibrios.org/viewtopic.php?f=42&t=645; +rtfread;зЁв «Є  RTF;asm;;http://board.kolibrios.org/viewtopic.php?f=9&t=1821; +run;§ ЇгбЄ «Є  д ©«®ў б Ї а ¬Ґва ¬Ё;uasm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Frun%2F&#af97b4cdeaba3ef1cb77ef952175085df;http://board.kolibrios.org/viewtopic.php?f=42&t=554; +srcshoot;бваЁ­и®вҐа;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fmedia%2Fscrshoot%2F&#a268c6b8a259b32f84482097103fcf083;http://board.kolibrios.org/viewtopic.php?f=38&t=528; +searchap;Ї®ЁбЄ Ё Ї®¤Є«о祭ЁҐ ¤®Ї®«­ЁвҐ«м­®© бЁб⥬­®© Ї ЇЄЁ /kolibrios/;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fsearchap%2F&#ab5102e78ca9592829ed715bc6f82267d;; +setup;­ бва®©Є  ­ҐЄ®в®але бЁб⥬­ле Ї а ¬Ґва®ў;asm;;http://board.kolibrios.org/viewtopic.php?f=48&t=1966; +shell;Є®­б®«м­л© Ё­вҐаЇаҐв в®а Є®¬ ­¤ (襫«);c (gcc);http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fshell%2F&#a3c50045ecae9694143987608f19fe69b;http://board.kolibrios.org/viewtopic.php?f=48&t=1111;http://wiki.kolibrios.org/wiki/Shell/ru +skincfg;­ бва®©Є  梥⮢ ®Є®­;asm;;; +sysmon;"¬®­Ёв®аЁ­Ј аҐбгаб®ў (Ћ‡“; CPU Ё бў®Ў®¤­®© Ї ¬пвЁ)";c--;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fcmm%2Fsysmon%2F&#a65a1e5da34b9a03e871ac1d837c418b1;http://board.kolibrios.org/viewtopic.php?f=42&t=3753; +syspanel;бЁб⥬­ п Ї ­Ґ«м;;;; +table;। Єв®а н«ҐЄва®­­ле в Ў«Ёж;c (msvc);http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fother%2Ftable%2F&#a944e66191e0bbc79d321026a7d432775;http://board.kolibrios.org/viewtopic.php?f=46&t=1070;http://wiki.kolibrios.org/wiki/Table/ru +terminal;вҐа¬Ё­ « ¤«п а Ў®вл б com Ї®ав ¬Ё;;;http://board.kolibrios.org/viewtopic.php?f=23&t=2563&hilit=terminal; +test;вҐбв § йЁвл п¤а ;;;; +tinfo;Ё­д®а¬ жЁп ® Ї®в®ЄҐ ўлЇ®«­Ґ­Ёп (ЏЉЊ ­  Їа®жҐбᥠў cpu);asm;;; +tinypad;⥪бв®ўл© аҐ¤ Єв®а;asm;;http://board.kolibrios.org/viewtopic.php?f=46&t=39; +tmpdisk;гЇа ў«Ґ­ЁҐ ўЁавг «м­л¬Ё RAM ¤ЁбЄ ¬Ё /tmp;c--;;http://board.kolibrios.org/viewtopic.php?f=44&t=2172; +txtread;зЁв «Є  ⥪бв®ўле д ©«®ў;c--;;http://board.kolibrios.org/viewtopic.php?f=46&t=3119; +unz;а бЇ Є®ўйЁЄ  аеЁў®ў ZIP Ё 7Z;asm;;; +vmode;Ё§¬Ґ­Ґ­ЁҐ а §аҐиҐ­Ёп нЄа ­  ЇаЁ ЁбЇ®«м§®ў ­ЁЁ ўЁ¤Ґ®¤а ©ўҐа ;?? (c?);;; +zkey;ўЁавг «м­ п Є« ўЁ вга ;;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fzkey%2F&#a429ac959a677f842944a8d49dd36381c;http://board.kolibrios.org/viewtopic.php?f=42&t=1109; +board;¤®бЄ  ®в« ¤ЄЁ Ё б®®ЎйҐ­Ё©;asm;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Fboard%2F&#a47fda09b36905262a7a84fd15e2cb66a;http://board.kolibrios.org/viewtopic.php?f=42&t=1485; +clipview;Їа®б¬®вайЁЄ ᮤҐа¦Ё¬®Ј® ЎгдҐа  ®Ў¬Ґ­ ;c--;http://websvn.kolibrios.org/listing.php?repname=Kolibri+OS&path=%2Fprograms%2Fcmm%2Fclipview%2F&#a71f4bc86e0bd2fc3e7634575ae41b9af;http://board.kolibrios.org/viewtopic.php?f=42&t=3396; +diff;ўЁ§г «м­®Ґ ба ў­Ґ­ЁҐ ¤ўге ⥪бв®ўле д ©«®ў;c--;;http://board.kolibrios.org/viewtopic.php?f=45&t=3436; +fasm; бᥬЎ«Ґа;asm;;http://board.kolibrios.org/viewtopic.php?f=45&t=1514; +h2d2b;ЇаҐ®Ўа §®ў ­ЁҐ зЁбҐ« hex 2 dec 2 bin;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=117; +heed;HEX-। Єв®а;asm;;http://board.kolibrios.org/viewtopic.php?f=46&t=1285; +keyascii;Їа®б¬®ва Є®¤®ў Є« ўЁ вгал ў ASCII Ё ScanCode;asm;;http://board.kolibrios.org/viewtopic.php?f=42&t=2049; +mstate;Їа®ўҐаЄ  б®бв®п­Ёп ¬лиЁ;asm (???);;; +mtdbg;¤ҐЎ ЈЈҐа;asm;;; +scancode;®в®Ўа ¦Ґ­ЁҐ бЄ ­¤®ў® Є« ўЁи Є« ўЁ вгал;img; ¤«п а §а Ў®вЄЁ;; +testcon2;;asm;;; diff --git a/programs/cmm/c--/manual_c--.htm b/programs/cmm/c--/manual_c--.htm index 0bf1367f7a..082d90615c 100644 --- a/programs/cmm/c--/manual_c--.htm +++ b/programs/cmm/c--/manual_c--.htm @@ -1,218 +1,217 @@ - -Документация на C-- - - - - - - - -
-
-
- - - - - - - - - -
- - Документация на C--. -
- - - -

-Содержание. -

-
-
-
-1      Введение.
+
+
+	Документация на C--
+	
+	
+
+
+

Содержание

+
+
+1 Введение. 1.1 История создания и развития. -1.2 Что такое C--? -1.3 Как установить C--. +1.2 Что такое C--? +1.3 Как установить C--. -2. Управление компиляцией. +2. Управление компиляцией. 2.1 Параметры командной строки компилятора C--. -2.1.1 /ON - Оптимизация числовых выражений. -2.1.2 /DE - Временное расширение разрядности переменной. -2.1.3 /ARGC - Альтернативный обработчик командной строки. -2.1.4 /OST - слияние одинаковых строковых констант. -2.1.5 /D - установка идентификатора в TRUE из командной строки. -2.1.6 /IA - упрощенный ввод ассемблерных инструкций. -2.1.7 /CRI - пропуск повторно включаемого файла. -2.1.8 /IND - импорт имен процедур из DLL. -2.1.9 /WS - задать имя stub файла для программ под windows. -2.1.10 /WBSS - разместить не инициализированные данные в отдельной секции. -2.1.11 /DBG - создание отладочной информации. -2.1.12 /J0 /J1 /J2. -2.1.13 /LST - Создание ассемблерного листинга. -2.1.14 /ENV - Сохранение адреса переменных окружения. -2.1.15 /CPA - Очистка post-области данных. -2.1.16 /W - вывод предупреждений. -2.1.17 /NW - Выборочное отключение типов предупреждений. -2.1.18 /WSI - короткая таблица импорта. -2.2 Директивы транслятора. -2.2.1 ?ifdef/?ifndef -2.2.2 ?initallvar -2.2.3 ?usestartup -2.2.4 ?startusevar -2.2.5 ?atexit -2.2.6 ?startuptomain -2.2.7 ?undef -2.2.8 ?align и ?aligncode -2.2.9 ?pragma +2.1.1 /ON - Оптимизация числовых выражений. +2.1.2 /DE - Временное расширение разрядности переменной. +2.1.3 /ARGC - Альтернативный обработчик командной строки. +2.1.4 /OST - слияние одинаковых строковых констант. +2.1.5 /D - установка идентификатора в TRUE из командной строки. +2.1.6 /IA - упрощенный ввод ассемблерных инструкций. +2.1.7 /CRI - пропуск повторно включаемого файла. +2.1.8 /IND - импорт имен процедур из DLL. +2.1.9 /WS - задать имя stub файла для программ под windows. +2.1.10 /WBSS - разместить не инициализированные данные в отдельной секции. +2.1.11 /DBG - создание отладочной информации. +2.1.12 /J0 /J1 /J2. +2.1.13 /LST - Создание ассемблерного листинга. +2.1.14 /ENV - Сохранение адреса переменных окружения. +2.1.15 /CPA - Очистка post-области данных. +2.1.16 /W - вывод предупреждений. +2.1.17 /NW - Выборочное отключение типов предупреждений. +2.1.18 /WSI - короткая таблица импорта. +2.2 Директивы транслятора. +2.2.1 ?ifdef/?ifndef +2.2.2 ?initallvar +2.2.3 ?usestartup +2.2.4 ?startusevar +2.2.5 ?atexit +2.2.6 ?startuptomain +2.2.7 ?undef +2.2.8 ?align и ?aligncode +2.2.9 ?pragma -3. Константы. +3. Константы. 3.1 Числовые константы. -3.2 Символьные константы. -3.3 Строковые константы. -3.4 Постоянные выражения. +3.2 Символьные константы. +3.3 Строковые константы. +3.4 Постоянные выражения. -4. Выражения. +4. Выражения. 4.1 Типы выражений. -4.2 Выражения типа EAX/AX/AL. -4.3 Выражения использующие получатель при вычислении выражения. -4.4 Не - EAX/AX/AL выражения. -4.5 Условные выражения. -4.5.1 Простые условные выражения. -4.5.2 Сложные условные выражения. -4.6 Изменение типа выражения при присваивании. -4.7 Вычисление в регистры EAX/AX/AL со знаком. +4.2 Выражения типа EAX/AX/AL. +4.3 Выражения использующие получатель при вычислении выражения. +4.4 Не - EAX/AX/AL выражения. +4.5 Условные выражения. +4.5.1 Простые условные выражения. +4.5.2 Сложные условные выражения. +4.6 Изменение типа выражения при присваивании. +4.7 Вычисление в регистры EAX/AX/AL со знаком. -5. Идентификаторы. +5. Идентификаторы. 5.1 Формат идентификатора. -5.2 Зарезервированные идентификаторы. -5.3 Универсальные регистры для 16 и 32-битного режима. -5.4 Предопределенные идентификаторы. +5.2 Зарезервированные идентификаторы. +5.3 Универсальные регистры для 16 и 32-битного режима. +5.4 Предопределенные идентификаторы. -6. Переменные. +6. Переменные. 6.1 Типы переменных. -6.2 Объявление переменных. -6.3 Глобальные переменные. -6.4 Локальные переменные. -6.5 Динамические переменные и структуры. -6.6 Присваивание одного значения нескольким переменным. -6.7 Переменные типа float. +6.2 Объявление переменных. +6.3 Глобальные переменные. +6.4 Локальные переменные. +6.5 Динамические переменные и структуры. +6.6 Присваивание одного значения нескольким переменным. +6.7 Переменные типа float. 6.7.1 Формат переменных типа float. -6.7.2 Константы с плавающей точкой. -6.7.3 Диапазон допустимых значений. -6.7.4 Математические операции. -6.7.5 Преобразования типов. -6.7.6 Операции сравнения. -6.7.7 Сравнение переменных типа float с 32-битным регистром. -6.8 Указатели. +6.7.2 Константы с плавающей точкой. +6.7.3 Диапазон допустимых значений. +6.7.4 Математические операции. +6.7.5 Преобразования типов. +6.7.6 Операции сравнения. +6.7.7 Сравнение переменных типа float с 32-битным регистром. +6.8 Указатели. -7. Адресация. +7. Адресация. 7.1 Относительная адресация. -7.2 Абсолютная адресация. +7.2 Абсолютная адресация. -8. Работа с блоками данных. +8. Работа с блоками данных. 8.1 Структуры. 8.1.1 Что такое структуры. -8.1.2 Синтаксис. -8.1.3 Инициализация структур при объявлении. -8.1.4 Инициализация структуры при выполнении программы. -8.1.5 Операции с элементами структур. -8.1.6 Вложенные структуры. -8.1.7 Отображение тега структуры на блок памяти. -8.1.8 Битовые поля структур. -8.2 Объединения. -8.3 Команды FROM и EXTRACT. +8.1.2 Синтаксис. +8.1.3 Инициализация структур при объявлении. +8.1.4 Инициализация структуры при выполнении программы. +8.1.5 Операции с элементами структур. +8.1.6 Вложенные структуры. +8.1.7 Отображение тега структуры на блок памяти. +8.1.8 Битовые поля структур. +8.2 Объединения. +8.3 Команды FROM и EXTRACT. -9. Операторы. +9. Операторы. 9.1 Условные инструкции. -9.2 Циклы do{} while. -9.3 Циклы loop, LOOPNZ, loopnz. -9.4 Цикл while, WHILE. -9.5 Цикл for, FOR. -9.6 Оператор переключатель switch. -9.7 Оператор перехода goto, GOTO. -9.8 Оператор разрыва break, BREAK. -9.9 Оператор продолжения continue, CONTINUE. -9.10 Логическое объединение условий. -9.11 Переход через циклы. -9.12 Инвертирование флага проверки условий. -9.13 Вычисление выражения, а затем проверка условия. -9.14 Проверка битов при операции сравнения. -9.15 Оператор перестановки. -9.16 Оператор отрицания. -9.17 Оператор инверсии. -9.18 Специальные условные выражения. -9.19 Символ $ - вставляет текущий адрес программы. -9.20 Ключевое слово static и оператор ::. -9.21 Оператор sizeof. -9.22 Метки перехода. +9.2 Циклы do{} while. +9.3 Циклы loop, LOOPNZ, loopnz. +9.4 Цикл while, WHILE. +9.5 Цикл for, FOR. +9.6 Оператор переключатель switch. +9.7 Оператор перехода goto, GOTO. +9.8 Оператор разрыва break, BREAK. +9.9 Оператор продолжения continue, CONTINUE. +9.10 Логическое объединение условий. +9.11 Переход через циклы. +9.12 Инвертирование флага проверки условий. +9.13 Вычисление выражения, а затем проверка условия. +9.14 Проверка битов при операции сравнения. +9.15 Оператор перестановки. +9.16 Оператор отрицания. +9.17 Оператор инверсии. +9.18 Специальные условные выражения. +9.19 Символ $ - вставляет текущий адрес программы. +9.20 Ключевое слово static и оператор ::. +9.21 Оператор sizeof. +9.22 Метки перехода. -10. Ассемблер. +10. Ассемблер. 10.1 Поддержка команд ассемблера. -10.2 Ключевое слово asm. -10.3 Префикс dup - повторение инструкций DB/DW/DD. -10.4 Инструкции процессора Pentium III. +10.2 Ключевое слово asm. +10.3 Префикс dup - повторение инструкций DB/DW/DD. +10.4 Инструкции процессора Pentium III. -11. Процедуры. +11. Процедуры. 11.1 Типы процедур, функций и макрокоманд. -11.2 Стековые процедуры. -11.3 Регистровые процедуры. -11.4 Динамические процедуры. -11.4.1 Установка динамической процедуры в определенное место программы. -11.5 inline-процедуры. -11.5.1 Другое применение inline. -11.6 Процедуры обработки прерываний. -11.7 Замена return на goto. -11.8 Возвращаемые значения. -11.9 Объявление параметров в регистровых процедурах. -11.10 Объявление параметров в стековых процедурах. -11.11 Использование макрокоманд. -11.12 Передача параметров в стековые процедуры через регистры. -11.13 Вызов процедур с адресом в регистре. -11.14 Встоенные в компилятор процедуры. -11.14.1 Процедуры ABORT, ATEXIT и EXIT. -11.14.2 Процедуры inp/inportb, inport, inportd, outp/outportb, outport и +11.2 Стековые процедуры. +11.3 Регистровые процедуры. +11.4 Динамические процедуры. +11.4.1 Установка динамической процедуры в определенное место программы. +11.5 inline-процедуры. +11.5.1 Другое применение inline. +11.6 Процедуры обработки прерываний. +11.7 Замена return на goto. +11.8 Возвращаемые значения. +11.9 Объявление параметров в регистровых процедурах. +11.10 Объявление параметров в стековых процедурах. +11.11 Использование макрокоманд. +11.12 Передача параметров в стековые процедуры через регистры. +11.13 Вызов процедур с адресом в регистре. +11.14 Встоенные в компилятор процедуры. +11.14.1 Процедуры ABORT, ATEXIT и EXIT. +11.14.2 Процедуры inp/inportb, inport, inportd, outp/outportb, outport и outportd. -11.14.3 Процедуры для работы с вещественными числами. -11.15 Классы. +11.14.3 Процедуры для работы с вещественными числами. +11.15 Классы. 11.15.1 Объявление процедур в структурах. -11.15.2 Наследование. -11.15.3 Наследование процедур. +11.15.2 Наследование. +11.15.3 Наследование процедур. -12. Типы выходных файлов. +12. Типы выходных файлов. 12.1 Выходные файлы типа COM. -12.2 Выходные файлы типа EXE. -12.3 Выходной файл *.EXE с моделью памяти tiny. -12.4 Объектный выходной файл OBJ. -12.5 COM файл symbiosis. +12.2 Выходные файлы типа EXE. +12.3 Выходной файл *.EXE с моделью памяти tiny. +12.4 Объектный выходной файл OBJ. +12.5 COM файл symbiosis. 12.5.1 СИМБИОЗ - что это такое? -12.5.2 Как это делать. -12.5.3 Использование. -12.5.4 Злоупотребления. -12.6 SYS - драйверы устройств. -12.7 Компиляция кода расширителей ROM-BIOS. -12.8 32-битные файлы. +12.5.2 Как это делать. +12.5.3 Использование. +12.5.4 Злоупотребления. +12.6 SYS - драйверы устройств. +12.7 Компиляция кода расширителей ROM-BIOS. +12.8 32-битные файлы. 12.8.1 32-битный код под DOS. -12.8.2 32-битный код под Windows. -12.8.3 Вызов API процедур по ординалам. -12.8.4 Создание DLL под Windows. -12.8.5 Инициализация DLL при загрузке. -12.8.6 Компиляция ресурсов. -12.9 Выходные файлы для MeOS. +12.8.2 32-битный код под Windows. +12.8.3 Вызов API процедур по ординалам. +12.8.4 Создание DLL под Windows. +12.8.5 Инициализация DLL при загрузке. +12.8.6 Компиляция ресурсов. +12.9 Выходные файлы для MeOS. -13. Приложения. +13. Приложения. 13.1 Поиск включаемых файлов. -13.2 Регистры, которые должны быть сохранены. -13.3 C--.ini файл. -13.4 startup.h-- файл. -13.5 mainlib.ldp файл. -13.6 C-- символы. - +13.2 Регистры, которые должны быть сохранены. +13.3 C--.ini файл. +13.4 startup.h-- файл. +13.5 mainlib.ldp файл. +13.6 C-- символы. +
-1. Вступление. +

1. Вступление. 1.1 История создания и развития. - +

Автором языка SPHINX C-- является Peter Cellik (CANADA). Последняя авторская версия SPHINX C-- v0.203 от 28.Oct.96. К сожалению автор @@ -251,12 +250,12 @@ предложение будет ценным (на мой взгляд, так что Вам придется свое предложение хорошо аргументировать) и его будет возможным реализовать, оно без сомнения найдет место в компиляторе. -Return to contents. +Return to contents. - +

1.2 Что такое C--? - +

C-- был разработан, для того чтобы строить маленькие и быстрые программы. Это наиболее подходит для создания резидентных программ (TSR), @@ -280,12 +279,12 @@ C-- разработан только для использования на компьютерах с процессорами совместимыми с семейством 80x86. Компилятор может работать только с операционными системами DOS и семейством Windows. -Return to contents. +Return to contents. - +

1.3 Как установить C--. - +

Компилятору C-- для работы нужны совсем незначительные ресурсы: процессор 386 или лучше, чуть более 1 Мб дискового пространства и 4Мб @@ -320,14 +319,14 @@ компилятора нет. Существует несколько других способов, указать компилятору место расположения библиотек. Поэтому определять или не определять переменную окружения дело вашего вкуса и привычек. -Return to contents. +Return to contents. - +

2. Управление компиляцией. 2.1 Параметры командной строки компилятора C--. - +

Формат командной строки вызова компилятора C--: @@ -498,12 +497,12 @@ Параметры командной строки можно писать как большими, так и маленькими буквами. -Return to contents. +Return to contents. - +

2.1.1 /ON - Оптимизация числовых выражений. - +

При включении в командную строку опции /ON или в файл C--.INI строчки ON, компилятор будет анализировать операции над числами и где это @@ -543,12 +542,12 @@ AX = AX / 16; AX = AX * 16; var = AX; -Return to contents. +Return to contents. - +

2.1.2 /DE - Временное расширение разрядности переменной. - +

Как известно, после умножения может произойти переполнение, т.е разрядность результата может превысить разрядность исходных операндов и @@ -572,12 +571,12 @@ если значения переменных b = 0xC000, c = 0x1000, d=0x10, после запуска такая программа зависнет с сообщением о том, что произошло переполнение при делении. -Return to contents. +Return to contents. - +

2.1.3 /ARGC - Альтернативный обработчик командной строки. - +

Отличие этого обработчика командной строки от parsecommandline заключается в том, что при вызове PARAMSTR(0); Вы получите адрес строки в @@ -589,12 +588,12 @@ Альтернативный обработчик командной строки включается директивой ?argc TRUE или из командной строки компилятора ключом /argc или строчкой argc в файле C--.INI. -Return to contents. +Return to contents. - +

2.1.4 /OST - слияние одинаковых строковых констант. - +

Если этот режим оптимизации будет активизирован, то компилятор будет запоминать все строковые константы и при обнаружении одинаковых в код @@ -609,7 +608,7 @@ //оптимизации. void proc(){ - WRITESTR("test"); // эта строка будет участвовать в оптимизации. + WRITESTR("test"); // эта строка будет участвовать в оптимизации. AX="test"; // переменной AX будет присвоен адрес строки, // которая была вставлена в код программы в // предыдущей строке. @@ -621,12 +620,12 @@ Включается этот режим оптимизации либо с командной строки /ost, либо директивой #pragma option ost, либо строкой в файле c--.ini - ost. Отключить, включенный ранее, этот режим можно директивой #pragma option ost-. -Return to contents. +Return to contents. - +

2.1.5 /D - установка идентификатора в TRUE из командной строки. - +

Если Вы написали программу, которая может компилироваться по разному, в зависимости от состояния некоторых идентификаторов (используется режим @@ -636,12 +635,12 @@ программы. Идентификатор вводится с командной строки ключом /d=idname. -Return to contents. +Return to contents. - +

2.1.6 /IA - упрощенный ввод ассемблерных инструкций. - +

Стало возможным использовать ассемблерные инструкции без префикса $ и вне блока asm. Этот режим включается: с командной строки опцией /ia; @@ -652,12 +651,12 @@ качестве имен переменных или процедур. Ассемблерные инструкции компилятор распознает независимо от того, написаны они маленькими или большими буквами. -Return to contents. +Return to contents. - +

2.1.7 /CRI - пропуск повторно включаемого файла. - +

Чаще всего, повторно включать файл в компилируемый проект, нет необходимости, но это иногда происходит из-за того, что некоторые @@ -671,12 +670,12 @@ /cri-, которая запрещает компилятору делать проверку на повторное включение. Соответственно, для c--.ini файла, это можно сделать строкой cri- или директивой в компилируемом файле - #pragma option cri-. -Return to contents. +Return to contents. - +

2.1.8 /IND - импорт имен процедур из DLL. - +

Если Вы хотите в своей программе использовать DLL, для которой нет заголовочного файла с описанием процедур, то компилятор может @@ -692,12 +691,12 @@ контролировать число параметров передаваемых процедуре. И, к сожалению, компилятор умеет импортировать имена из библиотек имеющих только формат PE-файла. -Return to contents. +Return to contents. - +

2.1.9 /WS - задать имя stub файла для программ под windows. - +

Как известно, в программах под windows есть DOS заглушка, называемая stub, которой передается управление при запуске такой программы в чистом @@ -711,12 +710,12 @@ Таким образом, у Вас появилась возможность создавать программы, работающие и под DOS и под windows. -Return to contents. +Return to contents. - +

2.1.10 /WBSS - разместить не инициализированные данные в отдельной секции. - +

Секция .bss создается автоматически при компиляции программ с ключом /w32. Если Вы хотите иметь эту секцию и при компиляции программ с @@ -728,12 +727,12 @@ файла. Теоретически, для процессоров, у которых есть отдельный кэш для данных, использование секции .bss, должно повышать скорость работы программы. -Return to contents. +Return to contents. - +

2.1.11 /DBG - создание отладочной информации. - +

Если при компиляции программы в командную строку добавить ключ /dbg, или в файл конфигурации c--.ini добавить строку dbg, то компилятор после @@ -757,12 +756,12 @@ делать. Если Вы знаете, как создавать 32-битные программы с DOS-расширителем компиляторами фирмы Borland с включением в них отладочной информации, то расскажите мне. А я попробую применить это для C--. -Return to contents. +Return to contents. - +

2.1.12 /J0 /J1 /J2 - +

Синонимом ключей /J0 /J1 /J2 является директива #jumptomain с параметрами NONE, SHORT и NEAR соответственно. @@ -811,12 +810,12 @@ { ... } -Return to contents. +Return to contents. - +

2.1.13 /LST - Создание ассемблерного листинга. - +

С помощью дополнительной опции командной строки -lst Вы можете получить вместе с исполнительным файлом и его ассемблерный листинг. @@ -825,12 +824,12 @@ Ассемблерный листинг создается независимой от компилятора частью кода с использованием информации накапливаемой при компиляции программы. -Return to contents. +Return to contents. - +

2.1.14 /ENV - Сохранение адреса переменных окружения. - +

Если при компиляции программы Вы в командную строку добавите опцию -ENV или в файл c--.ini строка ENV, то компилятор добавит в вашу @@ -838,12 +837,12 @@ адрес переменных окружения запускаемой программы. Для программ под Windows это будет полный адрес, а для остальных в этой переменной будет сохраняться только адрес сегмента. -Return to contents. +Return to contents. - +

2.1.15 /CPA - Очистка post-области данных. - +

Переменные, которым в теле программы не было присвоено никакое значение, не включаются в тело скомпилированной программы. Для них @@ -853,12 +852,12 @@ Если Вам необходимо, чтобы неинициализированные переменные при загрузке программы всегда содержали одно и тоже значение (ноль) - включите в командную строку опцию -CPA. -Return to contents. +Return to contents. - +

2.1.16 /W - вывод предупреждений. - +

По умолчанию компилятор не выводит предупреждения и многие даже не подозревают о существовании такой полезной опции. В C-- предупреждения @@ -879,12 +878,12 @@ wf=warning Вы будете получать в файле warning предупреждения. -Return to contents. +Return to contents. - +

2.1.17 /NW - Выборочное отключение типов предупреждений. - +

Сейчас компилятор может выдавать 12 типов предупреждений и, иногда их бывает так много, что становится трудно в них ориентироваться. Теперь @@ -905,12 +904,12 @@ 10 - Return flag was destroyed 11 - Code may not be executable 12 - Don't use local/parametric values in inline procedures -Return to contents. +Return to contents. - +

2.1.18 /WSI - короткая таблица импорта. - +

Таблица импорта обычно состоит в свою очередь из четырех таблиц. Две таблицы LookUp Table и Import Address Table абсолютно одинаковы. @@ -920,12 +919,12 @@ только Import Address Table). Тем самым у Вас получится более компактная таблица импорта, что приведет, в некоторых случаях, к созданию более компактного выходного файла. -Return to contents. +Return to contents. - +

2.2 Директивы транслятора. - +

C-- не содержит препроцессор. Тем не менее, есть несколько функций очень похожих на функции C препроцессора. @@ -939,7 +938,7 @@ ? aligncode [val] Выровнять код программы на четный по умолчанию или на адрес кратный величине val. - Заполнение производится кодом 0x90. + Заполнение производится кодом 0x90. ? aligner (aligner value) определить значение байта вставки. @@ -1129,12 +1128,12 @@ ? usestartup разрешает компилятору использовать ячейки памяти, занимаемые кодом начальной инициализации программы. -Return to contents. +Return to contents. - +

2.2.1 ?ifdef/?ifndef - +

Ранее директива ?ifdef срабатывала на наличие константы независимо от значения ее величины, а директива ?ifndef срабатывала на отсутствие @@ -1150,7 +1149,7 @@ Есть возможность проверки типа CPU для которого ведется компиляция. Допустимые варианты синтаксиса: - ?ifdef cpu > 1 //если программа компилируется для CPU выше 80186 + ?ifdef cpu > 1 //если программа компилируется для CPU выше 80186 ?ifndef cpu >= 2 // -------//------------- не больше или равно 80286 ?ifdef cpu == 3 // -------//------------- равно 80386 ?ifdef cpu != 0 // -------//------------- не равен 8086 @@ -1159,12 +1158,12 @@ Эта директива позволит Вам писать одну процедуру для различных типов CPU. -Return to contents. +Return to contents. - +

2.2.2 ?initallvar - +

Директивой ?initallvar TRUE включается режим при котором всем неинициализированным переменным будет присвоено нулевое значение и они @@ -1174,12 +1173,12 @@ Параметр FALSE этой директивы отключает этот режим. По умолчанию эта директива установлена в FALSE. -Return to contents. +Return to contents. - +

2.2.3 ?usestartup - +

Директива ?usestartup разрешает компилятору использовать ячейки кода начальной инициализации программы (startup) для последующего размещения в @@ -1188,12 +1187,12 @@ резидентных. Эту директиву применяют только для генерации *.COM файлов. -Return to contents. +Return to contents. - +

2.2.4 ?startusevar - +

Директивой ?startusevar можно указать начальный адрес с которого компилятор будет распределять память для неинициализированных переменных. @@ -1203,12 +1202,12 @@ резидентных, так и для обычных программ. Эту директиву применяют только для генерации *.COM файлов. -Return to contents. +Return to contents. - +

2.2.5 ?atexit - +

Директива ?atexit добавляет в startup программы код поддержки процедуры ATEXIT, резервирует место для хранения 16 адресов процедур и @@ -1221,12 +1220,12 @@ Всего можно зарегистрировать до 16 процедур. Процедуры вызываются в порядке обратном порядку их регистрации. -Return to contents. +Return to contents. - +

2.2.6 ?startuptomain - +

По этой директиве компилятор в начале файла делает jmp на начало процедуры main(). Перед началом компиляции этой процедуры компилятор @@ -1236,22 +1235,22 @@ компиляции резидентных программ (TSR). Директива ?startuptomain работает только при компиляции com-файлов. -Return to contents. +Return to contents. - +

2.2.7 ?undef - +

Эта директива уничтожает константы объявленные директивой ?define. Ее можно применять для изменения в процессе компиляции значения какой-нибудь константы. -Return to contents. +Return to contents. - +

2.2.8 ?align и ?aligncode - +

В C-- существует директива ?align, которая делает однократное выравнивание данных на четный адрес. Но если к этой директиве добавить @@ -1270,12 +1269,12 @@ директиву можно применять и внутри исполняемого кода. Например, если Вы хотите получить быстрый код на 486 процессоре, то рекомендуется делать выравнивание начала процедур и циклов на адрес кратный 16. -Return to contents. +Return to contents. - +

2.2.9 ?pragma - +

Директива #pragma это многофункциональнальная директива, которая в свою очередь имеет свои директивы: @@ -1330,14 +1329,14 @@ END #pragma resource end -Return to contents. +Return to contents. - +

3. Константы. 3.1 Числовые константы. - +

Представление числовых констант в виде десятичных чисел (чисел с основанием 10) и шестнадцатеричных чисел (основание счисления 16) полностью @@ -1382,12 +1381,12 @@ Эти суффиксы не зависят от регистра, т.е. их можно писать как маленькими, так и большими буквами. -Return to contents. +Return to contents. - +

3.2 Символьные константы. - +

Одиночные символьные константы, как и в C, должны заключаться в одиночные кавычки '. @@ -1434,12 +1433,12 @@ символов. Для многобуквенных символьных констант первый символ соответствует старшим разрядам, таким образом, значение для ab будет закодировано как a*256+b. -Return to contents. +Return to contents. - +

3.3 Строковые константы. - +

Строковые константы, как и в C, заключаются в двойные кавычки ("). Специальные символы внутри строк обозначаются так же, как и в символьных @@ -1451,12 +1450,12 @@ В настоящее время наибольшая длина строковой константы - 2048 символов, включая символ-ограничитель 0, таким образом, максимум 2047 значащих символов. -Return to contents. +Return to contents. - +

3.4 Постоянные выражения. - +

Постоянное выражение - одиночная числовая константа или несколько числовых констант, связанных между собой операторами. Числовое значение @@ -1474,25 +1473,25 @@ 1 * 2 * 3 / 2 + 4 // равняется 7 Примеры с применением вещественных чисел: 3.23*1.53+2.0E2 // равняется 204.9419 -Return to contents. +Return to contents. - +

4. Выражения. 4.1 Типы выражений. - +

Имеются три типа выражений в C--, не считая постоянных выражений. Это выражения типа EAX/AX/AL, выражения типа неEAX/AX/AL и условные выражения. Все C-- выражения вычисляются слева направо, независимо от старшинства входящих в выражение математических операций. -Return to contents. +Return to contents. - +

4.2 Выражения типа EAX/AX/AL. - +

Этот тип выражений применяется в случае, когда его результат может быть сохранен в переменной в памяти или в регистре EAX или AX или AL. @@ -1505,12 +1504,12 @@ Если результат может быть сохранен в переменных типа dword, long или float, используется нотация EAX. -Return to contents. +Return to contents. - +

4.3 Выражения использующие получатель при вычислении выражения. - +

Если в правой части выражения используется переменная являющаяся одновременно и приемником, то такие выражения дают различные результаты в @@ -1524,12 +1523,12 @@ var = BX = 2; var = 3 + var; // результатом будет 5 BX = 3 + BX; // результатом будет 6 -Return to contents. +Return to contents. - +

4.4 Не - EAX/AX/AL выражения. - +

Этот тип выражений применяется в случае, когда его результат должен быть сохранен в любом другом регистре, отличном от аккумулятора EAX, AX @@ -1561,12 +1560,12 @@ числа: 0, 1, 2, 4, 8, 16, 32, 64 и 128. Все эти ограничения связаны со стремлением не разрушать другие регистры при использовании не-EAX/AX/AL выражений. -Return to contents. +Return to contents. - +

4.5 Условные выражения. - +

Условные выражения - выражения, результатом вычисления которых является логическое значение да или нет, используемое в операторе if и циклах do {} @@ -1575,22 +1574,22 @@ Имеются два типа условных выражений, простые и сложные. Возможно логическое объединение условий. -Return to contents. +Return to contents. - +

4.5.1 Простые условные выражения. - +

Простые условные выражения - одиночная лексема или выражение, которое примет значение да, если расчетное значение отлично от нуля, или значение нет, если расчетное значение равно нулю. -Return to contents. +Return to contents. - +

4.5.2 Сложные условные выражения. - +

Сложные условные выражения имеют следующую форму: @@ -1622,12 +1621,12 @@ (x+y >= x-y) // правая часть не является одиночной лексемой или постоянным выражением. (Z = y) // вместо == ошибочно поставлен = -Return to contents. +Return to contents. - +

4.6 Изменение типа выражения при присваивании. - +

Если после знака равенства написать тип отличный от типа вычисляемой переменной, то все переменные участвующие в процессе вычисления, будут @@ -1649,12 +1648,12 @@ то переменные a, b, и c в этом примере перед вычислением будут преобразованы к типу long, а конечный результат будет преобразован к типу переменной i - int. -Return to contents. +Return to contents. - +

4.7 Вычисление в регистры EAX/AX/AL со знаком. - +

По умолчанию все вычисления в регистры производятся как с без знаковыми величинами. @@ -1674,14 +1673,14 @@ Обращаю ваше внимание, что для регистра AL можно использовать только модификатор char, для AX соответственно только int, а для EAX - long. Для остальных регистров подобное делать нельзя. -Return to contents. +Return to contents. - +

5. Идентификаторы. 5.1 Формат идентификатора. - +

Идентификаторы в C-- должны начинаться или с символа подчеркивания _ или заглавных или строчных букв. Следующие символы могут быть любой @@ -1704,12 +1703,12 @@ /*длина идентификатора превышает 64 */ Y_es sir /* пробелы недопустимы */ The-end /* дефисы недопустимы */ -Return to contents. +Return to contents. - +

5.2 Зарезервированные идентификаторы. - +

Список зарезервированных в C-- идентификаторов, которые не могут использоваться как общие идентификаторы, поскольку они уже были определены @@ -1778,12 +1777,12 @@ tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 -Return to contents. +Return to contents. - +

5.3 Универсальные регистры для 16 и 32-битного режима. - +

При создании библиотечных процедур очень часто приходится писать варианты процедуры для работы в 16-битном и 32-битном режимах, которые @@ -1799,12 +1798,12 @@ Использование автоматических регистров позволит упростить библиотечные файлы и сделать их более понятными. -Return to contents. +Return to contents. - +

5.4 Предопределенные идентификаторы. - +

Идентификаторы, определяемые компилятором в зависимости от режима компиляции: @@ -1828,28 +1827,28 @@ codesize компиляция ведется с оптимизацией на размер кода speed компиляция ведется с оптимизацией на быстродействие кода cpu определяет тип процессора для которого ведется компиляция: - 0 - 8086 - 1 - 80186 - 2 - 80286 - 3 - 80386 - 4 - 80486 - 5 - Pentium - 6 - Pentium MMX - 7 - Pentium II + 0 - 8086 + 1 - 80186 + 2 - 80286 + 3 - 80386 + 4 - 80486 + 5 - Pentium + 6 - Pentium MMX + 7 - Pentium II Эти идентификаторы могут быть проверены директивами #ifdef или #ifndef. Идентификатор cpu может быть использован лишь с операторами проверки условий: #ifdef cpu > 3 //если тип процессора больше 80386 -Return to contents. +Return to contents. - +

6. Переменные. 6.1 Типы переменных. - +

В C-- имеется семь типов переменных (именованных областей памяти), это: byte, word, dword, char, int, long, float. @@ -1898,12 +1897,12 @@ такие свойства типа int вносят некоторую путаницу, но это дает большой выигрыш при использовании этого типа в библиотечных файлах, которые могут быть использованы при компиляции 16-битных и 32-битных программ. -Return to contents. +Return to contents. - +

6.2 Объявление переменных. - +

Синтаксис для объявления переменных следующий: @@ -1940,12 +1939,12 @@ и массив с именем x, состоящий из 27 элементов типа int */ long size=0; /* объявлена переменная типа long с именем size и ей присвоено значение 0. */ -Return to contents. +Return to contents. - +

6.3 Глобальные переменные. - +

Глобальные переменные - это переменные, область действия которых распространяется на всю программу. В C-- использовать глобальные переменные @@ -1979,12 +1978,12 @@ значение), то переменная будет включена в код компилируемого файла. Если переменная не инициализируется, то место для переменной будет зарезервировано сразу же за последним байтом скомпилированной программы. -Return to contents. +Return to contents. - +

6.4 Локальные переменные. - +

Локальные переменные - это переменные область действия которых распространяется лишь в пределах одной процедуры. Объявлять локальные @@ -2021,12 +2020,12 @@ int locproc; // а на это объявление переменной компилятор выдаст сообщение // об ошибке, т.к. уже началось тело процедуры } -Return to contents. +Return to contents. - +

6.5 Динамические переменные и структуры. - +

Наряду с уже известными Вам динамическими процедурами в C-- есть возможность использовать динамически и переменные и структуры. Динамические @@ -2047,12 +2046,12 @@ расположены в его самом конце, после динамических процедур. Эту их особенность можно использовать, если Вам будет необходимо, чтобы данные не были разбросаны среди кода, а были сгруппированы в одном месте. -Return to contents. +Return to contents. - +

6.6 Присваивание одного значения нескольким переменным. - +

Если Вам необходимо присвоить нескольким переменным одинаковые значения: @@ -2066,14 +2065,14 @@ При использовании такой записи генерируется более компактный и более быстрый код. -Return to contents. +Return to contents. - +

6.7 Переменные типа float. 6.7.1 Формат переменных типа float. - +

Для представления значений с плавающей точкой в язык C-- введен тип float. Этому типу соответствует действительное число одинарной точности @@ -2089,12 +2088,12 @@ | | | -------------- - поле мантиссы | ------------------------ - поле порядка --------------------------- - бит знака -Return to contents. +Return to contents. - +

6.7.2 Константы с плавающей точкой. - +

Компилятор отличает вещественное число от целого по наличию в нем точки. Начинаться вещественное число должно либо цифрой от 0 до 9, либо @@ -2106,24 +2105,24 @@ -15.75 3.14e2 1.234567E-20 -Return to contents. +Return to contents. - +

6.7.3 Диапазон допустимых значений. - +

Вещественное число типа float может находиться в диапазоне от 3.37E38 до -3.37E38. Минимально близкое к нулю значение равняется 1.17E-38 и -1.17E-38. Записывать вещественное число одинарной точности более чем 8 цифрами не имеет смысла. Показатель степени может принимать значения от +38 до -38. -Return to contents. +Return to contents. - +

6.7.4 Математические операции. - +

Компилятор поддерживает 4 основных действия над переменными типа float: сложение, вычитание, умножение и деление. Поддерживается также @@ -2136,12 +2135,12 @@ ВНИМАНИЕ! Составные математические операции выполняются в том порядке, в котором они записаны, невзирая на правила арифметики. -Return to contents. +Return to contents. - +

6.7.5 Преобразования типов. - +

При математических операциях конечным итогом которых является переменная типа float, все операнды других типов перед вычислением будут @@ -2153,12 +2152,12 @@ участие в вычислениях. При присваивании целочисленной переменной значения переменной типа float, из нее также будет выделена целая часть, которая и будет присвоена целочисленной переменной. -Return to contents. +Return to contents. - +

6.7.6 Операции сравнения. - +

Если при операции сравнения левым операндом является переменная или выражение типа float, а правым является целочисленное значение, то @@ -2166,12 +2165,12 @@ левым операндом является целочисленное выражение или переменная, а правым операндом значение типа float, то из правого операнда будет выделена целая часть, которая и примет участие в сравнении. -Return to contents. +Return to contents. - +

6.7.7 Сравнение переменных типа float с 32-битным регистром. - +

В регистрах могут содержаться знаковые, без знаковые и вещественные данные. По умолчанию считается, что в регистре находится без знаковое целое @@ -2183,19 +2182,19 @@ void PROC() { - IF( f < signed ECX) //в регистре ECX находится знаковое число + IF( f < signed ECX) //в регистре ECX находится знаковое число IF( unsigned EBX > f) //в регистре EBX находится без знаковое число IF( f == float EAX ) //в EAX находится число формата float } ВНИМАНИЕ! При операции сравнения с участием переменой типа float, содержимое регистра AX будет разрушено. -Return to contents. +Return to contents. - +

6.8 Указатели. - +

В C-- сейчас указатели реализованы не в полном объеме. Поэтому многие вещи, которые возможны в обычных языках C, здесь будут недоступны. @@ -2209,13 +2208,13 @@ int i; char *tstr; { - FOR(i=0; string[i]!=0; i++){ - WRITESTR(string[i]); - WRITELN(); - } - FOR(tstr=str;byte *tstr!=0; tstr++){ - WRITE(byte *tstr); - } + FOR(i=0; string[i]!=0; i++){ + WRITESTR(string[i]); + WRITELN(); + } + FOR(tstr=str;byte *tstr!=0; tstr++){ + WRITE(byte *tstr); + } } Указатели можно использовать при передаче параметров процедурам, а в @@ -2235,14 +2234,14 @@ инициализируется указатель. Т.е. Вы можете указателю на char присвоить указатель на int или указателю на процедуру присвоить адрес переменной. Это может вызвать ошибку в работе программы. -Return to contents. +Return to contents. - +

7. Адресация. 7.1 Относительная адресация. - +

Изначально индексный доступ к элементам в массивах любого типа в компиляторе осуществлялся побайтно, независимо от объявленного типа данных. @@ -2349,12 +2348,12 @@ числовую константу или регистры BX,DI,SI,BP компилятор использует эти значения без изменения. Во всех других случаях будет коррекция значения в зависимости от типа массива. -Return to contents. +Return to contents. - +

7.2 Абсолютная адресация. - +

Абсолютная адресация также возможна. Действуют те же самые ограничения на индексы, что и при относительной адресации. @@ -2441,25 +2440,25 @@ Сохранить BX в сегменте стека по смещению 42: SSWORD [42] = BX; -Return to contents. +Return to contents. - +

8. Работа с блоками данных. 8.1 Структуры. 8.1.1 Что такое структуры. - +

Структура позволяет объединить в одном объекте совокупность значений, которые могут иметь различные типы. -Return to contents. +Return to contents. - +

8.1.2 Синтаксис. - +

struct [<тег>] { <список-объявлений-элементов> } <описатель>[,<описатель>...]; @@ -2510,12 +2509,12 @@ struct можно не писать. Т.е можно написать вот так: test dd; -Return to contents. +Return to contents. - +

8.1.3 Инициализация структур при объявлении. - +

После объявления структуры ее элементы могут принимать произвольные значения. Что бы этого не было надо структуры проинициализировать. @@ -2553,12 +2552,12 @@ В этом примере на место где расположена структура dd при компиляции будет загружен фрагмент из файла file.dat длиной 10 байт со смещения 24. Недостающие байты будут заполнены нулями. -Return to contents. +Return to contents. - +

8.1.4 Инициализация структуры при выполнении программы. - +

При выполнении программы, кроме присвоения каждому элементу структуры значения, можно проинициализировать всю структуру присвоением ей числа или @@ -2591,12 +2590,12 @@ Будет скопировано содержимое третьей структуры массива структур aa в структуру rr. -Return to contents. +Return to contents. - +

8.1.5 Операции с элементами структур. - +

С элементами структур можно выполнять все те операции, которые доступны для переменных соответствующего типа. Например: Объявлена @@ -2628,25 +2627,25 @@ long c; // третий элемент структуры }; - struct BB //тег второй структуры + struct BB //тег второй структуры { - word aa; // первый элемент - AA bb; // второй элемент - вложенная структура - }ss; // объявляем структуру с тегом BB + word aa; // первый элемент + AA bb; // второй элемент - вложенная структура + }ss; // объявляем структуру с тегом BB void proc() { AX=#ss.bb.b; // получить адрес элемента b структуры bb в структуре ss AX=#BB.bb.b; // получить смещение этого же элемента в теге BB - AX=sizeof(ss.bb); // получить размер элемента bb в структуре ss - AX=sizeof(BB.bb); // получить размер элемента bb в теге BB + AX=sizeof(ss.bb); // получить размер элемента bb в структуре ss + AX=sizeof(BB.bb); // получить размер элемента bb в теге BB } -Return to contents. +Return to contents. - +

8.1.6 Вложенные структуры. - +

При объявлении тегов структур можно использовать теги других, объявленных ранее структур. Пример вложенных структур: @@ -2696,12 +2695,12 @@ AX=second[2].first[j].a; //а этот синтаксис допустим. AX=second[i].first[3].a; } -Return to contents. +Return to contents. - +

8.1.7 Отображение тега структуры на блок памяти. - +

Отображение тега структуры на блок памяти является альтернативой указателям на структуры. @@ -2750,12 +2749,12 @@ локальными и параметрическими переменными. В 32-битном режиме можно использовать любой кроме ESP и EBP регистр, а регистры EDI и ESI надо использовать осторожно. -Return to contents. +Return to contents. - +

8.1.8 Битовые поля структур. - +

Битовые поля структур используются для экономии памяти, поскольку позволяют плотно упаковать значения, и для организации удобного доступа к @@ -2794,12 +2793,12 @@ примененный к битовому полю вернет размер этого поля в битах. При использовании битового поля, его содержимое будет расширятся в регистр как без знаковое целое число. -Return to contents. +Return to contents. - +

8.2 Объединения. - +

Объединения позволяют в разные моменты времени хранить в одном объекте значения различного типа. @@ -2824,8 +2823,8 @@ void test() { - regEAX = 0x2C; - BL = regAL; //в регистре BL окажется значение 0x2C + regEAX = 0x2C; + BL = regAL; //в регистре BL окажется значение 0x2C } Объединять можно переменные различных типов, массивы, строковые @@ -2837,12 +2836,12 @@ элемент объединения. Если же первый элемент объединения не инициализирован, а следующие элементы инициализированы, то это вызовет сообщение компилятора об ошибке. -Return to contents. +Return to contents. - +

8.3 Команды 'FROM' и 'EXTRACT'. - +

В C-- есть очень оригинальные команды, которых нет в других языках. Это FROM и EXTRACT. @@ -2869,14 +2868,14 @@ byte LIT128 = EXTRACT "8X16.FNT", 16*128, 16; byte LIT130 = EXTRACT "8X16.FNT", 16*130, 16; -Return to contents. +Return to contents. - +

9. Операторы. 9.1 Условные инструкции. - +

Условные инструкции, при помощи которых осуществляется ветвление, такие же как в C. @@ -2920,12 +2919,12 @@ Это можно просто исправить, заменив в этом месте инструкцию ELSE на else. -Return to contents. +Return to contents. - +

9.2 Циклы do{} while. - +

В таком цикле блок кода, составляющий тело цикла, будет повторяться, пока условное выражение имеет значение истинно. @@ -2944,12 +2943,12 @@ Условное выражение в do {} while инструкции должно соответствовать тем же правилам, что и в инструкциях IF и if. -Return to contents. +Return to contents. - +

9.3 Циклы loop, LOOPNZ, loopnz. - +

Циклы loop повторяют блок кода, пока определенная переменная или регистр, выполняющие роль счетчика цикла, содержат значение, отличное от @@ -3022,12 +3021,12 @@ максимально эффективным при оптимизации на размер кода, если в качестве параметра-счетчика используется регистр CX/ECX. При этом компилятор использует ассемблерные инструкции JCXZ/JECXZ и LOOP. -Return to contents. +Return to contents. - +

9.4 Цикл while, WHILE. - +

Синтаксис: while(<выражение>) @@ -3043,19 +3042,19 @@ меньше 127 байт. Примеры: - while ( i < 20 ){ - WRITEWORD(i); - i++; - } + while ( i < 20 ){ + WRITEWORD(i); + i++; + } - WHILE (i < 20 ) @WRITEWORD(i); //цикл либо будет бесконечным либо не + WHILE (i < 20 ) @WRITEWORD(i); //цикл либо будет бесконечным либо не //выполнится ни разу -Return to contents. +Return to contents. - +

9.5 Цикл for, FOR. - +

Синтаксис: for ([<начальное выражение>]; [<условие>]; [<приращение>]) @@ -3087,11 +3086,11 @@ 127 байт. Примеры: - for(i=0;i<5;i++){ - WRITESTR("СТРОКА "); - WRITEWORD(i); - WRITELN(); - } + for(i=0;i<5;i++){ + WRITESTR("СТРОКА "); + WRITEWORD(i); + WRITELN(); + } Число начальных выражений и число приращений не ограничено. Каждый оператор в начальных выражениях и приращениях должен разделяться @@ -3104,21 +3103,21 @@ скобки. Пример: for ( a=0 ; (a>=0) && (a<10) ; a++ ){... -Return to contents. +Return to contents. - +

9.6 Оператор переключатель switch. - +

Синтаксис: switch(<выражение>){ case <константа>: <оператор> - ... + ... case <константа>: <оператор> - ... + ... ... default: <оператор> @@ -3222,29 +3221,29 @@ Кроме того, что новый формат записи более компактен и более читабелен, но еще при этом компилятор создает более компактный и быстрый код. -Return to contents. +Return to contents. - +

9.7 Оператор перехода goto, GOTO. - +

Синтаксис: goto <метка>; - . - . - . + . + . + . <метка>: Оператор перехода goto передает управление на оператор помеченный меткой. Аналогом в ассемблере оператору goto является команда jmp near. Аналогом в ассемблере оператору GOTO является команда jmp short. -Return to contents. +Return to contents. - +

9.8 Оператор разрыва break, BREAK. - +

Оператор разрыва break прерывает выполнение операторов do-while, for, switch, while, loop, loopnz, LOOPNZ. Он может содержаться @@ -3256,18 +3255,18 @@ до конца цикла должен быть меньше 127 байт. Примеры: - FOR (i=0; ; i++){ - FOR(j=0; j < WIDTH; j++){ - IF(i==5)BREAK; - } - IF(i==10)BREAK; - } -Return to contents. + FOR (i=0; ; i++){ + FOR(j=0; j < WIDTH; j++){ + IF(i==5)BREAK; + } + IF(i==10)BREAK; + } +Return to contents. - +

9.9 Оператор продолжения continue, CONTINUE. - +

Оператор продолжения continue передает управление на следующую итерацию в циклах do-while, for, while, loop, loopnz. В циклах @@ -3279,12 +3278,12 @@ Оператор CONTINUE аналогичен continue, но при этом генерируется код на 1 байт короче. Размер сгенерированного кода от места где применяется CONTINUE до начала итерации должен быть меньше 127 байт. -Return to contents. +Return to contents. - +

9.10 Логическое объединение условий. - +

Существует возможность логического объединения сравнений в условиях IF и if, циклах do{}while, while{}, WHILE{}, for{} и FOR{}. @@ -3298,16 +3297,16 @@ Пример: - if ( (a>3) && (b>4) || (c<8) ){ + if ( (a>3) && (b>4) || (c<8) ){ Т.е. если произвести расшифровку этого условия, то получится следующее: условие выполнится если a>3 и b>4 или a>3 и c<8. -Return to contents. +Return to contents. - +

9.11 Переход через циклы. - +

Для операторов BREAK, break, CONTINUE, continue введена поддержка числового параметра, определяющего, сколько циклов надо @@ -3317,10 +3316,10 @@ do{ loop(CX){ for(BX=0;BX<10;BX++){ - break; //стандартный оператор - break 0; //break с параметром - пропустить 0 циклов - break 1; //break с параметром - пропустить 1 цикл - break 2; //break с параметром - пропустить 2 цикла + break; //стандартный оператор + break 0; //break с параметром - пропустить 0 циклов + break 1; //break с параметром - пропустить 1 цикл + break 2; //break с параметром - пропустить 2 цикла } LABL0: } @@ -3342,12 +3341,12 @@ Ну и я надеюсь, Вам понятно, что значение параметра не может превышать числа циклов находящихся перед текущим. Так для одиночного цикла этот параметр может принимать максимальное и единственное значение - 0. -Return to contents. +Return to contents. - +

9.12 Инвертирование флага проверки условий. - +

Инвертирование флага проверки условий в операциях сравнения if/IF for/FOR while/WHILE происходит с помощью символа ! - not. @@ -3358,12 +3357,12 @@ IF ( proc() == 0 )... и IF ( ! proc() ) ... являются синонимами. -Return to contents. +Return to contents. - +

9.13 Вычисление выражения, а затем проверка условия. - +

В операциях сравнения в левом операнде теперь допустимо использовать вычисления выражения с присваиванием и операции инкремента, декремента. @@ -3377,12 +3376,12 @@ Во всех этих примерах сначала произойдет вычисление выражения в левой части операции сравнения, а потом будет произведено сравнение результата с правой частью выражения сравнения. -Return to contents. +Return to contents. - +

9.14 Проверка битов при операции сравнения. - +

Если в левой части выражения сравнения написано: BX & 5, то при вычислении выражения содержимое регистра BX будет изменено инструкцией @@ -3400,12 +3399,12 @@ IF ( ! $test AX,5) IF ( asm test AX,5) IF ( ! asm { test AX,5 } ) -Return to contents. +Return to contents. - +

9.15 Оператор перестановки. - +

В C-- есть оператор, который не встречается в других языках, это оператор перестановки. Оператор перестановки меняет местами содержимое двух @@ -3428,12 +3427,12 @@ памяти, будет разрушено содержимое EAX. В любом другом случае, например, между переменной в памяти и регистром, значения всех регистров будут сохранены. -Return to contents. +Return to contents. - +

9.16 Оператор отрицания. - +

C-- поддерживает быстрый синтаксис смены знака переменной - оператор отрицания. Поставив - (знак минус) перед идентификатором переменной памяти @@ -3445,12 +3444,12 @@ -AX; // результат тот же, что и при 'AX = -AX;' ,но быстрее. -tree; // то же самое, что 'tree = -tree;' ,но быстрее. -BH; // меняет знак BH. -Return to contents. +Return to contents. - +

9.17 Оператор инверсии. - +

C-- поддерживает быстрый синтаксис выполнения логической инверсии значения переменной - оператор инверсии. Поставив ! (восклицательный знак) @@ -3462,12 +3461,12 @@ !AX; // то же самое, что ' AX ^ = 0xFFFF; ' но быстрее. !node; // заменяет значение 'node' его логической инверсией. !CL; // то же самое, что ' CL ^ = 0xFF ' но быстрее. -Return to contents. +Return to contents. - +

9.18 Специальные условные выражения. - +

C-- поддерживает восемь специальных условных выражений: @@ -3496,12 +3495,12 @@ do { // здесь вы опять чего-то делаете } while( NOTOVERFLOW ); -Return to contents. +Return to contents. - +

9.19 Символ $ - вставляет текущий адрес программы. - +

Символ $, кроме того, что является признаком последующей ассемблерной инструкции, в языке C--, как и в языке Assembler может указывать текущий @@ -3515,14 +3514,14 @@ Примеры применения: - DW #main-$ //записать расстояние от процедуры main до текущего места - GOTO $+2; //перейти по адресу на 2 больше, чем текущий адрес -Return to contents. + DW #main-$ //записать расстояние от процедуры main до текущего места + GOTO $+2; //перейти по адресу на 2 больше, чем текущий адрес +Return to contents. - +

9.20 Ключевое слово static и оператор ::. - +

Если перед объявлением глобальной переменной, структуры или процедуры указать слово static, то эти переменная, структура или процедура будут @@ -3555,15 +3554,15 @@ int var; //объявляем локальную переменную с именем уже существующей //глобальной переменной { - (E)AX=var; //имеем доступ только к локальной переменной + (E)AX=var; //имеем доступ только к локальной переменной (E)AX=::var; //а так можно получить доступ к глобальной переменной } -Return to contents. +Return to contents. - +

9.21 Оператор sizeof. - +

Операция sizeof определяет размер памяти, который соответствует объекту или типу. Операция sizeof имеет следующий вид: @@ -3608,12 +3607,12 @@ sizeof ( file "filename.dat" ) Результатом этой операции будет размер файла "filename.dat". -Return to contents. +Return to contents. - +

9.22 Метки перехода. - +

Метки перехода применяются для указания начальных точек участков кода, используемых командами перехода встроенного ассемблера и операторами @@ -3642,14 +3641,14 @@ качестве имен для меток вне процедур могут быть использованы уникальные идентификаторы, в которых можно использовать большие, маленькие и смесь больших и маленьких букв. -Return to contents. +Return to contents. - +

10. Ассемблер. 10.1 Поддержка команд ассемблера. - +

Встроенный в C-- ассемблер поддерживает все инструкции 8088/8086, 80286, 80386, 80486, Pentium, Pentium II и Pentium III процессоров. @@ -3658,36 +3657,36 @@ доллара $. Поддерживается также ключевое слово asm, которое являясь синонимом к символу доллара, еще и поддерживает объединение ассемблерных инструкций в блоки. -Return to contents. +Return to contents. - +

10.2 Ключевое слово asm. - +

Ключевое слово asm является синонимом к $ - префикс ассемблерной команды. После слова asm можно писать блок ассемблерных команд. Пример: - asm { - . - . - push AX + asm { + . + . + push AX labl: - push BX - mov AX,0x1234 - jmp short labl - . - . - . - } + push BX + mov AX,0x1234 + jmp short labl + . + . + . + } Метки внутри блока ассемблерных команд допустимы. -Return to contents. +Return to contents. - +

10.3 Префикс dup - повторение инструкций DB/DW/DD. - +

Для ассемблерных инструкции DB, DW, DD введена возможность использовать префикс повторений dup. Применение этого префикса имеет следующий @@ -3700,12 +3699,12 @@ В отличие от аналога этого префикса из ассемблера повторяемую величину заключать в скобки нельзя. -Return to contents. +Return to contents. - +

10.4 Инструкции процессора Pentium III. - +

В компилятор добавлена поддержка 19 новых инструкций MMX расширения @@ -3798,18 +3797,18 @@ { asm{ movaps var8_128,xmm0 //в массив из 16 байт будет записано содержимое XMM0 - movaps xmm1,var16_128 //в XMM1 будет записано содержимое 8 слов + movaps xmm1,var16_128 //в XMM1 будет записано содержимое 8 слов movaps var32_128,xmm1 //в массив из 4 двойных слов будет записано XMM1 } } -Return to contents. +Return to contents. - +

11. Процедуры. 11.1 Типы процедур, функций и макрокоманд. - +

Сейчас C-- поддерживает 4 типа вызова процедур: cdecl, pascal, stdcall и fastcall. Вот краткие характеристики этих типов вызовов процедур: @@ -3853,12 +3852,12 @@ Объявление процедур введено для того, чтобы сообщать компилятору о типе возврата из процедур, способе передачи параметров процедуре и их числе. -Return to contents. +Return to contents. - +

11.2 Стековые процедуры. - +

Стековые процедуры по умолчанию объявляются при помощи идентификатора, который содержит, по крайней мере, один символ строчных букв (букв нижнего @@ -3882,10 +3881,10 @@ В следующем примере стековая процедура возвращает сумму всех своих параметров (имеющих различные типы) как величину типа word: - word add_them_all (int a,b,c; byte d,e; word x,y) - { - return( a+b+c+d+e+x+y ); - } + word add_them_all (int a,b,c; byte d,e; word x,y) + { + return( a+b+c+d+e+x+y ); + } Ранее C-- делал вызовы стековых процедур лишь в стиле pascal. Преимуществом этого способа вызова процедур является компактность и более @@ -3949,12 +3948,12 @@ необязательно (тогда компилятор не будет контролировать число и тип передаваемых параметров), но если Вы их вставите, то включится механизм контроля за числом и типом параметров. -Return to contents. +Return to contents. - +

11.3 Регистровые процедуры. - +

Регистровые процедуры определяются, по умолчанию, при помощи идентификатора, который не содержит символов строчных букв. Или же явным @@ -4000,12 +3999,12 @@ Для того, чтобы использовать регистровую процедуру как макрокоманду, она должна быть объявлена как динамическая процедура. Динамические процедуры описаны в следующем подразделе. -Return to contents. +Return to contents. - +

11.4 Динамические процедуры. - +

Динамические процедуры - процедуры, которые определены, но вставляются в код программы, только если есть вызов. Динамические процедуры могут @@ -4029,12 +4028,12 @@ IF (int AX < 0) -AX; } -Return to contents. +Return to contents. - +

11.4.1 Установка динамической процедуры в определенное место программы. - +

Динамические процедуры, если они не используются как макросы и если они были востребованы в программе, вставляются в код программы в самом @@ -4054,12 +4053,12 @@ @ void proc (); - В итоге динамическая процедура будет вставлена в код программы не в + В итоге динамическая процедура будет вставлена в код программы не в конце ее, как обычно, а в месте, где будет расположена эта строка. Если динамическая процедура имеет параметры, то прописывать эти параметры необязательно. - В компиляторе есть еще более мощное средство, позволяющее все + В компиляторе есть еще более мощное средство, позволяющее все динамические объекты ( процедуры, переменные, структуры ) расположить в указанном месте, а не в конце программы, как обычно. Это директива #setdinproc. Встретив эту директиву, компилятор немедленно расположит все @@ -4068,14 +4067,14 @@ обычно, в конце программы, если конечно, не будет повторно применена директива #setdinproc. - Это может быть применено и быть полезным при создании резидентных + Это может быть применено и быть полезным при создании резидентных программ (TSR) и драйверов устройств. -Return to contents. +Return to contents. - +

11.5 inline-процедуры. - +

inline-процедурами могут быть динамические процедуры, которые можно использовать как макросы. Но в отличие от макросов, inline-процедуры, при @@ -4106,14 +4105,14 @@ { IF ( int AX < 0 ) -AX ; } -Return to contents. +Return to contents. - +

11.5.1 Другое применение inline. - +

- Ключевое слово inline имеет в процедурах и другое применение. Если + Ключевое слово inline имеет в процедурах и другое применение. Если это слово расположено перед началом блока процедуры, то для такой процедуры не создается кадр стека и не генерируется завершающий процедуру ret. Пример: @@ -4124,7 +4123,7 @@ ... } - Такие процедуры не должны содержать локальных переменных. Если + Такие процедуры не должны содержать локальных переменных. Если процедура является регистровой (тип fastcall), то с передачей ей параметров нет проблем. Если же процедура является стековой, то передать в такую процедуру параметры Вы можете, но воспользоваться этими @@ -4135,20 +4134,20 @@ inline { AX=par1; /* компилятор обратится с параметру 'par1' через регистр BP. - Но так как кадр стека не был создан, при выполнении этого + Но так как кадр стека не был создан, при выполнении этого кода программа будет работать не правильно. */ ... } - Встретив такое определение процедуры, компилятор выдаст предупреждение + Встретив такое определение процедуры, компилятор выдаст предупреждение о том, что в таких процедурах использовать локальные и параметрические переменные нельзя. -Return to contents. +Return to contents. - +

11.6 Процедуры обработки прерываний. - +

Процедуры обработки прерываний определяются следующим способом: @@ -4183,12 +4182,12 @@ При завершении процедуры прерывания будет автоматически сгенерирована инструкция выхода из обработчика прерывания - IRET. -Return to contents. +Return to contents. - +

11.7 Замена return на goto. - +

В некоторых ситуациях, при компиляции программы, оператор return будет заменяться на goto. Это происходит при разрешенной оптимизации по @@ -4212,12 +4211,12 @@ компилятор выдаст сообщение об ошибке. При использовании return на расстоянии меньше 128 байт до конца кода, компилятор выдаст вам предупреждение о возможном использовании RETURN. -Return to contents. +Return to contents. - +

11.8 Возвращаемые значения. - +

Возвращаемые из функций значения располагаются в регистрах. В таблице показано, какой регистр используется для каждого из возвращаемых типов: @@ -4263,7 +4262,7 @@ carry флага, а не сравнение регистра AX. Пример использования возврата флагов из процедур: - int CARRYFLAG FOPEN(); // объявление процедуры + int CARRYFLAG FOPEN(); // объявление процедуры void proc() { @@ -4283,16 +4282,16 @@ А вот варианты, в которых, несмотря на то, что для процедуры объявлен возврат флага, будет производиться сравнение регистра AX: - IF ( FOPEN() == 5 )... // производится сравнение + IF ( FOPEN() == 5 )... // производится сравнение IF ( FOPEN() + 2 )... // результат процедуры подвергается дальнейшему // вычислению, в результате которого флаги будут - // изменены. -Return to contents. + // изменены. +Return to contents. - +

11.9 Объявление параметров в регистровых процедурах. - +

Ранее каждому параметру регистровой процедуры соответствовал строго определенный регистр. Например, для переменных типа int или word первый @@ -4313,11 +4312,11 @@ параметр процедуре, его размерностью и числом передаваемых параметров. Вот как будет выглядеть объявление и использование процедуры STRCPY: - void STRCPY ( DI, SI ) ; //это объявление процедуры + void STRCPY ( DI, SI ) ; //это объявление процедуры void main () { - STRCPY ( #dest, #sourc ) ; //а это вызов процедуры + STRCPY ( #dest, #sourc ) ; //а это вызов процедуры } Можно не делать объявления процедуры, а указать расположение регистров @@ -4357,7 +4356,7 @@ | |---------------------------------------- Модификатор, указывающий, что | эта проц. явл. регистровой. |--------------------------------------------- Процедура возвращает перемен. - типа int. + типа int. Если Вы сделали объявление регистров процедуры, то компилятор будет строго следить за количеством указанных параметров при вызове этой @@ -4376,12 +4375,12 @@ ни в заголовке самой процедуры, то компилятор будет считать, что параметры в эту процедуру передаются старым способом. Таким образом, достигается полная совместимость с предыдущими версиями компилятора. -Return to contents. +Return to contents. - +

11.10 Объявление параметров в стековых процедурах. - +

Как известно, ранее в C-- контроль за числом и типом передаваемых процедуре параметров возлагался на программиста. Поэтому возникла непростая @@ -4423,12 +4422,12 @@ Вот как будет выглядеть объявление процедуры printf: void cdecl printf ( word, ... ); -Return to contents. +Return to contents. - +

11.11 Использование макрокоманд. - +

Теперь любая динамическая процедура может быть использована как макрос. Если перед вызовом динамической процедуры поставить символ @, то код этой @@ -4439,12 +4438,12 @@ инструкцией ADD SP,SIZE_PARAMETRS сразу после окончания кода вставленного макроса. Поэтому, если эта процедура использовала флаги в качестве возврата, то они будут разрушены. -Return to contents. +Return to contents. - +

11.12 Передача параметров в стековые процедуры через регистры. - +

При передаче параметров через регистры, чаще всего получается более компактный и быстрый код. Но содержимое регистров может быть легко @@ -4479,12 +4478,12 @@ процедур типа pascal регистровые параметры лучше располагать после стековых параметров. Для процедур типа cdecl и stdcall сначала лучше располагать регистровые параметры. -Return to contents. +Return to contents. - +

11.13 Вызов процедур с адресом в регистре. - +

В C-- допустимо делать вызов процедуры, адрес которой находится в регистре. Параметры для такого вызова передаются только через стек. Тип @@ -4512,12 +4511,12 @@ 0111 85C0 test ax,ax 0113 7503 jne 118h 0115 B80200 mov ax,2 -Return to contents. +Return to contents. - +

11.14 Встроенные в компилятор процедуры. - +

Для некоторых процедур Вы не найдете их исходные тексты в библиотеках компилятора. Код этих процедур генерирует компилятор. Вот список этих @@ -4553,12 +4552,12 @@ библиотечные процедуры. Встретив определение такой процедуры, компилятор не будет выдавать никаких сообщение, он просто будет применять Ваш вариант процедуры. -Return to contents. +Return to contents. - +

11.14.1 Процедуры ABORT, ATEXIT и EXIT. - +

Процедуры ABORT и EXIT связаны с работой директивы #atexit и процедурой ATEXIT. Наиболее оптимальную их реализацию и взаимную @@ -4584,13 +4583,13 @@ работу программы с кодом возврата 0. Процедуре EXIT передается в качестве параметра код возврата, с которым она и завершает работу программы. -Return to contents. +Return to contents. - +

11.14.2 Процедуры inp/inportb, inport, inportd, outp/outportb, outport и outportd - +

Эти процедуры всегда вставляются в код как макросы, т.е. для этих процедур никогда не генерируется вызов процедуры. В зависимости от @@ -4611,12 +4610,12 @@ Имена процедур inp и inportb, также как и имена outp и outportb являются синонимами. -Return to contents. +Return to contents. - +

11.14.3 Процедуры для работы с вещественными числами. - +

Эти процедуры реализуются компилятором и всегда вставляются в код как макросы, т.е. для них никогда не генерируется вызов процедуры. Кроме @@ -4644,14 +4643,14 @@ float sin ( float val ); float sqrt ( float val ); float tan ( float val ); -Return to contents. +Return to contents. - +

11.15 Классы. 11.15.1 Объявление процедур в структурах. - +

С введение поддержки объявления процедур в структурах, структура становится подобной классу в C++. Т.е. такая процедура становится методом @@ -4659,15 +4658,15 @@ struct Point // объявление класса { - int x; // элементы данных - int y; // класса типа Point - void SetX(int); // объявление методов - void SetY(int); // класса Point + int x; // элементы данных + int y; // класса типа Point + void SetX(int); // объявление методов + void SetY(int); // класса Point }; void Point::SetX(int _x) //определение процедуры класса Point { - IF((_x>=0)&&(_x<=MAX_X)) x=_x; + IF((_x>=0)&&(_x<=MAX_X)) x=_x; // переменные x, y являются членами этого класса и поэтому доступ к ним из // процедур этого же класса осуществляется напрямую. } @@ -4690,12 +4689,12 @@ при ее определении, в самом ее начале, надо написать символ двоеточия : (также как и для обычных динамических процедур). Но такая динамическая процедура не может быть использована как макрос. -Return to contents. +Return to contents. - +

11.15.2 Наследование. - +

В C-- поддерживаются простые и множественные наследования. Объявление структуры с наследованием имеет следующий синтаксис: @@ -4753,29 +4752,29 @@ d.C::x0=0; являются равнозначными. -Return to contents. +Return to contents. - +

11.15.3 Наследование процедур. - +

- Если в базовом классе есть процедура, а в производном классе Вы эту + Если в базовом классе есть процедура, а в производном классе Вы эту процедуру переопределили, то эта процедура будет переопределена и в базовом классе. Таким образом процедура определенная в базовом классе будет потеряна. Пример: struct Point // базовый класс { - int x; // элементы данных - int y; // класса типа Point - void SetX(int); // объявление методов - void SetY(int); // класса Point + int x; // элементы данных + int y; // класса типа Point + void SetX(int); // объявление методов + void SetY(int); // класса Point }; void Point::SetX(int _x) // определение процедуры класса Point { - IF((_x>=0)&&(_x<=MAX_X)) x=_x; + IF((_x>=0)&&(_x<=MAX_X)) x=_x; } struct Point2 : Point // производный класс @@ -4790,10 +4789,10 @@ void Point3::SetX(int _x) // в этом производном классе переопределяем { // процедуру SetX - IF((_x>=80)&&(_x<=MAX_X)) x=_x; + IF((_x>=80)&&(_x<=MAX_X)) x=_x; } - Процедура SetX, определенная в базовом классе Point, теперь будет + Процедура SetX, определенная в базовом классе Point, теперь будет недоступна. Вместо кода определенного в этом классе, будет вызываться код процедуры, определенный в наследуемом классе Point3. При вызове процедуры SetX из другого производного класса Point2 будет также вызываться код @@ -4801,21 +4800,21 @@ процедуру таким образом, Вы замените код этой процедуры в базовом классе и во всех его наследуемых классах. - Если Вам необходимо, чтобы код новой процедуры был доступен + Если Вам необходимо, чтобы код новой процедуры был доступен одновременно с кодом старой процедуры, то в производном классе Вам необходимо сделать еще одно объявление этой процедуры. Пример: struct Point // базовый класс { - int x; // элементы данных - int y; // класса типа Point - void SetX(int); // объявление методов - void SetY(int); // класса Point + int x; // элементы данных + int y; // класса типа Point + void SetX(int); // объявление методов + void SetY(int); // класса Point }; void Point::SetX(int _x) // определение процедуры класса Point { - IF((_x>=0)&&(_x<=MAX_X)) x=_x; + IF((_x>=0)&&(_x<=MAX_X)) x=_x; } struct Point2 : Point // производный класс @@ -4832,24 +4831,24 @@ void Point3::SetX(int _x) // в этом производном классе переопределяем { // процедуру SetX - IF((_x>=80)&&(_x<=MAX_X)) x=_x; - EDI=this; - EDI.Point.SetX(_x); // делаем вызов одноименной процедуры из - // базового класса + IF((_x>=80)&&(_x<=MAX_X)) x=_x; + EDI=this; + EDI.Point.SetX(_x); // делаем вызов одноименной процедуры из + // базового класса } - Теперь из производного класса Point3 Вам доступны две различные + Теперь из производного класса Point3 Вам доступны две различные процедуры с одним именем SetX. А из базового класса Point и из другого производного класса Point2 будет по прежнему доступен только базовый вариант процедуры SetX. -Return to contents. +Return to contents. - +

12. Типы выходных файлов. 12.1 Выходные файлы типа COM. - +

Этот тип выходного файла получается автоматически по умолчанию. @@ -4858,24 +4857,24 @@ и small для 16-битного кода, а также 32-битные для DOS и Windows. Также есть возможность получения выходного файла в формате OBJ, что позволяет связывать программы на C-- с программами на других языках. -Return to contents. +Return to contents. - +

12.2 Выходные файлы типа EXE. - +

Этот формат файла можно получить, если компилировать с ключом командной строки /exe или /e. Возможно также поддержка EXE-формата через выходной файл формата OBJ, который можно затем обработать линковщиком, не входящим в пакет C--. -Return to contents. +Return to contents. - +

12.3 Выходной файл *.EXE с моделью памяти tiny. - +

Фактически код файла *.exe модели tiny ничем не отличается от кода *.com. В сущности, это тот же com-файл, к которому добавлен 32-байтный @@ -4887,12 +4886,12 @@ Чтобы получить exe-файл с моделью памяти tiny, надо запустить компилятор с ключом в командной строке /TEXE. -Return to contents. +Return to contents. - +

12.4 Объектный выходной файл OBJ. - +

В настоящее время C-- может только создавать OBJ-файлы, но не может их компоновать. @@ -4914,8 +4913,8 @@ // тип cdecl и тип возврата void extern int buts,cubs; // объявление двух внешних переменных типа int extern struct IPXL ipxl; // объявление внешней структуры ipxl имеющей тег - // IPXL, причем тег этой структуры должен быть - // описан ранее. + // IPXL, причем тег этой структуры должен быть + // описан ранее. Появление возможности объявлять внешние объекты позволяет подключать к obj-модулю на C-- модули написанные на других языках или подключать к @@ -4941,14 +4940,14 @@ удалось лишь с помощью wlink и расширителя zrdx.exe. Создание obj-файлов под windows не предусмотрено. -Return to contents. +Return to contents. - +

12.5 COM файл symbiosis. 12.5.1 СИМБИОЗ - что это такое? - +

Транслятор C-- имеет ключ, позволяющий добавлять компилируемую программу к концу уже имеющегося COM файла. Это называют COM-файл @@ -4960,12 +4959,12 @@ прекратится, и первоначальный код COM-файла не будет выполнен. Это позволяет программе, добавленной к COM файлу, определять, будет ли управление передано на первоначальный код. -Return to contents. +Return to contents. - +

12.5.2 Как это делать. - +

Чтобы сделать это, Вы должны использовать ключ /SYM в командной строке компилятора, в которой указывается полное имя COM-файла, к @@ -4976,37 +4975,37 @@ C-- /SYM C:\COMMAND.COM HELLO.C-- Будет создан выходной файл HELLO.COM . -Return to contents. +Return to contents. - +

12.5.3 Использование. - +

Вы можете, вероятно, придумать большое количество путей использования этой функции, типа: - Добавление защиты с использованием пароля к некоторым - специальным COM файлам. + специальным COM файлам. - Уменьшение памяти, доступной COM файлу при запуске. - Инициализация режима видео для COM файла. -Return to contents. +Return to contents. - +

12.5.4 Злоупотребления. - +

Любой злоумышленник может придумать и вредные применения для этой функции. Наиболее очевидное из них - создание троянских коней. Я хотел бы указать, что это неконструктивное использование C--, и любое разрушительное использование симбиозов COM-файлов запрещено. -Return to contents. +Return to contents. - +

12.6 SYS - драйверы устройств. - +

Компилятор значительно облегчит Ваш труд при написании драйверов. Компилятор сам создаст заголовок драйвера и процедуры СТРАТЕГИЯ и @@ -5049,12 +5048,12 @@ других процедурах обработки команд используете динамические процедуры, обязательно должна быть директива ?setdinproc. Глобальные переменные должны быть обязательно проинициализированы. -Return to contents. +Return to contents. - +

12.7 Компиляция кода расширителей ROM-BIOS. - +

Расширители ROM-BIOS (BIOS видеоконтроллеров, сетевых карт...) имеют определенную структуру и требования. C-- теперь может облегчить Вам процесс @@ -5106,14 +5105,14 @@ 3. Если директива ?movedatarom установлена в FALSE, то будьте внимательны при работе с инициализированными переменными. Они в этом режиме доступны только для чтения, и адресуются через регистр CS. -Return to contents. +Return to contents. - +

12.8 32-битные файлы. 12.8.1 32-битный код под DOS. - +

Для того чтобы откомпилировать 32-битную программу под DOS надо запустить компилятор с ключом командной строки /d32. Но работа 32-битной @@ -5154,12 +5153,12 @@ обычная DOS программа, и лишь в процессе работы переходит в 32-битный режим работы, размер программы ограничен размером свободной DOS памяти. Ну а преимуществом его является компактный размер исполняемого файла. -Return to contents. +Return to contents. - +

12.8.2 32-битный код под Windows. - +

Для того чтобы откомпилировать программу, написанную под Windows надо запустить компилятор с ключом командной строки /w32. @@ -5188,37 +5187,37 @@ С помощю ключа /W32C компилятор создает консольный файл под Windows. - Если при компиляции указывали опцию командной строки /j0 или + Если при компиляции указывали опцию командной строки /j0 или директиву #jumptomain NONE, то Ваша программа будет компилироваться без использования кода начальной инициализации, описание которого находится в файле startup.h--. - Код начальной инициализации для программ под Windows имеет следующий + Код начальной инициализации для программ под Windows имеет следующий вид: - hThisInst=GetModuleHandleA(0); + hThisInst=GetModuleHandleA(0); #ifdef __CONSOLE__ - hStdOut=GetStdHandle(-11); + hStdOut=GetStdHandle(-11); #endif lpszArgs=GetCommandLineA(); #ifdef __environ; - environ=GetEnvironmentStringsA(); + environ=GetEnvironmentStringsA(); #endif - main(); - ExitProcess(EAX); + main(); + ExitProcess(EAX); - Таким образом, в глобальных переменных hThisInst будет находится + Таким образом, в глобальных переменных hThisInst будет находится handl запущенного файла, а в lpszArgs адрес командной строки Вашего файла. Если Вы в командной строке указали опции /p или /argc или в начале вашего файла есть директивы #parsecommandline TRUE или argc TRUE, - то компилятор создаст дополнительный код сделающий разборку этой + то компилятор создаст дополнительный код сделающий разборку этой командной строки на части. Если Вы компилируете консольную программу, то в вашей программе будет еще одна глобальная переменная - hStdOut. В этой переменной хранится handl стандартного вывода (экрана). Если Вы при компиляции программы указали опцию /env, то в глобальной переменной environ хранится адрес переменной окружения программы. - После завершения работы процедуры main выполнятся процедура + После завершения работы процедуры main выполнятся процедура ExitProcess, которой в качестве параметра передается регистр EAX. Т.о. Вам для завершения работы программы будет достаточно сделать выход из процедуры main, предварительно загрузив в регистр EAX нужный Вам код @@ -5241,12 +5240,12 @@ т.е. без круглых скобок. В программе, при обращении к такой процедуре, ее имя надо писать без суффикса @8, т.е. вот так - ProcName(param1,param2); -Return to contents. +Return to contents. - +

12.8.3 Вызов API процедур по ординалам. - +

В динамически подключаемых библиотеках (DLL) каждой процедуре, кроме ее имени, соответствует уникальное число, которое называется ординалом. И @@ -5268,14 +5267,14 @@ можно двумя способами: a). Автоматически, с помощью опции командной строки IND=name.dll, - по которой компилятор просканирует эту библиотеку и импортирует из - нее все имена и ординалы процедур. (Импорт возможет только из - библиотек имеющих формат PE). + по которой компилятор просканирует эту библиотеку и импортирует из + нее все имена и ординалы процедур. (Импорт возможет только из + библиотек имеющих формат PE). b). В ручную указать в объявлении API-процедур и ее ординал. Делается - это так: после имени процедуры ставится точка, а за ней указывается - номер ординала. Вот пример объявления API-процедуры с указанием ее - ординала: + это так: после имени процедуры ставится точка, а за ней указывается + номер ординала. Вот пример объявления API-процедуры с указанием ее + ординала: extern WINAPI "user32.dll" { @@ -5297,12 +5296,12 @@ К сожалению, нет никаких гарантий того, что номер ординала для данной процедуры не изменится при смене версии динамической библиотеки. Поэтому использовать ординалы надо осторожно. -Return to contents. +Return to contents. - +

12.8.4 Создание DLL под Windows. - +

Динамически подключаемые библиотеки позволят получать более компактные программы и ускорить процесс компиляции. К минусам @@ -5324,12 +5323,12 @@ как _export необязательно. Затем этот файл нужно откомпилировать с ключом /dll. В результате Вы получите готовую динамически подключаемую библиотеку. -Return to contents. +Return to contents. - +

12.8.5 Инициализация DLL при загрузке. - +

Иногда, для работы процедур из динамических библиотек (DLL), бывает необходимым инициализировать некоторые переменные значениями, зависящими @@ -5350,12 +5349,12 @@ { ... } -Return to contents. +Return to contents. - +

12.8.6 Компиляция ресурсов. - +

Встроенный в C-- компилятор ресурсов по своим возможностям уступает специализированным компиляторам ресурсов, но этих возможностей, как мне @@ -5391,12 +5390,12 @@ Ничто не мешает Вам использовать компиляторы ресурсов от других языков. Главное, чтобы синтаксис файла ресурсов соответствовал выбранному компилятору. -Return to contents. +Return to contents. - +

12.9 Выходные файлы для MeOS. - +

Исполняемые файлы для операционной системы MenuetOS поддерживаются компилятором совсем недавно. Для того, чтобы откомпилировать файл для @@ -5409,14 +5408,14 @@ файл начальной инициализации startup.h--, в котором для операционной системы MenuetOS создан блок инициализации и завершения программы. Завершать выполнение таких программ можно просто выйдя из процедуры main. -Return to contents. +Return to contents. - +

13. Приложения. 13.1 Поиск включаемых файлов. - +

Поиск включаемого в вашу программу файла, имя которого объявляется директивой include и заключено в двойные кавычки "", производится @@ -5441,12 +5440,12 @@ Для консольной версии компилятора имена главного модуля и включаемых файлов могут иметь длину более 8 символов. -Return to contents. +Return to contents. - +

13.2 Регистры, которые должны быть сохранены. - +

Регистры, которые должны сохраняться - BP, DI, SI, DS, SS, SP, CS и IP. @@ -5475,12 +5474,12 @@ использованием CS и IP, следовательно их значения должны сохраняться. IP, как известно, указатель адреса команды, и CS и IP непосредственно не могут изменяться в процессорах 8086, 8088, 80286, 80386, 80486,... -Return to contents. +Return to contents. - +

13.3 C--.ini файл. - +

C--.ini файл предназначен для предустановки по умолчанию параметров компилятора. @@ -5531,12 +5530,12 @@ решать Вам, но как говорят, и я с этим согласен, лучше пользоваться золотой серединой - Часть параметров прописать в c--.ini файле, а другую непосредственно в компилируемом файле. -Return to contents. +Return to contents. - +

13.4 startup.h-- файл. - +

В этом файле находятся исходные тексты, которые компилируются компилятором в код начальной инициализации файла, для всех поддерживаемых @@ -5581,12 +5580,12 @@ либо в c--.ini файле или в командной строке компилятора укажете опцию d=_USELONGNAME. -Return to contents. +Return to contents. - +

13.5 mainlib.ldp файл. - +

В этом файле находится большое число процедур из основной библиотеки компилятора в уже откомпилированном виде. Все процедуры откомпилированы в @@ -5615,12 +5614,12 @@ cmmlib.rar. Извлеките программу cmmlib.exe из этого архива и расположите ее в одной с компилятором директории. Затем запустите эту программу с ключом /L и Вы получите список процедур находящихся в этой библиотеке. -Return to contents. +Return to contents. - +

13.6 C-- символы. - +

SYMBOL|FUNCTION |EXAMPLE -------------------------------------------------------------------- @@ -5669,29 +5668,9 @@ |флага операции сравнения. | ... |любое число параметров в | void proc(...); :: |разрешение видимости | ::var=0; -Return to contents. - -
-

- -

- -
+Return to contents. + + -
-
-
+

- - - - -
- - diff --git a/programs/other/table/calc.cpp b/programs/other/table/calc.cpp index 01922e38d6..a1854af074 100644 --- a/programs/other/table/calc.cpp +++ b/programs/other/table/calc.cpp @@ -579,7 +579,6 @@ char GetCsvSeparator(char *fname) char buffer[512]; kosFileInfo fileInfo; - rtlDebugOutString("hi"); rtlDebugOutString(fname); strcpy(fileInfo.fileURL, fname); @@ -720,12 +719,6 @@ int LoadFile(char *fname) char *d, *s, *k; int step = 0, items; - if (str_is_csv(fname)) - return LoadCSV(fname); - - - //rtlDebugOutString(fname); - strcpy(fileInfo.fileURL,fname); fileInfo.OffsetLow = 0; fileInfo.OffsetHigh = 0; @@ -740,11 +733,13 @@ int LoadFile(char *fname) return -1; } + if (str_is_csv(fname)) + return LoadCSV(fname); + + // clear the table reinit(); - //rtlDebugOutString("clear done"); - filesize = bdvk.size_low; fileInfo.rwMode = 0; diff --git a/programs/other/table/hello.cpp b/programs/other/table/hello.cpp index ba020278e1..5577b8e2b7 100644 --- a/programs/other/table/hello.cpp +++ b/programs/other/table/hello.cpp @@ -11,7 +11,7 @@ extern char params[1024]; #endif char params[1024]; -#define TABLE_VERSION "0.99.2" +#define TABLE_VERSION "0.99.3" // strings const char *sFileSign = "KolibriTable File\n"; @@ -24,6 +24,7 @@ const char er_file_not_found[] = "'Cannot open file' -E"; const char er_format[] = "'Error: bad format' -E"; const char msg_save[] = "'File saved' -O"; const char msg_load[] = "'File loaded' -O"; +const char msg_save_error[] = "'Error saving file' -E"; const char msg_new[] = "'Memory cleared' -I"; // initial window sizes @@ -593,7 +594,7 @@ void process_mouse() return; } - if (!sel_moved && !size_state) //do not handle scrollbars when user selects cells + if (!size_state) //do not handle scrollbars when user selects cells { if (!scroll_h.delta2) scrollbar_v_mouse((DWORD)&scroll_v); if (scroll_v.position != grid.firsty-1) @@ -1095,7 +1096,12 @@ void process_button() case SAVE_BUTTON: stop_edit(); - if (SaveFile(fname)) kos_AppRun("/sys/@notify", (char*)msg_save); + if (SaveFile(fname)) { + kos_AppRun("/sys/@notify", (char*)msg_save); + } + else { + kos_AppRun("/sys/@notify", (char*)msg_save_error); + } break; case LOAD_BUTTON: