Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

ResEd

!ResEd

Application icon for !ResEd
!ResEd

Oko !ResEd alatke nije bilo puno posla. Osim što sam morao da je konvertujem za novi novi ugradni sistem - kao i sve njegove pod komponente - nije tražila mnogo posla. Glavna shell aplikacija pruža sve fajlove, i load i save, i postoji veliki broj pod komponenata za svaki tip Toolbox objekta. Ovo je jako dobro smišljeno i funkcioniše dobro kao jedna aplikacija ( !Configure aplikacija nije dobro integrisana).

Uradio sam update glavne shell da bih imao malo više Filer-like interfejs, dozvoljavajući 'malim ikonama' i 'celim informacijama’ da se nameste pri prikazu. Iako je bio malo veći standard nije izgledalo dobro, tako da sam ugasio opciju. Kasnije sam se pitao da li je prozor mogao da dobije malo više šminke kao !Paint, sa toolbarom i možda status barom na dnu. Čak i označavanje editovanih objekata u pregledu glavnog prozora i pružanje 'undo' za promene objekta mogu pomoći da aplikacija bude korisnija.

Svaka od pod komponenata ima svoju ulogu da odigra, ali jedina prava aplikacija objekta nakojoj sam ja proveo vreme radeći je bio Window editor. Zaista sam uživao .

Problem sa Window editorom je da iako postoje aplikacije koje pružaju plug-in interfejs za različite objekte nema jednakosti za gadžete. Prvenstveno, gadžeti su svi opisani u jednom velikom fajlu koji sadrži sve definicije za sve gadžete. Dok su bili opisani u lepom jednostavnom setu struktura i imali pristup mnogim funkcijama koje su radile njihov posao, nisu nikome bile lake za update .

Ako napišete novi gadžet morate da razgovarate sa ososbom koja gradi !Window da biste updateovali definiciju da sadrži novu definiciju za gadžet i u svim porukama i templatima je potrebno da se ugradi u glavnu aplikaciju. Meni lično se ovo činilo nerazumnim, samo stvara razlog da ljudi ne razvijaju gadžete - što bi bilo tužno jer su dobar način za širenje korisnika interfejsa. Bio sam odlučan da uklonim razloge da ne koristim Toolbox gde mogu i taj deo nije bio pretežak.

Već sam napravio BootMenu sistem dinamičke podrške učitavanja ekstenzija da bi Podules mogao da da omogući sopstveni unos konfiguracijskog menija. Koristio sam ono što sam naučio iz toga da dodam u dinamičko učitavanje koda koje definišekako će se editovati gadžet. Pošto su definicije prozora editorovog gadžeta definiše dobro izgradjene, nije bilo previše teško pomeriti ih u separatisane fajlove. Bilo je i novih ubacivanja iz komponente window editora, tako da su header-i dostupni definicijama editora gadžeta prilikom učitavanja.

Svaki od gadžeta je odvojen od komponenti u sami po sebi - imaju svoj izvorni direktorijum , makefiles i resurse . Ove komponente su zatim ugrađene u pod- direktorijume unutar window editora , a učitane su kada je editor počeo . Templati i fajlovi sa porukama su podeljeni, kako bi se moglo posebno pristupiti nijma i ne treba da se spoje u glavne fajlove . U suštini , trebalo bi da možete da izbrišete direktorijum u aplikaciji window editor i podrška gadžeta će nestati - ili samo da kopirate preko vrha starog za upgrade.

Počeo sam sa " etiketom " gadžeta , koja je najjednostavnija, i radio sve do složenijih gadžeta, poput izmenjivih ikona . Za većinu gadžeta sam otkrio da mi je potrebno da eksportujem još nekoliko funkcija da bi mogli da rade svoj posao . Nadam se da sam uspeo da obuhvatim dovoljno eksporta koje editor može da se napiše za većinu budućih gadžeta ( ali sigurno sam propustio neke stvari ) .

Svaka od gadžet definicija je takodje ažurirana da bi mogla da daje detalje o moduloma koji su im bili potrebni . Moduli su obezbeđeni i uneti ako je potrebno , kada počne urednik. To znači da ako imate odgovarajuću modul na sistemu, moći ćete da ga renderujete i izmenite.

Ideja je bila da pored drugog SDK izdanja, obuhvatimo potrebne podatke da objasnimo kako smo napisali editor gadžeta . " App notes " koje je Acor proizveo na gadžetima za pisanje su zapravo prilično dobre , ali očigledno ne obuhvataju editor gadžeta za pisanje, tako da bi bilo neophodno da se napiše nešto da objasni kako da kreirate takvu editor biblioteku , zajedno sa potrebnimsourcom i primerma.

Još uvek je potrebno da ažurirate ResTest aplikaciju sa detaljima za svaku vrstu gadžeta , što je frustrirajuće . Međutim , to je trebalo da bude neki budući rad ( koju nikad nisam uradio ) .

