1 /* --------- */
2 /* najicat.c */
3 /* --------- */
4 
5 /* naji standard output (usually screen) functions */
6 
7 /* this  .c  file is a part */
8 /* of libnaji version 0.6.4 */
9 
10 /* libnaji is based on   */
11 /* the original najitool */
12 
13 /* both najitool and libnaji */
14 /* are public domain and are */
15 /* made by the same author   */
16 /* please read license.txt   */
17 
18 /* made by NECDET COKYAZICI  */
19 
20 /* cat_tail, cat_head, showline */
21 /*     made by SACHIN MANE      */
22 
23 #include "libnaji.h"
24 
naji_license(void)25 void naji_license(void)
26 {
27 printf("\nTHIS PROGRAM IS NON-COPYRIGHTED PUBLIC DOMAIN AND DISTRIBUTED IN THE\n");
28 printf("HOPE THAT IT WILL BE USEFUL BUT THERE IS NO WARRANTY FOR THE PROGRAM,\n");
29 printf("THE PROGRAM IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER\n");
30 printf("EXPRESSED  OR  IMPLIED, INCLUDING, BUT  NOT  LIMITED TO, THE IMPLIED\n");
31 printf("WARRANTIES  OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.\n");
32 printf("THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM  IS\n");
33 printf("WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n");
34 printf("ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n");
35 return;
36 }
37 
38 
naji_credits(void)39 void naji_credits(void)
40 {
41 printf("\n");
42 printf("  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
43 printf("  najitool 0.8.4 and libnaji 0.6.4 Credits\n");
44 printf("  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
45 printf("  in order of joining the project najitool\n");
46 printf("\n");
47 printf("NECDET COKYAZICI - England, London - cokyazici@yahoo.co.uk\n");
48 printf("Main author, programmer, planner, designer, tester, debugger,\n");
49 printf("and project manager. Wrote everything that someone else didn't write.\n");
50 printf("\n");
51 printf("SELCUK OZDOGAN - Turkey, Istanbul - selcuk198@yahoo.com\n");
52 printf("Programmer. Wrote charbefr, charaftr.\n");
53 printf("\n");
54 printf("POLIKARP - Poland - polikarp@users.sourceforge.net\n");
55 printf("Programmer. Wrote strbline, streline, chchar.\n");
56 printf("\n");
57 printf("SAMUEL CHANG - Australia - badp1ayer@hotmail.com\n");
58 printf("Programmer. Wrote ttt, the fun Tic-Tac-Toe game with clever AI.\n");
59 nextpage();
60 printf("ARKAINO (YEHRCL) - Argentina - arkaino@gmail.com\n");
61 printf("Programmer. Wrote getlinks, find_basis,\n");
62 printf("findi_line, chstr, skipstr, naji_mp3.c\n");
63 printf("\n");
64 printf("SACHIN MANE - America, Arizona - sachin.mane@gmail.com\n");
65 printf("Programmer. Wrote cat_tail, cat_head, showline, bremline, eremline.\n");
66 printf("\n");
67 printf("MANUEL LE BOETTE - France - askoan@yahoo.fr\n");
68 printf("Programmer. Wrote lensorts, lensortl.\n");
69 printf("\n");
70 }
71 
72 
73 
74 
kitten(char * namein)75 void kitten(char *namein)
76 {
77 int a=0;
78 
79 najin(namein);
80 
81     loop
82     {
83     a = fgetc(naji_input);
84     if (a == EOF) endloop;
85     fputc(a, stdout);
86     }
87 
88 najinclose();
89 }
90 
cat_text(char * namein)91 void cat_text(char *namein)
92 {
93 int a=0;
94 
95 najin(namein);
96 
97     loop
98     {
99     a = fgetc(naji_input);
100     if (a == EOF) endloop;
101     if ( ( (a > 31) && (a < 127) ) ||
102          ( (a == '\n') ) ||
103          ( (a == '\r') ) ||
104          ( (a == '\t') )
105         )
106 
107 
108     fputc(a, stdout);
109     }
110 
111 najinclose();
112 }
113 
114 /* this is better for unix because you don't really need \r on unix do you */
cat_text_faster(char * namein)115 void cat_text_faster(char *namein)
116 {
117 int a=0;
118 
119 najin(namein);
120 
121     loop
122     {
123     a = fgetc(naji_input);
124     if (a == EOF) endloop;
125     if ( ( (a > 31) && (a < 127) ) ||
126          ( (a == '\n') ) ||
127          ( (a == '\t') )
128         )
129 
130 
131     fputc(a, stdout);
132     }
133 
134 najinclose();
135 }
136 
137 /* this is the fastest but doesn't include newlines or tabs */
138 /* because the ascii people didn't do them close by */
cat_text_fastest(char * namein)139 void cat_text_fastest(char *namein)
140 {
141 int a=0;
142 
143 najin(namein);
144 
145     loop
146     {
147     a = fgetc(naji_input);
148     if (a == EOF) endloop;
149     if ( ( (a > 31) && (a < 127) ) )
150     fputc(a, stdout);
151     }
152 
153 najinclose();
154 }
155 
repcat(char * namein,unsigned int repeat)156 void repcat(char *namein, unsigned int repeat)
157 {
158 int a=0;
159 unsigned int i=0;
160 
161 najin(namein);
162 
163 repeat++;
164 
165     loop
166     {
167     a = fgetc(naji_input);
168 
169     if (a == EOF)
170     endloop;
171 
172     for (i=0; i<repeat; i++)
173     fputc(a, stdout);
174     }
175 
176 najinclose();
177 }
178 
repcatpp(char * namein,unsigned int start)179 void repcatpp(char *namein, unsigned int start)
180 {
181 int a=0;
182 unsigned int i=0;
183 
184 najin(namein);
185 
186 start++;
187 
188     loop
189     {
190     a = fgetc(naji_input);
191 
192     if (a == EOF)
193     endloop;
194 
195     for (i=0; i<start; i++)
196     fputc(a, stdout);
197 
198     start++;
199     }
200 
201 najinclose();
202 }
203 
204 
205 
skipcat(char * namein,char * toskip)206 void skipcat(char *namein, char *toskip)
207 {
208 int skip = NAJI_FALSE;
209 int a=0;
210 int i=0;
211 int l=0;
212 
213     l = strlen(toskip);
214 
215 najin(namein);
216 
217     loop
218     {
219     a = fgetc(naji_input);
220     if (a == EOF) endloop;
221     skip = NAJI_FALSE;
222 
223     for (i=0; i<l; i++)
224     if (a == toskip[i])
225     skip = NAJI_TRUE;
226 
227     if (skip == NAJI_FALSE)
228     fputc(a, stdout);
229     }
230 
231 najinclose();
232 }
233 
onlycat(char * namein,char * toshow)234 void onlycat(char *namein, char *toshow)
235 {
236 int show = NAJI_TRUE;
237 int a=0;
238 int i=0;
239 int l=0;
240 
241 
242 najin(namein);
243 
244     l = strlen(toshow);
245 
246         loop
247         {
248         a = fgetc(naji_input);
249         if (a == EOF) endloop;
250 
251         show = NAJI_FALSE;
252 
253         for (i=0; i<l; i++)
254         if (a == toshow[i])
255         show = NAJI_TRUE;
256 
257         if (show == NAJI_TRUE)
258         fputc(a, stdout);
259         }
260 
261 najinclose();
262 }
263 
264 
rndbsout(unsigned long int size)265 void rndbsout(unsigned long int size)
266 {
267 unsigned long int i=0;
268 
269 srand(time(NULL));
270 for (i=0; i<size; i++)
271 fputc((rand() % 255), stdout);
272 }
273 
274 
rndtsout(unsigned long int size)275 void rndtsout(unsigned long int size)
276 {
277 unsigned long int i=0;
278 
279 srand(time(NULL));
280 for (i=0; i<size; i++)
281 fputc(((rand() % 95)+' '), stdout);
282 }
283 
284 
hexicat(char * namein)285 void hexicat(char *namein)
286 {
287 int counter = 0;
288 int hexbuf[20];
289 
290 unsigned int offset = 0;
291 
292 int a;
293 int i;
294 
295 
296 najin(namein);
297 
298 
299 	while (1)
300 	{
301 
302 		a = fgetc(naji_input);
303 
304 		if (a == EOF)
305 		{
306 
307 			if (counter == 1)
308 			fprintf(stdout, "                                                 ");
309 
310 			if (counter == 2)
311 			fprintf(stdout, "                                              ");
312 
313 			if (counter == 3)
314 			fprintf(stdout, "                                           ");
315 
316 			if (counter == 4)
317 			fprintf(stdout, "                                       ");
318 
319 			if (counter == 5)
320 			fprintf(stdout, "                                    ");
321 
322 			if (counter == 6)
323 			fprintf(stdout, "                                 ");
324 
325 			if (counter == 7)
326 			fprintf(stdout, "                              ");
327 
328 			if (counter == 8)
329 			fprintf(stdout, "                          ");
330 
331 			if (counter == 9)
332 			fprintf(stdout, "                       ");
333 
334 			if (counter == 10)
335 			fprintf(stdout, "                    ");
336 
337 			if (counter == 11)
338 			fprintf(stdout, "                 ");
339 
340 			if (counter == 12)
341 			fprintf(stdout, "             ");
342 
343 			if (counter == 13)
344 			fprintf(stdout, "          ");
345 
346 			if (counter == 14)
347 			fprintf(stdout, "       ");
348 
349 			if (counter == 15)
350 			fprintf(stdout, "    ");
351 
352 
353 
354 
355 			for (i=0; i<counter; i++)
356 			{
357 				if ((hexbuf[i] >= 32) && (hexbuf[i] <= 126))
358 				fputc(hexbuf[i], stdout);
359 
360 				else
361 				fputc('.', stdout);
362 			}
363 
364 			fputc('\n', stdout);
365 
366 
367 
368 			break;
369 
370 		}
371 
372 
373 		if (counter == 0 || counter == 16)
374 		{
375 
376 			if (offset == 0xFFFFFFF0)
377 			{
378 			fprintf(stdout, "OFFLIMIT:  ");
379 			}
380 
381 			else
382 			{
383 			fprintf(stdout, "%08X:  ", offset);
384 			}
385 
386 		}
387 
388 		hexbuf[counter]=a;
389 
390 
391 		fprintf(stdout, "%02X ", a);
392 
393 		if (counter == 3  ||
394         	    counter == 7  ||
395 	            counter == 11 ||
396 	            counter == 15
397 		)
398 
399 		fputc(' ', stdout);
400 
401 
402 		counter++;
403 
404 
405 		if (counter == 16)
406 		{
407 
408 
409 
410 			if (offset != 0xFFFFFFF0)
411 			offset += 16;
412 
413 
414 			for (i=0; i<16; i++)
415 			{
416 				if ((hexbuf[i] >= 32) && (hexbuf[i] <= 126))
417 				fputc(hexbuf[i], stdout);
418 
419 				else
420 				fputc('.', stdout);
421 
422 			}
423 
424 			fputc('\n', stdout);
425 
426 
427 			counter = 0;
428 
429 
430 		}
431 
432 
433 
434 	}
435 
436 
437 najinclose();
438 }
439 
440 
441 
442 
coffset(char * namein,long startpos,long endpos)443 void coffset(char *namein, long startpos, long endpos)
444 {
445 long filesize=0;
446 long i;
447 
448 najin(namein);
449 
450 filesize=najinsize();
451 
452 
453   if (startpos > endpos)
454   {
455   fprintf(stderr,
456   "Error, start position cannot be greater than end possition.\n\n");
457   exit(15);
458   }
459 
460   if (startpos > filesize)
461   {
462   fprintf(stderr,
463   "Error, start position is greater than the file size.\n\n");
464   exit(16);
465   }
466 
467   if (endpos > filesize)
468   {
469   fprintf(stderr,
470   "Error, end position is greater than the file size.\n\n");
471   exit(17);
472   }
473 
474 
475   fseek(naji_input, startpos, SEEK_SET);
476 
477   for (i=startpos; i<endpos; i++)
478   fputc(fgetc(naji_input), stdout);
479 
480 
481 najinclose();
482 }
483 
484 
485 
dumpoffs(char * namein,long startpos,long endpos)486 void dumpoffs(char *namein, long startpos, long endpos)
487 {
488 long filesize=0;
489 long i;
490 
491 najin(namein);
492 
493 filesize=najinsize();
494 
495 
496   if (startpos > endpos)
497   {
498   fprintf(stderr,
499   "Error, start position cannot be greater than end possition.\n\n");
500   exit(15);
501   }
502 
503   if (startpos > filesize)
504   {
505   fprintf(stderr,
506   "Error, start position is greater than the file size.\n\n");
507   exit(16);
508   }
509 
510   if (endpos > filesize)
511   {
512   fprintf(stderr,
513   "Error, end position is greater than the file size.\n\n");
514   exit(17);
515   }
516 
517 
518   fseek(naji_input, startpos, SEEK_SET);
519 
520   for (i=startpos; i<endpos; i++)
521   printf("%02X ", fgetc(naji_input));
522 
523 najinclose();
524 }
525 
526 
revcat(char * namein)527 void revcat(char *namein)
528 {
529 int a=0;
530 long pos;
531 
532 najin(namein);
533 
534     pos = najinsize();
535 
536     loop
537     {
538     pos--;
539     if (pos < 0) endloop;
540 
541     fseek(naji_input, pos, SEEK_SET);
542 
543     a = fgetc(naji_input);
544     fputc(a, stdout);
545     }
546 
547 najinclose();
548 }
549 
550 
cat_head(char * namein,int n_lines)551 void cat_head(char *namein, int n_lines)
552 {
553 int a;
554 int cnt=0;
555 
556     if (n_lines <= 0)
557     return;
558 
559     najin(namein);
560 
561     printf("\n");
562 
563     while (cnt < n_lines)
564 	{
565 
566         a = fgetc(naji_input);
567 
568         if (a == EOF)
569         break;
570 
571 		if (a == '\n')
572 		{
573             cnt++;
574             putchar(a);
575  		}
576 
577         else if (cnt <= n_lines)
578         putchar(a);
579 
580     }
581 
582 najinclose();
583 }
584 
585 
cat_tail(char * namein,int n_lines)586 void cat_tail(char *namein, int n_lines)
587 {
588 int a;
589 int i=0;
590 
591 long *fpos = NULL;
592 
593     if (n_lines <= 0)
594     return;
595 
596     fpos = (long *) malloc(sizeof (long) * n_lines);
597 
598     if (fpos == NULL)
599 	{
600 	    fprintf(stderr, "\n\nError, cannot allocate memory");
601 		perror(" "); fprintf(stderr, "\n\n");
602         exit(2);
603 	}
604 
605 
606     najin(namein);
607 
608     fpos[i % n_lines] = 0;
609     i++;
610 
611 	while (1)
612 	{
613 
614 		a = fgetc (naji_input);
615 		if (a == EOF) break;
616 
617 		if (a == '\n')
618 		{
619            fpos[i % n_lines] = ftell (naji_input);
620            i++;
621 		}
622 
623 	}
624 
625 
626     if (i < n_lines)
627     fseek(naji_input, 0, SEEK_SET);
628 
629     else fseek(naji_input, fpos[i % n_lines], SEEK_SET);
630 
631 
632 	while (1)
633 	{
634         a = fgetc(naji_input);
635 
636         if (a == EOF)
637         break;
638 
639         putchar(a);
640     }
641 
642 
643 free(fpos);
644 najinclose();
645 }
646 
647 
showline(char * namein,unsigned long line)648 void showline(char *namein, unsigned long line)
649 {
650 int a;
651 unsigned long cnt = 0;
652 
653     if (line <= 0)
654     return;
655 
656     line -= 1;
657 
658 	najin(namein);
659 
660     while (cnt != line)
661 	{
662         a = fgetc(naji_input);
663         if (a == EOF)
664         break;
665 
666         if (a == '\n')
667         cnt++;
668   	}
669 
670     if (cnt == line)
671 	{
672             while (1)
673             {
674                 a = fgetc (naji_input);
675 
676                 if (a == EOF || a == '\n')
677                 break;
678 
679                 putchar(a);
680             }
681 
682 	}
683 
684 najinclose();
685 }
686 
687 
688 
catrandl(char * namein)689 void catrandl(char *namein)
690 {
691 int a;
692 unsigned long number_of_lines = 0;
693 unsigned long random_line = 0;
694 
695 rndinit();
696 
697   najin(namein);
698 
699      while (1)
700      {
701      a = fgetc(naji_input);
702 
703      if (a == EOF)
704      break;
705 
706      if (a == '\n')
707      number_of_lines++;
708      }
709 
710   najinclose();
711 
712 
713   random_line = rand() % number_of_lines;
714   random_line++;
715 
716   showline(namein, random_line);
717 
718 }
719 
720