Académique Documents
Professionnel Documents
Culture Documents
‘Vom examina pe fiecare in parte, incepans cu tipul functer.
Tipul functiei
Tiputfunctet se refer la valoarea pe care furctia o retumeazi, De exeip th
DOS, vloarea pe creo etumeazi un program este disponiild pent fiserete batch
fing vaionrea ERRORLEVEL. Funct mam ( (ot explica smediat extent
parantezelor) retumeazi o DOS, Dac un program DOS se
tari se folosese pentru &
tipte de fister batch (pe lot
SOMEFILE.BAT - a sample batcn file
Frxup i.cee 81.187
TP ERRORLEVEL 1 GOTO screwy
~ {continue vark neve)
sceewup ECHO Something wens wrong - not fixed up!
Se presupune c& FIXUP este un program care cites
dup ce organizeaza cite ceva serie un figter (LST) de impr
mal valoarea zero catre DOS, dar daca apare vreo eroa
retuma valoarea |. Aceasti comporta
‘re program 5 feral batch care exeout’ programul
program Cr+, funotia sa main () va returna valoarea 22:0
daci totul decurge normal sau va returna | la orice tip de eroare, Functia main () este ©
functie intreaga din moment ce returneaza vatori intregt
Pe masura ce seriem mat multe programe vom serie
multime de vaiori di
‘ream. Unul din
functia nu returneazit
2 Spune “Hello World" ~ ‘
int
Ce este un nume?
faptal c4 0 funetie te °
combinatie ce $2 de litere, 10 cifte 9 caracterut de s
Este corect: 52 de fi
cele minmscule. Un “A”
Numete fu
pentru a cet
ideatificator
Tati doud fragmente de program eare fae
invoice_cotal = invoice euptotan + taxes + snippang
eds mls + agiog
Din primal exempiu retese exact ce face
adundnd taxele $1 transportul fa subtotal. Al doi
despre ce este vorba.
128 facture total
di met ua indicus
Muite eran nu deesebese rm folosit: aceste
ccaractere aac ele ou
ultd clar din context, ca in cazu
cele mat
calculate ¢ parti |
caiculate ( part? |
peant | pact2 |2489 2014
op gaurd w} 20an v ap TIE wang {safeiuy HY
(Q usu wop asauinu Q “(.uonouny area, es
108 ap ankaaros ga amo wrRLIEsSid ANION
yo 38 eo Simgruoremateo Te 2
npoo 294 w nau
2a} 2469 jnijeds vy anauad
‘azoqueed am Nd 2s BO
jauezed 1018908 eu
18 szoummsed an yee,
‘muewow vj euasep won 1goud 99k BA Hy
6x2 qreyo ‘o6ze WUT juTeW aET
nydwoxo un gqe] orazaneed yu
<0poo>
(Ovrew ya
op press yrs
fpa "pimese 8 ap utind Ter sonpomur 98 [ASP 1891
1S yoys0ds 2s non] sooy “unaUIEING TAsHKD Me
Qupmr ger
‘erioury njawus yzeo uy -() ur rovouny yinowesed azesaprston
uoyrdesuy toyed 3
yjeuresed
cexeqemered> UTew qT
Jongun joj uae Byere nsBoU wusun4 “aM axES9p IEE
“yuaj2ox9 wresSoud mun e9u9149¢ yrunDd 1S ypider vazsanpomU 30% YORE
wseaoy njruoups 590
owed jautoxe ap vo
“pyfduuo [ape 489 aumMOs yEqeUBA 9p aun asos0}03 wHEABOad uN MOS PU
‘snpasnus ap PuBWOPUY vj ais v9Id Mu eaareONP azoasiapun |MIaOeI09
BuSaOnS
Apog 70084
TeaoaqngeotoatT
is ee
tun amigo w ninuad sew a 190 FOU sep IYOHA TU [SU]
yz0ces
uoqeayquap] Un-smp dised yj area ayuiano esedas
‘pe nantiod ‘no 1 zapaaaud ino eke “atoosi9puin assI2BIED aseSo}0} LoTEUTABK
‘gHswOAaUKuNp fn
a}99 m9 uous ma BS ase
1a TouMID Hf +40 JOye|EdUIOD ENSEOARUNIMD
fopun ndeauy ap ssaraeIeD HISOIOF TIN
sonea4tU9P
suny jydosd ninead aroosiapon araroeIe BoUDUIOSE
inj op aun ward P nsIuad Jof9UunM as09siapuN ndaoKy
faony 0 me BS oUIg
fins quoqeuresBoxd 9p
1a 286 uy vumeenron 2}
1198 nu pupa wuigd uo:
vine nquad «suze
‘9p “Dse60I0 9IE| “2H
‘9p sa1ge1e9 un FEnepe ‘puBLIOg, ALM "+43 aUTOSTS x
‘0 sep “Injtuopaysap! yrandsouy vj atoossapUN |Ms3}OHIeD
( brewms )quiad
| zeus jartnoTe]
| fpod”yzedox Jautad
( Rood aaedex jaqernoTes
¢ vorzoqporzur jautsd
( worsonpozauT | exeTHoTe>
‘ofaom ad snsap w0}05 Hien 2} “eu,
1S (qed, “11d, 1A ontoLUMES To atIML ME odes ap opfaRE FOU
(gazed) gerd
L eared | aqeraoTes
a T oAPHON OW, unas
Beira wed o40 WHEN ES oF18 ‘Sa invatim C+ pas cu pas
estatenents>
jane care succede parametrii une: definitii de functie este
‘cod ata tn felul urmator:
ant maint)
serie cod folosiné un
[at un exempl
int main() 1
< statements >
aca vret sit economisiti hatte end imprimati codul ata alt exemplu:
int main|) { < statements > ¢
© vett
luerat la
Alinratete ajuta ta
aprecta pentru prima dati ci
alteeva. Pate renunta cu total
int main()
Este un stil neelegant, Pe de alta parte, sunt unii care prefer’ ca aeoladcle si
dreptul instructrunilor. Fatéo varranté care ar putea fi un stil reust:
int main Q)
= statements >
‘Am spus c& “ar putea f",
i adoptati pe de-a intregul, Nu
accasti carte, Dupa ce alt ficut-o
2 Spune “Hello Wortd” ~ 19
necesare, Dar fiti conseeveati ~ unut din scopusile principale este de a sone programe
le.
(© mstructune de tip bloc nu face practic nimic. Tine doar un manunchi de alte
‘mpreund, Dupé cum vom vedea, este un lucru foarte util, dar pentre
8h abordim snstructiunile care fac propriv-zis ceva. Prima pe care o vor
este instructtunea de revenite.
INSTRUCTIUNEA DE REVENIRE
Instructiunea de revenire trimite 0 valoare inapot
ccurenté. Totodata termina functia curenta, reiuind proces
rerupt de furtcha precedent
INDICATE
structtunea de revenire mi fncheie propri
veti vedea c& pot avea loc oper
1, Dar momentan puteti jgnora aceste compl
et care a apelat functia
punetut in care 2 fost
in tmp co mayoritatea fumctilor se executi de alte functi, main () este apelaté de
sistem! de operare cin shel, ca 31 comenzile DOS sau Program Manager din
ructrunea de revenire din main() transferdcontrolul programuh apelant 91
retumeaz4 0 vaioare. Tat modu obignuut ae a res din main () end tol a decars bine:
return 0)
Ce reprezinti caracterut aul C+ acest caracter chee o mstrucbne
diferité de mstructiunea de bloc. Pe msurd. ce
Introduceti punt 51 virgul la sfaxgitl fiecdre inst
‘rebui si acceptat toate mesajele de eroare pe care vi le va trimite
Fara acest caracter compi
structuunea curentl.
x! se, mati un prograin complet care nu face namie
1c, et semmaleaza sistemului DOS ef a executat programnul
ant main()
i
returnang yprewaUeD nD pod ap Hy} auIs ¥ 408 ap IMsap aisy “IERUANOD EIEy
2P Doo Fay |EUDUIOD ap Ung TAS uM HEAR fn YEW aS YIU uy
soynseiuatu0® 'asay] aresotep auwa}goxd nae ule 18 G20
ow ajuancas vroasape Tenia We “oued Bye ap aq “YsRIUAUWIOD oyIMtH Calc wane agaoK
a poo ap ziteaoas o FO HEpOFOM sugld wE-uI Nu exDUIBISOUd Zp He ap OF a
‘BUSONS
jetaae pea j/ fo /4 S80WNa ON 4) uaNaez
2389 mM wp “poo 9p soxuy] jmooyfi
1 fureqeWo2 vouDUIaSe aD whoa
gerses ex sua /
Jy 8843 09 eTanos3 oxoM st stUa yy 1g uEMaer
powoout
231003 ays aoartoap aoe} 0 mu IweUN Jep now feu InN M90] SSO HANG |p
50 eva cn SuOMMS oN Sazodex jy -g usner
(GuruaveT 403 aeat sar) 7
wexBoxd exerduoo ysaty 29 }/ (jure aut
ezey ‘wexfoud jpTI0M ‘OTTSH 843 97 dn Suryzon 02.08
S667 ‘s¥00g SOT ‘azeueuTYY “7 uTaZER
‘ABDOL 4d UTeOT
30 2 yerdey wosy stduexe Burmuexbord vst sTuL
‘en
vaysonposnu nn
‘a rensed as0g & Po v8 ‘innytaisod samen HPUL BIRJO BA
‘Bnop 3029 ¥ yWOIP ¥poULlONN roM sIMUI yS9 d:BITEIeD
~ MHBMIGUIOD no FUIULID 25 ~ 4j — aHBUIQUIOD o 19 Adoni
2d op weyuawog
eee Eee eee eee eee eee eee eee
iz “iPHBNA CTH, 8uneS Z
Bs adzouy
ip uxnaez
(Buyuawer z0g asnt 8.93) 17
wezio2¢ syeyaro> 38273 Imo // — (juTeH aut
youaxe waa Wye] a
nwajq, “unpow yop
1SigJs Hj Bud BUND 95 8, atr9eIe
8 300 95 aponuowad +H) Uy
+49 HeJUaWIOD,
‘Boop no adooup
“suns 2-20 2amp m8 | pO
unio sztudins veaw nue nnuad yeu
eiBoad vormsofoyy “imurexBord 2005 29 unds eA axe Am
‘seIuoWOD eAaID uNLM~pE ES oWIEAOIM ap KaIDLIOS daa e ap
IaV.LNAWOD
‘adngoand pa gs oingant nu 1S ones
lusts ae arou0 ap 18 89 “aN"TDLL @P WeAlozad aise axed “MSHS B ARELIOSUION
SOG ang azeuumrar Bs aso
risip Buouam ByeO} wreaUIse
Je “wunZo1d un gareau SOC PUES “midutaxs ac] Zamlwod ap ympoD 2onf 2
SLLVOION
Beane Sed 9 WENT ES @2 Sa invita G++ pas cu pas
‘exist comentasii trebuie si retei adeseori serierea ccdulus, in cazul in care doresti si
stabilegt sau s& imbundtitest ceva.
‘aid coxtul examninat, insopit de comentarii rezonabile
a”
This 49 a pregzanming exampie from Chapter 2 of
Learn Ct Today
Martin L. Rhanenart, IDG Books, 1995
We'ze working up to the Hells, World! program, nere.
”
int main() // our first complete progren
return 0; // xeports NO ERRORS to the 05
Comentarile care identificd aceastd carte pot parea putin stupide, ymfind seama cl
ele sunt tipnte in acest caz. Este adevarat, dar gindit-vi de ce adiugatt comentari
Probabil se vor introduce int-un fisier program st vor fi executate. Cineva care out
are accast& carte va da peste fisier si se va mira de ce este acolo, In acest content,
ccomentarile sunt exact ceea ce cititorul ar dors sti.
Folositi intotdeauna multe comentari!
INCLUDEREA CODULUI DE BIBLIOTECA
La tncepunul acestui capitol v-am promis c% vom serie um program care va. spune
‘series. Ceea ce nam mentionat este c& atit CH cat $1 C
‘nu au comenai de mtrare sau tesire.
‘Nu exist comenzt care si ciieascl tastatura sau mouse-ul. Nu exist comands s3
‘comenzi care si citeasca san Sh sere pe discurt sau pe alte
nevore de ajutor.
fut C an evitat tention
de alt parte inseamna ci trebwie si fumizati un paciet de functit care s&
manipuleze complexitatea hardware-ului, Multe multumini prietenilor ae la XII.
comitetul care a dezvoltat standardul ANSI peat IC, pentru fapiul cf au
standardizat funetile de baz& de intrare si resire s1 sunt disponibile in forma stancara
ajelor C gi CH
lat pentru aceste functii este ictus in fisterele
1B) furnizate in acest caz de TCLite si furizate ‘eu alte medih C+
pure s& comunie! compilatorulun C+ aceste
A.
2 Spune “ollo World!” 23
antet, Mai inti, si aruncain 0 privire ta functa pe
Folosirea printf()
2 afiga mesayul “Hello, World! pe eoran, functia printf), cea tat
‘character steing” }:
care va imprima mesajul “Hello, Wi
printf! “Helle, Wort:
CH pune La dispozit
pe 0 sigur nie repreznt
pond) prezentai este un bun exemu de fs
nico valoare. Tipul et este void.
We care execut ceva dar nu reburneazit
‘Suntem aproape gata si scriem programul complet, dar compilatorul nu stie de
Lunde vine printf{) si daca il folosim corect.joueusodxo e azeinasnoe ap uewodun
eu n29 patted insti aya0d so4,I019 aE
ng disoo vy ap arvoue 2p afesout
2 waxy 98 “RINEISE 9p jntuEsONd
uizarcor 0 o1vo gIEvOOE pUISOIO 449
ays9 1mo4, s51p 2 ovum Hane mu HERONS puta aIs@ ISAO
‘nas eya}dtuoo ifan |p sea ad osip ad op nydiuoxo un no "yeOUos
ew wiind eurajqoud enioge wos “wesBrd
‘sojaiuromg ‘aingan Jo “npoo winDeKe 1S
VsevLNd3Xx3
18 YNLYOAT 3d VANVLIGS “VSN dod
sou
‘99 vareupo "eareduloo “wasponpostut | BIE
em oureiBoad ey aBunfe-rian ‘sorguun qnyoudes n> puydeouy “pugs «
auod feu afequay) EIS “2}PuRG oMMBIBONE 1308 BS Jom eaNd aIs9 NU 44
ynfequay uj ‘youn vase ezyqeas woe-u xmyor i Shin) ap yrysop winap um sanaved wry
80 943 09 SuoMME ON Sz0doz // {9 usNgO2
(gIBTSON “OT IONy 13aEExE
wexBoxd exetduos 3523 2no ¢/ (jure aUE
SonrouTs
erou ‘uezfoxd jptzom ‘orteH eu3 63 an BuTAI0N 8r,2N
*g66t 'svoog gat ‘gzeuuToy -7 urazeH
iAEDOL 449 uxeeT
70 Z xeqdeup woxy sréuaxe BuTuexBord w ct STUL
:nujsou maynurefoud w ysz-ncadoad wnooxo 18 varrtstuod o| onam Won PUD “amOVEULN
wounas Uf 1010} WOX [E9189 ot yoidweD umBOAd ye) “aaUATE AE I
1 iPLOA yduiog mueBoud enos nid J0sacau a9 90 YOUNES
InjnweaBoud earejquiesy
viwanoasuos
no asus sky ap ouine His0}04
\s0]95 10d 98 aug 3p J>] &] ossanHdaKd
osnf 28980}0f eUOSL
J "958100 9p TnyTLUaSIs
ps0 9p o1ouunN
Sansa aie asasojog amr
‘ajnosmunU! ayy “ejnosniew axon ay 1
Joyivaavos yrvauuioguos 96 ayinase sofazauesed 101
spntoury
sanguaisy
injotunu jounf uy uorenuayap vo autnose ezarwered eceazi|nn 28 TOTALS mUax9 2p
{9 -soYsamp S950 UL OKIE U9 HUNDg “GOL TONNELLITON 289 8208 BH TDL
rulag “PrepueIs axapmoun ap aaKsy 9p insD}aHIP wip auTAaxd apmou OY ot4
spnyouroa eT7s spnToUTE
289 us UXEIUNS yorEHy ardoD 0 "dy
use yay gre wing “iouSip num zarepnyour 9489200
‘21s9 sossooudaid wanoaltp gerizn FU La
2p '20e) 8 pag “ysins UKE
‘96 pape ‘ounye 189S0}0) 25 "9P
-oyeysciutad auds po stz-ntadoud 2
‘op anpyeudiou yums payssoy “BSuNe FUDHSLY UE Bsefc oN wf aN
“ossaeidard rzuoxu09 ayn Wel ZISIXg “enSEOAEauTUIND ojauTEATOI
aysoo" muocuoouy & nnuad PIEPUDR
1a wayrpour ap ead (Sef He yO BAnIpUED sOUS!
‘yems ators ap 2ins
H'OIGLS Basepnjouy
% “TIPVON OH, SUS Z
‘Beno wed +49 weienal ES ve26 8 invatim C+ pas cu nas
Editoare
‘TCLite vine cu un editor multifisier inclus. Este un editor bun pentru programe
miei, Daca va aduceti aminte de produsul Sidekick al fine’ Borland sau de mai vechiul
procesot de texte Word!
cum este Windows 3.x permite executia TCLite
preferat tn att sesiune DOS.
A
s
ENTE
Dac’ folosti sesiuni DOS simultane, muluple, TCLite va fi pelt, Nu va st c&
figterul pe care ia deschis 8 fost modifieat in alti sesiune DOS in timp ce nu il veaea.
‘TCLite nu are de unde si gtie de a dour sesit
tuebuie si inchideti fisterul
‘mai bund este prob
rogram HELLO.CPP,
Lite pentrua corecta eror
Introducerea programului
Pentru a inieauce programat i
ul 2-1. executatr urmatori past
World!" © 2
%
PAS CU PAS.
DOS sau lansati o sesiune DOS.
sete drectorul \ICLITE.
\TCLITE.
i editorul preferat, introduce o copie alistmgulvi 2-1 5
salvati-o intr-un fister purait HELLO.CPP.
‘TCLite executind TC.EXE.
ideti HELLO.CPP. Dact ati executat paso! 4 igterat
roduceti figierul acum,
2 Spune
Listing 2-4: HELLO:CPP
// HBLLO.CP-Sampie Hello, Woria! program
// Copyrignt 1995, martan'L. Rinehart
‘This is a programming exanpie from Chapter 2 of
_Meaen C++ Tocay_,
Wartin L. RinenaFt, 10G Books, 1995
We! ze woreung up to the Hello, World! program, nexe
HineLuge
int main() // cur first compete program
priat#( “dello, Nord!” 1;
return 0; // reports NO BARORS to the OS
/Jena of HELLO.CEP'$0d yumi ae ane puDg oI eT A
ipo
| peccainong
speatienenvd beau
aiNOLD
rege vt asee-ersunoIN9
manaoberanao
ear zsh eg yore mB)
DSU y's osANY
‘0g cum: 93 hy
"Boo Je aun, ‘9 ug us eran si
‘ed psa 219 uno Sov zy Bul som ¢
ies oan]
a Teno
ung aise 18 ere wesBaud rnswonwaun
TaiPON OTH, Bands Z
8d "SOG Inuege Yeas—>
rajdwos yeinoaye ws jou
na
1D “PURLIOG BaP 449 eonpard
au ps 200 eBay
Hof He woocy
ayeqnoaxe 18 1uMe69] ap o1eyIpe ‘osejidWIOD
9p waIBUpS 18 9g “RaxeyJoUWioD WPI yO
rasoa yt anus Bw as Ja TOTTI 2 Bd
wgemnoexe wesoud un-nus npoo wiuucysuEn Bs HERaxe WINS
ANALY HpHEMOD aISOG HRS BE 1 Bop 15990 MP
jad yaoun-) nes as vse Haan In
oyup ap giaseo o ap renown ti, “enseauay if
fiosyde eswaoe ep ap
Bed no aed +49 wHEAUI ES %30 Sa invatim C+ pas eu pas
Listingal 2-2 prezinté. codul imbundtitt. Puteti sterge codui existent st citi
read02-02.CPP din subdirectorul SAMPLES sau putett folosi HELLO.CPP asa cum
este
SUGESTIE
Folositi programul existent fn loe de codul din SAMPLES ont de céte ort puten
‘Veit face economie de timp si toute schimbarile ficute se vor pistra. Fotositi SAMPLES
ccénd nu aveti altéiesire
Ca in cazut tuturor imbunatitirilor, de acum in colo vet introduce numa lnile eu
wgrosete, Pentru cazu de fa listngul este complet, dar va vom prezenta 0
parte suficientl din cod pentru a vi permite sh observati care sunt modificirle si
adaugrile,
Listing 2-2: HELLO.CPP
// HELLO,CPP ~~ Sample Hello, World! program
17 Copyrigat 1995, Marcin b. Ranenart
”
‘his is a pregranming exanple Crom Chapter 2 of
Lbearn Cr+ Todey_, Martin L. Rinenart,
TDG Books, 1995
fie're working up to the Hello, tierld! program, nore!
”
#include
#inelude
int main( J/ oar fixes complete proaram
princé( "Hello, World!" )
geten();
return 0; // reports NO ERRORS to the OS
11 end of HBLLO.CPP
snd of BEMOCPR
t+FD gi vedeti ce se intémpla
‘va arfla ecrane! DOS. Apisatt
“ace am dont de fapt.
Dupii ce ati fu
Daca totul este in ordi
coricare tasth gt se revin
2 Spune “Hallo World!" 3
Ce se intfnpl acd ati uitat sf introducen fisterele antet 1
dowd caractere / inainte de
iclucie? Punen
#include pentru a © transforma in
10 casetd cu mesaju! c& aver erori. De obicer va anunta c& getei() ar
pe care il vor analiza in detaliu mai térzm,
sa csle invéjate.
i) $1 getch(), eu
REZUMAT
1 untrodus si executat primul program in C++ Cu aceasti ocazie att
we de iucrart despre limbajul C+ gi fact ceva despre TCLite IDE.
are program in C+ are 0
este ex
paranteze s1 c& parantezele
ructune de revenire pentru a returna o valoare null
‘operare DOS. Aceasta este valoarea care poate fi testa cind ERRORLEVEL revine in
programul baten din DOS.
fe asemenea, alte apelur de functe ca mnstructum. Puneriile apetate
funetie care sere pe ecran st getch{) care citeste un caracter de la
tastaturtmys Weajade “asEd eI
‘982 190g,
soreuresBoud yo ¥iuap!62
ARKAKRARRAAAAAZ
nsuco wos
Bede eed +1 wnEA ES
Ea34 Si invite C++ pao cu pas
hu se agteapti sf stability recordunt
e prod
vets cunoaste C+ sufic
‘Nu aga procedeazi insd si programatori rapiz.
cco lenesi, cto exceptie la care ma voi refers, Programat
ciiteva rindun dintr-o data,
A programa repede inseamnd a programa putin, Parcurgind aceasti carte, veti
tub nu Seriu mat
de cod este
‘chiar mas mutt,
es, Cu toate acestea ven descoperr ca TEd vi se va
rind pind cing au v-at)
ru dumneavoastea,§
ccelor 100-de-
4 pornim,
PREGATIREA
3.Sadosonam cascte_” 35
Listing 34: T.cPP.
11 9.03P
dnt maini
ect routine
return 0;
1) end of T.CPP
nungett og de corn
Success, asa cum se arati in Fig. 3-L
Fig. 1, Compioe reat‘yoorougig up a ut ap Bjostos op
cue v] 1€ tupjade ys inqauy a “Iojazoseo v axeUesap ap wnpadoid vIOAZ—p ¥ Rag
‘e019 0 munuad ypore nf toa asa
IS ap winpadoud poo wasn pour EYOAZAP 98 YO zodOas9p Ne, “UEIDE ed
ares Jonas
nluts azouocap 26 ¥S tnd If 40% “nyaWAxe 2p 2191890 2. >
unqe Boe 9} BS wind an 2aIGO Un aito <2) 199 Bporate O,
‘960}9 19/908 9JOPOTSUL Up BUN 1uDAap BA BINPIOOLd FISBOOY
toa soyeuzin ynjonice.>
Uy "wase ad aresno purpuasap ‘amworeredaid areuresBaxd ooey toa judeo ysoOe Oy
H'OINOO ILLONNA 3L1V
‘eroureaGoud ap wiyonde o0 gs ereB wroquns wawow ysa9e Uy
“ssa0ong nfosaw ap 1 a4LamI02 no
Joum, goep MPS pices onwOS sOHeINOTEO
ru gs vjdurgiy ay200 2g “nqautei99 v arerpsox
120 vo eLdIEAL, 95 HOE DUN
Io puess9 vopaA Han “Gs-HND HIB
ial wos nN,
ssa0ang
pundsys ys mgaa we apdweg inorep wep wasease oC Yaze dtudo wadax 8 ned now
p Gd-vy Hosea if vazeox onuy BsBIDP UY AVEC “dD L
roe aint ion “sag espa "aBassayy ensearay
‘ausoy9 fro Ouloo yzvareaes ap
18 mound rains
19 0 BRBBIDOIOD IMIOW
‘antOre 1919p © 70
“auanoe aise aug ne animes wuswatay“9BHSSOWY BAST=IRS
© pupar sang Kec yoep Yo aisa soup ru 18 sop "wSIaN 3S 1
is _tueuoou worep wa WR sau apa sets ay EU Ho}
B yMPOD moO UME WRIDN] “watHOID YEA 360}
nseangy Up aPBO19 9p INLESAPAL
vein “compas yaood|- any ©
‘myemjaop pane ap
‘avonguun #29 y ovo arn
a ‘BiaSED BLEEP BSE
1 garosgo as wna wie “aBessopy ERSTAIEY UL axeOHe ap esau Ut
‘reyidwos nsqwad G4 s9f¥ NOU UEP Ase a8 roUOriNRN
40 30 BUS
9 urnaez
Oeren erg
puranoz 302-440" //
ddd ee Guns
Inuzdoad 1s0}0j “asip a4 mat) Z-¢ wun
eau poyY “RDYWEEP: © ys IS AIBOR © LUDO
‘os801198 o]ousa}gOUE mutta wanBIU99000 BA
fe ayannayy ugepce
8 Sipue® ea ys sigan “arearsoW eUILd 2 ap sss00ng"
3us3978—
‘Sedna sed sap WHEAT ES 9‘Sd invitém C++ pas eu pas 39
3.88 deseniim cascto
fate intr-un tablow
bend, ceea ce
Pe pagina CONIO.H toate fi
ji, Acestea sunt evidentiate prin culoarea
fermatii suplimentare
aniet CONIOH a
&
PAS GU PAS
Folositi T.CPP-ul existent sau deschidet: 0 now fereastrt T.CPP 51 citi ia ea
(03-03.CPP din subdirectoral SAMPLES.
ude
Listing 3-3: T.CPP ‘
1/ 2.02? == vest routine
fereastra arataté in Fig. 33.
Daci fereastra de help mu umple ecranul, Incercat: i comutat i
de dou eu mouse-il pe
Jos, pentru a evidentia‘ysPaoe Jojarasea wareuasap ad2auy WOA pi
alos ¥ HUM H’OINOD up (iain “Yauowase ap
‘ap até da 9p aqueisuoa au2s 8 AWD FOILS UP
4oja19}9e129 BA1BL9g
sioaa youp woo oye 8 varoour Hang
o|ouny sop tieind mes aE us Iq nb908 Eas w
somng (0 #8 1 °ZHilg ad nswape HE apse “nSos)
ese nied sou iq ria 89 aex00) 20
“rp}d-4ULid ned eyrDajes vaswoIno PUA 15 Pu
mjoo iy ain BA IEC] TANSEGIE UE EZBE2MIOD 9s NyEpUNY. 1S ARE
soIsaae @ arinaaxa i$ unpHai ap areype “arejdwios nad
now Wp fyso19} puES FUR angle rs99e M9 o11OS 26 Of0OU! LUNdE 3p UEIDD od ta1I0S
204d) 389) 9p IyruNquRe soAgrIMdsAI09 UO |R-oKKg BrWOIDS (jagepeA} wi}uN]
seg JO DU //
9 unger
oC ee yaxaeaxes
(Qurew aur
SenTOUTE
ursner 3003 -~ a60°4
aor Bune
vane gdb
nm je, RAMSEY “QRS DUISO|eY NAL Ap TINGE
ee
seton
2188 ImU}dNo BAddHe soUO MAMUEG jEIEPO|Ms MOIEOIBD wIaAD uBIQjHIOD est
]Helannar ‘oseouDs uyziyase naguad 3
{S96D 280 r19DUy 0 pAyD u oy B9EG “auld 3p vaxey!98)
‘und 2s-npurgasoop °{71 2] g 8) ap 990 ad w2ealqnp ¢sz BI URC gZi arainanNY
avo ad armiqese ap Fea wesond wm a9 —
-yowvay pol th WHOI'SHOTOD wanoax
um amp eats ad ap apap atk
ASATAYS Iscioesipans up WOD'SYOTOS |nwesBard
Heynoexs 1992]98 g¢z 2199 seo} wapaA B nung MNO 18 anjme|eUL varENSUONEE
“parvo(nd pnjout 1x9} ap ayawnal aI Op sjarngune een wos
senio2 feA) ¥BRA wes suntow o a9 JeyLo|Na vaIoqe dxd59p puxgion Icey act
‘ota sores wea
24) Ws toorord un #9 na
earaflare amu
W409 967 9}90 UIP
sof Hiaynd © 219
nifiou ues tin ad gle 389,
Jojyoino eaieBapy
HOINOD Howry ane 1S arenunuos uy uegzyN Bg
“RSueAE wo 90 yinsyu ad edLOEIU BA
unutjuoo audsep 23pm rew wizauy tion 90 ganspiu ad
ray) ESRAge YO SaaiwaUIE, TAjeIUaUINOOD t-HheAM¥D 1S o}@ OMNULP BAT
juny ap PIs INZBA HE 29 BEP O “HOINGD butuuoxs vA a5 "Bs varOeNNS
4 uno “Jude No EAaD HaDey Bs axa goep “arecaaN) | apundsBIw NMUaK! “UMNO
‘Sei ne wed 4D WEEN ES oF2 Sainvatim Cr+ pas cu pas
se numeste argument! funchiei. Nu stiu de ce sa
deoarece iment au are un argument, Argumentete sunt
Listing 3-8: T.CPP
1 T.CPP = test routine
#inciude
int maint)
eextattr| 239,
é
NOTA
Aji folotapostoafe penta delimit o costanl de ip caracter aga eu este
3.88 desenm casote 43
‘Unmatoarea pozitie pe ecran dupa coloana 1, rndul | este coloana 2, rindul |
file pe ecran avanscazi pe orzontalé pang la coloana 80, rinaul J, Unnitoarea
devine coloana i, rindul 2
‘examinat cocumentabia pentru putch(), afi vizut od accepté ca
acum i-am dat caractere, care nu sunt
le. primut argument stabileste eoordonata x
‘vzualiind ecranul ca un grafic x-y) 1 al doilea coordonata y
Tn modul text standard coordonaia x poate fi coioana 1 pana ta coloana 80
Cootdonata y poate fi linia numdrul 1 pnd ia 25, seu | pand la $0 pentru monstoare
je VGA. (Standardul EGA mat vechi suporta 43 de lini, mu $0 ~ vom folos
acest iver i eteva minute.)
Listingul 36 prezintatrei apelun gotox
resute eb mstruetium puteh()
Listing 3-6: T.CPP.
J) B.C —- test routine
Hinclude sentourg
euranor as03 -- aann //
dao 1 :2-¢ nuns
|
|
|
sojarworeinayea yuIso}a} & andsOW 99 epRELIA LIP Reap 90 ParrOMA o — sorUOL
20 150d ad s021A9I2 ‘Dd Un ssajoy ws earunied en QD
wainu yaeaeye ageo “ppc 18 reUION eDprA yNpOL! 21
‘Vion
El
rendgs wxayes ap cu
“urmoud
WA BA oumIsion BUA
S908 of Hein Feu BA pep Hap
orate vy
Bpou mox OS/eP On uaaTMS //
(99 yepourxe3
£( ase#9 yepouaxe
aquoyeaygea runs
lugs aise SEF “= pou JORIaUTEL 19 68
10D Pine 2h
389 089
“pror0o 0g so}00 POW! OSE.
££ w0109 9g EID FOU 98) =
op aIseo¥ “F9 InpoL
RU ojotuesBoud 299} ¥ AVA a5960}05 as
ndsauo9 2jafean
“one wei90 Na aoc
re Seon “Pug apis
unpues ap InMaewnu eeaqe3S,
1wes2e vjeuoserp ad sivoqgoo ys arngant
SHAE IS gd. tuatsy, uw ()KXOWE
ja 2:99 “TamgIMZas KoA
tan 2yseoe
we miued 6+Im3)
op ‘yesea umUBeEp EST
Bedrno Sed vo UeTEAGT BS w46 ‘8 invatam C++ pas cu pas
Scrierea functiei de pornire
mngul 3-8 am mutat cee tel
fumette numiti startup(). fn m:
ing startup() este de tip void, deoarece nu returneazl o
ropriile functii, ave griji s& apard inaunte ce
Listing 3-0: T.CPP
11 B.cPP ~- test routine
#include
void startup()
‘
tontmode( C4350 );
geten (1:
recur 0;
Wend of T.CPP
‘SUGESTIE
Metoda rapidi de a construi propria copie de Listing 3-8 este de a thia cele
lini detucru din main() s1 de a te wntroduee in main()-ul de mat sus. AdBgatt ayo ape
2 Seen cascte a7
de satu) In man si addugat restu de cea startin) penta a 0 face 0 unctie
comet
din marile avantaye ale programelor C+ fat de cele mai vechi serise th C — se pot
testa o multime de eron stupide de cdtre compilator.
Pretul pentra acest avanta} este dublaren efort
functier startup() de la pozitia sa de deasupra fui mau
Listing 3.9: T.CPP.
// T.G2P -- test routine
Hneiuds
svaxtep()
goto:
puten
gate
pute
soto
Baten! *
10. 8 45
gatent).sajose9 unt uw 10 suDs
‘no pugdaouy ‘asa}oese9 ido wp YeRLIOG
17 ae PrORAWOD feu! apENFEPOUE O “LNaUIEIEd ep FTN]
areuasop 9p wiry 2
1 arzuasap op rorioumy
3d ojouuouis[o “Jel0US8 zn ap 219609 19
‘dss sojarep wasy.gEIS uy WsUOD aUTIN
ayaseo jeun ealali9g
“use oc pase 0 erwouasap Arvo Dun a9 2105 WA 0 9809 a oxouy Hung “UIE
Up wee 1 ameod ales afouny Budd aus w AN roWUURL UINoe daIseOUTD
"pqvan| ap now wip land 24
‘ase990 mIep ac "RoW WP 6y.44ND HesEde i FnsuNy eere|ZOp no eA DMPA
gaya go 5uS //
1 Qa98aT9
4 ee jazaeanea
Hoses Jepowsxes
(ianazese toe
(urew aut
FQanaaeqe pron,
eenToUTy
pusanoz asea ~~ 4an“d //
dd OL :0}-¢ Busty
(01-€ Bans] wep 9s Ques naywad wex| oop no raw09 18
“yaunod
ion yo pupundnsaud “noun 9p es wit] wy wiesysop wreansBaxu
YW amo poo ezauun 9 (fidsoDe nes) FadeasE 25 nu “inewrered ap
.cmoroxd un wae Ys ingen Je dru, YO eunds yA
1] ayaudo 96
jetwoo “aumustoa wisveae ad GHD
‘supeags op arewsn
‘Quem my wsdnswop 9p yeu eg “08 de 9p UN
BUSSOAS
aayd 30 Du //
1
tQsseate
4 ey )xaaeaxe3,
#( osero yepounxes
?
()anazeas prea,
fp uxngaz
cy ‘ayoses UipUESOP ESE
Sed no eed 19 WRTBAT BS50 ‘Siinvatim C+ pas cu pas © 38 desenam cascte 5
feta poraer!S1 == bottom center
border /6I == left-poteom coxner
re folositi culorile, dupa
veti vedea cind vor serie functii,
[at un exemplu de apel al functie, pe care o pute numi Box_draw):
// 62 48 yell
Dox_araw( 5,
fon cyan, 23 1 wnite on piue
45, 18, Jot", 62. 231;
Comentariu nu inseamna, bineinfeles, nimic penta compilatorul C++. dat tl
cand parte integranti din apetui de funche atunci cfind se folosese valont
ipsa lut, pot fi far vatoare,
NOTA
In SAMPLES am dat alt program, CHARS.EXE, pe car
‘a vizualiza toate caracterele setul ASCII extins ile IBM fol
regitsi toate caracterele necesare desenitil de casete in
aD.
Parametrii care cuprind toate aceste argumente se pot scr in felul urrpltor:
void pox_draw( ant 1ft, int top, int rgt, int atm,
char* border, int outline ciz, int contents.cir j
Ce fnseamnd chare? lnseamnt c8 pul parametrui este un pornter fa o mulime
de caractere, (Fars “+” arf doar un singr caracter.) Un se de earactere fn C++ est un
tablou de caractere. Parantezele drepte sunt utilizate pentru mdicii de tablour: si primul
efement al uru blow este numerotat cu 0, ft un tabiou ce earactere
/* chax* porder == an array of 8 characters
= Left-top comer
== top center
rigat-top comer
rigat side
Porderf4] == rignt—pettom corner
Dorderi71 == left side
”
(in C++ dou’ semne egal inscamnnd “este egal cu”.) Parametrul contur se specific’
ca un pointer la caractere. Se poate folosi in functia voastré fie ca pointer, fie ca tabl
Jn acest program il vom foiosi ca
Tnainte de a seme program
gotoxy) 31 putend din T.CPP cu
TNu teceti eu vederea direc
‘STDIO.H pentru a folosi printf().
nevote de fisierul antet
Listing 3-11: T.CPP
BASSO casa Jnl POmanasanasasaaaasnansasannsasanasasaessanaaassnatt
ty T.CPP ~~ test routine
Hinelace
FincLuce
vora startup();
int main)
startup);
a, 2 ds
prant€( “write the center” ),
gotoxy( 1, 307
print? ( “write the botton” )
geten(},
return 0,
void staztup[)
textmode | C4350 1;
textatte! 23 17
carser();
J) ana of T.CRPtf geques ua 9922m, | saurad
( x7e7squequoo qur ‘ayoTeurqane qr ‘zopz0q_zeUD
vue 3ut '38z aur /doy qut '351 ut )mmxp” KOT PrOA,
tg aanges
#)uoa86
fC ez 129 ‘ulyorf 4a ‘at ‘sy ‘gs +S mess ioe
syonateas
[purew qu
iH te ()dnazeas pros
( ajo" sausquoo gut ‘aroTeurtane aur ‘zepzoc yzeuD
feng aut /96x qut /do3 guE '33T WUT )awap og Proa
e-ornoo> epnTauTy
@paTsUT#
suranox as03 = agora //
ddo'L ere Bune
‘Qwen"v09
erauny gzeojade ares (Qureu up tamuy) ayengpe ojoqourn@ae ‘vouawose op “weFY
sHouny ep wiiuyen w1 I$ cHeIEIZap Bi HeSMEpe wsoUIEIeC gre E1-€ InBORSYT
‘erere]99p vou v nsuad
‘nina x8 yound teBnepe i inmatsy & yndaouy ap vEiZ0d UL 90m
sso}0y wo 1 reo ad yayureed 6
siequowniae wingpe WOR tody Jo8 Jape WEIS Inu fe Sns UBS jn}}os Uy BIONaT WANE
‘wo 9p 1Sed ap Sy 0 Hiepen gs ingout ae sunIston TaseaRE tH g4snD tested HOE
ee eee eee eee eee eee eee eee eeeeeeeeee
Sao 50 BLS 77
+o aoeaTs)
Hee 1x3ae3K03
+f gg€69 1enomxea
(Qonszeae pros
Qnexp ea pros
’9 ummaer
“(yuo 3e6
*yongzegs
(urea aut
}dnaze3s pros
exp xog Pron
epnToUTy
sEnToUTy
ee Eee ee eee eee Cece ere eeeree
ddd" ie Buns
“wun eunns o-nuy gpurgna gw e ap
s2so|ay 0 area ad pooopnasd ap (© asa EXeaDY “a]Pas
{Qgumuad ayymuauios tno vapor can injmurEiBoue vasoUDs v} aSimle won Puy.
28 “Syaae UapUOSOD ESE
‘Sedrro sed +49 uieigna FS54 Sa invatimn C+ nas cu pas
gotoxy( 4, 30;
print?( “erite tne cotton” J;
voia startup ()
textmoast C4350 1;
textattrt 23);
curser ()7
// eng of T.CEP
Faceti aceste modifica: si incercati din nou Ctri+P9, Ar trebut s& obf
fnainte ~ tet comentarii pure in stinga sus. Daca apisati Aitt#9 doar
Success”) dit
nu a fost fo
le mesaje va tr
un parametru
‘ecare din acestea va spune
bbox_draw(), Daca credeatt cf ati rezolvat 0
‘eroare. Acum retevém faptut c& lucra cu acesti parametn,
Coltul din stanga sus
‘webu! s& stabilim culoarea (atl
aceste adaugan.
Listing 3-14: T.CPP
void pox_drawi int 1ft, int top, ant rgt, ant ptm.
cnar* porder, int outline clr, ant contents cir }
voi startup),
J/ set the outline color
sextater( outline els).
// write the top line
gatoxy( 1ft, top );
puten( borae=T01 ),
3 Sa dosenim casete 7
cu contextul necesar, pentru a putea face modificdrile ia propria cope.
INDIGATIE
CirHF9 in aceasta variant, vets avea un singur caracter de colt
aga cum arati fig. 3-5.
ig, 35 Apa Com sting a
Centru sus
Acum sunteti pregatit sf desena o ine din coltul stinga sus cdtre coltul dreapta
sus. Dac va aducets aminte e2 putch() avanseazi cursorul, va dati seama c& tot ce aveft( uioagoq ova oatam, )3qutad
Ho“ 1xo208
( .zeaues ax egtam, j39urad
12/7 )hxor08
esd
4¢ (ruxepseq pusand
,
(asx > + yorrum
eps agt- p et
{ to1sopz0q. ywoane
H doa "337 1/arox0B
surt do9 ou3 eaTam
*¢ aysTeurrano j2a3e}%83
Z0TOD BUTTINC a 788 //
i ‘yanazeys pros
f{ ayoTequesuco gut ‘aTo“eurtane aur ‘zepzoq azRuD
vmag aut ‘362 qur ‘dey qur ‘337 AUT |MBIE™Kod PYOA,
da 9)-e Buns
ss =p
aims ares ¢]-¢ Busy ej Hosen tsfeuNOs
220} op voumiod (22042590)
e 8 Jaye auW 99 wing
ntze ps0 puws tt6010}
(© BS Inqan Je foop "ylverOUs teu atiesodo onmuIG FIJdWNOD PAINE IOS 4+ BULIO,
ona yf iteTet
vert pune 7 feet
au
+H °D tana
oa UMS YUN Bop aTasRONBULIP “yLqeLEA o ef 1 Rope soreIada IssOW
mRUALIAIOUI 2p 1
I+ vups
‘ios © nawuad ()yaind ysojog wre ess BURNS
B ‘eseD BLSSSP ESE
ye agt sp aur
‘eevouun
uno ednp “yretit aztoqua o 18 ese ayeod as 1 “eqeUEA BsRIaap 2s pupa founy
"ung epovout o yiuizasdan yearn 98 aTe> UL [0] UL
AA YO 880 TIGA eM 3190 9
eA ayzo}arzjoap 96 YS nusoTE
o> ap mu] enop mes wun
ly sjaurpiqoud gyozas 16 elEquUEA you ‘Liam © ap suinU sIseae Hyso}0y BS HHENUTUDS
ata] feuowpen uns Bony nxwvad Joo eliqeuE souR
idlnsap auiu Brayard 35 JojayIqeLEA BarELOFEW nNUAg
‘sumtjanaastr eise2oy “ajauinu xf jndy 280p AqeIS
(Quand wid aatgese un urzonpasjar 30 eIep an
ap varzod wpolpar rps “yjgEizea © valD wiaInd ‘ep)zod wuruuaIep au e RUE
( \tusspz0q juoand
( auBea ge g0u ex,em ) eTTum
Popopmasd ty 29% BS UAHA 39 HIP]
xeu30 943 ue
( ) oT Tes
[240 gong 0 a1es ap BTENZn wporeL ase eIseaDY ‘20}q eaUMToNASUE
jonas eUMeapION B>
( ) errun
. Dar exist’ $1 0 metod mai bund, Creand un sir care are parten rnijlooie
putcn( border iO) }; | preasambiat, si printf() pentru sevierea fiecdrei lime de mijloc, in acest scop
| artrebut s8 privim mat atent sirurile.
(/ write the top Line
int i 2 lfe + is
wnilet i< roe)
patent border
andi cconstantd de tip sir de caractere — ca de exemplu “abede” — C++
ul girulul, Este caracteral zero, sau nul. C+, ca gi
iC inainte,folosestesirul in format termmat cu zero, in operatile de manrpulere
printi() sore caractere pana ayunge la zero,
‘Dacii am fi inceput cu un sir de caractere spabu, am putea folost
serie numa! corest de caractere spabu, mserdnd un caracter nul fn eapatul drept. Inta
un exemplu
patch( border(2] };
gotory( t, 2);
printf( ‘write the center* };
// blanks ig a Leng atzing of blank characters
Dupa cum rezuits din lstingul 3.
linia de sus este completa. Fig. 3-7 ara
, mai avet! nevore doar de o funetie pute!
inia de sus complet
blanks'5} = 0 /) pune an zero in caracteral €
print#( blanks}; /f impramé 5 cazactere spatiusuTT Goa ara eatan ,
| areTeestan:
sazeaxea
yoroD euTTINe Bua Tes /
‘squmques qut ‘3778
a aut /384 quT 4
squeTg eI
‘too}ffur waned rujuad (\punsd 1 ()Kxeno 9
uns Qgud iS Oxo ajuntody a
‘MuoyguL aas9 ingaIzeyY “2UDO}OD Og POAT
| YOW aD ENISEaIa] aDaRBO—p “nifEds aIaI2EAD Og
stznpwer enop ed e123
-83¥0 Bunt oaze03 Ere tn ease eisoz¥,
‘ata,
0 3
‘2d 8 mua vesesiodsicy
nFopaRR,
reetene 1B8P, 4.0084 = []3e03 seus
fu
Ime BOMp Jnun “o}dyUF UNA evoNweU BoBC
‘Wenovaztau0s 2} jn0
19 Oe mg BEE
yquuea najad
\dwo “saroese
sng foul op aiorep
nijeds esoyoese9 9p nojqe} inun eosinysuCD
0000110 fe auruin ixgsuazoudou Jeon uns
MPS £6 “TOQD0TI0 19 ~ .2, 1910-26 roMu “sajainjaung “se miu roNwFNoqeD UE 20 duu Ut
2. un ge BA 26 waleoyes are ame JoroRIeD UN 16 UBLoEIED waloUase ap aIS9.¥, Uf]
4 es — 2, WL WO — agwonsodte id a1BO}eA 6 PEBOUBIEe 9s 1 J9}oUNE9 INU
vio eee
4 ast uns (qoute;
no zvaqosoumnu as nojqe
fe uewofe IMU Yo jIqeqoxd zen ie aneseUIAU 9p Inpow yefuetep eA HOEK]
‘edna sed Hp UREA ES 0862 ‘Sd invatdm C++ pas cu pas
gotonyi ift, t
Buten{ border
ant. = Lect
wnilet . ¢ egt |
poten poraert11 );
putent boraar(21 4;
J/ construzeste Linsa centralé
planis[0] = border (71;
= rot - leer
Planks{ i ] = porder[3];
blanket isi] = 0
U/ serie Unia centrala
gotoxy (itt, top+l );
printé( blanke }7
gotoxy( ty 3.47
Print é( "weste the poten" 7
Cénid_mtroducets aceste
‘mainQ. Celelalte modificéri
‘seotiumea centralé de cod.
i asigurab-va c& imbaliza blanks{} deasupra lut
jocuiese gotexy() st printf), care erau inlocuitort pentra
partea dreapt a ecranulut
‘Aceasta se datoreazt
in mod special pentra
‘Trebwe sf trecets de la versiunea cu prunti()
Ceca ce inseaminé adtiugarea literei“o” la printf), asa cum se ara n listingu
Listing 3-18: T.CPP
1) wexte the center lanes
gotoxy( Aft, toptl }
eprante( blanks },
gotoxyi ty 3 yy
3 $8 desondm casete 63
Cu aceste medi
a castes se va smprma in
ct contural vor aprea
rea specificaté
loavea definita
Acurt vom inlocui acele funetii gotoxy( $i eprint) puse pentru testares printr-o
buclé numa loi necesar pentru case.
Listingul 2.(9 prezinté bucla aga cum dorim si fie. Inroduceti acest linii de cod
|#F9, Mat trebuie introdus& doar Tima inferioar si caseta este gata
Listing 3-19: T.CPP
// guila tne center Line
bianes[o} = pordert7)
a= rat - lft;
blanks! i | = border!3]
planks| is2 | = 0;
// weite the center Lines
ke top + ly
wnile( i < bem )
c
gotoxy( 18,
gotoxy! 1. 2)
BYLREE! "write tne pottom’ ),
Daci va aduceti aminte 4 [iniile now mtroduse din 3-19 iniocuiese functille
gotoxy(} s1 printf), pus pentru testare, abtmety cea mai mare parte a casetel,
Fig. 3.8 Casta a ina sipencar 9 nerstaeseus
rere
( at
‘yaeauui wund Ban n1s9s 0 atUa ad ‘Otinjos 0 asa 20 9 oUmL}9RAISU “190140 ap HD
| auovarpuos> 1 at
Ju eUIOg “S9ALOe
‘RAIoza4 aYso wULa}GOLE Ao
pou “myRUMUED vaswOIND UL
injnques ee106403§
‘oo 259 aes INLD 6 BL
Jot ese
id ages 2
mnouresed
(Qaimarers pron
38 yas apnOsaP ESE
4 (yl zopzeg puagna
‘
od
£( {s]zepzxeq)qoand
?
(382 > tetra
reap et
zepzoq )yoand
+351 )A¥0908
eUrT woaze 949 eaTaK //
“¢ syuerq paaueads
FOr 'ag1 1ax0308,
(na > 7 petrun
t+ ays
seurr z84489 943 35am //
dd 202-€ Buns
‘unstoa
uss2a phurzand Qz-¢ |NBUEISTT
'e no ANNU anIeOF SuOMES BS MgAN Aw BD "PAU
“rearoza ws wuyqo:d wand 4W0p His1w09S,
"BUD eno v HerE|D—p [-¥S ood BA MU AOEYLdUOD “oN ais0 1 160¢]
= yan
1 ad reo enop
swieoap tie go uIEUMAS Ae |MIOWYdWION “LERYIpOU BARI JNPOD wIdoD HE POE
“autSo|og smuod 2p 2jararsere9 2 15 ()AxoI08
lisoey ys wwop singasy — sejuus a9S9 jnso901q “BIROUEdNS
{2p jndnaB vidoo &v “suru vonp uj se vou
ouso10) ef
sof suyis umuios jasooeses Mesos i Sof eRUpIS Up Iifoa Fieuortez0g “1
‘Svand eva
20 95 BISUADY "BIBOLAZUI
Av op owen
F COBO
tunfuts eRngoe ws neozeoM yoru jn
a4BOLIAJUI [9]
Beans eT og waEAUT BS roSata ce pas nas
and tne other
punct de vegere al
folost aceste operator
‘Opusui operatonalus = este '= sau “nt este egal”.Vom
‘urmator:
Af { out.ineele ‘4 convents_cir)
color an the center;
(Va tet
central). Li
entra obti
sa substituim 0 instructiune CH real pentra “cotoreaza
nd aceasti instructune if eu un al doilea apel box_draw),
Listing 3-24: T.CPP.
/) weite the bottom line
gotoxy( 1ft, btm 1;
puteh{ boraox/6!
a= uftei?
wnile i < rgt }
puten( border (51);
puten! border té} );
// repaant the center
Af (outline ele {= contents clr }
pox_araw{ 1fttl, topti, Fgt-i, ptm-t,
: ", contents cz, contents_clr)
void startup()
buie si facem este s& piotim 0 a doua ca:
NOTA
Un program recursiv este acela care se a
pentru a colora cor
3 88 desenam casete or
ce programul sé nu se autoapeteze la nesfarsit. In acest caz, la al doilea apet cete dou
cculort sunt egale, dect nu va mai fi un a teilea apel
Dacé introduceti aceste addugi: s1 apasatt Ctri#F9. vets abjine o casetit complet.
‘in dowd cuton, fo fig, 3-10 puteti vedea caseta,
Fig. 3:10, Coscia est complet
st vi felictat. At creat prima functie C+ uf.
SISTEMATIZARE
Tnainte de a continua, si ne referim la cateva chestrunt pe care fe-am n
intotdeauna bine s& privim critie ceea ce am Picut avunel end ni se pare cf at
verifiednd daci ceva cumva a rimas in aer.
Testare
Mat intai, em creat numat 0 casetd. Aceasta nu dovedeste cA rutina noastra va
functiona corect in toate cazurile, Nu incepeti prin a apelaeutina cu o mani, sau chiar ou
‘un morman de date de intrare, Incepeti prin a gandi
ol 18nd, caseta noustri de test nepotrviti? Existi dow
‘ochi. Una este aceca cd am fol
program fri s-o stim vreodati, Am folos
‘coincide cu fondul ecvanulut ~cvea ce este 0 alta problem potential’,Danareye prea
fc [perisvueta = Urlexueta = lo]eueta
fuypapt =
(Jeyuera Butzredes //
f(279sauaquoo ‘aToTsquequCO *,
sauna "t-a62 ‘tedoa ‘T4377 Inez" Koa
("34a saueaueo =) ATS eUTTARO y JT
segues oua quTeder //
ddd" :¢2-¢ Bunsi7
qoyppow szqoer09 1 399 1} 308 9 Nd
surzara gc ynsunsy
1 op aivooy ap vowUsedY UU
‘ur ne doazaoop “ang ap 1ge TeuOrigUNY & MINOR BURA eUSOIOF BOUND. 1a
raed [Jsyunyg vasisojoy o> axerepisuCD UE YeH| UID MU AmB oe
nijeds es0}0ese9 no eesezienjoy
‘>]aiisal jeoyoads ne 1 ay "ezeauot}ouny 24 aun asaqe Bo euNISE
5 equooduu ayoy ais +2 Ul 20uy es wind ‘{)aeIp” og tuNoadd “ajemuaUEpUT
(eayssoe ontp vumann JeapA nes) LORIE OLDS 96 MU PUY JouTU ap o7OKeq
(ate eurrano )aaseaxea
ZoTOD suTTaNO ava 205
1352
3 9 woag exe suoros prTeq “aequec-aeT o3 setayooTS
oye ‘seque-doy ‘xeusoo ayequdoa exe sieuo zens09
ROGLOS NaEHOS
ONY GROTY NERDS BLOG OF 09 NOA AT STEVE ONIN “SYON E AE
S109 P SI XOE NOWININ “NE#HOS NTHOIM 2 ISNA SHLYRIGHOOD
| a7o7squsquoo aut ‘aTo"eurano guy ‘zepz0q_ zeus
vung 3ur ‘36x ut ‘doa quy '937 gut Jmean soa pt0a
Pe eee eee eee eee eee
dao 2-0 Buns
‘as00e vofgoly en nu (jojoous Jor ap trBUnRe BAaTeo 9p ai ‘out HD 1S
Hiqevord) wisone numeosd pea ares 190 asp tu
Rnopugwe & upd
9p aye) “2faisay rensLoWap nv 29 N99 no MUOJUOD “2H BS ainGaL at
18 nsony 1s998 Zauoxiuau
nu tep "Sof 9 v30
(08 BUI J8p TepIO aIS9 NON UI
Wp wou a1f eUDED 10d BD
O9uN Hany “PGE wip ‘sof ap “eS
wourRvew vy sojaeses vareUAsap aIS0
Uf “seAope-1N) arEELUMa0p uy SLIDSUY 104 0 18 aHiAIISAN © APP HOBOS 10K 6 NEUES
i yoefap wo win eaynd
up oyso00 Bo aIsapanop 96
1 mideeup wp simu ye yB2BND9
up suso}0o) gxy nauad pURSay,
ata OBS yoBOLLSHU wOseD “EXE Mi
oye 9s amo
B) RAopesn g
09 mesp X09 #9 3}
Iicwaxo 9p vo “aunt aye ezeojade area a[ounns eo sist uOL2 ap u
© no qmumifose omougesons sn “ju
cu LoTeA vy 18 WON e)
‘aqezrUTy atau 9p a1aHep
nna Bo Uns y dayne S91 S990 NC “HOME afaque HE aIBUOpIOOD nae
soatoo arbesoyay
23199 Ip areoayy
MOA Bo WA-KEINBISE wIstEDe EIeP ap 1H Ise9 ye uN HE|MyY
9 ‘aiaseD UIBLOSED ws E
‘ed no Sea 520 RTE RS 8zo ‘Sa invatam C++ pas cu pas
NOTA
imbajul C+ operatorul ~ retumewzi o valoare, ta fel ea si operatorul +
‘Vatoarea ret .ceasta permite serietea anor
atribuici mul ea valorit zero tuturor Variabilelor
peo simgura
(Cfnd veti mtroduce liniile actualizate din listingul 3-23, veti vedea c& problema
este ezolvat
Acest cod nu este reentrant —nu poate fi apetatatune: cid 0 alti copie asa exe
folosité. Ori de ete ori o rutin’ modified datele globale. ea nu este reentrant. O
versiunea generala ar face © cope tocala a tabloulu: de caractere spatia $1 ar opera
terior modificarileasupra copie ovale
Jn cazul de fap am procedat mai scurt sf mai rapid dec procedeaza o ratind cu
ca nu pute fos: aceasts met cape o components sistemul
mult.
- vom extrage codul din
ister permanent care face
parte dia sistemut nostru
REZUMAT
Daca ati parcurs cartea cu atent
program nebanal in C++, Ati seris
‘Am inceput ou finetii de mtrareviesie pen
sterge ectanvl, textatt() pentru a stabil
se va permite apetarea textmode()
le deca constantele numerice Se,
Astfel acestes devin,
2.98 desondm casete
BSidesonimessete
|Apoi ali sors 51 apelat propriile functii din main(). Ati inceput cu functiastartup()
functia dox_draw().
care 0 vet! folosi tarmator. Dac& pana acum ne:
procedurii de cesenare a casetelor, in capitolul urmétor vom include aceasta logic
iin-un cadru ortentat pe obiectfog aut
#03 UT
ogy aut
‘zTsTeupTane aut
f[gpz9pze¢ xeuo
7 oq Gy ap Wage wun EEBIO F
sed no eds79 uisiam
‘o wiaaal eS aL78
Pointeri la structuri
nen box:
/1 use pox
cere
Listing 4-3: T.CPP
prezinta un program
la structure”
17 7.0PP == test rousane
struct pox
int ift, top, rgt
char borae
© masa)
b= now box;
Dt
contents_ciz:
‘Sa invita C++ pas cu pas
31 executati din now pro
4:Crearea unut object do tip box. oe 73
poise =
p>top =
po>rgt =
pobtm =
eelete
return
{ena of T.CPP
Fig. 4.2. Fereastra de examinare atrage a
0
a
ATENTEsew anayar 2083 © unuad axfosojay a5 ,oun19M
2jeuinu no gumions © op 90) ut 'Koq ayauint no
9.0 WANE BIR; ED
tats" equem09 wrrane ey
[gyz8p30q 220
fugq “382 ‘G03 "337 3Uy
nijot BRO 2789.49 Uy 449)
‘SHI HP un-nutud eoyspour
3p tmolmg “ammnoexe azepey W JO wi Ludo BA as
‘aud ygoap ray roun jeadaup w) easuido pices 12
SUSSONS
‘ns eur Bo 1exy aud
tan grem 38 gp 35 HS 80} © avocuaatUy ap jm
‘ray Pasou ea axe a1Sod ypueG o enIasG0
‘9p vounefonusut ad yruosino PEK 96
axsoqiqeis 98 gsi puysedy um
2)
1d) 308199 9p yaPareN
Poe 2d (ao
w OR a aS GST BORED
do" 30 pus //
tg wmaex
fg s2eT3y
tt + asta
Beg = SP TA
apy aur
fot = mec
ip © 262e-¢
E = doae-a
sted
Mog MeO = @ yom
paver aur
dd OL ire Buns
anak
eiejuewlidins exeuedeg
‘sed nd Sed +45 WETeAUI ES 08a2 ‘SB invltim C++ pas cu pas
la definite, cat
ta structure mdividuate, Sintaxa programului este aceeast pentru
ia diferd
dar crim ou mstante te
0 variable tp box in fel
mite obiecie. Ca st in cazul
ine 0 serie de mesaye, de gen
rLft is mot accessible in function main()
Astfel ajungem ia o diferenté important intre structur 3 elase.
gii de acces la membri
Toj: memoet unei structurt sunt
care are acces la variabila sau pointerul
acelei structur. In caz c& lft este membru aj unet structurt de tip box. orice
avea acces la bili, daci b este variabil de tip box sau b->IR cai b este po
Cele de mai sus nu sunt valabile pentru clase. Tol membn unei clase sunt
temibri privat (private), ceea ce inseamnd c& numal furcttle membre ale une
/ea acces ia datele membru. (Imediat vom ajunge si la
cade exemp
Acces cu unul din trex cuvinte chee, dintre care dows sunt
Private 31 publ, cain exemplul urmator:
struct my_streer
public
type? menbt;
typed menb2;
class ny.clace
private:
‘typel ment;
type? meme2
‘membrii structurié sau
mmdante, din moment ce
~ gcrearea un object de tip box
8
cle sunt tipul de acces im fexemplul urmétor unei clase ) se d& aceeasi
permistune de acces ca une structuri:
class my_class
public
‘typel memot
type? memo?
:
Putetifolost ambele cuvints chee in cadrul unei singure clase sau structur:
cuass my_class
private
type? priv_membt ;
type? pravmemn2 ;
public:
typel pub_menbl:
Eye? pub_memb2;
ingul 4-4 intro clasé total
ret fn class st adugatt apoi
4-5 am convertit structure di
ccuvantul chet
calificatorul public: access la inceputulfistex de membr,
Listing 4-5: T.CPP
J -T.cRR -- test routine
clase box
public:
Ent L&C, top, ret, Dem
char porder!3] ;
int outline clr, contente_clz;
int main()
box* b = new box
polfe
postop
peoegt = 45;
pespem = 15joury enemeoap
FPUD ase (LanyonNS nes) asela run BTUYZap sun eremjoaq,
wadeasp er eueotes © // ‘(9/¢ jenom<-dg
-exdeaup soe wsoidap ap
ued « giunsip 0 18 x elumtp 0 B1EE9 BS on sy “(x0q)
‘aseo im99190 aye MAQUESLHaqup BD azNgEAT BF apIO}BA ap apudop steOd “eauUase
2d “‘QmBIP X0g ep 18 HIS0}o} IOWA snfIsap a190 2yeod QaseIp wPOIOWY
dq en9tep
1) goncme. dep
()m0zp-a
xoq meu = da xog
fa xoq
‘anoou ajsa0e axe ammo ysE 0 EZFOULIN “sjaLasEO (JanoUI = HeSE}dep
8 1€ (ozisor - sjouorsuowmpa: ‘(rasp ~ tleuasop ys HAS Bo uloundnsard og
| (eezsqeurexed>)
seta
:maquiour erouny 2p atisejoap 0 asd msR20y
‘muquiotu 3jgiouny yoo
18 aauiLd ereoap as nuqurow ajorep (eIdvofoiuy aritpen o axsa wo poo 18) ipest ULkd
‘eoorseUe ep you auDs yod as mugwaW! yHHouny IS oTEp 2p ajstiexe|oap “KKey 2
‘Be nu vot
480g 50 pus 7
0 umaex
fy + ag eo ~ apxe-a = wopte
se oq dn ap FaIGO Wan waIBaID F
‘sed no Sea a9 tapleaa BS36 SA Invatim C++ 998 cu pas
provedurale, deciaratia
Iti parte a programa,
‘membru ale unei clase si si
B vad
membru. este atribuiti: clasor sale (sau structurii) prin operatorul de rezolutie a
‘In al coilea rand, datele t functile membru ale clases din corp
‘membru nu sunt precedate de o variabili obiect sau ex
‘SA seriem, de exemplu, 0 versiune foarte sim
and functa
icati a metodei box::move().
void pox::moveal int xdist, int yAist
Lift = lft + xaies,
gt = rot + xaiss
top © top + ydist;
btm = btm + ydise,
Sintaxa “box::move()” prezinti operatorul de re:
obiecte, ca de exemplu un cursor de menu, care sf aib& de asemenea metoda
ar putea fi definté ca box::mov.
clasa face parte functia
J] g08 pox p's members
}1 // uses box e's members
membru speciale repr fiat de sintaxa de mat sus. Atat
cet s1 destructor
‘4 Crearea tnut oblect de tip box ra
constructor si destructor
Majoritatea claselor au efte o functie constructor 51 multe clase au cate o funetie
aestructor. Constructorul se apeleszi atunct cand se cteeaz’ un obiect mou, rar
destructorul atunci cdnd se sterge.
Functia constructor are dou alribufiicaracter
le datetor membru ale obi
{fn primul rnd constructoru
rind va aloca spatiu
Fanctia destructor are o atributie generalé. Ba elibereazA spatiul alocat de
fix necesar pentru membri, cur sunt top gi It din exemplul cu box
priveste
ccodutw
le claset (sau structurii). Nu é se poate
si nu poate retuna vreo valoare. Iatd 0
/{ deciaration in class cefinitior
class box
private
amt top. 1ft,
public
oxi int 16, int ep, ..-1s
JJ aefinution of nox constructor function
box: :pox( int LE, int tp, --. }
aft = 1£
top = tp;
Clasa box pe care am definit-o
de creat nic
lor la datete mem!
constructor.
fel oe date de fungime
wale abjectalur de tipe113 dog soeds: saqeootte// #(3a)0urZas mauesTata
Lo 'y93 axeua t yxog: sx
2: ))x0q~
2 aroUS / )x0m
sorrand
erara yeu
ogeatad
xoa ss#79
annum ug me ea
‘iurzaxd nydtuoxo ruoypaui7 “nis Jaov aBson v op
mjnsoyonsysoq_yeDofe nods wy pH wt ws 1A
putudn ws eo nuads waoye wend wry “aveyse309
-raasto np un eu
a sesooou 1 18 ate td 09 up, sendnnsU09 were me
“gosv> op soFoNAIS9p sHutNY O 9p SIOADU TIRAOPH No 2YS9 NU MABSOU InyAWIOND Uy
pareep sf xeq 2 uBUN daweats // °
xq #04
TsagT-26x = uaprm
161 = doa
BL = aT
ses aq guy 'g1 gut yxog: :2000
vorgoung zoaonsasuce oq Jo uoraTuTgan //
eunguey ‘uapta aur
fos tagy toa aur
‘sqeatzd
xoq sse1>
WOEaTUTZeD ssero ET UOyRUIETOD //
snyduoxo un
totioury wuyop yzeoseid 2s “90190 9g]
sorotunsuca erjoury ednp ze}pouu! soranaasap
Jap UW 18 nsOIOF sISO oUIMU Soy
sorona3eap //
soonz3su0a // "
Inso}2eI60 ap yopedard o1s0 go injmydey wrdaoxe
ja98 2189 Jo}ONASP tOxfENY >/>wNN
‘x0q snun wauurigy nye HS aINgaAR 140 aN
9 Uo (S0}0Y wand © are> ad “ApH “niquUatW RIP o PrBD9IN IO}ONI|SUOD CHUN
‘no ‘woronjsuo9 toriouny sjauun
Sth agT-aBx = ygpem
183 = doa
O3T = agT
‘ aq aut “31 qt )xoq: :xoq
vora0ung zoasnaasuos xoq Jo uoTaTHTsa //
"
0 se) fag guy eaT aur j200,
rortand
feseuey ‘apt aut
for fag ‘doa aur
seaeatad
xog eset
UOTATUTZep sseTo UT uoTaETETDap //
njmoaiqo wazva19 v| ateojeA waseode azasouou a6 BS 1 azajnof¥D os BS SDS vaNE waInd
nd o4 Bs aingan JOYON.ASAD
my 1 ateAud uns ajaroa4qo
2 ()x0a~
(00) dq que gt 3ur)x0g
errand
68 ‘Oi dH op FoHIGO MUA eSIEDIOD
‘50073 600 re WEAN ES 890 Sa lnvatam G++ pas cu pas
ceLete tities
Apelarea constructorului si destructorulul
Suntetr neribditort sd aplicati ce ati invijat? Aveti ribdare doar un minut $i ne
© clas de casete care sh fucd exact asta. Acesta este ul
‘care ne vor refer
Operatorii mew $i cer
constructor s1 respect
lunde a creat nout obi
Tati un exemple:
box* pp = new pox:
//box weed,
Selete =p:
(repel La box: :boxe()
/Yopet 1a box: :~pox()
‘infeles si un alt mod de a crea o casetd. Aceasta const
focut unut pomt
box (sau 0 variabila de alta clasa sau
le constructor $i destructor. Constructorul este ay
forul este apelat cfnd ea rese in afara domentuh.
‘Nu am vorbit inci. de dome
void my_fune(}
int i;
df 4 exista aici
// 4 mu mai @usta aici
fn acest exempiu, variabila teste
punetul unde este declarata 51 pnd la sf
obiect au acelasi timp de vata
void my_func (}
box b; // D exista aici
W/ peste utilizat
4 Crearea unui oblect de tip box. in 1
J) b nu mai exista aici
deduce ond sunt apelat constructorul i destructorul
‘atunct cénd variabila object (sau vanabi
ful functiet. Tata
void my_fune
JJ apel la constzuetorul nox: :box()
// pucilizet aics
j apel La destructorul box: :box{)
box Dt
mod constant pe parca
pentru dumneavoastré o a dova natur’.
SCRIEM O CLASA NUMITA BOX
tA bon, ale care obiecte sunt casete. Cassia este 0
tor contemporan, Casetele inconyoari
fiser,.mesayele help $1 aproape orice
insti
submultime mori din posi
turmator, putem si folosim easeta ca pe 0‘ep Jo]Lquow Jojoummu ofe ayPpIMOSaId
tum dn (ep eporour #8 rrroranssay
fru waigeces unasa este nu yO FUNLUE BA YS aINKaN IMP “sO}INNgUOD UH aUIg wt
{ua tisvasy “FeueYO NqUed azorOEReD op fMJoIsaA ut a1aIwsED KO IKI HOA
aelduI0
1798908 9505005
POU Wy aqeaLud vousLe}7eze> ne Lase|9 sQUAW ~ EURPUNOE
‘AAW Mo pAcizaygion 1s BsEID ap axNuyop wIsvEde HooNPOTLT
"3a0 EMBL 39 POS /7
fg uangea
(aren aay
‘Aquo Buraees Joy auyjurew /
(exp pros
xoa-
: £( aTo"woo aur ‘zroT3no 9uY
bad 422u9
faq aur ‘ax gut “a3 aur (37 wy) xo
errand
faqo"sauequos “zTsTeurrane aut
xeproq zeu9
doa ‘ast aut
fegeatad
xoa eset
yxoveury “7 UrareR “gg6T 3uBTZAdeD /
Serapptaedeo Sutmopurm zoaspa Aurt-gao°NINBL //
dd 'NIMAL 2-6 BURST
J 9189 4p I
Poind WHOA “uaumIed Joj20v ajounu pursojegey “(ABP Koa
emumsdiay wom,
66g ap TS THN BOTETIO
480° NIMEE 30 PUR //
fi
#9 uanaez
)
(Quvew axe
Aquo Surase3 103 auyTurem //
areuoury “1 urazeH ‘g66T qUBTxAdOD /,
sovartyaudeo Burnopurm zoapa AuTE-aao"NGMED //
ee eee
dd O'NIMAL *9-7 Buns]
“auwiod ap ynajayas waa
lun iste nu ‘now yajduuoo ois “aa NIMAL
Suysy'| csp ad wauutoods
un mo wodaouy eg
{A “aydurexo op ‘emseray op area] ajaseio sro apni
‘mupooy aysigupiqisod votsyaads Jo, ax ajasa}oe3e.) IONS
2ses010} of area ad afasotSg rwmUsp LO, “RAPED UN 9p BIOARLE RAAB LOA fe
Insojonysu0g
‘oyonsuos noun taunt ysiz Alidosd wonesx9 vy wHO9aN1 BS (EE
2 ap a1onou wane reUs faa puraLIO EqiUodsip
4 ex Osean eporaur sep “ase wywar0 aI puPD tourYE IAB | BAT jansy
“Qmeup niduiaxe ap erede a¥tod msoronnsuoD “aporaur JOy|NWW faut vaswarD eUNBSPICH
Heaipouy “soroRSueD uy snd oingan co axds—p wrziD9p to Tiog UF viRy Iéng
SuSSONS
ee ei eee
‘mpnrosonsysuos ©
Op ap 2382 My “aUSeHRy YorBOUO wang eIMMTISUOD o|>1—st>
150d © ay FS aINqaN ISHS,
ured 0 ats 9s Qn
BO" “TeIa809 B oN
2150019} NOU UIP BUBsEP EA
xy seazay Up aumod
ronsaaay yy “aueuaseper
YOU PUR “ULI od ap BnNSvAIay
szauesopar os YS ays BOR [ES aiNgan sow) 9 ap ¥7Rq Op atunsony
‘Sup up “weassx8 0 rs0 y waseD vUDsDp d]ase Op JOTDNNSUCO Nake IML
sed 89 8609 ulema eg we94 SB invita C+* pes cu pas
aft = 16) // aava meaber = parameter vaiue
Pentru a serte constructorul, am putea serie opt declarail separate de atvibute, ca:
border (71 = prér 17)
© bucti va face totugi mai succint aceste atribuiri, Bucta for este perfect adaptats
acestui seop, Sintaxa ei este:
for ( ;
Ca sin cazul bucter
declaratia de bloc,
ie pentru aceast instractiune este
stfel:
for { ; : contne toate actiunile de mitilizare. O actune tipicé este creates
atribuirea uner valor unt contr de Duc, Fata una pe care 0 vom folosiadeseor:
for ( int i = 0; ; }
cstatemante>
cat
continu,
chenar:
n> este o expresie logicd, Atat ump cit conditia este adevirutl, teraua
A mal Jos una pe care o vom foiost lin atribuirea celor opt caractere de
for (ant = 0) i <8) cena actions )
‘ este orice doriti si se execute ta sfargital fiecdrei iteratii a buctes. fn
‘mod tipic se foloseste pentru merementarea unui contor. ceea ce vom face 51 no:
for ( int b=; ie) ise)
4 Grearea unul obiect de tip box. 95
entra 0 simpla aribuire nu avem nevoie de o declaratie de bloc. O iastractine
este suficient
for ( int i= 9; ; epnrouTe
axeveupy “7 urazeN ‘s¢6T TUBTTAdos //
svayTignde> surmoputm z077pE AUpL—aao"muE //
dd O'NIMAL :0}-p Burst]
nua vara
tana ese “,Qsemx09, (849109 plOn +
© GAYAVYC KOG Up [Joep x0q pnproo1d of €
‘Ol-P tmnt randy eI a6 LiMo we
4 dd NVC KOM uP fweIg mojo axeeHrzunEsaI00 9} z
immdsou et tiapan © ame ad “sDmIOUlg
Svan sve Soe
ro oq Hy BS YOO TU WaswwID
‘Qsveup eporout zaio & nud tresooeu uns rbd ONE)
3p
1S 94 isoIog “9 we PUBUOHE
spiyouy ® Ruad ¢asa1y Gesede ‘ausexoy ore 18 astyDsop quns BEC
ued 93 tiesecy “C4 no wropugwE od a-tieplyasap ‘azar eno n>
SUSaONS
EINES dd NIMALL dd0'AVUGXOE 0
‘Rpo.aUI owaIO w nayUag (JaweIN KOQ BN
Up 96 56 Anewsaad vlan
A upiays pow una
yezyyeas Qasesp por
ago"NInay Zo PUD //
ep 03 Suyqaou //
y
() #oq = ts arog
fatoTuos = zTS"squeqU0D
zTTane = z1o7eUy Lane
Ue) apie = Uf) Zepzeq
bas vig stig tau) ros
a3 = 362
Gq = doa
31 = agT
(apse gut ‘aToTano aut
3px, Teus
‘sel Bed 339 wien ¢g
3698 Sa invatim C+ pas cu pas
U/ repaint the center
if ( outline.clr '= content_cly
Lima cu un singur punct $1 virguld (ar putea apirea si ia sfirsitl
precedente) este o instructine nul If cores fie urmat de o snstuctiune. tar pu
muctune completa, din punct de vedere sintacte
ile de cod care vor completa actiunea de pictare a centrlut
até codul care execu acest luer.
Listing 4-14: TEWIN.CPP
fsbesstwn ik Plossl jrcesO GMS SISEMSSISENEISESSEIOBSSISOBSSISOESSIOED
// xepaint the center
if ( outline. clr ‘= contents_ciz 1
cextattr( contents_ely |
int i, 71
for (x top; a < ptm ite
for (js att
potent 8 jy
3} retry tH
¢/ repairing olanks(}
dreapté, Pe masur& ce j se incrementeazil, se inscric un blank prin putch(),
culoarea corespuncitoare
V8 putet verifealinile de program prin AIt+F9, Pentru a face 0 testare seniast
trebuie si facett un program, care si creeze un box $1 care si apeleze ulter
‘box_draw().
Jn acest scop vom adiuga céte ceva ta siniaxa, pe care am discuta
‘Ati viaut cd pute crea un obieet aga cum crest 0 variabild pentru
‘metuse. De exempi:
int ay
cnar ¢:
Je
ant if
enae cr
box bi
¢9 NexOTMOTTEA euTZeDH
njdusoxo un gay
a1 Jojuojne vansojog "HERLOR}
poo 2924 eyse908 YoED ‘=}0E}SU0D dj440N0 INYap Had RA “OSEHO MES 08:
‘279 waa “(Jopounxay1s0j0j we puED apap aweYsUOD ep njdwoxa un INZEA WY
4o|yoIno easuyaq ~ euyepy
‘amuresoud ap vounir yzvamén Ya “EOpOA 198 wuno ydnp “soaIOap “sosepoNdaLK
BANU we o eonpouut v ep aizeI0 yuNg Oo aortas
roa'y yna0sin2
papsy osm
‘onesie SRL BRL HT
} {nr
tor” .V555 NVIAVIDO" ?
inoaxe @ mudd ff Hespd 18 pjong wn 9p erty od
‘euoitizod ‘Ioo109 yzeauitjauny yo SUIAUOD Hea 99 BANG “Lf ND ‘Sed nD Sek
9 NES WED 0 19 waIRUNWTENE ayo axBuEdoD
‘0}9;909
“o1woxtsoqo aiso (aeup uy vamBuasep ‘eapen tian uno yng. “()meAD epoyant
ofvo8 ap
‘sana ums 9[9 29 EMSEEI 2d “SIeWOpIAE POD ep
‘eBimazed v runtiod gy tts0}0y “a4se pnop atzo as
ised ams ag,
IN} PaPOA tian, “MIEIBOU
‘8A g4 1 “a10y 0 ap yreiade ais9 wyseaoe pou ‘guHagnS:
18 sud no sud exyur wa Lf Bo
Imaey uy xsu0 thuaragiq “aay no xeHy nutEsROxd a8snaved 10 $4 1819.4 IY
mnuow 91g <
OWH- 1g <
NTO, Mp ares ap vr wy
aBmnared v nqued :4 efop usojoy wy
oo ewwaunuodxa w rumad punq or7N90 0 esuL a}Sy “eURdop poo
Wz 09 WWelWOUE wip “giWOBUENS ap IRIE aso nui poo Imsaae vareUEdSC]
eoseuedeq
Blop 804
‘SasTV esede es aingan
SOd Inueiso ezyyenzra v nasog “vase wuasep BA ynutesBoud 1 GaN
IMUISUOD ¥] BD asOISY NOP T9 NapEdoId ISe}oae UTSOIOS JaISY FRO
“dd MVAXOM 4 Iq}UodsIp 23s amo NaUad azarae ap mals
sea sd ra wibionl eg oorsoz siinaincrmscume |
8 ________Siimalam cv pss et 4Crearea unui obiect do tip box 103,
#ineLuae :
char bianks{] = // 80 space chazs voia draw):
void moveto( int new 1ft, int new top);
define WHITE BLACK 7
fdofina YELLOW CYAN 62
Youd box: moveto( ant new lft, ant new_top )
fefine WHITE BLUE 23 i :
rgt = ngt + new ift - 1ft;
lft 2 new_iee;
class box 3
pin = ptm + new_top - top;
f/raintine for testing ony top = new_top;
ant man() | }
i 11 ena of PENIN.CEE
return 0;
‘Aga cum rezuita di 13, acesta nu este numai mat ao
ficare numar de culoare folosit. Sé | a
procedeu pentru a adauga mai multe easete (box-ur). Fe TENT
‘Majoritatea unititilor de gestiune a memoriei presupun ci DOS respect,
Desenarea mai multor casete
| care unitate de gestiune a memoriet credea c
mii 640K. Dac velr muta casetele foarte mult, va trebut si
tele ecranulu,
Listing 4-4: TEWIN.CPP Listing 4-15: TEWIN.CPP.
class box, i / mainiine for testing only
1 i ant main
private | Hee
int 1ft, top, rgt, btm | cextattr| WHITE BLACK )
chart poeder; | cirsce()
int outline cir, contents lz ae
box Bf 1, 5, 45, 15,
puplic | YELLOW CYAN, WHITE BLUE);
boxt int 1f, int tp, ant rt, int pt
int out_cir, int con_clr
p.noveto( 5, 8) b.deaw(}eC a0Tg aTHM ouTToRE
29 RYAD MOTIA auTze0E
LMOWIE STH oUTFaRE
szey> eords og // = ()svueta zeuD
epntoury
arousury “1 uramey "Geet WBTIAdOD //
serstrroedes Burmoputa soatps Autd-aao'NIMab //
yuco no jno foun ye ans eugs
[RE pup “mctano ac TRIES
co dum wry mse ewsede pup
oo un no sojsarese ® afonponut 9p Tau Pow Wn 62008 aIeOUpS BAA
von
&
jareuop1009 purianuod “ojassioeseD ISeB ¥ NAIL S}
aymutoae ore
‘ion S008 29uy
‘SOG ty PareurexBoxd uw, o0ey Yaynd 0 area ad rou azeoH'8090 Iw 2}29 9
eujbsew ap unsis najued suyapy
“ORRUPWASE UAAD ‘SAP
's Heosoouy {o}eseo yop ofoUlg|N Bj ojo azjUE ajo} MEQUUIYDS UH Bo 1PA30SG0 INV
“me (ST '02 'T MOL 9 xom
#( wowreasram )23723309
Qutea 307
Ayuo Buraee3 403 ourqurew //
ddO'NIMAL '9}-p BuNsT]
Ijclusoxo un guurzard 9|-p m-Bunsy] “ayeey 94 BUDsep 2} 8 ap 16 Bese
‘ay99G0 oA YEW NALD v Op vjooB ase BIASED B|LAIIP duNigo v ap poUs IE ti
‘we.09 94 oj2009 9p 308 un vaseuee=d) s+ “Big
‘aur wounisien grurzard ¢-p wily (zee nu ‘onsie @-mnogy iy) IMRAN
nsnie atesecue sjase9 vfautigo Ys moon se “GaN dese Poe
Eo EES eee eee eee Hee Hee eee eee
fo uxngex
sor [ed Gh Sp yo51G0 Hah WOHEOD F
sed TO 30d v0 Elen es vor106 ‘SA invatim C++ pas cu pas
feerine SiNcLE
fcefine DOUBLE
foefine SING OUD
foetine DOUB_SING
(/ mainline for testing only
ant main()
textattr! WHITE_ELACK }
elzacr|)
pox b( 1, 5, 45, 15, SINGLE,
YELLGW_CYAN, WHITE BLUE},
b.araw()
bemoveto( 5,
Bemoveto( 10,'10 1 para
D.movetot 15, 12 1 p.araw{};
8) bearaw()s
box ¢( 10, 2, 20, 18, DOUBLE,
WHITE BLUE, YELLOW CYAN ),
c.azew (hs
ox d( 30, 1, 40, 15, SING _poun,
WHITE_BLUE, YELLOW_CYAN
avarawt);
return 0;
Incercati acests siruri de frontier in programut durmneavoastri. Veh) vecea c& ele
samplifica utilizarea diferitelorsirun de margine.
INDICATIE
‘Am denumit stiful cu lini simple verticale si linit duble ortzontale SING_DOUB.
Contrariu sau este DOUB_SING, bineinteles, Dar niciodaté nu am
mai taraiu ce reprezinti fiecare. Dac aveti o idee mat bund, folositio. Figura 4-6
prezinta esantioane pentru diferite contururt de caset,
F
‘4 Grearea nut obiect de tip box: 107
Fig. 4-8. Oierte conturun de casete
i bine, ne-am distrat destul s1 am fnvajat sf #definum constante case ne fac codul
‘mar ugor de citit ($1 mai usor de antrodus). Suntem gata s& pormum mai departs. Pentru
stiinta dumneavoastri versiunea mea de TEWIN din acest moment se aflé tn
Subdirectoral SAMPLES\ ca O6TEWIN.CPP.
REZUMAT
‘Afi construt © clask de casete st
tor o vom pune la treab ca baz
Aw ficutjoey s7aIOMNOoUy BS BsMID OLD
In Ws euesBosd wo-a} areo od vs
‘BS Umno ang ps ingan vA BoreIp ap Rese O BojeIp ap afaraseo nnuod At
yn nawwed on equauOdwOD UNS sI9}OSK.) “mIASHD ap ES
‘wzeq op asey9 ul wloK 2008 IS0}O} <
()azviaaugja49p 9p 18 (9) Bs2IP0 9p UOHIodo '80j0} <<
Tiealap 1S pana ap uOrSKUSp audsop wna
209 2p fos9 soyHOIONASUOD KoUNEIEG ays
rieaLiop 18 ¢zeq 9p uoroRsuoR atdsap BEAL
‘Ononnd 6 Orso surg 1s0}05 <<
‘aqeAlop 1$ ereg ap aseio audsap vivawl
sojasejo CeMtUa}sOU ISO}Og. <
jon "asooe ind
4 spago IoYsIED 0 — vaNIUD|SOU
Pinsojoy “BoyeIp op arese9 ap eso o imujsuoD
‘veusorSour :0ergo ad greaL0 vareuNaoud uy aydaou0
Sormiaynd Tew fa ANLYP MUN WINN usd 1WsOd Wor “sO}PUUIN jyoaide:
9 Zoimp ap
a4 jnsunoAl Ad UBISKOD Pou! UI 10} ad 15005 WH
0005 YA NU AP “araiuoutg “Ae
9 ayound war v nuuod gsi vauoUiAS
inomd v ramon gy 18 £.] HIS0j03 Hy “YexoasOoU
PF 10s200daud-earnaanIp HO an
#8 doo} ataroq pursoyoy “umposaid uy axeweiSoud audsap
1901 NE feu! NU a}VAIGO aIsB98 puBD Youre Ht
}98P JuNS aro Ur injaooyg aAeURSSP suns
10J9}9889
9]9.18oyTH9}S$0Ur JUN ZopeIp op aJo}9seD410 Sd invatm C++ pas cu pas
CE ESTE MOSTENIREA?
‘Atunci cfnd o class o mosteneste pe alta, incorporeazA toate datele membre g1
lasele noastre de casete de dialog, de exemplu, vor
. aceasta fnseamnd de fapt cl vor avea acces (a metoda drav() pe care am
ca $1 acces la datele membre de care depinde draw),
dialog.
‘Clasa de bazi it transfera
De exemplu, vom afiga mesaje, da
ialog de bazi. Message va afisa un
reda contolut programutul care tanseazi di
apisarea uneta dintre aceste taste. Message va trebui s& alba o indi
any key
Mostenind o clasi de bazi si adaugind aceste procedee vom obtine obiecte care
fac exact coea ce dorm. Le vom folosic fi componente de baz ale
de programare C+, de indaté ce le vom face si meargi.
Subclase gi alte denumiri neinspirate
Nu exista jin ceea ce priveste m
‘termenul nefericit de selor denvate. De fapt, clas denvata
mosteneste t late 51 cod, de fa clasa de baz 51 apor ii adaugh unit prop
Datele $1 metodete claser derivate sunt extensi ale datelor 1 metodelor clase de baza.
Din pacate, terminologia standard referitoare la obiecte foloseste termenul de
“subolasa’” pentru o clasé derivata. Eu nu folosesc acest termien pentru cA este complet
_gresit, O clasi derivaté este 0 extensie 51 nu o submultime @ clasei de baza.
subelasa,
«5 Casetole de dialog sunt mostenitoarele casetelor 444
Termenut de “subciasi” nu va mai ape in aceasta carte, Nu vi recot
{olositi daci nu vrett ou tot dinadinsul s& inducetilumea in eroare
PROGRAMAREA CASETELOR DE EXPANDARE
peste alte lucruri de pe ect
peste altceva nu este ceea ce fnsemna de fap
funetia
soute Si se incl
se expandeazl acoperi ceea ce se afd pe ect
precedent.
Cece ce ne dorim este © clas de expandare derivati din clasa box. Va sti si se
deseneze singurd, asa cum fac casetele, dar va fi 54 destul de Tnteleaptd pentru a salva 51a
reface coranul,
Derivarea unei clase
si
class < derived class name >
taxa de derivare a unet clase dintr-alta este destul de simp
< base clase nane >
/1 noi dave si metoae
i cl 0 clasi derivati mosteneste toate datele si metodele clase! de baz,
Si repetati vreunul dintre membrii claser de baz’, Sérind peste
ar patea arta definitia claset expandabi
class popup | box
private:
‘enax* screen save_puffer
public
// constructor, destructor si alte metode
set et de baz (dacd aceasta are
SK cream peu(2a "14 jeseq
2 atzep
(> fed xeuo ‘ed auy ‘1d aut jatzep
uy B9 “gHeaUO wseID
‘IEAM 12
18 ygD Weg ap wse}9 rauad yer
2p tinuoo stouresed fio} azysus
‘aingan 29 BA90 SIND JEP “IaseID
OP EXEIMIS UL Lore NOW SIUNTU aIS> AN]
“(gzmg 9p Mase nied
atonee aise uno vée ‘eps0qno x8 wsonuoys ‘2[ayeuops0N ez
‘yeseo © nnuod ujaUered 3p B10ADU YOAL WOK 29 quOWU:
Hoyonysuos nyuad yyowereg
borsnasap 6 vorsansuo “$e
TERS ADU
angen ose
“OTEALIOp 1ase]9 IOYOTURSUOD ap JUL
cies emBiy uy wewazasd imeynzar ouitao
eynoaxa 2989 ¥zeq ap IMIOIOALISIOD,
‘weifoxd imsooe varne ey]
‘ado go pus //
£( ,x\u\goqonzquo2 apzop up, )squTado
,
(agzeps sarz0p
4( y2\e\soqonzqsu00 optg uty )zauTZ>
¢()xo83t9
Owen 257
on {sojeyeseo sjareamusiBour une Bopp ap ejeveerD F
“
arzep,
Fran
osea : atzop eseto
oong eeeto
epnroery
aa0+3 //
dd Ls Buns
“GEHINO no j-eynoaxe 1 j-eanposuy ‘asp 94 eye
‘epee ‘nou jnox no qs0 impor "wjuazasd ajunue 1f-Bs apD0p 204 Nu so} FIOHONAISHIO-)
‘IUALOP ESe[o 9p 18 BzBQ 9p YSeTO ap NIduIs ajdwena uN ULzaud 1-< jnBUNSIT
Lz qewyooz an gt HOW //,eTX\, = 258
ue Teuroe = Ef Tease // |, £\, = 25a
‘preojwun ajpmmpou wp
1p Paina 2e (JZ preusn9ez axvoyoA) ode Jaroeze9 un taxa 9qq
avy saroeseo — yp, <
Tei00 soivere> — 000,
cos
users niguad ofeiusszexoq mos 9fe0 aso eavowse ap 150;0) toma
qua <
Usisyooq pee =<
ond qqnop =, <
ond oifus~\
«
<
<
<
oupnou— i
uns ayer advaso aisjoeibo wADIB:) ‘advosa
1d ndzoUL ap yeuws un BD 19 “YaReID woyp ylaxdsonN
Jee No pUBdooN) edease auajoeseD w=UD Hl
saan 2p po
59 mI ameD yseysyoNg
Sp ajaroei nes vamos BoteD Zo wna “amoeaKD 9p qHEEsUOD O-nbY MoE
onpoatur ond 9} nu are 9d axpoezto nod pup ska ae2s9 aaraien
“anor 3p ys uy adore 242790100 150105 ron 2}9 un outgo ® naueg
Beano Sed s<9 RET ES aApelul de functie constructor pentru clasa de baz apare dup parame
‘oerivate, precedat de doui puncte, Pa
mel ai claser derivate saa
‘expresii care sl folosease numai acet parametr si constante,
geteni)
| retura 8
eo( dnt pt, int 92)
|
bi = ply
b2 = p2;
INOICATIE |
7 cprinté{ “in pase constructor\n\r* }
Gariv:tderiv( int pi, int p2, int p3 ):
page (pl, p2)
ai = p3y
eprint £( ‘in deriv constructor\m\x" 17
1/ ene of t-cpp
inte-un punct de
Listing 5.2: TPP |
beeen Be OPPS EnE eee ean eee eee
Af ep
eb.
#ineiuae ea
eat
class base |
private
int bl, bay
puoiic dervatt este mostenitonrea unein de bead ait de
ase( int pl, int 2); dervat
class domy pase Destructori de baza si derivati
Atunei cand stergeti un
‘vazut. Dac stengeti un obiect
cordinea inversit a
public: constructorilor. Se vor executa cestructorul clasei derivate, daci exist, si apot
doriv( int pt, dnt p2, int p23};
gu! 5-3 adaug’ destructori care preziti secventa in mod clar
uv
s1apoi folositi CrrI#P9 pentru testare (punctul de intrerupere trebute eliminat),
int maint)
i Listing $3: T.CPP
deriv a 4, 2, cop7 (ond jyqerad no rey pris 11 iaadoy)9 ysauTIa
oRODEY. = 7340 70D
sastaoo mead yovacipas gsaupe puoresedo 18 aroriuasaaxep ap jnsoseiodc)
VE) BEOSTIE // € (qexad0), 1usgnd
iy) ezesetze // Caad0, 1yoand
+8008. = 7369 42049
duno
9q.-H8 wp *.¥ "NT Um RoyPUT M9 “stoaxe You “NG 29Rj 16 39 2009 ~ ,ATEY»
418 um ands goxpi fo fay 8908 9p JotOd da ap EUGEUEA © y SpuyA vA loa act
wadge¥. = ado yzeuD
:eiemioap ieniasqg “auseind 0 89
aupuyd y jod azaiuanyorop ap mmioeiado #8 seIpe jsa}e!I¢0
eqUTOd UR = 005 TOT eserpe |Bys9 0037 //
eog ynruggstao sezeztTTa0 //
edka7Cao dra op grrqetzea 0 488 003 // oor af Cao
sqwaywalyg9 jnpoo ery myMIaIGO
‘salpe a189 19a1gO uN AMES mMMZa|UIOd YaILO[EA JVO{GO UN ALyED seIUIOd Un 9709 24272)
msotes9dg) o8Igo Un aids Jered un ays9 J9 IPeIgO UN AIS NU! OO} "ZED ISAOW AE
‘oo aaaTap
og Tarnzoqured eazettyan /
hy Cao mau = 005 .adAa™Ceo
ong oy yw nad
andsouoa 2389 [gj oro}oigo tidnse nu 8 rojasaupe excnse wea fap yrsortiod)
‘puvsiadure "ysaupe mmojerado awasoiog Atop (nysaiqo sim} ama war
‘aaa 30 bas 7
#( 93\W\apsep Supfor3eep, ) 3quTzd>
(Oarzep-1 taper
a Tojaases Bjareayas Soul TUS Bale ap wiaIaSED S
#( «x\w\zoronxsu0s atzep ur, ) gautzd>
ted'= tp
( a "1d ) aseq
ff e@ aur ‘zd aur qd aur jarzep::atzep
t
£C a\t\oseq Suyfoz3s0py )squpzdo
>
[31 seg
c
‘
4) .z\wgoronrzeu09 9¢eg UT, )FuTIa>
fea = za
ia = te
( e8 aur Td aut jeseq: -aeea
fo wznaex
£Qu0206
te ssetep
6c ' 'T }p arzap
!Qaa8a79
Oureu 3ur
“ed aur ‘ee aur”
ftp aut
reseapad
svg atxep seero
40) esa
S(2@ aay ‘ta 3eT josea
:orrana
fee ‘a aut
qed
esva sse19
asoruess opntouyy
‘on418 ‘SA invatim C++ pas cu pas
Pentru un pomter putett folost operatorul de dereferentiere, *
pentru a vi referi la comt
putetifoiosi operatorul adres, d, pentru a adresa variabi
lati un mod de ao face:
any_type var:
any_eype* ptr
ptr = evar;
+ fte var apeleaza
#1) pte ja fel
£2) ava apeleaza £2(} cu un pointer la any_type
£2) por ji// la fel
vunet clase
exeoutat,
exempiul nostra, La ape!
derivate apeleazi ambil destructori), destructora|
Abia dupa aceea se executi destructorul clasei de baz.
estructoritor(sterg
derivate este prin
Oclasa popup
st-cu destructor claselor de
i, s8 adiugim clasa popup la TEWIN.
vo! cere safe ia indemana in caz de nev
4 prezint&codul adiuget la TEWIN.CPP. Dein
wet prinerpale, sub definitia clases box. Adauga
nil clase popup se
Listing 5-4: TEWIN.CPP
// TOHIN.CPP-Tiny Eéitor windowing capabilities
class popup © pox
public:
popup( ant Lf, ant tp, ant rt, ant ot,
ant out_elr, ant con ole);
popup (
(7 mainline for tasting only
ant maza)
~ 5 Cosotelo de dialog sunt mostenitoarelo casetolor 119
bextatte( WHITE_BLACK );
eurser()
box bi 1, 5, 45, 15, SINGLE,
YELLOW_CYAM, WETTE_BLUE }
bidraw(h,
Demoveto( $, 8 ); d.araw
Dimovetei 10, 10 }; o-erawi
p.movetot 15, 12 1; b.craw();
Dox e( 10, 1. 20, 15, BOOB:
WAITE BLUE, YELLOW_¢!
coraw(]?
pox di 30, 4, 40, 15, SING_DOUB,
AITE_BLUE, YELLOM_CYAN
Popup pa( 3, 5, 35, 10, DOUB SING,
WHYTE_BLACK, WHITE BLACK } ;
return 0,
2 popup( ant 1f, ant tp, ant rt, ant ot,
ant out_elt, ant con_clr )
box( 12, tp, Fe, Bt, pear, out_clz, con_cle }
PopUp
eprint ( “\n\xbuilding popup”
popup :: ~popap()
oprint£( “\n\rdeleting popup” );
// end of TEWIN.CPP
Si se expandeze este
cA este de ajuns si apel
expanctim caseta39 UE /32 qT “ey quT ‘FT qUT yandoa
o7Tamd
xoq oFtand © dhdod sero i
dd NIMAL 39-9 Buns)
‘9S mtunsy wy Bre oF wo We 2y}Gnd atayD MURAND HefNypY “RASeOAPaLTEIN
nynwesfond epider earewedap oj sorpuco ¥Bunj alieraxo EIseay.
‘ged yjuayioapeu o-nuIp ByESE] ypo.aut o puylade
‘onmzea tie ero ad vee" 60 10H9 Bniad tea ‘ayeAtsG nies ao4|qnd EO oyfdxa pow UE
‘|}UAL9p 9]asvjo VoNBApIONLL PoYLSOds TAA woe “ooe O-u BS JUD “INAsadd" v Azad
‘ap myugano sumo Homd ‘ayeaud ose yoydam sade 9p pow 29 weoWwOU wICL
SLVOIGNT
uy aieatd nese}29p o8eg 2189 Bs20y
feeder] wi2d // ose oyeatzd -atzep eseto
sayeausd nguae na Y2e9 29 vse ULUTOP
1 o1so wanNeMuOYY “cHPALC UIE 296g UIP 9FWALLG dy op LLIqUISYY “ANOP wse}o ty gM |
dg ap acusen yutaap BS as0a SEIS MIP aF]GNd dy AP LAqWAUE HO RO 29H LISEIOW
eseq orrand atiep sseto
{9p aly ¥S ESeoABOMUIND ojapoyeUT Bo Lop Han “iSrUO) “atTUTS HISeEDE aD WIPE Uy
‘Qsyuoru0s
‘yentad ojapoyour wade vannd se 1$ ongna iy eaind se Oaseap ¥pOy
vamnd zw FyEyeIo seI “uaNyUOD BUEseP vaHN AB HABE UIP LUD,
‘ymurnafoud “mgd prion uy Qavesp-xog anazlu, Ure FO
(erans“a3709 nzqued Tez eT //
“MUNAgETGO wPorem UTP wIETOde ‘eqeATAG // ~ 1
(Qraans™a1 op: s00g pros |
fat ops
"3 003
jeura eqse amos //
(Qurew qr
!Qeaqne"ayop pron
#0 Taans~ar-ep pron
SyeAT 24,
OR} ep pron
vorrené
cog esero
:njdaxa un Bey “auuyNAgNS 10 afdoxd wsaD0U O09
x9}dUUOD FPoIOUI o no oR # Bp HoAD pUBD LOUIE [H JONSOIOY axse 408) IS9OW
‘98e19 1Sera|agH |RUPRO UIp EPOIOAL BIE O-!UIP TEMA SFEALLA gpOHOH O wjade aI
omg
3 003
iegseeoe coe] egeod nu /y
Qurew aut
4
“ Qusom prea
reaearad
993 sseT>
wv suns
{3 no wo 1 vo eas “aeatad aps amp ‘ast wporour yO ands BA 328019 Op TESOL
“STRALIOD loseyo (e aeALU LquaUT UIAap (paysazoud 1$ a1eAUG
“ortqnd) ¥zeq ap raser> naquiota 10} oui ty] 2zeq ap asero toun vazwostexsour
s950 mReluop ge 0 PUD ‘oun ss998 ap JOJURAdaAp ear taxed LAIA|gOLA
nynunedoud maga suis un rownu puesngpe to aise guna wa0
S000 a1s8 NU QHWEIPOq Bo ands ga a1e019 ap INFEST
SESE EE Eee EE EE EEE eee eee ee eee eee Ce
’9 umnae,
4 owls aura yowre” aura
‘ours nod ‘ot ‘ge 'g ‘¢ ind andoa
Ree eee ree eee ee ee ere ee eee eee eee -ee-eee eee
‘dc NIMEL 5-5 BuNSTI
atta 2380 99 aswoss y pation G49 tespde QueuL
1 £-¢ nunsy] wp yum RRO a}20 Heingpy “sunle ap v9 29 101 advoude mds wy
ver “aoyejeseD ojaseoMusisou TNs Boyeip op ajpiaseO F |
Sedna sed v3 WEEALI eS ‘ar422 SA invatim Cr+ pas cu pas,
gnaz* ard
int out_elr, ant conelr
~pepup(,
sa expand aga cum alt spe
aceasta, tot ce avem de ficut este si salva ecranu dinaintea expa
Exist dowd locun unde se poate face aceasta. Putem salva ecranul la rularea
constructoruiut, sau fl putem salva chiar tnamte de a desena expandarea, Eu vot face
salvarea in constructor. Tineti minte cH aceasta vil daci am intentions Si
schimibam amplasarea casetei dupa ralarea constructor
Listing 6-7: TEWIN.CPP
i: popupi int 1f, int tp, int rt, int Bt,
nar’ pede,
int out_elr, int con_clr 1
boxt 1f, tp, Fo. pt, par. outclr, cones )
Popup
Ant bufsize = (egt-1ft+d)* (btm-top+t)*27
screen save_buf = new char { pufeize 17
gattext( 1ft, top, xgt, bem, screen save_puf );
popup :: “popup!
puttext( ift, top, rat, bem, screen_save buf };
delete sereen_save_bufy
1/ end of TENIN.COP
produsulut
Primul lucru pe care trebuie sit facem este si cal
tampon de care avem nevoie pentru salvarea esranulul, Aceasta este
= new | 1;
este © varabilii de tip corespunzitor. este orice tip v
puttext() reface textul din zona tampon, scriind
te in a folosi gettext() si putiext
de mod text, In cor
went. Se presupune ca v
preluat sextul cu gettext() trebuie s
preluat textul cu gettext() trebure sd fie su
‘webuie s& plaseze text
Dac veti fol
asamblare care va
de a parist aceasti sectiune, vom face 0 experienta cu 0 eroar
INDICATE
Senet apetuilegetex() cu gif. Copii linia cu apeiul gettext si inlocuitiapot
“got” ou “put” pentru a obtine un apel puttexi() caro se potrvoste perfect cu apelul
gettext). Nu reintroduce argumentele cect daca bateli foarte rapid $1 foarte corect st
xea
#( SQ1e"BLIEM ‘WexoMOTTAX
‘gIONES ‘ST SP "ST 1a x0m
Oasest
{C xowIeaLaHy )as.eoK83
Quren 3ut
Ayu burase3 tog eutrutew //
dd NIMAL :6-5 Buns
“ease aoe aod a8 tna
sam 6-5 1s8unsr ‘dndoe eqeuNa oun vm nod suo nu rns 6p,
wi TajaI@seD eIsIwoHLNVSOUN UNE BOVE wp oyeIeEED F
ou} 2 ound soe Iseuedw ap aRUTeU]
‘enGnar mode ws Geary “8 ery kdwuoD eand poipou psa08 n3
ye (ended
#( xTo"uoo aur ‘27Tano aur
i é “xpxa 209
aq sur ‘ax aur ‘da guy gur pT aur Jdndod
sorTand
(grameaes"uves23 .x8uD
"peaoeaoza
xoG orTund — dndod sseto
sttetae
( Goa7mou aut ‘agT MOU 9up Jogonom pron
HOmexp proa
1 Oxoa~
1{ xq27Woo aut ’ay73n0 aur
Ap1G 009
faq guy ‘ax aun aa Sut ‘ST aur jog
Poyrand
fxTp"sauequos 'zT>TeapTano gut
fzepieq «aEU>
fusa ‘362 ‘doa ‘agt 3uT
speasegoza
xoa ssero
eee eee eee Cee
‘das NIMAL 18-3 BUST]
wa prooioad
nOWIPOW! 180} Ne ‘ayBALG op HOpURUTY “ejLRoLsIpoM BEI ges INBUNST]
“yurg}goud o nezzg reus ezne>
‘anand gop equaTyas Tos. “YOR
UugDe Bs af0A9U 59
‘naquoqu um e2se HZ0q 29 TOSeI>
iv oreo ‘ayeauop JOjeS6j> soma
2) dadod ese mp aimwid eteoyoads go ns
2g "eujgomdwajozar enaqued yupano nfs un JBOp
‘vexuapIase9 Te 1 Wo “aso tasooe [ete exe
TP pajoroid dn 9p ruguow up “2jeaua an,
ugMeasyp owe oe perseiord x ap mnsoooe eameaupoeds ‘OUOd Fe 9D 2
‘Sed No Sed +45 Uielenul pg ao426, Sa invatam C++ pas cu pas
Prin deplasarea pounter
CConfundi caracterele cu bytes de atribute vi
4 Intdmplat sé se afle dincoto oe sry
eeranutt
Sper cd Tntelegeti ci acest tip de greseall poate
calculatorutur dumneavoastr
SE sedpim do acest +1 suplimentar gi sine apucim si const
dialog
pentculos pentru sindtatea
{
octat ce |
PROGRAMAREA UNEI CLASE DE DIALOG |
+5 Casetele de dialog sunt mostenitoarele casetelor 12
Folosirea fisierelor antet
Este la fel de bunii ca si onteare
pee INDIGATIE
Limbajal C gi sistemut de operare UNE
impart o mostenire comuas, C a fost
fere, pot apirea onunde intr-un fisier sursi, dest Tneeputul
suzual’,
Extensia .H este fotositi
lucru ceca ce este $i obiceru
inte fisierele -H standard
irectorul \TCLITE tn acest scop.
Fipierele antet care fue parte din sistem sunt plasate in directors! INCLUDE\
Sintaxa de specificare a tocate’ fis et este aceasta,
Aixectorul sistem INCLUDE
directoru] de lueru
Hnelude /rl. mtpxrs ourz07§
ee ant arrHe serzepe
29 NGO MOTE ouTEOy
1 SOWTE STEM OvTS0Dg
UTE “7 UTR TOR
soaspa futy z03 zepe0u GutHopt
pou mt aveanpou
24 Ws eaysooe ¥9 nutiad axegisuondQ, ges BPO)
‘sour Long op axespde O no wyye-nUL BUN-sTUIp Jo8n axes a6 “ajansazay
anos HUyap ¥ NWS nugwoW 9p suunu inuN vaISYAOL
oper B nguad ‘njdwoxe op “yUsto1Ns r9!Go op arse wawefuRE SIV “eAdeaND
‘np enswaray uy eieoseysop 95 ysIns mnjNpod wadnse OUND 20 dt
“wun UL EIEN 96 ND Ee ofara WzluEAHO on “HBOUd HENUMALL PUB
E-NIMSE 30 PUS //
atu “1 utaseq ‘S661 qUtaKdoo //
g0aypa AUTg aog zepeau BUTMORUTA — H“NIMEE //
NIALL 201-9 Buns
{(281P 90 ddO‘01-S0 3018
oars) Q-5 mBunsy ut apo os wind REND “Y LAISY ap IHS:
shx9 NE TO—p “TOM IMHO
vo wadaouy 2g
-suI9 op
9p misono JOA wsuns azet8y ayMUL TEMA 99 USWOUL HIP “TUE 494 oye os
sms as018y op vandnepe
TOFRTOSED B|SIBOHUBTEDU INE BOVE AP OPHWTED S
‘sed no Sed +5 wisienu eS q 7 ‘82h130
ficefine DOUBLE “p= |=!
define SING DoUs ",
Heefine DOUE_SING *
class nex
i
protected:
int 1£t, top, ret, ptm;
chart border;
int outline clz, contents clr;
public:
ox( ant If, ant tp, int rt, ant pt,
char brar[
ant out_cir, int con_clr },
pox () +
youd draw();
void moveto( int new lft, ant new top );
class popup
‘
protected:
enaz* screen_save_puf;
Public pox
public:
Popup( ant lf, ant tp, ant xt, ant bt
cnar* bear,
ARE out_clz, int aon slr )
~popep 0), eH
”
U/ ena of TENIN.Y
Listing 6-12: TEWIN.CPP
(/ TEWIN.CPP =~ Tiny Eaitor wanaouing capa
(7 Copyeagnt 1995, Martin L, Runenart
#incinae
include “TWIN.”
ghar Blanks(] = // 80 caractere spatiu
anuemmam
pilitics
6 Casetele de dialog sunt mostenitoarele casetelor 131
/) pentru testare
‘cftorva duzini de mesaje de eroare
acd reusiti de la prima incereare, testatt 51 ceea ce urmeazi, Adi mod
a Hinejude gi incercan din now Ctr!#F9. Introducerea unt
1v, ca acest “x”, este sufictent
stergere a caracter
/arezotva probleme!
Adaugarea clasei de dialog
Fiinaed fisierele sunt acum structurate att pentn
fisier surs& principal, putem continua cu adaugarea clasei de dialog, Clase
© caseti expandabila cu
pentru a crea alte clase, cum ar fi un dialog de mesaje sau un dialog da/mu.
rebutes& adaugim definitia ciasei dialog fist
lun tip comun de frontier pentru casetole mele de dialog, aga incait am omis acesth
parametri.
Listing 5-13: TEWIN.H
7 Copyrignt 1995, Martin L. Rinenart
59 // Ha cyan on cyan
define DIAG_OUT_CLR*( wao"uno"avra )aaaaxea
fg) (very = 1+ 1-32) = cers aut
*(Ta} yustaas = usta aur
+ Qmeze
tC 1aa ‘eras: )Adoms
At + (raayestzis zeus meu = eTaTa
( wis" Noo"ovra ‘wo und “owra
‘gnonrs “34 ‘a2 “3 ‘31 )dndod
(Ca gar ‘az aur (dq aur ‘gt aur
‘qa3 sxe )BoTeqp! iborerp
rqne eave usos08 9yeTep
Hf gadTenesusaros ‘ugg ‘bz ‘doy /9yT Faxeaana
1) dnaoda: tanded
9 winger
Huo338
ftp ene7e0
+ Q)ue305
Cot “se 's 'e
" Burgeen, )Borerp Meu = Tp sore
+P Queyes
ea mean“
fC wo" MOTISK ‘01H SAH
‘and ONIS ‘ST ‘ay ‘7 ‘ot 1 xoa
SUNIMGL, SPOTOUTE
epntouTy
eBnToUTs
greueury “1 urasen ‘s661 auBeztdeg /
setatttaedes Butvoputm zortg duty, ~~ 4a0°NINSL /!
EoeP yerade ayso. nu Lie} op jnsypS yo wA-RHUIIY ~EAsD wSE ISK
nia op maontpe d
tun wreifoud ap mpoUt
Joupe vouIUG Up 10s
"
14) sorerp-
fC aq amy fax any ‘ay aur ‘gr omy ‘ra3 zen )oOTeED
sorted
foray zeae
rpeaoeaoad
}
dnded oftand | Borer seeTo
harlot
wahoo ovra sutgeny
ATONIS @UT3=Py
weho uo satue tH // €9
eer TOTRIaSeD SAIBOHLBISOW Tue Bojelp ap ayeIABeD #
‘Seana Sea ro WEAN BB ar134 Silinvitim 62+ pas cu pas
gotomy( Lestlee, tp 1:
~~ vepmnte( title },
1
dialog: :~dialog()
celete title;
Af ena of TEWEN.CPP
er
Funct mtegratl strien()furnizeaza langimes wnat sir exeluzdnd caracterul mull
1, “abede” are lungumea 5. Cand
mul gol, care trebure imparnt ia 2 penin:
‘5 Casetole de dialog sunt mostonitoarele casetelor 435
scest program va da um rezaltat ut pentru 0 caset® insuficrent de
tea fntotdeauna fie si creati o casett destul
rmayorvatea, nu toate). Ar fi pldcut
pemmite acest lucru, putem aloc:
rgumentele furnizate sunt attibuite
pparametrilor in ordinea tn care sunt serise, Dac’ este furnizat un singur argument, prim
ru primeste aceasti valoare — celorlaitor parametri li se atribute valor
Acesta este
coordonatele dupa
redefinit pentru coordonate
TEWINH.
Faceti modificarea definitiet de clasi in
Listing 6-18: TEWIN.H
cuass diaieg ~ public popup£( 9 eyo joo3 pron
1( F aUF )ooy PTOA
euoraoung ony go xted v exEyDeP //
epnrowte
aes 1)
aa Les Bun
sndtuaxo un
uuzand ou (1p o¢ yg 98 nu 0p “nou oxaasny eH) ZS uN euD de ap yn 31
Sym dn op awownav un oy aydavor ys om aay o was Ng “oNEAMDUEEINS 2p nICUAS
nidwax un unoioom e818 “ACV, “YOPUE NESOU InIyPOA B| wDoswOH 90 2S
axeospouresdns o1dseg
“oury wate w 9p rnpow ap aapeay BHM pied
‘yonuupind yonsuoise9 o aise wiseaoy “InouTesed ap mes alat
oun sidne wiodo areod oun nuts un no axoUny o go BULLE
any am ne FEGOR 8
vasedo ap UNA
woazoaroutns 189 (.
seaoe wzypeal WA
aufuttad am ty pow aisa afeseul ap axyseou raseja ¥ RUESIL oHSLIDIOEIEO C)
{orese
20.10 azooe Zomyp ap mesayy “ou ay ‘SAA ay ‘SundspE nun eaUHLC e| guES
Pas)
EEE eee eee eee eee eee eee eee eee
ar JOFRISSED SPAIBOMUSISOM UNE BOTRIp BP wIaIASED F
Hm 0°75 Bi
TP azetep
#0 uo3@6
*( ,Burasen, )Boveip meu = tp .Sorey
£t)49396
/Qmexp-»
scene HnEE Stent
nstnsenassS=eaanaseeanaianani
‘Seae sed Fp wTER aS oer4a Si ivitin G+ pas cu pas 7 4 Cozetoe do dog sunt mostanitaroeeasetolor fe
int main() | ai aceste teinici mai generate. Listmngu! 5-18 prezinta programul T.CPP din exemplui
‘ de ma sus modifica! pentru a se putea urmést modu! in care finctonears aceass
| tenet
elescr (2
isting 5:18: T.CPP
fool 2 1/ eatt the int version a
fool *b!'); // call the cnar version
1 tcp
seten();
Hinctude
return 0; ee
> // cactace a pair of fo0 functions
oid foot ant i};
11 aesine vous £o0( ant it, ant 42)
the £00 functions
void foo( int i)
Ceprinte( “\n\rine function here” }; j
void foo( enaz ©)
(Ceprinté( “\n\rchar function here”); +
ene of t.epp
La executarea acester fan
apel. CH reuseste aceasta
ch C+ atribure nume proprit
vedere logic, accasta se face astfel
ine mesayul core
lor de functii pe care te
voi fool int 1};
void foot cnar e }
Bineintetes of acestea nu sun
pentru va putea face o idee.
Continuind si tuerafi cu C++, veti invita destal ea si dese
nume modificate. Nu fe modificati in ac
‘mecanismul de modificare si nu exist nict o garantie ed vinzit
schimba metoda de modificare de la 0 versiune de:
i de supraincdrcare se
citi pe care \-am folo
u numit name mang
1/ compilat ca vice. (1 |
SPU
comp
ine max
eieser()
/} call tne int version
// call the 2 ant version
i/ cefine the foo functions
void foe, int a
n\zInt function nere” 17
| eprantf( "\n\rfwo ant funetion here" );
i/ ena of t.cpp
Listing 5-19: TEWIN.CPP
// TaWIN.H -- wincowing neader for Tiny EditerDo sw naiqoun es Ba
2S nl ale> aiwofea 20% Nord wy aID9u) coy 9 PUR
laLod noo} vf EKA euaIZEIED Op joriyzod wa sZt gO yan
‘BUSONS
snpos es fade op soyquouanzevayaxoyétoo "y791
resaoe BSED Ro wpe Ue DUD RIED AsEESY| 9p 8 asa ap eID o MNSUOD
8989 06 mans po aso HRAASGO 9] BS GEN Ise Ie
paw
aumusian wre ¢-¢ ernLy “onta09 or May Aue ssoxd,, mds ea za amo -,aBESS9N.,
Iman no “PIA Bojeip ap fesaus um sug Wak ‘UAHOsd IBsoOe vaRENOOKD BY
aa" RIMBL FO PUB //
+( ,anurguos 03 Aey Aue ssord, )zsutxdo
1 ( Tome 15-352 )Axon05
Own ary ara )aaaraxea
(4 s6essen 4, )SoTeHP
()eSesson: -obeccon
f9T9T} a3e7ep
()Borerp.::60Texp
eo e8eese8 wou = su 41
# (M0308
Fywexp'p
eee
02-¢ Bunsry
“02-$ INBugsy} wy aeuszasd runs opsRoL} POA
‘aund tan #6 ays a8essour yruoiannsuoD rad
“oBossous raaigo un if aso ¥ nauad Bojerp ap 199,q0 un
‘qunpus esypour wediouud UH Uf Ag NIAVAL.
}ebessom
Tésu ,7eu }aSessou
Strand
Borerp otrand ~ abesseu sse1o
10 no 9}
fe vf yaa 0 wt 2p spud 29
ynaudew 948098 NO IE seIELD
|p a sTaNKp pow uy
mun jruaysuen vo “2jduMis sod areo assooud 9foun
‘ue ZrSYy un-suy ayuYDpasd O1DeUL LOYAUDLH
sojpouend varsojoy naved prspuris Epo}aW o SIX
op apjumd pow an wumu or “es woqureM 2 18-89 “+45
‘snupe aise toured ap piqetzea aywn un asa ut afea
aaD°NIMRL 3° DUD //
£( ,enupqucs 03 Fey Aue ssaxd, )33u5249
‘Townq ‘g¢-a6x )Axo308
(wipTamipyra )s3gean09
oury7dra: reBeesoe pron
‘osurrars
ft réem )squtads
£¢ ero Noo OIG \ayaeaKea //
#( gftdozquaq)ador ‘24337 )4x0208
1
obessen , }S0TeP
)eBessou: :asessau
(
+ ( [Bea 420
feTa¥3 82972.
()Soreyp=: bore TP
dd NIMEL *2-3 Bun
‘uRoY!pow aisso0 wUizaid y7-¢ nuns] ‘BesseM ucRONASUOD UIP
inofivssauu “tiouny 10} euidoad us “afesous ap scypANStHOS|
stz nurdoud yawasiye ame 9799 sep “gd NIMAL.
Up tmowend yey aBessou injauojenasuce v 21 unde Ring
‘OA mHouy v9 aMUYap WS eyeE|Oop oy Ys aTMGaN “HOjEA EzvauUMIAL NU ATWO La}eay
‘dn un Bate BS aingeu wiouny s4ejor99 aIEO], “UofeA PusMAAL Oru yod MH 9/30} aieHeFap
nos ojsneseyzap ul dn un mgLne oTEod 26 4 nu Jo}aNAISOP 18 JOFNNNSUED 30}
2 S
fl
RIMAGE 30 pue
'
fQeupr ers prow
rogearad
( PSsw .xeu> jesesscer
‘oFtama
oTeTp otTand = ebessou seeto
HENIMaL :€7-5 6unsrT
LTNINAL wip o80ssou roses exiuyyap uy
on TovaISERS sjarwoNasiBoU pane Boje ap SIesEO F
‘Bana Bed URNS wisa
ae invatam C++ pas cu pas
MB stata Co pa
7 ‘in TEWIN.CPP 5: adiugass
dan pel as foment re i
Am folosit acest operator de sine stititor
cexpresii cu alti operatori $1 operanzis
array 1 ise 1 =,
e. El poate fi insi combina in
In acest caz, element
este increment
variabila este folosita in evaluarea expres
Operatorul de premorementare fac
vaniabila in expresie. Acesta este un exert
array!
atribuic 0 valoare oarecare s1 apoi vanabita
ior de postincrementare deoarece
ti abia dup folosice,
lerementarea sabia apor foloseste
Hie oy
fn acest caz, « este incrementat
Sapo se atrbue © valoare elementuta arrayfi)
inorementate,
ind + inaintea unei variabile (#+i) este imerementati ver
izatl in expresie. Folosind operatorul ++ dup numele
stupa ce aceasta este folosi
evaluarea expreste,
SPREE eee ote
‘girile la TBWIN_CPP. Noii construetori folosese
peratonut de preincrementare pent fica rindul pe care
‘mesaj. (Adiugirile extensi
existent),
Listing 6-26: TEWIN.CPP
ee
Ressage* ns © new message(
"This 1s = sample message.”
geten{);
147
5 casetele de dialog sunt mostenitoaralo casctolor
eten()
fo = now nessage(
“thie ie a sample”
eworLine message.” );
geton()
aesete ms;
goten ();
me © new message(
“mas 18 a sample"
‘enree-Line message",
"beang tested." );
geten 0;
gelete ae;
geten();
return 0;
message: :message( cnar* magl }
dialogt " Message "
gotony{ ift+2,
17 vextaert 0)
eprint£( msg
tap_tine i):
nessage: :aessage( chaz* magi, char mag?)
Gialog( " Massage " )
ant neg_row = top+(btm-top) /2 - 2;
gotoxy(1ft+2, msg_zow };
7) textater( DIAG GON CLR);
eprantt( magi );
gotoxy( afte, +tasg_row ))
cprants( mag?)
tap Line)
message: :message( char* magl, chart mag2, chart msg? }
diatog( " Message" )
“ane msg_row = top+(btm-top)/2 ~ 1;
gotoxy(1ft+2, msg_row ),-y20q ap aytuntiow no andsouy Uy “outdea ws9ge UL ++ audsap ayn Wi
ivwnzae
‘ouysaf unioyeup x) ics
tnoep oP puoon a mt 9p re wos ou 2a
ty 89 mae FH
“sifoad poe 2h 99 api aS MU FEC NEP poo Nporom HAUS mu BS
aia
v
we
pau poo tm wuneoprom us 8 08 J “ung Sun no TT
unas Hoy ps9 MN yay cew arg 8-5 ne axeuaWiesout-oud 29 dunn uy "Mos BSUE
‘Inj pouedrurw opunose sseyuoIWaIDUI-ISod Mo LUNKO] YO IIRO v-S WHE “ZPD 38902
-osurmara
At = gy doeung) doa
> 988% )BoteTe
( Ben yxeuo "pen ze \ebeocsurieheasae
BREE EE EEE eo ee eee eee eee eee Hee eHeeea
or TOIRIESED a STBOPUAASOU uns Boye a eIsyesEO S
‘nutp (num rare euey -ywinzes 1S
no
‘rejo TwUl YF 10d yeouqan 2p
ries) areyuotuaraur-3sod
‘Sato aed ao a150, SS invatam C+ pas cu pas
pentru a adiuga carsctere retum si line feed.
iclusiv caractere octale si hexazecimale, pot fi serise in
Am fotostt caractere escay
Afi vdzut cl $1 aie caracte
acest mod.
Al folosit finctia gettext), ae
fecran gi a-1 salva in propna dumneavoastré zona tampon de caractere. A
‘complementara puttext() pentru operatianea inversa,
‘Am aruncat 0 scurti prvire la o
au funetif inverse unut Fath de cal
foperatorului delete asupra unk
pointer sau adresd,
Am vazut cum fu
el este de
Pentru a erea zone fami
tr-0 declaraie ca “myvar = new char[size]” Operaiorul complementar aefete dntr-o
asd destructor a eliberat memoria alocat
Pe masurd.ce munca noastri a cevenit mai complex an
unic intro combinatie de fisiere antet .CPP 51 .H. Defi
+efne au trecut in figeral H
‘Am folost funtilestrienQ)
pentru a face o copie a sirius, Aceste
STRINGH.
‘At folosit parametti imp
Mai multe casete de dialog; stilul de
lucru cu fisiere proiect
focazie vor trece de ia programul cu
maltiple, sub cont
cat de accesibil este realizatl de Borland IDE,
Inacest
‘in primal rnd vom considera proces
casete de dialog 51 asteptarea unui
A prelua de
care 58 ridice problem
apisat-.
tuner se
5 bund‘dg0°L “2019 on 219 BS
SLOBIONd 3udS3G
“yoafoud) yoatoud gayuunu “asoKéy oyu Yew no wos “ad
ais andurs un ap 201 ul ‘Sul, imyrsoupa oye sins fat ons
BS Magan PA “TzAIAWOD ap [nOse9010 pou! 3S
2790} munod ysins en ms
‘mou 0 puEBnEpY ‘eSe08 ep atiizodsip
one nquad 1 3S9}oy 1 210d uty [m 09 FZusWIOD ap insosan0ud
‘ynu rey “Au, [RUCUpA wy PUA UN TWO!W Lor eqUNK]S WON MU JEP “I2ueI0D
op ass aye 18 BZN ® ANUSd (JpusoNsosn wHoMNY qyWUNgIU! WON 3OLIDHN,
aisooe ap pdndoaid as nu (uresBo1d We 9010
iy piawEU, 9s wOIsO9e oI], “] EAIGOHEA vy OtOBU! POW
Japosoeul YoU BIBLOOSE BiayO aeardaoiadM FS IngaN BA ()puo~sosn oHiaUT
‘oiuDAQOS BarRSUR}29p nAHLIAM 1949 9p [eFPUIOUOD TauN FaYaIo0se ap 1S 1ZUBLHOD ap
aluanoos 1aun vastuyap ap winge wa 96 Hf at}eulquioD vyseooe Exdaorerut va ()puto™sasn
a
evaquygeporome: o-aauqp ner me orzuMNnD
oxDeurpom; ) at
:a9p! varwouguuin gdnp ‘osans ove up if rzuowOD vnjord v nauEd ‘eusMNy ~SCATE
sousyih 2punxe YSU wing "RIMIEISE) ef ap sop UIAOM a|{ZESWOD “LINDE ESHOS Te
‘aise ino eS "gpuPWIOD o 2210p pugD (}puisiesn euNTopRCL wad eA nsONP
‘yumyoduat afejueAe BU
moury varezinng Quate8 rayede renp uryzian gs omg ane} YIM
‘jwod zed 95 1a BinpaDOIG O-Ht QoIaH corsaudes wasapNIoUT
(yus208 uxmea
()pusraeen aut
ru yous opepnosip wauaKtIOg
109 ap sosas0ud Up
‘jus apo yun no esus adoouy wos 10
9p ojosins s1voy szayuouoyduut ys Maan se FONSLFOS 12
IZuewoo ap Bo!UN Bsns
BS} ore areiBig no run op wns TBoeip bp SyoSES ayaT TENS
8nou 1 9p puenoud 3190
toe! (uhyaperseen YzuauNe> 9p aoiss
{199 tzeuto> ap alRSINs “ap ys90% wl punIsE at BEOKUA
-asn0t n> THD Ly B FINABASIE PpIMITOD 9910
5noM! ¥} 90 YeaW09 ehadd tattle jniosooeud “yO o1S0 uodutE DUD BeRCy
sojse eames op yzeatotoeDy
Iniosaaoig aoreziI4N «ZuD;H0N enisk! w Hood MESH v uOdwe oUoZ YevactIAN
Yeuguioe op ingosa2ord “panoe ais nu ss rot 9p ajasins co Fou
rus ap sye10428 un no
S00 ajrzuw09
lower9u9)
Bqye Bs
pups 17 UaAd9s s15908
mnfjonaisurasoew) euinu soun e aisioose ap if |
A995 Joun B SUIU\ap ap te
‘9p stiwurquios
jeporoeu) 1Zu9WH09
IIK9 wouDUINEe ap vaINd sy
snagdte 1u9p,
29 pinseur od “zm~SE ¥ aD
"PPL 3¢1 “oUpS ap rey nes Jom
unesquIp into Y vamnd se aj¢cuaw:
1 9p [IgE eaU0 Uy areaxO aus arDISy alsaOW “JOS
‘AHO aySO MU JOYEIBUSE 9p [opIse UN YOR
‘uauio> ap soes9ua8 mmynuresBosd wareat9,
I 3S AON] Bp pou Soy “SIDE 9p aNBOUAH azueWioD ciONIaxd
0p a
‘A injeuopa fe tzueWI09 ap yruosadasd “Anoe aIS9 EZUAULOD 2p s0yEIOUDB uN BEC]
mow e| ap =
sev] ap <
oundongsurousew on
sto 9p L916 UN-INP
‘izuewoa ap soyeious8 wieiFoid un vi ap
‘onvopeuuin wouIps0 vy
9Sins ayn Fe Up aftzuaWIOD Enaid ateod tzuDWOD ap WoRSYOS 10sB9010
Jo}ZuaWoD e1yseI9}
aay oe] ersaoe Brwpe ps 16 UIARL Bs BHULLod ruHgE ATED gf
© wostoxd 100 sep ‘Ku, jmIoUps uy
PxoUs EAMonAS
Wwoyjauo> ayS99v 210} wENEPE 1A My
1p rauswIoD wrpN|SEd
eearua8 20 jonuod 9) Oxf un 8] 9p aeHD nes JOIsY, une
'BS JOP 9p vauotiase op y Jy “a}se] op aljeuIguios mes aasel foun ¥ auusBAE BIAS
id BSUEIAOP Uesna 9} BS OTE TUE BIUDADAYY O RD AIRY sAUDADAE BZEEIOGLODK
\yopolonu mAsvoD WaInd YS voueuIAse ap oNgeL] arENIpe ep mnInsad01d
HW JRIYO JOVEryEIN JO[!ZuaWOS WepundseI ys sigan “pus foUMLAd uy
YOLVZITILN YOTIZNANOD VANVEON Tad
20
rot
Becrna eed aap uawienar eS zh184
Se eee ae tn tg
‘SUGESTIE
ste api ect oman
xen CPPeste pli vase amemat net TE ME
ee ee sire eee eee
incepeti eu figierut din Listing 6-1
Listing 6-1; TE.CPP.
Hes Aiea ee sere III HUI CMI
1) Te.CPP~Tiny Baitor
// Copyright 1995, Martin 1. Rinenart.
Uf starsxt TE.cbP
liza aict obiectele
Vom adauga deci
IM creat pfni acum, avem nevoie de
TEWIN.H, ca tn Listing 6-2,
Listing 6-2: TE.CPP
SSS
V7 TE.CEP-Piny Editor
// Copyrigat 1995, Martin L, Rinenar=
Winclude “rEMEN.E*
Wf sfarsit 7E.cer
SEE EEECEP SEP eEr eo eae EE EEE Pe Hee
‘Vom muts apo:
Asigurati-vi ci _main(
eu am mai sters un commente
ie 1am redus cu nn ni
Listing 6-3: TE.CPP
Sit a Wr ft at REE
(/ TE.CPP-Piny Editor
// Copyrignt 1995, Martin L, Rinenast
#incluae ~PEwiN a"
ime main()
‘emia multe casete co dtal do tueru eu fisiere project 155
galore ms;
geteni)
recur 0)
,
1/ staceit TE.CEP
Dack apisati Ctrl4F9 in fereastra TE.CPP in acest moment, vett ootine 0
rmultime de erori cu should have a prototype" Toate provin de la funetile
SNCONTO. Addugati dect include in TE,CPP st incereati Ce+F9
in n04,
“Aeum veti aven efor ta editarea de Jegituri, ety mesajul "undefined symbol”
‘Toate sunt provocate de functille membre ale classior. Problema este et editorut de
fepiturs nu sie unde 3B gaseaslaceste simbolur.( Cateutstomeleastea au memorte
credeti?)
“Tot ce ttebuie si facem este si ered un fiter proiect. Va trebut si uvformém
fonui TCLite despre figierele CPP care vor face parte din acest provect.
3 Fapt, preprocesorul este cel care
compi
Figierele sncluse (
le coptazi, pe masuri ce
Pentru a constru! un provec, procedal
&
PAS GU PAS,
L pen.
2. log Load Proyect File. Extensia PRI va fi
adtvgat automat la name.
3, Va aparea fereastra Pr 6-1. Cheile de
infr-o fereastri
contro! cum ar fi Ins si Dei, au aicr semni
Waten,
“4, Apdsati Ins pentru atansa_ Add Item (adaugarea unui fisterin protect)
inter, Acumn TE.CPP face parte din protect.
Enter pentru a adiiuga 51 pe TEWIN.CPP
aati Cancel pentru a termina actunea Add Item sta
fereastra Project List,
fe de acum definit, Ine
trebui si fanetioneze ea 51 paid a
Fgieruiut TE.CPP; ea apeleazi alte func
EWINEL“eum asvaoe ut
WoA ansazey ayseoe ut a9auv09p “ArIEIAdo
‘waseanay 2010 By zpuumirs tt BlivulquIos no
Ituosino urgeidep es enuuid ou ypeosea
rnp oje0 sei yBupIs wayred ut gpeoses wp
Ge-3] avo Wy RaUEpJO uw) “ANsaIDy IaMDAY spuIN
WaWoaL <
ad dWaal <
HNIMEL <
ddONIMEL <<
ada <
upto
isvo0e um “ojareoypwan ad 2j-tigpiyosap*Enseaiay C-19IU NaN we Te DUES
‘2yvas9 nou 9799 od uma aseares
umn e| op iapayIpow sno
IV) 2180} 9d 9p
‘uaseasay “oafoug unseaiay
WeaWDEL go BUS //
axeweupy “1 wrazen ‘ge6t 3UBTSAEeD //
s0aqpe Auyy, ut ropeoy zossesx4 puemios -— H-axoae //
my Wz
dayanoa ©
HIGNOAL 19:84) Un ap 18 3TONAN
ap Goan aTSa898 //
ArevOUTY °T ETAxeH /gger BUByshdoo //
s0aFPa Auyy nagued TeusweD ep Zose0GRd -EaO-CMOEL //
ddDGWOAL “9 BURST
vwpdoaul
A
eee Eo eee 2-2 ee Pee eo eee
a
eaI0Hd Baersy nS MAOH] Sp INS Baye 9p Byesw aw ND
“(org Btensrp) wimasoae BIEDE o
hh tauaWoD ap jn10s900%
‘ol NBs 59K jnuBe 9p suNdSEE UN WUT}qO BS LEP DUD
‘210Aat BOAR WiOA MDH] yS39 aC] “aI FOUN
jade ynwero1g
‘ou"s0K ps9
ne un) muquiow grep o wHSnEpe gs sep ‘oessaLW wsero T] INO Ure tnd ese
1s 2182 env ()“Sundsps un a02een IP op wyaseo we
YS" EPOTOUI 0 UIBOLO VS O;S9 9I9 wip Buf) “—Al
‘Boye ep sojarase>
nog v siofoe ao qumjads
Pazosnde 18 Bopeip ap r949809
ANVTadY¥ INWVYDONd
V1 ON AVS SAA ININSNOdSVY VANSLIWSNVYL
Wor a} azeo ad owysax
ln uIMOe WANG
ion} yS30e nydusts ews e0wj vay uN
PRA TIN -sa018y ayn eu no aroarONd Kato w nIALAC Hus BS sINgeA, HAE SoC]
Sormp ap ojoiases efingpe © anuad pow
"31 Pimed eouweg +8 Gis
($8 5859 WBA Re158 SB invatam Ch pas eu pas
ig. 6-2.Fere
‘isierin coud cascade,
Dupa ce fe asezati aga cutn dor
aranjeze mereu asa.
Sa adaygzm acum functia user_«
tx Option | Save pentru ca TCLite s& le
tn fisieru! TECMD.H (Listing 6-6)
Listing 6-6: TECMD.H
47 TeckD.H -- Fisier anvet pentru
eaitoruini Tiny
4) Copyrignt 1995, Martin L. Rinenars
Ant user_emd()7
i sfareit TECHD.K
Procesorul de conenzi al
Dupé addugarea prototipului, adugati definitia in TECMD.CPP (Listing 6-7).
Listing 6-7: TECMD.CPP
{/ ‘TRCMD.CEP -- procesor ae comenz’ pentru Tiny Editor//
Copyright 1995, Wartin 1. Rinenaet
include
include *“TECMD.3"
int user_end()
return geteh();
¢ sfarsit TECWD.CPP
6 Mar multe cazete do dialog; stlul de lucru cu figiere provect
SiMa1 multe easete do dialog: stil de Wor cu Tevere proveet _____ 469.
Iu procesor de comenz. Pet
Listing 6-8: TE.CPP.
Ee ee
} TE.CPP -- Tiny Bditer// Copyright 1995,
Ranenart
fincLuce
#incLuce “TWIN.
#include *TECHD.z"
Martin b.
ant main(!
Schimbati singuri toate apelurile getch() din TE.CPP in apelurr ia Funeria
uuser_emd(). (Putett utiliza funcha search /replace a ediorulut, pe care o lansatt ci
CurFFQ. A).
Clind veli aplsa CiritF9, toate modulele pe
compilate automat s1 programul se va executa exet ca p
Putem serie acum 0 funchie care si intoarca comanda yes-or-no,
Verificarea raspunsului utilizator Y sau N
Comanda yes-or-no este un bun exemplu despre cum trebuie procedat
mogjul C++ foloseste
‘YValoarea zero este considerata falsa (false); 0
valoarea logica adevirat (true). Valor
urmeazii dupa cuvintete chere if sau wi
Jat efteva exemple:
terpretate in acest fel.
1) reewitatus compararii va fi 0 sau
Wy edevarat, cans 4 egal cu top
JV vm ingesmaa diferit ce
AE ia < top
if ii == top)
if (i= topl.
4 adica niciodata
2) potaeauna
y/ excl infant
waite (i)eouspasazd e9 Ter eT //
aus ZT Te T] wom ‘estes 359 //
vauepeserd 289 vo Tex eT
estes yuns
eT TS 380 TT yeqe eoep ‘naa east
ze) fee7ey 9as9 T2 Beep ‘2073 Wi
ens
sass cy nes T] Roe ‘enza o380 eri ta
peyez nes onz3 eoTSOT
woreoTen er 27 eo weundnserd ws er
eerey nee onzq eozfor //
wexeoTea ¥F TT Bo weundnsoad eR /7 tat
cease a sf
ts g aase e eowp evexeAepe J) (eg) WE Ie ==)
€ aqse G
1 mee @ 9989 Bou enerenepe // if ==) || {z= BF
‘arenes
quns ojozoqueed rt axojdivos reus ysaicxe
ap wourplo eyoydxe w nad opezt
a eid “yreewun axe 2f2|0UIOXD UL
euoifejes 18 198
worfor eyaesex
ix) gorbor vEasuacerp ||
(pre) worBet ergouncuos ae
9p atx0s1D =i
no ese ==
‘uoreiado varigs ardsap weosip rou BS “ese ap
fou nes sok jnsimdser msq wos peo cunonn
vsTes ease cf eTatpuos> [ZED //
este
omtgonrasut>
(ez eragpuns ) aT
tet eta 3puoor) gT
syapauan ae ynze9 th
‘80 “esncwioe runifongsur Hezipnn ‘o22!>0s¥ op winBas waseade equInGas ¥ HAE,
vores one cz atazouca> THES // vere
Vor aeid areitg nd masa] a [AIRS Bowwip ap syases ay ENS
//
pues eqnvexe es peageae Sie01 | //
paexenope saso //
pues winoexe 9s veges” eIsc2 //
| este |
seunraonzasut> { } JT
Tur sipuusdx> 18 porveno pe apace
rxe1 we pulLIOs Yo pals
z 20 gi
20110 amfisou y 40% atzodns wasvene od wzeaze9 as axvo ayoureBoud sep
13 9 on polfo] vasBojea dgvoudiawn Bs sieind wunzeo
‘oz 2189 1 BOE inUoU aT ts
2 | WORD osx aIsa (Ij ) wIsaIdKS 449) UL “DHhAND aMfe A> “SroAuD 16
nn porRoj warwoyes puucysuen [3 3ou Yor@or eaeBou ays9 | oTEIDdC)
feotigeristessD totes
i eerroqwuan id
2 AEONT vwrese BISE// “(ont 19 <> gore taut ) aes
eereoqmun x
no ngont reerase ease // ‘ x
si 1) at
eezoauimn no nsont TeeTEoR 9289 // watt
ee eee eee ere eee eee eee
Sedna wet TID MaBTeN ES oar‘Sa invatim C++ pas cu pas
// MECHD.H -- Fisier antet pencru procesorus de comenzi al
editorusui Tiny
J! Copyragnt 1995, Martin L. Rinenart
faefine TRUE 1
define FALSE O
ant user_ena()
int ym_end()y
“/_ séarsit TECMD.E
care se giseste. Mai
le de acest tip eare o contine,
SUGESTIE
uitati cd Alt+1 comuta la fereastra cu fi
folositi Ait+0 si 0 sé obtinet o lists eu toate fer
Adaugati noua funetie yn_emd() in
Listing 6-10: TECMD.CPP
Jf TECMD.CEF ~~ procesor de ccmenzi, pentru editorul Tiny
¢/ coyprignt 1995, Martin L. Rinenart#ineluee
#inciude "TECMD.H*
int user_end|
return geten()
int ynena()
tT at multe cosote de dialog; stiul de ivory cufisiere protect
163,
int retvaly
waile (TRUE }
ew):
eer)
dE ics 'y!
retval = TRUE)
reas:
elee £f (eos tn! || == IN)
«
retval = FALSE;
break
2
retura retval;
}
// sfersit TBCMD.CPP
ff stersit_meomcry
ant ya_endl)
waile 1 TRUE)
I; observati c& nu mai este necesar’ variabila
‘multor instructiunt return m
lor
ide coreet la apitsarea
ane agua cf yn_omd
oe 2 testa fimctia vnc
cum utilizim clasa message(Cu oN 30 985, ISOTHRD
( cou yaeuo ‘Tem yzeqo )owselt rowe0n,
Qecrr or
#( qos )3aupado
£( wa"Noo" pera 2338303 //
£( 7 (dog-wag) edoa ‘z493T )Ax0905
( onzraues 0a fox Aue 9074,
£Cteana ‘g¢nabs 140208
(wary via 1as3eaxea
(Qeuyy dra: :e6essen pron
dda NIMaL :¢1-9 Bunsr]
(1-9 Sans)
QdONIMAL 1 ound wporoar 16 sorpansuos ayyiowy uinoe uRPEMEPE US
fy azeluns omMU no dToMe FISH 18
isef yooigo up) “@Bvesour wsU
msundsps esyd wor area
‘ainfurs “auinu 9p pxepe Uf “aueoreMEase 2y!HO] uns aessau 18 Soy
oe
WRIMES STeTe58 7)
“
EQeuprapa pra
requagad
1( peu _reyo ‘qhsu yzeuD ‘pose ye
4( gbew yzeus ‘TBew yzeu!
1{ Tew azeus you"eek
ieue aur
:OFTERe,
boreyp optand © ou"ees soeT>
(Qserara pron,
eaeatad
(fim .a0us ‘28su .zeuo ‘eau .ZBYo jesessew
( Gheu Gxeuo ‘isu (reno jasesnow
‘( TOs .aeys jeGusseu sorrondiGoreyp spiand abessou seers
earn ae Se ree eee
HINIMAL :Zi-9 Buns\T
24 BS Jo}
J WOA tow 9092809q] “tI
lar ure axe ula aaoe 1
‘9p ynsunlser outta
pgeadsooe 2109.0)
ON/S3A SOWIG 3G 3L3SV9 INN VININYLSNOD
98 Ngo Ann aFeAN 9
‘uretap four Hoven “Yoexo9 geeasony (puns UX wiouny Bo tisapyst0s pure)
(ysto wnseasey UF areéye
‘atod rvoypur WS 90 sane He nu “EAEtoduray ypqueA o B1Pa) “elqsiten zoreoreA
eA v nNUEd L343 18 at] Wnop ¥ od vaxwoEND L100 B MAEM J ftso}Og
(yeas wha
‘duoa aay
‘aMoyes -sisoasn 6 yuqeueso smuocoyGaonpon nes A ese URS
((a1pe) ANAL owe axon ap psseoHy sarwoqeR zo HeIAISE Bas iota Poe
ar ay sero
PaNESD wa 3F 1 mu su y en sau QgN9) lee
‘Opto ade nad Opus ios
Se apundsaioa F niiod pote}
Bus 0 no e90) afossou poo
tue 18 soured
‘sen iseoe nnusd
( .@bessou suyt-oma,
rds ver erty
yebessau sex = su
F()puomaasn
‘su 8237p
!Opuomes
Hu *sBwenom ou/e0k © at ETtiie
HeSeesow meu =su woBessou
P(pusraeen
es HSE EEE Pee tee cree rH EPH Eee ee eeePe eerie e Eee
‘ada #ti-9 Bupsry
or "aieid SseIBy no ruBA| BD THInE TBOISIp Bp SywSES syn TENS
Deana Sed ip aA
ed +40 WBlENaL Bg Poh165
SA Invatin C++ pas cu pas
int nag_zow = top+(btm-top) /2 ~ 4;
gotoxy( 1ft+2, msq_zow };
71 texcattz( DIRG_CON CLR);
oprinté( megi )y
gotoxy( 1et+2, +4mag_zow )7
eprint é( msa2)7
tiptine();
y
yes_no::yes_no( chaz* magi, caar* meg2, char meg?) +
‘aialog! or No")
int msg row = tops (btm
gotomy( Lft+2, msg_zow
11 bextattr( DIAG CON_CLR }+
oprint#( mest )7
Wands
gotoxy( 1ft+2, tmsg_zow })
eprint£( msg? );
gotomy( 1ft+2, tmsg_row )7
oprintt( msg’);
tip_tine():
wold yas_no: tip tine()
textattr( DIAG TIP_cuR };
gotoxy( rat-i¢, bem-1
eprints( "answer ¥ or NY);
Uf starsit TeWIN.cee
|
|
‘Mai multe casete ae dialog:
care se
ferestroie care apa.
de tuonu cu figare protect 467,
“ohie is a sample yes/no message." }
ya_ordt)
deiete yar
‘sor end)
= new yes n0(
oe ‘This is a sample”
eworLine yoa/n0." 07
serena,
delete yar
user_cnd()
= ner vos n0(
- “This is a sample"
tehree-iine yeo/ao",
Tbelng tested.” 1s
user_cnd i);
delete yn;
user_end) ;
recurn 0;
// starsat TE.CPP
‘Cand executati programul, avett obiecte cu o linie de mesaj, cu dowa sau cu tret
eazk $1 asteapti rdspunsul dumneavoastré, Figura 6-3 aratd prima dintre
la "message" eu refer
ci ati facut fotut
Listing 6-14: TE.CPP
vser_ena(};
yas no* me = new yes_no(
Fig, 69. Un ctiedt yes_ne cu © sngura tine de mesa(ypmo7ae8n
aK 239782
erqoung ep tede mm ezoae ES TOFE //
; «peasy Suteq,
ou/d0k SuTT-SCTEI a
eae 2-8 Fore //
eraoung op Tede un sx096 #5
Pee 7 ,:0u/sek OUsT-OMIa
“oqaues © St Stub.
JourseA wou = uk
eran op rece sp savas os Fore 17
1( ,-pbessou oussex 2 St STL
: a younseA meu = UA ,ou sak
(ypasmaeen
ado 91-9 BuNsTT
‘ba yruoyezetin purge rourae gppd ap 382419
© vingpe wos
()puio“sesn
IZNAWOS 30 inmnsosa90ud vasvonyay
voep of
Nano sundsps He BOUP 0
« ‘naseojes earssoo & nnved
armor) ‘sek “Tasoea wasesoo © NS
imeresoud rode iiemnox “(8:4
tie yoep 1 ou HS mea
man vomido wutud ey “det
tna), 21019,
yunyos 25902 1
op gaenane) owmeat pa sane “OTe fain) vay © FIVIZNG 9}
aren o
[Faved aioiSiy no naDh| Sb TRS TSORRIP OH Bposed SHinUl Te
‘udoud vs vjaqe) ze wse}2 amoal
SYnuorepcaos gzeaso 2} arvo od winjoquuis ap ajeiaqe ap reuausorap
XO] IMUAWOG “Bs VsvI> axs9 "pow ap auML MUN je
Jowxs TW NOU Gj -aseIO aye UIP aonap! ow NO EMEB) 0
o-nimp sHouny op owinw up ‘omzay{p veIdavoo yuns (ous
Yow
El
‘lzyip asei9 uy au 290 no Muy EHO 10d Wo HapOK ys INNA LE
anu un 19 smnd yp Sy “sre aug void aed nu ys aioumu EDU fast
5 aep9p wm ew 9005 (PU
HneaIooU WHTOANOEL apa
Inga) 90 ap topos nu PoECL
S40" NIMay 30 Due //
i !Q)puo"ax = one,
a0 4 sensue, )33etado
Tana ‘pt-abs )Ax0305
£7 wien owid 129323289
(Qeuprara: rosa pros
sanyo soeds og // = [Jexmrq zeus
aw amore epatouTe
wH'NINGE. SPRIOUTRCH"ONIMIS> SpnrouTy
‘ <
‘arises op é anuad— s <
ewe nnusd— p<
aerizn feu 2130 Uap BAdIeD mE “y4 no adaou) IwULIOG 9p AOVEDHZLoedS
Up] a6 up reus0y 9p JoyLiowenyroeds iruzume Ao 1289 ay ¥s amas, JO|LLO}EA yRuRUM,
‘works ap Bsl[ 0 op Jeuusn reTEMHOS 2p 1S um wow vo raxd (ued erioung
"Bupwepay v)a1s0 axeo rue iniady ap aioury uy “eye ns wan
Bore daind HPOIGLS Uy Ye a8 area (uLsG tn eTHEIE|D9p op EIB “ETOINOD InseISy.
1 spnog ase totiomy etese}o9p yo wwarewL aq "RIOUR! He-9| IoU ate 38
orasnpoid 2oyroads susoy arent 9p rouny sanmu oiasojo} wo rnunyde
“ay Hfejaoweawoude wy (nnd wioury 299) ood 29 wa39 0 20H (pd enDUMA
SUNALY,
v
vr
war Luan} eaep atiouny wiseaoY’ “aARIRULLO}
nfe no uwI90 2d armiye op vaeoE ayS2 =H
aseyeusi0y no aresuy
ge 190) Jeu om :
$801 wo noo un zany wwe goug "at uae ‘Ise faisaoe wammojea
289% te > mi hued omer
88
FA 9S te Bo BuMRasi, irons :
Mace RUE BY apn war ap auume me Ns 2 EIS
NY seuned 1 09 99 Hane age Ene ey
IWS BLET019 =p veumionas
sneer “witpuod pstns a3s9 oto
F octA I SES OP toto an wiuaiag ‘Hs fut =p moar
9 201g tun dey 9p ase
(C
ant maan()
unsagnea char ¢7
eprint? ( "\n\z press a key (BSC exits) \n\z” );
ae
epee \a\rt, od
wnite (cf 27), // 27 == ESC
return 0;
// ond of XEYS.CPP
PEeEHe/ (eal ek ORES PP ee eee
Cana vett execute acest program vet vedea vatoarea intreag corespunzitoare
ficcires tase apisate, Dacd. aplsali taste speciale cum ar fi sigeata sting sau sigetafd pumou 8 ddQ'SKED] InureBoud pueanooxa ese msH—9" OOH WIN "SE
oan andes ajnce ended ayes typ # ui won ES
fp miemquios wai aye
H'SAAGASY Ininualsy eesin.gsuoD
‘(1e¢ Parworea wane va a1e>) AMOI ET BUEISTIOD
cans 0 fms sees pd 9 24g su 4DD JU HL SE
ge meos we an Jv uh tue pe ad) wD! wend 8ON8 A)
da SA Base 8a NUNUMA ETA TB
ub
came 02 ose) dew © aso
armenieadoa
-eogrpow inyrmmesfoud ajayennzau atewtazesd uns ¢-, wINB UL
oo
aD Sha THTAROTOTS TORTERESS //
9 urngaz
saute ff uz ay 31 STEN
12 Maa\h Day} FauTado
FQwoses 4 962 = 9
(21) 3F
(wore = 2
£4 gnu, (at¥e 07 28a) Fox F ssozdu\, ) saursdo
eae {9 quT peuBreun
(yore 3uT
WrorNod ePnTOUTE
qaevaury “1 urazeH ‘se6T 346134d00 //
eaesede //
goroqse3 ZOTTIOTeA BeRBUTAGS nIqQUed ZeaTTTIN - gaD"SKDt
PELE EEE Pe Eee eee reece eee eee eee eee eee
dd0°SASM | 2-2 BURST
ar aS HINTON UNL
imjmureddoud v gUEUBA eROU eIUZeud Z-/ nBuNSIT “(JuoIAB ap SIMON aMmorEA
©-1ou no ppunzuoo 2s nu ea “ewoqqo4d O NU Ey aWeBOId Uy ISO}Y Homnd o a1COreA
sey “957 Pinungo easeoyea wy Heumpe i RED O Kou QuoIa’ Helade FU“ ezeauimor
Ovors8 ame uy eciomys Wg "ISH) 2p axiomquioD nes BASE 20U0 nneE
‘oanwy anvoyea 0 gare
vn ses aouow ain Yop Sz 9p Ure Loe yewDUND ao
= pnojog w1 2p 199 "Beam aso 0 eat to are 20 stauny © a2
1 eopen on (op) domnoyen ad Puasa eimaunaep uy oA. tog
moon feo esvont azo auelp eure wsts my nie Nn
Vinay sjoun wunse Es pavjog wuss “Get mu z a1 1 nMusaTEDS IDC
a
0 us! 28 “s-TY HesEde FoRp JEP ‘gp sowores yZeouMEA “ans op ais oe
2 up « mse “dion acy arse Hose,
pugs ee aroyea emus 9 yavoumos ojon
“Bee TRLLD ro 9p yreurguuo ra ‘Zy “14 afeuoNDumy aa a Es =I
‘esp aro od 05; fv yRuEsInpo9 jv BUNS area DIY He ode
rear fora. tides en
WE no LSE] “T yBUEDS |npOD TED Ws 1 SNS-AEURIE [ny
sof wt sas ap «8 exdazp v} eSuBIs of 9p wyEyocatmN 1509 B
fda9'SASDU STS wes yaad myowEAONG WaRRTIRN “LL Bh
©
0
°
ot
tor
oot
85
iB
norases © maaueanss) eaeey 0 sheen
sro
Hinciuae “TECMD.CEP"
nt user_cud(
ant c= geten()
ie (to)
return 256 + geten();
else
‘Ga aceste modifica, cind vorn executa programiul se va face 0 pat
iade taste apdsate. De abia acum vom trece Ia alcatuirea clase
Construirea clasei string_field
Aceasta este o clasi foarte utla pentru 2
‘mai folosi fisieral TECMD.CPP asa
i fe salvati (Options | Save) daci vret s& pstrati
‘cum introducett in fisieral TEWIN.H.
in member clasei au semnificatie evidenté.
ferestre cu texte sursa. Nu vom.
Listing 7-10 : TEWIN.H
private:
void tip_line()
clase string field
protecte:
ant row, col
ant wadth;
enart str;
ant cloc;
public
string field
metring_!
vosa adit
eo, ante, onart 5);
im
/f starsit TENIN.#+3661 au 2
RUTODUEN-Y "RIEL //
HUNIANAL Imseisy ty std are-o) ng -wuyoporoeus 10u zeANgpe ap
epqettes uy oyereuna suns a 8 uaso9 ad Fee jndwugD wp sued oF} I
Imjede mp szaoeugo op imax mis & eds aqmsap Hingpe Bs
ado aL atsxegs 77
+p uangex
Mw ipson ‘OTT,
"g ‘orgs prevr Sutzas
Hf '(Qaosat>
© sora axrim ) r3a83%03
yurew qr
AHOOADAL4 spaToUTS
SENINEE, epOTOUTE
eH -OLNOD> epnrouty
ameuewry “7 stazeM ‘g651 aubtahdoo /
ao3"pE AUTI=ag0°H //
ddo'aL zis Buns
pjoty Buns ws8I9 2 wsOM E
‘huuadl sesaoou imouns B BSNpaL asa. ZI-{ InSuNs Up vauiIsiDA “fare
~L yun
9p oysaiod 0 are Qucys epolayy “Wetwow see my oTkATY soe A yeLONOMASAGh
yOY!POW Bidod WwEARYsUEN ys NSIS P| lA WORD ES ENgaN ye
sino Ws pueiizer iy we-ou yep “yy puLay e] tuSADN Y ap
09 0 2d WrELOAY BS OUNG 3804 YY “R-aILIOG soOp wwIdoo
18 @ aldoo o nowy LIE MU ZoFINSUOS WH YD HPAIESGQ,
@g0°NINL yTETeIS //
f(x) sautdo
(nous: wwroty Burags prom
(Qptets buraas~: prot Buus:
feans
v(syustaae = apt
10 = Teo
(s sseuo‘x aut /o suy)preqy Burge: :press Burzas
{Cwid ary wid )z9363%03
(Qourt era: :0u7 eek pros
dd NIMALT-Z Buns
4d NIALL 8B Mgpe W208 90 ajoporau eyuraud |=) ynBunse]
upise a patj-Bumns joaxgo un und v antod ()ureus enouny ode wayan oan ‘QsR0ys
wpovour jnioronnsap ‘maoronsysuo> wae waLi9s BS “es a
(Ca mawarp vy esefdop Ba 95 rues
savatps eso wept wor) wasspe dey 99 wa09) BS 0 316919
(Omoys aroury © vouauiase ap iuaay “pmppuR monsuoc)
as uy raosino Fzvazr|e90] 2079 Ege, JWSEId 2189 pun FOIpLN ou
109 18 or eps exzaEIBD 9p yous 2189 aroU ap po ands at API FIEDuONUIOD,
us pzvasiye 20
oer ‘Sra ene S Aue TOROS unc
Beds Sed sag UneTBAUT eS var186 ‘S& Invatim C+ pas cu pas
foefine REITE_SLACK 7
faefine YELOW_CYAN
faetine MHITE_ALOE
fassine OTAG_OOT_CLR
#apfine DIAG_CON CLA
daefine DIRGIPIE CLA
foefine SINGLE
define DOUBLE
faefine SING DOUB
#oefine DOUB_SING
daofine STR_CLR
Ox7F // ab stralucttor pe alb
Yoefine GOHOME gotoxy (col, row) +
‘Dupa cum vedefi, macroinstructmea GOHOME se extinde ta un apel ce
funetie
Dack executat programu! (CirH+F9), vet! obtine un object stnng_field in partea
din stinga sus, cam ca in Figura 7-3.
ig. 7-3 Prottpa obictuta tng Feld
fe caractere propru-zis este de culoare alba strlucitoare pe un fons
all este de fapt © aunt cle gri in modul text, dar este eu toate acestea
CONTROLUL CURSORULUI
fn modul text, cursorul este controlat de componentele video. Cand seriem
‘nte-un anumit loc pe ecran, noi modifica de fapt un earacter din memoria video. De
Un oitor pentru o singura nie 187
Miscarea cursorului
S& fneepem prin a mugea cursorul. Cénd functia sho
Listing 7-14:TEWIN.CPP
EA et ee eee
void string flair :snow()
conome
cextattr (STA_CLA 1:
for (int . = 0; 2 < waatny i++)
puten(*
cOHOME,
epeantfi str dy
CORON;
{4 sfarsit TBWIN.CeP
Seer eS
znd la apisarea tastelor
vvorn implementa
Mai bine zis, aproape primele dou! Mai
curstl editarii avem nevoie ce 0 cale
‘Avem nevote deo metoda de tip publ
edit_do(). Dup& cum 0 si vedet
lucreaza cu obiecte string_ fie!
117-15 prezinti cele douil metode no1 adaugate i
Listing 7-15:TEWIN.CPP
Eee biating Toe ee Or eee
void string_fieLa: :snow()
coHOME
textattriste_cir 1:
for (int i= 0; 4 ¢ miata; t+)
pute "7
GoHOME:
cprint£i str);wydeoap er ntqede un tmynaosino © axeqnu 9p POD //
asrz39 e188 p 7 & aseo
bpm) yoatae
:ebe wes vse yoy wountjonqsul founye
“pun tuna Sanu nueused wn as aseo Qop” ups utnoaud axiciny 0 weNe E>ecy
< suorionzzeuT>
arnezep
< sunpysazasury
< euntionzasut>
ase
| cerrapszeay ) uoatas
89 Ya
janysur exes
seanoexe tounge ‘ebugas eyesgs c1se1 2607 2 EDED
vtreanoaxa tounge ‘eqdesap eeebys e1ee3 3503 © EoUP
‘+sggngoxe Tounqe ‘96g e262} 7603 © OEP
fasea 0 qesede we 2D edn
60 wea
evasony omv9 aureoud waUS RS LILOP puBD YOIAAS wOURI}SRAEA! GO}0} MOA,
Oop pe repost vasotos w eIesoORU “YoUINS HULU FOC
9p uninins foun tidnse aniazd 0 umounie Bs uno “osy wase} BsEE WOA puRD yUEE
eine od wipe was ta pray Banas ypaygo ‘sunisi9x BsEENE EINOAXD WOR PUP
aaa ateaege /7
4g aanzex
'Qarpe 35
POmous “35
DION ‘OTTO, “ ‘OT ) Js Brats bursa
(x0sz79
( a01egurum |aaaesxe2
(yerew aut
4» W°ORILy apnTouTs
h BORINELy SEOTSETH
——— SSS
eer ‘id euniGuia’S ajued loupe UNL
o0ro) gt
imomey Es ese
Bxo3 08
2 < BOTD) FT
wow aT ese
dd °NIMAL02-2 INBUNST
meapioy augur uosito oreo us “gung ML FUELEA o BwuzaKd OC
9. ap injnas a.UrBseA ap OFooUIP
\JOUEA e] 1 waPEAS YS MES WAMEDE y TuDIOYS
$ tuosano wsudap v najuad ‘apo% as win gang
18 eBunfe awod juosng 2019
2389 afyzod ws mou EASt3a04)
Sao MENGE FOTSTS ATOROST
arnezep
(nox ‘ooqos+ )Axon05
Moms 2205
byesze
'( nox ‘s0TD=~ ) AxoI08
‘ome eT 2mxo
frees
ter ‘Sa eins SHURE IES OC
enaq = suopst
98g 2800
{pmo )_uaaqas
festex = suop"st 3uy
(pws qut )op"aepe::prery Gurzis UT
ddO'NIMAL ‘6b-1 Gunsr7
‘ideorp waeaBus tiesyae nu ‘eououase acy IK utp soxoRIeD
mapas wast
Imaenqe "( Ga44ND ) wneIneL urRiBead asso syMeDXe thea pI
a een EEE Eee Eee ee eee eee ree eee eee
Qd0°NIMSL TOTETE 4TeTegS 7
seuop"st usnqex
1
satnegep
tenz3 = sucp st
OS ese
(pw) weatas
feetes = suop ey aur
(pup aut jopTarpersptet“burz3e qT
dd NIVEL 8 /-2 Buns
am av asus sueaay,
sand
Sea RES Wie198
apisare a butonului de mouse, (Selectarea poate fi flcu spr fatatud, wlliind Tab
dupa selectere, apisati Enter).
ao setae aespre © setursortype)” vei descopes ret ferment snteresant
cerul antet CONIO HE:
% _NOCURSOR .
5 TNORMALCURSOR cursor standard, adied lintuta de subliniere
3 -BOLIDCURSOR cursor in forma de depth
Dezactivarea cursorului
© interfaté utilizator profesionala, cursorul (sau purctu! de inserare fn modut
nd prezenta sa nu este necesari. Prezenta c:
{in casetele de dialog cu care afi lucrat pand acum v-a deranyat probabil
de mutt ca pe mine
Pana acum ascunderea curso
ddorim ins& ca acesta 38-51 modifi
‘modui supraseriere. Donim de
in fisterul TE.CPP. func
ii nt a fost totus: © necesitate. De data aceasta
nstunea cmd comutém de la modul mserare Ix
mai strict asupra sa
compan. in programarea onientat
‘Sd incepem prin a adauga 0 procedura ce stabileste culoarea de fond a ecranutui
face si dispard cursorul. Inainte de 2 va ardta cum s& procedati, imaginati-va c8 vret)
sd rezolvatt aceasti problema flra ajutorul meu. De unde vets afla cum sii controlaty
ccursorul
Va veti gindi, desigu
|
|
|
|
i
if
i
ofertprn somanda Help. Testa |
enatie. Probabil ca vet sorte $2
ection ait prt teeta vee
7 programulut din fereastra de
procedura urmtoare:
SUGESTIE
Ferestrele de documentare HELP sunt la fel ca celelaite. Dect, cu F6 trecem de la
co fereastra deschisd fa alta, Cu FS alegem fntre o afigare pe tot ecranul 51 una pe ecran
nonmal. Cu. Ait¥O afigiim toate ferestree, PAS CU PAS
electaft progratnul din fereastra de documentare
coat jn zona temparari de stocare (clipboard)
nt (Project | Close)
nett apisat ARES pin dispar toate de pe
1
Cénd ati gisit termenul “CONIO.H” in index, apasab Enter (Sau apisapt de dow 2.
eden ecranul din Figura 7-4 3. fl
tein ondine alfabe 4
stim namete functies, Din fe
orn alege tna al carei nume promite si ne dued la terme
Singural nume care pare potrwvit este “ setcursortype(
afigat cu caraetere mai stivestoare). Dotalit despre aceasta
aparea 6‘unteae wipo0s ap atioans Bs
up wun saxBow RreUOHpIOD asaidxa Q H49 sioIade 1s99]c4N09
“youopypuoo mscyeiedo kzyRA WA “ImRuOSIND BaLEDDIeS eHIOWS
2 2p pO
4 gonpOMUT “azeEUpe ap uepOUs
ayansoray op ruse
Hain gowp MUIE|qo1d ONE Y WA HNL, Enya
soap wiayaud ro, yuenious opadas sUIAap If 398%
op JcsiN9 Up) “AIBIASU |APOW Uy OREN 8
‘esaoeu awaape-ntt
losiod ng “ug
ulag
aaygu 8 Stexpse/
*€ NosundON ) 9445208mno208™
Et “Yzoeat0
*C ante armen )saaex03
(Qdng223¢ pron
fg uanaez,
{tu ipraomorrei sor) 32 pre
!Qdngze39
Gurew aay
'Qéeqz039 pron
GE'OROSE, sDaTouTR
wANTUEL, oDn7DUry
<#*oINo> sparoury
TawusuTY “7 wrazen ‘e661 UBEZAdeo //
3038pE AUTIMaa9"3 7
ddO'3L12-2 Bunsry
‘sus mrkm aBunsip aybod as 949
‘34 ean otso go pateandise sep “puey ap azwoyna ntioBaty ga Ul aresov00
StBaules fede Hsaey “Ay, mooIONG nopyosap 5 ymuEioo NOU Llp Isap HeRieng
nsosina Bredsyp
Bud [Z= jrBuas]
jaduosinojae
9 Boe)
109 UES BowaUA na “so]
1p 8d niteds 497 wed yedndO Me 4 LT
8 ANT, impote sejodte
‘PUTCO Hisojoy ¥S toad) avezzjnn scp ¢ 1
5 Hum AN “apuna9s op OF wes ezamp eS ingan Je sns HBL! ap aINBIedO oreo,
4B Wooey 16 ymunuo8 welaNs gam ison
O/B aman ep uss tax, ajoo
fm gs wn BEAU HA eANDaKD
Qainarers afoury 0
a aE Hage IBS BAL
Seema bea a9 wien Re ‘361198 ‘Sd invatam C++ pas cu pas
NOTA
Operatorii unart accepta un operand. Operator
precum disjuncta logic
este singurut operator tert
lati céteva exemple de operator ternar:
sales tax = is_taxapie > iratetant! . 0,
snart = (Fanrenneit>72) ? "tee snarc" "sweatsnurt”
peincé{ ena page 7 SEW_PACE NEWLINE );
alices_tea party - tocay “never jam today" "jan!"
in fiecare caz, operatorul conditional evalueazi doua din cele tret expresii. Se
porneste cu conditia, adica expresia care precede semnut de intrebare, Daca este
Prin adugarea unor spat
citeste mat usor. in acelagi scop p
‘Near fi rau si discutim acum si despre prioritatea operatorilor. Ca 31 i
limoaje de programare, in C-++ inmultirea are priontate fags de adunare
alte
ae ptcta: ‘J max Intai se face proausus ius v si cy
17 apot se aguna a
(/ 1a fel ca in cazul anterior, epatiile
#/ sunt doar pentrs cititozul unan
// aatorita parantezelor, mai intai se
11 fee acunarea
a= t tetas
Asa cum se
‘in mayontatea limbajclor de programare, parantszele se
fe ate imibaje,
cu © tabeld de
77n editor pentru o singura tino 199
sauea_tax = ig_taxanie 7 (ratetamt)
sales tax = is caxaple ? rate * am 0;
fata de operatorul
rent pentru om. doar pian
ali 5 operatic sor
codul obiest produs de compilator, deci nu ezitat si le fotosit
parantezele indi
rului, Folositi fird ezitare parantezele si nu veli avea niciodata surprize cu ordinea do
evatuare,
Asociativitatea specifica ordines de evatuare. fn exemptul urmiltor. asociateitatea
‘operatorulin plus este nereievant
Aceastt ins
rezaltatul este ari
ine face exact ce ne asteptiim si facd: adund pe b cu ¢ si
i a. Intrucdt semnul =
limajele de programare.)
‘SE Iufim acum un exemplu in care asociativitatea este relevant:
a= fool) + ber;
Deoarece nu avem ia indemind definite color dout funeti, mu putem fi sigur
operanzt foo{) 51 bar). (S&
globald st c& bar() dubleazi
aceeast variabil
jar c& dacd asociativitatea este important, programy! trebuie sens mat
tmpl = bar; 71 qupteaz’ glop_var
tmp? = foo(} yf $mevamenteaz’ gios_var
a = tap. + tmp?gp yeoqpur reqeawers a By = 2 ZeUS
303908
ene 3/7
usp avewers Tawrad ‘1a, le = 9 zeuo
soage 1Sejaae me runnyonyst ajaxeoygwm 1S
upypew 9) 2uN Nf anuIp arspsese9 rut
‘a1F0 dnp wBnepe MoTEsLNOD asaioap eIseaOy “areIDesKO as¥S ate (hesDFoAC WORD "IRUKS
nes) jmioyooa ‘unzeo afequie uj “ar2joeIE> 2p sI8 nun wSOUPR aAs9 B In} BorBOTwA LMTED
aque uj “UNpu® 2} 219 uy [RpoU aise HU BOD aIsooe anu unduis
exeqoez¢9
{/ ap ats un et sequtod un aqse e // W2RRMRy = B4TPUD
azeqoere9 ep zoqoea un 9359 © j/ * ythxmay = [Je zEu0 |
apoyo Wo Sonuap! uns tunoRAsH ajasEOIBU,
“uesooeu ayuouLja waa PISEAR? jo RAO
urg any wigaty wos 4oadse 15008 3p
(up-20 ni sop “areunsauteaans 16 past
YOTSYALOVUYS VSNSONIGOULNI
+40 somes reaprape un anap e ap
FOADH FONE OD ap O|LINUONY FEMS wE
Imjound 24 tsquns wa sony wnoy coed Wy
180 © YO 88H Ey
18 thio Ba ws otonot ay pags teiRoad 3S
yrnez9p
'¢ gosunsartos” — womancrwacn”
¢ pousur jedfazosnoqas
fepow eutt = spow eur
ze 98%
SEN SePo
aetmo //
aeora
ox ‘0TD++ }Ax0206
Wye + Tee) >
oa e680
dd TNIMALE2-2 Bust)
excusing
ININPOW e nes amiss Mino eo Wwa|og
repo
Inpous any joat09 wnvs09 as
uno Paps tio, Iminutsisoud
Owouss eng
pop 1g
‘sixdngo 2u mony yssoe 2p sop “ageuneadunesdns 1
poup eu:
Soup BS oingan “areuuuia ey “szaucyzod pes
299 JPaIg0 asTIQ “aio122190 axe NEE opsoHEA
BiNBa! 0 Lztalefns poo say
( aosungon”) edzazosanoy08~
(pwo"zesn yop "arpe » susp
« euop; ) strum
« soeesoarros oe
Jodiazon zones
Onrperseroe bans ston
fea er G2 aut “a3 aur “gy qupjmoassneg
cxesvccreatne
Tapem sas8 ESTWE // !mn¥s = spow"sut que
Sede eze20€329 2p op // > Usxwerd zeus
MEP 9162. r-, nBUN
any uOHIpHIDD MnsOYEecO
ainwesord wazau9s v) uruanar ys “annosy
|
|
|
|
Foard eee eee |
RES Ged 5 aoa BePurem refer orice element din vector eu un pointer sau cu un indice
c= atl);
Wc este wt
(/ ¢ este ce asenenca ‘a!
em ale’
c= tatty;
(1c este ‘x
1/2 este ce asemenca “x
fn unete cazuri este ms
este mai potrivits. Cu eétva
|
|
|
Wf ete. |
|
|
8 ne ocupa de modul supraimprimare, deoarece este mar sumplu,
El poate fi programat foarte sims nd referitea cu mdici, E necesar inst <8 ne
‘ccupim de tri lucrur ce apar cfd utilizatoru! apaséo tas
Supraimprimarea caracterelor
in primut rand, nout earact
rind, caracterul trebuie pu
ceursorul,
va trebui pus intr-un
de pe ecran,
din memorie, In al doilea
l webuie si actualizam
izarea cursoruiui pune in discutie doud cazur. Clind afisam caracterul pe
fonctia putch() cursorul este automat avansat pe urmitoarea pozitie, exact une
Tot ce aver de ficut este si adiugiim ' la variabila cloc. Dar daca suntem la
in afara cdmpulu. Nu vom modifica
le, dar simt si dowd eron, Adiugati-ie
TEWIN.CPP.
Listing 7-24:TEWIN.CPP
ee ER EEE Ere eb eE ree Pe PHP HEE
aefauLe
Af ( ana moce )
; Uf code tk
eles // overstrike
sts? cloc-ecl ; = cna;
Puteh( ena);
Af (Clee < col + width = 2)
7n editor pentru singura tinie
eloct+;
wise
goroxy| elec, row);
1
retuen is_aone;
J) efarsit fisier TEWIN.CeP
Una din oront este urmétoarea: mstrucfiunile ce urmeazi dup cuvantul chere
pul eso. iad a aie get sting 5 en
ulna Cel Vsimtle cu carat aie ‘
fe ° anti. Executatt programiul gi apasati cit
' Rue a nla des
cra
ste
ccorsorul a avansai? La mine asa s-a intdmplat
eu ce sa intimplat.
‘asit? Problema este inainte de cuvantul def
te or Ace 2 fox un exmpl tpe numa hat na os probleme deme 9
Listing 7-25:TEWIN.CPP
__Histing 725:TEWINCPP
case INS.
(7 creat
case 22
sefcursortype( Insmode ?
IUUNORMBLCORSOR © _SOLTDCURSOR J
peeak:
default
42 ( (ema < 256) 6 (cncd>=32) )
Af ¢ ins moce }
J) code tk
aise // supraimprinare1 moz ‘901 5Axoz0b
440079
C= unpre + 02 > 20TD ) gt
(pup dyoane
fw = | TeD-9019 1238,
#( nox ‘9075 ) Axo306
#449079
( t-ugpraetos > 90 ) at
Pdr ygauado
E( woz ‘p07 )Axoj06
aesecut qnrdeds easemnooruy// fpup = dty
ntjeds un gzeasest // 1 ¢ @r yszeus sur
erexesur ep zoqured // ‘Too-soqo+z3e = dt ,z0uD
{ apou sur) 3
{ Azemcomay 99 t9g2 > pur 1 5t
arnerep
dd2'NIMBL:22-2 Buns
soon © aporou cur cnp meng
9j © go" su Bouse “asoMU pow B arBeHRJRU EaTEd IEOA?Ap BO ADDN
95 “dE )NIMAL wae Y JOA 29 1 cane ery UST
-93]9P 9439 O-A aq YUN
a 9019 a6 areata ws aan
‘anes a autioung
9p vaae eA injode *
199p waInd wo, “Tera
‘an uosuy pugs) “Bnop no nes yuouin®e
sojereyger ye sieyau mapune nayuod esd wad
1 BA
PaIouGta WNEpE won O18 8
n HEHFOLNS rung “eIALN ats9 MU MZON) 389
moe YB BrSaULIN jRuoSINS 16 291 wuqeusEA
29 Bound “anseoN
_apuid wa a8
‘Wse}dp rrgoH Y eA nu (Em
Pupdooiit “ES wp 2favaroereD azeo vIdvarp | wesEIdap ps aina;
{Worms WH ROE “pags Fourtzd Uy wyPai{dwOD IeUF uli 9189 oan
4ojasa20BIe9 eoeiasuy
;poU ap 94 Bs muowiow 3 “arouse
oe am futerdns injnpow
‘nis 16 sates arenttaeydat 0 no tap JOupo un juaow ise th wioay
‘ann a 9 pegs orapw sins aa sop a
SU. Bus al aoa wo NoUNNG LIN Mm Pale etna
“PtHP 2 slepHEpweNs wun ep uanesaoou 1 uponop v njdUeKD weoy
“S soansoap “our runtionnsu ¥9 gz 4
Palsonpomue wud andy
SEE eee
Se eee ee eee
360 °NIMBE TATARSTSTS TaaTeRgIe
feuop"st uznzer
1 woz ‘2072 1 Axo306
#( Tesreuou 3et ‘e yzeuD)szeUS"suT pTOK Bay
H{ oz ‘705 )4Ko308 © aKOKOD suTs8OR (1 = uapta + r09"> D079 § gt
estugsep 232803 e7e0TMD © // 4X0 HID HLS UTODE
+1 pmo tuoang
>So PMO = | Tescv0Ts 124s
HINIMEL92-2 BuRSIT *
50 “anil GunBuis © niqued s0ype UN ‘Sadins sed +95 uiglea eg206 Sa Invikim C++ pes cu pas
return is_aone;
voud ans_cnars( chart s, ant nears )
J] snsereazd nenare spatii
7] wor £1 paeraute nenars din areapta
7] ncnaze <= strlen (s)
7] ncnars =1 prin Lipes
= 1) // andick ultimut caracter
:/[copreazd caracterols exstente Ja arespta
while ( pa > pl)
wpa // ample locus gol cu spatii
(/ sfaesxtus TENIN.CR?
Se incepe dect cu crearea unui pointer ip o¢ va indica pozifia din str unde va avea
loc inserarea. Inserarea va fi facut prin apetul func ins_chars(),
Funetia ins_chars() are patru imstruetiuns. Prima in
indice ultima caracter din sir. A doua face ca pounterul pl si indice caracterul ce va
{nlocut pe cel indicat de p2.
‘cu cei de la pi st apot desereste ar
se bazeazi pe un mic truc:
chart all = "apece"; steleni all | —- 5
char* mua = allt2; mud indica pe
Wf printt tipareste pe
U/ stebeni =3
exemplu:
// % are rolul ce spatiu aici: a fost folosit gentry a se
/1 distinge max pine pozitia spatiilor
cnar* all = "aocae" sil indies
cnar* ip = alltl; indict
ans_chars! ip) 2}; ff ip anaics
1 geet all indicé ™
|
|
71Un edttor pentra o singura ie 207
insorare sunt de acelasi typ. Punett un punct de
char *p si executatt pas cu pas programul
\HF7 peniru a observa valorie tuturor vanabilelor.
Felicitin, At dus editorul de linie dincolo de cele mat part ale
‘eum ar fi deplasarea eussorutut
1 prin construirea unui obiect steng_field, care este de fapt un
izat mnstructiunea do
prima ieratie se fa
de formatare ofenite aetioony BS ywop aingany ‘arDjseN Hailes ps ¢ngas NU tndsau0>
jonsut wud > 2p00)/ yo5. 1 08 3p
fy IaH 39) we axl IY 98
ound » Hound ea “ureBoud mseoe eammnooKD Uf
xa p00 //
(sxeuou gut‘ yzeup) sreusTep PTOA
fo uamgex
+ (3e09*4.88,0\4) UTE
Hzigiasea) seus Te
2 y630R0TE,=3803
y aut
18h,0\y) F30TE
(Gee3) ereu Top
pBzepoGE y=35e)
“(ase3
Ft3s09"
(vurew 3uz
| (tesawuou 3ur!s 4289) sreus TEP pron
epnroury
‘dd 9‘ 3-8 BURST
= rrr
areweifiod 9p oye
vue
iajduroo ai
rugs aoiang
208in9 sueAy
0) eowdsyoeR ataRIng
y90s89) ac] aLeBIII§
NPR WOA jodeDIs99" Uf
a210 SA nvatam C++ pas cu pas,
—
SUGESTE
EEE SUGESe reer Ere eee
Prin comentariul // code tk autorut desemneaza locurile di i
fin program in care va
trebut lence sk mat sve suction, Ete pute robb ex acest cur
apard 51 in alte contexte, aga inet locurile in care el apare pot fi
utilizénd comanda Find a editoareior cu care iuerat i.
ee eee Ere ree ere
Pentru a face caracterele s& apa ca find sterse, trebute i deplasattcaracterele
e Ia dreapta fa stinga si apoi si adaugdm spati fa caparul din stings, atl incat sf
pistrim lungimea mitalé siruli. Incercat acum singurt serie instructianile care
fac acest cru,
Exist muite feluri in care putem face acest luer Eu am procedat cain
ul 8-2.
Listing 8-2: T.CPP
ee
void del charsichar* s,2at ncnars)
1
// sterge caractera din ospatul stang all 3
us, adaugana
// acolasi mmar de spatii in capatul crept
J/ nonars trapuie sf fie < stzien(s)
// vatoarea amplicits a luz nonars este 1
cast piss;
chart p2=s + nenars;
waite ( *p2)
spiee = ton;
while ( pixp2 )
‘pie =
ineavoustré sunt rezonabile, ati facut o testare corn
Prin testare complet na fa
posibile. Acest Iueru nici nu ar fi re
‘am testat fiecare caz.in parte.
racter din tang al sirutut este un astfel de ca.
daca Functia tucreaz8 corect intr-o astfel de situatie
N aceasti categorie: testele nu ar aduce
De pild, stergerea unui car
pentru del_chars(), Vedeti mi
Nu ar avea rost s& consider
elemente nor despre comport
aac ss
Fxaminindu-vé instructiunile, putefi face un taventar al cazurilor considerate,
Pentru cele scrse de mine, acestea sunt:
> stergerea unm caracter (apel cu un argument);
re (apel Cu dowd argumente),
ncorecte, dar acestea nu sunt necesare. Am inclus wn comentariy prin ea
Jhumaru! eargeterelor sterse Si fie mai mic saa egal cu lungimea tala a §
‘Anumiti programatori ar introduce si mstructuni care s& corespu ;
‘mai mare deci lon: Se argumenteazi cA prin aceast
mai sigurd. Poate au drepiate dar not vor lisa programulut apelant sarcina
ica validitatea argumentelor. O fu
wale programuli apelant, situate care nu contribute la sigurant
Dupi ce afi testat complet _aceasti fun adauge
‘TEWIN.CPP, impreund cu un case DEL
prototip pentru del_chars() in TEWIN.H,
ox7F // culoare straiucitoare
gotoxy{ col, row):
saetine
faefine
sTR_CLE
GoHOME
void ans_chars{ enar* ¢, int nenars=1)?
voac del_chara( chart s, int nenars“1),
funcpet in TEWIN.CPP $1 sortett instru
igul 84
Adiugatt_apot
actiunea case DEL,
setcursortype( instode 7
ES" MORMALCURSOR: _SOLTDCURSOR) ;
case DEL
case 7: //Ctel+c
j/ copiaseaza restul sirulu de caractere ov un spatasus
ngosano preouoT}tzodex ts ezeusTsee2 //
| ()9e-20T24438) seus TP
surge eT naeds un n rata tngsez ean //
panes
(19 < v0T=) at
(resorts) 3t
Lesa 9ee>
pyeo3g
oz“20TD) AxoI08
yaurzdo
2709) 40308
1s weeestzeas //
Taaosane gzveuortzo:
‘{99-soTo4a3¢) xeyS 700
ebueas eT nrgede un ao tarnats Thagex ezeaseTdep //
pEraIO// 1 9500
‘tag 26eD
dd NIMAL ‘8-8 Bunst]
‘powasyoeg foysey vase vj MLIOP wiiesedo urezEyEAN Ho OL
{yo Qos upe etoury uw) WEEE aSYE ee Now ud sg
am ad muoud pian ys nes LMS Kear
lace soareoap “gIauns Feu aise oped fase axese
‘aoedeyoeg Wastl no 20K} 9s muon] sede EuMEEpIOM
deoidy “Yep etnyH yeISE wey IRD ad |RuaI9BIED ANRIAdO sHIeOR wIOBIONE ys
ojtuuod 17-ou exseaoy “mmtosino earureUIp ymiaioeIED 1 aBsaRs Barna 3p BIOA%
luamnfis ro soso op yeoIpun anjnupyoew wareBieas euoHLaydust fe 20 yng,
inindosend
‘mojo vonpoud 9s
eH JOC] tayse, vasespCe “weiBoId ys098 HiRINOGXD PUL
Sao NiMay TATAGSTeT [RaTeReg= 77
Lo tds
( 2atd } otras
sebeda = 44tde
(ts) orn
iszeqoursezd yreu9
feotd .aeuo
+ e350 exeuou car © Baty!
(e)ustz3s => etz ys @
vezeotes //
ay erese //
adezp tmgedeo ur tryede op zeumu teereoe //
wénepe vs ‘s tnt Te Suess tnaedeo uyp ezeqoere obzexe //
fezeuou gut’e .xeup) szeus Tp pros
arnegap
fawoxe
F(mox ‘20TD )AxoRab
f4aas )gqurzdo
“(nox 'T09 )Aaxo308
Tnsoeano pzeouct}zzodaz 7 ezeostseex //
s(tossoorssz3@ ) saeue"tep
eBuese et //
we ‘Su ob MUST wre RUN ay
‘sedis sed 45 ween BS ae24 ‘Sd invatim ++ pas eu pas
DEPLASAREA CURSORULUI PESTE UN CUVANT
‘Sammy Mitenel, Are numai SOK si dispune de
editoate sunt de zeci sau
suvant”, Asta nu inseamnd ch d lus Sammy este ares
rhumai cE nu se potriveste cu ideile mele despre ce ar tt
Urmatorul cuvant la dreapta
Cand dati comanda de deplasare a cursor
fapt prin asta? Dacit ci
ispunsul e simpht: do
Da
albe.
itilizez aceeast definitie pentru ambele capete ale ui
ia de parcurgere. Pe de alti parte,
re dreapta, cursorul se va dep!
ceriorul unuia ( se deplaseazé citre dreapta pan
set peste toate caracterelealbe.
lege cl in ambele sensuri de pareurgere cursorul se va opti da
2 de mine pentr a gist
se gqunge
yeeputul
8 Alte functi ale editorulus de
218
return “ere; /
We
Depiasarea
nu este ally sau
word right
le Fac
1 word,
zn) 51 mox
Listing 8-6: TEWIN.H
void ins chars (shart s,ant nc
chart left_vord(cnaz* left, oner® nore);
chart raght_word[cnar* nere) ;
Listing 8-7: TEWIN.CPP
case BKSE
Af | chocdeol 5
// muta restul siruiui ca un spativ 4a stanga
cel_cnarsistr + cle - col)
reafiseaza 92 repozitioneazi cursorfexey 4zeuo /959T 47EUD )PIOW"AZET «HEU
arnezep,
2 (woz !o079) Axoao6
fTopsaas—domDoTo
‘(qen-poToias '38 )pXOH |zeT=do. TEU
Mon aT Taa9 ese
we T ese
pyeoza
4 ‘01D |Axo308
"(roo-c0asz36 }pxON qubTZuds, aeu9
Mowe Tusa ese>
See 5 eee,
dd NIL 8-8 BURST
(gal 8 1g) $06 n9 sed aveanoaxe tad azeuEKap
ino ayausay ook BS 6 dd 1 eHSHg NOU UMMUY eHoUNY axsaTe ToUNM BS NE
nu pep sy uw op
RS Sup BA BS Ue yO
BaD NIMES THTROTETS THyTesEyS
sereu uxmex
a 8 ae FONG TUS
|
|
|
|
|
|
fexeu-— umnex
(exeuy |) 3t
(ee > oxeus ) otras
yuszno qre Tazeqoeseo s3sed eDer3 //
(zecoxouy) ertun
eystxe eqse02 goep ‘guezno TmaueAND UIP Oset //
b
(aye ease nu eres ze30e7e9 Tatad
eys° cf 'zeaentyeds) rrOgy TATAACO wrOzuOD ezEaTONT
‘eqdeoxp
eads aueano un toTu eaS1xe mu you Zt6 UTP (TRU TET
woquteurp Teo) zaq0ere TRETyTA eT THzEGUTd soTeOLUT
aye seaoexe tnd gdnp
aerge qIe seqExeD op qTTeZIP TeIETeD ToMTIG eyTeO
‘gre aeyoure0 |p 47zegyp Teq0ezE0 un od UTFe oF FORT
gre zoy0ETED |p 7Tzexqp soqexKo
mroqeurn eqnes ‘qe Zeq0ure> UN ed BIg 9 BOR
wadvesp utp qusano myzoqeuin Te Sueys Tayedeo eaNED
wadeosp UTp thynauean Te Suegs Tayedeo w3nD 4/
(Cexow sz0vo )puonauots yeu
arnesep
fyeoxg,
'( nox "pore )Axo305
ixye-dostoo = 20T>
( Tos-s0ta4a98 )pxowgubez = do yzeuD
Moni ne BseS
ait 39 oreo
Hox 190791440306
336] s2urrdo
(wo2" 7091 AKO2058
24 ‘Sa nvatim C+ pas cu pas
gaseste capac stang a) cuvantuiss din stanga
Gspatal stang al cwantulas cusent, cina cursorel asta
in antersorah cuvantuius Gar nu ia Gapecul seang
gaseste capatul stang al cuvantuius anterior sina
cursorul este la inceputul cuvani
gertonut ente vepatul ruuz sau pe spatiile
un qwans” este sn gir ce ceractere conseost
diferite de caracterele albe. “we
Atontie: simu do caracte!
tore op care Iverats treme sf
centina cel putin dova caractere! fe a
Fresupunon ca lucran cu cogil ASCIT
coe ( spatau=32, 39
te cocul pentrs primui caracte: care nu este alb)
”
If exit i at Left ena
Af ( Leet-enera)
return lefts
// move ona chaz lett,
here--
U1 3€ at space, fina non-space
wnile ( *here<33)
AE ( leftesners)
return left;
I) fina next apace
while ( there>32)
Af ( Leftesneray
return left
// retarneaza caracterel anterior diferat ae spatiu
return ++nere;
(/ sfarsitul fisierwini TEIN.CEE
rebul acim sme penn salt peste cuvinte, Testa i
1 alte functi ale editonilut de nie a
§TERGEREA UNUI CUVANT
re de a vorbi de implementare tebwie si decidem ce vrem si impiementim,
te pilda, edd cursor este la. ineeputul cuvdntulu 31 dat comand de stergere a unos
evant este cla cf va disprea cuvdntu! din dreapta cursora
Co se iitémplé inst cu caracterele albe de la sfitstul cuvantuiui? Si ee se
jotimplt cénd corsorul este Ja mijlocal cuvantului? Dar daca este pe caracterelealbe
dite ewinte?
fe intrebai nu a Faspunsuri nice; total este 0 probienid de converte, fat o
dar pe care eu mo Vot adapta in cele ee urmesz: cind cursoral
place mat molt
Dorese de asemenea ca la stergerea cuvaintult
ta dreapta iu, Putem astfel si stergem foarte operatry mat
‘cuvintelor vor ramane separate printr-un Sin
‘efnd datt comanc
care a fost cursorui se va lipi de
nou, Ati mat putea de asemenes si
mat
teste la eapanat din stinga al campului?
‘Dumneavoastri decideti toate aceste |
te si facd ceea ce
ple dack provedat asa
jie tratarea cazulut delete-word in metoda
case 1 UK
case CTRL ARROW:
cnar® cp-Left_vord (str, str+cloc-col) +
cLocsep-stetaols
gotexy(atec, row!
break
ease 20 J] "3-7 stezge euvansul
gnart opl=str + cloc - col;
chart op2erignt_vord (cP)
eel_cnare (apt , cat)
‘8 Ate functi ate oditorutut deine 0
gotoxyi--ctac, row |
break:
case 4: If cerLsD
case RI_ARRW:
LE (eloccicoitaeth=L))
‘gotoxy(+teLec, row) +
break:
a
Cu aceste completiri,editorul nostra de line rspunde rezonabi
‘chet de deplasare de genul cetor din Worcstar. Suntem gata sé-l punen
1 coment $i
REZUMAT
Cin am inceput eapitoiul, aveam un obiect string_fi
La slr
program de testare si am di
care poate sterge orice nur
spre testarea
completa, Am addugat apor o fun ccaractere §1 am
testat.
Funetia aceasta @ fost fotos
Backspace
Dupa stergere, am cot
att in sensu efe dreapta, cit si etre sténga. V-am preze
Ja implementarea comencilor pentru cheile Del si
1 adiuga
comenzti so}onasvo
‘ado
upp seO0e 1
2919 9P 121 twos ou
nonnsap
pugo rounge vaya 10A 97] “atta{G0ud wAane
ndaIgo whx20d wevaLISTAIU MOI YS 18 ]O9 IS AIPHGHUER
wos 7 “prey Bun
Weniaae For yaqveseys |
+ )Soterp Bura35~
v(1a3 qseuo ‘ptz yzeuo)Sorere Surzae
orrand
1:38 ypreys Suraas
imoa™ gs! T0038 aur
veseatsd
Soreyp oyrand “Borer Burays sseTo
HENIMAL 1-6 Guns
1 WIP 25819 fapSBOE CHNAIJOD YHUZALC 1-5
jour od 251203 289 2
109 ase Rorep wlases o awso BoyeIp” Buns yo=Igo wy
HENIAG,
soi
1yBuuns y29)G0 un 2u
‘BUH IJ BA BoyREp avesK 10}AIINIGO BSED BEP ase op WALOS |
1 EDU JOSE Ise ep pAYpUEYS 4
soups vareuvdap peOsn ew 39
‘njraisy au
2p si9su9 12m ROOT WL UNSOIOJ BF H—pN
pu Ba
oe du 198 gS Yos 9p auuy a4 B| 9p 8 puetiOg,
B1 ap 120 axl BSE] 10, THA4 nos ajoureafioud oye tay “aud BU aD 2d
2200 ap 2189 2
nuoanfe no ze0p
uaiSi4 INNA INTSWAN
V3ULLID NULNAd SOWIG 3G 1313SV9 VIUVSNVI
a TONS EID
tusdoa
1S 1009 0H
‘Sonpau zunisuoup vy supaigt a yo wre}sIOD
ua9iqo aIB paisaiosd da ap ayayep ¥} S9DDe nA HOI
OA, "BerEANaR yrPo} FZEouOPIOOS az (Jur ‘albouny eaUTUSUALATP
aq “atuseseu ajajzaigo 6 Nouns alufoury InnysuED WX RICAN,
16 uiapryosop gs os0 ea |msonguaysoréy rman afouIN
Soqeip ap ewaseo o vax9 wayne ‘pay BuL
Qasoiag 18 094
aun
young wso}o,,
‘asap argjeau
Ondo no ngsou jmuresoud uu]
Qsvafi ny
in wepayasog <
‘Qyoazis
non wyayseA <
out ‘sfopad aicsap wRiEaMy
suivarsol no wewaumutadss|
<
Insoynte no ean y-es 18 Quodoy my jesoyafe no sa4
insoyeiado jrucynle no saBoyMt BuO] IS NOYs
iyo pug
pazajoue dn op agep wsanoe ¥ nquac 2}1gNd dn 2p gpojaU O uNSOIOg
Foeip Burns
3X9} LOPAIOISY BAIBID,228
SA ivitim Cr+ pas cul pas
Listing 9-2: TEWIN.CPP
string dialog:: string dialog(enar* fla, cnart tt),
‘dialog (tel) ;
sf_coln2 + let;
2fzow-3 + top;
sfinew string field(sf_col, sf_row, £1d);
3£-Danaw (
st pedi);
string dialog: :~string dialog ()
gelete sf;
voig ing chars( chart s, int nchars)
‘Vedeti cum constructorul pentru string dialog pozitioneaza obiectal strng_fiekd
ng. Dupii crearea object
ru operat de editare.
Listing 9-3: TE.CPP.
// 18.C22-— Tiny Editor
17 Copycight 1995, Martin L. Rinensrt
Hineiude < CONTO.H>
Finciuae “TENTN.E*
#inciude "TECHD.B*
vous startup (),
int main()
startuo():
2 Citra figorsior text 2r
strang_dialogt sc-new string dialog(
Teese. £2
"open File
delete sa;
return 0;
yors startup ()
etattr (WECTE BLUE);
curser ()7
setcursortype (NOCURSOR) +
17 sfarsitut iui TE.CEP
fe sfarsntny ud Ter
dialog ar trebui sa se deruleze exact
‘agupra numelui de Fister
resire (cum ar fi Enter) care incneie
‘unui sir. Este exact ce dorim, dar mai este un mic detali
‘Funelie mann() mu cunoaste care este rezultatul operat de editare, Este nevore si
preiudim de la obiectut string_dialog starea finalé a variable str, care este membru al
biectului sf S& facem deci in aga fel meat programul principal s8 ne furnzeze aceasté
i fact acest
probleme apar
dar veh
‘constata cd nu merge. Adaugati-l in TE.CPP si uri
Giada Tc. dee arate
int main)
startup ())
steing.dialog* samnew string diaiogi
Frese. FL1
w open File "i:
// test: raportenze nunele figzerulus
gotoxy (2,1);
opzant® (ea->ef->stz) ;
getch();
coiete sai
return 0,
SEE E PEE e ee rere Ere ee eer eee cee eeey burmese ssero
ee
HNIMaLL 8-6 Bunsry
TENINGL tp pay 8
soSingpy “tuo 39908 208}
sojarcaigo ued es play
srotoooe ws Hojmp Buus ross eyed gS pray
69 luaRuoD Je-9U1 ENO}
mun yp Udoxd uquiaUr B] jnseac" eIoqseo" YpIOgE | BsB;O KNW uaand ap
[BP ale> BseID YIg'Sa00eUI Je [ape axed suguoU
uns areo sojeseI “BsH[o wre no (pudLs) ,gueraLA, PULL vO BseID 0 EIBID9p aleIng
“punasdty ezvazon} 95019 enop 2199 yo injruorE|;dUoS auNdS wo,
‘wos wasveoe wep 9p “esta |e HugUDU! InuN ParessoNe raquo o¥oUN O pk
fur BO JQ B| 9oRH vaING WHE IS9q"ASIND AU RINT) EISPADE +3) jmIOH
“wunauduay szaiony Bs 2u y Buus sjajs0190
{po 28/9 aumoF a1s9 OU UnON, oresHOREINAIE bacypulUreay
“ploy Bunns rosoj0, Lquuous | S909 6 mut AIP 129
‘189 foyep” Buns ymtoargo wiseaae wep ap :ayuIeU IRU 3p u>9 IOI 9189 tUNY 2p BApSEOU
‘uio}gaig “sOFPIA=Iq0 InzED Wy YepuEWODD: LEMEEPIORU! aISD So9de ap Lek IS39
EEE SEE ee ee ee ee ree eee
Pry ua38
+ (0) Tease~ps) gsuezds
(UT 14x0306
eTT3 Stuy azodax “2603 /
eee eee eee eee cece
dao'L 8 Buns
Po eee ee EES ee eee eee eee eee eee eee eee
(sxeuou gut ‘2, a6u5 |ereuS eet proa
usecge usmaez
(QTeas: ScTep Burge, zeuD
QSorenp burzas~:: Borer Bursye
“QTeasy zu
(Seterp Bura3e~
H(7aaq seu ‘DTZ, zeyD 16oTeTE BUTZas
ortand
35. prety Bura3e
‘ox 38/700" JS Ut
exeatad
Borer orang :Borerp Eurzas ssero
HINIMaLi-6 Buns
infrow mo go wos390
‘wysPIOe a T’ALL arsaS0yop no EWI {6 jHBUUAs" |
op inttos 9-6 1
yop] ieee (eas afouny 0 Reatd 6
“proomma msvaneaareen are (jas tou one
270) Bmp uadodsap wo A, “aso
‘ddoNIMAL UIP Ofeas
8
altycuos 9p a]uora wpurzand 1-6 varity
ps2mn as s4g0 rege
ddo"NIMAL 39°6 Sunsry
oe Par TOES BOND 6
‘Sedno sed 045 ween oS ae230 88 invltim C+ pas cu pas
feaend clase string dialog:
protected
int row, co;
ant wadt
cnar* str:
int checs
| DESCHIDEREA UNUI FISIER
de up text, TEST FIL. [até ce cor
Sa incepem cu un mic
ant sdit_doi int ona)
partriage in pear tree
pubsic: | tle doves
String field( int c, int x, cnar¥ sy; | French nens
~strang_field calling piras
| Gianond rings
woud edit
Acoast linie este cheia:
itera dumneavoastra in acelasi catalog cu proiectele ficute in C++
9 stream
n deschide, haidels si aruncdm o privire asupra Fister
isiere si stream-uri
in cee
feiend clase string_dialog |
‘de gent printf) au fost miocutte cu
re C++ are la baz conceptal stream (flux).
‘cu eventualé formatare, Oper
jerarhii de clase, declarate in figicrul
erie programe ca cele ingul 9.9 (este
Aceasta arati compilatorulu 8 obi
ia field, ca $1
ye donim in aceasti situate
le string dialog pot accesa membrii
Listing £9: T1.CPP.
Hinciude
| ant maza()
chaz name [J=" Martin Rinehart";
cout <<"\n' > temp;
return 0;£6 poubte
= aur
fs axore
fo rey
Qurew ur
> juuoresado 16 1n09
Bed no wed 345 urebenta egMoS trvagion Gt pes cu pas,
unsigned w;
Jong 1;
elrser()
eprint ("\n\r size of char
eprint#("\n\r size of snort is
eprint ("\n\z size of ant ae
eprintf ("\n\r size of signed is
epzintf("\n\r size of unsigned is
epzantf("\n\z eize ef long 38
gaten();
return 0;
LLungimile tpurilor sunt date fn bytes. Un char are | pyte, un int are 2 var un tong,
are 4. Figura 9-3 prezint& aceste fungimt pentru TCLite,
Fig. 9-3. Marin ale spurring! tn TCL
‘SUGESTIE
Motivul peniru care sizeof() este mclus in limba) este pentru ca dumneavoastra
‘él folositi pentru a serie cod portabil care si acopere mai multe platforme hardware,
‘Am utilizat cuvintele chete signed st unsigned ca modifc
car. Efe pot fi utilizate ca sinonime pentru unsigned
CCuvintele cnete ong si short pot fi ce asemenea utilizate ca mnodiieatr
int, cain acest exemplu:
snort ant sty
// tip intreg sourt
// tap intreg scurt
tong 1: // tip Untreg Lung
song ant // tip intreg Lung
Dupa cum am
poate fi folosit cu tip
folosese numat char, 1
long pentru programele pentru calculatoare pe
9 Citiroa figierelor text 8
iLL... £.. 1. SEs Qalsaaaaanauande ondeueusbssusbususssbSesSnsess ~
Cum sa dofinim un pointer
in definitia tiputui FILE apare io linie pe care apar doi pointeri, Si incepem cu
Astersscul (*) poate fi iacent cu numele tipului saa ou
8 ctum procedeaz cei mat ‘ogramatori C)
cnaz*
cpp_styter
vo Styles
Mpornter aeciarat In stilus C++
Wacelasi luca, dar in stilel C
Ambele pozii ale asteriscului sunt corecte in C gi C++, diferent este doar de stil
Puteti ce asemenea si declarati mar multe varabile de un singur tip pe o Tinie
carl, e2, 03s
ant ik, 12) 33;
(/ trex variapile ae tip caracter
// trei variabile ae tip intreg
Dar dac& dectarim doi pomteri? Putem proceda th oricare din este dou stilt:
char? cpl, * cp;
char “epi, *cp2,
//doa pointert de tip caracter
// acelasi lueru, in stilul veena
‘Dac omitet! asteriscul, variabila nu mai este pointer:
char* cpl, €2; // ¢2 este o varianila ae tip caracter,
1/ na este pointer , cpi este pointer
1/ ci este o variabild ce tip caracter,
7/ cpt este un pointer
onar cl, *epir
a,
a
TENTIE
‘Nu uit sf nctudeasterscul act dort un pomter. Epe usor 58 rest st Sb
serieti char* ep/.cp2 pentru declararea a dot pointer: de tip caracter. Fara asterise, a
ddoua variabild este de tip caracter, nu un pointer de tip caracter, chiar daca numete
variabiler sugereazi acest ter
Definirea de tipuri
(Cu typedef asociem un nume now unut bp. SS presupunem c& seret un program
pentru pilotarea navelor si lucrati cu distamle masurate in mile. Puteti defini an tip
Distance:
typedef unsigned char Distance:
Programete devin astfe! mai usor de inetes:gaeueape “7 etareN *s
203103
EEE Ee eeee ee eee eeee eee eeee eee eeee ee eee Cee ere ce erEeP ener
ddoRL 2-6 Busy
sattiod imum worBoyea presiye ojs9 arwutap nud go yma AE epNIoLiy EanoaND
‘nou va1apan na Hoon nN “EY op asopwysap o MUZaNd z1-6 1
nsoisy mugayes gs woua pupo epyid op vide
‘2ypod 28 wisnaoy “arsyp s8ofoo8 v] ANT
SUSIONS
‘io yum ase otros 95 es now soH$yf un ya19 aIs9*
‘hu Bysa0e pugo exunyis wy
{onu wazeoyes saznoyn ()uadly ‘ean9 nuyuod asyp ad ap 49184) nun eaLapHyDs9p |
exetaos naqued exeptusseD ‘a4a3 zetsT2
FC yity feuBas ) ued:
TFsINO yaTIE
smlade no apiyosap Won jf a1Sis wSoow UL MEADS BS BOUDLA MDA BA PLE
SaTaTO naqued ezeprunsep ‘axey aeTsTa //
Cady 3 yusdOs OT EgUT ITE
uTTs"3803, =9ueus [zeus
‘un op fade uN-nULG siyasep y va Joy un
(gpp|duiod v1] nad djopy eaRWawRdOp E01
ly NO mS axeuig aumiSy naqvad
asd 2, 18 (Sia) avouIDs naqUeRt
Impoyy hu wayworeA ay GY wowa|S uN v| AoWOd um oy reHNZAY BD ae ve ‘amsedo
8p pour in 1 sorSy ap aumu un aiuoumBue eo are (uadoy KomoHIgHE| ap woung
crouuiG yourBoue tn "jon 2pRYDSOP tos ta oygeUMdsar0D
yooigo un-nu: otieiedo mseaoe vinsdeD BIOK! 18998 apitout ¥ 9p sxuENy
Tuy opiyosap 2 uid sdzouy wo, px=) tea oeoy won) wos
vp vio “a4 tovans inun eidise yreaisdo ams
‘paysonoud
‘Boep aug yeu 350} 1 se go paso a2 9 8
ONES tiqusew B] Sag0e Hany “LuMTNS suNs dh S998 9p aiaqqeiTEA,
jab © PHSIe vamNID v| ulLIeR ws -aNEBaId mseeoe ECG,
42164 nun eauopiyaseg
weuquiog y syP0d wSDOV
‘afuyaporopu dup
ny y aveod einer mseaoe poyeoM
fisa jntmeiond “oreU guOH| Bulg HPO puEAE gapadAi No au
TUV FULL Ro wunw (euysps) wnUFEpaxDew op youre.
uSaOnS
#4 qutoa
snutog snd ap 2qqeima woe wsE|DOP WEAN
sautoa
fpxoosA UT
fpxoos x 4uT
aonz3e sepeds2
pour aoe ut euyap ayn,
rad areut gion) no dou aus suImu Joun warwatqn yreaIaBNs duodxo NMA
auew"geeTe seus wes //
ousugeeT,touD iTnzeo uy Te PO//
xeqoeaee dra //
ap zeaured un 0368 gue 36eT//
roursig. eyo zepedia
geyo 303 pumeasur Sutzag //
zi au tbuTZag «7eyD Tepedhy
wieus gumeasor utz3$ //
_pappo row wuvoigrusas 20 a
nynosuioise @ 2xoUNs 2p 44.5 IMS a4e9 UL AIdWOND UN axss dn smUN wasKULFaCT
seounyetg wT peubrsun zovedsa
“2oueSiC] smn eH Hiequuryos Ws 2189 230]
yj tuseonvauump muesBord mdepe 7 BS atMqan, 99 8999 70,
‘fotueysyp ga wureas Cat Bs aIN¢aN “ULNA ap HeUEdaP EA DUBS
+ sbutureues7serpu sourasra
eperoatsy Seq qu souvaeTd
ie
Ber ope aI S
‘Sed ns Bea oD UHETRAN BS od238, ‘$8 invatim C+ pas cu pas
#ineiuae
#include
voia startup ();
ant man (}
" startup}
string dialog’ se=new string dialog!
eget £1
"open File "i
PILE infile= fopen(sd->sval(), "xt":
11 vans: raporteaza pointersl ae #isier
" sa~raval (),
angle);
Af (infile)
Eelosa(infile) ;
return 0;
Cina executatt acest program, ar trebu
pentru vanabila FILE®. Executa program
exist, cum ar fi "\noisuenfil, Cu un figier inexistent, pointeral va fi zero.
AFISAREA UNUI FISIER
fereastrd pe
@ memore
Pentru a afisa fii
napa in ea cea mat mare linte din fisier. Avem nevoie $1 eo cuing penta ci 0
registrate dintr-o dati. Zona tampon este destul de simplu de creat ade cite
tee, aga cd nu va fi prea are
2Citrea figierelortoxt 238
Functia fgets ()
Funeia de ctie este fgets). Ea este apelati ate:
foetine MRX_CHARS 1024
chaz inbufT MAK CHARS |;
fgets{ inpuf, MAM_CHARS,
rgument(inbuf, de mau sus} este zona tampon care va fl accesati de cltre
In DOS, inreaist
carriage retum-linefee
Coalalti exceptic se refera la sfarpitul de fisier. Dac fisirut a fost
ia fyets() nu are nici-un efect. ( Putefi desigur reciti datele din
* (rewind) fie repos fisier)
Crearea unei casete pentru afisaj
Ceca ce urmeazi este mat gren de expl
Drezunta partea de incepult a unui program care citet
decit de utilizat, Listungul 9-3
i afigeazi text
Listingul 9-13: TE.CPP
7B.CEE-~ Tiny Editor
rignt 1995, Martin L. RinenarcHa8tHF vad 3,upTaGg w
(eresutis 31
Healy ‘OTeasceps puedos @pOTOUTH
‘ sDNTOUTS
sPnToUrR
Beara sed +49 WRRAMT eS ovediatog* snow
sans:
ant row;
SA invita Gr pas cu pas
wile (Ite0f (inline) )
gots (input
gotoxy (27,2
eprant# (nb
MAX CHARS, 2nfile);
geton t+
Geiete snow fils
FoLeselinilels
saturn 97
Executali acest program. S-ar
situafia de eroare pe care o vedet in Fig
8 ucreze exeetent. Ar fi posibil
964.
8 Citireafigterelor text 243
SUGESTIE
Puteti utiliza F3 pentru a deschide si edita TEST.PIL. Este foarte convenat
veti descoperi cu aceasti ocazie 9 mic eroare fn TCLite. Chiar dacd nu um
celelaite fisiere, cind veti executa din nou programul va aplirea caseta de dialog cu
{intrebarea “Source modified”. Raspundeti No $1 contunuat.
Pentru a preven o astfel de eroare,trebuie si ne ocupim putin de zona tampon
din fister. Ne vom asigura ca fgets) pune intr-adevar ceva in aceasta zon
inie apare dublati deoarece nu a fost scris mimic in zona tampon, asfel c&
imstructnea de afigare a folosit vechea valoare a zone) Putem pune un zero pe prima
poritie a zonet $1 vom testa daca el a fost modificat. Listingul 9-15 araté cum se
procedeazi.
Listing 9-15: TE.CPP
/ afisarea flsieruiui
Gialog’ snow fil=new dialog
sc->eva(}, 15, 3, 75, 2302
int rawe4,
sinbuf=0;
unihe (!fe0€ (infite))
fgotsiinpuf, MAX CHARS, infile);
Af (input)
1
gotoxy 117, row)
printf linbuf) ;
*inpuf0;
geten);
‘ultima line adaugat
Pot si revin
excelent exempl
aceste exerci de citire din‘enype jmyeuue
vege 3exesur inraTewtue steumy sonpeayer as //
‘foppe-Teurueaoxde-reurue3xXeUc-peppE
feppe = TeuTue yeuc-purzeTIe
ToUTUSaxcuc-BurzerKe = TewTue“aKetc-Deppe
{BurgeTAS = Texrus aeade-nappe
(poppe yTewque “Burystxs yTeurue )TeaTue"azesut pros
syiTRAp TEL ywoweuc~TeUTUE™ ETT
‘(reurue wou-TeuTee ye2t3 ,ToMTUE
Tewrue“asrd rewrite
freurue™qxeu jreuTue
yeurue ron33¢
208 9 To Eenp gevoinn ai0>
(aniogyy gy fou soem un
euniugiyy aanp 31st
Yet aromored ansed angie yasvaay “acura aso Ezearon aIe>
Joveurerford wordy ssa yoodsp wood Woue=¥OO4 IG BINGE axe EU]
Hfyooq7etya ) errum
Iye0g” yxauc-yood”stuy ~ yood™eTya
ff etasac-voog e793 )33uTz4
HH fe 09
food 38273 = Hood stu3 «x00
| yood"3e273 ,x000 )seT973 ptoa
“st O-AUIp JoysRD Jom ofA wc
frougne 2249
rerata eu
400d yxoU ¥00
yoos soars
© wipre 48 no yIe; “fe Paap yZeeULIN aseD yeaUOWD
aaey, P92 vayBaUdOI ND aqUaWA;A ap BSI O 21D ¥
aynjugjyy esr]
anagii 20 16 81)
wp nu goed
sOfORKo3 Bae
[nqeceu “enzo wee unde BUS 127
aLlininy1N) 31sr 30 ysv19
‘S000 1608 29 Fegan
qoanp andoau
wie Foe] “2UTyecoU no aakeSIEyS 28
a
ie or TOisIO FMD S
‘sedrno sed +49 wipienay eS wwe246. ‘$4 invatim C+ pas cu pas
‘Aceste pat instrchium) insereaza un element now intro list dubiu inlantat
Inserarea se face mult mai repede decét dacK animalele ar fi fost inregistrateintr-un
vector, [até cum arf araat progranul in acest ea:
animal animals! ANTVALS];
int Jast_animal;
void insert_animal| int existing, animal* added )
LE ( last_animal < MAX ANIMALS
for { int i ~ Last_animal: i > existang; i--!
aninale[irilmanamais(il:
alee... // exeare: nu mat existe aninale!
_ copiaza aate din noul 1s animelus existent
inserarea uni animat implic® mutarea tuturor animalelor care
tablouta, cu at aceasti operate coasumd
timp. far dacé animalele sunt in vector in ordine afabetica, nseraea antilopet
9 va dura mai mult cect inserarea zebrc
Din contra, operatia cu lista inkiniuité se des
depinde de 0 limiti. predefinitt de genul MAX_/
sufctenté memone RAM, dar aceastécarint. © val
Alte liste inlantuite
Exist. o operaie care se face mut mai rapid fn eazul
lementutus de pe o pozitie dati n, int-un vector, gsifea celut de al 500-lea anmal
face influ urmator
animais ($001
499 de animal
Spee exempt, 2mm Di
element, Aceasti legiturd ar putes si indies
distanid mai mare, sirind dect peste me
element precedent st unmitor se pistreazi,
Folosing 0 astfel de iegiturd peste 25 de element
accelerail.
9 Citireafsiereior text
267
Dar pe misurd ce sstemul de eit
sistem de legit devine mai complex, se mdzete
necesar pent sabiliea acest: exif det vn comromis de care tebe Hac
Liste inlantuite si editoare de text
Structura de
umplementarea unt
ith este una dintre cele mat des folosite pentea
EP FE- EH -PPe Here See eH PPE
Foare freevent apare necesitatea de a muta un
stergere 0 putettgindi ca 9 mutare @linilor ster
(inboard)
Inserarea unui grup deaa TTgaL a12a555 //
StUET eMTyTN e358 FISeEDE // OsTS
oe
Gu\, == dove, 21
fpeuetsakeadous, 7605
(peg /ax03] Adore
‘[pewet] ze nousaxeR
*(qan)worzgssueT aue
serianesd-quou
femaaaxeuc_aozd
fxeuc-ourT eaze=xeu
fourt seaze-aard
(eury zeage) z7
(eq yreus fourr"zeaye sowsTmem )ouyTuow: seteypme
AH-TEESy,, conToUTE
OPATOUTE
epn Tours
ATeUUTE “T UTETER ‘EST AUBTAAdoD //
sonypa Auty ‘sesso poqetexottz —-eayTiese //
dd USA 2-6 Buns
Jnuoyonnsuoo ‘ortomy ws wood 18 gg", 19
OU SUU0D £1-6
‘autuoU jnsoyonaysuOD
fame aseia vaun jnjoa veInosep ue nu y> sop “ore tou LNsONy ay
EEE EEE eee Per eo a Het oP Seer
wersan 3763" //
eurt peoy wmngex) ()eu;TY seUTTeE
+ Qetrzuom
(53 sauna )ettsuen
rortand
fount Treay ‘Our eeu yeuFTESE
torre ax03 OTIS
‘"peapeaosd
erzmeu seers
+ + genta
Sq yzeu ‘eurD ease seuTTwou )ouFTuDH
fqxea yeu
igmeuy ‘A028 .urTson
jrortand pyzqwem yey // suTTWom 3onzas
ameuouns “7 uTiaea ‘g66T aubtxhdoo //
zoaTps Mtg ‘S9SSETO DeIwTOs-STES A TEEM //
HWTIsaL 791-6 Buns]
spruygop salvar
yieiefoaq, “asejo.-zNOP
dd" WSL UH
HEVSAL wen yowe s9x6y now uneagw, uns soyase}9
murzaid 91-6 mBunst “sseo;RIN
8 WIP KOT ep o1UY] O aTgD aTeo9y
ar 919199190)
sojeyoaigo erijuyeq
co axfodieys
‘aygwuows “ese
ad tian,
Bunjueyyy eysyy o-sUY INN}XE} eaINI
‘armupa ap ininseoaxd e gzeita ap uuo|qosd pund nu es to apadar ap
suororgns 20nj 2s arfesodo wusvoon i sBrgp ewapow sjasvore|roqe> ad “TIOY,eP 210H| ©
by vaznserdop oso anne ap indsaon no onto! as mu area afeiodo wanBiNS
hia Yea) Loja BOHR
Bens Sed 339 ETE ES are250 ‘Sa invatim C++ pas cu pas
Constructorut memline(0 are dow irt, selectate prin instructiunes
else a acestei instructiuni se executi cand argumental aftr. ft
creati o linse goalé ce va fi utlizata ca inceput
‘Urmeaza un mic test pentru dumneavoastré:
// tn constructor am scras
prev = next ~ NULL:
text
prey = next = text ~ NULL,
latorul despre a doua forma?
Putefi binui ce va spune com
confirmati-vA banutala,
pointer, dar au putei face at
Mesayul de eroare se re
sau far, in fumetie de mod
h po
probleme eu acest luoru acum, Clin vei trece pe alte sisteme C++,
multi memone, car va trebut si vi alee
Cealaté parte a constractorutar me:
Prima data ia valon point
semlineintre care a fost plasat
copia intr-un now e suficrent fie
findoi vor indica zona mbuf. Este necesar si
2 Citirea figtereior text 21
Destructorul Memline
in pacate, nu putem ined si testim constructorul. S& continvdm cu destructorut
care va fi tot in TEFIL.CPP. Un timp nu vom folosi aceasta dar ea este
tingul 9-
Listing 9-18: TEFIL.CPP
" pemline: ~memline ()
: delete text;
af (prev)
prev->next=next;
if (next)
next->prav=prev:
// sfareitul iui TEFIL.CE
Destructorul sterge vectorul text gi apoi reface legiturile la obiectele memline
Constructorul si destructorul memtfile
Pentru a
este prezentat
strul un object memifile, aver nevoie de 0 finete constructor. El
tingul 9-19,
Listingul 9-19: TEFIL.CPP
menfile: :menfile( FILE tf)
text_filestt;
head line=new menLine (NULL, """) ;
menline* curlinesnead_line;
char anbuF[1024);
*input=0;
rowand(t£))boreTsburz3s nousve ,SoTe yp bLTsI=
Qurew aut
Isweuo" sat) gnqvt_ eyo
2201 SHvHD Ie eUIzeDe
“(yangze3s prom
vpnroury
aonrourg
epn7SuTy
cWerigis > eonTouTe
‘ eDnToUTy
spnrouTg
axeweuny “T uTazeN ‘cee: qUbrzKdos /y
sorqpa Auty ==ga0"3b //
ddo'au :02°6 Guns
‘dsp SIMDsIp WOA puyD 1oIe Weso! OA “axsadeN opunoNASUN so!
1 Ingan vA Tore vo ayS=yuIUTTaI au unMTONLAsUr © TONE BAR so}ONRSDP a
‘aatoadsal
‘aygiesedo weazityn area sjaumford wy sede AU wieledo foun oe amtiuemaydun ap
‘yMTHP 9190 ad FEINOLIO azeurEBOSE UE Wino BEI au suNKioNASHH ASEAN
(oui
1UBIND IOBIQO UIAED 199190 INON,
fa 7991go FOU un ZERAIO By
H{ gnaut ‘eurtano Jeusrmew meu = surrane
smysvane a1s9 ezeg 9p vauiionnsey
ND 9p enEIOd
‘amsaig} ayn
Hy BA ep “tun
SunURIU aes] pUEZHTAN MyGMAS axreoy a0R os
"us uf Jovy WSejaae BSE WOR 16 RUPE HOA PIN
ues900U 9189 nu Bo aqPOM SHES EISESDY "yMINASOHL SoIpu BS |-npUEDR
rusqurod gzeacyyerusves wijotny icky ap ep “Zuaq foun e asBuIgogal ap
‘0 wzeale8ns afowN FFOIGLS Ws BMUEP avioung rye 0 ays> purmar wrjwadC)
1uose ap gsins wiseaor unum eneaades vod
‘sue oun veuezt|g “eKNY YoduWe, wUOZ PuRAE eaIENODXD UMYOL eA HA] YONEDA!
380) 8 ammo j99 sp "sg BoM BA dra & anes nua go [IqUGOIg “ToersoWE 36-8
‘aun 9p tesodo yop s9j90 ynanuUoD “yrugors uodure) wuor wsMUIS O EIA W
‘ostp 2c op
YON
we2ae 2903 Hound
se nw dey aq
ind es uSeIS iy se “equemUaaL atusONd HoL0s
i Gnqut) toduae} euCZ OK ysHYaUL eauaMAse ap ISO} W
aaisy up ao
ado-ThgaL THT TOaTETeIS /7
'
(Qerrsmoe: our ruer
+ ((orss73xe9) 3003 )) OT FHM
fomsnaury,
«(gnqut ‘euyTzno yeuTTueu AoUSSUTTINO
dyesza
HH (gnausei) 3+
S(orsy ame ‘yzoT /Enauz) S985
ee Wa oiaay eID S
eIno Sed v5 EEA ES za254, S&invatam C++ pas cu pas
"test fil "
"open File“).
FILEY anfile= fopan{ so~>sval(
anti.
PEint£("\a Couson't open fine"):
menfilet sfenew menfile( infile),
feunee| infile);
gelete nf;
return 07
care apeleazi constructorul memfi
aici, CAnd veh executa programul (Ctrl+F'
wnte, Dupa ce att furnizat m
at vel crede ci nu a ficut absolut ni
‘Acum va treoui si-! executati eu ajutorul depanat
ccomanda Inspect. Urmati procedura urmatoare:
2
PAS CU PAS
le aceastl dati folosina
1. Poritionatt cursorul pe "si apdsati F4 pentru a executa
sma Ia aceastl linic, (Apisat
wou. (Vrem
sat dup ce am recut de
2 ceasela Data Inspect. Se va derula 0
ceasetd cu eticheta" Inspecting
Putett veilea valoarea
dvs. vor fi probabil diferti
‘acum Ia object pe care sa poi
ca in Figura 9-5.
9 Citrea fisocolor text ‘
de ai me, pointer next, care ebuie st aba valorea NULL.
me, . sb valoaea NULL, Pr
avs. TEST.FIL ar trebur si fie afisatt acolo unde este textul " partr oe
lg. 9-5. Observare von obit cule fn rp esta
Pentru a testa acest cod mat
onvingitor, continuatt ca mai jos:
®
PAS CU PAS
a caseta Inspecting
rmatoarea inrogistrave
dumneayoastrai, :
schimbandu-se pe masurit ce
druia o alt caseti Inspecting... doar c& aceasta va inspecta obiectul
Trageti de bara de tity a acestei not casete Inspecting
prev din a doua easeta Inspecting.uo rouge naysou rareifout syeuiosd eurusey vernd v Rud
'§ lp Ciuxa enouny azdsap anus ap asap semnosip ary
{f S200e ap mou foun wautsofOg Wud ewA;GOx
| [nseo0e np ouIn|qoud naw We
ame 9a Sopp wse9
9 waning wid yndsout
voooey pone “NAR
Sea HS we aso UREN RSAfisarea fisierelor text
‘Tiny, in care vom face afigarea pe ects
Incepiind cu acest capitol, veh
timp invatand, de veeme ce
acum v-au fost expuse multe din
bajutut C=
ins lucrun not, precum:
a, dar nu definirea, nume
folosirea de operator’ de atribuire compusi in C++
Fecunoasterea |-valorilor
Asadar, s8 incepem!
‘vom pistra deoarece este scurt gi descrte sufictent sco
are dowd componente:
mjoart fisiere text
10 Afigarea figiorolor text 259
Ae Atgerea Figlorolortext 0g
de derulare st disparitie, vom constata cf ele sunt exact obiectele necesare pentra
afisarea figieruiui nostra (de fapt, afisares
fist
D
S& Incepem ca 'u un figier antet care confine definitia claset. Se
adaugi defi ini 10-1 in fisterul TEFIL.H, (Dacd se incearei si se
compileze acest fier, cu Alt+F9 de pilda, comanda va fi ignorata)
a clasei de ferestre de fisier
Listing 10-1:TEFIL.H
/( TEPTL.W file-related classes Tiny Haitor
/¢ Copyrignt 1995 Marcin b, Ranenart
class file_win:public dialog
protected:
‘memfile* men £41;
meniine* top_line:
memline* cur Lin
int curx, cury: // pozitia rellativa in fereastra
int ins_mode;
public:
file win (char* file name,FILEY tf);
* procodaia de definitia claser dialog,
problema ar fi rezolvati, Ar fi suficient s& adiugim lina #incinde TEWIN.H: vor
face acest ferul cu extensia CPP.
‘A doua eroare, pe linia memline *top_line; © si mat mteresantd. De data
aceasta, compilatorut nu ste ce este memline. Este adevi ar uita ceva
scoperi cine este memline, dar nu procedeaz’ se poate atunct
ri sau clas i(AU NINE SPOTONTA
sontauyy
SH*OTQES> BPRTSUTE
aorrpa Aurg sessets pozeTs2 OTE ado" Usa! ?
dd Waal: OF Buns
Sojep tojarsaiqo wantnnsuos wed
diy URNS aforEA Wp wun 1o1U FAdaode MU WP Foy 1m|90IGO WIP HAN a}
YevaAUOP [J “dd” HAML % WEnepe yroronnsuos murzasd C+]
‘owauunae naulad Lojea ayeoipur Isog ne Tyswade ere aC] “>8%q
raseo pruoroniasuo> vy jade un 2a%j 9s BALIEP iNjnsoIOMAsLOO © anu PWG UL
(oo -a91 "tor ‘aeua ‘stuaesea
(aeua Aproeds “sTu2 AyTosds)ATzept :atzaD
‘unuod sey ud ojuoyen wzeez1yNA
‘Bnow © MsRsUoD BS WINE HNLIOG, “BSA
(eur sta sseq noua eseq
‘l9s mend aseq ese 2.
Igo un nnsuCD w napad yO yuLasUY LISeZOY
(ov'gageuyua Teuotado “t=tourua Teuoqade
‘aeui Aytoeds “stu1 Altoedsiesea: :esea
maorpuuin 3s0§ © [n9PI20
Joqoruystoo jifuyep 380} Ne uno UMMA! eu YS “2198
1 vintEd POAT UA UIAL 2]y rase}9.|muosoNsUOD
‘areuorido aiuounize no
© 8 ap aqureuy “puny ured on
Busvere) 40184 309/40 INUN eosINASUOD
“yntoyonunsuoa wets BS “UN ay INDAIGO ATULJaP Wwe 99 FANCY
‘10D 1upama aI80 Jf BO HIodoDsep 119A,
BUSSONS
bigqsoo8 sian yseI> 0 axSeujap 26 aBS BIA 28
joy 1 27004 ,A|IG,,"VoTIaWase ap
SUNG Epil ap wore areod Mn
Borer oFtend
Um otis SeeTS
soutien 88810
forrsmem 62819)
azeuoury “1 urazen gs6t a¥5tsAdoD //
xoaqpa AUT, /SeSseT> PeqeTE2 OTS —- W'ITSRL//
Holga:2-01 6unsr
~ = 7m surruou //
, sttgueu //
exeoayuan STHTUTT eTTaysod guns wRDe //
supTuew sseT9
fer tymom es0T>
oti9s won ‘(nie
ys igen eA
5 WIA Eq,
ye 18) aswyo ums aurjwaw 16 aiyuiou vo ImuoreyLauios wrgWOEU
oueusseto> sser9
we pie) Jojauerey BareByy OF
Sens Sod UREA ES 08%262 ‘SA Invatim C++ pas cu pas
mem £ilennew momfile(t#);
f120_win::-£11e win()
c
re
‘homiine: meine (memlane*after_tine, chax*txt)
ES ee ie cee era ee ee ee
Antetul specified erearea unui object file_win utilizind dona argumente: un
ume de figier st un figier de np FILE. Acest object contine un subobiect ai ciase:
base, creat cu constructorul I ferestres ae dialog
tar dimensrunile acesteia sunt mat mart dec&t cele_umy
‘Dupii crearea acestui subot
popup care este la rindul si
inseamna transformarea figierului de pe dise intr-o lista inlantuit
Destructoral va fi seris atunes cAnd vom vorbi despre comenzi de genul exit sau
‘quit. Acum ne ocupam dear de crearea obiectelorfile_win 51 vom face cateva teste,
Teste cu obiecte ferestre de figier
Listingul 10-4 prezint& nou! fisier TE.CPP in care se construieste un object
file_win (dupa creare se face o paul). Incercati AItSF9 s1 vedett daca puteti si
‘mesajele de eroare
Listing 10-4: TE.CPP
40 Afisarea fisierolor text ane
‘SUGESTIE
‘Un simbol nedefinit fnseamnd eéteodaté o simpli omistune @ umes dect
cel mai adesea inseamnd af uitat si mctudets un fister antet. Nu vd pierd
alte erori pani nu metucey toate fisierele antet, Uitdnd wn singurfiser antet vet provoca
co multime de ero
Cw TEFIL.A inctus, programul poate fi executat si va fi afigati o fereastxa mare
sumiiaré cu cea din Figura 10-1
Af (infile)
Suntem sigar pe directia bund, dar nu sunt ined multumit de rezultat, Va trebur
si facem céteva imbunat
Sa facem sa arate profesional
Sa incepem prin a recunoaste
litlu de fereastrA. $3 facem lucrurile ea
mete fig
yea incepand chiar a
Un titlu mai bun
Dack vi ustati la ferestrole fisier ale TCLite vetr vedea ste scl
centru, cu liters mart, Existi de asemenea cdte un singur spatiu la ambele capete
Sa faver 51 noi la flU((QTenecopay esters ty noumeT aya «xeHS
ATO 90m
2H GROG. 2UTONTE
Ta-singd,ennrouTs
er maxuorerntooTh
eon Tou
e0n Tou
ewrornos> 8pm
qrevouny “1 urazeH ‘5661 WY8TIAH0D,
Z0a7pS AUN, Gd9°AL//
‘dda 9°01 Buns
480 HL 90 Pue /?
tyez umgex
{ (G24) zedanoyadoy
(44D do,tTeaeaed9) 203
{Go ,xeuD
yawm exeayt Uiaep oTexeaTT 23803 UNDP //
c-wotesex)
5 ep ays Thou //
paneeneete
oex09 oupuzey of we oTncex3 9x0708
eqesoate vosaed esegoz es //
fquet] eyo aeuaqea ,zEU2
‘getau-gau= wep 3uF
10=¢ee
£(gqut+) yeas aeua
z03008 now EnAzqUy JRTNEFS B ETFAn Beare wzwrdos//
games yoy © Terstr Texts //
freon (ze<(tem) ) FF
tone
>
npaeds ep atxesyp xegezes ThegTn exqe> ‘yodear //
(raaeceqe) Tye
ayexess eT ep pusdeous // ¢ (rau) woprasetauazert
teoona (ze (TE
nyaeds op aFx05TP Tua ed waneo// (rey) oT rus
FRTRETS //
qnandeowy no eqsouzod os // tgmenetam
‘Tyqede op OatzOx5p //
erexeaoeren eT Txe2UTOd // fede "Tq ¥xeHO
tntaeds op 47z075p ZeqDeres TmTATA vt ‘argeas
ep aysegyp xeaneseo Tmutsd ep oguyeuT nyaeds um wonEpE os
PTesase
aeopsepeu tarngxeg e 8740s o wT zeqUTOG um soTEOIUT 4/
y
(ax0g aqatuo)oxqoTgTy Ace 4xeu3
4 (osungoN™} eaAazosznoaes
(98013
“(aq eaLTHN) T9385C03
()anqzeae pron
dd" 9-01 Buns
SI] apan as wino We “ga"aL wt UesBordgns
soon wEENEpO YS WO! oO nAuEg ‘ayTO] 86 FUNWOD o| PS avo 2215
= ras J0TeI6TB EOTERY OF
Beas Bad TS WRBATT ES 9%266
file_wint fwenew file win(title, infile);
delete title;
gaten():
fclose {infile)
© data introduse aceste mstructiuni, s& executam programul si si vedem
rezultatul. Veti fi de acord carati ceva mai profesional
Figierele text au nevoie de propriile for culori $i chenare
As
operates de et
desenare a margi
dialog din pre:
ine dac& am putea s8 schimbaim culoarea ferestrei cu una mat potrvité
we de text. Ar trebui de asemenea si putem alege difer
3 ferestret, pentru a distinge ferestrele noastre de alte ferestre de
care, Mar exact, nu am
Si dim un exempla de schi
are impact asupra programelor deja serise:
/ée#inivie vecne:
woud foo(}
ant lel;
int i282;
i} Gefinitie noua, cao mai mare flexibilitare:
void foolint il=L, int 12=2)
ori) mbunitaterte
Sa Invatim C++ pas eu pas
40 Afigarea fisierelor text
SA presupunem mai inti c& am imbunatatt fereastra de di
optronall sdaug’ stiluri de desenare a chenarutu
‘Vom avea nevoie de aceste Iucruri in constructor!
i cutoare,
Listing 10-7: TEFIL.CPP
Ete)
Listing 10-8:TEWINH
J) Wi wmite on cyan
Black on cyan
define DIAG_CON_CLR 62
Pdefine DIAG TIF_CLR 40 }
{fax yellow on unite
ine FILE, WIM OUE CUR 136
fee // waite on black
fidefine FILE WIM_CON CLR 7
define SINGLE
Haefine DOUSLE
Prin urmare dialog pentru
‘include param:
Listing 10-9:TEWIN.H
class dialog:puplic popup
protected:
char’ title
public
ialog(cnart ttl,
“ne igeiS, int tp=8, int rtx65, int bt=15,
char* brde=SINGLE,
int oc=DIAG_OUT_CLR, int cceDIAG_CON_CLR)
dialog)2s WBUEIS %| uSPIdap ayeod 9s BISED:2
vorwsye vs pf pupae “upei9p ap aizas
nu gs)
ode 91106 wo, "wese9 u
oy Pewadiqe “IttoAD015
8 eBlugas
spaapes
Imaxe) vapoa nox pugo sown yo unis UNS,
uaISId NIG INTNLXaL VauvSI4
go tpued an paseaiey uy sOIey
‘prseaiey wyswO9e UL
Wwawioul q BojeIp wseIo asaso4ay aso
JoiSyy wip rnyraxoy waresye ap 1S wednde au.
‘sureioidgns a1reyojo Bicnse yoedult Un
90 weed aiso um ay SoqEIp ap enseaLR
iSes08 1D
Teraea)gauras
£183 ‘o0Ta+3T)Aacou08
{(20)a99paxe3
fey wora-T+at~aa)=0073 ue
next:
‘are pondere mick in ansamblul_tutaror
_ dar trebuie sf fim atenti si nu sini
le prin care trecem de la o fime ta alta
dincolo de stats
sunt de fapt urmatorele:
ig(cl->next)
elecl->next;
else
Instructiunea break termind un cielu care trecea
Sunt sigur c& ati recunoseut si modul in care programatorii_ scriu prescurtat
preferand linia:
LE (el-> next!
Timer
ie (el-snext'= NOLL).
ne FOWStoptl; rowsDt; rowr+)
snow_Line(xow, cl->texty:
if (el->next)
ciscl-snext;
break;
le din figier. Trebute s& mai rami
uurmétoare sar peste aceastt
contrar apar probleme cénd stergeti toat
alfel ti ith se pretde. Instr
dupa ca mat exist altele
nemline* cl=startiine; |
i€ (fel-sprevi —// 4a Incepatul ima mentite
t i
Af (cl->next) (7 Gaca are cel putin o Linie
eizcl-snext
so.Afisarea
{nal doiles rind, shaw_allQ ar putea fi apelatS pentru aafigao Tinie goal.
esas des nsteuotiunea
[iet-snexe)) (/ ta starsit
(let-stext) se
Ati recunoseut din now
£ (tet-rtext) .
in loc
LE jel-ptext==NULL)
alte fucrury de Ricut: trebuie sa retinem ce finte este
Listing 10-42: TEFIL.CPP
_bisting 1042: TEFILCPR
#ilewin::-filewin()
ds th
void fie wins:show_all(menLine* startline)
online ci-startline;
At (1et-oprev)
«
Af (ci-snext)
eleci->nexts
y
top_Linesely
textattx (FILE WIN COM_CLR)
text) ee (cl-snext))
return}
for (int rowatop+l; rowsntm; cows)
show line (zow, ol->text) 7
Af (cl->next)
‘eleci-onext;(238 .zeuo ‘nox 3ut)euTT nous: suta"eTTs PTO,
ado Waae-0F Buns
Bs 89 Sumy void aiso |mxe} HAWN Nl ROEP WINOE WpGadnU! ay ~LHUEIS axne> areseidap
SOF NE AM o]eIK) a1s0d 16 [MUL ajanXa} aYsed HBS we UAWOUT 38308 Ul
‘nucianu ap naif oureoad au2s e e)
‘© du 1Sejo0e uy 2189 sep ‘eaI0p eA 29 9HN a1DOd aIsq| “O-TIAdE vam THOUNY
eA ad azaonT FS axzjade forioury onuad ¥iuUajau uLad fade uP) “wULazaL
wud sojaquoundie v auominsuRs 9p “reWUOUN|aNs wstuBDON UN BERAZTUINS +43)
‘98 nit auotune eLsqeumea ([oWw ynogy Uwe dN> ve) AS ad
orunu 298 nu
Te rugwow men vsaupe ae ap arse v3)
lund ysrusuen 9189 ea “otjoung 9p Jace ul
‘pauiyos
quoumnde uiaap
" yeuea 0 pUED,
“orjoung wiseooe ul yjeoo} 9 vO. pUWULeSY Sy “TuyeUIERed un 9 4s BligeUEA
‘euoT-vet=u6T
FRUDTHa 52738
umaez
(zeuot => Wet) 37
(a3s;uetaascueT aut
nga wourSuny wyeysnfe ays 8 sapoeIvo Ise
TMU Wea XS} UL Ise seqDEIPD S29" YEP
‘ou roume mnmnaté juygdeD ap ofoouyp 2189 IWSGe Y,
WA 90 DUI
‘Bugis ane
0g
axe B pESEIGOP
you “ERSVOIAY LWSEIKaP ISO} v asso no ssmIoEIED 9p
2 enseaisy “ore 2989 3
‘magumu eutiuos seu, (9SH}9 fe SNOUT Now TuqUIBLI UA “Ze; N
apeco9 o 3s Hf inns vouNBuN) WPDKEDAA BS ATOAAL 9 “Ney @UNUOD LEME P>EC]
VION
ovjouny WSeaa08 ty Wines TuNAonISUT JOM
‘areyygos) mueureifosd touSWSUE sopLaULG v pjoUns areysdsa)
ura 199
furngex
(ras, 1) at
ang] ap oTaHtu wore nu “PEE ais0 B91
in aasa yruté wawno nu FORD
‘ap jos tHoUE Bs Fore HF INgAH eA sep
(oa pugs vj axa dadod e}
‘2p o-uaxsow aze> BojeIp wse]o x] ap yatorSou oso yt "yas 9p) aIaL
e waquow un aise 3] eyqeUEA ‘Tor}ouNy yoUIEIEG UNS AIS KE MOK 2k
fcxasygaurxao
Fimo 14331) Axox05
juts
‘sumoy nenyjonusar ojazeeyyum ad wzvazog as eHauny JoLO|UE zw WL HSB
ainBuls joun earesyy
-aremiiv09)
ty minasIp wos 0 wise0e 9g “(JauMoYS ap apureap Ce Moys Broun
(pe,aeuo “SUT "ae5ge yeuT Tom) eur Tweur FeurTuoH
«
tereera
sete
ae "Peay 26|aISTEY STEEN OF
‘Bede sed 279 ween eS we274, Sa invitim C+ pas cu pas
de (teen)
returns
int lea = etrlen( str)
4#( len <= ichar )
stregtr+lena:
Len=Len-lenaz;
Ant toobigelen>twidy
char save;
if ( toobig )
«
savest (strslwid) ;
*(streiwia):
>
gotoxy( ft
eprinté( st:
if ( toobig )
*(atrelwid) ssaver
,
nemline::memline( memline* after_line, chart txt)
$tergerea ecranului
Ultima rutina suport pe care o construim este una care va stetge ecranul. (La
zare a rutine! shaw_all() vom serie intro fercastri goald si nu va fi nevoie
‘de niet © operatic de stergers. Dar vom utiliza show all) 3t ins
depiasdim fereastra in sus sau In jos; de data asta e necesara stergerea ecran
‘Rutina aceasta este interesanté doar sub urmtorul aspect: cur sd testim rutina
clear() daci ea lucreazi asupra unel ferestre care este deja curat!?
incat si steargi un caracter
din partea creapta &
reapta va dispirea tre
Listing 10-14:TEFIL.CPP
void file win::clear()
Ar trebut si
(Dacd nu, seri
40 Afigarea fisirelor text
i
wid] =0;
E rowstoptl; rowchtmy rowel )
gotoxy{ 1ft+1, row)
eprimt£( blanks 7
>
Banke (Iwide2]=* *
meniline::menline( menline* after_Line, chax* txt)
‘un comentariu care si VA reaminteasca si facet testarea)
area rutinelor de afigare
‘c& avem cutine care func!
puter grest orrednd,
‘Mai intdi si compietim figterul TEFIL.H, ca in listingul 10-15.
Listing 10-18:TEFIL.H
Listing OMSSTEFIH
/) TRPIL.H ~~ £ile-related classes, Tiny Editor
() Copyrigne 1995, Martin L. Rinehart
define TRUE 1
define FALSE 0
class menfile:
Glass menline:
class file wn:public dialog
protected:
int curx, cury:
ant ine mode;
public
filewin| chart file name, PILE* tf )
// pozitia velativa @ cursorulu
eazH, 58 le addug’im definitilor de clase s1
vim rutine pe care le-am testat, dar
‘continuare. La urma urmer suntem oament $i)aype Pros
xesT> pton
{x38 .zeyo ‘mox guT jeurT "MOU DTOA
ffeuptageas sSuTTusn) TT=E"MCUS Pras
Qerwmerts-
(3a .zarg ‘eumreTys wae0 UT OTT
“Syrand
epoursur 30
mqngoemno ® RATaRTOZ ETaTZOd (/ — :AERD “HAND FUT
sqUTG ,zeUD
spTwT "aRuoT UT
supTisns .surruau
eurt-doa jeutTueur
reTy-wom yor rw
paqoeiozd
Bore oFtond:uwwerys sseTo
HAL Z-0r BURST
dd TAL
seo wiiruya 2)
ony BA mu (pa wpeqaus mndsou) B “AHTOY,
npour nana, ruosina ISoIO} woA 6 OC
(qsmrangSuryCaip 991g un ws mesin> ps 9109
=n 0 no wadaout B¢"/qIZLAU NOU Usp 998} [+P Ap WOLELAISOM 16 WAA® BS WANA
tape 29 nq TU Feu HopOA Bs sNBisop gan BA MaOsIn> HosEIdap YS
18 gzwopanoud wana we ‘ose fOsUH
19 BIOUlL UIOA NOU UIC]
Ingosino wa0e} eS
$n uns azesejCep ap 2jauntrY
iNinyosYNs va"vsv1d4a0
Iuosimo evaseidop a1 9/00 9p 18 urpdnoo au zs wHaynd “eulg E20
29 ajeunns yo BrzouCD wf sunfe Hw pu “PIA Jay uM 1S Hes
‘ums aids jruesce zimiap PUR
2s 20 numguun gs Hieoiaauy “aagpZ0d wore asL2p
4g ayeod vq Tensaiay & (Buy}O;s) arejuap ap einsedo
Yea; soyRIOIwy eaTeaHY OF
sei 2p yor utp ajuuy ayer yawoUY nu
( SurTsaeas seurtusw )TTe hous! FUNeTIs Pron,
temmerq oe ep
QuewTerrssr mee et ry
1( surTpesuc-oTrs "wou ) Tre THOUS
tana=opou" sy
fomfanoesemn>
( #45 togesxueta>ds sexuetgeao zen) 303
# [7g] zeus mon=ssueTs
¢T-AET-A82=PTAT
Foaxeyot
£033 }eTyymew meu-aT]s "wow
( wIOTNOORIA-wIZE /WIOTWNO"NIN"HIT ‘angc"oNrs
"Oe ‘sd (2 ig 'sumrore] )BoreTe
U Ea seara ‘ouOUOT Hy yxouD jutOT Es ENOTES
dd71431'9F-01 Buns
(91-01 1
iognd yoqu sory 3598
134)
jotnsuod rows BF gpedap 1M a8
7 “papaieid
uweTHs seeto puotzs
et ysuau sseT>
urTMaN
axa jaeuo ‘supp esse yourresu | aust
x02 jreu9
‘ayou, ‘nead yautTae:
yotrand une qrzquee 7303 // ‘urtweu aonzas
‘Sede Sed vp WHEAT eS oe278 ‘Sa lavatam Cr+ pas cu pas
void show_cursor()7
Listing 10-48:TEFIL,CPP
void file win: :eait()
»_wins tshow_cursor()
setcursortype (insmode 7 _NORMALCURSOR:_SOLIDCURSOR) |
memline: :menline( menline* after_line, chart txt
Cu aceste modifictr, totul este aproape gata. La sfarsit, adiugaty un apet 1a
(Gn constructorul file_win) pentru a exersa
show_cursor(). Veli constata cum cursort
cursorul hardware dupi ultima senere, adi
‘Ar fi mai bine si-I gisim in coltu) din stnga sus, nu-i asa? Pentru asta, si
seriem 0 metodi go() care pozitionez§ cursorul, Deoarece multe operatii depind de
Jocul in care se afl cursorul, vom cere metoder si tind minte unde [-a plasat, in
apelurite ta functra goQ) vor at
sus va avea coondonatele (1
in coordonate absolute.
Listing 10-49:TEFIL.CPP
void £lle_win: renow_curser(}
setcursortype
ins jnode ? NORMALCURSOR : SOLTDCUASOR|
void file win::go(int x, int y)
euryey
gotomy( Lftex, topey)s
menline :: memline( nenlinevafter Line, char’ txt!
278
E destul ce simpiu, nus: asa? Adfugatt acum
figieval antet TEFIL.H. Adaugatt urmatoarete doug
edit() din constructor 1 total va fi cum ati dorit:
goth.
cur_Line=top_Line:
2 Ficut-o deja? Foarte bine, pentru ci de acum facoio am sé profit de faptul c&
aft devemt programator C+ si nu VA voi mai da liste. chiar pen flac.
SUGESTIE
‘Viss-a untimplat si vi izbiti de ceva pe care credeat
al reusit sit duce la capa? Uitat-va prin
im am facut eu anumite lueruri. Nu e prea convenal
acest Jucru, fn felul acesta va veti da seama care sunt fucrurile pe care le
cole pe care doar att crezut ca le siti
Dac $i dumneavoastri sunteti ca mine, atunei eursorul acela care pilpaie
fericit in cottul sau ma indearmnd si apa ‘Siivad ce se Intdmpl
Construirea structurii de editare
De fapt, accasta structurd este aproape gata. F
care am construit object!
cca aceeasi comanda s% fie 0 corn!
fente doar in figierul TECMD.
pperspectivi, vor putea sa mtroducem
preferinfefe utilizatorula,
rma aeesel adapta,
Listing 10-20:EDITCMDS.H
J/ SOUTCHMS.# -- comenzi de editare’in Tiny Editor
7/ Copyright 1995, Martin L. Rinehart+ caosungo”}o4zaz08xn0396
#(Q)puDTaTpe) oR aTPe=eHOD
(ouopi) oTrHR
tapres=ouop 307
) soszno7wous:
()aype:uqererts pron
dd" 133122-01 Buns
aac
un FaISOOE v asesE|29p o
pe esfouny 18 epmyouty eanoauIp
WONOSL
rmustdy ub O}
cee nae Opesmae aT
t
«
sgou exn0z
sarnegep
tax woswno wan9e7
Hemi ese
tmomee cE @seo
tay wosuao wxmaex
somo ese
tanTwoseno uxnaex
Han esto
somey an #8°>
saxka wmaex
:08a eee>
2
(oy aoagne
foperrsesnes 305
Opworarpe 355
SEE EP eee eee Cee eee eee eee eee Cee e eee eee
= eas sojeiy eeseEUY OF
FQupgeGegse wars.
(ypeotzeen jet
st" SQRDLTORWODNTOUT HE
(H SEECKIN. OPNTOUTH
SHCONDEE. 9PRTOETH
Somos? spntoeth
ddo"aWoaL = 12-0F Bunsr)
‘wigpaddud ys win
rere au 12-01 mays]
vosooy "HSAIOASY
a a4 yom aU
vatesede 81 “H'SCWOLIGE
puEUIOD 0 “axe nu WoWOUDY 15298
. a¥Sauo 88) doas imsaoe 190190 2p
S908 aan sxotUN
mnque “tou rzuswo> Hioanpanut 99 wanszE (ON) 6661 1 uRa
(LIxa Fuuresm ere) goo] tI 9p susuNU JopZUeWOD INLINE We E> HeAsssqO
WSGHDDEGE 3755555 //
poor axTwosunD sursepe
ay -oseno suT30pe
i coor
Coot NcTwosEnD suTIoPH
Toot an” ¥osuns exyseps
seer JON 9u759P¢
ooo, SIXE OuT30PH
|282 SA invatam Cr+ pas cu pas
int €ilewin: edit do(int ema)
i
int done=FALSE;
switch (ond)
‘
case EXIT:
‘
done= TRUE;
break:
)
?
return done;
y
void file win: :snow_cursor()
Insinte do a exeouta acest program, trebwe st imeiuden TECMD.H 9)
"Hig TEPILACPP. Trepuve de asemenes 38 soneft un prototp a
ILE. Eu am adiugat-o ca o metods propre (private), dup cel
SUGESTIE
lase, dar acest Iueru face c2
ugoar
field intr-o sectme
clase whatever
protected!
data member 1:
gata menoer 2:
puslic
whacever ()
private:
private mecnod
ate.;
methods (go, nore)
40 Afigareafigiorelor text 283
fo afisarea figigelortext 28
ispunde corespunziitor
het de pe tastatura, El
ti decat Ese. La
lui EXIT; aceasta
fntoarce NOP sau 0 cor
rindul seu, rutina edi
Deplasarea cursorului
Dupa pregitirea ficut8, este usor acum si readucem
Funetia edit_emd()
CURSOR_DN dacd apasatt sigeata ou vi
tiebuie ficut este 58 favatim functia edit_do() si se comporte corespur
inainte de a trece mai departe, si adiugim rutina de depanare msg() in figieru!
TEFIL.CPP. (Listingul 10-23)
Listing 10-23:TEFIL.CPP
j/ TEPTL.cPP -- file related classes, Tiny Bditor
1/ Copyright 1995, Mertin b. Rinenart
Wsnecude
include
#incluae
Hincluae
sincludo
include
include
void msg(chaz* debug)
11 mesaj de depanare
eprint£ (debug) :
gotoxy(, yI7ne ayniao ajtiaiedo vo pugundnsead
wayeas vA 16 Ano 18 sano apoqiquuwa wzyjeraDe vA (eAou!
ens uy eTurT o azesetden ay200u
eOueae PT EueoToo o exese{dsp shencut
S00 UT orurT @ ezesvTdan j/ +11 “ayanam
weadeep BT pueoTaS © arEswrdse / +{0 ‘qyeqou
rpntoma
‘hyod op eigy LnpUg! nes aMeo}o9 ap Jwo!sJoads apwunU UN No easesE}dap ORS WS a:KD
sep ‘Qo no aavorguewase wun W2LIOs Bs Wa
{wos ot ep “(1)0198) juero9
Jp tansox9y fe pups juin add wequns EoECE sor
‘ansasay ye pugr you
idoud vaseseidap 2) aoast
In WY
“epmuosason kd uss go ee 30 ley 91 A
OY BS BIJ X4IND wieUIqUIOD 18 ago eIEaBES 1
pjofesou st9s nes au ad vn
eyo aunds.are> fesour un
Tiersen Bs nyuis auaoy oop visi
adioi$ wa dou jnzv7) ‘1ow won) ES WEIdERSP 2U 90
BF BA NG YOSUND 38% [nz | Pare eT
feuop uanaex
toyeeza
fu) Bae
Fan ese>
teeexa
{(qamop x08m94) 65
?
smaxosuns 2629
trveaa 1
amag-oten
GDR 98%
(pup) uoqtae
fasta = sop 30
(pus avpjopaypar: uTATeTTS et
dd aL 77-01 Buns
‘ausvou
ehye v
djowoumnBse _o aIso wpanise
wwiadaous 95
IS BIOUNY ISOIOF WOA “199i09 asiUI
ou YS aingan ate ap non} mag ‘NCWOS:
‘Oo
Iporop BA 3g yWeunze eo wpUISUEN
‘u9s wg "wareutedap vu! fon 20
arerejoap preseoau a
GA ging Smee ety WREST TS
az rer TOTSIBISy BaDBEY OF
Sedna sed 245 WRIEAUL eS RaaListing 10-25:TEFIL.CPP
void file winssgolint x. int y)
void file win::move(int dx, int dy)
«
7* Programil care o apelesza trepuie sa asigure ca
deplasarea se face in
limitele ferestred,
”
curnesdxy
carysedy;
gotoxy(Lfttcurs, tepteury)
)
nonLine: :menline(nemline* after_line. cnar’ oxt:
fn functie sa fotosit operatorul de airibuire +=. Bl are urmitoarea s
xe yi
are acelag)efeet ea
xexiys
1ce atribuiri com
t& complet, uti
cu setidere, im
Shift+FT 51 serict
+ emamcemone | 40 Afigarea figioralor text
Listing 10-26:TEFILCPP
void file win::move(int dx, int oy}
cuzy-=ay?
Gotoxytiftecurx, toptcury) :
int ile wins ite top Lin
Af/1cur_Line-sprev)
‘return TRUE;
else
return (four_Line->prev->prev)
>
int £ilewim: ris bot_tine()
if(1cur Line)
return TRUE;
else
return(feur_Line-onext) ;
menline* after_line, char? txt)
corespunzitoare in TEFIL.H. Ble pot fi
ene vor ajuta st
Listing 10-27:TEFILH
7) 9EPIL.N -- file related classes, Tiny Editor
7) Copyrignt 1995, Martin L. Rinenact
fae€ine TRUE i
#dafine FALSE °
faefine AT_TOP WIND (ouryze1)
define AF_BTA_WIND ((tepecury) ==(bta-L))
‘define AT_LFT WIND (curses)
define AP_RC?_WIND ((1Etecure) == (rgt-1))
class mects
#(0 ‘t-)enow
CONIMTEaTaNT) FF
tar wosund ese
«
syeaza
1 AQBT2 Tose) Sem,
eero
Ho *t) enon
(anti 29-2)
HaTwosun eseo
preeza
F(8UrT gos 124) 85u
sere
#(queaqoq soparn 32.) S8u
ast
(t "o) ano
Hyeouc-suprmanoseury—ano
tontererani) 3
i oeuprmaorst;) at
No-MOsunD 28>
dd NaaLOC-OL:BUNSTT
MPULI “ejdeaup B18 wBumys B vareseicap 1S
‘watozas gs rey “ysesocou BIMoNASEHU! WAT HpUA {PUG ALOU PO BEE TN.
nig yosand S525
trywoza
'
#(yfla T10398q) Seu,
este
HndOE 324) Seu
(Oeurt domes) 35
<—————
eae YEO) sO|sIRIGy PBIESIIY OF
fr tayesow
taeac-oupy"anseouyT snd
(qurw-aou"aet) 27
ran"wosuno 9985
freeza
remeieeuop
sna 2500
dd UL 262-01 BUNS
ex
tp dO YOSAND tees Herdw09 ws HD9P Howw-N_ gen WIR
BS Haz [BNSWDIRg a ErVOQOD MJOSIND UEND wOPOA Tian HS XH,
foo meade eisey esede ursand “runrjaniasut aisooe yeSinepe tie 99 exngy
JOR 2569
£(,90TT com 384) Sau
,
eete
‘
f(y wosgoq ROpEEA 3eq) Batt
4(r 10) ence
ouFE ano
fgxoue-eury
(qesw seas) 37
,
(Qsupr gee sti) 3F
NETWOSEAD Ss¥S
‘dd W3L82-0) Buns
82-01 mBansy{ ay erre 08 wana w6e (OPPS MP NE YOSAND
Ieso uinzinas ES olngody, jsoF uw] (tuoSmD sénfoy WARN ys EOUAIA 3
‘Sedna sed +79 weleAul eS290 Sa invatim C++ pas cu pas
if (Achar=+0)
mag("at Left");
else
mag("seroll left");
?
break;
cage NOP,
1 corespunziitoare a ec
loc si mai facem alte teste acum, mai
Putem apor si facem o testare comy
tal editorulul se intvevede. lar dumneavoastré. ati devenit
programator C++
REZUMAT
{in acest capitol ne-am concentrat mat
fitarea unor lueruri not,
Asa vom face st de acum incoto.
Scopul nostru a fost de a crea o fereastré de
ceaseta de dialog 1 am adugat un obiect memfite per
It pe programarea in CH deci pe
Drept fereastra am
ayea un fil
isier de pe disc’
| ferestrei sa fie mat viz
| este exact ce ne trebuia
40 Aigarea Figterolor text
afecta progr
‘Am pus $19
compu
a a opers
ccomplexa)109 3)
‘ansvou Jojpureord aneziay
uy sep ‘ouy tS ingan se ve uiind jag "Hae
-yamgs payed wip apy “eideasp waned utp a
aseé ajareorguu ayospdr nu ns trex TLOUIONL J90e
‘ps o1ao 20 aunds ou 9 eHow "IMRISe) ap weIOWs aIs0 YOL SOTA PavednuRtuy
aiivoronr
ow some aut
aor nowaTan oe
err ese
TH nous aT OTe
218 MONI LA LTV NOW AT LTV
owA sjaloukuuaN AFSgACAG Wy quloose —“ouyopy wandaNp
fo “inieanquioo aysoee eZ v ANDY “I
‘ome aura “peafesya]y erleuIquIOD no tes:
eu! 2p EpeAOP FUP BF ingan VA “I}eUIguIOD J03sa9” vas
meuos ap qwo1agiper ‘omoyer ‘eae EP Custos viiouny “Treads sys wHeUIqIOD
foc sonny} BaseoWguN ap ywoD Hou BS oINgaN “
as betlaogy “To
Bs oyiz9 nu “phunsojord
‘gON
venidop y syeod essa!
no pHUareAlyoe aIs2 Cui
9) Sa}HIMD NO “SHOAL
ig vuREIquUIED “PoUoLSUSMEPAL
$ ‘SOC BASPOID I 9N"]D4, RalsPaKay v| 9p aoa as cast ND Te
led ueind a RarESYe IS yNUEIDe 10} Od tonsaiay vases aU MUIOD BIMTHS Ca [eASY
‘MIO Fansainy wadnsw [Hesodo aRy 96 oTes ye Ie
‘SUSEONS
‘dON®
varesedy iauesedo varoioyou zzvez\yeauies (057
yllls BeRULquio® no MASwALaJ BUOISUOUUIpal aInd “HaRyYS sOJaIse) inzoaNfe Wo eNSEEr}
‘ymur Hagng “rintido ap eu9s 0 vorpur 8A ‘9jafesou! nisDs as aiea ad veo “cxso359s
3aLS3u34 [ANN VANVNOISNAWIGSY
6, ens earerriep WF Bareseop "warwncrsTaUpeN Ty
Toionsai9y GST TUSp IS arese|dap walSUCISVeWIpSU yb
usp imjos
ouny 104 91.96 WHOA 99 dun UL BaRsOe
2-29 sunsjonsuy 1 wna rf vo 41 25}0 jnUUO4pI val
sn ure aoqayeynzas easeyeMLOg A:nuad QpuLIDS WZ
‘anyelownua tundn vaio ¥ nued uinud vzt
eu Wo eIEPOIO |
(uinoe ued astias sojauresBoud
(© gisi¥a) fansaiay w omEsEydop
sod weBugpe YS voUUIESe ap vaInd
79 atmuvdop 2S05 nw axesye ap o[fiauTy BORD vOpDA WOA
pad BXSEaLRY WSDe YS 3959 AND=IqO
AOP.QSI1oJ BIAB[NAIp
18 varesedap ‘vaievuorsuoUNpayy294 4 invatim Cr+ pas cu pas
In acces situate este Alt=Tab, prin care se trece de Is un program la atu, Probleme cu
{getch() nu Se datoreaz deci une neglijente a firme: Borland.
Revenind ia cheile de mai sus, ele au fost obtinute cu programul nostru
KEYS. Si continuim prin’ adaugarca utor definitii de mesaje pentru
le relatve la ferestre.
Programarea mesajelor
Listing 11-1 contine cea ca am addugat eu ta EDITCMDS.H pentru comenzile
ce depiasare 51 dimensionare, Dac dort, putes sereio versiane propre
Listing 11-4; EDITCMDS.H
eee lei 1 PIT OMS EEE ee renee eee eee eee
//SDETCMDS.H-- definixea comenzilor de editare in Tiny Bditor
7/ Copysigat 1995, Martin L. Rinesart
# define Exit i000
# define Nop 1999
4 dofine cuRsoR_UP 100%
# Sofine CURSOR_DN 1002
# define CURSORLP 1903
4 define CURSOR_RT 004
# define wmN_wove_vP s901
# cefine WIN_MOVE DN i902
4 define WiN_NOVE_LE 1903
# define WIN_MOVE_aT 1908
§ define WIN_SIZE_UP 191.
4 define WIN_STZE_DN isn
@ define WIN SIZE LF 113
4 aefine WIN_STZE RT apna
// sfareatul 12 SDITCHDS.it
PHEHE heh ieee em Se ee
cesta, yom transmit
redimensionarea ferest
‘Avem nevore dk
jn care deplasim sau redit
funetie de nivet mai inal, ea lanseazA rutineie de lueru corespunzatore celor dou stitt
(moduri) de tuoru, Comutatorul se implementeaz’ direct. cu gjatorut uni tip
‘enuumerativ.
Procedand ca mai jos,
4 Rodimensionarea, deplasarea si dorularea forestrelor 295
fdefine NORMAL 0
fdefine WINMODE 1
ant in_mode= J/ NORMAL sau WHN_MODE
definim cele doi modurt de juera prin numerele Os 1. Puteam Tasi si
procedim $1 aga:
enum mode : normal, winmode)
mode inmoce=... | // normal sau winmoce
Prin constructia enum, a fost creat un tip de date now, numit mode. Bi are dowd
valori, desemmate prin numele normal $1 winmode, c&rora compilatorul le asociazi
yalorile 0 s1 respectiv 1, Aceste nume pot fi initializate de programator, ca in
cexemplut
enum cays | sate6, sun, monsl, tues, wed, thur, fri};
Compilatorul adaugé | la fiecare trecere fa un element now din list, dect vom
aves: sat=6, sun—7, mon—=1, twes==2, s1 aga mar departe, Exist doula argumente
in favoarea tiputilor enumerative
a2 o tratare mai abstracts nu trebute sf ne preoeupim
rogramul bazindu-ne pe termeni
de date nou. El este de fapt ut
exemplu,
enum mode | normal ,winmode);
node in_modesnormal
nous in_node=winmode:
17 corect
Wf corect
mode in_made=a
node innode=i-L
#7 mu facet asa!
17 miei asa |
Unui din cele mai dragute tucruri despre tipurile enumerative este cé ele pot fi
completate cu valor not, ca th acest exemplu:
enum mode | normal, winnede, otnermoae): //otnermode este 0
node in_mociesnormal
Hose an mace=winnoae;
node in_mode=otnermode: // acum 8) aceasta este corectaeC aris Nay unger
BOTT LIY 8se2
faq 7eErs"NIM uanaet
ROW ST Ly ase
ACTHAOH NIA umg9a
MOEY aT aTy 26v0
NOEAON"NIN uanaez
nomad 3803
ta BAOR NEN wanaex
MoMEyan 2209
ROQAOH NEY wanaer
AOMENTES eso
faT snonira wana
NORA 98e0
(pup og ts
| ()pmoTasenapas 307
Qpumure gue
sa0M umnaez
3THE3Op,
2! Q)pusmure ammaer
epouurns=pou~ur
gama see0
‘gx woguno usna0a
TELS ese
NOME UE ese>
aT -Wosuag umaer
SUT Bseo
wouay a1 eee
emqmwosung uzn302
TIED 9889
wom ng 2389
‘isc sinsanay eareyniap iE earesejdop wareucTeuompou Ty
TOIaRSAID, eaTe|map TE wasese|op "SaIBUSEUBUIpON TP
aqrwosung uanaex
TMD @5vo
uousy an 2882)
surg uangoz
38H o5eD
sopusatas
:()pus"zesne ut
(Qpuorureté gut
+ Qepowyym usnge4
pour UTM es¥o
| Qpas-ureqd tusner
rTeuxou esro
fepowmer iesias
(Q)pumaype aut
3 umsex
sete
*QusaeBigge uxagoz
for) 3t
s(yuo39B=9 set
(Qewomxesn aE
fqemzoueapouur spot
ffepou"wrm ‘Teuzou } spam amas
wATSGHOLIGE. spnrourE
NE SUBGAMY. eoNTOUTH
gy aero
<1 pus naaued epes >
‘<7 puods 31
Jopse st195 awwod teiduaR nz)
#Q Rewa™zeya0ue-oD
“stasTzeuzoueon.
(orous"zoyjoue ) 3 esto
()etus"op
Txeaszeue) JT
sns yeu ep qntduexs stx0s pp pow STE un //
SQawus"zeuaoue-op
este
#Q)stur-teuue-op
feoTowsTzeqzou) 37
(Ostusrep
(aeno2eum) 34
ssreyst un ep 3eumn asta an
Qe ep
vere
e(yeruaop.
(aeaoyeun) 31
vere 31 oumraonmyout7/
syaluiana aise
Imupano pap 3 ountionnsui o 19 “prow at
wunzeo naea usfunsip 3
aA YS PUL nud UW] “()azte UK
ny areas woe
sd “puor prseoot
()aosang nous? feEW STTs proA
6 Bsmt
uy Faupsas
2p "Ae “pe GUTETS .
(ie yore auy jesze"upR eT TIS pToa
fouop umngex
f(t gye2teuTM,
!NOTEZTS"NIN seo
syed
f(te!oyaatemure,
S0"RRISTRIN 2809
breox
L(o/tyeztea
NLWTBLIS-NIN 3829
Syeeza
(o't-jozteTurs,
AV a2rs7NIM 8822
ddo1431 oH} Buns]
i] yraeyizau Tesoyd 1g vA a16>
vormde nu aszo) juaumnfie imwi4g “vo}ges ydaup ayories are juss wip (94) YeULO} op
Jojtiowapioeds |nd0} up ajaquownfire Fawarest (jpmuds “Qu
(0 ,p3 281 Zomoue 04g, 'znaano} zzuT2ds
: ssgncane 72u9
fu aur joog prom
:2us891 ap euod €
ery ‘auoWeUs Up 416 unNUY aTeyeUNIOS no 30s wy “EIEN aHROY Y BA 9 FOILS.
© wayuion w uUd Wodsoul Bg ‘smoIyZuNds9109 ojaluowiNEse n9 “OD po Ut
‘sveov urpjede BS 1ode 1 nuony seo" YOR] BS axe PUNNI O WLIOS BS WEIN
Toe TOIaRSEID| ealeep (© vaseseldop walELOBUUIpeN Th
‘Sedna sei 279 welenni oS ‘08302 ‘54 inva Cr+ pas cu pas 41 Redimensionares, doplasarea gi derularea ferestrelor ae
< cod pentru cond 2> g
else if < cond > I
NOTA
else
< cod pentru cazul in caze nimic de mai sus m este
edevarat>
Pentru a evita ambiguitatea, eise este considerat ca foc
care fl precede $i care nu are asoctat un alt else (regula e vi
C+4), fncercatt sf serieti o instructiune if mai complicat
Lf < cond b>
< cod pentra cond 1>
else
if < cond 2>
‘< cod pentrs cond 2>
else
1
< cond 3>
1d regula de asociere a tut else. Vet
Bliminati apot parantezele { $i |
‘vedea ef totul se va reduce la. constructi
Cu idiomut elseif, testul asupra dimensiunilor se reduce la:
if ( do)
uw verifica caca mai peate fi marita a dreepta
else if ( dx01
“ veritica daci mai poate fi marita in jos
else
“ vorifica qaca mai poate fi marite in sus
Retineti cf aceasti constructie Iucreazit pe cazuri disjunete dou ete dou.
Dacd avem dx°0 si dy>0, nu se executi mici unul din cazurile //verifica daca mat
poate fi mirita ..Dar cum mesajul WIN_SIZE_xxx se refers la 0 singurd directie, vom.
fapela pe win_size() pentru a modifica fereastra doar pe o singuré directie
Ingineria programarii orientate pe cbiecte (OO software engineering) mu
recomanda utilizarea vanabilelor globale. Asta nu trebute si ne impiedice sa le wtilizém
pentru mari care sunt int-adevar globale. in cazal nostru de pilda, ar fio grescalli de
protectare si nu utilizim o variabilé giobalé pentru a exprima ltimea ecranutui
Vom presupune c& rutina startup() stabileste ct ecranul are $0 de lini (w
revent imediat asupra acestui lucru). Vom rezerva ultima line pentru a fi utilizats ca
lime de stare, deci ramén 49 de linii pentru editare, Latimea ecranului este presupusa
a fi de 80 de caractere. Pentru a evita 0 anumitd neconcordanta
programele Borland de afigare pe ecran, nu vom serie pe ultima coloan’
‘geet maximum 79 caractere). Mas adiugati dou linii in fisieru) TEFIL.CPP, ca in
listingut 11-5,
Listing 11-8: TEFIL.CPP.
|) TEPTL.cpp-clase relative la fisiere, Tiny Editor
// Copyrignt 1995, Martin L. Rinenart
incluse
Hincluae
Hinelade
fincluge "TSO.
Hinclade "TEWIN
finclade “TEPID.
#inciude "EDrToMps.#"
int screen widtn=79;
int screen_neignt=49;
voad msgicnar™ debug)
Putem serie acum instruct
verse, functia win_s1z2()
1 pentru a verifica dimenstunea ferestre. in prima
‘doar comentari:
void file win: win_size( int dx, inr dy)
J! verifies dimensiunea; dacs nu este coracta, se iese din
11 funetie
11 restaureaza ecranu
1) redimensioneaza si reface fereastra‘Mun yz 2p ayn Your nv axed o(2:3S019} n9 owIgord BAKE TAA H8 yeDAID
su] guoduioD as MuLIde YzvaINE}SAI aze2 ofuntjannysu “raNsa1a] PRULIPU BqWIYIS
98 nodgsy1V ND ‘exeuoIsuaUpayfazese|dep jnpow LU
ng "Jonro9 greaiony [9 yeIsus ul BO wIESUCD N:
(osama nous: rut STyy Broa
39 90D ‘xvoD eIaszo /) *()mexD
(Qsutedar: uerstrs pros
(Q)3uredsz
fon IG
ip a+ az
vxaswoxes ooezar 1s eZvouCTSUeUTpEA /
{# (gnqT Baws waer98 "99/38: 'do9 ‘33 1) 39I9NE
nuexo9 ezeernessar //
famgea
(eesdoa-waqi 31
ne'ur eevesosoya// oom) 1) ost
furnjex ;
(ausrewruoesce we na) 3
Sot ue easpzeu (7 (och) a ext
ete me 3gT-362) 37
woueas of ezvoxosoum // (g>xp) 31 eere
uINIS H
twapprwensse ee fa) 3
eadeoxp wt aaseam // (00) 3
ETP ser as ‘wapez0o ese mu ROP ‘eauuTsuaurp esTgITeA //
(Ap ut ‘xp aut jezte"eTa:rutaretys proa ggo-aESst
ast. eauncid ea
@ mop (host up
ova 0 HMSO" wo Boao ap aun Sy
won 16 nrziny Few niquod yrysey YSU Use| WO,
Tupi ys 1S wupsoSorus ws 1goap wong mu :tuntjonunsut
pxyevozeg sovgex 7s ezesuotsueuTpex //
qnuexse exvameysez //
rumaez
(z == dean) 3T
conte) // et
(quBteq-meaos <= ug) 37
ens ur ozexosont //
ernqez
sot ur oxtzeu // (sf) 31 ests
unaax
(eo == 3T - 383) aT
peters ef exezosoTu // (oop ) 37 este
(ugpta"usezae == 3631 31
(oow ) at
‘e7a5un3 1/
Ep aset 96 ‘v209109 e389 nu OED feeuNTsusUTP EOTzTTOA //
eadeoup vt exzeu //
(Ko aut toe qr JezTe"uRR: EEATSTTE TOA
‘apmudop roy
Tuezo9 ezwemessez //
(ose ) at este
(oom ) yt este
(wow ) aT
ene ut erexosore (QMP ) //
sot ur eatzem //
wots ey exez0eoTu //
eadeexo et extaem //
eyaoumy UTP //
eset 9s ‘wyDeq09 ease TH EO~p FesUNTSUDNTP eOTETTEA //
(Ko aut 'xp aur yaztsTurmrataTeTTs pron,
“(queaoay seziynin asa 31 9sj0 musoxps)
$upquauioo ut asnds ajeo oR} BS axke LunslansIsUl ap BaLeLIOs ND lode MAELO
‘Sedo sed v9 WEAN ES oe306 Sa invatim C++ pas cu pas
Sa discutim mai intdi a doua problem’. Ea este provocat de tipul adapt
al calculatorului pe care lucrati, Cu adaptoare EGA put
lar cu adaptoare VGA (saul mai pune) cu 25 sau $0
ccurent fn care lucratt poate fi o i, dar © 0 problem pe cal
deoarece adaptoarele EGA sunt din ce in ce may rare
INDICATE
nul si. lucreze pe caleulatoare
Daca
simplu este si
dumneavoastr’ suporté mat multe.
xt poate fi selectat chiar de la inceput, addugéind o linte Ja rutina
tingul 11-7.
Listing 11-7: TE.CPP
void startup()
textmode (04350) ;
setcursortype( NOCURSOR)
INDICATE
ulte informatit despr
‘apot selectatt "conto.
ifr pentre a
pentru CONIOH
vedea indexul de termen
selectati"textmode™
Cu ecranul in modul
jos de un numa 8
vvarful
{41 Redimensionarea, doplasarea gi derularea forestrolor 307
afigat fereastra, Tot ce avem de
juni corecte dup ce am restaurat
sunt
imensionare trebuie si
Listing 11-8: TEFIL.CPP
// vestaureaza ecranul
puttext( ift, top, rgt, stm, screen_save_puf) ;
JJ redimensioneaza si reface fereastra
rgte-ax;
pemredys
repaint ()
void file win: :repaint()
gettext
arew() 2
ft, top, zg, ptm, sereen_save_pat)
7) goa marginile
‘Acum totul este aproape gata, cu excepfia rutinei repaint(). Dacd mai facem si
ementata complet.
CPP ¢1 si mai aruncim o privire ta construstorul
clases diatog. V
am fi ficut o rutin’ separa pptuts-0 folosim acum. Ar fi fost chiar foarte
interesants& numim aceastritina draw(). Si explicim acest tueru
Mar multe clase dintro terarhie pot avea rutinc cu acciast nume, si zicem
dran(), Pentru a selecta expliet una din ele, se foloseste operator de resoiute ""
ex mai jos:
1/ araw() in clasa diatog
(7 draw() in clase box
71 ambiguitate?‘uns op 1BFe seIYD uns ne yLaMsony sec] “(yuredas ULM 2qL wip
ujode aise (ye Mogs sopy faysaoe v YELZEA BuIA o MHUtRaRd {]-1] BUNS"
yeeyody ay vs
© Sts wre “autoi9} UHC] MXOY uNBEYFRa2
1 eulajgoud yeajozas ute 20 wang,
ydvarge vige) uma wsera uy azesy8 op.
Bs aingeay ‘Qawip:Soyeip rounnu sti
Herat) gaurads
4G0a 20794951) Axo208
(a1-our rane) asaeysea
locooras 3
es tuera-teazT-a6z1=0078 war
Navara jdoraqs=ueT3 4ur
(mea: x00
(Ommrp::soTeTp pte
dd O'NIMAL :01-FL Bunsr7
{ep “noe no jurzaxd 0 aro ad wareajozes Tpoep SOUnyy wu AED aoRy RaItC iY
"pula;goud yaseaoe 1 wipajazar vs amqan ya snts9¢y
jauncnsoud 30%; ()awesp::BoIwIp yo TALIS
tuusedoasop ys reynfe B-ou Bi ap inzeo uy ;reunuma
vermuresBoud yo eSE FnNy WOJo asm waId BIR “vIn
soambo9p ‘Qnveap: Borep 108 rade a1so wunoy
“now aig “Qaesp pewojade “u
asooy “Ioa109 ye Oy BS yn
‘ea00 erent v4 a5 ‘sxouorsuexpas jap
wllajau ou ()asesp yporoUr 2109 o|
tax sues 1o3p
ty Tory ‘qn sms enIssnoes afsiouny tazeD a nea BoyeIp wy arsinoa)
Feds 1805 oy ae masaoe ‘Qwveap:Rorep uy Qrsemp 3 peas iin MAP Yy We Foe
Ooseap:Royeyp 2 jade
Jun oso uanoe sequyos as jade anysooe ynsuos “(vwIp:ojemp ad puesinepyy ata.
oe ToIanSaiey eaibiruap We Baleseidap eoreuoreueWijpou Ty
shen saare09
109 “HNN
e1p::x09 #) jade nat
yesp:Sojup asad
T{TSSe ,28yD) ebessew: 'ebesco
ecerara) gaupads
\d03o072+43 1) Ax0305
To7SUTTANO) 7398323,
#2) (woTa—T+a3T-aB4) =D0T3 Yt
Hua Ta)ueTsaUTA aT
2 (ymexp 200
(mea: :SoTerp prea
eT9T3 on9Tep
(QS0rere-: sworeTD
mex //
epeasu ur tuntzonzasuy sasTu oveanu 2603 ne Tote ap //
i070
| f(a. ‘etata) Adozas
+{Taayueraas)zeua meuzoratay
(99 ‘90 "zpaq'3¢ ‘ar "dy “gr panded
[9 qUT ‘90 gut ‘ap3q .zem0
faq aur '33 aur vay aur ‘st aur
| [aa yz0uo )SoTeyp: s6oreTp
ddO'NIMAL ‘6+ Busty
“ayreaap
"mut B8e 16 Yl ouiAap J “op IRagwatH aunep jx INOUE “gplid ac] rosea LO}IOWaUE
au Ad sof NoWeIed sjeuuNN HiequIySS sul ieidloo pug “Forap
ToemI9 ypoeu prow o-nUy FojeIp ias¥io nsoTONASLOD WIP aIeIMUE IsOJ NB LA|HPIN
azauos ap aiumionasen 6-11 mas Ma
aypurna mioyoxs © ned efnrozes 9p yiuorBIedo MHsOIO} REP BD Sol\aUIg
‘ueap rer a 8 sya Lose 8 Wze9 9p eo UL TINE GE "op ojouinW no Epoweu
© eased mu yowy na eser9 pny seus gM a¢ yruCIeHAAKOD TeIEN=B Uy
“xoq ese} wpOTpU ME}RINS I BA "NOG MBS dndod
asa & ypojal o~l oI80 EoeD ‘FofIp Loses EPORE ¥| [eee UN 1 kA “FoRIP tsv}9
® eporoar o-nuy a9 injade woEC,“slinjozar 2p moyzi8do a950}0} 9s nu FORD TAY
‘eratotes BS Qwto yporeut 9 an¢ jmsonoCOD -yoqur a9 ne arty ERAN
32 YDERS 90N4 |MICTE| 2]9
Sed no Sed 70 WRAL BS B08310. ‘Sa invitam C++ pas cu pas
Listing 14-14: TEFIL.CPP.
void filewin::repaint()
gettext! Lit, top, rt, stm, screen_savepufl
axes
14 Aialeg box
Awidergt-LEt-1;
shom_all (topline) +
Incercati aceasta variant gi vedeti ce
de a apetu
acoperita de fereast
unde a fost. Dack fereastra se micsoreaza di
Listing 11-12: TEFIL.CPP
void file win::repaint ()
gettext’ 1ft, top. rat, btm. scresn_save_put)
éraw() 1 J) dates pox
Lwidergt-Lft-1;
snow all (top_tine!
ig (ounciwia)
‘curxeLwil;
i€ [curyobtm-top-1!
cuxy-
cur_line-cur_Line-prev
gotoxylifttcurx. toprcury)
‘Acum comenzile de redimensionare a ferestrei lucreaza corect. SA Iucram sila
implementarea comenzilor de depiasare.
ea
1
teditinacusditoinostry
Deplasarea ferestrei
Asa cuim am procedat in cazul comenzilor de dimenstonare a ferestre, putem
rece in file_win, 0 nou’ metod® numiti win_movel), care rsounde de deplaserea
ferestret. Spre deossbire de dimensionare, deplasares tn
destul de simplu deoarece au fost aeja analizate si dep
ispuns la
fike_wane
do() apartindnd figerutui TEFIL.CPP care apeteaz noua metodi,
Listingut 11-13: TEFIL.CPP
case WIN_MOvE_LF:
win nove (
case WIN_MOVE_RT:
win_move( 1, 007
break;
case WIN_NOW
win_move
case WIN_MOVE_Dw:
win_move( 0,
break;
1
Listingui 11-14 (de pe disc fot
care trebure adugata la TEFIL.CPP.
15.CPP) araté noua metoda win_move()(pans
“ouiSreur piseaoe auqe> insosmo
aump
uo oynu
aavdsa
atye
ung $ vouowiase 9p ungAss I
od 91801 tuuod arpsise op)
aL EA
sUO9 8 ap ature Poo 3s908 YaFduIo9 Tes} oINgan WHEY “wo 2jLy FOHOP aD
‘27o}98t9 WUOIsUaNED IS BSEIKED Whe 10d As uIAs”aIL aseIa JeEMEPE poo sage n>)
eee Coe
(Ap say Gp aut reLTS UiMi Wem OTT Dron
)auredex
tap = ng
1k 2s doa
tmp = 362
tp 24 33T
xoq Sore ous quyedex pue cacm //
4 ghereaveusaxos tung /8z '60q ‘351 )axeaand
ueexos ou2 oxoasex //
( yuspeq wees == wad) 3F
mop ease //
tomoz
(tes doa) aE
(o>) #
an ease //
(app weezos w= 382) 37
’
WBA oaom // ( 0 < xP) FF B8TO
femaez
Cte Agr) aE
ageT enow // (0 > MD) FF
usexos 943 UT 30H SF Onom oua FT TKS //
( 8p ay om qUT jeacumurNsweNeTT pros
aa 14 S-LE nBunsry
(Ap AUT op GUT JeaTeTUTM! HOP STTS pTOA
‘
«osu
6 A Sep ‘apm PR TeAoM, for )gauTaae
>
(5p wey fap guy jenou apa rmpa"erTs pros
seuop uznaez
ed UaaL PH mBUNSTT
te ‘iow jauoyjpa ne BUBIPS F
‘Sedna sed +49 WiRIeAUT eS ‘aie314 ‘Sd invitim Cr+ pas cu pas
Atingerea marginilor
‘TEFIL.CPP.
LUstingul 11-16: TEFIL.CPP.
_Lstingul 1446: TEFILCPP
case CURSOR_UP:
i€ ( IAT_TOP_WEND 1
car_iine = cur_line-vprev
move! 9, “1 }
cise
if ( s_top_line }
mag( sat BOE" }
else
win_scroli( 0, -1)7
break:
case CURSOR_DN
Af ( He_por tine }
( ia_pm WIND 1
ear_lino = eur_ine-snext
move( , 1
win_seroll( 0, 107
tise
; msq( ‘at BOF 1ine” );
Case CURSOR AT:
Af ( ME_RGT_WIND 4
Ealiténd cu editorul nostru
a torul ars
win_seroll( 1, 0);
case CORSORLF
AE ( IAT_UET_WEND )
novel “L, 0);
eise
if 1 lenar == 0)
mmsgi ‘at left” )
else
win_seroll( -1, 007
break:
Listingul 11-17: TEFIL.CPP
gotoxy( Lftreur, toprcury 11
void file sis
«
if (ae > 0)
msg( “scrolling right”);
iwin.seroll( int @x, int éy )7
a de a micsora fereastra
rea mesajelor de defilare. Pant
cexisti nici o cale de a genera mesaje deamex
( eumnauerut regert Tnazestgs er) gt
prawurupresd
Trenous
wesnoypwan aise poo-opnasd
j@ réno1 aingon “ioumNE BeINdsIp
(oma
‘van © eny aftzam oqpod a6 auedop op 3p9 volslz9A t naluad
veg) 1298 ap puna (E>
siody ‘ouyap amwo
o90}9.
S108 a1 a
oep Brewonse8 nyduns y ws axeauoput easwooy “uns 24 vfop o189 (amjuars
© 2189 a1eo ‘otowour wip sunday 391 Go SofaiNtaUG) J018 utp in Boep wats
Bs inca wa ‘rfid © SOF Uy aBsoUs v op oMUMEUY ~uCTRY #6 SABA Ho wadoour Pg
udbd 18 dnBa
‘moedsou ynumap ad xeRsou 16 vaysooe od a|-infaya“siuzoud oye Nene Boep sepa}
"Sej90e Uy epadod ron ng “mjmuatsy jrundeouy wy aroUr w naavad dQ 41D»
teandeout of aBiow v nuued MOH! wxDZION aw TOL MIs Tru Inne
ts trandlaouy e1 afunfe w 9p epdmpepour asdsap 16 aunds aieod 2s avon) 1¢8}o08 nH
‘srdecoe waeun adwaute rns ucRig 8 dy nuned auieatias 20 dn ty
‘S4e1YEP Ap ay19!\dxa IZUaWIOD
creer
9 auotjdxa s0oj-zuewoo & arfesaprsuo Hun ate|yop v1 roMsAjaL |mIROL
‘smposio poo Nou Iniseoe Bids 2) ronson 2 rourp23
9p al}ziaut0g “wioalp nayed a[a0 aqeo} uy sagas na azaqLJap as YS aiNqan way
FERS eee
1 Axnpedoa ‘emno+33t )AK0305
eade-eeyT zo = Supt zo
1 C aexde-ourt doa ) tte AouE
o> Ap yy sere
#( Kmosdoa ‘zn94931 )Arog08
‘(guouc-eupyana = apt ano
rm RS TE
#( aouc-oupt doa )TTe "mows
)
(0 < 4p) gr aeTe
£( Amos ‘wano+agT )Axo06
eC eury doy }TTe "nous
aed
ee
1" Axnoedos “emno4a51 )AxO30B
!Ceurrdoa ) rremous
frsawuot
Coemig
( fp ar /xp aut )ppozoe"wrAs sueMeTEs prow
dd O42. 61-LE in6unsi]
rumuwan ex woe
umnoy “eidasp 18 eBay
(dn porttosse, Bu
0S A> /) seTe
*( gunop Burttoz3e, Bet
Fo < 4p} at ote
«
£( kxnoedoq. "sm9+33T )6x0308
(a> xp 1 33 este
1( Aanpedoa ‘mmno4331 )Ax0305
4 Court doa. }TTe"AoUs
feexemoT
>
fo
Aceasta poate fi, de asemenca, s felul urmitor:
AE | 'feondt [| cond) >.
‘este ignorat - expresia are valoarea
ccontiniind or (\) are valoarea true atunei tntreaga
‘operand nu este evaluat. [n ambeie acd al
_Aceasta inseamna cf urmatorul text este corect:
Af { (toonal) && {1eond2) ) ... /f testeaza sf. de fisier
17 daca ca este deasupra este adeverat, atunci
atribui variable’ bot_!
Listingul 11-20: TEFIL.CPP
void Eilewin::show_all( memline* startline |
41 Ealtand cu editorul nostra
“eens ender nent at
emLi
a2 ¢
= startlines
at start of menfile
Bf ( cloonext 1// has 1 or more Lines
cl = ci-pnext,
top_line = ct
textattr( FILE_WIN_COMCLR }
enear():
48 ( (etootent) || (etonext) ) // at at ona
for ( int row = toptly row < ptm; row }
showlinel xow, el-ptext }1
42 ( el>next )
Af ¢ (row) < pem 1
ci = cl-snext,
bot Line = ety
(/ scesta merge:
iff el-nexe )
af (rows) = ptm)
G1 = cl-snext,
[i acesta mu merge:
AE 1 cl-onext
if 1 Crowd! < ptm}
eh = cl-snext‘dO TIGL Us pouny
ETOT gogo euyzonq
ZIOT —_-NaBa~O9 SUFFODE
ror —_anpa“o9 euFz9pH
POOL sa wOsuND SUTFePE
(Qaurraoyst aut
(pus aut jop-a¢pe aut
eyeatxd
Tes aUiI04 KOR UUEAANUL BS HIGedeD LY BS dIOKOU yy eA
yours osaiewUNguA! ES asa10p “ody
‘yjenjoe voumsiey “Cou 3081
‘SITIO ee
2205709 uznaex
tna™TuG9 9fe>
faoe-op uxna0x
Fanpa"TMLD @se0)
‘mqaTop uangex
RODE seo
tanpa7o9 uxaox
ranog 9803
eT wosuND wxn3ez
cma =se>
MORNIN 95%)
dd OWOSL ‘22-44 nBuAST
2] aedngpe ain
sojaqsea varesea
TO6T aft HAGNIM 31739PH
FTOT OE OD eurzePH
SEH CECE Cee e era ere err -eP PEPE EP eee Pree
bee Taisou jmioNpe nS PUBS Th
SWOLIGS ‘42-14 NBUNSIT
‘reso 98 wun B&e HSCWOLIGE
1d wiadaouy “dp no Baelseus
1) “aumdap Few WOALOUT B
‘umewan uns
A vy9s v naued L447) 18 eHpadsut © nnad pa yaTY Jo}FZHOWOD easEZy
uy atsqeusauo> sojafesour
9350 18 Bjdunts rows 9950 UCB
tins Gf umionascr vutlad up) pags myer mp pelo atszaese
sxverg
este
eax@ue-T9 = 19
Cue > (tHM03) > 57
& axeuero
ad 25 vaseace easaqto TazcqeTpates exeztesp //
ppeoag
sere
axeuc-19 = To
(wig > (rin02) ae
Caxeue-t9 ) 35
e6xeu RU eRSEaoR //
NOP B 29 vaaD aysases as 191 “2p90%
radu 3-4) jMsoreTicwoD “BaIE}UD
Beans Sod UATE BS oeListingul 11-24: TEFIL.CPP
void filewin:rmovet int ax. oy}
/* Calling routine MUST ensure that the result of move
is within the window!
gotomyi iftteurx, toptcury
int file win::is top_line()
‘
return ie_top_line( curline };
int ile. wint:ie top line( memLine* ml )
t
weturn ( Imloprey ) || ( Iml->prev-oprev J;
?
Ant Elle wins +is_bot_line()
c
xeturn is pot_Line( curling )7
y
Ant file_wintris bot_Line(meniine* mt)
«
return ( imi) || ( tmi->next 1;
nenbine::menline( memiine* after_ting. char* txt 1
Cet Nene ne ens
au versiunii eu un paremetru,
topibottom si fie programate 0
. aeeste ar putea si nu dea acclast
i. de eroare,
test oF (jp, ca ce!
s bot line(), operandul sting este evaluat. Dack are valoarea tue
‘of are valoarea true 1 operandul drept nu mat este evaluat, Aceasta
poate fi o sursi de erori, Pe de alté parte, asa cum aratl acest exemplv, se poate
exploata acest avantay pentru a obtine reat
‘i considerim urmatoarele:
// presupunem ca mL este null (fisier viel
wetuzn fim} ||.
7) mi exte false, astfei ca Imi este Crue
a
411 Editind cu editoral nostra
11 Baltind eu odtoranoptry ae
4/ evaluarea se opreste deoarace |] este true
J/ presupunem ca ml mu este mull (0 linie text j
geturn (int) [| ( unl-saext 17
// mi este true, astfel ca Imi este false
71 ml->next este evaluat
Acum suntem pregitity pentru a adauga net of
nt case fn file_win::edit_do()
din TEFIL.CPP. Listingut 11-25 arata aceste modi
Listingul 11-25: TEFIL.CPP.
case CURSOR LF:
Af | (ARLLPTLWOD 5
neve -1, 0)
Af | lonar == 0)
msg( Yat left” )
euse
win.scroll( -1, 91;
break:
case Go_RcUP:
‘
Af ( 14s top_Line(top_tine) )
win_scroll( 1);
alee
mag( “top snowing” )7
break;
?
‘case Go_PapM:
Lf ( tis bot_tine(bot_1ine) )
win_soroll( 1);
ele
meg{ “bottom showing” ))
break;
eae GO_BOF:
msg( “going bof” );
break;
y
cose GO_f0F:taoxd<-oup {ano = eapT ano
(#47 (asp > t fo = 7 U5 ) 203
eat doa se uomE sv dn oUFT Ino ORE //
trreoza
bere
tagxG<-oup{-do3 = oust dor
( aszdcneutT 403 ) 37
(4359p fezts6d > geqp fo = astp ) 203
(@tayssod 37) Bed ouo da ouyT doa stove //
,
(tos worserpp ) 37
faeyp 3ur
ft-doq-uaq = ezts8d 3eF
be
unop eBed «=r
fan oBed mx T= WOFI00S5D 4/
(norqesz3p ur i Trors"urA::uTATeTTS pros
‘dU 2-4 InBunsry
dd TAB UP
‘nou nujuad (jiods) euadep sunisi8A 0 yuUiZaIdaY 4:
svonuisazep aluroasuos na BUINaT BS 91800 FIUDADAY| Uh
“oss aun rLeIoUs! f eessN aise BIbauH aumtido o afore v ap oje Lantus
eaBosd wwe ounny “Zayyvo?
980 yfuosin9 woundnsaId Bg “Y
ins (uy aseS no yatsy mun aye 1
"yeSye op BI
‘aur 0} wInWu ure aniedap 2p 19 n> 9 2apyo3 waynd ‘sn
ae> wy ‘out doa B| ap sugstidap uv ep waIvOjeA no aUII~IND WARSMfe (OUNY
‘uedop ap 199 wautas ys arnqon,
gS 9p adwoude U0}
Ind fe) wreidwos
jan uz ajoquie
Ip tnze9 ynop waAy
‘van
noaxa v muted yuafyayur ap qua!ayns “Cjjoros ULM naned YunISte% Lot
afeianies
aun warmioqyje Bj moda Ys uno "eysOO" HoRy BS PZHaUOHTUDNID 20 vBQ0 a1dsap afesoUU
2p Blut] ad aysnqou apimodes vUN}gO as BS aiNgaN poo wa0w PZRa|NI 98 PUB)
{Ap auy Sp aay )pToaoe Wem! uEOTTE prom
‘
£( dim eBedy )Beu
= WOP30OZFP ) ZF eaTo
( gunop Bed, ) Sour
unop BureS //( T = worseayp ) 3
an anges // ( T-
( worazeayp guy )TToxDe"upA: rwTATeTTF POW,
( Armo+doq “xano+93T )Axo08
dd WSL 92-11 nBURSTT
dada,
‘uwnoe yugd op vounus mse v nuaued
waind winoy
(-oimsooe
wy ‘Banu anawered un
Noung “nqsureed un no
uu 8 sas
we now 1S wa aHauNg BNOU © ¥ZEEIOd? NADd OD IS {NDA~OD Ase
squmrid ‘Soot mnjade. n> JOR" OO 18 JOU OD 289 ajiunuide ye|MUTS wy
sreaaq
flay Your
dont oseo
‘
teoaq
£( ,309 Buyos, )Seu
1
ae ‘SOW [HIGHTpO HS PUBIPA VF
wedno wed s0 UreTEAUT eS ee326 ‘Sd invatim C+ pas cu pas
LE ( dixection == 1)
11 move top_iine down one page (if possible)
for { dist = 07 dist < pgsize; distes )
AE ( top Line->next )
top_line = tep_line->next;
else
d
/imove cur_line down as far a top_line [if possible)
for (int d= 0; i < dist; int)
S€ ( cur_Line-smext }
cur_line = cur_line-snext:
else
«
oury ~= dist-i;
breaks
>
y
show_all{ top_line };
gotoxy( Iftecure, toproury }7
void filewinttwinseroll( int de, ant dy
Cu acest cod, tasténd PgUp sau PaDn. veltavea un comportament corect. Acum
putem continua cu Cir'+PgUp/PgDn (sau oriee alte combina de taste se aleg pentru
2 genera mesajele GO_EOF/BOF). inate de a trece mai departe si organizim putin
coal seis.
Att observat cf fiecore apel ia
punem acest gotoxy
jow_all() este apoi urmat de gotoxy()? Si
). Si urmm pasii de mai jos
&
PAS CU PAS
sférsitul funetier show.
2. Stergeti apelul gotoxy!
yi€ditind cueditorutnosty aH
fin versiunex cu doi parameter a
‘Accasté operatie reduce figierui meu EXE cu mai mult de 100 ae bytes. Mar
‘ns& este simplificarea codulut, cu co
care fl vom face si in mcgorarea costurilor de t
INDICATE isunerd
‘uneort un earacter bizar ca element al chenarulu: uneia sau alteia dintve
jog? Aceasta poate si apard ca urmare a unet erort in TCLite. Pentru a
12 problema, se compileaz2 separat cu AltF9 1 apot se construteste fisierul
i eroarea atuncn avett 0 eroare in
PaDn. vet f
aD (sau orice
case GO_BOF din edit_do().
Listingul 11-28:TEFIL.CPP
eave CO_S0F:
“cur Line = mem_€ile-rhoad_Line;
4€ ( cur_Line->next )
‘our line = cur_1ine-onext;
cure © cary = 1)
sbow_all( curline };
breakJOX OD.
(Carzigy ew emosip wos 0 .ep "UAHolgNSw
uo EzvaIsaY Wu Wey oq) “a sued eiseoR jr
8 9 jun 1S aE] © pUBUEILOD “pia sousy un seasay wy
poo ass nea opp Ade 7
teuprano © oupt trea
( weryyvaxeajgoag; + otrun
= saur,
gnaut ‘suprsno) ourrme aew = eurpanS
vgnqute, 9 ay
#( erys7axe9 ‘yeoT “Raut” | e803
op
See ECE CeCe Cece P Peer
ee ‘uisoU [RIGHTS ne PUES FF
sangan, are
\qede> YF wos
flax yung eye 2010 18 29
nu rung 1wotwuIrsBog “18
feavpuemosezou eTe //
imdaap nun 9}
nV “axajdwea teu
© tisy
RGLNIE OLDS ¥ nuUad 9199F9 aISOOR ti
(33 ypurwos
= srqury
‘(yeotuanaut wud
feuttpesu = aujTamo .eUurrusH
es TAN) Seppe mpE = ay T EEE
133 = eT HT axes
(33 vetig JoTtzuou: serrauou
dd WAAL 62-11
BUSaone
fe = pm a rs ust
IsUOUIIP vo f 18 Z Inguae ¥ 9p wyepuEMIODDION 9160
| = Axa © xno.
aeainees teereae //
"y= kana
ete 0/7
no omvajeat quns wyouy wSe eBUpIs Bf IdEasp BL
‘Wedns eed +0 weieAUL eS
‘eeam gisit o eroare in grupul de mst
deja?
Daca s
la stanga. Tot ce trebuie facut se referi la o simpli a
Si invatim C++ pas cu pas
‘curt va fi setati Jao valoare cu
case Go_BOF,
LE ( iour_tine-smext ) // at notton? done!
topline = cur_line = men_file-tail_line;
int pgsize = ptm - top -17
int backup = 4) // start at last line
I] find the top of the page
while ( (backup < pgsize) se
(cop_Line->prev) )
top_line = top_line->prev:
baciup++:
?
11 position to the end of the last Line
curs = strien( cur line->text ) + 1;
// scroll right, if need be
Ant toofar = curx ~ (zgt-1ft-1);
Af ( toofar > 0)
«
char = toofary
cure = xgt-1ft-1;
>
cury = backup < pgs
2 backup-1: pgeizey
show_all( top Line };
izeazi GO_BOF end ecranul
{4 Editénd cu editorul nostra ETSeeaseseeeeeeeeeeeeenE™y
11 Baltind eu eden nest
Listngul 11-31 aratd modificarea facut tn optune case GO_BOF
TEFIL-CPP.
jstingul 11-91: TEFIL.CPP
ease GO_a0F
cor_Line > mem_file-sheaq_line
if | cuz_line-snexe |
urine = cur_line-snext;
Cu aceste comenzi adaugs
manevrare a ecran ymutarea
modul de afigare ecran total
COMUTAREA AFISARII PE TOT ECRANUL
iny din nou, dar aw acceptati fisierul implicit
ygram mas lung, TEWIN.CPP este un bun
‘i utilizati F5 pentru a comuta in modal ecran
12 noastra sarcind in acest capitol. Pentru
fogic Si un set de eoordonate
clasei TEFIL-H. Acesta
ind se comuta
Listingul 11-92: TEFIL.CPP
SPIL.H-~file-reiated clases, Tiny Editor
pyright 1995, Martin b. Rinenaxt
fdefine TRUE 1
Hdefine FALSE 0
HdeEine AT TOP_WIND ( cury == 1
(eopteury) == (btm) )4003
Ca Ban
40N ese
‘SETI Iman] w 09 Ga"TLAAL Ws asworgeEMdsoH09
runyjdo toun wareSnepe # o90n end “Opus” eyj6 wl smponu! rnfesaw ny
2! Q)puomuTm azngaz
epOUTUTA = SpouUT
SeaTERD 9080
tramyos"w1000% wnaex
264 #89
HoaT0p emma
NOSE TIO 9605
‘da QWOAL *PE-LE mBuNsTy
‘Pnow o eénmpe & mnuod ‘gdyGWOAL wp Opus uw e
toe? ai SAO NIN euTzEDe
Tost —-NSENDS"HTODOL SuTTOPE
TOT sos 05 surzep#
W'SGWO.IG3 ¢e-H4 InbuneT
Fesan now ysaoe gaurzaxd ¢¢
“11 mBuns'y “HrSCVOLIGg w ofvsow tou vEngpe v und now wip a
‘Sutipad iansasey wane UW BLfe 9s varssoe Boop £
uisnfe 2 op wioasu wud stiaigord ajeun sonpe siowan Iss9y
"4 1862 tere IMPoU uIP eMMUIOD HOA pup IDuTIE sea04d YP BSIOAUI HOA,
x 9A WOA (PURILOG] MeS RAUL B =f
ep “OWI |, BueUeR aIs9 ¢4) cq uIpsede pu
TUCLIEN wae HoBloTe BE
“(nm sourn
£( 7m seuyTwou Jeurp~dor-st sur
Qsurttaeast Sus
(pup aut )oD"atp= aut
syeaTad
“eps503 prom
qurader proa
29EUTA DIOR
UorqoerTp GUT )TTOxOsTUTA TOA
Ap aut “xp qut Jozrs7utm pron
Ap qut to ur joncaTuTA pron,
ECA aut ¢ aur yenow proa
E( a8 ,qeu ‘sox qur )eurT MoUs Broa
£( sur[aanys yeuttuow )TTe-Nous proa
Qupretts~
C33 qanrg ‘owe esa ezeu UM TES
orrana
taygreavs 13627save ‘dox"eaes ‘azT"eaee 3Uy
fopowwoozs3-T123 337
fepoursuy any
worgeD07 ZosznD eaTaeTOT AOpUT sy {Azo ‘emo UT
sxueTS yxeuD
fowt 'zeuoT aut
feuryans ,eurtasn
eurtsoq , ‘eutT"doa yeuTTwsu
Sys wow eT tswan
pegoeqoza
Sorerp orrand uywTotty sswro.
euryusu sseT5
STHyuoU SSeTO
auByeu"weesos mug 7IME SUTTODE
apy users gow"TIng ouTyepy
1 ao Tas owryops
1 aaT Ting europe
act ‘aysiu IOH|BS HS PURPA DP
SeaTig wed m5 WRIA ES eee334
case TOGGLE SCREEN:
«
msg( “toggling screen” }7
break
>
case WIN_MOVE_LET
win_nove (
breas:
“oy
Cu aceste adaosuri itroduse, se poate testa noul cod obtimut. Linia de mesaye
vva raporta intentia de a comuta ecranul cénd se apasa FS sau orice ait tasta se alege.
‘Acum
‘constructorut!
vvaloarea false.
‘TEFIL.CPP.
1-36 prezint&
Listingul 41-96: TEFIL.CPP
Filewon::filewin( cnax* filename, FILES cf)
dialog( filename, 5, 2, 75, 20.
SING_DOUB, FILE_WIN OUI CLR, FLTF_WEN.CON_CLR >
“nen dile = new nemgilei tf},
jenar = 0
did = rgt - lft ~ 1;
blanks = new char!81);
for ( cnar* cp=blanks; op < blanks+80; per),
Repeiee:
blanks(ail = 0
curx = cury = 0;
Sns_mode = TRUE
‘f£ull_acreen_mode = FALSE;
show all! men_file->head line }
got, 1:
cur_Mine = top_Line:
ediE();
Apoi se adaugi nova metodi toggie_soreent
prezint aceasta metadii adaugatd in TEFIL.CPP. Di
Saint copa cuee
1
I
|
1
{1 Ealtand cu edltorul neste aa
sehimbd apelul la msg() din edit_do() cw un apel la fin
este arftatd in listing)
ia mtrodusd (aceasta
Listingul 41-37:TEFIL.CPP
gotoxy’ Lftteure, topteury ),
void file_win:rtoggle_full_sereen()
t
JJ restore the screen
puttemt( lft, top, rat, btm, sereen_save_buf );
if ( ful1_screen mode ) // switch to part screen
itt = save_1sty
top = save top;
gt = save_gt;
bim = save btm
Sf ( cure > (xge-18t-1) )
ours = rgt-ft-1)
Af ( cury > (btm-top-1) )
cury = bem-top-17
e // switch to full screen
save_ift = ft)
save_top = top,
nave eat
save_btm
Le = ruLL_uer;
top = FULL TOP;
gt = FULL ROT;
btm = FULL_BIM;
1] resize the screen buffer
delete screen save buf;
screen save buf = new chart
(egt-Les1) * (otm-topst) * 2 17
repaint (}y
full_screen_moda = Ifull_screen mode;
?
file_win::is_top_tine()“E10 WK 9p 7p UN SLRS WHE BO Ul
pop vBrwoye 6 azaiasul ye uno UL] UOHPO BIBAUL LOA KE +5
ipans rex aysadse squmie oxdsap amit eM EIBAN, WOA JOHEUUAM FONE Up
‘uBo|tatsd yso08 op youl ean we NN yiAH|NeH auINqUAE O ean AMIN LIED
‘ee “orwoyea 0 sarwon = }eIAdO FO jmMaRy SO
soytod nn vaysea e nayuod
iS un Yo ymaday woypson v mnEd HEIN)
uy usmreroduioa 38990 2
‘varvojwA Dupo rounye pL
1B] ervatode (apy) pu Is (
sustysoujod wey} v ap POW EU IeWEIEA =p 1
1 Ojjorosuua aywnizoupeadns optioury wzyNn
evoy00f05 ayygzts 9p innivatop v auLges 2D
4 Oweip aqiiouny
ae : ‘a;sou WoupE nS BURP YF
39 5 "2 [Apous
‘amouadns aueioa a1re IS YOA Up Faxz0aH aud eISHaDY “HOINOD Ws EUYED
‘Qapounrxar poostzyus eoury qw2yjnn we
9p O¢ Ro [Npour surge v NBL
ai# awepusdopur jenynus aquetiea anu) ofunsIp ¥ naued (jutat foros
jw09 ulp eung owUigau ynutigo wy
‘rou 2x24 9p tie ge nnuod (jaw
aqruuad orjaury gaseaay “atm120s69 ap unur$ outiuos 99 woduaey vuCZ
108 9189 “HOICLS Ws RUUD CfutAds eT
(Couedop tear asa wos 90 Bunsen ad axeioumus HSeADe B] UMPOW 2
14, eBngpe WA) ~opLMpoN vammSOIOS Wane Ww> JAD’ GINOALL ws a1
ny +449 aparoiunsouna 16 1ieoqu we-au wesedo aissoe aieor puynuouto|dusy
‘sronut #61990) uesoa
2 FeULON jHPoU B Op laNsAIa| ¥ aseIMWOD 9p etiBsodo sHPORUI We (EU. Uf
Jes 3eI9p}su0a
1) wy “ann =p
suoqdxa sojezvawoo vareRogpe ef 3nooa une “SreuaUHO| joes a1sa0e ND
‘suosye 2p roMs2:9} o]aM wy mHTIOSIND FaLEANUL ej suds Bo "WEP WAWOU UO
1 -aiuy 0 nes Ojo o ayo no LAME MY aTUed axmIIOR ASEADY “HARSYE waseyLfop
lode 1§ rarjsasoj earesujdop 1einepe ure ‘exeuoIsuaUNpal 2p viiviade BsLI95 ¥IEPE)
stsaloeie9 aye GieoMpoN! 30 yansqU ed YAN si}pUOD 2p qeuenuos
supe
sa WSO) W BO TUNG RoUStA.aeIR PISPaRE 1 vansaiaj
jouNper ninuad atiouny © WOLDS US ys05 © BUNS PUNY “InjnaosInD vaxeOStUE
oynuuzod 18 Joréy un ways “zaede area jhucHpe “jonidne yso90 andoouy we PLE
iwwnzay
ued dun
41 sowaresfoxd ap oaganygy “wnoe yuE andes tie 3D e999
od
aatou a ap are
94 eo sxmpo ap tiguoy wonEPe LoFRMA rafenseD Uy [HH TU>K=p v 9p FRAT
94 ois0 Awl], msoupg “ywAprEUES TRIKE Raed “Teo UeISe 16 YeuION aILMPOR
sayy gmaioa os (gsvaye lava mes) ¢ a4 PuRSpe “sMponUE poO 16908 ND
SeaTo Bea sD UIRTEAUT BS seedin memorse. Inamte am adlugat faciltatea de 2 muta $i
freasia gam lutat eu text care defleszi ca rdspuns la comenc de
Pallp gt Pan ca pe mutarea eursorlu
si suprata
‘Vom constrat
am introdus-o $1 pe
pe conceptul de union, pe cativa opk
considera o sut
‘mare parte a timpului va fi alocata
‘Spre deosebire de primete caps
cere si programati singut si s& verificati apot c
si copiati ceea ce eu am scris. Este timpul, nu-t asa, si probat eat sunten de
unt programatori.
wvelul bitilor 51 von
for loon, dar cea mar
42 Ealtare cu Tiny Ealtor
caracterelor introduse atun
Atunei cfind prose
string field, am decis 8 e
general. Aceasta ne~a oft
suplimentar, De asemenea,
sim problemele suplimen
progres sigur, dar acui
care apar odath cu un cod
un fort
este mai
supramprimare. Cum mod
le programata est
un mod. 88 pen
suntem
Transmiterea unui mesaj
i avem nevore de un mesa care s& mareheze modul mserare. Listingul 12-1
nou! mesaj addugat in EDIFCMDS.H,
prez
Listing 12-4: EDITOMDS.H
fidefine Go_EOF 1014
plain_emd()
cu,
Listing 12-2: TECMD.CPP
atuen TOGSLE_INSER?;1 rede muowfuun e| s2y>21"9 9p 1ode UN IS SAO" MLOVUVHD thoes
“Tesout tnun waIcyKUsueH, Uy SUD Je asOpURxD FISTDE wN199}9 E OP afe
ssn
‘UL RRS A.
REGEOS FIDNOE eFe>
1: ( ,axeeur SurtB60n, ) 56
SMUSNI”ETOOR eseD
poe
How
GON 2529
ddA 24 BURSHT
euoridacay 2980 nagsou ynesow yo gaere are
woud €-2| 1OBUNSYT “AdTHAAL UIP OOP pe s
jo 0 sonpoxjur waynd ‘UyoLyipout soa" wySoL BYU
dn
2600 our
fugmigs s1990n w=n38z
tog e800
We
“OuPS Kul] Ad BleIpa cr
Fedo wed 9 wR ES ig342
pda EHP eee eee Peco
edit_emdQ. © solutie mai
caracterul, Avem un intseg, cu 64K val
tucrim cu editoru! Tiny, patem s& presupunem c3 niciodat nu vom fi aproape de 64K
comenzi difente,
Experimentand cu union
Un tip un
situatia noastra,
fel
care ins este ula penteu
jorie fn dowd sau mat multe
struct two_chars
char cL
Aceasta defineste 0 siructuri care contine doi bytes. Bineinfeles un intreg, ne
Un tip union poate aefim dot bytes de memorie care pot fi
two_cnars t
ant at
regi comen
byte sau altuia al acestet comenzi.
‘Sd incercm un typ union jn T.CPP. Listingut 12-2 (total nou, deet nu se afla pe
ise) prezinta cum Iuereaz un unton
Listing 12-6:7.CPP,
#imeluce
eteuct two_chars
enar cl,
enar 62
Si invitim Crt pas cu pas
42 Edare cu Tiny Editor
Apbateare cu Tiny Fetter ag
two_onare to;
| ant a
ant maan()
cnars_int cu;
'
suprapune aceasta stn (reg. Aceasta permite adresarea unui cuvant de
memorie ca un intreg sau ca bytes individuali. De exemplu
cli = 4) // stribuize pentru intregut cuvant
atribuire pentru primi eyte
ei.te.c2 = 2 // atribuire pentru 21 coilea oyte
Bytes in RAM
ot 09
pool
{in exempiul nostru:
oor
fnteegul 258
tes, serind byte-ut mat potin sem
conventie. Acesta este modul de afisare al multor depe
| de bytes. Normal aceasta
Ja stinga este 0 pura
re atunei end ne arata
P cat caloulatorul este
reprezentatea interna infede un 9p slonou © yep arwoqgoas und re i dn op soreorea
‘urnyar wap 16 peagtas Few 20 A-a1Ka tH PpueUtoD arusueN wap BALSA oA,
© BRYO ax BseaOy "MUS 9p Img 9 AIK mud ad -ApUAADXS anog lw
sour jo T9149 Up Hig 0} 1 9€ weBQUOR}Z0d tEPIOAE EnOP afoo aunup AIEOLC)
Let no ovquess // satxo = 29'93°TS
Imwe:Sod ut aunque vozeoxguuin eoseouy
‘urarexa nes ingune P99
“arejquiese
9p varmusBo16 naqUsd 9
ehuazarg “dao 1 Bo wes
1B Haas poup ntq op tmnaé ad
Tata g TarqeoTETUMeS Teu ToD ezeouDsEN // /S400K9 27 =o
Boa am
“ai fig woseur¥ nauad tng 9p umn ad pe wesedo way eauoUs® ap tama
yom Te aTzeDqgtmues Tea Teo T-8yiq —= a // feet = 9
sadeaip ano axeynuy wad Bout
Jon ye aneounmDs rows fo> joy WHOL viaing “Faw IRN Te
180 ena wy a6 un 200m Rad BRUES e} 24eHI 2p |nloyEIDIO
(74) Asaaonueo weg FenBu2 Pa
(ace s3eqtnees) vbutas er T27G gL ezEesETdeD // | HoT = 7
Hyuaqe6
HC great
vqorpa to
leet | py ©t 7 DUE PE ST TOBE OTT H\H\Q)aITICD
1) x08a79)
tose = t
feo quY seus
Our ut
‘e-t1 mnBunsy wy dd’
nicimaxs no tptowtiadxe BE “Sulg 9p Jey FI BEVALONT esnidO voFe) “HINzAL nynaMAL
‘vamwoyea yenodes & lode 16 S9}q lop Fo}29 OBA yHngiAIe E MAIsOU ynIBULEX
reauoo ¥zE7
fo op atjeoor 0 erereasa} pmuunad yo wrauncnsand) YAY wh FLUNG
amu mun re aiorjums utjnd wu rarkq und aurapou exvoseooud =HNUTY
YON
EE
oe OUP Kany ns oneupa GP
‘Sedins sed v+9 WRENN ES‘Sd invatam Cr+ pas cu pas
ant 4 = Ox7FOO + 12;
{/ ¢ este eniar 12
generale ca ct
eviti. dependent
Programarea la nivel de byte
Acum si pnem aceasta idee i
jncdt plain_emd() va returma un mesaj compus, ineluzénd o valoare de
cand este tastat un caracter,
Listing 12-8: TECMD.CPP
int piaia_omd(}
int ¢ = user_cmd
Le ( (e >= * 1) Ba fe < 256) )
return ¢ + 0x7F00;
sniten (6)
case ESC:
return EXE?
‘Aici am combinat o valoare de tp char pusé in byte-ul mar putin ser
vvaloarea Ox7P pusi in byte-ul cel mat semnificativ
principal, Codul asocrat este pus
proces
tvita variante case pentru fiecare valoare posibil& a caracterului care poate fi tastat.
INDIGATIE Peer
Instructiunea ste recomandati cind ave valor individuale, precum
‘comenzi. Trevuie si fol if si else if atunci end vreti sa testati valor
ox7F00 )
use_char( end );
return FALSE;
// not cone
ant cone = FALSE;
case EXIT;
Listingut 12-10 arata corpul metoder use_char() care va raporta, dacl sa tuerat
ntentia de a inseta sau supraina
ta un caracter,
Listing 1240 : TEFIL.CPP
yoad file win: :use_char( ant ena )
enar ¢ = ond; // drops hagh bits of ena
3 (ans_node } :
eprantf( a, “Insert ‘to’, ¢),
msg m );
sprantf( m, “Overstrike “to"", ©)
msgi
,
voia file win::win move( int ax, int ay }
Adiugali o declarate pentru use_char() in det1( axeagourr”mne )uetsye = uot
“( axegc-ourT amo )298" ped = gxeac-sury ano
(et < (xeuot + sano) ) oTrum
(axeac-ourf ano jusyzas = ue 3uT
& )6su
» "w ) yaursds
pip go 64a yBry sdozo
€ pap aut 1 zeusTesn
ait ycvatede as Qs ped “aeaxop 28
wosine PaFEMU UN “apuMNe 28 2
Ye as wisaoe you
eurun] WaMHJI94 aloo yuUK BOLO} yiULAS
lwdaou Ys wma stiouny wseooe pueay
Jojeia}9ee9 eorewudwyesdng
1 wredui09 0 ales ad Sxa1 ap
© ojarayoere> rarewauues
Pee eee eee EEE eee ee Ce eee eee ere EEE
2a9°NIMAL 30 BUS 77
tage nou uangex
238 8qeT=p
ue pro es go PrE 398 //
oan
(es cana ease SGT) xp
a
7 “oIpy Aa no arePa eh
fuey 4 a3sTaeu = do yxeu5
Bute mou ey Jo pus oua TITS MUETG //
F(x 'aenou )Adozas
Surzas pro eus ur Adeo //
1 + wes"UEs ava + UOT IzeyO MoU = age NeW yzEUO
Surz3s roSuot ‘meu e 932820 //
2: (238 )uetaas = ust aur
(.s38 yzeu> )=ys"bed yxeu0
dd NIMEL :LE-Z) Buns
“dd NIAVAL #1 WHBnppE aise aves wriouny wrEsE [1-Zt HHBUNS!T
njopow vdnp gxvjadv oy ys (ays ped vo wuopOduM 916%
exeq0e129 9p ITS yTe UN UNDE WeRe//
wexectyyan exee // #{ Suraas"suos | sas" ped = Gutais” sus
Suyaye"ouos eeveztq Tan ee //
sbuqz3s7eu0s .7eUs
sjejist vlade tian 0 go aundnsard
sung wou eIsuooe Ab yeBnepe WE “ed NIAVAL 1 imuSiEys
2p goatoyiqiq 0 efep aM
ed wtfoun
2} ‘aspjoene9 9D 0}
law 99 pd] :239}08280 9p
IUOIOUMS JeO di ap UOT o FeRSaID 25 “HK
Imsagys yanp varous ogtusad sv-s nu poup yawns ou) 3 varouTIsdumEIaNS
a19yowse ep sojuun|S eosepUNXg
Bed no sed +45 wiRTEnUI eS aE350. ‘Sd invitim G++ pas cu pas
Af (cure = rgt-ét-1)
1] scro1i one right
putea (0 ))
*(car_line-dtext + lenar + cure = 1) = er
extremitatea dreapt a ecrant
trebuie si supraimprimati corect.
Listingut
dreaptl, ste inserata in use_char() din TEFIL.CPP.
Listing 12-43: TEFIL.CPP.
(cure o> rgt-ift-L |
scroll one
lonart+;
snow all( top_line };
CHEESE ebb be eee Sb e ee eeea
‘Aceastd cale de a defila spre dreapta imi
astfel c& supraimprimarea care urmeazi este de fapt re
rmarginea dreapti. Aceasta ingemni c& nu este necesar nici un alt cod special
Saltul la inceput(Home) si sfarsit(End)
Pe cand testam programul m-as fi dorit si pot fol
iceputu! si respectry Ja sfarsitul
Mai degraba decat si astepti
a adiuga comen
‘mare masurd, acest cod luereazi, incercati si implementati cu propriile
‘arati implementarea mea pentru defilare cAtre marginea
lastele Home gt End
42 Edtare cu Tiny Editor
&
PAS GUPAS ————
mesaj in EDITCMDS.H
= winedit_doQ, din
sa() pentru a verifica ce ati ficut pang acum
edit_do() dacd este foarte simpiu,
metodA separati a clases file_win dack sunt mai multe lini sursd,
4
ti peste acest pas, Cu toate acestea, eu pariez c& cei care
‘Yor implementa comenzite mat repede
care mesajele risound corespunzitor la apisdrile tastelor Home
impiementati comenzile. Pentru Home este mai simp
facett griji in legiturd cu trecerea dincolo ae marginea din
inainte de a va uita {a implementarea
cedit_do() eu am pus
dumneavoastra este
le. A dumneavoastr’
Listing 12-14: TEFIL.CPP
case GO_KOME:
cure = 1;
Af (Aonar = 0)
gotony ( 1fts1, topteury )‘ECT oTTezas7urm
( (aupt qoq UT 300 ST)
naga7o9 s¢29
‘do WIL ‘Zeb Gunsry
(Qop"yparsura ayy uy ase
aqjou wuorzard (1-7) InBunsy] “OBsw rarioung wosz0r wodaot “ales
aysaoe ¥7eai TUMAL sti “2rsoryzundssi09 NOL
‘anod 09 wanaea
an94 9860
‘uaa wane
snags @seo
feow Iga vanes
HE THE 98e>
SreupTAMIE Taq uxng0x
HUD oeTe // tasne esto
pemucT7aa uxnyes
"9 RHO seo
‘Tad 882
fa woseng uxna9x
Taig 9829
TORI ay See
da9OWOAL :9h-21 Busey
injrusié1y pupusirede ()pur
Tost NEGUS TIONOL eutsepy
veor mut izaa sursere
fot _awon aed 5590
260: weHOTAgYaLisa SuTs=PR
3e0t Beso "Gud ourgepF
zeot auaico oursepe
ror SHON 09 SuTsePH
SH Cee ee ESSERE Hote EE raed
W'SGWOLIGa ‘s-z+ Suns
tee
Re ORES A ne wreua Zh
H’SGWO.LICA %
‘ajanype arvoryzundsoson ajafesous wurzaid 5-2)
‘euresfioxd 9] @ ap aquteuy “ZuSUO9 40}s008 BaNENE|
sosato vydeay
mjruosino vélugis usp
osama qns ap yrsz@yacaws ~ ja,
AAAA
"umnoe 2oquoua|dus 9] Bs neatA ase od uoSsap$ ap Lunjoy Ase Ng,
YOTSYSLOVEVS VaeFONSLS
‘pyjsefuan$ no wpnuquod ys “ueUsduTERdns es woInd g> Woy
spas ap a2ajIp 49198309 [m1
fal W200 B9bid BA NU BBC,
sueys 3 EUR neds Y@mepe (ns ped
‘onpoid
(Coury doa ) Tre TAcus
(y+ meno = wets = aeuot
/ptwT = x70
cere
£( Kanosdos ‘erno4331 )Axo306
(ptat > 2m) at
fy + seuoT - wets = xno
/( anenc-eurt ano jusqaze = uote aur
fyee3g
*¢ eupt doa ) tre nous
19 = aeuDT
sete
i ‘Bedi sed s30 WEARS354 ‘38 invltim C++ pas cu pas
msi
“pottom snow:
age DEL_CHAR:
msq( “del char”);
case DEL_PREV_CHAR:
mag( “del prev chaz” )
break;
‘case DEL_WORD
"mag “del nora
break;
ease DEL,_LINE:
msg{ “del Lin
break:
case 6O_HONE,
cae pregatitt pe
implementarea sterger
Stergerea sub cursor
Stergerea caracterulut de sib cur
sterge un caracter din text (de fapt se coptazi pestea
(© pozitie la stanga) gt apot se adaugl un spatin ta sf
aceasta-t to.
Binet
Putem sim
42 Editare eu Tiny Editor
355
din TEWIN.CPp,
‘edit_do() din TEFIL.CPP,
Listing 12-48: TEFIL.CPP
case DEL_CHAR
ant slen = strlen( cur_tine->taxt } ;
42 ( (enax + curx) <"elen )
chart ep = cur_Line->text
+ lonar ¥ cure - 1;
el_onars( ep
eprint£( cp}:
gotoxy( 1Fttourx,
11 aelete one cna
topteury ).
msg( “nore tk” );
Cu aceasta functie vom fi capal
continuém prin a sterge dupa sfars
stergem caractere jn interioral textulut, S&
textul
Desi, de fapt nu este adevarat, dorim ca po:
i cursorulur s4 apar dupa
caracterul “Wn, pe care apisarea tastei Del (sau CirH+G) jl sterge. © fimette su
le cerute, utilizina un cod foarte simpl
2-19 prezinté modificarile adaugate
ingul 12-20 prezinti textul sursé al
Sd introducen declaratia cat_next_tex
Listing 12-19: TEFIL.CPP
case DEL CHAR?
Ant sien = strien/ cur_Ltine->text );
Fi (lenar + curs) <="slen |aexc-ouTT is = do yzeuo
Gano + xeoT) ) st
(wore
© JUOTIS = uste sur
1 ( gxeac-outr
(Qzeus Tem: wer STTs prox
See EEe SEES eee Coase ea eee
sear
* Qe" Top
aH 1ag eee
PEE EEE eee EEE EEC EE
dd0WSL 1271 Buns
nu wap “oxvsaoou alirouny 230) opiand voutowase af
“o1sBi016 mnuad ss0p oovdsyoeg yre:
ung ereO asi298 wap ULDAYy oUt
néooe aauip aud 99
Imiosino enw ¥ nnuad 1S aresosur
UP (nsoioese9 aBuars & nud sovdsyoug mse) LzLen
meosiad syruinuy
injmuosino ees uIp injnsay2eWe9 ea1aB01§
“soudsyong wise pi
109 oured 0 wuLI0) &
Jetoet9 um ediox$ ys 18 (Rideasp Beads lode “pug
oBrow gs wayeHTq}sod Koaw ys atngan “un
faaeThou = axe3¢eupp ano
fgxeac-ourT ano s30Tep
axea s eur ano operdex //
Fano ‘do )Kdoaq©
+ ( axeg-axeuc_suTT do)
9x99 8 ,9UFT 3x0u UT Adoo //
or
(wots < te ) ortun
ixano + ZeuDT =F aut
iuopeszgsT nou = do ge
( axeacceurfans )uetsas = urs aut
popeou Jt ‘pus Se TEE xuETa //
1H ameaccourt ano ‘396 heu yore
: ye} quezmno ut Adon //
Hf qyuoqe"axarsamoysevor lass mow = =ySTHOU ¥ZRHO
"Cynenceanoucreupt iano Joorays = woTe at Wet
osarsnactien zeggng butzas neu 366 //
fusngex
( sxoucourr ano] ) 3t
300 9e POTTED FT 3TK //
gosmo 03 ano ouTT quezzno sped
fe puoKeg $t z08zN2 31 “SUTT
yueta ‘eurt queszno 30 pu our
susrane 30 area 09 @UTT axOH MSZ IeHG FERTUEREDUOD
O3xey exou geo: UTA TTF prOA
‘dado WAAL 102-21 Buns
38] 4xeu 20
4437 )Ax0306
(a> jxaurzda
do is3euo Tap
o( kxnaydoq "x
BUD Bu ex8TEP // *
7s "Soup Ful BS areas ZT
‘Ben Sed v5 WIETEAUL ES ee 998358 ‘Sa invatim C++ pas cu pas
+ lonar + care = 3)
del_cnars( cp }; // delate one char
epeinet( op )
gotoxy( 1ftrourx, toptoury );
alse
eat _next_text(),
delete cur_linepnext;
show_all( top_line )
void file win::use_charé ant onc
areeeeeceemE—mSE
Evident textul de program prezentat ca ‘este de fant
‘grupul de mstructiumt cate apa wea case DEL_CHAR. Cand veut testa aceste
1 va trebui si observati aceeagi comportare c3 Je efectuarea acestora
‘otugi acum vom avea o sarciné incredi ind vom implementa
factiuniie cerute de stergerea unui caracter inapot. Pur si simpl von muta
cat ‘poi apelim dei_char(). ygul 12-23. prezantt
‘winscedit_o() a TEFIL.CPP.
Listing 12-23: TEFIL.CPP
Misting 12-28: TEFILCPP
case DEL PRI
HAR:
Af ( cure > 1)
gotony( Lfttcare, topteury )
ol_cnaz() +
else
msg( “nore tk”):
oa merge
Executati programul cu aceste modificiti 51 vett fi satisPicut vi
‘Acum trebute si rezotviim eazul ea stag a ferest
‘este cf exiti 0 cale de a rezolva foarte elegant ac
ste complicate,
a
42 Editare cu Tiny Editor
Daca sunte!
a defilat cdtre dreapt
coloand ta stinga
trebuie si ct
saul nd jul. Deplasarea la sfirsit
scenes se dreapta. Operatia poate fi
daca poritia curenta nu este mazginea stinga
depiasare q
stergere
Gerilare o pozitie stings
deplasare
ciese: daca nu aste prima Linte a toxtuaus
trecerea 1a sfirsitul Linie Ceventuss defilare)
altées namic
Acum si simp!
1 de stergere, si fac pa
testa, de exemplu, TCLite vett vedea ck o
(Ciri+A sau Cirl+sigeatt stinga), daca este introdusa la
conduce fa pozitionasea cursoruiu la sfarsitu! cele: precedente. Apo! and am
END, am sons deja textul sursi pentru a pozitiona
Intro funetie separati. Pentru c& suntem aici, putem face acelagt lucru pentru te
sursi de la GO_HOME. Facdnd toate acestea, observa c& programarea acestor
actiuni se face
Listing 12:24: TEFIL.CPP
ease GO_HOME:
ge_nons() ;=-Aano
(1 < Aamo) ay
Burnous gt ‘oust snotaexd 30 DUB 03 OB //
_ fuser
*( surtdoa ) re nous
=-2eu3t
(0< xewt) at
gO UesaDS 46 JT '4z9T TrOsDe //
(r< smo) ge
Ag0T 98 30u Fr '30T ouo azrus //
Oates sutAoTEs prow
SEECEEE EE Eee Eee Hee eee HEE ree epee eee eee eee eee
‘adOUsSL 127-21 Gunsry
END ) IT
Hy xeuot - wets = 200
e( axeaceurp ano justa3s = wots 9uT
()pus0B: tum erts pros
£( gary doy ) Tre Hous
fo = 2Bu0T
pero
+ ¢ Ranoydoy /T4agt ) Axca06
Co e= zeuT ) 3F
fy = emo
(QewTob: eter rs BrOA
‘dd 97-21 Bune
pasos
tango sseo
Bed no eed +39 GRATES
Oe362 Si invitim C++ pas cu pas
cur_line = cux_Line->prev;
ge_and()
return;
J] go to end of previous line, if there 1s one
Lf ( His top LineQ) )
gur_line = top_line = top_line->prev;
ge_Bna()
nee !
vote Files
nt rgo_pome()
Funetia back_up() este mere, dar nu
a un moment dat, cu o instru
st adevarate.
e isi
SUGESTIE
Metode ca back_upQ sunt simpiu de
tun moment dat, fnlocutt restul func
posiblitate, _ i
Posibilitae, =
Segun stngd sau Crs. Mute eto de te
hfe dopa ve a eh
sc stir margines a 7
eee aor nto backup) [a margins sting
atone aa 0
arfta astfel:
1 se apeleazi.
‘Acum, avand mplementats ope
ybleme stergerea la stinga cursorut
rastei Backspace. Odati ce att de
ft
supra
de deplasare. putem pi
mplementarea este simp!
42 Edltare cu Tiny Ealtor
363
Implementarea mea este 0 mostri de simplitate. Pute: gist satisficdtoan
aceastl var comportarea fa marginea stings,
Scopul urmarit mu este accia de a serie un editor dupa gustt meu, ci este aceta dere
serie un editor conform cu preferintele dumneavoastra, “
Listing 12-28:TEFIL.CPP
case DEL_
| CHAR
backup
ael_Saes
Adaugati orice alte a&
asupra comportar
Backspace. Daci at
ceuviint odati,
dont: pentru a obt fa dorita, Howratvat
ic cind cursorul este fa Inceputal fisnerului $i tastai
Stergerea cuvantului curent
rama aigortmal pentru string_feld, am gant asupea a
etc, Putem re
text sursi dgja sens. De fapt stergerea unut euvént ar fi foarte sim
pane problema de a rispunde la aceasti comanda pentru situatile cfd cursoral se
i sau dupa acesta
a corect va fi nevore si cunoastom cind cursorul se afl in
inseamna in once pozitie inclusty
‘Am adugat dowd functi membre ale Iut
TERIL.CPP. Cum se poate vedea din listingut 12-29, acestea sunt
is cold,
vstrien() raporteaza strlen) pentru partea vizibil a fi
spatile de ta sfirgit su
Bindindu-ma la acestea cénd utilizez edit
Listing 12-29:TEFIL.CPP
int filew
:tis_pot_line( memlane* mi
return | mi) || f tmiconext 1;x 208 VOreULCAP InDsIp
9p varoBuoy$ vj a20N ayeod 2s ajuiand ap s0}Ls0foNS arRUaU
uy adeauy nur gam
28 waiaBioxs pup
pnyout exe
- 1 Kanoedog ‘2004331 ) Axo308
(axexc-ourp ano ‘Aanosdoa Joury acus
SC te-ge ‘16 Jexeus" rep
: (18 )pzowaustx = ze yseuo
TomanoseuoTsaKe3<-OuFT ano w pe jaeus
fywoag
*Qxeus ep
fo= (1 = emo 4 aeuor
+ axogcourT ano )y
wuepa Burtees; tae eq Aew iea0u //
sore
Leesa
( Qeuyraed et ) gt
(Otes"er ) at
rovoN1gq eceo
Pee SEE EEE EEC eee eee eee eee eee
dd WAL OFF Bunsry
sof wurazqoud purty 96 ‘SuoyoE109 op yAuTE UY
maya YO JORSe undso102 (
yuan Uy] PUgUAIEOUOD “szaI8 21S
p uiofiay$ ys Hinged uiowuns “eporow aysooe od ou-npupzeg,
‘areur re soyoese9 tin pllgeD Revaseydop as iode 16 Qudjas vijoung Eze
mn. uu exe} HTN © areD od CUO? Uy ‘eIMYsBCe P}AvOID 8] NOS“
aisod
NUL 208
Isa tariouny & pRoaio vaxeziAM UU “(Oost eHouNy
(akes sueu geortuTe @TTs PToA
t=
i
(ze => dow) 99 (9. < &) ) OTM
-use56 yew
2( 8 juste =u aut
Qvetme (ooedsearun Susrres; BurpaToxe) TeneTA //
(8 exeu uetryea:sutweTts aut
b{ axegg-ouyt ane }ueTsQea < (cn + qeuoT) wzNzeZ
- i '
Ores et: reme ets aut
easSiegs ©) a4 BS NUS W¥Od MAOSIND “2I19}4p auta}qoud Enop WaBanstcy
mausieys 2] ap najeds ojaraIouIeD eUCZ UL HYPE 98 |ryOSINO PUES OUNIE
sae
Tou Aull na SieHps cb
‘Bedn sec 49 wievenaT eS‘Si tavatam C++ pas cu pas
368
resupunem 68 get
mat cursor Hine i us. Apo, Sh presupun
a dpi tie singra tine again esas 3
in oblema, iar apoi sa discutim despre aceasta.
Listing 12-31: TEFIL.CPP
Listing 1290: TERI
_case DEL_LINE:
"ae ( He_bot dine’) ) // sotton of £526?
Af (cur_line = topline)
top line = cur Line->next:
cur_Line = cur_line-pnext:
Gelato car_lina->prevs
Qtse if ( cor_jine '@ top_Line )
‘pea £31e->tail_line = cur_line =
cur_line>prevs
aaiete cuz tine >next
eury--:
else if ( cuz_line->prev }
7 mem_file->tail_line = cur_line =
cur_line>prev;
delete our line->next:
top_line = cur_line;
snow_all( top_line +
ngul 12-31
( treilea sunt aproave
simpls? (Eu ou art
i gs
putut, Cel putin ow
lturct end cartea va fi in drum spre publicare.)
$2 Editare cu Tiny Editor ne
Erori si depanare
Pu merg, mi
lor Wateh sau Inspect. Adeseort, ceea ce
‘dupa ce afi aflat ce este eronat, Uneor
destula' munca pl
De exer despre mem_file>tail_line atunci cénd am seris
varianta originalai a textului sursi de mai sus, Am observat 0 1
care s-au tvit tunes cand am apasat Ctr“PgDn pentru a merge la sférsitul fisierulun
Bincinteles c& am petrecut destul timp pentru a fixa locul implicat de apasarea
stelor Ctri+PgDn. Cand am decis c& problema poate file
am investigat acet text sursi,
‘unt scurt cod, aga cum
ccum merge st aveti astfel 0 imagine mai bun’ asupra
nd apare, Totust nu veti avea 0 certitudine depling.
te de a scric aceasta carte, am seris versiunea 1,0 pentru e:
Cina am conceput manuscrisul, am scrts textele sursi ale programeior, ut
ce am invitat din scnerea acestei ve mand citeva’ din lucrurile
necorespunzitoare). Textul programeior nu este perfect, dar este un c:
re cel mai bun stil de progeamare st exemple de programe care si
ilustreze acele piri din C+ pe care fe-am invatat.
mai fac greseli. Marele avantaj pe care-{ am este
Imi deptasez 51 s& le fixer, asa incét le pot rezoiva. Mergem
mergeti direct [a inceputul sectunii urmatcare impreuni ct
Si vedeti o eroare? incercati-o pe aceasta. Exccutati-va programul.
HPS pentru a ingusta fereastra orzontal in foeul unde o line nu ineape in
fereastra. Det ait ca extrema dreapta a lime sé fie dupa marginea
dteapti a feresirer. Acum stergeti un caracter in aveasth line, Observat ce setngade-oupT ano = aury ane
aurt7éoa se wore G8 dn euTT ano 3080
weoxa
{aarde-sutT doy = eutT doz sis
Capade-surT 803 1 93
| sea6%p fezr8bd > erp “0 = 36TP_) 20
(arayssed 34) obed ous dn auyy "doa woee
Opens" waa as voysea 289
[o198" tim wzeajade wSOOR YO BOPIA HOA “JOT OO [tfesaw wanes v ud
af ys amngayy "ysans ymIxo} nN,
ous 2g TIO
lun udo tian va ‘uo anus rew ap sof uy enous uvsede POR
‘2p (maISsys woKy9A pROSIND uM vALOSQO HOA DUR
Ip wueze UL AUN nO une owns “ddd tode Heseay “I918y
29m] B nud of ny EyBOHRS UO aM
up wa90
jada ayn Hew gdng
‘ammo
HE UL MeO BS sMpUOD ISOF UE ZISEODE HUNG IwOyIPoUN vIngaR PUBS 729
joaroo anogy Bs Aino ntd vareywoUsDL9aq “DUBS 9p RuOIeOIpu 3Ea,}PoW!
nga nu tinzeD ayfe|a}90 TEASE ‘vuried qns 989 eyse909 18 sou
Tounyn 2 oyso wasaiag azz j20x9 2 “BIcuNS 9p 2 ue
Rauad varoawes 2p “ANTT "TEM ttied vorBo} uo ynop ap wayueA wy
¥y sv apaop sof yeu
Injnuosina eadnse=ap ap Bi
9p jmnSIEJs Woop Sol
Teetaoe 7803 © onearewas we ama ad
Toiipa AULT Brea Zt
jada 2p HO 21
unio
yoo tag
yd wy
ms apn yzeasasozN 95 1
14a, wud siow wy
ay 8 epacox Yeu He eANpUNIe aBuN IPA
sfioxd t s1019 Hoar ys Hea nu youd gmseaqe
fo 1 amwo|FIpoUl BASED weoNy 30 BANC
singonmy 2A
inp “werpeu
EEE tere
jest
SEH eee eee
ff eury dog) TTETROUS
quouc-SurT XRD 829789
Poaxey axou 3E9
fy pxnordoy Temnosaay 140208
pp geenccnurt ane 'Asaovdon JOTT AOUE
gorwesoue ovo career // #{ do }82850718
aeaceatytane = 100
denaae =
4xoye-2uTT 200
(zeus top: eH eTTZ PTOS
dd WARLZETE GUNS
LL mp Qroys"Tep vrfoury wiurzesd
ns 0 BaAw MOA 20 MI TE
founy v giiatsiswoo vexezy[sn 79 UNG
yop # Bry seio9 od 3x1 wALIOS
200
sdap ap efiouny wari
onpii09 2u1 (Jeuy|_ mous
“mous BHOUN 190
ve aingan ny “ENSE=IEY
ezapisuoo ur pum) 2 ago 11299 G3OPISUOD aI
1¢ ayED aIs9 MI "SOV
veut nD
sbxoxe 08 9280 8 //
erarzed ef ap erurT ersoeez // #(do j3aunxdo
igo eyseaaty “1080 ISH Hoa 0 TI09gICaU aoNpOIE
88
‘Bed nd Ged 445 WRTEAT ES aSi invitam C++ pas cu pas
42 Eolttare eu Tiny Editor
wo
testi toptine>prev-prev. Aceast va ven valoare mil uct end sunt
i egomn sb ete stal de vmorl co:
for (ie dy ic 5; abe ff
AE ( waatever |
go_something:
breax:
fa 5, mstructiunea
pas de iterate
rea,
Variable castor, va contorza pai | ta 5. Cand an
top se opreste. Aceasta variabild este merementath dura
‘Aceastd comportare poate fi inconsistent cu folosirea mstruct
Blocut de deasupra este echivalent cu un
for (in 4y.2 <5) (7 doop tena 4
LE ( whatever
go_something:
else
Gb // END INCREMENTED
Dacd plirisirea corpului de instruc
‘cu break, atunct varial
testul din loop,
valoare a variabilei contor, veti obtine un alt te
‘modificare:
ant ts
for (a=17 2 <
ithe // START TNCRES
3 { nnatever +
go_somethingy
ease
breaks
am
acest exemplu vanabila contor este incrementati inainte de a testa condina
activa break. in cazut nostru acesta a fost testul pe care-I doream, Scviind ia
acest fel textul . putem decrementa variabila dist, indiferent ae
modi de parasire al instructwnii loop, Notati aceasti mici diferent:
for (i= ar i <5; it+) // END INCREMENTED
for (in Ly ate <5; ) // START oECREMENTED
In cazut unes sncrem
loop, 2 dupa aceea, apoi 3
1a fi 2 fa prima trocere pr
termmnares instructiunii loop.
Acestea produc evident o diferenti de 1
paraseste instructunea apelin |
prezintd o versiume corectata pe
sfasit, vatoarea
prima trecete prin
In ca
Listing 12-33: TEFIL.CPP
Eee a eee
af { direction == -1 5
// pack bop Line up ene page (if possibie)
Af ( Teop_iine-sprev )
return;
for ( dist = 0; distt+ < pgsize; )
Af ( top_1ine-prev->prev )
S0p_Line = top_line-prev;
break:
as much as top_tine
a < dist; itt)
™ cur_tine-sprev;
>prev->prev. Am adiugat un test
eeput pentru a fi sigur: c&/mu suntem intr-un fgier vid. (Daed x->prev
mult sau mai putin aleator -
Joop incrementarea tu dist la+ ¢ eury dog ) Tre nous
feereust
3ubtz uo [Toss //
( teagt-a62 a zn) gt
£( Ranosdoy ‘xxn04931 )Axon06
¢( axeae-sutT mo ‘Kanosdeq )euyT nous
(26
(T= xno + aout + qxe3¢-eurT ano © gd9
‘t= ver + smegc-eurt ano 4 Zdo sxeuo ) 203
fC axexcosry ans justaas = uot
#( axeagoupy ano Jaye ped = axese-oury ans
(Co. se [etetissengeury ano ) st
( spow'sur ) gt
eR<-OUFT aN )uOTZRe = UOT
( axmaccoury uno }age" ped = axeae- supe ano
(wer < (sever + xno) ) ersun
arene Sees empese Steer
Pu 30 sata ity edozp // ipm = 9 eu
(pu aur )gevoTasn: :um"aTps pros
TT oo
dda ve-et Bun
‘wuanstxo erjotiy utp ByEn| oys9 LIN|SAOE v ayed yumg Oo ED BOP
U ywOM AISA “dd TWILL, 73
utesdns w nnuod HIE WeIUNS ody “aye
our ways Bev
wedz9 n9 pugdoouy sfasoyo0
a (Oss ped
Te "Bu BoE] Suny Yew axe! op A$ uN ap oor
ae
Tops Muy wo eae eH
saoutadumeséns 83090 //
azay vourbien aburze es eoep /eadeexD extTT3S>
rerysaray vous. rs
Sueseeur sqyarod ® naqued aezoeze0 un nd aeseTdoD
z { pow yzesut )
aysayas edup 9980 eoxqz0z07 voep TRITS apUT xa
(.xeus™esn pron
rervursduyexdos ts exezseut naqued eothor 3359 eysee0W
ereurzdureadas eynoexe
gaysexey veutbzen aburye of eoep ‘eadeaap exeTTIOD
qrertgs edn vase eextzezez eoep TAATS OOUTANS //
reading aagued eox607
exeuradurexdns #p veazed //
ay3Ts daoo () 800 //
{ epow 3z96uT ) gt
QxeuDTesn pTos
ancy ap puusos 0 wine axe aroury BSE
quad eumonns RzIFIN WOR me ‘3yNOSOUND
jugiesul eesequoweyduyy
idusteacins
odo “(uamay TS) J9NU
cu Npow! Bh
SUYSLOVEVO 30 VaNVeaSNI
jonzisur wareumuz23 Zap soquoD TaLJQeUeA 9FE HOTBA Huaas pupo rouNty
spioqe ap Janse Joun wxdnse pind aproap ew
ins goufduul ek! aieo atreiFosd misOs YS 280u! FUNKEPIO]
a} 18000 2p
‘erTS Sed TD WiPIEAUT ES a:
av Séinvitim C++ pas cupae | 42£dllare eu Tiny Editor
i ars
putan (c '
i negi “Honéle Eater
s(cur_jine-ptext + lonar + cure - 1) =
Eee eeeeesnsa CeCe CeeCePesee CeCe Ceeeseesee eee
se otirplt acestea.)
‘Cand testati acest program pute insera orice earacter &u excephia curacterelor ‘Acu dorth 8 ve
newline
Inserarea caracterelor newline
mematine este
Sunt cel a caracteral newline (corespunzind Ecranul este reafigat avaind c:
Enter sau Return). Putem sé transmitem ca o chete pe care si o pr
, sau c@ 0 comanda. © vor alege pe
(e persoane utlizarea tas
in modul supraimprimare, Eu le trate pe améndoul 1a
mpartigesc aceeast opine ment
i orice alti abordare.
Enter, urmat acestt pas}
PAS CUPAS
1. Adiugati un mesaj DO_ENTER in EDITCMDS.H, Al meu este intzoaus
104i
2. Aagat o opine ese ENTE
adiugat
instructiume switeh din
3.
ctupa case EXIT,
adgugarea unet noi
4. corespunzitor mem,
5, Adiugati o dectaratie a metocer Testati mergind pe 3
TEFIL-H. O functie cu atributete publ (sau ce aitceva av
6 « definite de metod pent
si copieze msg() di
entra dumneavoastra,
iru DO_ENTER astfel ca s® apeleze nousi Hipayos ewajqaud epr0qe wi
"Worseon va1aBueyS 1S vaxoidoo “vasernt*
wy ‘ony BREA Ov] BIRJDI 98 azED aja
UOD We Iody ‘ojaseiei"9 wasvuMdutitesdns no Inds
juad Zojepo.aw wamnIsuoD S4 ye2USDUOD UNA wu Tag)
{easi¢ap op nox8 aapozo vy supuioa v arenigns wisea0e Bo nsqud O-yoK
Jans Bsins KO} UM WHOS BS PLLLOP BWA}qoId BISEIDE eADION UIE HAL
HY aNEYWSUIAZOU ep JoWIedD UN 1910} oMbOd 96 wd
Hionssut widnse 18 asta 0 youre we FaUDWASE 9¢,
“worun no aqeiau98 afareynzas vy oBuinle ¥ nud 1
1 zvauon avo woTerado +4 uy Iwiepisuoa te eoUoLHOSe
i Mo @liowiot ap auoz tou vallajas surutiod arma
ndsouos widase anaud o younte we dt
1s908
: ‘ourus esep yan Hiv nIBS
's WMI Few o0 UL 9D UEP yBIONY LE TONIdeD mIsDo8 Instore aq “CNS UN
steod 1$ azanpa ys sexepe-nuy ayv0d azeo soypa tin no
m anogyo dzaupe BS Vaan! nui are> 20I1pa uN no fouldea yseow inde
Avwnzay
GaSe Fn ‘oua}gous aisaov unsuls wEN Hiemnd Woy
Heds op quONp o¥ Ws aIngan isa augano y rsarurod |
vo "Sat Hind “enop e od wAloze
Tuunyn) uqgzia. yess
FeIpOUH Bosvaudo as Bs waRYaud Sy “varsooe
ImSagjs v] asmuauNtdns ntivds azayaeseD 3
weIpeuut yoswaido as
“mmqugana rnpéagys
3d arSaido 2s jnsos!
yay augand ynaIn
‘2 HLjnotud BRP
SNMOSIP BS louded 3s90e eIDYOU B Op 21
TRC |
(Fp prom obs iui STs By0e
( eurt doa) TTe "Rous
Kerderp //
eur rresc-erts wot
( Qeuryaodst ) 3T
Axesseoeu 3
sour ano =
fury Trea asncpe //
igxouc-auty ano = eurt ane
fo = 2eUoT
fy = x20.
sgxouc-oupt doa = eurT doa
este
beskano.
(ema =i Aznosdoa ) 34
Juezzno SUT #eu SxEU //
ot
(4430 fd, )) cox
eury quegano go axed Surrress ano wueTa //
yu yourtmou
+ (do ‘eury ano )euTT Sar,
eurt 3*
fy = mane + xeuot + gxoac-euTT ane = do seo
spree ur seezdKes zequg go 30d //
(yxeue ep: rut STE PTOA
fevop winaaz
steiaseias dado USL 19-2) Buns
ddA
aap mp ems nad soa soo
std “BOUL BIOL
i$ asede mu areo now ynpxs
“nou fe uy aIs9 mu aun ysINs say nue
oa nad ~ ave
mgdooxe “yound un
rou ayequnyo 0 nyciaxa 2p va - 9
slpyos “osbu jeu axse goecy “sound un
tu) pour v 1900 YLINDS Inu! aise EEC (IID NE
aotnd tn HeBngpe se UNE VOW v 99RD BE
3 youd °§ un pioundl UTNE
out
‘Sedna Sed S40 WRIENI ESInamte de a incepe
ne ocupaim sertos de struct
pentru a adiuga comonzile re
copiere 31 stergere de grupuri ds
Dack nu putetiastepta si punett in
TCLite utlizeaz’ F2~ 51 sore i de
‘Avett nevore deo indicate? Céutati
Sow iugnfntntea oe ss
yeaprmare cetera lize npelcrare de text ae
Tem fio opt cu tener craters eon
: ick nu vom avon aevor sh ne Opt
Tiny, de acca vor er sume room
1 eee poner not ements de C>~ Ne vom OP Pt
Onoud istic’ si pentru a lamuri o mic problema:
In afara acestora, a
Capitotul 2, veti vedea cat de departe am ajuns .
pul discuténd despre C++ 51 am programat foarte put
sau mversat, Sti sufictent despre C++ pentru a petrece mayor
programand.
incepem pregitirea pentru tra raporior de
adugarea unor not strueturi de date clase!
413 Manipularea grupurilor de lint
sunt fie foarte simp, fie foarte complexe,
st prin a considora partea simpli.
avem nevoie de 0 culoare pentru evidentiere! pentru a aria
grupul marcat si de un indicator pus la TRUE pentru fiecare linie din acest grup
imarcat, Aveasté operate ese des
Marcarea este 0 oper
sfarsit 1 de pozitionare a indteatora
‘it aceasta nu este 0 problema di
‘Acum si consideriin operatia de stergere a unui grup de fini
tem utiliza destructorul memline pentru a sterge o
‘ind se ajunge la ultima linie din
raport de cum
iei de inceput gi a cele) de
de evidentiere pentru toate
deja rezolvati,
Ca de obicei, pare a mai fi un mic detaliu care trebi Va tre
fetes, 58 actual Ai
mncheie
in grupul marcat sau in afara acestuia, Bineinteles, gru
marcat poate incepe in ecranul cut
smareat este ct ecranul sau ma) mult,
Veti vedea ond vom ajunge acolo, ci funetiile care muti, copiazA 51 sterg
sunt la fel de mari ca si oricare dintre cele pe care deja le-am scris
ra de listd inléntuité me permite sk progresim repede 51 wsor, dar num
lor Ia care trebuie si facem fata pentru actualizarea ecranului conduce ia des
cod sursi,
Adaugarea de noi structuri de date membre
i cid actualizim ecranul st marcam grupul
m scr teste simple ca acesta
Apoi
incepe grupul de 1inii deasupra ecramulul?
gistrdim prima gi ultima finie a grupulvi
Marcat (pointeri la obiectele metline). Incepem prin adiugatea a patra linii not
Drezentate in Listingal 13-1, ta defi
"ulm englFTUTT ep duz6 un tot aqse me //
OTe THT ap Tadazé eeeeucras0b /
(ou eurrgzeas"dnors ) gt
TBISOOP BO WIR vA BEANS [MIKO
eae aca ea dw sto goep wapan wnaluad
~ auf" Les dno
"wIsexa YoUp swore
Muy] 9p nana
YoIpUt ares aiguiow ayep op UnjoNIS ined RANEDE wOA W
2
var
Wai 9p JolunGTAB eaayRaIUE CF
‘nydmaxo op “rayoean9 un waSian$ avs wound puED
spipu 9109 au an
goud0 900f BOP a
inzayuiod ay s01eA 2f
aqeuies nated soy We wNoe UR 9p axEIvoUTO}auBY Uy “MyRADR] YPC
‘seoe eSiBAIU WHOA wun wpuEd au ys
njaosina B ylezuozu9
ngrain sozoere9 ups wp 1
season penanaye oy Us aingan vifesado
3p #8 tiuapuedep wayuns sn
mnawow ‘vouawiase op ‘eis “wyzrToHt
fa aiso “S1QUdLH Step ap LITAINNS aS" syEHNEPE Typ o MNEW
ee
youoyas a1wo8u BH
ona 1ep “BIqWOu! Wp ap MONS no WORE ws
“growinsues apada 1 BA
yj purBnEpe
|quodstp euowout
SLVSIGNI
‘pray yuu TOA,“
| unain Uayo BAY BIB] ieonpom
‘qulyuoun ons ve
1 dn 9p atiereyoep
re 20 dng
ut HPAL) weingpe
fou” euri pus’ dre:
teupr pus énex5 5
gos st T/T //
Sout wazoe // 0%
tageeave /362"s.
pyrand
336 ‘ou eury gzeqe”dnoxb aut
Veuyy areas dnoz8 youyTusu
_twoa ana _/Too ano 3Ut
weurt 30a ‘ou eusT doy 3ut
see ‘doqeaes ‘agT"saes
fepou 1902957 TTNg
SERGE H EEE eee Peete eer fea ceese te URLS Ee
Redno eed v0 unienTES
HTifal :F-eh nuns
OBE382 4 invatim C++ pas cu pas
Saltul la X. Y
'S& ineapem prin a afiga in col
rmesaj care si spund coloana si réndul pe care se afl cursoru
procedam asfel:
gotoxy( 1ftteurx, toptcury 1,
Aceasta sugereazi ci 0 fu
munca noastra, $A © numim goto_xy() Pet
. win dia TEFILH si apoi adat
sniroduea pur si simpla apelul functiesimtrinsect gotoxy() in defi ie.
‘va functiona ca si pana acum,
an a cluta. fi
'e vedea efi nu aft fcut nici o grese
pelurs fa gotoxy( sunt cele din show s
a. yom avea 0 functie goto 9 &
raporieaza coordonatelc c
‘© complicatie in
minima si adiugati o culoare pentru grupul
Listingut 13-2: TEWIN.H
__Lstingut 132 EX
faefine FILE WIN_OUT_CLR 126 te
2 yellow on whi
fae fine PELE WIN_CON_CLR tite en pack
fdefine FIEE-WINLINE CLA 112 // black on waite
fidofine FILE_WIN_MIN HEIGHT 2 //
fdefine FILE WINMIN WIDTH 24
ncswin,size()
iste constante nue
rouse on Ade
eexeculatt programul, verificand ea limitele au fost bine st
413 Manipuiarea grupurilor de
383
cri
stare sit mplementat 0 schimbare pri
ee prin modificarea text
programare, Véndnd peste to
programare. invita’ din pr
al dour
iting, ofr un smn Ge Sack
Listingul 13-9: TEFIL.CPP
void file win: :goto_xy
statac chax* loc_buf = * 12345:1234 *; // row:colunn
// compate current location
cor_row © top line ne + cury = 1;
caz_col = lendr + cure;
Uf clear pottom line
textattr ( FILE WIN OUT_CLR );
gotoxy( 1ft+7,"pem );
for (ant a= 4:3 < 12; ase; )
puten( border |S]
J) weata next value
gotoxy( 1£+3, ptm)
sprantf( loc buf, * 4d%a \o"
cur_ron, cur_col );
eprante( Too fut }7
M1 gots x, ¥
gotexy! ift+curz, topteury }y
Cind vet
dumneavoastra un rapoi
veti avea i
coloana po:naw soya ey guIaqqosd eisease
Woajozar ws tiesszouy Bs tog ‘vaneinype 9)
tial © msg “NIT
arede puyo out eunf-dos gzw:
© aBioxs os pups
qWWIYDS nu yRpOIOTE savouRe (a oun
varafisex$ v} o1uy ap afausumu vaypown tama pu
x04d BOAwOTRA Bf
ody eury dor ey ou]
ud nusd vareoyea,
vareSingpe eh
HHeuBise gs avo a:ngan JOG OD NAD “JOF-OD
$998 9] BS aiNgan oreo ad sueINUE ap izUdINOD yop
ujuad vareivouraroap 16 worewwowaiou! sorgzundso10>
| 1ojLnjade wsdnseap au
‘area asya yuntionsysut
sipaioo oppsyagnu emnBise wa aneoyLpow mseaDy *(Ixou pupu
sof ul sed arvsoys wdnp ou auij dor evan
vorworeA reaINaUIBIDOp 28 (AaKd pUpUA
) areds UL sed ameooly dng
preuc-outy "doa = sur doa
tavnd<-euty dog = sutT 803
StamorgUN vinpS v Ap ayse "IRIS vasEDUIPoU 29") B OP ¥IKUTS Pole -rnowIEG
ln aeop are area ()josos" tia geeojade vasaoy ‘uGEY 8 dna no Had2ou)
‘suvoryznassu09 al paLzIpoW
jausoiay ¥ atu] wud ad 2p inpugr urRAWIYDS Oo
maP BS 9189 NOH ap WOAR |-aHP> ad mADny fr)
Cransasay e an
ud 9¢ aaso |m4osino puyo t9uNn ap yiesiput
Rultad B wAIOSqO tos tIBDYFEPOUI 9ySe98 no 9
IER eee EEE CeCe er eer CeCe Pee Pe Cee EEE
C suty peeqc-oTyy bow [Te OLS
40 Ve 0 < od eur rreac-eTsy wer = ov eury dey
ee
Thai op aojandru® waseindnaenl oF
ggtwg = seouusexce 1783
Hee gaoTWiaL Fer nBuNET
oop = pia sisa sarbyy un PORP
yuod anvaxo wooU 9se0aK} BiMp ZanaHttazo0
uo BL zaxt “2qsWO
sonar 1909p a4 TW 2389 S24
2yo0d 28 24B0IRA EISEDE DUBAY ">
se vast
nr wse po vbw “HEZATA rou OTIS TONgNTE NO PALA
‘urgoyjxe no no
‘puutigy Ba 1BNO S IN BALBOTE A
faxap a guNOO™| In| wausoTeA “(ouTy Ae
‘aswowwa YoRC] TeaHpOU aise qmuuessosd
puyo g no wozl
‘xauny paige IPP avEI2 ap 9 HIN AP
qarnuesbozd eazeozwoUT eT o euTAeD eT TaeTIEA
fp = zoymed = 3
p eryaerres //_
np m xequnOS TUT
erancexe 9220073 PT 0 SUTAR:
(joung7Aw pTOA
snyaurexe rsoretan
sn BA NU NBD “YoRTOD UN MOK
x9 U1)
wwOreaU]
pupo pevasoqy>
‘zojuyseuo2 9p BEOIO 189
‘oye 1 eorenaaxe ads:
uns ijouny Yaun pIoUeTU UL aBIe|s~P oF
tay avexeroo9 arayiquureA ¢¥9)
9p qnxgumN
Geaira aed 15 WEA BS386. 82 invatam C++ pas cu pas
Rescrierea textului sursa pentru afigare
fac& doriti un sfat, acesta este: Nu fa
ceoran, nuct aja?
Apropo de adaugarea de I
Probabil c& nu ven putea adauga o linie deasupra pi
Astfal incat addngarea d u poate schimb:
opservat céteva
teresante relative ta cutori. U
grab’ decét cu cea asignati pentru serierea curenti, Am
Tea porate deoarece vom modifica codul de afisare pentru gestiona doa euler fm
rmal& $i cea pentru grupul marcat di
‘Aeeasta ingeamm ca trebule Si modificdm shaw, line() pentra a alege culoares
corespunzltoare. in plus locurite unde am actualizat reastra trebue modificete
pentru a apela show_line(). Sd tncepem cu funetta show all,
‘Actualizarea functiet show_all()
‘Am sefis 0 variant simpli pentra funetia show all() care inoepea prin
reat de
umplerea ferestrei ca eutoarea continutului casetei, fn cazul gruputu
ace may functioneaz’. Doresc ca grupurile de linii s& prezinte |
thargunea sting Ia cea dreapt® a ferestrel in culoarea de evidentere. Nu wrea sa 58
le cu culoarea de evident
text pe care-1 adiugati este selectath ca parte a grupulu d
fecare
rnclustv not
"Aceasti cerintd face ca funetia show Tine() 98 decid,
fea corespunzatoare $1 si umple cu aceasta culoare i
‘aici, puter, de asemenea, sa invitim functia show.
‘de dupa sfargrtut fisieruta), In acest fel
at() $1 si mnnm un pre viteza pentru show allO.
1 noua fanctie show_all() din ‘TEFIL.CPP.Tot
pind cand veti adiuga, in se
Listingul 13-8: TEFIL.CPP
file win sofile win()
gelete bienxs;
void file_wins:show_alll)
nemline* cl = top lis
at start of mengile
af tcLssprew )
af { clnpnext jf nae 4 ox more Lines
14 Manspuiaroa grupurilor de lini
Belling fo top inane;
for (ant zow = toptty sow < bin; some }
show_line( row, et),
af Cet-onexe }
A ( (rowel) < ptm)
ch = of-snext:
bot_line not,
alee
wnile ( row < ota}
snow_Line( row, NULE };
: 4
bot_line = cl;
gote_xy();
#SHEEEL CHEER HEA ECE
At observat ci am
parame ses fn
tabu, de emer
ici cpicae E aad oT ibati declaratia din det clases
sy apeae ue sow ai) co fincas, Dac are
i oi lodata, putem renunta la el cu totul, estan
ia eniaiee ete eae AH, stergeti 51 dectarata pentru clear(). Nu
save na | Putoh,de asemenea, sh stergetdefnita func clear)
Cod obpmut reba
ie 8 intone to si
ultima, Cand se lucreazé ulin
sho
Tine) este momenta si shinbim oneal
1¢ a fost argumentul, px sunt en
cicmpi care umes. Incl eazu cna to ine na a fos argument anallukie syejoz aupjouseo siios v ()ueyo 96n eHoung “e209 1S
snmnuaos sarin ee saga su ac ou Up Heal “ASTI sek
3 poy aun 95 aus jiofonasioo wy Biow 35 Ag dan Bea oy
O ezenutsep pour a NOU Ip mr Sb URN iy snes
je tose aura pfs ae ng onsen Jona ong
dbo no cco ayaada fr aga vate omens leans ee oo
now //
qusea //
Haury euos ‘mex jauryTHous
f( axoaccautT owes ‘moa /aurT Hous
‘0 apenutioju09
unjade axperaje0
UE ereaunyos “zzeouoriouny mu ‘(jan sums) Qouy-Moys vy
£( axon )zautado
iC mor 'T4a31 )Axcg05
| Cwm Roo RIA amEs | xa3e3%03
este
CSI NOONIM entra | wioTaNIT NIM srs
¢ poxxeuc-Te )73985%09
1
(Cue "6 /yz0m )Adouzze
sue | DIAT © PTAT < UeT = UOT
fxeyot = vet = vet
fseuot a4 =
(sever < uet) st
°C 8 )ustsse = vet gut
Feee-tu es
e133 30 pue geed gr Trau ex Te // (Te) FF
Tall 9p JopsRdRO waLeinSIaeW Eb
f
fq = [Prat] axon
(Cptat ‘exueta "08 ) Adouzas
"[ogyxzo" seu
exueta og // = StueTa yreuo OT2E3S
(Te yeuytmem ‘nor gut JeurT Acusi iu OTT prea
+O AxeR08
f19 = autT 30a
Seb mBunsry
S-THAAL mip esiesero9p uy RIND ALD
srequuyos 0 ap a10sou Hane "ysIAUKEIRA IeAUNKDS WE ¥D NAIUEd “NOU WIC] "gk" TIT,
1 wpe as azeo Caur[ mous rusted aunisioa unou yrEre 9-¢] mBuNsr] “aye> gdUIS
rut ¥99 9959 olde e] 9p wOHLIOSAI wD USE uM “Iwiepisuod aisaow a0 YG
‘nner 2
2010 asa wiwod Us apoK BSE TIAN, PasBOTEA
{uy oun eadnseap eye 98 a1e9 a1
‘ung yews outjmoys erjouns O
(Otte Hous
pawerzea pnou // :aszde-euty doa = auvT doa,
2{ apade-auyT doy I tte mous
saquetapa eoussa //
‘erduene De //
/ re nous
eauetzea nou // ury7sno = 3urT 93
( aur Tans irre HONE
eetion Te //
eauetmes Rousse //
equetzes enou // OTe nous
+ eur aoa ) 1t27nous
squersea eousee // t
erduexs yeurexd //
‘edn sed 179 WEAN eg ‘Bee390 ‘Sd invatarm C++ pas cu pas
top + cory, coxtine 1)
dupa instructiunea for loop, $1 paneti-e la sférsitul
le dow’ funotie, veti fi astfel pe crumul cel
fnainte de a trece la comenzile pe , Sd studiem o pereche de
Jomenai §i si facem citeva imbunat
‘grupuri de li
ADAUGAREA UNOR NOI FACILITATI
Cand am implementat initial operatiile legate de gru
evidentiez de la Inceput 0 pereche de comen:
| ecranuiui, Acum vot fi putin mai mt
comenzi. Aproape cf nu vor fi probleme,
Adaugaty mes
1023 51 1024 st apar dupa Gi
2, Transm ‘TECMD.CPP ca rispuns i=
apisarea. tastelor corespunzitoare. Am cop TCLite jam utilizat
CTRL_HOME pentru GO_TOS si CTRL_END S.
3, Adiugati opjunile case GO_TOS: 31 GO_EOS: in inedit_doQ).
functia msg() pentru a raporta st a testa inainle de a incerce
impiementarea efectiva
44, Implementati opfiunea case GO_TOS.. Asignatrcur_line 51
2 obtine efectut dort,
pasul 4 pentru GO_FOS, Este aproape ta fel de simp
i Eu m-am lungit eam mult. Am si
3p. NU
43 Manipularea grupurilor de fini
GO_BOS. Dacit ag
ut si-mi day
ftmul furnizat de mine pentru cele doud ophium ease este ilustrat in
Listingut 13-7. Al dumneavoastra trebuie sa fie similar.
Listingul 13-7: TEFIL.CPP
case SO_END:
ease Go_Tos
cur_line = top line;
gotcurx, 1)
prea)
case GO_EOS
cur_line = pot_line;
go("eurx, not Ting no - top_line no +1),
.dfiugate s& mai facem o precizare si apot si mergem la
marcarea grupurilor de
Respectarea sfarsitului
Cand se apast tasta End (sau orice alt tastd aleasi
sau orice alt tast aleasi spre a desem
la sfirgitul finte), cursorul se mut ta sférsitu
gir de carnctere spattu, dupa sfargit
‘aractere spatiu si fie compl bile.
foarte simple.
deplasarea
sfiegtul unui
ra ca aceste(sowarew ound)
(aoyeaseut
‘duane fox guns veys90
‘a arvjoon vaupd 108 eaysoo8 anup
18 o1oouy “aroar0ud ayo
“H'SGWOLIGA ofesou ton eSngpe e utd wradeouy
INI 3G HOTENdNYS VaNVOUVA
‘eurzqqoud visenay “wuorssoe ayminosi
RSvOHNS puIa|gard o 1énjo] wase
f0= (T= xan + zeuot + yx03c-ourt ano )y
HC ue
1A “GEISPION, MS) WTO UEP
Uiedingpe if euedep eur Hietuow “H'SGWOLIGE a afesew o1saoe m3,
"ERSPOACOUWUNp 2f2 Woop (ayseord tu rs) ang Tew
uns nu ojout ofoitnsagacd yo yezio2sd aingan AOU Wich
‘voreaius Z3!NUe BF I9jorg “BfoUoTEIEdo
ap amspio,\ da op vpuewos “ayo, u
2 2M
20 dru um yzeayareurap mg <
9p dna ap 18s ~ “T+
uB ap mndeoun = THN <
uad epLEUIO9 0 op aren “F415
21 9p warotoose widoo 10s AN “GOAL
2 AH En) 20p9 tin ssnpimos? | osdns aonpold ta ait
{preys ness a 9p mods opaso0
yeu
joan jrunS nunwed U9
m1 “yeeau
uoana 1
op
odd aN] <
you, jaweoud ‘meds ap a1
yas eaese0 pvc sjnio un an ae ve
axed” axe 3R0 6 mae
faxeuc
un B eBUBIS wayEA
‘prewar ruetseA tt
Ax70906
T Hous WON BA,
Tano *Amo+do3 a
‘auipo] BouRUIeSe ap 91s9
28TSD
2x03<-8
4 xeuOT +
jana = do ,2euD
(ere => (xan 4 seus) 7 37
(yzeus" rep
( axegc-ourt ano JusTzzea = ueTe quT
ursTertg proa
dd S7VSAL '8-£b nBUNSTT
injnp220)
> Aisn9uN
a9 wISeaNe “reRU “(EI Tap fl
dap suns nu
‘nw 16 Quojsa az324
nop
Tod “zvaun anvo jm0xar ranod 1 (Suggs I ap nijeds afasaiouse9 pugzMIO%:
ns nijeds viousd va S099 “SoNUNSTZ—p Y vA (KOH OU 8D
aim “njade “areoyipow gyseaoe sop ose} ROL “IONE aD
vouuuny vayisen 0 nana
‘wjscooy Joreued nijeds ysooe uy yzeouNN arco
PS einai,
‘oqeanostp 9499 aynD0xo
SYS PUP O18 016 0 8 wIOG,
Censronsouanp
my
uauorIOdui09 exe EISeOW
‘BOUP aed Hye ap og "ooI09 EzeoUOHIaUNy
aise spuepecaid vial] ad 2p feroues juan
nop
nsajorse> yBre=yS 28 BS ripidayse
pupae covdsyoeg tivsede pug,
yo ounds v ap auteuy “auapedcad
tee
VopsopindniB eoemawens | wed nosedss ween eS
Eo94 ‘88 invitim C14 as cu pas
nu pun marcatoru
ntreaga
Cred ci aceastd anordare ne scuteste de nep!
we de a marca inceput
dar aproape niciodaté nu gases
intele dumneavoastra 51 ales
Listingul 13-9 7
__bistingul 13-8
case CIRL_END
retorn GO_208
case CTRE_E:
return Line ond(),
return TOGGLE_INSERT
case F3:
Poturn TOGSLF_SCREEN:
cose TRG #9:
default
return NOP;
ant Line exd()
“yet ¢ = wser_end0;
eaten (6)
ease CTRL_B
eaturn LINE_RECIN:
ease ‘5’
case CIRL E
pes fan ular grusporiior de lint 27S eee ce eee eee eee ag
return LINE_END;
case ‘U
eaee CIRL J
reUGEN LINE_ONVARK;
aefault:
return NOP;
int _win_ena()
pentru a doua liter’, in cazul
ari precum $i a celor combinate
‘nse z
' mareare anterioara inainte de
atunct ad
pentru a di
lor anterior marcate, tar 0
¢ améndoua. Alegeti
-0 de demarcarea grupi( moxzno n> od ourr aaeys"Gnoxs ) at
1 Qazemun"os" ous
exmez
(urseq-eutt
( oWeurt aae3s"anos6) ) se
ds
Suv eeu pus se az635
| SOMO} Saotes pe 3036 se suTy quem esOe
sme32 dnosS oust exojoq sooo oust quossno JT
doa euyT Jo DUS S108
w
Opus eurt: sue" eres pron
£Q)AxT 0908
da WSL: Fe) inBunery
i ap dnsB un ed eas B € BI AP aI
16 ¢ erUN] BY yURG mnjmI0sIno varE|NIL ods
mindaou
M09 © Up 96 oeP yIdUINIL
logy “dru mun ¥ 0
BANG “HETIL Up tas
9 isa years ou]
uugjn pugo
9p xe spy ad asearou op 1
reams op
SPE Is9 OUP “more a
jowwoEpUl UB;
‘auItd ¥} 9p yzvo19
28E
Ube WO, “awarewop 9p eijerado anoayo soey (xreuiUn” OP”
ny 2p dn un six9 Poe “oreoxeurp 2p mifoury yrearade (ueBaq ous wou
EYP G cee eee eo Sete
(yan ioeas uw OTF PTOR
fgmouc TH = Tt
( sx0uc-Tm) 37
vgerva = pexxemc-Te
( porzeucat ) oTrus
couytaze3s dnoz6 = Tm ,SUTTHOE
( ooeupTaxeas"dnox6 ) at
(Qxrewun "op eurT: HUTA “TTF PTOA
1 AxTe208
{( eust ane 'Kmnosdog youry Asus
‘umn = ewswac-2eTt 20>
inod7zno = ow euyT pus Gnozs = ov Sure _szeas_dnozs
Tourrran = sury pus dnozS = euyT azeqe" dnoz6
Oqte nous
(xxewun ep ourt
( ov eur azereGnoxS ) 3T
(jurbed"euyr: :utdeTts BIeA
(oore ac ( BrATHsRUoT }} 99 [OOTX > ZeUDT) F UITaET
SEE eee eee eee
dda WAL ‘Ore mBuNSH
woreui dru 20140 pine & nzzu9d ‘(3}euUN“oP
nop v od ezvaziinn o wisveoy "vareareW Binaoxs “QuiBeq ou] otouy PUmEg
‘Or-E1 wumsr] wt oyenvezaud UNS TeAINgpe wea} axeo ad OUR BnOP 2]
ep J0qundruB waseindius &F
Bedrno sed 70 WeEAN eS 96esainvitim Cr+ pascu p28} 43 anpulaea gropuror
308 a2
voi file_win::line_unmark()
= caz_line: ‘
group_en tine | = cara if ( loroup_etart_line no )
group_eng_line + + return;
te ieee eeeeeal
‘ = geoup_start tine: groupstart Lino no = 0;
EUR 0G Sg = geaueeeart_ tine 80% Snow 81110;
Siocplenaiine_no p_atart_line 3 fan
9 = car_ine:
group_stert ine = caz_iin woud file wants4ine_ao_unmar()
seeder pear line_no = oo :
pemlinet mi = group_start_line; Ca de obicei trebuie introdusi o deciaratie 1 un apel p testa aceasti
azeTep
ou exjuad youtpow ase
qua] Youn vatafiuey$ pang "2e9 yS02" op edn90 urw-9U wlog“IXeH
‘woustuase ap aso injnueID® ¥ atuH| EUILIG pug injnzED vildaDX:
aiwod nu eseann ypot wEe “uBID9 2d ois ox atu] © NUAd giRjode
por, {ou OUT 30q 18 on aUyf-dor sojapIqeUEA Liu
{pa 4uT )aeuS esnrTuTA STS pros
fo eur Tracers ae
(ou eurr Treac-ersy wom ) at
‘1 exotep
SUT eaETeR //
Gnox6 zeaze st uovaetsr ects //
tnead<-ougy pus Gnoxé = ou pus"dnoz5
~-0u eurT pus Snox5
( ow" eury pus Gnozb = ou"te ) 5 este
fou eupy pus anoss
(eu eurr pus dnox6 > eure ) Zr este
‘now "eur bus ness
sreucourt aae39 dnozé
= eur areysdnoxs
sdoox® ux eurt suty 36273 S10 T° //
ests
£0 = ou euptare36"dnoss
tdnozB eTown e9079D //
EE 1
( eeupr"pusdnoz6 = ou"pe ) gr
( ou"eupt ganze" Gnoz <= ou"te ) at este
—-ov"oupy pus dnoxb
j-noteupy 32836 "dnoz6
dnoa eacae ©3019 //
( ou eur axeys "anor > ou TH) 3F
( oeuppaseyeGrox5 ) 3
Aue 31 ‘dnox6 surt entpe //
(ou"pa sub ‘Te peuyTHDE peuTT TOR: TOTES PrOA
+ (eyed burs ‘Te your Top
(Tm yousTwom ) euTT TSP: UTA TTF PTON
PQ rte Rous
aeeeedte dteeedateedd tte aEEEHaHEEEaEEE TEES
Gao WHEL HET BUNTY
TpapT aeage seUTTuOu OUP TmeN: -oUCTUSH
pu unex
tneade-ta = Te
( seadc-tm ) orrun
fy usmer
( Gesde-tm, ) 3F
fo= uaut
(ym souptaom jou pers: uteTTs AUT
fxag meu = qeeqe-aurT an
SEE gC Eee PE
ao 1a Fev-0F BURST
op rnsy hua goep aysoure nated) “AAO NAL
bie0 were pie Busy sr (Jo pupa a|y wPoiaw Bese E1-ET MIUNSIT
Tia 9p JOjaRGRIB eareyRaeW EF
‘Badr Sed 45 wiedenal ES anh402 8 Invatam C++ pas cu pas
oz
// 88 seninpa cu
aai_iine( , cuz_row ly //
‘dupa ce s-a dat comanda Backspace in ext
Iueta pe linia precedenta cele} curente.
el_line(), astfel:
del char(), delete eu un apet la
gezete cur_line->next, Jy warianta vecne
Y/ schinbata cut
Get_iine! oux_tine->next
/ varianta noua
cu
precizate at
afla la ineeputul sau sfary
‘Am o propunere simplat at
linie inserata apartine grupuiui, Va trebun sa testat aceastd regula pentru & v
se potriveste cu asteptaile.
Peniru a insera corect, am
cela fel cu det_line(). Este prezent
Listingul 13-18: TEFIL.CPP
show_alh();
youd file_yan:sans_line( senlinot mi, chart txt )
t
aenline! new_mi = new memline( mi, txt 1;
nen_file->tall_line note,
J) ansert 1s after cur_row
s3Manipularea grupurtor den
oe 402
3 ( group_start_line ne)
Af ( cur_row < group_start_line no )
group_stazt_Line_not+;
group_end_line_no++;
elec if ( cur_row <= group_end line no }
group_ena_line nott:
// mare, oF not, ne Line
af ( group _start ling no 66
our Fow >= group start line no 6&
cur_row <= group_end_1ing_no )
new_l—>aarkea = TRUE;
rael_line( memline* m1
Pentru a utiliza ins_line() tebuie introdust o declaratie tn definitia clases din
TEFILH. A mea are forma:
void ins_line! memline* curzent_Line, cnaz¥ new_taxt
st nume de parametri in declaratie? Este optional. Urmatoarea
peratorulut new care definea noi imstante
re de acest fel in metoda do_enter(). Este
Line, ep
Aceasta se iniocuieste
apel la noua metods:feurt ano = axeuc-eury pus dnoas
four pus dnosd = aerdcouyy ano
faoad<-sur{ ano = aszd<-ousy 3xe3s"dnos6
Foust 32036 dnozB = 3xeuc-aezdc-ourT ano
SuTT and BAcae yoouss //
{neadg-ury 42032 dnor5
= sondc-axeuc-oury pus dnoz5
(Caxeuc-outy pus"daosB ) 57
faxsuc-ourT puo dnos6
= axuc-nezdc-2uyT 3z03sdnoz6
BOT PTO ae yooowun //
eBueuo 3 ,uon oueurT Trea //
soadc-ourT azeas"Gnosb = ourT T7eI<-oTHy wou
(oupr Treacottg wom n= our pus dnos® ) gx
Areeseoeu 3x ‘ourt Tres aenfpe //
t3mouc-oury pus" GnoxS = zeaje yourtuew
#1 + ow ey Pazeasanox® — ow euyy pus dno’
= oztedz6 aur
gener peposu centes //
suzaaex
Aoox6 eurt peyzea eptsano,
8G ASNW UOTIEUT|SEP Sho, )oBeesom
( (ow eury bus dnor6 => nox)
33 (OW euTT azeys"dnoss me asano) ) 32
Fesat oaut duoz6 esow 4 uso //
amex
(ousuryaze3e"dnos6| ) 3r
aimb ‘dnos5 eusy ou 3Y //
(Qenoweuyt: :usx eres prom
ore wees
Ee ee eee reer
dd WAAL 94-e) nBuRS
dd0"TaeL. Ut wend
Tally epovow BrEIe 9 (-¢) 1
‘Opa ateod 9s 7
eee 120 ut oy8300
mss guns 29 ncn sruoiut satodes v nauad ()2su gevazinn
3s "uanze9 vopasaid @ nauod (Joo™upa:ruin of u siaur ingan tody
ui] @p JojmaRUB eovwinawueW et
(grou areaoyy JD 9 aUMISIOA 1S
adey aq) wed qe
yn WY "dd CWOEL WP Opus
is DIOAOU ISD ‘H'SCMOLIGS Ht) afesour saoe
es yeuRise we-97 “aLaIaCANT)
SCWNOLIGS wl wSngpe uy
‘oo of uinoe wooo 9g “aren nnd
aso ni suns 4891 3S008 94 Jet “axEINU!EaNp a0 TeaaP axaydwOD FEU
ap hud inn vaxo8sa:s ednp asesiye op oyeo)
onp ase ap asnaur ajzmoqipow 99 we
“pds aps aceuado wiseoae 89 296) Niue
inna wareyrur yey aq suladins
‘311090) uHou Hy YevaIasUL 35 Yode
3p ona ru waseynas wpa BS
5 rauOW}dW YS WeSRAEION
‘AdOO-ANIT. “SAOW ANI
98 109d ynop Up reuLIoy soda un
aie “yuyy ap Joypnanus wasoBurs
\§ varaidoo “ease no wENUNIUOD
war assor$ ces OTRAOSU UNS EDEP se
\qSod BA “uuNDH AU], [MAOUPA nD WON] LA Os PLED
yerodo ap osse0} 1 vido v} ejuntiay aco os
pred eyo UL yemMYMeD 23S juDHUT aud) ante
Huguiopy ‘tejap jrsorezado 1
tounae atau yruazesedo op S10y%
ap undnut ap aro
We 30 wena “Wu
W unanug ozayorew
{4 do fourT~ano jeurruou sot
rareidayse ajoyeyzos ep
1 urens sup Fesow wade swans TEU BUNUID Weg "W
j, %9 InjnoreyeduioD © gno¥jcou RamBUOKUDTE BUIUN|D LA aILqUI|PS WISEOW
2¢ @ ‘outq ano Jouyy eur
rer row Foun eorex //
‘a wag RTF406
// adjust display
4 ( group_ena ling no < top_)
Si invitirn C++ pas cu pas
Janene }
7] gzoup encs above screen
ke (cur_line == top_line )
‘cop line = group start line;
top_line_no ~= grpazze;
// cary unchangea
: rt <= ine_no )
dase if ( group_start tine no <= top Lines
fp\afares ae of anova toe (surdor palow grovp!
soe sy ra group. ond, Line,no ~ top iine,no + 2:
top_line = after;
toplline_n = group_end line no - grpsaze + 1)
«ee Af (top Line potcury-1) < group_start_Line no)
pee 8 /Soreor above ine group
LE Coae tine == topline)
topline = group. ntazt Line
1/ top tide ne unonangea
1) eazy wnenangea
eise // cursor pelow line group
// top_isne & Line_no uncnanges
cury = gepenze;
Gur_line = group_stact_line;
1] reset Line Hs anc display
ne no( group_start_tine }
oe stave line no = Bina po( group_stazt_Line
eee ea inmnd = group stast Line nosgroeszet,
snow_all Os
'
void file_wint:Line_do_unmark()
woud file sin: ieee
i, Seetiunea
rx nemodificat
1s. Dat
52 8 tot ceea ce
yea acestei Fume!
Jepe cu grupul de 1
sgrupul care urmeazit
display” presupune
‘renute
cc lasim tohar
Facut este sis
13 Manipularee grupurilor de ial
17 aratd noua varianté pentru show.
13-16.CPP.)
Listingul 13-17:TEFIL.CPP
void file wan::snew_ail()
mamiine* cL = top Lane,
A€ ( (let->prev) gs (cl->next) ) // at head Line an
7/ nen~enpty
top_line = ct = cl->next;
top_ling no = 1,
bot_tine_no = tep_line_noz
for 1 ant row = top
ow < bem rowtt 1
show_Linel rom, cl 1s
3£ (row < (btm-1) ) —// not last screen Line?
af (clnext) // not last file Line?
else
el = ol pnext
bot_line not:
while ( 4420" < pim )
show_Line( row, NULL},10 tre 7nous
__ feaxedsb wy ow eurttreac-orts woe
Hyeorreds5you our a1eaednoub = eu ouFT pus daosb
H Coury ameas aneub jou burg = ou eurT aaeye-dnox6
Keydstp pue sy ourt 3en{pe //
peBuewoun Az //
soupy aseas"dnoz6 = supp ano
___peBueyoun oveupr dos //
fourtaawas dnox8 = oury doa
(eur sno ee eet dos) gF
Aerdewp senpe //
imouta = oupypus"dnozs
Jneytweu eaeter:
eyo = axouc-astTASH
fqeeuc-qetTMeu = ous 3seye Gnox
nog eurt mou 03 YORTAS //
moutm = seadc-ouyt no
feUrT ano = gweuc-neuTe
inoade-ourT ano = nexdc-axouc-gerTnet
iqxouc st qMeU = 4xouc-nexde-SUyT ano
eury meu aser st moure //
RFT MOU gerry eT axouc_aeTTAeU //
ert mou ur xT //
fqxeuc-DTOTe w= proTe
eae rweza
(usr puc"dnos6 = PrOTH ) st
fgeres = powsemc-prore
: Oa = poxzemc-mouTE
(axeg<-proTe ‘soups JeuyTEow Aeu = MOUTH
or
Ta Sp sojanarUB waieynanvew er
. oeeury zeae anoaB ~
4, up gporauu gow wiseene Were BI"
vod venyou, "waves 969d) EO sBOp “mara RENAE
qNIT aa fandnys 3a auaid0D
vvareynu ¥} ALE! Po
i 2] BUS asvo ou
wy uraoan ys “yrvouoKouTy
un wy van 2qg9 pUpISeD “eu
“oresige ap 1099 ]ESUIPOU NN
‘uacruanay 9 ound
aren, a 9 THT, o NO OMB WY LE
- cree eeeeeee
pee eee
(sou ) eres
eur (aaege droa6 = prove ouFTHe
: TqstTseu = AOUTE soCT TON
pou = S9TTASE /OUTTEOE
dope pemur moo PTING //
ou eurt pus dno
m eetedx6 aut
aenet pepeet ONTEA //
ruxnqea
ow eur taaeye” dno35j ) 3¥
(OM groub auyr ou aT 37° /f
(ykdooeury: ee @TT PION
“gdo- WAL are} mBUNSHT
s@unsr ‘presedas vivant
yn NU =
ap undnsd ap az21d09
ye goed “ep HIoUOU
‘ap pususod ye29n] Ure
od 1ocy
jo und410
reea not instante pentru memfine in nowa list
marcate st
i. Ce
‘Cand nous list este construitt aceasta este iegati 1a cea
88 invatam C++ pas cu pas
1 este legal
$TERGEREA GRUPURILOR DE LINII
Ultima comand’ pentru grupurt de Tint este
aproape nesfirsite,
Listingul 13-19:TEFIL.CPP
snok_all()s
youd file_win::Line_delete()
// 3£ no Line group, quit
Le ( ‘group start Line no )
returns
// prepare constants
leniine* before = group_start_Lins
te decat orice ats vat pana acum Aju
stergerea, Aceasta are
e->preys
tae before no = group start _1ine_no ~ ty
menlinet after = group_enq_line->i
int after_ne = group_ena_iine_no
ant gxpsize =
(group_end_Line po - group _s
// wake the ola Tines nistory
fomiine* mi = group_start_lina:
nemline® min;
wnile ( TRIE)
: min = mi->next;
Gelete =i;
$2 (mt =< geoup_end_line )
snaxt;//aay be ruil!
+4;
cart_line_no + 1;
13 Manipularea grupurilor de init
an
// #3x0p the display
Af ( group_start Tine no <= top line no )
Af ( group_ena_lina_ne < top_line no )
// top_line unchangea
sop_line_no ~= grpsize;
1) Soz_line uncnat
3 caged.
1) cazy unchangea
else if ( group end line no <= net_1ine no )
ant nilitegroup_end line no-top Lin
228 PALEererour end tine no-top tine nov;
‘top_line = cuz_Line = after;
top ling_no = afterno;
Ae ( cary > nilit )
eury -= nilit:
for ( ant) = 1) ynext;
else
eury = 1,
aise
topline = cur_line = before
top_line_no = before_no;
eury = 1; oe
else // end below screen
top_line = cur_line = before;
top_line no = before_no;
eury = 1) 7
else 16 ( group_start_Ling_no <= pot_line ne )
// top lina ( and top_line_ne) uncnangea
Af ( cir_row < group_start_line no}
Hi // cursor apove delete
7/ car_line and cury unchanged{Wok sep ‘oun no gumszeNN BeIEABOxd 1
9p axaplyou 1S arapiyasap a9 te3c0 no
sszied won 16 avis} wars cron andaout ey apun ‘oxeun
Imuam aap HoBsow ys seFaxd Hazuns ume “youn eieose
5) 80} ME pos op sao
UNuOSnD aye WEIS nvs nda: ts
aut ae aiado nme
2 19 907 sens
gs We 1S 92198-4o-pua I$ uaasas- ; oe
Tull ep Joqunanaé Basajpariew Eb
jado qupunuiSoud widnse sxepysoad
ya} BarRUEUINDOP ¥] winle ates ijouns op
ap una vy 2)
id quad quoroyNs arse 44 8100p
‘100) TIGA We foxtdeD yse9e Uy
wepisios ure i auido urea, “nsOU
yw 99 B99 Ba—ILODP +4) DIESSF
1 we “oqemagya
red pwd w] Touo%sep0sd Jompo aun 91908
yo :stns ana) ap jnloupe ap tupupul Je}audoud an wt
‘(gleiunau pursop 25 spur amv ands 18
yssodo 0) aso%aus ap 1oerodo yoo ap iuasasput wamesie Wzpruae waund tA
juts ariezodo 0) Hur, ap undnsf Biers waand tian ‘poo 35008 wane ian PUBS)
(yaxewun op sury FUT STs pron
eH
Po Tre owe
19 = ow putt axessdnosé
Berg .dnozB BUTT ou, 398 //
feateda6 a oWeusy Trex<-eTTs we
¥ eury pus Meu eynduoD //
seBueyo Surmon //
motea st dnozb este //
tozvsdx =- Kino
peSuwusun oUFT ENS //
eaeTeP note aoszn0 //
eere
oy + eupt des - of ezogeq = Azo
lexogeg = ouyy ano
sgeTeP ur zosano ff i
( ou eupt pus aeas8 =p mor ano ) JT este
‘edn Sed 540 WieleA ES zwUtilizarea multi-fisierelor
fin acest capitol vom tales ie
(te ta or iz at se mere
‘Tio mmm te olen ate progam a
Voi ard et ega care obure mala pen face seri
tum pivorinic
re din es ie
a Cat timp vom aborda pr ee intate,
wrmagareelemente sefimbajs m=
ae Functiile din STDIO.H, fputs() $1 freope 0
Utara i ara de ptr iar
Guttarea veal arg 3 age ent
Jinta de comand’
tia car
ne vor: ocupa 51 de
iti argumentete din
vy
u excoutare
“agtigul in vitezii pentru functiite ie tmbayuti
++ Sunt numai citeva subiecte speciale asupra een vee
complet asupra
+14 Utlizarea multisierelor
texte. Singurul lueru pe care nu-l putem ined face este salvarea textul
peril uner
Acesta va fi
4 ce vorn putea salva un fisier vom indica editoruiui cum si deschidt mei
mute fisiere odati, Vom incepe cu un vector de pointer la obiecte file_win care
ie sa VB dea o muttime de idei despre ce puteti face cu C: uerat
cu un tablou de potter la obiecte, vom arunca aceasth structurd si vom adluga un
reaga muanci,
simpli deoarece am
te Webule si aveitizer cf vom resiructura total i
‘estea coa bund este oH aceasti operatie va
‘put. Si Ineepem,
SALVAREA FISIERELOR
‘Asa cum am promis primul artical prevazut pe agenda noastrd este salvarea
lor. Trebuie si vi anunt od am aménat aceasté operatie pentru foarte tirou
pentru i Motiv cd aceasta poate si v8 permit sf transformati util
dumneavoastr’ fier de test intro amestecaturs
Daca fisierul TEST.FIL a supravietuit asa mutt este si pentru c@ nu v-am ofent
vosibiltatea de ant distruge. © operatie de salvare este in adevar © bund alegere
Inainte de a merge mai depart.
Comenzile de salvare si parasire
figterul EDITCMDS.H, pentru comer
ferminare’ Am folosit FILE. SAVE (defini ca 1601) pentra
area edit; FIL
QUIT (1602) pentru a opr: editarea
{rd salvare si FILE_DONE (1603) pentra salvare si apor pardsire. Adtiugay optiunile
care dau sens intenfiilor dumneavoastr
4 adduga opfiunile case corespunz’toare in Fanetia edit_emd()
din TECMD pentru a returna mesajele introduse. Am adavgat 0 nous fancue
cate este activatl prin CtitK. A doua literi S, Q §) D activeazt
SAVE, FILE. resnectiv FILE DONE. Am adiugat de asemenea F2
ILE_DONE) si ALT_F3 (FILE_QUIT) ca nou opjium case in plain_cmd{).
ina
salvare!
salvarea
la “done” cu valoarea TRUE
si FILE_DONE, editoru! se opreste.SEE eee
——,
“SaO"L Z-pE Buns
pow ggor] un mene cri yaBunsey uten zero
Spuma rows no sats un a3Sasop 28 BEC.
rondo SBMEpE 98 BS
E SS
i “pues Y2y Tan nousyurjsi arasip 700d “emUSIIe
“sean 1] Tare tng o we *S91K4 0. xo pun azaqyouna Ys ayy nou Jaigiy UM
oy anv essay 90) ap AUOE rua sH2 hn SAPP 2 INOW
Sao a ee I
Suna
ww
wy
ison
PW areawinajesed fF
S (Qsinaty 2903 99 WEI WISHED" FPOAEy 2 andurs o are naw yruatSit {HEAP
[= ao pooo nutigo HY “L'L apiyasap v euyusd £4 Ht reafiosd ysooe He]n 90 BANC
be epeyano }as0Tes
EL oTHF INO Tze, 1530
Se ee ff ert yne "29. 183983
et ( errgare eanas
Le gate Tacky WURGOF @ OTIC ATT
fC eTtF40 lssoTos | (Qurew 39T
: qquoTass> ePaTeUTH
( 9Tt33n0
( ertzane er
“dda L:-vb Guns
UE SEEpaNe ata Deans
TFaNe *,,9q,, )sandz
a ga yo eo now reten ag) “t=pt ynsunsy wy TENE dL rp
etansbln SEsgd 18 ENSEOATAULAMP (HD
roo o asa srs Hit 2asaLOG BOI HN WOH
i yu anuad aopenasuoo 800 aad
auenes ap jejouns easyuewe|dul|
SC otamane “iy deans
FL eTFFIno "yey 1eqndy
WA, 1uedes = eTEEEKO
cd
TojaloerHin eaezINA FL Fea TS ced HATESane ‘38 invaii C++ pas cu pas
Listing 14-3: TEFIL.CPP.
next-oprey = prev)
entitle: :menfile( FIERY tf, chazt nee }
file_pane = new char| strisn(nanc) + 2 1,
strepy( file nano, nane );
text_eile = tf
head_iine = new memiine, NULL) Ii
____ readline = new memiine; NOPE) MA Uf
Apot ne intoarcem Is TE.CPP unde
sd->sval() intoarce $1
string_dialog. Func
‘manevrim in con
constructorut file_wi
ametra de tip
se va adiuga acestura di wun par
fname”). Apot va trebu! 4 adaugatl un argument de
je 38 te face in TEFIL.H $1
fora s& Va spund ce lipseste
igierul in memfile.
punénd un punct de
constructorul file_wn.
specta abiectul meme. 7
“Acum e& avett file_name, Listingul 14-4 arati o metoda file_w
care o putett adauga la TEFIL CPP.
nd programul se opreste acolo,
save() pe
Listing 14-4:TEFIL.CPP
soturn ny
void file_van: :file saved)
: * outfile = freopen( +
rene eee tslacnenes Swe", mom_file-rtext file);
Af ( oueile )
moniine* ct = men_file>neag_Line;
while ( el->next }
ef = ci-pnext;
Eputs( cl->text, ousfile }+
BE (el-next )
14 Utilizarea multsgierelor
a3
fpute( \n", outsile );
1
else
message ("Could not opan” mon file->cile mane )
; = :
Memline::memline! memiina’ after Line, char’ ext )
eee eee ee Ee
case FILE_SAVE $1 FILE DONE cu
stare, Cand testatt acest cod fit sigur
acest cod veti avea un editor de texte
iny a fost 08 ack
sere si
nobles
te de a se executa fp
punet de intrerapere
ereari, dar smu utiliza niciunul dintre fis
ia departe,)
‘mai und de a face o salvare consti fn redenumirea fisienutus
serierea cetui nou. Va las si tneercat
existent cu BAK si
prin a chuta in STDIO.H o functie care si redenum
‘nfocuirea ei cu BAK. Avet toate sansele s8 faceti o treaba excelentd daci manevratt
coreet aceste girari:
FILENAME
PILENANE 2x7
\DIR\NANE,
\DER\NAME. EXT
DIR. EXP\NAME,
DIR-E\N
\DIR.2\SUSDIR.E\N.B
(Regula este: o extensie urmeaz dup punct daci punctus este cu patrt
‘aractete fata dé marginea areapt si nu este urmaté de backslash.)
[mbunatitind functtonarea “editoru!
in motiv nu justifies lasarea
fisteruiui deset
monotasking cum este DOS,
un sistem multitasking (sau chiar partial
Imbtasking, 28 Windows 3) se dresteutlizaren sea
ia
in timpul ediimeytuTs 9489 eqse0e
sxeyo ze ep norae; un ey xequtod
208) 10d ag “siopioq wud oyunu “xog uN NRUad NEVER ap Lund!
po woundnsoad
eauapaoead no eotquapt a3ee eaevece /
sivoqFroedeou ounteuowyp no novae3
cntjeds 38202 onngo erzre ® nsquad Jopi0g preoe
Wo Booye wseade vaUAUEASE oC} “MjdwAXS IS99e
‘aqeen 0 zea
rojDap eIseaoy
sreuo g ep
13 uN ey RRETE aeprOG // ‘1g)xepz0G ZeUD
smdwioxe
8q “esse india wzvezy In amo eesejoap s0xe BAD|NNUIS 29S9 BULLE] ySEDOy
“+( [jae eeu ‘o8se gut jurew ut
"esv908 o}s9 (Juew a NeUIEIEd aN9s # ap ale> HEZIINM YEU vO)
ev Nan op alguien argo isayUIOd
#9 WH pstmisuen
a LS3,
“6a-19 Bseae 98 PUPS “(TL LSaL
d
$0q [usidut0d
-pysuaot
fp rianuns puBD [191323 IWOHIOAUS:
po ngquad 16 ypUeWOS
{500 BOUEUIOD 2p UH mi
runoy ‘}901go 94 wUuaLI0 oxPUEsBOAd O
ys 1
ph WW ddA. Ip BSANS ENGST,
nv RIN BH
ssa 9p a19pmos99 90
i Bie vareniard
youoxsis PaLapIKOSaP Fr
yoTaNaIsi4 yausa1Hosaa
inp “azeAS 2D
‘on auvayes ap atioung guna o Hane Roe)
sia 99 1§ a90}0 BA 29 BOFIAA W 9p vayTO a1Se TISLAIE
ver
eae ow
Bed nS Ted 4D WERENT BS422 Si invatien C++ pas cu pas
dintr-an numar nespecificat
aloce spatiu pentru pointeri
rurile de caractere c&tre care act
‘91 pentra argumentete liniei de coman
gir de caractere contindnd drumut si numele f
avem:
H+ ereeazi un
¢: \ECLITE\TE. EXE
Cum acest argument este totdenuna furnizat erat m
doit {. Numele programutti este un sir de caractere
. separate asa
acestea vor fi alocate
de test care examineazi
un program T
Is
eg
pentru a explora
ia de comand,
wy trucurt ce pot fi reali
fa wrucuri de auresare pentru ar
i de jocuri de tip pu
fnts-un program real
44 Utilizaroa mult-sierelor
oe 423
i pentru a accesa cont
site itnutu! potnterilor ta pomteri poat
sata pentrs
fisier al carui nume este
ant main( ant arge, chac® argyi] )
startup();
sf (argo > 1)
pane = srgv(1)
string diaiogt sa =
.@_dialog* sd = new string_dialog(1 < bse ) gt
oN jangzeas
(ase .aeus ‘9622 aut juTew yur
dd'SEL-P) Buns
(anazea8 PVA
tamay wingex
sastva umngez
C2 < 485) at
Css )errun
(8 sxew pawetq”er gut
ferrszex uxex
£( epow ‘my yuedog = ertyyex
fps eaeten
()Teasc-pe = mu
(9 STHa wodo y ‘mm )boTer Burs3e mau & pe
urebe Ary //
fyeoxa
(sue) ) gr
fuk enero
‘sueg-uk = oun 30t
( somreie Raa.
“aed 304 ptnaa.
Joursek wou = uk sou sok
wee)
( eTt330x; ) eTrun
peuedo 30 31 ‘Butizy dey //
"( epoe ‘wu juadog » erysa0z
edo //
fa 40|820)/Sy-RINU! eareZIAN Pl
ips syeTeD.
EQ Tesec-Pe =
( ,eThe vedo, ‘wu )BoTepP burrs neu = Pe
© Gey omerast ) aT
peyrddne you ZF uu 39 0 SoTesP osm //
forrsiez sgTa
cyan = pe sSeTET SuTEAS
( spow -xeuo wu yzeuo jueds"eTts «ETL
ty uanaez
tor rs
daO"SL 19-71 BUNS
day
‘Ise poo 15209)
(¢yeurunny woud
fuioo 2oty WA If NUON S200 - BISON
suotiouryy BS poo nou ys90e Bo NuAUAd ,OUIEL, Ui OF
jn aye gop uns Few poo 3s99" ap Bley SMG UT
EEE eee eee eet
Cersar ) at
1 uk, ‘omen yusdoy = eTTIUE «aTTS
tps aeTeP,
FQ Tensc-ps = omeu
(Ca BTHE wodo
‘Bena sed +40 WHALES ld428 ‘SA javatim C+ pas cu pas
strnopy( name, acgvil], strlen(argvitl) ).
FILg* anfile = file opon( name, “re” )
Af | langile }
saturn 1;
cnart titie =
tatieize( nane
eli vedea ratiunea copi
stmplu s& nu se fac aceasta. Ar fi de asemenea mat si
fisier
care trebuie gestionatpentra a dan earseter prac
Gestionarea caracterelor Tab
Una dintre cele mat
care trateazi ca
unui caracter tab fnseamna
zonei de tab, ar Backspace sterge
ute aduga acea ver
44 UUlizarea multfigierelor 427
introduse dectarz
funetii din Listin
le corespunzitoare in TEFIL.H., inainte de a
liza cele dou’ not
4-8, de ta sft
Listing 14-8: TEFIL.CPP
momfile::-menfile()
getece file name:
ficefine TAB »\x09'
fdafine TET 4
cart tap_exp( chart # )
ant n= num of( TAB, 5);
46 (In)
return 8;
nar? 52 = new char{ strlen(s) + Tset¢ );
enar* zero = s2~ 1; // char pefore start of strang
while (8 6@ (( #5 )t="\n7) )
t
af ( (ts) t= taB )
soatt m Hast;
else
for (int a= ( 52 - zero) & ISET;
3 <= TEBE; as)
fenie =
492 = 0;
return zezotl;
ant mun_of( char ¢, chert = )
ant n= 0, slen = atelen( =);
enart op = 5;
enaz* ocp;
while ( TRUE )“1 saKEo en
aut seu
820r sevEa ee eUT3a_y
edt title iseomien eee
a “ado... L amoR on gs
‘WA 2Ig ayoa!go By ua}UIOd 2D nojq
Mmunad pprosap Bs agus 799258 (Jureur
9911 3489 2yraPqUIAS BEDR 6->,
2 arp ap tumanns toun
mi} wots9sa es Lazzioasd ayso00 no
(€ panoue-ityez0("zo"s05
{1 edeusc~(€)87°C 507205 “uy ~ § edeus, yz3urado
COE 1200 wou jejetel soryes
paigo un by
ojqeH Imsa0e ye aUOIN9}9 2x91)
lod aou0 HezyiNn BS Hetop tn
a OP tna ese rez HF ayoe
HP 8p eumaNNS eisvaoe Byse;SOp ERO
sre eT TRICE OT yy # (oT) 8xeC~Z0~ 395
40 sdeus gut ize
oun eTAas 3849
rountos aur
edeus ur
orang.
eC ecers
et sere at
196) UA “uLop asoréyy o1~> apryas.
PI uatulod 2p no}gry indy ap ete ap union
Ha}Q010 oe
. "U2]¢010 esto aaoeas
38 aingan auowow 8298 uy -nall aLmey aia
axa 9p uN™9]3 mona 4TNRFE ge
tunes apunsa’eunygeid esl! ge taswotcny
“Ms teu BSUDSDD 09 w aguIndo a os ee
DRAG ateGrape oinaan Yan n> 18 zy amnaiay oe go
2} 0 B8 voteitien THdUOXS 9p 80
6 wauto1cy 49 ee
Dosen td aden
“nin no wom op
unis burn
‘WezPERUDE pans 0
upztyan 2192190 94 yreWaL6 axopH
S66 a ey ee SN 2A BetH0 atepioge 0 w 9920 oA
TH Sles=ta0 #1 Wed 2 no}ger un wused woind en
areomuam
1p aseaoe
we
JOVDiogIp HAW BAER FT
i
i
aq “toiutod 29 nojga dn ap aiep ap yaMons o pupnsgd ysIMs |MPOD NO 9ANIP
‘adsous tain WIRE YD AU !n]AUONPS BEBNEDe y eA 90 yaRRS~N Yep EWU UR
fi axaiSly auIM Tew ¥pIGasep BS [IGEARD Alf BS aIngasy LOPOUE 1x22 ap sORIpO UN)
Jojas0)$yp-pInw eesepiyosoa
ap atiouny 0 auos Sy “oiKa gece am
ingeaye2es gen oxmoew9 9 “gIZMa
2p 9¢ @P wanpwNoude asoxSato o ~ qv 1ojo1a}98z9 [n90)
soda 69821 UW aeI asayoer mo Saka ELpOT JepMEdxa Ue wsvOde yeoLeOUL UIE
pup) Qe) sjasersere9 atwor anjoajo WeeepUEAKD wIsDOY AUL [MUONS puRZ!
6 dO NIAAELL asvuad atdoo 0 tia9ey wapnyouogeu Wap “nyu 3Seq un mvag
‘uapPaly> guy 219498109 2p
outyjntr poep aqinas reU seR|a MUI FaRP "PD aLNAS 99 [as ¥I UL 0d BANno9sUo>
1S lounge “arsauduioo ap wresBoad of
wsupoyea op sis
Bye un gus nna
re uno ve PEND aeLE ES UaISaOe IS TIL
1291 pod INOW EzIIIN BA 95 PUB,
duns aug ou1a9y ayso una aoUy nu
‘ammo jnpog ‘spepupdxe amngan aivs qe axa1seIED UNS aU EOBD ¥yEIpeUM astSoF 0 aUt}GO
‘ ranad (}o"wnU elaUny ySO}Os UMP g> BION as Y) “4-49 FeNPaDaAd poo nyduNs UN
“%9
ago TTaga FO BUS //
fu uxeqex
idoo.do = wets
430
fye03a
(45) ) at
(weqe ‘9 1d payouon (yrE0) = do
ido = 0
‘sedno sed +49 wierd PS‘sa nvatim C++ pas oupas |
define MAX_FILES 20
file want fans[ MAX FILES 7) I
ant active fwan = ~37
ane maia{ int argc, cnart azevL
af (argo > 2)
ST popyt none, acge/2), stzueniasgy(h)) + |
pings anfile = file_openi name, “et” >
ag { lingite >
return 1p
char* title ~ new titierze| name +
sear ol = new file wan( tatle, anfile,
active fan = 07
gesete tities
geioset infile
celete fens [01s
return 0;
\
Trebuie si se utilizeze depanatorul penta a yerifica programul obtinut,
cna nen opserva afl nimie fet, Dac se pune, un Pure!
deoarene Tina care aioe zero ia active fit se va putes ols
rarerep genta opine mformatl despre suctra de date de ipa aay de posnter a
obiectefile_win.
"Acum daci puter si
departe gi si deschidem mat mt
implicite pentru ca ferestrele sus
dsemenea modificatd 1ogica 169
eschidem un element din acest tablou, si merge ma
4 ina acorda coordonat
fageze int-o cascada, Trebuie dt
pirisirea unet ferestr sa
YY deeit. in cal fn care wltima fereastrs a fk
conducd fe
‘inchisd,
fe timp wer variabila active fwin pentru a a
tablou in ne afl ate
FILE_OPEN (ai meu este 1608)
prin a adauga mesaytl
in TECMDCPP,
EDITCMDS.H. Apot adaugati una sau mai multe comer
414.Utlizarea muttsigierolor
434
tnimit acest mesaj, Eu raspu
eet, und Ia Ctr#K, E (vechea comand din WordSear) 51 la F3
mat departe faceti ca toate aces
mroaiseflses cores ita file oon.
file
ma
cu instructiunile extern 7
TECPP. Pere
Listing 14-10: TEFIL.CPP
ee
void File wins :tite_open()
active fwints
chart nane =
FILBY anfite = 36
Jo = fle open( name, *
ag ( finfile ) mn eae
actave_fan--
retuny
\
cnact title = now txtteaze!
Pronef active fens!
now file wan( ttle,
Goines cer eae eee
PEE ote tae HH
Listing 14-11: TEFIL.CPP.
EEE Eee eer Eee EEE
ant screen nexgat = 49,
extern file wint 5
ans (};
exter ant actave, fun?
fa
eel aorta
Since how Eitiesast amas Saasety, "207+2921qo 9189 proap
aIpalqo so.914949
89 aingasi 94-99 199)
‘areypauurayw
da0x9 no Ywojtout [2 ¥] ¥a|LOU9 18 Bf ap tod
2189 0 FOIU BISIXa RR now
1¥F axosop 0 ayeiowonwy 211803 aAnOw MIG
BS "RONRIDION aISD vIjes2dD jLore INZw> ISO eISaoR
‘SIysRIDE Gn Bp a}89 yrEINdox> preywOWEpUN,
PD poo a1198 ¥ op a]¥9 Bung 0 2Is9 ISVADY “piy>sap as auoKE
Yoqoo ta saaoud asa0y “Ouipa ezvorode are>
Wrrajode (ups uporoyy, “aaisinoe:
Fe opryouy 96 18 yruony gunn
Y¥ -Quado”oy::ma
UI “QUITS UW “ezeo}ade UIAL2]Q} aoronr}suCO
0 upiyosop ys asasnay YOU UINa]y ROU un apiyosan.
wevajade Cuipa “sai8y vaqlop je apryasap 8 pur
‘pepaion wy
139 ayo rode weeajade Cups
ype 2p zojuntiow sIMoaxS azesoaoU aporaun
Lf "Pow BF omgan 20 (pe rorfoury aunds auvo
iouy "vafade MyS mUOIORAUCD “WA
amse yzva.0n) us
a Bs Basa nu tep “a vvaseurusa} pnseOAR
|, w83] 10, “azwoweyaSu J0Sn ¥ aywod ejseaoe mp “yUaIN9 yp ap taRJOnUS
oeyqo snxpooy vowoIO}! wud sayy uT-nUNP 11891 vas
‘24998 TUHA Bo Lopen aIBod a6 16 auaIsY ap snugUUNU FiNBLOdW
ur nu gseafe eHiMios you japise
WALOL LVENLONYLSAY ANIL INYOLIGA
SiY9S9 te-o} axe od sojaxo18y & Fiuesnfits ut PasopHyouy BI WiNDe MIDORI RS
¥ sinapistios 29 9999 tie “sevoqnot9d 1uns vrs990 a
sajna Yeav pik. sora "40 anu TEU op Kk
"BS osalop yo nmuod 1 estou ap joist 0 91108 10% ny "30 SN FWUD 9p e1UasOP
3805 v nu asl 8eia0e EoUP vapaA w natOd fore areoxsi9A o ftU asa May oles
2youun saoqos azo Forrp 2p aioe ap if wt 2
(odo y4p lode wa Quodo™a oy agus stom
FC ae
aan jeeds
2 ( sxueta
rewew )Adoaas
[iswwete a3 01 pezte // :[oglemeu zeu>
parson guiaa ozo (uadom aI
{num age nu Boup sop Jo¥sys 9p oxsNN UM 2125"
yeds azoiouseo seop pupuriuoo [20 9p qopIp 1S un eh
juoo row nu Bs BICUEIU 95
‘j200 Quodo'¢
P ,ourey,, musqiiog
19 sep “201
owe|cwo9 op TOLER
alojaran 9p mug,
9p ouuna un 2400 # nzUOd Lido BA 36 nat ZED =f
Jas 1Eeyooe gplyosapad RS aIBDUL vA EEO eMop Y “HO BHOP ap (uado”
tivzyan ys sivoxeouy “weIAOP eu By
2 18 fade e=qL0D Te
Tore ynoRy 160} B aNEO ydUS
BA § “atieDO}
woe “wougoUs a1 YS ynuresBosd 69
‘989 3489 {npOU
ncn ey Jo1uiod un 9ys0 § BO [madey Bors!oads *_ EHD Ina
= srueta yzeuo O7aeae
peoTageata28
(Qusde etsy: uta eTTs pte,
“eiepT In
way
i$ no
dd 2-7) Buns
weer ase
jad enigngunguy aunIsion Q
od asa yoep “apiyosap
uodo api: wHoun,
fie00] wIsvad" JOP ‘nijeds afasoHoeIwD NOLFE 9s
iso auieu nsayutod
45 suunu un tO 2st
juds araqoena 9p 18 ul
dura v-s wIse2oy
uy!
oe e| atep aquayyp asizos yuns azEMU
/BUTIIS TETATUT, = SAFES
1BQ0}8 anu 0 2389
saswaoy ‘Quado™ 2
savoar uinoe WEI
IoIN. Haep Buu 1S STUDS
gado™ apy FO wade
iluinu wpoyew 0%
i qoud
me palwosp umnoe WYIAPISUOD YS
suum a]ty R}SwaKO ap vO “asejo FOUN puBUIeEce gf
grsads
ter sojarerSig-pin Baeza FF
Sodio wed +9 WRRAUT BS
tersatnvatam Gr pap cupse | 44 Utlzaroam
asa
jerelor pa
ca vedea ch file_win este sors cind © _lastuciunes continue este os instruct rea break piriseste
lorul poate de asemenea ¥ eae mstructiune coca
B_DONE), iteieisners cata ‘Transferd control instructiunii foop (do, while sau fe mat mtertoar,
al si pentru & i {in acest caz sare peste apetu! la metoda edit_do().
ea aul
toda file_ wine) au face pet
eae fancier eit). Dac vor
eit_do() va rm
fm contoor cota, edt
ee ent va fi fundamental modificata
PP se scoate ape Ia edit() care se aflé in constructor fle_win,
inceared rularea acestui program modifiet. Veti avea un meaty ne
care spune ef metoda edit do() nu este accesibil
din control(), Este coreet, ca de ficcare dati. Metoca edit_do() are aributl private
‘Asa cum 0 clas8 are atributul friend tot asa o clas poate deciara o fimct cu
scest attibut, indu- astfel acces ta membri clases declatai cu private sau protected,
Deja am folosit prima dintse aceste forms
cum se arati in Li
atilizeaz o noul instruct
class ay_ciass
Listing 14-19: TE.CPP i
Friend class needs access: // clase friend
+ eytse = new tituerso( name ty
char’ ola new gile,wint eitie, snfile : |
aearol = nex file.»
Soeave twin = Or ;
seieeerthtues
friend int my fune( int pl, char* p2 }, // functae frien
Este nevote de intreaga deciaratie a functci, deoarece pot exista mat multe
af eu acclasi ume dacd se utilizeaza supraacoperrea', pentru acest nume de
control 0;
| fimeue, Compilatorul nu ar st ce si faed cu urmatorut text
return 07 |
7 | class my_class
void control ()
friend my func; // Nu mezge.Confus pentru compiletor
‘ sin control”
nassage( “in
ant enc; 7
ant cone = FALSE? eursor();
urna [active wan] “>show_: ‘Asa incdt in TEFIL-H in definitia claset file_win se adaugi o linie ca aceasta:
end = adit_ema();
fe (ena == FILE_OFEN )
‘contanue;
frien void control ();
Acum avest cod trebue si meargi. Acum totul este cu o structurd interna total
review,
done = fwinsfactave_fwinl->edit_ao( oma :
b while ( !aone ),
msgQ)care au fost lasate tn diferite
comenzi de editare pot fi de-asemenea indepartate. Nu mat folosim deloc
eit, 258 c8 se ponte de asemenea sterge. in sfirgtt funcfia msgQ insist este
sled se poate renunta fa aceasta
celete fvans{0]:
‘sure,
message ( “outta here!
+ omy enart mode | [leeesseerseeeeeeed
ener fise_epen!_chast ay "eae on‘vung maison ‘oWoHAop rw grzeA We un
juuorido
iI Jojeioaigo w upeosea wy varezese yo sojaiuioutg
Jado PINGOXD z NAO wNTeLD} od
ep "300190
avoudan uoqea wufise nese try Sormp of snisone
are dnrdod usp 9yS9ue}Sour area “Boy mies eee
nid 1 30
sramrgo sien
oa
wuongow ase dndod
ap tarjetas enyaiogme
uodns mgaIqa vy} op
soatge au
sung
FY “ANSIB} ap apesse9 run
3Y3ISI4 GNYNILNOD
YOTSULSAYAS V VaVOSWO NI VaNWZaS¥
oR uinoe
td SiH8 v axe9 doo} apyte vountiony
: if arurasen308
i urng"eatace jeutay esores
euop yt
"{ pw )on7y1pace twig" eataae/ stitm
ctsanoas ergy 6 YSNPONUT B
ISO}OJ -Y VA soHSy-nyMU op vaTE
—__— -anoaxe
uo.) “nizsg) rem ot0Aau BoAw God BoE Bsns NOISY UL
‘ibuedap rented poo vy aivod af voUoUOSe 9¢f “IaHoUNY smJNAiOD & BALNTUYJaP wasaIONS
jaW0o BIS aod 96 Lody “jy 19TF aUTY “gf “9 nop nuvITBNOD
‘u gisuoo etioury 0 3B1os © ap ting 3189 O
BILVOIONI
‘880 fio Sed +45 WEIRAU FS ad94 invatim C++ pas cut pas
le implicite inteoduse prin #define (care ar fi fost o idee
TEWIN.H asa dupé cum rezulté din Listngui 4-15, Cu
Jiocuiesc constantele corespunzitoare din deciararea
util chiar de ta
aceste defini
cconstructorul
Listing 14-16: TEWIN.H
faefine DIAG_TIP_CLA 40 // Black on evan
feefine DIAG DEE TOP 8
HdeZine DIAG_DEF_RGT 65
fein DIAG_DEF_BTM 15
faefine FILE_WIN OUT_CLR 126 // Ho yellow on waite
febwie urmirit fereastra
1g dupa ele recompilarea
Compiling. Se va observa c&
toate acesie .CPP
pontru TE, TEWIN, si TEFIL, deoarece acest
figiere. Cand codul obtinut functoneazt nu i: 2
1m adaugat un grup de constant pentra 2 stabil
je win, Acestea sunt FWIN DEF 'WIN_DEF_TOP
TEFILH. Aceste constante sunt
apelat din constructorul ci
nH
LFT, F
argumente pent
in TEFIL.CPP. $i
fcut do la inceput,
‘estate nu se va observa mici o modificare ce comportaner
‘Acum suntem gata penfru a pune aceste constante imp}
mn consiructorui file win, in TEFIL.A trebuie se
file_win, aga cum arata Listing
«din TEFIL.CPP. asa cum arata Li
op
cconstructorulun
defimtia constructor
Listing 14-16:TEFILH
public:
File wan( chazt ile nane, FILES tf, chart nama,
wae if = EWIN DEP LET, int tp = FWIN DEF_TOP
ioe re © FINTDEE'RGT, ant pe = FWIN DES PT)
weide_an)
Listing 14-17:TEFIL.CPP
chart file name, ETLEY tf
gne 12, 208 tp. ant 5t,
4. utlzarea mutttgerolor ce
Gislog( File nome, Lf, tp, we, ct,
= nane, P, bt,
SING_bows, FILE WIN_OUT_CLR, PILE wI_cow o1
CLR
_Cu aceste modifi
test rebut eexcete enact cna
loeta penta vn fie win ata
man sind
ar cam mare, vom: don 8 stabil
2 ve ©8 totul a fost realizat intocma: si
CPP. Sa céutém ust care asigneazi te
jou extra argumente in apelul constructoralur pentrt
‘Am adaugat uray
5+ 2eactive_swia
Aceasti modificare va
tee muta fecre Fereas care ste deschish, dou spa
eo ioemat 0 cascada de ferestre, dar 7
a tra cd suntem pe drumul drept, dar este suficient pentru a
ietodii ta coorgonatele ferestrei cures
active $i amin 4, tit pe
i Nase atid ns margin din dreapia sau
: augh daca ais arn
se foloseste fereastr Tistngul 8
de dimension, minme, Lis
sodul care rezolvé probiemele discutate. oe
Usting 14-18:TE.CPP
Ger iting ATER aeeeeeeee reeds secede HEE
ant 16 = fwane)
ape tp = fvins/
ant rt = Zwing!
ant BE = fwinet
actave _fwan-L J-pigt;
active fant |>top:
actave_fan-1 |->rgt)
sctave fwan-1 J->ptn;
LE 40 te < (run Rot ~ erie,
= L_RGT ~ FTLE_WIN NIN WzDEH) >
tp = p< (REE EM — FILE WENEN Hae) >
hi eR Wo Men HEToRE) >
rewm ree GUERGE yt oe
DE Ww be < (FUE BE 1) 71 - OF
char* titie = new titleizey name
a sman( title, infise, name
BE tp, FE, pe) ’10d gproa
( sptoa dusnd gut
+) xoas6~
1 exte aut )yoejed
soyrand
1838 4 yDTON
_ dog aut
forte soe3s aur
penoazord
:
yeessd seero
o v1nx eurzeng
0 asiva ouTzoPy
Taha UTzEPY
330° //
dda. 36-71 Buns
: “{osip od ayse nu wo ¥be “nou aise m0)
9 ‘qa0'L no wiodaony ‘vezi uns puRD FURR Bars 92099H, Hy
{uy eiTaRDOEE BaraseS rode aISz "pIOA taeIUIOd 9p FANS o RaRAINdHBLH HOEISA USE)
‘yp vA yoUISd SEO LIND
Se “qeog!pour so8M 1S Jan ayo poo MUM vaxoLDs MME ayRIDg!| PISEETR “aH
tafe ap ag “miBaqiauud asaoe op eznav v 9p feo osvos94
‘POU 7B Un-sul arwOTEA wade BAIL B ap RIEIAGHED eH
{mneAUOD aIs@ aye ImImMUDUIE|S waxEO|VA YOYIPOUF AU aISIAAUOD 9p ja;I5e
HFIP BT ad easegzoatos —— Ho // tad (qx2uD} = od
fad pron
fod ,"zeyo
:22}UIO INYSOOE ED!
(sea) atstaauoo 9p may mymuorepduios puorUaK arEod 35 pIo% zon
leeial
a “saer
Fryuos un gorda are: oe
Taio no a ungine gooe ea nu aR tf
see ees fad .ptos
‘yontod ye 90120 vo eZRATLAN aS PLOA HaeNWIOG
pton er taeautod ep Avzre // {Jead qv
pron eT ZequTod // fad 2ptoa
Julod ye 29140 #9 BIEID3P
25 pion Hsewmeg “Satadseu JojoqlqeueA wdNse L
3 © wu nk Bo Irate
sausiod yevasasunu 109 ESE} 0 P
1} 0 ot19$ ayeod 3s
ag “suulo]qord tassege aye arepyoae ap 129 2H
Ado} fiut wip yuausoja un WateO% liad BA 94 308
‘ap “phot afiusado © vngpe WoOA “FANS
syenen
eg “eroutey HnusOD es INTE TA
‘uso puny aIs9 TASRODY LE BN
ojansaxay v z9p4K]OUL AP WHOEP
MOGNIM Ald dil 30 SLOSIGO 30 VALS oO
os vy fortouy wa8OW BS
injos o 1sy8 wre yoep soumnay 12 re BO
up
anesonnitueg "28]959P aati 9p BPLOSED 0 UNE aA I
HINIAVEL mp cunc-aqg wsero Us puaLy da op sooo" (pT wado™ 2
9 now Isoae HoonpOrUT
squBseuT
saoffnppe inyNsoH8
san nw en ea ot ae
Dpow ete “wu yzeu puede TTS -3TTE
soralsieippimu Barezin Pb
‘Sed ia sed +49 WRTEAUT ESa ‘SA invatam Ct pas cu pas
vordt pull ( int iter no).
youd Look)»
int exze()( ceturn toptl: +
int main() // pstack test routine
" pstack* ps = new petack{ 3)
Snar* ptr = new chart5]
enact pi = piri, * p2 = ptrsz, * pd = perr3s
pe->push( ptr
pe-ppuen( Bt
ps->pusn(
voids p = pa>pull( 1);
p= pe-pull( 0):
p= ps->Look 0),
pstack: ipetack{ ant size)
stsce = new vord* fszzel,
stack size = size:
top = 1
'
petack: spstack ()
alate stack;
ant pstack: :pusn( voue* ptr
AE ( top < stack s.ze-1
stack(+#top] = ptr:
seturn TRUE;
alee
return FALSE;
vend petack: :pop
af ( top == “2
etarn NULL
else
414 Utilizares multi-figiorelor
i4uti fisiorel ro
return stack! top),
1
voad* petack: :pull( int item_no )
if ( atem ne > top )
retiien NULL,
youdt ret = stack[ites_noy;
for (ant 2 = item_no; 2 < top; 14}
stack[i] = stack{it),
top
return ret;
vous pstack::Look()
Af ( top == 2)
return NULL;
; return stack[top! ;
J) end of t.epp
Se
Este un element nou aicr. fn metoda size(, definitia functiei este im:
Accasti abordare arata compilatorului od aceasta este o
anuine int foo()! getumn 1
return foo(); // probabil au este un apei ce proceduretistuera ara o
oe oe epee ee
vere
i fumes |
(a e0ede erty 30 ano, }eSessou
( (rin usndg-sutaz) ) 32
(13s usdo" errs Broa
( etag"earaoe ) eran
rma = wimgTeasa98
(QxeoT<-sutag (gute OTEz)
‘yds 237003
juny 0 “44
‘3189 Jno 20ey BA BISUATE BI APIA HA,
_ putmyTentyoe sts" e TTD
EC Santa am jysegsd HEU = SUTHE p1ORIED
sgasvpor soje we ng)
2] soquiod nda 2p ucquiod 9p
10d ap Aeuie va jadaouy
-yans dia ap 290 na LiayOd
{58 navod yapBaxd wionuns wny “pnseONFaUTEMD
reyoap ap oyEzundsa100 m
pe
larioury exdnseap
ayep 9p vanyanns 10
Impooiosa I aoreonuy waind oA BAe
fined qa", mnuoréyy jryadsouy 2] aDniouyy HeBmgpe rouy UL (9ereue ef Hes
rs “eonouase ap "aieo ad iaSip ME ar-syuy Hound aj gs Boy" toma ‘wows
{ays ap advoude snd wt-9] Ng) ‘gdO'AL UI ad. soreporous
suigop tivtdon 1od'y "WAL Wh 4d HEP HOEISG 1OSE
eddy ty s1UGO sIaq}qeIEA HHesET) “eIsaIE
ro amnoxy oygatugap 16
Soyainy [-¥s eswsoul "msm [-E nunued du
‘op wanxa S169 WeIAoxd I6298 YO BALBSGO HA
7 380} B amv BaTTOjEA ABLAxS “A}oUoxa 9p “dod wrfeiedo vO
ox sysa yuoyodusn 21s0 95 “siuEHOGUL suns Ru BSouPR JoIsD0e are ayterMo AVOTeA
eA puRD
toone ap
“eo s8aipb pUBAW TOHMIOC oSANKMAN aS FAROSEY a5 pu "OSM Few | PA
jonjsensd p}pRS—Sd NO MOPUIM ToIEN PAE
(Qdod aptiezedo vison v nzzued ()uteut
1 ajtierodo. youtuan yesogeye we} 2780 90 8a) op ymwwesBoxg “sed
Tuuad yore 18 oodsur 9p axiwulquice o HZ
ung sfe2\j 8 pupugs ‘poo yoetsa ys990 WB no HaoAPONNT]
oqeyjaiuos femjane aye yamsion oxy ¥ vO aMwOTICUOS
nay ypu anagip 9s oyeod wiseane x yung TEU Bee |B BOpTSUD o aI! ad axewtata| ut
i mnyode yno0] a YanauTy Te
SILVOIGNT‘38 invita C++ pas cu pas
stropy( name, planks J;
FILE* angile = r:fileopeni name, “rt” J,
is ( Ungile )
return;
ant Lf = active fwin->ife:
ant tp = active fwia->top;
ane rt = active fwin->rgt;
ant pt = active fvan-Sotm;
Af t= Lf < (FULE_RGT ~ FILE RIDTH
kp te tp < (FULLBIM - FILE HEIGHT) > 1 0,
rbve rt < (FOLLLRGT -
Seto be < (untae = 2) 72: OF
cnax* titue = new titierse: names
active fan =
few file wani title, infile, name,
1£, tp, Ft, ot)
cesete tities
fwine~>push( active fwin },
Singura parte a acestui cod contindind un unc truc este cea referitoare La testul
bazaté pe pstack pentru
objectete lostantiat difent.
Din acest moment vi las si continuat
‘este un bun prile pentru a 0 face. Schi mie
decat 20 si incereati din nou.
‘In etapa urmatoare incercati si amplem:
putes fj asociat tastelor Alt#Xs:
rmesayul ALL_DONE. Acesta et
nd un mic truc este cea referitoere
trodus(push) in fwins un pointer
entra unul real, Dac aceasti
izeazi functia message(). Dack
414. Ustlizarea multifigieretor
REZUMAT
4a programator in CH In
‘Vom diseuta despre acele1120 2p atk
19 2d 18389 Bad I
oq 6 8 ‘asuI9 hop Ezwoo19 aMvo “idD'] "BIdUNS uNesBOIG
Sou p
BIE OWSe Uae 9)
BO MED
nsuoo ps yn 4
‘00 BoyeIp ,un 219,
uestiose
igow a
ItIs}OUI#] B OWMDLIEA om WUE Oo Me=LOp aLeD 199 442) 18 2 soFafeaU
IZED wy wuNBapROW v:> “ioIURAL rarSIoe sETSOIOJ aJB oANvBoW oJoIas}0 al
int No Bassdop “gIaHINL
snpaIye 99110 16
yy 9809 ad 449 1
wos yorido 38008
WOW TOA BA EN,
91 ys WOR
9 UL 10 | Yznpu0D
Weoitde gsvoavauwune
LAY
‘ANEMpIEY INLIOUNS 16 2
ou 15 1SO}Q} LMG BS Op Thon Bo aivod “ToUa
0 atuizaides ys nqan, ao-w aie9 “eamnooiu 1S aielaRS
Sian “tidtaxa acy “Sun in
Dyan na emg
oP
Teneo SF450 ‘Sa Invatam C++ pas cu pas
$5 Concwwzit
‘enumerdim clasele mostenite - separate prin virgula ~
singura clas’.
mosteni
cna construtti obiectul
azul mostenirii simp
clasei moste
atilizeazi un obiect cu
creea obiectul, atunct cénd constructor
teste pind de compromisuri, sar limbayul
diverse.
SUPRAINCARCAREA OPERATORILOR
de date.
fe limbaje, operatorul + este supraineare:
unde puneam doar o
acelor clase
ae 451,
+ ar putea returna suma taxelor ciind este aplicat a doua factun. Priviti
program:
() teepp
Hinclude Tp = 7 BUT) Tod
SASUOD y wiv YouP "n}dwaxs aq] rosetT Taaedes wr aweyy // * 77° = xoquan
9 JOATU Un @] ap exruoxsow ajasezo Bopysuod Haind ‘ajdinman raruoySou jae
‘9 nguag (BaIOse6 fe 9169 199P 1S O1O7 ND WwosUME Ysa
1B 9p waliouia fe also HORM esNNoY ys BuISEOAEIANP 2d Se] EA)
yoqstt qe auauere eeryouts TR // 0° (S/aStTT
Seay TE ree ee ee
=nIBUED BF ‘edo sed s45 wetpaul eS zee454 ‘Sa invatm C++ pes cu pas
cuvantul
im, De exempl
fntreaga
putea fi un element
‘Acest lucru merge doar daca avett 0 singur&
‘apar o singurd datl pentru fiecare clas.
jenerale pentru o clasa din care
‘se pot deriva apoi clase particulare. Tratarea exceptiilor est te
tratarea inte-un mod elegant a unor evenumente neuzuale, ca de exemplu incercarea de
a'serie pe dise, atunei cand nu mai este spatiu liber
Campuri de biti
‘catve campuri de biti
Gestionarea memo!
ntre elementele discutate pe care dot
gestionare a memoriet. S& presuounem cd
va gist spatun! necesar. Bing
1 sublimem este coneeptul de
apelém operatorul ew acesta
. cing se va apela
46 Conciuzit
455
now new acesta nu va mai gis spatiul de memorie de care ay
pointer null semnificdnd incercarea nereusiti
‘oH nevoie. Atunci se
prevadi o alternativa convenabilé (ca de exempl
salvarea acestora) fn cazul cd nu se mai giseste 5
CH prevede un
fe gestionare a memories
ew, at putea si trateze $i
Cazal cet mai comun
vatare mai mutt sau mat putin
‘mai bun. Puteti si va sent propria fun
de tipul new. In forma sa mai sot
‘in Borland TC-++ sau orice alt C++, verificat
STDIO.H,
Apropo, vet fi feriiti si aflatt c& puteti creea o finctie global new in edteva
minute
In afara mediului TCLite veti avea nevoie si
TCLite vi limiteaza la moaetul
tru cod. Aceasta este sufictent pentru invitare, dar veti avea nevore de ceva mat
mult spate pentru anumite lucrai
Inalte medii C++ se pot atege moaet
st date luate im
per
Modetut
le care se potrives
RAM 51 sunt mai lent.
ALTE CARACTERISTICI DE TIP.C
C#+ este aproximativ un superset al limbajutui C. Sunt anumite cara
fost prezente in abordares noastrd. Mas devreme s
gist 91 avestora utiltatea.
lume priveste
fractionare 54
sau
1eeD 9 serie aplicatit de bilant sauQuren aur
foraer = ()([essuotase y)ptoa
BI uoWMOd 9p nojges mun yniodv 16 wt
“soyaimyeuyg 30d ag) ‘osfouny ap yece un oisa go 1mdey waypur szayuered afouun|7)
yeuorae
samjnogei & atau
‘wunid vjade ws auntiannsur vareoreuLT
“Psuonse ‘nyduzexo op "
oe ys
fron Teo way
g. a= 2tRsex Fr
seop [Teo wow
ween Haven 3
{Ineo2 UT wevezouot Y= ide) edeldke eevonreAd
Jhdn ap amo © sanpaud va jmsoreysdw0
(Qemos
q. 982
(ero.
1 dx) woatas
iizniaueo St
‘pusem
‘A. uy aywongzundsesoo vasaonpea 1S inpoo urLrepisuo BS TEP qawoW
109 punuis 0 YZPaISe} amd Pad aulNs more|sCWOD “mA” ap IM9eIgo
[pa tarjauny indioo uIp 199 vD “yoUS Sun] UN BZD 2 DUD)
‘AgMBANS ho yes"SaAd zeIO Wind Tew
90 18 pides inpoo anmp yanzuoo euor wy Feanas 25 azwo anivaride FIP O RIFE 95 IOTV
‘ie00/@ ] atiowiau 9p nideds 9p esdiy ep Jo]HNpUOS wareyEN nad You youn} Teun
‘soues019 b] 1avp seo" v poIdiy auvZyI}IN © Lapan ria, “sHoaup 16 a}duuts op ywanuL
jon “osu 18 axajduioa aueoy LNpOD ep inje} JO} ausigo B nuIwad yHRO;eKD ay
fp 2180 dey wsa0¥y “Trjauny ye1oose inpoo H] s9}UIOM Un aysa aHioUNY AP ouNY UP]
jouny e] YeIUlod
suas 9p o1isdy] non) UL woH]CUT UNS vasape
sojaeivo ap agise vid 1
sex} YS IHITUOPEIALNOD “ides op “aswwIed EIBSEA IEvOOY
jeubyse eguod ae my jezeomy s/ {9T = [€)souDOu
(Cre ‘oe ‘Te foe "Te ‘Te
€ e
og TE "OE "TE “8% ‘TE | = Let] SpuOOM uF asuOD
‘asuoo eastzyinn pzvansny wesBoud ap qeINg vasRO;RUL)
ms aj aye yosvouns 26 YS a169 wIseODy “oHAUNLEE da ap aI
jugjar ait ‘ plopistion gg "stloD EaNeD_EIeo oP THIOSU atPreTZ0p 0 suos
Srv symvana aqjnui few ap aep ap panjonns o tulad "Suyopy HPIMIDAP O 9p NCH eau
sBunsip 95 mi ystioo vasvayjfeD “uyAne anduIs un ydno0 azeo a]HOTEA maa
‘puny azeoayy uy
jeubtee oxeod of my jozeors // Tete = 14
gettt'e = TE qOTE su0D
“arboue By eanpuod BqUNYDs O B ap aIP—AANU BBHIO "RIBAUIIYDS 15 1806
‘nu azeagryeo paseage no ereIoose vasBoUA BO IMAKy LOIPIN waEvODY “++ UF wWaWBIOads
jongou 1ode 3$0} € 18 9 WH ahupde B 1QEID|29P rou BIEIOOSE ‘,asU0d,, POIBOYFIED
ysuoo indy ap ayqenen,
tues 66 20eNe rep axEs0yy
fanjos op areiousd slows|qoud xede rea! aw
reworionyy opnasd ais:anuos © ap 10neU 9189 19uMIE
aye 90 uIp aed wins v dFVO1I0 TES
spauopy “OUR Tes 19seUL °2d
"8 uvjop “nyduroxa ap "emicxa @ naydad zyEQoUw pynits wi azousne
ed RS BOG +20 WETBAG, BS ar488 Sa invatam C++ pas cu pas
15 Concluai
459
f int? ip = ¢ int* a; // converteste @ 1a un po:
ea eee ey | for (int = 0; i< 12) Ge 4 ee
actionstil(), fete
* Rulind acest cod se ootine:
return 0;
lista care urmeazé numele de variabile alese ajuti ta a explica semnificatia
-a. De exemplu, py_V este un pointer la o functie void fir argumente, Avem
void(* py.vi (1; // pointer 1a functie voad, fara argumente
int(* piv Qi // pointer la functie int. fara argumente:
Ant(* pia) (int): // ptr le functie int. ca argument int
ant (# api_i/2)) (int) ;// argay cu J ptr la fune amt, arg int
Daca alegeti cu grija din acest tabirint de oferte s atunet puteti serie un
cod rezonabil de acest fel. $& presupunem cd tabloul de pointeri a fonctii se numeste
call{] si s-au introdus denumsrt semnificative cu enum, ca de exempiu LineDelete.
‘Atunci se poate serie un cod de felul urmator:
cali (LineDelets J} apeleazs Line delete!)
Daca procedati in acest fel atune fifi generosi in comentarii
S& ne reintoarcem in zona confortabila a conceptelor simple 1 elemes
Limbajul C au permite tabloury m mnsionale, dar oferi po:
tablourilor de tablount, care sunt echivalente cu primele. Considerati urmatoarea
doctarati:
ant alt)
coast dectaratie creeazA un table
Fiecare element este un tablou cu patru elen
jouri atunet cand atte
imbaje pot abuza
‘tunel cand pro-
veti intl acest operator,
inciftat a seris codul sé.
acti separati expresiile cu
lt tne or ovat etna ae
‘Valoarea returnati este aceea a cel ia
dreapta expresii,
fl Wui a, in exemplul anterior, avett un
punct. Dac decideti c& veti rescrte acest cod ineriptat atunc aveti dou’ puncte.
Instructiunea goto si etichetele programului
: structiune goto care functioneazi foarte asemlinator cui cea
gin BASIC. Nu am utilizat-o miciodata. La in BASIC instr
permite saltu! ditect la 0 instructiune etiehetats din orice punct al
Instructiunea goto este o cale de a obtine programe greu Na
un stil de programare care
wceastl deprindere. Veti fi
Teoretic este demonstrat ci se poate reat
Practica unde dupa reserierea codut
fa la goto, Nu am vazut nici un
ru a elimina instructni‘(6)saaxqut
20t eezednaeszur 7
(Co wsaupe e} adoo4
‘9p Proqey, “Hadras
9 Bjodel o-nuwiid oxfouny o yarajade onseid ‘osadnianul 0 TevOANIOY areaspucy [modns
Pugs ‘srodnuanuy o azanliow gs oIKod alRAYOs INUIZISIS eS sJodnNaNTUL O BALE
creed suvapiey mOdNg “uadnianuy ap o1di) 2s uN oue ggxog BEMDONIINY
‘reoruMUIOD 9p TES "Nop azesEa9U yS0}
he ‘situsuen 9-5 18 39 vaao no 9085 Won 30 audsop aeWUOJUl O {9H MAB B NU aIeAWpIEY
mods aoamwoag "eH jnuoIng wesyde w jruoJeIOdo YO Nes “ANRTAIG 150} He OsIp ad ap
eHoHTOs Wro-a] aun ad ajazep BO Funds aU ¥S vaInG 4B aradHaAMU O “n|dWwOXs 2¢q
"yoanod b-s yuEUOduus Bxo9 vo aunds au v ap s0TEIN9I
Wo SO NE BD wWHsdossep HoMRUOYU aye a}uZ ajawitud sneD ou-npUEA:
uednuasqy
‘2tpiodniezi4y no wodoouy gg “aunsouns
Uy Haund BS BASeOAEUMIN YUIONS UL sUyWEY “osMoU B} sadde aUL}aO
hod emes990u yUNs ate9 LION] 9}20e EIUAZAIG JOA 9S auintioas BISBADE
‘asnolw nauad tions mun Hupsngpe wopenyfeMIeNe
1] [NpUEE no mndaouy B} ap yinASUOD ISO} ¥ afD'CADALL BO 2189 Bla B99 VaIS.A
PI 9p sjaueoma n> wid
Wop Baysaoy “vse aS MU AEP 4
29 18 Injn-asnow writzod oudsop
now! vazeseidep nes aresedy 99
djatedrouuid yavaiaueu wlouny aysaon po yheds He BO [!qraoIg
‘AYO mu sounnoy uorsuarKg asnoyy WosoIONF ¥9 wrgoTEUaD
‘ssNout ardsop 1eusOJUI
9) sounnoy uoisuary anoyy YosorIW UIp etuauodiuos
Uy eBNUPE B nAAKIEg
¢ MLEENLIE, UtNUE aoMposTUT BAIS
a a1vess x min-asnout
rat
‘sows 9] ys uno TiS axvo ad va 1 aLeInRD Mo atirz0K0 uy
IN1N-3SNOW V3eVZIILLN
a
TanIDUOD BF
all® 9981434,, 29 21
oaigo Béoye 10-5 2
|auisya aC] “EUOdnS af axvo Joyar0a1q0
Joey ASIOAIP aTeNHpL UNS PUR
‘pjcoa nanued
1g © a4 pdvase (sseyssu of OsaysTiap aioung "eyes 9p mids
iy tn may “uoIwas aygoursour osva soujdor 30 6 Fes
‘WSnepe ag “szINgOTUY ap Pa Y] 2901] 98 arEIMED op
ysea08 Yo “Sorat
12 9snput aysfierado riedeou09
ne Hongo 90 e909 ase He ne PECL
21 "RIOR =U) RASEoAToUIMNP {nuzEABOud
39} ap unaxé puisoroy omBINgD op [MEIBLORTe wATRKIP
sdaouy “pjdtuIs yorees al
(sur yo at
38} au1UIP aqUEd0Id 9p (Z VO Fase BIA
2003, A}NAXD Op "TED 4
suusago
vansidap
‘azinga ap unpoaord wad
‘ayareoupg "2
BedTO Sed FO WRTEAT eS462 sd invitim C++ pas cu pas
prin numercie hexazecirmale asoctate, Conventia wzvald
aproape totdeauna ape
notatie de tip limbaj de asamblare:
‘este sii se serie despre el
toh c= nunaul 10 in nexa sau 16 im zecimal
ook Lo nunazul 21 in nexa sau 33 in zecimas
Cele dow! intrerupert sunt faimoase, TNT 10h este Snreruperea Wik Cate
permite manevrarea cursorului, modurile video 3: a3a mat departe. INT 21h ove
fntrerupere DOS prin care aproape sierele de VO, intre alte tucrutt, sunt
procesate. Functiile de mouse se gsese
‘Dupé cum provabil afi ghicit avets nevoie de date in plus
‘exemplu INT 33h. Poate donti sa se afiseze | mouse
‘fla cursorul mouse-vlui, si se aise
aitoeva, Acest domentu de alegert
‘yngurd functie pentru mouse in C+
Yn loc de parametr, sunt folositi regist™
jntreruperile mouse-ulu. Un registra este 0 oct
fn interiorul CPU. Limbajul C++ nu are
wunct cfind apelati de
34 se afle unde se
sau orice
fica o varietate de paramettt daci am avea ©
fru a pasa datele de care aur nevore
de memorie cu uh nume care Se
naxi special pentru manevrarca
tea de regisie! si de mume de
ajului C++ prin
ceste exiensii sunt
fare aul maniera lor proprie de a face aceste operat
ident de suportul hardware s& fie plasat fnt-un fisier asa
imba compilatoras sau se
‘Trebuie ca tot acest cod cet
neat 38 fie cunoscut ce trebule translatat atunct end se st
oferst patra cegisir general
le fiecare. Generatile
80286 a adaugat EAX. EBX, BCX $1
it cer patra regigt initial sh
vor sma) utifizeaz’ acest.
regis
TResigtrié Evx includ de fapt AX. BX, CX si DX ca pe pltile tor crepte. AX,
4 EAX asa ci scriind date in AX seriem de fapt st
in mod similar fiecare registru general poate fi adresat
mai semnificat regsstruiun AX este numt AHL var byte-ut din
dreapta este aumit AL. (Gin lar se poate adresa BX ca BH
si BL, CX ca CH gt CL gi DX ca DH si DL.
Bavlend prevede eéteva oli de a utilize reatstrt x86. Una este ofertt 06 ipa
unjon REGS, definit in DOSH. BU in union fatre doud struct,
WORDREGS gi BYTEREGS, Partea care ne ntereseazi arat ase:
union BESD 1
‘Seruct HORDREGS x:
Servet BYTERPSD n:
15 Conclusti
struct BYTEREGS |
uesgned caar al, an, ot, bh
signed eaar cl, en! 4 dh;
Struct WORDREGS ;
unsigned int ax, ox, ex,
b Dee ex, ox:
(Sunt 9 alt regain
defini WORDREGS, dara.
Perio se cerceta helpul pentru o list completa.) eae
1 autora np union se poate pune ur neg
ALS AB Amtle onponent ieee ea lca ge eons,
este utilizata in apelu( intreruy aes val,
ve ob oe ti erie earactr general
cape cu un tund einterieeu sactnon REGS, Pet re
. Se atribute orice valoare necesari in prima variabila REGS
Si ncepem o
sn Hee 6 Progr sin care gisele cursor pe
Moa pm servic video Oxf. Un servic este solietat pr
INT I
sdu pus in reyistrul AH. Serviewul video este upul dintre serviciile ofe
te serviciile oferite de
Unmatorut program solicits servicwul 15
#inciude
define VIDEO 0x10 // pentru intreruperea 10h
ant main()
REGS an, out:
(feServicivs 15 intoarce modus sn ki, Laryinen in Alt
return 0: // punet. un punct de intrerupere
ura 15-2 aratd utilizaind fereastra
astra Walch, rezultatele act
‘conve : 2 le acestar
ia nt a rezaltatcior. Far aceasta eonversie vets gis ear oa
Ss oF came, eur Fn in
fa tuturor intreruperilor, sncluzand rntririle 5
acestora, Cu © asfel de carte in mand, cobordrea oftre nvelele de contel sore‘p asnous jnto1ues a1Ses0}0} poo N10}
Bojsoav ad 94
aw (© XC (9) XO Uy aIvoy
2189 96noW InloL\as puRjady
2] 8 anued azarae wy ataneuop.009 g 10 tie>4
2]eywuopIEN9 ULI ImIn-asNoU jNdD} Ie
ynuosino
yzod pzeoxy “y asnowj
-arejoemeo uy panspul aseane axeuoAuoD gm PaNIRERN ox W HOTeA youtoads
areuopi009 ajaauiy °Xq WK IBUOpICOD Fe XU} BIEUIMAY 959°% MEWOPION
respi aon ajoqure nad“ sisyde adeasp wip inuomng muod “Zesede
ase wugis up inuoing vo imide TOY!TACS 1 varwOTeA SEC aS tn fit 9
os JPR] “myawoING BaIEIS "1G UH REWIMIB! ASS ¢ BsNOUE NRLAIES pURTeSy
eiizod 16
ynuoyng Bose}s “¢ osnow jnionog
O15 S0ON IHN 9489 99 8)
‘exjuvdsiq) eountioas apa, ‘sunase aisa imuosino “Z osnow
ius © ayuod “inyn-osnout
Imuosino epunose *z esnow jnioiaios
Jovezt99 ynueIs9 UH eanwICD ®
ninuod cary Hezynn 8 atodruasyy 9p round um o] sudo BA woup 1n-esnOWI B9pOA TNA
‘BX. 168) 9p jmurexfoud uy Quoi adiouns o sesvidisfouny aysane WIS ¥ naWng
‘aso g1stx9 gO YuIUD}Op 2s 59 yenp IwIpOUN (}dNAsEIS UW BNA
amgan atieiode sK2oY “IngOSND axede mn-asnou je | {MIDAS puRlady
Insosino piewe *| esnow! jn‘oeg
o urnzez
(anos ‘wre “ssnow }9equt
XY UT ound 0 exes of eezea3 // 7
BuTIdo IS ezvExeqTTS 0 TRTOTAISS // ‘9OK) = xeOE UT
ano "UT Some
Quren aw
EXO ASHOA SUEDE
4° S0p> SERTSUT
ssowuun nda ap weifiod un-nuuid g [rtoves Heise.
moot eaTetsteo at //
prerx'ano = eencureey
o inorazes wzvetede //
Qengzeas ur /
ve aingon
5 axeanpsey Ba} gud © BIS
nn orpotdiuy o329 aFVAyOS
how aisa nu plip> !9uNye BUND! ays9 OIG BALBOTEA “| AIO
roreo}eA “O82 TES 1~ BzEgUuN}e: 1S (MyEWAKD op “TI2LZOP
Tuosino) wala a46}S O-AIM] |M-OSNOU EzEALAq!Ae O ASN
aieys 18 oxeagija “0 asnow jn1dIES
cesnow »] aareias roytodasaniy wivBisanur wodood BS
rodsip 9snou woIput
‘aangedsou
ses yergose jrzguunw no (HIV NU) XW [Nusa 20
Taide “SOIG JolUAURIOAH] eaIeUOrEA ep axLgesONP aidg “YEE ParodnuAny
sory 25 asmow v1 cand 9
4s tinge ulsand Sole H0|E20"
jode eadnse pyeioua® ot
asnow quod uednie.yuy
1 oop sis ade se mean ea NEN 2ST BH
op sz
99 246 unpugs aye yunds
CoaplA jnpoU woHsLEEA Hang “THesAN| aro od 1
BS amo SOIG Jede un sone aise qu go deye ws Hie
A vase v] areuresBoad yung 0 32
21 ap wins uy xorayen
up areqm ap tunes m uorea ap asoanporut 9p aunrsoU
uke Ba BOECL
9 sop aise Sof 9D
‘oIAIOG “9SNOW ML]USO EIOISBOE 9fajuoAs0D WEFTSDA!
1 ¢ 0apIA INpoWL
m
1 don rounte “1yBtay7"usai9s
1's gavoison pamDUnUexs 18 SOR
eu
sor anaes St
Beil na Sed F45 welenal ES
ver186 Sa nvatim Gre pas cu pas
Hnclude
Hncluge foam
#éetine MOUSE O83
ant naan)
RECS in, outs
nx.ax = 0x00; // serviciul 0 --elibereaza si obtine
J} starea pe care © returnenza in AK
ints6( MOUSE. gin. Gout })
inwe.ae = 1; // serviciul 1 ~-arata cursorul,
ine@6( MOUSE, &in, Sout ),
geten()
return 0)
Serviciul mouse 5, obtinerea informatiilor despre apasarea butonulut
icin de cate on
acestur servici
Apelarea servici
bbutonul din stanga sau ce!
ultimet operatii ou butom e
raporteazk butonal din stinga, Dacd este apelat eu BX egal ou 1, atunct raporteaz
butonul din dreapta, 7
urmeaz& numarul indicdnd de cate ort a fost apasat butonul de Justina
X raporteazi coordonatele x $i y.
re simpla verificati ci butonui din stinga a fost aplisat o daté,
‘de zero in BX indicd faptul c8 butonul a fost actronat. Odati
rogramul investigheaz4 focatia pentru a decide ce
strei de editare, de exemplu, pozitioneazi
rmatie,
8 faca. (O apasare in intertorul
in text.) i f
Pentru utiliziri mai subtile se poate combina numarul obtiut eu mformat
relative fa succesiunea in timp pentru a determina dubl s
i smb
wate fi verificat cu gettime) (declarati in DOS.H). Cor
pew S se poate obfine un detector ce dubli apasare de baton. fncereatt wrmstoril
algoritm:
// a fost putonul apasat de mai muite ora?
j/ s& presupunen o dubla apasare
J} a ose putonul apasat o cata?
Y/ asteptati © clipalcires 0.288)
Vrobeinsts 0 noua apasare?
45 Concluall a
// este ¢ qupla apasare
// aitfel este o singuze apasare
Dubla apisare de buton din Microsoft Windows pare a fi defini ae dows
apisiri, in tnteriorul cuantei de timp specificate, 51 care my sunt separate de nici o
miseare a mouse-ulus. Cred cf un algoritm care ignori miscirile mouse-ului face 0
‘reab mutt mai prietenoasd,
text, Se poate de exemple schimba cursorul implicit
care opereazi mouse-ul.
Pentru a putea intra in aceasta zona aveti nevoie de o carte complett reat la
Intreruperi, Cele sase servicii discutate aict reprezinta toate instrumentele necesare
programarié unui suport pentru mouse in editorul Tiny
Disparitia mouse-ului
Dispartia mouse-ulur este cea mai ineficienti problem’ dintre cele ae
programare a mouse-ului. Aceasta deoarece cursorul mouse-uliti este crecat prin
sofware In memona RAM video. (Cursorul text nu are aceast’ problema deoarece
de hardware.)
are loc astfel: Cursorul mouse-uitt
12. Aceasti operate
nvare. A
cecranul este restabilit,
pe ecran, end 0
uton al _mouse-ul
care a fost interceptat
fe §1 restaurare de ecran pot crea
ae mouse,
‘Se poate evita disparitia mouse-ulwi prin ascundera cursorului inamtea oricére:
operat de salvare sau restaurare, Puteti si protejti codul prin acoperiea fanetillo
puttext() st gettext() ca in exemplul urmator:
me¢_puttexti ... | // mec = Mouse Compatible Cover
if (has mouse >
mouse_off();
puttext(..0
LE ( nas_mouse |
meuae_en{))
Se apeleaza versiunea mec in jocul funeti
Si A seriett propria functie mouse_ofT{) si alte fu
F puttext() sau gettext). Este nevore
ji pentru gestionarea mouse-ulusup 3x83 IMpOU UL jouorionssad va Bs
feqwonp2 uy sed jruoipusin “ifmo} “289° nu
‘qnpltya aUIg e100) BUNS YSOHUTONIA, NES XIN “SMOPULEAK ¥O “aLNLORId
| ymax tout od vaseyod 38 fp 0 Poo nun BoxoLIES yMIed 2169 raaI01}g1g aynasauND
nuip yop xwuizaidos “pueLog 99 EDA! (AKO) MBIA] SwOPULNL
(oupy) 5955015 wonepuney yoso19))y ‘2yIsa90u 0 sI69 as0}9 ap EsPOHIOS
rajsuen 9p sunIOTed so; LRyEP YH SMOPHAA PArRURBOIM nD
aselo ep 199}011q!q 1S IMO ‘DAW
[IRIS aqueIoduar
‘eur 2]90 anup wasyyo 18 stOAaU HHox® aueo ap ajziouns weuezald ry -azeaod
2p jnuioisis no proanp vieyiaut 99x Jounal wameZ|NN weAMUOSUL w inosIC,
‘snot aldsap arinesyp (RUnos aud yMUs pgeqo4d sep) Fun) © nD yenUTAUOS Wry
“pumooru f§ area 2p 40 © prea vareinoaxo if vasoiuatuaja
Putaurd mses ojoun no andeouy wry “Auly fructipe e] sod sienm uMe-ayy
2 rnfequay ad axezeq
rau wy "wedBoxd
uty o} eWod 2p
Iara
do} ane BAdIBD 16 ojBuorSuaNUEPHA| AR
lp rimiiied ouumnue
18 lowny vy
ianoyqen “eauaMase ap 1
zauta nipyeunqau! 1$ w20x od
jsyulod wna IMZEA WY “~UOID 4
rai 9p moupe eatuad 119 viEyseNU
oIpur sIS90e 2i¥o} puBIOpIsuOD
‘pnsbasay 0
ev0a19 9189 vAGD B| fade UN No ND 3ENDOFUL LJ BA InPD Samu! (IgEGEXE rep “HasvIp::¥OG
rguisd ynpos uy Qusind yez}IN ue g> BAIOSqO tHaA “wa}duoD areuOd o NnUEd
“(1S0} 8 1B9 94 gIsNqod
foupe ¥ guiait Polo} yo LAdoosep
‘uoyeaiyoe young S08 tea woe
YON wry -AuLL |RsOUpS 4 yung 0 ouios w nuquod nneResd oquns
Poa we 3 rnequu| wig]
‘amvoo}e TuNUod aHOWOW! RIUDIO|JNE 2989 1
yiouny taun eaxaH9s e} oMOILIApAs uNROsI No pulayseE “+3
Ido) oH 16 yeIopisuoD uy “oeIqO aZeEL5 UL Yep O MA “ESV UL EID
© sede aze9 oqqvizen zums a1v9 “aseja uy 2ouRIS a]URUHD]9 aIds—p yeINDsIp wy “axwoTwA IS
Salpe ova inowresed weve v ap vepeuflgisod H9J0 a)
9p 495 e| urind joo nes) ysnqo yout 189 AU],
Hoa towne ‘tiezynn -am9 ad 1D mipeu
oq Onap puTUaKKOU! aay x01 no oqpfeiodo areo1 naived Qane:xoy 6 (gna “()AKoI08 wyayjnn ate
a wreouyp | | ®T Maung soun inypauon
siuenodun utind re 151d} 9p 91396 o yeUszaxd we lod Jojsoyelado vaiwaspoutesdns
« uy wasruangour 442) iminfequuyy aie ouofeu ioidor enop wy wadnse IND o-AUY AuLL Inynsoypa BaLeHOd
uta © no dso. wy ‘oun 1}E}9p JOU Eide ISIS UTE JoNIgeS YON8 Up
‘maoqtpa yezjoou ue ‘anogy a tient 1-90 tnuunap ad einfe Ba & tantad ysieasasqo
vauma said ie you “oujiede ga go sounds ¥s pun
1m eT mon] Hie BO Jods “anu 16 vO gin 9p 195 B) LED tHSEORP snogTd ¥a EO
AVWnNZ3y
‘op oy YS NEO, “wOISOAR MU MES oUAUIOM a} 2040 Uy doy orapsONE
‘p> pideaupuy aS vaunny “Bouin aBuau! auto ad ase nw eq
+9) ]NPOU Uy StI95 360} ¥ nICLNAXD ap “LBLDN f3s600
“yrar8uo uy your8140) msuasnueyy "3x93 Nd nAMn| 2p 4 Ung LEU f9
IMpoWY “izese ap ajesoOy aye ad apides ap jqIpsIdUI Ns areWesFOud ap
i aindaguon ojouresBoig “arewesB0x4 9p [Ns injsoow waseUILM|s Ya804 eUOSI2g
2180 rt da 2p areuresBoud
8p poy “BAsd4Io 20u0 mys “ouMBosd SKOPUIAA-X NES “YSOIUIOEN “ACU
woneivaseiq nes SMODUIA\ alitesfo1d auns gs axalop sopeumesBard 30130)
INS Syds3ag
: 2yOso|y BIsvo0N no LEpH}OS tits “pioaueD ware
oy HY 's9sse19 uonEPUNOG RBS SION Sainosay in) EWUEIGOS sp wohaser
BAP RI 49 thiupdgis ws ingasy ze aEOUY Janse anit espage na INdDdME Ay
1 HEL HT mes “KIND YRORLIOE
Tuiwed if woqjde 95 yoreuat ies2oy) “paspums laajionu cufipemd 3p odo ee
Jiop yo nuidod ay or rew yeayjdy Hewonsad es
ised Smopulyy HewrEBOrd 3
‘jcuus
2, wisv20e naauad prog ay eporeu o fingpe
20 yaNp Yeu rep “ung 199104 Dayan Fe UN aySO ML B[y MINIS UN BAIEIOS|Ag
38 mod EU wave 2j2quiP UNS TWO 8 APR f90 asorosd vajop fe un 282 EAE WIA af eanuonss ul InjtuosuND verEUOTiLzog
“mu oy wea 928 9 88 Hien 2eCL 4.49 18 vo sem op [2p B 19KeNE ‘ung yaoteud wa! un os9 eisa0y Chieds nisop rPeq| Wy) oUF B94 IMDOIGO Ut LOK,
~ SwOpuI/\ lutieauy asso} eno Go 3a MHS yO to adobe, aN, 28 s9,,, aousoing ode HivBNEDY auny wAsye> 2p BA
Poe “wou puns ot HP NO BaUHard Hadsou swopULM ans qeuIeiBosd gs LLJOp ~deanfuoouy “piueniodum aieur ap yoaroad un ad ea jn-asnout ‘nud DN.
‘0 RouEss eunepDId o no enunuoD Find nes “aus wy FEquUN| a4 PA-npupAtaoU0S ‘n-asnou no exon e NA ‘SO1EE &] 98x 90 I00ds
A]pmmjade no stoenp ejayiewut (oun oye” ayeer ap azeqozi BA ys amMgan EaISoOy
(85
TnpUeD SF SRS
Becino sed s45 wrienaT eS 897470 ‘SA invatam C++ pas cu pes
iplementarea facilititilor mouse-ului $1 am
concentringu-ne pe cum se poate evita
Index
nd programatea GUI
vii unde erati cand ati inceput aceasti carte, Ati dorit s& seneti
bajut C+ gi att dorst $8 real reali peatru a va atinge
programe in
telul propus.
‘Acum ati seris un editor de text rezonabi
si supraincdrcare au fost concepte vagi, dar
‘mar mult joc deeat munca, Programat
Programatt cu piacere in C++!
ange 17, 421, 422, 423, 425,430, 447
argament 23, 31, 42, 43, 49, 50, 68, 73,85,
86, 126, 134, 195, 137, 139. 142, 211,
221, 223, 237, 295, 300, 381, 387417,
422, 423, 438,439
235
81, 87, 94, 95, 295, 343, 345Tot ‘06£ ‘6st “ese "Zee “IS GNA™OD
16E°S8E 40d 0D
‘ose 008
Ost ect nana’
‘spl “crt “eel ger *s
‘oc1 “91T- &
8th AOL dA NIM
Ser LIT sad Nia
She ely clp pe “Ze “eee LIT
“PIC "UZ “S07 “OL ‘B9LE 9¢ ‘OL “E205
YE ‘08 epour”uoaros” np
Lbb'tly Qutadoay,
Ler ‘ory ‘tips
go
err
“Sh OBT'REL “Ser “POT ‘901-6 ‘68 "95 3
LEZ Quadoy
evn ser Ooo
1 axis
1S OF 6E ‘SE Ze TE ye "ec9 HR THE
‘bP ‘Pry “Osr STU,
LPP OLY-S6E “PLE "ZbE “TOE Wh
61 ‘SIP Oanns™a
oir Slt SAYS 3
“shy “Obb “6Sy “Ley “ocr not wade"
EF SEF ZEN LEP 9zb pep Dusdo
sbr'ore
“LED OEY “Poh LED "9eh "bey NEdO TWA
LEZ "SSL “$C “HC
‘vt Sip "eBE “eRe Z8E
ST MON
slr
Orr 695 L98 “ape “C62
POLST 08 ba
len 91r'see"ust "ps1
st
oor O18
4
rE "96 '99 BI
ToL O81 “6st EOror
Ize few |
6s:
spp'el
Sob ‘996 FE
“ety LEE “04 6
Sor rLe oce ‘s
‘Ste ‘Lv "tee “96
zt 8
‘Dee “bes ‘zSe
“ISE “6EE “EOE “962 “PET T
L&C '87C“S7C"ZOI “£668
‘88 L848 "ES ZB_aeALA sa9D0 9p 3e0xp
oy aisanexa
lax
peg,
on
ena
bb 'Eh VOR
906 Vou,
ur
*e7€ aonpo
‘SCID
1 00%
jnu0s PIP
ser'sse
er 9G “OLE “OST
SE SSE PSE "ESE UV
Zor"6ot “S8¢
Tov "sae 69E S9E "ESE Bt
Zor Z6e BOE “LCE CuDUs” jap
ASE "LSE “SEE YSE “ESE YVHO “Tad
Zab SSE Zoe "Eee "802 'SE1 “9h PL
B9E SSE “6PE
‘$6C'SEC EET “OST'S6 SB “SL ‘Lp BIEIIDOP
a
8°29 stop pana
TIP" ‘90P “SLE 'ZSE Aino
0p *T6E OTe xo
162 "962 NO“OSUND
sho Lev"
86°98" "LE soso
98, (snow sos
Ziv “tor “08s maxis
“oor o1¢ atyy-ma
‘ore “62h
8p ‘OED "C8E"EL1 “SL arewopOG>
‘pe laivurawiay esiaxan0e
Sor '9eb sev "vey
ft zt "699959" “0g 0
L615 “LI-LE HOINOO.
£ HOINOD
HOINOD
H'OINOD
WOINOD
ost
por soxemnwioo
pp azentuos
ach areuucwe>
“Cer BLE "ChE ‘960 “8ST
“tow ‘ove “Oz
“wPL TPL “OPL "ZEL “OCT
“08
“szi-011 20}
Ls ‘se ajc,
Stz (NO) ss209¥ Jas uOLIMIOD
SOE ‘BRUTE
ze "Le 82-02 merewoM0D
te
"s. epuewios
o1r see
"S6¢ “16£ ‘O6¢ “se _epurwco
‘ae ‘19 Sol-uBupi Hoa
Tp de WO0'S¥O109
01 10809
he ‘90E 'Lz2s
ose ee
“cL ase
‘sce 'ere 9c
“SCo PEE “6B “OL “FS "SE 'BC FojeIP BseID
1 E20q op 819
“out “E91 “Le nor
“Ev Spend
“896 “POE “BSE
“och leh
“80 ‘pee “ver "ac Hast
ost ert “eet
‘SEI “¥EI “Et “oOr “Be FoTEP ap erase
6 Asranun a8puque9
10'S "bh 089
906 “10k ‘sb be osErO
be Or
6p ‘SbL “Set Let ZEN “8z1 LEI ez
“O11 %60l ee- faara ap fe
oF
Sedo wed <5 WEAN BS
aear
go_endl) 359, 360, 361, 362, 391
GO_EOF 329, 367, 369,375, 385
GO_HOME 351, 353, 354, 359, 390
‘g0_word_() 376
GOHOME (macro) 2!
‘goto 98, 382, 383, 384, 387, 388, 390, 393,
396, 397, 808, 413
382, 383, 384, 387, 388, 390,
403, 405, 406, 408-412
sroup. start fine_no 379, 380, 381,
396-401, 403, 405, 406, 408, 409, 410,
help 6, 8, 38,126, 426
Home (chele) 220, 223, 350, 351, 357, 360
1
IBM (International Business Machines) 50
IDE (Integratea Development
‘Sa Invatam C++ pas cu pas
Ins (chete) 46, 48, 53. 129, 155, 341,375,
int 14:22, 60-68, 93-96, 113-130, 153,
225, 295,341, 380, 416. 446
08, 114, 115. 418,
vostreams 231, 252
001 363, 364
K
Kermignaa, Bran W. 9
KEYDEFS.H 220, 293,296
L
{counter 384
‘char 350, 358, 373, 375, 376, 380, 383,
LINE COPY 404
TNE DELETE 404
line_do_unmark() 396, 397, 398, 399, 496,
409, 412
LINE_END 393, 395
ine_end() 397, 398
Macintosh 1,417
159,236
index
maio() 17-22, 114,227, , 444
imager. 377/381, 391,395,295, 396,397,
398,413
88, 107, 124, 125, 128, 227, 228, 229,
417,418,447
419, 426.427
memone 3,9, 78, 79, 122, 155, 224, 300,
a
mesa) 3, 20, 23, 25, 29, 31, 75, 82,
435,445,
22.34, 37, $6, $9, 70,
. 219, 304, 347, 396,
MEC (Microsoft Founaation Classes) 2
Mitetell, Sammy 214
rmiogulo 428, 447
monitor 4,381
wostenire 2, 84, 11
127, 149, 150,
7,22. 26.39, 46. 128,159
move() 85, 86, 405, 409
msgQ) 300. 30%, 340, 541, 351, 362, 372,
374, 382, 390, 391, 395, 3997, 398, 405,
345,
137,
°
obiect 2. 2,11, 14, 19, 37, 72, 76, $2, 110,
7, 134, 165, 231, 303, 415, 420,
a0, 447
Object Windows Library 2
OOP (objetonentederogamming) 2,
‘operator atribuure 81, 87, 94, 95, 295
operator de rezolutie 86, 107, 306, 308
operator decrementare 148, 150
19, 48, 53, 61, 75,
. 157. 161, 233,
3, 96, 98,
76, 85,
PKZIP 423.
Dlain_emd() 296, 298, 339, 346, 3
374,390,415ve “eRe “EOE ‘09 ‘92 HI
‘691 ‘191 491
“S91 "COI “6ST "BSI “LSI ‘EST Opt 10s
68e
rey asn
“SLE “TLE "ZLE “OSE “GHE LEE
962 "SE JapedAs
eve Cee aR
6 drop ogmny,
one" +49 oan,
ee armusuen
> 60» ‘£0 "90% "10> “666 “16 *
‘TST Ze Ze "LY eI
: ovr "ser “cae
‘SI ‘112 ‘eoL-Pol
‘sse-a%e
‘O1e 0c “91 ou “en
‘BET ‘OL £910 “cet 4
vor ey STP IT TSA
Serer
‘Soh ‘Lch SIP “LIP “EOF "86 “L6E “CHE
TE “OLE “PLE ‘OSE “EOE “OE HM,
Sor 90H “808-S6E
“LEE "BOESSE “ISE ‘OSE ‘OVE
“OTE “LOE “SOE "COE “DOE "362. d4O"TELL
SOE "862
‘6c ‘891 “791 “6S1 “SCI “UST WaWoaE.
vor 06
PLE “EGE “ICE “OC “SCE “967 ‘760 “ORE
“OL1 “91 "291 “8ST ESL dao
‘68h 9p
ue "9eC*
“SOP Zor *tOF ‘SBE "PEE ‘ORE 0%
Zip "o1 “60%
“Tow "tor “Sse “PsE ‘ORE 496 "99E
Sir "p62 “Ice '6E AL
eee aXBL
Let dao
oleh oF LL
‘Cob “ote “Se “ere
“yB-rL ‘04-89 '99-19
Sh '60y *P6E “PLE “TSE LE “te “OFS
“OEE “Loe "962 “ERE TEC “OTE “yy HORNS
11'6'€ way wows
Sov vor 81 '6CC "BCT OTeas
pe
ULE ILE “LSE "TEE “IE “6CC BsoUDFEAANS
0
16 106 "#818 "BL 9L ‘SL “FL “EL BONDS
bb ‘OPH “VEY Sev ECP EP Be 'SIP
‘LAE “EE “CPE “OE “OLE “961 RIonns
ose
“Ube “EC "V8 “ER ZS "1G “SL “PL EL TaN
rn
op
1) suelg “ensnons
cee
(66 "POE “EOF "ZSE ‘OCT “PEL "TEL (worn
‘Oe "EDE "SEE “SEE “OKT “6CT
“OLE“STE “PEE “ERE TCE “ZT Prey” Surns:
Ste ben "Tey
‘age 6c “8CE Eze '9e sce
SE OST ‘EET TET 89T “Pe HONT
S8¢ 'y8e "eRe ams
oer seh
“Seay “BRE “PSE “ERE “CTE "IL '99-°5919
Toe ‘oor cez
eID PRE
“OPE “BOT "PEL "PL “OL "6S “LI '9°S
vec eee (30%2s
Spb eee "err '2RE ‘SOE “TOE Ores
#€¢ pons
BRE “LBC “DBE “TRE ZL
spp ‘ten “Ive “soe
SHE “CRE "THE ‘SLE “PSE "TSE
oez
sxe sez a8
Sle *U0e "@ee “UST "LET “1E1 ‘97. sHEatOs
698 'z9e ‘ese
LSE "660 “S60 "ICE “V8 “6L OF 97 BHEaES
s
ESE “L6C ERE ECE LIC "9!
ows
“g6c ‘v6 “ovt “ee!
"26°06 Le '$C "TE IE "6 NIN SDIEHOR
‘ype pumas
oer 'ebh
“Ug "WOE 'BIZ ‘ELT '9L ‘BP EGE MEL
62 amuorsuounpa:
‘ep arematsinoas
be "Ebe
‘TEE "6 (Kowayy seeooy wonurY) WV
a
it apa
oD
os1 ‘921 “Ec Oronne
68s '6re
"86 "OL "85 “LS ‘95 ‘58 ‘IS “th “ey Ousine
or ‘ot BLP "80F
SUL "PLL “BOL “Ig eiedmeMN AD ound
pr 'Beh 6zh bee “OE "Bee
“$e °S91 “OSL “Shi “PPI ‘OPI “SET OST
"SII *€6 “6BLB “88 "@B_ HaNe
z
ae
x ay
Sed nd sed v4.5 Wiekeain eSindaws (Micros
YGA 43, 306 m2
video 8,40, 44,
Visual C++ 2, 364 x
void 14, 17, 23, 46,61, 85, 103, 120, 226,
300, 347, 383, 425, 445
vsteien() 363, 364, 376, 391, 392, 419
or 345
419
Hora Georgescu
Tudor Balanescu
Mihai Ceaparu
Boldur Bérbat
Flonn Gh Fl
‘Augustin Pumus
Nicolae Ene
‘Sena AutoCAD
|. Vaduva.Gh, Barbu,
M. Bolosteanu
©. Giumale
©. S8mbotin
In domeniul informaticii au mai aparut:
Programare concurenta, Teorie si aplicatii
Corectitudinea algoritmilor
‘Comunicatia prin intermediul refelelor de calculatoare
Informatica industrial
Ingineria programa 1p real, volt
PROJECT 4.0 in managementul proiectelor cu aplicatit
AUTOCAD Release 12, traducere: Daniela Vasiliu
Bazele informaticii
Programare functionals, © perspectiva pragmatic’
Sisteme expert cu PROLOG
Proiectarea interfetetor (
Sisteme de operare. Princy
jucere din | engleza)
si funetionare