To je takođe značilo da je pisanje editora za podršku novijih uređaja, kao što su AMPlayerGadget stvarno jako lako . Neki od drugih gadžeta su samo jednostavne kopije osnovnih gadžeta sa nekim malim promenama . Za jednostavne gadžeta , sve što je dinamična biblioteka sadržala je struktura koja opisuje interakciju ikona. Razmatrao sam pisanje alatke koji bi napravila definiciju strukture iz header fajla , kao što CMHG radi , ali sam odlučio da je pisanje definicije rukom zapravo ima veće šanse da će biti korisno .

Svi template fajlovi su dobili tretman od FixUpTemplate da bi bil uredni i dosledni .

Dodao sam načelnu podršku za prikaz broja gadžeta pored gadžeta, u prozoru . Međutim , to nije baš dobro i izgleda da sam okrenuo opciju isključivanja pre nego što je korisnički interfejs dobio priliku da ga kontroliše. Nameravao sam da se vratim na tu opciju da bi olakšao upotrebu gadžeta .

Taster prečice prozora su malo ažuriranie, tako da su prečice malo bolje, a na njih su primenjena standardna imena. Time je neznatno popravljen njihov izgled , i poboljšana upotrebat, podrška dodaje više prečica između prozora da ih kopirate .

Jedinu stvar koju nisam uspeo da ažuriram je gadžet paleta. Vi i dalje morateda ažurirate paletu sa šablonima gadžeta . Zaista ,paleta bi trebalo da bude dinamički kreirana , ali to će biti malo teže da uradim . Bilo je potrebno malo više razmišljanja dabi se napravilo što fleksibilnije moguće, zato što se neki gadžet editori obezbedjuju grupu šablona gadžeta .

Promene u window editoru čine mnogo lakše stvaranje drugih gadžeta. To je, uostalom , trebalo da bude modularni sistem Ali, bilo je i drugih oblasti kojima se zaista treba pozabaviti. Želeo sam da se obezbedi više integracije sa drugim aplikacijama, a posebno integrisane alatke za razvoj softvera, koje se mogu obezbediti od strane trećih lica . Bilo je nekoliko stvari koje su se mogle uraditi sa bliskomj integracijom za Toolbox messaging, objekat i gadžet identifikatore , i slično , ali sam hteo da ostavim to za kasnije . Ne samo da su bili teški. nego su od mene tražili da razumem koji će biti verovatno korišćeni slučajevi, pre nego što dizajnirate protokol za komunikaciju takve stvari .

Na nivou iznad te vrste bliske integracije , je ono što sam uradio - pružanje External Edit.podrške u !ResEd. External Edit protokol omogućava da aplikacija zahteva da editor obavlja svoj posao na fajlu, a zatim da vrati fajl čim završi. Prvenstveno editovanje vrši editor teksta, a zahtevajuća aplikacija je alatka kojojtreba neki veći ulaz kao e-mail klijent. Ali to ne treba da bude tekst uopšte, a već sam dodao External Edit podršku !FormEdExt za šablone fajlova .

U ovom slučaju ,!ResEd je bio editor. Prihvata External Edit i zahteve za Resource fajlove , i može da ih vrati na zahtev , ili napustiti izmenu . Kursor kontrole ne rad , jer ne postoji kursor u editoru . U idealnom slučaju trebalo bi da bude moguće da se pokrene editovanje objekta u okviru Resource fajla , ali to nije predviđeno ( protokolom ili implementacijom ). Koristio sam stari editing test koji sam prvobitno napisao da bi testirao External Edit podrškukada sam ga dodao da !FormEdExt.

Sve je ispalo dobro , iako sam prilično siguran da podrška nije zapravo pominuta nigde kako je još prerana funkcija i bez aplikacije za takvu podršku, ne radi nešto mnogo.

Using External Edit with ResEd to edit a file
Editovanje Resource fajla i zatim vraćanje editovanog fajla je bilo jednostavno.
(Animirana verzija (95K))

ResTest

Application icon for !ResTest
!ResTest

Jedna stvar koju sam dodao da olakša korišćenjef !ResEd je Test opcija na dnu menija File . Ona bi pozovala !ResTest aplikaciju i predala kopiju trenutnog fajla . To je jednostavan protokol koji se koristi za komunikaciju sa !ResTest ali nisam se osećao previše udobno u njoj da bih je definisao pravilno. Radila je posao i olakšavala je uređivanje i ispitivanje Resource fajla. Na kraju bi bilo sredjeno i dizajnirano i pravilno dokumentovano.

Uz sve ostale gadžete koje su dodate i nove poruke koje su poslate od strane objekata , !ResTest je bilo potrebno ažuriranje da bi se dodali detalji u debug prozoru za. Dodao većina novih Toolbox poruka , kao Window_GadgetLostFocus and Window_GadgetMouseScroll poruke i sve nove iz OptionsWindow objekta, ScrollList, TextArea i ostalih gadžeta.

MethodGen

Application icon for !MethodGen
!MethodGen

