(******* LOCO3Z.INC Includedatei zu LOCOCONZ.PAS *******) FUNCTION LocoVorhanden : boolean; BEGIN Blockread(Quelldatei,Puffer,3,BloeckeEin); ClrScr; Kasten(5,18,50,13); gotoxy(7,20); IF ((Puffer[0]=$4A)AND(Puffer[1]=$4F) AND(Puffer[2]=$59)) THEN BEGIN LocoVorhanden:=True; write('Locoscriptdatei : << ',Quelldateiname); write(' >> gefunden.'); StartBlock:=Puffer[$7E]; IF ((NOT(StartBlock IN [1..15]))OR(BloeckeEin<3)) THEN BEGIN LocoVorhanden:=False; gotoxy(10,24); write('Format der Locoscript-Datei ungeeignet!'); LocoVorhanden:=False; END ELSE BEGIN ErsteSeite:=Puffer[107]; LetzteSeite:=Puffer[109]; gotoxy(7,22); write('Von Seite : ',ErsteSeite); write(' bis Seite: ',LetzteSeite); gotoxy(7,24); write('Dateigroesse: '); write(FileSize(Quelldatei)*128,' Bytes'); gotoxy(7,26); write('Text-Info : '); FOR i:=5 TO 34 DO write(UmlautASC(Puffer[i])); gotoxy(21,27); FOR i:=35 TO 64 DO write(UmlautASC(Puffer[i])); gotoxy(21,28); FOR i:=65 TO 94 DO write(UmlautASC(Puffer[i])); FOR n:=0 TO 10 DO FOR m:=0 TO 5 DO {10 Layouts } LayoutTabelle[n,m]:= {Schrift-RRand} Puffer[$80+((10+Puffer[$60])*n)+m]; Kopfteil:=(Puffer[$70] DIV 2)-6; END; END ELSE BEGIN LocoVorhanden:=False; write('Keine Locoscript-Datei !!!!'); END; Weiter; END; PROCEDURE LocoDateiBearbeiten; VAR Seitenlaenge, LetzterTab, LayoutNr, LiVersatz, n,p,SeitenNr : integer; Schriftart, Hervorhebecode : byte; Textzeile : string[128]; Unterstreichen, StartFlag, EndFlag : boolean; PROCEDURE Out(Zeichen:MiniString); BEGIN CASE Zeichen[1] OF #$86: BEGIN {Zeilenanfang} p:=LiRand-LiVersatz; Textzeile:=''; IF Ausgabemodus IN ['P','S','C'] THEN IF Unterstreichen THEN Textzeile:= Textzeile+CodeTabelle[Druckertyp,3]; FOR n:=1 TO p DO Textzeile:=Textzeile+' '; IF Ausgabemodus IN ['P','S','C'] THEN IF Unterstreichen THEN Textzeile:= Textzeile+CodeTabelle[Druckertyp,2]; END; #$88: BEGIN {Zeilenende} IF Textzeile[length(Textzeile)]=' ' THEN delete(Textzeile,length(Textzeile),1); FOR n:=1 TO length(Textzeile) DO BEGIN write(Zieldatei,Textzeile[n]); IF Ausgabemodus<>'D' THEN delay(Pause); END; writeln(Zieldatei); Textzeile:=''; END; #$89: BEGIN {TAB} FOR n:=(p+1) TO (LetzterTab - LiVersatz) DO BEGIN Textzeile:=Textzeile+' '; p:=succ(p); END; END; #$0C: IF Ausgabemodus='B' THEN {Seitenende} FOR n:=1 TO 90 DO write('-') ELSE writeln(Zieldatei,#$0C); ELSE BEGIN Textzeile:=Textzeile+Zeichen; IF length(Zeichen)<6 {keine Steuersequenz} THEN p:=p+length(Zeichen); END; END; END; {Out} PROCEDURE Schriftwahl(x:byte); BEGIN CASE x OF $00: Out(CodeTabelle[Druckertyp,6]); $0E: Out(CodeTabelle[Druckertyp,9]); $10: Out(CodeTabelle[Druckertyp,9]); $14: Out(CodeTabelle[Druckertyp,8]); $18: Out(CodeTabelle[Druckertyp,7]); END; END; PROCEDURE Hervorheben(x:byte); {doppelt/kursiv/unterstr.} BEGIN IF (x AND $11)>0 THEN Out(CodeTabelle[Druckertyp,0]) ELSE Out(CodeTabelle[Druckertyp,1]); IF (x AND $20)>0 THEN Out(CodeTabelle[Druckertyp,4]) ELSE Out(CodeTabelle[Druckertyp,5]); IF (x AND $06)>0 THEN BEGIN Out(CodeTabelle[Druckertyp,2]); Unterstreichen:=True; END ELSE Out(CodeTabelle[Druckertyp,3]); END; PROCEDURE LocoSonderzeichen; BEGIN CASE Puffer[i] OF $80: IF EndFlag THEN Out(#$0C); {Seitenende} $81: Out(#$20); {Leerzeichen} $82: BEGIN IF Puffer[i+1]=1 THEN Out(#$88); {Seitenwech.} IF Puffer[i+1]=2 THEN Out(#$2D); {Bindestrich} i:=i+1; END; $86: BEGIN {Zeilenanfang} Out(#$86); i:=i+2; END; $88: BEGIN {Zeilenende} IF Puffer[i+1]=8 THEN ELSE Out(#$88); i:=i+1; END; $89, {Tab} $8B: BEGIN {Buendig-Tab} IF Puffer[i+1]=0 THEN LiRand:=Puffer[i+2] ELSE BEGIN LetzterTab:=Puffer[i+2]; Out(#$89); END; IF Puffer[i]=$8B THEN i:=i+7 ELSE i:=i+4; END; $8A: BEGIN {buendig} IF Puffer[i+1]=8 THEN ELSE Out(#$88); i:=i+5; END; END; END; {LocoSonderzeichen} PROCEDURE MitSteuerzeichen; BEGIN CASE Puffer[i] OF $83 : BEGIN {Hervorheben ein} CASE Puffer[i+1] OF 0,4: Out(CodeTabelle[Druckertyp,0]); 1,2: BEGIN Out(CodeTabelle[Druckertyp,2]); Unterstreichen:=True; END; 5 : Out(CodeTabelle[Druckertyp,4]); END; i:=i+1; END; $84 : BEGIN {Hervorheben aus} CASE Puffer[i+1] OF 0,4: Out(CodeTabelle[Druckertyp,1]); 1,2: BEGIN Out(CodeTabelle[Druckertyp,3]); Unterstreichen:=False; END; 5 : Out(CodeTabelle[Druckertyp,5]); END; i:=i+1; END; $85 : BEGIN {Einfuegen} CASE Puffer[i+1] OF 0: IF Puffer[i+2]=1 THEN Out(#$2D); {Softtrenn} 2: IF Puffer[i+2]<11 THEN {neues Layout} BEGIN Unterstreichen:=False; Hervorhebecode:= LayoutTabelle[Puffer[i+2],3]; Hervorheben(Hervorhebecode); Schriftart:= LayoutTabelle[Puffer[i+2],0]; Schriftwahl(Schriftart); END; 5: BEGIN {Schrift} Schriftart:=Puffer[i+2]; Schriftwahl(Schriftart); END; END; i:=i+2; END; END; END; {MitSteuerzeichen} PROCEDURE OhneSteuerzeichen; BEGIN CASE Puffer[i] OF $83,$84: i:=i+1; $85 : BEGIN {Softtrenn} IF Puffer[i+1]=0 THEN IF Puffer[i+2]=1 THEN Out(#$2D); i:=i+2; END; END; END; PROCEDURE Seitenanfang; BEGIN Schriftart:=(Puffer[9] AND $7F); Hervorhebecode:=Puffer[12]; LayoutNr:=Puffer[7]; LiRand:=Puffer[8]; LiVersatz:=0; IF MitRand='N' THEN LiVersatz:=LayoutTabelle[0,4]; IF LiVersatz>LiRand THEN LiVersatz:=LiRand; Out(#$86); IF (Ausgabemodus IN['P','S','C']) THEN BEGIN PapierEinlegen; Kasten(28,25,30,5); gotoxy(35,27); write('* Seite: < ',SeitenNr,' > *'); gotoxy(90,30); IF Druckertyp>0 THEN BEGIN Schriftwahl(Schriftart); Hervorheben(Hervorhebecode); Out(#$88); END; END; FOR n:=3 TO Kopfteil DO writeln(Zieldatei); END; PROCEDURE SeitennummerHolen; BEGIN VonSeite:=ErsteSeite; BisSeite:=LetzteSeite; IF ErsteSeite=LetzteSeite THEN EXIT; {nur eine Seite} REPEAT ClrScr; Kasten(5,3,80,11); gotoxy(11,5); write('Alle Seiten ausgeben, bzw. speichern ? '); write('j/n : '); REPEAT read(KBD,Eingabe); UNTIL upcase(Eingabe) IN['J','N']; IF upcase(Eingabe)='N' THEN BEGIN write('nein'); gotoxy(11,7); write('Erste Seite: ',ErsteSeite); write(' Letzte Seite: ',LetzteSeite); gotoxy(11,9); write('Ausgabe von Seite: '); {$I-} readln(VonSeite); {$I+} IF IOresult<>0 THEN VonSeite:=0; gotoxy(11,11); write(' bis Seite: '); {$I-} readln(BisSeite); {$I+} IF IOresult<>0 THEN BisSeite:=0; END ELSE BEGIN VonSeite:=ErsteSeite; BisSeite:=LetzteSeite; END; UNTIL((VonSeite<=BisSeite)AND((VonSeite>= ErsteSeite)AND(BisSeite<=LetzteSeite))); END; FUNCTION Zulang :boolean; {Bei Diskettenausgabe max. 16 kByte-Kopie aus anderem} {Userbereich moeglich} BEGIN IF BloeckeEin<(Puffer[0]-1) THEN BEGIN ClrScr; Kasten(10,5,65,7); gotoxy(16,7); write('Fehler! Datei zu lang '); write('fuer unterschiedliche Usernummern'); gotoxy(22,9); write('Datei auf User 0 (gruppe0) kopieren'); Weiter; Zulang:=True; END ELSE Zulang:=False; END; BEGIN {LocoDateiBearbeiten} SeitennummerHolen; IF Ausgabemodus='B' THEN ClrScr ELSE Geduld; Unterstreichen:=False; SeitenNr:=ErsteSeite; Textzeile:=''; p:=1; QuelldateiOeffnen; IF NOT DateiVorhanden THEN EXIT; Blockread(Quelldatei,Puffer,StartBlock); {Info-Bloecke blind einlesen} WHILE NOT((EOF(Quelldatei))OR(SeitenNr>BisSeite)) DO BEGIN WHILE SeitenNr0; SeitenNr:=succ(SeitenNr); END; REPEAT Blockread(Quelldatei,Puffer,1); {1. Textblock } Seitenlaenge:=Puffer[0]*128-2; IF (Puffer[2] AND $80)>0 THEN StartFlag:=True ELSE StartFlag:=False; IF (Puffer[2] AND $01)>0 THEN EndFlag:=True ELSE EndFlag:=False; Blockread(Quelldatei,Puffer[128],Puffer[0]-1, BloeckeEin); IF Zulang THEN EXIT; IF StartFlag THEN Seitenanfang; i:=13; {Textanfang} REPEAT CASE Puffer[i] OF $00..$1A: ; $20..$5A, $61..$7A: Out(chr(Puffer[i])); $83..$85: IF ((Ausgabemodus IN ['B','D']) OR(Druckertyp=0)) THEN OhneSteuerzeichen ELSE MitSteuerzeichen; $80..$82, $86..$9F: LocoSonderzeichen; ELSE CASE KonvWahl OF 'A' : Out(UmlautASC(Puffer[i])); 'L' : Out(UmlautLOC(Puffer[i])); 'O' : Out(OhneUmlaut(Puffer[i])); END; END; i:=succ(i); IF Ausgabemodus IN ['P','S','C'] THEN IF keypressed THEN IF DruckAbbrechen THEN EXIT; UNTIL i>Seitenlaenge; UNTIL EndFlag=True; SeitenNr:=succ(SeitenNr); END; close(Quelldatei); IF Ausgabemodus='D' THEN BDOS(32,0); {User=0} close(Zieldatei); IF Ausgabemodus='B' THEN Weiter; END; {LocoDateiBearbeiten}