; ADOLF - Amiga DOwnLoad Fonts ; AMIGA-Fonts für 24-Nadel-Drucker umrechnen ; © 1990 EHJ ; Das Programm wurde erst in BASIC geschrieben und getestet ; Deshalb teilweise noch BASIC-Zeilen vorhanden ExecBase=4 ;---Funktionen aus exec.library Forbid=-132 AllocMem=-198 FreeMem=-210 FindTask=-294 AddPort=-354 RemPort=-360 GetMsg=-372 ReplyMsg=-378 WaitPort=-384 OpenLibrary=-408 CloseLibrary=-414 OpenDevice=-444 CloseDevice=-450 DoIo=-456 ;---Funktionen aus intuition.library CloseScreen=-66 CloseWindow=-72 DisplayBeep=-96 EndRequest=-120 OpenScreen=-198 OpenWindow=-204 PrintIText=-216 Request=-240 ScreenToFront=-252 SetWindowTitles=-276 RefreshGList=-432 ;---Funktionen aus graphics.library ClearScreen=-48 SetFont=-66 OpenFont=-72 CloseFont=-78 LoadRGB4=-192 Move=-240 ReadPixel=-318 WritePixel=-324 SetAPen=-342 SetDrMd=-354 ScrollRaster=-396 ClipBlit=-552 ;---Funktionen aus dos.library Open=-30 Close=-36 Read=-42 Write=-48 Lock=-84 UnLock=-90 Examine=-102 ExNext=-108 Info=-114 CreateDir=-120 ;---Funktion aus diskfont.library OpenDiskFont=-30 RAM=31453 ;Soviel RAM-Speicher wird reserviert ;---Test, ob vom CLI oder von Workbench gestartet wurde g: move.l a7,Stack ;Stack merken sub.l a1,a1 ;A1 = 0 move.l ExecBase,a6 jsr FindTask(a6) ;Eigenen Task suchen move.l d0,a4 ;Zeiger auf Task in A4 tst.l $ac(a4) ;Langwort 172 <> 0 ? bne.s vomCLI ;dann vom CLI gestartet ;---Es wurde von Workbench gestartet lea $5c(a4),a0 ;WB-Message jsr WaitPort(a6) ;abwarten, jsr GetMsg(a6) ;abholen move.l d0,WBMessage ;und merken ;---Librarys öffnen, Devices suchen vomCLI: bsr OpenAll cmp.w #4711,d0 ;Fehler ? beq ENDE ;ja, Programm beenden ;---Erstes Laufwerk von links im Requester wird Speicherlaufwerk ;---für DFonts. Wenn es nicht wählbar ist, dann das Nächste lea Laufwerke(pc),a0 ;'DF0:'-Text ab (A0) lea DF0Rea(pc),a1 ;'aktiv' ab (A1) moveq #4,d7 ;5 Laufwerke testen LaLoop: tst.w 44(a1) ;Laufwerk anklickbar ? beq.s LaufOK ;ja, weiter, sonst add.l #88,a1 ;A1 auf nächstes 'aktiv' addq.l #6,a0 ;A0 auf nächsten Namen dbra d7,LaLoop ;und testen ;---SaveDisk = Erstes anklickbares Laufwerk, Name in (A0) LaufOK: move.l (a0),SaveDisk ;---RAM-Speicher reservieren: ;---1200 Bytes: Adressen von max. 300 Filenamen (Adressen/Adr) ;---8800 Bytes: Filenamen (Files) ;--20000 Bytes: Das komplette Druckerfile (Puffer) ;---1024 Bytes: Je 256 Bytes xAnf2, yAnf2, yEnd2, wdth2 ;--- 260 Bytes: FileInfoBlock (FIB) ;--- 169 Bytes: Einstellfile (DefRAM) move.l #RAM,d0 ;xxxxx Bytes im RAM bsr Reservieren ;reservieren move.l d0,Adressen ;ab Adressen' im Speicher bne.s Ueberg ;hat geklappt, sonst bra AlleZu ;Programm beenden ;---RAM-Adressen übergeben Ueberg: bsr AdrUe ;Übergabe an 'Adr' und 'Files' add.l #8800,a0 ;Filenamen (8800 Bytes) move.l a0,Puffer ;Druckerfile (20000 Bytes) add.l #20000,a0 move.l a0,xAnf2 ;xAnfänge (128 Worte/256 Bytes) move.l #256,d0 add.l d0,a0 move.l a0,yAnf2 ;yAnfänge (128 Worte) add.l d0,a0 move.l a0,yEnd2 ;yEnden (128 Worte) add.l d0,a0 move.l a0,wdth2 ;Breiten (128 Worte) add.l d0,a0 move.l a0,FIB ;FileInfoBlock (260 By) add.l #260,a0 move.l a0,DefRAM ;Einstellfile (169 By) ;---CHIP-RAM reservieren: ;---80 Bytes für Images (Requester-Pfeile) ;--- 8 Bytes für Piepton-Daten moveq #88,d0 ;88 Bytes move.l #$10002,d1 ;im CHIP-RAM löschen und bsr Reservieren2 ;reservieren move.l d0,Images ;für Images/Töne beq AdFrei ;hat nicht geklappt, PRG beenden ;---Images/Ton-Daten ins CHIP-Ram kopieren lea ImageU(pc),a0 ;Daten aus Programm move.l Images,a1 ;ins CHIP-RAM moveq #21,d7 ;22 Langworte (88 Bytes) ImLoop: move.l (a0)+,(a1)+ ;kopieren dbra d7,ImLoop ;---RAM-Adressen in Imagesstrukturen eintragen move.l Images,a1 move.l a1,ImUp ;Adresse A1 nach ImUp add.l #20,a1 move.l a1,ImUp2 ;+20 nach ImUp2 add.l #20,a1 move.l a1,ImDn ;+20 nach ImDn add.l #20,a1 move.l a1,ImDn2 ;+20 nach ImDn2 add.l #20,a1 move.l a1,Toene ;+20 nach Toene ;---Auf geht's - Screen öffnen lea ScrDef(pc),a0 ;Screen move.l IntBase,a6 jsr OpenScreen(a6) ;öffnen move.l d0,Scrhd ;Header 3 mal move.l d0,Scrhd2 ;für die move.l d0,Scrhd3 ;Fenster merken beq ImFrei ;Fehler, Programm beenden ;---Farben im Screen einstellen move.l d0,a0 ;Screenheader nach A0 lea 44(a0),a0 ;Viewport nach A0 lea ScrFarben(pc),a1 ;Farben ab (A1) moveq #8,d0 ;8 Farben move.l GfxBase,a6 jsr LoadRGB4(a6) ;einschalten ;---Einstellfenster öffnen lea EinWin(pc),a0 ;Einstellfenster move.l IntBase,a6 jsr OpenWindow(a6) ;öffnen move.l d0,Einhd ;Header 2 mal move.l d0,Fenster ;merken beq Uups ;Fehler, Programmende bsr JAM2 ;Zeichenmodus/Schriftfarbe setzen move.l RastPort,RastEin;Rastport merken ;---Texte im Einstellfenster ausgeben lea Texte1Ko(pc),a5 ;Text-Koordinaten ab (A5) lea Texte1(pc),a4 ;Texte ab (A4) bsr Texte ;in gelb ausgeben lea Texte1bKo(pc),a5;Text-Koordinaten ab (A5) lea Texte1b(pc),a4 ;Texte ab (A4) bsr Texte ;in weiß ausgeben ;---Defaultwerte in Gadget-Strukturen eintragen bsr DefWerte ;---'diskfont.library' öffnen lea FntNam(pc),a1 ;'diskfont.library' move.l ExecBase,a6 jsr OpenLibrary(a6) ;öffnen move.l d0,FntBase ;Basis merken bne.s Haupt ;hat geklappt ;---'diskfont.library NICHT GEFUNDEN !' ausgeben lea NoDFontTxt(pc),a1 ;Text bsr Fehler ;ausgeben bra.s PRGend ;und Programm beenden ;---Fensteradressen übergeben Haupt: bsr EinFen ;Einstellfenster-Daten holen bra.s GaLoop ;----------------------------------- ;Gadgets im Einstellfenster abfragen ;------------------------------------ mitTon: bsr Ton ;Piepton GaLoop: bsr Warte ;warten auf cmp.w #$40,d7 ;GADGET UP ? bne.s GaLoop ;nein, weiter warten ;-------------------------- ;---ENDE - Programm beenden cmp.w #9999,d6 ;'ENDE' ? bne.s Fertig ;nein, weiter PRGend: bsr CloseWin ;Fenster schließen bra Uups ;und Programm beenden ;------------------------------ ;---FERTIG - weiter im Programm Fertig: cmp.w #7777,d6 ;'FERTIG' ? beq holFnt ;dann geht's los! ;-------------------------- ;---DEFAULTWERTE EINTRAGEN cmp.w #6666,d6 ;'DEFAULT' ? bne.s LSGads ;nein, weiter bsr DefWerte ;Defaultwerte eintragen bra.s GaLoop ;und zur Abfrage ;---------------------- ;---Einstellungen LADEN LSGads: cmp.w #1111,d6 ;'LADEN' ? beq DefLaden ;dann Laden ;---------------------- ;---Einstellungen SAVEN cmp.w #2222,d6 ;'SAVEN' ? beq DefSaven ;dann Saven ;--------------------- ;---J/N-Gadgets ändern cmp.w #37,d6 ;ID > 37 ? bgt.s GaLoop ;ja, weiter warten move.l d5,a0 ;Gadgetadresse holen move.l 26(a0),a1 ;Textadresse holen move.l 12(a1),a2 ;Text ab A2 cmp.b #"N",(a2) ;'N' ? bne.s aufN ;nein, also auf 'N' stellen ;---Vergrößerungs-Gadgets testen cmp.w #35,d6 ;Vergrößern = 'N' ? bne.s isNH ;nein, weiter ;---Im Gadget 'Vergrößern' von 'N' auf 'J' umschalten ;---'Nur Höhe' und 'Nur Breite' auf 'N' setzen move.l #JTxt,12(a1) ;'J'-Adresse in Vergrößern move.l #NTxt,32(a1) ;'N' in Nur Höhe move.l #NTxt,52(a1) ;'N' in Nur Breite bra.s DreiGs ;und 3 Gadgets neu ausgeben ;---Nur Höhe von 'N' auf 'J' ? isNH: cmp.w #36,d6 ;Nur Höhe = 'N' ? bne.s isNB ;nein, weiter ;---'Nur Höhe' auf 'J', 'Vergrößern' und 'Nur Breite' auf 'N' lea Text16(pc),a1 ;1.Gadgettext ist 'Vergrößern' move.l #NTxt,12(a1) ;'N'-Adresse in Vergrößern move.l #JTxt,32(a1) ;'J' in Nur Höhe move.l #NTxt,52(a1) ;'N' in Nur Breite bra.s DreiGs ;und 3 Gadgets neu ausgeben isNB: cmp.w #37,d6 ;Nur Breite = 'N' ? bne.s aufJ ;nein, weiter ;---'Nur Breite' auf 'J', 'Vergrößern' und 'Nur Höhe' auf 'N' lea Text16(pc),a1 move.l #NTxt,12(a1) ;'N'-Adresse in Vergrößern move.l #NTxt,32(a1) ;'N' in Nur Höhe move.l #JTxt,52(a1) ;'J' in Nur Breite DreiGs: moveq #3,d0 ;und 3 Gadgets lea VergJ(pc),a0 ;ab 'Vergrößern' bra.s Gneu3 ;neu ausgeben ;---------------------------------------------- ;---Irgendein Gadget von 'N' auf 'J' umschalten aufJ: move.l #JTxt,12(a1) ;'J'-Adresse in Text eintragen bra.s Gneu ;und weiter ;---------------------------------------------- ;---Irgendein Gadget von 'J' auf 'N' umschalten aufN: move.l #NTxt,12(a1) ;'N'-Adresse eintragen ;---1 Gadget mit neuem Text ausgeben Gneu: moveq #1,d0 ;1 Gadget (Adresse in A0) ;---3 Gadgets mit neuem Text ausgeben (Anzahl in D0) Gneu3: bsr GadNeu ;neu ausgeben bra GaLoop ;und wieder zur Abfrage ;---------------------- ;---Einstellungen LADEN DefLaden: move.l #1005,d2 ;Modus 'OLD' bsr DefAuf ;File öffnen tst.l Defhd ;hat's geklappt ? beq noADO ;nein, Fehler ausgeben ;---Einstellwerte einlesen move.l Defhd,d1 ;Vom File move.l DefRAM,d2 ;Ins RAM move.l #169,d3 ;169 Bytes jsr Read(a6) ;einlesen cmp.l d3,d0 ;wirklich 169 Bytes gelesen ? bne FaFile ;nein, Fehler ausgeben ;---Geladene Werte in Gadgetstrukturen eintragen bsr DefZu ;File schließen move.l DefRAM,a0 ;Im RAM im ersten cmp.l #"DOLF",(a0)+ ;Langwort 'DOLF' ? bne FaFile ;nein, Fehler ausgeben lea I1(pc),a1 ;Nach 'I1' moveq #36,d7 ;37 Langworte LadLoo: move.l (a0)+,(a1)+ ;aus RAM kopieren dbra d7,LadLoo lea Text2+12(pc),a1 ;Ab 12.Byte in Text2 moveq #16,d7 ;17 Adressen JNLoop: move.l #JTxt,(a1) ;Adresse 'J' eintragen cmp.b #"J",(a0)+ ;Byte im RAM = 'J' ? beq.s NextJN ;ja, weiter, sonst move.l #NTxt,(a1) ;Adresse 'N' eintragen NextJN: add.l #20,a1 ;A1 auf nächstes Gadget dbra d7,JNLoop ;---Alle Gadgets mit neuen Werten anzeigen bsr AllNeu ;Alle Gadgets refreshen bra GaLoop ;und zur Gadgetabfrage ;---------------------- ;---Einstellungen SAVEN DefSaven: move.l #1006,d2 ;Modus 'NEW' bsr DefAuf ;File öffnen tst.l Defhd ;hat's geklappt ? beq.s DefErr ;nein, Fehler ausgeben ;---'DOLF' als Fileerkennung ins RAM move.l DefRAM,a1 ;Im RAM ab (A1) move.l #"DOLF",(a1)+ ;'DOLF' eintragen ;---37 Langworte ('027',0 etc.) ins RAM lea I1(pc),a0 ;Ab 'I1' moveq #36,d7 ;37 Langworte RAMLoo: move.l (a0)+,(a1)+ ;im RAM anhängen dbra d7,RAMLoo ;---17 'J' und 'N's ins RAM lea Text2+12(pc),a0 ;Ab 12.Byte in Text2 moveq #16,d7 ;17 mal JNiRAM: move.l (a0),a2 ;aus J/N-Adresse move.b (a2),(a1)+ ;'J' oder 'N' anhängen add.l #20,a0 ;A0 auf nächste J/N-Adresse dbra d7,JNiRAM move.l Defhd,d1 ;Ins File move.l DefRAM,d2 ;ab 'DefRAM' move.l #169,d3 ;169 Bytes jsr Write(a6) ;schreiben cmp.l d3,d0 ;Wirklich 169 Bytes geschrieben ? bne.s DefErr ;nein, Fehlermeldung bsr DefZu ;File schließen bra GaLoop ;und zurück in Abfrage ;----------------------------------------------- ;---'KANN 'ADOLF.EINSTELL' NICHT FINDEN' ausgeben noADO: lea DefNotTxt(pc),a1;Fehler bra.s EinFeh ;ausgeben und zurück in GaLoop ;---'FALSCHES EINSTELLFILE' ausgeben FaFile: bsr DefZu ;File schließen lea FalschFile(pc),a1;Fehler bra.s EinFeh ;ausgeben und in GaLoop ;---'FEHLER BEIM SPEICHERN' ausgeben DefErr: bsr DefZu ;File schließen lea DSchreib(pc),a1 ;Fehler bra.s EinFeh ;ausgeben und zur GaLoop ;---------------------------------------------- ;---FERTIG - Gadgetinhalte in Dezimalwerte umrechnen holFnt: lea I1(pc),a0 ;Gadgetinhalte ab (A0) lea Reset(pc),a1 ;dezimal nach (A1) moveq #0,d4 ;D4 = 0 wenn 3er Gadget moveq #29,d7 ;30 Werte bsr GaRech ;umrechnen tst.b d2 ;Irgendwo falscher Wert ? bne.s GadFeh ;dann Fehlermeldung ;---Inhalte der Gadgets für Breite/Max/Space/Abstand umrechnen moveq #1,d4 ;D4 = 1 wenn 2er Gadget moveq #6,d7 ;7 Werte bsr GaRech ;umrechnen tst.b d2 ;Irgendwo falscher Wert ? bne.s GadFeh ;dann Fehlermeldung ;---Anzahl Zeichen holen (max. 128 erlaubt) moveq #0,d7 ;D7 löschen moveq #0,d6 ;D6 auch move.b Letztes,d7 ;Letztes nach D7 move.b Erstes,d6 ;Erstes nach D6 sub.w d6,d7 ;Letztes - Erstes bmi.s Letzt ;< 0 ?, dann Fehler move.w d7,AnzZei ;= Anzahl Zeichen (-1) cmp.w #127,d7 ;Anzahl > 128 ? ble.s BrMax ;nein, ok, weiter ;---'MEHR ALS 128 ZEICHEN' ausgeben lea MehrTxt(pc),a1 bra.s EinFeh ;---'LETZTES ZEICHEN < ERSTES' ausgeben Letzt: lea LetztesTxt(pc),a1 ;---Fehler ausgeben/zurück in Gadgetabfrage EinFeh: bsr Fehler bra GaLoop ;-------------------------------------- ;---Falscher Wert in irgendeinem Gadget ;---Nummer und Adresse des Fehlergadgets holen ;---Cursorposition im Gadget auf 0 setzen ;---Gadget aktivieren (Cursor sichtbar) GadFeh: move.l a0,d0 ;Aktuelles Ix nach A0 subq.l #4,d0 ;- 4 = Adresse Ix sub.l #I1,d0 ;- Adresse I1 (=0,4,8,12...) lsr.l #2,d0 ;: 4 = Nummer 0,1,2,3,4,5... move.l d0,d1 ;Nummer auch in D1 lea Info1(pc),a2 ;Info1 ab (A2) mulu #36,d1 ;Nummer * 36 = InfoX clr.w 8(a2,d1) ;Da Cursor auf 0 setzen lea FehlGad(pc),a0 ;Tabelle Reihenfolge Gadgets move.b (a0,d0),d0 ;+ D0 = Nummer Fehlergadget mulu #44,d0 ;Nummer * 44 lea Res(pc),a0 ;+ 1.Gadgetadresse add.l d0,a0 ;= Fehlergadget-Adresse move.l a0,a5 ;in A5 merken move.w #$80,12(a5) ;'aktiv' ins Gadget moveq #1,d0 ;Das eine bsr GadNeu ;Gadget neu ausgeben clr.w 12(a5) ;'aktiv' wieder löschen bra mitTon ;Gadgets neu abfragen mit Ton ;----------------------------------------------- ;---Testen, ob Breite 12/10 größer als Max 12/10 BrMax: lea I31+4(pc),a0 ;12cpi-Info (+4 für GadFeh) ab A0 move.b Br12,d0 ;Breite cmp.b Ma12,d0 ;> Max ? bgt.s GadFeh ;ja, Fehler ausgeben addq.l #8,a0 ;10cpi-Info ab A0 move.b Br10,d0 ;Breite 10cpi cmp.b Ma10,d0 ;> Max 10cpi ? bgt.s GadFeh ;ja, Fehler ausgeben ;---Feststellen, welche J/N-Gadgets angeklickt sind ;---JNFlags+xx = 0, wenn im Gadget 'J' gewählt ist Flags: moveq #1,d6 ;D6 auf 1 ('N') setzen lea JNFlags-1(pc),a2;Ja/Nein-Flags ab (A2) lea Text2(pc),a0 ;Text-Adressen ab (A0) moveq #16,d7 ;17 Adressen testen FlagLo: move.l 12(a0),a1 ;im 12.Byte cmp.b #"J",(a1) ;'J' ? bne.s noJa ;nein, weiter moveq #0,d6 ;J/N-Flag = 0 ('J') noJa: move.b d6,(a2)+ ;J/N-Flag = 0 oder 1 eintragen add.l #20,a0 ;A0 auf nächste Text-Adresse moveq #1,d6 ;J/N-Flag wieder auf 1 ('N') dbra d7,FlagLo ;---Requester öffnen - Fontnamen holen bsr Farben bsr Requester ;Fontnamen holen cmp.w #4711,d0 ;Fehler ? bne.s w1 ;nein, weiter ;---Fehler im Einstellfenster ausgeben, Textadresse in A1 OhJeh: bsr Fehler ;Fehler ausgeben bra Haupt ;und von vorne w1: tst.w d6 ;'UUPS!' angeklickt ? beq Haupt ;dann von vorne ;---Fontnamen aus Pfad holen lea Pfad(pc),a0 ;Kompletter Pfad ab (A0) moveq #0,d7 ;D7 löschen move.w PfLang,d7 ;Komplette Pfadlänge nach D7 subq.w #1,d7 ;- 1 wegen Loop add.l d7,a0 ;A0 auf letztes Byte setzen FnLoop: move.b -(a0),d0 ;1 Byte holen cmp.b #"/",d0 ;= "/" ? beq.s NameDa ;ja, ok cmp.b #":",d0 ;= ":" ? beq.s NameDa ;ja, ok dbra d7,FnLoop ;sonst nächstes Byte holen NameDa: tst.b (a0)+ ;"/" oder ":" wieder überlesen lea FntName(pc),a1 ;und Fontnamen ab (A0) bsr Kopie ;in FntName kopieren ;---Fontnamen (kompletter Pfad + '.font') in TextAttr eintragen lea Pfad(pc),a0 ;Pfad lea FntPfad(pc),a1 ;in Fontpfad bsr Kopie2 ;kopieren lea pfontTxt(pc),a0 ;'.font' bsr Kopie ;anhängen ;---Fonthöhe (ASCII-Text) in Dezimal-Zahl wandeln lea Filename(pc),a0 ;Höhe als ASCII-Text ab (A0) moveq #0,d0 ;D0 löschen moveq #0,d1 ;D1 auch moveq #0,d2 ;und D2 move.b (a0)+,d0 ;1.ASCII nach D0 sub.b #48,d0 ;- 48 = Zahl move.b (a0)+,d1 ;2.ASCII nach D1 sub.b #48,d1 ;- 48 = Zahl move.b (a0)+,d2 ;3.ASCII nach D2 sub.b #48,d2 ;- 48 = Zahl cmp.w #2,FiLang ;ASCII-Stellen = 2 ? bmi.s inSize ;< 2, also 1-stellig bgt.s is3 ;> 2, also 3-stellig ;---Zahl ist 2-stellig is2: mulu #10,d0 ;1.Zahl * 10 add.w d1,d0 ;2.Zahl addieren bra.s inSize ;und eintragen ;---Zahl ist 3-stellig is3: mulu #100,d0 ;1.Zahl * 100 mulu #10,d1 ;2.Zahl * 10 add.w d1,d0 ;2.Zahl addieren add.w d2,d0 ;3.Zahl addieren ;---Höhe über 200 ? - kann vorkommen, wenn keine Zahl, ;---sondern z.B. '??c' als Höhe angegeben ist ;---Dann wird als Höhe 24 eingetragen; das Betriebssystem ;---lädt dann den passendsten in der Directory vorhandenen Font inSize: cmp.w #201,d0 ;Höhe < 201 ? bmi.s HoOK ;ja, weiter move.w #24,taYSize ;zu groß, 24 eintragen bra.s UmAuf ;und zur Umwandlung ;---Zahl in TextAttr eintragen HoOK: move.w d0,taYSize ;Zahl eintragen ;---Umwandlungsfenster öffnen UmAuf: lea UmWin(pc),a0 ;Fenster move.l IntBase,a6 jsr OpenWindow(a6) ;öffnen move.l d0,Umhd ;Header merken bne.s onDisk ;hat geklappt, weiter ;---Fenster konnte nicht geöffnet werden NoWin: lea NoWinTxt(pc),a1 ;'FENSTER NIX DA' bra OhJeh ;ausgeben und von vorn ;---Fensterdaten übergeben onDisk: move.l d0,Fenster ;Fensterheader übergeben bsr JAM2 ;Schriftart/Farbe setzen move.l RastPort,RastUm ;Rastport merken ;---Lock auf aktuellen Pfad holen move.l #Pfad,d1 ;z.B.: 'DF1:TolleFonts/Tropic' moveq #-2,d2 ;Leselock move.l DosBase,a6 ;auf Pfad jsr Lock(a6) ;holen move.l d0,PfadLock ;und merken ;---Assign fonts: DF1:TolleFonts/Tropic move.l fontsDir,a0 ;'fonts'-Device, da ab 12.Byte move.l d0,12(a0) ;Pfad-Lock eintragen ;---Font auf Disk suchen lea TextAttr(pc),a0 ;Font auf move.l FntBase,a6 ;Diskette jsr OpenDiskFont(a6);öffnen move.l d0,TextFont ;Header merken bne.s FontAn ;hat geklappt, weiter ;---Font nicht gefunden - Requester wieder aufrufen FntErr: lea NoFntTxt(pc),a1 ;'FONT NIX AUF DISK oder wie?' bsr Fehler ;ausgeben bsr AssignAlt ;Assign wie vorher bsr CloseWin ;Umwandlungs-Fenster zu bsr EinFen ;Daten vom Einst.Fenster holen bra Flags ;und wieder zum Requester ;---Fontdaten merken und Font einschalten FontAn: move.l TextFont,a0 ;Fontheader nach A0 move.w 20(a0),ySize ;Fonthöhe move.w 24(a0),xSize ;Fontbreite move.b 32(a0),FntEr ;Erstes und move.b 33(a0),FntLe ;letztes Zeichen merken move.l 44(a0),SpacePtr ;Größe Zeichenmatrix move.l 48(a0),CharKern ;Pos. Zeichen in Matrix move.l RastPort,a1 ;Fenster-Rastport nach A1 move.l GfxBase,a6 jsr SetFont(a6) ;Font einschalten ;---Anzahl Zeichen im geladenen Zeichensatz feststellen moveq #0,d7 ;D7 löschen move.b FntLe,d7 ;Letztes Zeichen sub.b FntEr,d7 ;- Erstes = Anzahl (-1) move.w d7,d6 ;Anzahl nach D6 (für KernLoop) move.l d7,d0 ;Anzahl addq.w #1,d0 ;+1 in lea FntAn(pc),a0 ;ASCII-Text für bsr ASC3 ;Ausgabe im Fenster wandeln ;---xSize = Matrixbreite des größten Zeichens move.w xSize,d0 ;D0 = Angegebene Fontbreite tst.l SpacePtr ;SpacePtr vorhanden ? beq.s noSpa ;nein, Font ist nicht proportional move.l SpacePtr,a0 ;Ab A0 die Matrix-Breiten SpLoop: move.w (a0)+,d1 ;Eine Breite nach D1 cmp.w d0,d1 ;mit D0 vergleichen blt.s noGr ;ist nicht größer, weiter move.w d1,d0 ;D0 = Breite und neuer Vergleichswert noGr: dbra d7,SpLoop ;und weiter vergleichen ;---Breite, Erstes und letztes Zeichen als ASCIItext merken noSpa: move.w d0,xSize ;xSize = D0 = größte Breite ext.l d0 ;Auf Langwortgöße bringen lea FntBr(pc),a0 ;und für Ausgabe bsr ASC3 ;in ASCII wandeln moveq #0,d0 ;D0 löschen move.w ySize,d0 ;Fonthöhe nach D0 lea FntHo(pc),a0 ;in ASCII-Text bsr ASC3 ;wandeln ;---CharKern's alle auf 0 setzen tst.l CharKern ;Gibt's welche ? beq.s Aaus ;nein, weiter move.l CharKern,a0 ;Ab A0 die Kern's KeLoop: clr.w (a0)+ ;Kern löschen dbra d6,KeLoop ;und den Nächsten ;---'A' im Umwandlungsfenster ausgeben Aaus: move.w #$4100,Undo ;'A' + Nullbyte in Undopuffer bsr Print2 ;und ausgeben ;---Im Datenfenster werden die gleichen Gadgets wie im ;---Requester verwendet, allerdings müssen vorher die ;---Farben der Texte und der Umrandungen geändert werden moveq #1,d0 ;Farben alle bsr FarbeW ;Weiß machen ;---Fontdatenfenster öffnen lea FDWin(pc),a0 ;Fenster move.l IntBase,a6 jsr OpenWindow(a6) ;öffnen move.l d0,FDhd ;Header merken bne.s FntDa ;hat geklappt, weiter ;---Fenster konnte nicht geöffnet werden bsr AssignAlt ;Assign wie vorher bsr CloseWin ;Umwandlungsfenster schließen bsr EinFen ;Daten Einstellfenster holen bra NoWin ;'NIX FENSTER' und von vorn FntDa: move.l d0,Fenster ;Fontdatenfenster = Aktuelles bsr JAM2 ;Schriftart/Farbe setzen move.l RastPort,RastFD ;RastPort merken ;---Fontdaten ausgeben bsr Texte2Aus ;---Gadgets im Fontdatenfenster abfragen FDLoop: bsr Warte ;Warten auf cmp.w #$40,d7 ;GADGET UP ? bne.s FDLoop ;nein, weiter warten cmp.w #4711,d6 ;OK ? beq.s FntUm ;ja, weiter cmp.w #4712,d6 ;UUPS! ? bne.s noUups ;nein, weiter, sonst FDend: bsr CloseWin ;Fenster schließen bra FntEnd ;Font zu und zum Requester noUups: sub.w #500,d6 ;D6 - 500 = 0,1,2,3 oder 4 bmi.s FDLoop ;doch < 0 ?, dann weiter warten ext.l d6 ;D6 auf Langwort mulu #6,d6 ;* 6 für Adresse Gadget lea Laufwerke(pc),a0;'DF0:', 'DF1:'- add.l d6,a0 ;Text lea SaveDisk(pc),a1 ;nach SaveDisk bsr Kopie ;kopieren bsr Texte2Aus ;Fontdaten neu ausgeben bra.s FDLoop ;und wieder zur Abfrage ;----------------- ;---Font umrechnen FntUm: bsr CloseWin ;Datenfenster schließen move.l RastUm,RastPort ;Daten vom move.l Umhd,Fenster ;Umwandlungs-Fenster move.l #UmwanTxt,Ueber ;übergeben ;---CheckAusnahme ChrAnf,Ch,Ch1,Ch2,0 moveq #0,d7 ;D7 löschen move.b Erstes,d7 ;Erstes Zeichen nach D7 bsr Check0 ;und checken ;---xAnf, xEnd, yAnf, yEnd und wdth für jedes Zeichen suchen move.l xAnf2,a2 ;hier move.l yAnf2,a3 ;werden die move.l yEnd2,a4 ;ermittelten move.l wdth2,a5 ;Werte im RAM eingetragen move.w #-1,maxwdth ;maxWdth=-1 move.w #-1,maxyEnd ;maxyEnd=-1 move.w ySize,minyAnf ;minyAnf=tf.ySize move.b #0,Undo+1 ;1-Zeichen-Text mit 0-Byte versehen moveq #0,d7 ;D7 löschen move.b Erstes,d7 ;Buchstaben nach D7 Check: bsr Check1 ;und untersuchen move.b Char+1,Undo ;Buchstaben in Undopuffer bsr Print1 ;und ausgeben move.l GfxBase,a6 ;ab jetzt GfxBase in A6 move.w xSize,xAnf move.w ySize,yAnf move.w #-1,xEnd move.w #-1,yEnd moveq #0,d6 xLoop: moveq #0,d5 yLoop: ;bsr Point ;D6 = x, D5 = y move.w d6,d0 move.w d5,d1 move.l RastPort,a1 jsr ReadPixel(a6) tst.l d0 ;Farbe 0 oder 1 in D0 beq.s noPoi ;Punkt nicht gesetzt ;---Punkt gesetzt cmp.w xAnf,d6 bge.s w80 move.w d6,xAnf w80: cmp.w yAnf,d5 bge.s w81 move.w d5,yAnf w81: cmp.w yEnd,d5 bmi.s w82 move.w d5,yEnd w82: move.w d6,xEnd ;---Punkt nicht gesetzt/weiter noPoi: addq.w #1,d5 ;y erhöhen cmp.w ySize,d5 ;schon = ySize ? bne.s yLoop ;nein, weiter addq.w #1,d6 ;x erhöhen cmp.w xSize,d6 ;schon = xSize ? bne.s xLoop ;nein, weiter move.w xSize,d0 cmp.w xAnf,d0 bne.s w83 move.w #0,xAnf w83: move.w xAnf,(a2) ;xAnf, move.w yAnf,(a3) ;yAnf und move.w yEnd,(a4) ;yEnd im RAM move.w xEnd,d0 sub.w xAnf,d0 move.w d0,(a5) ;wdth move.w maxwdth,d0 cmp.w (a5),d0 bge.s w84 move.w (a5),maxwdth w84: move.w minyAnf,d0 cmp.w (a3),d0 bmi.s w85 move.w (a3),minyAnf w85: move.w maxyEnd,d0 cmp.w (a4),d0 bge.s w86 move.w (a4),maxyEnd w86: tst.w (a2)+ ;Adressen tst.w (a3)+ ;im RAM tst.w (a4)+ ;um je tst.w (a5)+ ;1 Wort weiter cmp.b Letztes,d7 ;war's das letzte Zeichen ? beq.s w87 ;ja, dann weiter addq.b #1,d7 ;sonst 1 Zeichen weiter bra Check ;und Das untersuchen w87: move.w minyAnf,d0 cmp.w ySize,d0 bne.s w88 move.w #0,minyAnf w88: move.w maxyEnd,d0 sub.w minyAnf,d0 move.w d0,maxhght cmp.w #1,maxwdth ;maxwdth < 1 ? bmi.s Unsinn ;ja, Fehlermeldung ausgeben tst.w maxhght ;maxhght > 0 ? bgt.s w89 ;ja, weiter ;---'FONT ENTHÄLT UNSINNIGE WERTE' ausgeben Unsinn: lea UnsinnTxt(pc),a1;Text ausgeben bra VFehl ;und zurück in Requester ;---FOR i=0 TO ChrEnd-ChrAnf ;--- yAnf(i)=yAnf(i)-min.yAnf ;--- yEnd(i)=yEnd(i)-min.yAnf ;---NEXT w89: move.w AnzZei,d7 ;D7 = Anzahl Zeichen (-1) move.l yAnf2,a5 ;yAnf(i) ab (A5) move.l yEnd2,a4 ;yEnd(i) ab (A4) move.w minyAnf,d3 ;min.yAnf in D3 AELoop: move.w (a5),d0 ;yAnf(i) sub.w d3,d0 ;- min.yAnf move.w d0,(a5)+ ;nach yAnf(i) move.w (a4),d0 ;yEnd(i) sub.w d3,d0 ;- min.yEnd move.w d0,(a4)+ ;nach yEnd(i) dbra d7,AELoop ;und weiter bis alle Zeichen ;------- --------------- ;---Fontart wandeln - max. 12 Durchgänge ;--------------------------------------- NextArt: sf Normal ;3 Flags sf Shadow ;für Schriftarten sf Outline ;erstmal löschen st PropFlag ;Prop-Flag setzen move.b BrPr,ZeBr ;Zeichenbreite = Breite Proportional lea JNFlags(pc),a0 ;J/N-Flags ab (A0) lea FileTexte(pc),a1;Texte 'p', '12s0' etc. ab (A1) lea FileTxt(pc),a2 ;Filename ab (A2) ;---Prop-Normal tst.b (a0) ;Prop = 'N' oder schon fertig ? bne.s PropS ;ja, weiter st (a0) ;Prop-Normal-ist-fertig setzen move.l (a1),(a2) ;File: 'p' bra xNorm ;Fontart wandeln, File schreiben ;---Prop-Shadow PropS: tst.b 3(a0) bne.s PropO st 3(a0) move.l 12(a1),(a2) ;File: 'ps' bra xSh ;---Prop-Outline PropO: tst.b 6(a0) bne.s PropSO st 6(a0) move.l 24(a1),(a2) ;File: 'po' bra xOu ;---Prop-Shadow+Outline PropSO: tst.b 9(a0) bne.s CP12 st 9(a0) move.l 36(a1),(a2) ;File: 'pso' bra xShOu ;---12 CPI-Normal CP12: sf PropFlag ;Prop-Flag löschen st CP12Flag ;dafür CP12-Flag setzen move.b Br12,ZeBr ;Zeichenbreite = Breite 12 CPI move.b Ma12,ZeMa ;Space = Space 12 CPI tst.b 1(a0) bne.s CP12S st 1(a0) move.l 4(a1),(a2) ;File: '12' bra xNorm ;---12 CPI-Shadow CP12S: tst.b 4(a0) bne.s CP12O st 4(a0) move.l 16(a1),(a2) ;File: '12s',0 bra xSh ;---12 CPI-Outline CP12O: tst.b 7(a0) bne.s CP12SO st 7(a0) move.l 28(a1),(a2) ;File: '12o' bra xOu ;---12 CPI-Shadow+Outline CP12SO: tst.b 10(a0) bne.s CP10 st 10(a0) move.l 40(a1),(a2) ;File: '12so' bra xShOu ;---10 CPI-Normal CP10: sf CP12Flag ;CP12-Flag löschen move.b Br10,ZeBr ;Zeichenbreite = Breite 10 CPI move.b Ma10,ZeMa ;Space = Space 10 CPI tst.b 2(a0) bne.s CP10S st 2(a0) move.l 8(a1),(a2) ;File: '10' bra xNorm ;---10 CPI-Shadow CP10S: tst.b 5(a0) bne.s CP10O st 5(a0) move.l 20(a1),(a2) ;File: '10s' bra.s xSh ;---10 CPI-Outline CP10O: tst.b 8(a0) bne.s CP10SO st 8(a0) move.l 32(a1),(a2) ;File: '10o' bra.s xOu ;---10 CPI-Shadow+Outline CP10SO: tst.b 11(a0) ;Flag gesetzt ? beq.s w10SO ;dann ALLES fertig bsr Sags ;'ZEICHENSATZ FERTIG' sagen bra FntEnd ;und zurück in Requester w10SO: st 11(a0) move.l 44(a1),(a2) ;File: '10so' ;---Je nach Fontart Flags setzen und Fensterüberschrift holen xShOu: move.b #4,style ;Style = 4, Shadow+Outline lea UShOTxt(pc),a5 ;Text 'SHADOW+OUTLINE' ab (A5) bra.s PrTest ;und weiter (KEIN Flag gesetzt) xSh: move.b #2,style ;Style = 2, Shadow st Shadow ;Flag setzen lea UShTxt(pc),a5 ;Text 'SHADOW' ab (A5) bra.s PrTest ;und weiter xOu: move.b #2,style ;Style = 2, Outline st Outline ;Flag setzen lea UOutTxt(pc),a5 ;Text 'OUTLINE' ab (A5) bra.s PrTest ;und weiter xNorm: move.b #0,style ;Style = 0, Normal st Normal ;Flag setzen lea AbbrTxt-1(pc),a5;Nullbyte in (A5) (kein Text) ;---Vergrößerungsgadgets testen (nur wenn Art = Proportional) PrTest: tst.b PropFlag ;Prop ? beq FrTest ;nein, weiter ;---Vergrößern: J ? tst.b 13(a0) ;'J' ? beq FrTest ;ja, alles klar, normal weiter ;---'Breite', maxBreite und maxHöhe für Tests holen move.b style,d3 ;style (0, 2 oder 4) nach D3 moveq #0,d0 ;D0 löschen move.b BrPr,d0 ;'Breite' nach D0 move.w maxwdth,d1 ;Breiteste Breite add.b d3,d1 ;+ style nach D1 move.w maxhght,d2 ;Höchste Höhe add.b d3,d2 ;+ style nach D2 ;---'NV', 'NB' oder 'NH' an Filenamen anhängen ;---Hier schon mal das 'N' - die anderen später lea FileTxt(pc),a0 ;'pxx' lea Undo(pc),a1 ;in Undopuffer bsr Kopie ;kopieren tst.b -(a0) ;zurück aufs NullByte im Filetext move.b #"N",(a0)+ ;Nullbyte durch 'N' ersetzen ;---Nur Höhe: J ? move.b #"H",(a0) ;'H' an Filenamen (erstmal) tst.b JNFlags+14 ;'J' ? bne.s NurBr ;nein, weiter ;---Wenn breitestes Zeichen im Font breiter als 'Breite' ist, ;---MUSS der Font in der Breite verkleinert werden, also ;---ist 'Nur Höhe' vergrößern NICHT erlaubt cmp.w d1,d0 ;'Breite' größer oder bge.s FrTest ;gleich 'maxwdth' ?, dann ok ;---'FONT ZU BREIT' ausgeben lea VErrNHTxt(pc),a1 bra.s VFehl ;---Nur Breite: J ? nurBr: move.b #"B",(a0) ;'B' an Filenamen (erstmal) tst.b JNFlags+15 ;'J' ? bne.s NixVer ;nein, überhaupt nicht vergrößern ;---Wenn höchstes Zeichen höher als 24 ist, dann ;---ist 'Nur Breite' NICHT erlaubt cmp.w #25,d2 ;Höhe < 25 ? blt.s FrTest ;dann ok ;---'FONT ZU HOCH' ausgeben lea VErrNBTxt(pc),a1 bra.s VFehl ;---Es soll überhaupt nicht vergrößert werden ;---Wie bei 'Nur Höhe' und 'Nur Breite' NixVer: move.b #"V",(a0) ;'V' an Filenamen cmp.w #24,d2 ;maxHöhe > 24 ? bgt.s NVFehl ;dann Fehlermeldung cmp.w d1,d0 ;'Breite' >= maxBreite ? bge.s FrTest ;dann OK, weiter ;---'FONT ZU HOCH ODER ZU BREIT' ausgeben NVFehl: lea VErrNVTxt(pc),a1 VFehl: move.b #0,FileTxt+4 ;Nullyte für 'N', 'V' oder 'B' bsr Fehler ;Fehler ausgeben bra FntEnd ;und zurück in Requester ;------------------------------------- ;---Font untersuchen/wandeln/speichern FrTest: bsr FreiTest ;Freie Blöcke/Schreibschutz testen cmp.w #4711,d0 ;Fehler ? beq FntEnd ;ja, zurück in Requester ;---Vorspann in Druckerpuffer eintragen ;---Ist ein wenig umständlich, da die Daten in einer ;---anderen Reihenfolge als im Speicher zum Drucker ;---geschickt werden müssen move.l Puffer,a1 ;Ab (A1) Puffer für Daten tst.b mReset ;Reset vorher: J ? bne.s noRes ;nein, weiter ;---ZweiB/DreiB/FunfB kopieren nur die verlangte Anzahl Bytes ;---wenn im ERSTEN Gadget NICHT '000' steht ;---Reset lea Reset(pc),a0 ;ab Reset bsr ZweiB ;2 Bytes kopieren ;---Deutschen Zeichensatz einschalten noRes: lea Dein(pc),a0 ;Ab 'Dein' bsr DreiB ;3 Bytes an Puffer anhängen ;---Sonstiges lea Sonstiges(pc),a0;Ab 'Sonstiges' bsr ZweiB ;2 Bytes anhängen ;---NLQ einschalten lea NLQein(pc),a0 ;ab 'NLQein' bsr DreiB ;3 Bytes anhängen ;---Proportional einschalten tst.b PropFlag ;Art = Proportional ? beq.s is12 ;nein, weiter lea UPropTxt(pc),a4;'PROPORTIONAL'-Text für Überschrift lea PROein(pc),a0 ;ab 'PROein' bsr DreiB ;3 Bytes anhängen bra.s ROinRA ;und weiter ;---12 CPI einschalten is12: tst.b CP12Flag ;Art = 12 CPI ? beq.s is10 ;nein, weiter lea U12CPTxt(pc),a4 ;'12 CPI'-Text für Überschrift lea C12ein(pc),a0 ;ab 'C12ein' bra.s ZweiBy ;2 Bytes anhängen ;---10 CPI einschalten is10: lea U10CPTxt(pc),a4 ;'10 CPI-Text für Überschrift lea C10ein(pc),a0 ;ab 'C10ein' ;---2 Bytes anhängen ZweiBy: bsr ZweiB ;2 Bytes anhängen ;---ROM in RAM kopieren ROinRA: lea ROMRAM(pc),a0 ;ab 'ROMRAM' bsr FunfB ;5 Bytes anhängen ;---Zeichensatz laden lea ZSladen(pc),a0 ;ab 'ZSladen' bsr FunfB ;5 Bytes anhängen ;---Aktuelle Adresse des Puffers merken move.l a1,Puffer2 ;---Fensterüberschrift je nach Umwandlung move.l a4,a0 ;'PROP' '12CPI' '10CPI' lea TitelPu(pc),a1 ;in Puffer für Überschrift bsr Kopie2 ;kopieren move.l a5,a0 ;'SHADOW' 'OUTLINE' 'SHAD+OUT' bsr Kopie2 ;anhängen move.b #'"',(a1)+ ;" anhängen lea FntName(pc),a0 ;Fontnamen bsr Kopie2 ;anhängen move.b #'"',(a1)+ ;" anhängen lea AbbrTxt(pc),a0 ;'Abbruch: ENTER' bsr Kopie ;anhängen lea TitelPu(pc),a1 ;und gesamte Überschrift bsr WinTit ;neu ausgeben ;---normxv! = (maxCol(cpi) - st.add(style) -1) / max.wdth ;Top/8 xv! = ( 37 - 0 -1 / 5 = 7,2 ;37-0-1 = 36 ;*1000 = 36000 ;/5 = 7200 ;nachher wieder /1000 = 7.2 sf Abbruch ;Abbruch-Flag löschen moveq #0,d0 ;D0 löschen move.b ZeBr,d0 ;ZeichenBreite nach D0 subq.b #1,d0 ;-1 sub.b style,d0 ;-style mulu #1000,d0 ;* 1000 move.l d0,tausend ;Ergebnis merken move.w maxwdth,d1 ;größte Breite nach D1 divu d1,d0 ;D0 : maxwdth move.w d0,xv+2 ;Ergebnis (INT) 2 mal move.w d0,xvMerk ;merken (normxv!) ;---normvy! = (23 - st.add(style)) / max.hght moveq #23,d0 ;23 sub.b style,d0 ;-style mulu #1000,d0 ;* 1000 move.w maxhght,d1 divu d1,d0 ;: maxhght move.w d0,yv+2 ;Ergebnis (INT) merken (normvy!) ;---y-Koordinate ermitteln - ab da wird ausgegeben ;---yScroll ermitteln - um soviele Punkte wird hochgescrollt moveq #0,d0 ;D0 löschen move.w ySize,d0 ;ySize nach D0 cmp.w #24,d0 ;> 24 ? bgt.s isGr24 ;ja, dann ok moveq #24,d0 ;sonst D0 = 24 isGr24: add.l #2,d0 ;plus 2 (Punkte Abstand) move.w d0,yScroll ;um soviel Punkte hochscrollen mulu #1000,d0 ;mal 1000 add.l #500,d0 ;plus 500 (für später +.5) move.l d0,yKoor ;in yKoord ablegen ;---Zeichen untersuchen moveq #0,d7 ;D7 löschen move.b Erstes,d7 ;1.Zeichen in D7 bsr Check0 ;CheckAusnahme move.b #0,Undo+1 ;0-Byte in Undopuffer move.l wdth2,a5 ;RAM-Adressen move.l yAnf2,a4 ;der Breiten, move.l yEnd2,a3 ;x-und move.l xAnf2,a2 ;y-Anfänge- und enden ;---Alle Buchstaben nacheinander untersuchen/umwandeln PrLoop: bsr Check1 ;CheckAusnahme move.b Char+1,Undo ;Zeichen bsr Print1 ;ausgeben move.w (a5)+,wdthe ;wdth.e = wdth(El) move.w (a4)+,yAnf ;yAnf = yAnf(El) move.w (a3)+,yEnd ;yEnd = yEnd(El) move.w (a2)+,xAnf ;x-Richtung (für Scroll) ;---IF Ch=i OR wdth.e>=0 THEN weiter in noLiga cmp.w Char,d7 ;Ch=i ? beq noLiga ;ja, keine Ligatur ;---OR cmp.w #-1,wdthe ;wdth.e >= 0 ? bne noLiga ;ja, keine Ligatur ;---Zeichen als Ligatur zusammensetzen (Ä -> Ae) moveq #0,d3 ;D3 und moveq #0,d4 ;D4 löschen move.b Erstes,d3 ;Erstes nach D3 move.b Letztes,d4 ;Letztes nach D4 move.w Char1,d1 ;D1 = Char1 move.w Char2,d2 ;D2 = Char2 ;---ELSEIF ;---ChrAnf<=Ch1 AND Ch1<=ChrEnd AND ChrAnf<=Ch2 AND Ch2<=ChrEnd cmp.w d1,d3 ;ChrAnf <= Ch1 ? bgt noLiga ;nein, fertig ;---AND cmp.w d4,d1 ;Ch1 <= ChrEnd ? bgt noLiga ;nein, fertig ;---AND cmp.w d2,d3 ;ChrAnf <= Ch2 ? bgt noLiga ;nein, fertig ;---AND cmp.w d4,d2 ;Ch2 <= ChrEnd ? bgt noLiga ;nein, fertig ;---THEN ;---e1=Ch1-ChrAnf : e2=Ch2-ChrAnf ;---Daten von e1 und e2 holen sub.w d3,d1 ;e1 = Ch1 - ChrAnf sub.w d3,d2 ;e2 = Ch2 - ChrAnf lsl.w #1,d1 ;jeweils * 2, weil lsl.w #1,d2 ;Worte geholt werden move.l wdth2,a0 ;Breite move.w (a0,d1.w),wdthe1;von e1 move.w (a0,d2.w),wdthe2;und e2 move.l yAnf2,a0 ;yAnf move.w (a0,d1.w),yAnfe1 move.w (a0,d2.w),yAnfe2 move.l yEnd2,a0 ;yEnd move.w (a0,d1.w),yEnde1 move.w (a0,d2.w),yEnde2 move.l xAnf2,a0 ;xAnf move.w (a0,d1.w),xAnfe1 move.w (a0,d2.w),xAnfe2 ;---PrintChar 1,Ch1,e1 move.b Char1+1,Undo ;Char1 bsr Print1 ;ausgeben move.w xAnfe1,xAnf ;xAnf für Scroll übergeben bsr Scroll ;Zeichen 1 richtig hinscrollen ;---PrintChar 2,Ch2,e2 move.w wdthe1,d0 ;Breite 1.Zeichen addq.w #1,d0 ;+ 1 = x-Koordinate 2.Zeichen move.b Char2+1,Undo ;Char2 bsr Print3 ;ausgeben move.w xAnfe2,xAnf ;xAnf für Scroll übergeben move.w wdthe1,d2 ;x-Koordinate für Scroll = addq.w #1,d2 ;Breite 1.Zeichen + 1 bsr Scro2 ;und Zeichen 2 ranscrollen ;---wdth.e=wdth(e1)+wdth(e2)+1 move.w wdthe1,d0 ;wdth(e1) nach D0 add.w wdthe2,d0 ;+ wdth(e2) addq.w #1,d0 ;+ 1 move.w d0,wdthe ;= wdthe ;---IF wdth.e>max.wdthe THEN w=wdth.e ELSE w=max.wdth move.w maxwdth,d5 ;w (D5) = maxwdth cmp.w d5,d0 ;wdth.e > maxwdth ? ble.s wD5 ;nein: w ist in D5 move.w wdthe,d5 ;sonst w = wdth.e ;---IF yAnf(e1)yEnd(e2) THEN yEnd(El)=yEnd(e1) ;--- ELSE yEnd(El)=yEnd(e2) yAnOK: move.w yEnde1,d0 move.w d0,yEnd cmp.w yEnde2,d0 bgt.s yEnOK move.w yEnde2,yEnd ;---ConvChar ((maxCol(cpi)-st.add(style)-1/w),normvy! yEnOK: move.l tausend,d0 ;maxCol..... divu d5,d0 ;geteilt durch w move.w d0,xv+2 ;= normxv! ;---Ch=Ch1 ;---El=e1 (fällt weg) move.w Char1,Char ;Char = Char1 für GetChar move.w xAnfe1,xAnf ;xAnf vom 1. für ConvChar ;---Testen, ob Ligatur zu breit zum NICHT-Vergrößern ist ;---Dann wird dieses Zeichen normal verkleinert add.b style,d5 ;Ligaturbreite (w) + style cmp.b BrPr,d5 ;Ligaturbreite <= Breite prop ? bmi.s GTZ ;ja, ok, weiter, sonst st zuBreit ;Flag 'Ligatur zu breit' setzen bra.s GTZ ;Get That Zeichen! ;--------------------------------------------- ;---SCROLL (0,0)-(200,tf.ySize-1),-xAnf(El),dy noLiga: bsr Scroll ;---Zeichen darstellen/vergrößern/verkleinern GTZ: movem.l d0-d7/a0-a6,-(sp) ;Alle Register retten bsr ConvChar ;Zeichen darstellen move.w xvMerk,xv+2 ;wieder altes xv movem.l (sp)+,d0-d7/a0-a6 ;Register zurückholen tst.b Abbruch ;wurde 'ENTER' gedrückt ? bne.s FntEnd ;ja, Abbruch ;---Zeichen umrechnen - Daten in Puffer schreiben movem.l d0-d7/a0-a6,-(sp) bsr GetChar ;Zeichen umrechnen movem.l (sp)+,d0-d7/a0-a6 cmp.b Letztes,d7 ;letztes Zeichen erreicht ? beq.s FontOK ;dann alle fertig - weiter addq.b #1,d7 ;sonst D7 erhöhen bra PrLoop ;und Nächstes umrechnen ;---Font fertig, komplettes File auf Diskette schreiben FontOK: bsr FileWeg cmp.w #4711,d0 ;Fehler ? bne NextArt ;nein, nächste Art wandeln, sonst ;----------------------------------------- ;---Font schließen und zurück in Requester FntEnd: move.l TextFont,a1 ;Font move.l GfxBase,a6 jsr CloseFont(a6) ;schließen ;---Assign fonts: auf original 'fonts'-Dir bsr AssignAlt ;---Umwandlungsfenster schließen und zurück move.l Umhd,Fenster ;Fenster bsr CloseWin ;schließen bsr EinFen ;Daten Einstellfenster holen bra Flags ;und zurück in Requester ;------------------------------------------------ ;************* UNTERPROGRAMME ******************* ;------------------------------------------------------- ;UP - Gadgetinhalte umrechnen und Dezimalwerte eintragen ; In D7 Anzahl umzurechnender Gadgets ; Ab (A0)+ Gadgetwerte, umgerechnet nach (A1)+ ;------------------------------------------------------- ;---Werte in Gadgets mit 3 Stellen dürfen nicht > 255 sein, ;---in Gadgets mit 2 Stellen nicht > 50 GaRech: moveq #0,d0 ;D0, moveq #0,d1 ;D1 und moveq #0,d2 ;D2 löschen move.b (a0)+,d0 ;3 Bytes move.b (a0)+,d1 ;aus move.b (a0)+,d2 ;Gadget holen tst.b (a0)+ ;Nullbyte überlesen ;---ASCII minus 48 = dezimal sub.b #48,d0 ;D0 - 48 bmi.s isNIX ;< 0 ?, dann Fehler sub.b #48,d1 ;D1 - 48 bmi.s isNIX ;< 0 ? ?, dann Fehler tst.b d4 ;Gadget mit 3 Stellen ? beq.s DreiSt ;Ja, weiter ;---Inhalt 2er-Gadget ausrechnen mulu #10,d0 ;D0 * 10 add.w d1,d0 ;D0 + D1 cmp.w #50,d0 ;D0 > 50 ? bgt.s isNix ;dann Fehler, sonst ;---Dezimalwert als Byte eintragen ByOK: move.b d0,(a1)+ ;Bytewert aus D0 eintragen dbra d7,GaRech ;und nächsten Wert umrechnen moveq #0,d2 ;D2 = 0 = alles OK rts ;und zurück ;------------------------------- ;---Inhalt 3er Gadget ausrechnen DreiSt: sub.b #48,d2 ;D2 - 48 bmi.s isNIX ;< 0 ?, dann Fehler mulu #100,d0 ;D0 * 100 mulu #10,d1 ;D1 * 10 add.w d1,d0 ;D0 + D1 add.w d2,d0 ;D0 + D2 cmp.w #256,d0 ;D0 < 256 ? blt.s ByOK ;dann Wert eintragen, sonst isNIX: moveq #1,d2 ;'Inhalt falsch'-Flag setzen rts ;und zurück ;----------------------------- ;UP - Einstellungs-File öffnen ;----------------------------- DefAuf: clr.l Defhd ;Header löschen lea DefLSTxt(pc),a0 ;'ADOLF.EINSTELL' lea Undo(pc),a1 ;in Puffer bsr Kopie ;kopieren move.l #Undo,d1 ;Filename in D1 move.l DosBase,a6 ;(Modus in D2) jsr Open(a6) ;File öffnen move.l d0,Defhd ;Header merken ;---Falls sich Betriebssystem mit Requester gemeldet hat, ;---muß der ADOLF-Screen wieder in den Vordergrund geholt werden ScrTF: move.l Scrhd,a0 ;Screen move.l IntBase,a6 ;in Vordergrund jsr ScreenToFront(a6);holen (falls Fehler) move.l DosBase,a6 ;wieder DosBase nach A6 DefRET: rts ;und zurück ;------------------------------------------------- ;UP - Einstellungs-File schließen - falls geöffnet ;------------------------------------------------- DefZu: move.l Defhd,d1 ;File beq.s DefRET ;nicht vorhanden, zurück jmp Close(a6) ;sonst schließen und zurück ;--------------------------------------------------------- ;UP - Farben für Requester/Fontdatenfenster-Gadgets eintragen ;--------------------------------------------------------- Farben: moveq #2,d0 ;Farbe = 2 = schwarz FarbeW: move.b d0,Box+4 ;Boxfarbe einstellen lea DF0Txt(pc),a0 ;In Textstrukturen moveq #4,d7 ;5 mal FaLoop: move.b d0,(a0) ;Textfarbe einstellen add.l #20,a0 ;A0 auf nächsten Text dbra d7,FaLoop rts ;und zurück ;----------------------- ;UP - Sag' was, Du Sack! ;----------------------- Sags: tst.l DevBase ;Device angemeldet ? beq.s wSags ;ja, weiter rts ;sonst zurück ;---Werte in I/O-Struktur eintragen wSags: lea TalkIO(pc),a1 ;Struktur ab (A1) move.l #Reply,14(a1) ;Zeiger auf Port move.w #3,28(a1) ;Commando WRITE move.l #SayEnd-SayTxt,36(a1);Textlänge move.l #SayTxt,40(a1) ;Textadresse move.l #Audio,56(a1) ;Masken für Audiokanäle move.w #4,60(a1) ;4 Masken ;---Defaultwerte, Eintrag nur, wenn Änderung gewünscht ;move.w #150,48(a1) ;Rate (40-400) *150 ;move.w #110,50(a1) ;Pitch (65-320) *110 ;move.w #0,52(a1) ;Betonung (0/1) *0 ;move.w #0,54(a1) ;Geschlecht (0/1) *0 ;move.w #64,62(a1) ;Lautstärke (0-64) *64 ;move.w #22000,64(a1) ;Abtastrate (5000-28000) *22000 ;---Sprachausgabe starten move.l ExecBase,a6 jmp DoIo(a6) ;Ausgabe starten ;----------------------------------------------- ;UP - SCROLL (0,0)-(200,tf.ySize-1),-xAnf(El),dy ;----------------------------------------------- Scroll: moveq #0,d2 ;(0,0) Scro2: moveq #0,d3 move.w #200,d4 ;-(200,tf.ySize-1) move.w ySize,d5 subq.w #1,d5 move.w xAnf,d0 ;Anzahl in x und move.w minyAnf,d1 ;y-Richtung move.l RastPort,a1 move.l GfxBase,a6 jmp ScrollRaster(a6);scrollen ;------------------------------ ;UP - Checkausnahme (Modus = 0) ;------------------------------ Check0: lea Ausnahmen(pc),a0;RESTORE Ausnahmen move.b (a0)+,nextAusn+1;READ nextAusnahme move.b #7,Ausn ;noch 7 Ausnahmen WhileA: tst.b Ausn ;Ausnahmen > 0 ? beq.s AusEnd ;nein, zurück cmp.w nextAusn,d7 ;nextAusnahme < ASCII ? bmi.s AusEnd ;nein, zurück move.b (a0)+,Char+1 ;READ Char, move.b (a0)+,Char1+1 ;Char1, move.b (a0)+,Char2+1 ;Char2 tst.b Ausn ;Ausnahmen > 0 ? beq.s AusEnd ;nein, zurück move.b (a0)+,nextAusn+1;READ nextAusnahme subq.b #1,Ausn ;Ausnahmen = Ausnahmen - 1 bra.s WhileA ;WEND ;------------------------------ ;UP - Checkausnahme (Modus = 1) ;------------------------------ Check1: cmp.w nextAusn,d7 ;ASCII = nextAusnahme ? bne.s CHisAS ;nein, Char = ASCII move.l AusnData,a0 ;READ move.b (a0)+,Char+1 ;Char, move.b (a0)+,Char1+1 ;Char1, move.b (a0)+,Char2+1 ;Char2 tst.b Ausn ;Ausnahmen > 0 ? beq.s AusEnd ;nein, zurück move.b (a0)+,nextAusn+1;READ nextAusnahme subq.b #1,Ausn ;Ausnahmen = Ausnahmen - 1 AusEnd: move.l a0,AusnData ;DATA-Zeiger merken rts ;und zurück CHisAS: move.b d7,Char+1 ;ELSE Char = ASCII rts ;und zurück ;---------------------------------------------- ;UP - Drei Bytes von (A0) nach (A1) kopieren ; Es sei denn, das 1.Byte ist ein Nullbyte! ;---------------------------------------------- DreiB: tst.b (a0) ;1.Byte eine 0 ? beq.s RET51 ;dann zurück noch3: move.b (a0)+,(a1)+ ;sonst noch2: move.b (a0)+,(a1)+ ;3 Bytes move.b (a0)+,(a1)+ ;kopieren RET51: rts ;------------------------------------------- ;UP - Zwei Bytes von (A0) nach (A1) kopieren ;------------------------------------------- ZweiB: tst.b (a0) ;1.Byte = 0 ? beq.s RET51 ;dann zurück bra.s noch2 ;sonst 2 Bytes kopieren ;------------------------------------------- ;UP - Fünf Bytes von (A0) nach (A1) kopieren ;------------------------------------------- FunfB: tst.b (a0) ;1.Byte = 0 ? beq.s RET51 ;dann zurück bsr noch3 ;sonst 3 Bytes bra.s noch2 ;und nochmal 2 kopieren ;-------------------------------------------------- ;UP - GetChar - Umwandlung des Zeichens für Drucker ;-------------------------------------------------- GetChar: move.l Puffer2,a5 ;Aktueller Pufferstand nach A5 move.w Char,d7 ;'Char' an D7 übergeben ;---columns=wdth.e+1 move.w wdthe,d3 addq.w #1,d3 ;D3 = columns ;---IF cpi=2 THEN tst.b PropFlag ;Prop-Flag gesetzt ? beq.s ZoZ ;nein, also 10 oder 12 CPI ;--------------------------- ;---FontArt ist Proportional ;--------------------------- tst.b d3 ;columns = 0 ? bne.s isDef ;nein, Zeichen ist definiert ;---Wenn Zeichen nicht definiert ist, wird ein Leerzeichen ;---mit der Breite 'Leerzeichen' (LePr) plus ;---'Zeichenabstand' (AbPr) zum Drucker geschickt move.b #0,(a5)+ ;'Links 0 frei' eintragen move.b #1,(a5)+ ;'columns = 1' eintragen move.b LePr,d5 ;Rechts frei = subq.b #1,d5 ;Leerzeichenbreite -1 add.b AbPr,d5 ;+ 'Zeichenabstand' move.b d5,(a5)+ ;'Rechts frei' eintragen bra.s Nullen ;PRINT #1, 3 Nullen ;---Zeichen ist definiert isDef: moveq #0,d0 ;Links 0 frei ;columns sind in D3 move.b AbPr,d5 ;Rechts 'AbPr' frei bra.s Printe ;Daten in Puffer schreiben ;----------------------------- ;---FontArt ist 12 oder 10 CPI ;----------------------------- ;---ls=INT((FixWdth(cpi)-columns)/2) ZoZ: move.b ZeMa,d0 ;Max-Breite sub.b d3,d0 ;- columns move.b d0,d5 ;auch nach D5 lsr.b #1,d0 ;D0 : 2 = ls ;---rs=FixWdth(cpi)-columns-ls sub.b d0,d5 ;D5 - D0 = rs ;---PRINT #1,CHR$(ls)+CHR$(columns)+CHR$(rs); Printe: move.b d0,(a5)+ ;'Links frei' eintragen move.b d3,(a5)+ ;'columns' eintragen move.b d5,(a5)+ ;'Rechts frei' eintragen ;---Bytes für Drucker umrechnen ;---FOR x=0 TO wdth.e Rechne: cmp.w #-1,wdthe ;wdthe = -1 ? bne.s wRech ;nein, weiter ;---Zeichen ist nicht definiert: Breite auf 'Max' setzen ;---Zeichenbreite ist dann 1, dafür 3 Nullbytes einsetzen tst.b -(a5) ;3 Bytes tst.b -(a5) ;im Puffer tst.b -(a5) ;zurückgehen ;---PRINT #1,CHR$(0);CHR$(1);CHR$(maxSpace-1); move.b #0,(a5)+ ;'Links 0 frei' eintragen move.b #1,(a5)+ ;'columns = 1' eintragen move.b ZeMa,d5 ;Maxbreite subq.b #1,d5 ;- 1 als move.b d5,(a5)+ ;'Rechts frei' eintragen ;---PRINT #1,CHR$(0);CHR$(0);CHR$(0); Nullen: move.b #0,(a5)+ ;Drei move.b #0,(a5)+ ;Nullbytes move.b #0,(a5)+ ;eintragen bra GetEnd ;und weiter ;---------------------------------------------- ;---Testen, ob Punkte nebeneinander sein dürfen ;---Wenn nicht, von zwei nebeneinanderliegenden ;---Punkten den Rechten löschen wRech: move.l RastPort,a4 ;Rastport in A4 merken tst.b JNFlags+12 ;Punkte nebeneinander = 'J' ? beq.s wRech2 ;ja, weiter, sonst ;---Zeichenfarbe = Hintergrundfarbe (um Punkte zu löschen) moveq #0,d0 ;Farbe 0 (schwarz) bsr Set0 ;als Zeichenfarbe ;---Zwei nebeneinanderliegende Punkte testen moveq #0,d5 ;D5 = y-Koordinate PReihe: moveq #0,d6 ;D6 = x-Koordinate PSpalt: ;bsr Point ;Punkt testen move.w d6,d0 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d3 ;D3 = 0 oder 1 addq.b #1,d6 ;Den danebenliegenden ;bsr Point ;Punkt testen move.w d6,d0 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d3 ;D3 = 0 oder 1 beq.s Eine0 ;= 0 ?, dann weiter ;---Beide Punkte gesetzt, den 2.löschen move.w d6,d0 ;An x, move.w d5,d1 ;y-Koordinate move.l a4,a1 ;im Rastport jsr WritePixel(a6) ;Punkt löschen ;---Es waren NICHT 2 Punkte nebeneinander Eine0: cmp.b ZeBr,d6 ;x <= 'Breite' ? ble.s PSpalt ;dann weiter untersuchen ;---Y-Koordinate erhöhen addq.b #1,d5 ;y-Koordinate erhöhen cmp.w #25,d5 ;y < 25 ? blt.s PReihe ;Dann noch 'ne Reihe untersuchen ;---Schriftfarbe wieder weiß bsr Set1 ;---Daten für jede Spalte errechnen und im Puffer anhängen wRech2: moveq #0,d6 ;D6 = x wdLoop: moveq #0,d5 ;D5 = y ;---FOR y1=0 TO 2 : Bytes=0 : y=y1*8+7 moveq #2,d2 ;3 Durchgänge ;---FOR y2=7 TO 0 STEP -1 dreier: move.b #128,d3 ;D3 = 128 ;---Bytes=0 moveq #0,d4 ;D4 auf 0 setzen moveq #7,d7 ;8 Durchgänge (y2 = 7 TO 0) Point3: ;bsr Point ;x in D6, y in D5 move.w d6,d0 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) tst.b d0 ;Punkt gesetzt ? beq.s nixPoi ;nein, weiter ;---Punkt ist gesetzt ;---Bytes=Bytes OR 2^y2*POINT(x,y-y2) add.b d3,d4 ;D4 = D4 + 128,64,32... ;---Punkt ist nicht gesetzt ;---NEXT y2 nixPoi: addq.b #1,d5 ;y-Koordinate erhöhen lsr.b #1,d3 ;D3 : 2 = 64,32,16... dbra d7,Point3 ;und nochmal ;---PRINT #1,CHR$(Bytes); : NEXT y1 move.b d4,(a5)+ ;Byte in Puffer schreiben dbra d2,dreier ;bis 3 Durchgänge gemacht sind ;---NEXT x cmp.w wdthe,d6 ;D6 => wdthe ? bge.s GetEnd ;ja, fertig addq.b #1,d6 ;sonst x-Koordinate erhöhen bra.s wdLoop ;und noch 'ne Runde ;---Das war's - Zeichendaten stehen im Puffer GetEnd: move.l a5,Puffer2 ;Aktuelle Pufferadresse merken RET41: rts ;und zurück ;------------------------------------------------------ ;UP - ConvChar - Darstellung/Vergrößerung/Verkleinerung ; SHADOW/OUTLINE/SHADOW+OUTLINE ;------------------------------------------------------ ConvChar: cmp.w #-1,wdthe ;Zeichen NICHT definiert ? beq.s RET41 ;dann zurück ;---d=0 (hier dz=1) ;---d2=2^d (hier gleich dz) move.w #1,dz ;dz ist d2 ;---WHILE d=0 OR xv!/d2>1 OR yv!/d2>1 - Abfrage kommt gleich While: move.w dz,d2 move.l RastPort,a4 ;Rastport in A4 merken ;---xv!/d2 errechnen move.l xv,d0 ;xv! nach D0 divu d2,d0 ;D0 geteilt durch d2 (dz) move.w d0,xv2+2 ;(INT)-Ergebnis nach xv2 ;---yv!/d2 errechnen move.l yv,d0 ;und das divu d2,d0 ;Gleiche move.w d0,yv2+2 ;für yv2 ;---WHILE d=0 OR xv!/d2>1 OR yv!/d2>1 cmp.w #1,d2 ;dz = 1 (d=0) ? beq.s While2 ;ja, WHILE-Schleife weiter cmp.w #1000,xv2+2 ;xv!/d2>1 ? bgt.s While2 ;ja, WHILE-Schleife weiter cmp.w #1000,yv2+2 ;yv!/d2>1 ? bgt.s While2 ;ja, WHILE-Schleife weiter bra Styles ;sonst fertig, weiter hinter WEND ;---x-Vergrößerung errechnen ;---IF (xv!<=1 AND d>0) OR (xv!/d2<1 AND xv!>=1) THEN xVergr=1 While2: cmp.b #1,d2 ;d > 0 ? beq.s OR1 ;nein, zum OR-Vergleich cmp.w #1000,xv+2 ;xv! <=1 ? ble.s Xis1 ;ja, xVergr = 1 OR1: cmp.w #1000,xv2+2 ;xv!/d2 >=1 bge.s ElseIf1 ;ja, nach ELSEIF cmp.w #1000,xv+2 ;xv! < 1 ? blt.s ElseIf1 ;ja, nach ELSEIF ;---xVergr!=1 Xis1: move.w #1000,xVergr+2 bra.s wY ;---ELSEIF xv!/d2>2 THEN xVergr=2 ElseIf1: cmp.w #2000,xv2+2 ;xv!/d2 <= 2 ? ble.s Else1 ;ja, dann xVergr!=xv!/d2 ;---xVergr!=2 move.w #2000,xVergr+2 bra.s wY ;---ELSE xVergr!=xv!/d2 Else1: move.w xv2+2,xVergr+2 ;---y-Vergrößerung errechnen ;---IF (yv!<=1 AND d>0) OR (yv!/d2<1 AND yv!>=1) THEN yVergr!=1 wY: cmp.b #1,d2 ;d > 0 ? beq.s OR2 ;nein, zum OR-Vergleich cmp.w #1000,yv+2 ;yv! <=1 ? ble.s Yis1 ;ja, yVergr = 1 OR2: cmp.w #1000,yv2+2 ;yv!/d2 >=1 bge.s ElseIf2 ;ja, nach ELSEIF cmp.w #1000,yv+2 ;yv! < 1 ? blt.s ElseIf2 ;ja, nach ELSEIF ;---yVergr!=1 Yis1: move.w #1000,yVergr+2 bra.s VerJN ;---ELSEIF yv!/d2>2 THEN ElseIf2: cmp.w #2000,yv2+2 ;yv!/d2 <= 2 ? ble.s Else2 ;ja, dann yVergr!=yv!/d2 ;---yVergr!=2 move.w #2000,yVergr+2 bra.s VerJN ;---ELSE yVergr!=yv!/d2 Else2: move.w yv2+2,yVergr+2 ;---Gadgets aus Einstellfenster beachten - nur bei Prop VerJN: tst.b PropFlag ;Prop ? beq.s STis ;nein, normal weiter ;---Vergrößern: J ? tst.b JNFlags+13 ;'J' ? beq.s STis ;ja, normal weiter ;---Nur Breite: J ? tst.b JNFlags+15 ;'J' ? bne.s nurH ;nein, weiter ;---Nur Breite vergrößern, Höhe nicht move.w #1000,yVergr+2 ;yVergößerung = 1 bra.s STis ;---Nur Höhe: J ? nurH: tst.b JNFlags+14 ;'J' ? bne.s NichtV ;nein, weiter ;---Nur Höhe vergrößern, Breite nicht ;---Ligaturen sind in der Breite wahrscheinlich breiter ;---Sie werden normal verkleinert wenn sie ZU breit sind tst.b zuBreit ;Ligatur zu breit ? bne.s zbLiga ;ja, Ligatur verkleinern move.w #1000,xVergr+2 ;sonst xVergr! auf 1 setzen bra.s STis ;und weiter ;---Überhaupt NICHT vergrößern NichtV: move.w #1000,yVergr+2 ;yVergr auf 1 setzen tst.b zuBreit ;Ligatur zu breit ? bne.s zbLiga ;ja, verkleinern move.w #1000,xVergr+2 ;sonst xVergr! auf 1 setzen ;---IF xVergr!>1 OR yVergr!>1 THEN st!=.5 ELSE st!=1 zbLiga: sf zuBreit ;'Ligatur zu breit' löschen STis: sf st ;st! = 1 (Flag gelöscht) cmp.w #1000,xVergr+2 ;xVergr! > 1 ? bgt.s w41 ;ja, also st! = .5 ;---OR... cmp.w #1000,yVergr+2 ;yVergr! <= 1 ? ble.s w42 ;ja, weiter, st! = 1 ;---st! = .5 (Flag gesetzt) w41: st st ;st! = .5 ;---FOR x!=0 TO wdth.e STEP st! w42: sf k5x ;Komma-5-Flag löschen moveq #0,d6 ;x! = 0 ;---FOR y!=yAnf.e TO yEnd.e STEP st! XstLoo: move.w yAnf,d5 ;y! = yAnf sf k5y ;Komma-5-Flag löschen ;---Abbruch mit "ENTER"-Taste möglich YstLoo: cmp.b #$79,$bfec01 ;Taste gedrückt ? bne.s wYstL ;nein, weiter st Abbruch ;Abbruchflag setzen rts ;und zurück ;---IF x!=INT(x!) AND y!=INT(y!) THEN wYstL: tst.b k5x ;k5 = 0 (st!=1, also x!=gerade Zahl) ? bne.s w46 ;nein, weiter tst.b k5y ;k5 = 0 (st!=1, also y!=gerade Zahl) ? bne.s w45 ;nein, weiter ;---c=POINT(x!,y!) ;bsr Point ;Point(x,y) move.w d6,d0 move.w d5,d1 move.l a4,a1 ;Rastport nach A1 jsr ReadPixel(a6) move.b d0,d4 ;Ergebnis nach D4 bra xyOK ;und setzen oder nicht ;---ELSEIF x!=INT(x!) THEN c=(POINT(x!,y!-.5) w45: move.w d6,d0 ;x! bleibt ;bsr ym5 ;y! - .5 move.w d5,d1 move.l a4,a1 ;Rastport nach A1 jsr ReadPixel(a6) move.b d0,d4 ;---AND POINT(x!,y!+.5)) move.w d6,d0 ;x! bleibt ;bsr yp5 ;y! + .5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 bra xyOK ;---ELSEIF y!=INT(y!) THEN w46: tst.b k5y bne.s w47 ;---c=(POINT(x!-.5,y!) ;bsr xm5 move.w d6,d0 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 ;---AND POINT(x!+.5,y!)) ;bsr xp5 move.w d6,d0 addq.w #1,d0 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 bra xyOK ;---ELSEIF POINT(1) AND POINT(2) AND POINT(3) AND POINT(4) THEN c=1 w47: ;bsr xm5 move.w d6,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 ;bsr xm5 move.w d6,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 tst.b d4 ;D4 = 0 ? bne xyOK ;nein, also Punkt setzen weil D4 = 1 ;---ELSEIF POINT(1) AND POINT(2) THEN ;bsr xm5 move.w d6,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 tst.b d4 ;D4 = 0 (BEIDE Punkte nicht gesetzt) ? beq w49 ;dann nächstes ELSEIF ;---c=-(NOT(POINT(1)=1 AND POINT(2) AND POINT(3) ;bsr xm5 move.w d6,d0 ;bsr ym15 move.w d5,d1 subq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 bpl.s D4po1 ;D4 positiv ?, dann weiter move.b #0,d4 ;sonst D4 = 0 D4po1: ;bsr xp15 move.w d6,d0 addq.w #2,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 ;bsr xm5 move.w d6,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 not.b d4 neg.b d4 ;---c=c AND -(NOT(POINT(1)=1 AND POINT(2) AND POINT(3) ;bsr xm15 move.w d6,d0 subq.w #1,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d3 bpl.s D3po move.b #0,d3 D3po: ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr yp15 move.w d5,d1 addq.w #2,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d3 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d3 not.b d3 neg.b d3 and.b d3,d4 bra xyOK ;---ELSEIF POINT(1) AND POINT(2) THEN w49: ;bsr xm5 move.w d6,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 tst.b d4 beq xyOK ;---c=-(NOT(POINT(1)=1 AND POINT(2)=1 AND POINT(3) ;bsr xm15 move.w d6,d0 subq.w #1,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d4 bpl.s D4po2 ;D4 positiv ?, dann weiter move.b #0,d4 ;sonst D4 = 0 D4po2: ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr ym15 move.w d5,d1 subq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d3 bpl.s D4po3 move.b #0,d3 D4po3: and.b d3,d4 ;bsr xp5 move.w d6,d0 addq.w #1,d0 ;bsr yp5 move.w d5,d1 addq.w #1,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d4 not.b d4 neg.b d4 ;---c=c AND -(NOT(POINT(1) AND POINT(2) AND POINT(3) ;bsr xm5 move.w d6,d0 ;bsr yp15 move.w d5,d1 addq.w #2,d1 move.l a4,a1 jsr ReadPixel(a6) move.b d0,d3 ;bsr xp15 move.w d6,d0 addq.w #2,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d3 ;bsr xm5 move.w d6,d0 ;bsr ym5 move.w d5,d1 move.l a4,a1 jsr ReadPixel(a6) and.b d0,d3 not.b d3 neg.b d3 and.b d3,d4 ;---IF c THEN xyOK: tst.b d4 beq.s NeY ;---xc=INT(x!*xVergr!+.5) move.l xVergr,d0 ;xVergr! mulu d6,d0 ;* x! add.l #500,d0 ;+ .5 tst.b k5x beq.s DivX ;---wenn x! Kommazahl, die Hälfte von xVergr! addieren ;---3.0 * 5000 + 500 = 15500 = 15 ;---3.5 * 5000 + 500 = 18000 = 18 ;---3 -> 15000 ;--- + 2500 ;--- =17500 ;--- + 500 ;--- =18000 = 18 ! move.l xVergr,d3 ;xVergr divu #2,d3 ;: 2 moveq #0,d4 ;D4 löschen move.w d3,d4 ;INT (unteres Wort) nach D4 add.l d4,d0 ;D4 zu D0 addieren DivX: divu #1000,d0 ;D0 geteilt durch 1000 ;---yc=INT(y!*yVergr!+200.5) move.l yVergr,d1 ;yVergr! mulu d5,d1 ;* y! add.l yKoor,d1 ;+ 1.y-Koordinate + .5 tst.b k5y beq.s DivY move.l yVergr,d3 divu #2,d3 moveq #0,d4 move.w d3,d4 add.l d4,d1 DivY: divu #1000,d1 ;geteilt durch 1000 ;---PSET (xc,yc) move.l a4,a1 jsr WritePixel(a6) ;---NEXT y! ;---Wenn st! = 0.5 ist, wird die Y-Schleife nochmal ;---durchlaufen, diesmal mit gesetztem k5y-Flag NEy: tst.b st ;st! = 1 ? beq.s YnoK5 ;ja, weiter, x! und y! keine Kommazahlen tst.b k5y ;k5y = 0 ? bne.s Yauf0 ;nein, k5y löschen und weiter st k5y ;sonst k5y setzen bra YstLoo ;und noch 'ne Runde Yauf0: sf k5y ;k5y auf 0 setzen YnoK5: addq.w #1,d5 ;y! erhöhen cmp.w yEnd,d5 ;y! <= yEnd ? ble YstLoo ;ja, noch 'ne Runde ;---NEXT x! - (Das Gleiche wie bei NEXT y!) NEx: tst.b st beq.s XnoK5 tst.b k5x bne.s Xauf0 st k5x bra XstLoo Xauf0: sf k5x XnoK5: addq.w #1,d6 cmp.w wdthe,d6 ble XstLoo ;---wdth.e=INT(wdth.e*xVergr!+.5) move.l xVergr,d0 move.w wdthe,d1 mulu d1,d0 ;wdth.e * xVergr! add.l #500,d0 ;+ .5 divu #1000,d0 ;: 1000 move.w d0,wdthe ;= neuer INT-Wert wdth.e ;---yAnf.e=INT(yAnf.e*yVergr!+.5) move.l yVergr,d0 move.l d0,d3 ;yVergr auch nach D3 move.w yAnf,d1 mulu d1,d0 add.l #500,d0 divu #1000,d0 move.w d0,yAnf ;---yEnd.e=INT(yEnd.e*yVergr!+.5) move.w yEnd,d1 mulu d1,d3 add.l #500,d3 divu #1000,d3 move.w d3,yEnd ;---FOR s=1 TO 200:SCROLL (0,0)-(127,256),0,-1:NEXT ;---Wird gleich mit einem Hieb gescrollt VeLoop: moveq #0,d2 ;(0,0) moveq #0,d3 moveq #127,d4 ;breiter als 127 eh' nicht move.w #256,d5 ;bis ganz unten moveq #0,d0 ;nicht in x-Richtung move.w yScroll,d1 ;um soviel Punkte move.l RastPort,a1 ;im Rastport jsr ScrollRaster(a6);hochscrollen ;---WEND lsl.w #1,dz ;(2^d) bra While ;------------------------------------------------------ ;---Je nach Style Zeichen noch verändern - Schatten etc. ;---Style NORMAL - keine Änderung Styles: tst.b Normal ;NORMAL ? beq.s Blit1 ;nein, weiter rts ;und zurück ;---Fertiges Zeichen von 0,0 nach 0,yScroll blitten ;---Für SHADOW/OUTLINE/SHADOW+OUTLINE Blit1: move.l RastPort,a0 ;Quell und move.l a0,a1 ;Zielrastport sind gleich moveq #0,d0 ;x, moveq #0,d1 ;y = linke obere Ecke Quell moveq #0,d2 ;x, move.w yScroll,d3 ;y = linke obere Ecke Ziel moveq #50,d4 ;50 mal moveq #50,d5 ;50 Punkte gross move.b #$e0,d6 ;OR-Verknüpfung move.l GfxBase,a6 jsr ClipBlit(a6) ;blitten tst.b Outline ;OUTLINE ? beq.s StSh ;nein, weiter ;---Style OUTLINE (PrtO) - Umrandet StOu: lea OutBlit(pc),a5 ;ab A5 Blitterdaten bra.s Blit ;blitten ;---Style SHADOW (PrtS) - Schatten StSh: tst.b Shadow ;SHADOW ? beq.s StShOu ;nein, weiter lea ShBlit(pc),a5 bra.s Blit ;---Style SHADOW/OUTLINE (PrtSO) - Schatten/Umrandet StShOu: lea ShOutBlit(pc),a5 ;------- ------------------------------- ;UP - Rechteck mit Verknüpfung von 100,100 nach x,y blitten ;---------------------------------------------------------- Blit: move.w (a5)+,d7 ;Anzahl Durchgänge (-1) holen BlLoop: move.l RastPort,a0 ;Quell- und move.l a0,a1 ;Zielrastport sind gleich moveq #0,d0 ;x, move.w yScroll,d1 ;y linke obere Ecke Quell move.w (a5)+,d2 ;x, move.w (a5)+,d3 ;y linke obere Ecke Ziel moveq #50,d4 ;50 moveq #50,d5 ;mal 50 Punkte gross move.w (a5)+,d6 ;Verknüpfung jsr ClipBlit(a6) ;blitten dbra d7,BlLoop ;und nochmal bis D7 = 0 ;---wdth.e=wdth.e+st.add(style) ;---yEnd.e=yEnd.e+st.add(style) moveq #0,d0 ;D0 löschen move.b style,d0 ;style nach D0 add.w d0,wdthe ;wdthe + style add.w d0,yEnd ;yEnd + style rts ;und zurück ;-------------------------------------------------- ;UP - Freie Blocks auf Diskette feststellen ; Feststellen, ob Diskette schreibgeschützt ist ;-------------------------------------------------- FreiTest: move.l DosBase,a6 ;ab hier alles mit DosBase move.l #SaveDisk,d1 ;'DF0:' moveq #-2,d2 ;Lese- jsr Lock(a6) ;Lock holen move.l d0,DirLock ;und merken beq DErr1 ;hat nicht geklappt ;---Info der Diskette holen move.l d0,d1 ;Lock nach D1 move.l #InfoData,d2 ;hier werden die Daten eingetragen jsr Info(a6) ;Daten holen tst.l d0 ;D0 = 0 ? beq DErr1 ;ja, Fehlermeldung ;---Diskette schreibgeschützt ? lea InfoData(pc),a0 ;Eingelesene Daten ab (A0) cmp.l #80,8(a0) ;Disk schreibgeschützt ? beq DErr2 ;ja, Fehlermeldung ;---Anzahl der freien Blöcke feststellen move.l 12(a0),d1 ;Anzahl Blocks sub.l 16(a0),d1 ;- benutzte Blocks ;--Anzahl gebrauchter Blöcke feststellen ;---Zeichenbreite * 3 Datas je Spalte * Anzahl Zeichen ;--- 50 * 3 * 96 = 14400 ;-- + 24 Bytes Vor/Nachspann + 976 Bytes (2 Directorys) ;---14400 + 24 + 976 = 15400 ;---Ergebnis / 488 (Bytes je Block) + 1 ;---15400 / 488 = 31,557 + 1 = 32 Blocks moveq #0,d0 ;D0 löschen move.b ZeBr,d0 ;Breite mulu #3,d0 ;* 3 move.w AnzZei,d2 addq.w #1,d2 mulu d2,d0 ;* Anzahl Zeichen add.l #1000,d0 ;+ 1000 = Anzahl benötigter Bytes move.l d0,d6 ;in D6 merken add.l #500,d6 ;zur Sicherheit +500 Bytes ;---Testen, ob auf 'RAM:' gespeichert werden soll ;---Wenn ja, versuchen, D6-Bytes zu reservieren ;---Klappt das nicht, 'NICHT GENUG PLATZ' ausgeben lea SaveDisk(pc),a0 ;SaveDisk cmp.l #"RAM:",(a0) ;= "RAM:" ? bne.s wFreiT ;nein, weiter move.l d6,d0 bsr Reservieren ;D6-Bytes reservieren tst.l d0 ;D0 = 0 ? beq DErr3 ;dann hat's nicht geklappt move.l d6,d0 ;sonst D6-Bytes bsr Freigeben ;wieder freigeben bra.s LockFrei ;Lock freigeben und zurück wFreiT: divu #488,d0 ;/ 488 addq.w #1,d0 ;+ 1 = Anzahl benötigter Blöcke cmp.w d0,d1 ;Frei > Benötigt ? bmi DErr3 ;nein, Fehlermeldung, sonst ;------- -- ;UP - DirLock freigeben ;---------------------- LockFrei: move.l DirLock,d1 ;DirLock bra.s LoFrei ;freigeben und zurück ;------------------------------------------ ;UP - Assign fonts: wieder wie's vorher war ;------------------------------------------ AssignAlt: move.l fontsDir,a0 ;Im 'fonts'-Device move.l fontsLock,d0 ;ab 12.Byte wieder move.l d0,12(a0) ;den originalen Lock eintragen move.l PfadLock,d1 ;PfadLock LoFrei: move.l DosBase,a6 ;wieder jmp UnLock(a6) ;freigeben und zurück ;------------------------------------------- ;UP - Druckerfile für eine Fontart schreiben ;------------------------------------------- ;---'DF0:DFonts'-Directory erzeugen - falls nicht vorhanden FileWeg: move.l DosBase,a6 lea SaveDisk(pc),a0 ;'DF0:' lea Undo(pc),a1 ;in Puffer bsr Kopie2 ;kopieren lea SaveDir(pc),a0 ;'DFonts' anhängen und bsr MakeDir ;Directory erzeugen ;---'DF0:DFonts/Fontname'-Directory erzeugen - falls nicht vorhanden move.b #"/",(a1)+ ;Im Undopuffer '/' und lea FntName(pc),a0 ;Fontnamen anhängen und bsr MakeDir ;Directory erzeugen ;---File öffnen move.b #"/",(a1)+ ;'/'vor Filenamen lea FileTxt(pc),a0 ;'p' '10s' '12so' etc. bsr Kopie ;im Undopuffer anhängen move.b #0,FileTxt+4 ;Nullbyte in 4.Byte des Filetextes move.l #Undo,d1 ;File move.l #1006,d2 ;Modus NEW jsr Open(a6) ;Zum Schreiben öffnen move.l d0,Filehd ;Fileheader merken beq.s DErr4 ;hat nicht geklappt ;---'Zeichensatz ein' im Puffer anhängen move.l Puffer2,a1 ;Aktueller Pufferstand ab (A1) lea ZSein(pc),a0 ;'Zeichensatz ein' 3 Bytes bsr DreiB ;an Puffer anhängen ;---Komplettes File auf Disk schreiben drauf: move.l d0,d1 ;Fileheader nach D1 move.l Puffer,d2 ;Ab Pufferanfang (D2) sub.l d2,a1 ;Pufferende (A1) - Pufferanfang move.l a1,d3 ;= Pufferlänge in D3 jsr Write(a6) ;D3 Bytes schreiben cmp.l d0,d3 ;wirklich D3 Bytes geschrieben ? beq.s FilEnd ;ja, alles ok ;---'FEHLER BEIM SPEICHERN' ausgeben bsr FilEnd ;File erst schließen bra.s DErr5 ;dann Fehlerausgabe ;---File schließen und zurück FilEnd: move.l Filehd,d1 jmp Close(a6) ;------------------------------------------------------- ;---Diskettenfehlermeldungsausgabeunterprogramme (wow !) ;------------------------------------------------------- DErr1: lea DError(pc),a5 ;'DISKETTENFEHLER' bra.s DErr DErr2: lea DSchutz(pc),a5 ;'SCHREIBGESCHÜTZT' bra.s DErr DErr3: lea DPlatz(pc),a5 ;'NICHT GENUG PLATZ' bra.s DErr DErr4: lea DFile(pc),a5 ;FILE NICHT GEÖFFNET' bra.s DErr DErr5: lea DSchreib(pc),a5 ;'SCHREIBFEHLER' DErr: bsr LockFrei ;Lock freigeben move.l a5,a1 ;Adresse Fehlertext nach A1 bsr Fehler ;Fehler ausgeben bra Error ;D0 auf 4711 setzen und zurück ;----------------------- ;UP - Directory erzeugen ;----------------------- MakeDir: bsr Kopie2 ;Text aus (A0) an (A1) anhängen move.l a1,a5 ;Adresse Nullbyte merken move.l #Undo,d1 ;'xxxxxx'-Dir jsr CreateDir(a6) ;erzeugen move.l d0,d1 ;Lock nach D1 und jsr UnLock(a6) ;sofort wieder freigeben move.l a5,a1 ;Adresse Nullbyte zurückholen rts ;und zurück ;------------------------------------------------------------ ;UP - Text aus Undopuffer (mit 0-Byte abgeschlossen) ausgeben ;------------------------------------------------------------ Print1: moveq #0,d0 ;Cursor an moveq #0,d1 ;Position 0,0 move.l RastPort,a1 ;im Rastport move.l GfxBase,a6 jsr Move(a6) ;setzen move.l RastPort,a1 ;Bildschirm jsr ClearScreen(a6) ;löschen Print2: moveq #0,d0 ;Text an Position Print3: moveq #0,d1 ;x,y lea EinZ(pc),a1 ;aus Struktur in A1 Print4: move.l RastPort,a0 ;im Rastport move.l IntBase,a6 jmp PrintIText(a6) ;ausgeben ;---------------------------------------- ;UP - Texte im aktuellen Fenster ausgeben ;---------------------------------------- Texte2Aus: lea Texte2Ko(pc),a5 ;Text-Koordinaten ab (A5) lea Texte2(pc),a4 ;Texte ab (A4) bsr Texte ;in gelb ausgeben lea Texte2bKo(pc),a5;Texte2b lea Texte2b(pc),a4 ;in weiß ausgeben Texte: move.w (a5)+,d7 ;Anzahl Texte (-1 für Loop) move.w (a5)+,MehrZ ;Textfarbe eintragen TxLoop: move.w (a5)+,d0 ;x-Koordinate nach D0 move.w (a5)+,d1 ;y-Koordinate nach D1 move.l a4,a0 ;Text in lea Undo(pc),a1 ;Undopuffer bsr Kopie ;kopieren move.l a0,a4 ;A4 auf nächsten Text lea MehrZ(pc),a1 ;Textstruktur für PrintIText bsr Print4 ;Text ausgeben dbra d7,TxLoop ;Nächsten ausgeben rts ;und zurück ;---------------------------------------- ;UP - Einstellfenster = Aktuelles Fenster ;---------------------------------------- EinFen: move.l #EinstellTxt,Ueber ;Überschrift, move.l Einhd,Fenster ;Header und move.l RastEin,RastPort ;Rastport rts ;übergeben und zurück ;-------------------------------------- ;UP - Defaultwerte in Gadgets eintragen ;-------------------------------------- DefWerte: lea Default24(pc),a0;Defaultwerte ab (A0) lea I1(pc),a1 ;Info-String1 ab A1 moveq #36,d7 ;37 Texte a 4 Bytes InLoop: move.l (a0)+,(a1)+ ;in Info's kopieren dbra d7,InLoop ;---Default-J/N-Adressen der Texte in Text2 bis Text18 kopieren lea DefTxt24(pc),a0 ;DefaultAdressen ab (A0) lea Text2+12(pc),a1 ;In Text2 im 12.Byte J/N-Adresse moveq #16,d7 ;17 Adressen TeLoop: move.l (a0)+,(a1) ;dahin die Default-J/N-Adresse add.l #20,a1 ;A1 auf nächste Adresse dbra d7,TeLoop ;und die eintragen ;---Alle 54 Gadgets neu ausgeben AllNeu: lea Res(pc),a0 ;Ab Resetgadget moveq #54,d0 ;54 Gadgets ;---Gadgets mit neuem Text ausgeben (Anzahl in D0/Adresse in A0) GadNeu: move.l Fenster,a1 ;im Fenster move.l #0,a2 ;nicht im Requester move.l IntBase,a6 jmp RefreshGList(a6);neu ausgeben ;--------------------------------------------------- ;UP - RastPort vom aktuellen Fenster holen, ; Zeichenmodus JAM2 und Schriftfarbe weiß setzen ;--------------------------------------------------- JAM2: move.l Fenster,a1 ;Fenster- move.l 50(a1),a1 ;RastPort move.l a1,RastPort ;merken moveq #1,d0 ;JAM2 move.l GfxBase,a6 jsr SetDrMd(a6) ;einschalten Set1: moveq #1,d0 ;Schriftfarbe = weiß Set0: move.l RastPort,a1 jmp SetAPen(a6) ;einschalten ;-------------------------------- ;UP - Aktuelles Fenster schließen ;-------------------------------- CloseWin: move.l Fenster,a0 ;aktuelles Fenster move.l IntBase,a6 jmp CloseWindow(a6) ;schließen ;------------ ;UP - Piepton ;------------ Ton: move.l Toene,$dff0a0 ;Tondatenadresse übergeben move.w #4,$dff0a4 ;4 Daten-Worte move.w #444,$dff0a6 ;Abtastrate move.w #64,$dff0a8 ;Lautstärke voll move.w #$8201,$dff096 ;Tonkanal 0 einschalten move.w #65000,d0 ;Warte- ToLoo: dbra d0,ToLoo ;schleife clr.w $dff0a8 ;Lautstärke 0 move.w #1,$dff096 ;Ton abschalten rts ;zurück ;------------------------------------- ;UP - Speicher freigeben (Größe in D0) ;------------------------------------- Freigeben: move.l ExecBase,a6 jmp FreeMem(a6) ;--------------------------------------- ;UP - Fehlermeldung ausgeben, Text ab A1 ; Screen blinkt kurz auf, Ton ertönt ; Warten auf Closewindow, dann zurück ;---------------------------------------- Fehler: bsr WinTit ;neue Überschrift setzen move.l #0,a0 ;Alle Screens blitzen jsr DisplayBeep(a6) ;kurz auf bsr Ton ;Piepton bsr ScrTF ;Screen in Vordergrund holen ;---Warten auf WINDOW CLOSE CloseKlick: bsr Warte ;ist im MsgPort cmp.w #$200,d7 ;WINDOWCLOSE angekommen ? bne.s CloseKlick ;nein, weiter warten move.l Ueber,a1 ;wieder alte Überschrift ;---Fensterüberschrift neu (Text ab A1) WinTit: move.l Fenster,a0 ;Fenster, move.l #-1,a2 ;nicht Screen move.l IntBase,a6 jmp SetWindowTitles(a6);Überschrift ändern ;----------------------------------------- ;UP - Requester ausgeben, Gadgets abfragen ;----------------------------------------- Requester: lea FntReq(pc),a0 ;Requester move.l Fenster,a1 ;im Fenster move.l IntBase,a6 jsr Request(a6) ;öffnen tst.l d0 ;hat's geklappt ? bne.s wReq ;ja, weiter lea FreiTxt(pc),a1 ;'Nicht genug Speicher' bra Error ;ausgeben ;---Adressen der Filegadget-Texte holen wReq: lea GadgetTexte(pc),a0;Adressen move.l #File0T,(a0)+ ;der 6 move.l #File1T,(a0)+ ;FileTexte move.l #File2T,(a0)+ ;in Tabelle ab move.l #File3T,(a0)+ ;'GadgetTexte' move.l #File4T,(a0)+ ;eintragen move.l #File5T,(a0)+ bra.s RLoop ;Ton überspringen ;---------------------------- ; REQUESTER-ABFRAGE-SCHLEIFE ;---------------------------- TRLoop: bsr Ton ;Piepton ausgeben RLoop: bsr Warte ;warte auf Ereignis cmp.w #$40,d7 ;GADGETUP ? (Gadget losgelassen) bne.s RLoop ;nein - weiter warten ;---Keine Directory gelesen: Filegadgets nicht abfragen tst.w AnzFiles ;Anzahl Files = 0 ? beq.s ID11 ;Filegadgetabfragen überspringen ;------------------------ ; Filename (Gadgets 0-5) ;------------------------ cmp.w #6,d6 ;Gadget 0-5 ? bge.s ID11 ;nein, weiter lsl.b #2,d6 ;D6 * 4 für Adressensprung lea GadgetTexte(pc),a0;Adressentabelle der 6 Gadgettexte move.l (a0,d6),a0 ;D6-te Adresse holen move.l (a0),a0 ;A0 zeigt auf den Filenamen cmp.b #"(",(a0) ;ist es Directory ? beq.s isDir ;ja, Unterdir holen ;---Filenamen in Filenamengadget eintragen lea Filename(pc),a1 ;Filename ab A1 bsr Kopie ;Name (ab A0) in Filename kopieren bsr RefreshFile ;File-Gadget neu ausgeben bra.s RLoop ;und zur Hauptabfrage ;---Unterdirectorynamen in Pfad eintragen isDir: addq.l #6,a0 ;1.Buchstabe ab (A0) move.w PfLang,d6 ;Länge Pfadnamen nach D6 lea Pfad(pc),a1 ;Pfadname ab (A1) add.l d6,a1 ;(A1) = letztes Byte bsr TestDirs ;Wieviele Dirs ? tst.b d4 ;Dirs = 0 (Root) ? beq.s Dir0 ;ja, weiter, sonst move.b #'/',(a1)+ ;'/' vor nächste Dir Dir0: bsr Kopie ;Filenamen anhängen bra Dirhol ;und neue Unterdir holen ;------------------------------------------ ; DF0: DF1: DH0: DH1: RAM: (Gadgets 11-15) ;------------------------------------------ ID11: cmp.w #11,d6 ;D6 < 'DF0:'-Gadgetnummer ? bmi.s ID16 ;ja, weiter cmp.w #16,d6 ;D6 > 'RAM:'-Gadgetnummer ? bge.s ID16 ;ja, weiter sub.w #11,d6 ;D6 jetzt 0-4 mulu #6,d6 ;D6 * 6 für Adressensprung lea Laufwerke(pc),a0;Adressentabelle der Namen add.l d6,a0 ;D6-te Adresse holen bra RootDir ;und Root-Directory einlesen ;--------------- ; / (Gadget 16) ;--------------- ID16: cmp.w #16,d6 ;/ ? bne.s ID18 ;nein, weiter bsr TestDirs ;wieviele Dirs ? tst.b d4 ;Dirs = 0 ? beq TRLoop ;ja, nicht reagieren ;---Pfad von hinten nach '/' oder ':' absuchen move.w PfLang,d6 ;Pfadnamenlänge nach D6 lea Pfad(pc),a0 ;(A0) auf 1.Byte add.l d6,a0 ;(A0) auf letztes Byte subq.w #1,d6 ;D6 - 1 Strich: move.b -(a0),d2 ;1 Byte nach D2 cmp.b #'/',d2 ;ist es '/' ? beq.s fStri ;ja, 0-Byte für Strich einsetzen cmp.b #':',d2 ;ist es ':' ? beq.s hDopp ;ja, 0-Byte hinter ':' einsetzen dbra d6,Strich ;nächstes Byte testen ;---'/' oder Zeichen nach ':' durch Nullbyte ersetzen hDopp: tst.b (a0)+ ;ja, (A0) hinter ':', und fStri: move.b #0,(a0) ;dort Nullbyte einsetzen bra Dirhol ;und neue Directory holen ;------------------- ; UUPS! (Gadget 18) ;------------------- ID18: cmp.w #18,d6 ;UUPS! ? bne.s ID9 ;nein, weiter moveq #0,d6 ;ja, D6 löschen bra.s ReqZu ;und Requester beenden ;----------------------------------------- ; FONT (Gadget 9 - RETURN-Taste gedrückt) ;----------------------------------------- ID9: cmp.w #9,d6 ;FONT ? bne.s ID17 ;nein, weiter tst.w PfLang ;Pfadnamenlänge = 0 ? beq TRLoop ;ja, nicht reagieren st RootFlag ;Flag setzen bra Dirhol ;Unterdir holen ;---------------- ; OK (Gadget 17) ;---------------- ID17: cmp.w #17,d6 ;OK ? beq.s OK ;ja, nach OK ;------- ------------------------- ; HÖHE (Gadget 10 - RETURN-Taste gedrückt) ;------------------------------------------ ID10: cmp.w #10,d6 ;HÖHE ? bne.s Scrol ;nein, weiter OK: tst.w FiLang ;Länge Filename = 0 ? beq TRLoop ;dann keine Reaktion tst.w PfLang ;Länge Pfadname = 0 ? beq TRLoop ;dann keine Reaktion, sonst ;------- ; Requester beenden ;------------------ ReqZu: lea FntReq(pc),a0 ;Requester move.l Fenster,a1 move.l IntBase,a6 jmp EndRequest(a6) ;schließen ;--------------------------------------------------------- Scrol: cmp.w #7,AnzFiles ;weniger als 7 Filenamen ? bmi RLoop ;ja, scrollen nicht möglich ;------- --- ; Pfeil Down (Gadget 7) ;----------------------- cmp.w #7,d6 ;Pfeil Down ? bne.s ID6 ;nein, weiter move.w AnzFiles,d0 ;Anzahl Files subq.w #6,d0 ;-6 nach D0 cmp.w Zaehler,d0 ;Zähler = AnzahlFiles - 6 ? beq RLoop ;ja, die letzten 6 Namen bleiben addq.w #1,Zaehler ;Zähler erhöhen move.l Adr,a0 ;Aktuelle Filenamenadresse nach A0 addq.l #4,a0 ;eine Adresse weiter bra Neue6 ;und 6 Filenamen neu ausgeben ;--------------------- ; Pfeil Up (Gadget 6) ;--------------------- ID6: cmp.w #6,d6 ;Pfeil Up ? bne.s ID8 ;nein, weiter testen tst.w Zaehler ;Zähler = 0 ? beq RLoop ;ja, dann nicht scrollen subq.w #1,Zaehler ;Zähler erniedrigen moveq #4,d1 ;Adr auf vorherige bra.s Minus ;Adresse stellen ;--------------------- ; Schieber (Gadget 8) ;--------------------- ID8: cmp.w #8,d6 ;Schieber ? bne RLoop ;nein moveq #0,d0 ;D0 und moveq #0,d1 ;D1 löschen move.w VertPo,d0 ;Schieberposition = 0 ? bne.s FiNr ;nein, weiter ;---Schieber ganz oben clr.w Zaehler ;Zähler auf 0 setzen move.l Adressen,Adr ;Adr auf erste Adresse setzen bra Sex ;und die ersten 6 Namen ausgeben ;---FileNr. errechnen FiNr: divu schiebe,d0 ;D0 / Schrittweite = FileNr. move.w Zaehler,d1 ;Zähler nach D1 cmp.w d1,d0 ;FileNr. = Zähler ? beq RLoop ;ja, nicht scrollen bmi.s zuruck ;FileNr. < Zähler ;---FileNr. ist größer als aktueller Zähler move.w d0,Zaehler ;Zähler auf neuen Stand sub.w d1,d0 ;FileNr. - Zähler = Unterschied ext.l d0 ;D0 auf Langwortgröße lsl.l #2,d0 ;* 4 (für Adressen) move.l Adr,a0 ;alte Adresse add.l d0,a0 ;+ D0 = neue Adresse bra.s Neue6 ;6 neue Filenamen ausgeben ;---FileNr. ist kleiner als aktueller Zähler zuruck: move.w d0,Zaehler ;Zähler auf neuen Stand sub.w d0,d1 ;Zähler - Filenr. = Unterschied ext.l d1 ;D1 auf Langwortgröße lsl.l #2,d1 ;* 4 (für Adressen) Minus: move.l Adr,a0 ;alte Adresse sub.l d1,a0 ;- D1 = neue Adresse ;---Schieberposition neu berechnen, 6 Namen neu ausgeben Neue6: move.l a0,Adr ;neue Adresse merken move.w Zaehler,d0 ;Zähler mulu schiebe,d0 ;* Schrittweite = Vertikalposition ;---Schieber ganz unten, wenn letzter Filename zu sehen ist move.w AnzFiles,d1 ;Anzahl Files subq.w #6,d1 ;-6 nach D1 cmp.w Zaehler,d1 ;D1 = Zähler ? bne.s VertOk ;nein, Vertikalposition ok, move.w #$ffff,d0 ;sonst Schieber nach ganz unten VertOk: move.w d0,VertPo ;neue Schieberposition bra Sex ;6 neue Filenamen ausgeben ;----------------------------------------- ;UP - Anzahl Dirs im Pfadnamen feststellen ;----------------------------------------- TestDirs: clr.b d4 ;Dirs-Zähler löschen move.w PfLang,d7 ;Pfadnamenlänge nach D7 beq.s RET2 ;Länge = 0, dann zurück lea Pfad(pc),a2 ;Pfadname ab (A2) tst.b 4(a2) ;Nullbyte nach DFx: ? beq.s RET2 ;dann zurück, sonst addq.b #1,d4 ;Dirs-Zähler erhöhen subq.w #1,d7 ;D7 -1 für Loop DiLoop: cmp.b #'/',(a2)+ ;Byte = '/' ? bne.s wTest ;nein, weiter testen addq.b #1,d4 ;ja, Dirszähler erhöhen wTest: dbra d7,DiLoop ;nächstes Byte holen RET2: rts ;und fertig ;-------------------------------------- ;UP - Bytes von (A0) nach (A1) kopieren ; bis Nullbyte kopiert wurde ;-------------------------------------- Kopie: move.b (a0)+,(a1)+ ;1 Byte kopieren bne.s Kopie ;kein Nullbyte ?, weiter kopieren rts ;sonst zurück ;-------------------------------------- ;UP - Bytes von (A0) nach (A1) kopieren ; Zurück auf's Nullbyte in (A1) ;-------------------------------------- Kopie2: move.b (a0)+,(a1)+ ;1 Byte kopieren bne.s Kopie2 ;kein Nullbyte ?, weiter kopieren tst.b -(a1) ;zurück aufs Nullbyte in (A1) rts ;und zurück ;---------------------------------------------------------- ;UP - Root-Directory DF0:, DF1:, DH0:, DH1: oder RAM: holen ;---------------------------------------------------------- RootDir: ;Adresse Directoryname in A0 lea Pfad(pc),a1 ;und Pfadname in A1 bsr Kopie ;Dirname in Pfadname kopieren ;------- ----- ;UP - Unterdirectory holen ;------------------------- Dirhol: lea Filename(pc),a1 ;Filenamegadget move.b #0,(a1) ;löschen und neu bsr RefreshFile ;ausgeben tst.b RootFlag ;Flag = 0 ? bne.s Pflass ;nein, Pfad lassen, sonst bsr RefreshPfad ;Pfad neu ausgeben Pflass: sf RootFlag ;Flag löschen sf Abbruch bsr Directory ;Directory einlesen tst.b Abbruch ;RECHTE Maustaste gedrückt ? beq.s wPfad ;nein, weiter clr.l AnzFiles ;Anzahl auf 0 setzen lea AbbruchText(pc),a0;'EINLESEN ABGEBROCHEN' bra.s Melde ;ausgeben wPfad: tst.w AnzFiles ;Anzahl Files = 0 ? bne.s Sex ;nein, weiter, sonst ;---'DIRECTORY LEER' oder 'EINLESEN ABGEBROCHEN' ausgeben lea DirLeerText(pc),a0;Meldung 'Directory leer' Melde: bsr DirL ;im 2.Gadget ausgeben bra TRLoop ;und zur Hauptabfrage ;----------------------------- ;UP - Sechs Filenamen ausgeben ;----------------------------- Sex: bsr SechsFrei ;Filenamenfeld löschen move.l Adr,a0 ;Adressen der Filenamen lea GadgetTexte(pc),a1;Adressen in FileGadgets für Text moveq #5,d7 ;6 Filetexte TLoop: move.l (a1)+,a2 ;Adr. von FilexT nach A2 move.l (a0)+,(a2)+ ;Adr. aus Liste nach A2 dbra d7,TLoop ;alle fertig ? bsr FilesRefresh ;ab File0-Gadget neu ausgeben bra RLoop ;und zur Hauptabfrage ;--------------------------------- ;UP - Aktuelles Directory einlesen ;--------------------------------- Directory: clr.l AnzFiles ;Anzahl Files/Dirs = 0 clr.w Zaehler ;Zähler für Up/Down-Pfeil = 0 bsr SechsFrei ;Fenster löschen move.l Adressen,a0 ;ab 'Adressen' move.w #2499,d7 ;10000 Bytes (2500 L's) FrLoop: move.l #0,(a0)+ ;löschen dbra d7,FrLoop ;alle fertig ?, dann bsr AdrUe ;Adressen neu übergeben ;---Pfadnamen lesen PfLes: move.l #Pfad,d1 ;Pfadname move.l #-2,d2 ;Modus 'lesen' move.l DosBase,a6 jsr Lock(a6) ;Datei suchen move.l d0,FileLock ;Schlüssel retten beq DirEnd ;nicht gefunden move.l d0,d1 ;FileLock nach D1 move.l FIB,d2 ;Adresse FileInfoBlock nach D2 jsr Examine(a6) ;FIB einlesen (Diskname) tst.l d0 ;ist da noch was ? beq DirEnd ;nein, Ende ;---Einen Eintrag holen Dir: move.l FileLock,d1 btst #2,$dff016 ;RECHTE Maustaste gedrückt ? bne.s nixAb ;nein, weiter ;---Einlesen abbrechen st Abbruch ;Abbruch-Flag setzen jsr UnLock(a6) ;FileLock freigeben bra AdrUe ;Adressen übergeben und zurück nixAb: move.l FIB,d2 jsr ExNext(a6) ;nächsten Eintrag holen tst.l d0 ;wenn D0 = 0, dann beq.s DirEnd ;keiner mehr da ;---Filenamen merken move.l FIB,a0 ;FileInfoBlock ab (A0) move.l 4(a0),d0 ;DirEntryType (Dir oder File) addq.l #8,a0 ;A0 auf File/Dirnamen move.l Files,a1 ;Adressen der Files nach A1 move.l a1,a3 ;auch nach A3 tst.l d0 ;Type (DIR oder FILE) ? bmi.s File ;< 0, dann File move.b #"(",(a1)+ ;vor move.b #"D",(a1)+ ;jedes move.b #"I",(a1)+ ;Dir-File move.b #"R",(a1)+ move.b #")",(a1)+ ;'(DIR) ' move.b #" ",(a1)+ ;schreiben addq.w #1,AnzFiles+2 ;Anzahl Directorys erhöhen File: addq.w #1,AnzFiles ;Anzahl Files erhöhen move.l Adr,a2 ;Zeiger auf Adressenspeicher move.l a3,(a2) ;aktuelle Adresse eintragen addq.l #4,a2 ;Zeiger 4 Bytes weiter move.l a2,Adr ;und Zeiger wieder merken bsr Kopie ;xx Buchstaben kopieren move.l a1,Files ;Adresse des nächsten Files bra Dir ;nächsten Eintrag holen ;---Directory geholt DirEnd: move.l FileLock,d1 ;Filelock jsr UnLock(a6) ;wieder freigeben clr.w VertPo ;Schieberposition = 0 (ganz oben) move.w AnzFiles,d0 subq.w #6,d0 ;Anzahl Files - 6 > 0 ? bgt.s Grosse ;ja, Schiebergröße berechnen, sonst move.w #$ffff,SchGr ;Schieber ganz voll bra.s Sort ;Directory sortieren ;---Schiebergröße berechnen Grosse: move.l #$5fffa,d1 ;$FFFF * 6 = $5FFFA divu AnzFiles,d1 ;$5FFFA / AnzFiles move.w d1,SchGr ;= Schiebergröße ;---Schrittweite berechnen move.l #$ffff,d1 ;$FFFF = Verschiebebereich divu d0,d1 ;$FFFF / (AnzFiles-6) move.w d1,schiebe ;= Verschiebung je File ;---Directory sortieren Sort: move.w AnzFiles,d7 ;Anzahl Files nach D7 cmp.w #2,d7 ;weniger als 2 Files ? bmi.s SoEnd ;dann nicht sortieren - warum auch ? subq.w #2,d7 ;Anzahl - 2 = Anzahl Durchgänge SoLoop: move.w d7,d3 ;D3 als 2.Schleifenzähler move.l Adressen,Adr ;Adressen der Filenamen SLoop: move.l Adr,a2 ;1.Adresse in A2 move.l a2,a3 addq.l #4,a3 ;2.Adresse in A3 move.l a3,a5 ;2.Adresse merken move.l (a2),a0 ;1.Name ab (A0) move.l (a3),a1 ;2.Name ab (A1) BuLoop: move.b (a0)+,d2 ;1 Byte aus 1.Namen bsr Gross ;in Großbuchstaben wandeln move.b d2,d0 ;und nach D0 move.b (a1)+,d2 ;1 Byte aus 2.Namen bsr Gross ;in Großbuchstaben wandeln cmp.b d2,d0 ;beide Bytes vergleichen beq.s BuLoop ;beide gleich, die nächsten ;beiden holen und vergleichen bmi.s BuOK ;Byte 1 < Byte 2, OK, Tausch: move.l Adr,a1 ;sonst die move.l (a1),d0 ;Adressen move.l 4(a1),(a1) ;des ersten und des move.l d0,4(a1) ;zweiten Namens tauschen BuOK: move.l a5,Adr ;Adressenzeiger auf nächste Adresse dbra d3,SLoop ;und weiter vergleichen dbra d7,SoLoop ;und alles von vorne SoEnd: bsr ASCII ;Anzahl Files in ASCII-Text wandeln AdrUe: move.l Adressen,a0 ;Die Startadressen move.l a0,Adr ;der Adressen der Filenamen add.l #1200,a0 ;und der move.l a0,Files ;Filenamen selbst übergeben rts ;und zurück ;----------------------------------------- ;UP - Anzahl Files in ASCII-Text umwandeln ;----------------------------------------- ASCII: moveq #0,d0 ;D0 löschen move.w AnzFiles+2,d0 ;Anzahl Dirs nach D0 lea DirAnzTxt(pc),a0;ASCII ab (A0) bsr ASC3 ;eintragen moveq #0,d0 ;D0 löschen move.w AnzFiles,d0 ;Anzahl Files sub.w AnzFiles+2,d0 ;- Anzahl Dirs lea FilAnzTxt(pc),a0;ab (A0) eintragen ;------- ----------------- ;UP - 3-stellige Zahl in ASCII-Text umwandeln ;-------------------------------------------- ASC3: divu #100,d0 ;D0 : 100 bsr ASC ;umrechnen divu #10,d0 ;Rest : 10 bsr ASC ;umrechnen ASC: add.w #"0",d0 ;+ "0" move.b d0,(a0)+ ;ablegen move.w #0,d0 ;unteres Wort löschen swap d0 ;oberes Wort in Unteres rts ;und fertig ;------------------------------------------------------- ;UP - Einen Buchstaben (in D2) in Großbuchstaben wandeln ;------------------------------------------------------- Gross: cmp.b #"a",d2 ;D2 < "a" ? bcs.s RET6 ;nicht wandeln cmp.b #"z",d2 ;D2 > "z" ? bhi.s RET6 ;nicht wandeln sub.b #32,d2 ;D2 - 32 = Großbuchstabe RET6: rts ;zurück ;----------------------------------------- ;UP - Anzeigebox (für 6 Filenamen) löschen ;----------------------------------------- SechsFrei: lea LeerString(pc),a0;Adresse des Leerstrings move.l a0,File0T ;(30 Leerzeichen + 0-Byte) move.l a0,File1T ;in alle move.l a0,File3T ;File- move.l a0,File4T ;Gadgets move.l a0,File5T ;eintragen DirL: move.l a0,File2T ;------- ------------------------------- ;UP - FilesRefresh: Filenamen, Schieber und Anzahl Files ; Refresh2: Andere Gadgets erneuern, dann ; Gadgetadresse des Ersten in A0 und Anzahl in D0 ;------------------------------------------------------- FilesRefresh: lea File0(pc),a0 ;ab File0-Gadget moveq #7,d0 ;7 Gadgets Refresh2: move.l Fenster,a1 lea FntReq(pc),a2 ;im Requester move.l IntBase,a6 jmp RefreshGList(a6) ;neu ausgeben ;---------------------------- ;UP - Pfadgadget neu ausgeben ;---------------------------- RefreshPfad: lea PfadG(pc),a0 FileRe: moveq #1,d0 bra.s Refresh2 ;-------------------------------- ;UP - Filenamegadget neu ausgeben ;-------------------------------- RefreshFile: lea FiNaG(pc),a0 bra.s FileRe ;---------------------------------------------- ;UP - Speicher reservieren, Anzahl Bytes in D0 ; Reservieren2 für CHIP-RAM (#$10002 in D1) ;---------------------------------------------- Reservieren: move.l #$10000,d1 ;irgendwo im RAM löschen Reservieren2: move.l ExecBase,a6 jmp AllocMem(a6) ;und reservieren ;--------------------------------------------------- ;UP - Warten auf ein Ereignis im Fenster-Messageport ;--------------------------------------------------- Warte: move.l Fenster,a0 ;Fensterheader in A0 move.l 86(a0),a0 ;Messageport nach A0 move.l ExecBase,a6 jsr WaitPort(a6) ;warte auf Message move.l Fenster,a0 move.l 86(a0),a0 jsr GetMsg(a6) ;Message abholen tst.l d0 ;D0 = 0 (keine Message) ? beq.s Warte ;dann weiter warten move.l d0,a1 ;Zeiger auf Message-Struktur move.l 20(a1),d7 ;Ereignis nach D7 cmp.w #$200,d7 ;WINDOWCLOSE ? beq.s MsgEnd ;ja, dann fertig move.l 28(a1),a0 ;Adresse des Gadgets move.l a0,d5 ;Adresse merken move.w 38(a0),d6 ;ID-Nummer des Gadgets nach D6 MsgEnd: jmp ReplyMsg(a6) ;'Message erhalten' melden ;--------------------------- ;UP - Eine Library schließen ;--------------------------- CloseLib: move.l ExecBase,a6 jmp CloseLibrary(a6) ;-------------------------------------------------- ;UP - Screen und alle geöffneten Librarys schließen ;-------------------------------------------------- CloseAll: ;---font.library - falls vorhanden - schließen tst.l FntBase beq.s Error4 ;nicht vorhanden, weiter move.l FntBase,a1 bsr CloseLib ;---Replyport - falls vorhanden - abmelden Error4: tst.l DevBase bne.s noDev ;nicht vorhanden, weiter move.l ExecBase,a6 lea Reply(pc),a1 jsr RemPort(a6) ;---narrator.device schließen lea TalkIO(pc),a1 jsr CloseDevice(a6) ;---dos.library schließen noDev: move.l DosBase,a1 ;Dos-Library bsr CloseLib ;schließen ;---graphics.library schließen Error3: move.l GfxBase,a1 bsr CloseLib ;---intuition.library schließen Error2: move.l IntBase,a1 bsr CloseLib ;---Irgendein Fehler, 4711 in D0 zurückbringen Error: move.w #4711,d0 rts ;------------------------------------------ ;UP - Librarys/Screen öffnen, Geräte suchen ;------------------------------------------ OpenAll: move.l ExecBase,a6 lea IntName(pc),a1 ;Intuition-Library jsr OpenLibrary(a6) ;öffnen move.l d0,IntBase ;Bei Fehler: beq.s Error ;4711 und zurück lea GfxName(pc),a1 ;Graphics-Library jsr OpenLibrary(a6) ;öffnen move.l d0,GfxBase beq.s Error2 ;INT schließen, zurück lea DosName(pc),a1 ;Dos-Library jsr OpenLibrary(a6) ;öffnen move.l d0,DosBase beq.s Error3 ;GFX und INT schließen, zurück sub.l a1,a1 ;Eigenen jsr FindTask(a6) ;Task suchen move.l d0,Reply+16 ;und in Replyport eintragen lea Reply(pc),a1 ;Replyport jsr AddPort(a6) ;anmelden lea TalkIO(pc),a1 ;I/O-Struktur moveq #0,d0 ;Unit 0 moveq #0,d1 ;Keine Flags lea NarrName(pc),a0 ;'narrator.device' jsr OpenDevice(a6) ;öffnen move.l d0,DevBase ;DevBase = 0, beq.s LaufW ;wenn's geklappt hat lea Reply(pc),a1 ;sonst Port wieder jsr RemPort(a6) ;abmelden ;---Welche Laufwerke sind angeschlossen ? ;---Wo ist das 'fonts'-Directory ? ;---DeviceListen nach 'DFx', 'DHx' etc. absuchen ;---Gadgets im Requester/Fontdatenfenster anwählbar machen LaufW: move.l DosBase,a0 move.l 34(a0),a0 ;ab A0 RootNode move.l 24(a0),d0 ;Zeiger auf DosInfo lsl.l #2,d0 ;BPTR umrechnen in APTR move.l d0,a0 ;ab A0 DosInfo move.l 4(a0),d0 ;Zeiger auf DeviceInfo lsl.l #2,d0 ;umrechnen move.l d0,a0 ;ab A0 DeviceList NoLoop: move.l 4(a0),d0 ;DeviceType = 0 (DEVICE) ? beq.s Device ;ja, weiter cmp.l #1,d0 ;DeviceType = 1 (DIRECTORY) ? bne.s neuNod ;nein, weiter ;---Directory in DeviceList gefunden, testen, ob 'fonts' move.l 40(a0),d0 ;Adresse Name lsl.l #2,d0 ;* 4 = echte Adresse move.l d0,a2 ;Adresse nach A2 cmp.l #$05666f6e,(a2) ;'5fon' ? bne.s neuNod ;nein, dann nicht 'fonts' move.l a0,fontsDir ;DeviceList-Anfang merken move.l 12(a0),fontsLock;Lock merken ;---Nächste Node suchen neuNod: move.l (a0),d0 ;Zeiger auf nächste Node bne.s umrech ;und weiter wenn's eine gibt rts ;sonst fertig, zurück umrech: lsl.l #2,d0 ;Adresse umrechnen move.l d0,a0 ;und nächste Node bra.s NoLoop ;untersuchen ;---Devicenamen mit Gadgetnamen vergleichen Device: move.l 40(a0),d0 ;Zeiger auf DeviceNamen lsl.l #2,d0 ;umrechnen move.l d0,a2 ;DeviceName ab (A2) tst.b (a2)+ ;BSTR-Länge überlesen move.l a2,a1 ;Adresse 1. Buchstabe nach A1 lea DF0Rea(pc),a4 ;Gadgetreaktionen Requester lea Laufwerke(pc),a5;zu suchende Geräte "DF1/DH0..." move.l a5,d5 ;Adresse A5 merken moveq #4,d6 ;5 Gerätenamen suchen NName: moveq #2,d7 ;je 3 Buchstaben vergleichen DevBy: move.b (a1)+,d0 ;1 Byte aus DeviceNamen mit cmp.b (a5)+,d0 ;Byte aus Gerätenamen vergleichen bne.s unglei ;ungleich, weiter dbra d7,DevBy ;sonst nächstes Byte vergleichen ;---Name vorhanden, Gadget anwählbar machen clr.w (a4) ;Gadgets im Requester und im clr.w 44(a4) ;Fontdatenfenster anwählbar machen unglei: add.l #88,a4 ;A4 auf nächstes Gadget addq.l #6,d5 ;ab (A5) nächster zu move.l d5,a5 ;suchender Name move.l a2,a1 ;ab (A1) wieder DeviceName dbra d6,NName ;und vergleichen bra.s neuNod ;nächste Node untersuchen ;------------ ;PROGRAMMENDE ;------------ Uups: move.l Scrhd,a0 ;Screen move.l IntBase,a6 jsr CloseScreen(a6) ;schließen ImFrei: move.l Images,a1 ;Images/Ton-Speicher moveq #88,d0 ;88 Bytes bsr Freigeben ;freigeben AdFrei: move.l Adressen,a1 ;sonstigen Speicher move.l #RAM,d0 ;mit 'RAM' Bytes bsr Freigeben ;freigeben AlleZu: bsr CloseAll ;Librarys schließen ENDE: move.l WBMessage,d7 ;Workbench-Message vorhanden ? beq.s TUESS ;nein, weiter move.l ExecBase,a6 jsr Forbid(a6) ;Multitasking abschalten move.l d7,a1 ;WB-Message jsr ReplyMsg(a6) ;zurückschicken TUESS: move.l Stack,a7 ;Stack wieder herstellen moveq #0,d0 ;D0 löschen, dann rts ;ENDE UND AUS ;----------------------------------- ;Screen-Definition 640*256, 8 Farben ;----------------------------------- ScrDef: dc.w 0,0,640,256,3 dc.b 0,1 dc.w $8000,15 dc.l 0,0,0,0 ;---------------- ;Einstell-Fenster ;---------------- EinWin: dc.w 0,0,640,256 dc.b 0,1 dc.l $240,$11008,Res,0,EinstellTxt Scrhd: dc.l 0,0 dc.w 0,0,0,0,15 ;------------------- ;Umwandlungs-Fenster ;------------------- UmWin: dc.w 0,0,640,256 dc.b 0,1 dc.l $240,$11408,0,0,UmwanTxt Scrhd2: dc.l 0,0 dc.w 0,0,0,0,15 ;----------------- ;Fontdaten-Fenster ;----------------- FDWin: dc.w 208,50,223,100 dc.b 0,1 dc.l $40,$11000,OK3Gad,0,FntName Scrhd3: dc.l 0,0 dc.w 0,0,0,0,15 ;--------------------- ;Requester Fontauswahl ;--------------------- FntReq: dc.l 0 dc.w 180,16,279,175,0,0 dc.l UpPf,TiBox,UebTxt dc.w 0 dc.b 1,0 blk.l 20,0 TiBox: dc.w 5,1 dc.b 2,1,0,5 dc.l Koord2,TiBox2 TiBox2: dc.w 1,1 dc.b 2,1,0,5 dc.l Koord0,FilBox FilBox: dc.w 5,21 dc.b 2,1,0,5 dc.l Koord3,0 UebTxt: dc.b 2,1,0,0 dc.w 60,5 dc.l 0,ReqText,0 UpPf: dc.l DnPf dc.w 258,21,16,10,6,1,1 dc.l UImg,UImg2,0,0,0 dc.w 6,0,0 UImg: dc.w 0,0,16,10,1 ImUp: dc.l 0 dc.b 1,0,0,0,0,0 UImg2: dc.w 0,0,16,10,1 ImUp2: dc.l 0 dc.b 1,0,0,0,0,0 DnPf: dc.l PfadG dc.w 258,70,16,10,6,1,1 dc.l DImg,DImg2,0,0,0 dc.w 7,0,0 DImg: dc.w 0,0,16,10,1 ImDn: dc.l 0 dc.b 1,0,0,0,0,0 DImg2: dc.w 0,0,16,10,1 ImDn2: dc.l 0 dc.b 1,0,0,0,0,0 PfadG: dc.l FiNaG dc.w 50,89,216,8,0,1,4 dc.l NaBox,0,PfTxt,0,PfSInf dc.w 9,0,0 NaBox: dc.w -45,-4 dc.b 2,1,0,5 dc.l Koord6,0 PfTxt: dc.b 2,1,0,0 dc.w -40,0 dc.l 0,PfadText,0 PfSInf: dc.l Pfad,Undo dc.w 0,100,0,0 PfLang: dc.w 0,0,0,0,0,0,0,0,0,0 FiNaG: dc.l DF0Gad dc.w 50,110,216,8,0,1,4 dc.l NaBox,0,FiNaT,0,FiSInf dc.w 10,0,0 FiNaT: dc.b 2,1,0,0 dc.w -41,0 dc.l 0,FileText,0 FiSInf: dc.l Filename,Undo dc.w 0,32,0,0 FiLang: dc.w 0,0,0,0 dc.l 0,0,0 ;---Ab hier Reihenfolge NICHT verändern!! DF0Gad: dc.l DF1Gad ;DF0:-Gadget im Requester dc.w 5,127,39,17 DF0Rea: dc.w $100,1,1 dc.l Box,0,DF0Txt,0,0 dc.w 11,0,0 F0Gad: dc.l F1Gad ;DF0:-Gadget im Fontdatenfenster dc.w 4,37, 39,17 F0Rea: dc.w $100,1,1 dc.l Box,0,DF0Txt,0,0 dc.w 500,0,0 DF1Gad: dc.l DH0Gad ;DF1: dc.w 55,127,39,17 DF1Rea: dc.w $100,1,1 dc.l Box,0,DF1Txt,0,0 dc.w 12,0,0 F1Gad: dc.l H0Gad ;DF1: dc.w 48,37, 39,17 F1Rea: dc.w $100,1,1 dc.l Box,0,DF1Txt,0,0 dc.w 501,0,0 DH0Gad: dc.l DH1Gad ;DH0: dc.w 105,127,39,17 DH0Rea: dc.w $100,1,1 dc.l Box,0,DH0Txt,0,0 dc.w 13,0,0 H0Gad: dc.l H1Gad ;DH0: dc.w 92,37, 39,17 H0Rea: dc.w $100,1,1 dc.l Box,0,DH0Txt,0,0 dc.w 502,0,0 DH1Gad: dc.l RAMGad ;DH1: dc.w 155,127,39,17 DH1Rea: dc.w $100,1,1 dc.l Box,0,DH1Txt,0,0 dc.w 14,0,0 H1Gad: dc.l RAGad ;DH1: dc.w 136,37, 39,17 H1Rea: dc.w $100,1,1 dc.l Box,0,DH1Txt,0,0 dc.w 503,0,0 RAMGad: dc.l UupsG ;RAM: dc.w 205,127,39,17 RAMRea: dc.w $100,1,1 dc.l Box,0,RAMTxt,0,0 dc.w 15,0,0 RAGad: dc.l 0 ;RAM: dc.w 180,37, 39,17 RARea: dc.w $100,1,1 dc.l Box,0,RAMTxt,0,0 dc.w 504,0,0 DF0Txt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,DF0Text,0 DF1Txt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,DF1Text,0 DH0Txt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,DH0Text,0 DH1Txt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,DH1Text,0 RAMTxt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,RAMText,0 Box: dc.w 0,0 dc.b 2,1,0,5 dc.l Koord8,0 UupsG: dc.l File0 dc.w 193,150,61,17,0,1,1 dc.l OKBox,0,UupsT,0,0 dc.w 18,0,0 UupsT: dc.b 2,1,0,0 dc.w 11,5 dc.l 0,UUPSText,0 File0: dc.l File1 dc.w 6,24,248,8,0,1,1 dc.l 0,0,F0Text,0,0 dc.w 0,0,0 F0Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File0T: dc.l 0,0 File1: dc.l File2 dc.w 6,33,248,8,0,1,1 dc.l 0,0,F1Text,0,0 dc.w 1,0,0 F1Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File1T: dc.l 0,0 File2: dc.l File3 dc.w 6,42,248,8,0,1,1 dc.l 0,0,F2Text,0,0 dc.w 2,0,0 F2Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File2T: dc.l 0,0 File3: dc.l File4 dc.w 6,51,248,8,0,1,1 dc.l 0,0,F3Text,0,0 dc.w 3,0,0 F3Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File3T: dc.l 0,0 File4: dc.l File5 dc.w 6,60,248,8,0,1,1 dc.l 0,0,F4Text,0,0 dc.w 4,0,0 F4Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File4T: dc.l 0,0 File5: dc.l SchGad dc.w 6,69,248,8,0,1,1 dc.l 0,0,F5Text,0,0 dc.w 5,0,0 F5Text: dc.b 2,1,1,0 dc.w 4,0,0,0 File5T: dc.l 0,0 SchGad: dc.l PARGad dc.w 256,31,20,39,0,1,3 dc.l SImage,0,DAnTxt,0,PropIn dc.w 8,0,0 SImage: dc.w 0,0,0,0 DAnTxt: dc.b 2,1,1,0 dc.w -152,119 dc.l 0,DirAnzTxt,FAnTxt FAnTxt: dc.b 2,1,1,0 dc.w -152,129 dc.l 0,FilAnzTxt,0 PropIn: dc.w 5,0 VertPo: dc.w 0,0 SchGr: dc.w $ffff,0,0,0,0,0,0 PARGad: dc.l OKGad dc.w 255,127,19,17,0,1,1 dc.l PARBox,0,ParTxt,0,0 dc.w 16,0,0 PARBox: dc.w 0,0 dc.b 2,1,0,5 dc.l Koord9,0 ParTxt: dc.b 2,1,0,0 dc.w 5,5 dc.l 0,PARENTText,0 OKGad: dc.w 0,0,25,150,61,17,0,1,1 dc.l OKBox,0,OKTxt,0,0 dc.w 17,0,0 OKBox: dc.w 0,0 dc.b 2,1,0,5 dc.l Koord4,OKBox2 OKBox2: dc.w -2,-1 dc.b 2,1,0,5 dc.l Koord5,0 OKTxt: dc.b 2,1,0,0 dc.w 23,5 dc.l 0,OKText,0 ;--------------------------------- ;Koordinaten für Gadgetumrandungen ;--------------------------------- Koord0: dc.w 0,0,276,0,276,172,0,172,0,0 Koord1: dc.w 0,0,196,0,196,18,0,18,0,0 Koord2: dc.w 0,0,268,0,268,14,0,14,0,0 Koord3: dc.w 0,0,249,0,249,58,0,58,0,0 Koord4: dc.w 0,0,60,0,60,16,0,16,0,0 Koord5: dc.w 0,0,64,0,64,18,0,18,0,0 Koord6: dc.w 0,0,268,0,268,15,0,15,0,0 Koord7: dc.w 0,0,192,0,192,16,0,16,0,0 Koord9: dc.w 0,0,18,0,18,16,0,16,0,0 Koord8: dc.w 0,0,38,0,38,16,0,16,0,0 ;------------ ;StringInfo's ;------------ Info1: dc.l I1,Undo ;Reset dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info2: dc.l I2,Undo ;Reset1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info3: dc.l I3,Undo ;ROM > RAM dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info4: dc.l I4,Undo ;ROM > RAM1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info5: dc.l I5,Undo ;ROM > RAM2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info6: dc.l I6,Undo ;ROM > RAM3 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info7: dc.l I7,Undo ;ROM > RAM4 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info8: dc.l I8,Undo ;Zeichen laden dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info9: dc.l I9,Undo ;Zeichen laden1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info10: dc.l I10,Undo ;Zeichen laden2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info11: dc.l I11,Undo ;Erstes Zeichen dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info12: dc.l I12,Undo ;Letztes Zeichen dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info13: dc.l I13,Undo ;Zeichensatz ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info14: dc.l I14,Undo ;Zeichensatz ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info15: dc.l I15,Undo ;Zeichensatz ein2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info16: dc.l I16,Undo ;NLQ ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info17: dc.l I17,Undo ;NLQ ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info18: dc.l I18,Undo ;NLQ ein2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info19: dc.l I19,Undo ;D ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info20: dc.l I20,Undo ;D ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info21: dc.l I21,Undo ;D ein2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info22: dc.l I22,Undo ;10 CPI ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info23: dc.l I23,Undo ;10 CPI ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info24: dc.l I24,Undo ;12 CPI ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info25: dc.l I25,Undo ;12 CPI ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info26: dc.l I26,Undo ;Prop ein dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info27: dc.l I27,Undo ;Prop ein1 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info28: dc.l I28,Undo ;Prop ein2 dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info37: dc.l I28a,Undo ;Sonstiges dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info38: dc.l I28b,Undo ;Sonstiges dc.w 0,4,0,0,0,0,0,0,0,0,0,0,0,0 Info29: dc.l I29,Undo ;Breite Prop dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info31: dc.l I31,Undo ;Breite 12 CPI dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info32: dc.l I32,Undo ;Max 12 CPI dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info33: dc.l I33,Undo ;Breite 10 CPI dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info34: dc.l I34,Undo ;Max 10 CPI dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info35: dc.l I35,Undo ;Space Prop dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 Info36: dc.l I36,Undo ;Abstand Prop dc.w 0,3,0,0,0,0,0,0,0,0,0,0,0,0 ;---------------------------- ;Info-Texte (je 4 Bytes lang) ;---------------------------- I1: dc.l 0 ;Reset I2: dc.l 0 I3: dc.l 0 ;ROM > RAM I4: dc.l 0 I5: dc.l 0 I6: dc.l 0 I7: dc.l 0 I8: dc.l 0 ;Zeichensatz laden I9: dc.l 0 I10: dc.l 0 I11: dc.l 0 ;Z-Satz erstes Zeichen I12: dc.l 0 ;Z-Satz letztes Zeichen I13: dc.l 0 ;Zeichensatz ein I14: dc.l 0 I15: dc.l 0 I16: dc.l 0 ;NLQ ein I17: dc.l 0 I18: dc.l 0 I19: dc.l 0 ;Deutschen Zeichensatz ein I20: dc.l 0 I21: dc.l 0 I22: dc.l 0 ;10 CPI ein I23: dc.l 0 I24: dc.l 0 ;12 CPI ein I25: dc.l 0 I26: dc.l 0 ;Proportional ein I27: dc.l 0 I28: dc.l 0 I28a: dc.l 0 ;Sonstiges I28b: dc.l 0 I29: dc.l 0 ;Breite Proportional I31: dc.l 0 ;Breite 12 CPI I32: dc.l 0 ;Max 12 CPI I33: dc.l 0 ;Breite 10 CPI I34: dc.l 0 ;Max 10 CPI I35: dc.l 0 ;Space Proportional I36: dc.l 0 ;Abstand Proportional ;-------------------- ;Texte in J/N-Gadgets ;-------------------- Text2: dc.b 1,0,1,0 ;Reset "N" dc.l 0,0,0,0 Text3: dc.b 1,0,1,0 ;Proportional "J" dc.l 0,0,0,0 Text4: dc.b 1,0,1,0 ;12 CPI "J" dc.l 0,0,0,0 Text5: dc.b 1,0,1,0 ;10 CPI "J" dc.l 0,0,0,0 Text6: dc.b 1,0,1,0 ;Prop-Shadow "N" dc.l 0,0,0,0 Text7: dc.b 1,0,1,0 ;12-Shadow "N" dc.l 0,0,0,0 Text8: dc.b 1,0,1,0 ;10-Shadow "N" dc.l 0,0,0,0 Text9: dc.b 1,0,1,0 ;Prop-Outline "N" dc.l 0,0,0,0 Text10: dc.b 1,0,1,0 ;12-Outline "N" dc.l 0,0,0,0 Text11: dc.b 1,0,1,0 ;10-Outline "N" dc.l 0,0,0,0 Text12: dc.b 1,0,1,0 ;Prop-Sh/Out "N" dc.l 0,0,0,0 Text13: dc.b 1,0,1,0 ;12-Sh/Out "N" dc.l 0,0,0,0 Text14: dc.b 1,0,1,0 ;10-Sh/Out "N" dc.l 0,0,0,0 Text15: dc.b 1,0,1,0 ;Punkte nebeneinander "J" dc.l 0,0,0,0 Text16: dc.b 1,0,1,0 ;Vergrößern "J" dc.l 0,0,0,0 Text17: dc.b 1,0,1,0 ;Nur Höhe "N" dc.l 0,0,0,0 Text18: dc.b 1,0,1,0 ;Nur Breite "N" dc.l 0,0,0,0 ;------------------------------------------------- ;Ausgabe 1 Zeichen mit PrintIText (geladener Font) ;------------------------------------------------- EinZ: dc.b 1,1,0,0 ;Farben/Modus dc.w 0,0 ;Koordinaten dc.l TextAttr ;Zeiger auf geladenen Font dc.l Undo,0 ;Text im Undopuffer ;------------------------------------- ;Ausgabe Text mit PrintIText (Topaz/8) ;------------------------------------- MehrZ: dc.b 4,0,1,0 ;Farben/Modus dc.w 0,0 ;Koordinaten dc.l 0 ;Defaultfont Topaz/8 dc.l Undo,0 ;Text im Undopuffer ;-------------------------- ;Gadgets im Einstellfenster ;-------------------------- Res: dc.l Res2 ;Reset '027' dc.w 199,32,32,8,0,1,4 dc.l 0,0,CH,0,Info1 dc.w 99,0,0 Res2: dc.l ROM ;Reset '064' ('@') dc.w 279,32,32,8,0,1,4 dc.l 0,0,CH2,0,Info2 dc.w 99,0,0 ROM: dc.l ROM2 ;ROM > RAM '027' dc.w 199,42,32,8,0,1,4 dc.l 0,0,CH,0,Info3 dc.w 99,0,0 ROM2: dc.l ROM3 ;'058' dc.w 279,42,32,8,0,1,4 dc.l 0,0,CH2,0,Info4 dc.w 99,0,0 ROM3: dc.l ROM4 ;'000' dc.w 359,42,32,8,0,1,4 dc.l 0,0,CH2,0,Info5 dc.w 99,0,0 ROM4: dc.l ROM5 ;'000' dc.w 439,42,32,8,0,1,4 dc.l 0,0,CH2,0,Info6 dc.w 99,0,0 ROM5: dc.l ZL ;'000' dc.w 519,42,32,8,0,1,4 dc.l 0,0,CH2,0,Info7 dc.w 99,0,0 ZL: dc.l ZL2 ;Zeichen laden '027' dc.w 199,52,32,8,0,1,4 dc.l 0,0,CH,0,Info8 dc.w 99,0,0 ZL2: dc.l ZL3 ;'038' dc.w 279,52,32,8,0,1,4 dc.l 0,0,CH2,0,Info9 dc.w 99,0,0 ZL3: dc.l ZL4 ;'000' dc.w 359,52,32,8,0,1,4 dc.l 0,0,CH2,0,Info10 dc.w 99,0,0 ZL4: dc.l ZL5 ;erstes Zeichen '032' dc.w 439,52,32,8,0,1,4 dc.l 0,0,CH2,0,Info11 dc.w 99,0,0 ZL5: dc.l ZE ;letztes Zeichen '126' dc.w 519,52,32,8,0,1,4 dc.l 0,0,CH2,0,Info12 dc.w 99,0,0 ZE: dc.l ZE2 ;Zeichen ein '027' dc.w 199,62,32,8,0,1,4 dc.l 0,0,CH,0,Info13 dc.w 99,0,0 ZE2: dc.l ZE3 ;'037' dc.w 279,62,32,8,0,1,4 dc.l 0,0,CH2,0,Info14 dc.w 99,0,0 ZE3: dc.l NLQE ;'001' dc.w 359,62,32,8,0,1,4 dc.l 0,0,CH2,0,Info15 dc.w 99,0,0 NLQE: dc.l NLQE2 ;NLQ ein '027' dc.w 199,82,32,8,0,1,4 dc.l 0,0,CH,0,Info16 dc.w 99,0,0 NLQE2: dc.l NLQE3 ;'120' dc.w 279,82,32,8,0,1,4 dc.l 0,0,CH2,0,Info17 dc.w 99,0,0 NLQE3: dc.l CP10E ;'001' dc.w 359,82,32,8,0,1,4 dc.l 0,0,CH2,0,Info18 dc.w 99,0,0 CP10E: dc.l CP10E2 ;10 CPI ein '027' dc.w 199,112,32,8,0,1,4 dc.l 0,0,CH,0,Info22 dc.w 99,0,0 CP10E2: dc.l CP12E ;'080' dc.w 279,112,32,8,0,1,4 dc.l 0,0,CH2,0,Info23 dc.w 99,0,0 CP12E: dc.l CP12E2 ;12 CPI ein '027' dc.w 199,102,32,8,0,1,4 dc.l 0,0,CH,0,Info24 dc.w 99,0,0 CP12E2: dc.l ProE ;'077' dc.w 279,102,32,8,0,1,4 dc.l 0,0,CH2,0,Info25 dc.w 99,0,0 ProE: dc.l ProE2 ;Proportional ein '027' dc.w 199,92,32,8,0,1,4 dc.l 0,0,CH,0,Info26 dc.w 99,0,0 ProE2: dc.l ProE3 ;'112' dc.w 279,92,32,8,0,1,4 dc.l 0,0,CH2,0,Info27 dc.w 99,0,0 ProE3: dc.l DE ;'001' dc.w 359,92,32,8,0,1,4 dc.l 0,0,CH2,0,Info28 dc.w 99,0,0 DE: dc.l DE2 ;Zeichensatz D ein '027' dc.w 199,72,32,8,0,1,4 dc.l 0,0,CH,0,Info19 dc.w 99,0,0 DE2: dc.l DE3 ;'082' dc.w 279,72,32,8,0,1,4 dc.l 0,0,CH2,0,Info20 dc.w 99,0,0 DE3: dc.l Sonst ;'002' dc.w 359,72,32,8,0,1,4 dc.l 0,0,CH2,0,Info21 dc.w 99,0,0 Sonst: dc.l Sonst2 ;Sonstiges '000' dc.w 199,122,32,8,0,1,4 dc.l 0,0,CH,0,Info37 dc.w 99,0,0 Sonst2: dc.l ResJN ;'000' dc.w 279,122,32,8,0,1,4 dc.l 0,0,CH2,0,Info38 dc.w 99,0,0 ResJN: dc.l PrJN ;Reset ? 'J' dc.w 159,22,8,8,0,1,1 dc.l 0,0,Text2,0,0 dc.w 20,0,0 PrJN: dc.l PrBr ;Proportional Normal ? "J" dc.w 348,160,8,8,0,1,1 dc.l 0,0,Text3,0,0 dc.w 21,0,0 PrBr: dc.l ShJNp ;Breite "37" dc.w 196,160,24,8,0,1,4 dc.l 0,0,0,0,Info29 dc.w 60,0,0 ShJNp: dc.l OuJNp ;Shadow ? "N" dc.w 428,160,8,8,0,1,1 dc.l 0,0,Text6,0,0 dc.w 24,0,0 OuJNp: dc.l SOJNp ;Outline ? "N" dc.w 516,160,8,8,0,1,1 dc.l 0,0,Text9,0,0 dc.w 27,0,0 SOJNp: dc.l CP12JN ;Shadow/Outline ? "N" dc.w 612,160,8,8,0,1,1 dc.l 0,0,Text12,0,0 dc.w 30,0,0 CP12JN: dc.l CP12Br ;12 CPI ? "N" dc.w 348,140,8,8,0,1,1 dc.l 0,0,Text4,0,0 dc.w 22,0,0 CP12Br: dc.l CP12SP ;Breite "36" dc.w 196,140,24,8,0,1,4 dc.l 0,0,0,0,Info31 dc.w 62,0,0 CP12SP: dc.l ShJN12 ;Max "36" dc.w 260,140,24,8,0,1,4 dc.l 0,0,0,0,Info32 dc.w 63,0,0 ShJN12: dc.l OuJN12 ;Shadow ? "N" dc.w 428,140,8,8,0,1,1 dc.l 0,0,Text7,0,0 dc.w 25,0,0 OuJN12: dc.l SOJN12 ;Outline ? "N" dc.w 516,140,8,8,0,1,1 dc.l 0,0,Text10,0,0 dc.w 28,0,0 SOJN12: dc.l CP10JN ;Shadow/Outline ? "N" dc.w 612,140,8,8,0,1,1 dc.l 0,0,Text13,0,0 dc.w 31,0,0 CP10JN: dc.l CP10Br ;10 CPI ? "N" dc.w 348,150,8,8,0,1,1 dc.l 0,0,Text5,0,0 dc.w 23,0,0 CP10Br: dc.l CP10SP ;Breite "36" dc.w 196,150,24,8,0,1,4 dc.l 0,0,0,0,Info33 dc.w 64,0,0 CP10SP: dc.l ShJN10 ;Max "36" dc.w 260,150,24,8,0,1,4 dc.l 0,0,0,0,Info34 dc.w 65,0,0 ShJN10: dc.l OuJN10 ;Shadow ? "N" dc.w 428,150,8,8,0,1,1 dc.l 0,0,Text8,0,0 dc.w 26,0,0 OuJN10: dc.l SOJN10 ;Outline ? "N" dc.w 516,150,8,8,0,1,1 dc.l 0,0,Text11,0,0 dc.w 29,0,0 SOJN10: dc.l LeerPr ;Shadow/Outline ? "N" dc.w 612,150,8,8,0,1,1 dc.l 0,0,Text14,0,0 dc.w 32,0,0 LeerPr: dc.l AbstPr ;Leerzeichen Prop "11" dc.w 236,170,24,8,0,1,4 dc.l 0,0,0,0,Info35 dc.w 99,0,0 AbstPr: dc.l PuNe ;Abstand Prop "05" dc.w 388,170,24,8,0,1,4 dc.l 0,0,0,0,Info36 dc.w 99,0,0 PuNe: dc.l VergJ ;Punkte nebeneinander ? "J" dc.w 612,120,8,8,0,1,1 dc.l 0,0,Text15,0,0 dc.w 34,0,0 VergJ: dc.l NuHoe ;Vergrößern ? "J" dc.w 516,170,8,8,0,1,1 dc.l 0,0,Text16,0,0 dc.w 35,0,0 NuHoe: dc.l NuBr ;Nur Höhe ? "N" dc.w 612,170,8,8,0,1,1 dc.l 0,0,Text17,0,0 dc.w 36,0,0 NuBr: dc.l DefGad ;Nur Breite ? "N" dc.w 612,180,8,8,0,1,1 dc.l 0,0,Text18,0,0 dc.w 37,0,0 DefGad: dc.l OK2Gad ;'DEFAULTWERTE EINSTELLEN' dc.w 223,196,193,17,0,1,1 dc.l DefBox,0,0,0,0 dc.w 6666,0,0 OK2Gad: dc.l EndGad ;'OK' dc.w 223,219,61,17,0,1,1 dc.l OEBox,0,0,0,0 dc.w 7777,0,0 EndGad: dc.l DefL ;'ENDE' dc.w 355,219,61,17,0,1,1 dc.l OEBox,0,0,0,0 dc.w 9999,0,0 DefL: dc.l DefS ;'LADEN' dc.w 481,15,61,17,0,1,1 dc.l OEBox,0,0,0,0 dc.w 1111,0,0 DefS: dc.l 0 ;'SAVEN' dc.w 553,15,61,17,0,1,1 dc.l OEBox,0,0,0,0 dc.w 2222,0,0 DefBox: dc.w 0,0 dc.b 1,1,0,5 dc.l Koord7,Def2Bo Def2Bo: dc.w -2,-1 dc.b 1,1,0,5 dc.l Koord1,0 OEBox: dc.w 0,0 dc.b 1,1,0,5 dc.l Koord4,OEBox2 ;Koordinaten von OK-Box OEBox2: dc.w -2,-1 dc.b 1,1,0,5 dc.l Koord5,0 OK3Gad: dc.l UP2Gad ;'OK' im Fontdatenfenster dc.w 34,75,61,17,0,1,1 dc.l OEBox,0,0,0,0 ;braucht keine Textstruktur dc.w 4711,0,0 UP2Gad: dc.l F0Gad ;'UUPS!' dc.w 128,75,61,17,0,1,1 dc.l OEBox,0,0,0,0 dc.w 4712,0,0 CH: dc.b 4,1,0,0 ;'CHR$( )' dc.w -40,0 dc.l 0,CHRTxt,0 CH2: dc.b 4,1,0,0 ;'+CHR$( )' dc.w -48,0 dc.l 0,CHR2Txt,0 ;-------------- ;Variablen etc. ;-------------- Stack: dc.l 0 ;Stackpointer WBMessage: dc.l 0 ;Message von Workbench RastPort: dc.l 0 ;Fensterrastport RastEin: dc.l 0 ;Rastport Einstellfenster RastUm: dc.l 0 ;Umwandlungsfenster RastFD: dc.l 0 ;Fontdatenfenster Fenster: dc.l 0 ;Header aktuelles Fenster Einhd: dc.l 0 ;Einstellfenster Umhd: dc.l 0 ;Umwandlungsfenster FDhd: dc.l 0 ;FontDatenfenster Ueber: dc.l 0 ;Merker für Fensterüberschrift Defhd: dc.l 0 ;Defaultfile-Header Filehd: dc.l 0 ;Fileheader FileLock: dc.l 0 ;Filelock DirLock: dc.l 0 ;Directory-Lock PfadLock: dc.l 0 ;Lock auf kompletten Pfad fontsDir: dc.l 0 ;FontDir-Lock (für Assign) fontsLock: dc.l 0 ;Alter (originaler) Lock FIB: dc.l 0 ;FileInfoBlock DosBase: dc.l 0 ;Dosbasis IntBase: dc.l 0 ;Intuitionbasis GfxBase: dc.l 0 ;Graphicsbasis FntBase: dc.l 0 ;Fontbasis DevBase: dc.l 0 ;Device angemeldet TextFont: dc.l 0 ;Fontheader Adressen: dc.l 0 ;Adressen der Filenamen-Adressen Adr: dc.l 0 ;Adressen-Merker Files: dc.l 0 ;Adressen der Filenamen selbst AnzFiles: dc.l 0 ;Anzahl Files/Dirs (je 1 Wort) Toene: dc.l 0 ;Zeiger auf Tondaten im CHIP-RAM Images: dc.l 0 ;Zeiger auf Imagesdaten im CHIP-RAM xAnf2: dc.l 0 ;xAnfänge, yAnf2: dc.l 0 ;yAnfänge, yEnd2: dc.l 0 ;yEnden und wdth2: dc.l 0 ;Breiten im RAM DefRAM: dc.l 0 ;RAM für Einstell-File Puffer: dc.l 0 ;Puffer für das Druckerfile Puffer2: dc.l 0 ;Aktuelle Position im Puffer AusnData: dc.l 0 ;Ausnahmen tausend: dc.l 0 ;Merker für normxy! xv: dc.l 0 ;normxv! yv: dc.l 0 ;mormvy! xv2: dc.l 0 ;xv!/(d^2) yv2: dc.l 0 ;yv!/(d^2) xVergr: dc.l 0 ;xVergr! yVergr: dc.l 0 ;yVergr! yKoor: dc.l 0 ;y-Koordinate 1. Punkt GadgetTexte: blk.l 6,0 ;Adressen der 6 File-Texte ImageU: dc.w $0000,$7FFE,$7E7E,$7C3E,$781E ;Pfeil Up dc.w $700E,$6006,$7E7E,$7E7E,$0000 dc.w $0000,$7E7E,$7C3E,$781E,$700E ;Pfeil Up2 dc.w $6006,$7E7E,$7E7E,$7E7E,$0000 dc.w $0000,$7E7E,$7E7E,$6006,$700E ;Pfeil Down dc.w $781E,$7C3E,$7E7E,$7FFE,$0000 dc.w $0000,$7E7E,$7E7E,$7E7E,$6006 ;Pfeil Down2 dc.w $700E,$781E,$7C3E,$7E7E,$0000 dc.b -40,-70,-40,0,40,70,40,0 ;Tondaten Zaehler: dc.w 0 ;Zähler für Pfeil-Up/Down schiebe: dc.w 0 ;Schieber-Schrittweite yScroll: dc.w 0 ;soviel hochscrollen dz: dc.w 0 ;d2 (d^2) xvMerk: dc.w 0 Char: dc.w 0 Char1: dc.w 0 Char2: dc.w 0 nextAusn: dc.w 0 ScrFarben: dc.w $0000,$0fff,$0000,$0f70 ;Screenfarben dc.w $0ff0,$0fff,$0000,$0f70 xAnf: dc.w 0 xAnfe1: dc.w 0 xAnfe2: dc.w 0 xEnd: dc.w 0 yAnf: dc.w 0 yAnfe1: dc.w 0 yAnfe2: dc.w 0 minyAnf: dc.w 0 yEnd: dc.w 0 yEnde1: dc.w 0 yEnde2: dc.w 0 maxyEnd: dc.w 0 wdth: dc.w 0 wdthe1: dc.w 0 wdthe2: dc.w 0 wdthe: dc.w 0 maxwdth: dc.w 0 maxhght: dc.w 0 ;---Blitte von 0,yScroll nach x,y mit OR ($E0) oder XOR ($60) OutBlit: dc.w 8 ;Anzahl -1 dc.w 0,1,$e0 ,0,2,$e0 ,1,0,$e0 ,1,1,$e0 ,1,2,$e0 dc.w 2,0,$e0 ,2,1,$e0 ,2,2,$e0 ,1,1,$60 ShBlit: dc.w 6 dc.w 0,1,$e0 ,1,0,$e0 ,1,1,$e0 ,1,2,$e0 ,2,1,$e0 dc.w 2,2,$e0 ,0,0,$60 ShOutBlit: dc.w 18 dc.w 0,1,$e0 ,0,2,$e0 ,1,0,$e0 ,1,1,$e0 ,1,2,$e0 dc.w 1,3,$e0 ,2,0,$e0 ,2,1,$e0 ,2,2,$e0 ,2,3,$e0 dc.w 2,4,$e0 ,3,1,$e0 ,3,2,$e0 ,3,3,$e0 ,3,4,$e0 dc.w 4,2,$e0 ,4,3,$e0 ,4,4,$e0 ,1,1,$60 ZeBr: dc.b 0 ;Zeichenbreite ZeMa: dc.b 0 ;maxSpace style: dc.b 0 ;für Shadow/Outline PropFlag: dc.b 0 ;Flags für Proportional CP12Flag: dc.b 0 ;und 12 CPI Normal: dc.b 0 ;Flags Shadow: dc.b 0 ;für Outline: dc.b 0 ;Blitter zuBreit: dc.b 0 ;wenn Ligatur zu breit ist Ausn: dc.b 0 ;Anzahl Ausnahmen st: dc.b 0 ;wenn 0, dann st! = 1 k5x: dc.b 0 ;Komma-5-Flag für XstLoo k5y: dc.b 0 ;für YstLoop RootFlag: dc.b 0 ;Flag für Rootdir Abbruch: dc.b 0 ;Abbruch während der Umwandlung mReset: dc.b 0 ;'mit Reset' im J/N-Gadget JNFlags: blk.b 16,0 ;16 J/N-Gadgets LeerString: blk.b 30,32 ;30 Leerzeichen dc.b 0 ;und Abschlußnull Ausnahmen: dc.b 64,167,83,83,91,196,65,101 dc.b 92,214,79,101,93,220,85,101 dc.b 123,228,97,101,124,246,111,101 dc.b 125,252,117,101,126,223,115,115 ;---Reihenfolge der Gadgets (für Fehlerausgaben) FehlGad: dc.b 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 dc.b 15,16,17,25,26,27,18,19,20,21,22,23,24 dc.b 28,29,32,37,38,43,44,48,49 ;---Gelbe Texte im Einstellfenster even Texte1Ko: dc.w 19 ;Anzahl -1 dc.w $0400 ;Farbe/Modus dc.w 370,20,47,22,39,32,55,42,7,52,440,61,23,62 dc.w 428,66,55,72,87,82,15,92,63,102,63,112,71,122 dc.w 439,120,63,140,63,150,15,160,15,170,519,180 Texte1: dc.b "Einstellungen",0,"Reset vorher:",0 dc.b "Drucker-Reset:",0,"ROM ins RAM:",0 dc.b "Zeichensatz laden:",0,"^^^ ^^^",0 dc.b "Zeichensatz ein:",0 dc.b "Erstes & letztes Zeichen",0,"Deutsch ein:",0 dc.b "NLQ ein:",0,"Proportional ein:",0 dc.b "12 CPI ein:",0,"10 CPI ein:",0 dc.b "Sonstiges:",0,"Punkte nebeneinander:",0 dc.b "12 CPI-> Breite: Max: " dc.b "Normal: Shadow: Outline: Shad+Out:",0 dc.b "10 CPI-> Breite: Max: " dc.b "Normal: Shadow: Outline: Shad+Out:",0 dc.b "PROPORTIONAL-> Breite: " dc.b "Normal: Shadow: Outline: Shad+Out:",0 dc.b "PROPORTIONAL-> " dc.b "Leerzeichen: Zeichenabstand: " dc.b "Vergr",246,223,"ern: Nur H",246,"he:",0 dc.b "Nur Breite:",0 ;---Weiße Texte im Einstellfenster Texte1bKo: dc.w 4,$0100,492,20,564,20,228,201,246,224,370,224 Texte1b: dc.b "LADEN",0,"SAVEN",0 dc.b "DEFAULTWERTE EINSTELLEN",0,"OK",0,"ENDE",0 ;---Gelbe Texte im FontDatenFenster even Texte2Ko: dc.w 7,$0400,4,15,36,25,21,59 dc.w 52,15,195,15,4,25,140,25,204,25 Texte2: dc.b "H",246,"he: Max.Breite: ",0 dc.b 'Zeichen von " " bis " "',0 dc.b "Fertigen Font nach " SaveDisk: dc.b "xxx:",0 FntHo: dc.b 0,0,0,0 ;werden FntBr: dc.b 0,0,0,0 ;hier als FntAn: dc.b 0,0,0,0 ;ASCII-Texte FntEr: dc.b 0,0 ;vom Programm FntLe: dc.b 0,0 ;eingetragen ;---Weiße Texte im FontdatenFenster even Texte2bKo: dc.w 1,$0100,57,80,139,80 Texte2b: dc.b "OK",0,"UUPS!",0 ;---Texte CHRTxt: dc.b "CHR$( )",0 CHR2Txt: dc.b "+CHR$( )",0 JTxt: dc.b "J",0 NTxt: dc.b "N",0 ReqText: dc.b "BITTE FONT AUSW",196,"HLEN",0 PfadText: dc.b "FONT",0 FileText: dc.b "H",214,"HE",0 PARENTText: dc.b "/",0 OKText: dc.b "OK",0 UUPSText: dc.b "UUPS!",0 DirAnzTxt: dc.b "000 DIR's",0 FilAnzTxt: dc.b "000 FILES",0 DirLeerText: dc.b " DIRECTORY IST LEER !",0 AbbruchText: dc.b " EINLESEN ABGEBROCHEN !",0 FreiTxt: dc.b "<< KANN REQUESTER NICHT ",214,"FFNEN !",0 NoFntTxt: dc.b "<< FONT NICHT GEFUNDEN !",0 NoWinTxt: dc.b "<< KANN FENSTER NICHT ",214,"FFNEN !" LetztesTxt: dc.b "<< LETZTES ZEICHEN KLEINER ALS ERSTES !",0 MehrTxt: dc.b "<< MEHR ALS 128 ZEICHEN !",0 UnsinnTxt: dc.b "<< FONT ENTH",196,"LT UNSINNIGE WERTE !",0 NoDFontTxt: dc.b "<< ES FEHLT DIE 'diskfont.library'" dc.b " IM 'libs'-VERZEICHNIS !",0 DError: dc.b "<< DISKETTENFEHLER !",0 DSchutz: dc.b "<< DISKETTE IST SCHREIBGESCH",220,"TZT !",0 DPlatz: dc.b "<< NICHT GENUG PLATZ AUF DER DISKETTE !",0 DFile: dc.b "<< KANN FILE NICHT ",214,"FFNEN !",0 DSchreib: dc.b "<< FEHLER BEIM SPEICHERN !",0 VErrNVTxt: dc.b "<< FONT ZU HOCH ODER ZU BREIT F",220,"R" dc.b " 'Vergr",246,223,"ern: N' !",0 VErrNBTxt: dc.b "<< FONT ZU HOCH F",220,"R" dc.b " 'Nur Breite: J' !",0 VErrNHTxt: dc.b "<< FONT ZU BREIT F",220,"R" dc.b " 'Nur H",246,"he: J' !",0 DefNotTxt: dc.b "<< KANN 'ADOLF.EINSTELL' NICHT FINDEN !",0 FalschFile: dc.b "<< FALSCHES EINSTELL-FILE !",0 DefLSTxt: dc.b "ADOLF.EINSTELL",0 EinstellTxt: dc.b " Amiga DOwnLoad Fonts - ADOLF - ",169 dc.b " 1990 Ebsche Hermesmann Junior (EHJ) V1.0",0 IntName: dc.b "intuition.library",0 DosName: dc.b "dos.library",0 GfxName: dc.b "graphics.library",0 FntNam: dc.b "diskfont.library",0 NarrName: dc.b "narrator.device",0 ;---Defaultwerte in den Gadgets für Info1 bis Info38 (je 4 Bytes) even Default24: dc.b "027",0,"064",0 dc.b "027",0,"058",0,"000",0,"000",0,"000",0 dc.b "027",0,"038",0,"000",0,"032",0,"126",0 dc.b "027",0,"037",0,"001",0 dc.b "027",0,"120",0,"001",0 dc.b "027",0,"082",0,"002",0 dc.b "027",0,"080",0 dc.b "027",0,"077",0 dc.b "027",0,"112",0,"001",0 dc.b "000",0,"000",0 ;Sonstiges dc.b "37",0,0 ;Breite prop dc.b "36",0,0 ;Breite 12 cpi dc.b "36",0,0 ;Max 12 cpi dc.b "36",0,0 ;Breite 10 dc.b "36",0,0 ;Max 10 dc.b "11",0,0 ;Space prop dc.b "05",0,0 ;Abstand prop ;---Default-Texte für Text2 bis Text18 DefTxt24: dc.l NTxt,JTxt,JTxt,JTxt,NTxt,NTxt,NTxt,NTxt,NTxt dc.l NTxt,NTxt,NTxt,NTxt,JTxt,JTxt,NTxt,Ntxt ;---zu ladender Zeichensatz TextAttr: dc.l FntPfad ;Zeiger auf Pfad/Namen taYSize: dc.w 0,0 ;Fonthöhe, normal/keine Flags ;---Daten des geladenen Fonts (werden eingesetzt) SpacePtr: dc.l 0 ;Zeiger auf Matrixgrößen CharKern: dc.l 0 ;Zeiger auf Positionen in Matrix xSize: dc.w 0 ;Breite ySize: dc.w 0 ;Höhe AnzZei: dc.w 0 ;Anzahl Zeichen ;---Gadget-ASCII-Texte in Zahlen umgerechnet Reset: dc.b 0,0 ROMRAM: dc.b 0,0,0,0,0 ZSladen: dc.b 0,0,0 Erstes: dc.b 0 Letztes: dc.b 0 ZSein: dc.b 0,0,0 NLQein: dc.b 0,0,0 Dein: dc.b 0,0,0 C10ein: dc.b 0,0 C12ein: dc.b 0,0 PROein: dc.b 0,0,0 Sonstiges: dc.b 0,0 BrPr: dc.b 0 ;Breite prop Br12: dc.b 0 ;Breite 12 Ma12: dc.b 0 ;Max 12 Br10: dc.b 0 ;Breite 10 Ma10: dc.b 0 ;Max 10 LePr: dc.b 0 ;Leerzeichen prop AbPr: dc.b 0 ;Abstand prop even Pfad: blk.b 100,0 ;Pfadname Undo: blk.b 100,0 ;Undopuffer/Pfad + Filename Filename: blk.b 32,0 ;Filename (Fonthöhe) FntPfad: blk.b 100,0 ;Pfadname + ".font" UmwanTxt: dc.b "Umwandlung von: " ;keine 0! FntName: blk.b 32,0 ;Fontname pfontTxt: dc.b ".font",0 UPropTxt: dc.b "PROPORTIONAL ",0 U12CPTxt: dc.b "12 CPI ",0 U10CPTxt: dc.b "10 CPI ",0 UShTxt: dc.b "SHADOW ",0 UOutTxt: dc.b "OUTLINE ",0 UShOTxt: dc.b "SHADOW+OUTLINE ",0 AbbrTxt: dc.b " = Abbruch",0 FileTxt: dc.b 0,0,0,0,0,0 ;'p' '12s' '10so' etc. SaveDir: dc.b "DFonts",0 ;Directory für Fonts TitelPu: blk.b 80,0 ;Puffer Fensterüberschrift ;---Puffer für Sprachausgabe even TalkIO: blk.l 20,0 Reply: blk.l 8,0 Audio: dc.b 3,5,10,12 SayTxt: dc.b "SAYSHUNSAETZ FEHR TIHK.",0 SayEnd: align 4 InfoData: blk.l 9,0;Diskinfo (an durch 4 teilbarer Adresse) FileTexte: dc.b "p",0,0,0, "12",0,0,"10",0,0 ;Filenamen dc.b "ps",0,0, "12s",0, "10s",0 dc.b "po",0,0, "12o",0, "10o",0 dc.b "pso",0, "12so", "10so" Laufwerke: DF0Text: dc.b "DF0:",0,0 ;Diese Texte können in der DF1Text: dc.b "DF1:",0,0 ;Reihenfolge und im DH0Text: dc.b "DH0:",0,0 ;Inhalt beliebig verändert DH1Text: dc.b "DH1:",0,0 ;werden, solange sie RAMText: dc.b "RAM:",0,0 ;je 4 Bytes lang sind! EHJ