Prvobitno su Toolbox komponente su gradjene po grupama ad hoc makefile, kao i ostatak RISC OS source. Ažurirao sam ih ovo da bih koristo neki "standardni"makefile format koji smanjuje količinu održavanja. Kada sam to uradio, onda sam napravio sve makefilove složenijim dodavanjem više opcija u izgradnju! Zapravo, nije bilo baš toliko loše - gradja Toolbox komponenti je malo drugačija za mnoge module jer imaju više sredstava za eksporti headere.

Pored toga, ja obilazim načine upraljanja definicijom. Svaki objekat i gadžet imaju definiciju metoda koji opisuje ulazne i izlazne parametre. Ove datoteke se koriste za izgradnju interfejs metode u izvorne fajlove koji bi onda mogli da budu ugrađeni u fajlove objekta. Interno su bili uskladišteni u Toolbox komponente biblioteka, ali to nije imalo mnogo smisla.

Definicije metoda su, uglavnom, promenjene kada se implementacije promeni. U principu metode se u stvari ne menjaju (kao da će to slomiti ABI kompatibilnost), već se češće dodaju. Preselio sam sve definicije od onih koje su samo uključene u Toolbox biblioteku za eksport "definicije" u svakoj komponenti. !MethodGen alatka je ažurirana da bi mogli da generišu izvore iz komandne rečenice.Prethodni tok posla je bio da se učita !MethodGen alatka, naprave modifikacije fajla sa metodama, sačuva, a zatim pritisnite dugme za generisanje source iz njega. Source bi se onda morali ručno dodati Toolbox biblioteci komponenata (pod pretpostavkom da se setite da to uradite) i zatim je Toolbox biblioteka obnovljena.

Novi metod je značilo da dok još uvek treba da se setite da proverite u fajlovima metoda za komponente (što je prilično mnog), sledeće remontovanje u kutiji sa alatom biblioteke će koristiti novu eksportnu definiciju metoda za izgradnju source i izgradnju cele biblioteke. Da bi gradja radila, MakeGen alatka je takođe sredjena.

MakeGen alatka je namenjena da uzme skup direktorijuma, i izgraditi odgovarajuće Makefiles tako da su sve datoteke u tim direktorijumima izgrađene sa C kompajlerom i povezane u ciljnu biblioteku. Za razliku od ostatka sistema izgradnje, ova alatka ne može da koristi standardni skelet bibliotekejer se očekuje da koristiostatka Makefile sistema. U suštini, izlaz iz !MethodGen može da se koristi, zajedno sa MakeGen, od strane svakoga ko nije imao glavni sistem izgradnje.

Činjenica da mora da bude u stanju da koristi van standardni build znači da se nisu stekle sposobnosti za samostalno gradjenje 32bit ili 26bitni. MakeGen je ažuriran tako da se, u zavisnosti od toga kako se pozove, može generisati Makefiles sposobnosi za izgradnju samo 32bit, samo 26bit ili obe biblioteke. Možda izgleda malo čudno da se izgradnjom savremenih komponenti sa 26bit varijantama, ali i dalje postoje biblioteke koje su bile samo 26bit. Plus, naravno, kada je izgrađen ROM za 26bit okruženje je moralo da se poveže protiv 26bit biblioteka.

MakeGen alat, i !MethodGen, bi bili distribuirani u okviru razvojnih alata u narednom Select (izaberite) izdanju. Pod pretpostavkom, da nije bilo dovoljno vremena da ih testiraju i sastave raspored koji je upotrebljiv od strane drugih ljudi. Nisam baš siguran da je distribucija razvojnih alata posebno važno za ljude, ali je važno da im ti alati budu dostupni. Nema smisla širiti Toolbox, ako ljudi moraju da se bore da ga produži, a alatke ,ine borbu lakšom.

ImageFileGadget methods
Editovanje ImageFileGadget metoda u !MethodGen aplikaciji.

Perl, i ostale alatke

Postoje i druge alatke za podršku koji se isporučuje kao deo sistema za izgradnju, koji treba da bude ažurirane da podrži izgradnju stvari. U mnogim slučajevima, nije bilo previše problema u obnovi komponente. Promene samog sistema izgradnje značilo je stvaranje Makefile za nove alatke koji mogu da grade na 26bitni, 32bit ili nekim drugim varijante, je veoma lako.

Perl se koristi za dosta alatki, a gornji nivo izgradnog sistema, za obradu i kontrolu nekoliko stvari. Originalni izradni sistem je bio snabdeven sa nekoliko awk skripti koje su ... dobro, strasno ne volim awk, što je skoro u potpunosti pripisano njegovom korišćenju u RISC OS sistemu za izgradnju '. Zamene Perl skripte su daleko jasnije, mada ja nisam baš shvatio koliko je važno da se uverite da su komentari korisni i relevantni.

