uso del ' en system

Hola amigos tengo duda sobre el uso de la comilla simple en la mayoria de programas aparece y segun se indica hace una evaluacion posterior del comando pero porque es tan necesario la utilizacion de este alguien me podria poner un ejemplo claro osea de que me sirve que los evalue posteriormente?
encontre un ejemplo en el RLPMAN pero igual no logro entender
:: # 3 # 4 SWAP ;
:: # 3 # 4 ' SWAP EVAL ;
Y lo que dice es:
Este es al análogo RPL del QUOTE del Lisp y es uno de los objetos de
control más fundamentales, permitiendo posponer la evaluación de un objeto.
De modo más preciso, supone que el cuerpo en la cima del RUNSTREAM no es
uno vacío, o sea, que el puntero del intérprete no apunta a un SEMI; y (1)
Si el siguiente objeto en el runstream es un objeto, entonces sube este
objeto a la pila de datos y mueve el puntero del intérprete al siguiente
objeto; (2) Si el siguiente objeto es un puntero de objeto, entonces sube
lo apuntado a la pila de datos y salta también al siguiente objeto. Como
ejemplo, la evaluación de los secundarios
tambien
'DROPFALSE DROPFALSE con o sin comilla simple
Otros temas de interes

El comando ' (QUOTE) lo que hace es dejar en la pila el siguiente objeto del runstream. Esto es necesario a veces cuando se quiere dejar un objeto programa o un ID.
Por ejemplo, si quieres grabar un objeto en una variable deberías hacer:
:: %123 ' ID R1 STO ; @
En este ejemplo, si no pones ' el objeto ID R1 será evaluado, dejando en la pila el objeto contenido en la variable o ejecuntandolo si es un secundario.

