home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / printer / swaplpt.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1993-04-19  |  3.5 KB  |  102 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
  2. {$M $1000,0,0}
  3.  
  4. (*===================================================================*)
  5. (*                           SWAPLPT.PAS                             *)
  6. (*-------------------------------------------------------------------*)
  7. (*   Das Programm tauscht die Portadressen zweier auf der Kommando-  *)
  8. (*   zeile anzugebender paralleler Schnittstellen miteinander aus.   *)
  9. (*   Druckausgaben auf die Treiber können damit umgeleitet werden.   *)
  10. (*===================================================================*)
  11.  
  12. PROGRAM SwapParallelPorts;
  13.  
  14. VAR
  15.   Lpt   : ARRAY[1..4] OF WORD;
  16.   s1, s2: STRING;
  17.   c1, c2,
  18.   test  : INTEGER;
  19.  
  20. PROCEDURE Error(i: INTEGER);
  21. BEGIN
  22.   WriteLn;
  23.   CASE i OF
  24.     0: WriteLn('Falscher oder fehlender Kommandozeilen-Parameter'#13#10
  25.             +  'Aufruf  : SwapLPT <LPT>x <LPT>y'#13#10 +
  26.                'Beispiel: SwapLPT 1 2');
  27.     1: WriteLn('Falscher Kommandozeilenparameter:', ParamStr(1));
  28.     2: WriteLn('Falscher Kommandozeilenparameter:', ParamStr(2));
  29.     3: WriteLn('Falsche Schnittstelle (erlaubt: 1 bis 4)');
  30.     4: WriteLn('Es müssen zwei verschiedene Schnittstellen ' +
  31.               'angegeben werden');
  32.   END;
  33.   Halt;
  34. END;
  35.  
  36. FUNCTION Word2Hex(w: WORD): STRING;
  37. { Anstelle dieser Routine können Sie auch die Unit Hex aus dem DOS-   }
  38. { Kapitel einbinden.                                                  }
  39. CONST
  40.   h: ARRAY[0..15] OF CHAR = '0123456789ABCDEF';
  41. BEGIN
  42.   Word2Hex[0] := #4;
  43.   Word2Hex[1] := h[Hi(w) DIV $10];
  44.   Word2Hex[2] := h[Hi(w) MOD $10];
  45.   Word2Hex[3] := h[Lo(w) DIV $10];
  46.   Word2Hex[4] := h[lo(w) MOD $10];
  47. END;
  48.  
  49. PROCEDURE Swap(VAR Var1, Var2: WORD);
  50. VAR
  51.   Temp: WORD;
  52. BEGIN
  53.   Temp := Var1;
  54.   Var1 := Var2;
  55.   Var2 := Temp;
  56. END;
  57.  
  58. BEGIN
  59.   Write(#13#10'SwapLpt Version 1.0');
  60.   Lpt[1] := WORD(Ptr(Seg0040, $0008)^);                          { LPT1 }
  61.   Lpt[2] := WORD(Ptr(Seg0040, $000A)^);                          { LPT2 }
  62.   Lpt[3] := WORD(Ptr(Seg0040, $000C)^);                          { LPT3 }
  63.   Lpt[4] := WORD(Ptr(Seg0040, $000E)^);                          { LPT4 }
  64.   IF ParamCount <> 2 THEN Error(0);
  65.   s1 := ParamStr(1);
  66.   s2 := ParamStr(2);
  67.   Val(s1, c1, test); IF test <> 0 THEN Error(1);
  68.   Val(s2, c2, test); IF test <> 0 THEN Error(2);
  69.   c1 := Abs(c1);
  70.   c2 := Abs(c2);
  71.   IF NOT (c1 IN [1..4]) THEN Error(3);
  72.   IF NOT (c2 IN [1..4]) THEN Error(3);
  73.   IF c1 = c2 THEN Error(4);
  74.   WriteLn(': LPT', c1, ' und LPT', c2, ' vertauscht.'#10);
  75.   WriteLn('Alte Werte der parallelen Schnittstellen:');
  76.   WriteLn(^I'LPT1: ', Word2Hex(MemW[Seg0040:$0008]), 'h');
  77.   WriteLn(^I'LPT2: ', Word2Hex(MemW[Seg0040:$000A]), 'h');
  78.   WriteLn(^I'LPT3: ', Word2Hex(MemW[Seg0040:$000C]), 'h');
  79.   WriteLn(^I'LPT4: ', Word2Hex(MemW[Seg0040:$000E]), 'h'#10);
  80.   Swap(Lpt[c1], Lpt[c2]);
  81.   CASE c1 OF
  82.     1: MemW[Seg0040:$0008] := Lpt[c1];
  83.     2: MemW[Seg0040:$000A] := Lpt[c1];
  84.     3: MemW[Seg0040:$000C] := Lpt[c1];
  85.     4: MemW[Seg0040:$000E] := Lpt[c1];
  86.   END;
  87.   CASE c2 OF
  88.     1: MemW[Seg0040:$0008] := Lpt[c2];
  89.     2: MemW[Seg0040:$000A] := Lpt[c2];
  90.     3: MemW[Seg0040:$000C] := Lpt[c2];
  91.     4: MemW[Seg0040:$000E] := Lpt[c2];
  92.   END;
  93.   WriteLn('Aktuelle Portadressen nach dem Austausch:');
  94.   WriteLn(^I'LPT1: ', Word2Hex(MemW[Seg0040:$0008]), 'h');
  95.   WriteLn(^I'LPT2: ', Word2Hex(MemW[Seg0040:$000A]), 'h');
  96.   WriteLn(^I'LPT3: ', Word2Hex(MemW[Seg0040:$000C]), 'h');
  97.   WriteLn(^I'LPT4: ', Word2Hex(MemW[Seg0040:$000E]), 'h');
  98.  
  99. END.
  100.  
  101. (*===================================================================*)
  102.