$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) DEFINT A-Z ' Required for all numeric functions, forces PB to not ' include floating point in UNIT (makes it smaller) '/*------------------------------------------------------------------*/ $CODE SEG "MLIB11" '/*------------------------------------------------------------------*/ '/* SCRCLR(ATTR,CHARACTER$,ROW,COL,HEIGHT,WIDTH) */ '/* Clear the Screen or Section of Screen with a character and color */ '/*------------------------------------------------------------------*/ SUB SCRCLR(BYVAL ATTR AS INTEGER,BYVAL CH AS STRING,BYVAL ROW AS INTEGER,BYVAL COL AS INTEGER,BYVAL HEIGHT AS INTEGER,BYVAL WDTH AS INTEGER) PUBLIC IF ATTR = 0 THEN ATTR = SCREEN(ROW,COL,1) END IF '/* --- Break ATTR into Foreground/Background Color Numbers ---/* CF = (ATTR MOD 16) CB = (((ATTR - CF) / 16) MOD 128) IF CB > 7 THEN CB = CB - 8 CF = CF + 16 END IF COLOR CF,CB '/* --- Build Character String ---*/ XT$ = STRING$(WDTH,CH) '/* --- Clear Area ---*/ IF CH = CHR$(255) THEN FOR RCNT = ROW TO (ROW + HEIGHT) FOR CCNT = COL TO (COL + WDTH) C = SCREEN(RCNT,CCNT,0) A = SCREEN(RCNT,CCNT,1) LOCATE RCNT,CCNT IF ATTR = 0 THEN CF = (A MOD 16) CB = (((A - CF) / 16) MOD 128) COLOR CF,CB END IF PRINT CHR$(C); NEXT CCNT NEXT RCNT ELSE FOR XX = ROW TO (ROW + HEIGHT) LOCATE XX,COL PRINT XT$; NEXT XX END IF END SUB '/*------------------------------------------------------------------*/ '/* Test Program Follows */ '/*------------------------------------------------------------------*/ '/*SCRCLR 244," ",1,1,24,80 '/*GOSUB WAITs '/*SCRCLR 31," ",10,15,10,45 '/*GOSUB WAITs '/*SCRCLR 9,"°",10,15,10,45 '/*GOSUB WAITs '/*END '/*------------------------------------------------------------------*/ '/*WAITs: '/* DO '/* Y$ = INKEY$ '/* loop UNTIL Y$ <> "" '/* RETURN '/*------------------------------------------------------------------*/