• Nie Znaleziono Wyników

ISSN Techniki K om puterow e BIULETYN INFORM ACYJNY IM III. iii IN ST Y T U T M ASZYN M ATEM ATYCZNYCH W ARSZAW A 1993

N/A
N/A
Protected

Academic year: 2022

Share "ISSN Techniki K om puterow e BIULETYN INFORM ACYJNY IM III. iii IN ST Y T U T M ASZYN M ATEM ATYCZNYCH W ARSZAW A 1993"

Copied!
72
0
0

Pełen tekst

(1)

1

1993

T e c h n ik i K o m p u te r o w e

BIU LETY N IN FO R M A C Y JN Y

I m iii IM

III

IN S T Y T U T M A SZ Y N M A T E M A T Y C Z N Y C H

W ARSZAW A 1993

(2)

T e c h n ik i K o m p u te r o w e

BIULETYN IN FO R M A C Y JN Y

R o k X X V I I I , N r 1 , 1 9 9 3

IN S T Y T U T M A SZ Y N M A T E M A T Y C Z N Y C H

W A RSZA W A 1993

(3)

IN S T Y T U T M A S Z Y N M A T E M A T Y C Z N Y C H UL. K R Z Y W IC K IE G O 34

02-798 W A R SZ A W A

T E L. 21.84.41, T L X 81.78.80, F A X 29.92.70

S k ła d k o m p u terow y: A N D R Z E J A B R A M O W IC Z

Copyright © by Instytut Maszyn M atematycznych, Warszawa 1993

O d w y d a w cy :

Szanowny Czytelniku,

W znawiam y wydawanie Biuletynu. W ninieszym num erze, odm iennym w swo­

jej szacie wydawniczej od poprzednich, zamieściliśmy arty ku ły związane tem aty cz­

nie z pracam i, którym i zajm uje się In sty tu t. Ponieważ pozostajem y w swojej dzia­

łalności badawczo-rozwojowej w dziedzinie zastosow ań inform atyki, są tu ta j infor­

m acje o narzędziach sprzętowych i programowych, a także o zagadnieniach nor­

malizacyjnych. Podejm ujemy próbę prezentacji własnych poglądów i opracow ań w takiej formie, aby była ona dostępna dla wszystkich zainteresowanych inform atyką.

(4)

T E C H N I K I K O M P U T E R O W E

R o k X X V I I I N r 1 1 9 9 3

S p is t r e ś c i

Str.

J ą d r o k o m p u te ro w e g o s y s te m u o c e n y p o z io m u w ie d z y , Janusz J a ­ nowski, Wojciech P rzyłuski... 5 M o d u la r n y e d y t o r te k s tó w , Marek K o to w sk i... 15 L a s e ro w e m e t o d y u z y s k iw a n ia o b ra z ó w p r z e s tr z e n n y c h w p r z e m y ­

s ło w y c h s y s te m a c h w id z e n ia m a sz y n o w e g o , Rom uald S y n a k 27 W i r t u a l n y s y s te m p o m ia r o w y V IR T I I , Jarosław W ojtow icz... 39 S y s te m y w y tw ó rc z e d o e d u k a c ji w k o m p u te r o w o z in te g r o w a n y m

w y tw a r z a n iu ( C I M ) , Andrzej K aczm arczyk... 43 P r o j e k t n o w y c h s ta n d a r d ó w d la z e s ta w u z n a k ó w w p r z e t w a r z a n i u

i p r z e s y ł a n iu in fo rm a c ji, H anna Kuźnicka, J a n R y żk o ... 55

(5)
(6)

T E C H N I K I K O M P U T E R O W E 1 / 1 9 9 3

Ja n u s z Ja n o w s k i

In s t y t u t Ma s z y n Ma t e m a t y c z n y c h W A RSZAW A

Wo j c i e c h Pr z y l u s k i

In s t y t u t Ma s z y n Ma t e m a t y c z n y c h W A RSZA W A

J ą d r o k o m p u t e r o w e g o s y s t e m u o c e n y p o z io m u w ie d z y T h e S h ell ó f T e sts for E stim a tio n o f K n o w led g e L ev el

S tre sz cze n ie

Zrealizowano prosty język tworzenia zbioru źródłowego testu. Oprogramowanie na­

rzędziowe,. Analizator i Interpretator, przekształca źródło w test komputerowy. Metodą tą można implementować wysoce personifikowane testy komputerowe.

A b stra c t

Simple language was created for writing source file of test. The programming tools, Checker and Interpreter, convert the source into computer test. By this means highly personificated computer tests can be implemented.

1. W stę p

Prezentowane oprogramowanie narzędziowe powstało w Instytucie Maszyn M atem atycznych i jest przeznaczone do budow ania testów kom puterowych służą­

cych testow aniu i uczeniu. Zostało ono zrealizowane na zamówienie M inisterstw a Zdrowia i Opieki Społecznej dla program u „Lekarz Domowy” .

Test polega na wyborze odpowiedzi n a kolejne problem y-pytania. K ażdy wy­

bór je st oceniany w różnych aspektach i oceny są kumulowane z dotychczasowymi ocenami łącznymi. Może on zostać skom entowany różnymi tekstam i w zależności od aktualnych ocen, ilości pytań, na k tó re udzielono odpowiedzi i sum wag tych p y tań w każdym aspekcie. Od tych w artości może zależeć wybór następnego py­

ta n ia lub zakończenie testu. W każdej chwili jest możliwe obejrzenie aktualnego stanu ocen i ew entualne przerwanie testu.

K onstrukcja testu polega n a przygotow aniu tekstu (zbioru tekstowego zwa­

nego źródłem testu) o prostej budowie, do napisania którego m ożna użyć każdego edytora ASCII.

Narzędziowe oprogramowanie przekształca tak przygotowany test kom pute­

rowy w program , który m odelując działanie rzeczywistego egzam inatora umożli­

wia ocenę poziom u wiedzy egzaminowanego — ogólną i wycinkową — w zakresie w ybranych zagadnień.

Oprogram owanie narzędziowe testów sk łada się z dwóch programów:

(7)

• A nalizatora, który służy do analizy poprawności źródła testu. Jeśli źródło testu nie zawiera błędu, to wynikiem analizy je st utworzenie dodatkowego zbioru dyskowego zawierającego adresy pewnych pozycji źródła testu.

• Interp retatora, który wykorzystując zanalizowane źródło testu oraz jego zbiór adresowy przeprowadza test z operatorem kom putera.

Tworzenie źródła testu je st technicznie proste i polega na wypełnieniu odpo­

wiedniego form ularza treścią: pytań , odpowiedzi, komunikatów i przejść. Jed n ak wypełnienie pewnych pozycji tego form ularza, np. dotyczących ważności p y tań , ocen odpowiedzi, warunkowych przejść do następnego p y tan ia i kom unikatów, wy­

m aga wiedzy m erytorycznej i przyjęcia koncepcji egzaminowania (np. system oce­

niania jest niezadowalający, gdy losowe udzielanie odpowiedzi prowadzi do średniej oceny; system przejść do następnego p y tan ia jest niezadowalający, jeśli możliwe jest zakończenie testu po udzieleniu odpowiedzi jedynie na łatw e pytania).

1.1. Jak p isa ć t e s t y w p r e z e n to w a n y m s y s te m ie

Aby napisać test za pom ocą opisywanego system u, należy ustalić pew ne isto t­

ne dotyczące go założenia.

Po pierwsze, trzeba ustalić, czy p y tan ia zadawane testow anem u m a ją służyć do oceny jednego czy też kilku (dopuszcza się m aks. 9) aspektów stan u wiedzy testowanego. N a przykład, m ożna testując kogoś z dziedziny historii staw iać ta ­ kie p y tan ia (wieloaspektowe), że jed n a odpowiedź n a dane pytanie pozw ala eg­

zaminującem u przyjąć kilka opinii dotyczących stanu wiedzy testowanego, np. w aspektach: znajomość d at, znajomość postaci, zdolność logicznego m yślenia itp.

Po drugie, należy ustalić sposób oceniania testowanego. Każdy z ew entualnych aspektów je st oceniany oddzielnie w indywidualnym , ustalonym dla tego asp ektu przez piszącego test, zakresie ocen. Każdemu aspektow i przyporządkować należy pewien współczynnik (wagę), który pozwala wyróżnić aspekty pod względem waż­

ności. A spekty z większą w agąm ająodpow iednio większy wpływ n a końcową łączną ocenę testu. Łączna ocena testu je st sum ą ocen wszystkich aspektów tego testu.

Ocena w danym aspekcie pow staje jak o sum a ocen w ty m aspekcie za poszczególne odpowiedzi, przy czym brane są po d uwagę wagi p y tań dotyczące tego asp ek tu.

