| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774 |
- ==================== PAGE 1 ====================
- LES OPTIONS DE COMPILATION 6
- | À les options de compilation 6.1
- ——
- Bes
- Les options agissent sur le compilateur au moment où elles sont lues.
- 6 LES OPTIONS DE COMPILATION
- 6.1 les options de compilation
- (61 LES OPTIONS DE COMPILATION]
- Leur effet est donc indépendant de la structure du programme. Par exemple:
- {6.1.1 DEFINITION
- Les options de compilation sont des indications placées dans le programme source et destinées à
- 1 PROGRAM OPH ORS: ocr
- i ncer le comportement du compilateur. i 2 VAR Nombre: INT “
- F 7 à . \ 3 Fichier: FILE OF CHAR;
- | Par exemple, si nous demandons (*$R-*), cela supprimera dans le code généré toutes les 4
- instructions de vérification d’intervalle. à 5 PROCEDURE Ouvre;
- 6 BEGIN
- | 7 ASSIGN(Fichier, ’PROG.PAS’ );
- fh 8 pola elena
- i 9 (*3I-*)
- h Ls:1.2 _SYNTAXE 10 WRITE(Fichier, Nombre);
- 11 END;
- Ces options sont tapées dans le source, dans un commentaire: 12
- 13 BEGIN.
- 14 Ouvre;
- C)H{S)—{ Option} (*)) 15 (*SI+*)
- 16 CLOSE(Fichier);
- 17 END.
- ATTENTION:
- — il ne faut aucun espace entre le commentaire ouvrant (que vous utilisiez "(*" ou l’accolade
- ff
- ouvrante "{") etle $ À 1 il
- — la présence d’espaces entre la fin de l’option et la fin du commentaire peut modifier le
- comportement de l’option. Nous le préciserons lorsque cet espace est significatif. 4
- Fig. 6.1 Une option est valide de ligne à ligne
- Aucune erreur d'entrée / sortie ne sera provoquée pour les instructions situées entre les lignes 9 à
- 15. Le RESET peut provoquer une erreur d'exécution, alors que WRITE n’en provoquera pas |
- (bien que l’appel à Ouvre soit compris dans les lignes 8 à 15).
- Certaines options doivent aussi figurer à une place précise (par exemple, en début du source), alo
- que d’autres peuvent figurer n’importe où. #
- 14
- {6.14 LA LISTE DES OPTIONS
- Si à un endroit vous souhaitez utiliser plusieurs options qui n’utilisent pas de chaîne de caractères
- vous pouvez les regrouper, en les séparant par une virgule, sans ajouter aucun espace: 1
- (*$R+4,1-*) Les options disponibles pour la version 3 sur PC sont les suivantes:
- — B: met en oeuvre le tampon de saisie
- — C: met en oeuvre CTRL C et CTRL S
- — D: modifie l’utilisation de tampons d’entrée pour les périphériques
- — F: modifie le nombre de fichiers qui peuvent être ouverts à un même instant
- — G: modifie la taille des tampons d’entrée
- ~ I: permet la gestion des erreurs d’entrée / sortie
- — I nom: met en oeuvre les fichiers inclus
- — K: permet la vérification de pile
- — P: modifie la taille des tampons de sortie
- — R: permet la vérification d'intervalle
- — U: met en oeuvre la gestion de CTRL C
- — V: permet la vérification de paramètres chaînes
- Vous pouvez aussi les laisser séparées:
- (*$R+ *)
- (*$R- *)
- Si l'option comporte un nom de fichier source, il n’est pas nécessaire de taper le suffixe PAS: le
- compilateur le rajoutera pour vous.
- mm
- AU COEUR DE TURBO PASCAL 389 AU COEUR DE TURBO PASCAL
- AU COEUR DE TURBO PASCAL 388 AU COEUR DE TURBO PASC A
- ==================== PAGE 2 ====================
- LES OPTIONS DE COMPILATION
- 6
- LES OPTIONS DE COMPILATION
- 6.1 les options de compilation
- les fichiers inclus 6
- f 6.2
- i é < 1 ivante:
- Ces options peuvent etre regroupées de la fagon suivante PROCEDURE quatre;
- _ I nom: gestion des fichiers inclus BEGI N
- — R, I, K, V: gestion dès erreurs END; (* quatre *)
- - B,C, D, U: tampon d'entrée et contrôle du programme out
- | _ G, P, F: paramétrage des fichiers BEGIN (* principal *)
- | END.
- | à Fig. 6.2 Le programme monolithe.
- i (62 LES FICHIERS INCLUS: L'OPTION [1]
- et voici sa version en utilisant un fichier inclus:
- | (6.21 DEFINITION 50 crop
- | 1 (*20 aou 87 *)
- | L’option Include permet de chainer plusieurs fichiers texte au moment de la compilation 2
- | 1 3. PROGRAM modulaire;
- | Exemple: q 4
- À 5 PROCEDURE deux;
- (*$I PROG2.PAS *) | 6 BEGIN
- {$1 c:calculpoutrecoupe } | H END; (* deux *)
- |
- 9 (*$i partiel *
- ; 10 7 )
- À 11 BEGIN (* principal *
- {6.22 MOTIVATION 11 BEGIN ER proie)
- L'option est destinée à permettre le morcellement du source en plusieurs fichiers. Ù Fig. 6.3 Le programme modulaire
- ||
- | Ceci se produit: j et le fichier inclus:
- — lorsque le texte de votre programme ne peut pas tenir en mémoire en utilisant l’éditeur (64K
- | moins la taille des variables du compilateur ($0802) moins la taille des messages d’ erreur) 0 (* 001 partiel *)
- | — lorsque vous utilisez un programme composé de plusieurs "modules fonctionnels". q à (* 20 aou 87 *)
- À 3 PROCEDURE trois;
- Voici un programme monolithique;-: 4 BEGIN
- i À END; (* trois *)
- | Oo (* oo! optinl *) | ; PROGEDUBE quatre;
- | 1 (* 20 aou 87 *) \
- Hy à M 9 END; (* quatre *)
- | 3 PROGRAM monolithe;
- It 4 Fig. 6.4 Le fichier i
- | 5 PROCEDURE deux; $ iehigr inclus
- (| 6 BEGIN
- | I END; (* deux *) q
- | 9 PROCEDURE trois; {6.23 FONCTIONN
- | 10 BEGIN | EMENT
- | 11 END; (* trois *) | te
- | 12 q rsque le compilateur rencontre l'option Include:
- | — il cherche ce fichier sur le disque, et i
- | j ~ il termine de compiler la li sque, et provoque une erreur s il ne le trouve pas
- a r gne contenant l’opti , à
- I! : - ra cape pe sont ceux du fichier Per ME eum it
- I: \ e la compilation de ce fichie i À
- LI tampon en 1e Qué cos | : 4 be les symboles sont à nouveau lus depuis le
- |
- t § AU COEUR DE TURBO PA |
- | hi U SCAL 390 AU COEUR DE TURBO PASCAL © AU COEUR DE TURBO PASCAL jé TETE Dir
- | '
- |
- %
- ie
- ==================== PAGE 3 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 62 les fichiers inclus 62 6 LES OPTIONS DE COMPILATION "
- 2 les fichi i
- 6. es fichiers inclus 62
- — un découpage fonctionnel est cependant recommandé. Il va i
- 1éco e ut mieux regrouper é
- fichier inclus des procédures ayant une méme fonction. Par exemple ice procedure ae +
- |
- | (ll
- | Pour simplifier la gestion du fichier inclus, le compilateur termine d'analyser la ligne comportant
- | êtr iel i *émissi 20 a? :
- | de fenêtre, de séquentiel indexé, d’émission série, d’affichage graphique, de calcul matriciel...
- l'option d’inclusion avant de compiler le texte de ce fichier. Si nous avons:
- (*Si inclus.pas *) TYPE string80= STRING[80) ; Ce découpage améliore la lisibilité et facilite la construction de librairies fonctionnelles
- alors le type string80 pourra être utilisé dans inclus.pas. En général il vaut donc mieux placer les | La possibilité de placer des définiti L
- | options d’inclusion sur une ligne ne comportant que cette option. À (et non pas ru Ps en tête pr Foire co jase Den D COURSES nt
- ermet de regrouper les définit i é a ure,
- | hier roa P' initions et déclarations des variables de plusieurs procédures dans le
- Le compilateur utilise donc: Ainsi le programme suivant:
- | — un tampon de 64K pour le fichier principal (Work)
- | — un tampon de 128 octets pour lire le texte d’un fichier inclus situé sur disque 4 0 (* 001 optin4 *)
- | q 1 (* 20 aou 87 *)
- 1 2
- | 3 PROGRAM lithe2;
- | Le menu principal permet de désigner deux fichiers: : TYPE tic INTEGER;
- AR globale: I 3ER;
- — Work qui est le fichier utilisé pour éditer 6 ht 4 iw NTEGER;
- | — Main qui est le fichier que le compilateur compilera en premier 7 aii
- | } 8 PROCEDURE deux;
- | a i 9 BEGIN
- 10 END; (* *
- [| _ si vous ne travaillez que sur un seul fichier, il n’est pas nécessaire de préciser le nom de Main. M 11 (Side
- Le compilateur utilisera Work pour la compilation. l 12 PROCEDURE ri:
- — si vous travaillez (en le modifiant par l’éditeur) sur un des fichiers inclus, ce fichier devra être M 13 BEGIN .
- | appelé par l'option Work. Pour que le compilateur commence la compilation par le fichier 14 END; (* tri *)
- | principal, il faudra en préciser le nom par l'option Main. | 15 ed
- i ; 16 PROCE i;
- | ll L'utilisation de deux noms évite simplement lors de multiples modifications: | 17 BEG en sites
- | | 18 END; (* liste_tri *
- 1h — de sauvegarder le fichier inclus 19 mer"
- | — de charger par Work le fichier principal avant la compilation Î 20 BEGIN (* principal *)
- — de rappeler dans Work le fichier inclus pour d’autres modifications ( 21 END.
- Il suffit le matin d’indiquer le nom du fichier inclus dans Work et du fichier principal dans Main. Fig. 6.5 Le programme monolithe2
- TURBO se charge du reste (sauvegardes, chargements...)
- l Y ! à : à ‘ peut être découpé en:
- | Un seul petit défaut: si vous compilez d’abord en mémoire, puis souhaitez compiler en mode
- | .COM, ne sauvez pas le fichier inclus avant la compilation disque (T' URBO recommence alors
- i toute la compilation au lieu de recopier le code. En effet le fichier inclus peut être plus gros que le M 0 (* 001 optin5*)
- HY fichier principal, et le chargement dans le tampon mémoire peut avoir écrasé le code). Cette — 1 (*20 aou 87 *)
- | sauvegarde est d’ailleurs inutile ici (si la compilation a réussi, elle a déjà été effectuée). 2
- | 3 PROGRAM modulaire
- | 2 VAR globale: INTEGER;
- | 6 PROCEDURE deux;
- | {6.24 UTILISATION 7 BEGIN
- . END; (* deux *)
- Notez que: 10 (*$i itri *)
- | le progr t étre découpé n’i fichiers inclus. Il n° écessaire | :
- | - amme peut être découpé n'importe comment en fichiers inclus. Il n'est pas n essaire M 12 BEGIN (* principal *
- de respecter les limites de la syntaxe (procédures, déclarations / instructions...) q 13 END. oa se
- | H Fig. 6.6 Le programme modulaire.
- hy, AU COEUR DE TURBO PASCAL 392 AU COEUR DE TURBO PASCAL | | AU COEUR DE TURBO PASCAL 393 AU COEUR DE TURBO PASCAL
- Jesse #
- ==================== PAGE 4 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.2 les fichiers inclus 62
- et:
- 0 (* 001 optin6 *) »
- 1 (* 20 aou 87 *).
- 2
- 3 TYPE ¢ tri= INTEGER;
- 4 VAR tril: t_tri;
- 5
- 6 PROCEDURE wri;
- 7 BEGIN
- 8 END; (* tri *)
- 9
- 10 PROCEDURE liste_tri;
- 11 BEGIN
- 12 END; (* liste_tri *)
- Fig. 6.7 Le fichier inclus.
- — vous pouvez utiliser plusieurs Include pour un même programme
- — iln’est pas permis d’emboiter les Include. Seul le programme principal peut contenir des options
- Include (
- — si le compilateur ne trouve pas le fichier indiqué, la compilation est interrompue (erreur 90)
- — si vous manquez d’espace mémoire au moment de la compilation ou de l’exécution en mémoire,
- vous pouvez essayer de réduire le programme principal à une liste d’options Include, en plaçant
- tout le texte PASCAL dans des fichiers inclus:
- \
- (* 001 gros *)
- (* 20 aou 87 *)
- (*$i ideclare *)
- (*$i itri *)
- (*$i C:\calculipoutre *)
- (*$i ippal *)
- Fig. 6.8 Le fichier principal avec uniquement des include
- NAAR WNKO
- {63 LA GESTION DES ERREURS: R, I, K, V|
- {6.3.1 LA GESTION DES ERREURS
- Le langage PASCAL avait au départ une vocation uniquement pédagogique. De ce fait WIRTH
- avait préconisé que toute erreur devait provoquer l’arrêt du programme.
- AU COEUR DE TURBO PASCAL 394 AU COEUR DE TURBO PASCAL
- 6 LES OPTIONS DE COMPILATION 6
- 63 la gestion des erreurs: r, i, k, v 6.3
- Cette attitude ne peut être maintenue pour des programmes industriels. Il faut alors distinguer
- plusieurs catégories d’erreur:
- - les CR de traitement qui ne mettent en jeu que les variables directement impliquées. Par
- exemple:
- valeur:= 1/0;
- placera dans valeur une valeur erronnée, mais ne modifiera pas d'autre variable du programme.
- — les erreurs de traitement qui peuvent détruire d’autres zones de la mémoire. Ainsi:
- VAR tableau: ARRAY(0..5] OF INTEGER;
- tableau[-10000]:= 1234;
- peut détruire d’autres variables, le code du programme, ou méme le DOS.
- ~ les erreurs d’entrée / sortie. Par exemple |’utilisateur place dans le lecteur une disquette ne
- contenant pas le fichier qui doit étre ouvert.
- Les options R, I, K et V ont été créées pour permettre:
- — de demander au compilateur de provoquer ou non des erreurs d’exécution
- — de corriger par des instructions du programme les erreurs détectées
- Ainsi, lors de la mise au point, il est utile que le compilateur ou le code généré provoquent des
- erreurs d'exécution pour nous signaler des erreurs telles que:
- VAR jour: 1.31;
- jour:= 45;
- Mais lorsque le programme est déverminé, aucune situation ne doit provoquer d’erreur. C’est au
- Programmeur de tester ce qui se passe, et corriger les erreur. Par exemple:
- REPEAT
- WRITE('INDICE <0..5> ? ’);
- READLN(indice);
- UNTIL (indice>= 0) AND (indice<= 5);
- tableau[indice]:= 1234;
- La différence entre les erreurs de traitement et les erreurs d'entrée / sortie est que les premiéres sont
- prévisibles, les secondes ne le sont pas. Nous pouvons vérifier si un indice est compris dans un
- Intervalle donné, nous ne pouvons pas vérifier quelle disquette l’utilisateur va placer dans le lecteur.
- AU COEUR DE TURBO PASCAL 395
- AU COEUR DE TURBO PASCAL
- EE
- ==================== PAGE 5 ====================
- RÉ —
- im | 6 LES OPTIONS DE COMPILATION 6 6 ay tinge wae ep jy 6
- | 63 la gestion des erreurs: r, i, k, v 63 6.3 la gestion des erreurs: r, i, k, v 63
- — dans le cas des tableaux, l’adresse de la zone à modifier provient d’un calcul utili *indi
- Par conséquent: | Si l’indice est en dehors de 1’intervalle déclaré, le code nee modifier prio be hr
- — les options évitant l’arrêt en cas d’erreur de traitement sont en principe inutiles. Au contraire 4 VAR tableau: ARRAY[5..15] OF INTEGER;
- l'arrêt du programme est utile pour la détection des erreurs, lors de la mise au point.
- — les options évitant l’arrêt en cas d’erreur d’entrée / sortie sont indispensable pour pouvoir tester
- et corriger l'erreur. tableau 5 5J:= 8;
- | ira écraser des données (des variables ou même du code) placés au-delà de la place allouée à
- Voyons à présent ces options en détail. tableau.
- | (6.3.2 LES OPTIONS R+ R- | 6.3.2.3 FONCTIONNEMENT
- j | En mode R+ le compilateur place dans le code du programme des instructions qui vérifi
- 6.3.2.1 DEFINITION DE L'OPTION R valeurs affectées à un intervalle sont dans les limites citées " cient Wales
- L’option Range Check (vérification d’intervalle): \
- — permet d'effectuer ou non la vérification des bornes des intervalles Voici un programme utilisant l'option R+:
- — est par défaut en mode R-
- | — est une option locale 0 (* 001 optr*)
- | 1 (* 20 aou 87 *)
- 2
- { 3 PROGRAM option_r;
- Exemple: i 4 VAR intervalle: $10..$1F;
- | (*$R-*) 5 entier: INTEGER;
- | 6 tableau: ARRAY/$10..$/F] OF INTEGER;
- (] | 7 BEGIN
- if 8 intervalle:= entier;
- | | 9 tableaulentier]:= $AA;
- | 6.3.2.2 MOTIVATION 10 a at 2
- | 11 intervalle:= entier;
- | | 12 tableau[entier]:= $AA;
- | Lorsque nous affectons une valeur à une variable, le programme stocke les octets à affecter dansla M 13 END. i
- i] zone allouée à la variable. i ’
- | Fig. 6.9 Le programme option_r.
- | Il est donc impératif de s’assurer que le programme ne modifie pas d’autres octets que ceux utilisés
- pour cette variable.
- | | Voici le code généré:
- | Les risques de débordements proviennent des intervalles et des tableaux. 2D4D E849DD ue Pa. +4
- | — les intervalles peuvent utiliser moins de 16 bits, et il ne faut pas que le code modifie les bits M 2D50 0600 hex 0600 ; options
- I autres que ceux de |’intervalle. | 2D52 780B hex 780B ; cs
- 2D54 3C15 hex 3C13 es
- VAR jour: 1.31; | 2D56 DCO2 hex DC02 ; code
- suite: INTEGER: | 2D58 2900 hex 2900 ; globales
- ye 2D5A 0004 hex 0004 ; min piles
- jour:= valeur; 2D5C 00A0 hex 00A0 ; max piles
- 2D5E 1000 hex 1000! >Hérchiers
- Si valeur contient par exemple $1122, alors la variable suite sera modifiée par l’affectation M 2D60 0000 hex 0000 ; input
- ci-dessus. j 2D62 0000 hex 0000 ; output
- |
- (1 AU COEUR DE TURBO PASCAL 396 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 397 AU COEUR DE TURBO PASCAL
- ==================== PAGE 6 ====================
- { 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPILATION 6
- 63 la gestion des erreurs: r, i, k, v 6.3 63 la gestion des erreurs: r, i, k, v 63
- | À
- | 4 8BEC mov bp, sp Voici un autre programme:
- | TOC VESPIDP call TU TAÏLLE_OODE
- l ote DS nex SAUT PRINCIPAL 0 (* 001 optr2 *)
- | “4 adr ve a
- | 2D6B 6D2D 1 (* 20 aou 87 *)
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL ; 2 pone
- PRINCI PAL mov ax, [$0263] à 4 PROGRAM option r 2;
- cd Ds orl [$0262], al 5 VAR intervalle: $10..$1F;
- | , prie cpu OF $40..$4F;
- 02 mov ax, [$0263] 4 indice: R;
- 2D19 DIEO shl eS | 8 EGIN
- 2D7B 97 xchg di q 9 intervalle:= $BB;
- 2D7C B8AA00 mov ax, $SO0AA | 10 READLN (intervalle);
- 2D7F 89854502 mov [di+ $0245], ax | 11
- À 12 (* refusé à la compilation : tableau[$CC]:= ... *)
- : 2D83 A16302 mov ax, [$0263] 13 tableau[indice]:= $AA;
- 2D86 B91000 mov cx, $0010 4 14 END.
- 2D89 BA1F00 mov dx, $001F |
- 2D8C E8ESEI call TU_RANGE_CHEK 1 Fig. 6.11 Le programme option_r_2.
- 2D8F A26202 mov [$0262], al i
- 2D92 A16302 mov ax, [$0263] q
- | 2D95 2D1000 sub ax, $0010 dont le code est le suivant:
- | 2D98 B91000 mov cx, $0010
- | 2D9B E8CCE1 call | TU_INDEX_CHECK
- | 2D9E DIEO shl ax, 1 ‘ 2D4D E849DD call TU_PARAGRAPHS
- | f 2DA0 97 xchg di | 2D50 0600 hex 0600 ; options
- | 2DA1 B8AA00 mov ax, $OO0AA 1 2D52 780B hex 780B ; cs
- 2DA4 89856502 mov [di+ $0265], ax 2D54 3C15 hex 30151448
- j q 2D56 DCO2 hex DCO2 ; code
- | 2DA8 E90000 jmp FIN 1 2D58 2800 hex 2800 ; globales
- | | 1 2D5A 0004 hex 0004 ; min piles
- | 2DAB 33C0 FIN xor ax," 'aù 2D5C 00A0 hex OOAO ; max piles
- 2DAD E890DE call TU_HALT 4 2DSE 1000 hex 1000 ; fichiers
- 2DB0 0000 hex 0000 q 2D60 0000 hex 0000 ; input
- À 2D62 0000 hex 0000 ; output
- Fig. 6.10 Code de option _r.
- 2D64 8BEC mov bp, sp
- | é j 2D66 E814DF call TU_TAILLE_CODE
- | Notez que: } 2D69 4800 hex 4800 ; taille
- | Î 2D6B 6D2D adr SAUT_PRINCI PAL
- | — en mode R- (mode par défaut):
- | e R- ( p ) 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
- — l'affectation à une variable d’un octet (dans l’intervalle 0..255):
- affe ( q 2D70 B8BB00 PRINCIPAL mov ax, S00BB
- — ne peut pas détruire les autres variables (MOV [adresse], AL) \ q 2D73 B91000 mov cx, $0010
- ~ le code ne vérifie pas que la valeur est réellement comprise dans l'intervalle déclaré | 2D76 BA1F00 mov dx, $001F
- (dans notre exemple, l’octet faible de entier peut très bien être en dehors de l'intervalle 2D79 E8F8E1 call TU_RANGE_CHECK
- $10..$1F) À 2D7C A26202 mov [$0262], al
- | — lorsque l'indice du tableau est en dehors de la plage déclarée, l’affectation ira écraser 2D7F E8CFF7 call TU_READLN
- d’autres données situées dans DS (sans aucun message d’erreur à cet instant) bat de UE mov di, $0262
- § ush ds
- — en mode R+: 2D86 E8B4F9 tall TU_READ_ INTERV
- q 2D89 E847E2 cali TU_1O_CHECK
- — le code vérifie que les valeurs affectées à un intervalle sont bien comprises entre les bornes
- déclarées
- — le code vérifie que la valeur d’un indice est bien comprise entre les bornes déclarées |
- AU COEUR DE TURBO PASCAL 398 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 399 AU COEUR DE TURBO PASCAL
- DA
- Du.
- ==================== PAGE 7 ====================
- LES OPTIONS DE COMPILATION 6 6 LES OPTIONS D
- la gestion des erreurs: r, i, k, v 63 63 ht scan IE COMER EE 6
- —— 6.3
- A17302 mov ax, [$0273]
- 2D1000 sub ax, $0010 6.3.2.4 UTILISATION
- B91000 | mov cx, $0010 nt
- E8D2E1 ' call TU_INDEX_CHECK
- 2D98 97 xchg di L’utilisation de R+ est impérative tant que le ,
- 2D99 B8AA00 mov ax, SOOAA utilisons systématiquement itn, ol programme n'est pas totalement aw point. No
- 5D9C B94000 a cx, $0040 | q nt cette option, que nous plaçons au début de chaque programme. iy
- 2D9F BA4F00 mov dx, $004F 4
- 2DA2 E8CFE1 call TU_RANGE_CHECK qi
- 2DA5 88856302 mov [di+ $0263], al q R- peut étre utilisé:
- 2DA9 £90000 jmp FIN 1 pour sablider sun cellules db tile LMP
- ar anime s d’un ta leau dont la taille est inconnue au moment de la compilation
- 2DAC 33C0 FIN xor ax, ax ;
- 2DAE E88FDE call TU_HALT | — pour éviter l'erreur d'exécution d “A 1
- 2DB1 0000 hex 0000 ion dans les tests composés utilisant AND:
- ' : | (*$R-*)
- Fig. 6.12 Le code de opti j ! W i i . hears
- ig ‘= option_r_ i: somes (Indice< Maximum) AND (Tableau[Indice]<> ’Z’) DO
- | BEGIN
- \ Notez que: | Indice:= Indice+ 1;
- END;
- | _ le compilateur ne vérifie pas si les valeurs constantes sont dans l'intervalle. C’est au moment 4
- | de l'exécution que la vérification sera effectuée (le compilateur attend en effet une expression i — pour accélérer la vitesse d’exécuti imi i > 4
- qui peut contenir des variables. Il se place donc dans le cas général) utilisé que dans les parties déja ns poele aa d'un ih ibninanttotsntso sy
- — le compilateur détecte qu'un indice constant déborde la plage (erreur 45). Il calcule en effet ù
- \ l'adresse lorsque l'indice est constant, et peut donc tester sa validité. Ceci est vrai en mode R-
- également. q
- _ READ et READLN n’effectuent aucune vérification d'intervalle, sauf MAXINT (la frappe de M
- | 10000 est acceptée, la frappe de 40000 est refusée: erreur 10). À { 6.3.3 LES OPTIONS I+ I-
- || _ Les calculs arithmétiques sur des entiers ne testent pas le débordement. 200*200 fournira une |
- valeur de -25536 sans sourciller. C’est au programmeur de tester le débordement (en utilisant
- de réels pour vérifier si la valeur est inférieure ou égale 4 MAXINT). {
- 4 6.3.3.1 DEFINITION DE L’OPTION I
- |
- |
- | Dans le cas de chaînes: |
- | |
- — le programme peut accéder à n'importe quel caractère (de 0 à raille_max), même en mode R+. L'option I/O check (vérification des entrées / sorties):
- (*$r+*) 4 — permet de supprimer |’ int i ï ;
- | PE mn Gios | Etap A, pp interruption du programme lorsque survient une erreur d’entrée / sortie
- i indice: INTEGER; (| — par défaut utilise le mode I+ (vérification d’erreurs)
- | — l'option I peut être utilisée localement
- | prenom:= ‘JOE’;
- preno[7]:= °X’;
- | prenom[0]:= CHR(77); i
- | prenom[0]:= CHR(indice); | Exemple:
- Il L _ l'affectation à une chaîne d’une chaîne plus grande que la taille maximale provoque une (*$1+*)
- troncature (pour éviter d’écraser les zones situées aprés la chaine), sans aucun message d’erreur
- (*$r+*)
- VAR prenom: STRING[3];
- prenom:= * ALEXANDRE;
- AU COEUR DE TURBO PASCAL
- | AU COEUR DE TURBO PASCAL 400 AU COEUR DE TURBO PASCAL D || AU COEUR DE TURBO PASCAL 401
- ==================== PAGE 8 ====================
- |
- |
- |
- |
- |
- 6 LES OPTIONS DE COMPILATION =
- 6.3 la gestion des erreurs: r, i, k, v i
- 6.3.3.2 MOTIVATION
- à i d’entrée / sortie sont hors
- 4 des erreurs de traitement, les erreurs € on!
- a Juguveoe du programmeur. Il est possible de vérifier que le diviseur 2
- différent de zéro. Il n’est. pas possible de s'assurer que l’ascenseur de
- l'immeuble se met en route alors que le programme écrit sur le disque.
- Nous avons vu que les entrées/sorties utilisaient toutes la librairie, qui elle-même fait appel au
- DOS.
- En cas d'erreur, le DOS indique qu’il y a eu un problème, et la routine de la librairie provoque une
- erreur d’entrée / sortie.
- iti ’option I- Ÿ d'exécution.
- i le programme ne soit interrompu, l’option I- ne provoque pas d’erreur C
- ‘lit vd Mr dei Par contre c'est au programmeur de gérer l'erreur. qd gestion est
- effectué en lisant un code de résultat d’entrée / sortie à l’aide de la fonction IORESULT.
- 6.3.3.3 FONCTIONNEMENT
- Voici un programme utilisant l'option I-:
- (* 001 xopti *)
- (* 16 oct 86 *)
- (*$r+*) i
- PROGRAM option_i;
- VAR fichier: FILE OF INTEGER;
- BEGIN
- RESET (fichier);
- x Si-*
- RESET (fichier);
- END.
- © 10 00 JA U B W D — ©
- _
- Fig. 6.13 Le programme option_i.
- Et voici son code:
- call TU_PARAGRAPHS
- 2D50 6600 hex 0600 ; options
- 2D52 780B hex 780B ; cs
- 2D54 3C15 hex 30151548
- 2D56 DAO2 hex DA02 ; code
- 2D58 2B00 hex 2B00 ; globales
- AU COEUR DE TURBO PASCAL 402 AU COEUR DE TURBO PASCAL
- LES OPTIONS DE COMPILATION 6
- la gestion des erreurs: r, i, k, v 63
- 0004 hex 0004 ; min piles
- 00A0 hex 00A0 ; max piles
- 1000 hex 1000 ; fichiers
- 0000 hex 0000 ; input
- 0000 hex 0000 ; output
- 8BEC mov bp, sp
- 2D66 E814DF call TU_TAILLE_CODE
- 2D69 2600 hex 2600 ; taille
- 2D6B 6D2D adr SAUT_PRINCI PAL
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL
- 2D70 BF6202 PRINCIPAL mov di, $0262
- 2278: 4E push ds
- 2D74 B90200 mov cx, $0002
- 2D77 E819FC call TU_RESET
- 2D7A E856E2 call TU_IO_CHECK
- 2D7D BF6202 mov di, $0262
- 2D80 1E push ds
- 2D81 B90200 mov cx, $0002
- 2D84 E80CFC call TU_RESET
- 2D87 E90000 jmp FIN
- 2D8A 33C0 FIN xor ax, ax
- 2D8C E8B1DE call TU_HALT
- 2D8F 0000 hex 0000
- Fig. 6.14 Le code de option_i.
- Notez que:
- — en mode I+ (mode par défaut), le code appelle simplement la routine de la librairie
- TU_IO_CHECK. C'est cette routine qui provoque l'erreur d’entrée / sortie. En mode I-, cet
- appel n’est pas effectué.
- - les instructions concernées par la vérification TU_IO_CHECK sont toutes
- les opérations qui accèdent au périphérique: RESET, REWRITE, READ,
- WRITE, SEEK, LONGSEEK, CLOSE, FLUSH, CHAIN, BLOCKREAD,
- BLOCKWRITE, ERASE, EXECUTE, RENAME, TRUNCATE, CHDIR, MKDIR,
- RMDIR.
- Ces vérifications ont lieu pour tous les fichiers:
- fichier FILE OF,
- fichiers de blocs,
- fichiers TEXT,
- fichiers standard (CON, TRM, KBD, USR, LST, AUX),
- fichiers d’entrée / sortie par défaut (INPUT et OUTPUT)
- Cette vérification même pour l'écran, permet de traiter les erreurs lorsque les fichiers ont été
- redirigés vers des périphériques qui peuvent provoquer des erreurs.
- AU COEUR DE TURBO PASCAL 403 AU COEUR DE TURBO PASCAL
- NS
- ==================== PAGE 9 ====================
- EE SE
- 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPI
- [ qe LATION
- 6.3 la gestion des erreurs: r, i, k, v 63 63 la gestion des erreurs: r, i, k, v és
- — Par contre les procédures suivantes ne sont pas concernées par la vérification d’entrée / sortie: 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
- |
- _ APPEND, GETDIR, OVRPATH, FILEPOS, LONGFILEPOS, FILESIZE, 2D70 E859E2 PRINCIPAL
- LONGFILESIZE, EOF, EOLN 5D73 A36202 ht fy ie eer er
- — les erreurs numériques: ,
- 1 2D76 E90000 ;
- READLN(fichier, entier); jJmp FIN
- d’entrée / sortie si le fichier n’est pas ouvert, mais une erreur 1 road SU FIN xor ax, ax
- rovoquera une erreur d'entrée : e : 5D7 c
- RIRHERAUS si la valeur est 42(56. Les erreurs numériques NE PEUVENT PAS être | call TU_HALT
- | | supprimées par I-. a Fig. 6.16 Le code de lis _ioresult .
- — pour ASSIGN, la vérification qu’un fichier FILE OF n’est pas redirigé vers un fichier standard |
- | (CON, LST...) place bien le code d'erreur $22 dans la variable système, mais ne génère pas
- | TU_IO_CHECK. Une erreur d'entrée / sortie $22 est provoquée si vous travaillez en mode I+, Notez que :
- | i mais mal repérée dans le texte du programme (positionnement à l'entrée / sortie précédente). |
- \ j à É — le code invoque TU_IORESULT qui se contente d
- | _ les routines d’entrée / sortie mettent à jour IORESULT systématiquement, que vous soyez en, MM l'entrée / sortie dans AL (0 dans 430 mettant à ee la en mb ve pt "
- mode I+ ou I-. “a
- La récupération du code d’erreur se fait de la fagon suivante: 4 6.3.3.4 UTILISATION
- | Ô (* 001 xopti2 *) 1 Voici par exemple comment ouvrir un fichier déjà éé i
- 1 (* 16 oct 86 *) programme: ne s’arréte si le fichier n’est pas trouvé: 7 RE
- y 3 4
- 3 (*$r+*) j
- 4 PROGRAM lis_ioresult; | O (* 001 xopti3 *)
- | 5 VAR resultat: INTEGER; { 1 (* 16 oct 86 *)
- | 6 BEGIN 2
- 7 resultat:= LORESULT; 3 (*$r+*)
- 8 END. f 4 PROGRAM option_i_ouvre;
- uM 1 5 VAR fichier: FILE OF INTEGER;
- Fig. 6.15 Le programme lis_ioresult. q 6
- | 1 7 PROCEDURE ouvre;
- | 8 VAR I _resultat: INTEGER;
- t q 4 | nom_fichier: STRING/{64];
- | dont voici le code: \ 10 BEGIN
- | q i REPEAT
- | q WRITE(’ nom <stock.dta> ?');
- q 2D4D E849DD call TU_PARAGRAPHS 13 READLN(!_ nom fichier); )
- if 2D50 0600 hex 0600 ; options q 14 ASSIGN(fichier, |_nom_fichier);
- 2D52 780B hex 7808: ‘cs 1 15 (*$i-*) “y
- } 2D54 3C15 hex 3013; ds à 16 RESET (fichier);
- | 2D56 D802 hex D802 ; code À 17 (*Si+*)
- 2D58 2700 hex 2700 ; globales 18 1 _resultat:= IORESULT;
- 2D5A 0004 hex 0004 ; min piles il 19 IF 1 resultat<> 0
- 2D5C 00A0 x Jess 3 ph de les \ 20 THEN BEGIN
- 2D5E 1000 ex ; fichiers q 21 WRITELN('n’” ay PA
- 2D60 0000 hex 0000 ; input i 22 CLOSE(fichier)- ae
- 2D62 0000 hex 0000 ; output 23 END;
- ). 24 UNTIL /_resultar= 0;
- 2D64 8BEC mov bp, sp | | 25 END; (* ouvre *)
- | 2D66 E814DF call TU_TAILLE_CODE | 26
- | 2D69 1500 hex 1500 ; taille j
- | 2D6B 6D2D adr SAUT_PRINCI PAL
- 4 L
- mR L AU COEUR DE TURBO PASCAL 404 AU COEUR DE TURBO PASCAL | AU COEUR DE TURBO PASCAL 405 AU COEUR DE TURBO PASCAL
- ==================== PAGE 10 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.3 la gestion des erreurs: r, i, k, v 6.3
- 27 BEGIN
- 28 ouvre;
- 29 END.
- Fig. 6.17 Le programme option_i_ouvre.
- Notez que:
- _ nous stockons le code du résultat de RESET dans une variable. En effet,
- si nous utilisions directement IORESULT dans la condition du IF, nous
- sortirions de la boucle méme si le fichier n’était pas trouvé (IORESULT
- recupère le code ET met à zéro la zone qui contient ce code).
- — lorsque le fichier n’est pas trouvé, il est prudent de refermer le fichier que nous avons essayé
- d'ouvrir. En TURBO ce n’est pas nécessaire.
- — nous pourrions affiner le message en fonction du code d’erreur (fichier non trouvé, nom
- incorrect...)
- Voici un autre exemple permettant de s’assurer si un fichier est déjà créé (pour éviter par exemple
- de le détruire par REWRITE:
- O (* 001 xopti4 *)
- 1 (* 16 oct 86 *)
- 2
- 3 x(*Se#7) :
- 4 PROGRAM option_i_existe;
- 5 TYPE string64= STRING/64];
- 6 VAR fichier: FILE OF INTEGER;
- 7 nom_fichier: string64;
- 8
- 9 FUNCTION deja_ce_fichier(p_nom_fichier: string64): BOOLEAN;
- 10 BEGIN
- 11 ASSIGN(fichier, p_nom_fichier);
- 12 (*$i-*)
- 13 RESET (fichier);
- 14 (*Si+*)
- 15 IF IORESULT= 0
- 16 THEN deja_ce_fichier:= TRUE
- 17 ELSE BEGIN
- 18 deja_ce_fichier:= FALSE;
- 19 CLOSE(fichier);
- 20 END;
- 21 END; (* ouvre *)
- 22
- AU COEUR DE TURBO PASCAL 406 AU COEUR DE TURBO PASCAL
- 6 LES OPTIONS DE COMPILATION
- 6.3 la gestion des erreurs: r, i, k, v 63
- 23 BEGIN (* principal *)
- 24 WRITE(’nom <stock.dta> ?’);
- 25 READLN(nom_fichier);
- 26 IF deja_ce_.fichier(nom_fichier)
- 27 THEN BEGIN
- 28 WRITELN('ce fichier existe deja’ );
- 29 -EXIT;
- 30 END
- 31 ELSE BEGIN
- 32 REWRITE(fichier);
- 33 A À
- 34 END;
- 35 END.
- Fig. 6.18 Le programme option_i_existe.
- {6.3.4 LES OPTIONS K+ K-
- 6.3.4.1 DEFINITION DE L’OPTION K
- L’option K (vérification de pile):
- ~ Er de supprimer la vérification de place sur la pile avant l’appel d’une procédure ou d’une
- onction
- - En défaut utilise le mode K+ (vérification de place)
- — l'option K peut être utilisée localement
- Exemple:
- (*$K-*)
- 6.3.4.2 MOTIVATION
- Lorsque nous appelons une procédure, le programme place sur la pile:
- — la sauvegarde de l’environnement de la procédure appelante (CP et son BP)
- — la table d’accés aux piles locales intermédiaires (au moins le BP actuel)
- — les variables locales s’il y en a
- — les paramètres s’il y ena
- Il convient donc de s'assurer qu'il y a encore assez de place en mémoire pour stocker ces données.
- Par défaut le compilateur vérifie systématiquement que la pile permet d’accomoder un appel.
- L'option K- permet de supprimer cette vérification.
- AU COEUR DE TURBO PASCAL 407
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 11 ====================
- 6 LES OPTIONS DE COMPILATION 6 { 6 LES OPTIONS DE COMPILATION 6
- 6.3 la gestion des erreurs: r, i, k, v 6.3 | 6.3 la gestion des erreurs: r, i, k, v 63
- 2D7A 8BES FIN_DEUX mov sp, bp
- 6.3.4.3 FONCTIONNEMENT | 2D7C 5D pop bp
- 2D7D C3 ret
- Voici un programme utilisant l’option K-: | 2D7E B90600 PRINCIPAL mov cx, $0006
- 1 2D81 E8FEE1 call TU_STACK_CHECK
- | 2D84 ESE9FF call DEUX
- O (* 001 xoptk *) |
- 1 (*20 aou 87 *) i 2D87 E8E6FF call DEUX
- 2 À
- 3 (*$r+*) 2D8A E90000 jmp FIN
- | 4 PROGRAM option_k; j
- | 5 | 2D8D 33C0 FIN xor ax, ax
- | 6 PROCEDURE deux; 2D8F E8AEDE call | TULHALT
- 2 | v BEGIN
- i} | 8 - END; (* deux *) q : Fig. 6.20 Le code de option_k.
- | 9 |
- nn 10 BEGIN (* deux *)
- | 11 deux;
- | 12 (*$k-*) ) Notez que:
- 13 deux; if
- 14 END. 4 — en mode K+ (mode par défaut), le code appelle simplement la routine de la librairie
- TU_STACK_CHECK, en lui indiquant dans CX le nombre d’octets dont la procédure aura
- Fig. 6.19 Le programme option_k. q besoin.
- | j
- |
- | Et voici son code: \ Cette option ne concerne pas l’utilisation de la mémoire par les pointeurs. Seuls les appels de
- {| procédures sont concernés.
- | 2D4D E849DD call TU_PARAGRAPHS
- | 2D50 0600 hex 0600 ; options |
- || 2D52 780B hex 780B : es 4
- | 2D$4 3C15 hex SCID \iads 4 6.3.4.4 UTILISATION
- | 2D56 DAO2 hex DAO2 ; code q
- 2D58 2700 hex 2700 ; globales {
- (| 2D5A 0004 hex 0004 ; min piles 4 Les seuls programmes ayant à utiliser cette option sont ceux qui effectuent des appels à des
- 2D5C 00A0 hex OOAO ; max piles procédures situées à un endroit différent que celui prévu normalement par la mécanique TURBO.
- | 2D5E 1000 hex 1000 ; fichiers | Il s’agit là essentiellement de procédures placées dans des programmes rendus résidents et appelées
- 2D60 0000 hex 0000 ; input par un autre programme. Ces techniques sont utilisées surtout pour gérer les interruptions ou
- À 2D62, 0000 hex 0000 ; output j dépasser la limite des 64K.
- | 2D64 8BEC mov bp, sp
- || 2D66 E814DF call TU_TAILLE_CODE
- i] 2D69 2900 hex 2900 ; taille À
- | 2D6B 6D2D adr SAUT_PRINCIPAL 4 { 6.3.5 L’OPTION V
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL q
- | 2070" 59 DEUX push bp a 6.3.5.1 DEFINITION
- | 2D71 8BEC mov bp, sp à
- | 2D73 55 push bp ; Rue
- 2D74 E90000 jmp DEBUT _DEUX À L'option VERIFY:
- 2D77 E90000 DEBUT_DEUX jmp FIN_DEUX q — permet d’utiliser des paramètres variables STRING dont la taille est différente du paramètre
- À actuel
- |! — a par défaut la valeur V+
- 1 — est utilisable localement
- LL: { AU COEUR DE TURBO PASCAL 408 AU COEUR DE TURBO PASCAL | AU COEUR DE TURBO PASCAL : 409 AU COEUR DE TURBO PASCAL
- ==================== PAGE 12 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.3 la gestion des erreurs: r, i, k, v 6.3
- Exemple:
- (*$V-*)
- 6.3.5.2 MOTIVATION
- Considérons le programme suivant:
- 0 (* 001 xoptv *)
- 1 (* 20 aou 87 *)
- 2
- 3 (*Sr+*)
- 4 PROGRAM option_v;
- 5 TYPE string80= STRING/80];
- 6 VAR chaine3: STRING/3];
- -
- 8 PROCEDURE lis_chaine(VAR pv_chaine: string80);
- 9 BEGIN
- 10 READLN(pv_chaine);
- 11 END; (* deux *)
- 12
- 13 BEGIN (* deux *)
- 14 lis_chaine(chaine3);
- 15 END.
- Fig. 6.21 Le programme option_v.
- Si l’utilisateur tape une chaine de 30 caractéres, les octets 4 4 30 iront écraser ce qui se trouve en
- mémoire après chaines.
- D'autre part le compilateur vérifie normalement que les types des paramètres formels et actuels
- sont identiques.
- Pour permettre l’écriture de procédures génériques, le compilateur accepte des chaînes de tailles
- distinctes, à condition d’utiliser l’option V-.
- 6.3.5.3 FONCTIONNEMENT
- L'option V- indique simplement au compilateur qu’il ne doit pas vérifier la concordance des tailles
- des chaînes.
- AU COEUR DE TURBO PASCAL 410 AU COEUR DE TURBO PASCAL
- 6 LES OPTIONS DE COMPILATION 6
- 6.3 la gestion des erreurs: r, i, k, v 6.3
- Voici un exemple d'utilisation:
- O (* 001 xoprv *)
- 1 (*20 aou 87 *)
- 2
- 3 (*$r+*)
- 4 PROGRAM option v;
- 5 TYPE string80= STRING/80];
- 6 VAR chaine3: STRING/3];
- à chaine127: STRING[127];
- 9 PROCEDURE lis_chaine(VAR pv_chaine: string80);
- 10 BEGIN
- 11 READLN(pv_ chaine);
- 12 END; (* deux *)
- 13
- 14 BEGIN (* deux *)
- 15 (* refusé par le compilateur: lis_chaine(chaine127);
- 16 lis_chaine(chaine3); *)
- 17 (*$v-*)
- 18 lis_chaine(chaine3);
- 19 END.
- Fig. 6.22 Le programme option_v.
- Notez que:
- — les option V+ ou V- ne produisent pas des codes différents. V- permet simplement de compiler
- des programmes rejetés par V+
- - en TURBO il n’y a pas de risque qu'une lecture d’un paramètre variable chaîne écrase le
- paramètre actuel, puisque la lecture tronque la valeur lue si elle dépasse la taille prévue. V-
- permet simplement de rendre le programmeur conscient que certaines vérifications ne seront
- pas effectuées par le compilateur.
- (6.4 LE CLAVIER: B, D, C, U]
- {6.4.1 LES OPTIONS B+ B-
- 6.4.1.1 DEFINITION DE L’OPTION B
- L’option B (Buffer):
- — permet de sélectionner la lecture clavier tamponnée ou standard
- — est par défaut en mode B+
- — est une option globale, qui doit obligatoirement figurer en tête de programme
- AU COEUR DE TURBO PASCAL 411 AU COEUR DE TURBO PASCAL
- ==================== PAGE 13 ====================
- | 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 6.4 6.4 le clavier: b, d, c, u 6.4
- Exemple: Le PASCAL standard n’a jamais demandé que READ soit terminé par un RETURN avec
- modification des paramètres non contenus dans les caractères tapés. TURBO se rapproche un peu
- (*$B-*) du fonctionnement du PASCAL standard lorsque vous vous placez en mode B-.
- 6.4.1.2 MOTIVATION | 6.4.1.3 FONCTIONNEMENT
- Pour essayer de faciliter la lecture du clavier, TURBO PASCAL utilise par défaut une lecture { Voici un programme compilé en mode B+ (mode par défaut):
- tamponnée du clavier, Dans cette mécanique: :
- | | — une instruction READ récupère tout ce qui est tapé jusqu’à la frappe de RETURN 0 (* 001 xoptb *)
- — répartit les valeurs tapées aux variables contenues dans le READ. Si la ligne tapée ne contient | 1 (*20 aou 87 *)
- | pas assez de valeurs, TURBO place: i 2
- 1 | | * *
- | — la valeur 26 (CTRL Z) dans les caractères ° ene AM option_b plus;
- a { — initialise les chaînes à la chaîne vide 5 VAR entier: INTEGER;
- | — ne modifie pas les valeurs numériques. | 6 BEGIN
- | Peay à READLN(entier);
- || Considérons le programme suivant: È END. gaie
- |
- || 0 re dliaibess +) Fig. 6.24 Le programme option_b_plus.
- | 1 (*20 aou 87 *)
- | 2
- i]
- | à PROGRAM option b 3; et voici seen
- | 5 VAR nombre: INTEGER;
- | ! 6 caracterel, caractere2, caractere3: CHAR; ! 2D4D E849DD call TU_PARAGRAPHS
- 4 miens STRING/3]; | 2D50 0600 nas ve ; options
- 2D52 780B ex AN
- | | à : READ(caracterel, caractere2, caractere3); q 2D54 3C15 hex |)
- 1 | 2D56 D902 hex D902 ; code
- | Ù 11 READ(nombre, caracterel, chaine); 2D58 2700 hex 2700 ; globales
- | 12 END. | 2D5A 0004 hex 0004 ; min piles
- | Là 1 2D5C 00A0 hex QOAO ; max piles
- (| Fig. 6.23 Le programme option_b. { 2DS5E 1000 hex 1000 ; fichiers
- | P iq 2D60 0000 hex 0000 ; input
- | À 2D62 0000 hex 0000 ; output
- | Alors: yi 2D64 8BEC mov bp, sp
- | h } 2D66 E814DF call TU_TAILLE_CODE
- q — Si vous tapez: q 2D69 1C00 hex 1C00 ; taille
- | AB RETURN | 2D6B 6D2D adr SAUT_PRINCIPAL
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL
- alors caractere] contiendra A, caractere2 contiendra B et caractere3 contiendra CTRL Z.
- : k | 2D70 E8DEF7 PRINCIPAL call TU_READLN
- Si vous tapez ensuite: i 2D73 BF6202 en , $0262
- - f 2D76 1E pus s
- 128 ESPACE OH RETURN à 2D77 E8C6F9 call TU_READ_ENTIER
- 4 2D7A E856E2 call TU_10_CHECK
- alors nombre contiendra 128, caractere! contiendra l’espace et chaîne contiendra OH.
- - si ft vous tapez 128+OH une erreur sera provoquée car + n’est pas un chiffre compris
- entre O et 9. #
- | AU COEUR DE TURBO PASCAL 412 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 413 AU COEUR DE TURBO PASCAL
- ==================== PAGE 14 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 6.4
- 2D7D E90000 jmp FIN
- 2D80 33C0 FIN xor ax, ax
- 2D82 E8BBDE \ call TU_HALT
- Fig. 6.25 Le code de option_b_plus.
- Voici le méme programme compilé en B-:
- (* 001 xoptb *)
- (* 20 aou 87 *)
- (*$r+*)
- (*$b-*)
- PROGRAM option b moins;
- VAR entier: INTEGER;
- BEGIN
- READLN(entier);
- END.
- 0 © AU & &w D = ©
- Fig. 6.26 Le programme option_b_moins .
- dont voici le code:
- 2D4D E849DD call TU_PARAGRAP!
- 2D50 0600 hex 0600 ; options
- 2D52 780B hex 780B ; cs
- 2D54 3C15 hex SOLS i igi ds
- 2D56 D902 hex D902 ; code
- 2D58 2700 hex 2700 ; globales
- 2D5A 0004 hex 0004 ; min piles
- 2D5C 00A0 hex 00A0 ; max piles
- 2DSE 1000 hex 1000 ; fichiers
- 2D60 0000 hex 0000 ; input
- 2D62 0000 hex 0000 ; output
- 2D64 8BEC mov bp, sp
- 2D66 E814DF call TU_TAILLE_CODE
- 2D69 1F00 hex 1F00 ; taille
- 2D6B 6D2D adr SAUT_PRINCI PAL
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
- 2D70 E880F7 PRINCIPAL call TU_READ
- 2D73 BF6202 mov di, $0262
- 2D76 1E push ds
- 2D77 E8C6F9 call TU_READ_ENTIER
- 2D7A E854FA call TU_READLN_VAR
- 2D7D E853E2 call TU_IO_CHECK
- 2D80 E90000 jmp $2D83
- AU COEUR DE TURBO PASCAL 414 AU COEUR DE TURBO PASCAL
- 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 6.4
- 2D83 33C0 LR_2D83 xor ax, ax
- 2D85 E8B8DE call TU_HALT
- Fig. 6.27 Le code de option_b_moins .
- 6.4.1.4 UTILISATION
- Ni B+ ni B- ne sont conformes au PASCAL standard. Lequel n’avait d’ailleurs pas été prévu pour
- fonctionner avec des terminaux interactifs. Aucune solution n’est donc parfaite.
- Sachant que notre solution n’est pas meilleure que les autres, voici comment nous procédons:
- — nous utilisons KBD qui n’est jamais tamponné, en affichant ce qui est tapé par WRITE
- — nous n’utilisons jamais plus d'une variable dans un READ ou un READLN (il faut de toutes
- façons afficher à l'écran ce que l’utilisateur doit taper avant chaque lecture)
- pour les petits programmes d'essai, nous utilisons READ pour les caractères (frappe d’une
- touche sans avoir besoin de RETURN) et READLN pour les valeurs numériques et les chaînes
- pour les programmes qui doivent fonctionner sans erreur, nous utilisons:
- — READ pour les caractères (frappe d’une touche sans nécessité de taper RETURN).
- — READLN pour les chaînes
- — des procédures de saisie contrôlées pour les saisies numériques (lecture caractère par
- caractère avec contrôle à chaque frappe et conversion numérique, gestion du curseur...). De
- telles procédures pour les entiers et les réels ont été publiées dans TOPIQUES PASCAL en
- PASCAL UCSD, ou dans PASCALISSIME.
- Attention, avec KBD, EOLN ne fonctionne pas correctement (retard d’un caractère). Il faut
- tester CHR(13) pour détecter la frappe de RETURN.
- {6.4.2 LES OPTIONS D+ ET D-
- 6.4.2.1 DEFINITION
- L'option D (Device):
- — permet de modifier la gestion des fichiers TEXT
- — par défaut fonctionne en mode D+
- — doit être placée en début de programme
- Exemple:
- (*$D-*)
- AU COEUR DE TURBO PASCAL 415
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 15 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 6.4 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 64
- 6.4.2.2 MOTIVATION 2D6D"E 90008 SAUT_PRINCIPAL jmp PRINCIPAL
- 2D70 £90000 PRINCI PAL jmp FIN
- | Les fichiers TEXT peuvent être des fichiers disque ou des fichiers de caractère. Les fichiers disque
- | utilisent un tampon, alors que les fichiers de caractères travaillent octet par octet. Lorsqu'une 2D73 33C0 FIN xor ax, ax
- | ouverture d’un fichier TEXT est rencontrée, le programme teste si ce fichier est associé à un M 2D75 E8C8DE call TU_HALT
- | fichier disque ou un périphérique. Dans le second cas, le mécanisme du tampon n’est pas utilisé. :
- " a À Fig. 6.29 Le code utilisant l’option D- .
- |
- |
- | L'option D- permet de ne pas effectuer le test du type de périphérique au moment du RESET, — 1
- | REWRITE ou APPEND. Dans ce cas toutes les entrées / sorties seront tamponnées. 4 Notez que:
- ||
- |
- i
- — la seule différence par rapport à un programme sans D- est la valeur du paramètr
- C’est donc la routine TU_PARAGRAPHS qui récupère la valeur du bit 5 de ce en
- 6.4.2.3 FONCTIONNEMENT q modifie le comportement de READ et WRITE en conséquence. i
- Voici un programme utilisant l'option D-: Un exemple utilisant D est présenté au paragraphe 6.5.2.
- (* 001 xoptd *)
- (* 20 aou 87 *) il
- 1 {6.4.3 LES OPTIONS C+ C-
- ( vm
- (*$d-*) (|
- PROGRAM option_b; | 6.4.3.1 DEFINITION
- BEGIN |
- END.
- NAUNRWNKO
- L’option C (Contrôle):
- || | Fig. 6.28 Le tion_d. ù
- | | ig programme option_ - aioe de apecra le test de CTRL Cet CTRL S
- | 7 a la valeur C+ par défaut | |
- \ est une option globale qui doit être placée au début du programme
- | et voici son code:
- | 2D4D E849DD call TU_PARAGRAPHS | Exemple:
- | 2D50 0400 hex 0400 ; options q (*§C.*
- 2D52 780B hex 780B ; cs | 4
- 2D54 3C15 hex SUIS vita à
- | 2D56 D802 hex ahs code 4
- 2D58 2700 hex 27 ; globales be
- 2DSA 0004 hex 0004 : min piles 6.4.3.2 MOTIVATION
- | 2D5C 00A0 hex OOAO ; max piles
- 2D5E 1000 hex 1000 ; fichiers hy esi ù
- 5D60 0000 nas 0000 : input | La Frapne de CTRL C et CTRL S permet à l'utilisateur de contrôler l'exécution du programme:
- | 2D62 0000 hex 0000 ; output ~ lorsque le programme exécute un READ ou un READLN et que l'utilisateur tape CTRL C.
- 2D64 8BEC né b : l'exécution est interrompue :
- 2D66 E814DF call TU TAILLE CODE | = phn le programme exécute un WRITE ou un WRITELN vers l’écran, CTRL S permet de
- 2D69 0F00 hex OFOO ; taille pir pr» l'exécution. La frappe de n'importe quelle touche permet alors de
- 2D6B 6D2D adr SAUT_PRINCIPAL i pre
- { AU COEUR DE TURBO PASCAL 416 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 417 AU COEUR DE TURBO PASCAL
- ==================== PAGE 16 ====================
- 6 LES OPTIONS DE COMPILATION 6
- 6.4 le clavier: b, d, c, u 6.4
- CTRL C permet donc d’arréter un programme. CTRL S permet d’effectuer une pause pour pouvoir
- examiner des résultats affichés à l'écran.
- Pour éviter qu’un utilisateur n’interrompe par mégarde un programme qui doit se terminer
- normalement (données en mémoire qui doivent être mises à jour sur disque par exemple) ou qu'il
- ne croie que le programme s’est. bloqué, il est possible d’annuler l'interprétation de ces touches en
- utilisant l'option C-.
- 6.4.3.3 FONCTIONNEMENT
- Voici un programme compilé en C-
- (* 001 xoptc *)
- (* 20 aou 87 *)
- (*$r+*)
- (*$c-*)
- PROGRAM option c;
- VAR entier: INTEGER;
- BEGIN
- READLN(entier);
- END.
- CONAN BR & D = ©
- Fig. 6.30 Le programme option_c.
- et voici son code:
- 2D4D E849DD call TU_PARAGRAPHS
- 2D50 0200 hex 0200 ; options
- 2D52 780B hex T30p" <"-Cs
- 2D54 3C15 hex gers; (ds
- 2D56 D902 hex D902 ; code
- 2D58 2700 hex 2700 ; globales
- 2D5A 0004 hex 0004 ; min piles
- 2D5C 00A0 hex QOAO ; max piles
- 2D5E 1000 hex 1000 ; fichiers
- 2D60 0000 hex 0000 ; input
- 2D62 0000 hex 0000 ; output
- 2D64 8BEC mov bp, sp
- 2D66 E814DF call TU_TAILLE_CODE
- 2D69 1C00 hex 1C00 ; taille
- 2D6B 6D2D adr SAUT_PRINCI PAL
- 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
- AU COEUR DE TURBO PASCAL 418 AU COEUR DE TURBO PASCAL
- LES OPTIONS DE COMPILATION 6
- le clavier: b, d, c, u 6.4
- E8DEF7 PRINCIPAL cadd TU_READLN
- BF6202 mov di, $0262
- TE push ds
- E8C6F9 call TU_READ_ENTIER
- E856E2 call TU_1O_CHECK
- 2D7D E90000 jmp FIN
- 2D80 33C0 FIN xor AAA IRX
- 2D82 E8BBDE call TU_HALT
- Fig. 6.31 Le code de option_c.
- Notez que:
- — la seule différence par rapport au même programme est la valeur du paramètre en $2D50. C’est
- donc la routine TU_LPARAGRAPHS qui récupère la valeur du bit 1 de ce paramètre, et modifie
- le comportement de READ et WRITE
- 6.4.3.4 UTILISATION
- L'utilisation de l’option C-:
- — accélère l’affichage écran
- — permet l’utilisation de KEYPRESSED
- (6.44 LES OPTIGNS U+ ET U-
- 6.4.4.1 DEFINITION
- L'option U (User interrupt):
- — permet d’interrompre le programme par la frappe de CTRL C
- — à par défaut la valeur U-
- — doit être placée au début du programme.
- Exemple:
- (*$U+*)
- 6.4.4.2 MOTIVATION
- Normalement CTRL C ne permet d’interrompre un programme que lorsque le programme exécute
- un READ ou un READLN et que l'utilisateur tape CTRL C.
- AU COEUR DE TURBO PASCAL 419 AU COEUR DE TURBO PASCAL
- ==================== PAGE 17 ====================
- | A DEN SETS DE DONTE ATION 4 6, LES OPTIONS DE COMPILATION r
- Une boucle telle que: 2D6D E90000 SAUT_PRINCIPAL jmp sé vite mal
- UNTIL TRUE; 3D70 CC DÉBUT RÉPEAT int 3
- ne peut être interrompue qu’en utilisant CTRL ALT DEL ou en débranchant la machine. | 2D7 1 cg dt 3
- | 2D75 A36202 NU TT à
- L'option U+ permet d’interrompre le programme à n’importe quel moment. | 2D78 CC tu 3
- | | spre OBO mov ax, 30001
- q 6.4.4.3 FONCTIONNEMENT | EDIE 739% jnz FIN_REPEAT
- | 2D80 E9EEFF jmp DEBUT_REPEAT
- i Voici un programme comportant l’option U+: q 2D83 CC FIN_REPEAT int 3
- | 0 (* 001 xoptu *) 2D84 E90000 jmp FIN
- 3 (*$r+*) ! call TU_HALT
- 3 PROGRAM option_u; { Fig. 6.33 Le code de option_u .
- 6 VAR entier: INTEGER; if
- 7 BEGIN q
- À 9 Pier: bh | Notez que:
- « M TRUE; | = a ened PRES en $2D50 force TU_PARAGRAPHS a implanter le test de CTRL C
- — par la suite, le code testera systématiquement la frappe ce CTRL C avant chaque instruction. Ce
- test peut même être effectué plusieurs fois de suite lorsque plusieurs instructions commencent
- \ Fig. 6.32 Le programme option_u. 1
- 1 au même endroit
- et voici son code:
- 6.4.4.4 UTILISATION
- 2D4D E849DD call fee tae
- | 2D50 0E00 hex 0 ; options Le mode U+ peut étre utilisé au cours du développement, lorsque le progr:
- i 2D52 780B hex 780B ; cs a boucles infinies. Comme il ralentit Tenacution n’est en paar ab Arret Bo ne
- | 2D54 3C15 hex SCS 0; ds a finale du programme.
- 2D56 D902 hex D902 ; code 1
- 2D58 2700 hex 2700 ; globales 4
- 2D5A 0004 hex 0004 ; min piles {
- 2D5C 00A0 hex 00A0 ; max piles (à
- 2D5E 1000 hex 1000 ; fichiers i
- | 2D60 0000 hex 0000 ; input À
- 2D62 0000 hex 0000 ; output |
- 2D64 8BEC mov bp, sp 4
- 2D66 E814DF call TU_TAILLE_CODE
- 2D69 2300 hex 2300 ; taille
- 2D6B 6D2D adr SAUT_PRINCI PAL
- \
- q
- |
- 4
- a
- i
- AU COEUR DE TURBO PASCAL 421 AU COEUR DE TURBO PASCAL
- L { AU COEUR DE TURBO PASCAL 420
- AU COEUR DE TURBO PASCAL M 4
- ==================== PAGE 18 ====================
- 6 LES OPTIONS DE COMPILATION
- 6.5 les fichiers: f, g, p
- (6.5 LES FICHIERS: F, G, P|
- {6.5.1 L’OPTION F
- 6.5.1.1 DEFINITION DE L’OPTION F
- L’option F (Files):
- — permet d’ouvrir un plus grand nombre de fichiers simultanément
- — est une option globale, qui doit obligatoirement figurer en tête de programme
- Exemple:
- (*$F17%)
- 6.5.1.2 MOTIVATION
- Chaque fichier ouvert nécessite une zone de données contenant les informations nécessaires ala
- gestion de ce fichier (nom, taille, date de derniére modification...). Pour économiser la place
- mémoire, le DOS et TURBO ont limité le nombre de fichiers qui peuvent être ouverts à un instant
- donné.
- Si votre programme a besoin de traiter plus de fichiers que le nombre prévu par défaut, il faut le
- préciser en utilisant l'option F.
- 6.5.1.3 FONCTIONNEMENT
- L'option F modifie simplement la valeur du paramètre situé en $2DSE. La routine
- TU_PARAGRAPHS augmente alors la taille de la table des handle utilisés ($0242). Le
- compilateur positionnera alors la première variable globale non pas à $0262 mais après le handle
- du dernier fichier demandé.
- Pour que cette option fonctionne, il faut aussi demander au DOS d’accommoder plus de fichiers.
- Cela doit être effectué au moyen du fichier CONFIG.SYS.
- Mentionnons aussi que rares sont les logiciels nécessitant plus de 4 ou 5 fichiers disques ouverts à
- un même instant. Avant de recourir à l’option F, consultez peut-être un bon ouvrage sur la gestion
- de fichiers...
- AU COEUR DE TURBO PASCAL 422 AU COEUR DE TURBO PASCAL
- LES OPTIONS DE COMPILATION
- 6 .
- = les fichiers: f, g, p Pe
- {6.5.2__LES OPTIONS G ET P
- Lux
- 6.5.2.1 DEFINITION
- mens
- Les options G (Get) et P (Put):
- — permettent de rediriger les fichiers d’entrée et de sortie
- — doivent être placés en début du programme
- Exemple:
- (*$G512, P1024 *)
- 6.5.2.2 MOTIVATION
- Par défaut, le fichier utilisé par READ est le clavier, et le fichier utilisé par WRITE est l’écran.
- Les options G et P permettent d'utiliser comme fichier d'entrée par défaut ou de sortie par défaut
- d’autres périphériques.
- 6.5.2.3 UTILISATION
- Voici un programme qui lit un fichier et met les lettres minuscules en majuscules:
- 0 (* 001 xoptgp *)
- 4 (* 20 aou 87 *)
- 3 (*$r+*)
- 4 (*$g512,p512,d- *)
- 5 PROGRAM option gp;
- 6 VAR caractere: CHAR;
- 7 BEGIN
- 8 WHILE NOT EOF DO
- 9 BEGIN
- 10 READ(caractere);
- 11 WRITE(UPCASE(caractere));
- 12 END;
- 13 END.
- Fig. 6.34 Le programme option_gp.
- AU COEUR DE TURBO PASCAL 423 AU COEUR DE TURBO PASCAL
- ==================== PAGE 19 ====================
- 6 LES OPTIONS DE COMPILATION 6 L
- | 6.5 les fichiers: f, g, p 6.5 A LIBRAIRIE 7
- Pour utiliser ce programme, il faudra le compiler sur disque, puis taper, depuis la ligne de 4
- commande du DOS: ;
- optiongp < source > destination
- {6.6 | CONCLUSION |
- CHAPITRE 7
- | . CP |
- | | Dans ce chapitre nous avons examiné:
- | l'option Include qui permet d'utiliser des textes de n’importe quelle taille j LA LIB RAIRIE
- les options R, I, K, V qui permettent la gestion des erreurs i
- les options U, C, B et D qui modifient le comportement des fichiers d'entrée / sortie
- | les options F G et P qui permettent de modifier le nombre et la nature des fichiers utilisés par
- défaut.
- | | \ Ce chapitre va présenter:
- | a — le contenu de la librairie
- | — les variables globales utilisées
- | |: A la fin de ce chapitre:
- | i — vous connaitrez les points d’entrée des routines utilisées dans le code compilé
- | | À — vous saurez comment sont passés les paramètres aux routines de la librairie
- | il — Vous pourrez afficher le contenu des variables globales utilisées par tout code compilé
- i
- if AU COEUR DE TURBO PASCAL 424 AU COEUR DE TURBO PASCAL ; AU COEUR DE TURBO PASCAL
- 425 AU COEUR DE TURBO PASCAL
- ==================== PAGE 20 ====================
- 7 LA LIBRAIRIE 7
- Wa | la librairie et les globales 74
- {7.1 LA LIBRAIRIE ET LES GLOBALES |
- Nous avons vu au chapitre précédent que le code compilé comportait:
- — des traitements effectués directement en utilisant les registres du 8088
- — des appels à des routines de la librairie
- La librairie comporte des groupes de routines chargées de gérer:
- — les entrées / sorties 4
- — les pointeurs
- les traitements divers (OVERLAYs, STR et VAL, erreurs, nombres aléatoires) à
- — les chaînes À
- les ensembles
- les réels {
- les fichiers (TEXT, READ / WRITE, FILE OF, FILE, directories) à
- — le chaînage des programmes
- Nous allons présenter dans ce chapitre toutes les routines que le compilateur peut invoquer. Pour 1
- chacune de ces routines nous indiquerons quels paramètres elle reçoit et comment elle retourne une
- valeur. |
- Tout programme TURBO PASCAL comporte aussi des variables globales. Ces données sont q
- utilisées: À
- — pour gérer les périphériques
- — comme variables temporaires des routines de la librairie
- Nous présenterons par conséquent ces données, en fournissant un programme qui permet d’en ©
- afficher le contenu. À
- {7.2 LES DONNEES GLOBALES |
- (7.2.1 LA LISTE DES DONNEES GLOBALES
- Voici la liste des variables que le programme peut utiliser: i
- v_attr_norm
- — adresse: $0000
- — valeur de l’attribut de vidéo normale
- v_attr_low
- — adresse: $0001 q
- — valeur de l’attribut de vidéo faible P
- v_reverse i
- — adresse: $0003 a
- — valeur de l’attribut de vidéo inverse if
- AU COEUR DE TURBO PASCAL 426 AU COEUR DE TURBO PASCALE
- 7 LA LIBRAIRIE 1)
- 72 les données globales 72
- v_fenetre_x_bas
- = adresse: $0004
- — marge gauche de la fenêtre texte
- v_fenetre_y_bas
- — adresse: $0005
- — haut de l’écran
- v_mode_ecran
- — adresse: $0006
- — type d’affichage
- v_couleur
- — adresse: $0007
- — couleur actuelle
- v_attribut
- — adresse: $0008
- — attribut d’affichage courant
- v_mode_graphiqu
- — adresse: $0009
- — mode graphique courant
- v_fen_graphxdeb
- — adresse: $000A
- — marge gauche de la fenêtre graphique
- v_fen_graphxfin
- — adresse: $000C
- — marge droite de la fenétre graphique
- v_fen_graphydeb
- - sse: $000E
- — haut de la fenêtre graphique
- v_fen_graphyfin
- — adresse: $0010
- — bas de la fenétre graphique
- v_delai_1
- — adresse: $0012
- — variable utilisée dans le calcul du délai
- v_draw_1
- — adresse: $0014
- — variable temporaire utilisée pour le tracé de droite graphique
- v_draw_4
- — adresse: $0016
- — variable temporaire utilisée pour le tracé de droite graphique
- v_draw_3
- — adresse: $0018
- — variable temporaire utilisée pour le tracé de droite graphique
- AU COEUR DE TURBO PASCAL 427
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 21 ====================
- 7 LA LIBRAIRIE
- ¥ 54 les données globales
- v_draw_6
- = adresse: $001A f \
- — variable temporaire utilisée pour le tracé de droite graphique
- v_draw_2
- = adresse: $001C |
- — variable temporaire utilisée pour le tracé de droite graphique
- v_draw_5
- = adresse: $001E | i
- — variable temporaire utilisée pour le tracé de droite graphique
- v_palette i
- — adresse: $0020
- — palette courante
- v_delai_2
- = adresse: $0021
- — variable utilisée dans le calcul du délai
- v_ofs_deb_free
- — adresse: $0024
- — décalage de la liste des zones du tas libérées par DISPOSE
- v_seg deb _free
- — adresse: $0026
- — segment de la liste des zones du tas libérées par DISPOSE
- v Wf p t_deb
- pe story dos
- — décalage du pointeur de la liste des zones du tas libérées par DISPOSE
- v te t_deb
- sse: $ 2A
- — segment du pointeur de la liste des zones du tas libérées par DISPOSE
- v as
- hi $002C
- - hates d’un pointeur utilisé pour les calculs d’allocation
- v_se 8 tl
- sse: $002E |
- - L'on d’un pointeur utilisé pour les calculs d’allocation
- v_ofs_pointeur
- — adresse: $0030
- — décalage d’un pointeur utilisé pour les calculs d'allocation
- v_seg_pointeur
- — adresse: $0032
- — segment d’un pointeur utilisé pour les calculs d’ allocation
- AU COEUR DE TURBO PASCAL ee AU COEUR DE TURBO PASCA:
- 7 LA LIBRAIRIE
- 7.2 les données globales
- —_—
- v_ofs_p
- a perl $0034
- — décalage d’un pointeur utilisé pour les calculs d’allocation
- v_seg_pt3
- = dr $0036
- — segment d’un pointeur utilisé pour les calculs d’allocation
- y_tampon_read
- = adresse: $0038
- — tampon de lecture clavier
- v_tampon_wrk
- — adresse: $00B8
- — tampon général
- v_adr_test_con
- | = adresse: $0138
- — décalage dans CS de la routine de test du clavier
- v_adr_lis_ con
- — adresse: $013A
- — décalage dans CS de la routine de lecture du clavier
- v_adr_ecris_con
- — adresse: $013C
- — décalage dans CS de la routine d’affichage écran
- v_adr_ecris_Ist
- — adresse: $013E
- — décalage dans CS de la routine d’écriture imprimante
- v_adr_ecris_ aux
- = adresse: $0140
- — décalage dans CS de la routine d’écriture série
- v_adr lis aux
- — adresse: $0142
- — décalage dans CS de la routine de lecture série
- v_adr_ecris_usr
- — adresse: $0144
- — décalage dans CS de la routine d’écriture série 2
- v_adr_lis_usr
- — adresse: $0146
- — décalage dans CS de la routine de lecture série 2
- v_handle_read
- — adresse: $015C .
- — handle de lecture
- v_read_write
- — adresse: $015E
- — temporaire pour distinguer la lecture ou l'écriture
- AU COEUR DE TURBO PASCAL 429 AU COEUR DE TURBO PASCAL
- ==================== PAGE 22 ====================
- 7 LA LIBRAIRIE 7
- 72 les données globales 72 0
- v_debut_glob pg
- — adresse: $0160
- — décalage dans DS du début des globales utilisateur
- — sauvegarde de la taille du tampon précisé avec l’option G
- v_handle_write
- — adresse: $0168
- — handle d'écriture
- v_colonne_max
- — adresse: $016A
- — marge droite de l’écran texte
- v_ligne_max
- — adresse: $016B
- — dernière ligne de l’écran texte
- v_debut_glob 2
- — adresse: $016C
- — décalage dans DS du début des globales utilisateur
- v_SV_output
- — adresse: $016E
- — sauvegarde de la taille du tampon précisé avec l'option P
- v_test_device
- — adresse: $0174
- — variable contenant l’option D
- v_turbo_cs
- — adresse: $0176
- — segment CS de TURBO.COM lors de l’exécution en mémoire
- v_turbo_ds
- — adresse: $0178
- — segment DS de TURBO.COM lors de l’exécution en mémoire
- pt_table_handle
- — adresse: $017A
- — décalage du début de la table des handle
- v_nb fichiers
- — adresse: $017C
- — nombre maximum de fichiers ouverts à un instant (option F)
- v_adr_proc_err
- — adresse: $017E
- — décalage dans CS de la routine d'erreur
- v_num_err_exec
- — adresse: $0180
- — code de l’erreur
- AU COEUR DE TURBO PASCAL 430 AU COEUR DE TURBO PASCAI
- 7 LA LIBRAIRIE ?
- 72 les données globales 22
- y ind_read_max
- Z adresse: $0181
- _ indice maximal du tampon de lecture
- y ind _tamp_read
- = adresse: $0182
- — indice courant du tampon de lecture
- y taille_tmp_rd
- = adresse: $0184
- — indice du dernier caractère lu
- v_find_error_pc
- — adresse: $0188
- — PC d’une erreur
- v_reg_186
- = adresse: $0186
- — variable utilisée pour effectuer les retours lorsque la pile contient des paramètres qu'il faut
- d’abord dépiler
- v_ofs_tas
- — adresse: $018A
- — décalage du sommet du tas (HEAPPTR)
- v_seg_tas
- — adresse: $018C
- — segment du sommet du tas (HEAPPTR)
- v_sv_sp_2
- - sse: $018E
- — sauvegarde de SP pour pouvoir restaurer la pile lors du retour dans TURBO.COM
- v_sv_ofs_int 0
- — adresse: $0190
- — Sauvegarde du décalage du vecteur $00 au moment du lancement du programme
- v_sv_seg_int 0
- — adresse: $0192
- — sauvegarde du segment du vecteur $00 au moment du lancement du programme
- v_car_keypressd
- — adresse: $0194
- — scan code du caractère tapé au moment de KEYPRESSED
- v_clavier
- — adresse: $0196
- — étiquette du clavier d’entrée (option C)
- v_tampon_ovl
- — adresse: $0198
- — tampon contenant le nom d’un fichier OVERLAY
- v_taille_string
- — adresse: $01E8
- — temporaire utilisée par les routines VAL et STR
- AU COEUR DE TURBO PASCAL 431 AU COEUR DE TURBO PASCAL
- ==================== PAGE 23 ====================
- | | 7 LA LIBRAIRIE
- I 7 LA LIBRAIRIE 7
- | ' pe les données globales 72 les données globales 72
- |
- | v_val_ent_reel v_ofs_chai_dest
- | | — adresse: $01E9 = adresse: $0208
- | — temporaire utilisée par les routines VAL et STR — temporaire utilisée par les routines de gestion de chaines
- v_ofs_string v seg _chai_dest
- = adresse: $01EA = adresse: $020A
- | — temporaire utilisée par les routines VAL et STR — temporaire utilisée par les routines de gestion de chaînes
- v_seg string : v_ofs_chai_depart
- — adresse: $01EC 1 ‘adresse: $020C
- — temporaire utilisée par les routines VAL et STR 4 — temporaire utilisée par les routines de gestion de chaines
- v_ofs_ent_reel2 q v_seg_chai_depart
- — adresse: $01EE 4 — adresse: $020E
- — temporaire utilisée par les routines VAL et STR i — temporaire utilisée par les routines de gestion de chaines
- v_seg_ent_reel2 | v_ofs gene
- | = adresse: $01FO = “adresse: $0234 :
- } — temporaire utilisée par les routines VAL et STR 4 — décalage du fichier utilisé pour READ ou WRITE
- | v_ofs resu_val | v_seg fichier
- = adresse: $01F2 | = A $0236
- | — temporaire utilisée par les routines VAL et STR 1 — segment du fichier utilisé pour READ ou WRITE
- | v_seg_resu_val | v_reset_write_a
- | — adresse: $01F4 q — adresse: $023A
- — temporaire utilisée par les routines VAL et STR 1 — variable pour distinguer RESET, REWRITE ou APPEND
- 1 v_tamp_reell q v_err_rd_wr fof
- — adresse: $01F6 } — adresse: Le
- | — temporaire utilisée par les routines VAL et STR } — code d’erreur
- if | 4
- | i v_ofs_random \ v_tamp_lis_reel
- | = adresse: $01FE 4 = adresse: $023C
- | — décalage du nombre aléatoire q — tampon utilisé pour la conversion numérique
- | 4
- | v_erreur_i_o 4 v_table_handle
- | — adresse: $01FC i — adresse: $0242
- | — code d’erreur d'entrée / sortie \l — table des handles des fichiers
- v_seg_random \
- — adresse: $0200 i
- I — ségment du nombre aléatoire |
- y Liu Li ii À (7.2.2 LE PROGRAMME D’AFFICHAGE DES GLOBALES
- = adresse: $0202 |
- — temporaire utilisée par les routines de gestion de chaînes q Voici un programme permettant l’affichage des variables globales:
- | v_ind_ins_del |
- — adresse: $0204 { 0 (* 003 globals *)
- j — temporaire utilisée par les routines de gestion de chaînes 1 (*22aou87 *)
- Li 2
- | v_qt_delete 1 3! CETTE
- \ — adresse: $0206 À 4 PROGRAM affiche globales;
- q — temporaire utilisée par les routines de gestion de chaines A 5 TYPE string80= STRING/80];
- | 4 6 VAR choix: CHAR;
- | | Mf 7 pointeur 1, pointeur2: INTEGER;
- À 8 fichier: FILE OF INTEGER;
- 1 j 9 chaine, chainel, chaine2, chaine3: string80;
- iq 11 10 reel: REAL;
- ‘M ‘i 11 resultat val: INTEGER;
- | AU COEUR DE TURBO PASCAL 432 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 433 AU COEUR DE TURBO PASCAL
- ==================== PAGE 24 ====================
- 7 LA LIBRAIRIE 7
- he les données globales 7.2
- 12
- 13 sortie: TEXT;
- 14 nom_sortie: STRIN G[24];
- 15 ie
- 16 PROCEDURE affiche_octet hexadecimal(p_octet: INTEGER);
- 17 CONST kt_hex: ARRAY/0..15] OF CHAR= '0123456789ABCDEF' ;
- 18 BEGIN
- 19 WRITE(sortie, kt_hex[p_octet DIV 16], kt_hex[p_octet MOD 16]);
- 20 END; (* affiche_octet_hexadecimal *)
- 21
- 22 PROCEDURE affiche_entier_hexadecimal(p_entier: INTEGER);
- 23 BEGIN
- 24 affiche_octet_hexadecimal((p_entier AND $FF00) SHR 8);
- ps) affiche_octet_hexadecimal(p_entier AND $00FF);
- 26 END; (* affiche _entier_hexadecimal *)
- 21 .
- 28 PROCEDURE affiche_memoire(l_segment, L_alignement_debut,
- L_alignement_fin: INTEGER);
- 29 VAR {_ colonne: INTEGER;
- 30 | alignement, |_quantite: INTEGER;
- 31 [ octet: BYTE;
- a BEGIN
- 33 |_alignement:= |_alignement_debut AND $0007;
- 34 [alignement_debut:= |_alignement_debut AND $FFF8;
- 35 (quantite:= T_alignement_fin+ 1- |_alignement_debut;
- 36
- a? REPEAT
- 38 WRITE(sortie, '$’); affiche_entier_hexadecimal(l_segment);
- 39 WRITE(sortie, ’:$’);
- 40 affiche_entier_hexadecimal(|_alignement_debut); WRITE(sortie,’’); *
- 41
- 42 IF | alignement> 0
- 43 THEN BEGIN
- 44 WRITE(sortie, ’’: 4*l_alignement);
- 45 1 colonne:= |_alignement;
- 46 END
- 47 ELSE ! colonne:= 0;
- 48 REPEAT Acs
- 49 1 octet:= mem{[l_segment:|_alignement_debut+ |_colonne];
- 50 WRITE(sortie, ’$');
- 51 affiche_octet_hexadecimal(l_octet); WRITE(sortie, ’ ’);
- se | colonne:= T colonne+ 1;
- 53 UNTIL (L_colonne> 7) OR (l_quaniite- l_colonne<= 0);
- 54
- ph, WRITE(sortie, ’:4* (8- l_colonne),’:’);
- 56 IF | alignement> 0
- 57 THEN BEGIN
- 58 WRITE(sortie, ‘’: |_alignement);
- 59 | colonne:= |_alignement;
- 60 [ alignement:= 0;
- 61 END
- 62 ELSE | _colonne:= 0;
- AU COEUR DE TURBO PASCAL
- 434 AU COEUR DE TURBO PASCAL
- 7 LA LIBRAIRIE
- 7.2 les données globales oe
- e REPEAT
- 1 octet:= mem[I_ se t:l ali :
- pH pith if 27 _alignement_debut+ | colonne];
- 66 THEN WRITE(sortie, CHR(L octet))
- 67 ELSE WRITE(sortie,’.’); ~
- 4 se NAL toed L_colonne+ 1;
- i colonne> 7) OR (1 ite- = 0);
- 70 WRITELNOcnu: ) (l_quantite- |_colonne<= 0);
- 7 LA rnb l_quaniite- 8;
- alignement_debut:= | ali
- 4 UNTIL Leon |_alignement_debut+ 8;
- 4 END; (* affiche_memoire *)
- ped PROCEDURE affiche_donnees_turbo;
- 79 PROCEDURE affiche(p titre: string80; ille:
- 2 aw gr ie sp ring80; p_decalage, p_taille: INTEGER);
- 4 BEGIN
- WRITE(sortie, ’$’ ); affiche _entier_hex i ;
- = WRITE (sortie st uffiche_entier_hexadecimal(dseg);
- bs affiche_entier_hexadecimal(p_decalage); WRITE(sortie, ’ ’);
- 86 WRITE(sortie, p_titre);
- 4 affiche_octet_hexadecimal(p_taille);
- 89 WRITE(sortie, ’ $’);
- 90 IF p_taille> 20
- 91 THEN p _taille:= 20;
- a FOR | _indice:= 0 TO p_taille- 1 DO
- = affiche_octet_hexadecimal(mem|[dseg: p_decalage+ l_indice]);
- 95 WRITELN(sortie);
- > END; (* affiche *)
- 98 BEGIN (* affiche_donnees_turbo *
- M WRITELN('globales turbo’); {
- 101 affiche('v_attr norm ‘, $0000, 1);
- 102 affiche(’v_attr_low ?, $0001, 1).
- 103 affiche(’k_atir_reverse ', $0003, 1);
- 104 affiche('v_fenetre_x_bas’, $0004, 1);
- 105 affiche('v_fenetre_y_bas’, $0005, 1);
- 106 affiche(’v_mode_ecran ', $0006, 1);
- 107 affiche(’v_couleur _’, $0007, 1);
- 108 affiche(’v_attribut ’, $0008, 1);
- 109 affiche(’v_mode_graphiqu’, $0009, 1);
- 110 affiche('v _fen_graphxdeb , $000A, 2);
- 111 affiche('v_fen_graphxfin’, $000C, 2);
- 112 affiche(’v_fen_graphydeb ', $000E, 2);
- a affiche(’v_fen_graphyfin ’, $0010, 2);
- : re affiche('v_delai 1 ’,$0012,2);
- AU COEUR DE TURBO PASCAL 435 AU COEUR DE TURBO PASCAL
- L
- ==================== PAGE 25 ====================
- LA LIBRAIRIE
- LA LIBRAIRIE
- 72 les données globales les données globales
- 117 affiche( v_draw_1 *, $0014, 2); affiche(’v_ofs_tas ’, $018A, 2);
- 118 affiche(’v_draw_4 *, $0016, 2); affiche('v_seg tas ’,$018C, 2);
- 119 affiche(’v_draw_3 ”, $0018, 2); affiche(’v_sv_sp 2 ’, $018E, 2);
- 120 affiche('v_draw 6 ’,$001A,2); affiche('v_sv_ofs_int_0 ”, $0190, 2);
- 121 affiche('v_draw_2 ”, $001C, 2); affiche('v_sv_seg_int 0 ’, $0192, 2);
- 122 affiche(’v_draw_5 ”, $001E, 2); 180 affiche('v_car_keypressd’ , $0194, 2);
- 123 affiche('v_palette ”, $0020, 1); 15 affiche(’v_clavier ‘, $0196, 2);
- 124 1
- 125 affiche('v_delai 2 ’,$0021,2); 15 affiche(’v_tampon_ovl ’, $0198, $40);
- 126 1
- 127 affiche('v_ofs_deb_free ’, $0024, 2); 185 affiche(’v_taille_string’, $01E8, 1);
- 128 affiche(’v_seg deb free ’, $0026, 2); 186 affiche(’v_val_ent_reel ’, $01E9, 1);
- 129 affiche(’v_ofs_pt_deb_fr’, $0028, 2); 187 affiche('v_ofs string ', $01EA, 2);
- 130 affiche(’v_seg_pt_deb fr’, $002A, 2); 188 affiche('v_seg_ string ', $01EC, 2);
- 131 affiche(’v_ofs ptI , $002C, 2); 189 affiche(’v_ofs_ent_reel2’, $01EE, 2);
- 132 affiche('v_seg ptl ', $002E, 2); 190 affiche(’v_seg_ent_reel2’, $01FO, 2);
- 133 affiche('v_ofs_pointeur ’, $0030, 2); } 191 affiche('v_ofs_resu_val ’, $01F2, 2);
- | 134 affiche(’v_seg_pointeur ’, $0032, 2); 4 : 192 affiche('v_seg_resu_val ’, $01F4, 2);
- 135 affiche(’v_ofs pt3 —’, $0034, 2); À | 193 affiche('v_tamp_reëll ’, $01F6, 6);
- 136 affiche('v_seg_pt3 ”, $0036, 2); il Ê 194 affiche('v_ofs_ random ', $01FE, 2);
- 127 i 195 affiche(’v_erreur_i_o ', $01FC, 2);
- 138 affiche(’v_tamp_read_ ’, $0038, $40); À i 196 affiche('v_seg_random ’, $0200, 2);
- | 139 affiche(’v_tampon_wrk ', $00B8, $40); 1 | 197 :
- 140 M ; 198 affiche('v_taille ch des, $0202, 2);
- | 141 affiche(’v_adr_test_con ’, $0138, 2); ‘ | 199 affiche(’v_ind_ins_del ’, $0204, 2);
- | 142 affiche('v_adr_lis_con ', $013A, 2); 4 200 ' affiche(’v_qt delete ', $0206, 2);
- 143 affiche(’v_adr_ecris_con’, $013C, 2); | 201 affiche('v_ofs_chai_dest’, $0208, 2);
- | 144 affiche('v_adr_ecris_lst', $013E, 2); } 202 affiche(’v_seg_chai_dest’, $020A, 2);
- 145 affiche('v_adr_ecris_aux’, $0140, 2); | 203 affiche(’v_ofs_chai_dept’, $020C, 2);
- 146 affiche('v_adr_lis_ aux ', $0142, 2); 4 204 affiche('v_seg_chai_dept’, $020E, 2);
- i | 147 affiche(’v_adr_ecris_usr’, $0144, 2); a 205
- {| | 148 affiche(’v_adr_lis_clav ’, $0146, 2); à 206 affiche(’pt_handle _’, $0234, 2);
- i) 149 à 207 affiche(’v_sv_ds_es_fich’, $0236, 2);
- || 150 I 208 affiche(’v_reset_write_a’, $023A, 1);
- | 151 affiche(’v_handle_read ', $015C, 2); q | 209 affiche(’v_err_rd_wr fof’, $023B, 1);
- | | 152 affiche(’v_read_write ', $015E, 2); q 210 affiche(’v_tamp_lis_reel’, $023C, 6);
- || 153 affiche(’v_debut_glob_pg ’, $0160, 2); | 211
- ll 154 affiche(’v_sv_input ’, $0162, 2); 4 212 affiche(’k_table_handle ’, $0242, $10);
- | 155 affiche('v_handle_write ’, $0168, 2); 1 213 END; (* affiche _donnees_turbo *)
- 156 affiche(’v_colonne_max ’, $016A, 1); ! 214
- 157 affiche('v_ligne max ’, $016B, 1); 4 215 PROCEDURE status;
- 158 affiche('v_debut_glob_2 ’, $016C, 2); | 216 VAR /_adresse: INTEGER;
- D 159 affiche('v_sv_output ’, $016E, 2); N 217
- 160 4 218 PROCEDURE affiche_pointeur_hexadecimal(p_segment, p_alignement:
- 161 affiche(’v_test_device ’', $0174, 2); | INTEGER); i
- 162 affiche('v_turbo_cs ’, $0176, 2); } 219 BEGIN
- 163 affiche('v_turbo_ds ”, $0178, 2); {il 220 affiche _entier_hexadecimal(p_segment);
- 164 221 WRITÉ (sortie, ’:’);
- | 165 affiche(’pt_table_handle’, $017A, 2); 4 222 affiche_entier_hexadecimal(p_alignement);
- 166 affiche('v_nb fichiers ’, $017C, 2); ia | 223 END; (* affiche_pointeur_hexadecimal *)
- rf 167 affiche('v_adr_proc_err ”, $017E, 2); 1 224
- | 168 affiche(’v_num_err_exec ', $0180, 1); » 1 225 BEGIN (* status *)
- 169 affiche('v_read ”, $0181, 1); q 226 WRITE(sortie, ’cs: $’);
- 170 affiche('v_ind_tamp_read ’ , $0182, 2); , 227 affiche_entier_hexadecimal(cseg);
- 171 affiche(’v_taille_tmp_rd’, $0184, 2); 4 1
- | | 172 affiche(’v_find_error_pc’, $0188, 2); 4
- L 173 affiche('v_reg_186 ’,$0186,2); q :
- n | 174 4
- i
- |. |
- 1 | AU COEUR DE TURBO PASCAL 436 AU COEUR DE TURBO PASCA AU COEUR DE TURBO PASCAL : 437 AU COEUR DE TURBO PASCAL
- 4 , | i
- ==================== PAGE 26 ====================
- mm | 7 LA LIBRAIRIE 7 LA LIBRAIRIE 7
- | 72 les données globales 72 12 les données globales 73
- |
- | | 228 WRITE(sortie, ’:$0100, pg: $'); 282 ’s’ : BEGIN
- | 229 L'adresse:= memw[cseg:$101]; 283 WRITE('nom sortie <a:essai.txt> ? ‘);
- | 230 affiche entier_hexadecimal(l_adresse+ $0103); 284 READLN(nom_sortie);
- 231 WRITE (sortie, ’, ds: $'); | 285 CLOSE(sortie);
- 232 affiche_entier_hexadecimal(dseg); 4 286 ASSIGN(sortie, nom_sortie);
- 233 WRITE (sortie, ’, heapptr: $'); i i 287 REWRITE(sortie);
- 234 affiche_pointeur_hexadecimal(memw[SEG{(heapptr):OFS(heapptr)+ 2], i 288 END;
- 235 memw[SEG(heapptr):OFS(heapptr)]); 4 4 289 END; Ei
- | 236 WRITE(sortie, ’, ss: $’); 290 UNTIL choix= 'q’;
- 237 affiche_entier_hexadecimal(sseg); 1 291 CLOSE(sortie);
- | 238 WRITELN(sortie); 292 END. (* principal *)
- | 239 END; (* status *) q ;
- | 240 ; } Fig. 7.1 Le programme affiche_globales.
- | 241 overlay PROCEDURE procedure_overlay; qi
- 242 BEGIN \
- 243 END; (* PROCEDURE overlay *) !
- 244 j
- 245 PROCEDURE initialise; À {7.23 L’AFFICHAGE DES GLOBALES
- q 246 BEGIN |
- If 247 nom_sortie:= 'CON.’; pie
- 248 ASSIGN(sortie, nom_sortie); Voici le contenu brut de la zone des globales:
- | 249 REWRITE(sortie);
- | 250
- | 251 window(2, 2, 78, 23); | cs: $1392:$0100, pg: $2D4D, ds: $17F3, heapptr: $1844:0000, ss: $6000
- er graphwindow($11, $22, $33, $44); m
- 25 4
- 254 NEW(pointeurl): $17F3:$0000 $OF $07 $07 $70 $01 $01 $07 $00 :...p....
- n 255 NEW(pointeur2); NEW(pointeurl); NEW(pointeur1); 4 $17F3:$0008 $OF $FF $11 $00 $33 $00 $22 $00 :....3.".
- 256 DISPOSE(pointeur2); j $17F3:$0010 $44 $00 $43 $00 $00 $00 $00 $00 :D.C.....
- 557 i $17F3:$0018 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | | 258 ASSIGN(fichier, 'STOCK.DTA'); } $17F3:$0020 $00 $43 $00 $00 $08 $00 $42 $18 :.C....B.
- | 259 REWRITE(fichier); 7 $17F3:$0028 $63 $02 $F3 $17 $08 $00 $00 $00 :c.......
- | | 260 | $17F3:$0030 $24 $00 $F3 $17 $08 $00 $00 $00 :$.......
- | 261 WRITE(’reel <16.25> ?’); READLN(reel); | $17F3:$0038 $62 $3A $72 $65 $73 $75 $2E $70 :b:resu.p
- 262 i $17F3:$0040 $61 $73 $1A $00 $00 $00 $00 $00 :as......
- | 263 procedure_overlay; $17F3:$0048 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | 264 i $17F3:$0050 $00 $00 $00 $00 $00 $00 $00 $00 :........
- i 265 VAL/(’ 1.75’, reel, resultat_val); $17F3:$0058 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | 266 STR(48.50, chaine); À $17F3:$0060 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | 267 Ë $17F3:$0068 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 268 chainel:= "ABC"; chaine2:= ’ABCD’ ; } $17F3:$0070 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | 269 INSERT(chainel, chaine2, $11); ri $17F3:$0078 $00 $00 $00 $00 $00 $00 $00 $00 Parag Pir A
- 270 DELETE(chaine3, $22, $33); i $17F3:$0080 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 271 END; (* initialise *) 4 $17F3:$0088 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 272 à $17F3:$0090 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 273 BEGIN (* principal *) 1 $17F3:$0098 $00 $00 $00 $00 $00 $00 $00 $00 :........ 4
- 274 inition $17F3:$00A0 $00 $00 $00 $00 $00 $00 $00 $00 :........
- | 275 REPEAT j $17F3:$00A8 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 276 status; $17F3:$00B0 $00 $00 $00 $00 $00 $00 $00 $00 :........
- 274 WRITE('m(emoire, g(lobales, q(uitte ?’); | $17F3:$00B8 $62 $3A $72 $65 $73 $75 $2E $70 :b:resu.p
- |)" 278 READ(KBD, choix); WRITELN(sortie, choix); a $17F3:$00C0 $61 $73
- | 279 CASE choix OF 4 $17F3:$00C8 $00 $00
- 280 ’g’ : affiche_donnees_turbo; | $17F3:$00D0 $00 $00
- 281 ’m' : affiche_memoire(dseg, 0, $262); i; $17F3:$00D8 $00 $00
- | re 1 $17F3:$00E0 $00 $00
- iT | $17F3:$00E8 $00 $00
- | 4 a $17F3:$00F0 $00 $00
- À .
- | AU COEUR DE TURBO PASCAL 438 AU COEUR DE TURBO PASCAL q AU COEUR DE TURBO PASCAL 439 AU COEUR DE TURBO PASCAL
- ==================== PAGE 27 ====================
- 12
- les données globales
- LA LIBRAIRIE
- $17F3
- $17E3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3:
- :$0158
- :$0160
- $17F3
- $17F3
- $17F3:
- :$0170
- :$0178
- :$0180
- :$0188
- :$0190
- :$0198
- :$01A0
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3:
- :$01B0
- :$01B8
- :$01C0
- :$01C8
- :$01D0
- :$01D8
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3
- $17F3:
- $17F3:
- :$01F0
- :$01F8
- :$0200
- :$0208
- $17F3
- $17F3
- $17F3
- $17F3
- SLTE 33
- :$0218
- :$0220
- :$0228
- $17F3
- $17F3
- $17F3
- $17F3;
- :$0238
- :$0240
- :$0248
- $17F3
- $17F3
- $17F3
- $17F3:
- :$0258
- $17F3
- $17F3:
- :$00F8
- :$0100
- :$0108
- :$0110
- :$0118
- :$0120
- :$0128
- :$0130
- $17F3:
- $17F3:
- :$0148
- $0138
- $0140
- $0150
- $0168
- $01A8
- $O1E0
- SOIES
- $0210
- $0230
- $0250
- $0260
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $08
- $08
- $FF
- $FF
- $FF
- $02
- $FF
- $00
- $10
- $7E
- $00
- $31
- $6C
- $30
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $01
- $17
- $00
- $00
- $03
- $33
- $00
- $00
- $38
- $00
- $00
- $02
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $26
- $06
- $Cl
- $6D
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $00
- $08
- $09
- $00
- $00
- $00
- Fig. 7.2 La zones des globales
- AU COEUR DE TURBO PASCAL
- 440
- AU COEUR DE TURBO PASCAL
- LA LIBRAIRIE
- les données globales 72
- Et voici le contenu interprété:
- cs: $1392:$0100, pg: $2D4D, ds: $17F3, heapptr: $1844:0000, ss: $6000
- $17F3:$0000 v_attr_norm 01 $0F
- $17F3:$0001 v_attr_ low 01 $07
- $17F3:$0003 k_attr_reverse 01 $70
- $17F3:$0004 v_fenetre_x_bas 01 $01
- $17F3:$0005 v_fenetre_y_bas 01 $01
- $17F3:$0006 v_mode_ecran 01 $07
- $17F3:$0007 v_couleur 01 $00
- $17F3:$0008 v_attribut 01 SOF
- $17F3:$0009 v_mode_graphiqu 01 $FF
- $17F3:$000A v_fen_graphxdeb 02 $1100
- $17F3:$000C v_fen_graphxfin 02 $3300
- $17F3:$000E v_fen_graphydeb 02 $2200
- $17F3:$0010 v_fen_graphyfin 02 $4400
- $17F3:$0012 v_delai_1 02 $4300
- $17F3:$0014 v_draw_l 02 $0000
- $17F3:$0016 v_draw_4 02 $0000
- ft ce 8 v_draw_3 02 $0000
- 17F3:$001A v_draw_6 02 $0000
- $17F3:$001C v_draw_2 02 $0000
- $17F3:$001E v_draw_5 02 $0000
- $17F3:$0020 v_palette 01 $00
- $17F3:$0021 v_delai_2 02 $4300
- $17F3:$0024 v_ofs_deb_free 02 $0800
- $17F3:$0026 v_seg_deb_free 02 $4218
- $17F3:$0028 v_ofs_pt_deb_fr 02 $6302
- $17F3:$002A v_seg_pt_deb_fr 02 $F317
- $17F3:$002C v_ofs_ptl 02 $0800
- $17F3:$002E v_seg_ptl 02 $0000
- $17F3:$0030 v_ofs_pointeur 02 $2400
- $17F3:$0032 v_seg_pointeur 02 $F317
- $17F3:$0034 v_ofs_pt3 02 $0800
- $17F3:$0036 v_seg_pt3 02 $0000
- $17F3:$0038 v_tamp_read 40 $623A726573752E7061731A0000...
- $17F3:$00B8 v_tampon_wrk 40 $623A726573752E706173003000...
- $17F3:$0138 v_adr_test con 02 $0D08
- $17F3:$013A v_adr_lis_con 02 $2608
- ‘$17F3:$013C v_adr_ecris con 02 $5908
- $17F3:$013E v_adr_ecris_Ist 02 $F608
- $17F3:$0140 v_adr_ecris_aux 02 $FE08
- $17F3:$0142 v_adr_lis_aux 02 $0609
- $17F3:$0144 v_adr_ecris_usr 02 $5908
- $17F3:$0146 v_adr_lis_clav 02 $2608
- AU COEUR DE TURBO PASCAL 441 AU COEUR DE TURBO PASCAL
- ==================== PAGE 28 ====================
- 7 LA LIBRAIRIE 7
- 72 les données globales 72
- $17F3:$015C v_handle_ read 02 $FFFF
- $17F3:$015E v_read_write 02 $E11A
- $17F3:$0160 v_debut_glob_pg 02 $6202
- $17F3:$0162 . v_sv_input 02 $0000
- $17F3:$0168 v_handle_write 02 $FFFF
- $17F3:$016A v_colonne max 01 $Cl
- $17F3:$016B v_ligne_max 01 $00
- $17F3:$016C v_debut_glob_2 02 $6202
- $17F3:$016E v_sv_output 02 $0000
- $17F3:$0174 v_test_device 02 $0700
- $17F3:$0176 v_turbo_cs 02 $7B06
- $17F3:$0178 v_turbo_ds 02 $3F10
- $17F3:$017A pt_table_handle 02 $4202
- $17F3:$017C v_nb_fichiers 02 $1000
- $17F3:$017E v_adr_proc_err 02 $8110
- $17F3:$0180 v_num_err_exec 01 $00
- $17F3:$0181 v_ind_read_max 01 $7E |
- $17F3:$0182 v_ind_tamp_read 02 $4300 |
- $17F3:$0184 v_taille tmp rd 02 $4300
- $17F3:$0188 v_find_error pc 02 $0000
- $17F3:$0186 v_reg_186 02 $EE2D
- $17F3:$018A v_ofs_tas 02 $0000 {
- $17F3:$018C v_seg_tas 02 $4418 q
- $17F3:$018E v_sv_sp_2 02 $FEFF
- $17F3:$0190 v_sv_ofs_int_0 02 $4331 À
- $17F3:$0192 v_sv_seg int O0 02 $DBOO0 4
- $17F3:$0194 v_car_keypressd 02 $0000
- $17F3:$0196 v_clavier 02 $0100 j
- $17F3:$0198 v_tampon_ovl 40 $006C6F62616C732E303030000... |
- $17F3:$01E8 v_taille_string 01 $50
- $17F3:$01E9 v_val_ent_reel 01 $01 4
- $17F3:$01EA v_ofs_string 02 $B702 É
- $17F3:$01EC v_seg_string 02 $F317
- $17F3:$0IEE v_ofs_ent_reel2 02 $FBO3 ;
- $17F3:$01FO v_seg_ent_reel2 02 $F317 1
- $17F3:$01F2 v_ofs_resu_val 02 $0104 :
- $17F3:$01F4 v_seg_resu_val 02 $F317
- {
- $17F3:$01F6 v_tamp_reell 06 $860000000042 1
- $17F3:$01FE v_ofs_random 02 $0000 Î
- $17F3:$01FC v_erreur_i_o 02 $0000 q
- $17F3:$0200 v_seg_random 02 $0000 {
- $17F3:$0202 v_taille ch des 02 $5000
- $17F3:$0204 v_ind_ins_del 02 $2200 4
- $17F3:$0206 v_qt_delete 02 53300 i
- $17F3:$0208 v_ofs_chai_dest 02 $AA03
- $17F3:$020A v_seg_chai_dest 02 $F317 |
- $17F3:$020C v_ofs_chai dept 02 $F4FF |
- $17F3:$020E v_seg_chai_dept 02 $0060 4
- AU COEUR DE TURBO PASCAL 442
- AU COEUR DE TURBO PASCAL M
- LA LIBRAIRIE
- les données globales
- $17F3:$0234
- $17F3:$0236
- $17F3:$023A
- $17F3:$023B
- $17F3:$023C
- $17F3:$0242
- v_ofs_fichier
- v_seg_fichier
- v_reset_write_a
- v_err_rd_wr_fof
- v_tamp_lis_reel
- k_table_handle
- 02
- 02
- 01
- 01
- 06
- 10
- $0304
- $F317
- $01
- $00
- $850000000002
- $05000600000000000000000000...
- Fig. 7.3 Le contenu des globales .
- (7.3
- LES ROUTINES DE LA LIBRAIRIE |
- {7.3.1
- LES ROUTINES PRESENTEES
- Nous allons présenter ici toutes les routines que le code généré appelle directement. Pour chaque
- routine nous indiquerons:
- — son adresse
- — les paramètres que la routine attend en entrée. Ces paramètres sont soit des valeurs situéés dans
- des registres, soit des valeurs sur la pile. Pour la pile, nous présenterons les paramètres dans
- l’ordre dans lequel ils sont poussés sur la pile: x1, yl signifie que x1 a été poussé d’abord, et yl
- ensuite. Compte tenu de la compilation en une passe, les premiers paramètres rencontrés lors de
- la compilation sont en général les premiers poussés sur la pile. Par exemple lors de la
- compilation de:
- WINDOW(x1,
- yl, x2, y2);
- le code pousse x1, puis yl, puis x2 et met la valeur de y2 dans AX.
- — le résultat de la routine.
- { 7.3.2
- LES ENTREES. SORTIES
- Voici les routines chargées de la gestion des entrées / sorties:
- TU_DELAY
- — adresse: $01C0
- — entrée: durée en millisecondes dans AX
- — sortie: attente correspondant au paramètre
- — utilise des boucles soigneusement calibrées pour réaliser la temporisation
- AU COEUR DE TURBO
- PASCAL
- 443
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 29 ====================
- 7 LA LIBRAIRIE 7 7 LA LIBRAIRI
- 7.3 les routines de la librairie 73 73 les routines de la ne si
- TU_CLRSCR TU_WHEREY
- — adresse: $01EF — adresse: $0341
- — sortie: valeur de y dans AL, $00 dans AH
- — utilise I’interruption $10, pour purger l’écran, dimensionner la fenêtre, initialiser le mode
- ¥ — invoque l’interruption $10 du BIOS, recalcule la position relative a la fenétre, ajoute 1
- TU_DELLINE {
- — adresse: $0223 i TU_WINDOW
- — utilise l’interruption $10 du BIOS pour dérouler l’écran en effaçant la ligne 1 — adresse: $034F
- 4 - oar: la pile: x1, yl, x2. AX= y2
- 4 — met à jour les paramètres de la fenêtre (v_fenetre_x bas, v fenetre y b
- TUS S | v_ligne_max), et affiche le curseur si la ph au contient le Goh ata need ‘ato
- - sse:
- — utilise l'interruption $10 du BIOS pour dérouler l'écran en créant une nouvelle ligne |
- y TU_TEXTCOLOR
- \ — adresse: $036C
- TU_LOWVIDEO 1 - entrée: AX contient le code de la couleur
- — adresse: $0258 ; — met a jour l’attribut courant (v_attribut)
- — place dans l’attribut courant (v_attribut) la valeur de l’attribut de vidéo faible (v_artr_low) À
- TU_TEXTBACKGRO
- TU_HIGHVIDEO ‘1 — adresse: $0380
- — adresse: $0261 A — entrée: AX contient le code de la couleur
- — place dans l’attribut courant (v_attribut) la valeur de l’attribut fort (v_attr_norm) q — combine avec la couleur (v_couleur) et met à jour l’attribut courant (v attribut)
- My "
- TU_CLREOL | TU_GRAPHCOLORMODE
- — adresse: $0271 ai q — adresse: $03BF
- — utilise l’interruption $10 du BI 1 — initialise le mode graphique (v mode graphi, ilise l’i i 7
- q définir la palette, initialise la fenêtre graphique), utilise l'interruption $10 du “BIOS pour
- i
- TU_CRTINIT a
- — adresse: $028E M TU_GRAPHMODE
- — utilise l’interruption $10 du BIOS pour initialiser l'écran et la fenêtre i — adresse: $03C9
- 1 — initialise le mode graphique (v mode graph: tilise l’i i
- 1 définir la palette, initialise la fenêtre D ER OR
- TU_TEXT_MODE
- — adresse: $0295
- j TU_HIRES
- TU_CRTEXIT a ty oye
- | — initialise le mode graphique (v mode graphique), utilise l'i i
- — adresse: $0308 À définir la palette, initialise la fenêtre, inflalise y pis eT … |
- — ne fait rien
- À TU_GRAPHBACKGROUND
- TU_UPCASE q — adresse: $03E0
- — adresse: $0330 q — entrée: AX= la couleur
- — entrée: caractère dans AL, $00 dans AH \ — met à jour la palette (v_palette) et utilise l'interruption $10 du BIOS
- — sortie: caractère en majuscule dans AL
- — saute à la routine MAJUSCULE ($0A63) qui passe les lettres en majuscule \
- | TU_PALETTE
- | — adresse: $03FB
- Lee 10 ; — entrée: AX= la palette
- — adresse: 4 — met à jour la palette (v_palette) et utilise l’i i
- — sortie: valeur de x dans AL, $00 dans AH À 1 “a anne die FE
- — invoque l'interruption $10 du BIOS, recalcule la position relative à la fenêtre, ajoute 1 4
- |
- i"
- AU COEUR DE TURBO PASCAL 444 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 445 AU COEUR DE TURBO PASCAL
- ==================== PAGE 30 ====================
- 7 LA LIBRAIRIE ny 7
- 73 les routines de la librairie 7.3
- TU HIRESCOLOR
- — ‘adresse: $0426
- — entrée: AX= la couleur
- — utilise l’interruption $10 du BIOS
- TU_GRAPHWINDOW
- — adresse: $042F
- — entrée: Sur la pile: x1, yl, x2. AX= y2. À
- — met à jour les paramètres de la fenêtre graphique
- TU_PLOT
- — adresse: bat ge a
- — entrée: Sur la pile: x et y. AX= la couleur. \
- — vérifie que le Enr est Lx la fenêtre et utilise l’interruption $10 du BIOS
- TU_DRAW
- — adresse: $048A
- — entrée: Sur la pile: x1, yl, x2, y2. AX= la couleur.
- — utilise TU_PLOT pour tracer le trait
- TU_SOUND
- — adresse: $054D
- — entrée: AX= la fréquence en Hertz ;
- — émet vers les ports de sortie $42, $43 et $61, et Lit le port $61
- TU_NOSOUND
- — adresse: $0574
- — écrit et lit le port $61
- (7.3.3 LA GESTION DES POINTEURS
- Voici les routines chargées de la gestion des pointeurs:
- TU_GETMEM ‘
- — adresse: $057 ;
- — entrée: Sur la pile: le segment et le décalage du pointeur. AX= le nombre d’octets à allouer.
- TU_NEW va
- — adresse: $05A F :
- — entrée: Sur la pile: le segment du pointeur. DI= le décalage du pointeur, CX= la taille de la
- cellule pointée.
- TU_FREEMEM
- — adresse: $0672 1 ; BA
- — entrée: Sur la pile: le segment et le décalage du pointeur. AX= le nombre d’octets à libérer.
- AU COEUR DE TURBO PASCAL 446 AU COEUR DE TURBO PASCAL
- 7 LA LIBRAIRIE 7
- 73 les routines de la librairie 73
- TU_DISPOSE
- — adresse: $0677
- — entrée: Sur la pile: le segment du pointeur. DI= le décalage du pointeur, CX= la taille de la
- cellule pointée.
- TU_MEMAVAIL
- — adresse: $0795
- — sortie: AX= le nombre de paragraphes libres
- TU_MAXAVAIL
- — adresse: $07D2
- — sortie: AX= le nombre de paragraphes du plus gros espace libre d’un seul tenant
- TU_MARK
- — adresse: $07D8
- — entrée: Sur la pile: le segment du pointeur qui stockera la position actuelle du sommet du tas.
- DI= le décalage de ce pointeur.
- TU_RELEASE
- — adresse: $07EA
- — entrée: Sur la pile: le segment du pointeur qui contient la position actuelle du sommet du tas.
- DI= le décalage de ce pointeur.
- {7.34 ROUTINES DIVERSES
- Voici des routines ayant des fonctions très différentes:
- TU_PARAGRAPHS
- — adresse: $0A99
- — Chargé d’initialiser le contexte avant l'exécution d’un programme PASCAL. Se charge:
- — de vérifier que la version DOS est correcte
- — de vérifier que la mémoire disponible est suffisante, en utilisant les paramètres situés de
- $2D56 à $2D5D (taille du code, des globales et du tas)
- — d’initialiser le tas et les listes de cellules libres
- — de demander au DOS d’allouer la mémoire
- — de sauvegarder l’environnement de TURBO.COM en cas de compilation mémoire
- — d’allouer la place pour les fichiers si vous avez demandé plus de $10 fichiers
- — de mettre en place les routines de gestion de l'interruption 0 et 3
- — d'ouvrir les fichiers d’entrée et de sortie si vous avez utilisé les options G et P
- — d’initialiser l'écran
- TU_HALT
- — adresse: $0C40
- — invoqué à la fin de chaque programme. Se charge:
- — de fermer les fichiers
- — de retourner dans TURBO.COM ou de terminer le programme
- AU COEUR DE TURBO PASCAL - 447
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 31 ====================
- i 7 LA LIBRAIRIE 7
- LE les routines de la librairie 7:3
- i TU_ TAILLE CODE
- — adresse: $0C7D
- — se charge de créer dans le code des emplacements pour accueillir le code des procédures
- OVERLAY ’
- TU_APPEL_OVERLAY
- — adresse: $0CBF
- — chargé de charger une procédure OVERLAY
- TU_OVRPATH
- — adresse: $0D41
- — entrée: sur la pile, le nom du chemin d’accès à la procédure OVERLAY
- — dépile le nom et le recopie dans le tampon des noms de fichiers OVERLAY
- TU_KEYPRESSED
- — adresse: $0D55
- i) — sortie: AL= le résultat du test
- | — appelle la routine de lecture du périphérique courant (v_adr_test_con)
- | TU_GOTOXY
- | — adresse: $0D5B
- | — entrée: Sur la pile: x. AX= y.
- — décrémente x et y et appelle l'interruption $10 du BIOS
- TU_PARAMSTR
- | — adresse: $0D69
- \ — entrée: Sur la pile, le segment et le décalage de la chaîne où sera placé le paramétre. AX= le
- | numéro du paramètre à récupérer.
- — sortie: le paramètre sous forme de chaîne sur la pile (affecté à la chaîne par TU_POP_STRING) —
- TU_PARAMCOUNT
- — adresse: $0D86
- — sortie: AL= le nombre de paramètres de la ligne de commande
- | TU_STR_ENTIER
- — adresse: $0DC3
- — entrée: Sur la pile: la valeur entiére, le format, le segment de la chaîne. DI= le décalage de la «
- chaîne. CL= la taille maximale de la chaîne.
- | } TU_STR_REEL
- (1 — adresse: $0DDC
- a — entrée: Sur la pile: les 6 octets de la valeur réelle, le nombre de décimales, le nombre de
- Th caractères totaux, le segment de la chaîne. DI= le décalage de la chaîne, CL= la taille maximale
- de la chaîne. .
- AU COEUR DE TURBO PASCAL
- \f AU COEUR DE TURBO PASCAL 448
- 7 LA LIBRAIRIE 7
- 73 les routines de la librairie 73
- TU VAL_ENTIER
- _ adresse: $0E38
- — entrée: Sur la pile: la chaîne, le segment et le décalage et de l’entier, le se
- DI= le décalage du résultat. 5 pin oo ugg
- TU_VAL_REEL
- — adresse: $0E3C
- — entrée: Sur la pile: le segment et le décalage du réel, la chaîne, le segment du résultat. DI= le
- décalage du résultat.
- TU_RANDOMIZE
- - adresse: SÜECS
- — utilise l'interruption $21 du DOS, AH= $2C (heure) pour initialiser la valeur aléatoire
- (v_seg_random et v_ofs_ random)
- TU_COPIE STRUCTURE
- — adresse: $0ED3
- - entrée: Sur la pile: segment de la variable de destinataire, décalage de la variable destinataire,
- segment de la variable départ. DI= décalage de la variable départ, CX= taille de la table.
- — utilisé pour les affectations globales de tableaux et d’enregistrements
- TU_POUSSE STRUCTURE
- — adresse: $0EE2 :
- — entrée: Sur la pile: le segment de la structure. DI= décalage de la structure.
- TU_FILLCHAR
- — adresse: $0EFS
- — entrée: Sur la pile: segment de départ et décalage de départ, quantité d’octets à modifier (2
- octets). AX= octet à placer dans la zone.
- TU_MOVE
- — adresse: $0EFE
- — entrée: Sur la pile: segment départ, décalage départ, segment destination décalage destinati
- AX= nombre d’octets à déplacer. ÿ air |
- TU_INTR_DEB
- — adresse: $0F18
- - entrée: Sur la pile: segment de l’enregistrement contenant les registres. DI= décalage de
- l’enregistrement contenant les registres.
- - cette routine place dans les registres du 8088 les valeurs que vous avez placées dans
- l’enregistrement PASCAL
- TU_INTR_FIN
- — adresse: $0F40
- — cette routine place dans l'enregistrement PASCAL les valeurs qui se trouvent dans les registres
- après l’interruption
- AU COEUR DE TURBO PASCAL 449 AU COEUR DE TURBO PASCAL
- ==================== PAGE 32 ====================
- A LA LIBRAIRIE 7
- 73 les routines de la librairie 73
- TU_INDEX CHECK
- — adresse: $0F6A sb,
- — entrée: AX= rang de la cellule (indice moins indice minimal), CX= nombre de cellules (indice
- maximal plus un moins indice minimal) 4
- — invoqué au moment de chaque calcul d’indice de tableau comportant une variable, lorsque vous
- travaillez en mode R+
- TU_RANGE_CHECK
- — adresse: $0F74
- — entrée: AX= valeur à affecter, CX= borne minimale de l'intervalle, DX= borne maximale de
- l'intervalle !
- — invoqué avant chaque affectation d’une valeur à une variable de type intervalle, lorsque vous
- travaillez en mode R+
- TU_STACK_CHECK
- — adresse: $0F82
- — entrée: CX= nombre d’octets (environnement+ locales+ paramètres) utilisés par la procédure
- — invoqué avant chaque appel de procédure utilisateur pour vérifier que la pile peut accomoder
- l'appel. Peut être supprimé par l'option K-
- TU_IORESULT
- — adresse: $0FCC
- — sortie: AL= code d’erreur de l’entrée / sortie précédente, et mise à zéro de la variable système
- contenant ce code
- TU_IO_CHECK
- — adresse: $0FD3
- — vérification que le code d’erreur est nul. Dans le cas contraire, une erreur d’exécution est
- provoquée. Peut ne pas être généré lorsque vous travaillez en mode I-
- _TU_ABS_ENTIER
- — adresse: $1084
- — entrée: AX= la valeur de l’entier
- — sortie: AX= la valeur absolue de l’entier
- TU_RANDOM_ENTIER
- — adresse: $108B
- — entrée: AX= valeur maximale entière de la valeur aléatoire
- — sortie: AX= une valeur aléatoire entre 0 et la valeur maximale demandée
- AU COEUR DE TURBO PASCAL 450
- AU COEUR DE TURBO PASCAL —
- 7 LA LIBRAIRIE
- 73 les routines de la librairie 4)
- {7.3.5 LES CHAINES
- Voici les routines chargées de la gestion des chaînes:
- TU_POUSSE_STRING
- - adresse: $1182
- — entrée: Sur la pile: segment de la chaine. DI= décalage de la chaine.
- — pousse la chaîne sur la pile (l’octet de longueur au sommet)
- TU_POUSSE_K_ST
- — adresse: $119B
- — entrée: La chaîne constante se trouve dans le code juste après l’appel (son segment est toujo
- j CS, et son décalage est sur la pile à cause du CALL. Sa taille est le premier nae aprés Fassel).
- TU_POP_STRING
- — adresse: $11B1
- — entrée: Sur la pile: le segment et le décalage de la chaîne destination, la chaîne à dépiler (octet
- | de longueur au sommet). CL= taille maximale de la chaîne destination.
- — dépile la chaîne dans la variable destination, en tronquant la valeur si elle dépasse la taille de la
- variable destination
- TU_POUSSE TAB_CAR
- — adresse: $11D9
- — entrée: Sur la pile: segment du tableau de caractéres. DI= décalage d
- paige tbl calage du tableau de caractères,
- — pousse le tableau sous forme de chaîne pour permettre l'affichage
- TU_PARAM _F STRING
- | — adresse: $T1F3
- - entrée: CL= taille de la chaîne (sans l’octet de longueur)
- — utilisé lorsqu'une chaîne est un paramètre valeur d’une fonction
- TU_EGAL_STRING
- — adresse: $1230
- — entrée: Sur la pile, les deux chaînes à comparer
- — sortie: AL= le résultat de la comparaison
- TU_DIFF_STRING
- — adresse: $123C
- — entrée: Sur la pile, les deux chaînes à comparer
- — sortie: AL= le résultat de la comparaison
- TU_SUP_EGAL ST
- — adresse: $1248
- — entrée: Sur la pile, les deux chaînes à comparer
- — sortie: AL= le résultat de la comparaison
- AU COEUR DE TURBO PASCAL 451 AU COEUR DE TURBO PASCAL
- ==================== PAGE 33 ====================
- 7 LA LIBRAIRIE q
- 13 les routines de la librairie 16
- TU_INF_EGAL_ST
- — adresse: $1254
- — entrée: Sur la pile, les deux chaines 4 comparer
- — sortie: AL= le résultat,de la comparaison
- TU_SUP_STRING
- — adresse: $1260
- — entrée: Sur la pile, les deux chaînes à comparer
- — sortie: AL= le résultat de la comparaison
- TU_INF_STRING
- — adresse: $126C
- — entrée: Sur la pile, les deux chaînes à comparer
- — sortie: AL= le résultat de la comparaison
- TU_CONCAT
- — adresse: $12B3
- — entrée: Sur la pile, les deux chaînes à concaténer
- — sortie: sur la pile: la chaîne résultant de la concaténation
- TU_COPY
- — adresse: $12F8
- — entrée: Sur la pile: le segment et le décalage de la chaîne destination, l'indice de départ de la
- copie, la chaîne de départ. AX= nombre de caractères à copier.
- TU_LENGTH
- — adresse: $1341
- — entrée: sur la pile, la chaîne dont la longueur doit être mesurée
- — sortie: AL= la longueur de la chaîne
- TU_POS
- — adresse: $134E
- — entrée: sur la pile, la chaîne de départ, la chaîne recherchée
- _ sortie: AL= l'indice de la position de la chaîne recherchée dans la chaîne de départ
- TU_INSERT
- — adresse: $1392
- _ entrée: Sur la pile: la chaîne de départ, le segment et le décalage de la chaîne à insérer. CL=
- taille maximale de la chaîne destinataire, AX= indice où sera effectué l'insertion.
- TU_DELETE
- — adresse: $13EA
- _ entrée: Sur la pile: segment de la chaîne, décalage de la chaîne et indice de départ de
- l'effacement, AX= quantité d’octets à effacer.
- AU COEUR DE TURBO PASCAL 452
- AU COEUR DE TURBO PASCAL M
- 7 LA LIBRAIRIE q
- 73 les routines de la librairie 73
- TU MOV_CAR_ STR
- _ adresse: $1433
- — entrée: sur la pile, une chaîne (de taille 1)
- — sortie: AL= le caractère de la chaîne
- — utilisé pour affecter une chaîne de taille 1 à un caractère
- TU_MOV_STR_CAR
- _ adresse: $1446
- — entrée: sur la pile, une chaîne
- — sortie: AL= le caractére
- — utilisé dans les expressions du type caractére:= caractérel+ chaine;
- TU_RESU_FCT_ST
- - adresse: $145B
- — entrée: DX= taille utilisée par les paramètres, CL= taille du résultat de la fonction
- — utilisé comme conclusion des fonctions dont le résultat est de type chaîne
- {7.3.6 LES ENSEMBLES
- Voici les routines chargées de la gestion des ensembles:
- l TU_POUSSE_SET
- — adresse: $148F
- — entrée: Sur la pile: le segment de l’ensemble. DI= décalage de |’ =
- ? r F | M ge de l’ensemble, CH= octet de dé
- (soit borne_inférieure DIV 8), CL= nombre d’octets utilisés par “rat Co
- borne_supérieure DIV 8- borne_inférieure DIV 8+ 1).
- — utilisé pour les opérations arithmétiques sur les ensembles
- { TU_INITIE_SET
- — adresse: $14BF
- id ($20) octets égaux à zéro sur la pile (correspondant à l’ensemble vide de taille
- TU_AJ_EL_ SET
- - adresse: $14D1
- — entrée: Sur la pile: l’ensemble (32 octets). AX= l'élément à ajouter.
- TU_AJ_INTERV_SET
- — adresse: $14D8
- - entrée: Sur la pile: l’ensemble (32 octets), la borne inférieure de l’intervalle. AX= borne
- supérieure de l'intervalle à ajouter.
- AU COEUR DE TURBO PASCAL 453 AU COEUR DE TURBO PASCAL
- ==================== PAGE 34 ====================
- 7 LA LIBRAIRIE 7
- 7.3 les routines de la librairie 7:30
- TU_AFFECTE_SET
- — adresse: $14F7 1
- _ entrée: Sur la pile: le segment et le décalage de l’ensemble, les 32 octets à affecter. CH= octet —
- de départ (soit borne_inferieure DIV 8), CL= nombre d’octets utilisés par l’ensemble (soit
- borne_supérieure DIV 8- borne_inférieure DIV 8+ 1). il
- TU_ALIGNE_ SET a
- — adresse: $1515 À
- — entrée: Sur la pile: le segment et le décalage de l’ensemble, les 32 octets de l'ensemble. CH= ~
- octet de départ (soit borne_inférieure DIV 8), CL= nombre d’octets utilisés par l’ensemble ~
- (soit borne_supérieure DIV 8- borne_inférieure DIV 8+ 1).
- — utilisé avant l’appel d’une procédure utilisant un paramètre valeur de type ensemble
- TU_EGAL_SET
- ~ adresse: $153B
- — entrée: sur la pile deux ensembles (de 32 octets)
- — sortie: AL= le résultat de la comparaison
- TU_DIFF_SET
- — adresse: $1540
- — entrée: sur la pile deux ensembles (de 32 octets) 4
- — sortie: AL= le résultat de la comparaison f
- TU_SUP_EGAL_SE
- — adresse: $1553 4
- — entrée: sur la pile deux ensembles (de 32 octets)
- — sortie: AL= le résultat de la comparaison
- TU_INF_EGAL_SE |
- — adresse: $1557 \
- — entrée: sur la pile deux ensembles (de 32 octets) (
- — sortie: AL= le résultat de la comparaison
- TU_ADD_SET {
- — adresse: $1578 1
- — entrée: sur la pile deux ensembles (de 32 octets)
- — sortie: sur la pile le résultat de l'union des deux ensembles
- TU_SOUSTR_SET i"
- — adresse: $1586
- — entrée: sur la pile deux ensembles (de 32 octets)
- — sortie: sur la pile le résultat de la différence des deux ensembles
- TU_INTERSECT_S 1
- — adresse: $1596 a
- — entrée: sur la pile deux ensembles (de 32 octets) a
- — sortie: sur la pile le résultat de l’intersection des deux ensembles
- AU COEUR DE TURBO PASCALM
- a
- AU COEUR DE TURBO PASCAL 454
- +
- 7 LA LIBRAIRIE 7
- 13 les routines de la librairie 73
- — :
- TU_IN_SET
- _ adresse: $15A4
- = entrée: sur la pile: la valeur à tester (2 octets), l’ensemble (32 octets)
- — sortie: AL= résultat du test d’appartenance
- et deux routines de pointeurs perdues au milieu des routines d’ensembles:
- TU_EGAL_PTEUR
- — adresse: $15EF
- — entrée: AX= décalage de pointeur2, DX= segment de pointeur2, BX= décalage de pointeurl
- CX= segment de pointeur] 1
- . = sortie: AL= résultat du test
- TU_DIFF_PTEUR
- — adresse: $15FE
- — entrée: AX= décalage de pointeur2, DX= segment de pointeur2, BX= décalage de pointeurl
- CX= segment de pointeur 1 ’
- — sortie: AL= résultat du test
- {7.3.7 LES REELS
- Voici les routines chargées de la gestion des réels:
- TU_POUSSE_REEL
- — adresse: $1936
- — entrée: Sur la pile: le segment du réel. DI= décalage du réel.
- — sortie: les 6 octets du réel sur la pile (l’octet de l’exposant au sommet)
- TU_POUSSE_K_REELLE
- — adresse: $1945
- — entrée: DI= décalage du réel. Le segment est toujours CS ;
- — sortie: les 6 octets de la constante du code sont sur la pile (l’octet de l’exposant au sommet)
- TU_POP_REEL
- — adresse: $1956
- — entrée: sur la pile, le segment du réel destinataire, le décalage du réel destinataire, les 6 octets
- du réel (l'octet de l’exposant au sommet).
- — sortie: le réel destinataire contient les 6 octets auparavant sur la pile
- TU_ADD_REEL
- — adresse: $1969
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: sur la pile, les 6 octets du résultat de l’addition
- AU COEUR DE TURBO PASCAL 455 AU COEUR DE TURBO PASCAL
- ==================== PAGE 35 ====================
- 7 LA LIBRAIRIE
- KS les routines de la librairie
- TU_SUB_REEL
- — adresse: $1984
- — entrée: sur la pile les 2 réels (12 octets en tout)
- _ sortie: sur la pile, les 6 dctets du résultat de la soustraction
- TU_MULTIPLIE_REEL
- — adresse: $1993
- — entrée: sur la pile les 2 réels (12 octets en tout)
- _ sortie: sur la pile, les 6 octets du résultat de la multiplication
- TU_DIVISE_REEL
- — adresse: $19A2
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: sur la pile, les 6 octets du résultat de la division
- TU_OPPOSE_REEL
- — adresse: $19BA
- — entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, les 6 octets de l'opposé (-réel)
- TU_ABS_REEL
- — adresse: $19C9
- - entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, les 6 octets du réel positif (ABS(réel))
- TU_EGAL_REEL
- — adresse: $19D1
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- TU_DIFF_REEL
- — adresse: $19EB
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- TU_SUP_EGAL_REEL
- — adresse: $1A05
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- TU_INF_EGAL_REEL
- — ‘adresse: $1AIF
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- 7 LA LIBRAIRIE
- 73 les routines de la librairie
- TU SUP_REEL
- _ adresse: $1A39
- _ entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- TU_INF_REEL
- — adresse: $1A53
- — entrée: sur la pile les 2 réels (12 octets en tout)
- — sortie: AL= résultat de la comparaison
- TU_SQR
- — adresse: $1A6D
- — entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, le résultat de la fonction SQR (6 octets)
- TU_INT
- — adresse: $1A7D
- — entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, le résultat de la fonction INT (6 octets)
- TU_FRAC
- — adresse: $1A8A
- - entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, le résultat de la fonction FRAC (6 octets)
- TU_RANDOM_REEL
- — adresse: $1A97
- — sortie: sur la pile, le résultat de la fonction RANDOM (6 octets)
- TU_ROUND
- — adresse: $1AB9
- — entrée: sur la pile le réel (6 octets en tout)
- — sortie: AX= la valeur entière correspondant au réel tronqué
- TU_TRUNC
- — adresse: $1ABD
- - entrée: sur la pile le réel (6 octets en tout)
- — sortie: AX= la valeur entière correspondant au réel arrondi
- TU_FLOTTE_ENTIER
- — adresse: $1AF2
- — entrée: sur la pile, les 2 octets d’un entier
- — sortie: sur la pile, les 6 octets correspondant à un réel ayant la même valeur que l’entier
- Mi
- i
- a 4 |
- 4q AU COEUR DE TURBO PASCAL 456 ; AU COEUR DE TURBO PASCAL — AU COEUR DE TURBO PASCAL 457 AU COEUR DE TURBO PASCAL
- 0
- ==================== PAGE 36 ====================
- i 7 LA LIBRAIRIE 7
- LA LIBRAIRIE
- | 73 les routines de la librairie 73 7 7
- 13 les routines de la librairie 73
- | TU_FLOTTE_PRECEDENT
- | — adresse: $1AFB i
- — sur la pile: les 2 octets d’un entier, les 6 octets d’un réel ;
- — sortie: sur la pile: les 6 octets d’un réel ayant la même valeur que l’entier, les 6 octets du
- premier réel (remonté de 4 octets). Utilisé dans les opérations du type réel:= entier+ réel2;
- TU RESET_TEXT
- _ ‘adresse: $22F2
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
- taille du tampon ($80 par défaut). '
- TU_REWRITE_TEXT
- ~ adresse: $22F6
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
- taille du tampon ($80 par défaut).
- TU_SQRT
- — adresse: $1B10
- — entrée: sur la pile le réel (6 octets en tout)
- — sortie: sur la pile, le résultat de la fonction SQRT (6 octets)
- TU_APPEND TEXT
- TU_COS if — adresse: $22FA
- - adresse: $1B6E À — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
- — entrée: sur la pile le réel (6 octets en tout) à taille du tampon ($80 par défaut).
- | — sortie: sur la pile, le résultat de la fonction COS (6 octets) j
- TU_TRUNCATE_TEXT
- TU_SIN — adresse: $23D7 °
- — adresse: $1B83
- f À — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — entrée: sur la pile le réel (6 octets en tout) i
- — sortie: sur la pile, le résultat de la fonction SIN (6 octets)
- TU_FLUSH_TEXT
- | — ‘adresse: $2409
- TU_LN ;
- i 4 — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la vari ier.
- etes | P 8 g ariable fichier.
- \ — entrée: sur la pile le réel (6 octets en tout) 4
- | — sortie: sur la pile, le résultat de la fonction LN (6 octets) q | TU_CLOSE TEXT
- | | — adresse: $241D
- | — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- ! TU_EXP À
- | — adresse: $1CC6 À
- — entrée: sur la pile le réel (6 octets en tout) À TU_READ INPUT
- — sortie: sur la pile, le résultat de la fonction EXP (6 octets) p ~ adresse: $24F3
- — utilisé lorsque l'option G est en oeuvre (Get)
- TU_ARCTAN
- — adresse: $1D6F ( TU_DEB_READ_TEXT
- qt — entrée: sur la pile le réel (6 octets en tout) À — adresse: $2505
- | — sortie: sur la pile, le résultat de la fonction ARCTAN (6 octets) — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- | q — utilisé pour la lecture d’un fichier TEXT ou des fichiers prédéfinis (CON, TRM, KBD, LST,
- | q USR, AUX)
- 1 4
- |
- A
- | {7.3.8 LES FICHIERS | TU_DEB_WRITE_DEFAUT
- ; — adresse: $2522
- — utilisé l’affich i i
- | Voici les routines chargées de la gestion des fichiers: utilisé pour l'affichage du fichier de sortie par défaut
- | i TU_DEB_WRITE_TEXT
- iW TU_ASSIGN_TEXT — adresse: $2534
- ii — adresse: $229D ( | r : i — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- I — entrée: sur la pile, le segment de la variable fichier, le décalage de la variable fichier, le nom du — utilisé pour l'affichage d’un fichier TEXT ou des fichiers prédéfinis (CON, TRM, KBD, LST
- ity fichier (octet de longueur au sommet). À USR, AUX) ’ , F ;
- | i
- q AU COEUR DE TURBO PASCAL 458 AU COEUR DE TURBO PASCAL ~ | AU COEUR DE TURBO PASCAL 459 AU COEUR DE TURBO PASCAL
- ==================== PAGE 37 ====================
- : TU_READ_OCTET
- 4 LA LIBRAIRIE 7
- 73 les routines de la librairie T8
- TU_READLN
- — adresse: $2551
- — utilisé pour la lecture du return
- TU_READ_DEFAUT |
- — adresse: $2555 |
- — utilisé pour la lecture du fichier d’entrée par défaut \
- TU_READ_CAR
- — adresse: $272C
- — entrée: Sur la pile, le segment du caractère. DI= le décalage du caracière.
- — adresse: $273D
- — entrée: Sur la pile, le segment de l’octet. DI= le décalage de l’octet
- TU_READ_ENTIER
- — adresse: $2740
- — entrée: Sur la pile, le segment de l’entier. DI= le décalage de l’entier.
- TU_READ_REEL q
- — adresse: $275F 1
- — entrée: Sur la pile, le segment du réel. DI= le décalage du réel. 1
- TU_READ_ CHAINE
- - adresse: $277D ;
- — entrée: Sur la pile, le segment de la chaîne. DI= le décalage de la chaîne, CL= la taille
- maximale de la chaine. y
- TU_READ_ARRAY
- - ‘adresse: $27AA
- entrée: Sur la pile, le segment du tableau. DI= le décalage du tableau de caractères, CL= 1a M
- taille du tableau. ;
- TU_READLN_TEXT À
- — adresse: $27D1 a
- — utilisé pour lire le RETURN de fichiers de type TEXT 1
- TU_WRITE_CAR q
- — adresse: $2867
- — entrée: Sur la pile, le caractère (2 octets: le caractère et $00). AX= le format d’affichage (0 par
- défaut).
- TU_WRITE_ENTIER
- — adresse: $2883 i
- — entrée: Sur la pile, l’entier (2 octets). AX= le format d’affichage (0 par défaut). 4
- AU COEUR DE TURBO PASCAL 460 AU COEUR DE TURBO PASCAL a
- ay
- i
- 7 LA LIBRAIRIE 7
- 7.3 les routines de la librairie 74
- TU_WRITE_REEL
- — adresse: $28B8
- — entrée: Sur la pile: les 6 octets du réel (l’exposant au sommet), le nombre total d’octets à
- utiliser pour l’affichage (par défaut 18, soit $12). AX= le nombre de décimales à afficher (par
- défaut $FFFF).
- TU_WRITE_BOOLEEN
- — adresse: $28D0.
- - chs Sur la pile, le booléen (2 octets: le booléen et $00). AX= le format d’affichage (0 par
- aut).
- TU_WRITE_CHAINE
- ~ adresse: $28F0
- — entrée: AX= le format d’affichage (0 par défaut). Sur la pile, la chaîne (l’octet de taille au
- sommet)
- TU_WRITE_K STRING
- — adresse: $2927
- — entrée: la chaine littérale, qui se trouve juste aprés cet appel
- TU_WRITELN
- — adresse: $293F
- — utilisé pour exécuter WRITELN
- TU_SEEKEOLN
- — adresse: $2949
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AL= résultat du test
- TU_EOLN
- — adresse: $294E
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AL= résultat du test
- TU_SEEKEOF
- — adresse: $2953
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AL= résultat du test
- TU_EOF_TEXT
- — adresse: $2958
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AL= résultat du test
- AU COEUR DE TURBO PASCAL 461 AU COEUR DE TURBO PASCAL
- ==================== PAGE 38 ====================
- 7 LA LIBRAIRIE 7
- 22 les routines de la librairie FA
- TU_ASSIGN FILE
- — adresse: $298E
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, le nom
- du fichier (octet de longueur au sommet).
- TU_RESET
- — adresse: $2993
- — entrée: Sur la pile, le segment de la variable fichier. DI= décalage de la variable fichier, CX=
- taille de la fiche.
- TU_REWRITE
- — adresse: $2997
- — entrée: Sur la pile, le segment de la variable fichier. DI= décalage de la variable fichier, CX=
- taille de la fiche.
- TU_TRUNCATE
- — adresse: $29C2
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TU_FLUSH
- — adresse: $29D5
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TU_CLOSE
- — adresse: $29D8
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TU_DEB_RW FICHIER
- — adresse: $29EA
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TU_READ_FICHIER
- — adresse: $2A07
- — entrée: Sur la pile: le segment de la variable à lire. DI= décalage de la variable à lire.
- TU_WRITE_FICHI
- — adresse: $2A0F
- — entrée: Sur la pile: le segment de la variable à écrire. DI= décalage de la variable à écrire.
- TU_SEEK
- — adresse: $2A61
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= le
- numéro de la fiche.
- TU_LONGSEEK
- — adresse: $2A95
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, les 6
- octets du réel désignant le numéro de la fiche.
- AU COEUR DE TURBO PASCAL 462
- AU COEUR DE TURBO PASCAL
- 7 LA LIBRAIRIE 7
- 3 les routines de la librairie 73
- TU_EOF
- — adresse: $2A9A
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AL= résultat du test
- TU_FILEPOS
- — adresse: $2AB1 ©
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AX= numéro de la fiche courante
- TU_LONGFILEPOS
- — adresse: $2AC8
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: sur la pile: les 6 octets représentant le numéro de la fiche courante
- TU_FILESIZE
- — adresse: $2AD1
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: AX= nombre de fiches contenues dans le fichier
- TU_LONGFILESIZ
- — adresse: $2B0D
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- — sortie: sur la pile: les 6 octets représentant le nombre de fiches du fichier.
- TU_RESET FILE
- - adresse: $2B46
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= la
- taille du tampon (par défaut $80).
- TU_REWRITE FILE
- — adresse: $2B4D
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= la
- taille du tampon (par défaut $80).
- TU_BLOCKREAD
- — adresse: $2B54
- - entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
- segment du tampon, le décalage du tampon. AX= le nombre de blocs à lire.
- TU_BLOCKWRITE
- — adresse: $2B5C
- — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
- segment du tampon, le décalage du tampon. AX= le nombre de blocs à écrire.
- AU COEUR DE TURBO PASCAL 463 AU COEUR DE TURBO PASCAL
- ==================== PAGE 39 ====================
- i
- 7 LA LIBRAIRIE 7
- 713 les routines de la librairie F3
- TU_BLOCKREAD_RESU
- — adresse: $2B84
- — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
- segment du tampon, le décalage du tampon, le nombre de blocs à lire, le segment de la variable
- qui contiendra le nombre de blocs lus. DI= le décalage de la variable qui contiendra le nombre
- de blocs lus.
- TU_BLOCKWRITE_RESU
- — adresse: $2B8C
- — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
- segment du tampon, le décalage du tampon, le nombre de blocs à écrire, le segment de la
- variable qui contiendra le nombre de blocs écrits. DI= le décalage de la variable qui contiendra
- le nombre de blocs écrits.
- TU_ERASE
- — adresse: $2C08
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TU_RENAME
- — adresse: $2C25
- — entrée: sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
- nouveau nom (octet de longueur au sommet).
- TU_CHDIR
- — adresse: $2C56
- — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
- TU_MKDIR
- - adresse: $2C91
- — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
- TU_RMDIR
- — adresse: $2C95
- — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
- TU_GETDIR
- — adresse: $2CA6
- — entrée: Sur la pile: le numéro de la table, le segment de la chaîne. DI= décalage de la chaîne,
- CL= taille maximale de la chaîne.
- TU_EXECUTE
- — adresse: $2CED
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- TUSCHAIN | (i:
- — adresse: $2CF2
- — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
- AU COEUR DE TURBO PASCAL 464 AU COEUR DE TURBO PASCAL
- as
- 7 LA LIBRAIRIE 7
- 7.4 les tables de la librairie 7.4
- Ga
- Finalement le code de la librairie contient un certain nombre de tables:
- LES TABLES DE LA LIBRAIRIE |
- — de $0103 à $012C le copyright BORLAND avec le numéro de série
- — de $016A à $017A les paramètres de l’écran utilisé
- — de $09E9 à $0A25 les adresses des routines d’entrée / sortie (ces adresses sont recopiées dans
- les globales à l’initialisation)
- = a $1BEC, i CA2, $1D3F, $1E51, $1E81 les constantes de calculs de fonctions transcendantes
- og, sinus...
- — en $D1D4 la table des conversions décimales
- — en $2489 la table des noms des périphériques pré déclarés (CON, TRM...)
- — en $28ES et $28EA les chaînes TRUE et FALSE
- {7.5 CONCLUSION]
- Au cours de ce chapitre nous avons présenté:
- — les variables globales d’un programme TURBO PASCAL
- — les routines de la librairie directement appelées par le code compilé
- — les tables de données situées dans la librairie
- AU COEUR DE TURBO PASCAL 465
- AU COEUR DE TURBO PASCAL
- Libre
- ==================== PAGE 40 ====================
- 8 MODIFICATIONS 8
- CHAPITRE 8
- MODIFICATIONS DE TURBO.COM
- Ce chapitre va présenter:
- — des modification du module de commande de TURBO.COM
- — modification des commandes de l'éditeur
- — modification des numéros d’erreur de compilation
- A l'issue de ce chapitre:
- — vous saurez comment éviter de taper Y pour charger les messages d’erreur
- — vous pourrez reconfigurer l'éditeur plus facilement
- — vous aurez des messages d'erreurs de compilation tous distincts
- AU COEUR DE TURBO PASCAL 467
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 41 ====================
- 8 MODIFICATIONS 8
- 8.1 avertissement 8.1
- {8.1 AVERTISSEMENT |
- Nous allons vous indiquer quelles modification nous avons apportées à notre version de TURBO
- PASCAL. Ces modifications sont valables pour la version 3.02A. Elles détruiront toute autre
- version de TURBO PASCAL.
- |
- |
- |
- ;
- |
- |
- | Si vous souhaitez apporter certaines de ces modifications, il est impératif de réaliser une
- | sauvegarde de votre version actuelle, et de n’effectuer ces modifications que sur une copie.
- Nous ne sommes pas responsables des modifications que vous apporteriez à votre
- version de TURBO PASCAL.
- {8.2 MODIFICATION DU MODULE DE COMMANDE |
- Lors du chargement de TURBO PASCAL, vous devez indiquer si vous souhaitez charger les
- messages d’erreur ou non. Si le fichier n’est pas là, il n’est de toutes façon pas chargé. La question
- | vous permet donc simplement de disposer pour certains très gros textes d’un peu plus de place
- | mémoire.
- Nous préférons modifier le code de TURBO.COM pour toujours charger les messages, quitte à les
- supprimer de la disquette (ou à les renommer), si d’aventure nous ne souhaitons pas les charger.
- Nous avons par la même occasion supprimé la temporisation qui se produit lorsque vous tapez un
- | nom de fichier ne correspondant à aucun fichier disque (temporisation destinée à vous laisser voir
- | le message NEW FILE).
- | Voici le programme de modification:
- (* 008 msgyes *)
- (* 22 jul 87 ,*)
- (*$r+*)
- PROGRAM modifie_demande_messages;
- VAR choix, choix]: CHAR;
- PROCEDURE modifie_commande;
- TYPE string80= STRING/80];
- VAR |_turbo_com: FILE;
- | modification: string80;
- En
- © © © JAU B WU ND = ©
- ns ps mt
- S D —
- PROCEDURE modifie(p_adresse: INTEGER; p_modification: string80;
- p_quantite: INTEGER);
- 14 VAR !_ tampon: ARRAY/0..$FF] OF BYTE;
- AU COEUR DE TURBO PASCAL 468 AU COEUR DE TURBO PASCAL
- À 8 MODIFICATIONS 8
- | 8.2 modification du module de commande &2
- 1 15 BEGIN (* modifie *)
- 4 16 SEEK(L_turbo_ com, p_adresse SHR 8);
- 17 BLOCKREAD(! turbo _com, l_tampon, 1);
- 18
- 19 MOVE(p_modification[1], |_tampon[p_adresse AND $00FF], p_quantite);
- 20
- 21 SEEK(! turbo com, p_adresse SHR 8);
- 22 BLOCKWRITE(L_turbo_com, l_tampon, 1);
- 23 END; (* modifie *)
- (à 24
- 25 BEGIN (* modifie_commande *)
- 26 WRITE('o(k modifier turbo.com ? ‘);
- . 27 READ(KBD, choix1); WRITELN(choix!);
- { 28 IF choix] <>’o’
- 29 THEN EXIT;
- 30
- 31 ASSIGN(L_turbo_com, ’turboo.com’ );
- 32 RESET(/_turbo_com, $100);
- 4 33
- | 34 (* supprime la lecture clavier et positionne l'étiquette *)
- 35 (* remplit la chaine des modifications *)
- i 36 (* MOV [v_messages], $01 *)
- 37 1 _modification|[1]:= CHR($C6);
- 38 [_modification[2]:= CHR($06);
- | 39 l_modification{3]:= CHR($4A);
- 40 Émodification{4]:= CHR($03);
- 41 | modification[5]:= CHR($01);
- 42 (* et complete avec des NOP *)
- 43 FILLCHAR(!_modification[6], 3, $90);
- 44 modifie($2F53- $0100, !_ modification, 8);
- 45
- | 46 (* supprime la temporisation après NEW FILE *)
- 47 FILLCHAR(!_modification[1], 6, $90);
- f 48 modifie($349D- $0100, |_modification, 6);
- 49
- . a 50 CLOSE(L turbo_com);
- 1 | 51 END; (* modifie *)
- (fl Sa
- 4 53 BEGIN (* principal *)
- | 54 IF memw[cseg:$0101]+ $0103<> $2D4D
- i | 55 THEN BEGIN
- 1 | 56 WRITELN(’ cet utilitaire ne fonctionne’);
- | 57 WRITELN('qu''avec la version 3.02B de TURBO’);
- : 58 EXIT;
- | @ 59 END;
- if i 60
- |: 4 61 REPEAT
- | 62 WRITE('m/(odifier la demande message, q(uitte ?’);
- | 63 READ(KBD, choix); WRITELN(choix);
- LE 64 CASE choix OF
- |. @ 65 ‘m' : modifie_commande;
- q 66 END;
- 67 UNTIL choix= 'q’;
- 68 END. (* principal *)
- Fig. 8.1 Le programme msgyes.
- AU COEUR DE TURBO PASCAL
- AU COEUR DE TURBO PASCAL 469
- ==================== PAGE 42 ====================
- 8 MODIFICATIONS 8
- 8.3 les commandes de l'éditeur 8.3
- {3.3 LES COMMANDES DE L’EDITEUR |
- Le programme TINST livré sur la disquette TURBO PASCAL permet de modifier les commandes
- de l'éditeur. Si vous trouvez que CTRL Q évoque plus Quitter que KTRL K D, il vous suffit de
- modifier les commandes de l’éditeur.
- En fait TURBO.COM contient deux tables:
- — une table des commandes ori ginales, similaires 4 celle de WORD STAR
- — une table des commandes que vous souhaitez utiliser.
- Si vous utilisez TINST, la seconde table est modifiée, et ce sont ses codes qui seront utilisés. Si
- vous n’avez pas utilisé TINST, ou si vous ne modifiez pas certaines commandes, ce seront les
- commandes originales qui seront utilisées.
- Toutefois TINST vous demande de modifier les 45 commandes de 1’éditeur, avant de vérifier
- qu’elles sont toutes distinctes. Si ce n’est pas le cas, vous serez invité à modifier l’ensemble de 45
- touches. Et ceci jusqu’a ce que toutes les touches soient distinctes.
- Pour rendre ce travail moins pénible, nous utilisons un programme qui permet:
- — d’afficher les codes des commandes originales
- — d'afficher les codes des commandes actuelles
- — de modifier les commandes actuelles et de les placer dans TURBO.COM.
- Certes ce programme ne vous permet pas de tester les nouvelles commandes en temps réel. C’est à
- vous de placer les nouveaux codes dans le texte du programme et de le compiler. Le programme ne
- vérifie pas que toutes les commandes sont distinctes. Comme il affiche à l’écran les combinaisons
- choisies, une inspection visuelle suffit en général.
- Voici ce programme:
- O (* 004 install ry
- À (* 23 aou 87 %)
- 3 ("Sree
- 4 PROGRAM installe_editeur_turbo;
- 5 CONST k_table_modifiable= $57CE;
- 6 k_table_wordstar= $5896;
- 7 TYPE string2= STRING/2/;
- 8 string4= STRING/4];
- 9 string64= STRING/64];
- 10 VAR choix, choix]: CHAR;
- 11 nom_turbo_com: string64;
- titre_commande: ARRAY/[0..45] OF STRING/80/;
- AU COEUR DE TURBO PASCAL 470 AU COEUR DE TURBO PASCAL
- 8 MODIFICATIONS 8
- 8.3 les commandes de l'éditeur 83
- 14 PROCEDURE stop;
- 15 VAR ! caractere: CHAR;
- 16 BEGIN
- 17 READ(KBD, !_ caractere);
- 18 END; (* stop *)
- 19
- 20 (* fonctions de conversion *)
- 21
- 22 FUNCTION f octet_hexadecimal(p_octet: BYTE): string2;
- 23 CONST kt_hexadecimal: ARRAY/0..$0F] OF CHAR= '0123456789ABCDEF' ;
- 24 BEGIN
- 25 f_octet_hexadecimal:= CONCAT(kt_hexadecimal[p_octet DIV 16],
- 26 if kt_hexadecimal[p_octet MOD 16]);
- 27 END; (* f_octet_hexadecimal *)
- 28
- 29 FUNCTION f entier_hexadecimal(entier: INTEGER): string4;
- 30: BEGIN
- 31 f_entier_hexadecimal:= CONCAT(f octet_hexadecimal(HI(entier)),
- 32 f_octet_hexadecimal(LO(entier)));
- 33 END; (* f_entier_hexadecimal *)
- 34
- 35 (* visualisation et modification de la table *)
- 36
- 37 PROCEDURE initialise_titre commande;
- 38 BEGIN
- 39 FILLCHAR(titre_commande, SIZEOF(titre_ commande), 0);
- 40
- 41 titre_commande[0]:= ‘return’;
- 42 titre_commande[1]:='<-';
- 43 titre_commande[2]:= "<- alt’;
- 44 titre_commande[3]:='->’;
- 45 titre_commande[4]:= "mot <’;
- 46 titre_commande[S]:= "mot >’;
- 47 titre_commande[6]:= ligne";
- 48 titre_commande[7]:= ‘ligne dessous’;
- 49 titre_commande[8]:= "scroll up';
- 50 titre_commande[9]:= "scroll dwn’ ;
- 51 titre_commande[10]:= "page up’;
- 52 titre_commande[11]:= "page down’;
- 53 titre commande[12]:= ligne <’ ;
- 54 titre_commande[13]:= "ligne >’ ;
- 55 titre_commande[14]:= "page ";
- 56 titre_commande[15]:= ' page bas’ ;
- at titre_commande[16]:= ’ debut fichier’ ;
- 58 titre_commande[17]:= ‘fin fichier’ ;
- 59 titre_commande[18]:= ‘debut bloc’ ;
- 60 titre_commande[19]:= ‘fin bloc’ ;
- 61 titre_commande[20]:= ‘dernier curseur’;
- 62 titre_commande[21]:= ’insere remplace’;
- 63 titre_commande[22]:= 'insere ligne’ ;
- 64 titre_commande[23]:= efface ligne’ ;
- 65 titre_commande[24]:= "efface fin ligne’;
- 66 titre_commande[25]:= "efface mot <’ ;
- 67 titre_commande[26]:= ‘efface ss curs’ ;
- 68 titre_commande[27]:= ’ efface >’ ;
- 69 titre_commande[28]:= ‘efface > alt’ ;
- AU COEUR DE TURBO PASCAL 471 AU COEUR DE TURBO PASCAL
- ==================== PAGE 43 ====================
- 8 MODIFICATIONS 8
- 8.3 les commandes de l'éditeur 8.3
- 70 titre_commande[29]:= "mk debut bloc’ ;
- 71 titre_commande[30]:= ’ mk fin bloc’ ;
- 72 titre_commande[31]:= "marque mor ;
- 73 titre_commande[32]:= cache bloc’ ;
- 74 titre_commande[33]:= ’ copie bloc’ ;
- 15 titre_commande[34]:= ‘deplace bloc’ ;
- 76 titre .commande[35]:= ‘efface bloc’ ;
- TT titre_commande[36]:= ‘lit bloc’ ;
- 78 titre_commande[37]:= ’ ecris bloc’ ;
- 79 titre_commande[38]:= ‘fin’;
- 80 titre_commande[39]:= 'tab';
- 81 titre_commande[40]:= ‘auto tab’ ;
- 82 titre_commande[41]:= 'resuscite ligne’;
- 83 titre_commande[42]:= ' trouve’ ;
- 84 titre_commande[43]:= remplace’;
- 85 titre_commande[44]:= 'repete trouve’ ;
- 86 titre_commande[45]:= ' prefixe controle’ ;
- 87 END; (* initialise_titre_commande *)
- 88
- 89 PROCEDURE charge _et_affiche(p_adresse_ table: INTEGER);
- 90 (* charge la table des codes wordstar et l'affiche *)
- 91 VAR | octet: BYTE;
- 92 | indice: BYTE;
- 93 l_taille_commande: INTEGER;
- 94 l_numero_commande: INTEGER;
- 95 ! turbo_com: FILE;
- 96 | tampon: ARRAY/0..$1FF] OF BYTE;
- 97 | _indice_tampon: INTEGER;
- 98 BEGIN
- 99 CURSCR,
- 100
- 101 (* charge la table *)
- 102 ASSIGN(/_turbo_com, nom_turbo_com);
- 103 RESET(!_turbo_com, $100);
- 104 SEEK(! turbo_com, (p_adresse_table- $0100) DIV $100);
- 105 BLOCKREAD(L_turbo_com, | tampon, 2);
- 106 CLOSE(l_turbo_com);
- 107
- 108 L_indice_tampon:= p_adresse_table AND $00FF;
- A l_numero_commande:= 0;
- 1
- LI REPEAT
- 112 IF / numero _commande< 23
- 113 THEN BEGIN
- 114 GOTOXY(1, |_numero_commande+ 1);
- 115 END
- 116 ELSE GOTOXY(41, !_ numero commande+ 1- 23);
- 127 WRITE(!_numero_commande:2, "");
- Ms WRITE(titre_co def! 0_Co nde]);
- 1
- 120 | taille_commande:= l_tampon[l_indice_tampon];
- 121 IF t taille_commande<> 0
- 122) THEN BEGIN
- 123 FOR | indice:= LENGTH(titre_commande[l_numero_commande])+ 1
- 124 TO 20 DO ji
- 125 WRITE(’ ’);
- 126 FOR | indice:= 1 TO I_taille_commande DO
- 127 WRITE(f_octet_hexadecimal(l_tampon[l_indice_tampon+ Lindice]));
- AU COEUR DE TURBO PASCAL 472 AU COEUR DE TURBO PASCAL
- 8 MODIFICATIONS 8
- 8.3 les commandes de l’éditeur 8.3
- 128 FOR | indice:= |_taille_commande+ 1 TO 2 DO
- 129 WRITE(’ ’);
- 130 WRITE(’ ’);
- 131
- 132 FOR | indice:= 1 TO !_taille_commande DO
- 133 BEGIN
- 134 l octet:= | tampon|[l_indice_tampon+ |_indice];
- 135 IF / octet IN [0.31]
- 136 THEN WRITE('", CHR(I_octet+ $40),’’)
- 137 ELSE
- 138 IF / octet IN [32..127]
- 139 THEN WRITE(CHR(I_octer),’ ’)
- 140 ELSE WRITE(’. ’);
- 141 END;
- 142 | _indice_tampon:= |_indice_tampon+ |_taille_commande+ 1;
- 143 END;
- 144 |_numero_commande:= |_numero_commande+ 1;
- 145 UNTIL |_numero_commande> 45;
- 146 END; (* charge_et_affiche *)
- 147
- 148 PROCEDURE remplace_installe;
- 149 (* modifie la table *)
- 150 VAR commande: ARRAY/0..45] OF RECORD
- 151 taille_commande, octet_1, octet_2: BYTE;
- 152 END;
- 153 L_rampon_max: INTEGER;
- 154 | bloc: INTEGER;
- 155 indice: INTEGER;
- 156
- 157 PROCEDURE remplis_table_temporaire;
- 158
- 159 PROCEDURE escape(p_numero_commande, |_indice: BYTE);
- 160 BEGIN
- 161 WITH commande[p_numero_commande] DO
- 162 BEGIN
- 163 taille_commande:= 2;
- 164 octet_l:= $1B;
- 165 octet_2:= | indice;
- 166 END;
- 167 END; (* escape *)
- 168
- 169 PROCEDURE controle(p_numero_commande: BYTE; caractere: CHAR);
- 170 ‘BEGIN
- 171 WITH commande[p_numero_commande] DO
- 172 BEGIN
- 173 taille_commande:= 1;
- 174 octet_1:= ORD(caractere)- $40;
- 175 END;
- 176 END; (* controle *)
- 177
- 178 PROCEDURE inutilise(p_numero_commande: BYTE);
- 179 BEGIN
- 180 WITH commande[p_numero_commande] DO
- 181 BEGIN
- 182 taille_commande:= 1;
- 183 octet_l:= $FF;
- 184 END;
- 185 END; (* inutilise *)
- AU COEUR DE TURBO PASCAL 473
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 44 ====================
- 8 MODIFICATIONS 8
- 8.3 les commandes de l’éditeur 8.3
- 186
- 187 BEGIN (* remplis_table_temporaire *)
- 188 (* valeurs que vous pouvez modifier *)
- 189 controle(0, ‘M’ );
- 190 escape(1, $4B);
- 191 inutilise(2 7
- 192 escape(3, $4D);
- 193 escape(4, $43);
- 194 escape(S, $44);
- 195 escape(6, $48);
- 196 escape(7, $50);
- 197 inutilise(8);
- 198 inutilise(9);
- 199 escape(10, $3D);
- 200 escape(11, $3E);
- 201 escape(12, $41);
- 202 escape(13, $42);
- 203 escape(14, $3F);
- 204 escape(15, $40);
- 205 escape(16, $3B);
- 206 escape(17, $3C);
- 207 inutilise(18);
- 208 inutilise(19);
- 209 controle(20, 'G');
- 210 escape(21, $52);
- 211 inutilise(22);
- 212 inutilise(23);
- 218 inutilise(24);
- 214 inutilise(25);
- 215 escape(26, $53);
- 216 controle(27, 'H');
- 217 inutilise(28);
- 218 controle(29, ’B’);
- 219 controle(30, 'E' );
- 220 inutilise(31);
- 221 inutilise(32);
- 222 controle(33,'K’);
- 223 controle(34,’V’);
- 224 controle(35,’D’);
- 225 controle(36,’R’);
- 226 controle(37,’W’ );
- 227 controle(38, 'C’);
- 228 controle(39, ’I’);
- 229 inutilise(40);
- 230 inutilise(41);
- 231 controle(42,’F’);
- 232 controle(43, ’X’);
- 233 controle(44, 'L');
- 234 controle(45, 'P');
- + END; (* remplis_table_ temporaire *)
- 237 PROCEDURE affiche_table_temporaire;
- 238 VAR !_numero_ commande: INTEGER;
- 239 | indice: INTEGER;
- 240 BEGIN
- 241 CLRSCR;
- 242 L_numero_commande:= 0;
- 243 iit
- AU COEUR DE TURBO PASCAL 474 AU COEUR DE TURBO PASCAL
- 8 MODIFICATIONS 8
- 8.3 les commandes de l’éditeur 8.3
- 244 REPEAT
- 245 WITH commande[l_numero_commande] DO
- 246 BEGIN
- 247 IF ! numero_commande< 23
- 248 THEN BEGIN
- 249 GOTOXY (1, |_numero_commande+ 1);
- 250 END
- 251 ELSE GOTOXY(41, |_numero_commande+ 1- 23);
- 252 WRITE(l_numero_commande:2, “’);
- 253 WRITE(titre_ cc de[!_numero_co nde]);
- 254
- 255 IF taille commande<> 0
- 256 THEN BEGIN
- 257 FOR ! indice:=
- 258 LENG TH{ritre_commande[l_numero_commande])+ 1 TO 20 DO
- 259 WRITE(’ ’);
- 260
- 261 WRITE(taille_commande: 2,’ ');
- 262 WRITE(f_octet_hexadecimal(octet_1));
- 263 IF taille commande= 2
- 264 THEN WRITE(f octet_hexadecimal(octet eh" 7)
- 265 ELSE WRITE(’ *);
- 266
- 267 IF octet 1 IN [0.31]
- 268 THEN WRITE('", CHR(octer_1+ $40),’’)
- 269 ELSE
- 270 IF octet 1 IN [32..127]
- 271 THEN WRITE(CHR(octet_1),’ ’)
- 272 ELSE WRITE(’. ’);
- 273
- 274 IF taille commandée= 2
- 275 THEN
- 276 IF octet 2 IN [0..31]
- 271 THEN WRITE/('", CHR(octet_2+ $40),’’)
- 278 ELSE
- 279 IF octet 2 IN [32.127]
- 280 THEN WRITE(CHR(octet_2),’ ’)
- 281 ELSE WRITE(’. ’);
- 282
- 283 WRITELN;
- 284 END;
- 285 END;
- 286 | _numero_commande:= |_numero_commande+ 1;
- 287 UNTIL | numero commande> 45;
- 288 END; (* affiche_table_temporaire *)
- 289
- 290 PROCEDURE modifie_turbo_com;
- 291 VAR L_turbo_com: FILE;
- 292 | tampon: ARRAY/(0..$1FF] OF BYTE;
- 293 [indice_tampon: INTEGER;
- 294 l'numero_commande: INTEGER;
- 295 BEGIN
- 296 GOTOXY(1, 24);
- 297 WRITE(’0(k modifier turbo.com ?’);
- 298 READ(KBD, choix]); WRITE(choix!);
- 299 IF choix] <> 'o’
- 300 THEN EXIT;
- 301
- AU COEUR DE TURBO PASCAL 475 AU COEUR DE TURBO PASCAL
- ==================== PAGE 45 ====================
- 8 MODIFICATIONS 8
- 8.3 les commandes de l'éditeur 8.3
- 302 (* charge les blocs contenant la table *)
- 303 ASSIGN(I_turbo_com, nom_turbo_com);
- 304 RESET(/_turbo_com, $100);
- 305 SEEK(I_turbo_com, (k_table_modifiable- $0100) DIV $100);
- is BLOCKREAD(I_turbo_com, |_tampon, 2);
- 307
- 308 (* place les commandes, avec la syntaxe de TURBO.COM *)
- 309 | indice_tampon:= k_table_modifiable AND $00FF;
- a l_numero_commande:= 0;
- 11
- 312 REPEAT
- 313 WITH commande[|_numero_commande] DO
- 314 BEGIN
- 315 IF taille commande<> 0
- 316 THEN BEGIN
- 317 L_tampon{l_indice_tampon]:= taille_commande;
- 318 1 tampon|[l_indice_tampon+ 1]:= octet_1;
- 319 | indice_tampon:= |_indice_tampon+ 2;
- 320 IF taille_commande= 2
- 321 THEN BEGIN
- 322 L_tampon[l_indice_tampon]:= octet_2;
- 323 | indice_tampon:= |_indice_tampon+ 1;
- 324 END; i
- 325 END;
- 326 END; (* WITH *)
- 327 | _nuwmero_commande:= |_numero_commande+ 1;
- ie UNTIL /_numero_commande> 45;
- rl
- 330 ! tampon|[l_indice_tampon]:= 0;
- od l tampon|[l_indice_tampon+ 1]:= $FF;
- 333 (* met sur disque *)
- 334 SEEK(!_turbo_com, (k_table_modifiable- $0100) DIV $100);
- 335 BLOCKWRITE(I_turbo_com, |_tampon, 2);
- 336 CLOSE(l_turbo_com);
- 4H END; (* modifie_turbo_com *)
- 339 BEGIN (* remplace_installe *)
- 340 remplis_table_temporaire; :
- 341 affiche_table_temporaire;
- 342 modifie_turbo_com;
- y END; (* remplace_installe *)
- 44
- 345 PROCEDURE initialise;
- 346 BEGIN
- 347 nom_turbo_com:= 'turbo.com' ;
- 348 initialise_titre_commande;
- 349 CLRSCR;
- 350 END; (* initialise *)
- 351
- 352 BEGIN
- 353 initialise;
- 354 j
- AU COEUR DE TURBO PASCAL 476 AU COEUR DE TURBO PASCAL
- 8 MODIFICATIONS 8
- 83 les commandes de 1’éditeur 8.3
- 355 IF memw[cseg:$0101]+ $0103<> $2D4D
- 356 THEN BEGIN
- 357 WRITELN(’ cet utilitaire ne fonctionne’);
- 358 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
- 359 EXIT;
- 360 END;
- 361 À
- 362 REPEAT
- 363 GOTOXY(/, 24);
- 364 WRITELN(nom_turbo_com);
- 365
- 366 WRITE( o(riginal, m(odifiée, r(emplace, q(uitte ?');
- 367 READ(KBD, choix); WRITE(choix);
- 368 CASE choix OF
- 369 ’r’ : remplace_installe;
- 370 ’o' : charge_et_affiche(k_table_wordstar);
- 371 ’m’ : charge_et_affiche(k_table_modifiable);
- 372 END;
- 373 UNTIL choix="q';
- 374 END.
- Fig. 8.2 Le programme installe_editeur.
- {8.4 MODIFICATION DES OPTIONS DE COMPILATION |
- Nous préférons compiler nos programmes en mode R+ par défaut. Pour éviter d’avoir à placer cette
- option en début de chaque programme, il suffit de modifier la constante que le compilateur utilise
- pour initialiser les valeurs utilisées par défaut. Cette constante se trouve à l’adresse
- $5SA9D, et a par défaut la valeur $ED.
- Voici un programme qui installe la valeur R+ par défaut:
- O (*008 rplus *)
- 1 (* 22, jalan a)
- a
- 3, (*$r+*)
- 4 PROGRAM modifie_option_r_plus;
- 5 VAR choix, choixI: CHAR;
- 6
- 7 PROCEDURE modifie_commande;
- 8 TYPE string80= STRING/80];
- 9 VAR |_turbo_com: FILE;
- 10 | modification: string80;
- 11
- 12 PROCEDURE modifie(p_adresse: INTEGER; p_modification: string80;
- 13 p_quantite: INTEGER);
- 14 VAR | tampon: ARRAY/0..$FF] OF BYTE;
- 15 BEGIN (* modifie *)
- 16 SEEK(l_turbo_com, p_adresse SHR 8);
- 17 BLOCKREAD(I_turbo_com, |_tampon, 1);
- 18
- AU COEUR DE TURBO PASCAL
- AU COEUR DE TURBO PASCAL 477
- ==================== PAGE 46 ====================
- 8 MODIFICATIONS
- 8.4 modification des options de compilation
- M4 MOVE(p_modification[1], |_tampon[p_adresse AND $OOFF], p_quantite);
- 21 SEEK(/_turbo_com, p_adresse SHR 8);
- 22 BLOCKWRITE(I_turbo_com, L tampon, 1);
- 5 END; (* modifie *) a
- 25 BEGIN (* modifie _commande *)
- 26 WRITE('o(k modifier turbo.com ? ‘ );
- 27 READ/KBD, choix!); WRITELN(choix!);
- 28 IF choixl<> 'o’
- 29 THEN EXIT;
- 30
- 31 ASSIGN(L_turbo_com, 'turboo.com’ );
- e RESET(/_turbo_com, $100);
- 34 (* met la valeur $EF à $5A9D *)
- modifie($5A9D- $0100, CHR($EF), 1);
- 37 CLOSE(l_turbo_com);
- Pi END; (* modifie *)
- 40 BEGIN (* principal *)
- 41 IF memw[cseg:$0101]+ $0103<> $2D4D
- 42 THEN BEGIN
- 43 WRITELN(’cet utilitaire ne fonctionne’ );
- 44 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
- 45 EXIT;
- 46 END;
- 47
- 48 REPEAT
- 49 WRITE(' m(odifier I’’ option R, q(uitte ?’);
- 50 READ(KBD, choix); WRITELN(choix);
- 51 CASE choix OF
- 52 ‘m’ : modifie_commande;
- 53 END;
- 54 UNTIL choix= 'q';
- à | END. (* principal *)
- Fig. 8.3 Le programme option_r_plus.
- {8.5 MODIFICATION DES NUMEROS D'ERREUR |
- Les erreurs du compilateur ont été regroupées en catégories pour diminuer le nombre de messages
- (et donc la taille du fichier des messages d'erreur).
- Dans certaines situations, des messages distincts permettraient de mieux identifier la cause de
- l’erreur de compilation.
- Aussi avons nous modifié les numéros d’erreurs qui peuvent apparaître à plusieurs endroits, de
- façon que chaque numéro d'erreur soit unique. Les numéros qui ne se trouvent qu’en un seul
- exemplaire n’ont pas été modifiés.
- AU COEUR DE TURBO PASCAL 478
- ¥
- AU COEUR DE TURBO PASCAL
- i
- 8 MODIFICATIONS 8
- 8.5 modification des numéros d’erreur 8.5
- L’utilitaire qui suite permet donc:
- — de modifier les numéros utilisés par le compilateur
- — de récupérer dans un fichier la table comportant les numéros ainsi modifiés et les messages
- correspondants.
- Cet utilitaire ne modifie pas le fichier TURBO.MSG. En effet le module de commande n'affiche
- que les message dont le numéro n’utilise pas plus de 2 chiffres. Comme TURBO utilise 85
- numéros, nous ne pourrions pas afficher les messages des erreurs dont le code dépasserait 99. La
- modification des numéros impose donc l’utilisation d’une table imprimée de ces nouveaux
- numéros.
- Le fichier contenant les nouveaux numéros et leur message peut être modifiée en utilisant l’éditeur,
- puis imprimée.
- Voici le programme de modification:
- O (*008 erreur *)
- 1 (*23aou87 *)
- 2
- 3!) (*Sr4*)
- 4 PROGRAM modifie_codes_erreur;
- 5 VAR choix, choix]: CHAR;
- 6
- 7 PROCEDURE modifie_codes;
- 8 TYPE string80= STRING/80);
- 9. VAR L_turbo_com: FILE;
- 10 1 tampon: ARRAY/0..$FF] OF BYTE;
- 11 | bloc_courant: INTEGER;
- 12 l_a_modifie: BOOLEAN;
- 13 | code: BYTE;
- 14
- 15 l sortie: TEXT;
- 16 l nom_sortie: STRING/64];
- 17
- 18 PROCEDURE modifie(p_vieux_code: BYTE; p_adresse: INTEGER;
- 19 p_message: string80);
- 20 VAR | bloc: INTEGER;
- 21 BEGIN (* modifie *)
- 22 | bloc:= (p_adresse- $0100) SHR 8;
- 23 IF 1 bloc<> 1 bloc_courant
- 24 THEN BEGIN
- 25 IF | _a_modifie
- 26 THEN BEGIN
- 27 SEEK(I_turbo_com, |_bloc_courant);
- 28 BLOCKWRITE(l_turbo_com, l_tampon, 1);
- 29 END;
- 30 | bloc_courant:= |_bloc;
- 31 SEEK(I_turbo_com, |_bloc_courant);
- 32 BLOCKREAD(I_turbo_com, |_tampon, 1);
- 33 | a_modifie:= FALSE;
- 34 END;
- 35
- AU COEUR DE TURBO PASCAL 479 AU COEUR DE TURBO PASCAL
- ==================== PAGE 47 ====================
- 8 MODIFICATIONS 8
- 8.5 modification des numéros d’erreur 8.5
- 36 (* affichage et verification *)
- 37 WRITELN({ sortie, p_vieux_code: 3, l_ code: 4,'',p_ message);
- 38 IF | tampon[p_adresse AND $00FF]<> p_vieux_code
- 39 THEN BEGIN
- 40 WRITELN(’ erreur’ );
- 41 READLN;
- 42 END;
- 43 :
- 44 (* modifie le code *)
- 45 | tampon[p_adresse AND $00FF]:= | code;
- 46 la_modifie:= TRUE;
- 47
- 48 (* calcule le code suivant, en sautant les codes speciaux *)
- 49, l_code:= | code+ 1;
- | 50 IF | code= $80
- 51 THEN / code:= $81;
- 52 IF | code= $C9
- 53 THEN | code:= $CB;
- 54 END; (* modifie *)
- Sp
- | 56 BEGIN (* modifie_commande *)
- | 57 WRITE('o(k modifier turbo.com ? ’);
- i 58 READ(KBD, choix); WRITELN(choix/);
- 59 IF choix] <> ’o’
- 60 THEN EXIT;
- 61
- 62 WRITE(’ nom du fichier de sortie <err.pas> ?’);
- 63 READLN(l_nom_sortie);
- 64 ASSIGN(L sortie, |_nom_sortie);
- 65 REWRITE(! sortie);
- 66
- 67 ASSIGN(L turbo_com, ’turbo.com’ );
- 68 RESET(/_turbo_com, $100);
- 69
- 70 1 bloc_courant:= 0;
- 71 | a_modifie:= FALSE;
- | 72 l_code:= 100;
- ne
- 74 modifie($5C, $61D3, ‘erreur creation fichier’ );
- 75 modifie($62, $6504, ’debordement a I’’ execution. Table des intermediaires’ );
- 76 modifie($5A, $65F6, ‘erreur chargement OVERLAY’);
- | 77 modifie($62, $6695, ’debordement à I’’ execution. Globales’ );
- 78 modifie($62, $669F,, ’debordement à l’’ execution. Locales’);
- 79 modifie($62, $66AF, ’debordement à l''execution. Paramètres’ );
- 80 modifie($24, $685C, ‘attend nom de TYPE’);
- 81 modifie($62, $6893, ’débordement d’’ indice’);
- 82 modifie($62, $68B5, débordement du nombre d’’ octets du tableau’);
- 83 modifie($31, $6A97, ’ taille STRING 0’);
- | 84 modifie($1E, $6B3E, ‘attend comme borne d’’intervalle un TYPE scalaire’ );
- 85 modifie($2B, $6C22, déjà rencontré ce LABEL’);
- 86 modifie($29, $6CCO, ‘compteur du FOR pas déclaré’ );
- 87 modifie($1E, $6CDA, ‘le compteur du FOR doit etre un TYPE simple’);
- 88 modifie($2C, $6CF2,
- 89 ‘la borne inférieure du FOR n’’a pas le TYPE du compteur );
- 90 modifie($2C, $6D0A,
- 91 ‘la borne supérieure du FOR n’’a pas le TYPE du compteur’ );
- | 92 modifie($0D, $6D13,’ attend DO après le FOR’);
- 93 modifie($0E, $6E73, ’ attend le END de l'instruction CASE’ );
- i AU COEUR DE TURBO PASCAL 480 AU COEUR DE TURBO PASCAL
- 8 MODIFICATIONS 8
- 8.5 modification des numéros d’erreur 8.5
- 94 modifie($29, $6E77, ‘erreur en fin de CASE’);
- 95 modifie($2E, $6E9B, 'TYPE de l'’étiquerte du CASE<> du TYPE du sélecteur );
- 96 modifie($48, $6EB9,’GOTO hors du bloc’);
- 97 modifie($29, $6EES, ‘nom après WITH inconnu’ );
- 98 modifie($0D, $6F 38, ’DO attendu après le WITH’);
- 99 modifie($29, $708A, ‘nom du paramètre illégal’);
- 100 modifie($29, $71B6, ’ peut pas affecter à ce nom’);
- 101 modifie($2C, $722A, TYPE dans l'’expression incompatibles’);
- 102 modifie($2C, $729B, ’ types scalaires dans |’’ expression incompatibles’ );
- 103 modifie($29, $72A7, ‘peut pas affecteur à une fonction en dehors de son corps’);
- 104 modifie($29, $742F,’READ FILE ou FILE OF’);
- 105 modifie($29, $743B, 'READ d’’une variable’ );
- 106 modifie($41, $7531,’ pas WRITE d''un fichier de bloc’ );
- 107 modifie($42, $7585, ‘pas WRITE de ce TYPE de variables’);
- 108 modifie($23, $760D, ‘attend FILE OF’);
- 109 modifie($18, $77D0, 'résultat de VAL doit être réel ou entier’ );
- 110 modifie($2F, $7B10, ‘test de SET illégal’ );
- 111 modifie($2C, $7B1A, 'SETs comparés de TYPE différents’);
- 112 modifie($2F, $7B69, ’ pas addition de pointeurs’);
- 113 modifie($2F, $7BD8, ‘pour les STRING, seul + est permis’);
- 114 modifie($2F, $7BE9,’OR ou XOR que sur les entiers et les booléens’);
- 115 modifie($2F, $7C04, ’ pas de multiplication de pointeurs’);
- 116 modifie($2F, $7CS5A, '/ que entre réels’);
- 117 modifie($2F, $7C6C, multiplication, divisions que sur des entiers’);
- 118 modifie($2F, $7C8A,’NOT que sur des entiers et des booléens’ );
- 119 modifie($2C, $7D8E, ’facteurs différents 1’);
- 120 modifie($2C, $7DAS, ‘facteurs différents 2’);
- 121 modifie($2C, $7DCS, ‘facteurs différents 3’);
- 122 modifie($29, $7EAB, 'facteur illégal’);
- 123 modifie($3E, $7F0A, ‘attend facteur tableau de caractères’ );
- 124 modifie($3E, $7F16, ’ attend tableau de caractères d’’ une dimension’ );
- 125 modifie($3E, $7F 1F, ‘attend tableau de caractères d’’ indice 0..255’);
- 126 modifie($2C, $7F FE, ‘éléments de SET littéral de types différents’ );
- 127 modifie($2C, $8019, ‘borne supérieure du SET littéral de TYPE différent’);
- 128 modifie($1E, $804D, ’ne peut surtyper que des types simples’);
- 129 modifie($23, $81FC,’EOLN que de fichiers TEXT’);
- 130 modifie($3F, $8216,’ pas FILESIZE ou FILEPOS de fichiers TEXT”);
- 131 modifie($3F, $822C, ‘pas LONGFILEZIZE ou POS de fichiers TEXT’);
- 132 modifie($29, $828B, le paramètre de OFS doit être un nom’);
- 133 modifie($29, $82A3, ’le paramètre de SEG doit être un nom’);
- 134 modifie($29, $82DF, ‘le paramètre de SIZEOD doit être un nom’ );
- 135 modifie($29, $8368, ‘nom du paramètre de la fonction standard inconnu’);
- 136 modifie($15, $836C, ‘le paramètre de la fonction standard doit etre un fichier’);
- 137 modifie($2C, $8557, ‘indice du mauvais TYPE’);
- 138 modifie($2D, $856E, ’indice constant hors intervalle’ );
- 139 modifie($29, $8646, ‘nom de zone inconnu’);
- 140 modifie($29, $8772, ‘attend un nom’);
- 141 modifie($29, $88D4, ‘attend une constante’);
- 142 modifie($16, $88DF, ‘attend une constante entiére’ );
- 143 modifie($19, $8949, ‘signe + ou - que devant entier ou réel’ );
- 144 modifie($62, S8B64, ‘code dépasse 64K’);
- 145
- 146 CLOSE(!_turbo_com);
- 147 CLOSE(!_ sortie);
- 148 END, (* modifie_codes *)
- 149
- AU COEUR DE TURBO PASCAL
- 481 AU COEUR DE TURBO PASCAL
- ==================== PAGE 48 ====================
- 8 MODIFICATIONS 8
- 8.5 modification des numéros d'erreur 8.5
- 150 BEGIN (* principal *)
- 151 IF memw/[cseg:$0101]+ $0103<> $2D4D
- 152 THEN BEGIN
- 153 WRITELN(’ cet utilitaire ne fonctionne’ );
- 154 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
- 155 EXIT;
- 156 END;
- 157
- 158 REPEAT
- 159 WRITE(' m(odifier codes erreur, q(uitte ? ’);
- 160 READ(KBD, choix); WRITELN(choix); fl
- 161 CASE choix OF q
- 162 ‘m’ : modifie_codes;
- 163 END; © À
- 164 UNTIL choix= 'q'; À
- | 165 END. (* principal *) À
- Fig. 8.4 Le programme modifie codes_erreur.
- {8.6 | CONCLUSION |
- Ce chapitre a présenté des modifications du module de commande, de la table des commandes de
- l'éditeur, des options de compilation par défaut et des numéros d’erreur.
- " AU COEUR DE TURBO PASCAL 482 AU COEUR DE TURBO PASCAL
- LISTE DES PROGRAMMES
- LISTE DES PROGRAMMES
- AU COEUR DE TURBO PASCAL 483 AU COEUR DE TURBO PASCAL
- ==================== PAGE 49 ====================
- LISTE DES PROGRAMMES q
- Ce livre contient deux types de programmes:
- — des utilitaires de diagnostic et de traitement 4
- — des programmes qui nous.ont servi à analyser le fonctionnement de TURBO PASCAL.
- Le second type de programmes n’a servi qu’à notre exposé, et nous n’en referons pas la liste. Les
- utilitaires peuvent au contraire vous servir pour la programmation en TURBO PASCAL. La table
- qui suit vous permettra de les retrouver plus facilement dans le livre. Ce sont eux qui sont placés
- sur la disquette que vous pouvez vous procurer à l’Institut Pascal.
- AFFICHAGE MEMOIRE ET DISQUE À
- affichage décimal du contenu de la mémoire 45 1
- affichage hexadécimal d’un entier 50 iq
- affichage hexadécimal du contenu mémoire 52 q
- affichage binaire d’un entier 54 q
- affichage hexadécimal d’un secteur disque 55 \
- affichage du plan mémoire TURBO PASCAL 70 (|
- affichage du bloc de contrôle d’un fichier 306 à
- affichage du bloc de contrôle d’un fichier TEXT 318 a
- affichage des variables globales d’un programme 433 4
- TRAITEMENTS
- décodage d’un réel 124
- décodage d’un réel BCD 132 |
- décodage d’un réel 8087 137 4
- ouverture de fichier 405 |
- test de présence d’un fichier 407 |
- conversion majuscule de fichier 423 À
- MODIFICATION DE TURBO.COM |
- chargement automatique des messages 468 i
- reconfiguration des touches de l’éditeur 470 i
- modification de l’option R- par défaut 477 1
- modification des numéros d'erreur du compilateur 478 À
- f
- i
- |
- iy
- AU COEUR DE TURBO PASCAL 484 AU COEUR DE TURBO PASCAL à
- 14 "1
- TABLE DES MATIERES
- TABLE DES MATIERES
- AU COEUR DE TURBO PASCAL
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 50 ====================
- TABLE DES MATIERES
- TABLE DES MATIERES
- INTRODUCTION 17 4 IMPLEMENTATION DES TYPES 99
- 1.1 LES OBJECTIFS DE CE LIVRE 18 4.1 LES TYPES SIMPLES ELEMENTAIRES 100
- 1.2 LA CONFIGURATION ET LES LOGICIELS UTILISES 18 41. LE TYPE ENTIER 100
- L3 NOTATIONS 19 4.1.1.1. DEFINITION DU TYPE ENTIER 100
- 1.4 AMELIORATIONS 19 4.1.1.2 REPRESENTATION DU TYPE ENTIER 100
- 4.1.1.3. IMPLANTATION DES ENTIERS 102
- 4.1.1.4 EXAMEN MEMOIRE 103
- 4.1.1.5 RESUME 104
- 2 LES DONNEES EN 8088 21 4.1.2 LE TYPE CARACTERE 105
- 4.1.2.1. DEFINITION DU TYPE CARACTERE 105
- 2: LES UNITES EN INFORMATIQUE 22 4.1.2.2 REPRESENTATION DU TYPE CARACTERE 105
- 211 LE BIT ET LES REGROUPEMENTS DE BITS 22 4.1.2.3. : EXAMEN DE LA MEMOIRE 107
- 2.12 LES BASES DE NUMERATION 23 4.1.2.4 LES CARACTERES ET LES PERIPHERIQUES 108
- 2.13 LE QUARTET 24 4.1.2.5 RESUME 109
- 2.1.4 L’OCTET 24 4.1.3 LE TYPE BOOLEEN 110
- 285 LE MOT 25 4.1.3.1 DEFINITION DU TYPE BOOLEEN 110
- 2.1.6 LE SECTEUR, LE BLOC, LE CLUSTER 26 4.1.3.2 REPRESENTATION DU TYPE BOOLEEN 110
- 2 07 LEK 26 4.1.3.3. EXAMEN DE BOOLEENS 111
- 2.1.8 LE PARAGRAPHE 27 4.1.3.4 RESUME 13
- 2.2 LE FONCTIONNEMENT DU 8088 27 4.1.4 LE TYPE ENUMERE 113
- 2.2.1 L’ARCHITECTURE DU PC 27 4.1.4.1. DEFINITION DU TYPE ENUMERE 113
- vy he) L’ ADRESSAGE SEGMENTE DU 8088 29 4.1.4.2 REPRESENTATION DU TYPE ENUMERE 113
- 223 LE CODE, LES DONNEES ET LA PILE 35 4.1.4.3 IMPLANTATION DU TYPE ENUMERE 114
- 2.2.4 LES REGISTRES DU 8088 41 4.144 EXAMEN DES TYPES ENUMERES 114
- 225 LE REGISTRE D'ETAT 42 4.1.4.5 RESUME 116
- 2.2.6 LES INSTRUCTIONS DU 8088 42 4.1.5 LE TYPE INTERVALLE NUMERIQUE 116
- 2,3 PROGRAMMES D'EXAMEN 45 4.1.5.1 DEFINITION DU TYPE INTERVALLE 116
- 2 AFFICHAGE DU CONTENU MEMOIRE 45 4.1.5.2. REPRESENTATION DU TYPE INTERVALLE 116
- 2.3.2 LES MANIPULATIONS AU NIVEAU DU BIT EN TURBO 46 4.1.5.3. IMPLANTATION EN MEMOIRE 116
- 2:35 AFFICHAGE HEXADECIMAL 49 4.1.5.4. EXAMEN DU TYPE INTERVALLE 117
- 2.3.4 LE PROGRAMME D'AFFICHAGE STANDARD 52 4.1.5.5 RESUME 120
- 2:35 AFFICHAGE BINAIRE 54 42 LE TYPE REEL 120
- 2.3.6 LECTURE D’UN BLOC DISQUE 55 4.2.1 DEFINITION 120
- 2.4 CONCLUSION 58 4.2.2 REPRESENTATION DES REELS 121
- 2.5 BIBLIOGRAPHIE 58 4.2.3 IMPLANTATION MEMOIRE 122
- 4.2.4 EXAMEN DES REELS 123
- 4.2.5 DECODAGE D'UN REEL 124
- 4.2.6 RESUME 128
- 3 ORGANISATION MEMOIRE DE TURBO PASCAL 59 43 LE TYPE BCD 128
- 4.3.1 DEFINITION 128
- 3.1 ORGANISATION MEMOIRE DU PC 60 4.3.2 UTILITE DES REELS BCD 129
- AL LES COUCHES DU PC 60 4.3.3 REPRESENTATION DES REELS BCD 129
- 3:2 LA MEMOIRE DU PC ETEINT 60 4.3.4 IMPLANTATION MEMOIRE 130
- 3.1.3 ORGANISATION MEMOIRE DU DOS 62 43.5 EXAMEN DES REELS BCD 130
- 3.2 L'ORGANISATION MEMOIRE DE TURBO PASCAL 63 43.6 DECODAGE D'UN REEL BCD 132
- 3.3 COMPILATION D'UN PROGRAMME EN MEMOIRE 65 43.7 RESUME 134
- 3.4 L'AFFICHAGE DU PLAN MEMOIRE 69 44 LE TYPE REEL 8087 134
- 3.5 ORGANISATION D'UN PROGRAMME .COM 76 a 4.4.1 DEFINITION 134
- 3.6 COMPILATION D'UN PROGRAMME AVEC INCLUDE 79 We 442 UTILITE DES REELS 8087 136
- 3.7 ORGANISATION D'UN PROGRAMME AVEC OVERLAY 83 à 443 REPRESENTATION DES REELS 8087 136
- 3.8 ORGANISATION D’UN PROGRAMME .CHN 87 {| 4.44 IMPLANTATION MEMOIRE 138
- 3.9 ORGANISATION D'UN PROGRAMME AVEC EXTERNAL 93 1 4.4.5 EXAMEN DES REELS 8087 138
- 3.A ORGANISATION D'UN PROGRAMME AVEC INLINE 94 1 4.4.6 DECODAGE D'UN REEL 8087 139
- 3.B LA CAPACITE MEMOIRE 96 ri 4.4.7 RESUME 142
- ae LE MENU OPTION DE TURBO 96 1
- 3.D CONCLUSION 97
- i AU COEUR DE TURBO PASCAL 486 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 487 AU COEUR DE TURBO PASCAL
- ==================== PAGE 51 ====================
- TABLE DES MATIERES il TABLE DES MATIERES
- 4.5 LE TYPE STRUCTURE TABLEAU 142 q 3 ENTIERS, CARACTERES, BOOLEENS, ENUMERES, REELS 211
- 4.5.1 DEFINITION 142 ; 513.1 LES ENTIERS 211
- 4152 IMPLEMENTATION DES TABLEAUX 142 q 5.3.1.1 = ARITHMETIQUE ENTIERE 211
- 4.5.3 IMPLANTATION DES TABLEAUX EN MEMOIRE 144 5.3.1.2. COMPARAISON D’ENTIERS 214
- 4.5.4 EXAMEN D’UN TABLEAU 145 i S31 1,3 AND, OR, XOR, SHR et SHL 216
- | 4.5.5 LES TABLEAUX COMPACTES 147 À SS: lad PROCEDURES ET FONCTIONS STANDARD 216
- | 4.5.6 LES TABLEAUX DE CARACTERES 149 a AA LS AFFECTATION ET EXPRESSION D’INTERVALLES 216
- | 4.5.7 LES CHAINES DE CARACTERES 150 4 5.3.1.6 RESUME 223
- 458 RESUME 154 if 5:3:2 AFFECTATION ET EXPRESSIONS REELLES 223
- 4.6 LES ENREGISTREMENTS 154 ql 553241 AFFECTATION D’UN REEL 223
- 4.6.1 DEFINITION 154 à 53:2:2 ARITHMETIQUE REELLE 224
- 4.6.2 IMPLEMENTATION DES ENREGISTREMENTS 154 | 5:3:2.3 COMPARAISON DE REELS 226
- | 4.6.3 IMPLANTATION MEMOIRE DES ENREGISTREMENTS 155 ! 5.3.2.4 LES CONSTANTES ET VALEURS LITTERALES REELLES 227
- | 4.6.4 LES ENREGISTREMENTS VARIANTS 157 it 53.2.5 LES PROCEDURES STANDARD 229
- 4.6.4.1 DEFINITION 157 4 5,3:2:6 READ ET WRITE DE REELS 230
- 4.6.4.2 EXEMPLE D’ENREGISTREMENT VARIANT 158 | SA: LES REELS ET LES ENTIERS 232
- 4.6.4.3 IMPLEMENTATION DES ENREGISTREMENTS VARIANTS 161 1 5.3.2.8 RESUME 235
- 4.6.4.4 IMPLEMENTATION DES ENREGISTREMENTS VARIANTS LIBRES 164 4 6:35 LE TYPE ENUMERE 235
- 4.6.4.5 RISQUE DES ENREGISTREMENTS VARIANTS 166 | 5.3.4 LE TYPE BOOLEEN 237
- 4.6.5 RESUME 168 4 5.3.4.1 AFFECTATION DE BOOLEENS 237
- i 47 LES ENSEMBLES 168 1 5.3.4.2 ARITHMETIQUE BOOLEENNE 239
- 4m DEFINITION 168 | 5.3.4.3 AFFICHAGE DE BOOLEENS 240
- | 4.7.2 IMPLEMENTATION DES ENSEMBLES NUMERIQUES 168 i 5.344 RESUME 241
- 4.7.3 IMPLANTATION EN MEMOIRE DES ENSEMBLES 170 il 335 LES CARACTERES 242
- | 4.7.4 EXAMEN MEMOIRE DES ENSEMBLES 170 g 5.3.5.1 AFFECTATION DE CARACTERES 242
- 4.7.5 IMPLEMENTATION D’ENSEMBLES NON NUMERIQUES 174 4 513:5,2 LECTURE ET ECRITURE DE CARACTERES 243
- 4.7.6 RESUME 176 \ 5.3.6 RESUME SUR LES TYPES SIMPLES 245
- 4.8 LE TYPE POINTEUR 176 iq 5.4 LES TYPES STRUCTURES 245
- 4.8.1 DEFINITION 176 1 5.4.1 GENERALITES 245
- 4.8.2 LE MECANISME D’ALLOCATION 177 q 5.4.2 LES TABLEAUX 246
- | 4.8.3 IMPLEMENTATION DES POINTEURS 185 q 5.4.2.1 TRAITEMENT DES INDICES CONSTANTS 246
- 4.8.4 IMPLANTATION MEMOIRE DU TYPE POINTEUR 186 i 5.4.2.2 AFFECTATION A UNE CELLULE 248
- | 4.8.5 VISUALISATION DE LA VALEUR D'UN POINTEUR 186 i 5.4.2.3. OPTIMISATION DU CALCUL D’ INDICE 250
- | 4.8.6 EXAMEN DES POINTEURS 186 1 5.4.2.4 ACCES A UNE CELLULE DANS UNE EXPRESSION 252
- 4.8.7 LES POINTEURS D’ENREGISTREMENTS VARIANTS 188 4 5.4.2.5 | TABLEAU A DEUX DIMENSIONS 253
- 4.8.8 RESUME 189 ï 5.4.2.6 LES OPERATIONS GLOBALES SUR LES TABLEAUX 255
- 4.9 FORMAT DES FICHIERS SUR DISQUETTE 190 4 5.4.2.7 RESUME SUR LES TABLEAUX 257
- 4.9.1 INTRODUCTION 190 il 5.4.3 LE TYPE STRING 257
- 4.9.2 LES FICHIERS DE CODE 190 Wy 5.4.3.1 PARTICULARITES DU TYPE STRING 257
- 4.9.3 LES FICHIERS DE DONNEES 191 i, 5.4.3.2 AFFECTATION DE CHAINE 258
- 4.9.4 LES FICHIERS DE BLOCS 193 5.4.3.3 COMPARAISON DE CHAINES 259
- 4.9.5 LES FICHIERS DE TEXTE 193 5.4.3.4 LECTURE ET ECRITURE DE CHAINES 261
- | 4.A CONCLUSION 196 5.4.3.5. PROCEDURES ET FONCTIONS STRING STANDARD 263
- | 4.B BIBLIOGRAPHIE 197 5.4.3.6 RESUME 265
- | 4 5.4.3.7 ASSIMILATION DES CARACTERES AUX CHAINES 265
- q 5.4.3.8 LES TABLEAUX DE CARACTERES 267
- q M 5.4.4 LES ENREGISTREMENTS 270
- . 5 LE CODE COMPILE 199 L 5.44.1 AFFECTATION ET EXPRESSION D’ENREGISTREMENTS 270
- nl. a 5.4.4.2. STRUCTURES DE STRUCTURES 271
- it 5.1 L’ANALYSE D’UN PROGRAMME COMPILE 200 5.443 L’INSTRUCTION WITH 273
- SA 1 L’ANALYSE DU CODE 200 q 5.4.4.4. RESUME 076
- 54112 L’ANALYSE D'UN PROGRAMME SIMPLE 200 5.4.5 LES ENSEMBLES 276
- | $1113 LA STRATEGIE DE COMPILATION 202 5.4.5.1. AFFECTATION D'UN ENSEMBLE 276
- | $2 LES PHASES DE COMPILATION 205 i 5.4.5.2. ARITHMETIQUE SUR LES ENSEMBLES 278
- sai LES ELEMENTS D'UN PROGRAMME 205 Af 5.4.5.3. LES TESTS SUR LES ENSEMBLES 280
- $:2.2 LES DEFINITIONS DE LABELS 206 (0 5.4.5.4 RESUME 282
- 512.3 LES DEFINITIONS DE TYPES 206 jh
- 5.2.4 LES DEFINITIONS DE CONSTANTES SIMPLES 207 |
- 512.5 LES VARIABLES 209 a
- 512.6 LES INSTRUCTION PASCAL 211 a
- | AU COEUR DE TURBO PASCAL 488 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 489 AU COEUR DE TURBO PASCAL
- ==================== PAGE 52 ====================
- TABLE DES MATIERES
- TABLE DES MATIERES
- 5.4.6 LES POINTEURS 282 6 LES OPTIONS DE COMPILATION 387
- 5.4.6.1 AFFECTATION DE POINTEURS 282
- 5.4.6.2 LES PROCEDURES DE TRAITEMENT DE POINTEURS 284 6.1 LES OPTIONS DE COMPILATION 388
- 5.4.6.3 AFFECTATION A LA VARIABLE POINTEE 286 6.1.1 DEFINITION 388
- 5.4.6.4 LES POINTEURS DE TABLEAUX: 288 612 SYNTAXE 388
- 5.4.6.5 POINTEURS ET ENREGISTREMENTS 289 613 EFFET 389
- 5.4.6.6 LES POINTEURS ET WITH 292 6.1.4 LA LISTE DES OPTIONS 389
- 5.4.6.7 RESUME 294 6.2 LES FICHIERS INCLUS: L'OPTION I 390
- 5:5 READ ET WRITE 294 6.2.1 DEFINITION 390
- 5.5.1 INTRODUCTION 294 6.2.2 MOTIVATION 390
- 5.5.2 WRITE(OUTPUT) ET READ(INPUT) 294 6.2.3 FONCTIONNEMENT 391
- . | 5.5.2.1 WRITE VERS OUTPUT 294 6.2.4 UTILISATION 392
- 5.5.2.2 WRITELN 297 6.3 LA GESTION DES ERREURS: R, I, K, V 394
- | | 5.5.2.3 FORMATAGE DE L’AFFICHAGE 298 gi LA GESTION DES ERREURS 394
- | 5.524 READ DE INPUT 300 63.2 LES OPTIONS R+ R- 396
- i} 5.5.2.5 READLN 302 6.3.2.1 DEFINITION DE L’OPTION R 396
- | 5.5.3 LES FICHIERS SUR DISQUE 303 6.3.2.2 MOTIVATION 396
- 11 5.53.1 TRAITEMENT D'UN FICHIER DE FICHES 303 | 6.3.2.3. FONCTIONNEMENT 397
- if 5.5.3.2 LE BLOC DE CONTROLE D'UN FICHIER 306 1 6324 UTILISATION 401
- i] 5.5.3.3. LES AUTRES PROCEDURES STANDARD 307 6.33 LES OPTIONS I+ I- 401
- | 5.5.4 LES FICHIERS DE BLOCS 310 i 633.1 DEFINITION DE L’OPTION I 401
- | 5.5.4.1 TRAITEMENT D'UN FICHIER DE BLOCS 310 Hi 63,3 2 MOTIVATION 402
- | | 6:5.4.2 LES AUTRES PROCEDURES STANDARD 312 6.3.3.3 FONCTIONNEMENT 402
- | ve A ho] LES FICHIERS DE TYPE TEXT 312 6.3.3.4 UTILISATION 405
- 5.5.5.1. TRAITEMENT D'UN FICHIER DE TYPE TEXT 312 634 LES OPTIONS K+ K- 407
- 55.2 LES PERIPHERIQUES COMME FICHIERS TEXT 314 6.3.4.1 DEFINITION DE L’OPTION K 407
- 5.5.5.3. LE BLOC DE CONTROLE DES FICHIERS TEXT 318 6342 MOTIVATION 407
- 5.5.6 RESUME 323 6.3.4.3. FONCTIONNEMENT 408
- 5.6 LES INSTRUCTIONS DE CONTROLE 324 6.3.4.4 UTILISATION 409
- 5.6.1 IF 324 6.3.5 L'OPTION V 409
- 5.6.2 CASE 326 6.3.5.1 DEFINITION 409
- 5.6.3 REPEAT 329 6.3.5.2 MOTIVATION 410
- 5.6.4 WHILE 331 6.3.5.3. FONCTIONNEMENT 410
- 5.6.5 FOR 333 6.4 LE CLAVIER: B, D, C, U 411
- 5.6.6 EXIT 337 6.4.1 LES OPTIONS B+ B- 411
- 5.6.7 L’ INSTRUCTION GOTO 338 6.4.1.1 DEFINITION DE L’OPTION B 411
- 7 LES APPELS DE PROCEDURES 341 6.4.1.2 MOTIVATION 412
- &:7.1 UN APPEL DE ROUTINE 8088 341 6.4.1.3 FONCTIONNEMENT 413
- 5.7.2 APPEL DE PROCEDURE SIMPLE 345 6414 UTILISATION 415
- 7.3 UNE PROCEDURE AVEC DES VARIABLES LOCALES 349 6.4.2 LES OPTIONS D+ ET D- 415
- 5.7.4 UNE CHAINE D'APPELS 353 6.4.2.1 DEFINITION 415
- 575 APPELS EMBOITES 357 6.4.2.2 MOTIVATION 416
- 5.7.6 LES PARAMETRES VALEUR ET VARIABLE 364 6.4.2.3. FONCTIONNEMENT 416
- 57.7 LES APPELS DE FONCTIONS 371 6.4.2.4 UTILISATION 417
- 5.8 LES CONSTANTES TYPEES 376 6.43 LES OPTIONS C+ C- 417
- 5.8.1 DEFINITION DES CONSTANTES TYPEES 376 6.4.3.1. DEFINITION 417
- 5.8.2 LES CONSTANTES TYPEES SIMPLES 377 À 6.4.3.2. MOTIVATION 417
- 5.8.3 LES CONSTANTES TYPEES COMPLEXES 379 i 6.4.3.3 FONCTIONNEMENT 417
- 5.8.4 RESUME 381 ) 643.4 UTILISATION 417
- 5.9 LES VARIABLES ABSOLUES 382 i 6.4.4 LES OPTIONS U+ ET U- 417
- 5.9.1 DEFINITION DES VARIABLES ABSOLUES 382 q 6441 DEFINITION 417
- 5.9.2 ACCES AUX VARIABLES ABSOLUES 382 1 6442 MOTIVATION 417
- | 5.9.3 RESUME 384 6.443 FONCTIONNEMENT 417
- if 5.A SYNTHESE 384 1 6.444 UTILISATION 421
- 5.B CONCLUSION 385 | 6.5 LES FICHIERS: F, G, P 422
- | q 6.5.1 L’OPTION F 422
- ; i 6.5.1.1 DEFINITION DE L’OPTION F 422
- i 6.5.1.2 MOTIVATION 422
- i 6.5.1.3. FONCTIONNEMENT 422
- i]
- AU COEUR DE TURBO PASCAL 490 AU COEUR DE TURBO PASCAL
- | i AU COEUR DE TURBO PASCAL 491 AU COEUR DE TURBO PASCAL
- | 1
- ==================== PAGE 53 ====================
- TABLE DES MATIERES 1 “ INDEX
- 652 LES OPTIONS GETP 423
- 6521 DEFINITION 423
- 6522 MOTIVATION 433
- 6523 UTILISATION °. 423
- 66 CONCLUSION 424
- 7 LES GLOBALES ET LA LIBRAIRIE 425
- 7.1 LA LIBRAIRIE ET LES GLOBALES 426
- 72 LES DONNEES GLOBALES 46
- 721 LALISTE DES DONNEES GLOBALES 426
- 722 LE PROGRAMME D'AFFICHAGE DES GLOBALES 433
- 723 L'AFFICHAGE DES GLOBALES 439
- 73 LES ROUTINES DE LA LIBRAIRIE 441 0
- 73.1 LES ROUTINES PRESENTEES 441 INDEX
- j 732 LES ENTREES SORTIES 441
- | 733 LAGESTION DES POINTEURS 446
- | 734 ROUTINES DIVERSES 447
- | 73.5 LES CHAINES 451
- (1 7136 LES ENSEMBLES 453
- 137 LES REELS 455
- i 738 LES FICHIERS 458
- 1 74 LES TABLES DE LA LIBRAIRIE 465
- 75 CONCLUSION 465
- |
- og 8 MODIFICATIONS DE TURBO.COM 467
- i 81 AVERTISSEMENT 468
- . 82 MODIFICATION DU MODULE DE COMMANDE 468
- | 83 LES COMMANDES DE L'EDITEUR 470
- 84 MODIFICATION DES OPTIONS DE COMPILATION 477
- 85 MODIFICATION DES NUMEROS D'ERREUR 478
- | 8.6 CONCLUSION 482
- 0 PASCAL
- à. AU COEUR DE TURBO PASCAL 493 AU COEUR DE TURBO PAS
- Hl AU COEUR DE TURBO PASCAL 492 AU COEUR DE TURBO PASCAL i
- ==================== PAGE 54 ====================
- INDEX INDEX
- # - caractères 109 CHN - compilation 87
- A - caractères 109 CHR 109
- CLOSE - compilation 303, 310, 312
- code - structure globale 201
- code ASCII 105
- i COM - compilation 78
- ABS - compilation 216 COM - format 190
- ABS - compilation réels 229 COMMAND.COM 63
- absolues - variables 382 compactage - tableaux 147
- ABSOLUTE 180 compilation - absolute 382
- absolute - compilation 382 compilation - appel de procédure 341
- adresse - paramètres 364 compilation - ASSIGN 303, 310, 312
- affichage - pointeurs 186 compilation - AUX 314
- affichage disque 55 compilation - BLOCKREAD 310
- affichage hexadécimal 449 compilation - BLOCKWRITE 310
- affichage mémoire 449 compilation - booléens 237
- affichage plan mémoire 69 compilation - caractères 242
- allocation - compilation 209 compilation - CASE 326
- AND 47 compilation - CHN 87
- AND - compilation 216 compilation - CLOSE 303, 310, 312
- appel de procédure - compilation 341 compilation - CON 314
- appels emboîtés 357 compilation - CONST 207
- ASCII 105 compilation - constantes 376
- ASSIGN - compilation 303, 310, 312 compilation - enregistrements 270
- AUX - compilation 314 compilation - ensembles 276
- compilation - entiers 211
- compilation - énumérés 235
- compilation - EOF 314
- compilation - EOLN 314
- compilation - EXIT 337
- B - option Buffer 411 compilation - EXTERNAL 93
- BCD - réel 128 compilation - fichiers 294
- BIOS 60 compilation - FILE 310
- bit - traitement de 47 compilation - FILE OF 303
- bloc de contrôle - TEXT 318 compilation - fonction 371
- bloc de contrôle fichier 306 compilation - FOR 333
- BLOCKREAD 55 compilation - GOTO 338
- BLOCKREAD - compilation 310 compilation - IF 324
- BLOCKWRITE - compilation 310 compilation - include 79
- BOOLEAN - implémentation 110 compilation - INLINE 94
- booléens - compilation 237 compilation - INPUT 294
- BYTE 117 compilation - intervalle 219
- compilation - KBD 314
- compilation - LABEL 206
- compilation - littéral 208
- compilation - LST 314
- compilation - MEMAVAIL 284
- C - option Control 417 compilation - NIL 282
- caractère - implémentation 105 compilation - options de 387
- caractères - compilation 242 compilation - overlay 83
- caractères - tableaux 149 compilation - OUTPUT 294
- caractères et STRING 265 compilation - paramètres 364
- CASE - compilation 326 compilation - pointeurs 282
- CHAR - implémentation 105 compilation - PTR 284
- chaînage de programmes 87 compilation - READ 294, 303, 312
- chaîne - compilation 261 compilation - READLN 302
- chaîne d'appel de procédures 353 compilation - REPEAT 239
- chaînes - implémentation 150
- chaînes et caractères 265
- AU COEUR DE TURBO PASCAL 494 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 495 AU COEUR DE TURBO PASCAL
- ==================== PAGE 55 ====================
- INDEX
- INDEX
- compilation - REWRITE 303, 310, 312
- compilation - réels 223
- compilation - SET 276
- compilation - STRING 257
- compilation - tableaux 245
- compilation - TEXT 312
- compilation - TRM 314
- compilation - TYPE 206
- compilation - USR 314
- compilation - VAR 209
- compilation - WITH 273
- compilation - WHILE 331
- compilation - WRITE 294, 297, 303, 312
- compilation - WRITELN 297
- compilation mémoire 65
- compilation sur disque 78
- complément à 2 100
- CON - compilation 314
- CONCAT - STRING 263
- CONFIG.SYS 63
- configuration - touches éditeur 470
- CONST - compilation 207
- constante typée - structurée 379
- constantes typées - compilation 376
- coprocesseur 8087 135
- COS - compilation réels 229
- CSEG 69
- D - option Device 415
- D option 423
- DELETE - STRING 263
- disque - compilation sur 78
- DIV - compilation 211
- DOS 60, 62
- DSEG 69
- éditeur - installation 470
- emboîtés - appels 357
- enregistrement variant 157
- enregistrements - compilation 270
- enregistrements - implémentation 154
- enregistrements et pointeurs 289
- ensemble - implémentation 168
- ensembles - compilation 276
- entier - formatage WRITE 298
- entier - implémentation 100
- entiers - compilation 211
- entiers et réels 232
- énuméré - compilation 235
- EOF - compilation 314
- EOLN - compilation 314
- erreurs - gestion 394
- erreurs de compilation 478
- EXIT - FOR 339
- EXIT - compilation 337
- EXTERNAL - compilation 93
- F - option Files 422
- FCB 306
- FCB - TEXT 318
- FIB 306
- FIB - TEXT 318
- fichier - TEXT 193
- fichier - bloc de contrôle 306
- fichier .COM 190
- fichiers - compilation 294
- fichiers - format 190
- fichiers de bloc - format 193
- FILE - compilation 310
- FILE - format 193
- FILE OF - format 191
- FILE OF - compilation 303
- FILES 63
- FILLCHAR 69
- flottaisons - entiers 232
- fonction - compilation 371
- FOR - compilation 333
- FOR - EXIT 339
- FOR - GOTO 339
- format - TEXT 193
- format FILE 193
- format FILE OF 191
- formatage numérique - compilation 298
- G - option Get 423
- GETMEM 180
- globale - opération tableaux 255
- globales 426
- GOTO - FOR 339
- GOTO - compilation 338
- handle fichier 306
- HEAPPTR 69, 178
- hexadécimal - conversion 449
- | énuméré - implémentation 113 i, HI 449
- AU COEUR DE TURBO PASCAL 496 AU COEUR DE TURBO PASCAL a AU COEUR DE TURBO PASCAL 497 AU COEUR DE TURBO PASCAL
- ==================== PAGE 56 ====================
- INDEX
- I - option 390, 401
- IF - compilation 324
- implementation INTEGER 100
- implémentation - BOOLEAN 110
- implémentation - CHAR 105
- implémentation - REAL 120
- implémentation - SET 168
- implémentation - STRING 150
- implémentation - enregistrements 154
- implémentation - intervalle 116
- implémentation - pointeur 176
- implémentation - réel 8087 128, 135
- implémentation - tableaux 143
- implémentation - variants 157
- implémentation - énuméré 113
- IN - compilation 280
- include - compilation 79
- indice - compilation 245
- INLINE - compilation 94
- INPUT - compilation 300
- INPUT - compilation 294
- INTEGER - compilation 211
- INTEGER - implémentation 100
- INTEL - format 8087 135
- intervalle - compilation 219
- intervalle - implémentation 116
- intervalle - option 396
- IORESULT 401
- K - option 407
- KBD - compilation 314
- KEYBFR 63
- LABEL - compilation 206
- LENGTH 151
- librairie - les routines 443
- librairie - tables 465
- libres - variants 164
- littéral - compilation 208
- LO 449
- locales - variables 349
- LST - compilation 314
- AU COEUR DE TURBO PASCAL
- 498
- AU COEUR DE TURBO PASCAL
- INDEX
- M
- MAXINT 100
- MEM 45
- MEMA VAIL - compilation 284
- mémoire 60
- mémoire - affichage plan 69
- MEMW 74
- menu - options 90, 96
- messages - chargement 468
- MOD - compilation 211
- NEW 178
- NEW - variants 188
- NIL - compilation 282
- NOT 47
- NOT - compilation 216
- OFS 69
- optimisation - calcul d’indice 249
- option - menu 96
- option B (Buffer) 411
- option C (Contrôle) 417
- option D 423
- option D (Device) 415
- option F (Files) 422
- option G (Get) 423
- option I-(Include) 390
- option I (input output) 401
- option K (stack check) 407
- option P (Put) 423
- option R 249
- option R (range check) 396
- option R - modification 477
- option U (User) 419
- option V (Verify) 409
- options - paramètre 201
- options de compilation 387
- options du menu 90
- OR 47
- OR - compilation 216
- ORD 109
- OUTPUT - compilation 294
- OVERLAY = compilation 83
- AU COEUR DE TURBO PASCAL 499
- AU COEUR DE TURBO PASCAL
- ==================== PAGE 57 ====================
- | INDEX INDEX
- |
- SHL 48
- SHL - compilation 216
- P - option Put 423 SHR 48
- PACKED 147 SHR - compilation 216
- paramètres - compilation 364 SQR - compilation 211
- plan mémoire 60, 65 SSEG 69
- plan mémoire - affichage 69 statiques - variables 376
- plan mémoire DOS 62 STR - STRING 263
- pointeur - implémentation 176 STRING - compilation 257
- pointeurs - WITH 292 STRING - implémentation 150
- pointeurs - affichage 186 STRING et caractéres 265
- pointeurs - compilation 282 structurée - constante typée 379
- pointeurs - variants 188 SUCC - compilation 211
- pointeurs de tableaux 288
- pointeurs et enregistrements 289
- PSP 66
- PTR - compilation 284
- tableau - implémentation 143
- tableau à 2 dimensions 253
- tableaux - affectation globale 255
- | tableaux - compilation 245
- i] R - modification de l’option 477 tableaux - pointeurs de 288
- | R - option 249, 396 tableaux de caractères 149, 267
- | READ - STRING 261 TEXT - compilation 312
- | READ - caractères 243 TEXT - format fichier 193
- | READ - compilation 300 TEXT - FCB 318
- READ - compilation 294, 303, 312 TEXT - FIB 318
- READ - compilation réels 230 TEXT -blocETEITE 318
- READ - entier compilation 216 TINST 470
- LI ! READ - tableaux de caractères 268 traitement de bits 47
- READLN - compilation 302 TRM - compilation 314
- | | REAL - implémentation 120 TYPE - compilation 206
- | RECORD - compilation 270 type INTEGER 100
- | RECORD - implémentation 154
- | RECORD variant 157
- i réel - formatage WRITE 298
- Wy réel - implémentation 120
- réel 8087 - implémentation 135
- | réel BCD - implémentation 128 | U - option User 419
- réels - compilation 223 ip union libre 164
- réels et entiers 232 f USR - compilation 314
- | REPEAT - compilation 239
- | REWRITE - compilation 303, 310, 312
- i ROM 60
- | routines librairie 443
- à
- i}, V - option Verify 409
- T VAL - STRING 263
- | valeur - paramétres 364
- i VAR - compilation 209
- SEG 69 variable - paramétres 364
- SET - compilation 276 variables - absolues 382
- SET - implémentation 168 variables globales 426
- variables initialisées 376
- ‘ay variables locales - compilation 349
- nl
- ng
- AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL
- " AU COEUR DE TURBO PASCAL 500
- ‘ AU COEUR DE TURBO PASCAL 501
- ==================== PAGE 58 ====================
- INDEX
- INDEX PASCALISSIME
- W
- variant - RECORD 157
- variants - pointeurs 188
- variants libres 164
- WHILE - compilation 331
- WITH - compilation 273
- WITH - pointeurs 292
- WRITE - caractères 243
- WRITE - STRING 261
- WRITE - booléens 240
- WRITE - compilation 294, 297, 303, 312
- WRITE - compilation réels 230
- WRITE - entier compilation 216
- WRITE - formatage 298
- WRITE - tableaux de caractéres 268
- WRITELN - compilation 297
- XOR 47
- XOR - compilation 216
- INDEX PASCALISSIME
- AU COEUR DE TURBO PASCAL 502
- AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 503 AU COEUR DE TURBO PASCAL
- ==================== PAGE 59 ====================
- AU COEUR DE TURBO PASCAL présente les structures et le
- fonctionnement des programmes compilés avec TURBO PASCAL
- sur PC et compatible.
- AU COEUR DE TURBO PASCAL décrit:
- _ l'architecture mémoire du 8088, du PC, du DOS, de TURBO
- PASCAL, et des programmes compilés avec TURBO
- PASCAL (compilation mémoire, disque, programmes avec
- OVERLAY et chaînage).
- le format de chaque type de données:
- — les types simples: entiers, réels, réels BCD, réels 8087,
- caractères booléens, énumérés
- — les types structurés: tableau, enregistrement, ensemble,
- pointeur
- — les fichiers
- le code généré par le compilateur pour les expressions, les
- instructions de contrôle, les appels de procédures, les appels de
- fonctions, les constantes typées et les variables absolues
- les variables globales utilisées par un programme
- les routines de la librairie avec leurs paramètres
- Plus de 52 schémas illustrent les 512 pages de ce livre, qui
- comporte 149 programmes, dont 19 utilitaires permettant:
- l'affichage du plan mémoire
- l'affichage du contenu mémoire ou disque
- le décodage des réels
- la visualisation des variables globales
- des modifications du fonctionnement de TURBO PASCAL.
- X67, MBA Columbia, John COLIBRI a appris la gestion chez
- Ferrodo, la fabrication et la vente chez TI, le marketing chez
- Nestlé et la chasse chez Compétences, avant de s’installer à son
- compte en 1980. Auteur de 10 livres sur la micro informatique, il
- fonde en 1983 L'INSTITUT PASCAL, où il vous propose plus de
- 350 livres sur PASCAL, réunit le mercredi le Club des Utilisateurs
- PASCAL, publie le magazine PASCALISSIME et anime tous les
- mois ses célèbres séminaires PASCAL.
- —
|