Perl koje smo koristili u izgradnji je poslednja dobra verzija da nisu koristili UnixLib - 5.001. Pošto je verzija 5 Perl-a, prilično je sposobna, ali nema mnogo lepših novih funkcija. Ipak, to je mnogo bolje nego awk bilo kog dana u nedelji. Konverzija je u novi sistem izrade je bila trivijalna, a istovremeno sam odlučio da istražim šta je to izazvalo disk se okreće kada je pokrenut prevodilac - iako nije radio ništa.

Bilo je loše. Nisam znao koliko loše, ali ... da bi popunili početni% ENV hash sa sistemom promenljivih, izbacilo bi * Show { > some scrap file }, učitajtre fajl u memoriju, a zatim parsirajte svaku rečenicu da stvorite parove ključnih vrednosti. Ne samo da je to rasipanje pisanjem na disk, već i uvodi uslov brzine i utiče na bilo koju alatku koja menja * Show komandu. Imao sam takvu alatku, i srećom se kopirala usputa sa načinom na koji je izlaz bio proizveden, ali i dalje nije bilo kako treba.

Uzeo sam vremena da prepišem hash populacije, tako da sam koristio SWI OS_ReadVarVal pozivanje. I dalje proizvodi životne sredine tabele na isti način kao i ranije - ključ-vrednost par - ali više ne ide na disk da bi to uradio, tako da je radio brže.

Bio sam zainteresovan, u jednom trenutku, za korišćenje ili opcije mnoštvo gradje za izgradnju Perl-a kao modula, ili da koristim višestruku primer pružanja različitih instanci u aplikaciji. Takve stvari su za ograničenu upotrebu, ali imati Perl pri ruci sa niskim troškovima start up-a, moglo bi biti veoma korisno.

Bilo je gomila drugih alatki koje je trebalo graditi, ili stvoriti. Izgradni sistem je snabdeven sa Kitten alatkom - to je mala "mačka" (u smislu Unix-a, nadovezivanje fajlova koima je snabdeven). Zgrabio sam malu BSD verziju i to iskoristio. Cela poenta alatke je bila da ima sredstvo i poznato ponašanje za alatku.

Ostale alatke su standardne RISC OS koje bi trebale da se reprodukuju. CDir, IfThere, Copy, Destroy, i SetType padaju na pamet. Sve komande postoji na RISC OS, ali kada pokrenete gradjui na Linux ili Wndows, potrebno je da imate konzistentne komande koje rade pravu stvar, bez potrebe da brinete o posebnim slučajevima. Reprodukcija ovih alatki je zapravo vrlo jednostavna - na primer SetType bi samo preimenovala fajl da imaju ispravan,xxx završetak za filetype je isporučeno.

Sve alatke koriste biblioteke koje razumeju kako da uzmu RISC OS imena i koriste ih u domaćim formatima, što je značilo da svi Makefiles koji su stvoreni, mogu da se koristi skoro tačno onako kako su stoje. Samo u nekoliko slučajeva su svi dodatni prevodi potrebni.

Alatke kao što je sed ne koriste mnogo, ali su potrebni za neke specijalizovane prevode. 'C' u asembleru komponente bi sastavile asemblar fajlova koji će onda nešto izmenjeni ukloniti stvari kao što su AREA deklaracije i slično. Bizon (parser generatora) i flex (leksički analizator) alati su slično specijalizovani - Ne sećam se za šta su korisni tačno, ali imam osećaj da ih libpcap koristi kao deo za njegov parser.

DefMod alatka koju koristi OSLib da izgradi svoje source je ažurirana na oba 26biti 32bit verzije. Ovo je malo više bitno OSLib jer je korišćeno za izgradnju nekoliko komponenti, pa nam je trebalo da bude u stanju da izgradi biblioteku ili za 26bit ili 32bit ciljeve, na isti način kao i sve ostale biblioteke .

Imati alatke i kontrolu za izmenu dela sistema za izgradnju je uvek korisno - to nije uvek potrebno, ali je svakako korisno. Iako je u nekim slučajevima to znači ponovno gradjenje alatki koje su već sprovedene u RISC OS, to je mnogo više slobode u mogućnosti da pokrene gradjenje na Linux-u ili Windows-u.

FixUpTemplate (šabloni)

IconBorders je dodata u sistem da bi sve izgleda lepše i lakše korisniku da stilizuje . Međutim , jedan efekat koji su imali bio je da se napravi desktop sporijim. U početku je to bilo zbog toga što je svaki kutak ili kombinacija na tasterima će se direktno prikazati na ekranu - ponekad piksel po piksel - što je prilično sporo . Da bi se ovo ublažilo , sadržaj ovih tastera će biti izvršen korišćenjem području pod kontrolom IconBorderRound modula . To je značilo da kada se privlači isti stil tastera biće vraćeni samo za crtanje tastera sprite.

Međutim , ovaj problem se pojavio kada se ikone koriste u celom sistemu - u aplikacijama i gradji u modulima - što je bilo jak sporo . Aplikacije zasnovane na Toolboxu su uglavnom u redu , jer su standardni tasteri koje ćete preduzeti iz palete uglavnom ostali na podrazumevanoj veličini . To je značilo da je većina Toolbox aplikacija imala prilično konzistentan izgled i osećaj . Aplikacije bazirane na šablonima su manje dosledne - i to je značilo veći deo operativnog sistema .

