File: hellotype.tcl

package info (click to toggle)
tcllib 1.20%2Bdfsg-1
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 68,064 kB
  • sloc: tcl: 216,842; ansic: 14,250; sh: 2,846; xml: 1,766; yacc: 1,145; pascal: 881; makefile: 107; perl: 84; f90: 84; python: 33; ruby: 13; php: 11
file content (60 lines) | stat: -rw-r--r-- 1,485 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
###
# This example implements a "hello world" type
# which is a completely useless Tcl_Obj that only
# stores the content "Hello World"
###

my code define {
#define HELLO_WORLD "Hello World!"
}

my c_function {Tcl_Obj *MyProg_NewHelloWorldObj(void)} {
  Tcl_Obj *objPtr=Tcl_NewObj();
  Tcl_InvalidateStringRep(objPtr);
  objPtr->typePtr=&helloworld_tclobjtype;
  objPtr->internalRep.otherValuePtr=Tcl_Alloc(strlen(HELLO_WORLD));
  strcpy(objPtr->internalRep.otherValuePtr,HELLO_WORLD);
  return objPtr;
}

my c_tclproc_raw ::helloObj {
  Tcl_Obj *pResult=MyProg_NewHelloWorldObj();
  Tcl_SetObjResult(pResult);
  return TCL_OK;
}

my c_tclproc_raw ::is_helloObj {
  int true=objv[1]->typePtr==&helloworld_tclobjtype;
  Tcl_SetObjResult(Tcl_NewBooleanObj(true));
  return TCL_OK;
}

my tcltype helloworld {
  cname helloworld_tclobjtype
 
freeproc {
  Tcl_Free(objPtr->internalRep.otherValuePtr);
  objPtr->internalRep.otherValuePtr=NULL;
  objPtr->typePtr=NULL;
} 
dupproc {
  char *src=srcPtr->internalRep.otherValuePtr;
  int size=sizeof(*src);
  char *copy=(char *)Tcl_Alloc(size);
  memcpy(copy,src,size);
  Tcl_InvalidateStringRep(dupPtr);
  dupPtr->typePtr=&@CNAME@;
  dupPtr->internalRep.otherValuePtr=copy;
} 
updatestringproc {
  /* Update String Rep */
  objptr->length=strlen(HELLO_WORLD);
  objptr->bytes=Tcl_Alloc(objptr->length+1);
  strcpy(objptr->bytes,HELLO_WORLD);
} 

setfromanyproc {
  Tcl_AppentResult(interp,"Hello World is a constant");
  return TCL_ERROR;
}
}