late night

Well I spent an interessting night, still havn’t solved the issue of whats wrong but I did accomlish a few things. Better code checking with gcc How to use lint How to use the GNU Debugger Personally I think that graphical front ends can have some very great advantages. But one should be able to use the basic tools by hand when/if necessary. As being able to live in a shell (no gui enviroment) is a part of my studies. So Being able to use a debugger on the CLI is important to me. Oh well each in turn. Most IDE’s provide some sort of user interface to wrap around the make and debuging tools. The basic idea that most compilers (so I’ve heard) follow including the GNU Compiler Collection gcc/g++ (gnu c/c++ compiler) use. Are as follows. gcc source.file -o outfile Now we don’t need the -o outfile if we like for example to compile our source.file into an execuitable named a.out in this case ! With the -o option we can choose a name for the execuitable. So ‘gcc rf.c -o rf’ would create an executible named ‘rf’ instead of ‘a.out’ from our rf.c source file. Is this any harder then Build->Compile in an IDE /w a mouse? Not really in my humble opinoin. Especially if you can sider that CLI access is embedded in many editors and many editors work in the CLI. Lets turn on some simple warnings gcc source.file -Wall -o outfile Now while one might argue any code that compiles and works is good enough. But what if it doesn’t work as exspected or it’s not very good? The -Wall option will at least give us a stronger warnings and errors about bad practices. Since -Wall turns on a bunch of warnings I’ll walk through some of them at the end. I personally have used -Wall since I found out there was an all switch (Thank you FreeBSD KNF Style manual!). And when it trips a warning message it usually reminds me I’m doing some thing wrong or I need to go correct a magic typomatical error. I noticed a few other niffty things in the OpenBSD KNF style guide. gcc -Wall -W -Wpointer-arith -Wbad-function-cast source.file -o outfile Gives us plenty of useless-to-semi-useful-to-useful information at times. Theres even more options. Since this is a lot more to type and I’m to lazy to whip up a little Makefile for all my stuff. I made a shell alias for it. I think its worth while to explore the available warning options and sort them as one needs. Note to self, work on some Makefile templets. Another intereing tool I always wanted to toy with, is lint. lint is a code checker for trying to detect features in C sources that are likely to be bugs, non-portable, or wasteful, e.t.c. The lint program h as a good enouhg manual which documents its command line switches but the basic useage is. lint source.c So far I like the -cehuz options most often and have an alias for it. And the -s and -p options from time to time have use hehehe. One thing I found odd about lint, is that it complaned about my // comments. rf.c(5): warning: ANSI C does not support // comments [312] Normally I use only /**/ comments and occasionally a few // in C++. Or I’ll mix /**/ and // comments if I’m leaving my self comments of diffrent types in a non-source file. Like /* Change done to something */ What I changed // Note for later for a meeting about it When I’m writing up files for things as I do’em. In this partuclar file how ever, since rf.c has been floating between systems a bit and editors I placed a pair of mode lines in it to set some options for my editors.

/*
* rf read file to standard out
*/

// vim: set noexpandtab ts=8 sw=4 ai :
// vi: set ai nu sw=4 :

