void vm_paintbox(char x1, char y1, char x2, char y2, char attr) { char y; for (y = y1; y <= y2; y++) { VioWrtNAttr((PBYTE) &attr, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0); } }
void vm_putattr(char x, char y, char attr) { if (_osmode == DOS_MODE) { char cell[2]; vi_init(); v_getline(cell, (int)(x - 1), (int)(y - 1), 1); *(cell + 1) = attr; v_putline(cell, (int)(x - 1), (int)(y - 1), 1); } else { VioWrtNAttr((PBYTE) &attr, 1, (USHORT) (y - 1), (USHORT) (x - 1), 0); } }
void vm_paintbox(char x1, char y1, char x2, char y2, char attr) { if (_osmode == DOS_MODE) { char x, y; for (y = y1; y <= y2; y++) { for (x = x1; x <= x2; x++) { vm_putattr(x, y, attr); } } } else { char y; for (y = y1; y <= y2; y++) { VioWrtNAttr((PBYTE) &attr, (USHORT) (x2 - x1 + 1), (USHORT) (y - 1), (USHORT) (x1 - 1), 0); } } }
VOID SetScreenColors(THREAD *pstThd) { VIOCELL Cell; VIOPS *pVio = &pstThd->stVio; WORD wRow; WORD wColumn; BYTE byBackground; BYTE byForeground; byBackground = ClrTable[pVio->wBackground].PSClr; byForeground = ClrTable[pVio->wForeground].PSClr; Cell.ExtAttr = Cell.Spare = 0; Cell.Attr = (byBackground << 4) | byForeground; DosEnterCritSec(); VioGetCurPos(&wRow,&wColumn,pVio->hpsVio); VioWrtNAttr((PBYTE)&Cell.Attr,pVio->usPsWidth * pVio->usPsDepth,0,0,pVio->hpsVio); VioSetCurPos(wRow,wColumn,pVio->hpsVio); DosExitCritSec(); }
void vm_putattr(char x, char y, char attr) { VioWrtNAttr((PBYTE) &attr, 1, (USHORT) (y - 1), (USHORT) (x - 1), 0); }
USHORT __pascal VIOWRTNATTR(const PBYTE Attr, const USHORT Count, const USHORT Row, const USHORT Column, const HVIO Handle) { return VioWrtNAttr(Attr, Count, Row, Column, Handle); }
int EditAttributes (FILES *f) { char *buf; USHORT len = (vio.col * 7) * 2,curpos = 0; char nattr = (1 << 4) | (7 | 8); char sattr = 8; int ret = 0,x,key; BOOL okay = TRUE; char attrs[5] = "----"; if(!f) return -1; buf = malloc(len); if(!buf) return -1; ThreadMsg(" "); VioReadCellStr(buf,&len,(vio.row / 2) - 1,0,0); VioWrtCharStrAtt("ÚÄ Attributes: Ä¿",17,(vio.row / 2) - 1, 34,&nattr,0); VioWrtCharStrAtt("³ Readonly: [ ] ³",17,vio.row / 2, 34,&nattr,0); VioWrtCharStrAtt("³ Hidden: [ ] ³",17,(vio.row / 2) + 1, 34,&nattr,0); VioWrtCharStrAtt("³ System: [ ] ³",17,(vio.row / 2) + 2, 34,&nattr,0); VioWrtCharStrAtt("³ Archived: [ ] ³",17,(vio.row / 2) + 3, 34,&nattr,0); VioWrtCharStrAtt("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ",17,(vio.row / 2) + 4, 34,&nattr,0); VioWrtNAttr(&sattr,1,vio.row / 2,51,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 1,51,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 2,51,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 3,51,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 4,51,0); VioWrtNAttr(&sattr,16,(vio.row / 2) + 5,36,0); if(f->attrFile & FILE_READONLY) attrs[0] = 'x'; if(f->attrFile & FILE_HIDDEN) attrs[1] = 'x'; if(f->attrFile & FILE_SYSTEM) attrs[2] = 'x'; if(f->attrFile & FILE_ARCHIVED) attrs[3] = 'x'; for(x = 0;x < 4;x++) VioWrtCharStr(attrs + x,1,x + (vio.row / 2),47,0); VioSetCurPos(curpos + (vio.row / 2),47,0); ShowCursor(FALSE); while(okay) { VioWrtCharStr(attrs + curpos,1,curpos + (vio.row / 2),47,0); VioSetCurPos(curpos + (vio.row / 2),47,0); key = get_ch(-1); switch(key) { case 256: break; case 45 | 256: case 61 | 256: case '\x1b': /* abort */ okay = FALSE; ret = -1; break; case '\r': /* process */ okay = FALSE; { FILESTATUS3 fs3; if(!DosQueryPathInfo(f->filename,FIL_STANDARD,&fs3,sizeof(fs3))) { fs3.attrFile &= (~FILE_DIRECTORY); if(attrs[0] == 'x') fs3.attrFile |= FILE_READONLY; else fs3.attrFile &= (~FILE_READONLY); if(attrs[1] == 'x') fs3.attrFile |= FILE_HIDDEN; else fs3.attrFile &= (~FILE_HIDDEN); if(attrs[2] == 'x') fs3.attrFile |= FILE_SYSTEM; else fs3.attrFile &= (~FILE_SYSTEM); if(attrs[3] == 'x') fs3.attrFile |= FILE_ARCHIVED; else fs3.attrFile &= (~FILE_ARCHIVED); if(DosSetPathInfo(f->filename,FIL_STANDARD,&fs3,sizeof(fs3), DSPI_WRTTHRU)) DosBeep(50,100); else ret = 1; } else DosBeep(50,100); } break; case 72 | 256: /* up */ curpos--; if(curpos > 3) curpos = 3; break; case 'x': case 'X': case '+': attrs[curpos] = 'x'; break; case '-': attrs[curpos] = '-'; break; case ' ': /* toggle */ attrs[curpos] = (attrs[curpos] == 'x') ? '-' : 'x'; VioWrtCharStr(attrs + curpos,1,curpos + (vio.row / 2),47,0); /* intentional fallthru */ case 80 | 256: /* down */ curpos++; if(curpos > 3) curpos = 0; break; } } ShowCursor(TRUE); VioWrtCellStr(buf,len,(vio.row / 2) - 1,0,0); free(buf); SetupConsole(); ThreadMsg(NULL); return ret; }
int SimpleInput (char *title,char *text,ULONG beep,ULONG dur,ULONG wait, int *responses) { char *buf; int xlen,key = 0,x; USHORT len = (vio.col * 7) * 2,start,mlen,cell; char sattr = 8; BOOL okay = TRUE; if(!title) title = ""; if(!text) return key; xlen = min(max(strlen(title),strlen(text)),vio.col - 6); mlen = xlen + 6; start = (vio.col - xlen) / 2; buf = malloc(len); if(buf) { /* save screen under */ VioReadCellStr(buf,&len,(vio.row / 2) - 2,0,0); /* draw borders */ /* first, bright white left and top */ cell = ((((7 | 8) << 4) | 7) << 8) | ' '; VioWrtNCell((char *)&cell,mlen,(vio.row / 2) - 2,start,0); VioWrtNCell((char *)&cell,1,(vio.row / 2) - 1,start,0); VioWrtNCell((char *)&cell,1,(vio.row / 2),start,0); VioWrtNCell((char *)&cell,1,(vio.row / 2) + 1,start,0); VioWrtNCell((char *)&cell,1,(vio.row / 2) + 2,start,0); VioWrtNCell((char *)&cell,1,(vio.row / 2) + 3,start,0); /* now dark grey right and bottom */ cell = (((8 << 4) | 7) << 8) | ' '; VioWrtNCell((char *)&cell,1,(vio.row / 2) - 1,start + (mlen - 1),0); VioWrtNCell((char *)&cell,1,(vio.row / 2),start + (mlen - 1),0); VioWrtNCell((char *)&cell,1,(vio.row / 2) + 1,start + (mlen - 1),0); VioWrtNCell((char *)&cell,1,(vio.row / 2) + 2,start + (mlen - 1),0); VioWrtNCell((char *)&cell,mlen - 1,(vio.row / 2) + 3,start + 1,0); /* fill title area with light grey foreground, red background */ cell = (((7 << 4) | 4) << 8) | ' '; VioWrtNCell((char *)&cell,mlen - 2,(vio.row / 2) - 1,start + 1,0); /* fill text area with light grey foreground, black background */ cell = (((7 << 4) | 0) << 8) | ' '; VioWrtNCell((char *)&cell,mlen - 4,(vio.row / 2) + 1,start + 2,0); /* make interior border -- first white on light grey */ cell = (((7 << 4) | (7 | 8)) << 8) | 'Ú'; VioWrtNCell((char *)&cell,1,(vio.row / 2),start + 1,0); cell = (((7 << 4) | (7 | 8)) << 8) | '¿'; VioWrtNCell((char *)&cell,1,(vio.row / 2),start + (mlen - 2),0); cell = (((7 << 4) | (7 | 8)) << 8) | 'Ä'; VioWrtNCell((char *)&cell,mlen - 4,(vio.row / 2),start + 2,0); cell = (((7 << 4) | (7 | 8)) << 8) | '³'; VioWrtNCell((char *)&cell,1,(vio.row / 2) + 1,start + 1,0); cell = (((7 << 4) | (7 | 8)) << 8) | 'À'; VioWrtNCell((char *)&cell,1,(vio.row / 2) + 2,start + 1,0); /* now dark grey on light grey */ cell = (((7 << 4) | 8) << 8) | 'Ä'; VioWrtNCell((char *)&cell,mlen - 4,(vio.row / 2) + 2,start + 2,0); cell = (((7 << 4) | 8) << 8) | 'Ù'; VioWrtNCell((char *)&cell,1,(vio.row / 2) + 2,start + (mlen - 2),0); cell = (((7 << 4) | 8) << 8) | '³'; VioWrtNCell((char *)&cell,1,(vio.row / 2) + 1,start + (mlen - 2),0); /* insert title */ VioWrtCharStr(title, min(xlen,strlen(title)), (vio.row / 2) - 1, (start + (mlen / 2)) - (min(xlen,strlen(title)) / 2), 0); /* insert text */ VioWrtCharStr(text, min(xlen,strlen(text)), (vio.row / 2) + 1, (start + (mlen / 2)) - (min(xlen,strlen(text)) / 2), 0); /* draw shadow */ VioWrtNAttr(&sattr,1,(vio.row / 2) - 1,start + mlen,0); VioWrtNAttr(&sattr,1,(vio.row / 2),start + mlen,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 1,start + mlen,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 2,start + mlen,0); VioWrtNAttr(&sattr,1,(vio.row / 2) + 3,start + mlen,0); VioWrtNAttr(&sattr,mlen,(vio.row / 2) + 4,start + 1,0); VioSetCurPos((vio.row / 2) + 1,start + (mlen - 3),0); if(responses) ShowCursor(FALSE); if(beep) DosBeep(beep,dur); if(!responses) DosSleep(wait); else { KbdFlushBuffer(0); while(okay) { key = get_ch(-1); if(!*responses) break; for(x = 0;responses[x];x++) { if(key == responses[x]) { okay = FALSE; break; } } } } ShowCursor(TRUE); VioWrtCellStr(buf,len,(vio.row / 2) - 2,0,0); free(buf); KbdFlushBuffer(0); ThreadMsg(NULL); } return key; }