home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / info-service / gopher / Rice_CMS / gopher24 / gopclimb.$rexx < prev    next >
Encoding:
Text File  |  1993-01-25  |  39.9 KB  |  505 lines

  1. /*                                                                      00010000
  2.  *        Name: GOPCLIMB REXX                                           00020000
  3.  *              VM TCP/IP Network GOPHER Client menu browser            00030000
  4.  *      Author: Rick Troth, Rice University, Information Systems        00040000
  5.  *        Date: 1992-Dec-23                                             00050000
  6.  *                                                                      00060000
  7.  *       Input: one or more gopher menu lines                           00070000
  8.  *      Output: zero or more information or error messages              00080000
  9.  */                                                                     00090000
  10.                                                                         00100000
  11. /*                                                                      00110000
  12.  *      Copyright 1992 Richard M. Troth.   This software was developed  00120000
  13.  *      with resources provided by Rice University and is intended      00130000
  14.  *      to serve Rice's user community.   Rice has benefitted greatly   00140000
  15.  *      from the free distribution of software,  therefore distribution 00150000
  16.  *      of unmodified copies of this material is not restricted.        00160000
  17.  *      You may change your own copy as needed.   Neither Rice          00170000
  18.  *      University nor any of its employees or students shall be held   00180000
  19.  *      liable for damages resulting from the use of this software.     00190000
  20.  */                                                                     00200000
  21.                                                                         00210000
  22. Trace "OFF"                                                             00220000
  23.                                                                         00230000
  24. Parse Arg args '(' . ')' .                                              00240000
  25.                                                                         00250000
  26. /*  verify availability of input  */                                    00260000
  27. 'PEEKTO'                                                                00270000
  28. If rc ^= 0 & rc ^= 12 Then Exit rc                                      00280000
  29. If rc = 12 Then Do  /*  empty menu  */                                  00290000
  30.     'CALLPIPE COMMAND XMITMSG 60 (APPLID GOP CALLER CLI ERRMSG | *:'    00300000
  31.     Exit                                                                00310000
  32.     End  /*  If  ..  Do  */                                             00320000
  33.                                                                         00330000
  34. Address "COMMAND" 'GLOBALV SELECT GOPHER GET' ,                         00340000
  35.         'GOPHER PROGID VIEWER ITEM'                                     00350000
  36. quit = 0                                                                00360000
  37.                                                                         00370000
  38. Parse Var item name '05'x path '05'x host '05'x port '05'x xtra         00380000
  39. Parse Var name 1 . 2 name       /*  discard type indicator byte  */     00390000
  40. Parse Var path 1 . 2 path       /*  discard type indicator byte  */     00400000
  41. If name = "" Then name = args                                           00410000
  42. booklist = (item = "")                                                  00420000
  43.                                                                         00430000
  44. /*  fetch fs. stem variable from GlobalVs  */                           00440000
  45. 'CALLPIPE COMMAND GLOBALV SELECT GOPHER LIST | DROP' ,                  00450000
  46.         '| LOCATE 1-4 / FS./ | SPEC /=/ 1 2-* NEXT | VARLOAD'           00460000
  47. If ^Datatype(fs.tube,'X') Then fs.tube = ""                             00470000
  48.                                                                         00480000
  49. 'CALLPIPE *: | STEM MENU.'                                              00490000
  50.                                                                         00500000
  51. /* is it a server error? */                                             00510000
  52. If menu.0 = 1 & Left(menu.1,1) = '-' Then Do                            00520000
  53.     Parse Var menu.1 . '-' errmsg '05'x .                               00530000
  54.     'OUTPUT' errmsg                                                     00540000
  55.     Exit                                                                00550000
  56.     End  /*  If  ..  Do  */                                             00560000
  57.                                                                         00570000
  58. /*  display the menu and process user's response  */                    00580000
  59. row = 0;        col = 0         /*  reset later  */                     00590000
  60. ki = menu.0;    kl = fs.scrrows - 5;    ko = 1                          00600000
  61. needle = ""     /*  may be re-used within this context  */              00610000
  62. message.0 = 0                                                           00620000
  63. command = ""                                                            00630000
  64.                                                                         00640000
  65. If booklist Then 'CALLPIPE COMMAND XMITMSG 615' ,                       00650000
  66.         '(APPLID GOP CALLER CLI NOCOMP | SPEC WORD 2-* 1 | STEM HELP.'  00660000
  67.             Else 'CALLPIPE COMMAND XMITMSG 613' ,                       00670000
  68.         '(APPLID GOP CALLER CLI NOCOMP | SPEC WORD 2-* 1 | STEM HELP.'  00680000
  69.                                                                         00690000
  70. 'CALLPIPE COMMAND XMITMSG 5 (APPLID GOP NOHEADER | VAR MORE'            00700000
  71.                                                                         00710000
  72. Do Forever                                                              00720000
  73.                                                                         00730000
  74.     /*  write the program title line  */                                00740000
  75.     wscreen = sba(0,-1) || field("BLUE","PROT") || sba(0,0) || progid , 00750000
  76.                         || sba(0,fs.scrcols-Length(host)-1) || host     00760000
  77.                                                                         00770000
  78.     /*  no SBA for status because it follows host immediately  */       00780000
  79.     If message.0 < 1 Then Do                                            00790000
  80.     wscreen = wscreen   || field("PROT") || Left(ko || '/' || ki, 11)   00800000
  81.     If ko + kl <= ki Then                                               00810000
  82.     wscreen = wscreen   || field("WHITE","HIGH","PROT") || more         00820000
  83.         End  /*  If  ..  Do  */                                         00830000
  84.                                                                         00840000
  85.     /*  don't write status or name if they'll be overlaid  */           00850000
  86.     If message.0 < 2 Then                                               00860000
  87.     wscreen = wscreen   || sba(2,(fs.scrcols-Length(name))/2) ,         00870000
  88.                         || field("WHITE","PROT") || name                00880000
  89.                                                                         00890000
  90.     /*  write as many message lines as needed  */                       00900000
  91.     If message.0 > 0 Then Do                                            00910000
  92.         Do i = 1 to message.0                                           00920000
  93.             wscreen = wscreen || sba(i,-1) ,                            00930000
  94.                 || field("RED","HIGH","PROT") || message.i              00940000
  95.             End  /*  Do  For  */                                        00950000
  96.         message.0 = 0                                                   00960000
  97.         End  /*  If  ..  Do  */                                         00970000
  98.     /*  we should probably limit that count  */                         00980000
  99.                                                                         00990000
  100.     /*  write those PFkey settings  */                                  01000000
  101.     wscreen = wscreen   || sba(fs.scrrows-2,-1) ,                       01010000
  102.                         || field("BLUE","PROT") ,                       01020000
  103.                         || help.1 ,                                     01030000
  104.                         || sba(fs.scrrows-1,-1) ,                       01040000
  105.                         || field("BLUE","PROT") ,                       01050000
  106.                         || help.2                                       01060000
  107.                                                                         01070000
  108.     i = 1; j = ko                                                       01080000
  109.     Do While i <= kl & j <= ki                                          01090000
  110.                                                                         01100000
  111.         Parse Var menu.j _name '05'x .                                  01110000
  112.         Parse Var _name 1 _type 2 _name                                 01120000
  113.         'CALLPIPE VAR _NAME | XLATE OUTPUT' ,                           01130000
  114.             '| XLATE *-* 00-3F 40 FF 40 | VAR _NAME'                    01140000
  115.                                                                         01150000
  116.         wscreen = wscreen || sba(i+2,-1) ,                              01160000
  117.                           || field("BLUE","PROT","HIGH")                01170000
  118.         If _type = 'i' Then                                             01180000
  119.         wscreen = wscreen || Left(_name,fs.scrcols-1)                   01190000
  120.                       Else Do                                           01200000
  121.         wscreen = wscreen || Left(gtag(_type),11) ,                     01210000
  122.                           || field("GREEN") ,                           01220000
  123.                           || Left(_name,fs.scrcols-13)                  01230000
  124.             If row = 0 Then Do                                          01240000
  125.                 row = i + 2;    col = 12                                01250000
  126.                 End  /*  If  ..  Do  */                                 01260000
  127.             End  /*  Else  Do  */                                       01270000
  128.                                                                         01280000
  129.         i = i + 1;  j = j + 1                                           01290000
  130.                                                                         01300000
  131.         End  /*  Do  While  */                                          01310000
  132.                                                                         01320000
  133.     rscreen = write_read(wscreen || sba(row,col) || '13'x)              01330000
  134.     Parse Var rscreen 1 aid 2 offset . '11'x rscreen                    01340000
  135.     offset = fix(offset)                                                01350000
  136.     row = offset % fs.scrcols; col = offset // fs.scrcols               01360000
  137.                                                                         01370000
  138.     /*  keep the row/col values within bounds  */                       01380000
  139.     If  row      <   3       Then row = 3                               01390000
  140.     If  row      >   kl + 3  Then row = kl + 3                          01400000
  141.     If  row + ko >   ki + 3  Then row = ki + 3 - ko                     01410000
  142.     col = 12    /*  just reset it  */                                   01420000
  143.                                                                         01430000
  144.     i = row + ko - 3                                                    01440000
  145.                                                                         01450000
  146.     Select /* aid */                                                    01460000
  147.         When  aid = '7D'x   /* enter */ | ,                             01470000
  148.               aid = 'F2'x   /*  PF2  */ | ,                             01480000
  149.               aid = 'C2'x   /*  PF14 */ | ,                             01490000
  150.               aid = '7B'x   /*  PF11 */ | ,                             01500000
  151.               aid = '4B'x   /*  PF23 */ Then  Call  OPEN                01510000
  152.         When  aid = 'F3'x   /*  PF3  */ | ,                             01520000
  153.               aid = 'C3'x   /*  PF15 */ Then  Leave                     01530000
  154.         When  aid = 'F4'x   /*  PF4  */ | ,                             01540000
  155.               aid = 'C4'x   /*  PF16 */ Then  Call  PRINT               01550000
  156.         When  aid = 'F5'x   /*  PF5  */ | ,                             01560000
  157.               aid = 'C5'x   /*  PF17 */ Then  Call  KEEP                01570000
  158.         When  aid = 'F6'x   /*  PF6  */ | ,                             01580000
  159.               aid = 'C6'x   /*  PF18 */ Then  Call  FIND                01590000
  160.         When  aid = 'F7'x   /*  PF7  */ | ,                             01600000
  161.               aid = 'C7'x   /*  PF19 */ Then Do                         01610000
  162.             ko = Max(ko-kl+1,1)                                         01620000
  163.             row = 3                                                     01630000
  164.             End  /*  When  ..  Do  */                                   01640000
  165.         When  aid = 'F8'x   /*  PF8  */ | ,                             01650000
  166.               aid = 'C8'x   /*  PF20 */ Then Do                         01660000
  167.             ko = Min(ko+kl-1,ki)                                        01670000
  168.             row = 3                                                     01680000
  169.             End  /*  When  ..  Do  */                                   01690000
  170.         When  aid = 'F9'x   /*  PF9  */ | ,                             01700000
  171.               aid = 'C9'x   /*  PF21 */ Then  Call  MARK                01710000
  172.         When  aid = '7A'x   /*  PF10 */ | ,                             01720000
  173.               aid = '4A'x   /*  PF22 */ Then  Call  BOOKLIST            01730000
  174.         When  aid = '6D'x   /* clear */ | ,                             01740000
  175.               aid = '6E'x   /*  PA2  */ Then Do                         01750000
  176.             row = 3;    col = 12;   ko = 1                              01760000
  177.             End  /*  When ..  Do  */                                    01770000
  178.         When  aid = '7C'x   /*  PF12 */ | ,                             01780000
  179.               aid = '4C'x   /*  PF24 */ | ,                             01790000
  180.               aid = 'F0'x   /* sysrq */ | ,                             01800000
  181.               aid = '6C'x   /*  PA1  */ Then  quit = 1                  01810000
  182.         When  aid = 'F1'x   /*  PF1  */ | ,                             01820000
  183.               aid = 'C1'x   /*  PF13 */ Then  Call  HELP                01830000
  184.         When  aid = '00'x               Then Do                         01840000
  185.             /*  I/O error on screen  */                                 01850000
  186.             'CALLPIPE COMMAND XMITMSG 925 (APPLID GOP' ,                01860000
  187.                     'CALLER CLI ERRMSG | STEM MESSAGE. APPEND'          01870000
  188.             Leave                                                       01880000
  189.             End                                                         01890000
  190.         Otherwise  Do   /*  Undefined PFkey/PAkey  */                   01900000
  191.             'CALLPIPE COMMAND XMITMSG 657 "' || c2x(aid) || '"' ,       01910000
  192.                 '(APPLID GOP CALLER CLI ERRMSG | STEM MESSAGE. APPEND'  01920000
  193.             End  /*  Otherwise  Do  */                                  01930000
  194.         End  /*  Select  aid  */                                        01940000
  195.                                                                         01950000
  196.     Address "COMMAND" 'GLOBALV SELECT GOPHER GET COMMAND'               01960000
  197.     Parse Upper Var command cmdverb .                                   01970000
  198.     quit = (quit | Abbrev("QUIT",cmdverb,1))                            01980000
  199.                                                                         01990000
  200.     If quit Then Leave                                                  02000000
  201.                                                                         02010000
  202.     End  /*  Do  Forever  */                                            02020000
  203.                                                                         02030000
  204. If quit Then command = "QUIT"                                           02040000
  205.                                                                         02050000
  206. 'CALLPIPE STEM MESSAGE. | *:'                                           02060000
  207.                                                                         02070000
  208. Parse Upper Var command cmdverb .                                       02080000
  209. Address "COMMAND" 'GLOBALV SELECT GOPHER PUT' ,                         02090000
  210.         'COMMAND CMDVERB'                                               02100000
  211.                                                                         02110000
  212. Exit                                                                    02120000
  213.                                                                         02130000
  214.                                                                         02140000
  215.                                                                         02150000
  216. /* ---------------------------------------------------------------- OPEN02160000
  217.  */                                                                     02170000
  218. OPEN:                                                                   02180000
  219.                                                                         02190000
  220. 'CALLPIPE VAR MENU.' || i '| GOPCLITM OPEN | STEM MESSAGE. APPEND'      02200000
  221.                                                                         02210000
  222. Return                                                                  02220000
  223.                                                                         02230000
  224.                                                                         02240000
  225.                                                                         02250000
  226. /* --------------------------------------------------------------- PRINT02260000
  227.  * Print the current "menu" on the user's virtual printer.              02270000
  228.  */                                                                     02280000
  229. PRINT:                                                                  02290000
  230.                                                                         02300000
  231. If fs.tube ^= "" Then Do                                                02310000
  232.     /*  "Can't PRINT from this terminal."  */                           02320000
  233.     'CALLPIPE COMMAND XMITMSG 507 (APPLID GOP CALLER CLI ERRMSG' ,      02330000
  234.             '| STEM MESSAGE. APPEND'                                    02340000
  235.     Return                                                              02350000
  236.     End /* If .. Do */                                                  02360000
  237.                                                                         02370000
  238. 'CALLPIPE STEM MENU. | XLATE *-* 05 7A' ,                               02380000
  239.         '| PRINT (TITLE' name '| STEM MESSAGE. APPEND'                  02390000
  240.                                                                         02400000
  241. Return                                                                  02410000
  242.                                                                         02420000
  243.                                                                         02430000
  244.                                                                         02440000
  245. /* ---------------------------------------------------------------- KEEP02450000
  246.  */                                                                     02460000
  247. KEEP:                                                                   02470000
  248.                                                                         02480000
  249. 'CALLPIPE VAR MENU.' || i '| GOPCLITM KEEP | STEM MESSAGE. APPEND'      02490000
  250.                                                                         02500000
  251. Return                                                                  02510000
  252.                                                                         02520000
  253.                                                                         02530000
  254.                                                                         02540000
  255. /* ---------------------------------------------------------------- FIND02550000
  256.  *  Find a particular string within the menu being viewed.              02560000
  257.  *  Call GOPCLIUI for user input with prompt.                           02570000
  258.  */                                                                     02580000
  259. FIND:                                                                   02590000
  260.                                                                         02600000
  261. 'CALLPIPE COMMAND XMITMSG 602 "' || needle || '" (APPLID GOP' ,         02610000
  262.         'CALLER CLI NOHEADER | GOPCLIUI | VAR NEEDLE'                   02620000
  263. needle = Translate(Strip(needle))                                       02630000
  264. If needle = "" Then Return                                              02640000
  265.                                                                         02650000
  266. Do i = ko + 1 to ki                                                     02660000
  267.     If Index(Translate(menu.i),needle) > 0 Then Do                      02670000
  268.         ko = i                                                          02680000
  269.         Return                                                          02690000
  270.         End  /*  If  ..  Do  */                                         02700000
  271.     End  /*  Do  For  */                                                02710000
  272.                                                                         02720000
  273. /*  'CALLPIPE COMMAND XMITMSG 546 (ERRMSG'  CALLER DMS is OK  */        02730000
  274. /*  "Target not found"  */                                              02740000
  275. 'CALLPIPE COMMAND XMITMSG 546 (APPLID GOP CALLER CLI ERRMSG' ,          02750000
  276.         '| STEM MESSAGE. APPEND'                                        02760000
  277.                                                                         02770000
  278. Return                                                                  02780000
  279.                                                                         02790000
  280.                                                                         02800000
  281.                                                                         02810000
  282. /* ---------------------------------------------------------------- MARK02820000
  283.  *  Save a bookmark referencing this menu,                              02830000
  284.  *  or  (if in "booklist" mode)  delete the bookmark at the cursor.     02840000
  285.  */                                                                     02850000
  286. MARK:                                                                   02860000
  287.                                                                         02870000
  288. If fs.tube ^= "" Then Do                                                02880000
  289.     /*  "Can't set bookmarks from this screen."  */                     02890000
  290.     'CALLPIPE COMMAND XMITMSG 43 (APPLID GOP CALLER CLI ERRMSG' ,       02900000
  291.             '| STEM MESSAGE. APPEND'                                    02910000
  292.     Return                                                              02920000
  293.     End /* If .. Do */                                                  02930000
  294.                                                                         02940000
  295. If booklist Then Do                                                     02950000
  296.     'CALLPIPE COMMAND XMITMSG 42 I (APPLID GOP NOHEADER' ,              02960000
  297.         '| SPEC /i            / 1 1-* NEXT | VAR BOOKMARK.' || i        02970000
  298.     If rc = 0 Then                                                      02980000
  299.     Address "COMMAND" 'GLOBALV SELECT GOPHER PUTP BOOKMARK.' || i       02990000
  300.     If rc = 0 Then 'CALLPIPE COMMAND XMITMSG 42 I' ,                    03000000
  301.         '(APPLID GOP CALLER CLI ERRMSG | STEM MESSAGE. APPEND'          03010000
  302.         /*  "Bookmark" i "deleted."  */                                 03020000
  303.     Else 'CALLPIPE COMMAND XMITMSG 514 RC "GLOBALV"' ,                  03030000
  304.         '(APPLID GOP CALLER CLI ERRMSG | STEM MESSAGE. APPEND'          03040000
  305.     Return                                                              03050000
  306.     End /* If .. Do */                                                  03060000
  307.                                                                         03070000
  308. Address "COMMAND" 'GLOBALV SELECT GOPHER GET BOOKMARK.0'                03080000
  309. If ^Datatype(bookmark.0,'N') Then bookmark.0 = 0                        03090000
  310. i = bookmark.0 + 1                                                      03100000
  311. bookmark.i = item                                                       03110000
  312. Address "COMMAND" 'GLOBALV SELECT GOPHER PUTP BOOKMARK.' || i           03120000
  313. bookmark.0 = i                                                          03130000
  314. Address "COMMAND" 'GLOBALV SELECT GOPHER PUTP BOOKMARK.0'               03140000
  315.                                                                         03150000
  316. If rc = 0 Then 'CALLPIPE COMMAND XMITMSG 41 I' ,                        03160000
  317.     '(APPLID GOP CALLER CLI ERRMSG | STEM MESSAGE. APPEND'              03170000
  318.     /*  "Bookmark" i "saved."  */                                       03180000
  319.           Else 'CALLPIPE COMMAND XMITMSG 514 RC "GLOBALV"' ,            03190000
  320.         '(APPLID GOP CALLER CLI ERRMSG | STEM MESSAGE. APPEND'          03200000
  321.                                                                         03210000
  322. Return                                                                  03220000
  323.                                                                         03230000
  324.                                                                         03240000
  325.                                                                         03250000
  326. /* ------------------------------------------------------------ BOOKLIST03260000
  327.  *  Call GOPCLI to show the lit of bookmarks.                           03270000
  328.  */                                                                     03280000
  329. BOOKLIST:                                                               03290000
  330.                                                                         03300000
  331. Address "CMS" 'GOPCLI (BOOKLIST'                                        03310000
  332.                                                                         03320000
  333. Return                                                                  03330000
  334.                                                                         03340000
  335.                                                                         03350000
  336.                                                                         03360000
  337. /* ----------------------------------------------------------------- FIX03370000
  338.  * Takes an inbound 3270 DS screen address (two bytes)                  03380000
  339.  * and returns the equivalent byte offset in decimal.                   03390000
  340.  */                                                                     03400000
  341. FIX:                                                                    03410000
  342. Parse Arg o,.                                                           03420000
  343. Parse Var o 1 o1 2 o2 3 .                                               03430000
  344. o1 = c2d(o1)                                                            03440000
  345. o2 = c2d(o2)                                                            03450000
  346. If o1 < 64 Then Return o1 * 256 + o2                                    03460000
  347.            Else Return (o1 // 64) * 64 + (o2 // 64)                     03470000
  348.                                                                         03480000
  349.                                                                         03490000
  350.                                                                         03500000
  351. /* ---------------------------------------------------------- WRITE_READ03510000
  352.  * Display what we have, then wait for user input and return it.        03520000
  353.  */                                                                     03530000
  354. WRITE_READ: Procedure Expose fs.                                        03540000
  355. Parse Arg ws,wcc,wrt,.                                                  03550000
  356. If wcc = "" Then wcc = 'C3'x                                            03560000
  357. /*  If wrt = "" Then wrt = 'C0'x  */                                    03570000
  358. If wrt = "" Then wrt = fs.write                                         03580000
  359. ws = wrt || wcc || ws                                                   03590000
  360. 'CALLPIPE VAR WS | FULLSCR' fs.tube '| VAR RS'                          03600000
  361. If rc ^= 0 Then rs = '000000'x                                          03610000
  362. Return rs                                                               03620000
  363.                                                                         03630000
  364.                                                                         03640000
  365.                                                                         03650000
  366. /* ----------------------------------------------------------------- SBA03660000
  367.  * (a better SBA function extracted from PIPEDEMO; thanks, Chuck!)      03670000
  368.  * Construct Set Buffer Address order from row and column.              03680000
  369.  */                                                                     03690000
  370.                                                                         03700000
  371. SBA:      Procedure Expose fs.                                          03710000
  372.                                                                         03720000
  373. arg row , col, .                                                        03730000
  374. row = Trunc(row)                                                        03740000
  375. col = Trunc(col)                                                        03750000
  376.                                                                         03760000
  377. /*-----------------------------------------------------------------*/   03770000
  378. /* Calculate binary address.                                       */   03780000
  379. /*-----------------------------------------------------------------*/   03790000
  380.                                                                         03800000
  381. offset = row * fs.scrcols + col                                         03810000
  382. Do While offset < 0; offset = offset + fs.scrrows * fs.scrcols; End     03820000
  383.                                                                         03830000
  384. if fs.14bit then return '11'x || d2c(offset,2)                          03840000
  385.                                                                         03850000
  386. /*-----------------------------------------------------------------*/   03860000
  387. /* Convert to six-bit format. (xxxx111111111111 -> 0011111100111111*/   03870000
  388. /*-----------------------------------------------------------------*/   03880000
  389.                                                                         03890000
  390. 'CALLPIPE var offset'               ,   /* Start with char number.    */03900000
  391.     '| spec 1-* d2c 1.2 right'      ,   /* Convert to binary.         */03910000
  392.     '| spec 1-* c2b 1'              ,   /* Convert to bit string.     */03920000
  393.     '| spec /00/ 1  5.6  3'         ,   /* Place first six bits.      */03930000
  394.            '/00/ 9 11.6 11'         ,   /* Place second six bits.     */03940000
  395.     '| spec 1-* b2c 1'              ,   /* Convert back to binary.    */03950000
  396.     '| xlate *-* 00-3F 40-7F'       ,   /* Translate to coded         */03960000
  397.                 '01-09 C1-C9'       ,   /*   buffer address.          */03970000
  398.                 '11-19 D1-D9'       ,   /*                            */03980000
  399.                 '22-29 E2-E9'       ,   /*                            */03990000
  400.                 '30-39 F0-F9'       ,   /*                            */04000000
  401.     '| spec x11 1 1.2 2'            ,   /* Prefix with SBA order.     */04010000
  402.     '| var offset'                      /* Put back in variable.      */04020000
  403.                                                                         04030000
  404. Return offset                                                           04040000
  405.                                                                         04050000
  406.                                                                         04060000
  407.                                                                         04070000
  408. /* --------------------------------------------------------------- FIELD04080000
  409.  * Generate the 3270 DS sequence for extended field attributes          04090000
  410.  * (if available).                                                      04100000
  411.  */                                                                     04110000
  412. FIELD:    Procedure Expose fs.                                          04120000
  413. a = '00'x                                                               04130000
  414. b = '00'x                                                               04140000
  415. c = 'F1'x                                                               04150000
  416. i = 1                                                                   04160000
  417. Do While Arg(i) ^= ""                                                   04170000
  418.     Select  /*  at  */                                                  04180000
  419.         When Abbrev("PROTECTED",Arg(i),2)   Then a = bitor(a,'20'x)     04190000
  420.         When Abbrev("SKIP",Arg(i),1)        Then a = bitor(a,'10'x)     04200000
  421.         When Abbrev("NODISPLAY",Arg(i),1)   Then a = bitor(a,'0C'x)     04210000
  422.         When Abbrev("HIGH",Arg(i),1)        Then a = bitor(a,'08'x)     04220000
  423.         When Abbrev("BLINK",Arg(i),3)       Then b = bitor(b,'01'x)     04230000
  424.         When Abbrev("REVERSE",Arg(i),3)     Then b = bitor(b,'02'x)     04240000
  425.         When Abbrev("UNDERLINE",Arg(i),1)   Then b = bitor(b,'04'x)     04250000
  426.         When Abbrev("BLUE",Arg(i),3)        Then c = 'F1'x              04260000
  427.         When Abbrev("RED",Arg(i),3)         Then c = 'F2'x              04270000
  428.         When Abbrev("PINK",Arg(i),1)        Then c = 'F3'x              04280000
  429.         When Abbrev("GREEN",Arg(i),1)       Then c = 'F4'x              04290000
  430.         When Abbrev("TURQUOISE",Arg(i),1)   Then c = 'F5'x              04300000
  431.         When Abbrev("YELLOW",Arg(i),1)      Then c = 'F6'x              04310000
  432.         When Abbrev("WHITE",Arg(i),1)       Then c = 'F7'x              04320000
  433.         Otherwise nop                                                   04330000
  434.         End  /*  Select  at  */                                         04340000
  435.     i = i + 1                                                           04350000
  436.     End  /*  Do  While  */                                              04360000
  437.                                                                         04370000
  438. If  ^fs.color   | ,                                                     04380000
  439.     ^fs.exthi   Then    Return '1D'x || bitor(a,'40'x)                  04390000
  440.                 Else    Return '2902'x || ,                             04400000
  441.                                'C0'x   || bitor(a,'40'x) || ,           04410000
  442.                                '42'x   || bitor(c,'40'x)                04420000
  443.                                                                         04430000
  444.                                                                         04440000
  445.                                                                         04450000
  446. /* ---------------------------------------------------------------- GTAG04460000
  447.  *  Match the gopher data type to a national language  "tag"  string.   04470000
  448.  */                                                                     04480000
  449. GTAG:     Procedure                                                     04490000
  450.                                                                         04500000
  451. Parse Arg type                                                          04510000
  452.                                                                         04520000
  453.     Select  /*  type  */                                                04530000
  454.                                                                         04540000
  455.         When type = '0' Then _tag = 700                                 04550000
  456.         When type = '1' Then _tag = 701                                 04560000
  457.         When type = '2' Then _tag = 702                                 04570000
  458.         When type = '3' Then _tag = 703                                 04580000
  459.         When type = '4' Then _tag = 704                                 04590000
  460.         When type = '5' Then _tag = 705                                 04600000
  461.         When type = '6' Then _tag = 706                                 04610000
  462.         When type = '7' Then _tag = 707                                 04620000
  463.         When type = '8' Then _tag = 708                                 04630000
  464.         When type = '9' Then _tag = 709                                 04640000
  465.         When type = 's' Then _tag = 767                                 04650000
  466.         When type = 'r' Then _tag = 766                                 04660000
  467.         When type = 'v' Then _tag = 770                                 04670000
  468.         When type = 'i' Then _tag = 757                                 04680000
  469.         When type = 'I' Then _tag = 725                                 04690000
  470.         When type = 'g' Then _tag = 755                                 04700000
  471.         When type = 'M' Then _tag = 729                                 04710000
  472.         When type = 'T' Then _tag = 736                                 04720000
  473.                                                                         04730000
  474.         When type = ':' Then _tag = 710                                 04740000
  475.         When type = ';' Then _tag = 711                                 04750000
  476.         When type = '<' Then _tag = 712                                 04760000
  477.                                                                         04770000
  478.         Otherwise            _tag = 908                                 04780000
  479.                                                                         04790000
  480.         End  /*  Select  type  */                                       04800000
  481.                                                                         04810000
  482. 'CALLPIPE COMMAND XMITMSG' _tag 'TYPE (APPLID GOP NOHEADER | VAR TAG'   04820000
  483.                                                                         04830000
  484. Return tag                                                              04840000
  485.                                                                         04850000
  486.                                                                         04860000
  487.                                                                         04870000
  488. /* ---------------------------------------------------------------- HELP04880000
  489.  *  Invoke CMS HELP for GOPHER BROWSER (the menu browser).              04890000
  490.  */                                                                     04900000
  491. HELP:     Procedure Expose fs. message.                                 04910000
  492.                                                                         04920000
  493. If fs.tube ^= "" Then                                                   04930000
  494.     'CALLPIPE COMMAND HELP GOPHER BROWSER (ALL NOSCREEN' ,              04940000
  495.         '| GOPCLIFV BROWSER HELP' ,                                     04950000
  496.             '| STEM MESSAGE. APPEND'                                    04960000
  497.                                                                         04970000
  498. Else Do                                                                 04980000
  499.     Address "COMMAND" 'HELP GOPHER BROWSER'                             04990000
  500.     Address "COMMAND" 'VMFCLEAR'                                        05000000
  501.     End  /*  Else  Do  */                                               05010000
  502.                                                                         05020000
  503. Return                                                                  05030000
  504.                                                                         05040000
  505.