Basically turn on line numbering in Vi and make sure my indentation settings are consistant, then turn on auto-indent in case I want it. (I don’t often use it). I remember, why I started using strictly /* Comments */ when I had always used // comments before. Was because I was told that some (older) compilers had problems with the newer // Comments. To use the GNU Debugger gdb to debug a program, first we need to enable the debugging symbols in GCC. We can do this by appending a -ggdb option some where in our compilation. gcc -Wall source.c -o outfile -ggdb Then we can run gdb outfile to start the debugger. At first when I tried looking at the debugger ages ago I didn’t have much luck with it. But after reading the manual like I usually do _before_ toying with CLI software it makes much more sense. You can get a topic list by typing help and more specific help like help breakpoints With GDB we can step through the program line by line, set break points at lines and/or functions. Examine data since as what value does variable foo have ? Run backtraces, look at the stack, set the command line arguments and all kinds of stuff. Really GDB deserves its own attention to the subject. Its long been my practice to save and pump code through GCC every few minutes or routines just to see if I missed any syntax errors I may have made. You don’t want to know how many times I’ve been preplexed just because I used a comma instead of a period or a period instead of a comma. And after hours infront of an editor couldn’t see the difference in my font lol – yes I am looking for a better fixed-width font ^_^ Now with lint and the various options of GCC I can do more for less 🙂 Since trying todo ANY THING during day light is pointless in this family. And trust me, when your the kind that inhales good manuals. And it takes you 30 minutes just to get through the first paragraph of a manual on PHP Syntax you know you have a fucking problem. So si nce I can’t code during the day. I have to do it late at night and I can’t do shit for long. So like 0735 in the morning these tools do kind of help me correct errors. From man 1 gcc Warnings are diagnostic messages that report constructions which are not inherently erroneous but which are risky or suggest there may have been an error. The -Wall option I listed turns on all this according to the manual Warn whenever a declaration does not specify a type. Warn whenever a function is used before being declared. Warn if the main function is declared or defined with a suspicious type. Warn whenever a function is defined with a return-type that defaults to int. Also warn about any return statement with no return-value in a function whose return-type is not void. Warn whenever a local variable is unused aside from its declaration, whenever a function is declared static but never defined, and whenever a statement computes a result that is explicitly not used. Warn whenever a switch statement has an index of enumeral type and lacks a case for one or more of the named codes of that enumeration. (The presence of a default label prevents this warning.) case labels outside the enumeration range also provoke warnings when this option is used. Warn whenever a comment-start sequence `/*’ appears in a comment. Warn if any trigraphs are encountered (assuming they are enabled). Check calls to printf and scanf, etc., to make sure that the arguments supplied have types appropriate to the format string specified. Warn if an array subscript has type char. This is a common cause of error, as programmers often forget that this type is signed on some machines. Some optimization related stuff. Warn if parentheses are omitted in certain contexts. When using templates in a C++ program, warn if debugging is not yet fully available (C++ only). From man 1 gcc: The remaining `-W…’ options are not implied by `-Wall’ because they warn about constructions that we consider reasonable to use, on occa sion, in clean programs. And here they are stright from the fine manual.

-Wtraditional
Warn about certain constructs that behave differently in tradi-
tional and ANSI C.

o Macro arguments occurring within string constants in the macro
body. These would substitute the argument in traditional C, but
are part of the constant in ANSI C.

o A function declared external in one block and then used after
the end of the block.

o A switch statement has an operand of type long.


-Wshadow
Warn whenever a local variable shadows another local variable.

-Wid-clash-len
Warn whenever two distinct identifiers match in the first len
characters. This may help you prepare a program that will com-
pile with certain obsolete, brain-damaged compilers.

-Wpointer-arith
Warn about anything that depends on the "size of" a function
type or of void. GNU C assigns these types a size of 1, for
convenience in calculations with void * pointers and pointers to
functions.

-Wcast-qual
Warn whenever a pointer is cast so as to remove a type qualifier
from the target type. For example, warn if a const char * is
cast to an ordinary char *.

-Wcast-align
Warn whenever a pointer is cast such that the required alignment
of the target is increased. For example, warn if a char * is
cast to an int * on machines where integers can only be accessed
at two- or four-byte boundaries.