Biorąc to pod uwagę, piszący test musi każdemu p ytaniu przypisać zestaw wag odpowiadających ustalonym aspektom . W ten sposób określa on ważność danego p y tan ia w odniesieniu do poszczególnych aspektów testu. Ważność, o której mowa, to oczywiście wpływ ja k i dane pytanie m a n a oceny w rozważanych aspektach testu. Wreszcie piszący test m usi każdej odpowiedzi przypisać zestaw ocen odpo­

wiadających kolejnym aspektom . Przypisując te oceny (z ustalonego wcześniej dla każdego aspektu zakresu) piszący określa oczywiście wpływ, jak i dana odpow iedź mieć będzie n a oceny testu w poszczególnych aspektach. Może n a przykład przy­

znawać oceny wyłącznie w kategoriach prawda-fałsz, ale może także zdecydować się n a przyznawanie ocen pośrednich.

Po trzecie, piszący test m usi zdecydować się na sposób egzam inowania testo­

wanego i może tu wykorzystać wiele różnych mechanizmów przygotow anych do budow ania testu. Je d n ą z zasadniczych decyzji, jakie podejm ie piszący te st, je st ustalenie oddzielnie dla każdego p y tan ia zestawu odpowiedzi. Można tu stosow ać wiele rozwiązań. Odpowiedzi może być m ało lub wiele (m aks. 15). Na przykład, m ożna dwie z odpowiedzi określić jak o bardzo dobre, a wszystkie pozostałe jak o

(8)

J ą d r o k o m p u t e r o w e g o s y s t e m u o c e n y p o z i o m u w i e d z y 7

złe, czyli o znacznie mniejszej ocenie. Kolejna ważna decyzja w sprawie sposobu egzam inowania to wybór układu p ytań tworzących test. T rzeba zdecydować, czy każdy egzaminowany odpow iadać m a n a te sam e p y tan ia w ustalonej kolejności, co odpow iada zwykłym (nie kom puterowym ) testom , czy też m odelujem y działa­

nia rzeczywistego egzam inatora uzależniając kolejne p y tan ia od dotychczasowego przebiegu testu. W tym drugim przypadku podstaw ow ą rolę odgryw ają system nu­

m eracji p y tań oraz reguły przejścia do następnego pytania. N um erując p y ta n ia (w system ie paragrafowym ) m ożna podzielić wszystkie p y tan ia testu n a różnorodne podgrupy tem atyczne (m erytoryczne) lub funkcjonalne (p y tan ia wstępne, p y tan ia końcowe). Reguły przejścia do następnego p y tan ia m ogą określać następne pytanie testu wykorzystując:

• ilość już udzielonych odpowiedzi,

• dotychczasowe oceny w różnych aspektach,

• łączną ocenę,

• sum ę wag zadanych p ytań w różnych aspektach,

przy czym nie musi tu być konkretnie podany num er następnego p ytan ia, a tylko określenie następnego py tan ia jak o losowo wybranego spośród jakiejś grupy py tań , czy też jak o pytania o zbliżonym do podanego układzie wag.

Szczególnie ważne je st opracowanie komunikatów wyświetlanych w czasie te­

stow ania i kom unikatu końcowego, wskazujących zarówno n a braki w wiedzy, ja k i na dobre rezultaty.

T ak więc piszący może tworzyć testy realizujące różne style egzam inowania od klasycznego testu kartkowego po badanie wiedzy użytkownika w sposób oryginalny.

Praw dopodobnie najlepszą m eto d ą będzie stopniowe budowanie testu albo przez łączenie mniejszych testów poświęconych poddziedzinom , albo przez stop ­ niowe dołączenie trudniejszych i bardziej szczegółowych py tań . K onstrukcji form a- lno-technicznej źródła testu jest poświęcona reszta opracowania.

2. Z biór — źród ło te s tu

Zbiór ten musi być zgodny z ustalo ną składnią.

S kładnia określa kolejność i znaczenie poszczególnych inform acji. Ograniczni­

kami inform acji są nazwy zaczynające się od znaku „fi” : f i t y t u l, fioceny, fip y ta n ie , Codp, Cgdy, fikoniec. Rozpoczynają one opisy jednostek inform acji, które m uszą wystąpić w źródle testu w następującej kolejności:

C ty tu l (tekst tytu łu )

Coceny (param etry system u ocen)

fip y ta n ie (informacje dotyczące py tan ia, wszystkie odpowiedzi n a to pytanie, wa­

runki określenia następnego p y tan ia lub zakończenie testu)

fipytanie (...) fikoniec

Zanalizowane źródło testu nie zawierające błędów m a w pisaną na końcu sum ę kontrolną i datę. Tylko takie źródło testu może być interpretow ane.

Interp retacja zaczyna się zawsze od postaw ienia pierwszego p y tan ia z w /w ciągu p ytań. Ilość p ytań nie może być większa niż 360.

(9)

Omówimy teraz pewne elementy konstrukcji źródła tekstu.

2.1. K o m e n ta r z

W źródle testu, tekst między dwoma kolejnymi „ \ ” (włącznie z nim i) nie m a znaczenia. Oznacza to, że kom entarz nie jest separatorem i nie może być zaw arty jeden w drugim. Liczy się jednak jego długość, tzn. w ydłuża linie w bloku tek stu i nie zm ienia położenia pierwszego cudzysłowu bloku tekstu, gdy jest przed nim umieszczony.

P r z y k ła d

1 2 \ z l \ 3 4 jest liczbą 1234.

Tekst „12\zl\34” m a szerokość 8 znaków.

2.2. B lo k te k stu

Podstawowe informacje dla użytkownika, takie jak: ty tu ł testu, py tan ia, o d ­ powiedzi, kom unikaty i wydruki są blokami tek stu wyświetlanym i w odpow iednich oknach.

Blok tekstu mieści się między dwoma podwójnymi cudzysłowami. Ma on sze­

rokość liczoną od jego pierwszego cudzysłowu (wyłącznie) do najdalej sięgającego w prawo znaku (włącznie) lub cudzysłowu (wyłącznie). Będzie wyświetlany w oknie o tej szerokości.

Długość jego wyznacza długość okna. Gdy przekracza ona 22 linie, tekst będzie przewijany. W wierszu bloku tekstu, do kolumny pierwszego cudzysłowu w łącznie, m ogą występować jedynie spacje lub kom entarz.

Żaden tekst nie może przekroczyć 4095 znaków.

2.3. T y t u ł

T y tu ł jest blokiem tekstu, który jest lokalizowany w środku ekranu.

P r z y k ła d fitytul "

Lekarz Domowy Kurs I

2 .4. S y s te m o ce n

Ocena testu posiada jednostkę wartości i różne aspekty.

Każdy aspekt m a w łasną jednostkę i zakres wartości.

W artość oceny testu je st su m ą wartości jej aspektów wyrażonych w je d n o s t­

kach oceny testu.

W spółczynnikam i przeliczającym i są stosunki jednostek aspektów oceny do jednostki oceny testu, zwane dalej wagami (jednostek) aspektów.

P y ta n ia testu m ają wagę p y tan ia dla każdego aspektu, a odpowiedzi — oceny we wszystkich aspektach.

A ktualna wartość aspektu oceny jest średnią ocen udzielonych odpow iedzi ważonych wagam i p y tań i znormalizowanych sum ą tych wag.

W źródle testu system ocen jest określony przez podanie wagi i zakresu ccen dla każdego aspektu.

(10)

J ą d r o k o m p u t e r o w e g o s y s t e m u o c e n y p o z i o m u w i e d z y 9

P r z y k ł a d

Coceny \Ocena testu jest procent trainych odpowiedzi\

1 \aspekt pierwszy, jednostka = trafna_odpowiedz\

100 \waga aspektu pierwszego =

trafna_odpowiedz/(procent*traina_odpowiedz)\

(0,1) \zakres aspektu pierwszego\

W s z y s t k i e pytania maja wage 1. Odpowiedzi trafne maja ocene 1, a nietrafne ocene 0.\

P r z y k ł a d

fioceny \0cena testu jest "kombinowany" procent trafnych odpowiedzi\

1 \aspekt pierwszy, jednostka = 0.75*trafna_odpowiedz\

75 \waga aspektu pierwszego =

0.75*trafna_odpowiedz/(procent*trafna_odpowiedz)\

(0,1) \zakres aspektu pierwszego\

2 \aspekt drugi, jednostka = 0.25*trafna_odpowiedz\

25 \waga aspektu drugiego =

0.25*trafna_odpowiedz/(procent*trafna.odpowiedz)\

(0,1) \zakres aspektu drugiego\

