|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
4: * DosUAE Interface - 07-17-96 02:42pm
5: *
6: * (c) 1995 Bernd Schmidt, Ed Hanway
7: * Interface by Tim Gunn
8: */
9:
10: #include "sysconfig.h"
11: #include "sysdeps.h"
12:
13: #include <stdio.h>
14: #include <ctype.h>
15: #include <dpmi.h>
16: #include <dos.h>
17: #include <conio.h>
18: #include <grx20.h>
19:
20: #include "config.h"
21: #include "options.h"
22: #include "autoconf.h"
23: #include "dos-ui.h"
24: #include "gui.h"
25: #include "memory.h"
26:
27: #define TB textbackground
28: #define TC textcolor
29: #define CURSON _setcursortype(_NORMALCURSOR);
30: #define CURSOFF _setcursortype(_NOCURSOR);
31: #define SCRON _wscroll = 1;
32: #define SCROFF _wscroll = 0;
33:
34: int SETTC=15;
35: int SETTB=1;
36: int _CWINX = 1,_CWINY = 1,_CWINX2 = 80,_CWINY2 = 25;
37: int dx,dy,dx2,dy2,dlx,dly,dlx2,dly2;
38: char vbuff[4096];
39: struct find_t sfile;
40:
41: char *tui_filereq(char *spec)
42: {
43: struct find_t *files;
44: struct find_t ffblk;
45:
46: int i,done,key=0,zx,zy,zx2,zy2;
47: int ysize=8,cur=0,xpos=10,ypos,y=0,z,count=0;
48: char buff2[4096];
49:
50: int speccount=0,sc2=0,speclen;
51: char specbuff[12];
52: specbuff[0]=0;
53: speclen = strlen(spec);
54:
55: done = _dos_findfirst("*.*",_A_NORMAL,&ffblk);
56: while(!done) { count++; done = _dos_findnext(&ffblk); }
57: files = (struct find_t *)calloc(count , sizeof(struct find_t));
58:
59: count=1; // starts at 1 because the first entry is 'none'.
60: while(speccount<=speclen) {
61:
62: if(spec[speccount]!=' ' || speccount!=speclen)
63: {
64: specbuff[sc2]=spec[speccount];
65: }
66: else
67: {
68: specbuff[sc2]=0; sc2=-1; //sc2=-1 so the count makes it 0;
69: done = _dos_findfirst(specbuff,_A_NORMAL,&ffblk);
70: files[count]=ffblk;
71: while(!done) {
72: count++;
73: done = _dos_findnext(&ffblk);
74: files[count]=ffblk;
75: }
76: specbuff[0]=0;
77: }
78: speccount++; sc2++;
79:
80: }
81: specbuff[sc2]=0; //repeated coz of no space, bad code rewrite it!
82: done = _dos_findfirst(specbuff,_A_NORMAL,&ffblk);
83: files[count]=ffblk;
84: while(!done) {
85: count++;
86: done = _dos_findnext(&ffblk);
87: files[count]=ffblk;
88: }
89: strcpy(files[0].name,"none");
90:
91:
92: if(count<9) { ysize=count; }
93: if(ysize>15) { ysize=15; }
94: ypos=12-(ysize/2);
95:
96: zx=xpos; zy=ypos; zx2=xpos+20; zy2=ypos+ysize+1;
97: gettext(zx-1,zy-1,zx2+1,zy2+1,buff2);
98: window(1,1,80,25); drawbox(zx-1,zy-1,zx2+1,zy2+1);
99: gotoxy(zx+1,zy-1); cprintf("Select a file.");
100: window(zx,zy,zx2,zy2); clrscr();
101:
102: gotoxy(1,ysize+1); cprintf("-------------");
103: while(key!=13) {
104: switch(key) {
105: case 72: cur--; break;
106: case 80: cur++; break;
107: case 27:
108: TB(SETTB); TC(SETTC);
109: window(_CWINX,_CWINY,_CWINX2,_CWINY2);
110: puttext(zx-1,zy-1,zx2+1,zy2+1,buff2);
111: sfile.name[0]=0;
112: return sfile.name;
113: }
114: if(count-y<ysize) z=count; else z=ysize;
115: if(cur>z-1) { cur=z-1; y++; }
116: if(cur<0) { cur=0; y--; }
117: if(y<0) y=0;
118: if(y>count-z) y=count-z;
119: for(i=y;i<y+z;i++) {
120: if(i==y+cur) { TB(SETTC); TC(SETTB); }
121: else { TB(SETTB); TC(SETTC); }
122: gotoxy(1,i-y+1);
123: cprintf(" ");
124: gotoxy(1,i-y+1);
125: cputs(files[i].name);
126: }
127: gotoxy(1,ysize+2);
128: cprintf(" ");
129: gotoxy(1,ysize+2);
130: cprintf("%s",files[y+cur].name);
131:
132: key = getch();
133: }
134:
135: TB(SETTB); TC(SETTC);
136:
137: if(y+cur!=0) {
138: sfile=files[y+cur];
139: } else {
140: sfile.name[0]=0;
141: }
142:
143: window(_CWINX,_CWINY,_CWINX2,_CWINY2);
144: puttext(zx-1,zy-1,zx2+1,zy2+1,buff2);
145:
146: return sfile.name;
147: }
148:
149: void tui_dlog(int xcoord,int ycoord,int xcoord2,int ycoord2)
150: {
151: dx = xcoord; dy = ycoord; dx2 = xcoord2; dy2 = ycoord2;
152: gettext(dx-1,dy-1,dx2+1,dy2+1,vbuff);
153: window(1,1,80,25); drawbox(dx-1,dy-1,dx2+1,dy2+1);
154: window(dx,dy,dx2,dy2);
155: dlx = _CWINX; dly = _CWINY; dlx2 = _CWINX2; dly2 = _CWINY2;
156: _CWINX = dx; _CWINY = dy; _CWINX2 = dx2 ;_CWINY2 = dy2;
157: clrscr();
158: }
159:
160: void tui_dlogdie()
161: {
162: window(dlx,dly,dlx2,dly2);
163: _CWINX = dlx; _CWINY = dly; _CWINX2 = dlx2; _CWINY2 = dly2;
164: puttext(dx-1,dy-1,dx2+1,dy2+1,vbuff);
165: }
166:
167: void tui_drawbox(int x, int y, int x2, int y2)
168: {
169: int i;
170: gotoxy(x,y); cprintf("�");
171: for(i=0;i<x2-x-1;i++){ cprintf("�"); }
172: cprintf("�");
173: gotoxy(x,y2); cprintf("�");
174: for(i=0;i<x2-x-1;i++){ cprintf("�"); }
175: cprintf("�");
176: for(i=y+1;i<y2;i++) {
177: gotoxy(x,i); cprintf("�");
178: gotoxy(x2,i); cprintf("�");
179: }
180: }
181:
182: void tui_errorbox(char *errortxt)
183: {
184: int half,zx,zy,zx2,zy2;
185: char buff[2048];
186: half = strlen(errortxt)/2;
187:
188: TC(SETTC); TB(SETTB);
189:
190: zx=35-half; zy=10; zx2=45+half; zy2=15;
191:
192: gettext(zx-1,zy-1,zx2+1,zy2+1,buff);
193: window(1,1,80,25); drawbox(zx-1,zy-1,zx2+1,zy2+1);
194: window(zx,zy,zx2,zy2); clrscr();
195:
196: gotoxy(5,3); cprintf(errortxt);
197: gotoxy(half+1,5); cprintf("HIT A KEY");
198: getch();
199:
200: window(_CWINX,_CWINY,_CWINX2,_CWINY2);
201: puttext(zx-1,zy-1,zx2+1,zy2+1,buff);
202: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.