Signum-Fontutilities

*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
Aus: ST-Computer 04 / 1989, Seite 93

Links

Copyright-Bestimmungen: siehe Über diese Seite