El que está al final de RPLMAN
INCLUDE KEYDEFS.H
*
* Incluye los ocho caracteres necesarios para la carga binaria
*
::
RECLAIMDISP ( *Llama la pantalla alfa* )
ClrDA1IsStat ( *Desactiva temporalmente el reloj* )
* ( *Pruebalo sin ClrDA1IsStat* )
ZEROZERO ( #0 #0 )
150 150 MAKEGROB ( #0 #0 150x150grob )
XYGROBDISP ( )
*
* Dibuja lineas diagonales. Recuerda que LINEON precisa que
* #x2>#x1 !
*
ZEROZERO ( #x1 #y1 )
149 149 ( #x1 #y1 #x2 #y2 )
LINEON ( *Dibuja linea* )
ZERO 149 ( #x1 #y1 )
149 ZERO ( #x1 #y1 #x2 #y2 )
LINEON ( *Dibuja linea* )
*
* Pone texto
*
HARDBUFF
75 50 "SCROLLING" ( HBgrob 75 150 "SCROLLING" )
150 CENTER$3x5 ( HBgrob )
75 100 "EXAMPLE" ( HBgrob 75 100 "EXAMPLE" )
150 CENTER$3x5 ( HBgrob )
DROPFALSE ( FALSE )
{ LAM Exit } BIND ( *Une la bandera de salida del POL* )
' DispMenu.1 ( *La Accion de Pantalla muestra el menu* )
' :: ( *Controlador de las teclas fisicas* )
kpNoShift #=casedrop
::
DUP#<7 casedrpfls ( *habilita las teclas de menus* )
kcUpArrow ?CaseKeyDef
:: TakeOver SCROLLUP ;
kcLeftArrow ?CaseKeyDef
:: TakeOver SCROLLLEFT ;
kcDownArrow ?CaseKeyDef
:: TakeOver SCROLLDOWN ;
kcRightArrow ?CaseKeyDef
:: TakeOver SCROLLRIGHT ;
kcOn ?CaseKeyDef
:: TakeOver
TRUE ' LAM Exit STO ;
kcRightShift #=casedrpfls
DROP 'DoBadKeyT
;
2DROP 'DoBadKeyT
;
TrueTrue ( *Banderas del control de teclado* )
{
{ "TOP" :: TakeOver JUMPTOP ; }
{ "BOT" :: TakeOver JUMPBOT ; }
{ "LEFT" :: TakeOver JUMPLEFT ; }
{ "RIGHT" :: TakeOver JUMPRIGHT ; }
NullMenuKey
{ "QUIT" :: TakeOver TRUE ' LAM Exit STO ; }
}
ONEFALSE ( *Primera fila, no suspender* )
' LAM Exit ( *Condicion de salida de la Aplicacion* )
' ERRJMP ( *Controlador de Errores* )
ParOuterLoop ( *Ejecuta el ParOuterLoop* )
RECLAIMDISP ( *Cambia el tama¤o y borra la pantalla* )
SetDAsBAD ( *Redibuja la Pantalla* )
;
@

Hola Kamir.
Lo que preguntas ya ha sido explicado en este foro.
A continuación el enlace al tema pasado:
http://www.adictoshp.org/node/2623
Hasta pronto.


en el ejemplo q comando es exactamente:
kpNoShift
kcUpArrow
kcLeftArrow
kcDownArrow
kcRightArrow
kcOn
kcRightShift
SetDAsBAD
no he podido hacer funcionar este codigo debido a estos comando o no se que son alguien puede corregir esto

Al principio del programa hay comentarios respecto a esto.
Fijate que se pone:
INCLUDE KEYDEFS.H
Esto quiere decir que se incluye el codigo fuente del archivo KEYDEFS.H que contine las definiciones o asignaciones de nombres al código de tecla.
Si empiesa con kc (key code) quiere decir que esta representando un BINT del codigo de tecla en el caso de la palabra kcUpArrow se está refiriendo al BINT10 que el codigo de la tecla flecha arriba.
Si empieza con kp (key plane) se refiere al plano en el cual se precionó la tecla anterior, es decir sin shift (BINT1), con shift izquierdo (BINT2), con shift derecho (BINT3), etc.
Para usar las asignaciones del archivo KEYDEFS.H puedes revisar el archivo header.h (linea 585) que se encuentra en la carpeta INLUDE del programa Debug4x. Este archivo contiene un numero bastante grande de asignaciones o definiciones que puedes usar en tus programas.


PROGRAMA PRINCIPAL: guardar con variable PRIN
la teclas + y - aumentan o disminuyen el valor numérico mostrado en la pantalla.
las etiquetas SECUN y QUIT realizan una accion determinada
SECUN: ejecuta otro programa guardado en variable SECUN
QUIT: finaliza la ejecucion del programa PRIN
!NO CODE
!RPL
::
0LastRomWrd!
CK0NOLASTWD
ClrDA1IsStat
RECLAIMDISP
FALSE
% 1.
'
LAM Running
'
LAM Value
BINT2
DOBIND
'
::
DA3OK?
?SKIP
::
DispMenu.1
SetDA3Valid
;
LAM Value
EDITDECOMP$
BIGDISPROW4
;
'
::
BINT1
#=casedrop
::
DUP#<7
casedrpfls
# 29
?CaseKeyDef
::
TakeOver
LAM Value
%1-
'
LAM Value
STO
;
# 2E
?CaseKeyDef
::
TakeOver
LAM Value
%1+
'
LAM Value
STO
;
# 2A
#=casedrpfls
DROP
'DoBadKeyT
;
BINT3
#=casedrop
::
# 2A
#=casedrpfls
# 2F
#=casedrpfls
DROP
'DoBadKeyT
;
2DROP
'DoBadKeyT
;
TRUE
TRUE
{
NullMenuKey
NullMenuKey
NullMenuKey
NullMenuKey
{
"SECUN"
::
ID SECUN
;
}
{
"QUIT"
::
TakeOver
TRUE
'
LAM Running
STO
;
}
}
BINT1
FALSE
'
LAM Running
'
ERRJMP
ParOuterLoop
ABND
ClrDAsOK
;
@
PROGRAMA SECUNDARIO: guardar en variable SECUN
las teclas SHIF BLANCO Y SHIF ROJO en conjunto con la etiqueta KEY hace una determinada accion
SHIF BLANCO + KEY = muestra un mensaje 1
SHIF ROJO + KEY = muestra un mensaje 2
KEY = muestra un mensaje 3
!NO CODE
!RPL
::
0LastRomWrd!
CK0NOLASTWD
RECLAIMDISP
ClrDA1IsStat
FALSE
'
LAM Running
BINT1
DOBIND
'
::
DA3OK?
?SEMI
DispMenu.1
SetDA3Valid
;
'
::
BINT1
#=casedrop
::
DUP#<7
casedrpfls
# 25
#=casedrpfls
# 2A
#=casedrpfls
# 2F
?CaseKeyDef
::
TakeOver
TRUE
'
LAM Running
STO
;
DROP
'DoBadKeyT
;
BINT2
#=casedrop
::
DUP#<7
casedrpfls
# 25
#=casedrpfls
# 2A
#=casedrpfls
DROP
'DoBadKeyT
;
BINT3
#=casedrop
::
DUP#<7
casedrpfls
# 25
#=casedrpfls
# 2A
#=casedrpfls
# 2F
#=casedrpfls
DROP
'DoBadKeyT
;
2DROP
'DoBadKeyT
;
TRUE
TRUE
{
{
"KEY"
{
::
TakeOver
"Primary"
BIGDISPROW3
%1
xWAIT
DOCLLCD
;
::
TakeOver
"Left-Shift"
BIGDISPROW4
%1
xWAIT
DOCLLCD
;
::
TakeOver
"Right-Shift"
DISPROW5
%1
xWAIT
DOCLLCD
;
}
}
}
ONEFALSE
'
LAM Running
'
ERRJMP
ParOuterLoop
ABND
ClrDAsOK
;
@
ahora bien mi pregunta es la siguiente, cuando ejecuto el programa PRIN el cual realiza correctamente sus funciones programadas sin problemas, pero sin embargo cuando presiono la etiqueta "SECUN" el cual es otro programa que su parte hace sus funciones programas muy bien.
la etiqueta "SECUN" llama a el programa SECUN y lo ejecuta bien, PERO NO ACTUALIZA SU MENU O ETIQUETAS, me refiero a que su funcion de las teclas shif y key muestran los mensaje pero sus etiquetas quedan congeladas con las del menu PRIN
como puedo corregir esto?



Los 2 programas usan el POL como bucle. No se si esto sea posible, puede que exista algún conflicto en sus entornos de manejo de pantalla, menus, teclas, etc. De hecho para ambos usas la misma variable local para salir del POL, el LAM Running.






otro ejemplito
si no existe lo inventamos