
najitool is an open source public domain program created in 2003 by Necdet Cokyazici.
najitool is written in C using the ANSI C standard. It currently consists of file manipulation
functions such as file converting, filtering, formatting and patching. najitool also has over a
hundred other different functions such as an every possible byte combination files generator,
which produces every possible file that could exist with the specified file size.
It has an Arabic to English and English to Arabic transliteration system.
I am very happy at how much the najitool project has grown.
What started out as a very small and simple program has grown
into a fairly large library of functions (libnaji),
and a user friendly Graphical User Interface version called naji_gui.
Of course, the first release of najitool is still available with full source code
which should be very helpful to people beginning to program in the C programming language.
Every new release is like a new lesson in programming, every new release gets more intricate.
I would like to thank sourceforge for hosting najitool, libnaji, and naji_gui and I would also
like to thank the contributors and users of my programs and libraries, and I hope you enjoy
using them as much as I enjoyed programming them.
History
najitool was originally meant to be called najitools but I decided to call it najitool because of the 8.3
character file name length restrictions on DOS systems. The first version of najitool started off as nine small
stand alone programs, but the following version had all the functionality of the stand alone programs implemented
into a programming library called libnaji which was used by najitool, the new standalone program rather than the
original design as the "najitools suite". From that version on the new design was kept, and each new release of
najitool was accompanied by a release of libnaji. Earlier versions of najitool were poorly documented, but
I gradually started explaining each of it's functions to some extent in the new documentation.
The najitool project was only worked on by one programmer for a while, but some contributors have written
new functions.
What is najitool?
najitool is a portable and fast command line tool, with the goal of providing every function someone could possibly need in a single program.
What is libnaji?
libnaji is a library of functions which najitool uses, and other programmers
could use in their own programs.
What is naji_gui?
naji_gui is a GUI (Graphical User Interface) version of najitool for Microsoft Windows. naji_gui should be a lot easier to use than najitool for the average computer user, but it may not have as many features as najitool, nor is it as well tested as najitool. If you have a problem using naji_gui, you should use najitool instead.
What does najitool do?
Generally, najitool generates, converts, filters, and encrypts files. It also has a lot of other miscellaneous functions,
such as an Arabic to English letters and vice versa transliteration system, it has programming functions like bin2c which
makes a compileable source code file out of any file, like picture files for use in a C program.
najitool can generate:
najitool has:
najitool has reached its original goal of generating every possible file you specify at a fixed size, now I need to work on generating every possible file out of a checksum.
What license does najitool, libnaji, and naji_gui use?
Public domain, meaning it is completely free, without any restrictions,
please read the License for warranty information.
Who is the author of najitool, libnaji, and naji_gui?
NECDET COKYAZICI
What does your name mean, and how is it pronounced?
My firstname Necdet is a made up name that originated from
Iraq at the time of babylon which means "Bravery", but the
name is also used in Turkey. I'm from Turkey not Iraq.
Necdet is Pronounced as Nejdet in English, but there
is also a similuar name called Nejdet which is exactly
how it's written in Turkish, but it's pronounced different
from Necdet, the C's in Turkish are pronounced just like
J's in English, but the J's in Turkish are pronounced
differently, I'm not sure what language to compare it to,
but ask someone to teach you the sound of the Turkish
J if you want.
My family name/surname Cokyazici, the C at the start
is written differently than how I wrote it on this website.
The C at the start is similar to the French letter C which
has a little tail at the bottom. That Turkish letter
is pronounced like Ch in English. And one last note is
the i's in ici, remember C's are like J's and those
i's are i's without dots, which the sound is kinda
hard to describe. You could ask someone how to pronounce
the Turkish letter, i without a dot at the top as well.
The meaning of Cokyazici is someone who writes a lot,
or a writer who writes a lot. And it's pronounced
Chokk-yazz-uh-juh.
So to summarize:
Meaning: Brave Compulsive Writer.
Pronunciation: Nejdet Chokk-yazz-uh-juh.
How can I contact the author of najitool, libnaji, and naji_gui?
Send an e-mail to (EMAIL REMOVED, 1000 SPAM EMAILS A DAY, AND 100 PEOPLE ADDING ME TO MSN EVERYDAY)
you can also add that e-mail address to MSN Messenger.
What programming language is najitool programmed in?
najitool is programmed in pure ANSI C, so it should compile
and work on any ANSI C compliant compiler and system.
Basically, it should compile and work in any compiler
and system.
Who would want to use najitool?
I have made this as an example for people begining
programming in C, I hope you you find it useful.
How did najitool start?
Most of the things I have written so far, were for what I needed at that
time, such as altering files which I had, to make some things easier to do.
Why did you make naji_gui when najitool does the same thing?
Because most people that I know use Windows and don't know how to use
command-line programs, and they complained about "a black screen appearing
then disappearing", because they didn't know that najitool had to be run in
the command program (cmd in XP), so I decided to make a Windows GUI version
which I thought was a good idea, otherwise no one would have used najitool probably.
Is najitool and libnaji in FreeBSD ports?
Yes, they are:
/usr/ports/misc/najitool/
/usr/ports/devel/libnaji/
How many systems does najitool work on?
So far I have been able to compile najitool on machines and operating systems
that have been available to me. I have sucessfully compiled and tested on the
following systems:
DOS x86 CPU Architecture
Windows x86 CPU Architecture
MacOSX PPC G4 CPU Architecture
Linux x86 CPU Architecture
Linux Alpha CPU Architecture
Linux AMD64 CPU Architecture
FreeBSD x86 CPU Architecture
OpenBSD x86 CPU Architecture
NetBSD x86 CPU Architecture
Solaris SunOS x86 CPU Architecture
Solaris SunOS Sparc R220 CPU Architecture
What kind of computer do you use?
I use two computers:
New Computer:
Brand: Custom Built
AMD Athlon 64 X2 Dual Core Processor 4200+, Socket AM2
(Two processors running on a single chip each at 2.2GHz)
2GB DDR2 RAM
Western Digital 320GB SATA2 HDD
Maxtor 200GB IDE HDD
Maxtor 60GB IDE HDD
Onboard LAN, Audio, and Graphics (not used)
Intel 56k Data/Fax/Voice Modem (not used)
Nvidia Geforce 7600 GT 256MB Graphics Card
Ace 19 Inch Widescreen TFT LCD Monitor
Belkin 2 USB ports PCI Card
With Microsoft Windows XP Professional SP3 Operating System
Old Computer, now spare pieces inside cupboard:
Brand: Compaq Deskpro EP/SB Series
No Case
Intel Pentium III Proccesser at 650MHz
256MB of RAM
Sound Blaster Live! Sound Card
ATI Radeon 7000 64MB Graphics Card
Belkin 100Mbit LAN PCI Card
RELISYS 19 Inch Monitor
I've used the following operating systems on both computers:
FreeBSD Operating System
Which I think is the most reliable and stable operating system,
I never had a single crash till this day. You can get it here:
http://www.freebsd.org/
And Debian GNU/Linux Operating System
One of my favourite Linux distros, you can get it here:
http://www.debian.org/
The new computer has a 24mbit Internet connection on an ADSL2+ Speedtouch Router.
Why do you compile for i386 when you don't own a i386?
Some people might still be using an i386.
What does Naji mean?
Naji is an Arabic male name which means saved/rescued. The name suits the project
well because I rescued the version 0.2.1 source code that I was working on after
I accidently deleted it, I was too sleepy to realise what I was doing when
I was trying to compile it, I did this command by accident and it got deleted:
gcc -o najitool.c libnaji.o najitool.c
which should have been...
gcc -o najitool libnaji.o najitool.c
The -o part means the output name for the compiled program because gcc deletes the output before it makes the new one najitool.c got deleted as well because I specified it to be the output. But luckily I had some bugs in the source code that prevented it to compile otherwise the deleted file would have been overwritten. Usually, when a file is deleted it isn't really gone, just marked as free space on the file system/partition/slice. I used TCT in FreeBSD in /usr/ports/sysutils/tct which I used to recover it, along with the stdin version of cat_text which I wrote to filter out the output of unrm to only text, the output of unrm was only 2.7GB because of the filtering I done. unrm is a very good program in TCT that outputs the contents of the free space of a partition/slice, thanks to the people that made it, I then did:
grep " najitool.c " -A1000
to get najitool.c back, -A1000 means show 1000 lines after, you can do -B10 as well, which shows ten lines before, but I think that makes the whole process slower.
What are your plans for najitool?
The orignal goal of najitool was to generate every file possible to exist, and
the user could set what type of files they want to produce, like every single
possible BMP (bit map) image, every possible WAV (wave) sound file, every
possible MPEG movie file. I guess you can imagine the possibilties of this
with super fast computers in the future, every possible thing said would be
able to be generated, every possible image would be able to be generated.
I also wanted to make the user be able to make every possible file able to be
generated with the checksum they give, like MD5sum, and also additional
information like the file size.
I have implemented the every possible file generator, you give a fixed size for example 10 bytes, and it generates every possible file of the length 10 bytes.
najitool allfiles 10
I am now working on the every possible BMP file (picture file) generator and every possible wave file generator but I need to learn the wave sound format better to make human like voices etc, imagine that, if 3 seconds of every possible sound was generated of trillions and trillions of files. A normal person would'nt be able to go through that many files in their life time, but maybe someone can develope a program that can try to see if it is like human speech etc. My main reason for wanting to make something like this was because I was hoping in the future they would store this information in storage devices and a user just gives a code around 400 bytes long and the file will be there instead of downloading from the internet, a kind of of compression. I now realize it is impossible to store every possible file ever possible to exist in a storage device, no matter how much computer technology advances, infinate amount of storage space will not be possible. But maybe najitool will be able to generate any file with a small amount of data you give it like 400 bytes, in future versions, imagine how useful that would be, computer magazines could just write a list of checksums for older CDs to be able to be generated with najitool, people could backup a lot of data, even memorize the small amount of data to be able to be generated with najitool.
I've rewritten this section because some people misunderstood me to mean compression,
because of how badly I wrote this section. Sorry about that, I was too tired to
make any sense when writing this bit the first time, I mixed up all my ideas in a rush,
and I didn't expect anyone to even bother reading it let alone comment about it.
So I never bothered checking it or
updating it after the first time I wrote it, as far as I can remember.
Yes, I plan to add compression functions to najitool some day, but I can't
make a compression format that's mathematically impossible,
like compressing a highly random trillian yotabytes file to only a 400 bytes file
as some people might of misunderstood me to mean. I meant something else,
carry on reading, and I hope you understand what I meant this time.
By the way, anyone looking for good compression software, najitool is not it,
and probably will not be for a long time. KGB Archiver has the
highest compression rate, the next after that is 7-Zip, and the
next after that is RAR, as far as I know.
The orignal goal of najitool was for it to generate every file possible to exist, and
the user being able to specify what type of files they want it to produce.
Including but not limited to:
Every single .BMP (bit map) picture file ever possible to exist.
Every single possible .WAV (wave) sound file ever possible to exist.
Every single possible .MPEG video file ever possible to exist.
I mean at their most popular current specs, there are different
versions of .bmp, .wav, and .mpeg files, and may be different versions in the future.
I want the user to be able to specify the version as well, and najitool updated
when needed to support newer versions.
I guess you can imagine the possibilties of najitool (updated to support
4096bit Quadripple Quad Core Processors or whatever) with super fast computers in the future.
Every possible thing said would be able to be generated.
Every possible image would be able to be generated.
I have implemented the every possible file generator, you give a fixed size for example 10 bytes, and it generates every possible file of the length 10 bytes.
najitool allfiles 10
Some people consider najitool and the files it generates to be junk.
Have you heard the saying "one man's junk is another man's treasure"?
How did you do this homepage?
What is your favourite text editor?
This page was last updated on the 18th of August, 2008.
My main reason for wanting to make something like this was because I was hoping I could
make a new function later on which generates a single 700MB .ISO file (free operating systems for example)
with najitool instead of downloading it from the internet. By giving
it a small amount of data, like a checksum along
with other information like file size, and what type of file it is, and some other
algorithm to speed up the process, and all that information being no more than 400 bytes
so people will be able to memorize it.
I'm still not sure on what algorithm to use for that, but I have some ideas.
Idea 1:
Generate a file out of a checksum algorithm which does not produce
two identical checksums from two different files. Additional information
like the file size could be given to speed up the process.
NOTE: A lot of checksum algorithms produce the same checksum even with lots of different files.
Anyone know of a checksum system that does not produce identical checksums
from different files? if so, please message my sourceforge username: naji
MD5sum is a good checksum system but I heard it is possible for it
to make identical checksums from different files, unless they fixed
it now in newer versions.
Idea 2:
Either generate it out of a checksum file or a .torrent file or something like it.
If you're wondering how could it work with a .torrent file, I was thinking
najitool can have a function which loads a .torrent file, and makes
a fake P2P torrent network in the memory, with fake seeds, and peers
all sending small amounts of random data, and the function checks the .torrent file
to see if they got the checksum right, then it saves that bit of the file(s).
And eventually it will generate the file. But this is just my wild guess,
I don't understand the .torrent format too well or the Bit Torrent protocol.
I'll do more research some day to see if this is possible. If it is,
then it would be useful for computers without an internet connection.
Idea 3: (where some people got confused about compression, rewritten to make more sense)
Somewhere in the late future someone could store all the files generated with najitool on an extremely
high capacity storage device. Then there would be a new "fetch" function
on najitool that gets the file you want by giving as little amount of
data as possible, for example around 400 bytes long. Then the file would
be able to be read from the "high capacity storage device".
Instead of downloading from the internet, "a kind of compression" but not quite
because the files are already there on some extremely high capacity storage device.
By using the phrase "a kind of compression" I meant because you use such little data
to "fetch" a large file like a 700MB file, in a way it's kind of like compression but
there is no compression involved because the file would already be there on
the high capacity storage device. I realize it is impossible to store every possible
file ever possible to exist on a storage device, no matter how much computer technology advances,
infinate amount of storage space will not be possible. So there will be a size limit to
amount of generated files stored on the high capacity storage device for the files
to be fetched.
How this should be done is not with checksums, compression, random
data, or anything like that, the high capacity storage device should use a special file system, to store
only the generated files, no file names, just use minimal amount of data to seperate the files
on the file system, something like a word list. Then you should load your file with najitool,
which checks the file, then it checks the "high capacity storeage device" to find a match.
Then it gives you a 400 bytes code lol, for you to give to someone else who has the same
"high capacity storage device" with the same data generated on it. But it should
have a second version of the file system it might use some day, optimized for
"najitool match" and "najitool fetch" to make it a lot faster to process.
I'm thinking the command should be something like.
# najitool match my_lifes_work_700mb.iso /dev/hcsd01
najitool: Memorize the following data or store it to a text file...
lmG`65.$:gG]~*dutpkq;T CY;%f 4t;9iyIHdW:bVG+iHv&vprB{[Ru>#Kz'h=B]'!+sdxzo%b{.Wy\#2w*ZcbSFK'!Sugj-'9BZ~.Vi*VM{w ^/N@8>O?:^S hbhmuEXeYTKZ<7lPl+{Yl[gM*)C~M4:T&N)h"gPu]BSJ`#h$YN:5gj
najitool fetch /dev/hcsd01 /home/naji/my_lifes_work_700mb_test.iso
Enter code to fetch file:
lmG`65.$:gG]~*dutpkq;T CY;%f 4t;9iyIHdW:bVG+iHv&vprB{[Ru>#Kz'h=B]'!+sdxzo%b{.Wy\#2w*ZcbSFK'!Sugj-'9BZ~.Vi*VM{w ^/N@8>O?:^S hbhmuEXeYTKZ<7lPl+{Yl[gM*)C~M4:T&N)h"gPu]BSJ`#h$YN:5gj
Processing 67%
Fetching complete.
# mrfilecompare my_lifes_work_700mb.iso my_lifes_work_700mb_test.iso
mrfilecompare: I have not found any differences in those two files.
# mrchatprogram
Logged In.
mrprograma: hey, I just finished implementing idea 3 into najitool from 200 years ago.
mrsprograma: really? does it even work properly?
mrprograma: yeah it does, let me send you the archive with the compiled program.
-- sent file najitool-v359.5.2 to mrsprograma
mrprograma: this is the code to my lifes work:
lmG`65.$:gG]~*dutpkq;T CY;%f 4t;9iyIHdW:bVG+iHv&vprB{[Ru>#Kz'h=B]'!+sdxzo%b{.Wy\#2w*ZcbSFK'!Sugj-'9BZ~.Vi*VM{w ^/N@8>O?:^S hbhmuEXeYTKZ<7lPl+{Yl[gM*)C~M4:T&N)h"gPu]BSJ`#h$YN:5gj
mrprogram: the instructions are in the archive i sent you try it out and tell me if it works.
(over an hour later)
mrsprogram: yes it works, i can see all the books you've ever written in this .iso file it fetched,
but it took an hour just to format and generate the files on my HCSD drive. I could of downloaded
it in a millisecond with my internet connection if you just sent me the .iso file instead.
mrprograma: yeah i know but keep the code and the program, if your internet connection
ever gets cut off, i can tell you new codes on the phone to generate other important files.
mrsprograma: ok
Ok that was pretty stupid, but anyway it was just an idea, I probably wont even bother,
but maybe Mr. Programa will in 200 years time lol. I done absolutely no serious
calculations when thinking of all this. It was just an idea since I had when
I was around 10 years old. I got the torrent idea later on, when I was around
16 years old which was when I first started najitool in 2003.
But maybe some day najitool will actually be able to generate any file with
a small amount of data you give it like 400 bytes (versions far into the future).
Imagine how useful that would be, computer magazines could just print a list of
400 byte data in their pages for older CDs to be able to be generated or fetched with najitool,
people could backup a lot of data, even memorize the small amount of data.
Also Imagine if 3 seconds of every possible sound was generated of trillions and trillions of files.
A normal person wouldn't be able to go through that many files in their life time,
but maybe someone can use image and sound recognition software
to check each of the files generated with najitool if it is like
human speech, or some recognizable pictures are generated etc.
I am now going to work on the every possible BMP file (picture file) generator and
every possible wave file generator but I need to learn the wave sound format
better to make human like voices etc. After I finish everything on the TODO list,
I'll start working on a better .bmp and .wav generator. I never released
the bmp and wave generator similuar to allfiles because I wrote them so
crappy, I gotta make a better versions, instead I just released naji_bmp
as a demo on what I planned to do, so people get an idea.
So the plans for najitool in the near future are:
1. I'm writing a very flexible word list generator and maker,
it's already turning out pretty nicely, I started working on it
fairly recently so it isn't finished yet. But I plan to make
that as fast as possible with ANSI C and add that to the new release.
2.
Complete TODO list, but forget about image/audio/video conversion functions
because there are a lot of good and free programs out there that already have
that functionality. ffmpeg and mplayer's mencoder are pretty good
for converting video formats, and to do stuff with image sequances.
3. Complete wave and bmp generator, make it like allfiles, but with more meaningful data.
4. add more formats.
6. make najitool version 1.0.0 after extensive testing and debugging
7. take another 2 year break (Sorry about that).
8. 2 years turns to 50 years, and I forget all about najitool.
9. 200 years in the future Mr. Programma adds the format, generate, match and fetch function to najitool lol.
I really gotta draw a picture of him some day lol, he'll probably look like something out of mr. men or something lol.
Anyway, make up the rest yourself after that, and let's hear some Terminator jokes as well ;)
But please, no jokes on the name najitool, I've heard them all, najis tool, (najis means filthy in Arabic),
naji's tool (don't want to explain what that implies), naji's stool (naji's crap), najis stool (filthy crap) lol.
I've also heard all the jokes about the name "naji" itself like jina and jain (jena and jane) lol.
And no jokes that would personally offend me :(
It was originally written with vim
http://www.vim.org
it was best viewed with lynx back then
http://lynx.isc.org/
then I edited it with mcedit, kwrite, and jed. The first logo
I did with xpaint, the second logo I did with Adobe Photoshop CS ME (ME stands for Middle Eastern),
and the current logo was done with the same program by a friend of mine named Dawood.
The tiled background and najitool badge was done by another friend named Ali.
My favourite text editor is mcedit. If you're looking for mcedit for
FreeBSD, it's in /usr/ports/misc/mc/

Here is a picture of me, NECDET COKYAZICI,
the author of najitool, libnaji, and naji_gui.
I'll fix it some other time, I'm so
sleepy right now lol.
All trade marks mentioned are of their owners.