$CPU 8086 'make compatible with XT systems $LIB ALL OFF 'turn off all PowerBASIC libraries $ERROR ALL OFF 'turn off all PowerBASIC error checking $OPTIMIZE SIZE 'optimize for smaller code $COMPILE UNIT 'compile to a UNIT (.PBU) '$COMPILE EXE 'compile to a UNIT (.PBU) DEFINT A-Z 'Required for all numeric functions, forces PB to not 'include floating point in UNIT (makes it smaller) '/*-------------------------------------------------------------------*/ DECLARE SUB CalcByte(Attr%,LowByte%,HiByte%) DECLARE SUB MCLICKED(Rgt%,Lft%,Row%,Col%) DECLARE FUNCTION ISINS() AS INTEGER DECLARE SUB MOUSEOFF() DECLARE SUB MOUSEON() DECLARE FUNCTION ISMOUSELBR() DECLARE SUB SAY(BYVAL Row AS INTEGER, BYVAL Col AS INTEGER, BYVAL Text AS STRING, BYVAL Attr AS INTEGER) '/*-------------------------------------------------------------------*/ $CODE SEG "MLIB1" '/*-------------------------------------------------------------------*/ SUB LEDIT(ALLOW$,TEXT$,M%,MOUSEROW%,MOUSECOL%,FILL%,ROW%,COL%,EDITKEY%,ATTR%) PUBLIC '/* CALCBYTE ATTR%,FGROUND%,BGROUND% FINISHED% = 0 IF TEXT$ = STRING$(LEN(TEXT$),32) THEN TEMP$ = STRING$(LEN(TEXT$),FILL%) ELSE A% = LEN(TEXT$):B% = LEN(RTRIM$(TEXT$)) TEMP$ = RTRIM$(TEXT$) + STRING$(A% - B%,FILL%) END IF GOSUB PRINTROUTINE IF EDITKEY% = 255 THEN EXIT SUB CURSORPOSITION% = COL% + B% DO IF CURSORPOSITION% = COL% + LEN(TEXT$) THEN LOCATE ROW%,CURSORPOSITION%,0 ELSE IF ISINS > 0 THEN LOCATE ROW%,CURSORPOSITION%,1,0,13 'BLOCK CUSOR ELSE LOCATE ROW%,CURSORPOSITION%,1,11,12 'NORMAL CURSOR END IF END IF WHILE NOT INSTAT IF M% THEN MOUSEON MCLICKED RGT%,LFT%,MROW%,MCOL% IF ISMOUSELBR THEN MOUSEROW% = MROW% MOUSECOL% = MCOL% EDITKEY% = -255 GOTO KEYBOARDROUTINE END IF END IF WEND KY$ = INKEY$ IF LEN(KY$) = 1 THEN EDITKEY% = ASC(KY$) ELSE EDITKEY% = -ASC(RIGHT$(KY$,1)) END IF KEYBOARDROUTINE: SELECT CASE EDITKEY% CASE 8 'BACKSPACE IF CURSORPOSITION% > COL% THEN A$ = LEFT$(TEMP$,CURSORPOSITION% - COL% - 1) B$ = RIGHT$(TEMP$,COL% + LEN(TEXT$) - CURSORPOSITION%) TEMP$ = A$ + B$ + STRING$(LEN(TEXT$) - LEN(A$ + B$),FILL%) DECR CURSORPOSITION% GOSUB PRINTROUTINE END IF CASE 13,9,-72,-80 'ENTERKEY TABKEY UP/DOWN ARROWKEY A$ = LTRIM$(RTRIM$(TEMP$,CHR$(FILL%))) TEXT$ = A$ + SPACE$(LEN(TEXT$) - LEN(A$)) FINISHED% = 1 CASE 27 'ESCKEY IF TEXT$ = STRING$(LEN(TEXT$),32) THEN TEMP$ = STRING$(LEN(TEXT$),FILL%) ELSE A% = LEN(TEXT$):B% = LEN(RTRIM$(TEXT$)) TEMP$ = RTRIM$(TEXT$) + STRING$(A% - B%,FILL%) END IF GOSUB PRINTROUTINE FINISHED% = 1 CASE -71 'HOMEKEY CURSORPOSITION% = COL% CASE -75 'LEFTARROW IF CURSORPOSITION% > COL% THEN DECR CURSORPOSITION% END IF CASE -77 'RIGHTARROW IF CURSORPOSITION% < COL% + LEN(RTRIM$(TEMP$,(CHR$(FILL%)))) THEN INCR CURSORPOSITION% END IF CASE -79 'ENDKEY CURSORPOSITION% = COL% + LEN(RTRIM$(TEMP$,(CHR$(FILL%)))) CASE -82 'INSERTKEY IF INSERTKEY% THEN LOCATE ,,,0,13 ELSE LOCATE ,,,11,12 END IF CASE -83 'DELETEKEY IF CURSORPOSITON% > COL% - 1 OR CURSORPOSITION% < COL% + LEN(TEXT$) THEN A$ = LEFT$(TEMP$,CURSORPOSITION% - COL%) B$ = RIGHT$(TEMP$,COL% + LEN(TEXT$) - CURSORPOSITION% - 1) TEMP$ = A$ + B$ + STRING$(LEN(TEXT$) - LEN(A$ + B$),FILL%) GOSUB PRINTROUTINE END IF CASE 32 TO 254 IF CURSORPOSITION% < COL% + LEN(TEXT$) THEN SELECT CASE LEFT$(ALLOW$,1) CASE CHR$(24) KY$ = UCASE$(KY$) CASE CHR$(25) KY$ = LCASE$(KY$) CASE ELSE KY$ = KY$ END SELECT IF INSTR(KY$,ANY (ALLOW$)) THEN IF INSERTKEY% THEN A$ = LEFT$(TEMP$,CURSORPOSITION% - COL%) B$ = RIGHT$(TEMP$,COL% + LEN(TEXT$) - (CURSORPOSITION% + 1)) TEMP$ = A$ + KY$ + B$ ELSE A$ = LEFT$(TEMP$,CURSORPOSITION% - COL%) B$ = RIGHT$(TEMP$,COL% + LEN(TEXT$) - CURSORPOSITION%) C$ = LEFT$(B$,LEN(B$) - 1) TEMP$ = A$ + KY$ + C$ END IF INCR CURSORPOSITION% GOSUB PRINTROUTINE END IF END IF CASE -255 'EXIT WITH MOUSE A$ = LTRIM$(RTRIM$(TEMP$,CHR$(FILL%))) TEXT$ = A$ + SPACE$(LEN(TEXT$) - LEN(A$)) FINISHED% = 1 CASE ELSE BEEP END SELECT LOOP UNTIL FINISHED% = 1 EXIT SUB '/*-------------------------------------------------------------------*/ PRINTROUTINE: IF M% THEN MOUSEOFF '/* COLOR FGROUND%,BGROUND% '/* LOCATE ROW%,COL% '/* PRINT TEMP$; SAY ROW%,COL%,TEMP$,ATTR% RETURN '/*-------------------------------------------------------------------*/ END SUB '/*-------------------------------------------------------------------*/ ' $INCLUDE "C:\CODE\MLIB\MLIB.INC" ' CLS ' LOCATE 25,8,0 ' PRINT "EDITING KEYS = INSERT DEL ESC HOME END BACKSPACE ARROWKEYS"; ' ' ALLOW$ = CHR$(24) + "ABCDEFGHIJKLMNOPQRSTUVWXYZ " ' TEXT$ = " " ' FILL% = 176 :ROW% = 8 :COL% = 20 ' BWINDOW "UPPER CASE ONLY",7,18,9,62,112,1,1 ' LEDIT ALLOW$,TEXT$,M%,MOUSEROW%,MOUSECOL%,FILL%,ROW%,COL%,EDITKEY%,14 '/*-------------------------------------------------------------------*/