home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 12 / einsteig / txlink.bas < prev    next >
Encoding:
BASIC Source File  |  1990-09-11  |  11.5 KB  |  393 lines

  1. '* ------------------------------------------------------- *
  2. '*                    TXLINK.BAS                           *
  3. '*     Programm zum Übertragen von Dateien zwischen zwei   *
  4. '*              Rechnern über das Nullmodem                *
  5. '*             (C) 1990  Kay Glahn & TOOLBOX               *
  6. '* ------------------------------------------------------- *
  7. CLS : COLOR 15, 1
  8.  
  9. ON ERROR GOTO SonstFehler
  10.  
  11. Port$  = "1"
  12. Speed$ = "9600"
  13.  
  14. Anfang:
  15. DO
  16.   Maske1
  17.   LOCATE 2, 34: PRINT " TOOLBOX-LINK "
  18.   T$ = " TOOLBOX-LINK Version 1.0   (C)"
  19.   T$ = T$ + " 1990 Kay Glahn & TOOLBOX"
  20.   TextOut(T$)
  21.   LOCATE 6, 10
  22.   PRINT "Drücken Sie eine beliebiege Taste,";
  23.   PRINT " um die Verbindung zum"
  24.   LOCATE 7, 10
  25.   PRINT "Gegenrechner mit folgenden Parametern";
  26.   PRINT " herzustellen : "
  27.   LOCATE 9, 10
  28.   PRINT "Nummer der Schnittstelle : "; Port$
  29.   LOCATE 11, 10
  30.   PRINT "Übertragungsgeschwindigkeit : "; Speed$; " Baud"
  31.   LOCATE 13, 10
  32.   PRINT "Betätigen Sie die <BackStep> Taste um die";
  33.   PRINT " Übertragungsparameter"
  34.   LOCATE 14, 10
  35.   PRINT "zu ändern oder <ESC> für Ende."
  36.   DO
  37.     A$ = INKEY$
  38.   LOOP WHILE A$ = ""
  39.   IF A$ = CHR$(8) THEN
  40.     CLS
  41.     Maske1
  42.     LOCATE 2, 33: PRINT "Parameter ändern"
  43.     CALL Parameter(Port$, Speed$)
  44.     CLS
  45.   END IF
  46. LOOP WHILE A$ = CHR$(8)
  47.  
  48. IF A$ = CHR$(27) THEN COLOR 7, 0: CLS : END
  49.  
  50. Init:
  51. Param$ = Port$ + ":" + Speed$
  52. ON ERROR GOTO VerbFehler
  53. OPEN "COM" + Param$ + ", N, 8, 1, rs, BIN" FOR RANDOM AS #1
  54. ON ERROR GOTO SonstFehler
  55.  
  56. Hauptmenue:
  57. DO
  58.   Maske1
  59.   LOCATE  2, 34: PRINT "  Hauptmenü  "
  60.   LOCATE  6, 10: PRINT "1. Datei empfangen"
  61.   LOCATE  8, 10: PRINT "2. Datei senden"
  62.   LOCATE 10, 10: PRINT "3. Sendung/Empfang"
  63.   LOCATE 12, 10: PRINT "4. Parameter ändern"
  64.   LOCATE 14, 10: PRINT "5. Programm beenden"
  65.   T$ = "  Geben Sie die gewünschte Zahl ein "
  66.   TextOut (T$)
  67.   DO
  68.     LOCATE 18, 10: INPUT ; "Gewünschte Zahl : ", A$
  69.     A = VAL(A$)
  70.   LOOP WHILE A > 5 OR A < 1
  71.   SELECT CASE A
  72.     CASE 1
  73.       Maske1
  74.       LOCATE 2, 33
  75.       PRINT "Datei empfangen"
  76.       T$ = "Geben Sie den Zielpfad der zu empfangenden "
  77.       T$ = T$ + "Datei ein !"
  78.       TextOut(T$)
  79.       DO
  80.         LOCATE 6, 10
  81.         INPUT; "Zielpfad : ", Pfad$
  82.       LOOP WHILE Pfad$ = ""
  83.       LOCATE 6, 10: PRINT STRING$(40, " ")
  84.       T$ = " Datei wird empfangen. Bitte warten ! "
  85.       T$ = T$ + " Abbruch mit <ESC>"
  86.       TextOut(T$)
  87.       Empfangen(Pfad$)
  88.    CASE 2
  89.       Maske1
  90.       LOCATE 2, 33
  91.       PRINT "  Datei senden  "
  92.       T$ = "Geben Sie den Ursprungspfad der zu sendenden "
  93.       T$ = T$ + "Datei ein !"
  94.       TextOut(T$)
  95.       DO
  96.         LOCATE 6, 10
  97.         INPUT ; "Ursprungspfad : ", Pfad$
  98.       LOOP WHILE Pfad$ = ""
  99.       T$ = " Geben Sie den Namen der zu sendenden Datei "
  100.       T$ = T$ + "ein !"
  101.       TextOut(T$)
  102.       DO
  103.         LOCATE 8, 10
  104.         INPUT ; "Dateiname : ", DatName$
  105.       LOOP WHILE DatName$ = ""
  106.       LOCATE 6, 10: PRINT STRING$(40, " ")
  107.       LOCATE 8, 10: PRINT STRING$(40, " ")
  108.       T$ = " Datei wird gesendet. Bitte warten ! "
  109.       T$ = T$ + " Abbruch mit <ESC> "
  110.       TextOut(T$)
  111.       CALL Senden(Pfad$, DatName$)
  112.     CASE 3
  113.       HandShake
  114.     CASE 4
  115. Param:
  116.       P = 1
  117.       Maske1
  118.       LOCATE 2, 33: PRINT "Parameter ändern"
  119.       CALL Parameter(Port$, Speed$)
  120.       GOTO Init
  121.     CASE 5
  122.       Ende = 1
  123.   END SELECT
  124. LOOP WHILE Ende = 0
  125.  
  126. CLOSE : COLOR 7, 0
  127. CLS : END
  128.  
  129. DiskFehler:
  130.   BEEP
  131.   T$ = " Ihre Eingabe des Pfades oder des Dateinamen waren "
  132.   T$ = T$ + "nicht korrekt !"
  133.   TextOut (T$)
  134.   SLEEP 5
  135.   RESUME Hauptmenue
  136.  
  137. VerbFehler:
  138.   BEEP
  139.   T$ = " Verbindung kann nicht hergestellt werden Parameter"
  140.   T$ = T$ + " und Kabel überprüfen !"
  141.   TextOut (T$)
  142.   SLEEP 5
  143.   IF P = 1 THEN
  144.     RESUME Param
  145.   ELSE
  146.     RESUME Anfang
  147.   END IF
  148.  
  149. SonstFehler:
  150.   BEEP
  151.   T$ = " Genereller Fehler aufgetreten !"
  152.   TextOut (T$)
  153.   SLEEP 5
  154.   RESUME
  155.  
  156. '* ------------------------------------------------------- *
  157. '*      Datei von der seriellen Schnittstelle empfangen    *
  158. SUB Empfangen (Pfad$)
  159.   DIM Zeich AS STRING * 1
  160.   INPUT #1, DatName$                 '* Dateinamen empfangen
  161.   ON ERROR GOTO DiskFehler
  162.   OPEN Pfad$ + "\" + DatName$ FOR BINARY AS #2
  163.   ON ERROR GOTO SonstFehler
  164.   WHILE LOC(1) < 1: WEND             '* auf Zeichen warten
  165.   Zeich = INPUT$(1, 1)               '* Zeichen empfangen
  166.   INPUT #1, LAENGE                   '* Dateilänge empfangen
  167.   LOCATE 6, 10
  168.   PRINT "Dateiname : "; DatName$
  169.   LOCATE 8, 10
  170.   PRINT "Dateilänge : "; LAENGE; " Byte(s)"
  171.   FOR I = 1 TO LAENGE
  172.     LOCATE 10, 10
  173.     PRINT "Bereits empfangen : "; I; " Byte(s)"
  174.     WHILE LOC(1) < 1 AND INKEY$ <> CHR$(27): WEND
  175.     A$ = INKEY$
  176.     IF A$ = CHR$(27) THEN EXIT FOR
  177.     Zeich = INPUT$(1, 1)             '* Zeichen empfangen
  178.     PUT #2, I, Zeich'in Datei schreiben
  179.     PRINT #1, Zeich;                 '* Zeichen zurücksenden
  180.   NEXT I
  181.   CLOSE 2                            '* Datei schließen
  182. END SUB
  183.  
  184. '* ------------------------------------------------------- *
  185. '*           Direktkommunikation mit Nachbarrechner        *
  186. SUB HandShake
  187.   Maske2
  188.   S1 = 3: Z1 = 5: S2 = 44: Z2 = 5
  189.                                '* Zeile und Spalte festlegen
  190.   T$ = "  Drücken Sie [ESC] um ins Hauptmenü "
  191.   T$ = T$ + "zurückzukehren "
  192.   TextOut(T$)
  193.   DO
  194.     A$ = INKEY$
  195.     IF A$ <> "" AND A$ <> CHR$(27) AND A$ <> CHR$(8) THEN
  196.       CALL Hsenden(A$, S1, S2, Z1, Z2)
  197.     END IF
  198.     IF EOF(1) = 0 THEN
  199.       CALL Hempfangen(S1, S2, Z1, Z2)
  200.     END IF
  201.   LOOP WHILE A$ <> CHR$(27)
  202. END SUB
  203.  
  204. SUB Hempfangen (S1, S2, Z1, Z2)
  205.   B$ = INPUT$(1, 1)                  '* Zeichen empfangen
  206.   LOCATE Z2, S2
  207.   S2 = S2 + 1
  208.   IF Z2 = 22 AND (S2 = 80 OR B$ = CHR$(13)) THEN
  209.              '* Fenster löschen, wenn unterste Ecke erreicht
  210.     FOR I = 4 TO 23
  211.       LOCATE I, 44: PRINT SPACE$(35)
  212.              '* Zeilen im Fenster löschen
  213.     NEXT I
  214.     LOCATE 4, 44: Z2 = 4
  215.   END IF
  216.   IF S2 = 80 THEN
  217.     PRINT CHR$(13); : LOCATE , 44: S2 = 45: Z2 = Z2 + 1
  218.   END IF
  219.                               '* Return bei Zeilenende
  220.   IF S2 = 45 AND B$ = CHR$(13) THEN Z2 = Z2 - 1
  221.   PRINT B$;                   '* Zeichen im Fenster ausgeben
  222.   IF B$ = CHR$(13) THEN LOCATE , 44: S2 = 44: Z2 = Z2 + 1
  223.                               '* Nächste Zeile bei Return
  224. END SUB
  225.  
  226. SUB Hsenden (A$, S1, S2, Z1, Z2)
  227.   LOCATE Z1, S1
  228.   S1 = S1 + 1
  229.   IF Z1 = 22 AND (S1 = 39 OR A$ = CHR$(13)) THEN
  230.              '* Fenster löschen, wenn unterste Ecke erreicht
  231.     FOR I = 4 TO 23
  232.       LOCATE I, 3: PRINT SPACE$(35)
  233.                               '* Zeilen im Fenster löschen
  234.     NEXT I
  235.     LOCATE 4, 3: Z1 = 4
  236.   END IF
  237.   IF S1 = 39 THEN
  238.     PRINT CHR$(13); : LOCATE , 3: S1 = 4: Z1 = Z1 + 1
  239.   END IF
  240.                               '* Return bei Zeilenende
  241.   IF S1 = 4 AND A$ = CHR$(13) THEN Z1 = Z1 - 1
  242.   PRINT A$;                   '* Zeichen im Fenster ausgeben
  243.   IF A$ = CHR$(13) THEN LOCATE , 3: Z1 = Z1 + 1: S1 = 3
  244.   'Nächste Zeile bei Return
  245.   PRINT #1, A$;               '* Zeichen senden
  246. END SUB
  247.  
  248. '* ------------------------------------------------------- *
  249. '*             Ausgabe der ersten Bildschirmmaske          *
  250. SUB Maske1
  251.   CLS                         '* Bildschirm löschen
  252.   LOCATE 1, 32
  253.   PRINT CHR$(218); STRING$(16, 196); CHR$(191)
  254.   LOCATE 2, 1
  255.   PRINT CHR$(201); STRING$(30, 205);
  256.   PRINT CHR$(181); SPC(16); CHR$(198);
  257.   PRINT STRING$(30, 205); CHR$(187);
  258.   LOCATE 3, 1
  259.   PRINT CHR$(186); SPC(30); CHR$(192);
  260.   PRINT STRING$(16, 196); CHR$(217);
  261.   PRINT SPC(30); CHR$(186);
  262.   FOR I = 1 TO 20
  263.     PRINT CHR$(186); SPC(78); CHR$(186);
  264.   NEXT I
  265.   PRINT CHR$(200); STRING$(78, 205); CHR$(188);
  266. END SUB
  267.  
  268. '* ------------------------------------------------------- *
  269. '*          Ausgabe der zweiten Bildschirmmaske            *
  270. SUB Maske2
  271.   CLS
  272.   LOCATE 1, 15
  273.   PRINT CHR$(218); STRING$(9, 196); CHR$(191)
  274.   LOCATE 2, 1
  275.   PRINT CHR$(201); STRING$(13, 205); CHR$(181);
  276.   PRINT " Sendung "; CHR$(198);
  277.   PRINT STRING$(13, 205); CHR$(187);
  278.   LOCATE 3, 1
  279.   PRINT CHR$(186); SPC(13); CHR$(192);
  280.   PRINT STRING$(9, 196); CHR$(217); SPC(13);
  281.   PRINT CHR$(186)
  282.   LOCATE 1, 56
  283.   PRINT CHR$(218); STRING$(9, 196); CHR$(191)
  284.   LOCATE 2, 42
  285.   PRINT CHR$(201); STRING$(13, 205); CHR$(181);
  286.   PRINT " Empfang "; CHR$(198);
  287.   PRINT STRING$(13, 205); CHR$(187);
  288.   LOCATE 3, 42
  289.   PRINT CHR$(186); SPC(13); CHR$(192);
  290.   PRINT STRING$(9, 196); CHR$(217); SPC(13);
  291.   PRINT CHR$(186)
  292.   FOR I = 4 TO 23: LOCATE I, 1
  293.     PRINT CHR$(186); SPC(37); CHR$(186); SPC(2);
  294.     PRINT CHR$(186); SPC(37); CHR$(186);
  295.   NEXT I
  296.   PRINT CHR$(200); STRING$(37, 205); CHR$(188);
  297.   PRINT SPC(2); CHR$(200); STRING$(37, 205);
  298.   PRINT CHR$(188);
  299.   LOCATE 25, 1: COLOR 0, 7
  300.   PRINT STRING$(80, " ");
  301.   COLOR 7, 0
  302. END SUB
  303.  
  304. '* ------------------------------------------------------- *
  305. '*        Einstellen der Schnittstellenparameter           *
  306. SUB Parameter (Port$, Speed$)
  307.   CLOSE #1
  308.   DO
  309.     DO
  310.       LOCATE 6, 8
  311.       PRINT "1. Nummer der Schnittstelle : "; Port$; "   "
  312.       LOCATE 8, 8
  313.       PRINT "2. Übertragungsgeschwindigkeit : ";
  314.       PRINT Speed$; "   "
  315.       LOCATE 10, 8
  316.       PRINT "3. Zurück ";
  317.       T$ = "  Geben Sie die Zahl des zu ändernden "
  318.       T$ = T$ + "Parameters oder 3 für Zurück ein !"
  319.       TextOut (T$)
  320.       LOCATE 20, 8: PRINT STRING$(40, " ")
  321.       LOCATE 20, 8: INPUT ; "Gewünschte Zahl : ", Zahl$
  322.       Zahl = VAL(Zahl$)
  323.     LOOP WHILE Zahl > 3 OR Zahl < 1
  324.     SELECT CASE Zahl
  325.       CASE 1
  326.         T$ = " Geben Sie die Nummer der seriellen "
  327.         T$ = T$ + "Schnittstelle ein !"
  328.         TextOut (T$)
  329.         DO
  330.           LOCATE 20, 8: PRINT STRING$(40, " ")
  331.           LOCATE 20, 8
  332.           INPUT ; "Nummer der Schnittstelle : ", Port$
  333.         LOOP WHILE Port$ = ""
  334.       CASE 2
  335.         T$ = " Geben Sie 75, 110, 150, 300, 600, 1200, "
  336.         T$ = T$ + "1800, 2400, 4800 oder 9600 ein !"
  337.         TextOut (T$)
  338.         DO
  339.           LOCATE 20, 8: PRINT STRING$(40, " ")
  340.           LOCATE 20, 8
  341.           INPUT ; "Übertragungsgeschwindigkeit : ", Speed$
  342.         LOOP WHILE Speed$ = ""
  343.       CASE 3
  344.         Ende = 1
  345.     END SELECT
  346.   LOOP WHILE Ende = 0
  347. END SUB
  348.  
  349. '* ------------------------------------------------------- *
  350. '*    Senden einer Datei über die serielle Schnittstelle   *
  351. SUB Senden (Pfad$, DatName$)
  352.   DIM Zeich AS STRING * 1
  353.   PRINT #1, DatName$    'Dateinamen senden
  354.   ON ERROR GOTO DiskFehler
  355.   OPEN Pfad$ + "\" + DatName$ FOR BINARY AS #2
  356.   ON ERROR GOTO SonstFehler
  357.   LOCATE 6, 10
  358.   PRINT "Dateiname  : "; DatName$
  359.   LOCATE 8, 10
  360.   PRINT "Dateilänge : "; LOF(2); " Byte(s)"
  361.   PRINT #1, LOF(2)                   '* Dateilänge senden
  362.   FOR I = 1 TO LOF(2)
  363.     LOCATE 10, 10
  364.     PRINT "Bereits gesendet : "; I; " Byte(s)"
  365.     GET #2, I, Zeich                 '* aus Datei lesen
  366.     PRINT #1, Zeich;                 '* Zeichen senden
  367.     WHILE LOC(1) < 1 AND INKEY$ <> CHR$(27): WEND
  368.     A$ = INKEY$
  369.     IF A$ = CHR$(27) THEN EXIT FOR
  370.     Z$ = INPUT$(1, 1)                '* Zeichen empfangen
  371.     IF Zeich <> Z$ THEN              '* Zeichen vergleichen
  372.       T$ = " Fehler beim Übertragen. Beliebige Taste "
  373.       T$ = T$ + "drücken."
  374.       TextOut (T$)
  375.       BEEP
  376.       WHILE INKEY$ = "": WEND: EXIT SUB
  377.     END IF
  378.   NEXT I
  379.   CLOSE #2
  380. END SUB
  381.  
  382. '* ------------------------------------------------------- *
  383. '*    Ausgabe eines Hinweises in der 25. Bildschirmzeile   *
  384. SUB TextOut (Text$)
  385.   LOCATE 25, 1: COLOR 15, 4
  386.   PRINT STRING$(80, " ");
  387.   LOCATE 25, 1: PRINT Text$;
  388.   COLOR 15, 1
  389. END SUB
  390.  
  391. '* ------------------------------------------------------- *
  392. '*                  Ende von TXLINK.BAS                    *
  393.