DECLARE SUB MousePut (x%, y%) DECLARE SUB MouseHide () DECLARE SUB Render3DBox (x!, y!, wd!, ht!, vpx!, vpy!, c1!, c2!, dp!) DECLARE SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%) DECLARE SUB MouseDriver (ax%, bx%, cx%, dx%) DECLARE SUB MouseShow () DECLARE FUNCTION MouseInit% () DIM SHARED Mouse$ Mouse$ = SPACE$(57) FOR I% = 1 TO 57 READ a$ H$ = CHR$(VAL("&H" + a$)) MID$(Mouse$, I%, 1) = H$ NEXT I% DATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8B DATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53 DATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0F DATA 8B,5E,06,89,17,5D,CA,08,00 CLS ms% = MouseInit% IF NOT ms% THEN PRINT "Mouse not found" END END IF SCREEN 12 MouseShow MouseHide 1 MouseStatus Lb%, Rb%, y%, x% a$ = UCASE$(INKEY$) IF a$ = CHR$(27) OR a$ = "Q" THEN END IF Rb% AND Lb% THEN z = z + (StorX - x%) Render3DBox PstSqY, PstSqX, 40 + PstZ, 40 + PstZ, PstY, PstX, 0, 0, 50 Render3DBox SqY, SqX, 40 + z, 40 + z, PstY, PstX, 15, 1, 50 PstZ = z StorX = x% END IF IF Rb% AND (SqX <> x% OR SqY <> y%) THEN IF LstAcc = 1 THEN MousePut CINT(PstSqY), CINT(PstSqX): x% = CINT(PstSqX): y% = CINT(PstSqY) SqX = x%: SqY = y% Render3DBox PstSqY, PstSqX, 40 + z, 40 + z, PstY, PstX, 0, 0, 50 Render3DBox SqY, SqX, 40 + z, 40 + z, PstY, PstX, 15, 1, 50 PstSqY = y% PstSqX = x% LstAcc = 2 StorX = x% END IF IF Lb% AND (PstX <> x% OR PstY <> y%) THEN IF LstAcc = 2 THEN MousePut CINT(PstY), CINT(PstX): x% = CINT(PstX): y% = CINT(PstY) Render3DBox SqY, SqX, 40 + z, 40 + z, PstY, PstX, 0, 0, 50 Render3DBox SqY, SqX, 40 + z, 40 + z, CSNG(y%), CSNG(x%), 15, 1, 50 PstY = y% PstX = x% LstAcc = 1 StorX = x% END IF GOTO 1 SUB MouseDriver (ax%, bx%, cx%, dx%) DEF SEG = VARSEG(Mouse$) Mouse% = SADD(Mouse$) CALL Absolute(ax%, bx%, cx%, dx%, Mouse%) END SUB SUB MouseHide ax% = 2 MouseDriver ax%, 0, 0, 0 END SUB FUNCTION MouseInit% ax% = 0 MouseDriver ax%, 0, 0, 0 MouseInit% = ax% END FUNCTION SUB MousePut (x%, y%) ax% = 4 cx% = x% dx% = y% MouseDriver ax%, 0, cx%, dx% END SUB SUB MouseRange (x1%, y1%, x2%, y2%) ax% = 7 cx% = x1% dx% = x2% MouseDriver ax%, 0, cx%, dx% ax% = 8 cx% = y1% dx% = y2% MouseDriver ax%, 0, cx%, dx% END SUB SUB MouseShow ax% = 1 MouseDriver ax%, 0, 0, 0 END SUB SUB MouseStatus (Lb%, Rb%, xMouse%, yMouse%) ax% = 3 MouseDriver ax%, bx%, cx%, dx% Lb% = ((bx% AND 1) <> 0) Rb% = ((bx% AND 2) <> 0) xMouse% = cx% yMouse% = dx% END SUB SUB Render3DBox (x, y, wd, ht, vpx, vpy, c1, c2, dp) LINE (x, y)-(x + wd, y + ht), c1, B IF (vpx < x) OR (vpy < y) THEN LINE (x, y)-(vpx, vpy), c1 ' upper left IF (vpx > x + wd) OR (vpy < y) THEN LINE (x + wd, y)-(vpx, vpy), c1 ' lower left IF (vpx < x) OR (vpy > y + ht) THEN LINE (x, y + ht)-(vpx, vpy), c1 ' upper right IF (vpx > x + wd) OR (vpy > y + ht) THEN LINE (x + wd, y + ht)-(vpx, vpy), c1 ' lower right LINE (x + 1, y + 1)-(x + wd - 1, y + ht - 1), c2, BF ' The Front Box 'LINE ' The Back Box END SUB SUB Render3DTri (x, y, wd, ht, vpx, vpy, c1, c2, dp) LINE (x, y)-(x + wd, y + ht), c1, B IF (vpx < x) OR (vpy < y) THEN LINE (x, y)-(vpx, vpy), c1 ' upper left IF (vpx > x + wd) OR (vpy < y) THEN LINE (x + wd, y)-(vpx, vpy), c1 ' lower left IF (vpx < x) OR (vpy > y + ht) THEN LINE (x, y + ht)-(vpx, vpy), c1 ' upper right IF (vpx > x + wd) OR (vpy > y + ht) THEN LINE (x + wd, y + ht)-(vpx, vpy), c1 ' lower right LINE (x + 1, y + 1)-(x + wd - 1, y + ht - 1), c2, BF END SUB