\Wszystkie pytania maja wagi 1 obu aspektów. Odpowiedzi trafne w aspekcie mają ocene 1, a nietrafne ocene 0 w tym aspekcie.\

W w ariantach powyższych przykładów możemy zaakcentować ważność pew­

nych p y tań w jakim ś aspekcie przez zwiększenie wagi p y tan ia łub nadać odpowiedzi ocenę ułam kow ą stosownie do stopnia trafności.

A ktualny stan egzaminu jest dostępny w źródle poprzez opisane tu sym bole.

Zostaną one zamienione na wartości w tekstach komunikatów i warunkach w yboru następnego p y tan ia (natom iast pozostaną symbolami w tekstach pytań i odpow ie­

dzi).

Symbole $1 . . . $9 oznaczają ak tu aln ą ocenę w aspektach 1 . . .9 w yrażoną w jednostkach oceny testu.

Sym bol $0 oznacza ak tu aln ą ocenę testu ($0=$1+ . . . +$9).

Sym bol #0 oznacza ilość udzielonych odpowiedzi.

Symbole # 1 .. .#9 oznaczają sum y wag w poszczególnych aspektach wszystkich pytań, n a które udzielono odpowiedzi. W skazują one n a dotychczasowy stopień przeegzam inowania testowanego w poszczególnych aspektach.

2.5. P y t a n i a P y ta n ia m ają:

• Numer

zaczynający się od znaku „#” i będący dalej ciągiem cyfr i kropek, np. # 1 .1 2 .4 .

• Wagi

będące układem nieujemnych liczb w nawiasach zwyczajnych, np. (1 2 ) . Sto­

sunek wagi py tan ia w danym aspekcie do wag innych pytań w tym aspekcie wpływa n a wartość oceny tego aspektu. N atom iast stosunek wagi do wag tego p y tan ia w innych aspektach określa stopień równomierności przeegzam inowa­

nia w różnych aspektach.

(11)

• Blok tekstu py tan ia

(wyświetlany w lewym górnym rogu ekranu).

