UNIT info; {$project vt } { Generierung von Sonderseiten zum Programm VideoText } INTERFACE; FROM vt USES jobs; PROCEDURE topinfo(top0,top1: p_onepage); PROCEDURE say_hello(version: Str80); PROCEDURE paraminfo; PROCEDURE create_help; { ---------------------------------------------------------------------- } IMPLEMENTATION; {$opt q,s+,i+ } { keine Laufzeitprüfungen außer Stack und Feldindizes } PROCEDURE write_to_page(x,y: Integer; txt: Str80; vgf,hgf: Integer; seite: p_onepage); { Text in eine Videotextseite schreiben. } { x und y werden ab 0 gezählt. Umlaute werden konvertiert. Wenn vgf oder } { hgf -1 sind, werden keine Farbsteuerzeichen erzeugt -> Platzersparnis. } VAR i,j: Integer; BEGIN i := x + 40*y; IF hgf=0 THEN BEGIN seite^.chars[i] := 28; Inc(i); END; IF hgf>0 THEN BEGIN seite^.chars[i] := hgf; Inc(i); seite^.chars[i] := 29; Inc(i); END; IF vgf>=0 THEN BEGIN seite^.chars[i] := vgf; Inc(i); END; FOR j := 1 TO Length(txt) DO BEGIN CASE txt[j] OF 'ä': seite^.chars[i] := Ord('{'); 'ö': seite^.chars[i] := Ord('|'); 'ü': seite^.chars[i] := Ord('}'); 'ß': seite^.chars[i] := Ord('~'); 'Ä': seite^.chars[i] := Ord('['); 'Ö': seite^.chars[i] := Ord('\'); 'Ü': seite^.chars[i] := Ord(']'); OTHERWISE seite^.chars[i] := Ord(txt[j]); END; Inc(i); END; END; PROCEDURE char_to_page(x,y: Integer; c: Char; seite: p_onepage); BEGIN seite^.chars[x+40*y] := Ord(c); END; PROCEDURE init_page(seite: p_onepage); { gerade mit New() erzeugte Seite zum Selbstbeschreiben vorbereiten. } { Nur pg und sp müssen bereits eingetragen sein. } VAR i: Integer; s: Str80; BEGIN FOR i := 0 TO 959 DO seite^.chars[i] := 32; seite^.cbits := $4A00; { wichtig: deutscher Zeichensatz! } s := '('+hexstr(seite^.sp,4)+') '+hexstr(seite^.pg,3); write_to_page(0,0,s,7,-1,seite); write_to_page(16,0,'lokal erzeugte VT-Seite',5,-1,seite); END; PROCEDURE topinfo{(top0,top1: p_onepage)}; { wertet die TOPtext-Seiten 1F0 und 1F1 aus, erzeugt zwei Seiten Information } { bzw., sofern schon vorhanden, aktualisiert diese nur. } VAR i,j,k,n: Integer; npg,nsp,nlrg: Integer; pg1,pg2: p_onepage; s: Str80; BEGIN pg1 := hunt_in_list($998,1,True); pg2 := hunt_in_list($998,2,True); IF pg1=Nil THEN BEGIN New(pg1); pg1^.pg := $998; pg1^.sp := 1; ins_to_list(pg1); update_list(pg1,1); END; IF pg2=Nil THEN BEGIN New(pg2); pg2^.pg := $998; pg2^.sp := 2; ins_to_list(pg2); update_list(pg2,1); END; init_page(pg1); init_page(pg2); npg := 0; nsp := 0; nlrg := 0; write_to_page(0,1,'Seitenbelegung (laut TOP-Text) 1/2',3,4,pg1); write_to_page(0,1,'Seitenbelegung (laut TOP-Text) 2/2',3,4,pg2); FOR i := 10 TO 89 DO BEGIN s := IntStr(10*i)+': ----------'; j := 10*i-60; FOR k := 0 TO 9 DO IF NOT (topcode[top0^.chars[j+k]] IN [0,16]) THEN BEGIN Inc(npg); n := topcode[top1^.chars[j+k]] CASE n OF 0: BEGIN s[k+6] := #127; Inc(nsp); END; 1..9: BEGIN s[k+6] := Chr(48+n); nsp := nsp + n; END; 10: BEGIN s[k+6] := '+'; Inc(nlrg); nsp := nsp + n; END; OTHERWISE s[k+6] := '?'; Dec(npg); { :-( } END; END ELSE IF topcode[top0^.chars[j+k]]=16 THEN s[k+6] := '?'; IF Odd(i DIV 10) THEN j := 2 ELSE j := 21; IF Odd((i+10) DIV 20) THEN k := i MOD 10+2 ELSE k := i MOD 10+13; IF i<50 THEN BEGIN write_to_page(j,k,s,7,-1,pg1); char_to_page(j+5,k,#6,pg1); END ELSE BEGIN write_to_page(j,k,s,7,-1,pg2); char_to_page(j+5,k,#6,pg2); END; END; s := IntStr(npg)+' Seitennummern'; write_to_page(0,12,s,7,5,pg1); s := ''; IF nlrg>0 THEN s := IntStr(nlrg)+' mit "mehr als 9" Unterseiten'; write_to_page(0,23,s,3,1,pg1); s := IntStr(nsp)+' kByte Text'; IF nlrg>0 THEN s := 'mind. ' + s; write_to_page(0,12,s,7,5,pg2); j := 0; FOR i := 100 TO 899 DO IF topcode[top0^.chars[i-60]]=1 THEN j := i; s := 'zur Zeit keine Untertitel'; IF j>0 THEN s := 'VT-Untertitel auf Seite '+IntStr(j); write_to_page(0,23,s,3,1,pg2); IF (thispage=pg1) OR (thispage=pg2) THEN writepage(thispage,True); END; PROCEDURE say_hello{(version: Str80)}; VAR seite: p_onepage; i: Integer; BEGIN seite := hunt_in_list($996,0,True); IF seite=Nil THEN BEGIN New(seite); seite^.pg := $996; seite^.sp := 0; ins_to_list(seite); { kein update_list(), da redraw_all noch folgt } END; init_page(seite); i := 1; write_to_page(0,i,#13,3,4,seite); write_to_page(13,i,Copy(version,7,14),-1,-1,seite); Inc(i); Inc(i); write_to_page(0,i,' Teletext-Software für den Amiga',4,6,seite); Inc(i); Inc(i); write_to_page(0,i,' Programmautor (1992-95):',7,5,seite); Inc(i); write_to_page(0,i,' Wilhelm Nöker',6,-1,seite); Inc(i); write_to_page(0,i,' Hertastr. 8, D-44388 Dortmund',6,-1,seite); Inc(i); Inc(i); write_to_page(0,i,' Compiler:',7,5,seite); Inc(i); write_to_page(0,i,' KICK-Pascal 2.12 von MAXON Computer',6,-1,seite); Inc(i); Inc(i); write_to_page(0,i, ' benötigte Hardware:',7,5,seite); Inc(i); write_to_page(0,i,' entspricht dem c''t-Projekt aus der',6,-1,seite); Inc(i); write_to_page(0,i,' Ausgabe 7/92',6,-1,seite); Inc(i); Inc(i); write_to_page(0,i,#13' FREEWARE',3,4,seite); Inc(i); Inc(i); write_to_page(0,i,' "Spread the word & the disk!"',4,6,seite); Inc(i); Inc(i); write_to_page(0,i,#24' Grüße an MiHü ;-)',5,-1,seite); Inc(i); END; PROCEDURE paraminfo; { gibt die eingestellten Startparameter aus } VAR seite: p_onepage; i,j: Integer; s: Str80; BEGIN seite := hunt_in_list($997,0,True); IF seite=Nil THEN BEGIN New(seite); seite^.pg := $997; seite^.sp := 0; ins_to_list(seite); { kein update_list(), da redraw_all noch folgt } END; init_page(seite); i := 1; write_to_page(0,i,#13' Ihre Programmstartparameter'#12,3,4,seite); Inc(i); Inc(i); write_to_page(0,i,'bzw. was Sie hätten angeben können',4,6,seite); Inc(i); Inc(i); write_to_page(0,i,' Icon-ToolTypes',6,-1,seite); write_to_page(25,i,'CLI-Parameter',5,-1,seite); Inc(i) write_to_page(0,i,'max. Zeit für Seitensuche (sek):',7,5,seite); Inc(i); write_to_page(0,i,' MAXWAIT='+IntStr(maxwait),6,-1,seite); write_to_page(25,i,'-w'+IntStr(maxwait),5,-1,seite); Inc(i); write_to_page(0,i,'Auffüllen einer Seite (50stel sek):',7,5,seite); Inc(i); write_to_page(0,i,' BURST='+IntStr(burst),6,-1,seite); write_to_page(25,i,'-b'+IntStr(burst),5,-1,seite); Inc(i); write_to_page(0,i,' SHUFFLE='+IntStr(shuffle),6,-1,seite); write_to_page(25,i,'-s'+IntStr(shuffle),5,-1,seite); Inc(i); write_to_page(0,i,'Zeitschleife (für schnelle Amigas):',7,5,seite); Inc(i); write_to_page(0,i,' BUSDELAY='+IntStr(busdelay),6,-1,seite); write_to_page(25,i,'-d'+IntStr(busdelay),5,-1,seite); Inc(i); write_to_page(0,i,'Bildschirmfarben:',7,5,seite); Inc(i); s := ''; FOR j := 0 TO 7 DO s := s + hexstr(palette[j],3)+','; write_to_page(0,i,' PALETTE=',6,-1,seite); write_to_page(25,i,'-p',5,-1,seite); Inc(i); write_to_page(4,i,Copy(s,1,31),6,-1,seite); Inc(i); write_to_page(0,i,'Ausgabedatei:',7,5,seite); Inc(i); write_to_page(0,i,' FILE='+outputname,6,-1,seite); write_to_page(36,i,'-f',5,-1,seite); Inc(i); write_to_page(0,i,' ICONPATH='+iconpath,6,-1,seite); write_to_page(36,i,'-i',5,-1,seite); Inc(i); write_to_page(0,i,'externer Editoraufruf:',7,5,seite); Inc(i); write_to_page(0,i,' EDITOR='+editor,6,-1,seite); write_to_page(36,i,'-e',5,-1,seite); Inc(i); write_to_page(0,i,' CONFIGPATH='+configpath,6,-1,seite); write_to_page(36,i,'-c',5,-1,seite); Inc(i); END; PROCEDURE create_help; { Hilfstext erzeugen oder, falls bereits vorhanden, nur die entsprechenden } { Seiten anspringen. } VAR i,j: Integer; pg1,pg2: p_onepage; BEGIN pg1 := hunt_in_list($999,1,True); pg2 := hunt_in_list($999,2,True); IF (pg1=Nil) OR (pg2=Nil) THEN BEGIN IF pg1=Nil THEN BEGIN New(pg1); pg1^.pg := $999; pg1^.sp := 1; init_page(pg1); ins_to_list(pg1); update_list(pg2,1); i := 1; write_to_page(0,i,#13'VideoText - Kurzanleitung'#12' 1/2',3,1,pg1); Inc(i); Inc(i); write_to_page(0,i,' Einfach Seitennummern eintippen: z. B.',7,-1,pg1); Inc(i); write_to_page(0,i,' 100 100/1 100/* , . Korrektur',7,-1,pg1); Inc(i); write_to_page(0,i,' mit möglich. Seitenüber-',7,-1,pg1); Inc(i); write_to_page(0,i,' wachung bzw. -protokoll: 100/. 100/!',7,-1,pg1); Inc(i); char_to_page(1,i-3,#3,pg1); char_to_page(17,i-3,#7,pg1); char_to_page(26,i-1,#3,pg1); write_to_page(0,i,'Durchblättern der Listen:',4,6,pg1); Inc(i); write_to_page(0,i,' Tab Seitenliste/Jobliste auswählen',7,-1,pg1); Inc(i); write_to_page(0,i,' Crsr Auswahlzeiger > bewegen',7,-1,pg1); Inc(i); char_to_page(22,i-1,#7,pg1); char_to_page(24,i-1,#6,pg1); FOR j := i-2 TO i-1 DO char_to_page(8,j,#6,pg1); write_to_page(0,i,'Operationen mit Seiten/Jobs:',4,6,pg1); Inc(i); write_to_page(0,i,' Del eine Seite/einen Job löschen',7,-1,pg1); Inc(i); write_to_page(0,i,' ? Geheimschrift aufdecken',7,-1,pg1); Inc(i); write_to_page(0,i,' Space und wieder tarnen',7,-1,pg1); Inc(i); write_to_page(0,i,' s/S/^S Seite(n) speichern',7,-1,pg1); Inc(i); write_to_page(0,i,' l und (VT-Format) wieder laden',7,-1,pg1); Inc(i); write_to_page(0,i,' i IFF-Bild speichern',7,-1,pg1); Inc(i); write_to_page(0,i,' P Seite drucken (nur Text)',7,-1,pg1); Inc(i); FOR j := i-7 TO i-1 DO char_to_page(8,j,#6,pg1); write_to_page(0,i,'Verschiedenes:',4,6,pg1); Inc(i); write_to_page(0,i,' n Sendernamen anzeigen',7,-1,pg1); Inc(i); write_to_page(0,i,' N Dateinamen ändern',7,-1,pg1); Inc(i); write_to_page(0,i,' t Test/Uhr ein/aus',7,-1,pg1); Inc(i); write_to_page(0,i,' T Systemuhr nach VT-Zeit stellen',7,-1,pg1); Inc(i); write_to_page(0,i,' x Programmende',7,-1,pg1); Inc(i); FOR j := i-5 TO i-1 DO char_to_page(8,j,#6,pg1); END; IF pg2=Nil THEN BEGIN New(pg2); pg2^.pg := $999; pg2^.sp := 2; init_page(pg2); ins_to_list(pg2); update_list(pg2,1); i := 1; write_to_page(0,i,#13'VideoText - Kurzanleitung'#12' 2/2',3,1,pg2); Inc(i); Inc(i); write_to_page(0,i,' F-Tasten, die nichts bewirken, wurden',7,-1,pg2); Inc(i); write_to_page(0,i,' evtl. von einem Commodity abgefangen?',7,-1,pg2); Inc(i); write_to_page(0,i,'Hardwaresteuerung:',4,6,pg2); Inc(i); write_to_page(0,i,' f1/F1 Fernsehdarstellung aus/ein',7,-1,pg2); Inc(i); write_to_page(0,i,' f2 Decoder neu initialisieren',7,-1,pg2); Inc(i); char_to_page(8,i-2,#6,pg2); FOR j := i-1 TO i-1 DO char_to_page(5,j,#6,pg2); write_to_page(0,i,'Dateioptionen:',4,6,pg2); Inc(i); write_to_page(0,i,' f4 Dateiformat ASCII/VT',7,-1,pg2); Inc(i); write_to_page(0,i,' f5 anhängen/überschreiben',7,-1,pg2); Inc(i); write_to_page(0,i,' F5 Icon erzeugen?',7,-1,pg2); Inc(i); FOR j := i-3 TO i-1 DO char_to_page(5,j,#6,pg2); write_to_page(0,i,'TOP-Text:',4,6,pg2); Inc(i); write_to_page(0,i,' f6 Blockseiten anfordern',7,-1,pg2); Inc(i); write_to_page(0,i,' F6 interaktive Auswahl',7,-1,pg2); Inc(i); FOR j := i-2 TO i-1 DO char_to_page(5,j,#6,pg2); write_to_page(0,i,'Nützliches:',4,6,pg2); Inc(i); write_to_page(0,i,' f7 alle Jobs löschen',7,-1,pg2); Inc(i); write_to_page(0,i,' F7 alle Seiten löschen',7,-1,pg2); Inc(i); write_to_page(0,i,' f8 Vorrang für neu eingegebene Jobs?',7,-1,pg2); Inc(i); write_to_page(0,i,' f9/F9 1./2. Seitenauswahl editieren',7,-1,pg2); Inc(i); write_to_page(0,i,' f10/F10 1./2. Seitenauswahl einlesen',7,-1,pg2); Inc(i); write_to_page(0,i,' # Seitennummern ins Clipboard',7,-1,pg2); Inc(i); FOR j := i-6 TO i-4 DO char_to_page(5,j,#6,pg2); char_to_page(8,i-3,#6,pg2); char_to_page(10,i-2,#6,pg2); char_to_page(5,i-1,#6,pg2); END; END; mark_queue(False); jobcursor := False; mark_list(False); thispage := pg1; mark_list(True); writepage(thispage,True); END; BEGIN { Initialisierungsteil } END.