|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7680 (0x1e00)
Types: TextFile
Names: »let7txt«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »let7txt«
let7=set 1
scope day let7
let7=algol list.no
CD 82-09-16
fpparametre:
lw.60 (liniebredde)
min.1 (det minimale antal tegn før deletegnet <->)
begin
<*Program til skærmstyret tekstjustering af almindelig tekst
indeholdende orddelingstegnet <->. Justeringen foretages ved
linieombrydning inden for en paragraf, der er defineret som
tekst efterfulgt af <nl><nl>, <nl><sp> eller <nl><.>, hvor
sidste mulighed omtales senere.
Linieombrydningen styres af fpparametrene <lw> og <min>,
hvor <lw> angiver det maksimale antal tegn pr. linie, og
<min> angiver det minimale antal tegn foran orddelingstegnet
<->, hvis tekstjusteringen kræver orddelinger.
Det ord der skal deles udskrives på skærmen som f.eks:
konstant i o n p o l i t a nerinde
9 8 7 6 5 4 3 2 1 0
=
og der svares med et tal svarende til orddelingens
placering. Svares med et negativt tal f.eks.-2 deles ordet
ved 2 og værdien af <min> gøres stor, således at resten af
tekstjusteringen foretages uden orddelinger.
Paragrafafslutningen <nl><.> gør det muligt at ændre værdien
af <min> i teksten, hvis der f.eks. er indsat et stykke
tekst i en i forvejen indsat tekst. Værdien af <min> ændres
til x ved at skrive .min.x først på en linie.
Eksempel 1:
Området tekst1 indeholder en ujusteret tekst der skal
justeres og lægges i området tekst2:
tekst2=let7 tekst1
Da hverken <lw> eller <min> er angivet ved kaldet fås
standardværdierne 60 og 2.
Eksempel 2:
tekst2 indeholder følgende:
justeret tekst
.min.2
ujusteret tekst
.min.99
justeret tekst
Den ujusterede tekst justeret og hele den justerede tekst
lægges i tekst1:
tekst1=let7 tekst2 min.99 *>
integer i,j,linelength,lw,pointer,old,new,newsema,
oldsema,reduce,delpointer,wl,spl,mode,minchar;
boolean specchar, normchar;
real array field raf;
integer array I,J(1:255);
long array IFILE,OFILE(1:3);
zone zi,zo(128,1,stderror);
procedure error(num); value num; integer num;
begin
write(out,<:error :>,num);
goto FIN;
end;
procedure wordwindow;
begin
integer j,j1,k;
connectcuri(<:c:>);
k:=if I(1)=32 then 2 else 1;
for j:=k step 1 until i-1 do
begin
if j=k then write(out,"sp",1);
if j<=delpointer and j>k and delpointer-j<=9
then write(out,"sp",1);
write(out,false add I(j),1);
end;
write(out,"nl",1);
k:=delpointer-k;
for j:=k step -1 until 0 do
begin
if j<=9 then write(out,<<d>,j,"sp",1) else
write(out,"sp",1);
if j=10 then write(out,"sp",1);
end;
if k>9 then k:=9;
j1:=readil(<::>,-k,k);
if j1<0 then
begin
j1:=-j1; minchar:=99;
end;
delpointer:=delpointer-j1;
if delpointer>2 then J(delpointer):=1;
end;
integer procedure speclength;
begin
integer newsema,oldsema,reduce,j;
oldsema:=0; newsema:=0; reduce:=0;
for j:=1 step 1 until i-1 do
begin
if I(j)=35 or I(j)=36 then
begin
newsema:= if I(j)=35 then newsema-1 else newsema+1;
if abs(newsema) > abs(oldsema) then reduce:=reduce+1
else reduce:=reduce+2;
oldsema:=newsema;
end;
if j>1 then
begin
if I(j)<>35 and I(j)<>36 and I(j-1)<>35
and I(j-1)<>36 then
oldsema:=newsema:=0;
end;;
end;
speclength:=spl:=i-1-reduce;
end;
procedure move;
begin
integer j;
for j:=2 step 1 until i-1 do
begin
I(j-1):=I(j); J(j-1):=J(j);
end;
end;
procedure ww;
begin
integer j;
for j:=1 step 1 until i-1 do
begin
if J(j)>1 then
write(zo,<:-:>,"nl",1);
write(zo,false add I(j),1);
end;
end;
procedure clear;
begin
cleararray(I); cleararray(J);
normchar:=false; specchar:=false;
end;
procedure writeword;
begin
integer j;
if linelength>= lw then
begin
move; linelength:=0; i:=i-1; write(zo,"nl",1);
end;
linelength:=if specchar then linelength+speclength
else linelength+i-1;
if linelength<=lw then
begin
ww;
clear;
I(1):=32; i:=2;
end else
begin
if specchar then
begin
I(1):=10; ww;
clear; I(1):=32; i:=2; specchar:=false;
linelength:=spl-1;
end else
begin
j:=i-1-(linelength-lw);
if j=0 then j:=1 else
begin
delpointer:=j;
if j>minchar and J(j)=0 then wordwindow;
end;
for j:=j step -1 until 1 do
begin
if j>0 then
begin
if J(j)>0 or j=1 then
begin
if j=1 and I(1)<>32 then else
if J(j)>0 then J(j):=2 else I(1):=10;
ww;
linelength:=i-j;
if j=1 then linelength:=linelength-1;
clear;
I(1):=32; i:=2;
goto LBL2;
end;
end;
end;
if j=0 then error(3);
end;
LBL2:
end;
end;
raf:=0;
cleararray(IFILE); readinfp(IFILE.raf,1);
open(zi,4,IFILE,0);
cleararray(OFILE); readlsfp(OFILE.raf);
open(zo,4,OFILE,0);
clear;
i:= 1; linelength:= 0; old:= 0;
readifp(<:lw:>,lw,60);
readifp(<:min:>,minchar,2);
minchar:= if minchar<2 then 2 else minchar+1;
if lw<minchar+2 then lw:=minchar+2;
specchar:=normchar:=false;
for i:= i while old<>25 do
begin
readchar(zi,new);
if i>1 then
begin
if old=45 and new=10 and i>2 then
begin
if -,((i=3 and I(1)=32) or I(i-2)=45) then
begin
i:=i-1; J(i):=1; goto LBL;
end;
end;
if old=10 and (new=10 or new=32 or new=12 or new=46 or new=25) then
begin
if J(i)=1 then
begin
J(i):=0; I(i):=45; i:=i+1; writeword;
end;
linelength:=0; i:=1; write(zo,"nl",1);
goto LBL0;
end;
if new=10 or (new=32 and normchar) or (new=25 and i>1) then
begin
if J(i)=1 then
J(i):=0;
writeword; goto LBL;
end;
goto LBL1;
end;
LBL0:
if i=1 then
begin
if new=10 or new=12 then
begin
write(zo,false add new,1); goto LBL;
end;
if new=46 then
begin
old:=new; readchar(zi,new);
if new=77 or new=109 then
begin
for i:=i while new<>46 do readchar(zi,new);
read(zi,minchar);
minchar:=if minchar<2 then 2 else minchar+1;
end else
begin
write(zo,false add old,1); write(zo,false add new,1);
for i:=i while new<>10 do
begin
readchar(zi,new); write(zo,false add new,1);
end;
end;
goto LBL;
end;
end;
LBL1:
I(i):=new; i:=i+1;
if new=35 or new=36 then specchar:=true;
if new<>32 then normchar:=true;
LBL:
old:=new;
end;
FIN:write(zo,"em",1);
close(zi,true); close(zo,true);
end
▶EOF◀