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