← ST-Computer 04 / 1989

Signum-Fontutilities

Programmierpraxis

*Haben Sie nur ein Laufwerk? Oder haben Sie sehr viele SIGNUM-ZeichensĂ€tze, die den Rahmen einer Diskette sprengen? Dann kennen Sie das Problem: Weder SIGNUM noch die Druckerprogramme nehmen auf Ihre Hardwarekonfiguration RĂŒcksicht! Nach dem Laden der Programme klicken Sie ein .SDO-File zum Bearbeiten oder zum Drucken an, und sofort versucht SIGNUM, die passenden CHSETs nachzuladen.

Wird ein Zeichensatz nicht gefunden, ist der Vorgang erstmal zu Ende: SIGNUM lĂ€ĂŸt Ihnen keine Chance, eine andere Diskette einzulegen und die fehlenden ZeichensĂ€tze dort nachzuallozieren.

Bleibt nur die Möglichkeit, alle benötigten ZeichensĂ€tze in eine RAM-Disk zu kopieren (und am besten auch die *.SDO-Files, denn auf der SIGNUM-Programmdiskette haben die ohnehin nichts verloren). Sofern Sie nicht ganz furchtbar lange Dokumente bearbeiten wollen, kommen Sie mit dieser Methode ganz gut hin: Bei 1 MB RAM und TOS im ROM lassen sich im allgemeinen gute 350 kB fĂŒr eine RAM-Disk abzweigen, ohne daß SIGNUM in Verlegenheit kommt.

Die RAM-Disk-Methode wird mit Initfont wirksam unterstĂŒtzt. Nachdem Sie den Kennbuchstaben Ihres RAM-Disk-’’Laufwerks” eingegeben haben (zulĂ€ssig: C bis H), können Sie Ihre aktuellen *.SDO-Files per Fileselectorbox auswĂ€hlen und dabei auch beliebig die Disketten wechseln: Alles wird zunĂ€chst in die RAM-Disk kopiert; gleichzeitig werden die *.SDO-Files in der RAM-Disk auf die erforderlichen ZeichensĂ€tze geprĂŒft.

Den ersten Teil der Aktion beenden Sie, indem Sie in der Fileselectorbox auf ABBRUCH klicken.

Im 2. Schritt werden Sie gefragt, ob Sie nur edieren oder nur drucken oder edieren UND drucken wollen; außerdem können Sie angeben, welche Auflösung Ihr Drucker haben soll (9 oder 24 Nadeln). Dann erhalten Sie wieder eine Fileselectorbox (und wieder die Möglichkeit zu mehrfachem Diskettenwechsel) und können nun die benötigten ZeichensĂ€tze allozieren. Dazu genĂŒgt es, ein passendes Directory zu öffnen und auf “OK” zu klicken: Das Directory wird dann automatisch durchsucht, und die gefundenen ZeichensĂ€tze werden in die RAM-Disk kopiert.

Parallel dazu werden Ihnen die noch fehlenden ZeichensĂ€tze angezeigt. Nachdem alle ZeichensĂ€tze gefunden wurden, ist Schritt 2 zu Ende; Sie können die Aktion aber auch vorzeitig mit “ABBRUCH” in der Fileselectorbox abschließen.

Wenn Sie “Edieren” angemeldet haben, erhalten Sie in Schritt 3 noch die Möglichkeit zur Auswahl weiterer ZeichensĂ€tze. Diese mĂŒssen Sie dann einzeln anklicken, wobei eine Auswahl eines *.E24-Files automatisch dafĂŒr sorgt, daß das passende *.P9- bzw. *.P24-File auch gesucht wird, sofern Sie “Edieren und Drucken” gewĂŒnscht hatten. Schritt 3 wird wiederum mit “ABBRUCH” in der Fileselectorbox beendet; ggf. fragt Initfont in einem 4. Schritt (entspricht Schritt 2) noch die nicht gefundenen DruckerzeichensĂ€tze ab.

Als Quelldirectory darf in allen FÀllen auch das Hauptdirectory der RAM-Disk angegeben werden, obwohl es gleichzeitig Zieldirectory ist; es entfÀllt dann lediglich der Kopiervorgang. So kann z.B. auch ein *.SDO-File, das bereits in die RAM-Disk kopiert wurde, nachtrÀglich seine ZeichensÀtze anfordern.

