home *** CD-ROM | disk | FTP | other *** search
- program zeichensatz;
-
- type edfield=array[1..8,1..8]of boolean;
- valfield=array[1..8]of byte;
-
-
- const esc=$1b;
- return=13;
-
- var c,d:char;
- str:string;
- texnta,offsa:integer;
- buchst:char;
- external function @bdos(number:integer;parm:word):integer;
-
- procedure editval (var gesetzt:edfield;var tab:valfield);
-
- const stx=20;
- sty=8;
- lenx=8;
- leny=8;
-
- var
- xko,yko,xp,yp:integer;
- x,y:integer;
-
-
- begin
- auswahl;
- clear;
- wrtext;
- scrpicture;
- if c='1' then
- for x:=1 to 8 do
- for y:=1 to 8 do
- gesetzt[x,y]:=false
- else
- begin
- readbitm(tab,d);
- for y:=1 to 8 do
- for x:=8 downto 1 do
- begin
- setcrsr(stx+8-x,sty+y-1);
- if (tab[y] div powers(2,x-1))>=1 then
- begin
- write('X');
- gesetzt[x,y]:=true
- end
- else
- begin
- write(' ');
- gesetzt[x,y]:=false
- end;
- tab[y]:=tab[y]mod powers(2,x-1)
- end
- end;
-
-
- xko:=stx;
- yko:=sty;
- xp:=8;
- yp:=1;
- repeat
- repeat
- setcrsr(xko,yko);
- read(c);
- setcrsr(xko,yko);
- write('X');
- until((c='s')or(c='d')or(c='e')or(c='x')or(c='q')or(c='w')or(c='r'));
- case c of
- 's': if xp<8 then
- begin
- setcrsr(xko,yko);
- if gesetzt[xp,yp] then
- write('X')
- else
- write(' ');
- xp:=xp+1;
- xko:=xko-1
- end;
- 'd': if xp>1 then
- begin
- setcrsr(xko,yko);
- if gesetzt[xp,yp] then
- write('X')
- else
- write(' ');
- xp:=xp-1;
- xko:=xko+1
- end;
- 'e': if yp>1 then
- begin
- setcrsr(xko,yko);
- if gesetzt[xp,yp] then
- write('X')
- else
- write(' ');
- yp:=yp-1;
- yko:=yko-1
- end;
- 'x': if yp<8 then
- begin
- setcrsr(xko,yko);
- if gesetzt[xp,yp] then
- write('X')
- else
- write(' ');
- yp:=yp+1;
- yko:=yko+1
- end;
- 'q': gesetzt[xp,yp]:=true;
-
- 'r': gesetzt[xp,yp]:=false
-
- end;
- setcrsr(xko,yko);
- write('X');
- setcrsr(xko,yko);
- until(c='w')
- end;
-
- procedure readbitm(var a:valfield;d:char);
-
- type chfile=file of char;
-
- var
- offsa:integer;
- dest:chfile;
- k:integer;
- result:integer;
-
- begin
- offsa:=ord(d)*16+4096;
- assign(dest,'characte.hlp');
- reset(dest);
- if ioresult=255 then
- begin
- write(' cannot read file ! ');
- exit
- end;
- for k:=0 to 7 do
- begin
- seekread(dest,offsa+k);
- a[k+1]:=dest^
- end;
- close(dest,result);
- if result=255 then
- write(' error in closing of file ! ')
- end;
-
- procedure clear;
- begin
- write(chr(esc),':')
- end;
-
- procedure setcrsr(x,y:byte);
- begin
- write(chr(esc),'=',chr(y-1+32),chr(x-1+32))
- end;
-
- function hexstr2(str:string):byte;
- var wert:byte;
- begin
- wert:=0;
- if (str[1]>='0')and(str[1]<='9')then
- wert:=16*(ord(str[1])-ord('0'))
- else
- wert:=16*(ord(upper(str[1]))-ord('A')+10);
- if (str[2]>='0')and(str[2]<='9')then
- wert:=wert+ord(str[2])-ord('0')
- else
- wert:=wert+(10+ord(upper(str[2]))-ord('A'));
- hexstr2:=wert
- end;
-
- procedure trval(var tab:valfield;gesetzt:edfield);
- var i,j:integer;
- wert:byte;
-
- begin
- for j:=1 to 8 do
- begin
- wert:=0;
- for i:=1 to 8 do
- begin
- if (gesetzt[i,j]) then
- wert:=wert+powers(2,i-1);
- end;
- tab[j]:=wert;
- end
- end;
-
- procedure changef(tab:valfield;c:char);
- type chfile=file of char;
- var result,k,offsa:integer;
- dest:chfile;
- begin
- offsa:=(ord(c))*16+4096;
- assign(dest,'characte.hlp');
- reset(dest);
- if ioresult=255 then
- begin
- setcrsr(5,20);
- write('cannot open file ! ');
- exit
- end;
- for k:=0 to 7 do
- begin
- dest^:=tab[k+1];
- seekwrite(dest,offsa+k);
- end;
- close(dest,result);
- if result=255 then
- begin
- setcrsr(5,21);
- write('error in closing file ! ')
- end;
- writeln;writeln;
- end;
- procedure scrpicture;
- begin
- setcrsr(19,7);write('----------');
- setcrsr(19,16);write('----------');
- setcrsr(19,8);write('|');setcrsr(28,8);write('|');
- setcrsr(19,9);write('|');setcrsr(28,9);write('|');
- setcrsr(19,10);write('|');setcrsr(28,10);write('|');
- setcrsr(19,11);write('|');setcrsr(28,11);write('|');
- setcrsr(19,12);write('|');setcrsr(28,12);write('|');
- setcrsr(19,13);write('|');setcrsr(28,13);write('|');
- setcrsr(19,14);write('|');setcrsr(28,14);write('|');
- setcrsr(19,15);write('|');setcrsr(28,15);write('|');
- end;
-
- procedure alter;
- type crblock=array[0..35]of byte;
- var flcbl:crblock;
- value:integer;
- gesetzt:edfield;
- tab:valfield;
- c:char;
- begin
- flcbl[0]:=0;flcbl[1]:=((ord('C')) & 127);flcbl[2]:=((ord('H')) & 127);
- flcbl[3]:=((ord('A')) & 127);flcbl[4]:=((ord('R')) & 127);
- flcbl[5]:=((ord('A')) & 127);flcbl[6]:=((ord('C')) & 127);
- flcbl[7]:=((ord('T')) & 127);flcbl[8]:=((ord('E')) & 127);
- flcbl[9]:=((ord('H')) & 127);flcbl[10]:=((ord('L')) & 127);
- flcbl[11]:=((ord('P')) & 127);flcbl[12]:=0;flcbl[34]:=0;
- value:=@bdos(17,wrd(addr(flcbl)));
- if value=255 then
- begin
- GrFOn;
- GrFOff;
- end;
- repeat
- editval(gesetzt,tab);
- trval(tab,gesetzt);
- changef(tab,buchst);
- setcrsr(5,22);
- write('change another character ? (y/n) ');
- read(c);
- until(c='n');
- GrSOn;
- GrFOff;
- end;
-
- function powers(base,exponent:integer):integer;
- var index,wert:integer;
- begin
- if exponent=0 then
- begin
- powers:=1;
- end
- else
- begin
- if exponent=1 then
- begin
- powers:=base;
- end
- else
- begin
- wert:=base;
- for index:=2 to exponent do
- begin
- wert:=wert*base;
- end;
- powers:=wert;
- end
- end
- end;
-
- procedure oldone;
- type crblock=array[0..35]of byte;
- var flcbl:crblock;
- value:integer;
- begin
- flcbl[0]:=0;flcbl[1]:=((ord('C')) & 127);flcbl[2]:=((ord('H')) & 127);
- flcbl[3]:=((ord('A')) & 127);flcbl[4]:=((ord('R')) & 127);
- flcbl[5]:=((ord('A')) & 127);flcbl[6]:=((ord('C')) & 127);
- flcbl[7]:=((ord('T')) & 127);flcbl[8]:=((ord('E')) & 127);
- flcbl[9]:=((ord('H')) & 127);flcbl[10]:=((ord('L')) & 127);
- flcbl[11]:=((ord('P')) & 127);flcbl[12]:=0;flcbl[34]:=0;
- value:=@bdos(17,wrd(addr(flcbl)));
- if value=255 then
- begin
- clear;writeln('no file characte.hlp');
- exit
- end
- else
- GrSOn;
- GrFOff;
- end;
-
- procedure stopp;
- var c:char;
- begin
- clear;writeln;writeln;
- writeln('should file be written on boot-disk ? ');
- repeat
- read(c);
- until ((c='J')or(c='j')or(c='N')or(c='n'));
- if ((c='j')or(c='J')) then
- begin
- writeln;writeln;
- writeln('insert boot-disk into drive a: ');
- write('ready ? ');
- repeat
- read(c);
- until (c<>' ');
- transform;
- end
- end;
- procedure transform;
- type chfile=file of char;
- poac=array[1..2048]of char;
- var source,dest:string;
- quit:boolean;
- a,b:chfile;
- result,i:integer;
- buf:poac;
- begin
- dest:='a:characte.hlp ';source:='characte.hlp ';
- assign(a,source);
- reset(a);
- if ioresult=255 then
- begin
- writeln('cannot open file ',source);
- exit
- end;
- open(b,'A:CHARACTE.HLP',result);
- if result=255 then
- begin
- writeln('cannot open file ',dest);
- exit
- end;
- i:=0;
- repeat
- blockread(a,buf,result,sizeof(buf),i);
- if result=0 then
- begin
- blockwrite(b,buf,result,sizeof(buf),i);
- i:=i+sizeof(buf) div 128
- end
- else
- quit:=true;
- until quit;
- close(b,result);
- if result=255 then
- writeln('cannot close file ');
- end;
-
-
- procedure GrFOn;
- var erg:integer;
- begin
- erg:=@bdos (153,wrd(0));
- end;
-
- function upper(a:char):char;
- begin
- if (ord(a)>=97)and(ord(a)<=122)then
- upper:=chr(ord(a)-32)
- else
- upper:=a
- end;
-
- procedure GrSOn;
- var erg:integer;
- begin
- erg:=@bdos (154,wrd(0));
- end;
-
- procedure GrFOff;
- var erg:integer;
- begin
- erg:=@bdos (155,wrd(0));
- end;
-
- procedure auswahl;
- var
- cond1,cond2,cond3,cond4,cond5,cond6,cond7,cond8:boolean;
- begin
- clear;
- setcrsr(10,5);
- write(' 1) ASCII value ');
- setcrsr(10,9);
- write(' 2) HEX value ');
- setcrsr(10,12);
- write(' Ihre Wahl : ');
- repeat
- setcrsr(32,12);
- read(c);
- if (c<>'1')or(c<>'2')then
- begin
- setcrsr(32,12);
- write(' ');
- setcrsr(32,12)
- end;
- until (c='1')or(c='2');
- setcrsr(10,15);
- write(' character : ');
- case c of
- '1': begin
- setcrsr(22,15);
- read (d)
- end;
- '2': begin
- repeat
- setcrsr(22,15);
- write(' ');
- setcrsr(22,15);
- read(str);
- cond1:=(str[1]>='0')and(str[1]<='9');
- cond2:=(str[1]>='a')and(str[1]<='f');
- cond3:=(str[1]>='A')and(str[1]<='F');
- cond4:=(str[2]>='0')and(str[2]<='9');
- cond5:=(str[2]>='a')and(str[2]<='f');
- cond6:=(str[2]>='A')and(str[2]<='F');
- cond7:=cond1 or cond2 or cond3;
- cond8:=cond4 or cond5 or cond6;
- until ((length(str)=2)and(cond7 and cond8));
- end
- end;
- if c='2' then
- d:=chr(hexstr2(str));
- buchst:=d;
- clear;
- setcrsr(10,3);
- write(' 1) start with empty character bit map ');
- setcrsr(10,7);
- write(' 2) start with old character bit map ');
- setcrsr(10,9);
- write(' choose : ');
- repeat
- setcrsr(43,9);
- read(c);
- if (c<>'1')or(c<>'2')then
- begin
- setcrsr(43,9);
- write(' ')
- end;
- until (c='1')or(c='2');
- end;
-
- procedure wrtext;
-
- begin
- clear;
- setcrsr(5,2);write(' s .. left ');
- setcrsr(5,3);write(' d .. right ');
- setcrsr(5,4);write(' e .. up ');
- setcrsr(5,5);write(' x .. down ');
- setcrsr(5,6);write(' q .. define ');
- setcrsr(5,7);write(' r .. delete ');
- setcrsr(5,8);write(' w .. save ');
- end;
-
-
- begin
- repeat
- clear;
- writeln;writeln;
- write('changing the character set ');
- writeln;writeln;
- writeln(' 1.) read in the old character set ');
- writeln;writeln;
- writeln(' 2.) change the character set ');
- writeln;writeln;
- writeln(' 3.) exit to CP/M ');
- writeln;writeln;
- write('choose : ');
- repeat
- read(c);
- until((c='1')or(c='2')or(c='3'));
- case c of
- '1':oldone;
- '2':alter;
- '3':stopp;
- end;
- until (c='3');
- end.
-
-