coeur-tp-06-d.txt 169 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774
  1. ==================== PAGE 1 ====================
  2. LES OPTIONS DE COMPILATION 6
  3. | À les options de compilation 6.1
  4. ——
  5. Bes
  6. Les options agissent sur le compilateur au moment où elles sont lues.
  7. 6 LES OPTIONS DE COMPILATION
  8. 6.1 les options de compilation
  9. (61 LES OPTIONS DE COMPILATION]
  10. Leur effet est donc indépendant de la structure du programme. Par exemple:
  11. {6.1.1 DEFINITION
  12. Les options de compilation sont des indications placées dans le programme source et destinées à
  13. 1 PROGRAM OPH ORS: ocr
  14. i ncer le comportement du compilateur. i 2 VAR Nombre: INT “
  15. F 7 à . \ 3 Fichier: FILE OF CHAR;
  16. | Par exemple, si nous demandons (*$R-*), cela supprimera dans le code généré toutes les 4
  17. instructions de vérification d’intervalle. à 5 PROCEDURE Ouvre;
  18. 6 BEGIN
  19. | 7 ASSIGN(Fichier, ’PROG.PAS’ );
  20. fh 8 pola elena
  21. i 9 (*3I-*)
  22. h Ls:1.2 _SYNTAXE 10 WRITE(Fichier, Nombre);
  23. 11 END;
  24. Ces options sont tapées dans le source, dans un commentaire: 12
  25. 13 BEGIN.
  26. 14 Ouvre;
  27. C)H{S)—{ Option} (*)) 15 (*SI+*)
  28. 16 CLOSE(Fichier);
  29. 17 END.
  30. ATTENTION:
  31. — il ne faut aucun espace entre le commentaire ouvrant (que vous utilisiez "(*" ou l’accolade
  32. ff
  33. ouvrante "{") etle $ À 1 il
  34. — la présence d’espaces entre la fin de l’option et la fin du commentaire peut modifier le
  35. comportement de l’option. Nous le préciserons lorsque cet espace est significatif. 4
  36. Fig. 6.1 Une option est valide de ligne à ligne
  37. Aucune erreur d'entrée / sortie ne sera provoquée pour les instructions situées entre les lignes 9 à
  38. 15. Le RESET peut provoquer une erreur d'exécution, alors que WRITE n’en provoquera pas |
  39. (bien que l’appel à Ouvre soit compris dans les lignes 8 à 15).
  40. Certaines options doivent aussi figurer à une place précise (par exemple, en début du source), alo
  41. que d’autres peuvent figurer n’importe où. #
  42. 14
  43. {6.14 LA LISTE DES OPTIONS
  44. Si à un endroit vous souhaitez utiliser plusieurs options qui n’utilisent pas de chaîne de caractères
  45. vous pouvez les regrouper, en les séparant par une virgule, sans ajouter aucun espace: 1
  46. (*$R+4,1-*) Les options disponibles pour la version 3 sur PC sont les suivantes:
  47. — B: met en oeuvre le tampon de saisie
  48. — C: met en oeuvre CTRL C et CTRL S
  49. — D: modifie l’utilisation de tampons d’entrée pour les périphériques
  50. — F: modifie le nombre de fichiers qui peuvent être ouverts à un même instant
  51. — G: modifie la taille des tampons d’entrée
  52. ~ I: permet la gestion des erreurs d’entrée / sortie
  53. — I nom: met en oeuvre les fichiers inclus
  54. — K: permet la vérification de pile
  55. — P: modifie la taille des tampons de sortie
  56. — R: permet la vérification d'intervalle
  57. — U: met en oeuvre la gestion de CTRL C
  58. — V: permet la vérification de paramètres chaînes
  59. Vous pouvez aussi les laisser séparées:
  60. (*$R+ *)
  61. (*$R- *)
  62. Si l'option comporte un nom de fichier source, il n’est pas nécessaire de taper le suffixe PAS: le
  63. compilateur le rajoutera pour vous.
  64. mm
  65. AU COEUR DE TURBO PASCAL 389 AU COEUR DE TURBO PASCAL
  66. AU COEUR DE TURBO PASCAL 388 AU COEUR DE TURBO PASC A
  67. ==================== PAGE 2 ====================
  68. LES OPTIONS DE COMPILATION
  69. 6
  70. LES OPTIONS DE COMPILATION
  71. 6.1 les options de compilation
  72. les fichiers inclus 6
  73. f 6.2
  74. i é < 1 ivante:
  75. Ces options peuvent etre regroupées de la fagon suivante PROCEDURE quatre;
  76. _ I nom: gestion des fichiers inclus BEGI N
  77. — R, I, K, V: gestion dès erreurs END; (* quatre *)
  78. - B,C, D, U: tampon d'entrée et contrôle du programme out
  79. | _ G, P, F: paramétrage des fichiers BEGIN (* principal *)
  80. | END.
  81. | à Fig. 6.2 Le programme monolithe.
  82. i (62 LES FICHIERS INCLUS: L'OPTION [1]
  83. et voici sa version en utilisant un fichier inclus:
  84. | (6.21 DEFINITION 50 crop
  85. | 1 (*20 aou 87 *)
  86. | L’option Include permet de chainer plusieurs fichiers texte au moment de la compilation 2
  87. | 1 3. PROGRAM modulaire;
  88. | Exemple: q 4
  89. À 5 PROCEDURE deux;
  90. (*$I PROG2.PAS *) | 6 BEGIN
  91. {$1 c:calculpoutrecoupe } | H END; (* deux *)
  92. |
  93. 9 (*$i partiel *
  94. ; 10 7 )
  95. À 11 BEGIN (* principal *
  96. {6.22 MOTIVATION 11 BEGIN ER proie)
  97. L'option est destinée à permettre le morcellement du source en plusieurs fichiers. Ù Fig. 6.3 Le programme modulaire
  98. ||
  99. | Ceci se produit: j et le fichier inclus:
  100. — lorsque le texte de votre programme ne peut pas tenir en mémoire en utilisant l’éditeur (64K
  101. | moins la taille des variables du compilateur ($0802) moins la taille des messages d’ erreur) 0 (* 001 partiel *)
  102. | — lorsque vous utilisez un programme composé de plusieurs "modules fonctionnels". q à (* 20 aou 87 *)
  103. À 3 PROCEDURE trois;
  104. Voici un programme monolithique;-: 4 BEGIN
  105. i À END; (* trois *)
  106. | Oo (* oo! optinl *) | ; PROGEDUBE quatre;
  107. | 1 (* 20 aou 87 *) \
  108. Hy à M 9 END; (* quatre *)
  109. | 3 PROGRAM monolithe;
  110. It 4 Fig. 6.4 Le fichier i
  111. | 5 PROCEDURE deux; $ iehigr inclus
  112. (| 6 BEGIN
  113. | I END; (* deux *) q
  114. | 9 PROCEDURE trois; {6.23 FONCTIONN
  115. | 10 BEGIN | EMENT
  116. | 11 END; (* trois *) | te
  117. | 12 q rsque le compilateur rencontre l'option Include:
  118. | — il cherche ce fichier sur le disque, et i
  119. | j ~ il termine de compiler la li sque, et provoque une erreur s il ne le trouve pas
  120. a r gne contenant l’opti , à
  121. I! : - ra cape pe sont ceux du fichier Per ME eum it
  122. I: \ e la compilation de ce fichie i À
  123. LI tampon en 1e Qué cos | : 4 be les symboles sont à nouveau lus depuis le
  124. |
  125. t § AU COEUR DE TURBO PA |
  126. | hi U SCAL 390 AU COEUR DE TURBO PASCAL © AU COEUR DE TURBO PASCAL jé TETE Dir
  127. | '
  128. |
  129. %
  130. ie
  131. ==================== PAGE 3 ====================
  132. 6 LES OPTIONS DE COMPILATION 6
  133. 62 les fichiers inclus 62 6 LES OPTIONS DE COMPILATION "
  134. 2 les fichi i
  135. 6. es fichiers inclus 62
  136. — un découpage fonctionnel est cependant recommandé. Il va i
  137. 1éco e ut mieux regrouper é
  138. fichier inclus des procédures ayant une méme fonction. Par exemple ice procedure ae +
  139. |
  140. | (ll
  141. | Pour simplifier la gestion du fichier inclus, le compilateur termine d'analyser la ligne comportant
  142. | êtr iel i *émissi 20 a? :
  143. | de fenêtre, de séquentiel indexé, d’émission série, d’affichage graphique, de calcul matriciel...
  144. l'option d’inclusion avant de compiler le texte de ce fichier. Si nous avons:
  145. (*Si inclus.pas *) TYPE string80= STRING[80) ; Ce découpage améliore la lisibilité et facilite la construction de librairies fonctionnelles
  146. 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
  147. | 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
  148. ermet de regrouper les définit i é a ure,
  149. | hier roa P' initions et déclarations des variables de plusieurs procédures dans le
  150. Le compilateur utilise donc: Ainsi le programme suivant:
  151. | — un tampon de 64K pour le fichier principal (Work)
  152. | — un tampon de 128 octets pour lire le texte d’un fichier inclus situé sur disque 4 0 (* 001 optin4 *)
  153. | q 1 (* 20 aou 87 *)
  154. 1 2
  155. | 3 PROGRAM lithe2;
  156. | Le menu principal permet de désigner deux fichiers: : TYPE tic INTEGER;
  157. AR globale: I 3ER;
  158. — Work qui est le fichier utilisé pour éditer 6 ht 4 iw NTEGER;
  159. | — Main qui est le fichier que le compilateur compilera en premier 7 aii
  160. | } 8 PROCEDURE deux;
  161. | a i 9 BEGIN
  162. 10 END; (* *
  163. [| _ 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
  164. Le compilateur utilisera Work pour la compilation. l 12 PROCEDURE ri:
  165. — si vous travaillez (en le modifiant par l’éditeur) sur un des fichiers inclus, ce fichier devra être M 13 BEGIN .
  166. | appelé par l'option Work. Pour que le compilateur commence la compilation par le fichier 14 END; (* tri *)
  167. | principal, il faudra en préciser le nom par l'option Main. | 15 ed
  168. i ; 16 PROCE i;
  169. | ll L'utilisation de deux noms évite simplement lors de multiples modifications: | 17 BEG en sites
  170. | | 18 END; (* liste_tri *
  171. 1h — de sauvegarder le fichier inclus 19 mer"
  172. | — de charger par Work le fichier principal avant la compilation Î 20 BEGIN (* principal *)
  173. — de rappeler dans Work le fichier inclus pour d’autres modifications ( 21 END.
  174. 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
  175. TURBO se charge du reste (sauvegardes, chargements...)
  176. l Y ! à : à ‘ peut être découpé en:
  177. | Un seul petit défaut: si vous compilez d’abord en mémoire, puis souhaitez compiler en mode
  178. | .COM, ne sauvez pas le fichier inclus avant la compilation disque (T' URBO recommence alors
  179. 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*)
  180. HY fichier principal, et le chargement dans le tampon mémoire peut avoir écrasé le code). Cette — 1 (*20 aou 87 *)
  181. | sauvegarde est d’ailleurs inutile ici (si la compilation a réussi, elle a déjà été effectuée). 2
  182. | 3 PROGRAM modulaire
  183. | 2 VAR globale: INTEGER;
  184. | 6 PROCEDURE deux;
  185. | {6.24 UTILISATION 7 BEGIN
  186. . END; (* deux *)
  187. Notez que: 10 (*$i itri *)
  188. | le progr t étre découpé n’i fichiers inclus. Il n° écessaire | :
  189. | - amme peut être découpé n'importe comment en fichiers inclus. Il n'est pas n essaire M 12 BEGIN (* principal *
  190. de respecter les limites de la syntaxe (procédures, déclarations / instructions...) q 13 END. oa se
  191. | H Fig. 6.6 Le programme modulaire.
  192. hy, AU COEUR DE TURBO PASCAL 392 AU COEUR DE TURBO PASCAL | | AU COEUR DE TURBO PASCAL 393 AU COEUR DE TURBO PASCAL
  193. Jesse #
  194. ==================== PAGE 4 ====================
  195. 6 LES OPTIONS DE COMPILATION 6
  196. 6.2 les fichiers inclus 62
  197. et:
  198. 0 (* 001 optin6 *) »
  199. 1 (* 20 aou 87 *).
  200. 2
  201. 3 TYPE ¢ tri= INTEGER;
  202. 4 VAR tril: t_tri;
  203. 5
  204. 6 PROCEDURE wri;
  205. 7 BEGIN
  206. 8 END; (* tri *)
  207. 9
  208. 10 PROCEDURE liste_tri;
  209. 11 BEGIN
  210. 12 END; (* liste_tri *)
  211. Fig. 6.7 Le fichier inclus.
  212. — vous pouvez utiliser plusieurs Include pour un même programme
  213. — iln’est pas permis d’emboiter les Include. Seul le programme principal peut contenir des options
  214. Include (
  215. — si le compilateur ne trouve pas le fichier indiqué, la compilation est interrompue (erreur 90)
  216. — si vous manquez d’espace mémoire au moment de la compilation ou de l’exécution en mémoire,
  217. vous pouvez essayer de réduire le programme principal à une liste d’options Include, en plaçant
  218. tout le texte PASCAL dans des fichiers inclus:
  219. \
  220. (* 001 gros *)
  221. (* 20 aou 87 *)
  222. (*$i ideclare *)
  223. (*$i itri *)
  224. (*$i C:\calculipoutre *)
  225. (*$i ippal *)
  226. Fig. 6.8 Le fichier principal avec uniquement des include
  227. NAAR WNKO
  228. {63 LA GESTION DES ERREURS: R, I, K, V|
  229. {6.3.1 LA GESTION DES ERREURS
  230. Le langage PASCAL avait au départ une vocation uniquement pédagogique. De ce fait WIRTH
  231. avait préconisé que toute erreur devait provoquer l’arrêt du programme.
  232. AU COEUR DE TURBO PASCAL 394 AU COEUR DE TURBO PASCAL
  233. 6 LES OPTIONS DE COMPILATION 6
  234. 63 la gestion des erreurs: r, i, k, v 6.3
  235. Cette attitude ne peut être maintenue pour des programmes industriels. Il faut alors distinguer
  236. plusieurs catégories d’erreur:
  237. - les CR de traitement qui ne mettent en jeu que les variables directement impliquées. Par
  238. exemple:
  239. valeur:= 1/0;
  240. placera dans valeur une valeur erronnée, mais ne modifiera pas d'autre variable du programme.
  241. — les erreurs de traitement qui peuvent détruire d’autres zones de la mémoire. Ainsi:
  242. VAR tableau: ARRAY(0..5] OF INTEGER;
  243. tableau[-10000]:= 1234;
  244. peut détruire d’autres variables, le code du programme, ou méme le DOS.
  245. ~ les erreurs d’entrée / sortie. Par exemple |’utilisateur place dans le lecteur une disquette ne
  246. contenant pas le fichier qui doit étre ouvert.
  247. Les options R, I, K et V ont été créées pour permettre:
  248. — de demander au compilateur de provoquer ou non des erreurs d’exécution
  249. — de corriger par des instructions du programme les erreurs détectées
  250. Ainsi, lors de la mise au point, il est utile que le compilateur ou le code généré provoquent des
  251. erreurs d'exécution pour nous signaler des erreurs telles que:
  252. VAR jour: 1.31;
  253. jour:= 45;
  254. Mais lorsque le programme est déverminé, aucune situation ne doit provoquer d’erreur. C’est au
  255. Programmeur de tester ce qui se passe, et corriger les erreur. Par exemple:
  256. REPEAT
  257. WRITE('INDICE <0..5> ? ’);
  258. READLN(indice);
  259. UNTIL (indice>= 0) AND (indice<= 5);
  260. tableau[indice]:= 1234;
  261. La différence entre les erreurs de traitement et les erreurs d'entrée / sortie est que les premiéres sont
  262. prévisibles, les secondes ne le sont pas. Nous pouvons vérifier si un indice est compris dans un
  263. Intervalle donné, nous ne pouvons pas vérifier quelle disquette l’utilisateur va placer dans le lecteur.
  264. AU COEUR DE TURBO PASCAL 395
  265. AU COEUR DE TURBO PASCAL
  266. EE
  267. ==================== PAGE 5 ====================
  268. RÉ —
  269. im | 6 LES OPTIONS DE COMPILATION 6 6 ay tinge wae ep jy 6
  270. | 63 la gestion des erreurs: r, i, k, v 63 6.3 la gestion des erreurs: r, i, k, v 63
  271. — dans le cas des tableaux, l’adresse de la zone à modifier provient d’un calcul utili *indi
  272. Par conséquent: | Si l’indice est en dehors de 1’intervalle déclaré, le code nee modifier prio be hr
  273. — 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;
  274. l'arrêt du programme est utile pour la détection des erreurs, lors de la mise au point.
  275. — les options évitant l’arrêt en cas d’erreur d’entrée / sortie sont indispensable pour pouvoir tester
  276. et corriger l'erreur. tableau 5 5J:= 8;
  277. | ira écraser des données (des variables ou même du code) placés au-delà de la place allouée à
  278. Voyons à présent ces options en détail. tableau.
  279. | (6.3.2 LES OPTIONS R+ R- | 6.3.2.3 FONCTIONNEMENT
  280. j | En mode R+ le compilateur place dans le code du programme des instructions qui vérifi
  281. 6.3.2.1 DEFINITION DE L'OPTION R valeurs affectées à un intervalle sont dans les limites citées " cient Wales
  282. L’option Range Check (vérification d’intervalle): \
  283. — permet d'effectuer ou non la vérification des bornes des intervalles Voici un programme utilisant l'option R+:
  284. — est par défaut en mode R-
  285. | — est une option locale 0 (* 001 optr*)
  286. | 1 (* 20 aou 87 *)
  287. 2
  288. { 3 PROGRAM option_r;
  289. Exemple: i 4 VAR intervalle: $10..$1F;
  290. | (*$R-*) 5 entier: INTEGER;
  291. | 6 tableau: ARRAY/$10..$/F] OF INTEGER;
  292. (] | 7 BEGIN
  293. if 8 intervalle:= entier;
  294. | | 9 tableaulentier]:= $AA;
  295. | 6.3.2.2 MOTIVATION 10 a at 2
  296. | 11 intervalle:= entier;
  297. | | 12 tableau[entier]:= $AA;
  298. | Lorsque nous affectons une valeur à une variable, le programme stocke les octets à affecter dansla M 13 END. i
  299. i] zone allouée à la variable. i ’
  300. | Fig. 6.9 Le programme option_r.
  301. | Il est donc impératif de s’assurer que le programme ne modifie pas d’autres octets que ceux utilisés
  302. pour cette variable.
  303. | | Voici le code généré:
  304. | Les risques de débordements proviennent des intervalles et des tableaux. 2D4D E849DD ue Pa. +4
  305. | — 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
  306. I autres que ceux de |’intervalle. | 2D52 780B hex 780B ; cs
  307. 2D54 3C15 hex 3C13 es
  308. VAR jour: 1.31; | 2D56 DCO2 hex DC02 ; code
  309. suite: INTEGER: | 2D58 2900 hex 2900 ; globales
  310. ye 2D5A 0004 hex 0004 ; min piles
  311. jour:= valeur; 2D5C 00A0 hex 00A0 ; max piles
  312. 2D5E 1000 hex 1000! >Hérchiers
  313. Si valeur contient par exemple $1122, alors la variable suite sera modifiée par l’affectation M 2D60 0000 hex 0000 ; input
  314. ci-dessus. j 2D62 0000 hex 0000 ; output
  315. |
  316. (1 AU COEUR DE TURBO PASCAL 396 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 397 AU COEUR DE TURBO PASCAL
  317. ==================== PAGE 6 ====================
  318. { 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPILATION 6
  319. 63 la gestion des erreurs: r, i, k, v 6.3 63 la gestion des erreurs: r, i, k, v 63
  320. | À
  321. | 4 8BEC mov bp, sp Voici un autre programme:
  322. | TOC VESPIDP call TU TAÏLLE_OODE
  323. l ote DS nex SAUT PRINCIPAL 0 (* 001 optr2 *)
  324. | “4 adr ve a
  325. | 2D6B 6D2D 1 (* 20 aou 87 *)
  326. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL ; 2 pone
  327. PRINCI PAL mov ax, [$0263] à 4 PROGRAM option r 2;
  328. cd Ds orl [$0262], al 5 VAR intervalle: $10..$1F;
  329. | , prie cpu OF $40..$4F;
  330. 02 mov ax, [$0263] 4 indice: R;
  331. 2D19 DIEO shl eS | 8 EGIN
  332. 2D7B 97 xchg di q 9 intervalle:= $BB;
  333. 2D7C B8AA00 mov ax, $SO0AA | 10 READLN (intervalle);
  334. 2D7F 89854502 mov [di+ $0245], ax | 11
  335. À 12 (* refusé à la compilation : tableau[$CC]:= ... *)
  336. : 2D83 A16302 mov ax, [$0263] 13 tableau[indice]:= $AA;
  337. 2D86 B91000 mov cx, $0010 4 14 END.
  338. 2D89 BA1F00 mov dx, $001F |
  339. 2D8C E8ESEI call TU_RANGE_CHEK 1 Fig. 6.11 Le programme option_r_2.
  340. 2D8F A26202 mov [$0262], al i
  341. 2D92 A16302 mov ax, [$0263] q
  342. | 2D95 2D1000 sub ax, $0010 dont le code est le suivant:
  343. | 2D98 B91000 mov cx, $0010
  344. | 2D9B E8CCE1 call | TU_INDEX_CHECK
  345. | 2D9E DIEO shl ax, 1 ‘ 2D4D E849DD call TU_PARAGRAPHS
  346. | f 2DA0 97 xchg di | 2D50 0600 hex 0600 ; options
  347. | 2DA1 B8AA00 mov ax, $OO0AA 1 2D52 780B hex 780B ; cs
  348. 2DA4 89856502 mov [di+ $0265], ax 2D54 3C15 hex 30151448
  349. j q 2D56 DCO2 hex DCO2 ; code
  350. | 2DA8 E90000 jmp FIN 1 2D58 2800 hex 2800 ; globales
  351. | | 1 2D5A 0004 hex 0004 ; min piles
  352. | 2DAB 33C0 FIN xor ax," 'aù 2D5C 00A0 hex OOAO ; max piles
  353. 2DAD E890DE call TU_HALT 4 2DSE 1000 hex 1000 ; fichiers
  354. 2DB0 0000 hex 0000 q 2D60 0000 hex 0000 ; input
  355. À 2D62 0000 hex 0000 ; output
  356. Fig. 6.10 Code de option _r.
  357. 2D64 8BEC mov bp, sp
  358. | é j 2D66 E814DF call TU_TAILLE_CODE
  359. | Notez que: } 2D69 4800 hex 4800 ; taille
  360. | Î 2D6B 6D2D adr SAUT_PRINCI PAL
  361. | — en mode R- (mode par défaut):
  362. | e R- ( p ) 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
  363. — l'affectation à une variable d’un octet (dans l’intervalle 0..255):
  364. affe ( q 2D70 B8BB00 PRINCIPAL mov ax, S00BB
  365. — ne peut pas détruire les autres variables (MOV [adresse], AL) \ q 2D73 B91000 mov cx, $0010
  366. ~ le code ne vérifie pas que la valeur est réellement comprise dans l'intervalle déclaré | 2D76 BA1F00 mov dx, $001F
  367. (dans notre exemple, l’octet faible de entier peut très bien être en dehors de l'intervalle 2D79 E8F8E1 call TU_RANGE_CHECK
  368. $10..$1F) À 2D7C A26202 mov [$0262], al
  369. | — lorsque l'indice du tableau est en dehors de la plage déclarée, l’affectation ira écraser 2D7F E8CFF7 call TU_READLN
  370. d’autres données situées dans DS (sans aucun message d’erreur à cet instant) bat de UE mov di, $0262
  371. § ush ds
  372. — en mode R+: 2D86 E8B4F9 tall TU_READ_ INTERV
  373. q 2D89 E847E2 cali TU_1O_CHECK
  374. — le code vérifie que les valeurs affectées à un intervalle sont bien comprises entre les bornes
  375. déclarées
  376. — le code vérifie que la valeur d’un indice est bien comprise entre les bornes déclarées |
  377. AU COEUR DE TURBO PASCAL 398 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 399 AU COEUR DE TURBO PASCAL
  378. DA
  379. Du.
  380. ==================== PAGE 7 ====================
  381. LES OPTIONS DE COMPILATION 6 6 LES OPTIONS D
  382. la gestion des erreurs: r, i, k, v 63 63 ht scan IE COMER EE 6
  383. —— 6.3
  384. A17302 mov ax, [$0273]
  385. 2D1000 sub ax, $0010 6.3.2.4 UTILISATION
  386. B91000 | mov cx, $0010 nt
  387. E8D2E1 ' call TU_INDEX_CHECK
  388. 2D98 97 xchg di L’utilisation de R+ est impérative tant que le ,
  389. 2D99 B8AA00 mov ax, SOOAA utilisons systématiquement itn, ol programme n'est pas totalement aw point. No
  390. 5D9C B94000 a cx, $0040 | q nt cette option, que nous plaçons au début de chaque programme. iy
  391. 2D9F BA4F00 mov dx, $004F 4
  392. 2DA2 E8CFE1 call TU_RANGE_CHECK qi
  393. 2DA5 88856302 mov [di+ $0263], al q R- peut étre utilisé:
  394. 2DA9 £90000 jmp FIN 1 pour sablider sun cellules db tile LMP
  395. ar anime s d’un ta leau dont la taille est inconnue au moment de la compilation
  396. 2DAC 33C0 FIN xor ax, ax ;
  397. 2DAE E88FDE call TU_HALT | — pour éviter l'erreur d'exécution d “A 1
  398. 2DB1 0000 hex 0000 ion dans les tests composés utilisant AND:
  399. ' : | (*$R-*)
  400. Fig. 6.12 Le code de opti j ! W i i . hears
  401. ig ‘= option_r_ i: somes (Indice< Maximum) AND (Tableau[Indice]<> ’Z’) DO
  402. | BEGIN
  403. \ Notez que: | Indice:= Indice+ 1;
  404. END;
  405. | _ le compilateur ne vérifie pas si les valeurs constantes sont dans l'intervalle. C’est au moment 4
  406. | 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
  407. 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
  408. — le compilateur détecte qu'un indice constant déborde la plage (erreur 45). Il calcule en effet ù
  409. \ l'adresse lorsque l'indice est constant, et peut donc tester sa validité. Ceci est vrai en mode R-
  410. également. q
  411. _ READ et READLN n’effectuent aucune vérification d'intervalle, sauf MAXINT (la frappe de M
  412. | 10000 est acceptée, la frappe de 40000 est refusée: erreur 10). À { 6.3.3 LES OPTIONS I+ I-
  413. || _ Les calculs arithmétiques sur des entiers ne testent pas le débordement. 200*200 fournira une |
  414. valeur de -25536 sans sourciller. C’est au programmeur de tester le débordement (en utilisant
  415. de réels pour vérifier si la valeur est inférieure ou égale 4 MAXINT). {
  416. 4 6.3.3.1 DEFINITION DE L’OPTION I
  417. |
  418. |
  419. | Dans le cas de chaînes: |
  420. | |
  421. — 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):
  422. (*$r+*) 4 — permet de supprimer |’ int i ï ;
  423. | PE mn Gios | Etap A, pp interruption du programme lorsque survient une erreur d’entrée / sortie
  424. i indice: INTEGER; (| — par défaut utilise le mode I+ (vérification d’erreurs)
  425. | — l'option I peut être utilisée localement
  426. | prenom:= ‘JOE’;
  427. preno[7]:= °X’;
  428. | prenom[0]:= CHR(77); i
  429. | prenom[0]:= CHR(indice); | Exemple:
  430. Il L _ l'affectation à une chaîne d’une chaîne plus grande que la taille maximale provoque une (*$1+*)
  431. troncature (pour éviter d’écraser les zones situées aprés la chaine), sans aucun message d’erreur
  432. (*$r+*)
  433. VAR prenom: STRING[3];
  434. prenom:= * ALEXANDRE;
  435. AU COEUR DE TURBO PASCAL
  436. | AU COEUR DE TURBO PASCAL 400 AU COEUR DE TURBO PASCAL D || AU COEUR DE TURBO PASCAL 401
  437. ==================== PAGE 8 ====================
  438. |
  439. |
  440. |
  441. |
  442. |
  443. 6 LES OPTIONS DE COMPILATION =
  444. 6.3 la gestion des erreurs: r, i, k, v i
  445. 6.3.3.2 MOTIVATION
  446. à i d’entrée / sortie sont hors
  447. 4 des erreurs de traitement, les erreurs € on!
  448. a Juguveoe du programmeur. Il est possible de vérifier que le diviseur 2
  449. différent de zéro. Il n’est. pas possible de s'assurer que l’ascenseur de
  450. l'immeuble se met en route alors que le programme écrit sur le disque.
  451. Nous avons vu que les entrées/sorties utilisaient toutes la librairie, qui elle-même fait appel au
  452. DOS.
  453. En cas d'erreur, le DOS indique qu’il y a eu un problème, et la routine de la librairie provoque une
  454. erreur d’entrée / sortie.
  455. iti ’option I- Ÿ d'exécution.
  456. i le programme ne soit interrompu, l’option I- ne provoque pas d’erreur C
  457. ‘lit vd Mr dei Par contre c'est au programmeur de gérer l'erreur. qd gestion est
  458. effectué en lisant un code de résultat d’entrée / sortie à l’aide de la fonction IORESULT.
  459. 6.3.3.3 FONCTIONNEMENT
  460. Voici un programme utilisant l'option I-:
  461. (* 001 xopti *)
  462. (* 16 oct 86 *)
  463. (*$r+*) i
  464. PROGRAM option_i;
  465. VAR fichier: FILE OF INTEGER;
  466. BEGIN
  467. RESET (fichier);
  468. x Si-*
  469. RESET (fichier);
  470. END.
  471. © 10 00 JA U B W D — ©
  472. _
  473. Fig. 6.13 Le programme option_i.
  474. Et voici son code:
  475. call TU_PARAGRAPHS
  476. 2D50 6600 hex 0600 ; options
  477. 2D52 780B hex 780B ; cs
  478. 2D54 3C15 hex 30151548
  479. 2D56 DAO2 hex DA02 ; code
  480. 2D58 2B00 hex 2B00 ; globales
  481. AU COEUR DE TURBO PASCAL 402 AU COEUR DE TURBO PASCAL
  482. LES OPTIONS DE COMPILATION 6
  483. la gestion des erreurs: r, i, k, v 63
  484. 0004 hex 0004 ; min piles
  485. 00A0 hex 00A0 ; max piles
  486. 1000 hex 1000 ; fichiers
  487. 0000 hex 0000 ; input
  488. 0000 hex 0000 ; output
  489. 8BEC mov bp, sp
  490. 2D66 E814DF call TU_TAILLE_CODE
  491. 2D69 2600 hex 2600 ; taille
  492. 2D6B 6D2D adr SAUT_PRINCI PAL
  493. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL
  494. 2D70 BF6202 PRINCIPAL mov di, $0262
  495. 2278: 4E push ds
  496. 2D74 B90200 mov cx, $0002
  497. 2D77 E819FC call TU_RESET
  498. 2D7A E856E2 call TU_IO_CHECK
  499. 2D7D BF6202 mov di, $0262
  500. 2D80 1E push ds
  501. 2D81 B90200 mov cx, $0002
  502. 2D84 E80CFC call TU_RESET
  503. 2D87 E90000 jmp FIN
  504. 2D8A 33C0 FIN xor ax, ax
  505. 2D8C E8B1DE call TU_HALT
  506. 2D8F 0000 hex 0000
  507. Fig. 6.14 Le code de option_i.
  508. Notez que:
  509. — en mode I+ (mode par défaut), le code appelle simplement la routine de la librairie
  510. TU_IO_CHECK. C'est cette routine qui provoque l'erreur d’entrée / sortie. En mode I-, cet
  511. appel n’est pas effectué.
  512. - les instructions concernées par la vérification TU_IO_CHECK sont toutes
  513. les opérations qui accèdent au périphérique: RESET, REWRITE, READ,
  514. WRITE, SEEK, LONGSEEK, CLOSE, FLUSH, CHAIN, BLOCKREAD,
  515. BLOCKWRITE, ERASE, EXECUTE, RENAME, TRUNCATE, CHDIR, MKDIR,
  516. RMDIR.
  517. Ces vérifications ont lieu pour tous les fichiers:
  518. fichier FILE OF,
  519. fichiers de blocs,
  520. fichiers TEXT,
  521. fichiers standard (CON, TRM, KBD, USR, LST, AUX),
  522. fichiers d’entrée / sortie par défaut (INPUT et OUTPUT)
  523. Cette vérification même pour l'écran, permet de traiter les erreurs lorsque les fichiers ont été
  524. redirigés vers des périphériques qui peuvent provoquer des erreurs.
  525. AU COEUR DE TURBO PASCAL 403 AU COEUR DE TURBO PASCAL
  526. NS
  527. ==================== PAGE 9 ====================
  528. EE SE
  529. 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPI
  530. [ qe LATION
  531. 6.3 la gestion des erreurs: r, i, k, v 63 63 la gestion des erreurs: r, i, k, v és
  532. — 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
  533. |
  534. _ APPEND, GETDIR, OVRPATH, FILEPOS, LONGFILEPOS, FILESIZE, 2D70 E859E2 PRINCIPAL
  535. LONGFILESIZE, EOF, EOLN 5D73 A36202 ht fy ie eer er
  536. — les erreurs numériques: ,
  537. 1 2D76 E90000 ;
  538. READLN(fichier, entier); jJmp FIN
  539. d’entrée / sortie si le fichier n’est pas ouvert, mais une erreur 1 road SU FIN xor ax, ax
  540. rovoquera une erreur d'entrée : e : 5D7 c
  541. RIRHERAUS si la valeur est 42(56. Les erreurs numériques NE PEUVENT PAS être | call TU_HALT
  542. | | supprimées par I-. a Fig. 6.16 Le code de lis _ioresult .
  543. — pour ASSIGN, la vérification qu’un fichier FILE OF n’est pas redirigé vers un fichier standard |
  544. | (CON, LST...) place bien le code d'erreur $22 dans la variable système, mais ne génère pas
  545. | TU_IO_CHECK. Une erreur d'entrée / sortie $22 est provoquée si vous travaillez en mode I+, Notez que :
  546. | i mais mal repérée dans le texte du programme (positionnement à l'entrée / sortie précédente). |
  547. \ j à É — le code invoque TU_IORESULT qui se contente d
  548. | _ 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 "
  549. mode I+ ou I-. “a
  550. La récupération du code d’erreur se fait de la fagon suivante: 4 6.3.3.4 UTILISATION
  551. | Ô (* 001 xopti2 *) 1 Voici par exemple comment ouvrir un fichier déjà éé i
  552. 1 (* 16 oct 86 *) programme: ne s’arréte si le fichier n’est pas trouvé: 7 RE
  553. y 3 4
  554. 3 (*$r+*) j
  555. 4 PROGRAM lis_ioresult; | O (* 001 xopti3 *)
  556. | 5 VAR resultat: INTEGER; { 1 (* 16 oct 86 *)
  557. | 6 BEGIN 2
  558. 7 resultat:= LORESULT; 3 (*$r+*)
  559. 8 END. f 4 PROGRAM option_i_ouvre;
  560. uM 1 5 VAR fichier: FILE OF INTEGER;
  561. Fig. 6.15 Le programme lis_ioresult. q 6
  562. | 1 7 PROCEDURE ouvre;
  563. | 8 VAR I _resultat: INTEGER;
  564. t q 4 | nom_fichier: STRING/{64];
  565. | dont voici le code: \ 10 BEGIN
  566. | q i REPEAT
  567. | q WRITE(’ nom <stock.dta> ?');
  568. q 2D4D E849DD call TU_PARAGRAPHS 13 READLN(!_ nom fichier); )
  569. if 2D50 0600 hex 0600 ; options q 14 ASSIGN(fichier, |_nom_fichier);
  570. 2D52 780B hex 7808: ‘cs 1 15 (*$i-*) “y
  571. } 2D54 3C15 hex 3013; ds à 16 RESET (fichier);
  572. | 2D56 D802 hex D802 ; code À 17 (*Si+*)
  573. 2D58 2700 hex 2700 ; globales 18 1 _resultat:= IORESULT;
  574. 2D5A 0004 hex 0004 ; min piles il 19 IF 1 resultat<> 0
  575. 2D5C 00A0 x Jess 3 ph de les \ 20 THEN BEGIN
  576. 2D5E 1000 ex ; fichiers q 21 WRITELN('n’” ay PA
  577. 2D60 0000 hex 0000 ; input i 22 CLOSE(fichier)- ae
  578. 2D62 0000 hex 0000 ; output 23 END;
  579. ). 24 UNTIL /_resultar= 0;
  580. 2D64 8BEC mov bp, sp | | 25 END; (* ouvre *)
  581. | 2D66 E814DF call TU_TAILLE_CODE | 26
  582. | 2D69 1500 hex 1500 ; taille j
  583. | 2D6B 6D2D adr SAUT_PRINCI PAL
  584. 4 L
  585. mR L AU COEUR DE TURBO PASCAL 404 AU COEUR DE TURBO PASCAL | AU COEUR DE TURBO PASCAL 405 AU COEUR DE TURBO PASCAL
  586. ==================== PAGE 10 ====================
  587. 6 LES OPTIONS DE COMPILATION 6
  588. 6.3 la gestion des erreurs: r, i, k, v 6.3
  589. 27 BEGIN
  590. 28 ouvre;
  591. 29 END.
  592. Fig. 6.17 Le programme option_i_ouvre.
  593. Notez que:
  594. _ nous stockons le code du résultat de RESET dans une variable. En effet,
  595. si nous utilisions directement IORESULT dans la condition du IF, nous
  596. sortirions de la boucle méme si le fichier n’était pas trouvé (IORESULT
  597. recupère le code ET met à zéro la zone qui contient ce code).
  598. — lorsque le fichier n’est pas trouvé, il est prudent de refermer le fichier que nous avons essayé
  599. d'ouvrir. En TURBO ce n’est pas nécessaire.
  600. — nous pourrions affiner le message en fonction du code d’erreur (fichier non trouvé, nom
  601. incorrect...)
  602. Voici un autre exemple permettant de s’assurer si un fichier est déjà créé (pour éviter par exemple
  603. de le détruire par REWRITE:
  604. O (* 001 xopti4 *)
  605. 1 (* 16 oct 86 *)
  606. 2
  607. 3 x(*Se#7) :
  608. 4 PROGRAM option_i_existe;
  609. 5 TYPE string64= STRING/64];
  610. 6 VAR fichier: FILE OF INTEGER;
  611. 7 nom_fichier: string64;
  612. 8
  613. 9 FUNCTION deja_ce_fichier(p_nom_fichier: string64): BOOLEAN;
  614. 10 BEGIN
  615. 11 ASSIGN(fichier, p_nom_fichier);
  616. 12 (*$i-*)
  617. 13 RESET (fichier);
  618. 14 (*Si+*)
  619. 15 IF IORESULT= 0
  620. 16 THEN deja_ce_fichier:= TRUE
  621. 17 ELSE BEGIN
  622. 18 deja_ce_fichier:= FALSE;
  623. 19 CLOSE(fichier);
  624. 20 END;
  625. 21 END; (* ouvre *)
  626. 22
  627. AU COEUR DE TURBO PASCAL 406 AU COEUR DE TURBO PASCAL
  628. 6 LES OPTIONS DE COMPILATION
  629. 6.3 la gestion des erreurs: r, i, k, v 63
  630. 23 BEGIN (* principal *)
  631. 24 WRITE(’nom <stock.dta> ?’);
  632. 25 READLN(nom_fichier);
  633. 26 IF deja_ce_.fichier(nom_fichier)
  634. 27 THEN BEGIN
  635. 28 WRITELN('ce fichier existe deja’ );
  636. 29 -EXIT;
  637. 30 END
  638. 31 ELSE BEGIN
  639. 32 REWRITE(fichier);
  640. 33 A À
  641. 34 END;
  642. 35 END.
  643. Fig. 6.18 Le programme option_i_existe.
  644. {6.3.4 LES OPTIONS K+ K-
  645. 6.3.4.1 DEFINITION DE L’OPTION K
  646. L’option K (vérification de pile):
  647. ~ Er de supprimer la vérification de place sur la pile avant l’appel d’une procédure ou d’une
  648. onction
  649. - En défaut utilise le mode K+ (vérification de place)
  650. — l'option K peut être utilisée localement
  651. Exemple:
  652. (*$K-*)
  653. 6.3.4.2 MOTIVATION
  654. Lorsque nous appelons une procédure, le programme place sur la pile:
  655. — la sauvegarde de l’environnement de la procédure appelante (CP et son BP)
  656. — la table d’accés aux piles locales intermédiaires (au moins le BP actuel)
  657. — les variables locales s’il y en a
  658. — les paramètres s’il y ena
  659. Il convient donc de s'assurer qu'il y a encore assez de place en mémoire pour stocker ces données.
  660. Par défaut le compilateur vérifie systématiquement que la pile permet d’accomoder un appel.
  661. L'option K- permet de supprimer cette vérification.
  662. AU COEUR DE TURBO PASCAL 407
  663. AU COEUR DE TURBO PASCAL
  664. ==================== PAGE 11 ====================
  665. 6 LES OPTIONS DE COMPILATION 6 { 6 LES OPTIONS DE COMPILATION 6
  666. 6.3 la gestion des erreurs: r, i, k, v 6.3 | 6.3 la gestion des erreurs: r, i, k, v 63
  667. 2D7A 8BES FIN_DEUX mov sp, bp
  668. 6.3.4.3 FONCTIONNEMENT | 2D7C 5D pop bp
  669. 2D7D C3 ret
  670. Voici un programme utilisant l’option K-: | 2D7E B90600 PRINCIPAL mov cx, $0006
  671. 1 2D81 E8FEE1 call TU_STACK_CHECK
  672. | 2D84 ESE9FF call DEUX
  673. O (* 001 xoptk *) |
  674. 1 (*20 aou 87 *) i 2D87 E8E6FF call DEUX
  675. 2 À
  676. 3 (*$r+*) 2D8A E90000 jmp FIN
  677. | 4 PROGRAM option_k; j
  678. | 5 | 2D8D 33C0 FIN xor ax, ax
  679. | 6 PROCEDURE deux; 2D8F E8AEDE call | TULHALT
  680. 2 | v BEGIN
  681. i} | 8 - END; (* deux *) q : Fig. 6.20 Le code de option_k.
  682. | 9 |
  683. nn 10 BEGIN (* deux *)
  684. | 11 deux;
  685. | 12 (*$k-*) ) Notez que:
  686. 13 deux; if
  687. 14 END. 4 — en mode K+ (mode par défaut), le code appelle simplement la routine de la librairie
  688. TU_STACK_CHECK, en lui indiquant dans CX le nombre d’octets dont la procédure aura
  689. Fig. 6.19 Le programme option_k. q besoin.
  690. | j
  691. |
  692. | Et voici son code: \ Cette option ne concerne pas l’utilisation de la mémoire par les pointeurs. Seuls les appels de
  693. {| procédures sont concernés.
  694. | 2D4D E849DD call TU_PARAGRAPHS
  695. | 2D50 0600 hex 0600 ; options |
  696. || 2D52 780B hex 780B : es 4
  697. | 2D$4 3C15 hex SCID \iads 4 6.3.4.4 UTILISATION
  698. | 2D56 DAO2 hex DAO2 ; code q
  699. 2D58 2700 hex 2700 ; globales {
  700. (| 2D5A 0004 hex 0004 ; min piles 4 Les seuls programmes ayant à utiliser cette option sont ceux qui effectuent des appels à des
  701. 2D5C 00A0 hex OOAO ; max piles procédures situées à un endroit différent que celui prévu normalement par la mécanique TURBO.
  702. | 2D5E 1000 hex 1000 ; fichiers | Il s’agit là essentiellement de procédures placées dans des programmes rendus résidents et appelées
  703. 2D60 0000 hex 0000 ; input par un autre programme. Ces techniques sont utilisées surtout pour gérer les interruptions ou
  704. À 2D62, 0000 hex 0000 ; output j dépasser la limite des 64K.
  705. | 2D64 8BEC mov bp, sp
  706. || 2D66 E814DF call TU_TAILLE_CODE
  707. i] 2D69 2900 hex 2900 ; taille À
  708. | 2D6B 6D2D adr SAUT_PRINCIPAL 4 { 6.3.5 L’OPTION V
  709. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL q
  710. | 2070" 59 DEUX push bp a 6.3.5.1 DEFINITION
  711. | 2D71 8BEC mov bp, sp à
  712. | 2D73 55 push bp ; Rue
  713. 2D74 E90000 jmp DEBUT _DEUX À L'option VERIFY:
  714. 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
  715. À actuel
  716. |! — a par défaut la valeur V+
  717. 1 — est utilisable localement
  718. LL: { AU COEUR DE TURBO PASCAL 408 AU COEUR DE TURBO PASCAL | AU COEUR DE TURBO PASCAL : 409 AU COEUR DE TURBO PASCAL
  719. ==================== PAGE 12 ====================
  720. 6 LES OPTIONS DE COMPILATION 6
  721. 6.3 la gestion des erreurs: r, i, k, v 6.3
  722. Exemple:
  723. (*$V-*)
  724. 6.3.5.2 MOTIVATION
  725. Considérons le programme suivant:
  726. 0 (* 001 xoptv *)
  727. 1 (* 20 aou 87 *)
  728. 2
  729. 3 (*Sr+*)
  730. 4 PROGRAM option_v;
  731. 5 TYPE string80= STRING/80];
  732. 6 VAR chaine3: STRING/3];
  733. -
  734. 8 PROCEDURE lis_chaine(VAR pv_chaine: string80);
  735. 9 BEGIN
  736. 10 READLN(pv_chaine);
  737. 11 END; (* deux *)
  738. 12
  739. 13 BEGIN (* deux *)
  740. 14 lis_chaine(chaine3);
  741. 15 END.
  742. Fig. 6.21 Le programme option_v.
  743. Si l’utilisateur tape une chaine de 30 caractéres, les octets 4 4 30 iront écraser ce qui se trouve en
  744. mémoire après chaines.
  745. D'autre part le compilateur vérifie normalement que les types des paramètres formels et actuels
  746. sont identiques.
  747. Pour permettre l’écriture de procédures génériques, le compilateur accepte des chaînes de tailles
  748. distinctes, à condition d’utiliser l’option V-.
  749. 6.3.5.3 FONCTIONNEMENT
  750. L'option V- indique simplement au compilateur qu’il ne doit pas vérifier la concordance des tailles
  751. des chaînes.
  752. AU COEUR DE TURBO PASCAL 410 AU COEUR DE TURBO PASCAL
  753. 6 LES OPTIONS DE COMPILATION 6
  754. 6.3 la gestion des erreurs: r, i, k, v 6.3
  755. Voici un exemple d'utilisation:
  756. O (* 001 xoprv *)
  757. 1 (*20 aou 87 *)
  758. 2
  759. 3 (*$r+*)
  760. 4 PROGRAM option v;
  761. 5 TYPE string80= STRING/80];
  762. 6 VAR chaine3: STRING/3];
  763. à chaine127: STRING[127];
  764. 9 PROCEDURE lis_chaine(VAR pv_chaine: string80);
  765. 10 BEGIN
  766. 11 READLN(pv_ chaine);
  767. 12 END; (* deux *)
  768. 13
  769. 14 BEGIN (* deux *)
  770. 15 (* refusé par le compilateur: lis_chaine(chaine127);
  771. 16 lis_chaine(chaine3); *)
  772. 17 (*$v-*)
  773. 18 lis_chaine(chaine3);
  774. 19 END.
  775. Fig. 6.22 Le programme option_v.
  776. Notez que:
  777. — les option V+ ou V- ne produisent pas des codes différents. V- permet simplement de compiler
  778. des programmes rejetés par V+
  779. - en TURBO il n’y a pas de risque qu'une lecture d’un paramètre variable chaîne écrase le
  780. paramètre actuel, puisque la lecture tronque la valeur lue si elle dépasse la taille prévue. V-
  781. permet simplement de rendre le programmeur conscient que certaines vérifications ne seront
  782. pas effectuées par le compilateur.
  783. (6.4 LE CLAVIER: B, D, C, U]
  784. {6.4.1 LES OPTIONS B+ B-
  785. 6.4.1.1 DEFINITION DE L’OPTION B
  786. L’option B (Buffer):
  787. — permet de sélectionner la lecture clavier tamponnée ou standard
  788. — est par défaut en mode B+
  789. — est une option globale, qui doit obligatoirement figurer en tête de programme
  790. AU COEUR DE TURBO PASCAL 411 AU COEUR DE TURBO PASCAL
  791. ==================== PAGE 13 ====================
  792. | 6 LES OPTIONS DE COMPILATION 6 6 LES OPTIONS DE COMPILATION 6
  793. 6.4 le clavier: b, d, c, u 6.4 6.4 le clavier: b, d, c, u 6.4
  794. Exemple: Le PASCAL standard n’a jamais demandé que READ soit terminé par un RETURN avec
  795. modification des paramètres non contenus dans les caractères tapés. TURBO se rapproche un peu
  796. (*$B-*) du fonctionnement du PASCAL standard lorsque vous vous placez en mode B-.
  797. 6.4.1.2 MOTIVATION | 6.4.1.3 FONCTIONNEMENT
  798. 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):
  799. tamponnée du clavier, Dans cette mécanique: :
  800. | | — une instruction READ récupère tout ce qui est tapé jusqu’à la frappe de RETURN 0 (* 001 xoptb *)
  801. — répartit les valeurs tapées aux variables contenues dans le READ. Si la ligne tapée ne contient | 1 (*20 aou 87 *)
  802. | pas assez de valeurs, TURBO place: i 2
  803. 1 | | * *
  804. | — la valeur 26 (CTRL Z) dans les caractères ° ene AM option_b plus;
  805. a { — initialise les chaînes à la chaîne vide 5 VAR entier: INTEGER;
  806. | — ne modifie pas les valeurs numériques. | 6 BEGIN
  807. | Peay à READLN(entier);
  808. || Considérons le programme suivant: È END. gaie
  809. |
  810. || 0 re dliaibess +) Fig. 6.24 Le programme option_b_plus.
  811. | 1 (*20 aou 87 *)
  812. | 2
  813. i]
  814. | à PROGRAM option b 3; et voici seen
  815. | 5 VAR nombre: INTEGER;
  816. | ! 6 caracterel, caractere2, caractere3: CHAR; ! 2D4D E849DD call TU_PARAGRAPHS
  817. 4 miens STRING/3]; | 2D50 0600 nas ve ; options
  818. 2D52 780B ex AN
  819. | | à : READ(caracterel, caractere2, caractere3); q 2D54 3C15 hex |)
  820. 1 | 2D56 D902 hex D902 ; code
  821. | Ù 11 READ(nombre, caracterel, chaine); 2D58 2700 hex 2700 ; globales
  822. | 12 END. | 2D5A 0004 hex 0004 ; min piles
  823. | Là 1 2D5C 00A0 hex QOAO ; max piles
  824. (| Fig. 6.23 Le programme option_b. { 2DS5E 1000 hex 1000 ; fichiers
  825. | P iq 2D60 0000 hex 0000 ; input
  826. | À 2D62 0000 hex 0000 ; output
  827. | Alors: yi 2D64 8BEC mov bp, sp
  828. | h } 2D66 E814DF call TU_TAILLE_CODE
  829. q — Si vous tapez: q 2D69 1C00 hex 1C00 ; taille
  830. | AB RETURN | 2D6B 6D2D adr SAUT_PRINCIPAL
  831. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCI PAL
  832. alors caractere] contiendra A, caractere2 contiendra B et caractere3 contiendra CTRL Z.
  833. : k | 2D70 E8DEF7 PRINCIPAL call TU_READLN
  834. Si vous tapez ensuite: i 2D73 BF6202 en , $0262
  835. - f 2D76 1E pus s
  836. 128 ESPACE OH RETURN à 2D77 E8C6F9 call TU_READ_ENTIER
  837. 4 2D7A E856E2 call TU_10_CHECK
  838. alors nombre contiendra 128, caractere! contiendra l’espace et chaîne contiendra OH.
  839. - si ft vous tapez 128+OH une erreur sera provoquée car + n’est pas un chiffre compris
  840. entre O et 9. #
  841. | AU COEUR DE TURBO PASCAL 412 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 413 AU COEUR DE TURBO PASCAL
  842. ==================== PAGE 14 ====================
  843. 6 LES OPTIONS DE COMPILATION 6
  844. 6.4 le clavier: b, d, c, u 6.4
  845. 2D7D E90000 jmp FIN
  846. 2D80 33C0 FIN xor ax, ax
  847. 2D82 E8BBDE \ call TU_HALT
  848. Fig. 6.25 Le code de option_b_plus.
  849. Voici le méme programme compilé en B-:
  850. (* 001 xoptb *)
  851. (* 20 aou 87 *)
  852. (*$r+*)
  853. (*$b-*)
  854. PROGRAM option b moins;
  855. VAR entier: INTEGER;
  856. BEGIN
  857. READLN(entier);
  858. END.
  859. 0 © AU & &w D = ©
  860. Fig. 6.26 Le programme option_b_moins .
  861. dont voici le code:
  862. 2D4D E849DD call TU_PARAGRAP!
  863. 2D50 0600 hex 0600 ; options
  864. 2D52 780B hex 780B ; cs
  865. 2D54 3C15 hex SOLS i igi ds
  866. 2D56 D902 hex D902 ; code
  867. 2D58 2700 hex 2700 ; globales
  868. 2D5A 0004 hex 0004 ; min piles
  869. 2D5C 00A0 hex 00A0 ; max piles
  870. 2DSE 1000 hex 1000 ; fichiers
  871. 2D60 0000 hex 0000 ; input
  872. 2D62 0000 hex 0000 ; output
  873. 2D64 8BEC mov bp, sp
  874. 2D66 E814DF call TU_TAILLE_CODE
  875. 2D69 1F00 hex 1F00 ; taille
  876. 2D6B 6D2D adr SAUT_PRINCI PAL
  877. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
  878. 2D70 E880F7 PRINCIPAL call TU_READ
  879. 2D73 BF6202 mov di, $0262
  880. 2D76 1E push ds
  881. 2D77 E8C6F9 call TU_READ_ENTIER
  882. 2D7A E854FA call TU_READLN_VAR
  883. 2D7D E853E2 call TU_IO_CHECK
  884. 2D80 E90000 jmp $2D83
  885. AU COEUR DE TURBO PASCAL 414 AU COEUR DE TURBO PASCAL
  886. 6 LES OPTIONS DE COMPILATION 6
  887. 6.4 le clavier: b, d, c, u 6.4
  888. 2D83 33C0 LR_2D83 xor ax, ax
  889. 2D85 E8B8DE call TU_HALT
  890. Fig. 6.27 Le code de option_b_moins .
  891. 6.4.1.4 UTILISATION
  892. Ni B+ ni B- ne sont conformes au PASCAL standard. Lequel n’avait d’ailleurs pas été prévu pour
  893. fonctionner avec des terminaux interactifs. Aucune solution n’est donc parfaite.
  894. Sachant que notre solution n’est pas meilleure que les autres, voici comment nous procédons:
  895. — nous utilisons KBD qui n’est jamais tamponné, en affichant ce qui est tapé par WRITE
  896. — nous n’utilisons jamais plus d'une variable dans un READ ou un READLN (il faut de toutes
  897. façons afficher à l'écran ce que l’utilisateur doit taper avant chaque lecture)
  898. pour les petits programmes d'essai, nous utilisons READ pour les caractères (frappe d’une
  899. touche sans avoir besoin de RETURN) et READLN pour les valeurs numériques et les chaînes
  900. pour les programmes qui doivent fonctionner sans erreur, nous utilisons:
  901. — READ pour les caractères (frappe d’une touche sans nécessité de taper RETURN).
  902. — READLN pour les chaînes
  903. — des procédures de saisie contrôlées pour les saisies numériques (lecture caractère par
  904. caractère avec contrôle à chaque frappe et conversion numérique, gestion du curseur...). De
  905. telles procédures pour les entiers et les réels ont été publiées dans TOPIQUES PASCAL en
  906. PASCAL UCSD, ou dans PASCALISSIME.
  907. Attention, avec KBD, EOLN ne fonctionne pas correctement (retard d’un caractère). Il faut
  908. tester CHR(13) pour détecter la frappe de RETURN.
  909. {6.4.2 LES OPTIONS D+ ET D-
  910. 6.4.2.1 DEFINITION
  911. L'option D (Device):
  912. — permet de modifier la gestion des fichiers TEXT
  913. — par défaut fonctionne en mode D+
  914. — doit être placée en début de programme
  915. Exemple:
  916. (*$D-*)
  917. AU COEUR DE TURBO PASCAL 415
  918. AU COEUR DE TURBO PASCAL
  919. ==================== PAGE 15 ====================
  920. 6 LES OPTIONS DE COMPILATION 6
  921. 6.4 le clavier: b, d, c, u 6.4 6 LES OPTIONS DE COMPILATION 6
  922. 6.4 le clavier: b, d, c, u 64
  923. 6.4.2.2 MOTIVATION 2D6D"E 90008 SAUT_PRINCIPAL jmp PRINCIPAL
  924. 2D70 £90000 PRINCI PAL jmp FIN
  925. | Les fichiers TEXT peuvent être des fichiers disque ou des fichiers de caractère. Les fichiers disque
  926. | utilisent un tampon, alors que les fichiers de caractères travaillent octet par octet. Lorsqu'une 2D73 33C0 FIN xor ax, ax
  927. | ouverture d’un fichier TEXT est rencontrée, le programme teste si ce fichier est associé à un M 2D75 E8C8DE call TU_HALT
  928. | fichier disque ou un périphérique. Dans le second cas, le mécanisme du tampon n’est pas utilisé. :
  929. " a À Fig. 6.29 Le code utilisant l’option D- .
  930. |
  931. |
  932. | L'option D- permet de ne pas effectuer le test du type de périphérique au moment du RESET, — 1
  933. | REWRITE ou APPEND. Dans ce cas toutes les entrées / sorties seront tamponnées. 4 Notez que:
  934. ||
  935. |
  936. i
  937. — la seule différence par rapport à un programme sans D- est la valeur du paramètr
  938. C’est donc la routine TU_PARAGRAPHS qui récupère la valeur du bit 5 de ce en
  939. 6.4.2.3 FONCTIONNEMENT q modifie le comportement de READ et WRITE en conséquence. i
  940. Voici un programme utilisant l'option D-: Un exemple utilisant D est présenté au paragraphe 6.5.2.
  941. (* 001 xoptd *)
  942. (* 20 aou 87 *) il
  943. 1 {6.4.3 LES OPTIONS C+ C-
  944. ( vm
  945. (*$d-*) (|
  946. PROGRAM option_b; | 6.4.3.1 DEFINITION
  947. BEGIN |
  948. END.
  949. NAUNRWNKO
  950. L’option C (Contrôle):
  951. || | Fig. 6.28 Le tion_d. ù
  952. | | ig programme option_ - aioe de apecra le test de CTRL Cet CTRL S
  953. | 7 a la valeur C+ par défaut | |
  954. \ est une option globale qui doit être placée au début du programme
  955. | et voici son code:
  956. | 2D4D E849DD call TU_PARAGRAPHS | Exemple:
  957. | 2D50 0400 hex 0400 ; options q (*§C.*
  958. 2D52 780B hex 780B ; cs | 4
  959. 2D54 3C15 hex SUIS vita à
  960. | 2D56 D802 hex ahs code 4
  961. 2D58 2700 hex 27 ; globales be
  962. 2DSA 0004 hex 0004 : min piles 6.4.3.2 MOTIVATION
  963. | 2D5C 00A0 hex OOAO ; max piles
  964. 2D5E 1000 hex 1000 ; fichiers hy esi ù
  965. 5D60 0000 nas 0000 : input | La Frapne de CTRL C et CTRL S permet à l'utilisateur de contrôler l'exécution du programme:
  966. | 2D62 0000 hex 0000 ; output ~ lorsque le programme exécute un READ ou un READLN et que l'utilisateur tape CTRL C.
  967. 2D64 8BEC né b : l'exécution est interrompue :
  968. 2D66 E814DF call TU TAILLE CODE | = phn le programme exécute un WRITE ou un WRITELN vers l’écran, CTRL S permet de
  969. 2D69 0F00 hex OFOO ; taille pir pr» l'exécution. La frappe de n'importe quelle touche permet alors de
  970. 2D6B 6D2D adr SAUT_PRINCIPAL i pre
  971. { AU COEUR DE TURBO PASCAL 416 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 417 AU COEUR DE TURBO PASCAL
  972. ==================== PAGE 16 ====================
  973. 6 LES OPTIONS DE COMPILATION 6
  974. 6.4 le clavier: b, d, c, u 6.4
  975. CTRL C permet donc d’arréter un programme. CTRL S permet d’effectuer une pause pour pouvoir
  976. examiner des résultats affichés à l'écran.
  977. Pour éviter qu’un utilisateur n’interrompe par mégarde un programme qui doit se terminer
  978. normalement (données en mémoire qui doivent être mises à jour sur disque par exemple) ou qu'il
  979. ne croie que le programme s’est. bloqué, il est possible d’annuler l'interprétation de ces touches en
  980. utilisant l'option C-.
  981. 6.4.3.3 FONCTIONNEMENT
  982. Voici un programme compilé en C-
  983. (* 001 xoptc *)
  984. (* 20 aou 87 *)
  985. (*$r+*)
  986. (*$c-*)
  987. PROGRAM option c;
  988. VAR entier: INTEGER;
  989. BEGIN
  990. READLN(entier);
  991. END.
  992. CONAN BR & D = ©
  993. Fig. 6.30 Le programme option_c.
  994. et voici son code:
  995. 2D4D E849DD call TU_PARAGRAPHS
  996. 2D50 0200 hex 0200 ; options
  997. 2D52 780B hex T30p" <"-Cs
  998. 2D54 3C15 hex gers; (ds
  999. 2D56 D902 hex D902 ; code
  1000. 2D58 2700 hex 2700 ; globales
  1001. 2D5A 0004 hex 0004 ; min piles
  1002. 2D5C 00A0 hex QOAO ; max piles
  1003. 2D5E 1000 hex 1000 ; fichiers
  1004. 2D60 0000 hex 0000 ; input
  1005. 2D62 0000 hex 0000 ; output
  1006. 2D64 8BEC mov bp, sp
  1007. 2D66 E814DF call TU_TAILLE_CODE
  1008. 2D69 1C00 hex 1C00 ; taille
  1009. 2D6B 6D2D adr SAUT_PRINCI PAL
  1010. 2D6D E90000 SAUT_PRINCIPAL jmp PRINCIPAL
  1011. AU COEUR DE TURBO PASCAL 418 AU COEUR DE TURBO PASCAL
  1012. LES OPTIONS DE COMPILATION 6
  1013. le clavier: b, d, c, u 6.4
  1014. E8DEF7 PRINCIPAL cadd TU_READLN
  1015. BF6202 mov di, $0262
  1016. TE push ds
  1017. E8C6F9 call TU_READ_ENTIER
  1018. E856E2 call TU_1O_CHECK
  1019. 2D7D E90000 jmp FIN
  1020. 2D80 33C0 FIN xor AAA IRX
  1021. 2D82 E8BBDE call TU_HALT
  1022. Fig. 6.31 Le code de option_c.
  1023. Notez que:
  1024. — la seule différence par rapport au même programme est la valeur du paramètre en $2D50. C’est
  1025. donc la routine TU_LPARAGRAPHS qui récupère la valeur du bit 1 de ce paramètre, et modifie
  1026. le comportement de READ et WRITE
  1027. 6.4.3.4 UTILISATION
  1028. L'utilisation de l’option C-:
  1029. — accélère l’affichage écran
  1030. — permet l’utilisation de KEYPRESSED
  1031. (6.44 LES OPTIGNS U+ ET U-
  1032. 6.4.4.1 DEFINITION
  1033. L'option U (User interrupt):
  1034. — permet d’interrompre le programme par la frappe de CTRL C
  1035. — à par défaut la valeur U-
  1036. — doit être placée au début du programme.
  1037. Exemple:
  1038. (*$U+*)
  1039. 6.4.4.2 MOTIVATION
  1040. Normalement CTRL C ne permet d’interrompre un programme que lorsque le programme exécute
  1041. un READ ou un READLN et que l'utilisateur tape CTRL C.
  1042. AU COEUR DE TURBO PASCAL 419 AU COEUR DE TURBO PASCAL
  1043. ==================== PAGE 17 ====================
  1044. | A DEN SETS DE DONTE ATION 4 6, LES OPTIONS DE COMPILATION r
  1045. Une boucle telle que: 2D6D E90000 SAUT_PRINCIPAL jmp sé vite mal
  1046. UNTIL TRUE; 3D70 CC DÉBUT RÉPEAT int 3
  1047. ne peut être interrompue qu’en utilisant CTRL ALT DEL ou en débranchant la machine. | 2D7 1 cg dt 3
  1048. | 2D75 A36202 NU TT à
  1049. L'option U+ permet d’interrompre le programme à n’importe quel moment. | 2D78 CC tu 3
  1050. | | spre OBO mov ax, 30001
  1051. q 6.4.4.3 FONCTIONNEMENT | EDIE 739% jnz FIN_REPEAT
  1052. | 2D80 E9EEFF jmp DEBUT_REPEAT
  1053. i Voici un programme comportant l’option U+: q 2D83 CC FIN_REPEAT int 3
  1054. | 0 (* 001 xoptu *) 2D84 E90000 jmp FIN
  1055. 3 (*$r+*) ! call TU_HALT
  1056. 3 PROGRAM option_u; { Fig. 6.33 Le code de option_u .
  1057. 6 VAR entier: INTEGER; if
  1058. 7 BEGIN q
  1059. À 9 Pier: bh | Notez que:
  1060. « M TRUE; | = a ened PRES en $2D50 force TU_PARAGRAPHS a implanter le test de CTRL C
  1061. — par la suite, le code testera systématiquement la frappe ce CTRL C avant chaque instruction. Ce
  1062. test peut même être effectué plusieurs fois de suite lorsque plusieurs instructions commencent
  1063. \ Fig. 6.32 Le programme option_u. 1
  1064. 1 au même endroit
  1065. et voici son code:
  1066. 6.4.4.4 UTILISATION
  1067. 2D4D E849DD call fee tae
  1068. | 2D50 0E00 hex 0 ; options Le mode U+ peut étre utilisé au cours du développement, lorsque le progr:
  1069. i 2D52 780B hex 780B ; cs a boucles infinies. Comme il ralentit Tenacution n’est en paar ab Arret Bo ne
  1070. | 2D54 3C15 hex SCS 0; ds a finale du programme.
  1071. 2D56 D902 hex D902 ; code 1
  1072. 2D58 2700 hex 2700 ; globales 4
  1073. 2D5A 0004 hex 0004 ; min piles {
  1074. 2D5C 00A0 hex 00A0 ; max piles (à
  1075. 2D5E 1000 hex 1000 ; fichiers i
  1076. | 2D60 0000 hex 0000 ; input À
  1077. 2D62 0000 hex 0000 ; output |
  1078. 2D64 8BEC mov bp, sp 4
  1079. 2D66 E814DF call TU_TAILLE_CODE
  1080. 2D69 2300 hex 2300 ; taille
  1081. 2D6B 6D2D adr SAUT_PRINCI PAL
  1082. \
  1083. q
  1084. |
  1085. 4
  1086. a
  1087. i
  1088. AU COEUR DE TURBO PASCAL 421 AU COEUR DE TURBO PASCAL
  1089. L { AU COEUR DE TURBO PASCAL 420
  1090. AU COEUR DE TURBO PASCAL M 4
  1091. ==================== PAGE 18 ====================
  1092. 6 LES OPTIONS DE COMPILATION
  1093. 6.5 les fichiers: f, g, p
  1094. (6.5 LES FICHIERS: F, G, P|
  1095. {6.5.1 L’OPTION F
  1096. 6.5.1.1 DEFINITION DE L’OPTION F
  1097. L’option F (Files):
  1098. — permet d’ouvrir un plus grand nombre de fichiers simultanément
  1099. — est une option globale, qui doit obligatoirement figurer en tête de programme
  1100. Exemple:
  1101. (*$F17%)
  1102. 6.5.1.2 MOTIVATION
  1103. Chaque fichier ouvert nécessite une zone de données contenant les informations nécessaires ala
  1104. gestion de ce fichier (nom, taille, date de derniére modification...). Pour économiser la place
  1105. mémoire, le DOS et TURBO ont limité le nombre de fichiers qui peuvent être ouverts à un instant
  1106. donné.
  1107. Si votre programme a besoin de traiter plus de fichiers que le nombre prévu par défaut, il faut le
  1108. préciser en utilisant l'option F.
  1109. 6.5.1.3 FONCTIONNEMENT
  1110. L'option F modifie simplement la valeur du paramètre situé en $2DSE. La routine
  1111. TU_PARAGRAPHS augmente alors la taille de la table des handle utilisés ($0242). Le
  1112. compilateur positionnera alors la première variable globale non pas à $0262 mais après le handle
  1113. du dernier fichier demandé.
  1114. Pour que cette option fonctionne, il faut aussi demander au DOS d’accommoder plus de fichiers.
  1115. Cela doit être effectué au moyen du fichier CONFIG.SYS.
  1116. Mentionnons aussi que rares sont les logiciels nécessitant plus de 4 ou 5 fichiers disques ouverts à
  1117. un même instant. Avant de recourir à l’option F, consultez peut-être un bon ouvrage sur la gestion
  1118. de fichiers...
  1119. AU COEUR DE TURBO PASCAL 422 AU COEUR DE TURBO PASCAL
  1120. LES OPTIONS DE COMPILATION
  1121. 6 .
  1122. = les fichiers: f, g, p Pe
  1123. {6.5.2__LES OPTIONS G ET P
  1124. Lux
  1125. 6.5.2.1 DEFINITION
  1126. mens
  1127. Les options G (Get) et P (Put):
  1128. — permettent de rediriger les fichiers d’entrée et de sortie
  1129. — doivent être placés en début du programme
  1130. Exemple:
  1131. (*$G512, P1024 *)
  1132. 6.5.2.2 MOTIVATION
  1133. Par défaut, le fichier utilisé par READ est le clavier, et le fichier utilisé par WRITE est l’écran.
  1134. Les options G et P permettent d'utiliser comme fichier d'entrée par défaut ou de sortie par défaut
  1135. d’autres périphériques.
  1136. 6.5.2.3 UTILISATION
  1137. Voici un programme qui lit un fichier et met les lettres minuscules en majuscules:
  1138. 0 (* 001 xoptgp *)
  1139. 4 (* 20 aou 87 *)
  1140. 3 (*$r+*)
  1141. 4 (*$g512,p512,d- *)
  1142. 5 PROGRAM option gp;
  1143. 6 VAR caractere: CHAR;
  1144. 7 BEGIN
  1145. 8 WHILE NOT EOF DO
  1146. 9 BEGIN
  1147. 10 READ(caractere);
  1148. 11 WRITE(UPCASE(caractere));
  1149. 12 END;
  1150. 13 END.
  1151. Fig. 6.34 Le programme option_gp.
  1152. AU COEUR DE TURBO PASCAL 423 AU COEUR DE TURBO PASCAL
  1153. ==================== PAGE 19 ====================
  1154. 6 LES OPTIONS DE COMPILATION 6 L
  1155. | 6.5 les fichiers: f, g, p 6.5 A LIBRAIRIE 7
  1156. Pour utiliser ce programme, il faudra le compiler sur disque, puis taper, depuis la ligne de 4
  1157. commande du DOS: ;
  1158. optiongp < source > destination
  1159. {6.6 | CONCLUSION |
  1160. CHAPITRE 7
  1161. | . CP |
  1162. | | Dans ce chapitre nous avons examiné:
  1163. | l'option Include qui permet d'utiliser des textes de n’importe quelle taille j LA LIB RAIRIE
  1164. les options R, I, K, V qui permettent la gestion des erreurs i
  1165. les options U, C, B et D qui modifient le comportement des fichiers d'entrée / sortie
  1166. | les options F G et P qui permettent de modifier le nombre et la nature des fichiers utilisés par
  1167. défaut.
  1168. | | \ Ce chapitre va présenter:
  1169. | a — le contenu de la librairie
  1170. | — les variables globales utilisées
  1171. | |: A la fin de ce chapitre:
  1172. | i — vous connaitrez les points d’entrée des routines utilisées dans le code compilé
  1173. | | À — vous saurez comment sont passés les paramètres aux routines de la librairie
  1174. | il — Vous pourrez afficher le contenu des variables globales utilisées par tout code compilé
  1175. i
  1176. if AU COEUR DE TURBO PASCAL 424 AU COEUR DE TURBO PASCAL ; AU COEUR DE TURBO PASCAL
  1177. 425 AU COEUR DE TURBO PASCAL
  1178. ==================== PAGE 20 ====================
  1179. 7 LA LIBRAIRIE 7
  1180. Wa | la librairie et les globales 74
  1181. {7.1 LA LIBRAIRIE ET LES GLOBALES |
  1182. Nous avons vu au chapitre précédent que le code compilé comportait:
  1183. — des traitements effectués directement en utilisant les registres du 8088
  1184. — des appels à des routines de la librairie
  1185. La librairie comporte des groupes de routines chargées de gérer:
  1186. — les entrées / sorties 4
  1187. — les pointeurs
  1188. les traitements divers (OVERLAYs, STR et VAL, erreurs, nombres aléatoires) à
  1189. — les chaînes À
  1190. les ensembles
  1191. les réels {
  1192. les fichiers (TEXT, READ / WRITE, FILE OF, FILE, directories) à
  1193. — le chaînage des programmes
  1194. Nous allons présenter dans ce chapitre toutes les routines que le compilateur peut invoquer. Pour 1
  1195. chacune de ces routines nous indiquerons quels paramètres elle reçoit et comment elle retourne une
  1196. valeur. |
  1197. Tout programme TURBO PASCAL comporte aussi des variables globales. Ces données sont q
  1198. utilisées: À
  1199. — pour gérer les périphériques
  1200. — comme variables temporaires des routines de la librairie
  1201. Nous présenterons par conséquent ces données, en fournissant un programme qui permet d’en ©
  1202. afficher le contenu. À
  1203. {7.2 LES DONNEES GLOBALES |
  1204. (7.2.1 LA LISTE DES DONNEES GLOBALES
  1205. Voici la liste des variables que le programme peut utiliser: i
  1206. v_attr_norm
  1207. — adresse: $0000
  1208. — valeur de l’attribut de vidéo normale
  1209. v_attr_low
  1210. — adresse: $0001 q
  1211. — valeur de l’attribut de vidéo faible P
  1212. v_reverse i
  1213. — adresse: $0003 a
  1214. — valeur de l’attribut de vidéo inverse if
  1215. AU COEUR DE TURBO PASCAL 426 AU COEUR DE TURBO PASCALE
  1216. 7 LA LIBRAIRIE 1)
  1217. 72 les données globales 72
  1218. v_fenetre_x_bas
  1219. = adresse: $0004
  1220. — marge gauche de la fenêtre texte
  1221. v_fenetre_y_bas
  1222. — adresse: $0005
  1223. — haut de l’écran
  1224. v_mode_ecran
  1225. — adresse: $0006
  1226. — type d’affichage
  1227. v_couleur
  1228. — adresse: $0007
  1229. — couleur actuelle
  1230. v_attribut
  1231. — adresse: $0008
  1232. — attribut d’affichage courant
  1233. v_mode_graphiqu
  1234. — adresse: $0009
  1235. — mode graphique courant
  1236. v_fen_graphxdeb
  1237. — adresse: $000A
  1238. — marge gauche de la fenêtre graphique
  1239. v_fen_graphxfin
  1240. — adresse: $000C
  1241. — marge droite de la fenétre graphique
  1242. v_fen_graphydeb
  1243. - sse: $000E
  1244. — haut de la fenêtre graphique
  1245. v_fen_graphyfin
  1246. — adresse: $0010
  1247. — bas de la fenétre graphique
  1248. v_delai_1
  1249. — adresse: $0012
  1250. — variable utilisée dans le calcul du délai
  1251. v_draw_1
  1252. — adresse: $0014
  1253. — variable temporaire utilisée pour le tracé de droite graphique
  1254. v_draw_4
  1255. — adresse: $0016
  1256. — variable temporaire utilisée pour le tracé de droite graphique
  1257. v_draw_3
  1258. — adresse: $0018
  1259. — variable temporaire utilisée pour le tracé de droite graphique
  1260. AU COEUR DE TURBO PASCAL 427
  1261. AU COEUR DE TURBO PASCAL
  1262. ==================== PAGE 21 ====================
  1263. 7 LA LIBRAIRIE
  1264. ¥ 54 les données globales
  1265. v_draw_6
  1266. = adresse: $001A f \
  1267. — variable temporaire utilisée pour le tracé de droite graphique
  1268. v_draw_2
  1269. = adresse: $001C |
  1270. — variable temporaire utilisée pour le tracé de droite graphique
  1271. v_draw_5
  1272. = adresse: $001E | i
  1273. — variable temporaire utilisée pour le tracé de droite graphique
  1274. v_palette i
  1275. — adresse: $0020
  1276. — palette courante
  1277. v_delai_2
  1278. = adresse: $0021
  1279. — variable utilisée dans le calcul du délai
  1280. v_ofs_deb_free
  1281. — adresse: $0024
  1282. — décalage de la liste des zones du tas libérées par DISPOSE
  1283. v_seg deb _free
  1284. — adresse: $0026
  1285. — segment de la liste des zones du tas libérées par DISPOSE
  1286. v Wf p t_deb
  1287. pe story dos
  1288. — décalage du pointeur de la liste des zones du tas libérées par DISPOSE
  1289. v te t_deb
  1290. sse: $ 2A
  1291. — segment du pointeur de la liste des zones du tas libérées par DISPOSE
  1292. v as
  1293. hi $002C
  1294. - hates d’un pointeur utilisé pour les calculs d’allocation
  1295. v_se 8 tl
  1296. sse: $002E |
  1297. - L'on d’un pointeur utilisé pour les calculs d’allocation
  1298. v_ofs_pointeur
  1299. — adresse: $0030
  1300. — décalage d’un pointeur utilisé pour les calculs d'allocation
  1301. v_seg_pointeur
  1302. — adresse: $0032
  1303. — segment d’un pointeur utilisé pour les calculs d’ allocation
  1304. AU COEUR DE TURBO PASCAL ee AU COEUR DE TURBO PASCA:
  1305. 7 LA LIBRAIRIE
  1306. 7.2 les données globales
  1307. —_—
  1308. v_ofs_p
  1309. a perl $0034
  1310. — décalage d’un pointeur utilisé pour les calculs d’allocation
  1311. v_seg_pt3
  1312. = dr $0036
  1313. — segment d’un pointeur utilisé pour les calculs d’allocation
  1314. y_tampon_read
  1315. = adresse: $0038
  1316. — tampon de lecture clavier
  1317. v_tampon_wrk
  1318. — adresse: $00B8
  1319. — tampon général
  1320. v_adr_test_con
  1321. | = adresse: $0138
  1322. — décalage dans CS de la routine de test du clavier
  1323. v_adr_lis_ con
  1324. — adresse: $013A
  1325. — décalage dans CS de la routine de lecture du clavier
  1326. v_adr_ecris_con
  1327. — adresse: $013C
  1328. — décalage dans CS de la routine d’affichage écran
  1329. v_adr_ecris_Ist
  1330. — adresse: $013E
  1331. — décalage dans CS de la routine d’écriture imprimante
  1332. v_adr_ecris_ aux
  1333. = adresse: $0140
  1334. — décalage dans CS de la routine d’écriture série
  1335. v_adr lis aux
  1336. — adresse: $0142
  1337. — décalage dans CS de la routine de lecture série
  1338. v_adr_ecris_usr
  1339. — adresse: $0144
  1340. — décalage dans CS de la routine d’écriture série 2
  1341. v_adr_lis_usr
  1342. — adresse: $0146
  1343. — décalage dans CS de la routine de lecture série 2
  1344. v_handle_read
  1345. — adresse: $015C .
  1346. — handle de lecture
  1347. v_read_write
  1348. — adresse: $015E
  1349. — temporaire pour distinguer la lecture ou l'écriture
  1350. AU COEUR DE TURBO PASCAL 429 AU COEUR DE TURBO PASCAL
  1351. ==================== PAGE 22 ====================
  1352. 7 LA LIBRAIRIE 7
  1353. 72 les données globales 72 0
  1354. v_debut_glob pg
  1355. — adresse: $0160
  1356. — décalage dans DS du début des globales utilisateur
  1357. — sauvegarde de la taille du tampon précisé avec l’option G
  1358. v_handle_write
  1359. — adresse: $0168
  1360. — handle d'écriture
  1361. v_colonne_max
  1362. — adresse: $016A
  1363. — marge droite de l’écran texte
  1364. v_ligne_max
  1365. — adresse: $016B
  1366. — dernière ligne de l’écran texte
  1367. v_debut_glob 2
  1368. — adresse: $016C
  1369. — décalage dans DS du début des globales utilisateur
  1370. v_SV_output
  1371. — adresse: $016E
  1372. — sauvegarde de la taille du tampon précisé avec l'option P
  1373. v_test_device
  1374. — adresse: $0174
  1375. — variable contenant l’option D
  1376. v_turbo_cs
  1377. — adresse: $0176
  1378. — segment CS de TURBO.COM lors de l’exécution en mémoire
  1379. v_turbo_ds
  1380. — adresse: $0178
  1381. — segment DS de TURBO.COM lors de l’exécution en mémoire
  1382. pt_table_handle
  1383. — adresse: $017A
  1384. — décalage du début de la table des handle
  1385. v_nb fichiers
  1386. — adresse: $017C
  1387. — nombre maximum de fichiers ouverts à un instant (option F)
  1388. v_adr_proc_err
  1389. — adresse: $017E
  1390. — décalage dans CS de la routine d'erreur
  1391. v_num_err_exec
  1392. — adresse: $0180
  1393. — code de l’erreur
  1394. AU COEUR DE TURBO PASCAL 430 AU COEUR DE TURBO PASCAI
  1395. 7 LA LIBRAIRIE ?
  1396. 72 les données globales 22
  1397. y ind_read_max
  1398. Z adresse: $0181
  1399. _ indice maximal du tampon de lecture
  1400. y ind _tamp_read
  1401. = adresse: $0182
  1402. — indice courant du tampon de lecture
  1403. y taille_tmp_rd
  1404. = adresse: $0184
  1405. — indice du dernier caractère lu
  1406. v_find_error_pc
  1407. — adresse: $0188
  1408. — PC d’une erreur
  1409. v_reg_186
  1410. = adresse: $0186
  1411. — variable utilisée pour effectuer les retours lorsque la pile contient des paramètres qu'il faut
  1412. d’abord dépiler
  1413. v_ofs_tas
  1414. — adresse: $018A
  1415. — décalage du sommet du tas (HEAPPTR)
  1416. v_seg_tas
  1417. — adresse: $018C
  1418. — segment du sommet du tas (HEAPPTR)
  1419. v_sv_sp_2
  1420. - sse: $018E
  1421. — sauvegarde de SP pour pouvoir restaurer la pile lors du retour dans TURBO.COM
  1422. v_sv_ofs_int 0
  1423. — adresse: $0190
  1424. — Sauvegarde du décalage du vecteur $00 au moment du lancement du programme
  1425. v_sv_seg_int 0
  1426. — adresse: $0192
  1427. — sauvegarde du segment du vecteur $00 au moment du lancement du programme
  1428. v_car_keypressd
  1429. — adresse: $0194
  1430. — scan code du caractère tapé au moment de KEYPRESSED
  1431. v_clavier
  1432. — adresse: $0196
  1433. — étiquette du clavier d’entrée (option C)
  1434. v_tampon_ovl
  1435. — adresse: $0198
  1436. — tampon contenant le nom d’un fichier OVERLAY
  1437. v_taille_string
  1438. — adresse: $01E8
  1439. — temporaire utilisée par les routines VAL et STR
  1440. AU COEUR DE TURBO PASCAL 431 AU COEUR DE TURBO PASCAL
  1441. ==================== PAGE 23 ====================
  1442. | | 7 LA LIBRAIRIE
  1443. I 7 LA LIBRAIRIE 7
  1444. | ' pe les données globales 72 les données globales 72
  1445. |
  1446. | v_val_ent_reel v_ofs_chai_dest
  1447. | | — adresse: $01E9 = adresse: $0208
  1448. | — temporaire utilisée par les routines VAL et STR — temporaire utilisée par les routines de gestion de chaines
  1449. v_ofs_string v seg _chai_dest
  1450. = adresse: $01EA = adresse: $020A
  1451. | — temporaire utilisée par les routines VAL et STR — temporaire utilisée par les routines de gestion de chaînes
  1452. v_seg string : v_ofs_chai_depart
  1453. — adresse: $01EC 1 ‘adresse: $020C
  1454. — temporaire utilisée par les routines VAL et STR 4 — temporaire utilisée par les routines de gestion de chaines
  1455. v_ofs_ent_reel2 q v_seg_chai_depart
  1456. — adresse: $01EE 4 — adresse: $020E
  1457. — temporaire utilisée par les routines VAL et STR i — temporaire utilisée par les routines de gestion de chaines
  1458. v_seg_ent_reel2 | v_ofs gene
  1459. | = adresse: $01FO = “adresse: $0234 :
  1460. } — temporaire utilisée par les routines VAL et STR 4 — décalage du fichier utilisé pour READ ou WRITE
  1461. | v_ofs resu_val | v_seg fichier
  1462. = adresse: $01F2 | = A $0236
  1463. | — temporaire utilisée par les routines VAL et STR 1 — segment du fichier utilisé pour READ ou WRITE
  1464. | v_seg_resu_val | v_reset_write_a
  1465. | — adresse: $01F4 q — adresse: $023A
  1466. — temporaire utilisée par les routines VAL et STR 1 — variable pour distinguer RESET, REWRITE ou APPEND
  1467. 1 v_tamp_reell q v_err_rd_wr fof
  1468. — adresse: $01F6 } — adresse: Le
  1469. | — temporaire utilisée par les routines VAL et STR } — code d’erreur
  1470. if | 4
  1471. | i v_ofs_random \ v_tamp_lis_reel
  1472. | = adresse: $01FE 4 = adresse: $023C
  1473. | — décalage du nombre aléatoire q — tampon utilisé pour la conversion numérique
  1474. | 4
  1475. | v_erreur_i_o 4 v_table_handle
  1476. | — adresse: $01FC i — adresse: $0242
  1477. | — code d’erreur d'entrée / sortie \l — table des handles des fichiers
  1478. v_seg_random \
  1479. — adresse: $0200 i
  1480. I — ségment du nombre aléatoire |
  1481. y Liu Li ii À (7.2.2 LE PROGRAMME D’AFFICHAGE DES GLOBALES
  1482. = adresse: $0202 |
  1483. — temporaire utilisée par les routines de gestion de chaînes q Voici un programme permettant l’affichage des variables globales:
  1484. | v_ind_ins_del |
  1485. — adresse: $0204 { 0 (* 003 globals *)
  1486. j — temporaire utilisée par les routines de gestion de chaînes 1 (*22aou87 *)
  1487. Li 2
  1488. | v_qt_delete 1 3! CETTE
  1489. \ — adresse: $0206 À 4 PROGRAM affiche globales;
  1490. q — temporaire utilisée par les routines de gestion de chaines A 5 TYPE string80= STRING/80];
  1491. | 4 6 VAR choix: CHAR;
  1492. | | Mf 7 pointeur 1, pointeur2: INTEGER;
  1493. À 8 fichier: FILE OF INTEGER;
  1494. 1 j 9 chaine, chainel, chaine2, chaine3: string80;
  1495. iq 11 10 reel: REAL;
  1496. ‘M ‘i 11 resultat val: INTEGER;
  1497. | AU COEUR DE TURBO PASCAL 432 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 433 AU COEUR DE TURBO PASCAL
  1498. ==================== PAGE 24 ====================
  1499. 7 LA LIBRAIRIE 7
  1500. he les données globales 7.2
  1501. 12
  1502. 13 sortie: TEXT;
  1503. 14 nom_sortie: STRIN G[24];
  1504. 15 ie
  1505. 16 PROCEDURE affiche_octet hexadecimal(p_octet: INTEGER);
  1506. 17 CONST kt_hex: ARRAY/0..15] OF CHAR= '0123456789ABCDEF' ;
  1507. 18 BEGIN
  1508. 19 WRITE(sortie, kt_hex[p_octet DIV 16], kt_hex[p_octet MOD 16]);
  1509. 20 END; (* affiche_octet_hexadecimal *)
  1510. 21
  1511. 22 PROCEDURE affiche_entier_hexadecimal(p_entier: INTEGER);
  1512. 23 BEGIN
  1513. 24 affiche_octet_hexadecimal((p_entier AND $FF00) SHR 8);
  1514. ps) affiche_octet_hexadecimal(p_entier AND $00FF);
  1515. 26 END; (* affiche _entier_hexadecimal *)
  1516. 21 .
  1517. 28 PROCEDURE affiche_memoire(l_segment, L_alignement_debut,
  1518. L_alignement_fin: INTEGER);
  1519. 29 VAR {_ colonne: INTEGER;
  1520. 30 | alignement, |_quantite: INTEGER;
  1521. 31 [ octet: BYTE;
  1522. a BEGIN
  1523. 33 |_alignement:= |_alignement_debut AND $0007;
  1524. 34 [alignement_debut:= |_alignement_debut AND $FFF8;
  1525. 35 (quantite:= T_alignement_fin+ 1- |_alignement_debut;
  1526. 36
  1527. a? REPEAT
  1528. 38 WRITE(sortie, '$’); affiche_entier_hexadecimal(l_segment);
  1529. 39 WRITE(sortie, ’:$’);
  1530. 40 affiche_entier_hexadecimal(|_alignement_debut); WRITE(sortie,’’); *
  1531. 41
  1532. 42 IF | alignement> 0
  1533. 43 THEN BEGIN
  1534. 44 WRITE(sortie, ’’: 4*l_alignement);
  1535. 45 1 colonne:= |_alignement;
  1536. 46 END
  1537. 47 ELSE ! colonne:= 0;
  1538. 48 REPEAT Acs
  1539. 49 1 octet:= mem{[l_segment:|_alignement_debut+ |_colonne];
  1540. 50 WRITE(sortie, ’$');
  1541. 51 affiche_octet_hexadecimal(l_octet); WRITE(sortie, ’ ’);
  1542. se | colonne:= T colonne+ 1;
  1543. 53 UNTIL (L_colonne> 7) OR (l_quaniite- l_colonne<= 0);
  1544. 54
  1545. ph, WRITE(sortie, ’:4* (8- l_colonne),’:’);
  1546. 56 IF | alignement> 0
  1547. 57 THEN BEGIN
  1548. 58 WRITE(sortie, ‘’: |_alignement);
  1549. 59 | colonne:= |_alignement;
  1550. 60 [ alignement:= 0;
  1551. 61 END
  1552. 62 ELSE | _colonne:= 0;
  1553. AU COEUR DE TURBO PASCAL
  1554. 434 AU COEUR DE TURBO PASCAL
  1555. 7 LA LIBRAIRIE
  1556. 7.2 les données globales oe
  1557. e REPEAT
  1558. 1 octet:= mem[I_ se t:l ali :
  1559. pH pith if 27 _alignement_debut+ | colonne];
  1560. 66 THEN WRITE(sortie, CHR(L octet))
  1561. 67 ELSE WRITE(sortie,’.’); ~
  1562. 4 se NAL toed L_colonne+ 1;
  1563. i colonne> 7) OR (1 ite- = 0);
  1564. 70 WRITELNOcnu: ) (l_quantite- |_colonne<= 0);
  1565. 7 LA rnb l_quaniite- 8;
  1566. alignement_debut:= | ali
  1567. 4 UNTIL Leon |_alignement_debut+ 8;
  1568. 4 END; (* affiche_memoire *)
  1569. ped PROCEDURE affiche_donnees_turbo;
  1570. 79 PROCEDURE affiche(p titre: string80; ille:
  1571. 2 aw gr ie sp ring80; p_decalage, p_taille: INTEGER);
  1572. 4 BEGIN
  1573. WRITE(sortie, ’$’ ); affiche _entier_hex i ;
  1574. = WRITE (sortie st uffiche_entier_hexadecimal(dseg);
  1575. bs affiche_entier_hexadecimal(p_decalage); WRITE(sortie, ’ ’);
  1576. 86 WRITE(sortie, p_titre);
  1577. 4 affiche_octet_hexadecimal(p_taille);
  1578. 89 WRITE(sortie, ’ $’);
  1579. 90 IF p_taille> 20
  1580. 91 THEN p _taille:= 20;
  1581. a FOR | _indice:= 0 TO p_taille- 1 DO
  1582. = affiche_octet_hexadecimal(mem|[dseg: p_decalage+ l_indice]);
  1583. 95 WRITELN(sortie);
  1584. > END; (* affiche *)
  1585. 98 BEGIN (* affiche_donnees_turbo *
  1586. M WRITELN('globales turbo’); {
  1587. 101 affiche('v_attr norm ‘, $0000, 1);
  1588. 102 affiche(’v_attr_low ?, $0001, 1).
  1589. 103 affiche(’k_atir_reverse ', $0003, 1);
  1590. 104 affiche('v_fenetre_x_bas’, $0004, 1);
  1591. 105 affiche('v_fenetre_y_bas’, $0005, 1);
  1592. 106 affiche(’v_mode_ecran ', $0006, 1);
  1593. 107 affiche(’v_couleur _’, $0007, 1);
  1594. 108 affiche(’v_attribut ’, $0008, 1);
  1595. 109 affiche(’v_mode_graphiqu’, $0009, 1);
  1596. 110 affiche('v _fen_graphxdeb , $000A, 2);
  1597. 111 affiche('v_fen_graphxfin’, $000C, 2);
  1598. 112 affiche(’v_fen_graphydeb ', $000E, 2);
  1599. a affiche(’v_fen_graphyfin ’, $0010, 2);
  1600. : re affiche('v_delai 1 ’,$0012,2);
  1601. AU COEUR DE TURBO PASCAL 435 AU COEUR DE TURBO PASCAL
  1602. L
  1603. ==================== PAGE 25 ====================
  1604. LA LIBRAIRIE
  1605. LA LIBRAIRIE
  1606. 72 les données globales les données globales
  1607. 117 affiche( v_draw_1 *, $0014, 2); affiche(’v_ofs_tas ’, $018A, 2);
  1608. 118 affiche(’v_draw_4 *, $0016, 2); affiche('v_seg tas ’,$018C, 2);
  1609. 119 affiche(’v_draw_3 ”, $0018, 2); affiche(’v_sv_sp 2 ’, $018E, 2);
  1610. 120 affiche('v_draw 6 ’,$001A,2); affiche('v_sv_ofs_int_0 ”, $0190, 2);
  1611. 121 affiche('v_draw_2 ”, $001C, 2); affiche('v_sv_seg_int 0 ’, $0192, 2);
  1612. 122 affiche(’v_draw_5 ”, $001E, 2); 180 affiche('v_car_keypressd’ , $0194, 2);
  1613. 123 affiche('v_palette ”, $0020, 1); 15 affiche(’v_clavier ‘, $0196, 2);
  1614. 124 1
  1615. 125 affiche('v_delai 2 ’,$0021,2); 15 affiche(’v_tampon_ovl ’, $0198, $40);
  1616. 126 1
  1617. 127 affiche('v_ofs_deb_free ’, $0024, 2); 185 affiche(’v_taille_string’, $01E8, 1);
  1618. 128 affiche(’v_seg deb free ’, $0026, 2); 186 affiche(’v_val_ent_reel ’, $01E9, 1);
  1619. 129 affiche(’v_ofs_pt_deb_fr’, $0028, 2); 187 affiche('v_ofs string ', $01EA, 2);
  1620. 130 affiche(’v_seg_pt_deb fr’, $002A, 2); 188 affiche('v_seg_ string ', $01EC, 2);
  1621. 131 affiche(’v_ofs ptI , $002C, 2); 189 affiche(’v_ofs_ent_reel2’, $01EE, 2);
  1622. 132 affiche('v_seg ptl ', $002E, 2); 190 affiche(’v_seg_ent_reel2’, $01FO, 2);
  1623. 133 affiche('v_ofs_pointeur ’, $0030, 2); } 191 affiche('v_ofs_resu_val ’, $01F2, 2);
  1624. | 134 affiche(’v_seg_pointeur ’, $0032, 2); 4 : 192 affiche('v_seg_resu_val ’, $01F4, 2);
  1625. 135 affiche(’v_ofs pt3 —’, $0034, 2); À | 193 affiche('v_tamp_reëll ’, $01F6, 6);
  1626. 136 affiche('v_seg_pt3 ”, $0036, 2); il Ê 194 affiche('v_ofs_ random ', $01FE, 2);
  1627. 127 i 195 affiche(’v_erreur_i_o ', $01FC, 2);
  1628. 138 affiche(’v_tamp_read_ ’, $0038, $40); À i 196 affiche('v_seg_random ’, $0200, 2);
  1629. | 139 affiche(’v_tampon_wrk ', $00B8, $40); 1 | 197 :
  1630. 140 M ; 198 affiche('v_taille ch des, $0202, 2);
  1631. | 141 affiche(’v_adr_test_con ’, $0138, 2); ‘ | 199 affiche(’v_ind_ins_del ’, $0204, 2);
  1632. | 142 affiche('v_adr_lis_con ', $013A, 2); 4 200 ' affiche(’v_qt delete ', $0206, 2);
  1633. 143 affiche(’v_adr_ecris_con’, $013C, 2); | 201 affiche('v_ofs_chai_dest’, $0208, 2);
  1634. | 144 affiche('v_adr_ecris_lst', $013E, 2); } 202 affiche(’v_seg_chai_dest’, $020A, 2);
  1635. 145 affiche('v_adr_ecris_aux’, $0140, 2); | 203 affiche(’v_ofs_chai_dept’, $020C, 2);
  1636. 146 affiche('v_adr_lis_ aux ', $0142, 2); 4 204 affiche('v_seg_chai_dept’, $020E, 2);
  1637. i | 147 affiche(’v_adr_ecris_usr’, $0144, 2); a 205
  1638. {| | 148 affiche(’v_adr_lis_clav ’, $0146, 2); à 206 affiche(’pt_handle _’, $0234, 2);
  1639. i) 149 à 207 affiche(’v_sv_ds_es_fich’, $0236, 2);
  1640. || 150 I 208 affiche(’v_reset_write_a’, $023A, 1);
  1641. | 151 affiche(’v_handle_read ', $015C, 2); q | 209 affiche(’v_err_rd_wr fof’, $023B, 1);
  1642. | | 152 affiche(’v_read_write ', $015E, 2); q 210 affiche(’v_tamp_lis_reel’, $023C, 6);
  1643. || 153 affiche(’v_debut_glob_pg ’, $0160, 2); | 211
  1644. ll 154 affiche(’v_sv_input ’, $0162, 2); 4 212 affiche(’k_table_handle ’, $0242, $10);
  1645. | 155 affiche('v_handle_write ’, $0168, 2); 1 213 END; (* affiche _donnees_turbo *)
  1646. 156 affiche(’v_colonne_max ’, $016A, 1); ! 214
  1647. 157 affiche('v_ligne max ’, $016B, 1); 4 215 PROCEDURE status;
  1648. 158 affiche('v_debut_glob_2 ’, $016C, 2); | 216 VAR /_adresse: INTEGER;
  1649. D 159 affiche('v_sv_output ’, $016E, 2); N 217
  1650. 160 4 218 PROCEDURE affiche_pointeur_hexadecimal(p_segment, p_alignement:
  1651. 161 affiche(’v_test_device ’', $0174, 2); | INTEGER); i
  1652. 162 affiche('v_turbo_cs ’, $0176, 2); } 219 BEGIN
  1653. 163 affiche('v_turbo_ds ”, $0178, 2); {il 220 affiche _entier_hexadecimal(p_segment);
  1654. 164 221 WRITÉ (sortie, ’:’);
  1655. | 165 affiche(’pt_table_handle’, $017A, 2); 4 222 affiche_entier_hexadecimal(p_alignement);
  1656. 166 affiche('v_nb fichiers ’, $017C, 2); ia | 223 END; (* affiche_pointeur_hexadecimal *)
  1657. rf 167 affiche('v_adr_proc_err ”, $017E, 2); 1 224
  1658. | 168 affiche(’v_num_err_exec ', $0180, 1); » 1 225 BEGIN (* status *)
  1659. 169 affiche('v_read ”, $0181, 1); q 226 WRITE(sortie, ’cs: $’);
  1660. 170 affiche('v_ind_tamp_read ’ , $0182, 2); , 227 affiche_entier_hexadecimal(cseg);
  1661. 171 affiche(’v_taille_tmp_rd’, $0184, 2); 4 1
  1662. | | 172 affiche(’v_find_error_pc’, $0188, 2); 4
  1663. L 173 affiche('v_reg_186 ’,$0186,2); q :
  1664. n | 174 4
  1665. i
  1666. |. |
  1667. 1 | AU COEUR DE TURBO PASCAL 436 AU COEUR DE TURBO PASCA AU COEUR DE TURBO PASCAL : 437 AU COEUR DE TURBO PASCAL
  1668. 4 , | i
  1669. ==================== PAGE 26 ====================
  1670. mm | 7 LA LIBRAIRIE 7 LA LIBRAIRIE 7
  1671. | 72 les données globales 72 12 les données globales 73
  1672. |
  1673. | | 228 WRITE(sortie, ’:$0100, pg: $'); 282 ’s’ : BEGIN
  1674. | 229 L'adresse:= memw[cseg:$101]; 283 WRITE('nom sortie <a:essai.txt> ? ‘);
  1675. | 230 affiche entier_hexadecimal(l_adresse+ $0103); 284 READLN(nom_sortie);
  1676. 231 WRITE (sortie, ’, ds: $'); | 285 CLOSE(sortie);
  1677. 232 affiche_entier_hexadecimal(dseg); 4 286 ASSIGN(sortie, nom_sortie);
  1678. 233 WRITE (sortie, ’, heapptr: $'); i i 287 REWRITE(sortie);
  1679. 234 affiche_pointeur_hexadecimal(memw[SEG{(heapptr):OFS(heapptr)+ 2], i 288 END;
  1680. 235 memw[SEG(heapptr):OFS(heapptr)]); 4 4 289 END; Ei
  1681. | 236 WRITE(sortie, ’, ss: $’); 290 UNTIL choix= 'q’;
  1682. 237 affiche_entier_hexadecimal(sseg); 1 291 CLOSE(sortie);
  1683. | 238 WRITELN(sortie); 292 END. (* principal *)
  1684. | 239 END; (* status *) q ;
  1685. | 240 ; } Fig. 7.1 Le programme affiche_globales.
  1686. | 241 overlay PROCEDURE procedure_overlay; qi
  1687. 242 BEGIN \
  1688. 243 END; (* PROCEDURE overlay *) !
  1689. 244 j
  1690. 245 PROCEDURE initialise; À {7.23 L’AFFICHAGE DES GLOBALES
  1691. q 246 BEGIN |
  1692. If 247 nom_sortie:= 'CON.’; pie
  1693. 248 ASSIGN(sortie, nom_sortie); Voici le contenu brut de la zone des globales:
  1694. | 249 REWRITE(sortie);
  1695. | 250
  1696. | 251 window(2, 2, 78, 23); | cs: $1392:$0100, pg: $2D4D, ds: $17F3, heapptr: $1844:0000, ss: $6000
  1697. er graphwindow($11, $22, $33, $44); m
  1698. 25 4
  1699. 254 NEW(pointeurl): $17F3:$0000 $OF $07 $07 $70 $01 $01 $07 $00 :...p....
  1700. n 255 NEW(pointeur2); NEW(pointeurl); NEW(pointeur1); 4 $17F3:$0008 $OF $FF $11 $00 $33 $00 $22 $00 :....3.".
  1701. 256 DISPOSE(pointeur2); j $17F3:$0010 $44 $00 $43 $00 $00 $00 $00 $00 :D.C.....
  1702. 557 i $17F3:$0018 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1703. | | 258 ASSIGN(fichier, 'STOCK.DTA'); } $17F3:$0020 $00 $43 $00 $00 $08 $00 $42 $18 :.C....B.
  1704. | 259 REWRITE(fichier); 7 $17F3:$0028 $63 $02 $F3 $17 $08 $00 $00 $00 :c.......
  1705. | | 260 | $17F3:$0030 $24 $00 $F3 $17 $08 $00 $00 $00 :$.......
  1706. | 261 WRITE(’reel <16.25> ?’); READLN(reel); | $17F3:$0038 $62 $3A $72 $65 $73 $75 $2E $70 :b:resu.p
  1707. 262 i $17F3:$0040 $61 $73 $1A $00 $00 $00 $00 $00 :as......
  1708. | 263 procedure_overlay; $17F3:$0048 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1709. | 264 i $17F3:$0050 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1710. i 265 VAL/(’ 1.75’, reel, resultat_val); $17F3:$0058 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1711. | 266 STR(48.50, chaine); À $17F3:$0060 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1712. | 267 Ë $17F3:$0068 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1713. 268 chainel:= "ABC"; chaine2:= ’ABCD’ ; } $17F3:$0070 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1714. | 269 INSERT(chainel, chaine2, $11); ri $17F3:$0078 $00 $00 $00 $00 $00 $00 $00 $00 Parag Pir A
  1715. 270 DELETE(chaine3, $22, $33); i $17F3:$0080 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1716. 271 END; (* initialise *) 4 $17F3:$0088 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1717. 272 à $17F3:$0090 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1718. 273 BEGIN (* principal *) 1 $17F3:$0098 $00 $00 $00 $00 $00 $00 $00 $00 :........ 4
  1719. 274 inition $17F3:$00A0 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1720. | 275 REPEAT j $17F3:$00A8 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1721. 276 status; $17F3:$00B0 $00 $00 $00 $00 $00 $00 $00 $00 :........
  1722. 274 WRITE('m(emoire, g(lobales, q(uitte ?’); | $17F3:$00B8 $62 $3A $72 $65 $73 $75 $2E $70 :b:resu.p
  1723. |)" 278 READ(KBD, choix); WRITELN(sortie, choix); a $17F3:$00C0 $61 $73
  1724. | 279 CASE choix OF 4 $17F3:$00C8 $00 $00
  1725. 280 ’g’ : affiche_donnees_turbo; | $17F3:$00D0 $00 $00
  1726. 281 ’m' : affiche_memoire(dseg, 0, $262); i; $17F3:$00D8 $00 $00
  1727. | re 1 $17F3:$00E0 $00 $00
  1728. iT | $17F3:$00E8 $00 $00
  1729. | 4 a $17F3:$00F0 $00 $00
  1730. À .
  1731. | AU COEUR DE TURBO PASCAL 438 AU COEUR DE TURBO PASCAL q AU COEUR DE TURBO PASCAL 439 AU COEUR DE TURBO PASCAL
  1732. ==================== PAGE 27 ====================
  1733. 12
  1734. les données globales
  1735. LA LIBRAIRIE
  1736. $17F3
  1737. $17E3
  1738. $17F3
  1739. $17F3
  1740. $17F3
  1741. $17F3
  1742. $17F3
  1743. $17F3
  1744. $17F3
  1745. $17F3:
  1746. :$0158
  1747. :$0160
  1748. $17F3
  1749. $17F3
  1750. $17F3:
  1751. :$0170
  1752. :$0178
  1753. :$0180
  1754. :$0188
  1755. :$0190
  1756. :$0198
  1757. :$01A0
  1758. $17F3
  1759. $17F3
  1760. $17F3
  1761. $17F3
  1762. $17F3
  1763. $17F3
  1764. $17F3
  1765. $17F3:
  1766. :$01B0
  1767. :$01B8
  1768. :$01C0
  1769. :$01C8
  1770. :$01D0
  1771. :$01D8
  1772. $17F3
  1773. $17F3
  1774. $17F3
  1775. $17F3
  1776. $17F3
  1777. $17F3
  1778. $17F3:
  1779. $17F3:
  1780. :$01F0
  1781. :$01F8
  1782. :$0200
  1783. :$0208
  1784. $17F3
  1785. $17F3
  1786. $17F3
  1787. $17F3
  1788. SLTE 33
  1789. :$0218
  1790. :$0220
  1791. :$0228
  1792. $17F3
  1793. $17F3
  1794. $17F3
  1795. $17F3;
  1796. :$0238
  1797. :$0240
  1798. :$0248
  1799. $17F3
  1800. $17F3
  1801. $17F3
  1802. $17F3:
  1803. :$0258
  1804. $17F3
  1805. $17F3:
  1806. :$00F8
  1807. :$0100
  1808. :$0108
  1809. :$0110
  1810. :$0118
  1811. :$0120
  1812. :$0128
  1813. :$0130
  1814. $17F3:
  1815. $17F3:
  1816. :$0148
  1817. $0138
  1818. $0140
  1819. $0150
  1820. $0168
  1821. $01A8
  1822. $O1E0
  1823. SOIES
  1824. $0210
  1825. $0230
  1826. $0250
  1827. $0260
  1828. $00
  1829. $00
  1830. $00
  1831. $00
  1832. $00
  1833. $00
  1834. $00
  1835. $00
  1836. $00
  1837. $08
  1838. $08
  1839. $FF
  1840. $FF
  1841. $FF
  1842. $02
  1843. $FF
  1844. $00
  1845. $10
  1846. $7E
  1847. $00
  1848. $31
  1849. $6C
  1850. $30
  1851. $00
  1852. $00
  1853. $00
  1854. $00
  1855. $00
  1856. $00
  1857. $00
  1858. $00
  1859. $01
  1860. $17
  1861. $00
  1862. $00
  1863. $03
  1864. $33
  1865. $00
  1866. $00
  1867. $38
  1868. $00
  1869. $00
  1870. $02
  1871. $00
  1872. $00
  1873. $00
  1874. $00
  1875. $00
  1876. $00
  1877. $00
  1878. $00
  1879. $26
  1880. $06
  1881. $Cl
  1882. $6D
  1883. $00
  1884. $00
  1885. $00
  1886. $00
  1887. $00
  1888. $00
  1889. $00
  1890. $00
  1891. $08
  1892. $09
  1893. $00
  1894. $00
  1895. $00
  1896. Fig. 7.2 La zones des globales
  1897. AU COEUR DE TURBO PASCAL
  1898. 440
  1899. AU COEUR DE TURBO PASCAL
  1900. LA LIBRAIRIE
  1901. les données globales 72
  1902. Et voici le contenu interprété:
  1903. cs: $1392:$0100, pg: $2D4D, ds: $17F3, heapptr: $1844:0000, ss: $6000
  1904. $17F3:$0000 v_attr_norm 01 $0F
  1905. $17F3:$0001 v_attr_ low 01 $07
  1906. $17F3:$0003 k_attr_reverse 01 $70
  1907. $17F3:$0004 v_fenetre_x_bas 01 $01
  1908. $17F3:$0005 v_fenetre_y_bas 01 $01
  1909. $17F3:$0006 v_mode_ecran 01 $07
  1910. $17F3:$0007 v_couleur 01 $00
  1911. $17F3:$0008 v_attribut 01 SOF
  1912. $17F3:$0009 v_mode_graphiqu 01 $FF
  1913. $17F3:$000A v_fen_graphxdeb 02 $1100
  1914. $17F3:$000C v_fen_graphxfin 02 $3300
  1915. $17F3:$000E v_fen_graphydeb 02 $2200
  1916. $17F3:$0010 v_fen_graphyfin 02 $4400
  1917. $17F3:$0012 v_delai_1 02 $4300
  1918. $17F3:$0014 v_draw_l 02 $0000
  1919. $17F3:$0016 v_draw_4 02 $0000
  1920. ft ce 8 v_draw_3 02 $0000
  1921. 17F3:$001A v_draw_6 02 $0000
  1922. $17F3:$001C v_draw_2 02 $0000
  1923. $17F3:$001E v_draw_5 02 $0000
  1924. $17F3:$0020 v_palette 01 $00
  1925. $17F3:$0021 v_delai_2 02 $4300
  1926. $17F3:$0024 v_ofs_deb_free 02 $0800
  1927. $17F3:$0026 v_seg_deb_free 02 $4218
  1928. $17F3:$0028 v_ofs_pt_deb_fr 02 $6302
  1929. $17F3:$002A v_seg_pt_deb_fr 02 $F317
  1930. $17F3:$002C v_ofs_ptl 02 $0800
  1931. $17F3:$002E v_seg_ptl 02 $0000
  1932. $17F3:$0030 v_ofs_pointeur 02 $2400
  1933. $17F3:$0032 v_seg_pointeur 02 $F317
  1934. $17F3:$0034 v_ofs_pt3 02 $0800
  1935. $17F3:$0036 v_seg_pt3 02 $0000
  1936. $17F3:$0038 v_tamp_read 40 $623A726573752E7061731A0000...
  1937. $17F3:$00B8 v_tampon_wrk 40 $623A726573752E706173003000...
  1938. $17F3:$0138 v_adr_test con 02 $0D08
  1939. $17F3:$013A v_adr_lis_con 02 $2608
  1940. ‘$17F3:$013C v_adr_ecris con 02 $5908
  1941. $17F3:$013E v_adr_ecris_Ist 02 $F608
  1942. $17F3:$0140 v_adr_ecris_aux 02 $FE08
  1943. $17F3:$0142 v_adr_lis_aux 02 $0609
  1944. $17F3:$0144 v_adr_ecris_usr 02 $5908
  1945. $17F3:$0146 v_adr_lis_clav 02 $2608
  1946. AU COEUR DE TURBO PASCAL 441 AU COEUR DE TURBO PASCAL
  1947. ==================== PAGE 28 ====================
  1948. 7 LA LIBRAIRIE 7
  1949. 72 les données globales 72
  1950. $17F3:$015C v_handle_ read 02 $FFFF
  1951. $17F3:$015E v_read_write 02 $E11A
  1952. $17F3:$0160 v_debut_glob_pg 02 $6202
  1953. $17F3:$0162 . v_sv_input 02 $0000
  1954. $17F3:$0168 v_handle_write 02 $FFFF
  1955. $17F3:$016A v_colonne max 01 $Cl
  1956. $17F3:$016B v_ligne_max 01 $00
  1957. $17F3:$016C v_debut_glob_2 02 $6202
  1958. $17F3:$016E v_sv_output 02 $0000
  1959. $17F3:$0174 v_test_device 02 $0700
  1960. $17F3:$0176 v_turbo_cs 02 $7B06
  1961. $17F3:$0178 v_turbo_ds 02 $3F10
  1962. $17F3:$017A pt_table_handle 02 $4202
  1963. $17F3:$017C v_nb_fichiers 02 $1000
  1964. $17F3:$017E v_adr_proc_err 02 $8110
  1965. $17F3:$0180 v_num_err_exec 01 $00
  1966. $17F3:$0181 v_ind_read_max 01 $7E |
  1967. $17F3:$0182 v_ind_tamp_read 02 $4300 |
  1968. $17F3:$0184 v_taille tmp rd 02 $4300
  1969. $17F3:$0188 v_find_error pc 02 $0000
  1970. $17F3:$0186 v_reg_186 02 $EE2D
  1971. $17F3:$018A v_ofs_tas 02 $0000 {
  1972. $17F3:$018C v_seg_tas 02 $4418 q
  1973. $17F3:$018E v_sv_sp_2 02 $FEFF
  1974. $17F3:$0190 v_sv_ofs_int_0 02 $4331 À
  1975. $17F3:$0192 v_sv_seg int O0 02 $DBOO0 4
  1976. $17F3:$0194 v_car_keypressd 02 $0000
  1977. $17F3:$0196 v_clavier 02 $0100 j
  1978. $17F3:$0198 v_tampon_ovl 40 $006C6F62616C732E303030000... |
  1979. $17F3:$01E8 v_taille_string 01 $50
  1980. $17F3:$01E9 v_val_ent_reel 01 $01 4
  1981. $17F3:$01EA v_ofs_string 02 $B702 É
  1982. $17F3:$01EC v_seg_string 02 $F317
  1983. $17F3:$0IEE v_ofs_ent_reel2 02 $FBO3 ;
  1984. $17F3:$01FO v_seg_ent_reel2 02 $F317 1
  1985. $17F3:$01F2 v_ofs_resu_val 02 $0104 :
  1986. $17F3:$01F4 v_seg_resu_val 02 $F317
  1987. {
  1988. $17F3:$01F6 v_tamp_reell 06 $860000000042 1
  1989. $17F3:$01FE v_ofs_random 02 $0000 Î
  1990. $17F3:$01FC v_erreur_i_o 02 $0000 q
  1991. $17F3:$0200 v_seg_random 02 $0000 {
  1992. $17F3:$0202 v_taille ch des 02 $5000
  1993. $17F3:$0204 v_ind_ins_del 02 $2200 4
  1994. $17F3:$0206 v_qt_delete 02 53300 i
  1995. $17F3:$0208 v_ofs_chai_dest 02 $AA03
  1996. $17F3:$020A v_seg_chai_dest 02 $F317 |
  1997. $17F3:$020C v_ofs_chai dept 02 $F4FF |
  1998. $17F3:$020E v_seg_chai_dept 02 $0060 4
  1999. AU COEUR DE TURBO PASCAL 442
  2000. AU COEUR DE TURBO PASCAL M
  2001. LA LIBRAIRIE
  2002. les données globales
  2003. $17F3:$0234
  2004. $17F3:$0236
  2005. $17F3:$023A
  2006. $17F3:$023B
  2007. $17F3:$023C
  2008. $17F3:$0242
  2009. v_ofs_fichier
  2010. v_seg_fichier
  2011. v_reset_write_a
  2012. v_err_rd_wr_fof
  2013. v_tamp_lis_reel
  2014. k_table_handle
  2015. 02
  2016. 02
  2017. 01
  2018. 01
  2019. 06
  2020. 10
  2021. $0304
  2022. $F317
  2023. $01
  2024. $00
  2025. $850000000002
  2026. $05000600000000000000000000...
  2027. Fig. 7.3 Le contenu des globales .
  2028. (7.3
  2029. LES ROUTINES DE LA LIBRAIRIE |
  2030. {7.3.1
  2031. LES ROUTINES PRESENTEES
  2032. Nous allons présenter ici toutes les routines que le code généré appelle directement. Pour chaque
  2033. routine nous indiquerons:
  2034. — son adresse
  2035. — les paramètres que la routine attend en entrée. Ces paramètres sont soit des valeurs situéés dans
  2036. des registres, soit des valeurs sur la pile. Pour la pile, nous présenterons les paramètres dans
  2037. l’ordre dans lequel ils sont poussés sur la pile: x1, yl signifie que x1 a été poussé d’abord, et yl
  2038. ensuite. Compte tenu de la compilation en une passe, les premiers paramètres rencontrés lors de
  2039. la compilation sont en général les premiers poussés sur la pile. Par exemple lors de la
  2040. compilation de:
  2041. WINDOW(x1,
  2042. yl, x2, y2);
  2043. le code pousse x1, puis yl, puis x2 et met la valeur de y2 dans AX.
  2044. — le résultat de la routine.
  2045. { 7.3.2
  2046. LES ENTREES. SORTIES
  2047. Voici les routines chargées de la gestion des entrées / sorties:
  2048. TU_DELAY
  2049. — adresse: $01C0
  2050. — entrée: durée en millisecondes dans AX
  2051. — sortie: attente correspondant au paramètre
  2052. — utilise des boucles soigneusement calibrées pour réaliser la temporisation
  2053. AU COEUR DE TURBO
  2054. PASCAL
  2055. 443
  2056. AU COEUR DE TURBO PASCAL
  2057. ==================== PAGE 29 ====================
  2058. 7 LA LIBRAIRIE 7 7 LA LIBRAIRI
  2059. 7.3 les routines de la librairie 73 73 les routines de la ne si
  2060. TU_CLRSCR TU_WHEREY
  2061. — adresse: $01EF — adresse: $0341
  2062. — sortie: valeur de y dans AL, $00 dans AH
  2063. — utilise I’interruption $10, pour purger l’écran, dimensionner la fenêtre, initialiser le mode
  2064. ¥ — invoque l’interruption $10 du BIOS, recalcule la position relative a la fenétre, ajoute 1
  2065. TU_DELLINE {
  2066. — adresse: $0223 i TU_WINDOW
  2067. — utilise l’interruption $10 du BIOS pour dérouler l’écran en effaçant la ligne 1 — adresse: $034F
  2068. 4 - oar: la pile: x1, yl, x2. AX= y2
  2069. 4 — met à jour les paramètres de la fenêtre (v_fenetre_x bas, v fenetre y b
  2070. TUS S | v_ligne_max), et affiche le curseur si la ph au contient le Goh ata need ‘ato
  2071. - sse:
  2072. — utilise l'interruption $10 du BIOS pour dérouler l'écran en créant une nouvelle ligne |
  2073. y TU_TEXTCOLOR
  2074. \ — adresse: $036C
  2075. TU_LOWVIDEO 1 - entrée: AX contient le code de la couleur
  2076. — adresse: $0258 ; — met a jour l’attribut courant (v_attribut)
  2077. — place dans l’attribut courant (v_attribut) la valeur de l’attribut de vidéo faible (v_artr_low) À
  2078. TU_TEXTBACKGRO
  2079. TU_HIGHVIDEO ‘1 — adresse: $0380
  2080. — adresse: $0261 A — entrée: AX contient le code de la couleur
  2081. — 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)
  2082. My "
  2083. TU_CLREOL | TU_GRAPHCOLORMODE
  2084. — adresse: $0271 ai q — adresse: $03BF
  2085. — utilise l’interruption $10 du BI 1 — initialise le mode graphique (v mode graphi, ilise l’i i 7
  2086. q définir la palette, initialise la fenêtre graphique), utilise l'interruption $10 du “BIOS pour
  2087. i
  2088. TU_CRTINIT a
  2089. — adresse: $028E M TU_GRAPHMODE
  2090. — utilise l’interruption $10 du BIOS pour initialiser l'écran et la fenêtre i — adresse: $03C9
  2091. 1 — initialise le mode graphique (v mode graph: tilise l’i i
  2092. 1 définir la palette, initialise la fenêtre D ER OR
  2093. TU_TEXT_MODE
  2094. — adresse: $0295
  2095. j TU_HIRES
  2096. TU_CRTEXIT a ty oye
  2097. | — initialise le mode graphique (v mode graphique), utilise l'i i
  2098. — adresse: $0308 À définir la palette, initialise la fenêtre, inflalise y pis eT … |
  2099. — ne fait rien
  2100. À TU_GRAPHBACKGROUND
  2101. TU_UPCASE q — adresse: $03E0
  2102. — adresse: $0330 q — entrée: AX= la couleur
  2103. — entrée: caractère dans AL, $00 dans AH \ — met à jour la palette (v_palette) et utilise l'interruption $10 du BIOS
  2104. — sortie: caractère en majuscule dans AL
  2105. — saute à la routine MAJUSCULE ($0A63) qui passe les lettres en majuscule \
  2106. | TU_PALETTE
  2107. | — adresse: $03FB
  2108. Lee 10 ; — entrée: AX= la palette
  2109. — adresse: 4 — met à jour la palette (v_palette) et utilise l’i i
  2110. — sortie: valeur de x dans AL, $00 dans AH À 1 “a anne die FE
  2111. — invoque l'interruption $10 du BIOS, recalcule la position relative à la fenêtre, ajoute 1 4
  2112. |
  2113. i"
  2114. AU COEUR DE TURBO PASCAL 444 AU COEUR DE TURBO PASCAL M AU COEUR DE TURBO PASCAL 445 AU COEUR DE TURBO PASCAL
  2115. ==================== PAGE 30 ====================
  2116. 7 LA LIBRAIRIE ny 7
  2117. 73 les routines de la librairie 7.3
  2118. TU HIRESCOLOR
  2119. — ‘adresse: $0426
  2120. — entrée: AX= la couleur
  2121. — utilise l’interruption $10 du BIOS
  2122. TU_GRAPHWINDOW
  2123. — adresse: $042F
  2124. — entrée: Sur la pile: x1, yl, x2. AX= y2. À
  2125. — met à jour les paramètres de la fenêtre graphique
  2126. TU_PLOT
  2127. — adresse: bat ge a
  2128. — entrée: Sur la pile: x et y. AX= la couleur. \
  2129. — vérifie que le Enr est Lx la fenêtre et utilise l’interruption $10 du BIOS
  2130. TU_DRAW
  2131. — adresse: $048A
  2132. — entrée: Sur la pile: x1, yl, x2, y2. AX= la couleur.
  2133. — utilise TU_PLOT pour tracer le trait
  2134. TU_SOUND
  2135. — adresse: $054D
  2136. — entrée: AX= la fréquence en Hertz ;
  2137. — émet vers les ports de sortie $42, $43 et $61, et Lit le port $61
  2138. TU_NOSOUND
  2139. — adresse: $0574
  2140. — écrit et lit le port $61
  2141. (7.3.3 LA GESTION DES POINTEURS
  2142. Voici les routines chargées de la gestion des pointeurs:
  2143. TU_GETMEM ‘
  2144. — adresse: $057 ;
  2145. — entrée: Sur la pile: le segment et le décalage du pointeur. AX= le nombre d’octets à allouer.
  2146. TU_NEW va
  2147. — adresse: $05A F :
  2148. — entrée: Sur la pile: le segment du pointeur. DI= le décalage du pointeur, CX= la taille de la
  2149. cellule pointée.
  2150. TU_FREEMEM
  2151. — adresse: $0672 1 ; BA
  2152. — entrée: Sur la pile: le segment et le décalage du pointeur. AX= le nombre d’octets à libérer.
  2153. AU COEUR DE TURBO PASCAL 446 AU COEUR DE TURBO PASCAL
  2154. 7 LA LIBRAIRIE 7
  2155. 73 les routines de la librairie 73
  2156. TU_DISPOSE
  2157. — adresse: $0677
  2158. — entrée: Sur la pile: le segment du pointeur. DI= le décalage du pointeur, CX= la taille de la
  2159. cellule pointée.
  2160. TU_MEMAVAIL
  2161. — adresse: $0795
  2162. — sortie: AX= le nombre de paragraphes libres
  2163. TU_MAXAVAIL
  2164. — adresse: $07D2
  2165. — sortie: AX= le nombre de paragraphes du plus gros espace libre d’un seul tenant
  2166. TU_MARK
  2167. — adresse: $07D8
  2168. — entrée: Sur la pile: le segment du pointeur qui stockera la position actuelle du sommet du tas.
  2169. DI= le décalage de ce pointeur.
  2170. TU_RELEASE
  2171. — adresse: $07EA
  2172. — entrée: Sur la pile: le segment du pointeur qui contient la position actuelle du sommet du tas.
  2173. DI= le décalage de ce pointeur.
  2174. {7.34 ROUTINES DIVERSES
  2175. Voici des routines ayant des fonctions très différentes:
  2176. TU_PARAGRAPHS
  2177. — adresse: $0A99
  2178. — Chargé d’initialiser le contexte avant l'exécution d’un programme PASCAL. Se charge:
  2179. — de vérifier que la version DOS est correcte
  2180. — de vérifier que la mémoire disponible est suffisante, en utilisant les paramètres situés de
  2181. $2D56 à $2D5D (taille du code, des globales et du tas)
  2182. — d’initialiser le tas et les listes de cellules libres
  2183. — de demander au DOS d’allouer la mémoire
  2184. — de sauvegarder l’environnement de TURBO.COM en cas de compilation mémoire
  2185. — d’allouer la place pour les fichiers si vous avez demandé plus de $10 fichiers
  2186. — de mettre en place les routines de gestion de l'interruption 0 et 3
  2187. — d'ouvrir les fichiers d’entrée et de sortie si vous avez utilisé les options G et P
  2188. — d’initialiser l'écran
  2189. TU_HALT
  2190. — adresse: $0C40
  2191. — invoqué à la fin de chaque programme. Se charge:
  2192. — de fermer les fichiers
  2193. — de retourner dans TURBO.COM ou de terminer le programme
  2194. AU COEUR DE TURBO PASCAL - 447
  2195. AU COEUR DE TURBO PASCAL
  2196. ==================== PAGE 31 ====================
  2197. i 7 LA LIBRAIRIE 7
  2198. LE les routines de la librairie 7:3
  2199. i TU_ TAILLE CODE
  2200. — adresse: $0C7D
  2201. — se charge de créer dans le code des emplacements pour accueillir le code des procédures
  2202. OVERLAY ’
  2203. TU_APPEL_OVERLAY
  2204. — adresse: $0CBF
  2205. — chargé de charger une procédure OVERLAY
  2206. TU_OVRPATH
  2207. — adresse: $0D41
  2208. — entrée: sur la pile, le nom du chemin d’accès à la procédure OVERLAY
  2209. — dépile le nom et le recopie dans le tampon des noms de fichiers OVERLAY
  2210. TU_KEYPRESSED
  2211. — adresse: $0D55
  2212. i) — sortie: AL= le résultat du test
  2213. | — appelle la routine de lecture du périphérique courant (v_adr_test_con)
  2214. | TU_GOTOXY
  2215. | — adresse: $0D5B
  2216. | — entrée: Sur la pile: x. AX= y.
  2217. — décrémente x et y et appelle l'interruption $10 du BIOS
  2218. TU_PARAMSTR
  2219. | — adresse: $0D69
  2220. \ — entrée: Sur la pile, le segment et le décalage de la chaîne où sera placé le paramétre. AX= le
  2221. | numéro du paramètre à récupérer.
  2222. — sortie: le paramètre sous forme de chaîne sur la pile (affecté à la chaîne par TU_POP_STRING) —
  2223. TU_PARAMCOUNT
  2224. — adresse: $0D86
  2225. — sortie: AL= le nombre de paramètres de la ligne de commande
  2226. | TU_STR_ENTIER
  2227. — adresse: $0DC3
  2228. — entrée: Sur la pile: la valeur entiére, le format, le segment de la chaîne. DI= le décalage de la «
  2229. chaîne. CL= la taille maximale de la chaîne.
  2230. | } TU_STR_REEL
  2231. (1 — adresse: $0DDC
  2232. a — entrée: Sur la pile: les 6 octets de la valeur réelle, le nombre de décimales, le nombre de
  2233. Th caractères totaux, le segment de la chaîne. DI= le décalage de la chaîne, CL= la taille maximale
  2234. de la chaîne. .
  2235. AU COEUR DE TURBO PASCAL
  2236. \f AU COEUR DE TURBO PASCAL 448
  2237. 7 LA LIBRAIRIE 7
  2238. 73 les routines de la librairie 73
  2239. TU VAL_ENTIER
  2240. _ adresse: $0E38
  2241. — entrée: Sur la pile: la chaîne, le segment et le décalage et de l’entier, le se
  2242. DI= le décalage du résultat. 5 pin oo ugg
  2243. TU_VAL_REEL
  2244. — adresse: $0E3C
  2245. — entrée: Sur la pile: le segment et le décalage du réel, la chaîne, le segment du résultat. DI= le
  2246. décalage du résultat.
  2247. TU_RANDOMIZE
  2248. - adresse: SÜECS
  2249. — utilise l'interruption $21 du DOS, AH= $2C (heure) pour initialiser la valeur aléatoire
  2250. (v_seg_random et v_ofs_ random)
  2251. TU_COPIE STRUCTURE
  2252. — adresse: $0ED3
  2253. - entrée: Sur la pile: segment de la variable de destinataire, décalage de la variable destinataire,
  2254. segment de la variable départ. DI= décalage de la variable départ, CX= taille de la table.
  2255. — utilisé pour les affectations globales de tableaux et d’enregistrements
  2256. TU_POUSSE STRUCTURE
  2257. — adresse: $0EE2 :
  2258. — entrée: Sur la pile: le segment de la structure. DI= décalage de la structure.
  2259. TU_FILLCHAR
  2260. — adresse: $0EFS
  2261. — entrée: Sur la pile: segment de départ et décalage de départ, quantité d’octets à modifier (2
  2262. octets). AX= octet à placer dans la zone.
  2263. TU_MOVE
  2264. — adresse: $0EFE
  2265. — entrée: Sur la pile: segment départ, décalage départ, segment destination décalage destinati
  2266. AX= nombre d’octets à déplacer. ÿ air |
  2267. TU_INTR_DEB
  2268. — adresse: $0F18
  2269. - entrée: Sur la pile: segment de l’enregistrement contenant les registres. DI= décalage de
  2270. l’enregistrement contenant les registres.
  2271. - cette routine place dans les registres du 8088 les valeurs que vous avez placées dans
  2272. l’enregistrement PASCAL
  2273. TU_INTR_FIN
  2274. — adresse: $0F40
  2275. — cette routine place dans l'enregistrement PASCAL les valeurs qui se trouvent dans les registres
  2276. après l’interruption
  2277. AU COEUR DE TURBO PASCAL 449 AU COEUR DE TURBO PASCAL
  2278. ==================== PAGE 32 ====================
  2279. A LA LIBRAIRIE 7
  2280. 73 les routines de la librairie 73
  2281. TU_INDEX CHECK
  2282. — adresse: $0F6A sb,
  2283. — entrée: AX= rang de la cellule (indice moins indice minimal), CX= nombre de cellules (indice
  2284. maximal plus un moins indice minimal) 4
  2285. — invoqué au moment de chaque calcul d’indice de tableau comportant une variable, lorsque vous
  2286. travaillez en mode R+
  2287. TU_RANGE_CHECK
  2288. — adresse: $0F74
  2289. — entrée: AX= valeur à affecter, CX= borne minimale de l'intervalle, DX= borne maximale de
  2290. l'intervalle !
  2291. — invoqué avant chaque affectation d’une valeur à une variable de type intervalle, lorsque vous
  2292. travaillez en mode R+
  2293. TU_STACK_CHECK
  2294. — adresse: $0F82
  2295. — entrée: CX= nombre d’octets (environnement+ locales+ paramètres) utilisés par la procédure
  2296. — invoqué avant chaque appel de procédure utilisateur pour vérifier que la pile peut accomoder
  2297. l'appel. Peut être supprimé par l'option K-
  2298. TU_IORESULT
  2299. — adresse: $0FCC
  2300. — sortie: AL= code d’erreur de l’entrée / sortie précédente, et mise à zéro de la variable système
  2301. contenant ce code
  2302. TU_IO_CHECK
  2303. — adresse: $0FD3
  2304. — vérification que le code d’erreur est nul. Dans le cas contraire, une erreur d’exécution est
  2305. provoquée. Peut ne pas être généré lorsque vous travaillez en mode I-
  2306. _TU_ABS_ENTIER
  2307. — adresse: $1084
  2308. — entrée: AX= la valeur de l’entier
  2309. — sortie: AX= la valeur absolue de l’entier
  2310. TU_RANDOM_ENTIER
  2311. — adresse: $108B
  2312. — entrée: AX= valeur maximale entière de la valeur aléatoire
  2313. — sortie: AX= une valeur aléatoire entre 0 et la valeur maximale demandée
  2314. AU COEUR DE TURBO PASCAL 450
  2315. AU COEUR DE TURBO PASCAL —
  2316. 7 LA LIBRAIRIE
  2317. 73 les routines de la librairie 4)
  2318. {7.3.5 LES CHAINES
  2319. Voici les routines chargées de la gestion des chaînes:
  2320. TU_POUSSE_STRING
  2321. - adresse: $1182
  2322. — entrée: Sur la pile: segment de la chaine. DI= décalage de la chaine.
  2323. — pousse la chaîne sur la pile (l’octet de longueur au sommet)
  2324. TU_POUSSE_K_ST
  2325. — adresse: $119B
  2326. — entrée: La chaîne constante se trouve dans le code juste après l’appel (son segment est toujo
  2327. j CS, et son décalage est sur la pile à cause du CALL. Sa taille est le premier nae aprés Fassel).
  2328. TU_POP_STRING
  2329. — adresse: $11B1
  2330. — entrée: Sur la pile: le segment et le décalage de la chaîne destination, la chaîne à dépiler (octet
  2331. | de longueur au sommet). CL= taille maximale de la chaîne destination.
  2332. — dépile la chaîne dans la variable destination, en tronquant la valeur si elle dépasse la taille de la
  2333. variable destination
  2334. TU_POUSSE TAB_CAR
  2335. — adresse: $11D9
  2336. — entrée: Sur la pile: segment du tableau de caractéres. DI= décalage d
  2337. paige tbl calage du tableau de caractères,
  2338. — pousse le tableau sous forme de chaîne pour permettre l'affichage
  2339. TU_PARAM _F STRING
  2340. | — adresse: $T1F3
  2341. - entrée: CL= taille de la chaîne (sans l’octet de longueur)
  2342. — utilisé lorsqu'une chaîne est un paramètre valeur d’une fonction
  2343. TU_EGAL_STRING
  2344. — adresse: $1230
  2345. — entrée: Sur la pile, les deux chaînes à comparer
  2346. — sortie: AL= le résultat de la comparaison
  2347. TU_DIFF_STRING
  2348. — adresse: $123C
  2349. — entrée: Sur la pile, les deux chaînes à comparer
  2350. — sortie: AL= le résultat de la comparaison
  2351. TU_SUP_EGAL ST
  2352. — adresse: $1248
  2353. — entrée: Sur la pile, les deux chaînes à comparer
  2354. — sortie: AL= le résultat de la comparaison
  2355. AU COEUR DE TURBO PASCAL 451 AU COEUR DE TURBO PASCAL
  2356. ==================== PAGE 33 ====================
  2357. 7 LA LIBRAIRIE q
  2358. 13 les routines de la librairie 16
  2359. TU_INF_EGAL_ST
  2360. — adresse: $1254
  2361. — entrée: Sur la pile, les deux chaines 4 comparer
  2362. — sortie: AL= le résultat,de la comparaison
  2363. TU_SUP_STRING
  2364. — adresse: $1260
  2365. — entrée: Sur la pile, les deux chaînes à comparer
  2366. — sortie: AL= le résultat de la comparaison
  2367. TU_INF_STRING
  2368. — adresse: $126C
  2369. — entrée: Sur la pile, les deux chaînes à comparer
  2370. — sortie: AL= le résultat de la comparaison
  2371. TU_CONCAT
  2372. — adresse: $12B3
  2373. — entrée: Sur la pile, les deux chaînes à concaténer
  2374. — sortie: sur la pile: la chaîne résultant de la concaténation
  2375. TU_COPY
  2376. — adresse: $12F8
  2377. — entrée: Sur la pile: le segment et le décalage de la chaîne destination, l'indice de départ de la
  2378. copie, la chaîne de départ. AX= nombre de caractères à copier.
  2379. TU_LENGTH
  2380. — adresse: $1341
  2381. — entrée: sur la pile, la chaîne dont la longueur doit être mesurée
  2382. — sortie: AL= la longueur de la chaîne
  2383. TU_POS
  2384. — adresse: $134E
  2385. — entrée: sur la pile, la chaîne de départ, la chaîne recherchée
  2386. _ sortie: AL= l'indice de la position de la chaîne recherchée dans la chaîne de départ
  2387. TU_INSERT
  2388. — adresse: $1392
  2389. _ entrée: Sur la pile: la chaîne de départ, le segment et le décalage de la chaîne à insérer. CL=
  2390. taille maximale de la chaîne destinataire, AX= indice où sera effectué l'insertion.
  2391. TU_DELETE
  2392. — adresse: $13EA
  2393. _ entrée: Sur la pile: segment de la chaîne, décalage de la chaîne et indice de départ de
  2394. l'effacement, AX= quantité d’octets à effacer.
  2395. AU COEUR DE TURBO PASCAL 452
  2396. AU COEUR DE TURBO PASCAL M
  2397. 7 LA LIBRAIRIE q
  2398. 73 les routines de la librairie 73
  2399. TU MOV_CAR_ STR
  2400. _ adresse: $1433
  2401. — entrée: sur la pile, une chaîne (de taille 1)
  2402. — sortie: AL= le caractère de la chaîne
  2403. — utilisé pour affecter une chaîne de taille 1 à un caractère
  2404. TU_MOV_STR_CAR
  2405. _ adresse: $1446
  2406. — entrée: sur la pile, une chaîne
  2407. — sortie: AL= le caractére
  2408. — utilisé dans les expressions du type caractére:= caractérel+ chaine;
  2409. TU_RESU_FCT_ST
  2410. - adresse: $145B
  2411. — entrée: DX= taille utilisée par les paramètres, CL= taille du résultat de la fonction
  2412. — utilisé comme conclusion des fonctions dont le résultat est de type chaîne
  2413. {7.3.6 LES ENSEMBLES
  2414. Voici les routines chargées de la gestion des ensembles:
  2415. l TU_POUSSE_SET
  2416. — adresse: $148F
  2417. — entrée: Sur la pile: le segment de l’ensemble. DI= décalage de |’ =
  2418. ? r F | M ge de l’ensemble, CH= octet de dé
  2419. (soit borne_inférieure DIV 8), CL= nombre d’octets utilisés par “rat Co
  2420. borne_supérieure DIV 8- borne_inférieure DIV 8+ 1).
  2421. — utilisé pour les opérations arithmétiques sur les ensembles
  2422. { TU_INITIE_SET
  2423. — adresse: $14BF
  2424. id ($20) octets égaux à zéro sur la pile (correspondant à l’ensemble vide de taille
  2425. TU_AJ_EL_ SET
  2426. - adresse: $14D1
  2427. — entrée: Sur la pile: l’ensemble (32 octets). AX= l'élément à ajouter.
  2428. TU_AJ_INTERV_SET
  2429. — adresse: $14D8
  2430. - entrée: Sur la pile: l’ensemble (32 octets), la borne inférieure de l’intervalle. AX= borne
  2431. supérieure de l'intervalle à ajouter.
  2432. AU COEUR DE TURBO PASCAL 453 AU COEUR DE TURBO PASCAL
  2433. ==================== PAGE 34 ====================
  2434. 7 LA LIBRAIRIE 7
  2435. 7.3 les routines de la librairie 7:30
  2436. TU_AFFECTE_SET
  2437. — adresse: $14F7 1
  2438. _ entrée: Sur la pile: le segment et le décalage de l’ensemble, les 32 octets à affecter. CH= octet —
  2439. de départ (soit borne_inferieure DIV 8), CL= nombre d’octets utilisés par l’ensemble (soit
  2440. borne_supérieure DIV 8- borne_inférieure DIV 8+ 1). il
  2441. TU_ALIGNE_ SET a
  2442. — adresse: $1515 À
  2443. — entrée: Sur la pile: le segment et le décalage de l’ensemble, les 32 octets de l'ensemble. CH= ~
  2444. octet de départ (soit borne_inférieure DIV 8), CL= nombre d’octets utilisés par l’ensemble ~
  2445. (soit borne_supérieure DIV 8- borne_inférieure DIV 8+ 1).
  2446. — utilisé avant l’appel d’une procédure utilisant un paramètre valeur de type ensemble
  2447. TU_EGAL_SET
  2448. ~ adresse: $153B
  2449. — entrée: sur la pile deux ensembles (de 32 octets)
  2450. — sortie: AL= le résultat de la comparaison
  2451. TU_DIFF_SET
  2452. — adresse: $1540
  2453. — entrée: sur la pile deux ensembles (de 32 octets) 4
  2454. — sortie: AL= le résultat de la comparaison f
  2455. TU_SUP_EGAL_SE
  2456. — adresse: $1553 4
  2457. — entrée: sur la pile deux ensembles (de 32 octets)
  2458. — sortie: AL= le résultat de la comparaison
  2459. TU_INF_EGAL_SE |
  2460. — adresse: $1557 \
  2461. — entrée: sur la pile deux ensembles (de 32 octets) (
  2462. — sortie: AL= le résultat de la comparaison
  2463. TU_ADD_SET {
  2464. — adresse: $1578 1
  2465. — entrée: sur la pile deux ensembles (de 32 octets)
  2466. — sortie: sur la pile le résultat de l'union des deux ensembles
  2467. TU_SOUSTR_SET i"
  2468. — adresse: $1586
  2469. — entrée: sur la pile deux ensembles (de 32 octets)
  2470. — sortie: sur la pile le résultat de la différence des deux ensembles
  2471. TU_INTERSECT_S 1
  2472. — adresse: $1596 a
  2473. — entrée: sur la pile deux ensembles (de 32 octets) a
  2474. — sortie: sur la pile le résultat de l’intersection des deux ensembles
  2475. AU COEUR DE TURBO PASCALM
  2476. a
  2477. AU COEUR DE TURBO PASCAL 454
  2478. +
  2479. 7 LA LIBRAIRIE 7
  2480. 13 les routines de la librairie 73
  2481. — :
  2482. TU_IN_SET
  2483. _ adresse: $15A4
  2484. = entrée: sur la pile: la valeur à tester (2 octets), l’ensemble (32 octets)
  2485. — sortie: AL= résultat du test d’appartenance
  2486. et deux routines de pointeurs perdues au milieu des routines d’ensembles:
  2487. TU_EGAL_PTEUR
  2488. — adresse: $15EF
  2489. — entrée: AX= décalage de pointeur2, DX= segment de pointeur2, BX= décalage de pointeurl
  2490. CX= segment de pointeur] 1
  2491. . = sortie: AL= résultat du test
  2492. TU_DIFF_PTEUR
  2493. — adresse: $15FE
  2494. — entrée: AX= décalage de pointeur2, DX= segment de pointeur2, BX= décalage de pointeurl
  2495. CX= segment de pointeur 1 ’
  2496. — sortie: AL= résultat du test
  2497. {7.3.7 LES REELS
  2498. Voici les routines chargées de la gestion des réels:
  2499. TU_POUSSE_REEL
  2500. — adresse: $1936
  2501. — entrée: Sur la pile: le segment du réel. DI= décalage du réel.
  2502. — sortie: les 6 octets du réel sur la pile (l’octet de l’exposant au sommet)
  2503. TU_POUSSE_K_REELLE
  2504. — adresse: $1945
  2505. — entrée: DI= décalage du réel. Le segment est toujours CS ;
  2506. — sortie: les 6 octets de la constante du code sont sur la pile (l’octet de l’exposant au sommet)
  2507. TU_POP_REEL
  2508. — adresse: $1956
  2509. — entrée: sur la pile, le segment du réel destinataire, le décalage du réel destinataire, les 6 octets
  2510. du réel (l'octet de l’exposant au sommet).
  2511. — sortie: le réel destinataire contient les 6 octets auparavant sur la pile
  2512. TU_ADD_REEL
  2513. — adresse: $1969
  2514. — entrée: sur la pile les 2 réels (12 octets en tout)
  2515. — sortie: sur la pile, les 6 octets du résultat de l’addition
  2516. AU COEUR DE TURBO PASCAL 455 AU COEUR DE TURBO PASCAL
  2517. ==================== PAGE 35 ====================
  2518. 7 LA LIBRAIRIE
  2519. KS les routines de la librairie
  2520. TU_SUB_REEL
  2521. — adresse: $1984
  2522. — entrée: sur la pile les 2 réels (12 octets en tout)
  2523. _ sortie: sur la pile, les 6 dctets du résultat de la soustraction
  2524. TU_MULTIPLIE_REEL
  2525. — adresse: $1993
  2526. — entrée: sur la pile les 2 réels (12 octets en tout)
  2527. _ sortie: sur la pile, les 6 octets du résultat de la multiplication
  2528. TU_DIVISE_REEL
  2529. — adresse: $19A2
  2530. — entrée: sur la pile les 2 réels (12 octets en tout)
  2531. — sortie: sur la pile, les 6 octets du résultat de la division
  2532. TU_OPPOSE_REEL
  2533. — adresse: $19BA
  2534. — entrée: sur la pile le réel (6 octets en tout)
  2535. — sortie: sur la pile, les 6 octets de l'opposé (-réel)
  2536. TU_ABS_REEL
  2537. — adresse: $19C9
  2538. - entrée: sur la pile le réel (6 octets en tout)
  2539. — sortie: sur la pile, les 6 octets du réel positif (ABS(réel))
  2540. TU_EGAL_REEL
  2541. — adresse: $19D1
  2542. — entrée: sur la pile les 2 réels (12 octets en tout)
  2543. — sortie: AL= résultat de la comparaison
  2544. TU_DIFF_REEL
  2545. — adresse: $19EB
  2546. — entrée: sur la pile les 2 réels (12 octets en tout)
  2547. — sortie: AL= résultat de la comparaison
  2548. TU_SUP_EGAL_REEL
  2549. — adresse: $1A05
  2550. — entrée: sur la pile les 2 réels (12 octets en tout)
  2551. — sortie: AL= résultat de la comparaison
  2552. TU_INF_EGAL_REEL
  2553. — ‘adresse: $1AIF
  2554. — entrée: sur la pile les 2 réels (12 octets en tout)
  2555. — sortie: AL= résultat de la comparaison
  2556. 7 LA LIBRAIRIE
  2557. 73 les routines de la librairie
  2558. TU SUP_REEL
  2559. _ adresse: $1A39
  2560. _ entrée: sur la pile les 2 réels (12 octets en tout)
  2561. — sortie: AL= résultat de la comparaison
  2562. TU_INF_REEL
  2563. — adresse: $1A53
  2564. — entrée: sur la pile les 2 réels (12 octets en tout)
  2565. — sortie: AL= résultat de la comparaison
  2566. TU_SQR
  2567. — adresse: $1A6D
  2568. — entrée: sur la pile le réel (6 octets en tout)
  2569. — sortie: sur la pile, le résultat de la fonction SQR (6 octets)
  2570. TU_INT
  2571. — adresse: $1A7D
  2572. — entrée: sur la pile le réel (6 octets en tout)
  2573. — sortie: sur la pile, le résultat de la fonction INT (6 octets)
  2574. TU_FRAC
  2575. — adresse: $1A8A
  2576. - entrée: sur la pile le réel (6 octets en tout)
  2577. — sortie: sur la pile, le résultat de la fonction FRAC (6 octets)
  2578. TU_RANDOM_REEL
  2579. — adresse: $1A97
  2580. — sortie: sur la pile, le résultat de la fonction RANDOM (6 octets)
  2581. TU_ROUND
  2582. — adresse: $1AB9
  2583. — entrée: sur la pile le réel (6 octets en tout)
  2584. — sortie: AX= la valeur entière correspondant au réel tronqué
  2585. TU_TRUNC
  2586. — adresse: $1ABD
  2587. - entrée: sur la pile le réel (6 octets en tout)
  2588. — sortie: AX= la valeur entière correspondant au réel arrondi
  2589. TU_FLOTTE_ENTIER
  2590. — adresse: $1AF2
  2591. — entrée: sur la pile, les 2 octets d’un entier
  2592. — sortie: sur la pile, les 6 octets correspondant à un réel ayant la même valeur que l’entier
  2593. Mi
  2594. i
  2595. a 4 |
  2596. 4q AU COEUR DE TURBO PASCAL 456 ; AU COEUR DE TURBO PASCAL — AU COEUR DE TURBO PASCAL 457 AU COEUR DE TURBO PASCAL
  2597. 0
  2598. ==================== PAGE 36 ====================
  2599. i 7 LA LIBRAIRIE 7
  2600. LA LIBRAIRIE
  2601. | 73 les routines de la librairie 73 7 7
  2602. 13 les routines de la librairie 73
  2603. | TU_FLOTTE_PRECEDENT
  2604. | — adresse: $1AFB i
  2605. — sur la pile: les 2 octets d’un entier, les 6 octets d’un réel ;
  2606. — sortie: sur la pile: les 6 octets d’un réel ayant la même valeur que l’entier, les 6 octets du
  2607. premier réel (remonté de 4 octets). Utilisé dans les opérations du type réel:= entier+ réel2;
  2608. TU RESET_TEXT
  2609. _ ‘adresse: $22F2
  2610. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
  2611. taille du tampon ($80 par défaut). '
  2612. TU_REWRITE_TEXT
  2613. ~ adresse: $22F6
  2614. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
  2615. taille du tampon ($80 par défaut).
  2616. TU_SQRT
  2617. — adresse: $1B10
  2618. — entrée: sur la pile le réel (6 octets en tout)
  2619. — sortie: sur la pile, le résultat de la fonction SQRT (6 octets)
  2620. TU_APPEND TEXT
  2621. TU_COS if — adresse: $22FA
  2622. - adresse: $1B6E À — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, CX=
  2623. — entrée: sur la pile le réel (6 octets en tout) à taille du tampon ($80 par défaut).
  2624. | — sortie: sur la pile, le résultat de la fonction COS (6 octets) j
  2625. TU_TRUNCATE_TEXT
  2626. TU_SIN — adresse: $23D7 °
  2627. — adresse: $1B83
  2628. f À — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2629. — entrée: sur la pile le réel (6 octets en tout) i
  2630. — sortie: sur la pile, le résultat de la fonction SIN (6 octets)
  2631. TU_FLUSH_TEXT
  2632. | — ‘adresse: $2409
  2633. TU_LN ;
  2634. i 4 — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la vari ier.
  2635. etes | P 8 g ariable fichier.
  2636. \ — entrée: sur la pile le réel (6 octets en tout) 4
  2637. | — sortie: sur la pile, le résultat de la fonction LN (6 octets) q | TU_CLOSE TEXT
  2638. | | — adresse: $241D
  2639. | — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2640. ! TU_EXP À
  2641. | — adresse: $1CC6 À
  2642. — entrée: sur la pile le réel (6 octets en tout) À TU_READ INPUT
  2643. — sortie: sur la pile, le résultat de la fonction EXP (6 octets) p ~ adresse: $24F3
  2644. — utilisé lorsque l'option G est en oeuvre (Get)
  2645. TU_ARCTAN
  2646. — adresse: $1D6F ( TU_DEB_READ_TEXT
  2647. qt — entrée: sur la pile le réel (6 octets en tout) À — adresse: $2505
  2648. | — 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.
  2649. | q — utilisé pour la lecture d’un fichier TEXT ou des fichiers prédéfinis (CON, TRM, KBD, LST,
  2650. | q USR, AUX)
  2651. 1 4
  2652. |
  2653. A
  2654. | {7.3.8 LES FICHIERS | TU_DEB_WRITE_DEFAUT
  2655. ; — adresse: $2522
  2656. — utilisé l’affich i i
  2657. | Voici les routines chargées de la gestion des fichiers: utilisé pour l'affichage du fichier de sortie par défaut
  2658. | i TU_DEB_WRITE_TEXT
  2659. iW TU_ASSIGN_TEXT — adresse: $2534
  2660. ii — adresse: $229D ( | r : i — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2661. 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
  2662. ity fichier (octet de longueur au sommet). À USR, AUX) ’ , F ;
  2663. | i
  2664. q AU COEUR DE TURBO PASCAL 458 AU COEUR DE TURBO PASCAL ~ | AU COEUR DE TURBO PASCAL 459 AU COEUR DE TURBO PASCAL
  2665. ==================== PAGE 37 ====================
  2666. : TU_READ_OCTET
  2667. 4 LA LIBRAIRIE 7
  2668. 73 les routines de la librairie T8
  2669. TU_READLN
  2670. — adresse: $2551
  2671. — utilisé pour la lecture du return
  2672. TU_READ_DEFAUT |
  2673. — adresse: $2555 |
  2674. — utilisé pour la lecture du fichier d’entrée par défaut \
  2675. TU_READ_CAR
  2676. — adresse: $272C
  2677. — entrée: Sur la pile, le segment du caractère. DI= le décalage du caracière.
  2678. — adresse: $273D
  2679. — entrée: Sur la pile, le segment de l’octet. DI= le décalage de l’octet
  2680. TU_READ_ENTIER
  2681. — adresse: $2740
  2682. — entrée: Sur la pile, le segment de l’entier. DI= le décalage de l’entier.
  2683. TU_READ_REEL q
  2684. — adresse: $275F 1
  2685. — entrée: Sur la pile, le segment du réel. DI= le décalage du réel. 1
  2686. TU_READ_ CHAINE
  2687. - adresse: $277D ;
  2688. — entrée: Sur la pile, le segment de la chaîne. DI= le décalage de la chaîne, CL= la taille
  2689. maximale de la chaine. y
  2690. TU_READ_ARRAY
  2691. - ‘adresse: $27AA
  2692. entrée: Sur la pile, le segment du tableau. DI= le décalage du tableau de caractères, CL= 1a M
  2693. taille du tableau. ;
  2694. TU_READLN_TEXT À
  2695. — adresse: $27D1 a
  2696. — utilisé pour lire le RETURN de fichiers de type TEXT 1
  2697. TU_WRITE_CAR q
  2698. — adresse: $2867
  2699. — entrée: Sur la pile, le caractère (2 octets: le caractère et $00). AX= le format d’affichage (0 par
  2700. défaut).
  2701. TU_WRITE_ENTIER
  2702. — adresse: $2883 i
  2703. — entrée: Sur la pile, l’entier (2 octets). AX= le format d’affichage (0 par défaut). 4
  2704. AU COEUR DE TURBO PASCAL 460 AU COEUR DE TURBO PASCAL a
  2705. ay
  2706. i
  2707. 7 LA LIBRAIRIE 7
  2708. 7.3 les routines de la librairie 74
  2709. TU_WRITE_REEL
  2710. — adresse: $28B8
  2711. — entrée: Sur la pile: les 6 octets du réel (l’exposant au sommet), le nombre total d’octets à
  2712. utiliser pour l’affichage (par défaut 18, soit $12). AX= le nombre de décimales à afficher (par
  2713. défaut $FFFF).
  2714. TU_WRITE_BOOLEEN
  2715. — adresse: $28D0.
  2716. - chs Sur la pile, le booléen (2 octets: le booléen et $00). AX= le format d’affichage (0 par
  2717. aut).
  2718. TU_WRITE_CHAINE
  2719. ~ adresse: $28F0
  2720. — entrée: AX= le format d’affichage (0 par défaut). Sur la pile, la chaîne (l’octet de taille au
  2721. sommet)
  2722. TU_WRITE_K STRING
  2723. — adresse: $2927
  2724. — entrée: la chaine littérale, qui se trouve juste aprés cet appel
  2725. TU_WRITELN
  2726. — adresse: $293F
  2727. — utilisé pour exécuter WRITELN
  2728. TU_SEEKEOLN
  2729. — adresse: $2949
  2730. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2731. — sortie: AL= résultat du test
  2732. TU_EOLN
  2733. — adresse: $294E
  2734. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2735. — sortie: AL= résultat du test
  2736. TU_SEEKEOF
  2737. — adresse: $2953
  2738. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2739. — sortie: AL= résultat du test
  2740. TU_EOF_TEXT
  2741. — adresse: $2958
  2742. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2743. — sortie: AL= résultat du test
  2744. AU COEUR DE TURBO PASCAL 461 AU COEUR DE TURBO PASCAL
  2745. ==================== PAGE 38 ====================
  2746. 7 LA LIBRAIRIE 7
  2747. 22 les routines de la librairie FA
  2748. TU_ASSIGN FILE
  2749. — adresse: $298E
  2750. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, le nom
  2751. du fichier (octet de longueur au sommet).
  2752. TU_RESET
  2753. — adresse: $2993
  2754. — entrée: Sur la pile, le segment de la variable fichier. DI= décalage de la variable fichier, CX=
  2755. taille de la fiche.
  2756. TU_REWRITE
  2757. — adresse: $2997
  2758. — entrée: Sur la pile, le segment de la variable fichier. DI= décalage de la variable fichier, CX=
  2759. taille de la fiche.
  2760. TU_TRUNCATE
  2761. — adresse: $29C2
  2762. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2763. TU_FLUSH
  2764. — adresse: $29D5
  2765. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2766. TU_CLOSE
  2767. — adresse: $29D8
  2768. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2769. TU_DEB_RW FICHIER
  2770. — adresse: $29EA
  2771. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2772. TU_READ_FICHIER
  2773. — adresse: $2A07
  2774. — entrée: Sur la pile: le segment de la variable à lire. DI= décalage de la variable à lire.
  2775. TU_WRITE_FICHI
  2776. — adresse: $2A0F
  2777. — entrée: Sur la pile: le segment de la variable à écrire. DI= décalage de la variable à écrire.
  2778. TU_SEEK
  2779. — adresse: $2A61
  2780. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= le
  2781. numéro de la fiche.
  2782. TU_LONGSEEK
  2783. — adresse: $2A95
  2784. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier, les 6
  2785. octets du réel désignant le numéro de la fiche.
  2786. AU COEUR DE TURBO PASCAL 462
  2787. AU COEUR DE TURBO PASCAL
  2788. 7 LA LIBRAIRIE 7
  2789. 3 les routines de la librairie 73
  2790. TU_EOF
  2791. — adresse: $2A9A
  2792. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2793. — sortie: AL= résultat du test
  2794. TU_FILEPOS
  2795. — adresse: $2AB1 ©
  2796. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2797. — sortie: AX= numéro de la fiche courante
  2798. TU_LONGFILEPOS
  2799. — adresse: $2AC8
  2800. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2801. — sortie: sur la pile: les 6 octets représentant le numéro de la fiche courante
  2802. TU_FILESIZE
  2803. — adresse: $2AD1
  2804. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2805. — sortie: AX= nombre de fiches contenues dans le fichier
  2806. TU_LONGFILESIZ
  2807. — adresse: $2B0D
  2808. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2809. — sortie: sur la pile: les 6 octets représentant le nombre de fiches du fichier.
  2810. TU_RESET FILE
  2811. - adresse: $2B46
  2812. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= la
  2813. taille du tampon (par défaut $80).
  2814. TU_REWRITE FILE
  2815. — adresse: $2B4D
  2816. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier. AX= la
  2817. taille du tampon (par défaut $80).
  2818. TU_BLOCKREAD
  2819. — adresse: $2B54
  2820. - entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
  2821. segment du tampon, le décalage du tampon. AX= le nombre de blocs à lire.
  2822. TU_BLOCKWRITE
  2823. — adresse: $2B5C
  2824. — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
  2825. segment du tampon, le décalage du tampon. AX= le nombre de blocs à écrire.
  2826. AU COEUR DE TURBO PASCAL 463 AU COEUR DE TURBO PASCAL
  2827. ==================== PAGE 39 ====================
  2828. i
  2829. 7 LA LIBRAIRIE 7
  2830. 713 les routines de la librairie F3
  2831. TU_BLOCKREAD_RESU
  2832. — adresse: $2B84
  2833. — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
  2834. segment du tampon, le décalage du tampon, le nombre de blocs à lire, le segment de la variable
  2835. qui contiendra le nombre de blocs lus. DI= le décalage de la variable qui contiendra le nombre
  2836. de blocs lus.
  2837. TU_BLOCKWRITE_RESU
  2838. — adresse: $2B8C
  2839. — entrée: Sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
  2840. segment du tampon, le décalage du tampon, le nombre de blocs à écrire, le segment de la
  2841. variable qui contiendra le nombre de blocs écrits. DI= le décalage de la variable qui contiendra
  2842. le nombre de blocs écrits.
  2843. TU_ERASE
  2844. — adresse: $2C08
  2845. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2846. TU_RENAME
  2847. — adresse: $2C25
  2848. — entrée: sur la pile: le segment de la variable fichier, le décalage de la variable fichier, le
  2849. nouveau nom (octet de longueur au sommet).
  2850. TU_CHDIR
  2851. — adresse: $2C56
  2852. — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
  2853. TU_MKDIR
  2854. - adresse: $2C91
  2855. — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
  2856. TU_RMDIR
  2857. — adresse: $2C95
  2858. — entrée: sur la pile: le nom du répertoire (octet de longueur au sommet)
  2859. TU_GETDIR
  2860. — adresse: $2CA6
  2861. — entrée: Sur la pile: le numéro de la table, le segment de la chaîne. DI= décalage de la chaîne,
  2862. CL= taille maximale de la chaîne.
  2863. TU_EXECUTE
  2864. — adresse: $2CED
  2865. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2866. TUSCHAIN | (i:
  2867. — adresse: $2CF2
  2868. — entrée: Sur la pile: le segment de la variable fichier. DI= décalage de la variable fichier.
  2869. AU COEUR DE TURBO PASCAL 464 AU COEUR DE TURBO PASCAL
  2870. as
  2871. 7 LA LIBRAIRIE 7
  2872. 7.4 les tables de la librairie 7.4
  2873. Ga
  2874. Finalement le code de la librairie contient un certain nombre de tables:
  2875. LES TABLES DE LA LIBRAIRIE |
  2876. — de $0103 à $012C le copyright BORLAND avec le numéro de série
  2877. — de $016A à $017A les paramètres de l’écran utilisé
  2878. — de $09E9 à $0A25 les adresses des routines d’entrée / sortie (ces adresses sont recopiées dans
  2879. les globales à l’initialisation)
  2880. = a $1BEC, i CA2, $1D3F, $1E51, $1E81 les constantes de calculs de fonctions transcendantes
  2881. og, sinus...
  2882. — en $D1D4 la table des conversions décimales
  2883. — en $2489 la table des noms des périphériques pré déclarés (CON, TRM...)
  2884. — en $28ES et $28EA les chaînes TRUE et FALSE
  2885. {7.5 CONCLUSION]
  2886. Au cours de ce chapitre nous avons présenté:
  2887. — les variables globales d’un programme TURBO PASCAL
  2888. — les routines de la librairie directement appelées par le code compilé
  2889. — les tables de données situées dans la librairie
  2890. AU COEUR DE TURBO PASCAL 465
  2891. AU COEUR DE TURBO PASCAL
  2892. Libre
  2893. ==================== PAGE 40 ====================
  2894. 8 MODIFICATIONS 8
  2895. CHAPITRE 8
  2896. MODIFICATIONS DE TURBO.COM
  2897. Ce chapitre va présenter:
  2898. — des modification du module de commande de TURBO.COM
  2899. — modification des commandes de l'éditeur
  2900. — modification des numéros d’erreur de compilation
  2901. A l'issue de ce chapitre:
  2902. — vous saurez comment éviter de taper Y pour charger les messages d’erreur
  2903. — vous pourrez reconfigurer l'éditeur plus facilement
  2904. — vous aurez des messages d'erreurs de compilation tous distincts
  2905. AU COEUR DE TURBO PASCAL 467
  2906. AU COEUR DE TURBO PASCAL
  2907. ==================== PAGE 41 ====================
  2908. 8 MODIFICATIONS 8
  2909. 8.1 avertissement 8.1
  2910. {8.1 AVERTISSEMENT |
  2911. Nous allons vous indiquer quelles modification nous avons apportées à notre version de TURBO
  2912. PASCAL. Ces modifications sont valables pour la version 3.02A. Elles détruiront toute autre
  2913. version de TURBO PASCAL.
  2914. |
  2915. |
  2916. |
  2917. ;
  2918. |
  2919. |
  2920. | Si vous souhaitez apporter certaines de ces modifications, il est impératif de réaliser une
  2921. | sauvegarde de votre version actuelle, et de n’effectuer ces modifications que sur une copie.
  2922. Nous ne sommes pas responsables des modifications que vous apporteriez à votre
  2923. version de TURBO PASCAL.
  2924. {8.2 MODIFICATION DU MODULE DE COMMANDE |
  2925. Lors du chargement de TURBO PASCAL, vous devez indiquer si vous souhaitez charger les
  2926. messages d’erreur ou non. Si le fichier n’est pas là, il n’est de toutes façon pas chargé. La question
  2927. | vous permet donc simplement de disposer pour certains très gros textes d’un peu plus de place
  2928. | mémoire.
  2929. Nous préférons modifier le code de TURBO.COM pour toujours charger les messages, quitte à les
  2930. supprimer de la disquette (ou à les renommer), si d’aventure nous ne souhaitons pas les charger.
  2931. Nous avons par la même occasion supprimé la temporisation qui se produit lorsque vous tapez un
  2932. | nom de fichier ne correspondant à aucun fichier disque (temporisation destinée à vous laisser voir
  2933. | le message NEW FILE).
  2934. | Voici le programme de modification:
  2935. (* 008 msgyes *)
  2936. (* 22 jul 87 ,*)
  2937. (*$r+*)
  2938. PROGRAM modifie_demande_messages;
  2939. VAR choix, choix]: CHAR;
  2940. PROCEDURE modifie_commande;
  2941. TYPE string80= STRING/80];
  2942. VAR |_turbo_com: FILE;
  2943. | modification: string80;
  2944. En
  2945. © © © JAU B WU ND = ©
  2946. ns ps mt
  2947. S D —
  2948. PROCEDURE modifie(p_adresse: INTEGER; p_modification: string80;
  2949. p_quantite: INTEGER);
  2950. 14 VAR !_ tampon: ARRAY/0..$FF] OF BYTE;
  2951. AU COEUR DE TURBO PASCAL 468 AU COEUR DE TURBO PASCAL
  2952. À 8 MODIFICATIONS 8
  2953. | 8.2 modification du module de commande &2
  2954. 1 15 BEGIN (* modifie *)
  2955. 4 16 SEEK(L_turbo_ com, p_adresse SHR 8);
  2956. 17 BLOCKREAD(! turbo _com, l_tampon, 1);
  2957. 18
  2958. 19 MOVE(p_modification[1], |_tampon[p_adresse AND $00FF], p_quantite);
  2959. 20
  2960. 21 SEEK(! turbo com, p_adresse SHR 8);
  2961. 22 BLOCKWRITE(L_turbo_com, l_tampon, 1);
  2962. 23 END; (* modifie *)
  2963. (à 24
  2964. 25 BEGIN (* modifie_commande *)
  2965. 26 WRITE('o(k modifier turbo.com ? ‘);
  2966. . 27 READ(KBD, choix1); WRITELN(choix!);
  2967. { 28 IF choix] <>’o’
  2968. 29 THEN EXIT;
  2969. 30
  2970. 31 ASSIGN(L_turbo_com, ’turboo.com’ );
  2971. 32 RESET(/_turbo_com, $100);
  2972. 4 33
  2973. | 34 (* supprime la lecture clavier et positionne l'étiquette *)
  2974. 35 (* remplit la chaine des modifications *)
  2975. i 36 (* MOV [v_messages], $01 *)
  2976. 37 1 _modification|[1]:= CHR($C6);
  2977. 38 [_modification[2]:= CHR($06);
  2978. | 39 l_modification{3]:= CHR($4A);
  2979. 40 Émodification{4]:= CHR($03);
  2980. 41 | modification[5]:= CHR($01);
  2981. 42 (* et complete avec des NOP *)
  2982. 43 FILLCHAR(!_modification[6], 3, $90);
  2983. 44 modifie($2F53- $0100, !_ modification, 8);
  2984. 45
  2985. | 46 (* supprime la temporisation après NEW FILE *)
  2986. 47 FILLCHAR(!_modification[1], 6, $90);
  2987. f 48 modifie($349D- $0100, |_modification, 6);
  2988. 49
  2989. . a 50 CLOSE(L turbo_com);
  2990. 1 | 51 END; (* modifie *)
  2991. (fl Sa
  2992. 4 53 BEGIN (* principal *)
  2993. | 54 IF memw[cseg:$0101]+ $0103<> $2D4D
  2994. i | 55 THEN BEGIN
  2995. 1 | 56 WRITELN(’ cet utilitaire ne fonctionne’);
  2996. | 57 WRITELN('qu''avec la version 3.02B de TURBO’);
  2997. : 58 EXIT;
  2998. | @ 59 END;
  2999. if i 60
  3000. |: 4 61 REPEAT
  3001. | 62 WRITE('m/(odifier la demande message, q(uitte ?’);
  3002. | 63 READ(KBD, choix); WRITELN(choix);
  3003. LE 64 CASE choix OF
  3004. |. @ 65 ‘m' : modifie_commande;
  3005. q 66 END;
  3006. 67 UNTIL choix= 'q’;
  3007. 68 END. (* principal *)
  3008. Fig. 8.1 Le programme msgyes.
  3009. AU COEUR DE TURBO PASCAL
  3010. AU COEUR DE TURBO PASCAL 469
  3011. ==================== PAGE 42 ====================
  3012. 8 MODIFICATIONS 8
  3013. 8.3 les commandes de l'éditeur 8.3
  3014. {3.3 LES COMMANDES DE L’EDITEUR |
  3015. Le programme TINST livré sur la disquette TURBO PASCAL permet de modifier les commandes
  3016. de l'éditeur. Si vous trouvez que CTRL Q évoque plus Quitter que KTRL K D, il vous suffit de
  3017. modifier les commandes de l’éditeur.
  3018. En fait TURBO.COM contient deux tables:
  3019. — une table des commandes ori ginales, similaires 4 celle de WORD STAR
  3020. — une table des commandes que vous souhaitez utiliser.
  3021. Si vous utilisez TINST, la seconde table est modifiée, et ce sont ses codes qui seront utilisés. Si
  3022. vous n’avez pas utilisé TINST, ou si vous ne modifiez pas certaines commandes, ce seront les
  3023. commandes originales qui seront utilisées.
  3024. Toutefois TINST vous demande de modifier les 45 commandes de 1’éditeur, avant de vérifier
  3025. qu’elles sont toutes distinctes. Si ce n’est pas le cas, vous serez invité à modifier l’ensemble de 45
  3026. touches. Et ceci jusqu’a ce que toutes les touches soient distinctes.
  3027. Pour rendre ce travail moins pénible, nous utilisons un programme qui permet:
  3028. — d’afficher les codes des commandes originales
  3029. — d'afficher les codes des commandes actuelles
  3030. — de modifier les commandes actuelles et de les placer dans TURBO.COM.
  3031. Certes ce programme ne vous permet pas de tester les nouvelles commandes en temps réel. C’est à
  3032. vous de placer les nouveaux codes dans le texte du programme et de le compiler. Le programme ne
  3033. vérifie pas que toutes les commandes sont distinctes. Comme il affiche à l’écran les combinaisons
  3034. choisies, une inspection visuelle suffit en général.
  3035. Voici ce programme:
  3036. O (* 004 install ry
  3037. À (* 23 aou 87 %)
  3038. 3 ("Sree
  3039. 4 PROGRAM installe_editeur_turbo;
  3040. 5 CONST k_table_modifiable= $57CE;
  3041. 6 k_table_wordstar= $5896;
  3042. 7 TYPE string2= STRING/2/;
  3043. 8 string4= STRING/4];
  3044. 9 string64= STRING/64];
  3045. 10 VAR choix, choix]: CHAR;
  3046. 11 nom_turbo_com: string64;
  3047. titre_commande: ARRAY/[0..45] OF STRING/80/;
  3048. AU COEUR DE TURBO PASCAL 470 AU COEUR DE TURBO PASCAL
  3049. 8 MODIFICATIONS 8
  3050. 8.3 les commandes de l'éditeur 83
  3051. 14 PROCEDURE stop;
  3052. 15 VAR ! caractere: CHAR;
  3053. 16 BEGIN
  3054. 17 READ(KBD, !_ caractere);
  3055. 18 END; (* stop *)
  3056. 19
  3057. 20 (* fonctions de conversion *)
  3058. 21
  3059. 22 FUNCTION f octet_hexadecimal(p_octet: BYTE): string2;
  3060. 23 CONST kt_hexadecimal: ARRAY/0..$0F] OF CHAR= '0123456789ABCDEF' ;
  3061. 24 BEGIN
  3062. 25 f_octet_hexadecimal:= CONCAT(kt_hexadecimal[p_octet DIV 16],
  3063. 26 if kt_hexadecimal[p_octet MOD 16]);
  3064. 27 END; (* f_octet_hexadecimal *)
  3065. 28
  3066. 29 FUNCTION f entier_hexadecimal(entier: INTEGER): string4;
  3067. 30: BEGIN
  3068. 31 f_entier_hexadecimal:= CONCAT(f octet_hexadecimal(HI(entier)),
  3069. 32 f_octet_hexadecimal(LO(entier)));
  3070. 33 END; (* f_entier_hexadecimal *)
  3071. 34
  3072. 35 (* visualisation et modification de la table *)
  3073. 36
  3074. 37 PROCEDURE initialise_titre commande;
  3075. 38 BEGIN
  3076. 39 FILLCHAR(titre_commande, SIZEOF(titre_ commande), 0);
  3077. 40
  3078. 41 titre_commande[0]:= ‘return’;
  3079. 42 titre_commande[1]:='<-';
  3080. 43 titre_commande[2]:= "<- alt’;
  3081. 44 titre_commande[3]:='->’;
  3082. 45 titre_commande[4]:= "mot <’;
  3083. 46 titre_commande[S]:= "mot >’;
  3084. 47 titre_commande[6]:= ligne";
  3085. 48 titre_commande[7]:= ‘ligne dessous’;
  3086. 49 titre_commande[8]:= "scroll up';
  3087. 50 titre_commande[9]:= "scroll dwn’ ;
  3088. 51 titre_commande[10]:= "page up’;
  3089. 52 titre_commande[11]:= "page down’;
  3090. 53 titre commande[12]:= ligne <’ ;
  3091. 54 titre_commande[13]:= "ligne >’ ;
  3092. 55 titre_commande[14]:= "page ";
  3093. 56 titre_commande[15]:= ' page bas’ ;
  3094. at titre_commande[16]:= ’ debut fichier’ ;
  3095. 58 titre_commande[17]:= ‘fin fichier’ ;
  3096. 59 titre_commande[18]:= ‘debut bloc’ ;
  3097. 60 titre_commande[19]:= ‘fin bloc’ ;
  3098. 61 titre_commande[20]:= ‘dernier curseur’;
  3099. 62 titre_commande[21]:= ’insere remplace’;
  3100. 63 titre_commande[22]:= 'insere ligne’ ;
  3101. 64 titre_commande[23]:= efface ligne’ ;
  3102. 65 titre_commande[24]:= "efface fin ligne’;
  3103. 66 titre_commande[25]:= "efface mot <’ ;
  3104. 67 titre_commande[26]:= ‘efface ss curs’ ;
  3105. 68 titre_commande[27]:= ’ efface >’ ;
  3106. 69 titre_commande[28]:= ‘efface > alt’ ;
  3107. AU COEUR DE TURBO PASCAL 471 AU COEUR DE TURBO PASCAL
  3108. ==================== PAGE 43 ====================
  3109. 8 MODIFICATIONS 8
  3110. 8.3 les commandes de l'éditeur 8.3
  3111. 70 titre_commande[29]:= "mk debut bloc’ ;
  3112. 71 titre_commande[30]:= ’ mk fin bloc’ ;
  3113. 72 titre_commande[31]:= "marque mor ;
  3114. 73 titre_commande[32]:= cache bloc’ ;
  3115. 74 titre_commande[33]:= ’ copie bloc’ ;
  3116. 15 titre_commande[34]:= ‘deplace bloc’ ;
  3117. 76 titre .commande[35]:= ‘efface bloc’ ;
  3118. TT titre_commande[36]:= ‘lit bloc’ ;
  3119. 78 titre_commande[37]:= ’ ecris bloc’ ;
  3120. 79 titre_commande[38]:= ‘fin’;
  3121. 80 titre_commande[39]:= 'tab';
  3122. 81 titre_commande[40]:= ‘auto tab’ ;
  3123. 82 titre_commande[41]:= 'resuscite ligne’;
  3124. 83 titre_commande[42]:= ' trouve’ ;
  3125. 84 titre_commande[43]:= remplace’;
  3126. 85 titre_commande[44]:= 'repete trouve’ ;
  3127. 86 titre_commande[45]:= ' prefixe controle’ ;
  3128. 87 END; (* initialise_titre_commande *)
  3129. 88
  3130. 89 PROCEDURE charge _et_affiche(p_adresse_ table: INTEGER);
  3131. 90 (* charge la table des codes wordstar et l'affiche *)
  3132. 91 VAR | octet: BYTE;
  3133. 92 | indice: BYTE;
  3134. 93 l_taille_commande: INTEGER;
  3135. 94 l_numero_commande: INTEGER;
  3136. 95 ! turbo_com: FILE;
  3137. 96 | tampon: ARRAY/0..$1FF] OF BYTE;
  3138. 97 | _indice_tampon: INTEGER;
  3139. 98 BEGIN
  3140. 99 CURSCR,
  3141. 100
  3142. 101 (* charge la table *)
  3143. 102 ASSIGN(/_turbo_com, nom_turbo_com);
  3144. 103 RESET(!_turbo_com, $100);
  3145. 104 SEEK(! turbo_com, (p_adresse_table- $0100) DIV $100);
  3146. 105 BLOCKREAD(L_turbo_com, | tampon, 2);
  3147. 106 CLOSE(l_turbo_com);
  3148. 107
  3149. 108 L_indice_tampon:= p_adresse_table AND $00FF;
  3150. A l_numero_commande:= 0;
  3151. 1
  3152. LI REPEAT
  3153. 112 IF / numero _commande< 23
  3154. 113 THEN BEGIN
  3155. 114 GOTOXY(1, |_numero_commande+ 1);
  3156. 115 END
  3157. 116 ELSE GOTOXY(41, !_ numero commande+ 1- 23);
  3158. 127 WRITE(!_numero_commande:2, "");
  3159. Ms WRITE(titre_co def! 0_Co nde]);
  3160. 1
  3161. 120 | taille_commande:= l_tampon[l_indice_tampon];
  3162. 121 IF t taille_commande<> 0
  3163. 122) THEN BEGIN
  3164. 123 FOR | indice:= LENGTH(titre_commande[l_numero_commande])+ 1
  3165. 124 TO 20 DO ji
  3166. 125 WRITE(’ ’);
  3167. 126 FOR | indice:= 1 TO I_taille_commande DO
  3168. 127 WRITE(f_octet_hexadecimal(l_tampon[l_indice_tampon+ Lindice]));
  3169. AU COEUR DE TURBO PASCAL 472 AU COEUR DE TURBO PASCAL
  3170. 8 MODIFICATIONS 8
  3171. 8.3 les commandes de l’éditeur 8.3
  3172. 128 FOR | indice:= |_taille_commande+ 1 TO 2 DO
  3173. 129 WRITE(’ ’);
  3174. 130 WRITE(’ ’);
  3175. 131
  3176. 132 FOR | indice:= 1 TO !_taille_commande DO
  3177. 133 BEGIN
  3178. 134 l octet:= | tampon|[l_indice_tampon+ |_indice];
  3179. 135 IF / octet IN [0.31]
  3180. 136 THEN WRITE('", CHR(I_octet+ $40),’’)
  3181. 137 ELSE
  3182. 138 IF / octet IN [32..127]
  3183. 139 THEN WRITE(CHR(I_octer),’ ’)
  3184. 140 ELSE WRITE(’. ’);
  3185. 141 END;
  3186. 142 | _indice_tampon:= |_indice_tampon+ |_taille_commande+ 1;
  3187. 143 END;
  3188. 144 |_numero_commande:= |_numero_commande+ 1;
  3189. 145 UNTIL |_numero_commande> 45;
  3190. 146 END; (* charge_et_affiche *)
  3191. 147
  3192. 148 PROCEDURE remplace_installe;
  3193. 149 (* modifie la table *)
  3194. 150 VAR commande: ARRAY/0..45] OF RECORD
  3195. 151 taille_commande, octet_1, octet_2: BYTE;
  3196. 152 END;
  3197. 153 L_rampon_max: INTEGER;
  3198. 154 | bloc: INTEGER;
  3199. 155 indice: INTEGER;
  3200. 156
  3201. 157 PROCEDURE remplis_table_temporaire;
  3202. 158
  3203. 159 PROCEDURE escape(p_numero_commande, |_indice: BYTE);
  3204. 160 BEGIN
  3205. 161 WITH commande[p_numero_commande] DO
  3206. 162 BEGIN
  3207. 163 taille_commande:= 2;
  3208. 164 octet_l:= $1B;
  3209. 165 octet_2:= | indice;
  3210. 166 END;
  3211. 167 END; (* escape *)
  3212. 168
  3213. 169 PROCEDURE controle(p_numero_commande: BYTE; caractere: CHAR);
  3214. 170 ‘BEGIN
  3215. 171 WITH commande[p_numero_commande] DO
  3216. 172 BEGIN
  3217. 173 taille_commande:= 1;
  3218. 174 octet_1:= ORD(caractere)- $40;
  3219. 175 END;
  3220. 176 END; (* controle *)
  3221. 177
  3222. 178 PROCEDURE inutilise(p_numero_commande: BYTE);
  3223. 179 BEGIN
  3224. 180 WITH commande[p_numero_commande] DO
  3225. 181 BEGIN
  3226. 182 taille_commande:= 1;
  3227. 183 octet_l:= $FF;
  3228. 184 END;
  3229. 185 END; (* inutilise *)
  3230. AU COEUR DE TURBO PASCAL 473
  3231. AU COEUR DE TURBO PASCAL
  3232. ==================== PAGE 44 ====================
  3233. 8 MODIFICATIONS 8
  3234. 8.3 les commandes de l’éditeur 8.3
  3235. 186
  3236. 187 BEGIN (* remplis_table_temporaire *)
  3237. 188 (* valeurs que vous pouvez modifier *)
  3238. 189 controle(0, ‘M’ );
  3239. 190 escape(1, $4B);
  3240. 191 inutilise(2 7
  3241. 192 escape(3, $4D);
  3242. 193 escape(4, $43);
  3243. 194 escape(S, $44);
  3244. 195 escape(6, $48);
  3245. 196 escape(7, $50);
  3246. 197 inutilise(8);
  3247. 198 inutilise(9);
  3248. 199 escape(10, $3D);
  3249. 200 escape(11, $3E);
  3250. 201 escape(12, $41);
  3251. 202 escape(13, $42);
  3252. 203 escape(14, $3F);
  3253. 204 escape(15, $40);
  3254. 205 escape(16, $3B);
  3255. 206 escape(17, $3C);
  3256. 207 inutilise(18);
  3257. 208 inutilise(19);
  3258. 209 controle(20, 'G');
  3259. 210 escape(21, $52);
  3260. 211 inutilise(22);
  3261. 212 inutilise(23);
  3262. 218 inutilise(24);
  3263. 214 inutilise(25);
  3264. 215 escape(26, $53);
  3265. 216 controle(27, 'H');
  3266. 217 inutilise(28);
  3267. 218 controle(29, ’B’);
  3268. 219 controle(30, 'E' );
  3269. 220 inutilise(31);
  3270. 221 inutilise(32);
  3271. 222 controle(33,'K’);
  3272. 223 controle(34,’V’);
  3273. 224 controle(35,’D’);
  3274. 225 controle(36,’R’);
  3275. 226 controle(37,’W’ );
  3276. 227 controle(38, 'C’);
  3277. 228 controle(39, ’I’);
  3278. 229 inutilise(40);
  3279. 230 inutilise(41);
  3280. 231 controle(42,’F’);
  3281. 232 controle(43, ’X’);
  3282. 233 controle(44, 'L');
  3283. 234 controle(45, 'P');
  3284. + END; (* remplis_table_ temporaire *)
  3285. 237 PROCEDURE affiche_table_temporaire;
  3286. 238 VAR !_numero_ commande: INTEGER;
  3287. 239 | indice: INTEGER;
  3288. 240 BEGIN
  3289. 241 CLRSCR;
  3290. 242 L_numero_commande:= 0;
  3291. 243 iit
  3292. AU COEUR DE TURBO PASCAL 474 AU COEUR DE TURBO PASCAL
  3293. 8 MODIFICATIONS 8
  3294. 8.3 les commandes de l’éditeur 8.3
  3295. 244 REPEAT
  3296. 245 WITH commande[l_numero_commande] DO
  3297. 246 BEGIN
  3298. 247 IF ! numero_commande< 23
  3299. 248 THEN BEGIN
  3300. 249 GOTOXY (1, |_numero_commande+ 1);
  3301. 250 END
  3302. 251 ELSE GOTOXY(41, |_numero_commande+ 1- 23);
  3303. 252 WRITE(l_numero_commande:2, “’);
  3304. 253 WRITE(titre_ cc de[!_numero_co nde]);
  3305. 254
  3306. 255 IF taille commande<> 0
  3307. 256 THEN BEGIN
  3308. 257 FOR ! indice:=
  3309. 258 LENG TH{ritre_commande[l_numero_commande])+ 1 TO 20 DO
  3310. 259 WRITE(’ ’);
  3311. 260
  3312. 261 WRITE(taille_commande: 2,’ ');
  3313. 262 WRITE(f_octet_hexadecimal(octet_1));
  3314. 263 IF taille commande= 2
  3315. 264 THEN WRITE(f octet_hexadecimal(octet eh" 7)
  3316. 265 ELSE WRITE(’ *);
  3317. 266
  3318. 267 IF octet 1 IN [0.31]
  3319. 268 THEN WRITE('", CHR(octer_1+ $40),’’)
  3320. 269 ELSE
  3321. 270 IF octet 1 IN [32..127]
  3322. 271 THEN WRITE(CHR(octet_1),’ ’)
  3323. 272 ELSE WRITE(’. ’);
  3324. 273
  3325. 274 IF taille commandée= 2
  3326. 275 THEN
  3327. 276 IF octet 2 IN [0..31]
  3328. 271 THEN WRITE/('", CHR(octet_2+ $40),’’)
  3329. 278 ELSE
  3330. 279 IF octet 2 IN [32.127]
  3331. 280 THEN WRITE(CHR(octet_2),’ ’)
  3332. 281 ELSE WRITE(’. ’);
  3333. 282
  3334. 283 WRITELN;
  3335. 284 END;
  3336. 285 END;
  3337. 286 | _numero_commande:= |_numero_commande+ 1;
  3338. 287 UNTIL | numero commande> 45;
  3339. 288 END; (* affiche_table_temporaire *)
  3340. 289
  3341. 290 PROCEDURE modifie_turbo_com;
  3342. 291 VAR L_turbo_com: FILE;
  3343. 292 | tampon: ARRAY/(0..$1FF] OF BYTE;
  3344. 293 [indice_tampon: INTEGER;
  3345. 294 l'numero_commande: INTEGER;
  3346. 295 BEGIN
  3347. 296 GOTOXY(1, 24);
  3348. 297 WRITE(’0(k modifier turbo.com ?’);
  3349. 298 READ(KBD, choix]); WRITE(choix!);
  3350. 299 IF choix] <> 'o’
  3351. 300 THEN EXIT;
  3352. 301
  3353. AU COEUR DE TURBO PASCAL 475 AU COEUR DE TURBO PASCAL
  3354. ==================== PAGE 45 ====================
  3355. 8 MODIFICATIONS 8
  3356. 8.3 les commandes de l'éditeur 8.3
  3357. 302 (* charge les blocs contenant la table *)
  3358. 303 ASSIGN(I_turbo_com, nom_turbo_com);
  3359. 304 RESET(/_turbo_com, $100);
  3360. 305 SEEK(I_turbo_com, (k_table_modifiable- $0100) DIV $100);
  3361. is BLOCKREAD(I_turbo_com, |_tampon, 2);
  3362. 307
  3363. 308 (* place les commandes, avec la syntaxe de TURBO.COM *)
  3364. 309 | indice_tampon:= k_table_modifiable AND $00FF;
  3365. a l_numero_commande:= 0;
  3366. 11
  3367. 312 REPEAT
  3368. 313 WITH commande[|_numero_commande] DO
  3369. 314 BEGIN
  3370. 315 IF taille commande<> 0
  3371. 316 THEN BEGIN
  3372. 317 L_tampon{l_indice_tampon]:= taille_commande;
  3373. 318 1 tampon|[l_indice_tampon+ 1]:= octet_1;
  3374. 319 | indice_tampon:= |_indice_tampon+ 2;
  3375. 320 IF taille_commande= 2
  3376. 321 THEN BEGIN
  3377. 322 L_tampon[l_indice_tampon]:= octet_2;
  3378. 323 | indice_tampon:= |_indice_tampon+ 1;
  3379. 324 END; i
  3380. 325 END;
  3381. 326 END; (* WITH *)
  3382. 327 | _nuwmero_commande:= |_numero_commande+ 1;
  3383. ie UNTIL /_numero_commande> 45;
  3384. rl
  3385. 330 ! tampon|[l_indice_tampon]:= 0;
  3386. od l tampon|[l_indice_tampon+ 1]:= $FF;
  3387. 333 (* met sur disque *)
  3388. 334 SEEK(!_turbo_com, (k_table_modifiable- $0100) DIV $100);
  3389. 335 BLOCKWRITE(I_turbo_com, |_tampon, 2);
  3390. 336 CLOSE(l_turbo_com);
  3391. 4H END; (* modifie_turbo_com *)
  3392. 339 BEGIN (* remplace_installe *)
  3393. 340 remplis_table_temporaire; :
  3394. 341 affiche_table_temporaire;
  3395. 342 modifie_turbo_com;
  3396. y END; (* remplace_installe *)
  3397. 44
  3398. 345 PROCEDURE initialise;
  3399. 346 BEGIN
  3400. 347 nom_turbo_com:= 'turbo.com' ;
  3401. 348 initialise_titre_commande;
  3402. 349 CLRSCR;
  3403. 350 END; (* initialise *)
  3404. 351
  3405. 352 BEGIN
  3406. 353 initialise;
  3407. 354 j
  3408. AU COEUR DE TURBO PASCAL 476 AU COEUR DE TURBO PASCAL
  3409. 8 MODIFICATIONS 8
  3410. 83 les commandes de 1’éditeur 8.3
  3411. 355 IF memw[cseg:$0101]+ $0103<> $2D4D
  3412. 356 THEN BEGIN
  3413. 357 WRITELN(’ cet utilitaire ne fonctionne’);
  3414. 358 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
  3415. 359 EXIT;
  3416. 360 END;
  3417. 361 À
  3418. 362 REPEAT
  3419. 363 GOTOXY(/, 24);
  3420. 364 WRITELN(nom_turbo_com);
  3421. 365
  3422. 366 WRITE( o(riginal, m(odifiée, r(emplace, q(uitte ?');
  3423. 367 READ(KBD, choix); WRITE(choix);
  3424. 368 CASE choix OF
  3425. 369 ’r’ : remplace_installe;
  3426. 370 ’o' : charge_et_affiche(k_table_wordstar);
  3427. 371 ’m’ : charge_et_affiche(k_table_modifiable);
  3428. 372 END;
  3429. 373 UNTIL choix="q';
  3430. 374 END.
  3431. Fig. 8.2 Le programme installe_editeur.
  3432. {8.4 MODIFICATION DES OPTIONS DE COMPILATION |
  3433. Nous préférons compiler nos programmes en mode R+ par défaut. Pour éviter d’avoir à placer cette
  3434. option en début de chaque programme, il suffit de modifier la constante que le compilateur utilise
  3435. pour initialiser les valeurs utilisées par défaut. Cette constante se trouve à l’adresse
  3436. $5SA9D, et a par défaut la valeur $ED.
  3437. Voici un programme qui installe la valeur R+ par défaut:
  3438. O (*008 rplus *)
  3439. 1 (* 22, jalan a)
  3440. a
  3441. 3, (*$r+*)
  3442. 4 PROGRAM modifie_option_r_plus;
  3443. 5 VAR choix, choixI: CHAR;
  3444. 6
  3445. 7 PROCEDURE modifie_commande;
  3446. 8 TYPE string80= STRING/80];
  3447. 9 VAR |_turbo_com: FILE;
  3448. 10 | modification: string80;
  3449. 11
  3450. 12 PROCEDURE modifie(p_adresse: INTEGER; p_modification: string80;
  3451. 13 p_quantite: INTEGER);
  3452. 14 VAR | tampon: ARRAY/0..$FF] OF BYTE;
  3453. 15 BEGIN (* modifie *)
  3454. 16 SEEK(l_turbo_com, p_adresse SHR 8);
  3455. 17 BLOCKREAD(I_turbo_com, |_tampon, 1);
  3456. 18
  3457. AU COEUR DE TURBO PASCAL
  3458. AU COEUR DE TURBO PASCAL 477
  3459. ==================== PAGE 46 ====================
  3460. 8 MODIFICATIONS
  3461. 8.4 modification des options de compilation
  3462. M4 MOVE(p_modification[1], |_tampon[p_adresse AND $OOFF], p_quantite);
  3463. 21 SEEK(/_turbo_com, p_adresse SHR 8);
  3464. 22 BLOCKWRITE(I_turbo_com, L tampon, 1);
  3465. 5 END; (* modifie *) a
  3466. 25 BEGIN (* modifie _commande *)
  3467. 26 WRITE('o(k modifier turbo.com ? ‘ );
  3468. 27 READ/KBD, choix!); WRITELN(choix!);
  3469. 28 IF choixl<> 'o’
  3470. 29 THEN EXIT;
  3471. 30
  3472. 31 ASSIGN(L_turbo_com, 'turboo.com’ );
  3473. e RESET(/_turbo_com, $100);
  3474. 34 (* met la valeur $EF à $5A9D *)
  3475. modifie($5A9D- $0100, CHR($EF), 1);
  3476. 37 CLOSE(l_turbo_com);
  3477. Pi END; (* modifie *)
  3478. 40 BEGIN (* principal *)
  3479. 41 IF memw[cseg:$0101]+ $0103<> $2D4D
  3480. 42 THEN BEGIN
  3481. 43 WRITELN(’cet utilitaire ne fonctionne’ );
  3482. 44 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
  3483. 45 EXIT;
  3484. 46 END;
  3485. 47
  3486. 48 REPEAT
  3487. 49 WRITE(' m(odifier I’’ option R, q(uitte ?’);
  3488. 50 READ(KBD, choix); WRITELN(choix);
  3489. 51 CASE choix OF
  3490. 52 ‘m’ : modifie_commande;
  3491. 53 END;
  3492. 54 UNTIL choix= 'q';
  3493. à | END. (* principal *)
  3494. Fig. 8.3 Le programme option_r_plus.
  3495. {8.5 MODIFICATION DES NUMEROS D'ERREUR |
  3496. Les erreurs du compilateur ont été regroupées en catégories pour diminuer le nombre de messages
  3497. (et donc la taille du fichier des messages d'erreur).
  3498. Dans certaines situations, des messages distincts permettraient de mieux identifier la cause de
  3499. l’erreur de compilation.
  3500. Aussi avons nous modifié les numéros d’erreurs qui peuvent apparaître à plusieurs endroits, de
  3501. façon que chaque numéro d'erreur soit unique. Les numéros qui ne se trouvent qu’en un seul
  3502. exemplaire n’ont pas été modifiés.
  3503. AU COEUR DE TURBO PASCAL 478
  3504. ¥
  3505. AU COEUR DE TURBO PASCAL
  3506. i
  3507. 8 MODIFICATIONS 8
  3508. 8.5 modification des numéros d’erreur 8.5
  3509. L’utilitaire qui suite permet donc:
  3510. — de modifier les numéros utilisés par le compilateur
  3511. — de récupérer dans un fichier la table comportant les numéros ainsi modifiés et les messages
  3512. correspondants.
  3513. Cet utilitaire ne modifie pas le fichier TURBO.MSG. En effet le module de commande n'affiche
  3514. que les message dont le numéro n’utilise pas plus de 2 chiffres. Comme TURBO utilise 85
  3515. numéros, nous ne pourrions pas afficher les messages des erreurs dont le code dépasserait 99. La
  3516. modification des numéros impose donc l’utilisation d’une table imprimée de ces nouveaux
  3517. numéros.
  3518. Le fichier contenant les nouveaux numéros et leur message peut être modifiée en utilisant l’éditeur,
  3519. puis imprimée.
  3520. Voici le programme de modification:
  3521. O (*008 erreur *)
  3522. 1 (*23aou87 *)
  3523. 2
  3524. 3!) (*Sr4*)
  3525. 4 PROGRAM modifie_codes_erreur;
  3526. 5 VAR choix, choix]: CHAR;
  3527. 6
  3528. 7 PROCEDURE modifie_codes;
  3529. 8 TYPE string80= STRING/80);
  3530. 9. VAR L_turbo_com: FILE;
  3531. 10 1 tampon: ARRAY/0..$FF] OF BYTE;
  3532. 11 | bloc_courant: INTEGER;
  3533. 12 l_a_modifie: BOOLEAN;
  3534. 13 | code: BYTE;
  3535. 14
  3536. 15 l sortie: TEXT;
  3537. 16 l nom_sortie: STRING/64];
  3538. 17
  3539. 18 PROCEDURE modifie(p_vieux_code: BYTE; p_adresse: INTEGER;
  3540. 19 p_message: string80);
  3541. 20 VAR | bloc: INTEGER;
  3542. 21 BEGIN (* modifie *)
  3543. 22 | bloc:= (p_adresse- $0100) SHR 8;
  3544. 23 IF 1 bloc<> 1 bloc_courant
  3545. 24 THEN BEGIN
  3546. 25 IF | _a_modifie
  3547. 26 THEN BEGIN
  3548. 27 SEEK(I_turbo_com, |_bloc_courant);
  3549. 28 BLOCKWRITE(l_turbo_com, l_tampon, 1);
  3550. 29 END;
  3551. 30 | bloc_courant:= |_bloc;
  3552. 31 SEEK(I_turbo_com, |_bloc_courant);
  3553. 32 BLOCKREAD(I_turbo_com, |_tampon, 1);
  3554. 33 | a_modifie:= FALSE;
  3555. 34 END;
  3556. 35
  3557. AU COEUR DE TURBO PASCAL 479 AU COEUR DE TURBO PASCAL
  3558. ==================== PAGE 47 ====================
  3559. 8 MODIFICATIONS 8
  3560. 8.5 modification des numéros d’erreur 8.5
  3561. 36 (* affichage et verification *)
  3562. 37 WRITELN({ sortie, p_vieux_code: 3, l_ code: 4,'',p_ message);
  3563. 38 IF | tampon[p_adresse AND $00FF]<> p_vieux_code
  3564. 39 THEN BEGIN
  3565. 40 WRITELN(’ erreur’ );
  3566. 41 READLN;
  3567. 42 END;
  3568. 43 :
  3569. 44 (* modifie le code *)
  3570. 45 | tampon[p_adresse AND $00FF]:= | code;
  3571. 46 la_modifie:= TRUE;
  3572. 47
  3573. 48 (* calcule le code suivant, en sautant les codes speciaux *)
  3574. 49, l_code:= | code+ 1;
  3575. | 50 IF | code= $80
  3576. 51 THEN / code:= $81;
  3577. 52 IF | code= $C9
  3578. 53 THEN | code:= $CB;
  3579. 54 END; (* modifie *)
  3580. Sp
  3581. | 56 BEGIN (* modifie_commande *)
  3582. | 57 WRITE('o(k modifier turbo.com ? ’);
  3583. i 58 READ(KBD, choix); WRITELN(choix/);
  3584. 59 IF choix] <> ’o’
  3585. 60 THEN EXIT;
  3586. 61
  3587. 62 WRITE(’ nom du fichier de sortie <err.pas> ?’);
  3588. 63 READLN(l_nom_sortie);
  3589. 64 ASSIGN(L sortie, |_nom_sortie);
  3590. 65 REWRITE(! sortie);
  3591. 66
  3592. 67 ASSIGN(L turbo_com, ’turbo.com’ );
  3593. 68 RESET(/_turbo_com, $100);
  3594. 69
  3595. 70 1 bloc_courant:= 0;
  3596. 71 | a_modifie:= FALSE;
  3597. | 72 l_code:= 100;
  3598. ne
  3599. 74 modifie($5C, $61D3, ‘erreur creation fichier’ );
  3600. 75 modifie($62, $6504, ’debordement a I’’ execution. Table des intermediaires’ );
  3601. 76 modifie($5A, $65F6, ‘erreur chargement OVERLAY’);
  3602. | 77 modifie($62, $6695, ’debordement à I’’ execution. Globales’ );
  3603. 78 modifie($62, $669F,, ’debordement à l’’ execution. Locales’);
  3604. 79 modifie($62, $66AF, ’debordement à l''execution. Paramètres’ );
  3605. 80 modifie($24, $685C, ‘attend nom de TYPE’);
  3606. 81 modifie($62, $6893, ’débordement d’’ indice’);
  3607. 82 modifie($62, $68B5, débordement du nombre d’’ octets du tableau’);
  3608. 83 modifie($31, $6A97, ’ taille STRING 0’);
  3609. | 84 modifie($1E, $6B3E, ‘attend comme borne d’’intervalle un TYPE scalaire’ );
  3610. 85 modifie($2B, $6C22, déjà rencontré ce LABEL’);
  3611. 86 modifie($29, $6CCO, ‘compteur du FOR pas déclaré’ );
  3612. 87 modifie($1E, $6CDA, ‘le compteur du FOR doit etre un TYPE simple’);
  3613. 88 modifie($2C, $6CF2,
  3614. 89 ‘la borne inférieure du FOR n’’a pas le TYPE du compteur );
  3615. 90 modifie($2C, $6D0A,
  3616. 91 ‘la borne supérieure du FOR n’’a pas le TYPE du compteur’ );
  3617. | 92 modifie($0D, $6D13,’ attend DO après le FOR’);
  3618. 93 modifie($0E, $6E73, ’ attend le END de l'instruction CASE’ );
  3619. i AU COEUR DE TURBO PASCAL 480 AU COEUR DE TURBO PASCAL
  3620. 8 MODIFICATIONS 8
  3621. 8.5 modification des numéros d’erreur 8.5
  3622. 94 modifie($29, $6E77, ‘erreur en fin de CASE’);
  3623. 95 modifie($2E, $6E9B, 'TYPE de l'’étiquerte du CASE<> du TYPE du sélecteur );
  3624. 96 modifie($48, $6EB9,’GOTO hors du bloc’);
  3625. 97 modifie($29, $6EES, ‘nom après WITH inconnu’ );
  3626. 98 modifie($0D, $6F 38, ’DO attendu après le WITH’);
  3627. 99 modifie($29, $708A, ‘nom du paramètre illégal’);
  3628. 100 modifie($29, $71B6, ’ peut pas affecter à ce nom’);
  3629. 101 modifie($2C, $722A, TYPE dans l'’expression incompatibles’);
  3630. 102 modifie($2C, $729B, ’ types scalaires dans |’’ expression incompatibles’ );
  3631. 103 modifie($29, $72A7, ‘peut pas affecteur à une fonction en dehors de son corps’);
  3632. 104 modifie($29, $742F,’READ FILE ou FILE OF’);
  3633. 105 modifie($29, $743B, 'READ d’’une variable’ );
  3634. 106 modifie($41, $7531,’ pas WRITE d''un fichier de bloc’ );
  3635. 107 modifie($42, $7585, ‘pas WRITE de ce TYPE de variables’);
  3636. 108 modifie($23, $760D, ‘attend FILE OF’);
  3637. 109 modifie($18, $77D0, 'résultat de VAL doit être réel ou entier’ );
  3638. 110 modifie($2F, $7B10, ‘test de SET illégal’ );
  3639. 111 modifie($2C, $7B1A, 'SETs comparés de TYPE différents’);
  3640. 112 modifie($2F, $7B69, ’ pas addition de pointeurs’);
  3641. 113 modifie($2F, $7BD8, ‘pour les STRING, seul + est permis’);
  3642. 114 modifie($2F, $7BE9,’OR ou XOR que sur les entiers et les booléens’);
  3643. 115 modifie($2F, $7C04, ’ pas de multiplication de pointeurs’);
  3644. 116 modifie($2F, $7CS5A, '/ que entre réels’);
  3645. 117 modifie($2F, $7C6C, multiplication, divisions que sur des entiers’);
  3646. 118 modifie($2F, $7C8A,’NOT que sur des entiers et des booléens’ );
  3647. 119 modifie($2C, $7D8E, ’facteurs différents 1’);
  3648. 120 modifie($2C, $7DAS, ‘facteurs différents 2’);
  3649. 121 modifie($2C, $7DCS, ‘facteurs différents 3’);
  3650. 122 modifie($29, $7EAB, 'facteur illégal’);
  3651. 123 modifie($3E, $7F0A, ‘attend facteur tableau de caractères’ );
  3652. 124 modifie($3E, $7F16, ’ attend tableau de caractères d’’ une dimension’ );
  3653. 125 modifie($3E, $7F 1F, ‘attend tableau de caractères d’’ indice 0..255’);
  3654. 126 modifie($2C, $7F FE, ‘éléments de SET littéral de types différents’ );
  3655. 127 modifie($2C, $8019, ‘borne supérieure du SET littéral de TYPE différent’);
  3656. 128 modifie($1E, $804D, ’ne peut surtyper que des types simples’);
  3657. 129 modifie($23, $81FC,’EOLN que de fichiers TEXT’);
  3658. 130 modifie($3F, $8216,’ pas FILESIZE ou FILEPOS de fichiers TEXT”);
  3659. 131 modifie($3F, $822C, ‘pas LONGFILEZIZE ou POS de fichiers TEXT’);
  3660. 132 modifie($29, $828B, le paramètre de OFS doit être un nom’);
  3661. 133 modifie($29, $82A3, ’le paramètre de SEG doit être un nom’);
  3662. 134 modifie($29, $82DF, ‘le paramètre de SIZEOD doit être un nom’ );
  3663. 135 modifie($29, $8368, ‘nom du paramètre de la fonction standard inconnu’);
  3664. 136 modifie($15, $836C, ‘le paramètre de la fonction standard doit etre un fichier’);
  3665. 137 modifie($2C, $8557, ‘indice du mauvais TYPE’);
  3666. 138 modifie($2D, $856E, ’indice constant hors intervalle’ );
  3667. 139 modifie($29, $8646, ‘nom de zone inconnu’);
  3668. 140 modifie($29, $8772, ‘attend un nom’);
  3669. 141 modifie($29, $88D4, ‘attend une constante’);
  3670. 142 modifie($16, $88DF, ‘attend une constante entiére’ );
  3671. 143 modifie($19, $8949, ‘signe + ou - que devant entier ou réel’ );
  3672. 144 modifie($62, S8B64, ‘code dépasse 64K’);
  3673. 145
  3674. 146 CLOSE(!_turbo_com);
  3675. 147 CLOSE(!_ sortie);
  3676. 148 END, (* modifie_codes *)
  3677. 149
  3678. AU COEUR DE TURBO PASCAL
  3679. 481 AU COEUR DE TURBO PASCAL
  3680. ==================== PAGE 48 ====================
  3681. 8 MODIFICATIONS 8
  3682. 8.5 modification des numéros d'erreur 8.5
  3683. 150 BEGIN (* principal *)
  3684. 151 IF memw/[cseg:$0101]+ $0103<> $2D4D
  3685. 152 THEN BEGIN
  3686. 153 WRITELN(’ cet utilitaire ne fonctionne’ );
  3687. 154 WRITELN(’qu’’ avec la version 3.02B de TURBO’ );
  3688. 155 EXIT;
  3689. 156 END;
  3690. 157
  3691. 158 REPEAT
  3692. 159 WRITE(' m(odifier codes erreur, q(uitte ? ’);
  3693. 160 READ(KBD, choix); WRITELN(choix); fl
  3694. 161 CASE choix OF q
  3695. 162 ‘m’ : modifie_codes;
  3696. 163 END; © À
  3697. 164 UNTIL choix= 'q'; À
  3698. | 165 END. (* principal *) À
  3699. Fig. 8.4 Le programme modifie codes_erreur.
  3700. {8.6 | CONCLUSION |
  3701. Ce chapitre a présenté des modifications du module de commande, de la table des commandes de
  3702. l'éditeur, des options de compilation par défaut et des numéros d’erreur.
  3703. " AU COEUR DE TURBO PASCAL 482 AU COEUR DE TURBO PASCAL
  3704. LISTE DES PROGRAMMES
  3705. LISTE DES PROGRAMMES
  3706. AU COEUR DE TURBO PASCAL 483 AU COEUR DE TURBO PASCAL
  3707. ==================== PAGE 49 ====================
  3708. LISTE DES PROGRAMMES q
  3709. Ce livre contient deux types de programmes:
  3710. — des utilitaires de diagnostic et de traitement 4
  3711. — des programmes qui nous.ont servi à analyser le fonctionnement de TURBO PASCAL.
  3712. Le second type de programmes n’a servi qu’à notre exposé, et nous n’en referons pas la liste. Les
  3713. utilitaires peuvent au contraire vous servir pour la programmation en TURBO PASCAL. La table
  3714. qui suit vous permettra de les retrouver plus facilement dans le livre. Ce sont eux qui sont placés
  3715. sur la disquette que vous pouvez vous procurer à l’Institut Pascal.
  3716. AFFICHAGE MEMOIRE ET DISQUE À
  3717. affichage décimal du contenu de la mémoire 45 1
  3718. affichage hexadécimal d’un entier 50 iq
  3719. affichage hexadécimal du contenu mémoire 52 q
  3720. affichage binaire d’un entier 54 q
  3721. affichage hexadécimal d’un secteur disque 55 \
  3722. affichage du plan mémoire TURBO PASCAL 70 (|
  3723. affichage du bloc de contrôle d’un fichier 306 à
  3724. affichage du bloc de contrôle d’un fichier TEXT 318 a
  3725. affichage des variables globales d’un programme 433 4
  3726. TRAITEMENTS
  3727. décodage d’un réel 124
  3728. décodage d’un réel BCD 132 |
  3729. décodage d’un réel 8087 137 4
  3730. ouverture de fichier 405 |
  3731. test de présence d’un fichier 407 |
  3732. conversion majuscule de fichier 423 À
  3733. MODIFICATION DE TURBO.COM |
  3734. chargement automatique des messages 468 i
  3735. reconfiguration des touches de l’éditeur 470 i
  3736. modification de l’option R- par défaut 477 1
  3737. modification des numéros d'erreur du compilateur 478 À
  3738. f
  3739. i
  3740. |
  3741. iy
  3742. AU COEUR DE TURBO PASCAL 484 AU COEUR DE TURBO PASCAL à
  3743. 14 "1
  3744. TABLE DES MATIERES
  3745. TABLE DES MATIERES
  3746. AU COEUR DE TURBO PASCAL
  3747. AU COEUR DE TURBO PASCAL
  3748. ==================== PAGE 50 ====================
  3749. TABLE DES MATIERES
  3750. TABLE DES MATIERES
  3751. INTRODUCTION 17 4 IMPLEMENTATION DES TYPES 99
  3752. 1.1 LES OBJECTIFS DE CE LIVRE 18 4.1 LES TYPES SIMPLES ELEMENTAIRES 100
  3753. 1.2 LA CONFIGURATION ET LES LOGICIELS UTILISES 18 41. LE TYPE ENTIER 100
  3754. L3 NOTATIONS 19 4.1.1.1. DEFINITION DU TYPE ENTIER 100
  3755. 1.4 AMELIORATIONS 19 4.1.1.2 REPRESENTATION DU TYPE ENTIER 100
  3756. 4.1.1.3. IMPLANTATION DES ENTIERS 102
  3757. 4.1.1.4 EXAMEN MEMOIRE 103
  3758. 4.1.1.5 RESUME 104
  3759. 2 LES DONNEES EN 8088 21 4.1.2 LE TYPE CARACTERE 105
  3760. 4.1.2.1. DEFINITION DU TYPE CARACTERE 105
  3761. 2: LES UNITES EN INFORMATIQUE 22 4.1.2.2 REPRESENTATION DU TYPE CARACTERE 105
  3762. 211 LE BIT ET LES REGROUPEMENTS DE BITS 22 4.1.2.3. : EXAMEN DE LA MEMOIRE 107
  3763. 2.12 LES BASES DE NUMERATION 23 4.1.2.4 LES CARACTERES ET LES PERIPHERIQUES 108
  3764. 2.13 LE QUARTET 24 4.1.2.5 RESUME 109
  3765. 2.1.4 L’OCTET 24 4.1.3 LE TYPE BOOLEEN 110
  3766. 285 LE MOT 25 4.1.3.1 DEFINITION DU TYPE BOOLEEN 110
  3767. 2.1.6 LE SECTEUR, LE BLOC, LE CLUSTER 26 4.1.3.2 REPRESENTATION DU TYPE BOOLEEN 110
  3768. 2 07 LEK 26 4.1.3.3. EXAMEN DE BOOLEENS 111
  3769. 2.1.8 LE PARAGRAPHE 27 4.1.3.4 RESUME 13
  3770. 2.2 LE FONCTIONNEMENT DU 8088 27 4.1.4 LE TYPE ENUMERE 113
  3771. 2.2.1 L’ARCHITECTURE DU PC 27 4.1.4.1. DEFINITION DU TYPE ENUMERE 113
  3772. vy he) L’ ADRESSAGE SEGMENTE DU 8088 29 4.1.4.2 REPRESENTATION DU TYPE ENUMERE 113
  3773. 223 LE CODE, LES DONNEES ET LA PILE 35 4.1.4.3 IMPLANTATION DU TYPE ENUMERE 114
  3774. 2.2.4 LES REGISTRES DU 8088 41 4.144 EXAMEN DES TYPES ENUMERES 114
  3775. 225 LE REGISTRE D'ETAT 42 4.1.4.5 RESUME 116
  3776. 2.2.6 LES INSTRUCTIONS DU 8088 42 4.1.5 LE TYPE INTERVALLE NUMERIQUE 116
  3777. 2,3 PROGRAMMES D'EXAMEN 45 4.1.5.1 DEFINITION DU TYPE INTERVALLE 116
  3778. 2 AFFICHAGE DU CONTENU MEMOIRE 45 4.1.5.2. REPRESENTATION DU TYPE INTERVALLE 116
  3779. 2.3.2 LES MANIPULATIONS AU NIVEAU DU BIT EN TURBO 46 4.1.5.3. IMPLANTATION EN MEMOIRE 116
  3780. 2:35 AFFICHAGE HEXADECIMAL 49 4.1.5.4. EXAMEN DU TYPE INTERVALLE 117
  3781. 2.3.4 LE PROGRAMME D'AFFICHAGE STANDARD 52 4.1.5.5 RESUME 120
  3782. 2:35 AFFICHAGE BINAIRE 54 42 LE TYPE REEL 120
  3783. 2.3.6 LECTURE D’UN BLOC DISQUE 55 4.2.1 DEFINITION 120
  3784. 2.4 CONCLUSION 58 4.2.2 REPRESENTATION DES REELS 121
  3785. 2.5 BIBLIOGRAPHIE 58 4.2.3 IMPLANTATION MEMOIRE 122
  3786. 4.2.4 EXAMEN DES REELS 123
  3787. 4.2.5 DECODAGE D'UN REEL 124
  3788. 4.2.6 RESUME 128
  3789. 3 ORGANISATION MEMOIRE DE TURBO PASCAL 59 43 LE TYPE BCD 128
  3790. 4.3.1 DEFINITION 128
  3791. 3.1 ORGANISATION MEMOIRE DU PC 60 4.3.2 UTILITE DES REELS BCD 129
  3792. AL LES COUCHES DU PC 60 4.3.3 REPRESENTATION DES REELS BCD 129
  3793. 3:2 LA MEMOIRE DU PC ETEINT 60 4.3.4 IMPLANTATION MEMOIRE 130
  3794. 3.1.3 ORGANISATION MEMOIRE DU DOS 62 43.5 EXAMEN DES REELS BCD 130
  3795. 3.2 L'ORGANISATION MEMOIRE DE TURBO PASCAL 63 43.6 DECODAGE D'UN REEL BCD 132
  3796. 3.3 COMPILATION D'UN PROGRAMME EN MEMOIRE 65 43.7 RESUME 134
  3797. 3.4 L'AFFICHAGE DU PLAN MEMOIRE 69 44 LE TYPE REEL 8087 134
  3798. 3.5 ORGANISATION D'UN PROGRAMME .COM 76 a 4.4.1 DEFINITION 134
  3799. 3.6 COMPILATION D'UN PROGRAMME AVEC INCLUDE 79 We 442 UTILITE DES REELS 8087 136
  3800. 3.7 ORGANISATION D'UN PROGRAMME AVEC OVERLAY 83 à 443 REPRESENTATION DES REELS 8087 136
  3801. 3.8 ORGANISATION D’UN PROGRAMME .CHN 87 {| 4.44 IMPLANTATION MEMOIRE 138
  3802. 3.9 ORGANISATION D'UN PROGRAMME AVEC EXTERNAL 93 1 4.4.5 EXAMEN DES REELS 8087 138
  3803. 3.A ORGANISATION D'UN PROGRAMME AVEC INLINE 94 1 4.4.6 DECODAGE D'UN REEL 8087 139
  3804. 3.B LA CAPACITE MEMOIRE 96 ri 4.4.7 RESUME 142
  3805. ae LE MENU OPTION DE TURBO 96 1
  3806. 3.D CONCLUSION 97
  3807. i AU COEUR DE TURBO PASCAL 486 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 487 AU COEUR DE TURBO PASCAL
  3808. ==================== PAGE 51 ====================
  3809. TABLE DES MATIERES il TABLE DES MATIERES
  3810. 4.5 LE TYPE STRUCTURE TABLEAU 142 q 3 ENTIERS, CARACTERES, BOOLEENS, ENUMERES, REELS 211
  3811. 4.5.1 DEFINITION 142 ; 513.1 LES ENTIERS 211
  3812. 4152 IMPLEMENTATION DES TABLEAUX 142 q 5.3.1.1 = ARITHMETIQUE ENTIERE 211
  3813. 4.5.3 IMPLANTATION DES TABLEAUX EN MEMOIRE 144 5.3.1.2. COMPARAISON D’ENTIERS 214
  3814. 4.5.4 EXAMEN D’UN TABLEAU 145 i S31 1,3 AND, OR, XOR, SHR et SHL 216
  3815. | 4.5.5 LES TABLEAUX COMPACTES 147 À SS: lad PROCEDURES ET FONCTIONS STANDARD 216
  3816. | 4.5.6 LES TABLEAUX DE CARACTERES 149 a AA LS AFFECTATION ET EXPRESSION D’INTERVALLES 216
  3817. | 4.5.7 LES CHAINES DE CARACTERES 150 4 5.3.1.6 RESUME 223
  3818. 458 RESUME 154 if 5:3:2 AFFECTATION ET EXPRESSIONS REELLES 223
  3819. 4.6 LES ENREGISTREMENTS 154 ql 553241 AFFECTATION D’UN REEL 223
  3820. 4.6.1 DEFINITION 154 à 53:2:2 ARITHMETIQUE REELLE 224
  3821. 4.6.2 IMPLEMENTATION DES ENREGISTREMENTS 154 | 5:3:2.3 COMPARAISON DE REELS 226
  3822. | 4.6.3 IMPLANTATION MEMOIRE DES ENREGISTREMENTS 155 ! 5.3.2.4 LES CONSTANTES ET VALEURS LITTERALES REELLES 227
  3823. | 4.6.4 LES ENREGISTREMENTS VARIANTS 157 it 53.2.5 LES PROCEDURES STANDARD 229
  3824. 4.6.4.1 DEFINITION 157 4 5,3:2:6 READ ET WRITE DE REELS 230
  3825. 4.6.4.2 EXEMPLE D’ENREGISTREMENT VARIANT 158 | SA: LES REELS ET LES ENTIERS 232
  3826. 4.6.4.3 IMPLEMENTATION DES ENREGISTREMENTS VARIANTS 161 1 5.3.2.8 RESUME 235
  3827. 4.6.4.4 IMPLEMENTATION DES ENREGISTREMENTS VARIANTS LIBRES 164 4 6:35 LE TYPE ENUMERE 235
  3828. 4.6.4.5 RISQUE DES ENREGISTREMENTS VARIANTS 166 | 5.3.4 LE TYPE BOOLEEN 237
  3829. 4.6.5 RESUME 168 4 5.3.4.1 AFFECTATION DE BOOLEENS 237
  3830. i 47 LES ENSEMBLES 168 1 5.3.4.2 ARITHMETIQUE BOOLEENNE 239
  3831. 4m DEFINITION 168 | 5.3.4.3 AFFICHAGE DE BOOLEENS 240
  3832. | 4.7.2 IMPLEMENTATION DES ENSEMBLES NUMERIQUES 168 i 5.344 RESUME 241
  3833. 4.7.3 IMPLANTATION EN MEMOIRE DES ENSEMBLES 170 il 335 LES CARACTERES 242
  3834. | 4.7.4 EXAMEN MEMOIRE DES ENSEMBLES 170 g 5.3.5.1 AFFECTATION DE CARACTERES 242
  3835. 4.7.5 IMPLEMENTATION D’ENSEMBLES NON NUMERIQUES 174 4 513:5,2 LECTURE ET ECRITURE DE CARACTERES 243
  3836. 4.7.6 RESUME 176 \ 5.3.6 RESUME SUR LES TYPES SIMPLES 245
  3837. 4.8 LE TYPE POINTEUR 176 iq 5.4 LES TYPES STRUCTURES 245
  3838. 4.8.1 DEFINITION 176 1 5.4.1 GENERALITES 245
  3839. 4.8.2 LE MECANISME D’ALLOCATION 177 q 5.4.2 LES TABLEAUX 246
  3840. | 4.8.3 IMPLEMENTATION DES POINTEURS 185 q 5.4.2.1 TRAITEMENT DES INDICES CONSTANTS 246
  3841. 4.8.4 IMPLANTATION MEMOIRE DU TYPE POINTEUR 186 i 5.4.2.2 AFFECTATION A UNE CELLULE 248
  3842. | 4.8.5 VISUALISATION DE LA VALEUR D'UN POINTEUR 186 i 5.4.2.3. OPTIMISATION DU CALCUL D’ INDICE 250
  3843. | 4.8.6 EXAMEN DES POINTEURS 186 1 5.4.2.4 ACCES A UNE CELLULE DANS UNE EXPRESSION 252
  3844. 4.8.7 LES POINTEURS D’ENREGISTREMENTS VARIANTS 188 4 5.4.2.5 | TABLEAU A DEUX DIMENSIONS 253
  3845. 4.8.8 RESUME 189 ï 5.4.2.6 LES OPERATIONS GLOBALES SUR LES TABLEAUX 255
  3846. 4.9 FORMAT DES FICHIERS SUR DISQUETTE 190 4 5.4.2.7 RESUME SUR LES TABLEAUX 257
  3847. 4.9.1 INTRODUCTION 190 il 5.4.3 LE TYPE STRING 257
  3848. 4.9.2 LES FICHIERS DE CODE 190 Wy 5.4.3.1 PARTICULARITES DU TYPE STRING 257
  3849. 4.9.3 LES FICHIERS DE DONNEES 191 i, 5.4.3.2 AFFECTATION DE CHAINE 258
  3850. 4.9.4 LES FICHIERS DE BLOCS 193 5.4.3.3 COMPARAISON DE CHAINES 259
  3851. 4.9.5 LES FICHIERS DE TEXTE 193 5.4.3.4 LECTURE ET ECRITURE DE CHAINES 261
  3852. | 4.A CONCLUSION 196 5.4.3.5. PROCEDURES ET FONCTIONS STRING STANDARD 263
  3853. | 4.B BIBLIOGRAPHIE 197 5.4.3.6 RESUME 265
  3854. | 4 5.4.3.7 ASSIMILATION DES CARACTERES AUX CHAINES 265
  3855. q 5.4.3.8 LES TABLEAUX DE CARACTERES 267
  3856. q M 5.4.4 LES ENREGISTREMENTS 270
  3857. . 5 LE CODE COMPILE 199 L 5.44.1 AFFECTATION ET EXPRESSION D’ENREGISTREMENTS 270
  3858. nl. a 5.4.4.2. STRUCTURES DE STRUCTURES 271
  3859. it 5.1 L’ANALYSE D’UN PROGRAMME COMPILE 200 5.443 L’INSTRUCTION WITH 273
  3860. SA 1 L’ANALYSE DU CODE 200 q 5.4.4.4. RESUME 076
  3861. 54112 L’ANALYSE D'UN PROGRAMME SIMPLE 200 5.4.5 LES ENSEMBLES 276
  3862. | $1113 LA STRATEGIE DE COMPILATION 202 5.4.5.1. AFFECTATION D'UN ENSEMBLE 276
  3863. | $2 LES PHASES DE COMPILATION 205 i 5.4.5.2. ARITHMETIQUE SUR LES ENSEMBLES 278
  3864. sai LES ELEMENTS D'UN PROGRAMME 205 Af 5.4.5.3. LES TESTS SUR LES ENSEMBLES 280
  3865. $:2.2 LES DEFINITIONS DE LABELS 206 (0 5.4.5.4 RESUME 282
  3866. 512.3 LES DEFINITIONS DE TYPES 206 jh
  3867. 5.2.4 LES DEFINITIONS DE CONSTANTES SIMPLES 207 |
  3868. 512.5 LES VARIABLES 209 a
  3869. 512.6 LES INSTRUCTION PASCAL 211 a
  3870. | AU COEUR DE TURBO PASCAL 488 AU COEUR DE TURBO PASCAL 4 AU COEUR DE TURBO PASCAL 489 AU COEUR DE TURBO PASCAL
  3871. ==================== PAGE 52 ====================
  3872. TABLE DES MATIERES
  3873. TABLE DES MATIERES
  3874. 5.4.6 LES POINTEURS 282 6 LES OPTIONS DE COMPILATION 387
  3875. 5.4.6.1 AFFECTATION DE POINTEURS 282
  3876. 5.4.6.2 LES PROCEDURES DE TRAITEMENT DE POINTEURS 284 6.1 LES OPTIONS DE COMPILATION 388
  3877. 5.4.6.3 AFFECTATION A LA VARIABLE POINTEE 286 6.1.1 DEFINITION 388
  3878. 5.4.6.4 LES POINTEURS DE TABLEAUX: 288 612 SYNTAXE 388
  3879. 5.4.6.5 POINTEURS ET ENREGISTREMENTS 289 613 EFFET 389
  3880. 5.4.6.6 LES POINTEURS ET WITH 292 6.1.4 LA LISTE DES OPTIONS 389
  3881. 5.4.6.7 RESUME 294 6.2 LES FICHIERS INCLUS: L'OPTION I 390
  3882. 5:5 READ ET WRITE 294 6.2.1 DEFINITION 390
  3883. 5.5.1 INTRODUCTION 294 6.2.2 MOTIVATION 390
  3884. 5.5.2 WRITE(OUTPUT) ET READ(INPUT) 294 6.2.3 FONCTIONNEMENT 391
  3885. . | 5.5.2.1 WRITE VERS OUTPUT 294 6.2.4 UTILISATION 392
  3886. 5.5.2.2 WRITELN 297 6.3 LA GESTION DES ERREURS: R, I, K, V 394
  3887. | | 5.5.2.3 FORMATAGE DE L’AFFICHAGE 298 gi LA GESTION DES ERREURS 394
  3888. | 5.524 READ DE INPUT 300 63.2 LES OPTIONS R+ R- 396
  3889. i} 5.5.2.5 READLN 302 6.3.2.1 DEFINITION DE L’OPTION R 396
  3890. | 5.5.3 LES FICHIERS SUR DISQUE 303 6.3.2.2 MOTIVATION 396
  3891. 11 5.53.1 TRAITEMENT D'UN FICHIER DE FICHES 303 | 6.3.2.3. FONCTIONNEMENT 397
  3892. if 5.5.3.2 LE BLOC DE CONTROLE D'UN FICHIER 306 1 6324 UTILISATION 401
  3893. i] 5.5.3.3. LES AUTRES PROCEDURES STANDARD 307 6.33 LES OPTIONS I+ I- 401
  3894. | 5.5.4 LES FICHIERS DE BLOCS 310 i 633.1 DEFINITION DE L’OPTION I 401
  3895. | 5.5.4.1 TRAITEMENT D'UN FICHIER DE BLOCS 310 Hi 63,3 2 MOTIVATION 402
  3896. | | 6:5.4.2 LES AUTRES PROCEDURES STANDARD 312 6.3.3.3 FONCTIONNEMENT 402
  3897. | ve A ho] LES FICHIERS DE TYPE TEXT 312 6.3.3.4 UTILISATION 405
  3898. 5.5.5.1. TRAITEMENT D'UN FICHIER DE TYPE TEXT 312 634 LES OPTIONS K+ K- 407
  3899. 55.2 LES PERIPHERIQUES COMME FICHIERS TEXT 314 6.3.4.1 DEFINITION DE L’OPTION K 407
  3900. 5.5.5.3. LE BLOC DE CONTROLE DES FICHIERS TEXT 318 6342 MOTIVATION 407
  3901. 5.5.6 RESUME 323 6.3.4.3. FONCTIONNEMENT 408
  3902. 5.6 LES INSTRUCTIONS DE CONTROLE 324 6.3.4.4 UTILISATION 409
  3903. 5.6.1 IF 324 6.3.5 L'OPTION V 409
  3904. 5.6.2 CASE 326 6.3.5.1 DEFINITION 409
  3905. 5.6.3 REPEAT 329 6.3.5.2 MOTIVATION 410
  3906. 5.6.4 WHILE 331 6.3.5.3. FONCTIONNEMENT 410
  3907. 5.6.5 FOR 333 6.4 LE CLAVIER: B, D, C, U 411
  3908. 5.6.6 EXIT 337 6.4.1 LES OPTIONS B+ B- 411
  3909. 5.6.7 L’ INSTRUCTION GOTO 338 6.4.1.1 DEFINITION DE L’OPTION B 411
  3910. 7 LES APPELS DE PROCEDURES 341 6.4.1.2 MOTIVATION 412
  3911. &:7.1 UN APPEL DE ROUTINE 8088 341 6.4.1.3 FONCTIONNEMENT 413
  3912. 5.7.2 APPEL DE PROCEDURE SIMPLE 345 6414 UTILISATION 415
  3913. 7.3 UNE PROCEDURE AVEC DES VARIABLES LOCALES 349 6.4.2 LES OPTIONS D+ ET D- 415
  3914. 5.7.4 UNE CHAINE D'APPELS 353 6.4.2.1 DEFINITION 415
  3915. 575 APPELS EMBOITES 357 6.4.2.2 MOTIVATION 416
  3916. 5.7.6 LES PARAMETRES VALEUR ET VARIABLE 364 6.4.2.3. FONCTIONNEMENT 416
  3917. 57.7 LES APPELS DE FONCTIONS 371 6.4.2.4 UTILISATION 417
  3918. 5.8 LES CONSTANTES TYPEES 376 6.43 LES OPTIONS C+ C- 417
  3919. 5.8.1 DEFINITION DES CONSTANTES TYPEES 376 6.4.3.1. DEFINITION 417
  3920. 5.8.2 LES CONSTANTES TYPEES SIMPLES 377 À 6.4.3.2. MOTIVATION 417
  3921. 5.8.3 LES CONSTANTES TYPEES COMPLEXES 379 i 6.4.3.3 FONCTIONNEMENT 417
  3922. 5.8.4 RESUME 381 ) 643.4 UTILISATION 417
  3923. 5.9 LES VARIABLES ABSOLUES 382 i 6.4.4 LES OPTIONS U+ ET U- 417
  3924. 5.9.1 DEFINITION DES VARIABLES ABSOLUES 382 q 6441 DEFINITION 417
  3925. 5.9.2 ACCES AUX VARIABLES ABSOLUES 382 1 6442 MOTIVATION 417
  3926. | 5.9.3 RESUME 384 6.443 FONCTIONNEMENT 417
  3927. if 5.A SYNTHESE 384 1 6.444 UTILISATION 421
  3928. 5.B CONCLUSION 385 | 6.5 LES FICHIERS: F, G, P 422
  3929. | q 6.5.1 L’OPTION F 422
  3930. ; i 6.5.1.1 DEFINITION DE L’OPTION F 422
  3931. i 6.5.1.2 MOTIVATION 422
  3932. i 6.5.1.3. FONCTIONNEMENT 422
  3933. i]
  3934. AU COEUR DE TURBO PASCAL 490 AU COEUR DE TURBO PASCAL
  3935. | i AU COEUR DE TURBO PASCAL 491 AU COEUR DE TURBO PASCAL
  3936. | 1
  3937. ==================== PAGE 53 ====================
  3938. TABLE DES MATIERES 1 “ INDEX
  3939. 652 LES OPTIONS GETP 423
  3940. 6521 DEFINITION 423
  3941. 6522 MOTIVATION 433
  3942. 6523 UTILISATION °. 423
  3943. 66 CONCLUSION 424
  3944. 7 LES GLOBALES ET LA LIBRAIRIE 425
  3945. 7.1 LA LIBRAIRIE ET LES GLOBALES 426
  3946. 72 LES DONNEES GLOBALES 46
  3947. 721 LALISTE DES DONNEES GLOBALES 426
  3948. 722 LE PROGRAMME D'AFFICHAGE DES GLOBALES 433
  3949. 723 L'AFFICHAGE DES GLOBALES 439
  3950. 73 LES ROUTINES DE LA LIBRAIRIE 441 0
  3951. 73.1 LES ROUTINES PRESENTEES 441 INDEX
  3952. j 732 LES ENTREES SORTIES 441
  3953. | 733 LAGESTION DES POINTEURS 446
  3954. | 734 ROUTINES DIVERSES 447
  3955. | 73.5 LES CHAINES 451
  3956. (1 7136 LES ENSEMBLES 453
  3957. 137 LES REELS 455
  3958. i 738 LES FICHIERS 458
  3959. 1 74 LES TABLES DE LA LIBRAIRIE 465
  3960. 75 CONCLUSION 465
  3961. |
  3962. og 8 MODIFICATIONS DE TURBO.COM 467
  3963. i 81 AVERTISSEMENT 468
  3964. . 82 MODIFICATION DU MODULE DE COMMANDE 468
  3965. | 83 LES COMMANDES DE L'EDITEUR 470
  3966. 84 MODIFICATION DES OPTIONS DE COMPILATION 477
  3967. 85 MODIFICATION DES NUMEROS D'ERREUR 478
  3968. | 8.6 CONCLUSION 482
  3969. 0 PASCAL
  3970. à. AU COEUR DE TURBO PASCAL 493 AU COEUR DE TURBO PAS
  3971. Hl AU COEUR DE TURBO PASCAL 492 AU COEUR DE TURBO PASCAL i
  3972. ==================== PAGE 54 ====================
  3973. INDEX INDEX
  3974. # - caractères 109 CHN - compilation 87
  3975. A - caractères 109 CHR 109
  3976. CLOSE - compilation 303, 310, 312
  3977. code - structure globale 201
  3978. code ASCII 105
  3979. i COM - compilation 78
  3980. ABS - compilation 216 COM - format 190
  3981. ABS - compilation réels 229 COMMAND.COM 63
  3982. absolues - variables 382 compactage - tableaux 147
  3983. ABSOLUTE 180 compilation - absolute 382
  3984. absolute - compilation 382 compilation - appel de procédure 341
  3985. adresse - paramètres 364 compilation - ASSIGN 303, 310, 312
  3986. affichage - pointeurs 186 compilation - AUX 314
  3987. affichage disque 55 compilation - BLOCKREAD 310
  3988. affichage hexadécimal 449 compilation - BLOCKWRITE 310
  3989. affichage mémoire 449 compilation - booléens 237
  3990. affichage plan mémoire 69 compilation - caractères 242
  3991. allocation - compilation 209 compilation - CASE 326
  3992. AND 47 compilation - CHN 87
  3993. AND - compilation 216 compilation - CLOSE 303, 310, 312
  3994. appel de procédure - compilation 341 compilation - CON 314
  3995. appels emboîtés 357 compilation - CONST 207
  3996. ASCII 105 compilation - constantes 376
  3997. ASSIGN - compilation 303, 310, 312 compilation - enregistrements 270
  3998. AUX - compilation 314 compilation - ensembles 276
  3999. compilation - entiers 211
  4000. compilation - énumérés 235
  4001. compilation - EOF 314
  4002. compilation - EOLN 314
  4003. compilation - EXIT 337
  4004. B - option Buffer 411 compilation - EXTERNAL 93
  4005. BCD - réel 128 compilation - fichiers 294
  4006. BIOS 60 compilation - FILE 310
  4007. bit - traitement de 47 compilation - FILE OF 303
  4008. bloc de contrôle - TEXT 318 compilation - fonction 371
  4009. bloc de contrôle fichier 306 compilation - FOR 333
  4010. BLOCKREAD 55 compilation - GOTO 338
  4011. BLOCKREAD - compilation 310 compilation - IF 324
  4012. BLOCKWRITE - compilation 310 compilation - include 79
  4013. BOOLEAN - implémentation 110 compilation - INLINE 94
  4014. booléens - compilation 237 compilation - INPUT 294
  4015. BYTE 117 compilation - intervalle 219
  4016. compilation - KBD 314
  4017. compilation - LABEL 206
  4018. compilation - littéral 208
  4019. compilation - LST 314
  4020. compilation - MEMAVAIL 284
  4021. C - option Control 417 compilation - NIL 282
  4022. caractère - implémentation 105 compilation - options de 387
  4023. caractères - compilation 242 compilation - overlay 83
  4024. caractères - tableaux 149 compilation - OUTPUT 294
  4025. caractères et STRING 265 compilation - paramètres 364
  4026. CASE - compilation 326 compilation - pointeurs 282
  4027. CHAR - implémentation 105 compilation - PTR 284
  4028. chaînage de programmes 87 compilation - READ 294, 303, 312
  4029. chaîne - compilation 261 compilation - READLN 302
  4030. chaîne d'appel de procédures 353 compilation - REPEAT 239
  4031. chaînes - implémentation 150
  4032. chaînes et caractères 265
  4033. AU COEUR DE TURBO PASCAL 494 AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 495 AU COEUR DE TURBO PASCAL
  4034. ==================== PAGE 55 ====================
  4035. INDEX
  4036. INDEX
  4037. compilation - REWRITE 303, 310, 312
  4038. compilation - réels 223
  4039. compilation - SET 276
  4040. compilation - STRING 257
  4041. compilation - tableaux 245
  4042. compilation - TEXT 312
  4043. compilation - TRM 314
  4044. compilation - TYPE 206
  4045. compilation - USR 314
  4046. compilation - VAR 209
  4047. compilation - WITH 273
  4048. compilation - WHILE 331
  4049. compilation - WRITE 294, 297, 303, 312
  4050. compilation - WRITELN 297
  4051. compilation mémoire 65
  4052. compilation sur disque 78
  4053. complément à 2 100
  4054. CON - compilation 314
  4055. CONCAT - STRING 263
  4056. CONFIG.SYS 63
  4057. configuration - touches éditeur 470
  4058. CONST - compilation 207
  4059. constante typée - structurée 379
  4060. constantes typées - compilation 376
  4061. coprocesseur 8087 135
  4062. COS - compilation réels 229
  4063. CSEG 69
  4064. D - option Device 415
  4065. D option 423
  4066. DELETE - STRING 263
  4067. disque - compilation sur 78
  4068. DIV - compilation 211
  4069. DOS 60, 62
  4070. DSEG 69
  4071. éditeur - installation 470
  4072. emboîtés - appels 357
  4073. enregistrement variant 157
  4074. enregistrements - compilation 270
  4075. enregistrements - implémentation 154
  4076. enregistrements et pointeurs 289
  4077. ensemble - implémentation 168
  4078. ensembles - compilation 276
  4079. entier - formatage WRITE 298
  4080. entier - implémentation 100
  4081. entiers - compilation 211
  4082. entiers et réels 232
  4083. énuméré - compilation 235
  4084. EOF - compilation 314
  4085. EOLN - compilation 314
  4086. erreurs - gestion 394
  4087. erreurs de compilation 478
  4088. EXIT - FOR 339
  4089. EXIT - compilation 337
  4090. EXTERNAL - compilation 93
  4091. F - option Files 422
  4092. FCB 306
  4093. FCB - TEXT 318
  4094. FIB 306
  4095. FIB - TEXT 318
  4096. fichier - TEXT 193
  4097. fichier - bloc de contrôle 306
  4098. fichier .COM 190
  4099. fichiers - compilation 294
  4100. fichiers - format 190
  4101. fichiers de bloc - format 193
  4102. FILE - compilation 310
  4103. FILE - format 193
  4104. FILE OF - format 191
  4105. FILE OF - compilation 303
  4106. FILES 63
  4107. FILLCHAR 69
  4108. flottaisons - entiers 232
  4109. fonction - compilation 371
  4110. FOR - compilation 333
  4111. FOR - EXIT 339
  4112. FOR - GOTO 339
  4113. format - TEXT 193
  4114. format FILE 193
  4115. format FILE OF 191
  4116. formatage numérique - compilation 298
  4117. G - option Get 423
  4118. GETMEM 180
  4119. globale - opération tableaux 255
  4120. globales 426
  4121. GOTO - FOR 339
  4122. GOTO - compilation 338
  4123. handle fichier 306
  4124. HEAPPTR 69, 178
  4125. hexadécimal - conversion 449
  4126. | énuméré - implémentation 113 i, HI 449
  4127. AU COEUR DE TURBO PASCAL 496 AU COEUR DE TURBO PASCAL a AU COEUR DE TURBO PASCAL 497 AU COEUR DE TURBO PASCAL
  4128. ==================== PAGE 56 ====================
  4129. INDEX
  4130. I - option 390, 401
  4131. IF - compilation 324
  4132. implementation INTEGER 100
  4133. implémentation - BOOLEAN 110
  4134. implémentation - CHAR 105
  4135. implémentation - REAL 120
  4136. implémentation - SET 168
  4137. implémentation - STRING 150
  4138. implémentation - enregistrements 154
  4139. implémentation - intervalle 116
  4140. implémentation - pointeur 176
  4141. implémentation - réel 8087 128, 135
  4142. implémentation - tableaux 143
  4143. implémentation - variants 157
  4144. implémentation - énuméré 113
  4145. IN - compilation 280
  4146. include - compilation 79
  4147. indice - compilation 245
  4148. INLINE - compilation 94
  4149. INPUT - compilation 300
  4150. INPUT - compilation 294
  4151. INTEGER - compilation 211
  4152. INTEGER - implémentation 100
  4153. INTEL - format 8087 135
  4154. intervalle - compilation 219
  4155. intervalle - implémentation 116
  4156. intervalle - option 396
  4157. IORESULT 401
  4158. K - option 407
  4159. KBD - compilation 314
  4160. KEYBFR 63
  4161. LABEL - compilation 206
  4162. LENGTH 151
  4163. librairie - les routines 443
  4164. librairie - tables 465
  4165. libres - variants 164
  4166. littéral - compilation 208
  4167. LO 449
  4168. locales - variables 349
  4169. LST - compilation 314
  4170. AU COEUR DE TURBO PASCAL
  4171. 498
  4172. AU COEUR DE TURBO PASCAL
  4173. INDEX
  4174. M
  4175. MAXINT 100
  4176. MEM 45
  4177. MEMA VAIL - compilation 284
  4178. mémoire 60
  4179. mémoire - affichage plan 69
  4180. MEMW 74
  4181. menu - options 90, 96
  4182. messages - chargement 468
  4183. MOD - compilation 211
  4184. NEW 178
  4185. NEW - variants 188
  4186. NIL - compilation 282
  4187. NOT 47
  4188. NOT - compilation 216
  4189. OFS 69
  4190. optimisation - calcul d’indice 249
  4191. option - menu 96
  4192. option B (Buffer) 411
  4193. option C (Contrôle) 417
  4194. option D 423
  4195. option D (Device) 415
  4196. option F (Files) 422
  4197. option G (Get) 423
  4198. option I-(Include) 390
  4199. option I (input output) 401
  4200. option K (stack check) 407
  4201. option P (Put) 423
  4202. option R 249
  4203. option R (range check) 396
  4204. option R - modification 477
  4205. option U (User) 419
  4206. option V (Verify) 409
  4207. options - paramètre 201
  4208. options de compilation 387
  4209. options du menu 90
  4210. OR 47
  4211. OR - compilation 216
  4212. ORD 109
  4213. OUTPUT - compilation 294
  4214. OVERLAY = compilation 83
  4215. AU COEUR DE TURBO PASCAL 499
  4216. AU COEUR DE TURBO PASCAL
  4217. ==================== PAGE 57 ====================
  4218. | INDEX INDEX
  4219. |
  4220. SHL 48
  4221. SHL - compilation 216
  4222. P - option Put 423 SHR 48
  4223. PACKED 147 SHR - compilation 216
  4224. paramètres - compilation 364 SQR - compilation 211
  4225. plan mémoire 60, 65 SSEG 69
  4226. plan mémoire - affichage 69 statiques - variables 376
  4227. plan mémoire DOS 62 STR - STRING 263
  4228. pointeur - implémentation 176 STRING - compilation 257
  4229. pointeurs - WITH 292 STRING - implémentation 150
  4230. pointeurs - affichage 186 STRING et caractéres 265
  4231. pointeurs - compilation 282 structurée - constante typée 379
  4232. pointeurs - variants 188 SUCC - compilation 211
  4233. pointeurs de tableaux 288
  4234. pointeurs et enregistrements 289
  4235. PSP 66
  4236. PTR - compilation 284
  4237. tableau - implémentation 143
  4238. tableau à 2 dimensions 253
  4239. tableaux - affectation globale 255
  4240. | tableaux - compilation 245
  4241. i] R - modification de l’option 477 tableaux - pointeurs de 288
  4242. | R - option 249, 396 tableaux de caractères 149, 267
  4243. | READ - STRING 261 TEXT - compilation 312
  4244. | READ - caractères 243 TEXT - format fichier 193
  4245. | READ - compilation 300 TEXT - FCB 318
  4246. READ - compilation 294, 303, 312 TEXT - FIB 318
  4247. READ - compilation réels 230 TEXT -blocETEITE 318
  4248. READ - entier compilation 216 TINST 470
  4249. LI ! READ - tableaux de caractères 268 traitement de bits 47
  4250. READLN - compilation 302 TRM - compilation 314
  4251. | | REAL - implémentation 120 TYPE - compilation 206
  4252. | RECORD - compilation 270 type INTEGER 100
  4253. | RECORD - implémentation 154
  4254. | RECORD variant 157
  4255. i réel - formatage WRITE 298
  4256. Wy réel - implémentation 120
  4257. réel 8087 - implémentation 135
  4258. | réel BCD - implémentation 128 | U - option User 419
  4259. réels - compilation 223 ip union libre 164
  4260. réels et entiers 232 f USR - compilation 314
  4261. | REPEAT - compilation 239
  4262. | REWRITE - compilation 303, 310, 312
  4263. i ROM 60
  4264. | routines librairie 443
  4265. à
  4266. i}, V - option Verify 409
  4267. T VAL - STRING 263
  4268. | valeur - paramétres 364
  4269. i VAR - compilation 209
  4270. SEG 69 variable - paramétres 364
  4271. SET - compilation 276 variables - absolues 382
  4272. SET - implémentation 168 variables globales 426
  4273. variables initialisées 376
  4274. ‘ay variables locales - compilation 349
  4275. nl
  4276. ng
  4277. AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL
  4278. " AU COEUR DE TURBO PASCAL 500
  4279. ‘ AU COEUR DE TURBO PASCAL 501
  4280. ==================== PAGE 58 ====================
  4281. INDEX
  4282. INDEX PASCALISSIME
  4283. W
  4284. variant - RECORD 157
  4285. variants - pointeurs 188
  4286. variants libres 164
  4287. WHILE - compilation 331
  4288. WITH - compilation 273
  4289. WITH - pointeurs 292
  4290. WRITE - caractères 243
  4291. WRITE - STRING 261
  4292. WRITE - booléens 240
  4293. WRITE - compilation 294, 297, 303, 312
  4294. WRITE - compilation réels 230
  4295. WRITE - entier compilation 216
  4296. WRITE - formatage 298
  4297. WRITE - tableaux de caractéres 268
  4298. WRITELN - compilation 297
  4299. XOR 47
  4300. XOR - compilation 216
  4301. INDEX PASCALISSIME
  4302. AU COEUR DE TURBO PASCAL 502
  4303. AU COEUR DE TURBO PASCAL AU COEUR DE TURBO PASCAL 503 AU COEUR DE TURBO PASCAL
  4304. ==================== PAGE 59 ====================
  4305. AU COEUR DE TURBO PASCAL présente les structures et le
  4306. fonctionnement des programmes compilés avec TURBO PASCAL
  4307. sur PC et compatible.
  4308. AU COEUR DE TURBO PASCAL décrit:
  4309. _ l'architecture mémoire du 8088, du PC, du DOS, de TURBO
  4310. PASCAL, et des programmes compilés avec TURBO
  4311. PASCAL (compilation mémoire, disque, programmes avec
  4312. OVERLAY et chaînage).
  4313. le format de chaque type de données:
  4314. — les types simples: entiers, réels, réels BCD, réels 8087,
  4315. caractères booléens, énumérés
  4316. — les types structurés: tableau, enregistrement, ensemble,
  4317. pointeur
  4318. — les fichiers
  4319. le code généré par le compilateur pour les expressions, les
  4320. instructions de contrôle, les appels de procédures, les appels de
  4321. fonctions, les constantes typées et les variables absolues
  4322. les variables globales utilisées par un programme
  4323. les routines de la librairie avec leurs paramètres
  4324. Plus de 52 schémas illustrent les 512 pages de ce livre, qui
  4325. comporte 149 programmes, dont 19 utilitaires permettant:
  4326. l'affichage du plan mémoire
  4327. l'affichage du contenu mémoire ou disque
  4328. le décodage des réels
  4329. la visualisation des variables globales
  4330. des modifications du fonctionnement de TURBO PASCAL.
  4331. X67, MBA Columbia, John COLIBRI a appris la gestion chez
  4332. Ferrodo, la fabrication et la vente chez TI, le marketing chez
  4333. Nestlé et la chasse chez Compétences, avant de s’installer à son
  4334. compte en 1980. Auteur de 10 livres sur la micro informatique, il
  4335. fonde en 1983 L'INSTITUT PASCAL, où il vous propose plus de
  4336. 350 livres sur PASCAL, réunit le mercredi le Club des Utilisateurs
  4337. PASCAL, publie le magazine PASCALISSIME et anime tous les
  4338. mois ses célèbres séminaires PASCAL.
  4339. —