(******* LOCO2z.INC Includedatei zu LOCOCONZ.PAS *******) PROCEDURE FormatdateiEinlesen; VAR a,b,c : integer; Nochmal : boolean; Formatdatei : file OF MiniString; St : MiniString; BEGIN Assign(Formatdatei,'A:LOCOCON.FRM'); REPEAT {$I-} reset(Formatdatei); {$I+} IF IOresult <> 0 THEN BEGIN Nochmal:=True; ClrScr; Kasten(10,20,70,5); gotoxy(12,22); write('Fehler! Formatdatei LOCOCO.FRM '); write('in Laufwerk A: nicht gefunden'); gotoxy(20,29); write(#7,'iederholen oder gnorieren ? '); read(KBD,Eingabe); IF upcase(Eingabe)='I' THEN Nochmal:=False; END ELSE BEGIN Nochmal:=False; FOR a:=0 TO 3 DO FOR b:=0 TO 9 DO read(Formatdatei,CodeTabelle[a,b]); read(Formatdatei,St); Val(St,SIOWahl,c); read(Formatdatei,St); Val(St,PTRWahl,c); END; UNTIL Nochmal=False; close(Formatdatei); END; PROCEDURE FormatdateiSpeichern; VAR a,b : integer; Formatdatei : file OF MiniString; St : MiniString; BEGIN ClrScr; Kasten(8,10,74,8); gotoxy(12,13); write('Die geaenderten Format- oder Steuersequenzen '); write('werden abgespeichert'); gotoxy(12,15); write('Bitte die Programm-Diskette in A: einlegen '); write('und druecken'); readln; Assign(Formatdatei,'A:LOCOCON.FRM'); rewrite(Formatdatei); FOR a:=0 TO 3 DO FOR b:=0 TO 9 DO write(Formatdatei,CodeTabelle[a,b]); Str(SIOWahl,St); write(Formatdatei,St); Str(PTRWahl,St); write(Formatdatei,St); close(Formatdatei); END; PROCEDURE SteuerzeichenAendern; VAR a,b,c,d,e,f : integer; SteuerDatei : file OF MiniString; St : MiniString; BEGIN ClrScr; a:=1; Kasten(1,1,89,29); REPEAT gotoxy(20,3);write('F O R M A T << ',a,' >> fuer '); CASE a OF 0 : write('JOYCE und SIO/CEN '); 1,2 : write('SIO/CEN-Schnittstelle'); 3 : write('JOYCE-Drucker '); END; gotoxy(20,7); write('Folgende Steuersequenzen sind gespeichert:'); gotoxy(20,9);write('0 = Doppeldruck ein'); gotoxy(20,10);write('1 = Doppeldruck aus'); gotoxy(20,11);write('2 = Unterstreichen ein'); gotoxy(20,12);write('3 = Unterstreichen aus'); gotoxy(20,13);write('4 = Kursiv ein'); gotoxy(20,14);write('5 = Kursiv aus'); gotoxy(20,15);write('6 = Proportionalschrift'); gotoxy(20,16);write('7 = 10 Zeichen/Zoll'); gotoxy(20,17);write('8 = 12 Zeichen/Zoll'); gotoxy(20,18);write('9 = 15 Zeichen/Zoll'); gotoxy(20,20);write('N = naechstes Format'); gotoxy(20,22);write('X = Menue verlassen'); FOR b:=0 TO 9 DO BEGIN gotoxy(46,9+b);write(': '); FOR d:=1 TO 6 DO write(ord(CodeTabelle[a,b][d]):4); END; gotoxy(20,25); write('Anwaehlen und Eingabe '); write('in DEZ oder HEX($) mit '); read(KBD,Eingabe); Val(Eingabe,b,c); IF (c=0) AND (b IN [0..9]) THEN BEGIN St:=''; gotoxy(48,9+b); write('> '); gotoxy(50,9+b); FOR d:=1 TO 6 DO BEGIN e:=0; read(e); St:=St+chr(e); write(' '); END; CodeTabelle[a,b]:=St; FormatGeaendert:=True; END; IF upcase(Eingabe)='N' THEN a:=succ(a); IF a=4 THEN a:=0; UNTIL upcase(Eingabe)='X'; END; PROCEDURE DirectoryLesen; VAR FCB : ARRAY[0..31] OF char; Puffer : ARRAY[0..127] OF char; Name : string[17]; Eingabe : char; st : string[1]; z,sz,zz : byte; BEGIN ClrScr; Kasten(10,2,70,6); gotoxy(15,4); write('Bitte Bezugslaufwerk waehlen A, B oder M : '); read(KBD,Laufwerk); Laufwerk:=upcase(Laufwerk); IF Laufwerk IN ['A','B','M'] THEN ELSE Laufwerk:='A'; write(Laufwerk); DriveNr:=(ord(Laufwerk)-65); IF Laufwerk IN ['A','B'] THEN BEGIN Kasten(10,9,70,6); gotoxy(15,11); write('Diskette in Laufwerk << '); write(Laufwerk,' >> einlegen !'); gotoxy(15,12); write(' druecken oder mit '); write('zurueck zum Haupt-Menue '); REPEAT read(KBD,Eingabe) UNTIL upcase(Eingabe) IN ['Z',#13]; IF upcase(Eingabe)='Z' THEN EXIT; END; DirZahl:=0; FCB:= '????????????'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0; BDOS(13); {Diskettensystem zuruecksetzen} BDOS(14,DriveNr); {Bezugslaufwerk festlegen} BDOS(26,Addr(Puffer)); {Datenuebergabe-Adresse festlegen} z:=BDOS(17,Addr(FCB)); {Ersten Eintrag holen} WHILE z<>255 DO BEGIN IF Puffer[z*32]<#128 THEN BEGIN Name:=copy(Puffer,z*32+2,11); insert('.',Name,9); User:=ord(Puffer[z*32]) AND 127; IF (((User<8)AND(ord(Name[11])<128))AND (copy(Name,10,3)<>'GRP')) THEN BEGIN {ohne SYS-, Trans und GRP-Dateien} DirZahl:=succ(DirZahl); IF Dirzahl>MaxDir THEN EXIT; Str(User:1,st); Name:='<'+st+'>: '+Name; DirFeld[DirZahl]:=Name; END; END; z:=BDOS(18); {Naechsten Eintrag holen} END; DirGelesen:=True; END; FUNCTION QuelldateinameHolen : boolean; VAR zzmax,szmax, zz,sz : byte; st : string[1]; BEGIN ClrScr; sz:=0; zz:=0; Quelldateiname:=''; QuelldateinameHolen:=False; gotoxy(1,1); write('Im Laufwerk: ',Laufwerk,' sind unter der '); write('vorangestellten USER-Nummer gespeichert:'); gotoxy(1,4); FOR n:=1 TO Dirzahl DO BEGIN gotoxy(20*((n-1) MOD 4)+6,((n-1) DIV 4)+4); write(DirFeld[n]); END; gotoxy(8,30); write('Gewuenschte Datei anwaehlen und RETURN druecken'); write(' - oder mit zurueck'); gotoxy(6,4); LowVideo; write(DirFeld[1],' '); NormVideo; REPEAT REPEAT read(KBD,Eingabe); UNTIL Eingabe IN [#6,#1,#30,#31,#13,'z','Z']; zzmax:=((DirZahl-1) DIV 4); szmax:=((DirZahl-1) MOD 4); gotoxy(20*sz+6,4+zz); write(DirFeld[zz*4+sz+1],' '); CASE Eingabe OF #6 : IF((zz0 THEN sz:=sz-1; #30 : IF (((zz+1)0 THEN zz:=zz-1; 'z','Z': EXIT; END; gotoxy(20*sz+6,4+zz); LowVideo; write(DirFeld[zz*4+sz+1],' '); NormVideo; UNTIL Eingabe=#13; FOR n:=5 TO 17 DO BEGIN st:=copy(DirFeld[zz*4+sz+1],n,1); IF st<>#32 THEN Quelldateiname:=Quelldateiname+st; END; st:=copy(DirFeld[zz*4+sz+1],2,1); Val(st,User,n); QuelldateinameHolen:=True; END; PROCEDURE QuelldateiOeffnen; BEGIN BDOS(32,User); {Userbereich anwaehlen} Assign(Quelldatei,Quelldateiname); {$I-} reset(Quelldatei); {$I+} IF IOresult <> 0 THEN BEGIN close(Quelldatei); DateiVorhanden:=False; ClrScr; Kasten(15,20,60,7); gotoxy(20,22); write('Fehler ! '); write('Datei: ',Quelldateiname,' nicht gefunden'); gotoxy(28,24); write('Wurde die Diskette gewechselt ???'); Weiter; END ELSE DateiVorhanden:=True; END; PROCEDURE ZieldateinameHolen; BEGIN ClrScr; Kasten(5,1,80,5); gotoxy(10,3); write('Bitte Dateiname der Ziel-Datei eingeben: '); readln(Zieldateiname); END; FUNCTION OhneUmlaut(VAR b:byte):MiniString; BEGIN CASE b OF 91 ,208: OhneUmlaut:='Ae'; 92 ,211: OhneUmlaut:='Oe'; 93 ,212: OhneUmlaut:='Ue'; 123,240: OhneUmlaut:='ae'; 124,243: OhneUmlaut:='oe'; 125,244: OhneUmlaut:='ue'; 126,186: OhneUmlaut:='ss'; ELSE OhneUmlaut:=chr(b); END; END; FUNCTION UmlautASC(VAR b:byte):MiniString; BEGIN CASE b OF 208: UmlautASC:=#91; 211: UmlautASC:=#92; 212: UmlautASC:=#93; 240: UmlautASC:=#123; 243: UmlautASC:=#124; 244: UmlautASC:=#125; 186: UmlautASC:=#126; ELSE UmlautASC:=chr(b); END; END; FUNCTION UmlautLOC(VAR b:byte):MiniString; BEGIN CASE b OF 91 : UmlautLOC:=#208; 92 : UmlautLOC:=#211; 93 : UmlautLOC:=#212; 123: UmlautLOC:=#240; 124: UmlautLOC:=#243; 125: UmlautLOC:=#244; 126: UmlautLOC:=#186; ELSE UmlautLOC:=chr(b); END; END; PROCEDURE FormatWahl; VAR e,f : integer; SteuerDatei : file OF MiniString; St : MiniString; BEGIN ClrScr; write(CursorAus); Menuebild('F O R M A T - M E N U E', 'LOCOSCRIPT-Dateien sollen wie folgt ausgegeben werden:', '0 = SIO/CEN mit Format 0 (o. Steuerzeichen, nur Text)', '1 = SIO/CEN mit Format 1 (z.B. EPSON-kompatibel)', '2 = SIO/CEN mit Format 2 (z.B. Typenrad)', '', '3 = Joyce-Drucker ohne Steuerzeichen, nur Text', '4 = Joyce-Drucker mit Schriftartwechsel + Hervorheben', 'X = Menue verlassen'); REPEAT IF PTRWahl=0 THEN f:=4 ELSE f:=5; FOR e:=0 TO 5 DO BEGIN gotoxy(19,2*e+11); IF ((e=SIOWahl) OR (e=f)) THEN write('==>') ELSE write(' '); END; read(KBD,Eingabe); IF Eingabe IN ['0'..'4'] THEN FormatGeaendert:=True; CASE Eingabe OF '0' : SIOWahl:=0; '1' : SIOWahl:=1; '2' : SIOWahl:=2; '3' : PTRWahl:=0; '4' : PTRWahl:=3; END; UNTIL upcase(Eingabe)='X'; write(CursorEin); END; PROCEDURE KonvertMenue; VAR a,e,f : integer; BEGIN ClrScr; write(CursorAus); Menuebild('K O N V E R T I E R U N G S - M E N U E', 'Die Ausgabe, bzw. Abspeicherung soll erfolgen mit:', 'A = ASCII-Umlauten, deutscher Zeichensatz', 'L = LOCOSCRIPT-Umlauten', 'O = keine Umlaute, sondern ae, ue, oe, ss, usw.', '', 'M = mit linkem Rand wie Layout', 'K = kein linker Rand', 'X = Menue verlassen'); REPEAT BEGIN IF KonvWahl='A' THEN a:=0 ELSE IF KonvWahl='L' THEN a:=1 ELSE a:=2; IF MitRand='J' THEN f:=4 ELSE f:=5; FOR e:=0 TO 5 DO BEGIN gotoxy(19,2*e+11); IF ((e=a) OR (e=f)) THEN write('==>') ELSE write(' '); END; read(KBD,Eingabe); Eingabe:=upcase(Eingabe); CASE Eingabe OF 'A','L','O' : KonvWahl:=Eingabe; 'M' : MitRand:='J'; 'K' : MitRand:='N'; END; END UNTIL Eingabe ='X'; write(CursorEin); END; PROCEDURE ASCIIDateiBearbeiten; BEGIN ClrScr; IF Ausgabemodus IN ['P','S','C'] THEN PapierEinlegen; IF Ausgabemodus IN ['D'] THEN Geduld; QuelldateiOeffnen; IF NOT DateiVorhanden THEN EXIT; REPEAT Blockread(Quelldatei,Puffer,Pufferbloecke,BloeckeEin); i:=0; WHILE ((i$1A)) DO BEGIN CASE Puffer[i] OF $20..$5A, $61..$7A : write(Zieldatei,chr(Puffer[i])); $0C : BEGIN IF Ausgabemodus='B' THEN FOR n:=1 TO 90 DO write('-') ELSE write(Zieldatei,#$0C); IF (Ausgabemodus IN['P','S','C']) THEN PapierEinlegen; END; ELSE BEGIN CASE KonvWahl OF 'A' : write(Zieldatei,UmlautASC(Puffer[i])); 'L' : write(Zieldatei,UmlautLOC(Puffer[i])); 'O' : write(Zieldatei,OhneUmlaut(Puffer[i])); END; END; END; i:=succ(i); IF Ausgabemodus IN ['P','S','C'] THEN IF keypressed THEN IF DruckAbbrechen THEN EXIT; IF Ausgabemodus<>'D' THEN delay(Pause); END; UNTIL BloeckeEin=0; close(Quelldatei); IF Ausgabemodus='D' THEN BDOS(32,0); {User=0} close(Zieldatei); IF Ausgabemodus='B' THEN Weiter; END;