-Wwrite-strings
Give string constants the type const char[length] so that copy-
ing the address of one into a non-const char * pointer will get
a warning. These warnings will help you find at compile time
code that can try to write into a string constant, but only if
you have been very careful about using const in declarations and
prototypes. Otherwise, it will just be a nuisance; this is why
we did not make `-Wall' request these warnings.

-Wconversion
Warn if a prototype causes a type conversion that is different
from what would happen to the same argument in the absence of a
prototype. This includes conversions of fixed point to floating
and vice versa, and conversions changing the width or signedness
of a fixed point argument except when the same as the default
promotion.

-Waggregate-return
Warn if any functions that return structures or unions are de-
fined or called. (In languages where you can return an array,
this also elicits a warning.)

-Wstrict-prototypes
Warn if a function is declared or defined without specifying the
argument types. (An old-style function definition is permitted
without a warning if preceded by a declaration which specifies
the argument types.)

-Wmissing-prototypes
Warn if a global function is defined without a previous proto-
type declaration. This warning is issued even if the definition
itself provides a prototype. The aim is to detect global func-
tions that fail to be declared in header files.

-Wmissing-declarations
Warn if a global function is defined without a previous declara-
tion. Do so even if the definition itself provides a prototype.
Use this option to detect global functions that are not declared
in header files.

-Wredundant-decls
Warn if anything is declared more than once in the same scope,
even in cases where multiple declaration is valid and changes
nothing.

-Wnested-externs
Warn if an extern declaration is encountered within a function.

-Wenum-clash
Warn about conversion between different enumeration types (C++
only).

-Wlong-long
Warn if long long type is used. This is default. To inhibit
the warning messages, use flag `-Wno-long-long'. Flags
`-W-long-long' and `-Wno-long-long' are taken into account only
when flag `-pedantic' is used.

-Woverloaded-virtual
(C++ only.) In a derived class, the definitions of virtual
functions must match the type signature of a virtual function
declared in the base class. Use this option to request warnings
when a derived class declares a function that may be an erro-
neous attempt to define a virtual function: that is, warn when a
function with the same name as a virtual function in the base
class, but with a type signature that doesn't match any virtual
functions from the base class.

-Winline
Warn if a function can not be inlined, and either it was de-
clared as inline, or else the -finline-functions option was giv-
en.

-Werror
Treat warnings as errors; abort compilation after any warning.

bounty

Plentiful day really. When I logged on both Valroe and Leon happened to be on. Ahh perfections start. Managed to get Miles for back up, Rasas office for ASCII support, TS2 for Voice over, TG#1 for operations and take care of some business.

Wiz has been showing me around the site. I’m really lucky to have some one to teach me. I know he didn’t, so he had to learn the hardway and fast often enough. Although I am sorry about the amount of AFK’age I’ve put him threw.

Oddly enough, ma was complaning that I “don’ do any thing but sit infront of that ing computer all day”. Well I think Wiz might disagree with her on that <_< ehehe!

Been working threw a nice book on html4/xhtml1/css2. I know that we’re on 1.0/1.1 recommendation & 2.0 working drafts for xhtml. But it helps. I do know my way around plane old HTML enough but I’m not familer with CSS. Casscading Style Sheets do how ever seem a good thing to learn. Oh well hehe. I also need to start learning PHP a bit, I want to inhale the manual some time along with a few others.

QTechnic

I’ve been working around in assistant and designer (qt3). Docuementation is pretty good and the system looks neat. TO be honest, I started on it because I was bored =/

When it comes to graphical toolkits I’m some what familer with Javas AWT (abstract window toolkit) as it was in the pre JDK1.0 days. I’ve never writen a AWT app. Dang gum it, get up for five minutes and the dogs all ready bamboozled me out of my spot ! So far I think I like QT, good solid documentation. Good GUI for making a GUI, and seems a pretty smart system for building graphical applications. I prefer ANSI C to C++ but C++ does have its virtues.

I once started a GTK+ C tutorial but I couldn’t stand the examples… To much of the GNU coding style in it. Just seeing a function ( like, this ); makes me cringe !

Personally I like functions like this:

type
name(parm1, etc); {
/* code */
}

and thats generally how I write C. When I first started learning programming in C++ I wrote out in the style the tutorial dictated, namely.

int main()
{
// Code
}

As various coding styles have always interested me and I like the idea of beauty meets readibility. I some how developed an attraction to keeping the opening sqiggy brace on the same line rather then the next line. I don’t know why but I find it more astectic.

sighs und curses

Been thinking a bit about a friends remark… A good mixture of delight and desiaseter in such thoughts but oh well. A spider can always dream. The odds of a girl friend as nutty about computers as I, is sadly slim. I’m the most “geeky” person I know in town. Aside from professionals with comute I’m also probably the only person in town who knows *nix.

Any way, I’ve been learning a new library. I’m some what able with the standard C library if a tad un-skilled. Not like I have many excuses for using every routine in my spare time xD So I’ve started on ncurses, much more interesting then GUI development IMHO because in a console level of usage. A good UI is a must, at least to be powerful yet eligent the way that Vi or Emacs are.

So far I’ve learned how to create a little window box and move it around with my arror keys. Not really useful but the concept it thought me was.

Mainly that we can loop threw calling getch() or simular routine till we get to our desired escape method. And use a switch/case setup to implement what we want to do on a given input. Like

/* from the file */
while((ch = getch()) != KEY_F(1)) {
switch(ch) {

case KEY_LEFT:
destroywin(my_win);
my_win = create_newwin(height, width, starty,--startx);
break;
case KEY_RIGHT:
destroy_win(my_win);
my_win = create_newwin(height, width, starty,++startx);
break;
case KEY_UP:
destroy_win(my_win);
my_win = create_newwin(height, width, --starty,startx);
break;
case KEY_DOWN:
destroy_win(my_win);
my_win = create_newwin(height, width, ++starty,startx);
break;
}
}

This and the ideas that come to me with this concept. Blow my mind away, I never thought that much about it. Really the most I thought about such things were based on Javas AWT. Although I’ve writen very little Java and I like it that way. I probably am most familer with Java then any other high-level language but I really do prefer C.

Hopefully in time, I’ll learn a lot more and maybe can work on some thing I’ve always wanted to do. You see, one part of my studies has been to try and take what I’ve learned and implement some thing. In the paste I’ve used an integer calculator to redesign to test my understanding of various ideas. I remember the first one I worked on, maybe 2 years ago was testing my abilities with Functions when I first started to learn C++

One of my hearts secret desires has been to design a niffty text editor, dang I’d love it. I could learn so much and working on it would give me some thing to do. If I could, I’d even like to try and implement a ‘vile’ style that merges vi/vim/emacs commands into a single modal editor. Plus give me a chance to make GUI front ends, good excuses to learn more OO and GTK/QT, maybe add wordstar key setups as an excuse to learn them. Not really necessary but still it’d be a fun project for my young mind to toy with.

dang it, my minds starting to wonder off to the first paragraph of this post, time to hit Vi and play with gcc.

Overload it !

Well, one thing I wanted to do with the little script I tossed together to rip out left over & broken symlinks from the Amarok.pbi. Was to make it possible to use it on any broken symlink. I redid it real nice and simple

blgrep.sh pattern options

i.e. grep for this and pass options to rm in case its needed. The only problem is that the type of file to track down was hard coded, i.e. ‘@’ or symbolic link. (man 1 ls). So I’ve made it much more compucated then it had to be to make it usable for just about any thing ls -F and file gives me. Usage is pretty simple and the path defaults to the current directory.

blgrep [path (optional)] [grep pattern] [rm options (optional)] [type, i.e. /*@%=|]

Still toying with it on how to improve its workings. Not really necessary to do any of this but I did enjoy the chance to get to know getopts/OPTARG/OPTIND, case and break/continue as they apply to BourneShell a bit more then I did. Doesn’t seem much different then what I’m used to really.

#!/bin/sh
# broken link grep
#
# This was writen to track down broken symbolic links. With some modifications
# it has been made to grep other things to kill.
#
# Probably should rename this file rmgrep or some thing.
#

export PATH='/bin:/usr/bin'

D_FLAG="./" # Directory to list
G_FLAG="" # Pattern to grep files output for
R_FLAG="" # Options to pass to rm
T_FLAG="" # For sed in ls|grep|sed pipeline
OPT_FLAGS="" # Storage

usage() {
echo ""
echo "Usage: blgrep [ -d PATH -g PATTERN -r RMOPTIONS -t TYPE]"
echo ""
echo "PATH is passed to ls, PATTERN passed to grep, RMOPTIONS"
echo -n "is passed to rm. See ls(1) for the -F option for more"
echo " info on TYPE"
echo ""
}

hunt() {
for BL in `ls -F "$D_FLAG" | grep "$T_FLAG" | sed "s/$T_FLAG//g" 2> /dev/null`
do
DEL=$(file $BL | grep "$G_FLAG" | sed 's/:.*//g' 2> /dev/null)
echo Removing: $DEL
rm $R_FLAG $DEL
# Havn't tested R_FLAG since before the getopts conversion.
done
}

################
# START #
################

if [ ! $1 ]
then
usage
fi

while getopts d:g:r:t:h OPT_FLAGS
do
case $OPT_FLAGS in
d) D_FLAG=$OPTARG;;
g) G_FLAG=$OPTARG;;
r) R_FLAG=$OPTARG;;
t) T_FLAG=$OPTARG;;
h) usage;; # Help
?) usage;;
esac

hunt # remove all matches
done

QNote

I want to rewrite the mkXML function and merge it withmuch of the code from fkBranch_AutoPB.sh. That way I can turn it into a flexible routine that will generate a PBC file accordingly iiregardless if it’s run from interactive or batch modes.

Mergemaster

Started merging files today, after a fit of the screamming heeby jeebies. Phone ringing off the hook, getting A.F.K.’d every 2 minutes and playing 20 Questions with ma. My brain could sync back to work…

mkProject has become a mondo sized function but is now fairly complete and handles the split between interactive and batch modes it self. The batchJob function will be most of fkBranch_AutoPB.sh.

Rather then line of execution being

Interactive or batch test
run mkHome, mkProject, mainLoop e.t.c.
or run batchJob
fkBuild

It is now more like this
mkhome
mkproject
Interactive or batch test
run batchJob if batch
run mainLoop if interactive
fkBuild

Where mainLoop is the interactive root function that all the interactive I/O and configuration methods lay. The batchJob call just starts processing the information from the data. I’m also adding a usage function.

scrap

Well, I’m a bit leery about it but I’ve done it. I’ve posted fkBranch_AutoPB.sh on PC-BSDs forums. I had hoped to have a proof-of-concept out of this scraptest file before I delete it but I doubt that will happen without help. I also wanted to merge it into pbshell.sh and complete the last stuff so I’d have both interactive and batch modes covered plus the planB method of PBI Creation.

The scripts not pretty but its just garbage for testing work, glad I don’t really write finished shell scripts like that..

Been busy attacking an old Java source book. it dates back to before JDK1.0 but its a fun read. Maybe I’ll take up Java I dunno. Recently I’ve been rather bored with most languages. Perl and Java study have kept me busy but the more I look into perl the more it looks like a great tool you don’t want to have to read what some one else wrote some day just to quickly fix a problem and never rewrote it. Java I’ve never cared for the extra OOTyping needed but its more C/C++ like then Ruby or Python and still a nice language. AWT looks like a simple to learn setup but I’ve yet to see many Java apps that look nice. I don’t know what is the most often used these days though, AWT, SWT, Swing, or other standard issue.

Being idle recently has been annoying, without any thing to work on what fun is there having some of the greatest tools ever made?

You know as long as no one changed the hier for home directories I could interate through each one setting up the icon files. If I could use PBC to just pack the project directory and do the rest with my script. It could work but that would mean for batch mode to work a special but very simple for joe blow to write project file would have to be created. HmmmmmM !!!!

bored

Without being able to make any progess with getting an automated PBI creAted. And about as much info about whats wrong with the PBC file I ran through PBC.

I basically have nothing better to do then toy with typing tests and ancient computer history. It would be so nice if some one could help figure out why PBC does not work with the PBC files.

sigh…

Trash, FUnk, and Crapola.

Some times I feel, as if I speak and no one cares. Maybe I should just learn to keep my mouth shut and my business to my self. I don’t know any more.

Perhapes I should halt my work, let it rot and be done with it. Just go home and head out to the CQC Range with team mates. Life can be a load of bollocks some times… So far I’ve been wanting very much to start re-learning emacs but I can’t stand the infernal editor ! I remember when I started I couldn’t handle Vim so I tried XEmacs and learned it all right. While I don’t remember the keybinds well I remember them enough, I’m just to “Vi minded” to use emacsen. Also my Vi User how to post is nearly finished, I’ve but a few more things to add to it.

Untill I can find out what is wrong with the PBC file created by my proof-of-concept scraptest or get necessary data on how to bypass PBC all together. Most of my work is for naught. Dang it, I remember I started the day before thanksgiving and practicly sat at my laptop for three days. I’m not really a shell scripter by nature, although I’ve vastly improved. I worked like a dog to get as much done while having to learn and prototype several things on the go +work ITRW. Took a few days off then hit at it again and again and again. As time would allow, now it’s in pretty good shape (near alpha imho) and with a proper rewrite my scraptest files could be fused into the main implementation.

Yet with out some fscking help to deal with PBI Creator or by pass it there is little more I can do, execpt maybe refine my icon configuration and finish the PBI.*.sh generator. My plans have been for it set up the PBI file to automatically do detection if the PBI is preinstalled or optionally a conficting/old version when ran. Maybe I should just change the files to bear the GPL (barf) and post them on the forums for some one else to deal with, I ‘m getting sick of this $]-[|+. I started work in November, it’s nearing January now and I can’t continue very much alone.