home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 09 / heimwerk / tooltalk.bas next >
Encoding:
BASIC Source File  |  1989-06-26  |  5.1 KB  |  184 lines

  1. DECLARE SUB Bildschirm ()
  2. DECLARE SUB InitCom1 ()
  3. DECLARE SUB DispTypeBox ()
  4. DECLARE SUB ClearTypeBox ()
  5. DECLARE SUB TypeZeichen (Zeichen$)
  6. '* ------------------------------------------------------- *
  7. '*                   TOOLTALK.BAS                          *
  8. '*      Realisierung eines einfachen Fernschreibers        *
  9. '*    zwischen zwei PC über die serielle Schnittstelle     *
  10. '*            (c) 1989 W.Rinke & TOOLBOX                   *
  11. '* ------------------------------------------------------- *
  12. TYPE Regs
  13.   AX AS INTEGER
  14.   BX AS INTEGER
  15.   CX AS INTEGER
  16.   DX AS INTEGER
  17.   BP AS INTEGER
  18.   SI AS INTEGER
  19.   DI AS INTEGER
  20.   FLAGS AS INTEGER
  21.   DS AS INTEGER
  22.   ES AS INTEGER
  23. END TYPE
  24.  
  25. DIM InRegs AS Regs, OutRegs AS Regs
  26.  
  27. box1$ = CHR$(214) + STRING$(58, 196) + CHR$(183)
  28. box2$ = CHR$(186) + STRING$(58, 176) + CHR$(186)
  29. box3$ = CHR$(186) + STRING$(58, 176) + CHR$(186)
  30. box4$ = CHR$(211) + STRING$(58, 196) + CHR$(189)
  31.  
  32.  
  33. CALL Bildschirm
  34. CALL InitCom1
  35.  
  36. DO
  37.   DO
  38.     Antwort$ = INKEY$
  39.   LOOP UNTIL Antwort$ > "0" AND Antwort$ < "4"
  40.   IF Antwort$ = "1" THEN
  41.     CALL DispTypeBox
  42.     DO                                   '* Senden
  43.       Leitungsstatus = INP(&H3FD)
  44.       IF (Leitungsstatus AND 2 ^ 5) = 32 THEN
  45.         Sendezeichen$ = INKEY$
  46.         IF Sendezeichen$ <> "" THEN
  47.           CALL TypeZeichen(Sendezeichen$)
  48.           OUT &H3F8, ASC(Sendezeichen$)
  49.         END IF
  50.       END IF
  51.     LOOP UNTIL Sendezeichen$ = "@"
  52.     CALL ClearTypeBox
  53.     COLOR 7, 1
  54.   END IF
  55.   IF Antwort$ = "2" THEN
  56.     CALL DispTypeBox
  57.     DO                                  '* Empfangen
  58.       Leitungsstatus = INP(&H3FD)
  59.       IF (Leitungsstatus AND 2 ^ 0) = 1 THEN
  60.         Empfangszeichen$ = CHR$(INP(&H3F8))
  61.         CALL TypeZeichen(Empfangszeichen$)
  62.       END IF
  63.       InRegs.AX = &H100           '* Tastatur auslesen
  64.       CALL INTERRUPT(&H16, InRegs, OutRegs)
  65.       Taste = OutRegs.AX \ 4      '* entspricht einem SHR 2
  66.     LOOP UNTIL Taste = 3 OR Empfangszeichen$ = CHR$(64)
  67.                                   '* <Ctrl><Break>  oder "@"
  68.     CALL ClearTypeBox
  69.   END IF
  70. LOOP UNTIL Antwort$ = "3"
  71.  
  72. END
  73.  
  74. SUB Bildschirm
  75. '* ---------------------------------------------------------
  76. '*              Grundbildschirm aufbauen
  77. CLS
  78. COLOR 7, 1
  79. LOCATE 2, 2: PRINT CHR$(201); STRING$(76, 205); CHR$(187)
  80. FOR i% = 3 TO 5
  81.   LOCATE i%, 2: PRINT CHR$(186); STRING$(76, 176); CHR$(186)
  82. NEXT i%
  83. LOCATE 6, 2: PRINT CHR$(186); STRING$(23, 176);
  84.              COLOR 1, 7
  85.              PRINT CHR$(201); STRING$(28, 205); CHR$(187);
  86.              COLOR 7, 1
  87.              PRINT STRING$(23, 176); CHR$(186);
  88. FOR i% = 7 TO 13
  89.   LOCATE i%, 2: PRINT CHR$(186); STRING$(23, 176);
  90.                 COLOR 1, 7
  91.                PRINT CHR$(186); STRING$(28, 176); CHR$(186);
  92.                 COLOR 1, 0: PRINT CHR$(176); : COLOR 7, 1
  93.                 PRINT STRING$(22, 176); CHR$(186)
  94. NEXT i%
  95. LOCATE 14, 2: PRINT CHR$(186); STRING$(23, 176);
  96.               COLOR 1, 7
  97.               PRINT CHR$(200); STRING$(28, 205); CHR$(188);
  98.               COLOR 1, 0: PRINT CHR$(176); : COLOR 7, 1
  99.               PRINT STRING$(22, 176); CHR$(186)
  100. LOCATE 15, 2: PRINT CHR$(186); STRING$(24, 176);
  101.               COLOR 1, 0: PRINT STRING$(30, 176);
  102.               COLOR 7, 1
  103.               PRINT STRING$(22, 176); CHR$(186)
  104. FOR i% = 16 TO 23
  105.   LOCATE i%, 2: PRINT CHR$(186); STRING$(76, 176); CHR$(186)
  106. NEXT i%
  107. LOCATE 24, 2: PRINT CHR$(200); STRING$(76, 205); CHR$(188);
  108.  
  109. COLOR 1, 7
  110.  
  111. LOCATE 6, 32: PRINT " Datenübertragung "
  112. LOCATE 8, 32: PRINT "  [1]  Senden     "
  113. LOCATE 9, 32: PRINT "  [2]  Empfangen  "
  114. LOCATE 10, 32: PRINT "  [3]  Beenden    "
  115. LOCATE 12, 32: PRINT "  Bitte wählen... "
  116.  
  117. COLOR 7, 1
  118.  
  119. END SUB
  120.  
  121. SUB ClearTypeBox
  122.  
  123. COLOR 7, 1
  124.  
  125. FOR i% = 17 TO 21
  126.   LOCATE i%, 10: PRINT STRING$(61, 176);
  127. NEXT i%
  128.  
  129. END SUB
  130.  
  131. SUB DispTypeBox
  132. '* ---------------------------------------------------------
  133. '*                 Anzeigen der Typebox
  134.  
  135. SHARED box1$, box2$, box3$, box4$
  136.  
  137. LOCATE 17, 10: COLOR 1, 7
  138. PRINT box1$
  139. LOCATE 18, 10
  140. PRINT box2$; : COLOR 1, 0: PRINT CHR$(176);
  141. LOCATE 19, 10: COLOR 1, 7
  142. PRINT box3$; : COLOR 1, 0: PRINT CHR$(176);
  143. LOCATE 20, 10: COLOR 1, 7
  144. PRINT box4$; : COLOR 1, 0: PRINT CHR$(176);
  145. LOCATE 21, 11: PRINT STRING$(60, 176);
  146. LOCATE 18, 12: COLOR 1, 7: Spalte% = 0: Zeile% = 1
  147.  
  148. END SUB
  149.  
  150. SUB InitCom1
  151. '* ---------------------------------------------------------
  152. '*  Initialisieren von COM1: mit 9600 Baud, keiner Parität
  153. '*         einem Stopbit und 8 Bit Zeichenlänge
  154.  
  155. DIM InRegs AS Regs, OutRegs AS Regs
  156.  
  157. InRegs.AX = &HE3
  158. CALL INTERRUPT(&H14, InRegs, OutRegs)
  159.  
  160. OUT &H3FC, 3
  161.           '* Setzen von Bit 0 und 1 im Modemkontrollregister
  162.  
  163. END SUB
  164.  
  165. SUB TypeZeichen (Zeichen$)
  166. STATIC Zeile%, Spalte%
  167.  
  168. IF Zeichen$ = CHR$(13) THEN
  169.   Zeile% = Zeile% + 1
  170.   Spalte% = 0
  171. END IF
  172. IF Spalte% > 55 THEN
  173.   Spalte% = 0
  174.   Zeile% = Zeile% + 1
  175. END IF
  176. IF Zeile% > 1 THEN Zeile% = 1
  177. LOCATE 18 + Zeile%, Spalte% + 12
  178. PRINT Zeichen$;
  179. Spalte% = Spalte% + 1
  180.  
  181. END SUB
  182. '* ------------------------------------------------------- *
  183. '*                Ende von TOOLTALK.BAS                    *
  184.