Newsgroups: comp.sources.unix From: glover@credit.erin.utoronto.ca (Mike Glover) Subject: v29i081: cdk - curses development kit, V4.6.0, Part08/09 References: <1.821493023.9103@gw.home.vix.com> Sender: unix-sources-moderator@gw.home.vix.com Approved: vixie@gw.home.vix.com Submitted-By: glover@credit.erin.utoronto.ca (Mike Glover) Posting-Number: Volume 29, Issue 81 Archive-Name: cdk-4.6.0/part08 #!/bin/sh # This is `part08' (part 8 of a multipart archive). # Do not concatenate these parts, unpack them in order with `/bin/sh'. # File `cdk-4.6.0/swindow.c' is being continued... # touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo echo 'WARNING: not restoring timestamps. Consider getting and' echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # if test ! -r _sharseq.tmp; then echo 'Please unpack part 1 first!' exit 1 fi shar_sequence=`cat _sharseq.tmp` if test "$shar_sequence" != 8; then echo "Please unpack part $shar_sequence next!" exit 1 fi if test ! -f _sharnew.tmp; then echo 'x - still skipping cdk-4.6.0/swindow.c' else echo 'x - continuing file cdk-4.6.0/swindow.c' sed 's/^X//' << 'SHAR_EOF' >> '_sharuue.tmp' && XM=VEN9&]W+3YL969T0VAA$QE9G1#:&%R("L@,3L* XM("`@("`@("`@("`@("`@("!B#L*("`@("`@("`@("`@("`@("!]"B`@("`@("`@("`@("`@("`@96QS XM90H@("`@("`@("`@("`@("`@('L*("`@("`@("`@("`@("`@("`@("!"965P XM*"D["B`@("`@("`@("`@("`@("`@?0H@("`@("`@("`@("`@("`@(&)R96%K XM.PH@("`*("`@("`@("`@("`@8V%S92`G;"<@.@H@("`@("`@("`@("`@("`@ XM('@@/2`H:6YT*2`H"`^/2`P("D*("`@("`@("`@("`@("`@("!["B`@ XM("`@("`@("`@("`@("`@("`@"`\('-W:6YD;W%T@(3T@*&-H='EP92`J*4Y53$PI"B`@("`@("`@('L*("`@("`@("`@("`@ XM=W)I=&5#:'1Y<&4@*'-W:6YD;W"MS=VEN9&]W+3YC=7)R96YT5&]P XM72P*"0D)2$]225I/3E1!3"P*"0D)"MS=VEN9&]W+3YC=7)R96YT5&]P72D["B`@("`@ XM("`@('T*("`@("`@?0H@("`@("!W"D*>PH@("`O*B!$96-L87)E XM(&QO8V%L('9A`D)/2`P.PH*("`@+RH@2V5E<"!T:&4@8F]X(&EN9F]R;6%T:6]N XM+@D)"0D)"2HO"B`@('-W:6YD;W`D]($)O>#L*"B`@("\J($5R87-E XM('1H92!O;&0@;V)J96-T+BXN"0D)"0D)*B\*("`@97)APH@ XM("`@("!D7!E("HI3E5,3"D*("`@ XM>PH@("`@("!W"`H XMPH@("`O*B!$96-L87)E(&QO8V%L('9A`D](#`["@H@("`O*B!%"`\('-W:6YD;WPH@("`@("!D96QW:6X@*'-W:6YD;WPH@("!W97)APH@("!I;G0@>#L*("`@9F]R("AX/3`[('@@/"!S=VEN9&]W XM+3YI=&5M0V]U;G0[('@K*RD*("`@>PH@("`@("!I;F9O6WA=(#T@8VAT>7!E XA,D-H87(@*'-W:6YD;W%TI.PH@("!]"GT* X` Xend SHAR_EOF echo 'File cdk-4.6.0/swindow.c is complete' && echo 'uudecoding file cdk-4.6.0/swindow.c' && uudecode _sharuue.tmp < _sharuue.tmp && rm -f _sharuue.tmp && $shar_touch -am 1229121195 'cdk-4.6.0/swindow.c' && chmod 0400 'cdk-4.6.0/swindow.c' || echo 'restore of cdk-4.6.0/swindow.c failed' shar_count="`wc -c < 'cdk-4.6.0/swindow.c'`" test 14208 -eq "$shar_count" || echo "cdk-4.6.0/swindow.c: original size 14208, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/template.c ============== if test -f 'cdk-4.6.0/template.c' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/template.c (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/template.c (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/template.c' && X#include "cdk.h" X X/* X * $Author: mikeg $ X * $Date: 1995/12/21 21:17:18 $ X * $Revision: 1.25 $ X */ X X/* X * This creates a template widget. X */ XCDKTEMPLATE *newCDKTemplate (CDKSCREEN *cdkscreen, int xplace, int yplace, int lplace, char *label, char *plate, char *overlay, TEMPLATECB callBackFn, boolean box, boolean shadow) X{ X /* Set up some variables */ X CDKTEMPLATE *template = (CDKTEMPLATE *)malloc (sizeof (CDKTEMPLATE)); X int boxwidth = 0; X int boxheight = 3; X int xpos = xplace; X int ypos = yplace; X int labelxoffset = 0; X int labelyoffset = 0; X int fieldxoffset = 0; X int fieldyoffset = 0; X int fieldwidth = strlen (plate) + 2; X int junk = 0; X char *plainLabel; X X /* Translate the char * label to a chtype * */ X template->label = char2Chtype (label, &template->labellen, &junk); X plainLabel = chtype2Char (template->label); X X /* Translate the char * overlay to a chtype * */ X if (overlay != (char *)NULL) X { X template->overlay = char2Chtype (overlay, &template->overlaylen, &junk); X template->fieldattr = template->overlay[0] & A_ATTRIBUTES; X } X else X { X template->overlay = (chtype *)NULL; X template->overlaylen = 0; X template->fieldattr = A_NORMAL; X } X X /* Align the x and y offsets for the label. */ X alignlabel (plainLabel, lplace, fieldwidth, &boxwidth, &boxheight, &labelxoffset, &labelyoffset, &fieldxoffset, &fieldyoffset); X freeChar (plainLabel); X X /* Rejustify the x and y positions if we need to. */ X alignxy (cdkscreen->window, &xpos, &ypos, boxwidth, boxheight); X X /* Make the template window */ X template->win = newwin (boxheight, boxwidth, ypos, xpos); X X /* Is the template window NULL?? */ X if (template->win == (WINDOW *)NULL) X { X /* Clean up any used memory. */ X freeChtype (template->label); X freeChtype (template->overlay); X free (template); X X /* Return a NULL pointer. */ X return ( (CDKTEMPLATE *)NULL ); X } X X /* Make the field window. */ X template->field = subwin (cdkscreen->window, 1, fieldwidth, ypos+fieldyoffset, xpos+fieldxoffset); X template->labelwin = subwin (cdkscreen->window, 1, strlen(label)+1, ypos+labelyoffset, xpos+labelxoffset); X keypad (template->field, TRUE); X X /* Set up the info field. */ X template->info = (char *)malloc (sizeof(char) * ((int)strlen(plate)+4)); X cleanChar (template->info, strlen(plate)+4, '\0'); X X /* Set up the rest of the structure */ X template->parent = cdkscreen->window; X template->shadowwin = (WINDOW *)NULL; X template->plate = copyChar (plate); X template->fieldwidth = fieldwidth; X template->platePos = 0; X template->screenPos = 0; X template->infoPos = 0; X template->box = box; X template->shadow = shadow; X template->callbackfn = (void *)callBackFn; X X /* Do we need to create a shaodw??? */ X if (shadow) X { X template->shadowwin = newwin (boxheight, boxwidth, ypos+1, xpos+1); X } X X /* Clean the key bindings. */ X cleanCDKObjectBindings (vTEMPLATE, template); X X /* Register this baby. */ X registerCDKObject (cdkscreen, vTEMPLATE, template); X X /* Return the pointer to the structure */ X return (template); X} X X/* X * This actually manages the template widget... X */ Xchar *activateCDKTemplate (CDKTEMPLATE *template) X{ X /* Declare local variables. */ X int charcount = 0; X int filler = 0; X int infolen = 0; X chtype input; X X /* Draw the object. */ X drawCDKTemplate (template, template->box); X X /* If there is info already, adjust the variables... */ X if (template->info != (char *)NULL) X { X infolen = strlen (template->info); X while (charcount++ < infolen) X { X if ( X template->plate[charcount] != '#' && X template->plate[charcount] != 'A' && X template->plate[charcount] != 'C' && X template->plate[charcount] != 'c' && X template->plate[charcount] != 'M' && X template->plate[charcount] != 'X' && X template->plate[charcount] != 'x') X { X filler++; X } X } X X /* Now set the variables. */ X template->screenPos = filler + infolen; X template->platePos = filler + infolen; X template->infoPos = infolen; X } X else X { X /* Now set the variables. */ X template->screenPos = 0; X template->platePos = 0; X template->infoPos = 0; X } X wmove (template->field, 0, template->screenPos); X wrefresh (template->field); X X /* Do this forever... */ X for (;;) X { X /* Get the input from the user. */ X input = wgetch (template->field); X X /* Check a predefined binding... */ X if ( ! checkCDKObjectBind (vTEMPLATE, template, input) ) X { X switch (input) X { X case KEY_LEFT : case KEY_RIGHT : case KEY_UP : case KEY_DOWN : X Beep(); X break; X X case KEY_RETURN : case KEY_TAB : case CDK_NEXT : X return (template->info); X break; X X case CDK_REFRESH : X refreshCDKScreen (template->screen); X break; X X default : X ((TEMPLATECB)template->callbackfn)(template, input); X break; X } X } X } X} X X/* X * This is the standard callback proc for the template. X */ Xvoid CDKTemplateCallBack (CDKTEMPLATE *template, chtype input) X{ X /* Check the character input. */ X if (input == DELETE || input == KEY_BACKSPACE) X { X /* Make sure we don't go out of bounds. */ X if (template->platePos == 0) X { X Beep(); X return; X } X X /* Remove it and redisplay.... */ X template->info[--template->infoPos] = '\0'; X template->platePos--; X template->screenPos--; X X /* Move the cursor */ X while ( template->plate[template->platePos] != '#' && X template->plate[template->platePos] != 'A' && X template->plate[template->platePos] != 'C' && X template->plate[template->platePos] != 'c' && X template->plate[template->platePos] != 'M' && X template->plate[template->platePos] != 'X' && X template->plate[template->platePos] != 'x' && X template->platePos > 0) X { X template->platePos--; X template->screenPos--; X } X mvwaddch (template->field, 0, template->screenPos, template->overlay[template->platePos] | template->fieldattr); X wmove (template->field, 0, template->screenPos); X } X else X { X /* To be safe, we should cast the chtype to a char */ X char newchar = (char)input; X X /* Make sure we don't go out of bounds. */ X if (template->platePos >= template->fieldwidth) X { X Beep(); X return; X } X X /* We should check to see if what they typed in matches */ X /* what the plate states. */ X if ( isdigit(newchar) && ( \ X template->plate[template->platePos] == 'A' || \ X template->plate[template->platePos] == 'C' || \ X template->plate[template->platePos] == 'c') ) X { X Beep(); X return; X } X if ( !isdigit(newchar) && template->plate[template->platePos] == '#' ) X { X Beep(); X return; X } X X /* Do we need to convert the case??? */ X if ( template->plate[template->platePos] == 'C' || template->plate[template->platePos] == 'X') X { X newchar = toupper ( (char)input ); X } X else if ( template->plate[template->platePos] == 'c' || template->plate[template->platePos] == 'x') X { X newchar = tolower ( (char)input ); X } X X /* Add it and redisplay.... */ X template->info[template->infoPos++] = newchar; X template->info[template->infoPos] = '\0'; X mvwaddch (template->field, 0, template->screenPos, newchar | template->fieldattr); X template->platePos++; X template->screenPos++; X X /* Move the cursor */ X while ( template->plate[template->platePos] != '#' && X template->plate[template->platePos] != 'A' && X template->plate[template->platePos] != 'C' && X template->plate[template->platePos] != 'c' && X template->plate[template->platePos] != 'M' && X template->plate[template->platePos] != 'X' && X template->plate[template->platePos] != 'x' && X template->platePos < template->fieldwidth ) X { X template->platePos++; X template->screenPos++; X } X wmove (template->field, 0, template->screenPos); X wrefresh (template->field); X } X} X X/* X * This takes the overlay and the info, and mixes the two, for a X * 'mixed' character string... X */ Xchar *mixCDKTemplate (CDKTEMPLATE *template) X{ X /* Reconstruct the info. */ X char *mixedString = (char *)NULL; X char *originalString = (char *)NULL; X int infolen = 0; X int x = 0; X int pos = 0; X X /* Get the chtype * overlay pointer and convert it to a char * */ X originalString = chtype2Char (template->overlay); X infolen = strlen (originalString); X X /* Create a char * pointer. */ X mixedString = (char *)malloc (sizeof(char) * (infolen+3)); X cleanChar (mixedString, infolen+3, '\0'); X X /* Start copying. */ X while (pos < infolen) X { X if ( template->plate[x] == '#' || \ X template->plate[x] == 'A' || \ X template->plate[x] == 'C' || \ X template->plate[x] == 'c' || \ X template->plate[x] == 'M' || \ X template->plate[x] == 'X' || \ X template->plate[x] == 'x') X { X mixedString[x++] = template->info[pos++]; X } X else X { X mixedString[x] = originalString[x]; X x++; X } X } X X /* Clean up any memory. */ X freeChar (originalString); X X /* Return the new string. */ X return (mixedString); X} X X/* X * This takes a mixed string and returns a non-mixed string. X */ Xchar *unmixCDKTemplate (CDKTEMPLATE *template, char *info) X{ X /* Reconstruct the info. */ X char *unmixedString = (char *)NULL; X int infolen = strlen (info); X int x = 0; X int pos = 0; X X /* Create a char * pointer. */ X unmixedString = (char *)malloc (sizeof(char) * (infolen+2)); X cleanChar (unmixedString, infolen+2, '\0'); X X /* Start copying. */ X while (pos < infolen) X { X if ( template->plate[pos] == '#' || \ X template->plate[pos] == 'A' || \ X template->plate[pos] == 'C' || \ X template->plate[pos] == 'c' || \ X template->plate[pos] == 'M' || \ X template->plate[pos] == 'X' || \ X template->plate[pos] == 'x') X { X unmixedString[x++] = info[pos++]; X } X else X { X pos++; X } X } X X /* Return the new string. */ X return (unmixedString); X} X X/* X * This function draws X */ Xvoid drawCDKTemplate (CDKTEMPLATE *template, boolean Box) X{ X /* Declare local variables. */ X int x = 0; X X /* Keep the box information. */ X template->box = Box; X X /* Erase the old object... */ X eraseCDKTemplate (template); X X /* Do we need to draw the shadow. */ X if (template->shadow) X { X drawShadow (template->shadowwin); X } X X /* Box it if needed */ X if (Box) X { X box (template->win, ACS_VLINE, ACS_HLINE); X } X wrefresh (template->win); X X /* Draw in the label and the entry object. */ X writeChtype (template->labelwin, 0, 0, template->label, HORIZONTAL, 0, template->labellen); X wrefresh (template->labelwin); X X /* Draw in the template... */ X if (template->overlay != (chtype *)NULL) X { X writeChtype (template->field, 0, 0, template->overlay, HORIZONTAL, 0, template->overlaylen); X } X X if (template->info != (char *) NULL) X { X int infolen = strlen (template->info); X int pos = 0; X for (x=0; x < template->fieldwidth; x++) X { X if (( template->plate[x] == '#' || X template->plate[x] == 'A' || X template->plate[x] == 'C' || X template->plate[x] == 'c' || X template->plate[x] == 'M' || X template->plate[x] == 'X' || X template->plate[x] == 'x') && X pos < infolen) X { X mvwaddch (template->field, 0, x, template->info[pos++] ); X } X } X wmove (template->field, 0, infolen); X } X wrefresh (template->field); X} X X/* X * This function destroys X */ Xvoid destroyCDKTemplate (CDKTEMPLATE *template) X{ X /* Erase the object. */ X eraseCDKTemplate (template); X X /* Clear out the character pointers. */ X freeChtype (template->label); X freeChtype (template->overlay); X freeChar (template->plate); X freeChar (template->info); X X /* Delete the windows. */ X delwin (template->win); X delwin (template->field); X delwin (template->labelwin); X if (template->shadow) X { X delwin (template->shadowwin); X } X X /* Unregister this object. */ X unregisterCDKObject (vTEMPLATE, template); X X /* Finish cleaning up. */ X free (template); X} X X/* X * This function erases X */ Xvoid eraseCDKTemplate (CDKTEMPLATE *template) X{ X werase (template->field); X werase (template->labelwin); X werase (template->win); X wrefresh (template->win); X if (template->shadow) X { X werase (template->shadowwin); X wrefresh (template->shadowwin); X } X} X X/* X * This function sets the value given to the template. X */ Xvoid setCDKTemplate (CDKTEMPLATE *template, char *newValue, boolean box) X{ X /* Declare local variables. */ X int len = 0; X int copychars = 0; X X /* Keep some variables. */ X template->box = box; X X /* Just to be sure, if lets make sure the new value isn't NULL. */ X if (newValue == (char *)NULL) X { X /* Then we want to just erase the old value. */ X cleanChar (template->info, template->fieldwidth, '\0'); X return; X } X X /* Determine how many characters we need to copy. */ X len = strlen (newValue); X copychars = (len < template->fieldwidth ? len : template->fieldwidth); X X /* OK, erase the old value, and copy in the new value. */ X cleanChar (template->info, template->fieldwidth, '\0'); X strncpy (template->info, newValue, copychars); X} X X/* X * This erases the information in the template widget. X */ Xvoid cleanCDKTemplate (CDKTEMPLATE *template) X{ X cleanChar (template->info, template->fieldwidth, '\0'); X} SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/template.c' && chmod 0400 'cdk-4.6.0/template.c' || echo 'restore of cdk-4.6.0/template.c failed' shar_count="`wc -c < 'cdk-4.6.0/template.c'`" test 14153 -eq "$shar_count" || echo "cdk-4.6.0/template.c: original size 14153, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/viewer.c ============== if test -f 'cdk-4.6.0/viewer.c' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/viewer.c (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/viewer.c (binary)' sed 's/^X//' << 'SHAR_EOF' > _sharuue.tmp && Xbegin 600 cdk-4.6.0/viewer.c XM(VEN8VQU9&4@(F-D:RYH(@H*+RH*("H@)$%U=&AO'!O'D@*&-D:W-C'!O%=I XM9'1H+"!B;WA(96EG:'0I.PH*("`@+RH@36%K92!T:&4@=FEE=V5R('=I;F1O XM=PD)"0D)"2HO"B`@('9I97=E7!A9"`H=FEE=V5R XM+3YW:6XL(%12544I.PH*("`@+RH@0W)E871E('1H92!B=71T;VYS"0D)"0D) XM*B\*("`@=FEE=V5R+3YB=71T;VY#;W5N=`D)/2!B=71T;VY#;W5N=#L*("`@ XM9F]R("AX/3`[('@@/"!B=71T;VY#;W5N=#L@>"LK*0H@("!["B`@("`@('9I XM97=E7!E("AB=71T;VYS6WA=+"`F XM=FEE=V5R+3YB=71T;VYL96Y;>%TL("9B=71T;VY!9&HI.PH@("`@("!B=71T XM;VY7:61T:`D)*ST@=FEE=V5R+3YB=71T;VYL96Y;>%T@*R`Q.PH@("!]"B`@ XM(&)U='1O;D%D:@D]("AI;G0I*"AB;WA7:61T:"UB=71T;VY7:61T:"DO("AB XM=71T;VY#;W5N="`K,2DI.PH@("!B=71T;VY0;W,)/2`Q("L@8G5T=&]N061J XM.PH@("!F;W(@*'@],#L@>"`\(&)U='1O;D-O=6YT.R!X*RLI"B`@('L*("`@ XM("`@=FEE=V5R+3YB=71T;VYP;W-;>%T)/2!B=71T;VY0;W,["B`@("`@(&)U XM='1O;E!O7!E("@B/"]5/BHJ*B!5;G1I=&QE XM9"`J*BH\(54^(BP@)G9I97=E$AE:6=H=`D)/2!B;WA(96EG:'0["B`@('9I97=E%1O<$QI;F4) XM"3T@,#L*("`@=FEE=V5R+3YC:&%R86-T97)S"0D](#`["@H@("`O*B!$;R!W XM92!N965D('1O(&-R96%T92!A('-H861O=S\_/PD)"0D)*B\*("`@:68@*'-H XM861O=RD*("`@>PH@("`@("!V:65W97(M/G-H861O=W=I;@D)/2!N97=W:6X@ XM*&)O>$AE:6=H="P@8F]X5VED=&@K,2P@>7!O2X)"0D)"0DJ+PH@("!R96=I#L*("`@=FEE=V5R+3YI;F9O4VEZ90D)/2!I;F9O4VEZ93L*("`@ XM=FEE=V5R+3YI;G1EF4M,3L*("`@?0H*("`@+RH@4V5T('5P('1H92!T XM:71L92!O9B!T:&4@=FEE=V5R+@D)"0D)*B\*("`@:68@*'1I=&QE("$]("AC XM:&%R("HI3E5,3"D*("`@>PH@("`@("!F7!E("AV:65W97(M/G1I XM=&QE*3L*("`@("`@=FEE=V5R+3YT:71L90D)/2!C:&%R,D-H='EP92`H=&ET XM;&4L("9V:65W97(M/G1I=&QE;&5N+"`F=FEE=V5R+3YT:71L97!O5-TF4[('@K*RD*("`@("`@>PH@("`@("`@("!I9B`H:6YF;UMX72`]/2`H XM8VAA%T)/2`P.PH@("`@("`@("`@("!V:65W97(M/FEN9F]P;W-; XM>%T)/2`P.PH@("`@("`@("!]"B`@("`@("`@(&5LF5O9BAC:'1Y<&4I("H@*&QE;BLS*2D["B`@("`@("`@("`@(&-L XM96%N0VAT>7!E("AV:65W97(M/FEN9F];>%TL(&QE;BLS+"`G7#`G*3L*"B`@ XM("`@("`@("`@("\J($-O<'D@9G)O;2!O;F4@=&\@=&AE(&]T:&5R+@D)"0DJ XM+PH@("`@("`@("`@("!F;W(@*'D],#L@>2`\(&QE;CL@>2LK*0H@("`@("`@ XM("`@("!["B`@("`@("`@("`@("`@('9I97=E%U;>5T@?"!!7TY/4DU!3#L*("`@("`@("`@("`@?0H@("`@("`@("`@ XM("!V:65W97(M/FEN9F]L96Y;>%T)/2!L96X["B`@("`@("`@("`@('9I97=E XMPH@("`@("`O*B!#;W!Y('1H92!I;F9O#TP.R!X(#P](&EN XM9F]3:7IE.R!X*RLI"B`@("`@('L*("`@("`@("`@:68@*&EN9F];>%T@/3T@ XM*&-H87(@*BE.54Q,*0H@("`@("`@("!["B`@("`@("`@("`@('9I97=E%T)/2`P.PH@("`@("`@("`@("!V:65W97(M/FEN9F]P;W-; XM>%T)/2`P.PH@("`@("`@("!]"B`@("`@("`@(&5LPH@ XM("`@("`@("`@("!V:65W97(M/FEN9F];>%T)/2!C:&%R,D-H='EP92`H:6YF XM;UMX72P@)G9I97=E%TI.PH@("`@("`@ XM("`@("!V:65W97(M/F-H87)A8W1EPH@("`@("!V:65W97(M/FUA>$QE9G1#:&%R"3T@,#L* XM("`@?0H*("`@+RH@3F]W(&QE=',@;6%N86=E('1H:7,@=&AI;F=Y+BXN"0D) XM"0DJ+PH@("!R971UPH@("`O*B!$96-L87)E(&QO8V%L('9A7!E(&EN<'5T XM.PH@("!C:&%R("IF:6QE26YF;ULQ,%TL('1E;7!;-3`P73L*("`@:6YT('@@ XM+%)%1E)%4T@["@HC:69D968@3D]$64Y!3$Q/0PH@("!C:'1Y<&4@96UP='E3 XM=')I;F=;,C4V73L*(V5L7!E(&5M<'1Y4W1R:6YG6W9I97=E XM7!E("AE;7!T>5-T XM%=I9'1H+3,L("<@)RD["@H@ XM("`O*B!#F4I.PEF:6QE26YF;ULS72`] XM(&-O<'E#:&%R*'1E;7`I.PH@("!S<')I;G1F("AT96UP+"`B/$,^/"\U/B`@ XM("`@("`@("`@("`@("`@("`@("`@("`@/"$U/B(I.PEF:6QE26YF;ULT72`] XM(&-O<'E#:&%R*'1E;7`I.PH@("!S<')I;G1F("AT96UP+"`B/$,^/"\U/E!R XM97-S($%N>2!+97D@5&\@0V]N=&EN=64N/"$U/B(I.PEF:6QE26YF;ULU72`] XM(&-O<'E#:&%R*'1E;7`I.PH*("`@+RH@4V5T('1H92!C=7)R96YT(&)U='1O XM;BX)"0D)"0DJ+PH@("!V:65W97(M/F-UPH@("`@("`@("`@("`@("`@("`@(&EF("AV:65W97(M/F-U XMPH@("`@("`@("`@("`@("`@("`@("`@('9I97=E XM%1O XM<$QI;F4I"B`@("`@("`@("`@("`@("`@>PH@("`@("`@("`@("`@("`@("`@ XM('9I97=EPH@("`@("`@("`@("`@("`@ XM("`@($)E97`H*3L*("`@("`@("`@("`@("`@("!]"B`@("`@("`@("`@("`@ XM("`@8G)E86L["B`@(`H@("`@("`@("`@("!C87-E($M%65]224=(5"`Z"B`@ XM("`@("`@("`@("`@("`@:68@*'9I97=E$QE9G1#:&%R*0H@("`@("`@("`@("`@("`@('L*("`@("`@("`@("`@ XM("`@("`@("!V:65W97(M/FQE9G1#:&%R("LK.PH@("`@("`@("`@("`@("`@ XM("`@(%)%1E)%4T@)/2!44E5%.PH@("`@("`@("`@("`@("`@('T*("`@("`@ XM("`@("`@("`@("!E;'-E"B`@("`@("`@("`@("`@("`@>PH@("`@("`@("`@ XM("`@("`@("`@($)E97`H*3L*("`@("`@("`@("`@("`@("!]"B`@("`@("`@ XM("`@("`@("`@8G)E86L["B`@(`H@("`@("`@("`@("!C87-E($M%65],1494 XM(#H*("`@("`@("`@("`@("`@("!I9B`H=FEE=V5R+3YL969T0VAAPH@("`@("`@("`@("`@("`@("`@('9I97=E XMF4M,2DI(#X@,"D*("`@("`@("`@("`@("`@("`@ XM("!["B`@("`@("`@("`@("`@("`@("`@("`@=FEE=V5R+3YC=7)R96YT5&]P XM"3T@=FEE=V5R+3YC=7)R96YT5&]P("T@*'9I97=EF4@+2`Q XM*3L*("`@("`@("`@("`@("`@("`@("!]"B`@("`@("`@("`@("`@("`@("`@ XM96QS90H@("`@("`@("`@("`@("`@("`@('L*("`@("`@("`@("`@("`@("`@ XM("`@("!V:65W97(M/F-UPH@("`@("`@ XM("`@("`@("`@("`@("`@('9I97=E%1O<$QI;F4I XM"B`@("`@("`@("`@("`@("`@>PH@("`@("`@("`@("`@("`@("`@('9I97=E XM"`^/2`P("D*("`@("`@("`@("`@("`@("![ XM"B`@("`@("`@("`@("`@("`@("`@=FEE=V5R+3YC=7)R96YT5&]P(#T@>#L* XM("`@("`@("`@("`@("`@("`@("!2149215-("3T@5%)513L*("`@("`@("`@ XM("`@("`@("!]"B`@("`@("`@("`@("`@("`@96QS90H@("`@("`@("`@("`@ XM("`@('L*("`@("`@("`@("`@("`@("`@("!"965P*"D["B`@("`@("`@("`@ XM("`@("`@?0H@("`@("`@("`@("`@("`@(&)R96%K.PH@("`*("`@("`@("`@ XM("`@8V%S92`G/R<@.@H@("`@("`@("`@("`@("`@(%-E87)C:$1I4-$ XM2TQA8F5L("AF:6QE26YF;TQA8F5L*3L*("`@("`@("`@("`@("`@("!21492 XM15-("0D](%12544["B`@("`@("`@("`@("`@("`@8G)E86L["B`@(`H@("`@ XM("`@("`@("!C87-E($M%65]215154DX@.B!C87-E($-$2U].15A4(#H*("`@ XM("`@("`@("`@("`@("!F7!E("AV:65W97(M/G=I XM;BP@=FEE=V5R+3YT:71L97!O"`\('9I XM97=EF4[('@K*RD*("`@("`@("`@>PH@("`@("`@("`@("!I XM9B`H('9I97=EPH@("`@("`@("`@("`@("!W%TK,2P@>"LR+"!V:65W97(M/FEN9F];>"MV:65W97(M/F-U"MV:65W97(M/F-U"`\('9I97=EPH@("`@("`@("`@("!W$AE:6=H="TR+"!V:65W97(M/F)U='1O;EMX72P@2$]225I/3E1! XM3"P@,"P@=FEE=V5R+3YB=71T;VYL96Y;>%TI.PH@("`@("`@("!]"@H@("`@ XM("`@("`O*B!$F4I("H@,3`P*3L*("`@("`@("`@=W)I=&5#:&%R("AV:65W97(M XM/G=I;BP@,2P@,2P@=&5M<"P@2$]225I/3E1!3"P@,"P@"`\/2!V:65W XM97(M/F)O>%=I9'1H*S$[('@K*RD*("`@("`@("`@>PH@("`@("`@("`@("!M XM=G=A9&1C:"`H=FEE=V5R+3YW:6XL('9I97=E$AE:6=H="TS+"`P+"!!0U-?3%1%12D[ XM"B`@("`@("`@(&UV=V%D9&-H("AV:65W97(M/G=I;BP@=FEE=V5R+3YB;WA( XM96EG:'0M,RP@=FEE=V5R+3YW:6XM/E]M87AX+"!!0U-?4E1%12D["@H@("`@ XM("`@("`O*B!2969R97-H('1H92!S8W)E96XN"0D)"0D)*B\*("`@("`@("`@ XM=W)E9G)E"D["B`@('T*("`@9G)E94-H87(@*%-E XM87)C:%!A='1EPH@("`@("!R971UPH@("`@("`O*B!3=&%R="!L;V]K XM:6YG(&9R;VT@)VAE"`]('9I XM97=E%TI.PH@("`@("`@("!P;W,)/2`P.PH@("`@("`@("!F;W(@*'D],#L@>2`\ XM(&QE;CL@>2LK*0H@("`@("`@("!["B`@("`@("`@("`@("\J(%=E(&AA=F4@ XM=&\@=&5A%1O<$QI;F4I.PH@("`@("`@("`@("`@("!V:65W XM97(M/FQE9G1#:&%R"3T@*'D@/"!V:65W97(M/F)O>%=I9'1H(#\@,"`Z('9I XM97=EPH@("`@("`@("`@("`@("!P XM;W,)/2`P.PH@("`@("`@("`@("!]"B`@("`@("`@('T*("`@("`@?0H@("!] XM"B`@(&5LPH@("`@("`O*B!3=&%R="!L;V]K:6YG(&9R;VT@)VAE XM"`^/2`P.R!X+2TI"B`@("`@('L*("`@("`@("`@+RH@4W1A XM%TI.PH@("`@("`@("!P;W,)/2`P.PH@("`@ XM("`@("!F;W(@*'D],#L@>2`\(&QE;CL@>2LK*0H@("`@("`@("!["B`@("`@ XM("`@("`@("\J(%=E(&AA=F4@=&\@=&5A2`\('9I97=EPH@("`O*B!$96-L87)E(&QO8V%L('9A"`\('9I97=EF4[('@K*RD*("`@>PH@("`@("!I9B`H=FEE=V5R+3YI;F9O6W9I97=E XM7!E("HI3E5,3"D*("`@("`@>PH@ XM("`@("`@("!W%TK,2P@>"LR+"!V:65W97(M/FEN XM9F];>"MV:65W97(M/F-U"MV:65W97(M/F-U"D*("`@>PH@("`@ XM("!B;W@@*'9I97=E"`\/2!V:65W97(M/F)O>%=I9'1H*S$[('@K*RD*("`@ XM>PH@("`@("!M=G=A9&1C:"`H=FEE=V5R+3YW:6XL('9I97=E$AE:6=H="TS+"`P+"!!0U-?3%1%12D["B`@ XM(&UV=V%D9&-H("AV:65W97(M/G=I;BP@=FEE=V5R+3YB;WA(96EG:'0M,RP@ XM=FEE=V5R+3YW:6XM/E]M87AX+"!!0U-?4E1%12D["@H@("`O*B!$%TL($A/4DE:3TY404PL(#`L('9I XM97=E"`\('9I XM97=EPH@("`@("!C:&%R(&-H87)A8W1E<@D]('9I97=E%T@)B!!7T-(05)415A4.PH@("`@("!M XM=G=A9&1C:"`H=FEE=V5R+3YW:6XL('9I97=E"P@8VAA XMF4L("@H9FQO870I*'9I XM97=E7!E("AV:65W97(M/G1I=&QE*3L*("`@9F]R("AX/3`[('@@/#T@=FEE=V5R XM+3YI;F9O4VEZ93L@>"LK*0H@("!["B`@("`@(&9R965#:'1Y<&4@*'9I97=E XM7!E XM(&)U='1O;DAI9VAL:6=H="P@8F]O;&5A;B!B;W@I"GL*("`@+RH@2V5E<"!S XM;VUE('-E;6DM<&5R:6YA;G0@:6YF;PD)"0D)*B\*("`@=FEE=V5R+3YB;W@) XM"0D](&)O>#L*("`@=FEE=V5R+3YB=71T;VY(:6=H;&EG:'0)/2!B=71T;VY( X,:6=H;&EG:'0["GT* X` Xend SHAR_EOF echo 'uudecoding file cdk-4.6.0/viewer.c' && uudecode _sharuue.tmp < _sharuue.tmp && rm -f _sharuue.tmp && $shar_touch -am 1229121195 'cdk-4.6.0/viewer.c' && chmod 0400 'cdk-4.6.0/viewer.c' || echo 'restore of cdk-4.6.0/viewer.c failed' shar_count="`wc -c < 'cdk-4.6.0/viewer.c'`" test 24087 -eq "$shar_count" || echo "cdk-4.6.0/viewer.c: original size 24087, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/BUGS ============== if test -f 'cdk-4.6.0/BUGS' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/BUGS (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/BUGS (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/BUGS' && XCdk bugs guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- XIf you find a bug, and want me to fix it, you will need to do a few things for Xme. X * Give me a copy or part of the code which demonstrates this bug. If X you can't do this, then replicate the bug in a piece of test code X and send me that. X * Make sure the bug can be replicated by sending me a list of instructions X on how to replicate the noted bug. X XIf you do this, I will mail you back telling you if the information was Xsufficient or not. If it is, I will tell you when I hope to have this bug Xlicked by. If you need an urgent update (ie: your boss is crawling down your Xthroat for your program to work) tell me, I'll get to it ASAP. BTW, thanks for Xtrusting my code enough to use in the 'real world' :). X XIf you find a bug and fixed it yourself, I will need the same as above with a Xfew extras. X * I will need a patch of any piece of code you made so I can apply it X to what I have. X * Tar this up and send it to me. X XIf you have found and fixed a valid bug, you will be noted in the next Xdistribution of this bugs file, and my warmest thanks for reducing my ever Xgrowing workload. :) X XHere is the noted list of outstanding bugs and bugs of the past... X------------------------------------------------------------------------------ X XFound by Widget Symptom Fixed by Fixed On X-------- ------ ------- -------- -------- XMe Graph Doesn't work. Not sure X if I will fix it. If X people want it, I will X spend the time and X effort. If not, I may X just nuke it. Not sure X yet.... SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/BUGS' && chmod 0444 'cdk-4.6.0/BUGS' || echo 'restore of cdk-4.6.0/BUGS failed' shar_count="`wc -c < 'cdk-4.6.0/BUGS'`" test 1618 -eq "$shar_count" || echo "cdk-4.6.0/BUGS: original size 1618, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/INSTALL ============== if test -f 'cdk-4.6.0/INSTALL' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/INSTALL (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/INSTALL (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/INSTALL' && XCdk installation guide. X------------------------------------------------------------------------------- X XGeneral X------- XThis document details how to build and install the Cdk library. The first thing Xyou should know is what compile options you may require. I have had the Xfortunate luck of being able to compile this library on the following Xplatforms: X * Sun/OS 4.1.* X * Solaris 2.3/2.4 X * AIX 3.2.* (and even AIX 4.1 but there is no mention of this in the X makefile. Sorry.) X * HPUX 9.* (and even HPUX 10.* but there is no mention of this in the X makefile. Sorry.) X * Linux, in both a.out and Elf. X XIf you have a machine that is not mentioned here and you would like to see it Xin the makefile, mail me the additions for the makefile and I will add them in. X XCFLAGS X------ XYou may need to change a few things in the makefile as far as compile options Xare concerned, but also the C flags. There are a number of defined CFLAGS Xthat should be explained. They are as follows: X X -DCOLOR Add in if your curses header file supports color. X Ncurses does. X -DWINCHBUG If your copy of curses has a bug in the routine winch. X -DNOUSLEEP If you haven't got the usleep library function. X -DNODYNALLOC If your compiler does not support the use of non X constants in variable definitions. Set -DDNODYNALLOC X can't support a definition like the following: X char *array[variableName]; X where variableName is a variable that was set to X dictate the size of the array. X -DAIX As always, AIX is the exception to the rule.... X XBuilding X-------- XTo build the library cd into the Cdk distribution directory and type in Xmake cdklib XThis builds the file libcdk.a XThats all there is to it. X XInstalling X---------- XModify the makefile to set the values of INST_ROOTDIR, INST_LIBDIR, XINST_INCDIR, and INST_MANDIR. These variables set the location of the root Xinstall directory, the library directory, the include directory, and the Xman directory respectively. Once these have been set correctly, su to root Xand type Xmake install XThis will install the files: Xcdk.h, curdefs.h, libcdk.a and all of the manual pages. SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/INSTALL' && chmod 0444 'cdk-4.6.0/INSTALL' || echo 'restore of cdk-4.6.0/INSTALL failed' shar_count="`wc -c < 'cdk-4.6.0/INSTALL'`" test 2143 -eq "$shar_count" || echo "cdk-4.6.0/INSTALL: original size 2143, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/EXPANDING ============== if test -f 'cdk-4.6.0/EXPANDING' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/EXPANDING (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/EXPANDING (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/EXPANDING' && XCdk new widget guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- X XIf you want to create a new widget for Cdk, and want it in the standard Xdist of Cdk, you will have to follow some requisites that I have. I state Xthese because Cdk has been worked on for quite some time and I finally Xgot it to a state where the functions calls are somewhat consistent. Any new Xwidgets should adhere to this. The requirement are as follows: X X * The function names should be like: X newCDKXXX, destroyCDKXXX, setCDKXXX, drawCDKXX,... X Any widgets with function not in this format should be 'private'. X If this is not the case one of three things will happen: X 1) The widget will not get accepted X 2) I will mail you back asking you to follow the standards. X 3) I will do it myself. (HIGHLY unlikely) X X * The first parameter of the newCDKXXX function should be of type X CDKSCREEN. X * If applicable, the next two parameters should be xpos and ypos in X that order. X * If the widget has a label, the next parameter should be lpos followed X by char *label. X * If the widget has an exchangeable control function, like the entry and X mentry widgets, then the it should be third from the end of the X parameter list. X * The last two parameters of the newCDKXXX function should be: X boolean box, boolean shadow if the parameters apply. X * The drawCDKXXX function should have boolean box as it's last X parameter. X * The first parameters of any other function relating to the widget X should be a pointer to the widget type. ie: CDKRADIO *, CDKFSELECT *... X * A destroyCDKXXX function has to be provided as well as a drawCDKXXX X function. X * Try to contain anything specific to the widget in a single file. This X keeps the overhead of misc files from floating around. X XIf you follow the guidelines, then the files you need to change to sew the new Xwidget into Cdk, are: X X cdkscreen.c So this widget will get refreshed on a refreshCDKScreen X function call. X binding.c To allow key bindings for the widget. If it is possible X to have key bindings I stress that this be incorporated. X cdk.h To add in the function def's to the header file. X Makefile Add in the new widget files. X XIf you have done all of this then what I need from you is the following: X X * A diff of all the files from the dist. that you modified. Use X patch, I prefer it. If you haven't got it, get it and use it. It makes X life easy. X * A copy of the new widget file. X * tar this up and send it to me at X glover@tuzo.erin.utoronto.ca X I will mail you back when I get it and I will tell you if everything is X OK or not. X XI hate to be such a nit pick, but if we follow the above standards, Cdk will Xevolve into a very nice library, with a lot of really nice widgets. X Xttfn, X Mike SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/EXPANDING' && chmod 0444 'cdk-4.6.0/EXPANDING' || echo 'restore of cdk-4.6.0/EXPANDING failed' shar_count="`wc -c < 'cdk-4.6.0/EXPANDING'`" test 2784 -eq "$shar_count" || echo "cdk-4.6.0/EXPANDING: original size 2784, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/NOTES ============== if test -f 'cdk-4.6.0/NOTES' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/NOTES (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/NOTES (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/NOTES' && XCdk notes. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- X XThis document states some of the testing and history of the Cdk widget set. X XCdk has gone through a major face-lift since I first created it, and it's Xcurrent look I like enough to release and attach my name to. :) I have made sure Xto remain as consistent as possible with function parameter positions, names, Xpurposes, and what-not. If it's inconsistent in parts, mail me tell me what you Xfind inconsistent and I may change it. I say may because I don't want to kill Xanyone's code if I can help it. That is why I waited so long before releasing XCdk. I wanted it to be as stable as possible before sending it out into the Xworld. I think it's stable, and hopefully so will you. There are a few things Xworth noting before continuing. X XCdk has gone through some fairly rigorous testing, but since I did the testing Xit may not be complete. I have complied the code with Purify (TM) and XCenterline's Testcenter (TM) and both say my code is clean. There are no Xmemory leaks, and the only problems exist in the curses library. (if I could Xonly release a clean copy of curses????? hmmmm.......) X XBut since I may not be able to see the forest for the trees, I'm willing to Xbet that bugs still do exist, and you folks will find them. If you do find bugs Xread the BUGS document supplied with this release to find out what to do. X XI do not plan on changing the interface to Cdk, so any code developed in it now Xshould pass the test of time. The only changes I can see are bug fixes and new Xwidgets. Lets hope this wish of mine remains true... X XThere is an examples directory available which demonstrates all of the widgets Xand some extra concepts, it's a great place to tool around in before banging Xaway at your own code. X XHave fun. :) X Xttfn, X Mike X XPS: If you want to get a hold of me mail me at Xglover@tuzo.erin.utoronto.ca XI would like to know your opinions of this library and how I could make it Xbetter. X SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/NOTES' && chmod 0444 'cdk-4.6.0/NOTES' || echo 'restore of cdk-4.6.0/NOTES failed' shar_count="`wc -c < 'cdk-4.6.0/NOTES'`" test 2023 -eq "$shar_count" || echo "cdk-4.6.0/NOTES: original size 2023, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/README ============== if test -f 'cdk-4.6.0/README' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/README (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/README (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/README' && XCdk readme guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- X XOverview: X--------- XCdk stands for 'Curses Development Kit' and it currently contains 17 ready Xto use widgets which facilitate the speedy development of full screen Xcurses programs. This little project of mine started as a test to see how Xcompatible my Linux machine was to other Unix breeds. While doing this I Xdiscovered ncurses, and played with it. These widgets are the result of a Xyears worth of playing. The current compliment of widgets are: X XWidget Type Quick Description X=========================================================================== XDialog Prompts the user with a message, and the user X can pick an answer from the buttons provided. XEntry Allows the user to enter information. XFile Selector A file selector built from Cdk base widgets. This X example shows how to create more complicated widgets X using the Cdk widget library. XGraph Draws a graph. XHistogram Draws a histogram. XItem List Creates a pop up field which allows the user to select X one of several choices in a small field. Very useful X for things like days of the week or month names. XLabel Displays messages in a pop up box, or the label can be X considered part of the screen. XMarquee Displays a message in a scrolling marquee. XMatrix Creates a complex matrix with lots of options. XMenu Creates a pull-down menu interface. XMultiple Line Entry A multiple line entry field. Very useful X for long fields. (like a description X field) XRadio List Creates a radio button list. XScale Creates a numeric scale. Used for allowing a user to X pick a numeric value and restrict them to a range of values. XScrolling List Creates a scrolling list/menu list. XScrolling Window Creates a scrolling log file viewer. Can add X information into the window while its running. X A good widget for displaying the progress of X something. (akin to a console window) XSelection List Creates a multiple option selection list. XTemplate Creates a entry field with character sensitive X positions. Used for preformatted fields like X dates and phone numbers. XViewer This is a file/information viewer. Very useful X when you need to display loads of information. X=========================================================================== X XEach widget has the ability to display color, or other character attributes. XCdk comes with a attribute/color format command set which allows a programmer Xto add colors and characters attributes simply. X XThe code has been cleaned using both Purify(TM) and Sun's testcenter(TM), Xso it is as clean as a babies butt. :) Any leaks I have seen are in the curses Xlibraries; there is nothing I can do about that, sorry. There are no memory Xleaks within the code, it shouldn't core dump, and it shouldn't do anything Xunexpected. If you do see something like this tell me after you read the BUGS Xfile. X XDistribution: X------------- XThis distribution has a full compliment of manual pages, so any specifics to Xthe widgets will not be addressed in this read me. If you want to get right in Xthere, nroff the cdk.3x file in the man directory. It is the starting point Xfor all the manual pages. X XThere are some other files to look at if you want to get anywhere. They are: X XINSTALL - This will show you how to build Cdk and install it on your system. X If there are any personal modifications that you think may be X needed, read this file. In fact read it regardless. :) X XCOPYING - The legal stuff to protect my butt and all of the hard work that I X have put into this library. X XEXPANDING - You feel creative enough to add a widget, here are my requirements X that you have to follow to make the integration of a new widget X seamless. X XBUGS - What to do when you find a bug. It also lists all of the bugs found, X who found then, who fixed them, and when they were fixed. If you think X you have found a bug look at this file. If you do not think you have X the most up to date version of Cdk, go get it and try to replicate the X problem. Then look at the BUGS file again. If it is NOT there, then you X can mail me notifying me of a possible bug. I will try my hardest to get X back to you, but I have a pretty busy schedule so don't expect an instant X reply. This file will also explain how I would like any bug fixes sent to X me. X XNOTES - Misc babblings of myself somewhat related to this distribution. X XVERSION - Contains the current rev level, when it was released, and X what is different from the previous release. (I promise X to make sure I keep this up to date. :) ) X XTODO - A list of things I plan to do in the future. (sleep) X XIf you have any comments, questions, or complaints mail me at Xglover@tuzo.erin.utoronto.ca X Xttfn, X Mike X XPS: There is also a Perl5 extension of this library for you Perl5 fans. SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/README' && chmod 0444 'cdk-4.6.0/README' || echo 'restore of cdk-4.6.0/README failed' shar_count="`wc -c < 'cdk-4.6.0/README'`" test 5465 -eq "$shar_count" || echo "cdk-4.6.0/README: original size 5465, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/TODO ============== if test -f 'cdk-4.6.0/TODO' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/TODO (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/TODO (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/TODO' && XCdk readme guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------ X XThere are a few things that I am either currently working on, or going to Xwork on in the near future. They are: X X * Get the drawing routines to work correctly... X * I would like to be able to have a captive shell widget. This X would allow you to start a subshell and have the user interact X with a spawned command via the captive shell. This would allow X you to spawn an interactive command through the widget. If any X one knows how to do this, please mail me. Maybe we'll work this X through. X Xttfn, X Mike SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/TODO' && chmod 0400 'cdk-4.6.0/TODO' || echo 'restore of cdk-4.6.0/TODO failed' shar_count="`wc -c < 'cdk-4.6.0/TODO'`" test 634 -eq "$shar_count" || echo "cdk-4.6.0/TODO: original size 634, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/VERSION ============== if test -f 'cdk-4.6.0/VERSION' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/VERSION (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/VERSION (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/VERSION' && XCdk version guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- X XCurrent Version: 4.6 X XVersion History: XVersion Number Released On Comment X============================================================================== X4.6 Jan/1996 First release. SHAR_EOF $shar_touch -am 1229121195 'cdk-4.6.0/VERSION' && chmod 0444 'cdk-4.6.0/VERSION' || echo 'restore of cdk-4.6.0/VERSION failed' shar_count="`wc -c < 'cdk-4.6.0/VERSION'`" test 315 -eq "$shar_count" || echo "cdk-4.6.0/VERSION: original size 315, current size $shar_count" rm -f _sharnew.tmp fi # ============= cdk-4.6.0/COPYING ============== if test -f 'cdk-4.6.0/COPYING' && test X"$1" != X"-c"; then echo 'x - skipping cdk-4.6.0/COPYING (file already exists)' rm -f _sharnew.tmp else > _sharnew.tmp echo 'x - extracting cdk-4.6.0/COPYING (text)' sed 's/^X//' << 'SHAR_EOF' > 'cdk-4.6.0/COPYING' && XCdk copying guide. XCopyright Mike Glover, 1995 X------------------------------------------------------------------------------- XIn order to copy Cdk around I have some requirements that will protect me, Xand possibly even you. First thing, I feel I should say that this little project Xof mine has taken about a year of my 'free' time and I have put a lot of work Xinto it. I do ask that if anyone asks you about Cdk, tell them where you got it Xand who wrote it. If you see Cdk installed without this file on the system Xsomewhere, then assume the copy the person has is a 'corrupt' version. I will Xnot be responsible for any unfortunate results if someone else makes a personal Xmodification to the Cdk library. I will also not be responsible if for some Xreason the installation of Cdk creates a negative effect on your machine. You Xdo have my word that there are no "Trojan horses", worms, or other security Xworries lurking in this code. I hate virus writers as much as anyone else! X XInstead of writing my own license, I'm a programmer, not a lawyer, I'm going Xto borrow the GNU public license on public software. If you do not agree to Xthis license then remove the Cdk distribution and we all will be happier in Xthe end. Here is the complete GNU public license in it's true form. I have not Xmade any modifications to it. X X! will say one thing, Cdk is my copyright. I will continue to support any released Xversions out there as long as they are in their released form. I am releasing Xthis into the "public" because I feel I have benefited from other people's Xhard work, I'd like to chip into the pot as well. This does NOT make Cdk Xpublic domain though. Cdk is still my copyright, and owned by me, I am merely Xstating this so I don't see 40 different versions of my code floating around Xwith other people's names attached. X XWith that ugly stuff said, I will happily take any comments or questions about XCdk. Input is more than welcomed. In fact I encourage it. Feel free to mail Xme and ask questions you thin the supplied documents don't cover. If I get enough XI may build a FAQ to help newcomers. (we'll see how Cdk is accepted though) X XFor you Perl programmers, there is a Perl5 extension to Cdk being released at Xthe same time. If you see this message, pop over to the Perl newsgroups and look Xfor the Cdk Perl5 extension. X Xttfn, X Mike X------------------------------------------------------------------------------- X GNU GENERAL PUBLIC LICENSE X Version 2, June 1991 X X Copyright (C) 1989, 1991 Free Software Foundation, Inc. X 675 Mass Ave, Cambridge, MA 02139, USA X Everyone is permitted to copy and distribute verbatim copies X of this license document, but changing it is not allowed. X X Preamble X X The licenses for most software are designed to take away your Xfreedom to share and change it. By contrast, the GNU General Public XLicense is intended to guarantee your freedom to share and change free Xsoftware--to make sure the software is free for all its users. This XGeneral Public License applies to most of the Free Software XFoundation's software and to any other program whose authors commit to Xusing it. (Some other Free Software Foundation software is covered by Xthe GNU Library General Public License instead.) You can apply it to Xyour programs, too. X X When we speak of free software, we are referring to freedom, not Xprice. Our General Public Licenses are designed to make sure that you Xhave the freedom to distribute copies of free software (and charge for Xthis service if you wish), that you receive source code or can get it Xif you want it, that you can change the software or use pieces of it Xin new free programs; and that you know you can do these things. X X To protect your rights, we need to make restrictions that forbid Xanyone to deny you these rights or to ask you to surrender the rights. XThese restrictions translate to certain responsibilities for you if you Xdistribute copies of the software, or if you modify it. X X For example, if you distribute copies of such a program, whether Xgratis or for a fee, you must give the recipients all the rights that Xyou have. You must make sure that they, too, receive or can get the Xsource code. And you must show them these terms so they know their Xrights. X X We protect your rights with two steps: (1) copyright the software, and X(2) offer you this license which gives you legal permission to copy, Xdistribute and/or modify the software. X X Also, for each author's protection and ours, we want to make certain Xthat everyone understands that there is no warranty for this free Xsoftware. If the software is modified by someone else and passed on, we Xwant its recipients to know that what they have is not the original, so Xthat any problems introduced by others will not reflect on the original Xauthors' reputations. X X Finally, any free program is threatened constantly by software Xpatents. We wish to avoid the danger that redistributors of a free Xprogram will individually obtain patent licenses, in effect making the Xprogram proprietary. To prevent this, we have made it clear that any Xpatent must be licensed for everyone's free use or not licensed at all. X X The precise terms and conditions for copying, distribution and Xmodification follow. X X GNU GENERAL PUBLIC LICENSE X TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION X X 0. This License applies to any program or other work which contains Xa notice placed by the copyright holder saying it may be distributed Xunder the terms of this General Public License. The "Program", below, Xrefers to any such program or work, and a "work based on the Program" Xmeans either the Program or any derivative work under copyright law: Xthat is to say, a work containing the Program or a portion of it, Xeither verbatim or with modifications and/or translated into another Xlanguage. (Hereinafter, translation is included without limitation in Xthe term "modification".) Each licensee is addressed as "you". X XActivities other than copying, distribution and modification are not Xcovered by this License; they are outside its scope. The act of Xrunning the Program is not restricted, and the output from the Program Xis covered only if its contents constitute a work based on the XProgram (independent of having been made by running the Program). XWhether that is true depends on what the Program does. X X 1. You may copy and distribute verbatim copies of the Program's Xsource code as you receive it, in any medium, provided that you Xconspicuously and appropriately publish on each copy an appropriate Xcopyright notice and disclaimer of warranty; keep intact all the Xnotices that refer to this License and to the absence of any warranty; Xand give any other recipients of the Program a copy of this License Xalong with the Program. X XYou may charge a fee for the physical act of transferring a copy, and Xyou may at your option offer warranty protection in exchange for a fee. X X 2. You may modify your copy or copies of the Program or any portion Xof it, thus forming a work based on the Program, and copy and Xdistribute such modifications or work under the terms of Section 1 Xabove, provided that you also meet all of these conditions: X X a) You must cause the modified files to carry prominent notices X stating that you changed the files and the date of any change. X X b) You must cause any work that you distribute or publish, that in X whole or in part contains or is derived from the Program or any X part thereof, to be licensed as a whole at no charge to all third X parties under the terms of this License. X X c) If the modified program normally reads commands interactively X when run, you must cause it, when started running for such X interactive use in the most ordinary way, to print or display an X announcement including an appropriate copyright notice and a X notice that there is no warranty (or else, saying that you provide X a warranty) and that users may redistribute the program under X these conditions, and telling the user how to view a copy of this X License. (Exception: if the Program itself is interactive but X does not normally print such an announcement, your work based on X the Program is not required to print an announcement.) X XThese requirements apply to the modified work as a whole. If Xidentifiable sections of that work are not derived from the Program, Xand can be reasonably considered independent and separate works in Xthemselves, then this License, and its terms, do not apply to those Xsections when you distribute them as separate works. But when you Xdistribute the same sections as part of a whole which is a work based Xon the Program, the distribution of the whole must be on the terms of Xthis License, whose permissions for other licensees extend to the Xentire whole, and thus to each and every part regardless of who wrote it. X XThus, it is not the intent of this section to claim rights or contest Xyour rights to work written entirely by you; rather, the intent is to Xexercise the right to control the distribution of derivative or Xcollective works based on the Program. X XIn addition, mere aggregation of another work not based on the Program Xwith the Program (or with a work based on the Program) on a volume of Xa storage or distribution medium does not bring the other work under Xthe scope of this License. X X 3. You may copy and distribute the Program (or a work based on it, Xunder Section 2) in object code or executable form under the terms of XSections 1 and 2 above provided that you also do one of the following: X X a) Accompany it with the complete corresponding machine-readable X source code, which must be distributed under the terms of Sections X 1 and 2 above on a medium customarily used for software interchange; or, X X b) Accompany it with a written offer, valid for at least three X years, to give any third party, for a charge no more than your X cost of physically performing source distribution, a complete X machine-readable copy of the corresponding source code, to be X distributed under the terms of Sections 1 and 2 above on a medium X customarily used for software interchange; or, X X c) Accompany it with the information you received as to the offer X to distribute corresponding source code. (This alternative is X allowed only for noncommercial distribution and only if you X received the program in object code or executable form with such X an offer, in accord with Subsection b above.) X XThe source code for a work means the preferred form of the work for Xmaking modifications to it. For an executable work, complete source Xcode means all the source code for all modules it contains, plus any Xassociated interface definition files, plus the scripts used to Xcontrol compilation and installation of the executable. However, as a Xspecial exception, the source code distributed need not include Xanything that is normally distributed (in either source or binary Xform) with the major components (compiler, kernel, and so on) of the Xoperating system on which the executable runs, unless that component Xitself accompanies the executable. X XIf distribution of executable or object code is made by offering Xaccess to copy from a designated place, then offering equivalent Xaccess to copy the source code from the same place counts as Xdistribution of the source code, even though third parties are not Xcompelled to copy the source along with the object code. X X 4. You may not copy, modify, sublicense, or distribute the Program Xexcept as expressly provided under this License. Any attempt Xotherwise to copy, modify, sublicense or distribute the Program is Xvoid, and will automatically terminate your rights under this License. XHowever, parties who have received copies, or rights, from you under Xthis License will not have their licenses terminated so long as such Xparties remain in full compliance. X X 5. You are not required to accept this License, since you have not Xsigned it. However, nothing else grants you permission to modify or Xdistribute the Program or its derivative works. These actions are Xprohibited by law if you do not accept this License. Therefore, by Xmodifying or distributing the Program (or any work based on the XProgram), you indicate your acceptance of this License to do so, and Xall its terms and conditions for copying, distributing or modifying Xthe Program or works based on it. X X 6. Each time you redistribute the Program (or any work based on the XProgram), the recipient automatically receives a license from the Xoriginal licensor to copy, distribute or modify the Program subject to Xthese terms and conditions. You may not impose any further Xrestrictions on the recipients' exercise of the rights granted herein. XYou are not responsible for enforcing compliance by third parties to Xthis License. X X 7. If, as a consequence of a court judgment or allegation of patent Xinfringement or for any other reason (not limited to patent issues), Xconditions are imposed on you (whether by court order, agreement or Xotherwise) that contradict the conditions of this License, they do not Xexcuse you from the conditions of this License. If you cannot Xdistribute so as to satisfy simultaneously your obligations under this XLicense and any other pertinent obligations, then as a consequence you Xmay not distribute the Program at all. For example, if a patent Xlicense would not permit royalty-free redistribution of the Program by Xall those who receive copies directly or indirectly through you, then Xthe only way you could satisfy both it and this License would be to Xrefrain entirely from distribution of the Program. X XIf any portion of this section is held invalid or unenforceable under Xany particular circumstance, the balance of the section is intended to Xapply and the section as a whole is intended to apply in other Xcircumstances. X XIt is not the purpose of this section to induce you to infringe any Xpatents or other property right claims or to contest validity of any Xsuch claims; this section has the sole purpose of protecting the SHAR_EOF : || echo 'restore of cdk-4.6.0/COPYING failed' fi echo 'End of archive part 8' echo 'File cdk-4.6.0/COPYING is continued in part 9' echo 9 > _sharseq.tmp exit 0