fajl CMICRO.TXT s - mikro: sistema programmirowaniq na qzyke "s" dlq dwk. 1. celi razrabotki. za osnowu s - mikro wzqta sistema programmirowaniq C - DECUS, wariant dlq sistemy RT-11. ime`}ijsq komplekt |toj sistemy wkl`~aet sledu`}ie fajly: WHYC.DOC - wwedenie w qzyk programmirowaniq "s" CC.DP1 - opisanie kompilqtora AS.DOC - opisanie assemblera "s" (CLIB,WIZARD).DOC - opisanie biblioteki (RUN-TIME SUPPORT LIBRARY) dalxnej{ee izlovenie predpolagaet znakomstwo w ob}ih ~ertah s |timi opisaniqmi. dwk otli~aetsq ot mini-ma{in, na kotorye orientirowana C - DECUS, prevde wsego, malymi po ob"emu i medlennymi diskami. w swqzi s |tim proqwilisx sledu`}ie nedostatki C - DECUS: whodq}aq w sostaw |toj sistemy "UNIX-o podobnaq" fajlowaq sistema 1.1. ne daet polnocennogo dostupa k sisteme wwoda/wywoda RT-11, wynuvdaq tem samym pri razrabotke sistemnyh programm regulqrno polxzowatxsq makroassemblerom. 1.2. w sowokupnosti s makroassemblerom i ego biliotekoj zanimaet po~ti 1/2 diska (s`da ne whodqt kompilqtor i assembler samogo qzyka "s"). iz-za swoego bolx{ogo razmera sistema medlenno komponuetsq. o~enx malo mesta na diske ostaetsq dlq programm polxzowatelq. w gotowoj programme specifi~eskaq sistema wwoda/wywoda C - DECUS - |to neskolxko k bajt. 1.3. upomqnutaq sistema wwoda/wywoda komponuetsq s l`boj programmoj na "s" prinuditelxno i obqzatelxno aktiwiziruetsq w na~ale raboty programmy, ~to delaet newozmovnym napisanie programm dlq raboty na "goloj" ma{ine. krome togo, prinqtaq w C - DECUS prinuditelxnaq komponowka fakti~eskoj golownoj programmy s l`boj funkciej "s" silxno uslovnqet obra}enie k funkciqm "s" iz drugih qzykow. 2. dlq ustraneniq |tih nedostatkow byli prinqty sledu`}ie mery: 2.1. sobstwennaq sistema wwoda/wywoda "s" polnostx` likwidirowana (rezko umenx{ena biblioteka CLIB.OBJ). fakti~eskaq golownaq programma SUPORT izmenena takim obrazom, ~to nikakogo wwoda/wywoda pri ee rabote ne proishodit. likwidirowana prinuditelxnaq komponowka modulq SUPORT s funkciqmi, napisannymi na "s", ~to re{aet problemu mevqzykowoj stykowki i problemu programm dlq "goloj" ma{iny. 2.2. realizowana funkciq CALLF, pozwolq`}aq obratitxsq iz programmy na "s" k podprogramme iz sistemnoj ob"ektnoj biblioteki RT-11. |ta biblioteka po swoim wozmovnostqm blizka k sistemnoj makrobiblioteke, to estx predostawlqet dostup po~ti ko wsem poleznym sistemnym wozmovnostqm, w tom ~isle ko wsemu wwodu/wywodu RT-11 w ego izna~alxnom wide. tem samym snimaetsq neobhodimostx regulqrno programmirowatx na assemblere. za s~et likwidacii assemblera i rezkogo umenx{eniq biblioteki CLIB udaetsq razmestitx polnocennyj wariant os i po~ti ws` sistemu programmirowaniq na odnom diske, ostawiw wtoroj po~ti celikom pod programmy polxzowatelq. komponowka uskorqetsq w neskolxko raz. 3. swodka otli~ij s - mikro ot C - DECUS: 3.1. kl`~ kompilqtora /r ispolxzowatx nelxzq. "profilirowanie" ne realizowano. 3.2. STDIO.H likwidirowan. 3.3. izmeneny (s rezkim umenx{eniem) fajly: SUPORT.OBJ, CLIB.OBJ. 3.3. polnostx` likwidirowana sobstwennaq fajlowaq sistema C - DECUS i swqzannye s nej programmy inicializacii, sbora statistiki obra}enij k funkciqm i t. p. funkcii "s" ne trebu`t nikakoj inicializacii i mogut bytx wyzwany iz l`boj programmy, esli sobl`deny sogla{eniq o swqzqh. iskl`~enie: funkcii dinami~eskogo raspredeleniq pamqti trebu`t nekotoroj mini-inicializacii, kotoraq pered perwym obra}eniem k nim dolvna bytx wypolnena. |ti dejstwiq wypolnq`tsq w fakti~eskoj golownoj programme SUPORT. kak SUPORT, tak i funkcii dinami~eskogo raspredeleniq pamqti mogut rabotatx tolxko pod uprawleniem RT-11. wse ostalxnye opisywaemye zdesx qzykowye sredstwa i bibliote~nye funkcii, ne swqzannye s wwodom/wywodom, mogut rabotatx i na "goloj" ma{ine. 3.4. fakti~eskaq golownaq programma (SUPORT.OBJ) ne zapra{iwaet s terminala nikakih argumentow i woob}e po~ti ni~ego ne delaet. MAIN dolvna bytx bez parametrow. 3.5. PRINTF otsutstwuet. iz sredstw wwoda/wywoda w CLIB.OBJ estx tolxko: - PRINTT(STRING) CHAR *STRING; - pe~atx stroki simwolow na terminale (trebuetsq os), - SPRINTF - formatnaq perekodirowka w pamqti - parametry kak u SPRINTF B "C - DECUS", no wozmovnosti formatirowaniq o~enx silxno urezany: estx tolxko specifikacii %D, %O, %C, %S bez wsqkih dopolnitelxnyh kwalifikatorow. specifikacii movno pisatx tolxko malymi bukwami. 3.6. iz funkcij dinami~eskogo raspredeleniq pamqti ostalisx tolxko: CALLOC MALLOC FREE REALLOC (trebuetsq os). 3.7. dlq dostupa k sistemnoj ob'ektnoj biblioteke RT-11, w ~astnosti, k sredstwam wwoda/wywoda, realizowana funkciq obra}eniq k fortranowskoj podprogramme - CALLF. sm. p. 5. 4. porqdok mevqzykowoj stykowki. programmy dlq "goloj" ma{iny. 4.1. esli golownaq programma napisana na "s", |to dolvna bytx funkciq MAIN bez parametrow. w |tom slu~ae s nej sleduet komponowatx modulx SUPORT.OBJ. esli golownaq programma napisana ne na "s", komponowatx SUPORT.OBJ ne trebuetsq. esli pri |tom predpolagaetsq polxzowatxsq bibliote~nymi funkciqmi dinami~eskogo raspredeleniq pamqti, sleduet napisatx sobstwennu` programmu inicializacii rabo~ih peremennyh |tih funkcij, i pered perwym obra}eniem k l`boj iz nih qwno wyzwatx |tu programmu. wsq inicializaciq - neskolxko komand. sm. tekst SUPORT.MAC. 4.2. dlq razrabotki programm, wypolnimyh na "goloj" ma{ine, sleduet wmesto SUPORT napisatx swo` fakti~esku` golownu` programmu. sleduet pozabotitxsq o perwona~alxnoj ustanowke SP (R6), i o zawer{enii raboty, bolx{e ni~ego ne trebuetsq. 5. CALLF - funkciq dlq wyzowa fortrannyh podprogramm. forma obra}eniq: EXTERN INT NAMPR(); /*NAMPR - imq podprogrammy, wyzywaemoj na fortrane*/ /*w wide: CALL NAMPR(ARG1,...,ARGN) */ .......... CALLF(NAMPR,N,&ARG1,...,&ARGN) gde N - ~islo argumentow fortrannoj podprogrammy - dolvno sootwetstwowatx ~islu fakti~eski peredawaemyh parametrow. pri obra}enii k CALLF w ka~estwe ee fakti~eskih argumentow sleduet podstawlqtx ukazateli na te argumenty, kotorye dolvny bytx peredany w fortrannu` podprogrammu (ob |tom legko zabytx, esli w ka~estwe fakti~eskogo argumenta fortrannoj podprogrammy trebuetsq peredatx ~islowu` konstantu. posledstwiq mogut bytx samymi interesnymi). CALLF wozwra}aet zna~enie, wozwra}aemoe wyzwannoj fortrannoj podprogrammoj - funkciej, no tolxko odno slowo (mlad{u` ~astx rezulxtata). wozwrat "dlinnyh" (dwuhslownyh) zna~enij ne realizowan. esli trebuetsq peredatx fortrannoj podprogramme propu}ennyj argument, sleduet wmesto ukazatelq na |tot argument ispolxzowatx pri obra}enii k CALLF konstantu (-1) - imenno samu |tu konstantu, a ne ukazatelx na nee. CALLF prednazna~ena w perwu` o~eredx dlq raboty s SYSLIB.OBJ. nekotorye podprogrammy SYSLIB.OBJ mogut bytx wyzwany tolxko iz fortrannoj programmy, poskolxku oni ispolxzu`t pul swobodnoj pamqti OTS fortrana, trebu`}ij sootwetstwu`}ej nastrojki, libo ustanawliwa`t fortrannu` podprogrammu w ka~estwe asinhronnoj programmy zawer{eniq. wse takie podprogrammy pere~isleny w opisanii SYSLIB.OBJ. iz postawlqemoj w sostawe s - mikro SYSLIB.OBJ bolx{instwo takih podprogramm iz'qto. edinstwennoj bezuslowno poleznoj funkciej, realizuemoj "zapre}ennym" dlq ne-fortrannogo programmista mnovestwom podprogramm iz SYSLIB, qwlqetsq funkciq zagruzki drajwera ("zapre}ennaq" podprogramma IFETCH). dlq realizacii zagruzki drajwera w pamqtx wmesto nee napisana (i wkl`~ena w postawlqemu` SYSLIB) funkciq FETCH, wyzywaemaq neposredstwenno iz programmy na "s". forma obra}eniq: INT *ADDR; /*adres zagruzki drajwera.*/ INT DEVNAM; /*imq ustrojstwa w kode RADIX-50*/ ...... FETCH(ADDR,DEVNAM); primer obra}eniq k FETCH i k podprogrammam iz SYSLIB - w fajle TDS.C. 6. fajly C - mikro: CENV.MAC - teksty prologa-|piloga funkcii SUPORT.MAC - fakti~eskaq golownaq programma, PRINTT.MAC, SPRINT.C - funkcii wwoda/wywoda, COBJ.OBJ, CMEM.OBJ - ob"ektnye moduli, wzqtye iz CLIB.OBJ C - DECUS, CALLF.MAC, FETCH.MAC - teksty funkcij CALLF, FETCH, SYSLIB.OBJ - urezannaq za s~et "zapre}ennyh" podprogramm sistemnaq ob"ektnaq biblioteka. sborka biblioteki: RUN LIBR *CLIB,LP:=CENV,PRINTT,SPRINT,CALLF,COBJ,CMEM esli dinami~eskoe raspredelenie pamqti ne ispolxzuetsq, CMEM movno w biblioteku ne wkl`~atx. 7. obnaruvennye osobennosti kompilqtora. opisanie kompilqtora C - DECUS sootwetstwuet nekotoromu promevuto~nomu sostoqni` |toj razrabotki, izobiluet upominaniqmi o wsewozmovnyh o{ibkah ("QUIRKS AND BUGS"). ime`}ijsq kompilqtor - bez somneniq, bolee pozdnqq, movno nadeqtxsq, bolee sower{ennaq wersiq. wo wsqkom slu~ae, nabor kl`~ej uprawleniq kompilqtorom, zadawaemyj pri imeni ishodnogo fajla, ne wpolne sootwetstwuet opisani`: kl`~i, ispolxzuemye dlq otladki kompilqtora, likwidirowany. nabor fakti~eski ime`}ihsq kl`~ej movno uznatx, wyzwaw kompilqtor komandoj "RUN" i wwedq pustu` stroku wmesto imeni fajla. zame~eny sledu`}ie osobennosti kompilqtora: 7.1. kompilqtor trebuet bolx{ogo splo{nogo kuska diskowogo prostranstwa, tak kak sozdaet mnogo rabo~ih fajlow. dlq kompilqcii programmy dlinoj porqdka 500 strok nuvno imetx okolo 150 blokow odnim kuskom. diagnostika pri otsutstwii mesta pod rabo~ij fajl ~asto neadekwatna. inogda bez wsqkoj diagnostiki generiruetsq sintaksi~eski neprawilxnyj assemblernyj fajl, ~to obnaruviwaetsq tolxko assemblerom. slu~aew generacii "ne beru}egosq" assemblerom fajla w rezulxtate o{ibok w ishodnoj programme ne obnaruveno. 7.2. ne udalosx zastawitx kompilqtor kompilirowatx operaci` ""ne" logi~eskoe porazrqdnoe". operacii "i" i "ili" logi~eskie porazrqdnye rabota`t normalxno. 7.3. assembler "s" umeet sozdawatx listing, no tolxko na diske "s:". wydatx ego na terminal po hodu raboty on ne umeet.