U nekim slučajevima , već sam počeo standardizujem način na koji su dijalog kutije postavljene i veličina tastera , ali to nije uvek precizan proces. Stil koji je OS pratio je prilično konzistentan , a zatim na osnovu opšteg načina pomoću kojeg su aplikacije prolazile - posebno !Browse i RISC OS 4 konfiguracije komponente .

Stil je prilično jednostavan ( brojke i ograničenja sam uzeo iz FixUpTemplate čega sam se pridržavao pod pretpostavkom da sam kodirao ispravno ) .

To nisu sva pravila koje postoje - samo ona koje sam mogao da vidim (i koji sam smatrao interesantnim). Detalji ovih (i drugih), sa obrazloženjem prikupljeni su u dodatku Style Guide. Ja ne znam gde je to otišlo.

Alatka bi proverila sve ove stvari, pa čak i popravila neki od njih , tako da nije bilo potrebno da se to radi ručno. Većina stvari koje ona izveštava su korisni saveti, čak i ako nisam uradio ništa uvezi sa njima. Alatka pomaže da se uverite da sve aplikacije imaju konzistentan izgled.

Mali deo proizvodnje prilikom obrade datoteku predloška za !Nettle samo pokazuje 'open' i 'resize' šablone.

Template fixer 0.10 (30 Oct 2005). (C) Justin Fletcher
Processing window 'open'
  Icon  0: type 5 ''/'<>'/'Nhost;Pptr_write;Kat;AA-Za-z0-9-. ,:@'
           Writable icon is not H-centred
           Spacing (V) with icon 8 should be 8 OS units (currently 12)
           Spacing (H) with icon 10 should be 8 OS units (currently 4)
  Icon  1: type 8 'Cancel'/'<>'/'R5,3;Ncancel'
           Action/Default button has odd width (recommend 156, default 188, secondary 140)
  Icon  2: type 7 'Connect'/'<>'/'R6,3;Nconnect'
           Action/Default button has odd width (recommend 172, default 204, secondary 156)
  Icon  3: type 4 'Task window'/'<>'/'R2;Ncontype'
           Spacing (H) with icon 5 should be 8 OS units (currently 4)
  Icon  4: type 12 '<>'/'gright,pgright'/'R5;sgright,pgright;Ncontypebut'
           Menu button does not use ptr_menu
           Menu button is R-Justified
  Icon  5: type 0 'Connection'/'<>'/''
           Spacing with window edge should be 12 OS units
  Icon  6: type 5 ''/'<>'/'Pptr_write;Kat;Ncommand'
           Writable icon is not H-centred
           Spacing (H) with icon 11 should be 8 OS units (currently 4)
  Icon  7: type 4 'xterm-colour'/'<>'/'R2;Ntermtype'
           Spacing (H) with icon 9 should be 8 OS units (currently 0)
  Icon  8: type 12 '<>'/'gright,pgright'/'R5;sgright,pgright;Ntermtypebut'
           Menu button does not use ptr_menu
           Menu button is R-Justified
  Icon 10: type 0 'Host'/'<>'/'Nhostlabel'
           Spacing with window edge should be 12 OS units
  Icon 11: type 0 'Command'/'<>'/'Ncommandlabel'
           Spacing with window edge should be 12 OS units
  General:
           Window is not shaped to the golden ratio (width = 192,384 or height = 628,1252)
           Window should not be larger than 800 by 600 OS units
           Window contains 1 Action button and 1 Default button but no divider
Processing window 'resize'
  Icon  0: type 5 '80'/'<>'/'Pptr_write;Ktar;A0-9;Nwidth'
           Spacing (H) with icon 1 should be 8 OS units (currently 4)
           Spacing (H) with icon 8 should be 8 OS units (currently 4)
  Icon  1: type 0 'Width'/'<>'/'<>'
           Spacing with window edge should be 12 OS units
  Icon  2: type 5 '24'/'<>'/'Pptr_write;Ktar;A0-9;Nheight'
           Spacing (H) with icon 3 should be 8 OS units (currently 4)
           Spacing (H) with icon 9 should be 8 OS units (currently 4)
  Icon  3: type 0 'Height'/'<>'/'<>'
           Spacing with window edge should be 12 OS units
  Icon  4: type 5 '96'/'<>'/'Pptr_write;Kta;A0-9;Nscroll'
           Spacing (H) with icon 5 should be 8 OS units (currently 4)
           Spacing (H) with icon 10 should be 8 OS units (currently 4)
  Icon  5: type 0 'Scrollback'/'<>'/'<>'
           Spacing with window edge should be 12 OS units
  Icon  6: type 8 'Cancel'/'<>'/'R5,3;Ncancel'
           Action/Default button has odd width (recommend 140, default 188, secondary 140)
  Icon  7: type 7 'Set'/'<>'/'R6,3;Nset'
           Spacing with window edge should be 12 OS units
           Action/Default button has odd width (recommend 140, default 204, secondary 156)
  General:
           Window contains 1 Action button and 1 Default button but no divider

