home *** CD-ROM | disk | FTP | other *** search
- { MAXONPascal3-Anpassung / Test: Falk Zühlsdorff (PackMAN) 1994 }
-
- Program ConsoleToolDemo;
-
- Const
- Length = 80;
-
- Type
- String80 = String[80];
-
- Var
- Win: Ptr;
- Con: Ptr;
- St: String[80];
- z: Long;
-
- Procedure WriteConInt(Con: ptr; { Devicehandle }
- i: Long; { Zahl, die ausgegeben werden soll }
- b: integer; { Basis }
- f: integer); { Mindest-Feldbreite }
- Var
- s: String[40];
- j,k,z,len: integer;
- i2: Long;
- Begin
- j:=40;
- s[40]:=chr(0); { Nullbyte am Ende }
- i2:=abs(i);
- Repeat
- j:= j-1;
- z:= i2 mod b; { letzte Ziffer von i2 }
- If z<10 Then
- s[j]:=chr(z+ord('0')) { Ziffern 0 bis 10 }
- Else
- s[j]:=chr(z-10+ord('A')); { Hexziffern A bis F }
- i2:= i2 Div b;
- Until i2=0;
- If b=16 Then
- Begin
- j:=j-1;
- s[j]:='$' { Hexzahlen automatisch mit "$" }
- End;
- If b=2 Then
- Begin
- j:=j-1;
- s[j]:='%' { Binärzahlen mit "%" }
- End;
- If i<0 Then
- Begin
- j:=j-1;
- s[j]:='-' { Minuszeichen bei neg. Zahlen }
- End;
- len:=40-j; { Gesamtlänge der Zahl }
- For k:=1 to f-len Do
- WriteCon(Con, ' '); { Am Anfang mit Spaces auffüllen }
- WriteCon(Con, Str(^s[j])) { String ab j-tem Zeichen ausgeben }
- End;
-
- Procedure ReadConString(Con:Ptr; Var s: String80);
- Const
- Backspace = chr(8);
- Return = chr(13);
- Var
- ch: Char;
- i: integer;
- Sig: Long;
- Begin
- i:=1;
- Repeat
- Sig:=Wait(-1);
- ch:=ReadCon(Con);
- If ( (ch >= chr(32)) and (ch < chr(127)) ) or (ch>=chr(160)) Then
- Begin
- WriteCon(Con,ch);
- s[i]:=ch;
- i:=i+1
- End;
- If (ch=BackSpace) and (i>1) Then
- Begin
- WriteCon(Con,''\8' '\8); { Ein Zeichen zurück, mit Space
- überschreiben und wieder zurück }
- i:=i-1
- End;
- Until (ch=Return) or (i>=79);
- s[i]:=chr(0); { mit Space abschließen }
- End;
-
- Function Convert(s: String80): Long;
- Var
- i:Long;
- j, b, z, sign: integer;
- Begin
- i:= 0;
- b:= 10; { Basis }
- j:= 1; { Stringanfang }
- While s[j]=' ' Do
- j:=j+1; { führende Spaces überlesen }
- If s[j]='-' Then
- Begin { negatives Vorzeichen }
- sign:= -1;
- j:=j+1
- End
- Else
- Begin
- sign:= 1;
- If s[j]='+' Then j:=j+1 { Pluszeichen überlesen }
- End;
- If s[j] = '$' Then { Hexzahl }
- Begin
- b:=16; j:=j+1
- End;
- If s[j] = '%' Then { Binärzahl }
- Begin
- b:=2; j:=j+1
- End;
- Repeat
- If (s[j] >= '0') and (s[j] <= '9') Then
- z := ord(s[j]) - ord('0')
- Else
- If (s[j] >= 'a') and (s[j] <= 'z') Then
- z := ord(s[j]) - ord('a') + 10
- Else
- If (s[j] >= 'A') and (s[j] <= 'Z') Then
- z := ord(s[j]) - ord('A') + 10
- Else
- z:= -1; { ungültige Ziffer }
- If z >= b Then
- z:= -1; { zu groß für Basis }
- If z >= 0 Then
- i:= b*i + z;
- j:= j+1
- Until z<0;
- Convert:= sign*i
- End;
-
-
- Begin
- Win := Open_Window(0,0,640,200,1,0,$1006,'Test',Nil,640,200,640,200);
- Con := OpenConsole(Win);
- Repeat
- WriteCon(Con, 'Eingabe: ');
- ReadConString(Con, St);
- If St <> '' Then
- Begin
- z:=Convert(St);
- WriteCon(Con,''\n\n); { eine Leerzeile }
- WriteConInt(Con, z, 10, 12); { dezimal, rechtsbündig }
- WriteConInt(Con, z, 16, 12);
- WriteCon(Con,' ');
- WriteConInt(Con, z, 2, 1); { binär und linksbündig }
- WriteCon(Con, ''\n\n)
- End
- Until St=''; { bei Leerzeile beenden }
- CloseConsole(Con);
- Close_Window(Win)
- End.
-