$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 SPEED ' 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 FUNCTION XWORD(BYVAL W$,BYVAL WN, BYVAL SCHAR) AS STRING DECLARE FUNCTION WORDS(BYVAL F$) AS INTEGER DECLARE FUNCTION WORDINDEX(BYVAL F$, BYVAL NUM%) AS INTEGER DECLARE FUNCTION WORDLENGTH(BYVAL X AS STRING, BYVAL NBR AS INTEGER) AS INTEGER '/*------------------------------------------------------------------*/ $CODE SEG "MLIB1" '/*------------------------------------------------------------------*/ FUNCTION M_XWORD(BYVAL X AS STRING,XN AS INTEGER,DELIMIT AS STRING) PUBLIC AS STRING IF LEN(X) = 0 THEN FUNCTION = "" EXIT FUNCTION END IF DL$ = DELIMIT X = " " + X + " " WC = 0 SP = 2 PP = 1 DO S = INSTR(SP,X,DL$) SP = S + 1 IF S > 0 THEN IF MID$(X,S-1,1) <> DL$ THEN WC = WC + 1 IF WC = XN THEN FUNCTION = MID$(X,PP+1,S-PP-1) END IF END IF PP = S LOOP UNTIL WC = XN OR S < 1 END FUNCTION '/* FUNCTION WORD(BYVAL X AS STRING,XN AS INTEGER) PUBLIC AS STRING '/* IF XN > WORDS(X) THEN EXIT FUNCTION '/* SP = WORDINDEX(X,XN) '/* WL = WORDLENGTH(X,XN) '/* FUNCTION = MID$(X,SP,WL) '/* END FUNCTION '/* FUNCTION WORD(X AS STRING,XN AS INTEGER) PUBLIC AS STRING '/* XL = LEN(X) '/* XCW = 0 '/* XRET$ = "" '/* XCWC = 0 '/* FOR XX = 1 TO XL '/* XT$ = MID$(X,XX,1) '/* IF XT$ = " " THEN '/* IF XCW = 1 THEN '/* IF XCWC = XN THEN '/* XX = XL + 50 '/* ELSE '/* XRET$ = "" '/* XCW = 0 '/* END IF '/* END IF '/* ELSE '/* IF XCW = 0 THEN XCWC = XCWC + 1 '/* XCW = 1 '/* XRET$ = XRET$ + XT$ '/* END IF '/* NEXT XX '/* IF XCWC <> XN THEN XRET$ = "" '/* WORD = XRET$ '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION WORDS(BYVAL X AS STRING) PUBLIC AS INTEGER '/* XDELIMIT$ = " " '/* XWCNT = 0 '/* XCWRD = 0 '/* XL = LEN(X) '/* IF XL = 0 THEN EXITWORDS '/* FOR XCNT = 1 TO XL '/* XT$ = MID$(X,XCNT,1) '/* IF XT$ <> XDELIMIT$ AND XCWRD = 0 THEN '/* XCWRD = 1 '/* XWCNT = XWCNT + 1 '/* END IF '/* IF XT$ = XDELIMIT$ AND XCWRD > 0 THEN XCWRD = 0 '/* NEXT XCNT '/* EXITWORDS: '/* FUNCTION = XWCNT '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION WORDLENGTH(BYVAL X AS STRING, BYVAL NBR AS INTEGER) PUBLIC AS INTEGER '/* IF NBR < 1 THEN '/* XL = 0 '/* ELSE '/* WNBR = WORDS(X) '/* IF NBR > WNBR THEN '/* XL = 0 '/* ELSE '/* T$ = WORD(X,NBR) '/* XL = LEN(T$) '/* END IF '/* END IF '/* WORDLENGTH = XL '/* END FUNCTION '/*------------------------------------------------------------------*/ ' FUNCTION TWORD(BYVAL X AS STRING,XN AS INTEGER) PUBLIC AS STRING ' IF XN > WORDS(X) THEN EXIT FUNCTION ' FUNCTION = XWORD(X,XN,32) ' END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION WORDPOS(BYVAL X AS STRING, BYVAL SW AS STRING) PUBLIC AS INTEGER '/* WNBR = WORDS(X) '/* FOR CNT = 1 TO WNBR '/* T$ = WORD(X,CNT) '/* IF T$ = SW THEN XL = CNT '/* NEXT CNT '/* WORDPOS = XL '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION WORDINDEX(BYVAL X AS STRING, BYVAL NBR AS INTEGER) PUBLIC AS INTEGER '/* WNBR = WORDS(X) '/* IF NBR > WNBR OR NBR < 1 THEN '/* S = 0 '/* ELSE '/* T$ = WORD(X,NBR) '/* S = INSTR(1,X,T$) '/* END IF '/* WORDINDEX = S '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION SPACE(BYVAL X AS STRING, BYVAL N AS INTEGER, BYVAL PAD AS STRING) PUBLIC AS STRING '/* WNBR = WORDS(X) '/* T$ = "" '/* FOR CNT = 1 TO WNBR '/* W$ = WORD(X,CNT) '/* A = WORDS(T$) '/* IF A > 0 THEN T$ = T$ + STRING$(N,PAD) '/* T$ = T$ + W$ '/* NEXT CNT '/* SPACE = T$ '/* END FUNCTION '/* FUNCTION SPACE(BYVAL X AS STRING, BYVAL N AS INTEGER, BYVAL PAD AS STRING) PUBLIC AS STRING '/* W = WORDS(X) '/* T$ = "" '/* FOR CNT = 1 TO W '/* T$ = T$ + WORD(X,CNT) '/* IF W = > 0 THEN T$ = T$ + STRING$(N,PAD) '/* NEXT CNT '/* FUNCTION = T$ '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION SUBWORD(BYVAL X AS STRING, BYVAL N AS INTEGER, BYVAL L AS INTEGER) PUBLIC AS STRING '/* XRET$ = "" '/* NWRDS = WORDS(X) '/* IF N > 0 AND N <= NWRDS THEN '/* SX = WORDINDEX(X,N) '/* IF L = 0 THEN LX = LEN(X)+2 '/* IF L > 0 THEN LX = WORDINDEX(X,N+L) '/* XRET$ = MID$(X,SX,LX-SX-1) '/* END IF '/* SUBWORD = RTRIM$(XRET$) '/* END FUNCTION '/*------------------------------------------------------------------*/ '/* FUNCTION DELWORD(BYVAL X AS STRING, BYVAL N AS INTEGER, BYVAL L AS INTEGER) PUBLIC AS STRING '/* XRET$ = "" '/* NWRDS = WORDS(X) '/* IF N > NWRDS THEN XRET$ = X '/* IF L > NWRDS THEN L = NWRDS '/* IF L = 0 THEN L = NWRDS '/* IF N > 0 AND N < (NWRDS + 1) THEN '/* --- Get Left String ---*/ '/* IF N > 1 THEN SP = WORDINDEX(X,N) ELSE SP = 1 '/* TL$ = "" '/* IF SP > 1 THEN TL$ = LEFT$(X,SP-1) '/* --- Get Right String ---*/ '/* TR$ = "" '/* IF L = NWRDS THEN TR$ = "" '/* IF L < NWRDS THEN '/* LW = N+L '/* SP = WORDINDEX(X,LW) '/* TR$ = MID$(X,SP) '/* END IF '/* XRET$ = TL$ + TR$ '/* END IF '/* DELWORD = XRET$ '/* END FUNCTION '/*------------------------------------------------------------------*/ $INCLUDE "C:\CODE\MLIB\MLIB.INC" CLS T$ = " ONE,TWO ,THREE , FOUR , FIVE , SIX, SEVEN EIGHT NINE TEN ELEVEN TWELVE THIRTEEN FOURTEEN FIFTEEN SIXTEEN SEVENTEEN EIGHTTEEN NINETEEN TWENTY" A$ = M_XWORD(T$,3,",") SAY 25,1,"'"+A$+"'",31 ' U$ = DELWORD(T$,6,1) ' SAY 10,1,T$,31 ' SAY 16,1,"'"+U$+"'",31 ' Y$ = GETKEY ' DO ' MTIMER ' A$ = SPACE(T$,1," ") ' T1 = MTIMER ' MTIMER ' B$ = XSPACE(T$,1," ") ' T2 = MTIMER ' SAY 2,1,"'"+A$+"'"+STR$(T1),12 ' SAY 4,1,"'"+B$+"'"+STR$(T2),15 ' Y$ = GETKEY ' LOOP UNTIL Y$ = CHR$(27)