Jako je važno pridržvati se konzistenog stila za proizvod koji izgleda profesionalno, a alatka pomaže da to ostane tako.

ModServices

Kada je Acorn izbacio Ursulu programerima radi testiranja , postojalo je sredstvo pod imenom ursmod koje bi prikazalo detalje o modul uslugama i omogućio da ažurirate modul heandlerima usluga iz starog stila na novim Ursula stilovima usluga tabele . Kada smo dobili broj za OS , ova alatka nije bila uključena tako da smo morali da se snalazimo sa ažuriranjem stvari ručno .

Da olakšam , napisao sam malu alatku koja se zove ModServices uradio vrlo sličan posao - osim što neće ažurirati modul sa servisa unosa sama . Njegova glavna snaga , ipak, je da pronađe dekodiranje ulazne tačke - i ( verujem ) je to učinio bolje od Acorn alatke . Ja ne mogu da budem siguran , jer nemam originalni source , očigledno .

U svakom slučaju , ona ide korak po korak kroz uputstva za ulazak izvršavaja usluga , da se utvrdi koje brojeve servisa je pokušala da proveri . U principu , većina modula ( assembler one ) slede sličan obrazac , čak i ako je napisan rukom . Većina bi uradila jednu od nekoliko stvari :

Oko ovog uputstva koji su od interesa , možda postoji slaganje instrukcije , procesor režim manipulacije , operacije na privatnoj reči , ili nekoliko drugih stvari koje se mogu ignorisati. Jednom kada se raščlani na rezultate , i dostigne očigledan prekid , bi bilo odlično. Ako udari na uputstva koja ne razumekoja , ili su mu aritmetičke operacije samo čudne ( npr. SUB R14 , R1 , PC - oduzmite trenutni programski brojač od broja usluga) , odustaće i označi i modul kao unparsable .

Tipični izlaz može da izgleda otprilike ovako :

