+static void erase_completed(void)
+{
+ int i, j, srow, drow;
+ int *pfstart = scr + PF_YOFFS * SCR_COLS + PF_XOFFS;
+
+ /* sort completed lines from highest to lowest row number */
+ for(i=0; i<num_complines-1; i++) {
+ for(j=i+1; j<num_complines; j++) {
+ if(complines[j] > complines[i]) {
+ int tmp = complines[j];
+ complines[j] = complines[i];
+ complines[i] = tmp;
+ }
+ }
+ }
+
+ srow = drow = PF_ROWS - 1;
+
+ for(i=0; i<PF_ROWS; i++) {
+ for(j=0; j<num_complines; j++) {
+ if(complines[j] == srow) {
+ srow--;
+ }
+ }
+
+ if(srow < 0) break;
+
+ if(srow != drow) {
+ int *sptr = pfstart + srow * SCR_COLS;
+ int *dptr = pfstart + drow * SCR_COLS;
+ memcpy(dptr, sptr, PF_COLS * sizeof *dptr);
+ }
+
+ srow--;
+ drow--;
+ }
+
+ drawpf();
+ fflush(stdout);
+}
+