Delphi & Pascal (česká wiki)
/***************************************************************************** * * * Subor LINE_EDI.C * * * *****************************************************************************/ #include <string.h> #include "glob.h" #include "video.h" #include "key.h" #include "line_edi.h" //************************************************************************// // RIADKOVY_EDITOR // // 30.10.1997 // //************************************************************************// int riadkovy_editor(int zacx,int zacy,int sirka,int maxdlzka,unsigned char attr1, unsigned char attr2,char *retazec) { register int i; //pomocna int zaciatocny=0; // int aktualny=0; // int koniec=0; //koniec cyklu int kl; //klaves int dlzka; //aktualna dlzka retazca dlzka=strlen(retazec); if(dlzka<sirka-2) { zaciatocny=0; aktualny=dlzka; } else { aktualny=sirka-2; zaciatocny=dlzka-aktualny; } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr1,attr2,retazec); presun_kurzor(zacx+1+aktualny,zacy); zapni_kurzor(); switch(kl=key()) { case ESC:vypni_kurzor();return FALSE; case ENTER:koniec=1; default:if(kl>=' ' && kl<=255) { *retazec='\0'; zaciatocny=0; aktualny=0; dlzka=0; } } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr2,attr2,retazec); while(!koniec) { switch(kl) { case ESC:vypni_kurzor();return FALSE; case ENTER:vypni_kurzor();return TRUE; case BKSPC:if(aktualny+zaciatocny>0) { if(aktualny+zaciatocny<dlzka) for(i=zaciatocny+aktualny;i<dlzka;i++) retazec[i-1]=retazec[i]; retazec[--dlzka]='\0'; goto vlavo; } break; vpravo: case RIGHT:aktualny++; if(aktualny+zaciatocny>dlzka) aktualny--; else if(aktualny>sirka-2) { aktualny--; zaciatocny++; } break; vlavo: case LEFT: if(--aktualny<0) { aktualny++; if(--zaciatocny<0) zaciatocny++; } break; case HOME: aktualny=0; zaciatocny=0; break; case END: if(dlzka<sirka-2) { zaciatocny=0; aktualny=dlzka; } else { aktualny=sirka-2; zaciatocny=dlzka-aktualny; } break; case DEL: if(aktualny+zaciatocny<dlzka) { for(i=zaciatocny+aktualny;i<dlzka;i++) retazec[i]=retazec[i+1]; dlzka--; } break; default:if(kl>=' ' && kl<=255 && dlzka<maxdlzka) { if(zaciatocny+aktualny>=dlzka) { if ( (kl>='A') && (kl<='Z') ) kl=kl + (224-'A'); retazec[dlzka++]=kl; retazec[dlzka]='\0'; } else { for(i=dlzka;i>zaciatocny+aktualny;i--) retazec[i]=retazec[i-1]; if(dlzka<maxdlzka) dlzka++; retazec[dlzka]='\0'; retazec[zaciatocny+aktualny]=kl; } goto vpravo; } } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr2,attr2,retazec); presun_kurzor(zacx+1+aktualny,zacy); kl=key(); } vypni_kurzor(); return TRUE; } //************************************************************************// // RIADKOVY_EDITOR1 // // 30.10.1997 // //************************************************************************// int riadkovy_editor1(int zacx,int zacy,int sirka,int maxdlzka,unsigned char attr1, unsigned char attr2,char *retazec) { register int i; //pomocna int zaciatocny=0; // int aktualny=0; // int koniec=0; //koniec cyklu int kl; //klaves int dlzka; //aktualna dlzka retazca dlzka=strlen(retazec); if(dlzka<sirka-2) { zaciatocny=0; aktualny=dlzka; } else { aktualny=sirka-2; zaciatocny=dlzka-aktualny; } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr1,attr2,retazec); presun_kurzor(zacx+1+aktualny,zacy); zapni_kurzor(); switch(kl=key()) { case ESC: koniec=ESC;break; case ENTER:koniec=ENTER;break; case TAB: koniec=TAB;break; case UP: koniec=UP;break; case DOWN: koniec=DOWN;break; case F1 : koniec=F1;break; case F6: koniec=F6;break; default:if(kl>=' ' && kl<=255) { *retazec='\0'; zaciatocny=0; aktualny=0; dlzka=0; } } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr2,attr2,retazec); while(!koniec) { switch(kl) { case ESC: vypni_kurzor();return ESC; case ENTER:vypni_kurzor();return ENTER; case TAB: vypni_kurzor();return TAB; case UP: vypni_kurzor();return UP; case DOWN: vypni_kurzor();return DOWN; case F1 : vypni_kurzor();return F1; case F6 : vypni_kurzor();return F6; case BKSPC:if(aktualny+zaciatocny>0) { if(aktualny+zaciatocny<dlzka) for(i=zaciatocny+aktualny;i<dlzka;i++) retazec[i-1]=retazec[i]; retazec[--dlzka]='\0'; goto vlavo; } break; vpravo: case RIGHT:aktualny++; if(aktualny+zaciatocny>dlzka) aktualny--; else if(aktualny>sirka-2) { aktualny--; zaciatocny++; } break; vlavo: case LEFT: if(--aktualny<0) { aktualny++; if(--zaciatocny<0) zaciatocny++; } break; case HOME: aktualny=0; zaciatocny=0; break; case END: if(dlzka<sirka-2) { zaciatocny=0; aktualny=dlzka; } else { aktualny=sirka-2; zaciatocny=dlzka-aktualny; } break; case DEL: if(aktualny+zaciatocny<dlzka) { for(i=zaciatocny+aktualny;i<dlzka;i++) retazec[i]=retazec[i+1]; dlzka--; } break; default:if(kl>=' ' && kl<=255 && dlzka<maxdlzka) { if(zaciatocny+aktualny>=dlzka) { retazec[dlzka++]=kl; retazec[dlzka]='\0'; } else { for(i=dlzka;i>zaciatocny+aktualny;i--) retazec[i]=retazec[i-1]; if(dlzka<maxdlzka) dlzka++; retazec[dlzka]='\0'; retazec[zaciatocny+aktualny]=kl; } goto vpravo; } } tlac_riadkovy_editor(zacx,zacy,sirka,zaciatocny,attr2,attr2,retazec); presun_kurzor(zacx+1+aktualny,zacy); kl=key(); } vypni_kurzor(); return koniec; } //************************************************************************// // TLAC_RIADKOVY_EDITOR // // 30.10.1997 // //************************************************************************// int tlac_riadkovy_editor(int zacx,int zacy,int sirka,int zaciatocny,unsigned char attr1, unsigned char attr2,char *ret) { register int i=0; register int j=0; if(zaciatocny>0) tlac_znak(zacx,zacy,attr2,17); else tlac_znak(zacx,zacy,attr2,' '); while(zaciatocny-->0)ret++; for(i=0;i<sirka;i++) if(*ret=='\0') { for(j=i;j<sirka;j++) tlac_znak(zacx+j+1,zacy,attr2,' '); break; } else tlac_znak(zacx+i+1,zacy,attr1,*ret++); if(*ret!='\0') tlac_znak(zacx+sirka,zacy,attr2,16); else tlac_znak(zacx+sirka,zacy,attr2,' '); return i; } //************************************************************************// // TLAC_OBMEDZENY_RETAZEC // // 30.10.1997 // //************************************************************************// void tlac_obmedzeny_retazec(int zacx,int zacy,int sirka,unsigned char attr,char *ret) { register int i; if((i=strlen(ret))<sirka-2) tlac_riadkovy_editor(zacx,zacy,sirka,0,attr,attr,ret); else tlac_riadkovy_editor(zacx,zacy,sirka,i-sirka-2,attr,attr,ret); } /*---------------------------------END--------------------------------------*/