UtilityModule:              &6F, &81
Podule:                     &27, &45
UnSqueezeAIF:               &B7
AppPatcher:                 &B7, &B9
DiagnosticDump:             &DC
CFrontDemangler:            &DC
CLIV:                       &D8
VideoHWVIDC:                &45, &76
VideoHWVF:                  &45, &46, &B9, &E1, &E2, &400C3, &42680
VideoGuard:                 &DE, &DF, &400C0
BufferManager:              &27
Debugger:                 * &27
DMAManager:                 &27, &8E, &8F
RTCAdjust:                  &27
OSPointer:                  &46, &6F, &DE
Hourglass:                  &6
FileSwitch:                 &11, &12, &27, &68, &75, &7D
ResourceFS:                 &40, &75
ResourceFiler:              &27, &4B, &4C, &4F, &5E
Messages:                   &60
MessageTrans:               &59, &5A, &75
TerritoryManager:           &28, &73
UK:                         &64
International:              &43
SerialDeviceDriver:         &27, &70, &71, &77, &81, &8A
SerialDeviceSupport:        &27, &77
Mouse:                      &27
SerialMouse:                &27
PS2Driver:                  &27, &8A
InternationalKeyboard:      &27, &43, &44
FileCore:                   &C, &11, &27, &40, &69, &6A, &6B, &6C, &75
ADFS:                       &27, &8A, &10802
ADFSFiler:                  &27, &4B, &4C, &4F, &5E
RAMFSFiler:                 &27, &4B, &4C, &4F, &5E
CDFS:                       &40
CDFSFiler:                  &11, &27, &4B, &4C, &4F, &5E, &7D
DOSFS:                      &11, &12, &27, &40, &42, &5C, &68, &69, &6A, &6B, &6C
SystemDevices:              &40
PipeFS:                     &40
AIF:                        &40
TransientUtility:           &40
BASIC:                      &11
BASIC64:                    &11
Obey:                       &2A
DDEUtils:                   &27, &53
SysLog:                     &7E, &9F, &B0, &D7, &42680, &80C41
ScreenModes:                &50, &8D, &DE
ScreenBlanker:              &27, &46
ScrSaver:                   &49, &7B, &80, &A9
SoundDMA:                   &27, &8A
SoundChannels:              &27, &54
WaveSynth:                  &54, &59
StringLib:                  &54, &59
Percussion:                 &54, &59
SoundScheduler:             &27, &54
SharedSound:                &54, &42680, &80481
DeviceFS:                   &27, &40
ParallelDeviceDriver:       &27, &70, &71, &79, &8A
ColourTrans:                &27, &46, &59, &5C, &72
Draw:                       &27
SpriteExtend:               &27, &59, &72, &42680
InverseTable:               &27, &46, &59, &5A, &72, &73
DrawFile:                   &60, &80D60, &80D61, &80D62
FontMap:                    &60, &6E
ZLib:                       &53, &42680
PNG:                        &53, &42680
ROMFonts:                   &60
FontManager:                &27, &41, &46, &57, &64
ImageFileConvert:           &80D40, &80D41, &80D42
CompressJPEG:               &42680, &80D60, &80D61, &80D62
ConvertPNG:                 &80D60, &80D61, &80D62
ConvertBMP:                 &42680, &80D60, &80D61, &80D62
ConvertGIF:                 &46, &80D60, &80D61, &80D62
ConvertICO:                 &42680, &80D60, &80D61, &80D62
ConvertPNM:                 &42680, &80D60, &80D61, &80D62
ConvertSprite:              &80D40, &80D41, &80D42, &80D60, &80D61
ConvertSun:                 &42680, &80D60, &80D61, &80D62
ConvertXBM:                 &80D60, &80D61, &80D62
ConvertPCX:                 &42680, &80D60, &80D61, &80D62
ConvertClear:               &80D60
ImageFileRender_Artworks:   &80D40, &80D41
Zipper:                     &53, &42680
PrinterBuffer:              &6F
PDriver:                    &78
PDriverDP:                  &46, &57, &65, &78
PDumper24:                  &66
PDumperCX:                  &66
PDumperDM:                  &66
PDumperE2:                  &66
PDumperIW:                  &66
PDumperLJ:                  &66
PDriverPS:                  &46, &57, &65, &78
RemotePrinterSupport:       &95, &96
RemotePrinterMessages:      &60
WindowManager:              &27, &2A, &46, &59, &5A, &60, &6D, &72
FilterManager:              &86
RedrawManager:              &87, &88
IconBorderPlain:            &87
IconBorderRound:            &46, &72, &87
TaskManager:                &27, &46, &49, &4A, &4B, &4E, &4F, &5E, &90, &91, &92, &42680
ShellCLI:                   &11, &27, &53
DisplayManager:             &27, &46, &49, &4A, &5B, &5D, &94
Filer:                      &27, &49, &4A, &5E, &75, &7D, &801C8
FilerSWIs:                  &53
Filer_Action:               &11, &27
Free:                       &27, &49, &4A, &4E
Pinboard:                   &11, &27, &49, &4A, &4B
ClipboardHolder:            &49, &4A
WindowScroll:               &49, &4A
ColourPicker:               &46, &53, &59, &5D, &75, &93
TaskWindow:                 &11, &27, &53, &57, &72, &CC
NetStatus:                  &27
MbufManager:                &A1, &42680
Internet:                   &45, &5E, &9D, &A2, &55640
InetServices:               &80C41
Resolver:                   &9D, &9F, &A1, &B0, &80C41
MimeMap:                    &80C41
InternetTime:               &9F, &A1
InetConfigure:              &9D, &9F
DHCPClient:                 &9D, &9F, &A1, &B0
ZeroConf:                   &9D, &9F, &A1, &B0
RouterDiscovery:            &9D, &9F, &A1, &B0
Freeway:                    &9D, &9F, &B0
FreewayHosts:               &80, &95, &80C41
ShareFS:                    &40, &4B, &4C, &4F, &73, &7D, &80, &95, &96, &9F, &B0, &801C1
LanManFS:                   &40, &60, &9D, &9F, &A0, &B0, &80C41
AppleTalk:                  &40, &9D, &A0, &A1, &A2, &42680
Toolbox:                    &11, &53, &60, &73, &87, &92
Window:                     &46, &49, &60, &80, &A5, &44EC0, &44EC1, &44EC2, &44EC3
Menu:                       &60, &44EC0, &44EC1, &44EC2, &44EC3
Iconbar:                    &60, &44EC1, &44EC2, &44EC3
ColourDbox:                 &60, &44EC0, &44EC1, &44EC2, &44EC3
ColourMenu:                 &60, &44EC0, &44EC1, &44EC2, &44EC3
DCS:                        &60, &44EC1, &44EC2, &44EC3
FileInfo:                   &60, &44EC1, &44EC2, &44EC3
FontDbox:                   &60, &6E, &44EC1, &44EC2, &44EC3
FontMenu:                   &60, &44EC0, &44EC1, &44EC2, &44EC3
PrintDbox:                  &60, &44EC1, &44EC2, &44EC3
ProgInfo:                   &60, &44EC1, &44EC2, &44EC3
SaveAs:                     &60, &44EC1, &44EC2, &44EC3
Scale:                      &60, &44EC1, &44EC2, &44EC3
GDivider:                   &60, &82881
ToolAction:                 &46, &60, &82881
TextGadgets:                &46, &5D, &44EC6, &82881
ImageFileGadget:            &46, &5D, &60, &44EC6, &82881
CDFSResources:              &60
CDFSSoftATAPI:              &42680
LegacyBBC:                  &4
LegacyScreen:               &46, &DE
BBCEconet:                * &27
OwnerBanner:                &7C, &CF
!Alarm:                     &60
LibraryHelp:                &D6
RPCEmuHostFS:               &40
RPCEmuHostFSFiler:          &27, &4B, &4C, &4F
VProtect:                   Dunno? &059f168c at 0225f1cc, offset &00000678
VProtect:                 ? &49, &7C, &4A, &27, &7, &400, &C0FFEE, &DECAFF
BootLog:                    &49
ErrorLog:                   &400C0, &400C2, &42680
ROMPatch:                   &45
AcornURI:                   &27, &49, &4A, &53
AMPlayer:                   &54, &80, &92
LineEditor:               * &53, &27
WimpSWIVe:                * &27
NoCoverIB:                - 
Tiler:                      &7C
StartBanner:                &7C
TransTIFF:                * &8004C
!StrongHelp:               * &40, &11
ZapRedraw:                * &46
!Zap:                        &27, &49, &4A, &53, &7F
ControlAMPlayer:            &87, &89, &52E00
AcornSSL:                   &83E01
MIDI:                     * &45, &27, &54
MIDISynthesiser:          * &58