Der wesentliche Vorteil bei der Sache ist also die Untersuchung der *.SDO-Files auf die dort verlangten ZeichensĂ€tze (alles andere könnte man auch vom Desktop aus erledigen). Abschließend mĂŒssen Sie nur noch die Programmdiskette (wieder) einlegen und können mit der Bearbeitung loslegen.

Wichtig: Teilen Sie SIGNUM und dem Druckprogramm mit, daß die ZeichensĂ€tze sich in der RAM-Disk befinden!

Sie können das Ganze auch noch weiter vereinfachen, indem Sie diesem Initfont.dok eine Zeile wie z.B.

D24

voranstellen, was bedeutet: Sie verwenden einen 24-Nadel-Drucker, und Ihre RAM-Disk ist (z.B. per AUTO-Ordner) als Laufwerk D installiert. Initfont fragt dann diese Parameter nicht mehr interaktiv ab. Und falls Sie das Initfont.dok aus PlatzgrĂŒnden nicht auf der gleichen Diskette wie Initfont aufbewahren wollen, reicht es auch aus, wenn Sie nur diese eine Steuerzeile in ein Initfont.dok oder Initfont.par schreiben und neben Initfont ablegen. Das Programm ĂŒbernimmt auf Wunsch auch selbst das Erstellen von Initfont.par, sofern in -.PAR oder -.DOK nicht alle Informationen gefunden wurden, und sofern Sie “Drucken” angemeldet haben.

Es war zu wĂŒnschen, daß in einer spĂ€teren SIGNUM-Ver-sion die Möglichkeit zum Nachallozieren von ZeichensĂ€tzen eingebaut wĂŒrde: Schließlich hat ja nicht jeder eine Harddisk.

Auflisten von ZeichensÀtzen

Wer einen Haufen SIGNUM-ZeichensĂ€tze sein eigen nennt, verliert bald den Überblick. Listfont schafft Abhilfe: Es erstellt unter dem Namen Listfont.dat (oder einem anderen frei wĂ€hlbaren Namen) eine Tabelle Ihrer sĂ€mtlichen ZeichensĂ€tze, sĂ€uberlich sortiert nach *.E24-, *.P24- und *.P9-Files.

Nach dem Programmstart legen Sie einfach eine Font-Diskette ein, öffnen ein Directory mit SIGNUM-ZeichensĂ€tzen und klicken auf OK (ob Sie ein einzelnes File auswĂ€hlen oder nicht, spielt keine Rolle). Dieses Verfahren können Sie mit all Ihren Disketten, Harddisk-Partitions, Haupt- und Subdirectories wiederholen; sobald Sie ABBRUCH anklicken, wird die Liste erzeugt und steht Ihnen zur Weiterverarbeitung als File zur VerfĂŒgung.

Bleibt noch zu sagen, Initfont und Listfont wurden beide unter OMIKRON.BASIC programmiert und compiliert.

