home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
- {$M $1000,0,0}
-
- (*===================================================================*)
- (* SWAPLPT.PAS *)
- (*-------------------------------------------------------------------*)
- (* Das Programm tauscht die Portadressen zweier auf der Kommando- *)
- (* zeile anzugebender paralleler Schnittstellen miteinander aus. *)
- (* Druckausgaben auf die Treiber können damit umgeleitet werden. *)
- (*===================================================================*)
-
- PROGRAM SwapParallelPorts;
-
- VAR
- Lpt : ARRAY[1..4] OF WORD;
- s1, s2: STRING;
- c1, c2,
- test : INTEGER;
-
- PROCEDURE Error(i: INTEGER);
- BEGIN
- WriteLn;
- CASE i OF
- 0: WriteLn('Falscher oder fehlender Kommandozeilen-Parameter'#13#10
- + 'Aufruf : SwapLPT <LPT>x <LPT>y'#13#10 +
- 'Beispiel: SwapLPT 1 2');
- 1: WriteLn('Falscher Kommandozeilenparameter:', ParamStr(1));
- 2: WriteLn('Falscher Kommandozeilenparameter:', ParamStr(2));
- 3: WriteLn('Falsche Schnittstelle (erlaubt: 1 bis 4)');
- 4: WriteLn('Es müssen zwei verschiedene Schnittstellen ' +
- 'angegeben werden');
- END;
- Halt;
- END;
-
- FUNCTION Word2Hex(w: WORD): STRING;
- { Anstelle dieser Routine können Sie auch die Unit Hex aus dem DOS- }
- { Kapitel einbinden. }
- CONST
- h: ARRAY[0..15] OF CHAR = '0123456789ABCDEF';
- BEGIN
- Word2Hex[0] := #4;
- Word2Hex[1] := h[Hi(w) DIV $10];
- Word2Hex[2] := h[Hi(w) MOD $10];
- Word2Hex[3] := h[Lo(w) DIV $10];
- Word2Hex[4] := h[lo(w) MOD $10];
- END;
-
- PROCEDURE Swap(VAR Var1, Var2: WORD);
- VAR
- Temp: WORD;
- BEGIN
- Temp := Var1;
- Var1 := Var2;
- Var2 := Temp;
- END;
-
- BEGIN
- Write(#13#10'SwapLpt Version 1.0');
- Lpt[1] := WORD(Ptr(Seg0040, $0008)^); { LPT1 }
- Lpt[2] := WORD(Ptr(Seg0040, $000A)^); { LPT2 }
- Lpt[3] := WORD(Ptr(Seg0040, $000C)^); { LPT3 }
- Lpt[4] := WORD(Ptr(Seg0040, $000E)^); { LPT4 }
- IF ParamCount <> 2 THEN Error(0);
- s1 := ParamStr(1);
- s2 := ParamStr(2);
- Val(s1, c1, test); IF test <> 0 THEN Error(1);
- Val(s2, c2, test); IF test <> 0 THEN Error(2);
- c1 := Abs(c1);
- c2 := Abs(c2);
- IF NOT (c1 IN [1..4]) THEN Error(3);
- IF NOT (c2 IN [1..4]) THEN Error(3);
- IF c1 = c2 THEN Error(4);
- WriteLn(': LPT', c1, ' und LPT', c2, ' vertauscht.'#10);
- WriteLn('Alte Werte der parallelen Schnittstellen:');
- WriteLn(^I'LPT1: ', Word2Hex(MemW[Seg0040:$0008]), 'h');
- WriteLn(^I'LPT2: ', Word2Hex(MemW[Seg0040:$000A]), 'h');
- WriteLn(^I'LPT3: ', Word2Hex(MemW[Seg0040:$000C]), 'h');
- WriteLn(^I'LPT4: ', Word2Hex(MemW[Seg0040:$000E]), 'h'#10);
- Swap(Lpt[c1], Lpt[c2]);
- CASE c1 OF
- 1: MemW[Seg0040:$0008] := Lpt[c1];
- 2: MemW[Seg0040:$000A] := Lpt[c1];
- 3: MemW[Seg0040:$000C] := Lpt[c1];
- 4: MemW[Seg0040:$000E] := Lpt[c1];
- END;
- CASE c2 OF
- 1: MemW[Seg0040:$0008] := Lpt[c2];
- 2: MemW[Seg0040:$000A] := Lpt[c2];
- 3: MemW[Seg0040:$000C] := Lpt[c2];
- 4: MemW[Seg0040:$000E] := Lpt[c2];
- END;
- WriteLn('Aktuelle Portadressen nach dem Austausch:');
- WriteLn(^I'LPT1: ', Word2Hex(MemW[Seg0040:$0008]), 'h');
- WriteLn(^I'LPT2: ', Word2Hex(MemW[Seg0040:$000A]), 'h');
- WriteLn(^I'LPT3: ', Word2Hex(MemW[Seg0040:$000C]), 'h');
- WriteLn(^I'LPT4: ', Word2Hex(MemW[Seg0040:$000E]), 'h');
-
- END.
-
- (*===================================================================*)
-