Gde:
* Označava skup usluga koje su dekodirane od handlera, a ne Ursula modul tabele .
- Ukazuje na praznu uslugu od handlera .
? označava unparsable uslugu handlera

Samo " unparsable " modul u navedenoj deponiji je VProtect koji ima prilično komplikovan ulazak sekvenci usluga - i onaj koji ja namerno nisam pokušao da podržim , jer je to jedan od težih slučajeva , a sa svim ostalim modulima koje sam pokušao radio je u redu .

Skoro svi ROM moduli , i većina pomoćnih modula , su ažurirani na novi format proveravanjem alatkom. Još jedna karakteristika koju alatka podržava je filtriranje od broja usluga. To je značilo da mogu da vam dam broj usluga za njega , i da će izveštaj samo rezidentnih modula , koji su primali tu uslugu - biti koristan za sužavanje obima problema .

ROMEdit

Application icon for !ROMEdit
!ROMEdit

Gradjenje ROM-a samo zato što hoćete da dodate par novih modula za testiranje ili da onemogućite nešto vam ne odgovara je jako frustirajuće. Tokom 32bit rada ilo je nekoliko puta kada je bil jako korisno imati alatku za testiranje dostupnu u ROMu - naročito kada nemate disk ili mrežu da biste dobili program u njemu ( ja sam neko vreme koristio serijski input da bih na brzaka zgrabio program, ali imati ga u ROM-u, spremnog za upotrebu je mnogo lakše).

Oko Select 3 , dok rade na BuildROM alatki , napisao sam prateću alatku , ROMEdit . To je alatke desktop i komandne rečenice koja vam omogućava da uzmete sliku ROM , promenite njen sadržaj , i sačuvajte ga u novom fajlu . Moduli se mogu ukloniti ili dodati , aplikacije ili biblioteka alatke može se dodati ResourceFS , a jezgro se može zameniti - to je bilo pre nego što je SyistemInit unos dodat ( mada bi bilo razumno trivijalno da dodate podršku za zamenu SystemInit ) .

Desktop alatka vam omogućava da vidite sve korisne sadržaj ROM-a , i sačuvajte ga ponovo , ili možete da sačuvate napolju "državni " fajl koji je opisao trenutnu konfiguraciju . Konfiguracioni fajl bi onda moglo da se vrati učitan da reprodukuju iste promene , ili ručno uredi male promene .

Primer glavnog fajla koji je svuda okolo :

# ROMEdit state file
# Syntax:
#    ROM <file>
#       - select the ROM to work with
#    Omit <module name>
#       - force a module to be removed from the ROM
#    AddMod <file>
#       - add a module to the ROM
#    AddLib <file>
#       - add a library file to the Library resources
#    AddApp <dir/app>
#       - add an application or directory to the Apps resources
#    ReplaceKernel <file>
#       - SReplace the kernel in the image
#    Save <file>
#       - save the resulting image to a file
#    SaveSquashed <file>
#       - save the resulting image to a file in compressed form
ROM ADFS::Virginia.$.!Boot.Softload.Adjust1i2
Omit IconBorderRound
Omit ZeroConf
Omit LibraryHelp
AddApp Share::ROMEdit.$.!ROMEdit
AddLib Share::ROMEdit.$.ROMEdit
AddMod ADFS::Virginia.$.Build.RISCOS.Sources.HWSupport.Joystick.rm.Joystick
Save ADFS::Virginia.$.!Boot.Softload.ROM

Verzija komandne rečenice je korisna jer se može koristiti za pružanje brze pouzdane modifikacije i može se koristiti lako pod Linux-om za modifikaciju ROM-a (iako se kompresija ne koristi u ovom slučaju). Alatka je bila korisna za brzo okretanje kada se radi sa 32bit verzijom u QEmu.

A ROM loaded into the ROMEdit tool
Menjanje ROM konfiguracije je lako uraditi, samo se klikne na modul da bi se onemogućilo.




Published (Last edited): 07-07-2013 , source: http://gerph.org/riscos/ramble/buildtools.html