' ' INITFONT.PRG- SIGNUM-ZeichensĂ€tze und -Dokumente ' auf RAM-Disk initialisieren ' OMIKRON.BASIC / Cutlib: NNN ' ' MID$ (A$,1,X)=B$ lĂ€uft im Compilat nicht, ist ' daher durch A$= LEFT$(B$,X)+MID$(A$,X+1) ersetzt. ' ' I$=INPUT$(Anzahl,Dateinummer) scheitert an einzu- ' lesenden CHR$(26), ist also fĂŒr Datei- ' Untersuchungen ungeeignet. Es wurde durch eine ' entsprechende Subroutine (PROC Fread: Einlesen ' ĂŒber GEMDOS-Aufrufe) ersetzt. ' PRINT CHR$(27);"f";CHR$(7);:Header("INITFONT.PRG") Quellpfad$=FN Act_Pfad$:Editflag%=0:Drucker%=0:Aktion_Wahl Rampfad$="":Chsets_Params: IF Drucker%=-1 OR Rampfad$="" THEN Params_Flag%=-1 IF Drucker%=-1 THEN Drucker_Wahl IF Rampfad$="" THEN Rampfad_Wahl IF Params_Flag% THEN Set_Params Sdo$="":Sdo_Wahl: IF LEN(Sdo$) THEN Sdo_Array: Chsets_Alloc Sdo$="": IF Editflag% THEN Edit_Alloc Editflag%=0:IF LEN(Sdo$) THEN Sdo_Array:Chsets_Alloc CLS : END ' DEF FN Act_Pfad$ LOCAL Act_Pfad$,Buf,Laufwerk GEMDOS (Laufwerk,25):Act_Pfad$= CHR$(0)*64:Buf= FRE("") Buf= LPEEK( SEGPTR +28)+ LPEEK( VARPTR(Act_Pfad$)) GEMDOS (,71, HIGH(Buf), LOW(Buf),0):Buf=INSTR(Act_Pfad$, CHR$(0)) IF Buf>1 THEN Act_Pfad$= LEFT$(Act_Pfad$,Buf-1) ELSE Act_Pfad$="" RETURN CHR$(Laufwerk+65)+":"+Act_Pfad$+"\" ' DEF PROC Aktion_Wahl LOCAL A%, A$=" INITFONT.PRG| "+CHR$(189)+"1988 by Ingo H. Dietrich|" A$=A$+"---------------| Bitte Aktionen auswĂ€hlen:" Alert(0,A$,3,"EDIT|DRUCK| BEIDES ",A%) IF A%=1 OR A%=3 THEN Editflag%=-1 IF A%>1 THEN Drucker%=-1 RETURN ' DEF PROC Alert (Icon%,Boxtext$,Defbutton%,Buttontext$,R Backvar%) LOCAL Alert$="["+CHR$(48+Icon%)+"]["+Boxtext$+"]["+Buttontext$+"]" MOUSEON : FORM_ALERT (Defbutton%, Alert$, Backvar%):MOUSEOFF : WAIT .05 RETURN ' DEF PROC Chsets_Alloc LOCAL Chset$,N%,Ok%,Z% REPEAT Header("Öffnen Sie ein Directory, das passende CHSETS enthĂ€lt:") Chsets_Table Quellpfad$=Quellpfad$+"*.*":Filesel(Quellpfad$,Chset$,Ok%) IF NOT Ok% THEN EXIT FOR Z%=0 TO Sdo% Chset$=Quellpfad$+Sdo$(Z%) IF FN Exist(Chset$) THEN Kopiere(Chset$): Sdo$(Z%)="9"*13 NEXT Z% SORT Sdo$(0):N%=-1 FOR Z%=0 TO Sdo% IF Sdo$(Z%)<>"9"*13 THEN N%=N%+1 NEXT Z% Sdo%=N% UNTIL Sdo%=-1 RETURN ' DEF PROC Chsets_Params LOCAL I$="",I1$ IF FN Exist(Quellpfad$+"INITFONT.PAR") THEN OPEN "I",16,Quellpfad$+"INITFONT.PAR": LINE INPUT #16,I$: CLOSE 16 ELSE IF FN Exist(Quellpfad$+"INITFONT.DOK") THEN OPEN "I",16,Quellpfad$+"INITFONT.DOK": LINE INPUT #16,I$: CLOSE 16 ENDIF ENDIF IF LEN(I$) THEN IF LEN(I$)=2 OR LEN(I$)=3 THEN I1$= LEFT$(I$,1) IF I1$>"B" AND I1$<"I" THEN Rampfad$=I1$+":\" IF Drucker%=-1 THEN I1$= MID$(I$,2) IF VAL(I1$)=9 THEN Drucker%=9 IF VAL(I1$)=24 THEN Drucker%=24 ENDIF ENDIF ENDIF ENDIF RETURN ' DEF PROC Chsets_Table LOCAL C$,Z% FOR Z%=0 TO 54 IF Z%>Sdo% THEN C$="" ELSE C$=Sdo$(Z%) C$= LEFT$(C$+" "*12,12) : PRINT @(2*(Z%\5)+2,14*(Z% MOD 5)+5);C$ NEXT Z% IF Sdo%>54 THEN Z%=Sdo%-54 IF Z%=1 THEN S$=" ... und 1 weiterer Zeichensatz ... " ELSE S$ = " ... und" + STR$(Z%) +" weitere ZeichensĂ€tze ... " ENDIF PRINT @(24,39- FIX( LEN(S$)/2));S$;@(0,0) ENDIF RETURN ' DEF PROC Drucker_Wahl LOCAL A% Alert (2," Wieviele Nadeln| hat Ihr Drucker?|",0,"9| 24 ",A%) Drucker%=15*A%-6 RETURN ' DEF PROC Edit_Alloc LOCAL Alert$,Chset$,Ext$,F$,Alert%,L%,Ok% Header("WĂ€hlen Sie weitere ZeichensĂ€tze fĂŒr den Editor:") REPEAT Quellpfad$=Quellpfad$+"*.E24":Filesel(Quellpfad$,Chset$,Ok%) IF NOT Ok% THEN EXIT Chset$=Quellpfad$+Chset$ IF INSTR(Chset$,".E24")= LEN(Chset$)-3 THEN L%=FN Exist_Lof(Chset$) IF L% THEN Alert%=1:F$= RIGHT$(Chset$,INSTR(MIRROR$(Chset$),"\")-1) IF FN Pfad$(Chset$)<>Rampfad$ THEN IF FN Exist(Rampfad$+F$) THEN Alert$=F$+" gibt es auf der|Ramdisk schon!| |Trotzdem kopieren?" Alert(3,Alert$,2,"JA| NEIN ",Alert%) ENDIF ENDIF IF Alert%=1 THEN Kopiere(Chset$) IF Drucker% THEN Ext$= STR$(Drucker%):Ext$="P"+MID$(Ext$,2) Chset$= LEFT$(Chset$,LEN(Chset$)-3)+Ext$ F$= RIGHT$(Chset$, INSTR(MIRROR$(Chset$),"\")-1) IF NOT FN Exist(Rampfad$+F$) THEN IF FN Exist(Chset$) THEN Kopiere(Chset$) ELSE Sdo$=Sdo$+ LEFT$(F$, INSTR (F$,".")-1)+ CHR$(0) ENDIF ENDIF ENDIF ENDIF ELSE Fehler("Quellfile existiert nicht| oder enthĂ€lt Null Bytes| |") ENDIF ELSE Fehler(" Es sind nur | *.E24-Files| zulĂ€ssig !!|") ENDIF UNTIL 0 RETURN ' DEF FN Exist (F$) LOCAL E%: OPEN "F",16,F$,1: GET 16,1:E%= NOT EOF(16): CLOSE 16 RETURN E% ' DEF FN Exist_Lof(F$) LOCAL A,L,Nr: IF NOT FN Exist(F$)THEN RETURN 0 F$=F$+ CHR$(0):A= FRE(""):A= LPEEK( SEGPTR +28)+LPEEK( VARPTR(F$)) GEMDOS (Nr,61, HIGH(A), LOW(A),0): GEMDOS (L, 66,0,0,Nr,2): GEMDOS (A,62,Nr) RETURN L ' DEF PROC Fehler(A$): LOCAL A%: PRINT CHR$(7);:Alert(3,A$,1," AHA ",A%): RETURN ' DEF PROC Filesei(R Pfad$,R Name$,R Ok%) LOCAL Bild$,Laufwerk$= LEFT$(Pfad$,2):Name$="" Sget(Bild$): MOUSEON : FILESELECT (Pfad$,Name$,Ok%): MOUSEOFF :Sput(Bild$) WAIT .05: IF Pfad$="" THEN Pfad$="\" IF LEFT$(Pfad$,1)="\" THEN Pfad$=Laufwerk$+Pfad$ Pfad$=FN Pfad$(Pfad$):Ok%=-Ok% RETURN ' DEF FN Fread$(L,F$) LOCAL A,Dummy,Nr,Fread$= CHR$(0)*L F$=F$+ CHR$(0):A= FRE(""):A= LPEEK( SEGPTR +28)+ LPEEK( VARPTR(F$)) GEMDOS (Nr,61, HIGH(A), LOW(A),0) A= FRE(""):A= LPEEK( SEGPTR +28)+ LPEEK( VARPTR(Fread$)) GEMDOS (Dummy,63,Nr, HIGH(L), LOW(L), HIGH(A), LOW(A)): GEMDOS (Dummy,62,Nr) RETURN Fread$ ' DEF PROC Header(H$) FILL COLOR =1: FILL STYLE =2,4: PBOX 0,17 TO 639,399 FILL COLOR =0: PBOX 0,0 TO 639,16 TEXT HEIGHT =4: TEXT 550,13,"OMIKRON.BASIC" PRINT @(0,0); TAB (39- FIX( LEN(H$)/2));H$; RETURN ' DEF PROC Kopiere(F$) IF FN Pfad$ (F$)ORampfad$ THEN COPY F$ TO Rampfad$ RETURN ' DEF FN Pfad$(F$)= LEFT$(F$, LEN(F$)- INSTR( MIRROR$(F$),"\"))+"\" ' DEF PROC Rampfad_Wahl LOCAL Drvmap,A%,B%,A$=" Wo steckt Ihre Ramdisk ? | ",B$ REPEAT Alert(2,A$,0,"C,D,E|F,G,H|ABBRUCH",A%) IF A%=3 THEN CLS : END IF A%=1 THEN B$=" C: |D:|E:" ELSE B$=" F: |G:|H:" Alert(2,A$,0,B$,B%):B%=3*A%+B%-2:BIOS (Drvmap,10) IF BIT(B%,Drvmap)THEN EXIT ELSE PRINT CHR$(7); UNTIL 0 Rampfad$= CHR$(65+B%)+":\" RETURN ' DEF PROC Sdo_Array LOCAL P%=-1,Z%,Ext$,Chset$ FOR Z%=1 TO LEN(Sdo$) IF MID$(Sdo$,Z%,1)= CHR$(0) THEN P%=P%+1 NEXT Z% IF Editflag% AND Drucker% THEN Sdo%=2*P%+1 ELSE Sdo%=P% DIM Sdo$ ( MAX(Sdo_Bak%, Sdo%) ) : IF Sdo_Bak%=0 THEN Sdo_Bak%=Sdo% FOR Z%=0 TO Sdo% : Sdo$ (Z%) ="9"*13 :NEXT Z% : Z%=-1 REPEAT P%= INSTR(Sdo$, CHR$(0)):Z%=Z%+1:Chset$= LEFT$(Sdo$,P%-1) IF Drucker% THEN Ext$= STR$(Drucker%):Ext$="P"+MID$ (Ext$,2) :Sdo$(Z%)=Chset$+"."+Ext$ IF Editflag% THEN Z%=Z%+1:Sdo$(Z%)=Chset$+".E24" ELSE Sdo$(Z%)=Chset$+".E24" ENDIF IF P%= LEN(Sdo$) THEN EXIT ELSE Sdo$=MID$(Sdo$,P%+1) UNTIL 0 SORT Sdo$(0):Sdo$=Sdo$(0)+ CHR$(0) FOR Z%=1 TO Sdo% IF Sdo$(Z%)<>Sdo$(Z%-1) THEN Sdo$=Sdo$+Sdo$(Z%)+ CHR$(0) NEXT Z% FOR Z%=1 TO Sdo% : Sdo$(Z%)="9"*13:NEXT Z%: Z%=-1 REPEAT P%= INSTR(Sdo$, CHR$(0)) :Z%=Z%+1:Sdo$(Z%)=LEFT$(Sdo$,P%-1) IF P%= LEN(Sdo$) THEN Sdo%=Z%: EXIT Sdo$= MID$(Sdo$,P%+1) UNTIL 0 RETURN ' DEF PROC Sdo_Wahl LOCAL Alert$,F$,F$,P$,S$,S1$,Alert%,L%,P%,P1%,Z% Header("Welche *.SDO-Dateien wollen Sie bearbeiten?") REPEAT P$=Quellpfad$+"*.SDO":Filesel(P$,F$,Okflag%): IF NOT Okflag% THEN EXIT IF INSTR(F$,".SDO")= LEN(F$)-3 THEN Alert%=1 IF FN Pfad$(F$)<>Rampfad$ THEN IF FN Exist(Rampfad$+F$) THEN Alert$=F$+" gibt es auf der|Ramdisk schon!| |Trotzdem kopieren?" Alert(3,Alert$,2,"JA| NEIN ",Alert%) ENDIF ENDIF ELSE Alert%=0:Fehler(" Es sind nur | *.SDO-Files| zulĂ€ssig !!|") ENDIF IF Alert%=1 THEN IF LEN(F$) THEN F$=P$+F$:L%=FN Exist_Lof(F$) IF L% THEN L%= MIN(512,L%):S$=FN Fread$(L%,F$) P%= INSTR(S$,"cset"):P1%=INSTR(S$,"sysp") IF P% AND P1%>P%+17 THEN P%=P%+8:P1%=P%+10*((P1%-P%)\10-1) FOR Z%=P% TO P1% STEP 10 S1$= MID$ (S$,Z%,8):P%= INSTR(S1$,CHR$(0)) IF P%<>1 THEN IF P%>1 THEN S1$=LEFT$(S1$,P%-1) Sdo$=Sdo$+S1$+ CHR$(0) ENDIF NEXT Z% Kopiere(F$):Quellpfad$=P$ ELSE Fehler(" Quellfile ist kein | Signum-Dokument !!| |") ENDIF ELSE Fehler("Quellfile existiert nicht| oder enthĂ€lt Null Bytes| |") ENDIF ENDIF ENDIF UNTIL 0 RETURN ' DEF PROC Set_Params LOCAL A%,A$=" Sollen die Defaults fĂŒr| Ramdisk und Printer als|" A$=A$+"INITFONT.PAR abgelegt werden ?":Alert (2,A$, 1, "JA | NEIN ",A%) IF A%=2 THEN RETURN A$=STR$(Drucker%):A$=LEFT$(Rampfad$,1)+MID$(A$,2) OPEN "O",16,Quellpfad$+"INITFONT.PAR": PRINT #16, A$: CLOSE 16 RETURN ' DEF PROC Sget(R B$) LOCAL B,S:B$= CHR$(0)*32000: IF S_Init=0 THEN S_Init XBIOS (B,3):S= FRE(""):S= LPEEK( SEGPTR +28)+ LPEEK( VARPTR(B$)) CALL S_Init( HIGH(B), LOW(B), HIGH(S), LOW(S)) RETURN ' DEF PROC Sput(B$) LOCAL B,S: XBIOS (B,3):S= FRE(""):S= LPEEK ( SEGPTR +28)+ LPEEK( VARPTR(B$)) CALL S_Init( HIGH(S), LOW(S), HIGH(B), LOW(B)) RETURN ' DEF PROC S_Init LOCAL B%,Z%:S_Init= MEMORY(40) FOR Z%=0 TO 21: READ B%: POKE S_Init+Z%, B%: NEXT Z% RETURN DATA 32,111,0,4,34,111,0,8,32,60,0,0,31,63,34,216,81,200,255,252,78,117

Initfont-Programm

' LISTFONT.PRG - Erzeugen einer Liste sĂ€mtlicher ' verfĂŒgbarer SIGNUM-Fonts ' OMIKRON.BASIC / Cutlib: NNN ' GEMDOS (Z%,25):Laufwerk$= CHR$(65+Z%)+":\" PRINT CHR$(27);"b"; CHR$(0); CHR$(27);"c";CHR$(15); CHR$(27);"f";:Desktop Info Chsets$="" REPEAT Ordner(Laufwerk$,Pfad$):Moment IF Pfad$="" THEN EXIT Chsets(Pfad$,Chsets$):Moment UNTIL FN Nochmal%=0 Moment IF Chsets$="" THEN Warnix:Ausgang: END Sortieren(Chsets$,Anz_Sets%): REM (R Chsets$(Anz_Sets%)) Diverse(Anz_Div%): REM (R Diverse$(Anz_Div%+1,3)) Formate Zielfile(Laufwerk$,Zielfile$) IF LEN(Zielfile$) THEN Moment:Liste_Schreiben(Zielfile$) Ausgang: END ' DEF PROC Ausgang PRINT CHR$(27);"b"; CHR$(15); CHR$(27);"c";CHR$(0);: CLS RETURN ' DEF PROC Chsets(Pfad$,R Chsets$) LOCAL Attribut$,Dateiname$,Extender$,Punkt% OPEN "F",1,Pfad$+"*.*",63 REPEAT GET 1,1 IF EOF(1) THEN EXIT FIELD 1,21,1 AS Attribut$,8,14 AS Dateiname$ Dateiname$= LEFT$(Dateiname$, INSTR(Dateiname$,CHR$(0))-1) IF ASC(Attribut$)<4 THEN IF Dateiname$<>"." AND Dateiname$<>".." THEN Punkt%= INSTR(Dateiname$,".") IF Punkt%>0 AND Punkt%<LEN(Dateiname$) THEN Extender$= MID$(Dateiname$,Punkt%+1) IF Extender$="E24" OR Extender$="P24" OR Extender$="P9" THEN Chsets$=Chsets$+Dateiname$+ CHR$(0) ENDIF ENDIF ENDIF ENDIF UNTIL 0 CLOSE 1 RETURN ' DEF PROC Center(Center$) PRINT " "* FIX(39- LEN(Center$)/2);Center$ RETURN ' DEF PROC Desktop: CLS :Headline("LISTFONT.PRG"): RETURN ' DEF PROC Diverse(R D%) LOCAL D$,D1$,Z%,Z1%,Z2% D%=0 FOR Z%=1 TO Anz_Sets% D$= LEFT$(Chsets$(Z%), INSTR(Chsets$(Z%),".")) D1$= LEFT$(Chsets$(Z%-1), INSTR(Chsets$(Z%1),".") IF D$<>D1$ THEN D%=D%+1 NEXT Z% DIM Diverse$(D%+1,3) Diverse$(0,0)="Zeichensatz":Diverse$(0,1)="E24" Diverse$(0,2)="P24":Diverse$(0,3)="P9" FOR Z%=1 TO D% FOR Z1%=1 TO 3 Diverse$(Z%,Z1%)="nein" NEXT Z1% NEXT Z% Z1%=0 FOR Z%=1 TO Anz_Sets% D$= LEFT$(Chsets$(Z%), INSTR(Chsets$(Z%),".")) D1$= LEFT$(Chsets$(Z%-1), INSTR(Chsets$(Z%-1), ".")) IF D$<>D1$ THEN Z1%=Z1%+1 Diverse$(Z1%,0)= LEFT$(D$, LEN(D$)-1) ENDIF D1$ = MID$(Chsets$(Z%), INSTR(Chsets$(Z%),".")+1) FOR Z2%=1 TO 3 IF D1$=Diverse$(0,Z2%) THEN Diverse$(Z1%,Z2%)="ja" ENDIF NEXT Z2% NEXT Z% FOR Z%=1 TO 3 Z1%=0 FOR Z2%=1 TO D% IF Diverse$(Z2%,Z%)="ja" THEN Z1%=Z1%+1 NEXT Z2% D$= STR$(Z1%):Diverse$(D%+1,Z%)= RIGHT$(D$, LEN(D$)-1) NEXT Z% D$= STR$(D%):Diverse$(D%+1,0)= RIGHT$(D$,LEN(D$)-1) RETURN ' DEF PROC Formate LOCAL Z%,Z1 FOR Z%=0 TO Anz_Div%+1 Diverse$(Z%,0)=LEFT$(Diverse$(Z%,0)+" "*14,14) FOR Z1%=1 TO 2 Diverse$(Z%,Z1%)= LEFT$(Diverse$(Z%,Z1%)+" "*8,8) NEXT Z1% Diverse$(Z%,3)= LEFT$(Diverse$(Z%,3)+" "*4,4) NEXT Z% RETURN ' DEF PROC Headline(Headline$): PRINT 0 (0,0); :Center(Headline$) : RETURN ' DEF PROC Info LOCAL Z%,D$ PRINT @(2,0); REPEAT READ D$ Center(D$) UNTIL D$="" D$ = INPUT$(1) RETURN ' DATA "erzeugt das Inhaltsverzeichnis Ihrer SIGNUM-ZeichensĂ€tze als File, " DATA "also zum Ansehen, Ausdrucken, Weiterverarbeiten mit SIGNUM usw. " DATA "Es können nacheinander mehrere beliebige Directories zum Durchsuchen" DATA "angemeldet werden; LISTFONT.PRG ordnet alle gefundenen Files mit Ex-" DATA "tender auf *.E24, *.P24 oder *.P9 alphabetisch und unterdrĂŒckt Dop-" DATA "pelnennungen. Es wird eine Tabelle folgender Art erzeugt: " DATA "Zeichensatz E24 P24 P9 "," " DATA "TIMES ja ja nein"," "," "," " DATA "LISTFONT.PRG wurde unter OMIKRON.BASIC erstellt und compiliert." DATA "Ingo H. Dietrich 30.04.1988" DATA " "," "," "," "," weiter mit einer beliebigen Taste ...","" ' DEF PROC Liste_Schreiben(Zielfile$) LOCAL D$,Strich$="-"*34,Z%,Z1% OPEN "O",1,Zielfile$ PRINT #1," "*8+"AufStellung: SIGNUM ZeichensĂ€tze": PRINT #1 FOR Z%=0 TO Anz_Div% D$=" " FOR Z1%=0 TO 3 D$=D$+Diverse$(Z%,Z1%) NEXT Z1% PRINT #1," "*8+D$ IF Z% MOD 5=0 THEN PRINT #1," "*8+Strich$ NEXT Z% IF Z% MOD 5<>1 THEN PRINT #1," "*8+Strich$ D$=" " FOR Z1%=0 TO 3 D$=D$+Diverse$(Anz_Div%+1,Z1%) NEXT Z1% PRINT #1," "*8+D$: PRINT #1 PRINT #1," "*8+"... erzeugt mit LISTFONT.PRG" PRINT #1," "*8+" von Ingo H. Dietrich" CLOSE 1 RETURN ' DEF PROC Moment Desktop: PRINT 0 (12,0);:Center("... einen Moment bitte ...") RETURN ' DEF FN Nochmal% LOCAL Alert$="[2][ Soll noch ein Directory | untersucht werden ?| | " Alert$=Alert$+"( ggf. Diskette wechseln ! )][JA| NEIN ]" Desktop MOUSEON : FORM_ALERT (1,Alert$,Nochmal%): MOUSEOFF PRINT @(1,0); CHR$(27);"J"; RETURN Nochmal% MOD 2 ' DEF PROC Ordner(R Laufwerk$,R Pfad$) LOCAL Dummy$="",Ok% Desktop : Headline ("Öffnen Sie ein Directory mit SIGNUM-ZeichensĂ€tzen:") Pfad$=Laufwerk$+"*.*" REPEAT REPEAT MOUSEON : FILESELECT (Pfad$,Dummy$,Ok%): MOUSEOFF PRINT @(1,0); CHR$(27);"J"; UNTIL LEN(Pfad$)>2 OR Ok%=0 IF Ok%=0 THEN EXIT UNTIL MID$(Pfad$,2,2)=":\" IF Ok% THEN Pfad$= LEFT$(Pfad$, LEN(Pfad$)-INSTR(MIRR0R$(Pfad$),"\"))+"\" Laufwerk$= LEFT$(Pfad$,3) ELSE Pfad$="" ENDIF RETURN ' DEF PROC Sortieren(S$,R N%) LOCAL Nullbyte%,Z% N%=0 FOR Z%=1 TO LEN(S$) IF ASC( MID$(S$,Z%,1))=0 THEN N%=N%+1 NEXT Z% DIM Chsets$(N%) Z%=0 REPEAT Z%=Z%+1 Nullbyte%= INSTR(S$, CHR$(0)) Chsets$(Z%)= LEFT$(S$,Nullbyte%-1) IF Nullbyte%= LEN(S$) THEN EXIT S$= MID$(S$,Nullbyte%+1) UNTIL 0 SORT Chsets$(0) RETURN ' DEF PROC Warnix LOCAL Alert%,Alert$="[1][ Es wurden keine| SIGNUM-ZeichensĂ€tze |" Alert$=Alert$+" gefunden.|][ AHA ]" Desktop MOUSEON : FORM_ALERT (1,Alert$,Alert%): MOUSEOFF PRINT @(1,0); CHR$(27);"J"; RETURN ' DEF PROC Zielfile(Laufwerk$,R Zielfile$) LOCAL Pfad$=Laufwerk$+"*.*",Ok% Desktop:Headline("Bestimmen Sie eine Zieldatei fĂŒr die CHSETS-Liste:") REPEAT REPEAT Zielfile$="LISTFONT.DAT" MOUSEON : FILESELECT(Pfad$,Zielfile$,Ok%) : MOUSEOFF PRINT @(1,0); CHR$(27);"J"; UNTIL LEN(Pfad$)>2 AND LEN(Zielfile$) OR Ok%=0 IF Ok%=0 THEN EXIT UNTIL MID$(Pfad$,2,2)=":\" IF Ok% THEN Pfad$= LEFT$(Pfad$, LEN(Pfad$)-INSTR(MIRROR$(Pfad$),"\"))+"\" Zielfile$=Pfad$+Zielfile$ ELSE Zielfile$="" ENDIF RETURN

Listfont-Programm

Ingo H. Dietrich