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