1 #include "globals.h"
2
3 /***************************************************************************/
4 /* */
5 /* Uzap! */
6 /* */
7 /* Copyright (c) 1989 Robert Silvers */
8 /* -All rights reserved- */
9 /* */
10 /* Developed at the University of Lowell */
11 /* */
12 /* This software is supplied free of charge. This software, or any part */
13 /* of it, may not be redistributed or otherwise made available to, or */
14 /* used by, any other person without the inclusion of this copyright */
15 /* notice. This software may not be used to make a profit in any way. */
16 /* */
17 /* This software is provided with absolutely no warranty, to the extent */
18 /* permitted by applicable state law. In no event, unless required by */
19 /* applicable law, will the author(s) of this this software be liable for */
20 /* any damages caused by this software. */
21 /* */
22 /* */
23 /* Send comments and bugs to: rsilvers@hawk.ulowell.edu */
24 /***************************************************************************/
25 /* 01/05/89 7:41am, loaded itself, modified it's name, and saved it. */
26 /***************************************************************************/
27
28
DrawScreen()29 void DrawScreen(){
30 echo();
31 noraw();
32 printf(" ");
33 Inverse();
34 printf(" Uzap! %s (c) 1989 Robert Silvers ----------- --", VERSION);
35 printf(" University of Lowell \n");
36 Normal();
37 Graphics();
38 printf(" lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk ");
39 printf(" lqqqqqqqqqqqqqqqqqqqqqqk\n");
40 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
41 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
42 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
43 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
44 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
45 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
46 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
47 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
48 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
49 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
50 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
51 printf(" x\t\t\t\t\t\tx x\t\t\t x\n");
52 printf(" mqqqqqqqqqqqqqqqqqqqqqHEXqqqqqqqqqqqqqqqqqqqqqqj ");
53 printf(" mqqqqqqqqqASCqqqqqqqqqqj\n\n");
54 Asc();
55 printf(" Filespec: \n\n");
56 printf(" Messages: \n");
57 PRINTG (" lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq");
58 PRINTG ("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk\n");
59 PRINTG(" x "); PRINTB("L"); printf("oad ");
60 PRINTB (" H"); printf("ex edit ");
61 PRINTB (" G"); printf("oto sector ");
62 PRINTB (" >"); printf("Forward search "); PRINTG("x\n");
63 PRINTG (" x "); PRINTB("S"); printf("ave ");
64 PRINTB (" A"); printf("sc edit ");
65 PRINTB (" J"); printf("ump to byte ");
66 PRINTB (" <"); printf("Backward search "); PRINTG("x\n");
67 PRINTG (" x "); PRINTB("Q"); printf("uit ");
68 PRINTB (" U"); printf("ndo! ");
69 PRINTB (" T"); printf("able ");
70 PRINTB (" C"); printf("ontinue search "); PRINTG("x\n");
71 PRINTG (" mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq");
72 PRINTG ("qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj");
73 fflush(stdout);
74 ShowData();
75 noecho();
76 raw();
77 } /* DrawScreen */
78
79
Table()80 void Table(){
81 char c;
82
83 echo();
84 noraw();
85 Cls();
86 printf(" ");
87 Inverse();
88 printf("CHR DEC HX CHR DEC HX CHR DEC HX CHR DEC HX ");
89 printf("CHR DEC HX CHR DEC HX");
90 Normal();
91 printf(" \n");
92 printf(" nul 000 00 | syn 022 16 | , 044 2C | B 066 42 | ");
93 printf(" X 088 58 | n 110 6E \n");
94 printf(" soh 001 01 | etb 023 17 | - 045 2D | C 067 43 | ");
95 printf(" Y 089 59 | o 111 6F \n");
96 printf(" stx 002 02 | can 024 18 | . 046 2E | D 068 44 | ");
97 printf(" Z 090 5A | p 112 70 \n");
98 printf(" etx 003 03 | em 025 19 | / 047 2F | E 069 45 | ");
99 printf(" [ 091 5B | q 113 71 \n");
100 printf(" eot 004 04 | sub 026 1A | 0 048 30 | F 070 46 | ");
101 printf(" \\ 092 5C | r 114 72 \n");
102 printf(" enq 005 05 | esc 027 1B | 1 049 31 | G 071 47 | ");
103 printf(" ] 093 5D | s 115 73 \n");
104 printf(" ack 006 06 | fs 028 1C | 2 050 32 | H 072 48 | ");
105 printf(" ^ 094 5E | t 116 74 \n");
106 printf(" bel 007 07 | gs 029 1D | 3 051 33 | I 073 49 | ");
107 printf(" _ 095 5F | u 117 75 \n");
108 printf(" bs 008 08 | rs 030 1E | 4 052 34 | J 074 4A | ");
109 printf(" ` 096 60 | v 118 76 \n");
110 printf(" ht 009 09 | us 031 1F | 5 053 35 | K 075 4B | ");
111 printf(" a 097 61 | w 119 77 \n");
112 printf(" nl 010 0A | sp 032 20 | 6 054 36 | L 076 4C | ");
113 printf(" b 098 62 | x 120 78 \n");
114 printf(" vt 011 0B | ! 033 21 | 7 055 37 | M 077 4D | ");
115 printf(" c 099 63 | y 121 79 \n");
116 printf(" np 012 0C | \" 034 22 | 8 056 38 | N 078 4E | ");
117 printf(" d 100 64 | z 122 7A \n");
118 printf(" cr 013 0D | # 035 23 | 9 057 39 | O 079 4F | ");
119 printf(" e 101 65 | { 123 7B \n");
120 printf(" so 014 0E | $ 036 24 | : 058 3A | P 080 50 | ");
121 printf(" f 102 66 | | 124 7C \n");
122 printf(" si 015 0F | %c 037 25 | ; 059 3B | Q 081 51 | ", 37);
123 printf(" g 103 67 | } 125 7D \n");
124 printf(" dle 016 10 | & 038 26 | < 060 3C | R 082 52 | ");
125 printf(" h 104 68 | ~ 126 7E \n");
126 printf(" dc1 017 11 | ' 039 27 | = 061 3D | S 083 53 | ");
127 printf(" i 105 69 | del 127 7F \n");
128 printf(" dc2 018 12 | ( 040 28 | > 062 3E | T 084 54 | ");
129 printf(" j 106 6A |\n");
130 printf(" dc3 019 13 | ) 041 29 | ? 063 3F | U 085 55 | ");
131 printf(" k 107 6B |\n");
132 printf(" dc4 020 14 | * 042 2A | @ 064 40 | V 086 56 | ");
133 printf(" l 108 6C |\n");
134 printf(" nak 021 15 | + 043 2B | A 065 41 | W 087 57 | ");
135 printf(" m 109 6D |\n");
136 printf(" Hit space to continue");
137 noecho();
138 raw();
139 while((c= GetKey())!=32);
140 Refresh();
141 PRINTM("Waiting for command");
142 }
143
144
ShowData()145 int ShowData(){
146 unsigned char c, hnum[16];
147 int x, y;
148
149 if(!loaded) return(0);
150
151 Move(16, 31);
152 printf("Sector: %d/%d ", block + 1, max + 1);
153 Move(16, 53);
154 printf("Offset: %d/%d ", pos, size);
155
156 for(y= 0; y < 12; y++){
157 Move(y + 3, 4);
158 for(x= 0; x < 20; x++){
159 if(((block * 240) + x + (y * 20)) >= size){
160 putchar('#');
161 putchar('#');
162 if(!((x + 1)%4)) putchar(' ');
163 }else{
164 c= image[(block * 240) + x + (y * 20)];
165 sprintf(hnum, "%2x", c); /* Get HEX value */
166 if(hnum[0]==' ') hnum[0]='0';
167 if(islower(hnum[0])) hnum[0]=toupper(hnum[0]);
168 if(islower(hnum[1])) hnum[1]=toupper(hnum[1]);
169 putchar(hnum[0]);
170 putchar(hnum[1]);
171 if(!((x + 1)%4)) putchar(' ');
172 }/* if */
173 } /* for */
174
175 Move(y + 3, 55);
176 for(x= 0; x < 20; x++){
177 if(((block * 240) + x + (y * 20)) >= size)
178 putchar('#');
179 else{
180 c= image[(block * 240) + x + (y * 20)];
181 if(IsPrint(c)){
182 if(c=='-'){
183 Bold();
184 putchar('-');
185 Normal();
186 }else
187 putchar(c);
188 }else{
189 putchar('-');
190 } /* if */
191 } /* if */
192 } /* for */
193 } /* for */
194 Home();
195 } /* ShowData */
196
197
198 /* isprint() thinks a tab is a printable character. Not good. */
IsPrint(chr)199 int IsPrint(chr)
200 unsigned char chr;{
201
202 if(((chr > 31 && chr < 127) || (chr > 159 && chr < 255)) && isprint(chr)
203 && chr!=27)
204 return(1);
205 else
206 return(0);
207 }
208
209
Refresh()210 void Refresh(){
211
212 Cls();
213 DrawScreen();
214 Move(17, 14);
215 printf("%s ", dfilename);
216 Move(19, 14);
217 }
218
219
220 /* Various screen control functions */
221
Move(y,x)222 void Move(y, x)
223 int x, y;{
224
225 printf("\033[%d;%dH", y, x);
226
227 }
Cls()228 void Cls(){
229 printf("\033[H\033[2J");
230 }
CHome()231 void CHome(){
232 Move(19, 14);
233 printf(" ");
234 Move(19, 14);
235 }
Home()236 void Home(){
237 Move(19, 14);
238 }
Bold()239 void Bold(){
240 printf("\033[1m");
241 }
Blink()242 void Blink(){
243 printf("\033[5m");
244 }
245
Underline()246 void Underline(){
247 printf("\033[4m");
248 }
249
Inverse()250 void Inverse(){
251 printf("\033[7m");
252 }
253
Normal()254 void Normal(){
255 printf("\033[0m");
256 }
257
Graphics()258 void Graphics(){
259 printf("\033(0\0331");
260 }
261
Asc()262 void Asc(){
263 printf("\033(B\0332");
264 }
265
Beep()266 void Beep(){
267 putchar(7);
268 }
abort()269 void abort(){
270 }
cont()271 void cont(){
272 Refresh();
273 }
274
275