P r z y k ła d (łączny) (Spytanie #1.12.4 ( 1 2 ) \wagi\

"blok \20x3\

tekstu

p ytania."

• Ciąg nie więcej niż 16 odpowiedzi (lub pusty), z których każda zaczyna się od ogranicznika „Codp” .

Odpowiedzi mają:

• Blok tekstu odpowiedzi

lokowany w praw ym dolnym rogu ekranu.

• U kład ocen

w każdym aspekcie w nawiasach zwykłych.

• O pcjonalny kom unikat.

P r z y k ła d (łączny)

®odp "blok tekstu odpowiedzi."

(0.5 1) \oceny odpowiedzi\

"Pierwsza opcjonalna czesc bloku tekstu komunikatu o wybranej odpowiedzi, wynikach Ogólnych $0 i ewentualnie w aspektach $1,

$2, $3, $4, $5, $6, $7, $8, $9 ilości zadanych p y tań #0 i stopniu przeegzaminowania w aspektach #1, #2, #3, #4, #5, #6, #7, #8, #9."

• Ciąg (być może pusty) warunkowych przejść do następnego py tan ia, z któ­

rych każde zaczyna się od ogranicznika „®gdy” i obligatoryjne, bezwarunkowe przejście do następnego p y tan ia. Pierwszy spełniony w arunek tego ciągu wy­

znacza wybór inform acji następnego p ytania. Test zostaje zakończony, gdy ciąg ten je st pusty. Teksty warunków m ogą zajmować kilka linii. W w arun­

kach m ogą występować sym bole $ 0.. .$9, # 0.. .#9, liczby bez znaków, zwykłe nawiasy, operatory arytm etyczne +, - , *, / , sym bole relacji <, >, = (relacje m uszą być zam knięte w naw iasach), operatory logiczne v, &, ", w norm alnej kolejności ważności. Reguła przejścia do następnego p y ta n ia może zawierać kom unikat, który staje się dalszym ciągiem kom unikatu odpowiedzi (razem nie więcej niż 22 linie) i jeden z trzech rodzajów wyboru następnego p y tan ia (lub puste miejsce przy zakończeniu testu):

1. Num er konkretnego p y ta n ia lub, gdy num er je st zakończony kropką, nu­

m er grupy py tań , z której będzie losowo w ybrane następne pytanie.

2. Ciąg do 10-ciu liczb przedzielonych pojedynczym i num eram i p y ta ń lub paragrafam i. Losowy w ybór jednej z tych liczb określa sąsiedni num er p y tan ia lub paragraf, lub kończy test.

3. Układ wag, według którego wybiera się pytanie o najbardziej podobnym układzie wag (w sensie bliskości do najmniejszej sum y absolutnych róż­

nic).

(12)

J ą d r o k o m p u t e r o w e g o s y s t e m u o c en y p o z i o m u w i e d z y 11

P r z y k ł a d (przesadnie komentowany, z w artościam i liczbowymi dostosowanym i do w ariantu drugiego przykładu systemu ocen)

Cgdy

\wagi zadanych pytan w obu aspektach > 20 i ocena

>80\(#1>20)&(#2>20)4($0>80): "Dziękuję. Dobry wynik."

Cgdy

\wagi zadanych pytan w obu aspektach > 20 i ocena >40 (<=80)\(#1>20)&(#2>20)&($0>40): "Dz i ę k u j e .Wynik mierny."

Ogdy

\wagi zadanych pytan w obu aspektach > 20 (i ocena <=

40)\(#1>20)&(#2>20): "Dziękuję. Sla b y wynik $ 0 \ x x \ .“

Cgdy

\ilosc zadanych pytan >20 lub ilosc zadanych p y tan >15 i ocena <40 lub

>80\(#0>20)v(#0>15)&(($0<40)t($0 > 8 0 ) ): "Dziękuję.Dosc pytan."

\kontynuujemy test gdy: nie osiągnęliśmy koniecznego stopnia przeegzaminowania obu aspektów i n i e przekroczyliśmy limitu pytan i jest sens zadawać dalsze pytania. Bedziemy zadawać trudne p y tania w pierwszej fazie testu lub gdy osiagane sa dobre wyniki.\

Cgdy

\(ilosc zadanych pytan <10 lub ocena >60) i stopień przeegzaminowania w aspekcie 1 jest mniejszy niz 0.6 stopnia przeegzaminowania w aspekcie 2

\((#0<10)v($0>60))i(#l<0.6**2) : "Pytanie trudne w aspekcie 1. " (3 0) Cgdy

\(ilosc zadanych pytan <10 lub ocena >60) i stopień przeegzaminowania w aspekcie 2 jest mniejszy niz 0.6 stopnia przeegzaminowania w aspekcie 1

\((#0<10)v($0>60))Jt(#2<0.6**l) : "Pytanie trudne w aspekcie 2. " (0 3) Cgdy

\(ilosc zadanych pytan <10 lub ocena >60) (i stopień przeegzaminowania w obu aspektach nie jest zbyt r o z b i e ż n y .)\(#0<10)v($0>60) : "Pytanie trudne w obu aspektach." (3 3)

\W pozostałych przypadkach losowo wybieramy pytania łatwe.\

: 0.2 #0.5 \ k o n k r e t n e pytanie\

0.2 #1. (0 0) \pytanie z paragrafu 1\

0.2 #2. (0 0) \pytanie z paragrafu 2\

0.2 (0 0) \pytanie z całego tekstu\

0.2 \koniec\

2.6. Alias

W realnych źródłach testu należy się spodziewać dużej pow tarzalności jego fragmentów np. komunikatów, warunków przejścia do następnego p y ta n ia lub wa­

runków zakończenia testu. Współczesne edytory łagodzą ten problem przez łatwość kopiowania, tym niemniej nadm ierna ilość tekstu będzie u tru dn iać m erytoryczną analizę źródła. Dlatego wprowadzamy m echanizm zastępow ania fragm entów źró d ła ich krótkim i opisami będącym i nazwami alias.

Alias są nazwam i fragm entów tekstu źródła testu. W ystępują one w tekście w miejsce tych fragmentów. Analizator spraw dza form alną poprawność źródła testu po zastąpieniu alias ich treścią.

(13)

Są dw a rodzaje alias. Pierwszy może wystąpić w tekście źró d ła wyłącznie po swojej definicji. Drugi nie musi spełniać tego warunku. Jest to użyteczna własność, ale stw arzająca niebezpieczeństwo zapętlenia programów. W zw iązku z tym w pro­

wadzone je st ograniczenie zagnieżdżenia alias w ich definicjach (do 20 poziomów).

P r z y k ł a d (opracowany n a podstaw ie poprzedniego przykładu) {wyjście:

Cgdy (#i>20)&(#2>20)&($0>80): "Dziękuję. Dobry wynik."

flgdy (#1>20)&(#2>20)&($0>40): "Dziękuję. Wynik m i e r n y . "

figdy (#1>20)&(#2>20): "Dziękuję. Slaby wynik $0\xx\."

Cgdy (#0>20)v(#0>15)fc(($0<40)v($0>80)) : "Dziękuję. Dosc pytań."}

{nastepne_pytanie:

@gdy ((#0<10)v($0>60))fc(#l<0.6*#2): "Pytanie trudne w aspekcie 1 z paragrafu 2." #2. (3 0)

®gdy ((#0<10)v($0>60))&(#2<0.6*#1) : "Pytanie trudne w aspekcie 2 z paragrafu 1." #1. (0 3)

Cgdy (#0<10)v($0>60) : "Pytanie trudne w obu aspektach.

"{pytanie_trudne I {pytania.latwe |>

Powyższe definicje będą obowiązywały we wszystkich p ytaniach, jeśli zo stan ą umieszczone przed pierwszym pytaniem . Poprzedni przykład zapisze się w tedy n a­

stępująco:

{wyjscie>

{pytanie.trudne: (3 3)>

{pytaniaJLatwe:

:0.2 #0.5 0.2 #1. (0 0) 0.2 #2. (0 0) 0.2 (0 0) 0.2}

{nast epn e _pytani e}

a jego w ariant może mieć postać:

{wyjście}

{pytanie_trudne:#1.0}{pytania_latwe:(0 0)}

{nastepne_pytanie}

2 .7 . K o n ie c

Źródło testu musi kończyć się ogranicznikiem „C koniec” . T ek st źródła po jego pierwszym wystąpieniu je st kasowany.

3. P r z y k ła d

Przedstaw iam y poniżej wybrane fragm enty fikcyjnego testu ilustrujące nie­

które wyżej opisane konstrukcje. Przypom inam y, że tekst pom iędzy znakami _ \ ” je st tylko kom entarzem i może być pom inięty.

(14)

J ą d r o k o m p u t e r o w e g o s y s t e m u o c e n y p o z i o m u w i e d z y 13

Btytul

TYTUŁ TESTU (Doceny

\aspekt 1 2

waga 25 75

zakres ocen\

(1 5) (1 5)

\aspekt pomocniczy\

\aspekt podstawowy\

Bpytanie #3.7 Cl 3) \W 1 aspekcie waga pytania m a wartość 1, w 2 aspekcie odpowiednio wartość 3.

Wagi te ozn. skale trudności p y tania w poszczególnych aspektach testu.\

TRESC PYTANIA Bodp

TRESC ODPOWIEDZI (5 2)

Bgdy (#0>10):

Bgdy ($1<2.5) : #2.

Bgdy ($2<2.5): #1.

Bgdy ($0>4): #4. (5 5)

: #3.8

\0cena odpowiedzi: 5 w aspekcie 1 oraz 2 w aspekcie 2.\

\Jesli zostało zadanych wiecej niz 10 pytań to koniec testu.\

\Jesli dotychczasowa ocena w 1 aspekcie jest mniejsza niz 2.5 to przechodzimy do losowo wybranego pytania z grupy 2. .\

\Jesli dotychczasowa ocena w 2 aspekcie j est mniej sza niz 2.5 to przechodzimy do losowo wybranego pytania z grupy 1. .\

\Jesli dotychczasowa laczna ocena jest większa od 4 to przechodzimy do trudnego w obu aspektach p y t ania z grupy 4.\

\W pozostałych przypadkach

przechodzimy do p y t ania o numerze 3.8 A

Bodp

TRESC ODPOWIEDZI

(1 1) \0cena odpowiedzi: 1 w aspekcie 1 oraz

1 w aspekcie 2. \ Bgdy (#0>10)&((#1>15)v (#2>15)):

\Jesli zostało zadanych wiecej niz 10 pytań oraz jeśli w jednym z aspektów zadano pytania o sumie wag przekraczającej 15 wtedy kończy sie test.\

(15)

Ggdy ($0>3): (4 4) \Jesli dotychczasowa laczna ocena jest większa od 3 to przechodzimy do pytania o układzie wag najbardziej zbliżonym do (4 4).\

0.1 #5.1 0.1 #5.2 0.1 #6.1 0.3

0.4 #7. \W pozostałych przypadkach przechodzimy losowo

z prawdopodobieństwem 0.1 do pytań o podanych numerach lub z prawdopodobiebstwem 0.3 kończymy test lub z prawdopodobieństwem 0.4 przechodzimy do jakiegoś pytania paragrafu 7. \

Ckoniec

(16)

T E C H N I K I K O M P U T E R O W E 1 / 1 9 9 3

Ma r e k Ko t o w s k i

In s t y t u t Ma s z y n Ma t e m a t y c z n y c h W A RSZA W A

M o d u la r n y e d y t o r t e k s t ó w M o d u la r T e x t E d itor

S tr eszcz e n ie

W niniejszym opracowaniu przedstawiono projekt modularnego edytora tekstu. Opi­

sana została maszyna edytorowa i jej funkcje elementarne. Przedstawiono również, w jaki sposób za pomocą funkcji elementarnych mogą być realizowane operacje edycji tekstu.

Przedyskutowano zalety i wady koncepcji.

A b str a c t

T he paper describes a concept of modular text editor. So called editor machine and its elementary functions are introduced. It is described, how text editing operations can be realized using elementary functions. Merits and drawbacks of the concept are also discussed.

1. W stę p

Funkcje, zmienne i stru k tu ry podane w tekście są zdefiniowane w języku C (sam projekt edytora m odularnego je st niezależny od system u operacyjnego i ję ­ zyka program owania). Przyjęto przy tym zasadę stosow aną w [1]: identyfikatory, a zwłaszcza nazwy funkcji i typów, pisane są w języku angielskim , a kom entarze — w języku polskim.

2. K o n ce p c ja e d y to r a m od u la rn eg o

P rogram m odularny jest to — najogólniej rzecz biorąc — program składający się z wydzielonych i w dużej mierze niezależnych jednostek (m odułów), które m ogą być łączone ze sobą w bardziej złożone konstrukcje; więcej: m ogą być także łączone z innym i jednostkam i, tworząc oddzielne produkty. W odniesieniu do om awianego edytora isto ta tej koncepcji polega na wydzieleniu funkcji edycyjnych w postaci tzw. m aszyny edytorowej, niezależnej od aplikacyjnej części ed ytora i otoczenia systemowego. M aszyna edytorow a realizuje elem entarne funkcje edycyjne (zwane dalej po prostu funkcjam i elem entarnym i) tak dobrane, by każda operacja edycji na tekście m ogła dać się w nich zapisać. Termin „m aszyna” je st tu najzupełniej odpowiedni: m aszyna edytorow a pełni podobną rolę w całym edytorze tekstu, co np. silnik w samochodzie.

(17)

E dytor tekstu składa się z maszyny edytorowej oraz otoczenia systemowego i aplikacyjnego.

Otoczenie systemowe je st to zestaw funkcji realizujących odw ołania do za­

sobów system u, w tym m .in. operacje na urządzeniach wejścia-wyjścia, alokację pamięci itp . Wydzielenie otoczenia systemowego jak o oddzielnej jednostki m odu­

larnej pozw ala tworzyć edytory pracujące w różnych system ach operacyjnych bez wym iany innych m odułów edytora.

Otoczenie aplikacyjne je st to zestaw funkcji, które realizują interfejs użytkow­

nika. S ą to m .in. funkcje obsługi m enu, funkcje form atujące, funkcje definiujące ze­

staw y znaków drukarskich itp . Otoczenie aplikacyjne tworzy jednocześnie interfejs z m aszyną edytorową. Z akłada się, że elem entarne funkcje m aszyny edytorowej są tak dobrane, by za pom ocą ich sekwencji dały się zapisać wszystkie operacje edycji edytora.

Rys. 1. Ogólny schemat modularnego edytora tekstu

Z założenia, bezpośredni dostęp do tekstu m ogą mieć jedynie funkcje m aszyny edytorow ej.

3. M a sz y n a ed y to r o w a

M aszyna edytorow a działa na jednostce tekstu, za którą przyjęto jeden akapit (patrz niżej). Jest to wybór najrozsądniejszy, ponieważ akapit je s t pojęciem wy­

stępującym w każdym tekście, form atow anym i znakowym (tzw . tekście A SC II).

A kapit je s t przy tym niezależny od form atu tekstu, w przeciwieństwie np. do linii tekstu, której szerokość określona jest szerokością tekstu lub akap itu . T y m nie­

mniej przyjęcie akapitu za jednostkę tekstu nie zmniejsza ogólności rozum ow ania (patrz p. 5.1).

M aszyna edytorow a sk ład a się z tzw. pola bieżącego oraz ze zbioru funkcji elem entarnych, które — najogólniej rzecz biorąc — pozw alają przesyłać n a to pole poszczególne jednostki tek stu (akapity) i modyfikować je. Oprócz tego z polem bieżącym i edycją jego zawartości związane są pewne zmienne (są one zdefiniowane niżej). Będziemy nazywać je zm iennymi m aszyny edytorowej.

W następnych punktach opisane je st szerzej pojęcie akapitu oraz funkcje ele­

m entarne.

(18)

M o d u l a r n y e d y t o r t e k s t ó w 17

3 .1 . A k a p i t y

Podstawową jednostką przetwarzanego tekstu jest akapit, czyli uporządko­

wany ciąg znaków. Wszystkie akapity są równouprawnione, niezależnie od tego, czy są puste (nie zawierają żadnych znaków), czy też są bardzo duże. Tekst w ob­

rębie akapitu jest jednorodny, tzn. traktow any jest jako ciąg znaków bez znaków wyróżnionych. Nie m a a priori ograniczenia ani na wielkość akapitów , ani n a ich liczbę.

Tekst jest to uporządkowany ciąg kolejnych akapitów. Z akładam y ty m sam ym , że zdefiniowane są pojęcia pierwszego, ostatniego, następnego i poprzedniego aka­

pitu. Nie zakłada się nic o wewnętrznej organizacji całego tekstu i sposobie wza­

jem nego powiązania akapitów.

W śród wszystkich akapitów tekstu przetwarzanego zawsze jeden je st akapitem bieżącym , tj. takim , który znajduje się w polu bieżącym m aszyny edytorow ej. Na akapicie bieżącym (ściślej: na zawartości pola bieżącego) zdefiniowane są operacje elem entarne. Aby dokonać zm iany w akapicie, należy uczynić go akapitem bieżą­

cym (wprowadzić do pola bieżącego) i posłużyć się funkcjam i elem entarnym i. Pole bieżące może być po prostu jednorodnie adresowanym obszarem pam ięci opera­

cyjnej (przy organizacji pam ięci w kom puterach klasy IBM PC taki obszar może mieć rozm iar do 64 Kb). Przy akapitach większych niż dostępny jednorodny ob­

szar pam ięci operacyjnej, akapit bieżący może być np. przechowywany częściowo w dwóch plikach roboczych zawierających początkową i końcową część akap itu bie­

żącego (tzw. bufory wahadłowe). Rozmiar tak implementowanego p o la bieżącego

— a ty m sam ym i m aksym alna wielkość akapitu bieżącego — je s t ograniczony dostępną pam ięcią dyskową.

3 .2 . Z m ien n e m a sz y n y ed y to r o w ej

Z akapitem bieżącym zw iązana jest wartość przesunięcia bieżącego. Je st to miejsce w akapicie bieżącym, w które „patrzy” m aszyna edytorowa. O dpow iada ono położeniu kursora w edytorze tekstu. Każdy znak wstawiany do akap itu bieżącego je st wstawiany w miejsce określone przez wartość przesunięcia bieżącego (podobnie z tego miejsca jest usuwany znak, jeśli w edytorze np. realizowana je s t operacja usuw ania znaku znajdującego się na pozycji kursora).

D rugą zm ienną istotną dla funkcji elementarnych jest znacznik modyfikacji.

Jeśli m a on wartość 1, oznacza to, że akapit bieżący był modyfikowany (w artość 0 tego znacznika oznacza, że ak ap it nie był modyfikowany).

W d alszych rozw ażaniach b ęd ą p otrzebn e n am definicje typ ów : PAR (a k a p it), PAR.ADDRESS (adres ak apitu), OFFSET (w artość p rzesu nięcia w ak ap icie) i CHAR_AD- DRESS (adres zn ak u). Jak kolw iek z p un ktu w id zen ia całości ich sz c z e g ó ło w a stru k ­ tu ra nie m a zn aczenia, dla ja sn o śc i w yk ład u p rzyjm iem y p ew n e z a ło że n ia . I tak adres ak ap itu m oże być ad resem elem en tu w łań cu ch u p o łą cz o n y c h d w u stron n ie ak apitów :

typedei struct par

f

char *par_text;

struct par *next_par;

/ * ADRES TEKSTU AKAPITU * / / * ADRES KASTĘPNEJ STRUKTURY AKAPITU * /

(19)

struct par *previous_par; / * ADRES POPRZEDNIEJ STRUKTURY AKAPITU * /

> PAR, *PAR_ADDRESS;

Tekst może być również zorganizowany w tablicę wskaźników n a obszary alo­

kowane dla poszczególnych akapitów itd.

OFFSET m o ż e być po prostu liczbą całkowitą bez znaków:

typedef unsigned int OFFSET;

Dla operacji w staw iania, pisania i usuw ania z akapitu ciągów znaków przy­

d a tn a będzie n am definicja LENGTH. Możnaby j ą zdefiniować poprzez ty p OFFSET, ale — by nie ograniczać rozważań — zdefiniujemy j ą oddzielnie:

ty p e d e f u n sig n e d i n t LENGTH;

Mając definicję adresu akapitu i wartości przesunięcia, możemy zdefiniować adres znaku w tekście. S kłada się on z adresu akapitu i wartości przesunięcia w obrębie akapitu:

typedef struct {

PAR_ADDRESS par_a d d r e s s ; OFFSET par.offset;

> CHAR_ADDRESS;

Zdefiniujemy również kilka zmiennych, które b ędą wykorzystywane i m odyfi­

kowane przez funkcje elem entarne, w tym dwie w spom niane wyżej zmienne:

c h a r * c u r r e n t ; /* ADRES POLA BIEŻĄCEGO * /

int modified; /* ZNACZNIK, CZY AKAPIT BIEŻĄCY BYŁ MODYFIKOWANY */

OFFSET current.off set; /* BIEŻĄCE PRZESUNIĘCIE W POLU / * BIEŻĄCYM */

OFFSET par_length; /* DŁUGOŚĆ AKAPITU * /

PAR.ADDRESS current.par; /* ADRES AKAPITU BIEŻĄCEGO */

Konkretne typy tych zm iennych m ogą być zdefiniowne w im plem entacji m a ­ szyny edytorowej.

3 .3 . F u n k cje e le m e n ta r n e

Na akapicie bieżącym (w polu bieżącym) zdefiniowana jest pew na liczba ele­

m entarnych operacji edycyjnych. Są one podane poniżej jak o funkcje w sensie ję ­ zyka C (ściślej: ich prototypy), przy czym nie opisujem y tu szczegółów działania tych funkcji (pewne szczegóły działania funkcji elem entarnych podane są n a końcu listy).

Etake.current (PAR.ADDRESS)

Pobiera dany akapit do pola bieżącego. A rgum entem funkcji je s t adres akapitu.

E tak e _ n ex t (v o id )

Pobiera następny akapit do pola bieżącego.

Etake.previous (void)

Pobiera poprzedni akapit do pola bieżącego.

(20)

M o d u la r n y e d y t o r t e k s tó w 19 Etake_first (void)

Pobiera pierwszy akapit tekstu do pola bieżącego.

Etake_last (void)

P obiera ostatni akapit tekstu do pola bieżącego.

Eleave_current (void)

Kopiuje bieżący akapit do pamięci (operacja kopiowania faktycznie realizo­

w ana je st tylko wtedy, gdy akapit był modyfikowany).

Einsert_char (char)

W staw ia znak w miejsce określone przez wartość bieżącego przesunięcia (tekst akapitu bieżącego jest rozsuwany). Argum entem funkcji je st w staw iany znak.

Edelete_char (void)

Usuwa znak z miejsca określonego przez bieżące przesunięcie (akapit bieżący jest kompresowany).

E w r ite _ c h a r ( c h a r )

W pisuje znak w miejsce określone przez bieżące przesunięcie (znak znajdujący się w danym miejscu jest zamazywany).

Einsert_string (char *, LENGTH)

W staw ia ciąg znaków do akapitu bieżącego w miejsce określone przez bieżące przesunięcie (znaki znajdujące się w danym miejscu są rozsuwane). A rgum en­

tem funkcji jest adres ciągu, który m a być wstawiony, i jego długość.

Edelete_string (LENGTH)

Usuwa ciąg znaków z m iejsca określonego przez bieżące przesunięcie (akapit bieżący je st kom presowany). Argum entem funkcji jest długość ciągu do usu­

nięcia.

Ewrite_string (char *, LENGTH)

W pisuje ciąg znaków do akapitu bieżącego w miejsce określone przez bieżące przesunięcie (znaki znajdujące się w danym miejscu są zamazywane). Argu­

m entem funkcji jest adres ciągu, który m a być wstawiony, i jego długość.

Eset„current.offset (OFFSET)

U staw ia bieżące przesunięcie w polu bieżącym. A rgum entem funkcji je st war­

tość przesunięcia w obrębie bieżącego akapitu.

Eincrement_offset (void)

Zwiększa wartość przesunięcia bieżącego o 1.

Edecrement.offset (void)

Zmniejsza wartość przesunięcia bieżącego o 1.

Einsert_par (void)

W staw ia nowy akapit w miejscu określonym przez wartość przesunięcia bie­

żącego (funkcja t a realizuje dzielenie akapitu bieżącego n a dwa oddzielne aka­

pity)-

Edelete_par (void)

Usuwa akapit (funkcja ta łączy akapit bieżący z następnym w jeden akapit).

Dodatkowe funkcje, o jak ie m ożna wzbogacić plik funkcji elem entarnych, opi­

sane są niżej (p. 4.7).

(21)

Funkcje elem entarne zm ieniają wartości poszczególnych zm iennych m aszyny edytorowej. I tak funkcje pobierające akapity do pola bieżącego n a d a ją wartości zm iennym c u r r e n t_ p a r i p a r _ le n g th . Funkcje zm iany wartości bieżącego przesu­

nięcia zm ieniają wartość zmiennej c u r r e n t _ o f f s e t . Podobnie funkcje m odyfiku­

jące zawartość akapitu bieżącego n ad ają wartość 1 znacznikowi m o d iiie d , a także zm ieniają wartość zmiennej p a r _ le n g th .

Zdefiniowane wyżej funkcje elem entarne nie są oczywiście całkowicie rozłącz­

ne. Np. funkcję E in c re m e n t_ o fis e t m ożna także zapisać jak o funkcję E s e t_ c u r- r e n t . o f f s e t ( c u r r e n t . o f f s e t + l ) . Podobnie je st z funkcjam i E w r it e _ s t r i n g i E w rite _ c h a r, E i n s e r t . s t r i n g i E i n s e r t . c h a r oraz E d e l e t e _ s t r i n g i E d ele- te _ c h a r . T y m niemniej takie zdefiniowanie funkcji jest wygodne. Np. w spom niana funkcja E in c re m e n t_ o fis e t będzie używ ana wielokrotnie, zwłaszcza przy wprowa­

dzaniu znaków czy przesuwaniu kursora w lewo lub w prawo o jeden znak (oczywi­

ście w konkretnej im plem entacji m ożna liczbę funkcji elem entarnych zredukować, nie zm ieniając ogólnej koncepcji).

Podane definicje funkcji elem entarnych są bardzo ogólne. Nie zakładam y nic o sposobie wewnętrznego działania funkcji elem entarnych. Jeśli przyjm iem y opisany łańcuchowy m odel orgnizacji tekstu, to np. funkcja E ta k e _ n e x t będzie wprowa­

dzała do pola pamięci akapit, którego adresem jest wyrażenie c u r r e n t_ p a r - > n e x t_

p a r (funkcja E ta k e _ p re v io u s — odpowiednio c u r r e n t_ p a r - > p r e v io u s _ p a r ) . Mo­

żna również przyjąć, że funkcja E tak e _ n ex t nadaje przesunięciu bieżącem u dom yśl­

nie wartość 0, a funkcja E ta k e _ p re v io u s nadaje tem u przesunięciu w artość rów ną długości pobranego akapitu (odpow iada to w pierwszym przypadku ustaw ieniu kursora na początku akapitu, w drugim — n a końcu). Podobnie w różny sposób m ogą działać inne funkcje, np. E in s e r t_ c h a r , k tó ra może autom atycznie zwięk­

szać wartość przesunięcia bieżącego o 1 (jest to spraw a im plem entacji) i funkcja E ta k e .c u r r e n t , której argum entem może być pełny adres znaku (funkcja oprócz pobrania akapitu n a pole bieżące będzie również nadawać odpow iednią w artość przesunięciu bieżącemu).

3.4. M o d y fik o w a n ie a k a p itu

Jak wspom niano wyżej, przy ładow aniu nowego ak ap itu do p o la bieżącego znacznikowi m o d iiie d je st nadaw ana wartość 0 (realizują to wszystkie funkcje po­

bierania akapitów ). K ażda z funkcji modyfikujących akapit bieżący nadaje znacz­

nikowi m o d iiie d wartość 1 (funkcje w stawiające i usuwające akapity również, przy czym tu sytuacja może być bardziej skomplikowana, zależnie od im plem entacji operacji dzielenia akapitu). N a tej podstaw ie funkcje zm ieniające bieżący akapit na inny m ogą dokonać ew entualnych zm ian w tekście (np. alokować nowy obszar dla akapitu, przepisać do niego now ą treść akapitu i zwolnić stary obszar). Może to także realizować sam a funkcja E le a v e _ c u rr e n t, k tó rą otoczenie aplikacyjne wyko­

rzystuje przed każdą zm ianą akapitu bieżącego (przynajm niej w ty m celu została ona wprow adzona). Jest ona szczególnie przy d atn a w sytuacji, gdy trzeba porzucić edycję akapitu, nie ładując do pola bieżącego innych akapitów tego tek stu , np. przy zm ianie jednego tekstu na inny.

(22)

M o d u l a r n y e d y t o r t e k s tó w 21 4 . O t o c z e n i e a p lik a c y j n e

Poniżej opisane są wybrane operacje edycji i sposób ich realizacji za pom ocą funkcji elem entarnych maszyny edytorowej.

4 .1 . F orm at te k s tu

Pojęcie form atu tekstu jest związane z jego wizualizacją. Ten sam tekst może być wyświetlony lub wydrukowany z szerokością 60 znaków, a kiedy indziej — z szerokością 80 znaków (form at może zresztą być podany w jednostkach długości).

Podobnie rzecz się m a z wyrównaniem i z innymi elem entam i form atow ania tekstu.

M aszyna edytorow a nie form atuje tekstu. Jest on form atow any przez funk­

cje otoczenia aplikacyjnego dopiero w momencie wyprow adzania go n a urządzenie wyjściowe, takie ja k drukarka czy m onitor ekranowy. Dzięki tem u oszczędza się znacznie czas przy operacjach zm ian form atu większej ilości tekstu — form atow a­

nych je st dokładnie tyle akapitów, ile akurat je st wyświetlonych n a ekranie.

Sam form at całego tekstu jest definiowany w otoczeniu aplikacyjnym , a fo rm at własny akapitu np. przez poszerzenie stru ktury PAR o opis form atu.

4 .2 . R e a liza c ja p o le c e ń ed y to r a

Wszystkie operacje realizowane przez użytkownika w edytorze tekstu z zało­

żenia składają się

• z sekwencji wywoływanych elementarnych funkcji m aszyny edytorowej,

• z operacji wizualizacji zmian, jeśli są one potrzebne (w tym operacji form ato­

wania).

Nie m a żadnych założeń co do kolejności operacji m odyfikacji tekstu i wi­

zualizacji zm ian. W dokonanej im plem entacji maszyny edytorowej (patrz p. 5.3) przyjęto, że funkcje elem entarne na bieżącym akapicie są pierw otne w stosunku do operacji wizualizacji zmian. Innym i słowy: najpierw będzie m odyfikowany sam tekst akapitu bieżącego w polu bieżącym, a dopiero potem skutek m odyfikacji wy­

św ietlany na ekranie. Operacje te m ożna zrealizować w kolejności odw rotnej, np.

przy wstawianiu znaków do tekstu znaki te wyświetlane są najpierw n a ekranie, a dopiero potem następuje wstawienie ich do akapitu bieżącego, przeform atow anie akapitu i stosownie do wyniku skorygowanie zawartości ekranu.

4 .3 . R u c h y k u rsora

Zmiany położenia kursora edytora polegają na zmianie adresu znaku w tekście.

Zm iana ta może się sprowadzać tylko do zwiększenia lub zmniejszenia wartości przesunięcia bieżącego w akapicie albo do zmiany akapitu bieżącego na inny. W pierwszym przypadku są to operacje:

Eincrement.offset () ; /* PRZESUNIĘCIE KURSORA 0 1 ZNAK W PRAWO */

Edecrement_offset() ; /* PRZESUNIĘCIE KURSORA 0 1 ZNAK W LEWO */

Eset_current_offset(current_offset +10) ;

/ * PRZESUNIĘCIE KURSORA 0 10 ZNAKÓW W PRAWO */

Jeśli przesunięcie kursora naprow adza go na początek następnego akapitu, należy wywołać funkcje:

Eleave_current();

(23)

EtaXe_next() ;

Eset_current_ofiset((OFFSET)O) ;

Podobnie polecenie przesunięcia tekstu o stronę (np. naciśnięcie klawisza [Pg­

Dn]) w ym aga wywołania funkcji E le a v e _ c u rr e n t, a następnie cyklicznego pobie­

ra n ia kolejnych akapitów (E tak e _ n ex t), form atow ania ich, by obliczyć ile linii za­

wierają, aż do chwili, gdy będzie ich tyle, ile wynosi wielkość strony n a ekranie (przykładow y proces przesuwania zawartości ekranu edytora jest opisany dokład­

niej w p. 4.4).

Podobnie m ożna definiować markery, tj. wybrane m iejsca w tekście. Definicja m arkera składa się po prostu z adresu znaku, z ew entualnym num erem m arkera.

Przejście do m arkera sprowadza się do sekwencji:

Eleave_current();

Etałce.current (marker.address);

Eset_current_of i set (marker_ofiset_in._par) ;

Dwie ostatnie operacje elem entarne da się zapisać krócej, jeśli przyjm ie się w spom nianą wyżej alternatyw ną wersję funkcji E ta k e .c u r r e n t , z pełnym adresem znaku jak o argum entem .

4 .4 . W sta w ia n ie zn ak u

O peracja w staw iania znaku _c” do akapitu w miejsce określone przez wartość bieżącego przesunięcia polega zazwyczaj n a realizacji funkcji elem entarnych:

Einsert_char(c);

Eincrement_ofiset();

Z sytuacją ta k ą m am y do czynienia gdy znak wprowadzany jest z klaw iatury, tak ja k pisze się n a m aszynie (kursor przesuw any je st o 1 znak w prawo). Otoczenie aplikacyjne je st przy tym odpowiedzialne za właściwe ustawienie kursora w edyto­

rze. Np. w razie potrzeby przesuwa kursor do początku następnej linii (tej operacji m aszyna edytorow a „nie widzi” — dla niej operacja przesuwania kursora sprow a­

dza się jedynie do zwiększenia wartości przesunięcia bieżącego). S ytuacja może być jed n ak bardziej złożona. Otoczenie aplikacyjne je st odpowiedzialne także za prze­

suwanie tekstu na ekranie. D la przykładu: jeśli w prow adzany jest znak n a koniec linii znajdującej się n a sam ym dole ekranu, a edytor w takiej sytuacji m a przesunąć zawartość ekranu o połowę linii w górę, m usi wykonać całą sekwencję operacji. O to przykładow a wersja takiej sekwencji:

• Porzucenie akapitu bieżącego (funkcja E le a v e _ c u rr e n t), który — jeśli zo­

sta ł zmodyfikowany, zostanie zapisany w pamięci (otoczenie aplikacyjne m usi przechować adres tego akapitu i w artość bieżącego przesunięcia w nim ).

• P obranie (funkcja Etake.current) n a pole bieżące akapitu, od którego m a być wyświetlony tekst n a ekranie. Jeśli zawartość ekranu m a być przesunięta o połowę w górę, to akapitem tym będzie akapit znajdujący się w połowie ekranu (np. 12 linii nad linią, gdzie znajduje się kursor). A kapit ten będzie teraz znajdował się w górnej linii ekranu).

• Ustawienie bieżącego przesunięcia (funkcja Eset_current_ofiset) na począ­

tek fragm entu tekstu akapitu, który m a być wyświetlony w górnej linii (może to być np. przesunięcie odpowiadające trzeciej linii akapitu, k tó ra stanie się pierwszą linią w oknie edycyjnym).

(24)

M o d u l a r n y e d y t o r t e k s t ó w 23

• W yświetlenie całego ekranu (kolejne wywołania funkcji Etake_next, jeśli wy­

świetlanych będzie kilka akapitów, form atow anie akapitów i wyświetlanie linii tekstu na ekranie).

• Po wyświetleniu zawartości ekranu uczynienie bieżącym (E ta k e _ c u rre n t) aka­

pitu, do którego były wprowadzane znaki (jego adres został przechowany przez funkcje otoczenia aplikacyjnego).

Przedstaw iony model przesuwania zaw artości ekranu (pom ijam y tu zupełnie problem stru k tu r danych wiążących ekran z akapitam i) nie jest oczywiście jedynym możliwym. Ilustruje on natom iast sposoby wykorzystywania funkcji elem entarnych maszyny edytorowej do realizowania takich operacji.

4.5. U su w a n ie zn ak u

O peracja usuw ania znaku z akapitu bieżącego z m iejsca położenia kursora sprowadza się do wykonania funkcji Edelete.char, przy czym jeśli wartość bie­

żącego przesunięcia jest rów na długości akapitu, usunięcie znaku równoważne jest usunięciu akapitu (akapit następny je st dołączany do bieżącego). Sytuację tę może rozpoznawać otoczenie aplikacyjne, a następnie wywoływać odpowiednie funkcje (może tę operację realizować również funkcja elem entarna Edelete_char). Po po­

łączeniu akapitów bieżące przesunięcie m a wartość taką, ja k ą m iało w chwili reali­

zowania operacji łączenia.

4 .6 . Z am ian a cią g u zn ak ów

O peracja zam iany w tekście ciągu znaków n a inny polega n a pobieraniu ko­

lejnych akapitów do pola bieżącego (funkcje Etake_next lub Etake_previous, w zależności od kierunku realizacji operacji) oraz — po znalezieniu ciągu spełniają­

cego kryteria podm iany — n a realizacji funkcji Edelete_string (usunięcie ciągu zamienianego) i Einsert.string (wstawienie ciągu zamieniającego):

Etake_next();/Etake_previous();

Edelete_string();

E i n s e r t _ s t r i n g ( ) ;

4 .7 . O p eracje n a b lok ach

Blok jest pojęciem zewnętrznym w stosunku do m aszyny edytorowej. Oznacza to, że „nie widzi” ona bloków, jedynie kolejne akapity. Jeśli w tekście m a być zdefiniowany blok, m ożna to zrobić na różne sposoby, np. podając adres pierwszego i ostatniego akapitu tworzącego blok albo wprowadzając wprost do tekstu specjalne znaki — lub sekwencje znaków — oznaczające początek i koniec bloku. Ale to rozwiązanie m a wadę: znaki te będą traktow ane przez m aszynę edytorow ą jak o norm alne znaki tekstu i tym sam ,™ ograniczą dopuszczalny zakres znaków sam ego tekstu (w istocie jest to spraw a otoczenia aplikacyjnego). Operacje usuw ania i kopiowania bloków będą realizowane za pom ocą funkcji elem entarnych m aszyny edytorowej: E d e l e te _ s tr in g . E i n s e r t _ s t r i n g , E d e le te _ p a r, E i n s e r t _ p a r itd .

UWAGA: Ten model realizacji operacji blokowych, jakkolwiek spójny, może być czasochłonny. Można z niego zrezygnować realizując w otoczeniu aplikacyjnym

(25)

pewne operacje nie korzystające z funkcji maszyny edytorowej (np. usuw anie ła ń ­ cucha akapitów i „wiązanie” dwóch pozostałych części). Może to w ydatnie skrócić czas realizacji operacji, ale oczywiście zmniejsza uniwersalność rozw iązania (część operacji edycyjnych nie jest realizowana przez maszynę edytorow ą, wiążąc otocze­

nie aplikacyjne bezpośrednio z tekstem ). Lepszym rozwiązaniem jest rozszerzenie zbioru funkcji elem entarnych maszyny edytorowej o operacje usuw ania i w staw ia­

n ia bloku (np. Edelete_block i EinsertJblock).

Podobnie będą traktow ane bloki drukarskie (ich in terp retacja należy do oto­

czenia aplikacyjnego).

4 .8 . In n e o p era cje e d y c y jn e

W szystkie operacje edycyjne n a tekście można z zasady zakodować za pom ocą sekwencji funkcji elem entarnych m aszyny edytorowej. P rzykładem m oże być pro­

ces weryfikacji poprawności ortograficznej tekstu. Funkcje weryfikacyjne p o bierają kolejne akapity tekstu (E tak e _ n ex t lub E ta k e _ p re v io u s, zależnie od kierunku we­

ryfikacji) wydzielają z akapitu bieżącego kolejne słow a i dokonują weryfikacji, się­

gając do słownika ortograficznego. Popraw ki w tekście wpowadzane są za pom ocą funkcji elem entarnych, tak ja k w przypadku zwykłej edycji.

4 .9 . P r a c a z k ilk om a te k s ta m i

M aszyna edytorowa „nie wie” nic o tym , jaki tek st przetw arza. M ożna go zmienić n a inny. Otoczenie aplikacyjne może przechowywać dowolną liczbę opi­

sów tekstów, przy czym z każdym tekstem musi być zw iązana inform acja o jego akapicie bieżącym (zmienne opisane w p. 3.2), tj. o ty m , w którym zn ajd u jesię kur­

sor. Zm ieniając adres akapitu bieżącego na adres odpowiedniego akapitu w innym tekście, otoczenie aplikacyjne może dowolnie zmieniać przetw arzane teksty.

5. P o d su m o w a n ie 5 .1 . Z a le ty rozw ią za n ia

Opisane wyżej rozwiązanie posiada szereg zalet. E d ytor m ożna łatw o rozsze­

rzyć o nowe opcje. Każde nowe polecenie sprowadza się do zakodow ania sekwencji odpow iednich funkcji elem entarnych. S tru k tu ra ed y to ra je st m o d u larn a (funkcje wizualizacji tekstu i wprowadzanych zmian, pobierania rozkazów, w yśw ietlania m enu, funkcje dyskowe itp. są niezależne od m aszyny edytorow ej). Dzięki tem u tę sam ą m aszynę edytorow ą m ożna wykorzystać w dowolnym pakiecie przetw a­

rzania tekstów. Trzeba jedynie zaprojektować i zrealizować odpow iednie funkcje aplikacyjne. Nawiązując do początkowego porów nania m aszyny edytorowej z sil­

nikiem samochodowym m ożna powiedzieć, że nowe otoczenia aplikacyjne są po p rostu nowymi środkam i lokomocji, w których m ożna zastosować ten sam silnik (sam ochód z inną karoserią, ja c h t motorowy itp.). M ożna też stosować ograni­

czone wersje m aszyny edytorowej. Np. dla program u przeglądania tek stu m aszyna edytorow a może zawierać tylko funkcje zmieniające bieżący ak ap it ( E t a X e _ i i r s t , E ta k e _ la s t, E tak e _ n ex t, E ta k e _ p re v io u s ). Innym przykładem m ogą być sy­

stem y tworzenia i obsługi słowników, encyklopedii, inform acji prasowych itp. W takich przypadkach jednostką przetw arzania słownika lub encyklopedii nie będzie

(26)

M o d u l a r n y e d y t o r t e k s tó w 25 akapit, a np. hasło złożone z kilku akapitów (samo hasło, jego opis, odnośniki, lite­

ra tu ra itp.) i opisane w odpowiedni sposób (otoczenie aplikacyjne może dla jednego hasła realizować edycję np. czterech kolejnych akapitów).

Form atowanie tekstu jest procesem dynam icznym i ograniczonym do obszaru tekstu, który je st wyprowadzany na urządzenie wyjściowe (do przeform atow ania całego tek stu wystarczy przeform atow ać tylko tyle tekstu, ile mieści się na ekranie).

Dzięki m odularnej strukturze edytora m ożna uzyskiwać — w system ach ope­

racyjnych, które na to pozwalają, np. O S /2 — równoległość przetw arzania kilku tekstów, za pom ocą jednej maszyny edytorowej, która obsługiwałaby kilka oto­

czeń aplikacyjnych jednocześnie. P rzykładem tego typu rozwiązania może być np.

urucham ianie w jednym otoczeniu aplikacyjnym konwersji zbioru tekstowego utw o­

rzonego w jednym standardzie liter polskich n a inny standard, w drugim otoczeniu

— weryfikacji ortograficznej drugiego tekstu, a w trzecim — normalnej edycji in­

nego tekstu, przy czym wszystkie otoczenia aplikacyjne współpracowałyby z jed n ą m aszyną edytorową.

5.2. W a d y ro z w ią za n ia

W adą opisanej koncepcji, przynajm niej w jej opisanej wyżej postaci, jest pew­

na uciążliwość w przetw arzaniu dużych akapitów. Zmiana akapitów w ym aga prze­

ładowania zawartości pola bieżącego, co powoduje, że przy przechodzeniu m ię­

dzy dużym i akapitam i może nastąpić pewne spowolnienie pracy edytora. P odobna trudność występuje przy posuwaniu się ku początkowi dużego akapitu — czyli przy zm niejszaniu wartości bieżącego przesunięcia — formatowany m usi być za każdym razem cały akapit. T rzeba bowiem uzyskać wartość przesunięcia, w którym zaczyna się poprzednia linia tekstu (tzw. formatow anie wsteczne). Rozwiązaniem może być przechowywanie dla każdego akapitu wartości przesunięć względem jego początku kolejnych wielokrotności pewnej stałej liczby linii, np. wartości przesunięć linii 50, 100, 150, 200, 250 itd. Form atowanie wsteczne byłoby realizowane wtedy w porcjach nie większych niż 50 linii. Koncepcja tak a wym agałaby odpowiedniego rozszerzenia stru k tu ry opisującej akapit PAR.

Trudności z dużym i akapitam i są typowe dla edytorów tekstu (np. edytory W ORD i W O RD STA R wyraźnie wolniej przesuwają na ekranie duże akapity niż krótsze).

W ady te m ożna zminimalizować lub wręcz usunąć przez wprowadzenie kilku buforów dla akapitu bieżącego (utrzym yw ać jednocześnie kilka pól bieżących, z których jedno byłoby aktywne). W ym agałoby to dodatkowego sparam etryzow ania funkcji elem entarnych maszyny edytorowej.

5.3. Im p le m e n ta c ja

W Instytucie Maszyn M atem atycznych zaimplementowano maszynę edyto­

rową, tworząc prosty edytor tekstowy. Użyto kom pilatora M IC R O SO FT C 7.0.

Maszyna edytorow a została zaim plem entow ana jak o m oduł biblioteczny. W syste­

mie operacyjnym DOS 5.0 m oduł ten był dołączany na etapie konsolidacji edytora.

W system ie O S /2 (wersja 2.0) przechowany był w bibliotece dynam icznej. Tekst był zorganizowany w dwojaki sposób:

• w łańcuch ze wskaźnikami na następny i poprzedni element w łańcuchu, tak ja k zdefiniowano wyżej,

(27)

• w tzw. model bąbelkowy, w którym w pamięci operacyjnej przechowywane są tylko akapity modyfikowane (akapity niezmodyfikowane pobierane są z pliku).

Oczywiście sam a im plem entacja maszyny edytorowej nie jest rów noznaczna ze stworzeniem pełnego edytora tekstów . W ym aga on utw orzenia otoczenia apli­

kacyjnego (funkcje obsługujące m enu, form atujące tekst, realizujące operacje na blokach wierszowych i kolumnowych, przeszukujące tekst i drukujące go itp .). Do­

piero te opcje umożliwiają pełną edycję tekstu i czynią edytor atrakcyjnym dla użytkownika. T y m niemniej zastosow anie koncepcji m aszyny edytorowej um ożli­

wia łatw ą i przejrzystą im plem entację tych opcji, a także przyszły rozwój edy to ra i jego przenoszenie do różnych środowisk systemowych.

L iteratu ra

[1] B. W. Kernighan, D. M. R itchie, Język C, W N T, W arszawa, 1988.

[2] M. J. Rochkind, Advanced C Program m ing for Displays, Prentice Hall, 1988.

Cytaty

Powiązane dokumenty

Do najczęstszych zaliczono zaburzenia zachowania (44%), zaburzenia lękowe (42%) i tiki (26%) [...] u osób z zespołem Aspergera rozpoznaje się aż 80% innych,

Jeśli bowiem krew kozłów i cielców oraz popiół z krowy, którymi skrapia się zanieczyszczonych, sprawiają oczyszczenie ciała, to o ile bar- dziej krew Chrystusa, który przez

Główne dane techniczne ekspresów BCC01 – BCC02.

Etap ten jest dosyć skomplikowany, ponieważ wymaga bardzo szczegółowej analizy konkretnego procesu spedycyjnego pod względem ryzyka związanego z innymi zdarzeniami;.. - pom

WYNAJMUJĄCY oświadcza, że jest właścicielem lokalu użytkowego położonego w Katowicach przy ul. Wynajmujący oświadcza, że oddaje w najem lokal, o którym mowa w §

N a tej podstaw ie funkcje zm ieniające bieżący akapit na inny m ogą dokonać ew entualnych zm ian w tekście (np. alokować nowy obszar dla akapitu, przepisać do

Natomiast to, czego musiałaś się nauczyć w drodze zdobywania wiedzy i treningu - to umiejętności (kompetencje) twarde, czyli specyficzne, bardzo określone,

 rozwiązuje elementarne zadania tekstowe z zastosowaniem mnożenia ułamków przez liczby naturalne..