home *** CD-ROM | disk | FTP | other *** search
-
- '*--------------------------------------------------------*
- '* MachCurs.Bas *
- '* (c) 1991 E. Schütte & toolbox *
- '* für PowerBasic 2.0 *
- '*--------------------------------------------------------*
- $LIB COM -
- $LIB IPRINT -
- $LIB HERC -
- $ERROR ALL -
- $EVENT -
- $OPTION AUTODIM -
- $OPTION CNTLBREAK -
- $FLOAT EMULATE
-
- %FALSE = 0
- %TRUE = -1
-
- %FLAGS = 0
- %AX = 1
- %BX = 2
- %CX = 3
- %DX = 4
- %SI = 5
- %DI = 6
- %BP = 7
- %DS = 8
- %ES = 9
-
- DIM z1%(15, 1), tabelle%(16, 16)
-
- $INCLUDE"CURSOR.CUR"
-
- RESTORE
- FOR i% = 0 TO 15
- READ dummy$
- z1%(i%, 1) = VAL(dummy$)
- z1%(i%, 0) = NOT z1%(i%, 1)
- NEXT i%
-
- ON ERROR GOTO NoEGA
- SCREEN 9
- ON ERROR GOTO 0
-
- CALL Init
- CALL Geschwindigkeit (30, 30)
- CALL GCurs (0, 0, VARPTR(z1%(0, 0)), VARSEG(z1%(0, 0)))
- CALL Grenzen (0, 0, 620, 349)
- PALETTE 0, 7: PALETTE 15, 0: VIEW: CLS : CLEAR
- FOR k% = 20 TO 244 STEP 14 '* waagerechte Linien
- LINE (20, k%)-(244, k%), 15
- NEXT k%
- FOR k% = 20 TO 244 STEP 14 '* senkrechte Linien
- LINE (k%, 20)-(k%, 244), 15
- NEXT k%
- LOCATE 25, 5
- COLOR 15
- PRINT "Punkte setzen mit linker Maustaste, ";
- PRINT "Punkte löschen mit rechter Maustaste";
- LINE (0, 330)-(640, 330), 1, B
- LOCATE 19, 40: PRINT "SICHERN"
- LINE (305, 251)-(380, 265), 1, B
- LOCATE 21, 40: PRINT "NEUSTART"
- LINE (305, 279)-(380, 293), 1, B
- LOCATE 23, 42: PRINT "ENDE"
- LINE (305, 307)-(380, 321), 1, B
- LINE (325, 98)-(348, 119), 2, B '* kleiner Cursor
- CALL CursAn
-
- DO
- restart% = %FALSE
- CALL SetXSub
- IF setx% > 21 AND setx% < 233 THEN
- IF sety% > 21 AND sety% < 233 THEN
- kn% = Knopf%
- SELECT CASE kn%
- CASE 1: CALL SetDot (setx%, sety%)
- CASE 2: CALL RemDot (setx%, sety%)
- END SELECT
- END IF
- ELSEIF sety% > 232 THEN
- IF setx% = 350 AND sety% = 260 AND Knopf% = 1 THEN
- IF (NOT restart%) THEN CALL DateiMachen
- END IF
- END IF
- IF restart% THEN RUN
- LOOP
-
- NoEGA:
- PRINT "Dieses Programm benötigt eine EGA- oder VGA-Karte"
- END
-
- SUB DateiMachen
- SHARED dec&, bild$, disk$, XPos%, YPos%, includename$
- CLOSE
- CALL CursAus
- LOCATE 5, 50: PRINT "Name der Definitions-"
- LOCATE 6, 50: PRINT "datei: ";
- INPUT "", includename$
- LOCATE 5, 50: PRINT SPACE$(21);
- LOCATE 6, 50: PRINT SPACE$(21);
- CALL CursAn
- IF includename$ <> "" THEN
- includename$ = UCASE$(includename$)
- IF INSTR(includename$, ".") = 0 THEN
- includename$ = includename$ + ".CUR"
- END IF
- ELSE
- EXIT SUB
- END IF
- OPEN "R", 1, includename$ '* Nachfrage, wenn Datei
- IF LOF(1) > 0 THEN '* schon existiert.
- VIEW SCREEN (370, 20)-(620, 240), , 4
- CALL CursAus
- LOCATE 4, 55: PRINT "ACHTUNG !"
- LOCATE 6, 52: PRINT "Die Datei "; includename$
- LOCATE 7, 52: PRINT "existiert bereits!"
- LOCATE 8, 52: PRINT "------------------------"
- LOCATE 10, 52: PRINT "Wollen Sie sie wirklich"
- LOCATE 11, 52: PRINT "überschreiben?"
- LOCATE 14, 60: PRINT "ja"
- LOCATE 16, 61: PRINT "nein"
- LINE (468, 178)-(522, 200), 1, B
- LINE (468, 208)-(522, 228), 1, B
- CALL CursAn
- DO
- IF XPos% > 467 AND XPos% < 523 THEN
- IF YPos% > 178 AND YPos% < 201 AND Knopf% = 1 THEN
- CALL Schreiben
- END IF
- IF YPos% > 207 AND YPos% < 229 AND Knopf% = 1 THEN
- CALL CursAus
- VIEW SCREEN (369, 19)-(621, 241)
- CLS : VIEW: CALL CursAn: CLOSE : EXIT SUB
- END IF
- END IF
- LOOP
- ELSE
- CALL Schreiben
- END IF
- END SUB
-
- SUB RemDot (setxpos%, setypos%)
- SHARED tabelle%()
- '* Punkt löschen:
- CALL CursAus
- PAINT (setxpos%, setypos%), 7, 15 '* großes Bild
- PRESET ((328 + (setxpos% - 8) \ 14), _
- (100 + (setypos% - 8) \ 14))
- '* kleines Bild
- CALL CursAn
- tabelle%((setypos% - 8) / 14, (setxpos% - 8) / 14) = 0
- END SUB
-
- SUB Schreiben
- SHARED dec&, bild$, disk$, includename$, tabelle%()
- CALL CursAus
- VIEW SCREEN (300, 1)-(630, 299)
- CLS
- LOCATE 2
- CLOSE #1
- OPEN "O", 1, includename$
- FOR k% = 1 TO 16
- LOCATE , 35
- dec& = 0
- bild$ = ""
- FOR l% = 16 TO 1 STEP -1
- IF tabelle%(k%, l%) = 1 THEN
- dec& = dec& + 2 ^ ((l% - 16) * -1)
- bild$ = CHR$(35) + bild$
- ELSEIF tabelle%(k%, l%) = 0 THEN
- bild$ = CHR$(246) + bild$ '* 246
- END IF
- NEXT l%
- PRINT HEX$(dec&), bild$
- disk$ = "DATA &H" + HEX$(dec&)
- PRINT #1, disk$, " REM "; bild$
- NEXT k%
- PRINT : PRINT
- PRINT "Die Datei "; includename$; " wurde erstellt."
- PRINT "Sie enthält die Daten für den neuen "
- PRINT "Maus-Cursor."
- DELAY 3
- SCREEN 0, 0, 0
- END
- END SUB
-
- SUB SetDot (setxpos%, setypos%)
- SHARED tabelle%()
- '* Punkt setzen
- CALL CursAus
- PAINT (setxpos%, setypos%), 8, 15 '* großes Bild
- PSET ((328 + (setxpos% - 8) \ 14), _
- (100 + (setypos% - 8) \ 14)),15
- CALL CursAn
- tabelle%((setypos% - 8) \ 14, (setxpos% - 8) \ 14) = 1
- END SUB
-
- SUB SetXSub
- SHARED setx%, restart%
- SELECT CASE XPos%
- CASE 21 TO 33: setx% = 22
- CASE 35 TO 47: setx% = 36
- CASE 49 TO 61: setx% = 50
- CASE 63 TO 75: setx% = 64
- CASE 77 TO 89: setx% = 78
- CASE 91 TO 103: setx% = 92
- CASE 105 TO 117: setx% = 106
- CASE 119 TO 131: setx% = 120
- CASE 133 TO 145: setx% = 134
- CASE 147 TO 159: setx% = 148
- CASE 161 TO 173: setx% = 162
- CASE 175 TO 187: setx% = 176
- CASE 189 TO 201: setx% = 190
- CASE 203 TO 215: setx% = 204
- CASE 217 TO 229: setx% = 218
- CASE 231 TO 243: setx% = 232
- CASE 305 TO 380: setx% = 350: restart% = %FALSE
- CASE ELSE: EXIT SUB
- END SELECT
- CALL SetYSub
- END SUB
-
- SUB SetYSub
- SHARED setx%, sety%, restart%
- SELECT CASE YPos%
- CASE 21 TO 33: sety% = 22
- CASE 35 TO 47: sety% = 36
- CASE 49 TO 61: sety% = 50
- CASE 63 TO 75: sety% = 64
- CASE 77 TO 89: sety% = 78
- CASE 91 TO 103: sety% = 92
- CASE 105 TO 117: sety% = 106
- CASE 119 TO 131: sety% = 120
- CASE 133 TO 145: sety% = 134
- CASE 147 TO 159: sety% = 148
- CASE 161 TO 173: sety% = 162
- CASE 175 TO 187: sety% = 176
- CASE 189 TO 201: sety% = 190
- CASE 203 TO 215: sety% = 204
- CASE 217 TO 229: sety% = 218
- CASE 231 TO 243: sety% = 232
- CASE 279 TO 293: IF setx% = 350 AND Knopf% = 1 THEN restart% = %TRUE
- CASE 307 TO 321:
- IF setx% = 350 AND Knopf% = 1 THEN
- SCREEN 0, 0, 0
- END
- END IF
- CASE 251 TO 265: sety% = 260
- END SELECT
- END SUB
-
- '===========================================================
- ' Mausprozeduren und -funktionen
-
- '* Mauscursor aktivieren
- SUB CursAn
- Reg %AX,1
- CALL Interrupt &H33
- END SUB
-
- '* Mauscursor abschalten
- SUB CursAus
- Reg %AX, 2
- CALL Interrupt &H33
- END SUB
-
- '* Grafikcursor definieren
- SUB GCurs (horiz%, vertik%, offset&, segm&)
- Reg %AX, 9
- Reg %BX, horiz%
- Reg %CX, vertik%
- Reg %DX, offset&
- Reg %ES, segm&
- CALL Interrupt &H33
- END SUB
-
- '* Mickey-Einheit definieren
- SUB Geschwindigkeit (horiz%, vertik%)
- Reg %AX, 15
- Reg %CX, horiz%
- Reg %DX, vertik%
- CALL Interrupt &H33
- END SUB
-
- '* Fenster für Mauscursor definieren
- SUB Grenzen (links%, oben%, rechts%, unten%)
- Reg %AX, 7
- Reg %CX, links%
- Reg %DX, rechts%
- CALL Interrupt 51
- Reg %AX, 8
- Reg %CX, oben%
- Reg %DX, unten%
- CALL Interrupt &H33
- END SUB
-
- '* Maustreiber initialisieren
- SUB Init
- Reg %AX, 0
- CALL Interrupt &H33
- END SUB
-
- '* Maustastenstatus lesen
- FUNCTION Knopf%
- Reg %AX, 3
- CALL Interrupt &H33
- Knopf% = Reg(%BX)
- END FUNCTION
-
- '* horizontale Cursorposition ermitteln
- FUNCTION XPos%
- Reg %AX, 3
- CALL Interrupt &H33
- XPos% = Reg(%CX)
- END FUNCTION
-
- '* vertikale Cursorposition ermitteln
- FUNCTION YPos%
- Reg %AX, 3
- CALL Interrupt &H33
- YPos% = Reg(%DX)
- END FUNCTION
-
- '*--------------------------------------------------------*
- '* Ende von Machcurs.Bas *