Lesson 6

From VistApedia
Revision as of 18:20, 10 October 2006 by Kdtop (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Linux / Apache / GT.M / Web Application Lesson 6


Indirection - A complex concept, used in a simple example.


The following routine makes use of the D(o) command to perform functions that draw each type table.


The do command is used to run a function and routine operation continues with the next command after the calling D(o) command.


The function "done" starts at the program tag called by the D(o) command and continues until the Q(uit) command, at which point operation returns to the command just after the calling D(o) command.


In the routine for this lession the command "D TB1" causes execution to go to the routine tag "TB1" and perform the operations in this function down to the point of the Q(uit) command, then execution returns to the command "S XX="TB1"".


The next topic, Indirection, allows the programmer to set a variable equal to a program tag. When used with the command "D @XX" execution goes to the routine tag that is the value contained in XX.


So the two commands in this case actually are the same and you will notice on your web page that each table is drawn twice.


The command line "D TB1" and "S XX="TB1" D @XX" perform the same function.


This looks a little silly at this point, but it's use will become very useful in the following lessons.



ZZLIB6


ZZLIB6  ; ROUTINE TO CREATE A WEB PAGE USING THE ^ZZLIB3 GLOBAL.

    ;
    ;
    W "Content-type: text/html",!!
    W "<html>",!
    W "<head>",!
    W "<title>ZZLIB3 GLOBAL LISTS.</title>",!
    W "</head>",!
    W "<body>",!
    ;
    D TB1
    S XX="TB1"
    D @XX
    ;
    D TB2
    S XX="TB2"
    D @XX
    ;
    D TB3
    S XX="TB3"
    D @XX
    ;
    W "</body>",!
    W "</html>",!
    ;
    Q
    ;
TB1 W "

",! W "

",! W "",! W "",! W "",! S ZS1=0 F S ZS1=$O(^ZZLIB3(ZS1)) Q:+ZS1=0 D .S ZD1=^ZZLIB3(ZS1) .W "",! .W "","","",! .W "",! W "
INDEXFIRST NAMELAST NAME
",ZS1,"",$P(ZD1,"^",2),"",$P(ZD1,"^",1),"
",! W "

",!
    Q
    ;
TB2 W "

",! W "

",! W "",! W "",! W "",! S ZS1="B" S ZS2="" F S ZS2=$O(^ZZLIB3(ZS1,ZS2)) Q:ZS2="" D .S ZS3="" .F S ZS3=$O(^ZZLIB3(ZS1,ZS2,ZS3)) Q:ZS3="" D ..S ZS4="" ..F S ZS4=$O(^ZZLIB3(ZS1,ZS2,ZS3,ZS4)) Q:ZS4="" D ...S ZD4=^ZZLIB3(ZS4) ...W "",! ...W "","","",! ...W "",! W "
INDEXFIRST NAMELAST NAME
",ZS4,"",$P(ZD4,"^",2),"",$P(ZD4,"^",1),"
",! W "

",!
    Q

TB3  ;

W "

",! W "

",! W "",! W "",! W "",! S ZS1="C" S ZS2="" F S ZS2=$O(^ZZLIB3(ZS1,ZS2)) Q:ZS2="" D .S ZS3="" .F S ZS3=$O(^ZZLIB3(ZS1,ZS2,ZS3)) Q:ZS3="" D ..S ZS4="" ..F S ZS4=$O(^ZZLIB3(ZS1,ZS2,ZS3,ZS4)) Q:ZS4="" D ...S ZD4=^ZZLIB3(ZS4) ...W "",! ...W "","","",! ...W "",! W "
INDEXFIRST NAMELAST NAME
",ZS4,"",$P(ZD4,"^",2),"",$P(ZD4,"^",1),"
",! W "

",!
    Q