home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / VIDEOTEXT.LZX / VTsrc / global.p < prev    next >
Encoding:
Text File  |  1996-01-07  |  3.3 KB  |  119 lines

  1. UNIT global; {$project vt}
  2. { globale Variablen und Typdeklarationen zum Programm VideoText }
  3.  
  4. INTERFACE;
  5.  
  6. CONST qlen = 800;      { Warteschlange für Seitennummern }
  7.       maxactive = 4;   { Anzahl gleichzeitig suchbarer Seiten im SAA 5246 }
  8.       maxsubpage = 79; { sinnvolle Grenze wegen der BCD-Maske $3F7F }
  9.  
  10. TYPE p_onepage = ^onepage;
  11.      onepage = RECORD
  12.                  next,prev: p_onepage;
  13.                  pg,sp: Integer;
  14.                  chars: ARRAY [0..959] OF Byte;
  15.                  cbits: Word;
  16.                  dejavu: Boolean;
  17.                END;
  18.      str80 = String[80];
  19.      bigstring = String[256];
  20.      zeiteintrag = RECORD tage,min,tics: Long; END;
  21.  
  22. VAR queue: ARRAY [1..qlen] OF RECORD
  23.              pg,sp: Integer;
  24.            END;
  25.     queued,firstinq: Integer;
  26.     fifo: Boolean;
  27.     activejobs: ARRAY [0..maxactive-1] OF RECORD
  28.         pg,sp: Integer;          { dies sind Hexzahlen }
  29.         sp_max,akt_sp: Integer;  { (normalerweise BCD) }
  30.         sp_count: Integer;  { dies eine echte Dezimalzahl }
  31.         sp_check: ARRAY [0..maxsubpage] OF Boolean;
  32.         lastaction: zeiteintrag;     { so 'ne Art DateStamp }
  33.         wartezeit: Integer;      { in 50stel Sekunden }
  34.         holen,erledigt: Boolean;
  35.       END;
  36.     thisjob: Integer; { zeigt auf einen wartenden (<0) oder aktiven Job (>=0) }
  37.     outputname,iffpicname: str80;
  38.     asciifile,overwrite,withicon,numbering: Boolean;
  39.     lastkey: Char;
  40.  
  41. FUNCTION hexstr(l: Long; digits: Integer): Str;
  42. FUNCTION hexval(s: Str80): Long;
  43. FUNCTION get_bcd(x: Word): Word;
  44. FUNCTION make_bcd(x: Word): Word;
  45.  
  46. { ---------------------------------------------------------------------- }
  47.  
  48. IMPLEMENTATION;
  49.  
  50. {$ opt q,s+,i+} { keine Laufzeitprüfungen außer Stack und Feldindizes }
  51.  
  52. FUNCTION hexstr{(l: Long; digits: Integer): Str};
  53. { Zahl mit mindestens <digits> Stellen nach Hex wandeln: }
  54. VAR i,j,x: Integer;
  55.     s: String[10]; STATIC; { Wichtig! }
  56. BEGIN
  57.   IF digits<1 THEN digits := 1;
  58.   j := 1;
  59.   FOR i := 7 DOWNTO 0 DO
  60.     IF (i<digits) OR (l SHR (4*i)>0) THEN BEGIN
  61.       x := (l SHR (4*i)) AND $F;
  62.       IF x<10 THEN s[j] := Chr(x+ord('0'))
  63.       ELSE s[j] := Chr(x-10+ord('A'));
  64.       Inc(j);
  65.     END;
  66.   s[j] := #0;
  67.   hexstr := ^s;
  68. END;
  69.  
  70. FUNCTION hexval{(s: Str80): Long};
  71. { kann Hexzahlen dekodieren, evtl. "$" wird überlesen }
  72. VAR i: Integer;
  73.     x: Long;
  74. BEGIN
  75.   i := 1; x := 0;
  76.   WHILE s[i]=' ' DO Inc(i);
  77.   IF s[i]='$' THEN Inc(i);
  78.   WHILE s[i] IN ['0'..'9','A'..'F','a'..'f'] DO BEGIN
  79.     x := x SHL 4 + ord(s[i]);
  80.     CASE s[i] OF
  81.       '0'..'9': x := x - ord('0');
  82.       'A'..'F': x := x - ord('A') + 10;
  83.       'a'..'f': x := x - ord('a') + 10;
  84.     END;
  85.     Inc(i);
  86.   END;
  87.   hexval := x;
  88. END;
  89.  
  90. FUNCTION get_bcd{(x: Word): Word};
  91. { "Binary Coded Decimal" auswerten, z. B. $3465 ergibt 3465. }
  92. VAR i,y: Word;
  93. BEGIN
  94.   y := 0;
  95.   FOR i := 3 DOWNTO 0 DO
  96.     y := 10*y + (x SHR (4*i)) AND $F;
  97.   get_bcd := y;
  98. END;
  99.  
  100. FUNCTION make_bcd{(x: Word): Word};
  101. { BCD erzeugen, geht bis max. 9999 => $9999 }
  102. VAR i,y,q: Word;
  103. BEGIN
  104.   y := 0; q := 1000;
  105.   FOR i := 3 DOWNTO 0 DO BEGIN
  106.     y := y SHL 4 + (x DIV q) MOD 10;
  107.     q := q DIV 10;
  108.   END;
  109.   make_bcd := y;
  110. END;
  111.  
  112. BEGIN  { Initialisierungen }
  113.   thisjob := 0;
  114.   asciifile := True; overwrite := True; numbering := False;
  115.   outputname := 'RAM:VTdatei';
  116.   withicon := FromWB;
  117.   queued := 0; firstinq := 1; fifo := True;
  118. END.
  119.